Skip to main content

Linux 常用指令

Linux 常用指令

ls 列出目錄中的文件和子目錄

ls $OPTION
  • -l 詳細顯示目錄內容
  • -a 列出包括隱藏檔在內的所有文件
  • -la 列出所有文件和子目錄的详细信息,包括隐藏文件
  • -h 顯示文件和目錄的大小以常見單位来顯示
  • <路徑> 列出指定目錄的內容:ls /path/directory
  • lshw 查詢電腦規格
  • lscpu 查詢 CPU 規格

pwd 顯示目前工作目錄的路徑

pwd

cd 變更工作目錄

cd $PATH
  • cd /path/ directory 進入指定目錄
  • cd .. 返回上級目錄
  • cd ~ 返回家目錄

mkdir 建立新目錄

mkdir $FOLDER
  • mkdir new_directory 創建一個名為"new_directory"的新目錄

touch 建立新文件

touch $FILE
  • touch new_file.txt 創建一個名為"new_file.txt"的新文件

rm 刪除文件或目錄

rm $FILE/$FOLDER
  • -i filename 強制刪除
  • -r directory 刪除目錄
  • -d directory 刪除空目錄
  • -rf anything 刪除全部

cp 複製文件或目錄

cp $FILE $PATH
  • cp file.txt new_location/ 將文件 file.txt 複製到 new_location/ 目錄下

scp 在不同的 Linux 主機之間複製檔案

scp $PATH $PATH
  • 在不同 Linux 主機之間使用 scp 指令複製檔案時,遠端的 Linux 主機必須要開啟 SSH 遠端登入服務,否則無法使用 scp 指令複製檔案
  • scp [帳號@來源主機]:來源檔案 目的地
  • scp [user_name@riverye.com](mailto:user_name@riverye.com):/home/data/file.pdf ~/Desktop
  • scp ~/Desktop/file.pdf [user_name@riverye.com](mailto:user_name@riverye.com):/home/data/

mv 移動或重新命名文件或目錄

mv $FILE $FOLDER
  • mv old_file.txt new_location/ 將文件 old_file.txt 移動到 new_location/ 目錄下
  • mv old_file.txt new_name.txt 將文件 old_file.txt 重命名為 new_name.txt

Linux 環境管理指令

df 查看磁碟與目錄的容量

df -h
Filesystem        Size    Used   Avail Capacity iused ifree %iused  Mounted on
/dev/disk1s1s1 466Gi 9.2Gi 186Gi 5% 390k 2.0G 0% /
devfs 188Ki 188Ki 0Bi 100% 650 0 100% /dev
/dev/disk1s3 466Gi 1.9Gi 186Gi 2% 3.0k 2.0G 0% /System/Volumes/Preboot
/dev/disk1s5 466Gi 5.0Gi 186Gi 3% 5 2.0G 0% /System/Volumes/VM
/dev/disk1s6 466Gi 10Mi 186Gi 1% 18 2.0G 0% /System/Volumes/Update
/dev/disk1s2 466Gi 262Gi 186Gi 59% 1.5M 2.0G 0% /System/Volumes/Data
map auto_home 0Bi 0Bi 0Bi 100% 0 0 - /System/Volumes/Data/home

lsblk 列出系統上的所有磁碟列表

lsblk $OPTION $DEVICE
  • -d 僅列出磁碟本身,並不會列出該磁碟的分割資料
  • -f 同時列出該磁碟內的檔案系統名稱
  • -i 使用 ASCII 的線段輸出,不要使用複雜的編碼 (再某些環境下很有用)
  • -m 同時輸出該裝置在 /dev 底下的權限資料 (rwx 的資料)
  • -p 列出該裝置的完整檔名!而不是僅列出最後的名字而已。
  • -t 列出該磁碟裝置的詳細資料,包括磁碟佇列機制、預讀寫的資料量大小等

mount 檔案系統掛載與卸載

mount $OPTION
  • -a 依照設定檔 /etc/fstab 的資料將所有未掛載的磁碟都掛載上來
  • -l 單純的輸入 mount 會顯示目前掛載的資訊。加上 -l 可增列 Label 名稱
  • -t 可以加上檔案系統種類來指定欲掛載的類型
    • mount [-t 檔案系統] LABEL='' 掛載點
    • mount [-t 檔案系統] UUID='' 掛載點
    • mount [-t 檔案系統] 裝置檔名 掛載點

umount 將裝置檔案卸載

umount $OPTIONS
  • -f 強制卸載!可用在類似網路檔案系統 (NFS) 無法讀取到的情況下
  • -l 立刻卸載檔案系統,比 -f 還強
  • -n 不更新 /etc/mtab 情況下卸載

free 顯示記憶體使用狀況

free
total        used        free      shared  buff/cache   available
Mem: 977032 182528 310736 864 483768 634892
Swap: 0 0 0

du 掃描當前目錄結構,並逐一累加檔案大小

du
  • -h 轉成人類可讀的資料大小
  • -m 以 MB 作為基本單位
8.0K    ./.ssh
4.0K ./.cache
28K .

top 即時持續地顯示運行中的程式資訊

top
top - 06:48:27 up 5 min,  1 user,  load average: 0.00, 0.05, 0.02
Tasks: 98 total, 1 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 954.1 total, 303.5 free, 174.2 used, 476.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 624.0 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2121 ubuntu 20 0 13696 5428 3968 S 0.3 0.6 0:00.02 sshd
1 root 20 0 103732 12724 8540 S 0.0 1.3 0:04.21 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_flushwq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
7 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0-events
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
9 root 20 0 0 0 0 I 0.0 0.0 0:00.04 kworker/u30:0-events_unbound
10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq

ps 顯示運行中的程式相關資訊

