Find命令的基本用法
在Linux系統中find命令是一個強大文件查找類工具,它支持根據文件名,權限,文件大小,訪問以及修改時間查找,使用方法如下:
find [option] [查找起始路徑] [查找條件] [處理動作]
- 起始路徑:指定查找文件或目錄的路徑,默認為當前目錄
- 查找條件:可根據文件名,權限,文件大小以及從屬關系查找文件
- 處理動作:動查找到的文件進行處理,如查看詳細信息,刪除或復制等。默認為顯示
1 查找條件的選項:
(1)根據文件名查找:-name PATTERN 支持global通配符
-iname 不區分文件名大小寫 支持global通配符 </br> -regex PATTERN 基于正則表達式但是匹配整個路徑名
(2)根據從屬關系查找:-user USERNAME 查找屬主為USERNAME的文件
-group GROUPNAME 查找屬組為GROUPNAME的文件 -uid/gid UID/GID 根據UID/GID查找文件 -nouser 查找所有沒有屬主的文件 -nogroup 查找所有沒有屬組的文件
(3)根據文件類型查找:-type TYPE (b c d f s p l)
(4)根據文件大小查找:-size[+|-]#UNIT 常用單位:K M G
#UNIT 精確匹配文件大小 -#UNIT 小于#的文件 +#UNIT 大于#的文件
(5)根據時間戳查找: -atime/-mime/-ctime[+|-]# 以天為單位查找訪問時間,修改時間或改變時間
# 精確匹配#天 [#,#-1] -# #天至當前時間的訪問區間[0-#] +# #天之前的所有文件 -amin/-mmin/-cmin[+|-]# 以分鐘為單位查找
(6)根據文件權限查找: -prem /|- mode 根據文件讀寫執行權限匹配文件
mode 精確匹配權限 /mode 只要屬主屬組以及其他用戶任意一位權限匹配均視為匹配到的文件。9位權限之間為或關系 -mod 必須匹配每一類用戶的每一位權限。9位權限之間為與關系
2 處理動作:
-print: 輸出至標準輸出,默認的動作 ## -ls:類似于對查找到的文件執行“ls -“ 命令 -delete:刪除查找到的文件 -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件 -ok COMMAND {} \; :對查找到的每個文件執行由此處COMMAND表示的命令,需確認 -exec COMMAND {} \; :對查找到的每個文件執行由此處COMMAND表示的命令,不確認
3 結合xargs 命令使用
find命令查找到文件送至后面的命令時,是先查找出所有符合條件的路徑然后一次性傳遞給后面的命令,但是有些命令不支持過長的參數,此時執行會失敗因此需要使用管道符號輸入給xargs命令執行。
xargs [options] COMMAND
-a 從文件中讀取作為stdin -p 沒執行一個參數會先詢問用戶 -t 先打印然后再執行命令 -i {}是告訴xargs,后面的命令中,用{}表示占位符,將會被實際的參數替代 -n 用于指定每次傳遞幾個參數 -d 用于指定切分輸入內容時,具體的分隔符
示例:
1 顯示etc目錄大于1M的文件并使用ls命令顯示出來
[root@mycentos etc.backup]# find /etc -size +1M | xargs ls -lh -rw-r--r--. 1 root root 6.6M Aug 16 17:04 /etc/1dss -rw-r--r--. 1 root root 1.4M Mar 6 2015 /etc/brltty/zh-tw.ctb -rw-r--r--. 1 root root 3.7M Nov 21 2015 /etc/selinux/targeted/policy/policy.29 -rw-r--r--. 1 root root 29M Aug 16 17:06 /etc/sysconfig/atd -r--r--r--. 1 root root 6.7M Jul 31 07:31 /etc/udev/hwdb.bin
2 找到所有沒有屬主屬組的文件并將屬主和屬組改為root用戶
[root@mycentos etc.backup]# find / -nouser -o -nogroup | xargs -i chown root:root {}
Find命令使用的練習
1 查找/var目錄下屬主為root且屬組為mail的所有文件和命令
[root@mycentos etc.backup]# find /var -user root -a -group mail -ls 31458804 drwxrwxr-x 2 root mail 4096 Aug 27 15:50 /var/spool/mail 3148559 60 -rw------- 1 root mail59873 Aug 27 15:50 /var/spool/mail/root
2 查找當前系統上沒有屬主或屬組并且3天內曾被訪問過的文件或目錄
[root@mycentos ~]# find / \( -nouser -a -nogroup \) -atime -3 /home/hadoop /home/hadoop/.mozilla /home/hadoop/.mozilla/extensions /home/hadoop/.mozilla/plugins
3 查找/etc目錄下所有用戶都有寫權限的文件
[root@mycentos ~]# find /etc -perm -222 -ls 251659560 lrwxrwxrwx 1 root root 17 Jul 31 07:16 /etc/mtab -> /proc/self/mounts 107365050 lrwxrwxrwx 1 root root 54 Jul 31 07:22 /etc/fonts/conf.d/65-0-lohit-tamil.conf -> /usr/share/fontconfig/conf.avail/65-0-lohit-tamil.conf 87286650 lrwxrwxrwx 1 root root 56 Jul 31 07:17 /etc/fonts/conf.d/59-liberation-mono.conf -> /usr/share/fontconfig/conf.avail/59-liberation-mono.conf 107365080 lrwxrwxrwx 1 root root 54 Jul 31 07:22 /etc/fonts/conf.d/66-ucs-miscfixed.conf -> /usr/share/fontconfig/conf.avail/66-ucs-miscfixed.conf
4 查找/etc目錄下大于1M并且類型為普通文件的所有文件
[root@mycentos ~]# find /etc -size +1M -a -type f /etc/selinux/targeted/policy/policy.29 /etc/sysconfig/atd /etc/udev/hwdb.bin /etc/1dss /etc/brltty/zh-tw.ctb
5 查找/usr目錄下不屬于root,bin或Hadoop的所有文件或目錄
[root@mycentos ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop -ls 方法1 258679324 drwx------ 2 polkitd root 4096 Jul 31 07:21 /usr/share/polkit-1/rules.d 17625859 16 -rwsr-sr-x 1 abrt abrt15336 Dec 1 2015 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache [root@mycentos ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls 方法2 258679324 drwx------ 2 polkitd root 4096 Jul 31 07:21 /usr/share/polkit-1/rules.d 17625859 16 -rwsr-sr-x 1 abrt abrt15336 Dec 1 2015 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
6 查找/etc目錄下一周內內容修改過并且屬主不是root也不是Hadoop的文件或目錄
[root@mycentos etc]# find /etc -mtime -7 -not \( -user root -o -user hadoop \) -ls 292524890 -rw-r--r-- 1 harryharry 0 Aug 27 16:21 /etc/testfile
7 查找/etc下至少有一類用戶沒有執行權限的文件
[root@mycentos etc]# find /etc/ -not -perm -111
8 查找/etc/init.d目錄下所有用戶都有執行權限并且其他用戶又有寫權限
[root@mycentos etc]# find /etc/init.d/ -perm -113 -ls 21319658 -rwxr-xrwx 1 root root 6630 Sep 16 2015 /etc/init.d/network
原創文章,作者:N27_CaiShuang,如若轉載,請注明出處:http://www.www58058.com/85590
這篇博客整理的非常好,幾乎涵蓋了find神器的各種場景,還配有案例,給你點個贊,一定能幫到不少人。