文件查找及具体实例
一、簡介
Which:命令查找
Find:文件查找,針對文件名
Locate:文件查找,依賴數據庫
二、命令文件查找
1.找到某些命令文件的位置
Which ls
Whereis ls
三、文件查找find
實時查找工具,通過遍歷指定路徑完成文件查找。
find [option] [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑。默認為當前目錄。
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行。默認找出指定路徑下的所有文件。
處理動作:對復合條件的文件做操作,默認輸出至屏幕。
find /mnt -maxdepth 1
查找/mnt目錄下的所有文件,不進入下一層。-maxdepth 最大深度,表示只進入路徑下的前幾層。
Find /mnt -maxdepth 2 -mindepth 2
查找/mnt目錄下第二層目錄下的所有文件。只在第二層目錄下查找。-mindepth 最小深度。
Find /mnt -depth
先顯示目錄,再顯示文件,默認查找顯示結果,是先顯示目錄,再顯示其下的文件。-depth可以先顯示其下文件,再顯示目錄。
Find /mnt -name disk
在/mnt目錄下,按照文件名disk1進行精確查找。
如果需要模糊查找,find /etc -name “pass”,表示查找/etc目錄下包含pass字符的文件名。有些系統需要雙引號才能正常使用通配符。
Find /usr/bin -iname “*.sh”
在/usr/bin目錄下,查找.sh文件名結尾的文件。-iname,按照文件名查找,不區分大小寫。
Find /etc -inum 107
在/etc目錄下,查找107inode編號的文件。-inum,按照節點編號查找。
Find /usr/bin -samefile /bin/passwd
在/usr/bin目錄下,查找和/bin/passwd這個文件相同inode編號的文件。
一般用于查找一個文件的硬鏈接文件。
Find /etc -link 5
查找在/etc目錄下,鏈接數為5的文件。-links n,查找鏈接數。
Find /usr/bin/ -regex ‘.*.shKaTeX parse error: Can't use function '\.' in math mode at position 146: …則表達式,.*表示所有字符。 \?.?中\表示轉義符,轉義.的意思。…:$表示以什么結尾,這里是以sh結尾的意思。
Find /mnt -user root
查找在/mnt目錄下所屬者是root賬戶的文件。-user 指定所屬者。
Find /mnt -group root
查找/etc目錄下所屬組是root組的文件。-group 指定所屬組。
Find /mnt -uid 0
查找/etc目錄下所屬者的uid是0的文件。-uid 指定用戶的uid。
Find /mnt -gid 0
查找/etc目錄下所屬組的gid是0的文件。-gid 指定所屬組的gid。
Find /etc nouser
查找/etc目錄下沒有所屬者的文件。
Find /etc/ nogroup
查找/etc目錄下沒有所屬組的文件。
Find /etc/ -type TYPE
按照文件類型查找/etc目錄下的文件。-type 按照文件類型查找。
f:普通文件,例:find / -type f
d:目錄文件,例:find / -type d
l:符號鏈接文件,例:find / -type l
s:套接字文件,例:find / -type s
b:塊設備文件,例:find / -type b
c:字符設備文件,例:find / -type c
p:管道文件,例:find / -type p
Find /etc -empty
在/data下面查找空文件。
Find /etc -type d -empty
在/etc下查找空目錄。
Find /etc -path “/etc/sane.d” -a prune -o -name “*.conf”
查找etc下除去/etc/sane.d目錄下的其余所有文件名尾綴是.conf結尾的文件
-path 路徑,從這個路徑中進行什么操作。-a 且,-prune 進行剪切,不顯示。
-path “/etc/sane.d” -a -prune 選擇路徑/etc/sane.d目錄并且進行剪切不顯示。
組合條件:
與:-a
Find /etc -name “*.sh” -a -type f
查找/etc目錄下文件名尾綴是.sh結尾的普通文件
或:-o
Find /etc -name “*.sh” -o -type f
查找/etc下文件名尾綴是.sh結尾的文件或者/etc下的f普通文件。
非:not,!
Find /etc ! -name “*.sh”
查找/etc下文件名不是.sh結尾的所有文件。
部分特殊例子:
Find /mnt -name “*.sh” -o -type f -ls
-ls的優先級大于-o。所以查詢出來的是/data下的普通文件并且顯示具體出來。
Find /etc ( -name “*.db” -a -type f ) -ls
將優先級用()括起來確認是-name -a -type,然后再進行-ls顯示具體。/轉義,否則系統不認為是()
find -not ( -user wang -name “*.txt” )
查找除了所屬者是wang,并且尾綴是.txt的文件
德·摩根定律
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)
四、文件查找locate
文件查找,本身是外部命令(type locate)。
locate在最小化安裝中是沒有的,需要安裝包
locate [option] [pattern(模式)]
locate文件查找,依賴一個mlocate的數據庫,是在mlocate的小數據庫中進行查找。
注意:mlocate數據庫不是像平時操作文件那樣,隨時添加一個文件,刪除一個文件就立馬更新mlocate數據庫。它不會隨時更新,不是立即更新。這就表示如果是新文件,用locate是無法立即找到的。如果新建了某個文件或者刪除了某個文件需要它立即更新,使用updatedb。直接敲出來回車即可。updatedb。
mlocate數據庫其實在Linux中是一個文件,這個文件存放在/var/lib/mlocate/mlocate.db。就是這個文件。而updatedb就是對這個文件進行更新。updatedb后可以查看到這個文件的更新時間就是當前。
locate命令因為是查找的mlocate數據庫,所以這個命令更多的是用于查找相對穩定,固定不變的文件。并且locate搜索都是模糊搜索。
注意:用locate后如果有通配符,例如:locate “*.sh”,有些系統是需要用雙引號引起來的,否則Linux就認為是在當前目錄下查找所有的.sh文件.
Locate -i “*.SH”
查找所有.sh結尾的文件,不區分大小寫,-i 表示不區分大小寫。
locate -n 3 -i “*.SH”
查找所有.sh結尾的文件,不區分大小寫并且顯示前三個。-n 3 表示返回結果集的前三個。
locate -r “.\sh$”
查找所有.sh結尾的文件。-r后面跟基礎正則表達式。
locate和find的區別:
locate是基于mlocate數據庫去搜索的,所以速度很快,不耗費性能。但是mlocate數據庫不是實時更新的,新文件是找不到的。所以更多的用于固定,穩定不變的文件查找。
find是基于指定路徑,實時的去磁盤分區中去完成查找文件的操作。是會影響一定性能的。查找速度略慢。但是精確查找、實時查找,需要注意,find查找,只搜索用戶具備讀取和執行權限的目錄。
總結
- 上一篇: NXOPEN/UG二次开发C#---导入
- 下一篇: cmd下使用命令切换目录