Linux文件查找find和locate
目 錄
第1章 locate文件查找 1
1.1 概述 1
1.2 locate文件查找的特性 1
第2章 文件查找概述 1
第3章 1
3.1 文件名查找 1
3.2 文件大小查找 1
3.3 時間戳查找 1
3.4 文件從屬關系查找 1
3.5 文件類型查找 1
3.6 權限查找 1
3.7 組合查找 1
3.8 處理動作 1
locate文件查找
概述
安裝
yum install -y mlocate
locate
-c:符合條件的文件數量
-b:基名查找(按文件名稱關鍵字查找,而不是文件路徑關鍵字)
locate依賴於事先構建好的索引庫
系統自動實現(周期性)
手動更新數據庫(updatedb)
locate文件查找的特性
1、查找速度快
2、模糊查找
3、不是實時更新
文件查找概述
Linux系統中的find命令在查找文件是非常有用而且方便
他可以根據不同條件來進行查找文件:例如權限,擁有者,修改時間,文件大小等等。同時find是linux下必須掌握的。
find命令的基本語法如下:
命令 | 選項 | 路徑 | 表達式 | 動作 |
find | [options] | [path] | [expression] | [action] |
文件名查找
-name:區分大小寫
-iname:忽略大小寫
通配符:*和? *:匹配多個任意字符 ?:匹配一個任意字符
-regex:基本正則表達式模糊查找文件,匹配是整個路徑,而非其名;
區分大小寫
[root@oldboy pubilc]# find /pubilc/ -name "ifcfg-ens33"
/pubilc/ifcfg-ens33
不區分大小寫
[root@oldboy pubilc]# find /pubilc/ -iname "ifcfg-ens33"
/pubilc/ifcfg-ens33
/pubilc/IFCFG-ENS33
文件大小查找
-size[+|-] #UNIT
常用單位:k、m、g
查找大於10m的文件
[root@oldboy pubilc]# find /pubilc/ -size +10M -ls
33587283 15360 -rw-r--r-- 1 root root 15728640 8月 23 16:22 /pubilc/file3.txt
33587284 12288 -rw-r--r-- 1 root root 12582912 8月 23 16:23 /pubilc/file2.txt
查找等於10M的文件
[root@oldboy pubilc]# find /pubilc/ -size 10M -ls
33587282 10240 -rw-r--r-- 1 root root 10485760 8月 23 16:21 /pubilc/file1.txt
查找小於10M的文件
[root@oldboy pubilc]# find /pubilc/ -size -10M -ls
33587264 0 drwxr-xr-x 4 root root 111 8月 23 16:22 /pubilc/
51095307 0 drwxr-xr-x 2 root root 6 8月 23 16:11 /pubilc/ifcfg-ens33
619630 0 drwxr-xr-x 2 root root 6 8月 23 16:11 /pubilc/IFCFG-ENS33
33587281 6144 -rw-r--r-- 1 root root 6291456 8月 23 16:21 /pubilc/file.txt
時間戳查找
以"天"為單位
-atime[-|+]#
#:之前第#天的文件
-#:七天內的文件
+#:七天之前的文件
以分鐘為單位:
-amin:
-mmin
-cmin:
創建文件測試文件
[root@oldboy pubilc]# for i in {01..31};do date -s 201808$i && touch file-$i;done
查找20以前的文件
[root@oldboy pubilc]# find /pubilc/ -atime +20 -ls
33587281 0 -rw-r--r-- 1 root root 0 8月 1 00:00 /pubilc/file-01
33587282 0 -rw-r--r-- 1 root root 0 8月 2 00:00 /pubilc/file-02
33587283 0 -rw-r--r-- 1 root root 0 8月 3 00:00 /pubilc/file-03
33587284 0 -rw-r--r-- 1 root root 0 8月 4 00:00 /pubilc/file-04
查找5天以內的文件
[root@oldboy pubilc]# find /pubilc/ -atime -5 -ls
33587264 4 drwxr-xr-x 2 root root 4096 8月 31 00:00 /pubilc/
33588261 0 -rw-r--r-- 1 root root 0 8月 27 00:00 /pubilc/file-27
33588262 0 -rw-r--r-- 1 root root 0 8月 28 00:00 /pubilc/file-28
33588263 0 -rw-r--r-- 1 root root 0 8月 29 00:00 /pubilc/file-29
33588264 0 -rw-r--r-- 1 root root 0 8月 30 00:00 /pubilc/file-30
33588265 0 -rw-r--r-- 1 root root 0 8月 31 00:00 /pubilc/file-31
查找前5天,當天的文件
[root@oldboy pubilc]# find /pubilc/ -atime 5 -ls
33588260 0 -rw-r--r-- 1 root root 0 8月 26 00:00 /pubilc/file-26
文件從屬關系查找
-user:查找屬主指定用戶的所有文件;
-group:查找屬組指定組的所有文件;
-uid:查找屬主指定UID的所有文件
-gid:查找屬組指定的GID的所有文件
-nouser:查找沒有屬主的文件;
nogroup:查找沒有屬組的文件;
查找屬主是oldboy的文件
[root@oldboy pubilc]# find / -user oldboy 2>/dev/null
28341 4 -rw-rw-r-- 1 oldboy oldboy 445 8月 22 21:11 /home/oldboy/2.txt
619618 0 -rw-rw-r-- 1 oldboy oldboy 0 8月 22 21:21 /home/oldboy/ab
451578 4 -rw-rw-r-- 1 oldboy oldboy 93 8月 22 21:32 /home/oldboy/ping.sh
451575 4 -rw------- 1 oldboy oldboy 2427 8月 22 21:32 /home/oldboy/.viminfo
查找屬組是oldboy的文件
[root@oldboy pubilc]# find / -group oldboy -ls
28318 12 -rw------- 1 oldboy oldboy 12288 8月 22 10:01 /home/oldboy/.123.swp
28319 0 -rw-rw-r-- 1 oldboy oldboy 0 8月 22 21:21 /home/oldboy/1.txt
28341 4 -rw-rw-r-- 1 oldboy oldboy 445 8月 22 21:11 /home/oldboy/2.txt
查找UID是的文件
[root@oldboy pubilc]# find / -uid 1000 -ls 2>/dev/null
25716 4 -rw-r--r-- 1 oldboy oldboy 231 4月 11 08:53 /home/oldboy/.bashrc
25719 4 -rw------- 1 oldboy oldboy 1115 8月 22 21:50 /home/oldboy/.bash_histo
查找GID是的文件
[root@oldboy pubilc]# find / -gid 1000 -ls 2>/dev/null
25714 4 -rw-r--r-- 1 oldboy oldboy 18 4月 11 08:53 /home/oldboy/.bash_logout
25715 4 -rw-r--r-- 1 oldboy oldboy 193 4月 11 08:53 /home/oldboy/.bash_profi
查找沒有屬主的文件
[root@oldboy pubilc]# find / -nouser 2>/dev/null -ls
619630 0 -rw-rw---- 1 1002 mail 0 8月 31 00:08 /var/spool/mail/aaa
17563463 0 drwx------ 2 1002 1002 62 8月 31 00:08 /home/aaa
17563476 4 -rw-r--r-- 1 1002 1002 18 4月 11 08:53 /home/aaa/.bash_logout
17563511 4 -rw-r--r-- 1 1002 1002 193 4月 11 08:53 /home/aaa/.bash_profile
17563512 4 -rw-r--r-- 1 1002 1002 231 4月 11 08:53 /home/aaa/.bashrc
33587290 0 -rw-r--r-- 1 1002 1002 0 8月 10 00:00 /pubilc/file-10
33574983 0 -rw-r--r-- 1 1002 1002 0 8月 16 00:00 /pubilc/file-16
查找沒有屬組的文件
[root@oldboy pubilc]# find / -nogroup 2>/dev/null -ls
17563463 0 drwx------ 2 1002 1002 62 8月 31 00:08 /home/aaa
17563476 4 -rw-r--r-- 1 1002 1002 18 4月 11 08:53 /home/aaa/.bash_logout
17563511 4 -rw-r--r-- 1 1002 1002 193 4月 11 08:53 /home/aaa/.bash_profile
17563512 4 -rw-r--r-- 1 1002 1002 231 4月 11 08:53 /home/aaa/.bashrc
33587290 0 -rw-r--r-- 1 1002 1002 0 8月 10 00:00 /pubilc/file-10
33574983 0 -rw-r--r-- 1 1002 1002 0 8月 16 00:00 /pubilc/file-16
文件類型查找
-type
f:普通文件
d:目錄文件
l:鏈接文件
c:字符設備文件
p:管道文件
b:塊設備文件
普通文件
find /public -type f
目錄
find /public -type d
鏈接文件
find /public -type l
管道文件
find /run -type p
塊設備
find /dev -type b
字符設備
find /dev -type c
套接字文件
find /dev -type s
權限查找
-perm [/|-] mode
mode:精確權限匹配;
/mode:任何一類用戶(g、u、o)的權限中的任何一位(r、w、x)符合條件即滿足;
9位權限位之間存在"或"關系;
-mode:每一類用戶(g、u、o)的權限中的每一位(r、w、x)同時符合條件即滿足;
9位權限位之間存在"與"關系;
完全匹配444權限
擁有者至少有r— 組至少有r—其他人至少有r--
[root@oldboy pubilc]# find /pubilc/ -perm -444 -ls
組合查找
與:-a(默認)
或:-o
非:-not,!
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
在/public目錄下查找屬於屬於oldboy用戶並且屬於oldgirl組的文件
[root@oldboy pubilc]# find /pubilc/ -user oldboy -a -group oldgirl -ls
33587284 0 -rw-r--r-- 1 oldboy oldgirl 0 8月 4 00:00 /pubilc/file-04
33587285 0 -rw-r--r-- 1 oldboy oldgirl 0 8月 5 00:00 /pubilc/file-05
33587286 0 -rw-r--r-- 1 oldboy oldgirl 0 8月 6 00:00 /pubilc/file-06
33587287 0 -rw-r--r-- 1 oldboy oldgirl 0 8月 7 00:00 /pubilc/file-07
在/public目錄下查找屬於oldboy或者屬於oldgirl的文件
[root@oldboy pubilc]# find /pubilc/ -user oldboy -o -user oldgirl -ls
33587288 0 -rw-r--r-- 1 oldgirl oldboy 0 8月 8 00:00 /pubilc/file-08
處理動作
當查找到一個文件後,需要對文件進行處理
-print:輸出到標準輸出,默認的動作;
-ls:類似於對查找的文件執行"ls -l"命令,輸出文件的詳細信息;
-delete:刪除查找到的文件;
-fls:/PATH/TO/SOMETILE:把查找到的所有文件的長格式信息保存至指定文件中;
-ok COMMAND {} \; :對查找的每個文件執行有COMMAND表示的 命令,每次操作都由用戶進行確認;
-exec COMMAND {} \; :對查找的每個文件執行由COMMAND表示的命令,不需要確認;
打印查詢到的文件
[root@oldboy pubilc]# find /pubilc/ -name "file-*"
/pubilc/file-01
/pubilc/file-02
/pubilc/file-03
[root@oldboy pubilc]# find /pubilc/ -name "file-*" -print
/pubilc/file-01
/pubilc/file-02
/pubilc/file-03
拷貝文件
[root@oldboy pubilc]# find /etc/sysconfig/ -name "ifcfg-ens33" -exec cp {} ./ \;
[root@oldboy pubilc]# find /etc/sysconfig/ -name "*ens33" -ok cp {} ./ \;
< cp ... /etc/sysconfig/network-scripts/ifcfg-ens33 > ? y
刪除文件
[root@oldboy pubilc]# find /pubilc/ -name "file-01" -exec rm {} \;
本地文件保留最近7天的備份,備份服務器保留3個月
[root@oldboy pubilc]# find /pubilc/ -mtime +7 -delete
[root@oldboy pubilc]# find /pubilc/ -mtime +30 -delete
Linux文件查找find和locate