在Linux下我們經常要查找某個文件,但是又不記得文件位置,可以使用一些命令來搜索,目前接觸到的文件命令有以下幾個
which 查看可執行文件的位置
locate 基于數據庫查找文件位置
find 實時搜索文件
1、 Which
語法:which 可執行二進制文件名稱
Which是通過PATH環境變量查找文件的,在PATH 指定的路徑中,搜索某個命令的位置,也就是說使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪個位置的命令
注:對于一些命令使用which也查不出結果。有以下兩種可能
(1 (1) 命令所在的目錄不在PATH的查找路徑范圍內
( (2) 命令屬于是內部命令,可以使用type命令確認命令類型
2、Locate
locate命令用于查找文件,優點是搜索速度快,缺點是基于數據庫查找,缺乏實時性,而且是模糊查找。它在查找的時候需要一個數據庫,這個數據庫是由每天的例行工作(crontab)程序來建立。當我們建立好這個數據庫后,就可以方便地來搜尋所需文件了。
即先運行:updatedb(無論在那個目錄中均可,可以放在crontab中 )后在 /var/lib/slocate/ 下生成 slocate.db 數據庫即可快速查找。在命令提示符下直接執行#updatedb 命令即可。
語法:locate 文件名
普通查詢:搜索包含給定字符串的文件路徑
選項:
-i 不區分大小寫的搜索
-n X只列舉前X個匹配項目
-r 支持正則表達式
3、Find
根據指定條件查找指定路徑(如果不指定路徑,默認是當前目錄)下的文件或者目錄(默認進行遞歸查詢),還可對查詢結果進行進一步的操作
工作特點:查詢速度較locate較慢(因為是實時查找)
精準查找
只能搜索用戶具備讀取和執行權限的目錄
語法 find 路徑 參數
參數選項說明
-maxdepth level 最大搜索
-mindepth level 最小搜索深度
find命令默認是進行遞歸查找,如果不行進行遞歸查找,可以將最大搜索深度設為1
-name 基于名稱的精確查找 可以使用通配符* 、? [] [^]
-iname 忽略大小寫的查找
-inum 基于inode號查找
-samefile 基于相同inode號的查找(查找硬鏈接)
-links n 硬鏈接為n的文件
-regex 支持正則 默認為(emacs標準)不支持[:upper:] [:alnum:],只能用[a-z] [0-9]之類的表達
-regextype egrep -regex 支持egrep同標準的正則
-user 用戶名 基于文件owner的查找
-group 組名 基于文件group的查找
-uid userid 基于文件uid的查找
-gid groupid 基于文件gid的查找
-nouser 查找沒有owner的文件
-nogroup 查找沒有group的文件
-type 基于文件類型的查找
? f: 普通文件
? d: 目錄文件
? l: 符號鏈接文件
? s:套接字文件
? b: 塊設備文件
? c: 字符設備文件
根據時間戳查找
以“天”為單位
-atime [+|-]#, 訪問時間
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime 文件修改時間
-ctime元數據時間
以“分鐘”為單位
-amin 訪問時間
-mmin 文件數據修改時間
-cmin 文件元數據修改時間
-perm
mode:精確權限匹配(這能匹配到指定權限的文件
+mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰
/644 是指匹配owner位上有讀寫權限或者group位上有讀權限或者other位上有讀權限的文件
-mode 每一類對象都必須同時擁有指定權限,與關系 0 表示不關注
-421 匹配的是owner位上有讀權限且group位上有寫權限且other位上有執行權限的文件
-delete 直接刪除所查找到的文件,不詢問。
-ls 長列出所查找到的文件
-ls 屬于find命令的一個選項,并不是ls命令查出來的
-ok command \;(結束必須是空格加
‘\ ’再加 ;)對查找到的文件當做下一命令的參數去執行(交互式)(執行操作的時候每一個步驟會問,尤其是執行刪除操作的時候使用這種方式可以防止誤刪除)
-exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式)
(直接執行不會詢問,當執行刪除操作時不安全)
xargs 用于產生某個命令的參數,xargs可以讀入stdin的數據,并且以空格符或回車符將stdin的數據分隔成為argument
使用這種可以大批量刪除一些文件,因為如果文件過多使用rm
–rf * 是刪不掉的,可以使用這種方法將參數一個一個的傳遞給rm命令 ,實現大批量刪除
練習:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
find /var -user root -a -group mail -ls
2、查找/var目錄下不屬于root、lp、gdm的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \) -ls
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
find /var/ -mtime -7 -not -user root -not -user postfix -ls
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
find / -nouser -o -nogroup -a -atime -7 -ls
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
find /etc/ -size +1M -a -type f -ls
6、查找/etc目錄下所有用戶都沒有寫權限的文件
find /etc ! -perm /222 -ls
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
find /etc ! -perm -111 -ls
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
find /etc/init.d/ -perm -113 -ls
原創文章,作者:Melissa,如若轉載,請注明出處:http://www.www58058.com/84661