常用 shell 查詢

2021-09-16 19:22:47 字數 3645 閱讀 6402

對一些經常用到的 shell 命令做簡要的總結,方便日後查閱。

tcpdump命令用來儲存和記錄網路流量,即抓包工具。你可以用它來觀察網路上發生了什麼,並可用來解決各種各樣的問題,包括和網路通訊無關的問題。

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','││'。多條件時可以用括號,但是要用轉義。

注意:該工具使用sudo許可權去執行!

常用引數解析

引數含義

-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選項產生)

舉個栗子

tcpdump -w /tmp/data -s0 -i eth0 port 3000 and host 127.0.0.1
截獲流經 eth0 網口,3000 埠,並且主機位址為 127.0.0.1 收到的和發出的所有的完整(不截斷)資料報,並將這些資料報儲存在 /tmp/data 檔案中。

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 的通訊資料報。

tcpdump ip host 210.27.48.1 and ! 210.27.48.2
獲取主機 210.27.48.1 除了和主機 210.27.48.2 之外所有主機通訊的ip包

資料報解析

抓到的資料報都會有乙個型別標識:

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

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《條件》

列出符合條件的程序。(4、6、協議、:埠、 @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...

tcpdump引數解析及使用詳解

乙份快速實用的 tcpdump 命令參考手冊

常用shell命令

1 cat 列印檔案的內容 2 cd 改變目錄 3 chmod 修改檔案訪問許可權 4 cp 複製檔案 5 du 輸出磁碟的使用情況 6 emacs 文字編輯器 7 find 搜尋查詢檔案 8 gcc c c fortran 編譯器 9 grep 在輸入中查詢乙個串 10 less 輸出頁面過濾器 ...

常用shell語法

if語句system uname s if system linux then echo linux elif system darwin then echo darwin else echo what?fifor語句for i 1 i 10 i doecho done for i in seq 1...

常用shell命令

根據功能進行分類記憶 passwd 設定指定使用者密碼 exit 登出當前登入使用者 useradd user add 建立乙個新用pwd戶 ubuntu系統中可以使用更方便和強大的adduser命令 userdel user delete 刪除乙個已存在的使用者 usermod user modi...