作用: 根據不同的檔案型別查詢出想要的檔案
語法結構:
find 在哪裡找 找什麼型別的 # 格式1
find /data f
find /data 按照名稱查詢 # 格式2
【1】、常用檔案型別
檔案型別:
f # 表示普通檔案
d # 表示目錄
l # 表示連結檔案
c # 表示位元組裝置
b # 表示塊裝置 /dev/sda 磁碟 光碟機
1、/dev/urandom
位元組裝置:
urandom #作用 不停的往外吐 沒啥用
[root@oldboyedu ~]# ll /dev/urandom
crw-rw-rw- 1 root root 1, 9 11月 16 12:29 /dev/urandom
2、/dev/null
/dev/null #作用 可以將命令的結果定向到此檔案 空 類似黑洞 只吃不拉
[root@oldboyedu ~]# echo hehe > /dev/null
[root@oldboyedu ~]# cat /dev/null
[root@oldboyedu ~]# echo hehe >> /dev/null
[root@oldboyedu ~]# cat /dev/null
作用: 寫指令碼執行命令的時候,會根據自己想要輸出的內容來定義輸出格式。
[root@oldboyedu ~]# ping -c1 -W1 www.sina.com &>/dev/null
[root@oldboyedu ~]# echo $?
0
[root@oldboyedu ~]# ping -c1 -W1 www.sinsssssssssa.com &>/dev/null
[root@oldboyedu ~]# echo $?
2
# shell指令碼
ping -c1 -w1 www.baidu.com &>/dev/null
if [ $? -eq 0 ]; then
echo "百度線上"
else
echo "百度不線上"
fi
3、/dev/zero
[root@kylin-xu ~]# dd if=/dev/zero of=./1.txt bs=1M count=1000
記錄了1000+0 的讀入
記錄了1000+0 的寫出
1048576000位元組(1.0 GB,1000 MiB)已複製,16.5751 s,63.3 MB/s
[root@kylin-xu ~]# ll 1.txt
-rw-r--r-- 1 root root 1048576000 11月 13 10:43 1.txt
[root@kylin-xu ~]# ll 1.txt -h
-rw-r--r-- 1 root root 1000M 11月 13 10:43 1.txt
dd # 命令
if # input file 輸入檔案 /dev/zero輸入內容
of # ouput file 輸出到哪個檔案 1.txt 中
bs # 每次讀取的大小 bs=1M 每次在/dev/zero中讀取1M的資料
count # 總共讀多少次
#透過dd生成一個10M的檔案
[root@oldboyedu ~]# dd if=/dev/zero of=./2.txt bs=1M count=10
【2】、查詢檔案
find檔案查詢
作用: 查詢檔案
1.查詢大檔案
2.小檔案多的
inode號,一個檔案最少佔用一個inode和一個block
相當於一本書的索引,一本書的目錄有限制的 比如200個
3.模糊查詢
4.按照時間查詢
檢視inode使用
[root@kylin-xu ~]# df -i
檔案系統 Inodes 已用(I) 可用(I) 已用(I)% 掛載點
devtmpfs 246341 475 245866 1% /dev
tmpfs 250387 1 250386 1% /dev/shm
tmpfs 250387 721 249666 1% /run
tmpfs 250387 17 250370 1% /sys/fs/cgroup
/dev/mapper/klas-root 20066304 124968 19941336 1% /
tmpfs 250387 12 250375 1% /tmp
/dev/mapper/klas-backup 9795584 8 9795576 1% /backup
/dev/sda1 524288 340 523948 1% /boot
tmpfs 250387 6 250381 1% /run/user/0
1、安裝檔案型別進行查詢
find:
find ./ -type f # 按照檔案型別查詢
find ./ -type f -o -type d # 使用或者關係查詢
-o or # 或者
-a and# 並且 預設就是並且關係
案例1.find按照檔案型別查詢出所有的普通檔案
[root@kylin-xu find]# find ./ -type f
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
./test-2/1.TXT
./test-2/2.TXT
./test-2/3.TXT
./a.txt
./b.txt
案例2.查詢出所有的目錄檔案
[root@kylin-xu find]# find ./ -type d
./
./test-1
./test-2
./test-3
其他型別查詢
find / -type l
find / -type b
find / -type c
案例3.查詢出檔案或者是目錄的
[root@kylin-xu find]# find ./ -type f -o -type d
./
./test-1
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
./test-2
./test-2/1.TXT
./test-2/2.TXT
./test-2/3.TXT
./a.txt
./b.txt
./test-3
2、按照檔名字進行查詢
案例1.查詢出檔名稱1.txt的
[root@kylin-xu find]# find ./ -name 1.txt
./test-1/1.txt
案例2.不區分大小寫使用 -iname
[root@kylin-xu find]# find ./ -iname 1.txt
./test-1/1.txt
./test-2/1.TXT
案例3.使用萬用字元 * 表示所有,?表示一個字元
[root@kylin-xu find]# find ./ -name "[21].txt"
./test-1/1.txt
./test-1/2.txt
[root@kylin-xu find]# find ./ -name "[0-9].txt"
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
[root@kylin-xu find]# find ./ -name "[0-9a-Z].txt"
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
./a.txt
./b.txt
[root@kylin-xu find]# find ./ -name "?.txt"
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
./a.txt
./b.txt
[root@kylin-xu find]# find ./ -name "*.*"
./
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
./test-2/1.TXT
./test-2/2.TXT
./test-2/3.TXT
./a.txt
./b.txt
./12.txt
3、find使用並且和或者查詢檔案
案例1.查詢出普通檔案並且名稱為1.txt的
[root@kylin-xu find]# find ./ -type f -a -name 1.txt
./test-1/1.txt
案例2.查詢出目錄並且名稱是test-1
[root@kylin-xu find]# find ./ -type d -a -name test-1
./test-1
案例3.查詢出檔名稱*.txt 或者 *.log
[root@kylin-xu find]# find ./ -name "*.txt" -o -name "*.log"
./test-1/1.txt
./test-1/2.txt
./test-1/3.txt
./a.txt
./b.txt
./12.txt
案例4.按照深度等級查詢
[root@kylin-xu find]# find ./ -maxdepth 1 -name "*.txt" -o -name "*.log"
./a.txt
./b.txt
./12.txt
4、按照inode號查詢
[root@kylin-xu find]# ll -i
總用量 0
102615330 -rw-r--r-- 1 root root 0 11月 13 11:36 12.txt
102615328 -rw-r--r-- 1 root root 0 11月 13 11:08 a.txt
102615329 -rw-r--r-- 1 root root 0 11月 13 11:08 b.txt
1781175 drwxr-xr-x 2 root root 84 11月 13 11:55 test-1
34853858 drwxr-xr-x 2 root root 45 11月 13 11:08 test-2
67723713 drwxr-xr-x 2 root root 6 11月 13 11:08 test-3
[root@kylin-xu find]# find ./ -inum 102615330
./12.txt
[root@kylin-xu find]# find ./ -inum 102615330 | xargs rm
[root@kylin-xu find]# ll
總用量 0
-rw-r--r-- 1 root root 0 11月 13 11:08 a.txt
-rw-r--r-- 1 root root 0 11月 13 11:08 b.txt
drwxr-xr-x 2 root root 84 11月 13 11:55 test-1
drwxr-xr-x 2 root root 45 11月 13 11:08 test-2
drwxr-xr-x 2 root root 6 11月 13 11:08 test-3
5、find按照大小查詢檔案
語法格式:
find ./ -size 10M # 查詢出等於10M的檔案
find ./ -size +10M # 查詢出大於10M的檔案
find ./ -size -10M # 查詢出小於10M的檔案
案例1.查詢出大於10M的檔案
[root@kylin-xu find]# find ./ -size +10M
./1.txt
案例2.查詢出等於10M的檔案
[root@kylin-xu find]# find ./ -size 10M
./2.txt
案例3.查詢出小於10M的檔案
[root@kylin-xu find]# find ./ -size -10M
案例4.查詢出等於10M或者大於10M的檔案
[root@kylin-xu find]# find ./ -size 10M -o -size +10M
./1.txt
./2.txt
# 注意預設就是並且關係可以省略 -a -o不能省略
案例5.查詢出普通檔案並且大於10M的檔案
[root@kylin-xu find]# find ./ -type f -o -size +10M
案例6.查詢出檔案大於5M 並且小於15M的
[root@kylin-xu find]# find ./ -type f -a -size +5M -a -size -15M
./2.txt
案例7.查詢出大於1M的目錄 #一般來說不會存在,如果目錄大於1M 說明下面已經存在5萬+的小檔案
[root@kylin-xu find]# find / -type d -size +1M
統計目錄及下所有大小
[root@kylin-xu find]# du /etc/ -sh
25M /etc/
6、按照時間查詢檔案
語法格式:
三種時間:
atime: 訪問時間
mtime: 檔案修改時間
ctime: 檔案屬性修改時間
find ./ -mtime +7 # 7天前修改過的檔案
find ./ -mtime -7 # 7天內修改過的檔案
find ./ -mtime 0 # 24小時內被修改過的檔案
[root@kylin-xu find]# stat 1.txt
檔案:“1.txt”
大小:1048576000 塊:2048000 IO 塊:4096 普通檔案
裝置:fd00h/64768d Inode:102615330 硬連結:1
許可權:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近訪問:2024-11-13 12:03:00.507104942 -0300
最近更改:2024-11-13 12:03:11.399051736 -0300
最近改動:2024-11-13 12:03:11.399051736 -0300
建立時間:-
案例1.查詢24小時內被修改過的檔案
find / -mtime 0
案例2.查詢出修改時間大於30天前的檔案
find / -type f -mtime +30
案例3.查詢出修改時間大於30天前所有的檔案
find / -mtime +30
[root@kylin-xu find]# date -s 20080302
2008年 03月 02日 星期日 00:00:00 -03
[root@kylin-xu find]# touch 2008{1..3}.txt
[root@kylin-xu find]# mkdir 2008{1..3}
[root@kylin-xu find]# ntpdate ntp2.aliyun.com
17 Nov 12:02:02 ntpdate[237947]: step time server 203.107.6.88 offset +527428869.143752 sec
[root@kylin-xu find]# find ./ -mtime +30
./
./20081.txt
./20082.txt
./20083.txt
./20081
./20082
./20083
時間查詢的作用:
1.大於7天或者30天前的檔案不用了需要備份或者刪除
2.系統中毒 檔案被篡改。
筆試題: 查詢/data目錄下所有的普通檔案修改時間大於30天前的然後刪除
【3】、將find的結果交給其他命令
1、xargs
案例1.找出檔名稱3.txt的然後檢視裡面的內容
[root@kylin-xu find]# find ./ -name 3.txt | xargs cat
aaa
為什麼不用ll 因為xargs後面所有的別名失效。
# xargs: 將前面命令執行的結果 甩到所有命令的最後面、
# xargs可以格式化輸出 按n列的方式 預設以空格分隔
# |xargs -n1 # 按1列的方式輸出內容
案例2.查詢名稱3.txt的檔案然後刪除
[root@kylin-xu find]# find ./ -name 3.txt | xargs rm
案例3.查詢名稱1.txt的檔案然後複製到/opt目錄
[root@kylin-xu find]# find ./ -name 1.txt | xargs -i cp {} /opt/
[root@kylin-xu find]# ll /opt/1.txt
-rw-r--r-- 1 root root 1048576000 11月 17 12:22 /opt/1.txt
案例4.查詢名稱1.txt 然後移動到/tmp目錄
[root@kylin-xu find]# find ./ -name 1.txt | xargs -i mv {} /tmp/
案例5.複製多個檔案到/opt目錄
find ./ -name "*.txt" | xargs -i cp {} /opt
2、-exec
案例1.交給cat命令
[root@kylin-xu find]# find ./ -name 1.log -exec cat {} \;
aaa
案例2.交給cp動作
[root@kylin-xu find]# find ./ -name 1.log -exec cp {} /opt \;
[root@kylin-xu find]# ll /opt/1.log
-rw-r--r-- 1 root root 4 11月 17 12:31 /opt/1.log
案例3.交給rm動作
[root@kylin-xu find]# find ./ -name *.log -exec rm {} \;
[root@kylin-xu find]# find ./ -name *.log
[root@kylin-xu find]#
案例4.查詢出所有大寫的.TXT結尾的檔案 然後打包成test.tar.gz
[root@kylin-xu find]# find ./ -name *.TXT -exec tar -zcvf test.tar.gz {} \;
./test-2/1.TXT
./test-2/2.TXT
./test-2/3.TXT
[root@kylin-xu find]# tar tf test.tar.gz
./test-2/3.TXT
[root@kylin-xu find]# find ./ -name *.TXT | xargs tar zcvf a.tar.gz
./test-2/1.TXT
./test-2/2.TXT
./test-2/3.TXT
[root@kylin-xu find]# tar tf a.tar.gz
./test-2/1.TXT
./test-2/2.TXT
./test-2/3.TXT
# 如果使用 -exec 去進行壓縮,他只會壓縮最後查詢的內容
# 使用 xargs 進行壓縮,就是全部完整的內容,因此在進行壓縮操作時我們不會使用 -exec 引數
3、``或$()
案例1.將查詢到的檔案交給cp命令
cp `find ./ -name "*.txt"` /opt
案例2.將查詢到的檔案交給ll命令
ll $(find ./ -name "1.txt")
案例3.交給cat命令
cat `find ./ -name "2.txt"`
案例4.複製查詢到的所有檔案到/root
cp $(find ./ -size +10K) /root
案例5.查詢到的檔案交給rm命令
rm -f $(find ./ -size -10M)