經常使用 shell 查詢

對一些常常用到的 shell 命令作簡要的總結,方便往後查閱。html

tcpdump

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

  • [S] – SYN (開始鏈接)
  • [S.] - SYN-ACK 數據包
  • [.] – 沒有標記
  • [P] – PSH (數據推送)
  • [F] – FIN (結束鏈接)
  • [R] – RST (重啓鏈接)

其餘很容易弄懂,暫不解釋。nuxt

strace

strace 經常使用來跟蹤進程執行時的系統調用和所接收的信號。 在 Linux 世界,進程不能直接訪問硬件設備,當進程須要訪問硬件設備(好比讀取磁盤文件,接收網絡數據等等)時,必須由用戶態模式切換至內核態模式,經過系統調用訪問硬件設備。strace 能夠跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。

經常使用參數解析

參數 含義
-o filename 將strace的輸出寫入文件filename 
-p pid 跟蹤指定的進程pid
-f 跟蹤由fork調用所產生的子進程
-ff 若是提供-o filename,則全部進程的跟蹤結果輸出到相應的filename.pid中,pid是各進程的進程號
-tt 在輸出中的每一行前加上時間信息,微秒級
-T 顯示每一調用所耗的時間
-s strsize 指定輸出的字符串的最大長度.默認爲32.文件名一直所有輸出

lsof

lsof(list open files)是一個查看當前系統文件的工具。在linux環境下,任何事物都以文件的形式存在,經過文件不單單能夠訪問常規數據,還能夠訪問網絡鏈接和硬件。如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在後臺都爲該應用程序分配了一個文件描述符,該文件描述符提供了大量關於這個應用程序自己的信息。

經常使用參數解析

參數 含義
-p<進程號> 列出指定進程號所打開的文件
-i<條件> 列出符合條件的進程。(四、六、協議、:端口、 @ip )
-n 不把網絡地址轉換成名字
-P 不轉換端口號,用數字表示
-c<進程名> 列出指定進程所打開的文件
-u user 某個用戶打開的文件
-d<文件號> 列出佔用該文件號的進程
-g gid 某個用戶組打開的文件

輸出解析

  • COMMAND:進程的名稱
  • PID:進程標識符
  • PPID:父進程標識符(須要指定-R參數)
  • USER:進程全部者
  • PGID:進程所屬組
  • FD:文件描述符,應用程序經過文件描述符識別該文件。如cwd、txt等
  • TYPE:文件類型,如DIR、REG等
  • DEVICE:指定磁盤的名稱
  • SIZE:文件的大小
  • NODE:索引節點(文件在磁盤上的標識)
  • NAME:打開文件的確切名稱

通常在標準輸出、標準錯誤、標準輸入後還跟着文件狀態模式: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

pidof用於找出正在運行的程序的進程PID(用空格分割),程序能夠是一個二進制執行程序,也能夠是一個shell腳本。

-s 參數只列出一個

tr

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...

參考

  1. tcpdump參數解析及使用詳解
  2. 一份快速實用的 tcpdump 命令參考手冊
相關文章
相關標籤/搜索