[shell基礎]——find命令

Jelly_lyj發表於2017-03-18

find命令選項
-name 按照檔名查詢
-type 查詢某一型別的檔案(b 代表裝置塊;d 目錄;c 字元裝置檔案;l 符號(軟)連結檔案;f 普通檔案)
-size 查詢檔案長度或者大小

-prune 查詢檔案時排除當前資料夾,不查詢
-path
-depth 查詢檔案時,首先查詢當前檔案、當前目錄中的檔案,然後再在其子目錄當中查詢
-maxdepth 後面跟數字num,表示在當前目錄下往下num層深度(預設為1層)

-perm 按照檔案許可權來查詢
-user 可以按照檔案屬主來查詢
-group 可以按照檔案陣列來查詢
-nouser 查詢無效所屬主的檔案
-nogroup 查詢無效所屬組的檔案

-newer:查詢比檔案更新時間更新的檔案
-mtime:按物件內容修改時間查詢(天數)
-atime:按物件被訪問的時間查詢(天數)
-ctime:按物件狀態被修改的時間去查詢(天數)
-mmin/-amin/-cmin:(分鐘數)
        “+ n” n天/分鐘以前的
        “- n” n天/分鐘以內的

-empty 查詢大小為0的檔案或空目錄
-mount 在查詢檔案系統時不跨越mount的檔案系統
-follow 如果find命令遇到符號連結檔案,就跟蹤連結檔案指向的原始檔

-a 且
-o 或
! 非
-ok 提醒你是否要執行後面的命令

 


(1) -name

查詢/test下面所有以.txt結尾的檔案
# find /test -name "*.txt"

查詢/test下面所有以數字開頭的txt檔案
# find /test -name "[0-9].txt"

查詢/目錄下面的"passwd"檔案和"profile" 檔案
# find / -name "profile" -o -name "passwd"

 
(2) -type

查詢/test下面所有的目錄
# find /test -type d | xargs file

查詢/etc 下面的所有l 連線檔案
# find /etc -type l | xargs ls -l | more

 
(3) -size

查詢當前目錄檔案大於10M的檔案
# find . -size +10M | xargs du –lh

查詢當前目錄檔案小於10M的檔案
# find . -size -10M | xargs du –lh

查詢/etc/目錄下面大於1M的檔案,並且把 檔案大小資訊列出來
# find /etc/ -size +1M |xargs du -sh

 
(4) -prune -path -depth

當前目錄下有1.doc、2.doc,其子目錄/test下有3.doc、4.doc
查詢當前目錄下所有的.doc檔案
# find . -name "*.doc"
./test/4.doc
./test/3.doc
./2.doc
./1.doc

忽略子目錄/test,只查詢當前目錄的.doc檔案
# find . -path "./test" -prune -o -name "*.doc"
./test
./2.doc
./1.doc

進入(或者說是指定)子目錄/test查詢.doc檔案
# find ./test -depth -name "*.doc"
./test/4.doc
./test/3.doc

 
(5) -perm

查詢/test下許可權為755的檔案
# find /test -perm 755

 
(6) -user -group -nouser -nogroup

修改gongda.txt檔案的屬主屬組為gongda
# useradd gongda
# touch gongda.txt
# chown gongda:gongda gongda.txt

查詢當前目錄下屬主為gongda的檔案
# find . -user gongda | xargs ls -l
-rw-r--r-- 1 gongda gongda 0 5月 13 20:50 ./gongda.txt

查詢當前目錄下屬組為gongda的檔案
# find . -group gongda | xargs ls -l
-rw-r--r-- 1 gongda gongda 0 5月 13 20:50 ./gongda.txt

刪除gongda使用者和組
# userdel -r gongda

查詢當前目錄下無效屬主的檔案
# find . -nouser | xargs ls -l
-rw-r--r-- 1 509 509 0 5月 13 20:50 ./gongda.txt

查詢當前目錄下無效屬組的檔案
# find -nogroup | xargs ls -l
-rw-r--r-- 1 509 509 0 5月 13 20:50 ./gongda.txt

 
(7) -newer

查詢比1.txt新的檔案
# find . -newer 1.txt

查詢比1.txt新但是比alvin.txt舊的檔案
# find . -newer 1.txt ! -newer alvin.txt 

 
(8) -mtime

查詢在/目錄下面更改時間在5天以內的檔案
# find / -mtime -5

查詢在/目錄下面更改時間在3天以前的目錄
# find / -mtime +3

 
(9) -mount