ps
  • ps aux 顯示所有程式,以用戶做區分
  • ps aux | grep chrome
PID TTY          TIME CMD
2122 pts/0 00:00:00 bash
2136 pts/0 00:00:00 ps

kill 強制終止程式執行

kill $PID
  • -9 強制刪除

lsof 列出當前被開啟的文件資訊

lsof $PATH
  • -u $USERNAME 列出指定使用者打開的文件訊息
  • -d $PATH 列出目錄下被開啟的文件訊息
  • -D $PATH 列出目錄下被開啟的文件訊息 (含底下的目錄)
  • -p $PID 列出指定 PID 所開啟的文件訊息
  • -i $PORT 列出指定 port 的連線訊息

cpulimit 限制 CPU 使用量

cpulimit
  • MacOS、Linux 原生不支援這指令
    • brew install cpulimit
  • cpulimit -l 70 command 限制 CPU 使用上限為 70%

Linux 文件管理指令

cat 顯示文件內容

cat $FILE
  • -n 顯示行數
  • cat file1 > target_file 將多個文件覆蓋到目標文件中: >
  • cat file1 >> target_file 將多個文件追加到目標文件中: >>
  • cat unsorted.txt | sort | uniq uniq 用於去除連續重複,可以對文件進行排序和去除連續重複 cat data.txt | awk '{print $1}’ #取出顯示每行的第一個字段

tac 反過來印出 cat 的內容

tac $FILE

head 看該檔案頭部

head $FILE
  • head -n 30 file 顯示前 N 行的訊息
  • head -c 25 file 顯示前 N bytes 的字元

tail 看該檔案尾部

tail $FILE

more/less 逐頁查看文件內容

more/less $FILE
  • more file.txt 逐頁查看文件 file.txt 的內容
  • less file.txt 使用 less 以分頁的方式顯示文件內容

grep 在文件中用於搜索和過濾文件資訊

grep $OPTION $WORD $FILE
  • -n 顯示所找到的字串位於文件的第幾行
  • -A 顯示匹配結果的前幾行
  • -B 顯示匹配結果的後幾行
  • -v 顯示不符合條件的行

chmod 更改文件或目錄的權限

chmod $PERMISSION $FILE/$FOLDER
  • chmod 755 file.txt 將文件 file.txt 的權限設置為 755

chown - 更改文件或目錄的所有者

chown $USER:$GROUP $FILE
  • chown user:group file.txt 將文件 file.txt 的所有者設置為 user 並指定 group

sort 用於對文件內容進行排序

sort $FILE

sed 對檔案中的文字執行取代操作

sed
  • sed 's/舊文字/新文字/g' 文件 替換文字
  • sed '/要刪除的文字/d' 文件 刪除行
  • sed '/插入位置/a 新文字' 文件 插入文字
  • sed -n '行號p' 文件 顯示特定行
  • sed -e '操作1' -e '操作2' 文件 多個操作
  • sed 's/[0-9]+/替換的數字/g' 文件 正則表達式

wc 計算指定檔案內容的換行數、字數與位元組數

wc
  • -c #位元組數
  • -l #行數
  • -w #字數
  • -m #字元數
  • -L #最長行的長度

Linux 網路指令

tcpdump 擷取封包

tcpdump
  • i $INTERFACE 指定網卡名稱
  • -c $NUMBER 指定欲監聽的封包數
  • -Q in|out|inout 選擇要擷取封包的傳輸方向
  • -w $FILE 將擷取的封包存成檔案
  • HOSTNAME $IP 指定主機名稱或IP
  • $PORT 指定連結埠

dig domain 查詢工具

dig $HOSTNAME
  • dig -x target 反解析: -x target

nc 處理 TCP/UDP 的工具 netcat

nc $IP $PORT
  • -l port #nc -l localhost 8888
  • ip_address port #nc localhost 8888
  • nc -w timeout_in_seconds ipaddress port #nc -w 10 localhost 9527
  • nc -v -z ip_address port #nc -n -v -z 192.168.1.1 80-100

netstat 確認 listen 的 port

netstat
  • -a 顯示所有活動中的 TCP 連線,及 TCP and UDP ports 上聆聽中的資訊
  • -n 顯示活動的 TCP 連線,但是 ip address 和 port 編號沒有被解釋翻譯成為名稱說明

telnet 建立網路連接

telnet $IP $PORT

curl 透過 HTTP 下載和上傳檔案

curl $OPTIONS $URL
  • -o $FILE 搭配欲下載的檔名和網址

  • -O 直接使用下載網址的檔案檔名來命名下載的檔案

  • -C 有可能在下載過程中被中斷,若是想要從中斷的地方繼續的話

  • -L 跟隨著網址 301/302 redirect

  • --trace-ascii $FILENAME 追蹤整個 curl 過程,將結果存入 FILE

  • -X/--request [GET|POST|PUT|DELETE|PATCH] 使用指定的 HTTP method

  • GET 單一和全部資源

    curl -X GET "http://www.example.com/api/resources"
  • POST JSON 資料

    curl -X POST -H "Content-Type: application/json" -d '{"status" : false, "name" : "Jack"}' "http://www.example.com/api/resources"
  • PUT JSON 資料

    curl -X PUT -H "Content-Type: application/json" -d '{"status" : false }' "http://www.example.com/api/resources"
  • DELETE 資源

    curl -X DELETE "http://www.example.com/api/resources/1"
  • 攜帶 cookie

    curl --cookie "name=Jack" http://www.example.com
  • 從檔案讀取 cookie

    curl --cookie stored_cookies_file_path http://www.example.com
  • 攜帶 User Agent

    curl --user-agent "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)" http://www.example.com
  • Basic Authentication --user username:password

    curl -i --user secret:vary_secret http://www.example.com/api/resources