1. 程式人生 > 實用技巧 >Django 3.0版本

Django 3.0版本

1.find查詢概述

為什麼要有檔案查詢,因為很多時候我們可能會忘了某個檔案所在的位置,此時就需要通過find來查詢。
find命令可以根據不同的條件來進行查詢檔案,例如:檔名稱、檔案大小、檔案修改時間、屬主屬組、許可權、等等方式。同時find命令是Linux下必須掌握的。

find 命令的基本語法如下\

命令路徑選項表示式動作
find [path…] [options] [expression] [action]
查詢 地區 妹紙 18-25歲 約?

2.find查詢示例

以下列出所有find常用的選項\

1.find名稱查詢

1
2
3
4
5
6
7
8
9
10
11
#1.建立檔案
touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}

#2.查詢/etc目錄下包含ifcfg-eth0名稱的檔案
[root@lqz ~]# find /etc -name "ifcfg-eth1"

#3.-i 忽略大小寫
[root@lqz ~]# find /etc -iname "ifcfg-eth1"
#查詢/etc目錄下包含ifcfg-eth名稱所有檔案
[root@lqz ~]# find /etc/ -name "ifcfg-eth*"
[root@lqz ~]# find /etc -iname "ifcfg-eth*"

2.find大小查詢

1
2
3
4
5
6
7
8
#1.查詢大於5M的檔案
[root@lqz ~]# find /etc -size +5M

#2.查詢等於5M的檔案
[root@lqz ~]# find /etc -size 5M

#3.查詢小於5M的檔案
[root@lqz ~]# find /etc -size -5M

3.find型別查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# f 檔案
[root@lqz ~]# find /dev -type f
# d 目錄
[root@lqz ~]# find /dev -type d
# l 連結
[root@lqz ~]# find /dev -type l
# b 塊裝置

[root@lqz ~]# find /dev -type b
# c 字元裝置
[root@lqz ~]# find /dev -type c
# s 套接字
[root@lqz ~]# find /dev -type s
# p 管道檔案
[root@lqz ~]# find /dev -type p

4.find時間查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1.建立測試檔案(後期shell會講)
[root@lqz ~]# for i in {01..28};do date -s 201904$i && touch file-$i;done

#2.查詢7天以前的檔案(不會列印當天的檔案)
[root@lqz ~]# find ./ -iname "file-*" -mtime +7

#3.查詢最近7天的檔案,不建議使用(會列印當天的檔案)
[root@lqz ~]# find ./ -iname "file-*" -mtime -7

#4.查詢第7天檔案(不會列印當天的檔案)
[root@lqz ~]# find ./ -iname "file-*" -mtime 7

#5.本地檔案保留最近7天的備份檔案, 備份伺服器保留3個月的備份檔案(實際使用方案)
find /backup/ -iname "*.bak" -mtime +7 -delete
find /backup/ -iname "*.bak" -mtime +90 -delete

5.find使用者查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#查詢屬主是jack
[root@lqz ~]# find /home -user jack
#查詢屬組是admin
[root@lqz ~]# find /home -group admin
#查詢屬主是jack, 屬組是admin
[root@lqz ~]# find /home -user jack -group admin
#查詢屬主是jack, 並且屬組是admin
[root@lqz ~]# find /home -user jack -a -group admin
#查詢屬主是jack, 或者屬組是admin
[root@lqz ~]# find /home -user jack -o -group admin
#查詢沒有屬主
[root@lqz ~]# find /home -nouser
#查詢沒有屬組
[root@lqz ~]# find /home -nogroup
#查詢沒有屬主或屬組
[root@lqz ~]# find /home -nouser -o -nogroup

6.find許可權查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
#精切匹配644許可權
[root@lqz ~]# find . -perm 644 -ls

