Shell 是什麼
Shell 是使用者和作業系統互動的介面,平常在終端裡輸入的指令,通常都會先經過 shell 解讀,再執行。
會和使用者直接互動的 shell。像是打開終端後,直接在裡面打指令,這種通常就是 interactive shell。
不直接和使用者互動,而是拿來執行 script。例如執行 bash script.sh,這種通常就是 non-interactive shell。
使用者登入主機系統時啟動的 shell,例如透過 ssh 登入的主機,這類 shell 會讀取登入相關的設定檔。
不是登入時啟動的 shell,例如多開 screen 或 tmux,這通常就是 non-login shell。
| 設定檔 | 適用範圍 |
|---|---|
~/.bashrc |
當前使用者,每次開新終端機,通常給 interactive non-login bash 使用 |
~/.bash_profile |
當前使用者,登入時執行一次,通常和 login shell 有關 |
/etc/profile |
所有使用者,登入時執行,系統全域 login shell 設定 |
| command | 功能 | ex |
|---|---|---|
cd |
變更目前位置 | cd <path> |
ls |
顯示指定/當前資料夾有多少檔案 | ls (flags) (path) |
mkdir |
創建資料夾 | mkdir <name> |
mv |
移動或重新命名檔案 | mv a.txt /b / mv a.txt b.txt |
cp |
複製檔案 | |
rm |
刪除檔案 | rm (flags) [file] / rm file.txt / rm -r folder |
pwd |
當前目錄位置 | |
source / . |
在目前 shell 環境讀入並執行,不會開新的 shell | source a.sh |
./ |
./a.sh執行目前目錄下的 a.sh |
|
./ 本身代表目前目錄 |
./a.sh |
|
| 路徑參數 | ||
. |
當前目錄(僅在當路徑狀況下) | |
.. |
上一層資料夾位置 | |
- |
上一個資料夾位置 |
# ls 的參數
ls -l # 完整資訊格式(權限、大小、日期)
ls -a # 顯示隱藏檔(就是 . 開頭)
ls -lh # 檔案大小改 KB/MB/GB 這種格式 不是用 bit 計算
ls -lt # 依修改時間排序
ls -lS # 依檔案大小排序
# 別名 alias
# 打 ls 其實是輸出 ls -lA
# 打 ll 其實是輸出 ls -l
alias 自訂名稱='指令'
unalias name
unalias -a # DEL ALL
# 重開就不見了
~/.bash_aliases # 把別名寫到這裡面
source ~/.bashrc # 立即執行
cat |
列出檔案內容 |
|---|---|
more <file> / less <file> |
用分頁的方式瀏覽內容(兩者有些微差異,less 不會一次讀完所有資料,開比較快,他只讀檔案目前會顯示的部分,動態讀取的意思,more 會一次讀取完,大檔案可能比較久) |
tail (flags) <file> |
從底部開始列出檔案部分內容 |
vi / vim (file) |
編輯檔案 |
nano |
另一個編輯檔案的 |
grep <flags> <關鍵字> <file> |
查找關鍵字 |
du -sh |
看指定目錄內的檔案總大小 |
df -h |
查看目前已掛載的硬碟使用狀況 |
| 這下面的應該比較用不到 | |
tar |
壓/解壓縮、打/解包 |
cut |
把一行文字切開,只拿你要的那一塊 |
awk |
進階版的切法,可以順便幫你算數學或過濾 |
sed |
自動把 A 換成 B |
diff |
比對兩個檔案哪裡不一樣 |
type |
這個指令檔案在哪/是什麼樣的指令 |
which |
這個指令的檔案在哪 |