首頁  >  文章  >  php教程  >  Linux查找指令與find指令詳解

Linux查找指令與find指令詳解

高洛峰
高洛峰原創
2016-12-14 17:13:241504瀏覽

一、文件查找之locate指令

locate :
非即時的,查找時根據全系統檔案資料庫進行的,模糊查找,
update 手動產生檔案資料庫
速度快

依賴updatedb資料庫

文件查找之find指令

find:

實時
精確
支援眾多查找規則
遍歷指定目錄中的所有文件完成查找,速度慢

find 查找路徑 查找標準 查找到以後的處理操作


find 查找路徑 查找標準 查找到以後的處理操作
查找路徑:默認為目前目錄
查找標準:預設為指定路徑下的所有檔案

查找到以後的處理作業:預設為顯示


符合標準:
-name 'filename':對檔案名稱精確比對
檔案名稱相符:
*任意長度的任意字元
?任意的單個字符
[] 選項內的字符
-iname 'filename':文件名匹配時不區分大小寫
-regex pattern 基於正則表達式進行文件名匹配

-user username :根據屬主查找
- group groupname :根據屬組查找

-gid gid:根據gid查找
-uid uid::根據udi查找

-nouser 查找沒有屬主的文件

-no 沒有屬組的文件🠎 -nouser

#手动更新locate数据库
[root@lovelace scripts]# updatedb
#使用locate查找文件 (速度好快的说)
[root@lovelace scripts]# locate *.py
/home/scripts/factorial.py
/home/scripts/input.py
/usr/lib/python2.4/fileinput.py
/usr/lib/python2.4/fileinput.pyc
/usr/lib/python2.4/fileinput.pyo
/usr/lib/python2.4/site-packages/dogtail/rawinput.py
/usr/lib/python2.4/site-packages/dogtail/rawinput.pyc
/usr/lib/python2.4/site-packages/dogtail/rawinput.pyo
/usr/lib/python2.4/test/pyclbr_input.py
/usr/lib/python2.4/test/pyclbr_input.pyc
/usr/lib/python2.4/test/pyclbr_input.pyo
/usr/lib/python2.4/test/test_fileinput.py
/usr/lib/python2.4/test/test_fileinput.pyc
/usr/lib/python2.4/test/test_fileinput.pyo

根據文件類型來查找

-type

f:普通文件
d: 目錄
c: 字符
b: 塊設備
l: 鏈接
p: 字符
b: 塊設備
l: 鏈接
p: 字符

b: 塊設備

l: 鏈接

p: 字符

b: 塊設備

l: 鏈接

p: 字元
:find /etc -type d

[root@lovelace scripts]# find /tmp -name test
/tmp/sources/httpd-2.2.17/srclib/apr-util/test
/tmp/sources/httpd-2.2.17/srclib/apr/test
/tmp/sources/httpd-2.2.17/modules/test
/tmp/sources/httpd-2.2.17/test
/tmp/test

依照檔案大小找出

-size

[+|-]#k 沒有+且-就代表是精確符合

[+|-]#m

[+|-]# G


example:find /tmp -size +10M 查找/etc目錄下大於10M的檔案

組合條件:這需要了解摩根定律

-a:與 amp
-o:或非預設:find /tmp -not -user user1 -o -not -type d

#查找/tmp目录下名字为test 而且文件格式为目录的
[root@lovelace scripts]# find /tmp -type d -a -name test
/tmp/sources/httpd-2.2.17/srclib/apr-util/test
/tmp/sources/httpd-2.2.17/srclib/apr/test
/tmp/sources/httpd-2.2.17/modules/test
/tmp/sources/httpd-2.2.17/test
/tmp/test

依照文件時間戳記來找出:
以天為單位的:

改變時間:-mtime- -atime 
[+|-]# 預設時間戳為5天 
-5:5天內造訪過
+5:至少5天沒造訪過了

5:離現在剛好5天造訪過


以分鐘為單位的:
-mmin:
-cmin:
-amin:


find /tmp -amin –5 5分鐘內被存取的檔案

至少多久沒有被存取的,且檔案超過多少大小的操作

find /tmp -atime +30 -a –size +100M -exec 'rm -rf *' ;

