Linux shell 常用指令

Bash 內建指令

alias:定義指令及參數別名

alias [別名]='[指令]'
alias ll='ls -al'
參數 說明
-p 列出目前所有別名設定

cd:切換目錄

cd /tmp     # 進入 /tmp
cd ..       # 返回上一層目錄
cd ~        # 返回家目錄
cd -        # 返回上一個所在的目錄

declare:宣告 shell 變數

sum=100+200
echo $sum   # 輸出 100+200(非運算)

declare -i sum=100+300+50
echo $sum   # 輸出 450(整數運算)
參數 說明
-i 指定變數為整數,自動計算運算式
-p 顯示變數的宣告方式
-r 宣告唯讀變數
-x 將變數輸出為環境變數(等同於 export

enable:啟用或停用 shell 內建指令

enable -a     # 顯示所有啟用中的內建指令
enable -n cd  # 停用內建的 cd 指令
參數 說明
-a 顯示所有可用內建指令
-n 停用指定內建指令

export:宣告環境變數

export myname=jack
echo $myname

export -p  # 列出所有環境變數
參數 說明
-f 宣告的名稱為函數名稱
-n 取消變數的匯出
-p 顯示所有已匯出的變數

help:查看 bash 內建指令說明

help cd

history:顯示歷史指令紀錄

history 5     # 顯示最近 5 筆歷史紀錄
history -c    # 清除所有歷史紀錄
history -d 10 # 刪除第 10 筆歷史紀錄
參數 說明
-c 清除所有歷史記錄
-d 編號 刪除指定編號的歷史指令
-n 檔案 讀入尚未讀入的歷史記錄
-r 檔案 讀入指定歷史檔,但不列入當前 session
-w 檔案 將目前記錄寫入歷史檔案

unset:移除變數或函式

num=1
echo $num
unset num
echo $num  # 無輸出
參數 說明
-f 僅移除函式
-v 僅移除變數(預設)

常用指令

一般操作

指令 說明
cd 切換目錄
clear 清除畫面內容
echo 顯示文字
exit 離開目前的 shell
help 顯示 shell 內建說明
history 顯示輸入過的指令歷史
ls 列出目錄內容
man 顯示線上說明手冊

設定類指令

指令 說明
alias 定義命令別名
at 指定未來時間執行指令
export 宣告環境變數
ln 建立檔案連結(符號連結或硬連結)
passwd 修改使用者密碼

檔案操作

指令 說明
cat 顯示檔案內容
cp 複製檔案或目錄
df 顯示磁碟使用空間
diff 比較兩個檔案差異
du 顯示目錄或檔案大小
find 搜尋符合條件的檔案
grep 搜尋檔案中的特定字串
head 顯示檔案開頭內容
less 分頁方式顯示檔案
more 類似 less,較簡易
mv 移動或重新命名檔案
pwd 顯示目前所在目錄
rm 刪除檔案或目錄

打包與壓縮

指令 說明
bzip2 壓縮為 .bz2 格式
gzip 壓縮為 .gz 格式
tar 打包與壓縮檔案
zip 壓縮為 .zip 格式

其他

指令 說明
cal 顯示月曆
date 顯示或設定系統日期時間

系統管理常用指令

指令 說明
chmod 改變檔案或目錄權限
chown 變更檔案或目錄擁有者
free 顯示記憶體使用狀況
groupadd 新增群組
groupdel 刪除群組
halt 關閉系統
ifconfig 設定/查看網路介面(較舊系統使用)
ip 查看或設定網路(建議用於新系統)
init 改變系統執行層級(大多使用 systemctl 取代)
kill 傳送訊號終止程序
last 顯示最近登入紀錄
mount 掛載檔案系統
netstat 顯示網路狀態(已過時,建議改用 ss
ping 測試網路連線狀態
ps 顯示目前執行中的程序
reboot 重新開機
route 顯示/設定路由表(建議改用 ip route
rpm 管理 RPM 套件(RedHat/CentOS 系統)
shutdown 關機或重新啟動系統
sync 將記憶體資料同步寫入磁碟
umount 卸載檔案系統
useradd 新增使用者帳號
userdel 刪除使用者帳號
w 顯示登入使用者與其動態資訊
who 顯示目前登入的使用者

資源查看指令:top, htop, uptime, free, ps, df

top

top

顯示即時的系統資源狀態,包括 CPU 使用率、記憶體使用量、SWAP 空間和正在執行的進程清單。

htop (需另外安裝)

htoptop 的進階版本,介面更友善,支援鍵盤操作。

uptime

uptime

顯示系統啟動時間與平均負載。

free

free
free -m   # 以 MB 顯示
free -h   # 以可讀格式顯示(K、M、G)

顯示系統記憶體使用狀況。

ps

ps
ps -a
ps -ax
ps -axf

列出當前系統的進程資訊,支援多種參數過濾與排序。

df

df
df -h    # 以可讀格式顯示磁碟空間

顯示磁碟分區使用情況。


清單查詢:ls / ll

ls

列出指定目錄下的文件與目錄,常用選項:

  • -a:顯示所有文件(含隱藏檔)
  • -l:長列表格式顯示詳細資訊(權限、擁有者、大小、時間)
  • -h:與 -l 合用,以易讀大小單位顯示檔案大小
  • -S:依檔案大小排序
  • -t:依修改時間排序(最新在前)
  • -r:反向排序
  • -R:遞迴列出子目錄
  • -d:顯示目錄本身資訊,而非內容
  • -i:顯示 inode 編號
  • -F:在檔名後標示類型(如目錄後加 /

ll

通常為 alias ll='ls -l',顯示詳細資訊的列表格式。


列印工作路徑 pwd

pwd

顯示目前所在的完整工作目錄路徑。


顯示文件內容:cat / less / more / head / tail

  • cat:直接輸出整個檔案內容

    ​​cat file1 file2   # 連接多個文件內容顯示
    ​​cat file1 > file2 # 複製 file1 內容覆蓋到 file2
    ​​cat file.txt | grep "pattern" # 篩選符合條件的行
    
  • less:分頁查看檔案,可滾動與搜尋

  • more:較簡單的分頁查看工具

  • head:預設顯示檔案前 10 行

  • tail:預設顯示檔案後 10 行


查詢 DNS 記錄:nslookup

nslookup domain_name

查詢域名對應的 IP,亦可查詢特定 DNS 紀錄如 MX、NS,或指定 DNS 伺服器。


查看 / 變更文件擴展屬性:lsattr / chattr

lsattr

列出文件或目錄的擴展屬性。

常用選項:

  • -a:包括隱藏檔案
  • -d:只顯示目錄本身屬性
  • -R:遞迴顯示目錄內容屬性
  • -Z:顯示 SELinux 安全上下文

chattr

設置或取消文件/目錄屬性,如只讀、不可刪除等。

常用參數:

  • -R:遞迴修改
  • +:新增屬性
  • -:移除屬性
  • a:只能附加寫入(append only)
  • i:不可修改或刪除(immutable)

範例:

chattr +i file.txt  # 設為不可更改
chattr -i file.txt  # 取消不可更改屬性

搜尋文件與目錄:find

基本語法:

find [搜尋路徑] [條件] [動作]

常用條件:

  • -name "pattern":依檔名搜尋(支援通配符)
  • -type [f|d|l|s]:檔案類型 (f:檔案, d:目錄, l:符號連結)
  • -mtime +N:N 天前修改(+N:超過 N 天,-N:少於 N 天)
  • -newermt "YYYY-MM-DD":修改時間晚於指定日期
  • -size +10M:檔案大於 10MB
  • -exec command {} \;:對搜尋結果執行命令

範例:

find /path/to/directory -type f -name "*.txt" -newermt "2022-12-31"
find /path/to/directory -type f -not \( -name "*.jpg" -or -name "*.png" \) -newermt 2022-12-01 ! -newermt 2022-12-31
find /path/to/search -type f -mtime -30
find /path/to/search -size +200M -exec ls -lh {} \;
find /path/to/search -type f -name "*.txt" -exec rm {} \;

文字搜尋工具:grep

基本語法:

grep [選項] pattern [file...]

常用選項:

  • -i:忽略大小寫
  • -v:反向匹配,顯示不含 pattern 的行
  • -c:只顯示匹配行數
  • -n:顯示行號
  • -r:遞迴搜尋目錄
  • -w:只匹配整詞
  • -e:指定多重模式
  • -f:從文件讀取模式

範例:

grep '^foo' file.txt
find /path -type f -exec grep -H "medtopstore" {} \;

建立目錄與符號連結:mkdir / ln

mkdir

mkdir example           # 建立單一目錄
mkdir test logs         # 建立多個目錄
mkdir -p projects/{src,lib,test}  # 建立多級目錄

ln

ln -s 目標路徑 連結名稱  # 建立符號連結(捷徑)

範例:

ln -s /data/lnmp/www /data/wwwroot

創建或更新檔案時間戳:touch

touch example.txt
touch -t 202202261212 example.txt  # 指定時間戳記

常用參數:

  • -a:只更新訪問時間
  • -m:只更新修改時間
  • -c:檔案不存在不建立
  • -d:指定日期時間
  • -r:使用其他檔案時間戳

刪除文件或目錄:rm

rm file.txt
rm -r directory    # 遞迴刪除目錄
rm -f file.txt     # 強制刪除,不提示
rm -i file.txt     # 互動式刪除,需確認

更改權限:chmod

權限可用數字或符號表示:

  • 數字範例:chmod 755 file (擁有者 rwx,群組和其他人 rx)
  • 符號範例:chmod u+rw file(擁有者加讀寫權限)

參數:

  • u:擁有者(user)
  • g:群組(group)
  • o:其他人(others)
  • a:全部(all)
  • +:增加權限
  • -:移除權限
  • =:設定權限

權限:

  • r:讀取(4)
  • w:寫入(2)
  • x:執行(1)

範例:

chmod u+rw file.txt
chmod a+rwx dir
chmod 644 file.txt
chmod -R a+rwx dir

find /path -type d -print0 | xargs -0 chmod 0755  # 目錄權限
find /path -type f -print0 | xargs -0 chmod 0644  # 檔案權限

更改擁有者與群組:chown

語法:

chown [選項] 新擁有者:新群組 檔案或目錄

常用選項:

  • -R:遞迴更改子目錄和檔案

範例:

sudo chown nginx:www-data /var/log/nginx/access.log
chown user file.txt
chown user:group file.txt

查看磁碟使用狀況:df

語法:

df [選項] [檔案系統或路徑]

常用選項:

  • -h:人類可讀格式
  • -T:顯示檔案系統類型
  • -i:顯示 inode 使用狀況
  • -a:包含所有檔案系統
  • -x:排除指定檔案系統

範例:

df -h
df /dev/sda1

壓縮資料夾:zip

安裝:

sudo dnf install zip

常用選項:

  • -r:遞迴壓縮目錄
  • -q:安靜模式
  • -9:最高壓縮率
  • -j:不包含路徑,只壓縮檔案
  • -u:更新已壓縮檔
  • -l:列出檔案清單,不壓縮
  • -v:顯示壓縮過程
  • -d:解壓縮目錄
  • -x:排除檔案
  • -T:測試壓縮檔完整性
  • -h:顯示幫助

範例:

zip -r output.zip source_folder -x "*.jpg" "*.png" "*.gif"