1,609 瀏覽數

which , find , whereis , (s)locate 尋找檔案

  1. which 會利用PATH參數來尋找所有位於PATH目錄下可執行檔案
  2. find 會根據所指定的範圍進行搜索
  3. whereis 不僅能尋找可執行檔案,還可以尋找manpage以及原始檔
  4. (s)locate 所搜尋的是updatedb所製成的資料庫
  • which

    [root@benjr root]# which traceroute
    /usr/sbin/traceroute
    

    若加上 -a 參數,則可以列出所有的可以找到的同名執行檔,而非僅顯示第一個而已!

    [root@benjr root]# which traceroute
    /usr/sbin/traceroute
    /bin/traceroute
    
  • find paths expression

    [root@benjr root]# find / -name “passwd"
    

    依名稱來搜尋檔案,可以使用 *,? 等字元為搜尋目標.

    依檔案的擁有者不屬於任何使用者(User owner 為數字或不存在於 /etc/passwd 檔案中)來搜尋,另外針對group還有 -nogroup 可用.

    [root@benjr root]# find /home -nouser
    [root@benjr root]# find /home -nogroup
    

    除了可以單獨使用還可以搭配來使用。 使用參數 -o(-or) 還有 -a(-and) 還有 !(-not)

    [root@benjr root]# find /home -nouser -o -nogroup
    

    這樣就可以找檔案的擁有者不屬於任何使用者或者不屬於任何群組.我們還可以依據檔案的 rwx 屬性來尋找.

    [root@benjr root]# find / -perm 644
    

    找出 file permition 為 644(rw-r–r–) 的檔案,另外還可以用 -644(只比較644(rw-r–r–)不管其他bit為何),+644(只要其中一個bit相符合既可)

    [root@benjr root]# find / -perm -644
    [root@benjr root]# find / -perm +644
    

    找出檔案屬性有 SUID 者. 還可用-4000(SUID) -2000 (SGID) -1000(sTicky Bit) 等

    [root@benjr root]# find / -perm -4000
    [root@benjr root]# find / -perm -2000
    [root@benjr root]# find / -perm -1000
    

    找出檔案大於 100M的,100000單位為 kbyte. “+" 代表大於100000k, “-" 代表小於 100000k.

    [root@benjr root]# find / -size +100000
    

    找出屬性為檔案 f (file) ,還可針對目錄 d (directory) ,連結 l (softlink)來尋找.

    [root@benjr root]# find / -type f
    [root@benjr root]# find / -type d
    [root@benjr root]# find / -type l
    

    參數 -exec 將之前的結果轉向 ls -l 來處理 , {} 表示之前的結果 , \; 結束.

    [root@benjr root]# find . -nouser -exec ls -l {} \;
    

    計算目錄中各個子目錄分別的容量

    [root@benjr root]# find /home -type d -maxdepth 1 -exec du -sh {} \;
    40M /home
    20M /home/user1
    20M /home/user2
    

    至於要找檔案內容的除了要使用 find 還要配合 grep -l(-l :files with matches),如果你要找 /root 目錄下所有的檔案內容包含 Ben 字串的檔案.可以用下面方法來實現.

    [root@benjr root]# find /root/* -exec grep -l Ben {} \;
    

    至於 find 的 -exec 參數請參考上面的範例,grep的參數 -l 為只會列出含有此特定字串的檔案名稱.

    在指定的目錄內,將檔案修改成 664 (rw-r–r–)

    # find /path/to/site/ -type f -exec chmod 664 {} \;
    

    在指定的目錄內,將目錄修改成 775 (rwxrwxr-x)

    #find /path/to/site/ -type d -exec chmod 775 {} \;
    

    更多關於 find 的使用請參考 http://benjr.tw/95124

  • whereis [options] files

    whereis 不僅能尋找可執行檔案,還可以尋找manpage以及原始檔
    -b 只找可執行檔
    -f ??作用不明
    -m 只搜尋manpages
    -s 只搜尋source code
    -u ??作用不明
    -B ??作用不明
    -M ??作用不明
    -S ??作用不明

    [root@benjr root]# whereis ls
    ls: /bin/ls /usr/share/man/man1/ls.1.gz
    
  • locate patterns

    locate or slocate 所搜尋的是updatedb所製成的資料庫,locate 為slocate 的soft link,locate 命令必須擁有最新的資料庫才能正常運作,資料庫存放在 /var/lib/mlocate/mlocate.db,資料庫每天會跟新一次,由 cron daemon ( /etc/cron.daily/mlocate.cron ) 每天 4:02 自動運作,定義在 /etc/crontab ,或者你可以用指令來手動更新他的資料庫.

    在 /etc/updatedb.conf 定義了以下幾種格式 “PRUNEFS" 或是目錄 “PRUNEPATHS" 是不做更新的動作.
    PRUNEFS = “auto afs gfs gfs2 iso9660 sfs udf"
    PRUNEPATHS = “/afs /media /net /sfs /tmp /udev /var/spool/cups /var/spool/squid /var/tmp"

    我們自己在手動更新時也可以加入參數 -e directories 所指定的目錄將會排除在資料庫更新之外.
    #updatedb -e directories

    [root@benjr root]# updatedb -e “/tmp,/var/tmp,/usr/tmp,/afs,/net,/proc"
    

    更新資料庫,但將臨時性的檔案排除在外

網友的想法

  1. 自動參照通知: wordpress 4.3 無法安裝更新 | Benjr.tw

發表迴響