#查找/tmp目录下文件格式为目录,而且大小在26k到32k之间的目录
[root@lovelace scripts]# find /tmp -type d -a -size +16k -a -size -32k
/tmp/sources/httpd-2.2.17/docs/manual/mod
/tmp/sources/php-5.2.13/ext/reflection/tests
/tmp/sources/php-5.2.13/ext/date/tests
/tmp/sources/php-5.2.13/ext/spl/tests
/tmp/sources/php-5.2.13/tests/classes
/tmp/sources/php-5.2.13/Zend/tests

觀察值精確比對 檔案權限可完全包含此mode的均符合標準
-perm /mode :9位元權限中有任何一位符合條件的

example:find /tmp -perm –001 查找其他使用者有寫入權限的檔案

find的動作:
-print 預設
-ls:類似 ls -l的形式顯示檔案的每一個資訊

-ok command {} ;  {} ; 不會驚醒詢問操作
引用原來的額名字,使用{}


example:find /tmp -perm -020 -exec mv {} {}.new -020 -exec mv {} {}.new 命令

: 作用是將參數清單轉換成小塊分段傳遞給其他指令,以避免參數清單過長的問題。

相較於-exec command 而言,此指令功能較強悍。和find合用的時候,通常是透過管道傳遞給xargs

find /tmp –size +100M | xargs 'rm –rf '

三、其他查找命令

命令

which:

三、其他查找命令

命令

which:一個命令,可能有一個完整的路徑顯示出命令的別名

#查找home目录下至少5天没被访问过的文件
[root@lovelace scripts]# find /home/ -ctime -5
/home/scripts
/home/scripts/list
/home/scripts/for
/home/scripts/for/dir.sh
/home/scripts/for/three.sh
/home/scripts/for/checkbash.sh
/home/scripts/for/sorsum.sh
/home/scripts/while
/home/scripts/while/readpasswd.sh
/home/scripts/while/catwhile.sh
/home/scripts/case
/home/scripts/case/showmenu.sh
/home/scripts/case/showmenu
/home/scripts/case/2showmenu.sh
/home/scripts/if
/home/scripts/if/grade.sh
/home/scripts/51cto
/home/scripts/51cto/info.tt
/home/scripts/51cto/info.sh
/home/scripts/51cto/1.sh
/home/scripts/51cto/argument.sh
/home/scripts/51cto/sum.sh

whereis:與which類似,而且會額外的給出給出該命令的man頁的完整路徑

#找出home中大小为16k到32k之间的文件,然后传递给exec 并显示出来
[root@lovelace scripts]# find /home/ -size +16k -a -size -32k -exec ls -lh {} \;
-rw-r--r-- 1 root root 20K 05-03 03:04 /home/nick/etc/gconf/gconf.xml.defaults/%gconf-tree-li.xml
-rw-r--r-- 1 root root 20K 05-03 03:04 /home/nick/etc/gconf/gconf.xml.defaults/%gconf-tree-ug.xml
-rw-r--r-- 1 root root 25K 05-03 03:04 /home/nick/etc/gconf/schemas/drivemount.schemas
-rw-r--r-- 1 root root 20K 05-03 03:04 /home/nick/etc/gconf/schemas/gnome-volume-control.schemas
-rw-r--r-- 1 root root 21K 05-03 03:04 /home/nick/etc/gconf/schemas/system_smb.schemas
-rw-r--r-- 1 root root 22K 05-03 03:04 /home/nick/etc/gconf/schemas/desktop_gnome_thumbnailers.schemas
-rw-r--r-- 1 root root 17K 05-03 03:04 /home/nick/etc/gconf/schemas/apps_gnome_settings_daemon_default_editor.schemas

whatis:將會在whatis資料庫中查詢file,當你想確認系統命令和重要的設定檔的時候

,這個指令就非常重要了,可以當做一個簡單的man指令。

#使用which命令查找ls命令的完整路径
[root@lovelace scripts]# which ls
alias ls='ls --color=tty'
/bin/ls
#使用ldd命令查看ls所依赖的库文件(这里需要用到ls的完整路径)
[root@lovelace scripts]# ldd /bin/ls
linux-gate.so.1 =>  (0x00cf8000)
librt.so.1 => /lib/librt.so.1 (0x00d8d000)
libacl.so.1 => /lib/libacl.so.1 (0x00d62000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00de0000)
libc.so.6 => /lib/libc.so.6 (0x00110000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d71000)
/lib/ld-linux.so.2 (0x00baf000)
libattr.so.1 => /lib/libattr.so.1 (0x003a9000)
libdl.so.2 => /lib/libdl.so.2 (0x00d55000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00d98000)

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:find指令 詳解下一篇:find指令 詳解