常見的linux檔案查詢工具有locate和find。
locate的優點在於:它是基於索引庫建立,週期性更新。因此速度相當快,查詢時資源消耗極少。缺點是:由於不是實時查詢,所以一些在更新週期之前新增的檔案沒法找到。我們可以隨時對locate的資料庫進行手動更新,不過更新時會消耗很多的計算資源,甚至會造成暫時的卡頓。
find是乙個實時查詢工具,他的優點與locate互補:實時性好、精確度高,但是查詢速度慢且較消耗資源。
用法:find [options] [查詢起始路徑] [查詢條件] [處理動作]
查詢起始路徑:
指定具體搜尋目標起始路徑;預設為當前目錄;
查詢條件:
指定的查詢標準,可以根據檔名、大小、型別、從屬關係、許可權等等標準進行;預設為找出指定路徑下的所有檔案;
處理動作:對符合查詢條件的檔案做出的操作,例如刪除等操作;預設為輸出至標準輸出;
表示式:選項和測試
測試:結果通常為布林型("true","false")
根據檔名查詢:
-name "pattern"
-i name "pattern"
支援glob風格的萬用字元;
-regex pattern:基於正規表示式模式查詢檔案,匹配是整個路徑,而非其名;
根據檔案從屬關係查詢:
-user username:查詢屬主指定使用者的所有檔案;
-group grpname:查詢屬組指定組的所有檔案;
-uid uid:查詢屬主指定的uid的所有檔案;
-gid gid:查詢屬組指定的gid的所有檔案;
-nouser:查詢沒有屬主的檔案;
-nogroup:查詢沒有屬組的檔案;
根據檔案的型別查詢:
-type type:type包括
f:普通檔案
d:目錄檔案
b:塊裝置 檔案
c:字元裝置檔案
p:管道檔案
s:套接字檔案
組合測試:
與:-a, 預設組合邏輯;
或:-o
非:-not, !
根據檔案的大小查詢(#表示數字):
-size [+|-]#unit
常用單位:k, m, g
#unit:(#-1, #]
-#unit:[0,#-1]
+#unit:(#, oo)
根據時間戳查詢:
以「天」為單位(#表示數字):
-atime [+|-]#
#:[#, #-1)
-#:(#, 0]
+#:(oo, #-1]
-mtime
-ctime
以「分鐘」為單位:
-amin
-mmin
-cmin
根據許可權查詢:
-perm [/|-]mode
mode:精確許可權匹配;
/mode:任何一類使用者(u,g,o)的許可權中的任何一位(r,w,x)符合條件即滿足;
9位許可權之間存在「或」關係;
-mode:每一類使用者(u,g,o)的許可權中的每一位(r,w,x)同時符合條件即滿足;
9位許可權之間存在「與」關係;
-print:輸出至標準輸出;預設的動作;
-ls:類似於對查詢到的檔案執行「ls -l」命令,輸出檔案的詳細資訊;
-delete:刪除查詢到的檔案;
-fls /path/to/somefile:把查詢到的所有檔案的長格式資訊儲存至指定檔案中;
-ok command {} \; :對查詢到的每個檔案執行由command表示的命令;每次操作都由使用者進行確認;
-exec command {} \; :對查詢到的每個檔案執行由command表示的命令;
注意:find傳遞查詢到的檔案路徑至後面的命令時,是先查詢出所有符合條件的檔案路徑,並一次性傳遞給後面的命令;
但是有些命令不能接受過長的引數,此時命令執行會失敗;另一種方式可規避此問題:
find命令 | xargs command
我先把公式貼在這:
find [options] [查詢起始路徑] [查詢條件] [處理動作]
1、 查詢/var目錄下屬主為root,且屬組為mail的所有檔案或目錄;
[root@localhost ~]# find /var -user root -a -group mail -ls2、查詢/etc目錄下最近一周內其內容修改過,且屬主是root使用者的檔案或目錄;19210 0 drwxrwxr-x 2 root mail 80 aug 25 10:48 /var/spool/mail
[root@localhost ~]#
[root@localhost ~]# find /etc -mtime -7 -a -user root3、 查詢/etc目錄下大於1m且型別為普通檔案的所有檔案;/etc
/etc/fstab
/etc/resolv.conf
/etc/group-
/etc/gshadow-
/etc/passwd-
/etc/group
/etc/shadow-
/etc/gshadow
/etc/passwd
/etc/shadow
/etc/tuned/active_profile
/etc/tuned/profile_mode
/etc/sudoers
[root@localhost ~]# find /etc -size +1m -type f -exec ls -lh {} \;4、查詢/etc目錄下所有使用者都沒有任何許可權的檔案;-r--r--r--. 1 root root 7.5m jul 24 18:51/etc/udev/hwdb.bin
-rw-------. 1 root root 3.6m apr 11 14:41/etc/selinux/targeted/active/policy.kern
-rw-r--r--. 1 root root 1.3m apr 11 15:29/etc/selinux/targeted/contexts/files/file_contexts.bin
-rw-r--r--.1 root root 3.6m apr 11 14:41 /etc/selinux/targeted/policy/policy.31
[root@localhost ~]# find /etc -not -perm /777 -type f -ls5、查詢所有以.py結尾的檔案17054607 4 ---------- 1 root root 448 aug 25 09:32 /etc/gshadow-
17054828 4 ---------- 1 root root 993 aug 25 10:37 /etc/shadow-
16777478 4 ---------- 1 root root 459 aug 25 10:48 /etc/gshadow
16777474 4 ---------- 1 root root 1118 aug 25 10:53/etc/shadow
[root@localhost ~]# find / -name *.py/usr/lib/python2.7/site-packages/decorator.py
/usr/lib/python2.7/site-packages/slip/__init__.py
…省略輸出…
[root@localhost ~]# find / -inum 16777282-ok rm {} \;< rm ... /tmp/fstab > ? yes
< rm ... /tmp/fstab.ln > ?u^hyes #手抖沒刪掉
Linux入門真經 003Linux的分支版本
前一節給大家介紹了linux的應用場景,今天給大家介紹一下linux常見的發行版本。將linux核心原始碼打包編譯成二進位制檔案,並做一定程度的客製化,使其能夠友好地為客戶端所接受和使用是一件頗為複雜的事情。因此,大量linux發行商湧現,也就出現了大量的linux發行版本。我們沒有必要把每乙個發行...
Linux入門真經 007Linux命令的通用語法
這節開始給大家講linux的命令語法格式。首先我們先理解一下再bash命令列中,我們見過很多次的命令提示符字首是什麼意思 root localhost 其含義為 使用者名稱 主機 當前工作目錄 提示符 在學習linux命令之前,我們再了解一下linux檔案系統的結構。我們都用過windows,知道w...
Linux入門真經 039壓縮 解壓與歸檔
我們為什麼需要壓縮?一般是以下原因 1 檔案太大,我們將其壓縮降低磁碟的空間使用量 2 伺服器頻寬不夠,我們將向客戶端推送的內容 如web資源 進行壓縮,到達客戶端之後再用相關協議去解壓縮。用cpu的效能和時間去節省網路頻寬和延遲。其中,第一點就是我們今天主要介紹的壓縮和解壓工具。第二點,現在很多w...