單獨查找檔案内容grep
grep /usr/local/* -e who #who 是查找的内容
用 zcat 檢視壓縮的檔案
單個磁盤的容量現在已經超過了 1TB,但是大型資料檔案、日志檔案、圖像以及電影等媒體檔案很快就把磁盤裝滿了。為了節省空間,可以把許多檔案壓縮到原大小的幾分之一。例如,Apache 日志檔案(是簡單的文本)可以壓縮到原大小的十分之一。
盡管壓縮可以節省磁盤空間,但是也會增加工作量。例如,如果需要分析壓縮的 Apache 日志檔案,就必須解壓它,處理資料,然後重新壓縮它。如果有大量日志檔案(如果保留分析趨勢所需的記錄,這種情況很常見),那麼開銷會非常大。
幸運的是,gzip 套件包含許多可以 “在原地” 處理壓縮檔案的實用程式。zcat、zgrep、zless、zdiff 等實用程式的作用分别與 cat、grep、less 和 diff 相同,但是它們操作壓縮的檔案。
zcat /home/downfile/test.tar.gz | grep -a 'key_name' # -a : grep認為這是二進制檔案
用 pgrep 尋找程序
您可能無數次使用 ps aux | grep ... 尋找程序。這當然是有效的,但是有一種更高效的搜尋程序的方法。請試試 pgrep。
例如,以下指令尋找 strike 的所有登入 shell(其中的 strike 是使用者名):
$ pgrep -l -u strike zsh
10331 zsh
10966 zsh
pgrep 指令提供篩選選項,允許按使用者名(上面給出的 -u)、程序組、組等篩選程序。配套的實用程式 pkill 接受 pgrep 的所有選項和一個信号,它把這個信号發送給與給定的條件比對的所有程序。
例如,指令 pkill -9 -u strike zsh 與 pgrep -u strike zsh | xargs kill -9 等效。
ldd 指令路徑 檢視執行檔案所依賴的庫檔案
strace 指令 檢視執行檔案具體系統執行流程
[[email protected] ~]#pmap -d 9639
每列的含義如下:
參數 解釋
Address:程序所占的位址空間
Kbytes:該虛拟段的大小
RSS:裝置号(主裝置:次裝置)
Anon:裝置的節點号,0表示沒有節點與記憶體相對應
Locked:是否允許swapped
Mode 權限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
Mapping:bash 對應的映像檔案名
Resident :表示在記憶體中駐留的段的空間
shared :表示這些北配置設定的記憶體是被系統中其他程序共享的。
private :表示隻能被該程序使用的空間大小。你可以發現share的空間不具有 private的屬性。
Prstat -LP 的輸出的意義是:
size:就是該程序占用的位址空間。
RSS:實際被配置設定的記憶體的大小。
你看到的resident和RSS不同,是RSS是程序在記憶體中的實際的大小,這個數值最大可以達到Resident顯示數值。
比方說,用pgrep java得出pid後,用pmap $pid,得出輸出結果如下:
23792: /usr/java/jdk1.5.0_14/bin/java-Djava.util.logging.manager=com.caucho.log.LogManagerImpl-Djava.system.class.loader=com.caucho.loader.SystemClassLoader-Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl-Djava.awt.headless=true -Dresin.home=/usr/local/resin3.1.8-rtuku/-Xmx256m -Xss1m -Xdebug -Dcom.sun.management.jmxremote-Djava.util.logging.manager=com.caucho.log.LogManagerImpl-Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl-Djava.awt.headless=true -Dresin.
0028f000 72K r-x-- /lib/libnsl-2.3.4.so
002a1000 8K rwx-- /lib/libnsl-2.3.4.so
002a3000 8K rwx-- [anon ]
0031c000 84K r-x-- /lib/ld-2.3.4.so
00331000 4K r-x-- /lib/ld-2.3.4.so
00332000 4K rwx-- /lib/ld-2.3.4.so
0033a000 1172K r-x-- /lib/tls/libc-2.3.4.so
0045f000 4K r-x-- /lib/tls/libc-2.3.4.so
00460000 12K rwx-- /lib/tls/libc-2.3.4.so
00463000 8K rwx-- [anon ]
00467000 132K r-x-- /lib/tls/libm-2.3.4.so
……
b7f50000 4K rwx-- [anon ]
b7f51000 4K r-x-- [anon ]
b7f52000 4K r-x-- [anon ]
bfcf1000 12K ----- [ anon]
bfcf4000 1012K rwx-- [ stack ]
total 652340K
從中可以看出來加載的所有so和線程堆棧用掉的記憶體。
據稱,當anon在512K-4M之間的超過上千個的時候,可能就是在多線程上有問題了。
還有一個用途,比較偏門的。
比如一個squid伺服器,前人直接cd進目錄,然後./squid啟用的服務。那怎麼去知道這個squid到底在那個目錄裡呢?(尤其是發現慣用的/usr/local下嘩嘩的擺着五個squid目錄……)
現在隻要pmap 一下,第一條就給出了全路徑。哈哈~~