Try   HackMD

Linux 常用指令

tags: RD1
目錄

grep

  • 搜尋關鍵字

grep 這個指令名稱其實是來自於正規表示法的 g/RE/p,其意義是代表以正規表示法全域搜尋並列印出來(globally search for RE and print it)。

# 在 /etc/os-release 檔案中搜尋 Ubuntu 關鍵字
grep Ubuntu /etc/os-release

NAME="Ubuntu"
PRETTY_NAME="Ubuntu 18.04.3 LTS"
------------------------------------------
# 在 /etc/*.conf 中搜尋 network 關鍵字
grep network /etc/*.conf

ltrace.conf:hex(uint) inet_network(string);
nsswitch.conf:networks:       files
sysctl.conf:# Additional settings - these settings can improve the network
sysctl.conf:# security of the host and prevent against some network attacks
sysctl.conf:# redirection. Some network environments, however, require that these
------------------------------------------
# 篩選含有 network 關鍵字的檔案名稱
ls /etc/ | grep network

network
networkd-dispatcher
networks
  • 不分大小寫
# 不分大小寫
grep -i Ubuntu /etc/os-release
-----------------------------------------
# 標示行號
grep -n Ubuntu /etc/os-release

1:NAME="Ubuntu"
5:PRETTY_NAME="Ubuntu 18.04.3 LTS"
  • 反向匹配
# 顯示不包含 Ubuntu 關鍵字的行
grep -v Ubuntu /etc/os-release
  • 遞迴搜尋檔案(找資料夾裡面所有的檔案)
# 在 /etc/ 下所有檔案中搜尋 ubuntu
grep -r ubuntu /etc/
-----------------------------------------
# 在所有 *.conf 中尋找 ubuntu
grep -r --include="*.conf" ubuntu /etc/
-----------------------------------------
# 不顯示錯誤訊息
grep -r ubuntu /etc/ 2>/dev/null
  • 顯示前後幾行
# 多顯示後一行
grep -A 1 Ubuntu /etc/os-release

# 多顯示前一行
grep -B 1 Ubuntu /etc/os-release

# 多顯示前後各一行
grep -C 1 Ubuntu /etc/os-release
  • 顏色標示
grep --color=always 檔名
  • 正規表示法
# a 開頭
ls | grep "^a"

# b 結尾
ls | grep "b$"

# a 或 b 開頭
ls | grep "^[ab]"

# a 或 b 結尾
ls | grep "[ab]$"
-----------------------------------------
# a 開頭,接著 b 出現零次以上
ls | grep "^ab*"

# a 開頭,接著 b 出現零次或一次
ls | grep "^ab?"

# a 開頭,接著 b 出現一次以上
ls | grep "^ab+"
-----------------------------------------
# 含有 ab 或 cd
ls | grep "ab|cd"

# 含有 ab 或 cd(另一種寫法,作用相同)
ls | grep -E "ab|cd"
-----------------------------------------
# 含有 net 這個單字
ls | grep "<net>"

issue.net

awk

awk '條件類型1{動作1} 條件類型2{動作2} ...' filename

awk 可以處理後續接的檔案,也可以讀取來自前個指令的 standard output 。awk 主要是處理『每一行的欄位內的資料』,而預設的『欄位的分隔符號為 "空白鍵" 或 "[tab]鍵" 』

例一

brave_chen@CY0015923-BRAVE-CHEN cat transportation.txt
A001 腳踏車 AEADDDEE9931
A002 機車 FDEAEDFJK3394
A003 火車 FJDKE3AK34940
A004 超機車 FFJJEEE99300
A005 飛機 AIRP33333900
A006 坦克 TANK00000001
brave_chen@CY0015923-BRAVE-CHEN awk '{print $2","$3}' transportation.txt
腳踏車,AEADDDEE9931
機車,FDEAEDFJK3394
火車,FJDKE3AK34940
超機車,FFJJEEE99300
飛機,AIRP33333900
坦克,TANK00000001

由以上的例子可以知道每一行的每個欄位都是有變數名稱的,那就是 $1, $2 等變數名稱。以上面的例子來說,A001,A002就是$1,第一欄的意思,至於AEADDDEE9931,FDEAEDFJK3394就是$3,第三欄的意思,其他的就依此類推。另外$0 代表『一整列資料』的意思。

變數名稱 代表意義
NF 每一行 ($0) 擁有的欄位總數
NR 目前 awk 所處理的是『第幾行』資料
FS 目前的分隔字元,預設是空白鍵

例二

brave_chen@CY0015923-BRAVE-CHEN awk '{print $1 "\t lines: " NR "\t columns: " NF}' transportation.txt
A001	 lines: 1	 columns: 3
A002	 lines: 2	 columns: 3
A003	 lines: 3	 columns: 3
A004	 lines: 4	 columns: 3
A005	 lines: 5	 columns: 3
A006	 lines: 6	 columns: 3

例三

brave_chen@CY0015923-BRAVE-CHEN cat transportation.txt
A001,腳踏車,AEADDDEE9931
A002,機車,FDEAEDFJK3394
A003,火車,FJDKE3AK34940
A004,超機車,FFJJEEE99300
A005,飛機,AIRP33333900
A006,坦克,TANK00000001
brave_chen@CY0015923-BRAVE-CHEN awk '{FS=","} {print $1" "$3}' transportation.txt
A001,腳踏車,AEADDDEE9931
A002 FDEAEDFJK3394
A003 FJDKE3AK34940
A004 FFJJEEE99300
A005 AIRP33333900
A006 TANK00000001

有趣吧!不過,怎麼第一行沒有正確的顯示出來呢?這是因為我們讀入第一行的時候,那些變數 $1, $2 預設還是以空白鍵為分隔的,所以雖然我們定義了 FS=":" 了, 但是卻僅能在第二行後才開始生效。那麼怎麼辦呢?我們可以預先設定 awk 的變數啊! 利用 BEGIN 這個關鍵字喔!這樣做:

brave_chen@CY0015923-BRAVE-CHEN awk 'BEGIN{FS=","} {print $1" "$3}' transportation.txt
A001 AEADDDEE9931
A002 FDEAEDFJK3394
A003 FJDKE3AK34940
A004 FFJJEEE99300
A005 AIRP33333900
A006 TANK00000001

sed

sed (stream editor) 可以分析 Standard Input (STDIN) 的資料,
進行取代、刪除、新增、擷取特定行等處理後,再輸出到 standrad out (STDOUT)
不會對檔案本身進行修改只是輸出給你看

  • sed [-nefr] [動作]
-n  :silent模式。在 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到  螢幕上。
      但如果加上 -n 參數後,則只有經過 sed 特殊處理的那一行(或者動作)才會被列出來。
-e  :直接在指令列模式上進行 sed 的動作編輯;
-f  :-f filename 可以執行 filename 內的 sed 動作;
-r  :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i  :直接修改讀取的檔案內容,而不是由螢幕輸出。
  • [n1[,n2]]function
    • n1, n2 :選擇進行動作的行數,例如『10,20[動作行為] 』
a   :新增, a 的後面可以接字串,這些字串會在目前的下一行出現。
c   :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行。
d   :刪除, d 後面通常不接任何字串;
i   :插入, i 的後面可以接字串,這些字串會在目前的上一行出現;
p   :列印,將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作。
s   :取代, s 的動作可以搭配正規表示法。例如 1,20s/old/new/g 。
  • 指令形式
sed -n 's/item/Items/p' test.txt //取代所有item並且只印出被修改的行

上述指令中的界定符/可以被代換成任意符號如: |

chmod

chown

變更檔案及目錄擁有者與群組
鳥哥
在 Linux 系統上的檔案與目錄都有擁有者以及群組的屬性質,我們可以透過 ls 的輸出來查看每個檔案與目錄的擁有者與群組:

ls -l


ls -l 的輸出中,第三欄與第四欄就是檔案或目錄的擁有者與群組名稱,例如這裡的 log 目錄其擁有者就是 bill_chiu,群組就是 admin

# 將 test 的擁有者改為 root
sudo chown root test.txt

這樣就可以將 test.txt 這個檔案的擁有者改為 root

如果要更改檔案或目錄的群組,也可以用 chown 更改:

#將 myfile 的群組改為 root
sudo chown :root  test.txt

chown 的第一個參數若以冒號開頭,就是代表群組名稱的意思,這一行指令就是將 test.txt 這個檔案的群組改為 root。

不過,請記得,要被改變的群組名稱必須要在/etc/group檔案內存在才行,否則就會顯示錯誤!

#將 myfile 的群組改為 everyone
sudo chown :everyone  test.txt

若要同時更改 test.txt 的擁有者與群組,可以這樣寫:

# 同時更改擁有者與群組
sudo chown 666:owner test.txt

ls

功能:列出所在或指定目錄的內容or檔案之相關特性
語法:ls [-選項] [目錄or檔案名稱]

常用選項及其代表之意義
-a : 列出所有檔案名稱,包括以『.』開頭之隱藏檔,如.profile、.login等。
-d : 若參數的為一目錄名稱,則只列出檔案名稱而非目錄之內容。
-l : 列出檔案的詳細資料,包括檔案形態、存取權限、連結數目、擁有 者名稱、群組名稱等。

pwd

印出目前工作目錄之絕對路徑

/Applications/MAMP/htdocs/here

ps

linux命令:ps

這是察看執行中的程式的一個指令,您可以搭配kill指令隨時中斷,刪除不必要的程序

ps [options]
  • -a顯示所有終端機下執行的程序,除了階段作業領導者之外。
  • a顯示現行終端機下的所有程序,包括其他用戶的程序。
  • -A顯示所有程序。
  • -c顯示CLS和PRI欄位。
  • c列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
  • -C<指令名稱>指定執行指令的名稱,並列出該指令的程序的狀況。
  • -d顯示所有程序,但不包括階段作業領導者的程序。
  • -e此參數的效果和指定"A"參數相同。
  • e列出程序時,顯示每個程序所使用的環境變量。
  • -f顯示UID,PPIP,C與STIME欄位。
  • f用ASCII字符顯示樹狀結構,表達程序間的相互關係。
  • -g<群組名稱>此參數的效果和指定"-G"參數相同,當亦能使用階段作業領導者的名稱來指定。
  • g顯示現行終端機下的所有程序,包括群組領導者的程序。
  • -G<群組識別碼>列出屬於該群組的程序的狀況,也可使用群組名稱來指定。
  • h不顯示標題列。
  • -H顯示樹狀結構,表示程序間的相互關係。
  • -j或j採用工作控制的格式顯示程序狀況。
  • -l或l採用詳細的格式來顯示程序狀況。
  • L列出欄位的相關信息。
  • -m或m顯示所有的執行緒。
  • n以數字來表示USER和WCHAN欄位。
  • -N顯示所有的程序,除了執行ps指令終端機下的程序之外。
  • -p<程序識別碼>指定程序識別碼,並列出該程序的狀況。
  • p<程序識別碼>此參數的效果和指定"-p"參數相同,只在列表格式方面稍有差異。
  • r只列出現行終端機正在執行中的程序。
  • -s<階段作業> 指定階段作業的程序識別碼,並列出隸屬該階段作業的程序的狀況。
  • s採用程序信號的格式顯示程序狀況。
  • S列出程序時,包括已中斷的子程序資料。
  • -t<終端機編號>指定終端機編號,並列出屬於該終端機的程序的狀況。
  • t<終端機編號>此參數的效果和指定"-t"參數相同,只在列表格式方面稍有差異。
  • -T顯示現行終端機下的所有程序。
  • -u<用戶識別碼>此參數的效果和指定"-U"參數相同。
  • u以用戶為主的格式來顯示程序狀況。
  • -U<用戶識別碼>列出屬於該用戶的程序的狀況,也可使用用戶名稱來指定。
  • U<用戶名稱>列出屬於該用戶的程序的狀況。
  • v採用虛擬內存的格式顯示程序狀況。
  • -V或V顯示版本信息。
  • -w或w採用寬闊的格式來顯示程序狀況。
  • x顯示所有程序,不以終端機來區分。
  • X採用舊式的Linux i386登陸格式顯示程序狀況。
  • -y配合參數"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位。
  • -<程序識別碼>此參數的效果和指定"p"參數相同。
  • --cols<每列字符數>設置每列的最大字符數。
  • --columns<每列字符數>此參數的效果和指定"cols"參數相同。
  • -cumulative此參數的效果和指定"S" 參數相同。
  • --deselect此參數的效果和指定"-N"參數相同。
  • --forest此參數的效果和指定"f"參數相同。
  • --headers重複顯示標題列。
  • --help在線幫助。
  • --info顯示排錯信息。
  • --lines<顯示列數>設置顯示畫面的列數。
  • --no-headers此參數的效果和指定"h"參數相同,只在列表格式方面稍有差異。
  • --group<群組名稱>此參數的效果和指定"-G"參數相同。
  • --Group<群組識別碼>此參數的效果和指定"-G"參數相同。
  • --pid<程序識別碼>此參數的效果和指定"-p"參數相同。
  • --rows<顯示列數>此參數的效果和指定"lines"參數相同。
  • --sid<階段作業>此參數的效果和指定"-s"參數相同。
  • --tty<終端機編號>此參數的效果和指定"-t"參數相同。
  • --user<用戶名稱>此參數的效果和指定"-U"參數相同。
  • --User<用戶識別碼>此參數的效果和指定"-U"參數相同。
  • --version此參數的效果和指定"-V"參數相同。
  • --widty<每列字符數>此參數的效果和指定"-cols"參數相同。

wget

下載

wegt 網址(http,ftp)

常用選項/替代指令

cat urls.txt | xargs wget

curl

功能更多的wget

curl -O 網址

tail

顯示尾幾行

tail [-n]

n:指定行數,預設為10行

顯示頭幾行

head [-n]

n:指定行數,預設為10行

cat

印出檔案內容至銀幕(標準輸出)或合併多檔

cat file1 file2 > file3 可將檔案file1、file2之內容依順序合併,並將結果存至file3。

cat [-選項] file

可當more使用(讀黨)

less

上下翻頁看內容

less file
man ps | less

近入後案 / 搜尋
n 跳到下一筆匹配
N 回島上一筆匹配

rsync

Linux 使用 rsync 遠端檔案同步與備份工具教學與範例

rsync 的角色就像是一般 Linux 的 cpscp 指令,可以將檔案或目錄從來源位置複製到目的位置,不過 rsync 在複製檔案時會比 cpscp 更有效率,並且支援連結檔與設備檔(devices),也可以保留檔案的擁有者、群組與權限設定

rsync 在第一次複製檔案時,會複製完整的檔案內容,而之後再次複製檔案時,就會先以 delta transfer 演算法檢查新舊檔案之間的差異,只傳送有變動的部份,可加快備份速度,尤其是在累進備份大檔案時,效果更明顯。另外 rsync 在使用網路傳送資料時,也支援資料的自動壓縮與解壓縮,這樣可以有效減少耗費的網路頻寬。

基本語法

rsync 參數 來源檔案 目的檔案

以下是最常見的幾個參數:

  • -v:verbose 模式,輸出比較詳細的訊息。
  • -r:遞迴(recursive)備份所有子目錄下的目錄與檔案。
  • -a:封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。
  • -z:啟用壓縮。
  • -h:將數字以比較容易閱讀的格式輸出

telnet

這套軟體在 Windows 及 Linux 系統中都存在,只是介面有點不很相同就是了。
基本上,這個程式是 user 端用來連線登入遠端主機的
例如人在台南,但是可以在台南使用可以連上 Internet 的電腦,經由 telnet 連線上家裡的 Linux 主機,而進行設定。
感覺上就好像在家裡玩自己的 Linux 主機一樣。

一般來說,如果你是使用 Winodows 系統,則你可以在『開始』>『執行』後,輸入 telnet xxx.yyy.zzz.qqq ,其中, xxx.yyy.zzz.qqq 為 IP 位址,則可以連上主機(或者是 BBS )囉。當然,如果您是在 Linux 系統下,亦可直接輸入 telnet xxx.yyy.zzz.qqq 來連上主機或BBS。

telnet 主機位址(或主機名稱)

nc

這個 nc 指令可以用來作為某些服務的檢測,因為他可以連接到某個 port 來進行溝通,此外,還可以自行啟動一個 port 來傾聽其他用戶的連線。

nc [-u] [IP|host] [port]
nc -l [IP|host] [port]

選項與參數:
-l :作為監聽之用,亦即開啟一個 port 來監聽用戶的連線;
-u :不使用 TCP 而是使用 UDP 作為連線的封包狀態

ping

檢測連線

ping [ci] 位址

c:次數
i:間格

nslookup

這是用來查詢或反查詢 DNS 的指令
例如我們要知道 雅虎 的網路位址,則可以如此查詢:

$ nslookup tw.yahoo.com
Server:		192.168.151.31
Address:	192.168.151.31#53

Non-authoritative answer:
tw.yahoo.com	canonical name = atsv2-fp-shed.wg1.b.yahoo.com.
Name:	atsv2-fp-shed.wg1.b.yahoo.com
Address: 180.222.102.201
Name:	atsv2-fp-shed.wg1.b.yahoo.com
Address: 180.222.102.202

系統會告訴你,我們使用的 DNS server 是 ksdns.seed.net.tw,而查詢到的網址是 180.222.102.202。

netstat

這也是用來觀察網路狀況的指令

netstat

ssh

遠端連線伺服器SSH / XDMCP / VNC / RDP

ifconfig

Linux 常用網路指令

查詢、設定網路卡與 IP 網域等相關參數

ifconfig [選項]
  • up 開啟該網路介面
  • down 關閉該網路介面
  • mtu N 設定最大傳輸單位為 N
  • netmask 設定子網路遮罩
  • broadcast 設定廣播位置

一般來說,直接輸入 ifconfig 就會列出目前已經被啟動的卡,不論這個卡是否有給予 IP,都會被顯示出來。而如果是輸入 ifconfig eth0,則僅會秀出這張介面的相關資料, 而不管該介面是否有啟動。
所以如果你想要知道某張網路卡的 Hardware Address,直接輸入『 ifconfig "網路介面代號" 』即可,至於出現的各項資料是這樣的(資料排列由上而下、由左而右):

  • eth0:就是網路卡的代號,也有 lo 這個 loopback ;
  • HWaddr:就是網路卡的硬體位址,俗稱的 MAC 是也;
  • inet addr:IPv4 的 IP 位址,後續的 Bcast, Mask 分別代表的是 Broadcast 與 netmask 喔!
  • inet6 addr:是 IPv6 的版本的 IP ,我們沒有使用,所以略過;
  • MTU:就是第二章談到的 MTU 啊!
  • RX:那一行代表的是網路由啟動到目前為止的封包接收情況, packets 代表封包數、errors 代表封包發生錯誤的數量、 dropped 代表封包由於有問題而遭丟棄的數量等等
  • TX:與 RX 相反,為網路由啟動到目前為止的傳送情況;
  • collisions:代表封包碰撞的情況,如果發生太多次, 表示你的網路狀況不太好;
  • txqueuelen:代表用來傳輸資料的緩衝區的儲存長度;
  • RX bytes, TX bytes:總接收、傳送的位元組總量

find

依照指定條件,找尋檔案或目錄

find start_directory [-選項]

-name 指定範本樣式的檔名
-iname 搜尋可以忽略大小寫之分
-path 指定目錄的範本
-user 指定使用者名稱
-group 群組名指定群組名稱
-amin < min> 指定時間內曾被存取過的檔案,單位為分鐘
-atime < day> 指定時間內曾被存取過的檔案,單位為24小時
-exec <指令> 當找到符合條件的檔案,就執行該指令,指令結尾必須是";"
-mmin < min> 指定時間內曾異動過的檔案,單位為分鐘
-mtime < day> 指定時間內曾被異動過的檔案,單位為24小時
-nouser 檔案不屬於本機上之任何User的檔案
-ok <指令> 用法同-exec,唯每一個指令執行前均會詢問使用者
-print 將符合條件的檔案資料由終端機顯示出來
-size <檔案大小> 符合檔案大小的檔案,單位為512Byte(Block),檔案大小前加"+"號代表大於這個 size,"-"代表小於這個size

Example:

find ./ -size +500 -print

###找到目前目錄下,檔案大小大於250K Bytes的檔案,並將結果由終端機輸出

find / -nouser -exec rm {} \;

###找出整個系統中所有"無主檔案"並刪除之。

which

搜尋命令執行檔的完整路徑

利用 which 選項 命令 可以依據「PATH環境變數」的內容來搜索命令執行檔,並顯示該命令之命令執行檔的完整路徑(若該命令執行檔不在PATH中,則不會被搜尋到)。其中,選項可以是:

  • 無選項:若不輸入選項,則系統只顯示第一個被找到的命令執行檔之完整路徑。
  • -a:系統會顯示所有被找到的命令執行檔之完整路徑。
$ which ls
/bin/ls。

$ which -a ifconfig
/sbin/ifconfig

$ which -a echo
/bin/echo

watch

[Linux] 使用watch 定期執行指令 & 每天一個linux命令(48):watch命令

watch 是 procps 套件內的其中一個指令,基本上現在多數的 Linux 發行版預設的系統套件就包含了 procps。如果系統預設並沒有安裝的話,可以利用套件管理工具安裝,或是到 procps 的 GitLab 下載原始碼編譯安裝。

在 mac OS 下可輸入 brew install watch 進行安裝。

可以將命令的輸出結果輸出到標準輸出設備,多用於週期性執行命令/定時執行命令

watch[参数][命令]

-n或interval watch缺省每2秒運行一下程序,可以用-n或-interval來指定間隔的時間。

-d或differences用-d或differences選項watch會高亮顯示變化的區域。
而-d=cumulative選項會把變動過的地方(不管最近的那次有沒有變動)都高亮顯示出來。

-t或-no-title會關閉watch命令在頂部的時間間隔,命令,當前時間的輸出。

-h, help 查看幫助文檔

kill

這是用來殺掉執行中程式的指令,需配合 ps 這個指令,當你執行一個 ftp 程式,但是他有點當當的時候,你可以 ps -aux 這個指令查出 ftp 這個程式的代碼(PID),假設其 PID 為 110 ,然後輸入:

kill  110

即可殺掉這個 ftp 程式。

du(Disk usage)

這是用來察看目錄內所有檔案使用掉的空間的情況,如下所示:

du -m

其中, du 預設的檔案輸出資料為 KB,以參數 -m 使檔案資料顯示為 MB。

du [-hscd]

du -hc *.jpg

h: human-readable
s: summary (僅列目錄總容量知結果)
c: 當前目錄下(檔案)的傯總容量
dN:指定深度

df(Disk free)

這是用來察看硬碟空間的指令。

由於我們目前將檔案都建立在根目錄『/』下,所以只要沒有空間,則所有檔案都無法複製進來系統。不過,若你規劃出多的硬碟,則可以察看你的硬碟空間資訊,如下所示:

df [-ahT]

a: 顯示所有系統檔案,包括大小為零的系統檔案
h: human-readable
T: 印出檔案系統類型($ mount-1)

lsof

在 Linux 系統之下,幾乎所有的系統資源都是以檔案的形式呈現的(包含一般檔案、目錄、連結檔、裝置檔、管線檔、網路 socket 等),所以對於管理者來說,若要查詢一個程式使用了哪些系統資源,就可以透過它開啟的檔案來得知。

lsof 指令可以用來查詢行程所開啟的檔案列表,這個小工具對於系統管理者來說非常實用,而且也非常重要,以下是這個工具的使用方式與範例。

# 列出所有行程所開啟的檔案
lsof

# 不過由於輸出的資料量太大了,通常我們不太會這樣使用。

查詢開啟指定檔案的行程

如果想要查詢目前正在開啟指定檔案的行程,可以在執行 lsof 時直接加上檔案的名稱與路徑。

# 列出所有開啟檔案的行程
lsof <filename>

列出指定使用者所開啟的檔案

# 列出 terry 使用者所開啟的檔案
lsof -u terry

列出指定程式所開啟的檔案

# 列出 httpd 伺服器所開啟的檔案
lsof -c httpd

條件查詢( OR 與 AND )

# 多個條件(OR 運算)
lsof -u root -c java

# 多個條件(AND 運算)
lsof -a -u root -c java

排除條件

# 列出非 root 使用者所開啟的檔案
lsof -u ^root

根據 PID 列出所開啟的檔案

# 列出 PID 為 14662 的行程,所開啟的檔案
lsof -p 14662

# 根據多個 PID 列出開啟的檔案
lsof -p 14662,14678,14979

網路連線

# 列出所有網路連線
lsof -i

# 列出所有 TCP 網路連線
lsof -i tcp

# 列出所有 UDP 網路連線
lsof -i udp

# 列出 80 連接埠的網路連線
lsof -i :80

# 列出 SMTP 的網路連線
lsof -i :smtp

# 列出 3642 連接埠的 TCP 連線
lsof -i tcp:3642

# 列出 1 到 1024 連接埠的 TCP 網路連線
lsof -i :1-1024

# 列出所有處於 LISTEN 狀態的 TCP 網路連線
lsof -i TCP -s TCP:LISTEN

# 列出已建立的 TCP 網路連線
lsof -i TCP -s TCP:ESTABLISHED

參考資料

Linux 基本指令介紹 - for Red Hat Linux 6.1

Linux - 常用指令彙整

Linux常用指令

Linux 常用網路指令