一、文件查找之locate指令
locate :
非即時的,查找時根據全系統檔案資料庫進行的,模糊查找,
update 手動產生檔案資料庫
速度快
依賴updatedb資料庫
文件查找之find指令find:實時
精確
支援眾多查找規則
遍歷指定目錄中的所有文件完成查找,速度慢
find 查找路徑 查找標準 查找到以後的處理操作
查找路徑:默認為目前目錄
查找標準:預設為指定路徑下的所有檔案
符合標準:
-name 'filename':對檔案名稱精確比對
檔案名稱相符:
*任意長度的任意字元
?任意的單個字符
[] 選項內的字符
-iname 'filename':文件名匹配時不區分大小寫
-regex pattern 基於正則表達式進行文件名匹配
-user username :根據屬主查找
- group groupname :根據屬組查找
-gid gid:根據gid查找
-uid uid::根據udi查找
-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: 字符
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
[+|-]#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天沒造訪過了
以分鐘為單位的:
-mmin:
-cmin:
-amin:
find /tmp -amin –5 5分鐘內被存取的檔案
至少多久沒有被存取的,且檔案超過多少大小的操作
#查找/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
find的動作:
-print 預設
-ls:類似 ls -l的形式顯示檔案的每一個資訊
-ok command {} ; {} ; 不會驚醒詢問操作
引用原來的額名字,使用{}
example:find /tmp -perm -020 -exec mv {} {}.new -020 -exec mv {} {}.new 命令
命令
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)