前言
Linux控制台情況下,想要查詢到想要的文件詳細大家都會使用簡單的命令去尋找(例如:find)
可是問題來了?我如果想准確查找某個文件??
例如要尋求這樣一個文件:名稱含有 ”ass” 字符,且是可執行文件,以及是在2天前由bajie這個用戶創建的。
親、這樣你如果執意去用 find 命令估計要手酸了……
涉及命令如下
1、which
2、whereis
3、locate
4、find
which命令詳解
釋義:which 指令會在環境變量$PATH設置的目錄里查找符合條件的文件
首先要確認查找的文件路徑在 該用戶的 $PATH 環境變量內(每個用戶的 $PATH 變量時不同的)。
首先如何查看用戶 $PATH 環境變量呢?
Linux終端下輸入 echo $PATH 系統會在終端輸出當前用戶$PATH變量內容。
例如筆者的 $PATH 如下:
案例1:(查詢 passwd 文件因為 passwd 路徑在$PATH內 )
[root@localhost root]# which -a passwd
/usr/bin/passwd
這里的 參數 -a 意思是查找所有符合條件的文件並輸出,而非直輸出第一個(重要)
案例2:(查詢不在 $PATH 內的文件發生如下錯誤)
[root@localhost root]# which mydata
/usr/bin/which: no mydata in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
關於which還有如下參數:
-n<文件名長度> 指定文件名長度,指定的長度必須大於或等於所有文件中最長的文件名。
-p<文件名長度> 與-n參數相同,但此處的<文件名長度>包括了文件的路徑。
-w 指定輸出時欄位的寬度。
-V 顯示版本信息
再啰嗦一句:一定確定要查找的文件在該用戶 $PATH 環境變量不了內!!錯了別找我。。。阿門~~
whereis明顯詳解
釋義:在系統數據庫中存在文件結構查找文件
注:系統數據庫每天更新一次 (根據Linux發行版本不同可能有所區別)
優點:數據庫查找速度方面肯定比 find 物理硬盤查找的速度快N倍!
缺點:無法查詢數據庫中不存在 或 物理硬盤新建(未超過一天),數據庫不存在的文件。
該命令日常使用相對較為頻繁
參 數:
-b 只查找二進制文件。
-B<目錄> 只在設置的目錄下查找二進制文件。
-f 不顯示文件名前的路徑名稱。
-m 只查找說明文件。
-M<目錄> 只在設置的目錄下查找說明文件。
-s 只查找原始代碼文件。
-S<目錄> 只在設置的目錄下查找原始代碼文件。
-u 查找不包含指定類型的文件。
案例1:
[root@localhost root]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.lock /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhost root]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.lock
可以看到第一個無 -b 命令查找到5個文件,第二個命令只查找到3個 (-b為只查找二進制文件)
速度明顯比find快。。。親、自己去體驗吧。。
locate命令詳解
釋義:查找文件(數據庫內查找)
參數:
-i :忽略查找文件名的大小寫
-r :后面可接正則表達式的顯示方式
用法很簡單,直接 locate 文件的部分名稱 即可。
問題來了:剛才我創建了3個文件,我只記得2個,還有一個是wukong開頭的其他的忘了。。。
怎么辦?? whereis ? ?那你肯定找不到。。。為什么??你懂得。
怎么辦??運行命令 updatedb(更新系統數據庫)
再使用whereis 哦了~~
updatedb 命令詳解:
該命令運行后 命令回去讀取 /etc/updatedb.conf 配置文件,然后去硬盤里進行查找文件操作,最后更新整個數據庫文件(/var/lib/mlocate 內的數據庫文件)。
因為updatedb回去硬盤上查找文件,速度可能會等幾分鍾。。。
find命令詳解
注:該命令由於效率問題不常用 (以上命令查不到情況下,可使用 find 直接查找硬盤文件)
特點:直接查找硬盤 准確 (ps:該函數查不到,那你就絕望吧。。)
用法:find [PATH] [option] [action]
參數:
1、時間有關參數:-atime -ctime -mtime 以下以 -mtime為例
-mtime n :n為數字,意義在n天之前的 “一天之內” 被更改過的文件;
-mtime +n :列出在n天之前(不含n天本身)被更改過的文件;
-mtime -n :列出在n天之內(不含n天)被更改過的文件;
-newer file :file為一個存在的文件,列出比file文件還要新的文件名。
案例1:
[root@localhost root]# find / -mtime 0
/
/lost+found
/boot
/boot/lost+found
/boot/grub
/boot/grub/grub.conf
/boot/grub/fat_stage1_5
/boot/grub/ffs_stage1_5
………………(太多了不列出來了...)
注意命令后面的 0 意思是文件修改時間不超過24小時 (從現在開始到24小時前),
3天前24小時內 命令為:find / -mtime 3 (具體釋義詳見下圖)
案例2:[root@localhost root]# find /etc -newer /etc/passwd
--newer 命令對應分辨2個文件的新舊程度很重要
find 高級應用:
2、與用戶和用戶組有關的參數:
-uid n:n為用戶賬戶的id 即 uid ,用戶uid記錄在 /etc/passwd文件內
-gid n:n為用戶組的id即gid ,用戶組gid記錄在 /etc/group文件內
-user name:name為用戶名,查找XX用戶的文件
-group name:name為用戶組名,查找屬於XX用戶組的文件
-nouser :尋找不屬於當前系統用戶的文件(僵屍文件。。。)
-nogroup :尋找不屬於當前系統用戶組的文件
案例1:find /etc -user bajie
查找 /etc目錄下屬於用戶bajie的文件
案例2:find / -nouser
查找僵屍文件。。。。(並不可怕,也可能是編譯文件產生的或網絡下載的)
3、與文件權限及名稱有關的參數:
--name filename:filename為文件名
--size [+-]SIZE:查找比SIZE還要大(+),或下(-)的文件,SIZE大小規格有:c:代表byte,k代表1024bytes. 要找50KB還要大的文件:"-size +50k"
(還有M G)不知道為什么我用不成功。。。
--type TYPE:查找符合類型的文件。 類型有:一般文件 f ,設備文件(b ,c) ,目錄(d),連接文件(l),socket(s),FIFO(p)
--perm mode:查找文件權限剛回等於mode的文件
--perm -mode:查找文件權限必須 包含 mode權限的文件
需要查找 -rwxr--r--,即0774的文件,使用 --perm -0774
--perm +mode:查找文件權限符合 任意 mode權限的文件
需要查找 -rwsr-xr-x,即-perm +755 時,但有一個文件屬性為 -rw-------也會被列出來,因為他有 -rw...的屬性存在。
注:--perm可查詢除 rwx 以外的隱藏權限文件,這里不探討隱藏權限
今天就寫到這了。。。明天探討關於linux除rwx屬性外的其他隱藏屬性。
歡迎大家積極討論。。小生倍受鼓舞,感表涕零。