#包含444許可權即可
[root@lqz ~]# find . -perm -444 -ls
#查詢全域性可寫(每位許可權必須包含w)
[root@lqz ~]# find . -perm -222 -ls
#包含set uid
[root@lqz ~]# find /usr/sbin -perm -4000 -ls
#包含set gid
[root@lqz ~]# find /usr/sbin -perm -2000 -ls
#包含sticky
[root@lqz ~]# find /usr/sbin -perm -1000 -ls

2.find動作處理,比如查詢到一個檔案後,需要對檔案進行如何處理, find的預設動作是 -print\

動作含義
-print 列印查詢到的內容(預設)
-ls 以長格式顯示的方式列印查詢到的內容
-delete 刪除查詢到的檔案(僅能刪除空目錄)
-ok 後面跟自定義 shell 命令(會提示是否操作)
-exec 後面跟自定義 shell 命令(標準寫法 -exec ;)

1.find查詢後的動作命令示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#1.使用-print列印查詢到的檔案
[root@lqz ~]# find /etc -name "ifcfg*"
[root@lqz ~]# find /etc -name "ifcfg*" -print

#2.使用-ls列印查詢到的檔案,以長格式顯示
[root@lqz ~]# find /etc -name "ifcfg*" -ls

#3.使用-delete刪除檔案,但僅能刪除空目錄
[root@lqz ~]# find /etc -name "ifcfg*" -delete

#4.使用-ok實現檔案拷貝,但會提示是否拷貝
[root@lqz ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \;

#5.使用-exec實現檔案拷貝和檔案刪除。
[root@lqz ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \;
[root@lqz ~]# find /etc -name "ifcfg*" -exec rm -f {} \;

2.使用find命令結合xargs

1
2
3
4
#xargs將前者命令查詢到的檔案作為一個整體傳遞後者命令的輸入
[root@lqz ~]# touch file.txt
[root@lqz ~]# find . -name "file.txt" |xargs rm -f
[root@lqz ~]# find . -name "file.txt" |xargs -I {} cp -rvf {} /var/tmp

3.find邏輯運算子

符號作用
-a
-o
-not|!
1
2
3
4
5
6
7
8
9
#1.查詢當前目錄下,屬主不是hdfs的所有檔案
[root@lqz ~]# find . -not -user hdfs
[root@lqz ~]# find . ! -user hdfs

#2.查詢當前目錄下,屬主屬於hdfs,且大小大於300位元組的檔案
[root@lqz ~]# find . -type f -a -user hdfs -a -size +300c

#3.查詢當前目錄下的屬主為hdfs或者以xml結尾的普通檔案
[root@lqz ~]# find . -type f -a \( -user hdfs -o -name '*.xml' \)

4.find相關練習題

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.查詢/tmp目錄下,屬主不是root,且檔名不以f開頭的檔案
2.查詢/var目錄下屬主為root,且屬組為mail的所有檔案
3.查詢/var目錄下不屬於root、lp、gdm的所有檔案
4.查詢/var目錄下最近一週內其內容修改過,同時屬主不為root,也不是postfix的檔案
5.查詢/etc目錄下大於1M且型別為普通檔案的所有檔案
6.將/etc/中的所有目錄(僅目錄)複製到/tmp下,目錄結構不變
7.將/etc目錄複製到/var/tmp/,/var/tmp/etc的所有目錄許可權777/var/tmp/etc目錄中所有檔案許可權666
8.保留/var/log/下最近7天的日誌檔案,其他全部刪除
9.建立touch file{1..10}10個檔案, 保留file9,其他一次全部刪除
10.解釋如下每條命令含義
mkdir /root/dir1
touch /root/dir1/file{1..10}
find /root/dir1 -type f -name "file5"
find /root/dir1 ! -name "file5"
find /root/dir1 -name "file5" -o -name "file9"
find /root/dir1 -name "file5" -o -name "file9" -ls
find /root/dir1 \( -name "file5" -o -name "file9" \) -ls
find /root/dir1 \( -name "file5" -o -name "file9" \) -exec rm -rvf {} \;
find /root/dir1 ! \( -name "file4" -o -name "file8" \) -exec rm -vf {} \;