對一些常常用到的 shell 命令作簡要的總結,方便往後查閱。html
tcpdump 命令用來保存和記錄網絡流量,即抓包工具。你能夠用它來觀察網絡上發生了什麼,並可用來解決各類各樣的問題,包括和網絡通訊無關的問題。linux
Tcpdump 中的關鍵字主要有如下幾種
1.關於類型的關鍵字主要包括:host、net、port。若是沒有指定類型,缺省的類型是host.
2.關於肯定傳輸方向的關鍵字主要包括:src、dst、dst or src、 dst and src。若是沒有指明方向關鍵字,則缺省是src or dst關鍵字
3.關於協議的關鍵字,主要包括ip、arp、rarp、tcp、udp、icmp等類型。若是沒有指定任何協議,則tcpdump將會監聽全部協議的信息包。
4.其餘重要的關鍵字:gateway, broadcast, less, greater。
5.三種邏輯運算:取非運算是'not ' ,'! ';與運算是'and','&&';或運算 是'or','││'。多條件時能夠用括號,可是要用轉義。shell
注意:該工具使用 sudo 權限去執行!bash
參數 | 含義 |
---|---|
-w | 指定抓取到的數據包的保存位置 |
-i | 指定抓取哪一個網口的數據包,默認是 eth0 |
-s | 指定從一個包中截取的字節數。0表示包不截斷,抓完整的數據包 |
-S | 將tcp的序列號以絕對值形式輸出,而不是相對值 |
-n | 指定將每一個監聽到數據包中的域名轉換成IP地址後顯示,不把網絡地址轉換成名字 |
-nn | 指定將每一個監聽到的數據包中的域名轉換成IP、端口從應用名稱轉換成端口號後顯示 |
-c | 指定要抓取多少數據包,默認會一直抓取,直到 ctrl+c |
-v | 輸出一個稍微詳細的信息,例如在ip包中能夠包括ttl和服務類型的信息 |
-vv | 輸出詳細的報文信息 |
-A | 以ASCII格式打印出全部分組,並將鏈路層的頭最小化 |
-e | 打印出數據鏈路層的頭部信息,包括源mac和目的mac,以及網絡層的協議 |
-X | 把協議頭和包內容都原本來本的顯示出來(tcpdump會以16進制和ASCII的形式顯示) |
-r | 從指定的文件中讀取包(這些包通常經過-w選項產生) |
更多詳細參數能夠參考Linux抓包工具tcpdump詳解網絡
tcpdump -w /tmp/data -s0 -i eth0 port 3000 and host 127.0.0.1
截獲流經 eth0 網口,3000 端口,而且主機地址爲 127.0.0.1 收到的和發出的全部的完整(不截斷)數據包,並將這些數據包保存在 /tmp/data 文件中。less
tcpdump 'host 210.27.48.1 and (210.27.48.2 or 210.27.48.3)'
截獲主機 210.27.48.1 和主機 210.27.48.2 或 210.27.48.3 的通訊數據包。tcp
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
獲取主機 210.27.48.1 除了和主機 210.27.48.2 以外全部主機通訊的ip包工具
抓到的數據包都會有一個類型標識:.net
其餘很容易弄懂,暫不解釋。nuxt
strace 經常使用來跟蹤進程執行時的系統調用和所接收的信號。 在 Linux 世界,進程不能直接訪問硬件設備,當進程須要訪問硬件設備(好比讀取磁盤文件,接收網絡數據等等)時,必須由用戶態模式切換至內核態模式,經過系統調用訪問硬件設備。strace 能夠跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。
參數 | 含義 |
---|---|
-o filename | 將strace的輸出寫入文件filename |
-p pid | 跟蹤指定的進程pid |
-f | 跟蹤由fork調用所產生的子進程 |
-ff | 若是提供-o filename,則全部進程的跟蹤結果輸出到相應的filename.pid中,pid是各進程的進程號 |
-tt | 在輸出中的每一行前加上時間信息,微秒級 |
-T | 顯示每一調用所耗的時間 |
-s strsize | 指定輸出的字符串的最大長度.默認爲32.文件名一直所有輸出 |
lsof(list open files)是一個查看當前系統文件的工具。在linux環境下,任何事物都以文件的形式存在,經過文件不單單能夠訪問常規數據,還能夠訪問網絡鏈接和硬件。如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在後臺都爲該應用程序分配了一個文件描述符,該文件描述符提供了大量關於這個應用程序自己的信息。
參數 | 含義 |
---|---|
-p<進程號> | 列出指定進程號所打開的文件 |
-i<條件> | 列出符合條件的進程。(四、六、協議、:端口、 @ip ) |
-n | 不把網絡地址轉換成名字 |
-P | 不轉換端口號,用數字表示 |
-c<進程名> | 列出指定進程所打開的文件 |
-u user | 某個用戶打開的文件 |
-d<文件號> | 列出佔用該文件號的進程 |
-g gid | 某個用戶組打開的文件 |
通常在標準輸出、標準錯誤、標準輸入後還跟着文件狀態模式:r、w、u等
(1)u:表示該文件被打開並處於讀取/寫入模式
(2)r:表示該文件被打開並處於只讀模式
(3)w:表示該文件被打開並處於只寫模式
(4)空格:表示該文件的狀態模式爲unknow,且沒有鎖定
(5)-:表示該文件的狀態模式爲unknow,且被鎖定
更多參數解析請參考lsof 一切皆文件
lsof /bin/bash -u username
列出與 /bin/bash
文件相關的,且 username
用戶打開的進程
lsof -p 1223 -i tcp:8000 -n -P
列出 1223 進程在 8000 端口打開的 tcp 鏈接,地址和端口保留數字,不作轉換
lsof -d 2-3
根據文件描述列出對應的文件信息
pidof用於找出正在運行的程序的進程PID(用空格分割),程序能夠是一個二進制執行程序,也能夠是一個shell腳本。
-s 參數只列出一個
tr用來從標準輸入中經過替換或刪除操做進行字符轉換.
參數 | 含義 |
---|---|
-d | 刪除全部屬於第一字符集的字符 |
-s | 把連續重複的字符以單獨一個字符表示 |
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
將大寫字母轉換成小寫字母
echo "hello 123 world 456" | tr -d '0-9'
從字符串中刪除數字
echo "hello world" | tr " " ,
空格換成逗號
To be continued...