Linux下容易被忽視的那些命令用法
本文適合在linux下開發的同學閱讀,需要具備基本的linux操作命令。
一、前言
工作中發現很多同學對于Linux下的命令不太熟悉,尤其是一些功能強大的工具,使用者很少。正所謂工欲善其事,必先利其器。本文總結了Linux下常用命令的用法,希望能夠幫助大家提升日常開發的效率。
二、命令
1.strace
strace用于跟蹤程序執行過程中的系統調用,如跟蹤test進程,只需要:
- strace -p [test_pid] 或直接strace ./test
但如果需要:
- 跟蹤進程內的線程: -f 選項
- 統計時間段內的各個系統調用次數分布:-C 選項
- 過濾某些系統調用:-e trace選項,如-e trace=network只顯示網絡相關的系統調用,-e trace=open,close,read,write只顯示這4個系統調用,常用于只獲取某些特定的系統調用
- 顯示系統調用的時間:-ttt選項
- 詳細顯示每行的數據,而不是... -s選項加大字符串的長度限制如-s 1024
比如,跟蹤pid為12345的進程中所有線程的read和write系統調用,輸出字符串的長度限制為1024:
- strace -s 1024 -f -e trace=read,write -p 12345
2.tcpdump
tcpdump是Linux上的抓包工具,如抓取eth0網卡上的包,使用:
- sudo tcpdump -i eth0
但如果需要:
- 文本形式顯示抓包數據:-A選項
- 顯示16進制的報文數據:-X選項
- 輸出結果到文件中 -w選項,如-w 1.cap將報文輸出到1.cap文件,此文件可用wireshark查看
- 過濾主機和端口號 如host 11.11.11.11 and port 12345過濾主機ip為11.11.11.11,端口號為12345的tcp報文
比如,抓取80端口的HTTP報文,以文本形式展示:
- sudo tcpdump -i any port 80 -A
這樣你就可以清楚看到GET、POST請求的內容了。
3.nc
nc可以在Linux上開啟TCP Server、TCP Client、UDP Server、UDP Client。
如在端口號12345上開啟TCP Server和Client模擬TCP通信:
- Server: nc -l 127.0.0.1 12345
- Client: nc 127.0.0.1 12345
在端口號12345上開啟UDP Server和Client模擬TCP通信:
- Server: nc -ul 127.0.0.1 12345
- Client: nc -u 127.0.0.1 12345
Unix Socket通信示例:
- Server: nc -Ul /tmp/1.sock
- Client: nc -U /tmp/1.sock
4.curl
curl用于模擬HTTP請求,在終端模擬請求時常用,如最基本的用法:
- curl http://www.baidu.com
但如果需要:
- 指定HTTP首部 -H選項,如-H "Host: xx.xx.xx.xx"
- 指定請求方法 -X選項,如-X POST,-d指定post數據
- 顯示請求詳細信息,包括請求和響應首部 -v選項
- 重定向請求自動追蹤 -L選項
常見的curl請求選項-sSfL表示: 不顯示進度信息,顯示錯誤信息,發生HTTP錯誤時失敗,自動跟蹤重定向
5.find
find可用于查找文件,比如:
- find . -name "1.txt"
表示在當前目錄及其子目錄下查找文件名為1.txt的文件,結合xargs使用功能更加強大,如:
- find . -type f|xargs grep 'abcd'
表示在當前目錄及其子目錄下查找包含abcd字符串的文件行,經常用于搜索代碼。
6.lsof
lsof命令主要用法包括:
- sudo lsof -i :[port] 查看端口占用進程信息,經常用于端口綁定失敗時確認端口被哪個進程占用
- sudo lsof -p [pid] 查看進程打開了哪些文件或套接字
7.ss
Linux上的ss命令可以用于替換netstat,ss直接讀取解析/proc/net下的統計信息,相比netstat遍歷/proc下的每個PID目錄,速度快很多。
常見示例:
- ss -t -a 顯示所有的TCP Sockets
- ss -u -a 顯示所有的UDP Sockets
- ss -x src /tmp/a.sock 顯示連接到/tmp/a.sock的進程
- ss -o state [state TCP-STATE] 如ss -o state established顯示所有建立的連接
8.awk/sed
awk和sed在文本處理方面十分強大,其中,awk按列進行處理,sed按行進行處理。
如采用冒號分隔數據,輸出***列數據($0代表行全部列數據,$1代表***列,$2代表第二列...)
- awk -F ":" '{print $1}'
在awk的結果基礎上,結合sort、uniq和head等命令可以輕松完成頻率統計等功能
- 查看文件的第100行到第200行:
- sed -n '100,200p' log.txt
- 替換字符串中的特定子串
- echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"
- 替換test文件每行匹配ab的部分為cd
- sed -i 's/ab/cd/g' test
9.screen
當采用telnet或SSH登錄遠程主機時,因為網絡中斷的原因會導致session終止,此時會觸發SIGHUP信號使得任務終止,因此我們常常會看到有些任務采用nohup的方式運行,避免任務被打斷。screen通過多終端的方式,巧妙地解決了這個問題。 示例:
- screen -S test 開啟一個screen,這時擁有一個終端,所有執行的程序都會在ps中展示
- Ctrl+a鍵+d鍵 退出當前screen,切到上級窗口
- screen -ls 查看所有screen列表,如
- 13333.test (Detached)
- 14039.test4 (Detached)
- 表示兩個screen,screen標識為13333.test和14039.test4
- screen -r [pid.]tty.host 進入選定的screen,如screen -r 13333.test
- exit 關閉當前screen
注:本文假定讀者已經知道類似top、netstat、df、vmstat等常見命令的用法,所以介紹的都是一些容易被忽視卻很實用的命令用法。本文對于這些命令進行了簡化和提煉,所有命令的完整功能需要具體參考命令手冊。