1,在dir目錄中查找file文件: find dir -name file
2,在dir目錄中搜索含有str字符串的文件: grep -nr str dir
3,其他常用的工具:過濾 grep,用指定分隔符取某個字段值 awk,刪除替換字符串 sed
4,遠程獲取文件/文件夾(-r):scp -P 22345 [email protected]:/dir1/file /dir2
5,遠程上傳文件/文件夾(-r):scp -P 22345 ./file [email protected]:/dir1 (注:-P 指定端口)
6,查看appname的進程ID情況:ps auxf | grep "appname" 然後殺死該進程:kill -9 PID (注:若涉硬件層調用,可能卡死)
7,查看系統cpu實時佔用情況:mpstat -P ALL 1 cpu詳細信息 cat /proc/cpuinfo
8,查看系統內存使用情況:free -m 詳細點的: cat /proc/meminfo
9,獲取系統識別的磁盤:fdisk -l 查看各分區的掛在目錄及剩餘容量:df -h
10,掛載某個分區到某個目錄節點:mount /dev/sdb1 ./sf-u 驗證 df -h 卸載 umount /dev/sdb1或者 umount ./sf-u
11,測試ip聯通性: ping ip ,(icmp)提示"主機不可達",去的路上掛了! ;提示"超時",來的路上掛了!(找不到回去的路由)
12,查看ip經過的路由節點:win7,tracert ip linux,traceroute ip
13,查看ip對應的mac地址:arp -a 設置靜態的 ip-mac 對: arp -s ip (解決arp攻擊的方法之一)
14,抓指定網口的ping(icmp)包: tcpdump -i eth0 icmp
15,抓指定ip的arp廣播包:tcpdump -i eth0 arp | grep "200\.200\.155\.154"
16,抓指定ip/port的數據包:tcpdump -i eth0 host 200.200.155.154 and port not 47191 -n -c 1000
17,抓包到文件,方便wareshark分析:tcpdump -i eth0 host 200.200.155.154 and port not 47191 -n -c 1000 -nnv -s0 -w ./sf.cap
18,爲指定網口添加ip地址:ip addr add 192.168.5.19/24 dev eth0 , 查看所有ip(含臨時): ip a
19,查看路由:ip route 然後添加靜態路由:ip route add 200.200.0.0/16 via 200.200.91.254 (若是默認路由,網段改成 default 即可)
20,網口的一些操作及信息查看:ethtool -i/p/d/S eth0,ethtool eth0,ifconfig eth0,ifconfig down/up eth0
21,調試shell腳本:bash -x ./test.sh
22,查看tcp/udp所有端口對應的服務情況:netstat -tunp
23,查看當前目錄下的文件佔用空間:du -h -d 1
24,解壓tar包,tar -zxvf xxx.tar.gz ; 新建壓縮包 tar -zcvf target.tar.gz src_dir
25,查看系統內存佔用排行:ps auxf | sort -r -n -k 6 ;其中sort -r 表示由大到小,-n表示按數字,-k 6 表示以第六列數字排序
#以下是《程序員的修養》的實踐。背景: 在編譯環境編譯 hydra,然後拷貝到設備使之運行。在設備上 ./hydra 報找不到符號,./hydra: symbol lookup error: /lib/libldap_r-2.4.so.2: undefined symbol: ber_sockbuf_io_udp 的錯誤的解決方法。
26,查看 hydra 應用程序所引用的庫文件:ldd -r ./hydra
...libldap_r-2.4.so.2 => /lib/libldap_r-2.4.so.2 (0x00007f28df88a000)
undefined symbol: ber_sockbuf_io_udp (/lib/libldap_r-2.4.so.2)
27,驗證某個庫文件是否包含某個符號:cat /lib/libldap_r-2.4.so.2 | grep "ber_sockbuf_io_udp"
Binary file (standard input) matches
28,驗證某個庫文件的符號是否是導入符號(符號只是引用並未定義)或者導出符號(符號已定義實現):readelf -s /lib/libldap_r-2.4.so.2 ;從下面的輸出 UND 字符串,可以判斷 /lib/libldap_r-2.4.so.2 庫沒有該函數的實現,是導入符號而已。
.......20: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ber_sockbuf_io_udp
29,查找應用程序引用的庫中,某個符號(函數或全局變量)是在哪個庫中定義的:(注意在編譯環境查找)
ldd -r /usr/bin/hydra | awk '{print $3}' | while read f;do echo $f; readelf -s $f | grep ber_sockbuf_io_udp;done
...
/lib64/libldap_r-2.4.so.2
xx: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND ber_sockbuf_io_udp
...
/lib64/liblber-2.4.so.2
xx: 000000000020e460 48 OBJECT GLOBAL DEFAULT 23 ber_sockbuf_io_udp
...
可以確定,ber_sockbuf_io_udp 符號是在 liblber-2.4.so.2 庫中定義的。所以把 liblber-2.4.so.2 庫從編譯環境拷貝到設備上,刪除設備原來的 liblber-2.4.so.2 庫,ln -s 一下新庫。設備 ./hydra 運行找不到符號的問題得以解決
30,查看linux進程系統調用:strace -p 進程ID號
暫時能想到的就這麼多,後續的常用linux命令有待補充...
31,對某個文件或者目錄加鎖,使root用戶都無法使用chmod修改其屬性:加鎖,chattr +i 文件/目錄。解鎖,chattr -i 文件/目錄。查看某文件底層屬性:lsattr 文件/目錄。注意 attr 應該是 attribute 屬性的縮寫。
plus,測試網絡被我搞環路了好幾天,今天測試同事終於查明原因,通知我說,是我的設備搞得鬼。剛開始我還死不承認,後來用網線直連打開ESXI,看到其中一個系統的兩個網口,分明配置了"透明口",這是誰配置的? 我想一定是某個新同事搞得,爲了證實這點,特地看了下操作日誌,無奈環路的這段時間就是我的ip在登入。。。有時候自己不經意做的事,等注意到這是自己做的,往往會大喫一驚。呵呵,50 rmb 作爲懲罰。。。
網癱禍首:交換機網口短接,虛擬機網口配置透明,arp代理。