表示不能垮檔案系統查詢,自己當前mount的檔案系統查詢
# find / -mount -name "alvinzeng.txt" 

 
(10)使用exec或者ok來執行shell命令
find . -type f -exec ls -l {} \; 不提示
find . -type f –ok ls -l {} \; 安全提示

-ok 後面一般根刪除命令rml
find /test -type f –ok rm {} \;

(11) xargs命令
xargs比exec更加方便
find /test –name “*.*” | xargs ls –l

 


find練習題

1、查詢/目錄下面的"passwd"檔案和"profile" 檔案

# find / -name "profile" -o -name "passwd"
/usr/local/python3.5.1/lib/python3.5/site-packages/IPython/core/profile
/usr/bin/passwd
/usr/libexec/emacs/23.1/x86_64-redhat-linux-gnu/profile
/usr/src/kernels/2.6.32-279.el6.x86_64/include/config/branch/profile
/root/.vnc/passwd
/root/apr-1.5.2/passwd
/root/passwd
/root/home/passwd
/etc/pam.d/passwd
/etc/passwd
/etc/profile
/passwd
/home/passwd

 
2、查詢/tmp下面許可權為755的檔案

# find /tmp -perm 755 

 
3、在/test/aa 下面建立一個名字為 gongda.txt的檔案,用find命令把/test/aa目 錄給忽略掉是否還可以查詢的到?

4、建立一個使用者和組 名為gongda,然後 gongda.txt所屬使用者和所屬組全部修改成 gongda,使用user和group查詢gongda的使用者組,是否可 以查詢到?然後刪除掉gongda使用者和組,再用nouser 和 nogroup查詢沒有所屬和說是組的檔案是否可以 查到?

# useradd gongda
# touch gongda.txt
# chown gongda:gongda gongda.txt
# find . -user gongda |xargs ls -l
-rw-r--r-- 1 gongda gongda 0 5月 13 20:50 ./gongda.txt
# find . -group gongda | xargs ls -l
-rw-r--r-- 1 gongda gongda 0 5月 13 20:50 ./gongda.txt
# userdel -r gongda
# find . -nouser | xargs ls -l
-rw-r--r-- 1 509 509 0 5月 13 20:50 ./gongda.txt
# find -nogroup | xargs ls -l
-rw-r--r-- 1 509 509 0 5月 13 20:50 ./gongda.txt

 
5、查詢在/目錄下面更改時間在5天以內的檔案

# find / -mtime -5 

 
6、查詢在/目錄下面更改時間在3天以前的目錄

# find / -mtime +3 

 
7、在/opt/test/下面建立一個名字為new.txt 檔案。等5分鐘後再建立一個ok.txt的檔案。使 用find命令查詢比gongda.txt新比ok.txt舊的 檔案。

8、使用find查詢/home下面所有的目錄

# find /home -type d |xargs file
/home: directory
/home/user25: directory
/home/user25/.mozilla: directory

 
9、使用find查詢/home下面所有的檔案,非目 錄

# find /home ! -type d |xargs file

 
10、使用find查詢/etc/ 下面所有的連線檔案

# find /etc -type l

 
11、查詢/etc/目錄下面大於1M的檔案,並且把 檔案大小資訊列出來。

# find /etc/ -size +1M |xargs du -sh
2.0M /etc/gconf/gconf.xml.defaults/%gconf-tree.xml
6.3M /etc/selinux/targeted/policy/policy.24
6.3M /etc/selinux/targeted/modules/active/policy.kern

 
12、查詢/etc/目錄下面小於500K的檔案,並且 把檔案大小資訊列出來

# find /etc/ -size -500k |xargs du -sh

 
13、查詢/opt/test 子目錄下面的gongda.txt 檔案

# find "./test" -depth -name gongda.txt
./test/gongda.txt

 
14、檢查系統有幾個掛在的檔案系統,比如/ 和/home是分開的,那麼在/home/建立一個sxgongda.txt檔案。使用find 引數mount查詢/目錄是否可以查到sxgongda.txt檔案?

15、查詢/opt/下面的gongda.txt檔案,並且使 用exec 列出它的詳細資訊。

# find /opt/ -name gongda.txt -exec ls -l {} \;
-rw-r--r-- 1 509 509 0 5月 13 20:50 /opt/rh/gongda.txt
-rw-r--r-- 1 root root 0 5月 13 21:31 /opt/rh/test/gongda.txt

 
16、使用什麼引數可以每次find後跟系統命令 時給出安全提示?
# -ok

 

 

 

相關文章