Linux故障排除速查表:strace,htop,lsof,tcpdump,iftop和sysdig

Linux Troubleshooting Cheatsheet: strace, htop, lsof, tcpdump, iftop & sysdig
By Phil Rzewski on April 13, 2016

該Sysdig速查表是Linux管理員可以用來深入了解其服務(wù)器的命令行的重要指南。無論您是一個月的管理員還是20年的管理員,您都肯定使用了所有(如果不是全部)這些工具來解決問題。因為我們喜歡Sysdig(自然而然?。?,所以我們還將這些常見操作中的每一個都翻譯成sysdig命令行或csysdig。

我們并沒有嘗試涵蓋手冊頁中的所有選項(本來會使許多深奧的,很少使用的開關(guān)無聊的報道),而是從當您搜索諸如“ strace示例”,“ htop示例”等等。

您是否有未在此處列出的收藏夾?讓我們知道,我們將在以后的文章中包含它們。

strace

在許多并排比較中,strace和sysdig之間存在一個細微的區(qū)別,這很明顯:許多最簡單的strace示例都包含命令行,這些命令行以“一次性”操作的形式執(zhí)行和跟蹤。另一方面,Sysdig的理念有所不同,它既可以實時監(jiān)視實時事件,也可以分析先前保存到文件中的捕獲數(shù)據(jù)。值得慶幸的是,正如您很快就會看到的,Sysdig豐富的過濾選項提供了旋鈕,可以監(jiān)視特定的單次執(zhí)行。

操作 STRACE SYSDIG 注意
跟蹤命令的執(zhí)行 strace who sysdig proc.name=who strace一次性顯示此處顯示的who命令,而Sysdig正在監(jiān)視who的執(zhí)行情況。使用Sysdig的過濾來進一步隔離特定的運行,例如: sysdig proc.name=who and proc.ppid=534 這將監(jiān)視誰將在您確定具有534的PID的外殼中運行。
僅在進行某些/特定系統(tǒng)調(diào)用時跟蹤 strace -e open who strace -e trace=open,read who sysdig evt.type=open and proc.name=who sysdig "evt.type in (open,read) and proc.name=who"
將跟蹤保存到文件 strace -o output.txt who sysdig -w output.scap proc.name=who 使用strace,生成的文件包含的內(nèi)容與交互式運行時在屏幕上顯示的內(nèi)容相同。使用Sysdig,您將獲得原始的,可重復使用的捕獲文件,從而可以使用以下方式查看文本輸出: sysdig -r output.scap 您還可以以此為基礎(chǔ)來應(yīng)用過濾器或在重新訪問原始事件時要應(yīng)用的任何其他Sysdig功能。 。
觀看PID = 1363的運行過程 strace -p 1363 sysdig proc.pid=1363
為跟蹤的每條輸出線打印一個時間戳 strace -t who sysdig proc.name=who Sysdig默認情況下會打印時間戳。
打印系統(tǒng)調(diào)用的相對時間 strace -r who sysdig -tD proc.name=who Sysdig通過-t選項提供了幾種表示時間戳的方法。
生成系統(tǒng)調(diào)用的批處理統(tǒng)計報告 strace -c who sysdig -w output.scap proc.name=who<br /> # Now run the “who” separately 對于一次性批處理文本報告: sysdig -r output.scap -c topscalls -c topscalls_time 或?qū)τ谠试S進一步深入研究的交互式報告: csysdig -r output.scap -v syscalls Sysdig的默認行為針對事件數(shù)據(jù)發(fā)生時的情況進行了優(yōu)化,而不是“批處理”報告。這就是為什么在此處分兩步完成Sysdig等效項的原因。
生成系統(tǒng)調(diào)用的實時實時統(tǒng)計報告,以PID = 1363表示正在運行的進程 N / A csysdig -v syscalls proc.pid=1363 盡管strace可以實時顯示單個事件,或者提供單個批處理報告來執(zhí)行命令,但是csysdig的視圖提供了獨特的功能來顯示實時的定期報告

HTOP

由于htop是一種實時,交互式,詛咒風格的工具,因此我們將其與實時,交互式,詛咒風格的csysdig進行比較。

對于初學者來說,這兩種工具都使用相同的方法,即通過上/下/左/右箭頭以及PgUp / PgDn導航實時表。對于影響單個過程的操作(殺死,重制等等),假定您已使用這些控件首先突出顯示特定過程。

操作 HTOP CSYSDIG 注意
根據(jù)表的列更改排序順序 F6,<>,然后按名稱選擇一列,或 按M,PT通過內(nèi)存,處理器使用,或時間排序 按I反轉(zhuǎn)排序順序 F9>,然后按名稱選擇列,或 按按shift<1-9>任何列進行排序 n,然后反復按以反轉(zhuǎn)排序順序,或 在列標題上單擊鼠標左鍵
殺死進程 F9k k
Renice一個過程 F7]將nice值降低1 按F8[將nice值提高1 按下]將nice值減小1 按下[將nice值增大1 這說明自定義Sysdig很容易。我在初次撰寫本文時注意到csysdig缺少這樣的一些次要功能,因此我借此機會學習了編寫/修改Chisels的難易程度,然后提出了我的改進作為Pull Request。你也可以做到的!
僅顯示由名為“ phil”的用戶啟動的進程 u,然后從列表中 選擇用戶名phil 啟動為: csysdig user.name=phil 或在默認“流程”視圖頂部的Filter:內(nèi)部單擊鼠標csysdig,然后附加and user.name=phil到當前過濾器文本
將輸出刷新間隔更改為每5秒一次 啟動為: htop -d 50 啟動為: csysdig -d 5000 如您所見,htop的工作單位為十分之一秒,而csysdig的工作單位為毫秒。
在進程上啟動系統(tǒng)調(diào)用跟蹤 s開始strace 按下F6開始sysdig
列出流程的打開文件 按下l即可執(zhí)行一次lsof f運行一次性lsof的或者看到實時更新的進程所使用的文件/目錄的報告,按向下鉆取到具體的過程Enter,然后按F2選擇,如查看Files,File Opens ListDirectories。 有關(guān)lsof最近如何將一次性添加為增強功能的信息,請參見上面的“簡化流程”說明。
遵循一個過程,以便即使列表中的順序發(fā)生更改,該過程仍會突出顯示 F 默認行為是始終遵循突出顯示的過程

lsof

操作 LSOF的 CSYSDIG 注意
列出屬于所有活動進程的所有打開文件 lsof sysdig -c lsof
列出已打開特定文件/ var / log / syslog的進程 lsof /var/log/syslog sysdig -c lsof "fd.name=/var/log/syslog"
列出已在目錄/ var / log下打開文件的進程 lsof +d /var/log sysdig -c lsof "fd.directory=/var/log"
列出由名為“ sshd”的進程打開的文件 lsof -c sshd sysdig -c lsof "proc.name=sshd"
列出由名為“ phil”的特定用戶打開的文件 lsof -u phil sysdig -c lsof "user.name=phil"
列出所有人打開的文件,但名為“ phil”的用戶除外 lsof -u ^phil sysdig -c lsof "user.name!=phil"
列出具有PID = 1081的特定過程的所有打開的文件 lsof -p 1081 sysdig -c lsof "proc.pid=1081"
列出用戶“ phil”或名為“ sshd”的進程(或邏輯)打開的所有文件 lsof -u phil -c sshd sysdig -c lsof "'user.name=phil or proc.name=sshd'" 注意Sysdig過濾器使用兩層引號。
列出由“ sshd”進程為用戶“ phil”打開的所有文件(AND邏輯) lsof -u phil -c sshd -a sysdig -c lsof "'user.name=phil and proc.name=sshd'" 注意Sysdig過濾器使用兩層引號。
觀察基于實時活動的打開文件的重復報告 使用以下之一啟用重復模式: lsof -r lsof +r 可以使用實時/交互式csysdig視圖獲得類似的實時數(shù)據(jù),如下所示: csysdig -v files csysdig -v file_opens
列出所有網(wǎng)絡(luò)連接 lsof -i sysdig -c lsof "fd.type=ipv4"
列出特定進程使用PID = 1014的網(wǎng)絡(luò)連接 lsof -i -a -p 1014 sysdig -c lsof "'fd.type=ipv4 and proc.pid=1014'" 注意Sysdig過濾器使用兩層引號。
列出正在端口22上偵聽的進程 lsof -i :22 sysdig -c lsof "'fd.port=22 and fd.is_server=true'" 注意Sysdig過濾器使用兩層引號。
列出所有TCP或UDP連接 lsof -i tcp lsof -i udp sysdig -c lsof "fd.l4proto=tcp" sysdig -c lsof "fd.l4proto=udp"

tcpdump

tcpdump完全專注于網(wǎng)絡(luò)流量,而網(wǎng)絡(luò)流量只是Sysdig涵蓋的子集。許多tcpdump用例都涉及過濾,而tcpdump使用特定于網(wǎng)絡(luò)的BPF過濾器,而Sysdig使用其自身更廣泛的Sysdig過濾。兩種方法在許多方面看起來都很相似,但是隨著對高級過濾需求的不斷發(fā)展,您將需要并排查看每個文檔。另外,由于在Linux中所有內(nèi)容都是文件,因此您會注意到下面的Sysdig篩選示例全部利用“通過文件描述符進行網(wǎng)絡(luò)連接”方法。

操作 TCPDUMP的 CSYSDIG 注意
從特定接口eth0(192.168.10.119)捕獲數(shù)據(jù)包 tcpdump -i eth0 sysdig fd.ip=192.168.10.119 Sysdig當前沒有基于命名接口的過濾,但是此處顯示了等效于通過IP地址的過濾。
僅捕獲100個數(shù)據(jù)包 tcpdump -c 100 sysdig -n 100 fd.type=ipv4
以ASCII顯示捕獲的數(shù)據(jù)包 tcpdump -A sysdig -A fd.type=ipv4
以十六進制和ASCII顯示捕獲的數(shù)據(jù)包 tcpdump -XX sysdig -X fd.type=ipv4
捕獲數(shù)據(jù)包數(shù)據(jù),將其寫入文件 tcpdump -w saved.pcap sysdig -w saved.scap fd.type=ipv4 Sysdig文件格式能夠保存事件數(shù)據(jù),而不僅僅是網(wǎng)絡(luò)數(shù)據(jù)包(例如,系統(tǒng)調(diào)用)。
從文件中讀取保存的數(shù)據(jù)包數(shù)據(jù) tcpdump -r saved.pcap sysdig -r saved.scap
僅捕獲大于/小于1024字節(jié)的數(shù)據(jù)包 tcpdump greater 1024 tcpdump less 1024 sysdig "fd.type=ipv4 and evt.buflen > 1024" sysdig "fd.type=ipv4 and evt.buflen < 1024" greater/lesstcpdump中 的選項引用了整個數(shù)據(jù)包長度,而evt.buflenSysdig中的選項則相對于有效負載大小。
僅捕獲UDP或TCP數(shù)據(jù)包 tcpdump udp tcpdump tcp sysdig fd.l4proto=udp sysdig fd.l4proto=tcp 請注意,fd.type=ipv4由于我們在此處使用其他僅用于網(wǎng)絡(luò)的過濾器,因此我們無需明確包含。
僅捕獲去往/來自特定端口的數(shù)據(jù)包 tcpdump port 22 sysdig fd.port=22 請注意,fd.type=ipv4由于我們在此處使用其他僅用于網(wǎng)絡(luò)的過濾器,因此我們無需明確包含。
捕獲特定目標IP和端口的數(shù)據(jù)包 tcpdump dst 54.165.81.189 and port 6666 sysdig fd.rip=54.165.81.189 and fd.port=6666 請注意,fd.type=ipv4由于我們在此處使用其他僅用于網(wǎng)絡(luò)的過濾器,因此我們無需明確包含。

iftop

由于iftop是實時,交互式,詛咒風格的工具,因此我們將其與實時,交互式,詛咒風格的csysdig進行比較。另外,與tcpdump一樣,iftop使用BPF過濾器。有關(guān)過濾差異的更多詳細信息,請參見tcpdump上一節(jié)的前一介紹。

操作 IFTOP的 CSYSDIG 注意
顯示主機對之間的當前帶寬使用情況表 iftop 以以下方式啟動: csysdig -v connectionsF2從內(nèi)部csysdig按更改視圖,然后向上箭頭選擇Connections 缺省情況下,iftop僅監(jiān)視它找到的第一個接口,而缺省情況下,csysdig監(jiān)視整個主機上的流量。
打開網(wǎng)絡(luò)端口的顯示 啟動方式: iftop -Pp從內(nèi)部按iftop 默認行為是始終顯示端口
僅觀察eth0接口(192.168.10.119)的流量 啟動為: iftop -i eth0 作為啟動: csysdig -v connections fd.ip=192.168.10.119 或者鼠標點擊Filter:來自內(nèi)部csysdig,然后追加和fd.ip=192.168.10.119現(xiàn)有的過濾器文本 sysdig / csysdig當前沒有基于命名接口的過濾,但是此處顯示了等效于通過IP地址的過濾。
解析DNS名稱 n從內(nèi)iftop到切換分辨率,顯示所有主機 n從內(nèi)部 按csysdignslookup在當前突出顯示的遠程主機上運行
根據(jù)表的列更改排序順序 按下以按目的地排序 F9>,然后按名稱選擇列,或 按按shift <1-9>任何列進行排序 n,然后反復按以反轉(zhuǎn)排序順序,或 在列標題上單擊鼠標左鍵
過濾以僅顯示去往/來自IP地址54.84.222.1的流量 啟動為: iftop -f "host 54.84.222.1" 啟動為: csysdig -v connections fd.ip=54.84.222.1Filter:在csysdig中單擊鼠標,然后附加and fd.ip=54.84.22.1到現(xiàn)有過濾器文本
暫停顯示 P p
滾動顯示 j向上滾動 按k向下滾動 Up/Down/Left/Right箭頭或PgUp/PgDn在表格中滾動 sysdig / csysdig不僅可以滾動瀏覽單個表,還可以深入“連接視圖”以查看其他分組(例如,每個容器或每個線程)中的數(shù)據(jù)。

Linux故障排除備忘單:strace,htop,lsof,tcpdump,iftop和sysdig https://t.co/XeIeAwwj9i

— Sysdig(@sysdig)

2016年4月14日

Sysdig備忘單致謝

作者要感謝thegeekstuff.com,因為上表中使用示例填充的大多數(shù)文章都是在其站點上找到的。

您要下載該備忘單的PDF版本嗎? 在這里抓住它。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容