1. 程式人生 > >linux的查找命令 find whereis locate

linux的查找命令 find whereis locate

十分 模糊查詢 並且 -c 正則表達 tmp head 處理 left

Linux 有三個查找文件的命令:find, whereis, locate 其中find 不常用,whereis與locate經常使用,因為find命令速度較慢,因為whereis與locate是利用數據庫來查找數據,而find直接查找硬盤。

  1 whereis

  whereis 命令只能用戶程序名稱的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m) 和源代碼文件(參數-s). 如果省略參數,則返回所有信息。和find相比,whereis查找的速度非常快,這是因為linux系統會將系統內的所有文件都記錄在一個數據庫文件中,當使用whereis和locate時,會從數據庫中查找數據,而不是像find命令那樣,通 過遍歷硬盤來查找,效率自然會很高。

  但是該數據庫文件並不是實時更新,默認情況下時一星期更新一次,因此,我們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為數據庫文件沒有被更新。

  

  whereis [-bmsu] 文件或者目錄名

  -b: 只找二進制格式的文件

  -m: 只找在說明文件manual 路勁下的文件

  -s: 只找source 源文件

  -u: 查找不在上述三個選項中的其他特殊文件

  實例,查詢ifconfig文件名

[root@oracledb ahome]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

[root@oracledb ahome]# whereis -b ifconfig
ifconfig: /sbin/ifconfig
[root@oracledb ahome]# whereis -m ifconfig
ifconfig: /usr/share/man/man8/ifconfig.8.gz
[root@oracledb ahome]# whereis -s ifconfig
ifconfig:

2 locate

locate使用也非常簡單,而且使用範圍比whereis大的多,只需要部分文件名就可以進行模糊查詢,同時locte還可以通過-r選項使用正則表達式,功能十分強大。與whereis一樣 locate使用的索引數據庫裏的信息並不一定是實時有效的,可以使用updatedb命令更新索引數據庫。

locate [-ir] keyword

實例,查詢passwd命令,查找包含passwd字符的文件,顯示前5條記錄

[root@oracledb ahome]# locate passwd|head -n 5
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/lib64/security/pam_passwdqc.so

3 find

find 命令遍歷當前工作目錄及其子目錄,在硬盤上遍歷查找,非常耗硬盤資源,查找效率相比whereis和locate較低。

find [path] [option] [action]

  時間查找參數:

-atime n: 將n*24小時內access過的文件列出來

-ctime n: 將n*24小時內狀態發生改變的文件列出來

-mtime n: 將n*24小時內被修改過的文件列出來

-newer file: 把比file還要新的文件列出來

  名稱查找參數:

-gid n: 尋找群組ID為n的文件

-group name: 尋找群組名稱為name的文件

-uid n: 尋找擁有者ID為n的文件

-user name: 尋找擁有者名稱為name的文件

-name file: 尋找文件名為file的文件(可以使用通配符)

     -nouser:  尋找文件所有者不在/etc/passwd的文件

     -nogroup: 尋找文件的所有組不在/etc/group的文件

  

  實例,將過去24小時內有改動的文件列出來。

[root@oracledb ahome]# find / -mtime 0|head -n 10
/
/proc
/proc/kmsg
/proc/stat
/proc/meminfo
/proc/vmstat
/proc/mdstat
/proc/acpi
/proc/acpi/event
/proc/sys

將3天前24小時內有改動的文件列出

  [root@oracledb ahome]# find / -mtime 3

  

  尋找/etc 下比/etc/passwd新的文件

[root@oracledb ahome]# find /etc -newer /etc/passwd
/etc
/etc/group
/etc/gshadow
/etc/shadow

查找/var 下4天前被修改過的文件

[root@oracledb ahome]# find /var -mtime +4

查找/var 下4天以內被修改過的文件

[root@oracledb ahome]# find /var -mtime -4

查找/var 下4~5天內被修改過的文件

[root@oracledb ahome]# find /var -mtime 4

查找/home 下屬於latiny1的文件

root@oracledb ahome]# find /home -user latiny1
/home/latiny1
/home/latiny1/.kshrc
/home/latiny1/.bashrc
/home/latiny1/.bash_profile
/home/latiny1/.mozilla
/home/latiny1/.mozilla/plugins
/home/latiny1/.mozilla/extensions
/home/latiny1/.bash_logout
/home/latiny1/.gnome2
/home/latiny1/.viminfo

查找不屬於任何人的文件

[root@oracledb ahome]# find / -nouser

查找文件名為latiny1 的文件

[root@oracledb ahome]# find / -name latiny1
/var/spool/mail/latiny1
/home/latiny1

查找/var 目錄下文件類型為Socket的文件名

[root@oracledb ahome]# find /var -type s|head -n 10
/var/run/rpcbind.sock
/var/run/abrt/abrt.socket
/var/run/acpid.socket
/var/run/portreserve/socket
/var/run/dbus/system_bus_socket
/var/run/cups/cups.sock
/var/run/sdp
/var/tmp/.oracle/s#1623.1
/var/tmp/.oracle/s#1631.2
/var/tmp/.oracle/s#1590.2

               

查找包含有SGID或者SUID 或者SBIT屬性的文件

[root@oracledb ahome]# find / -perm +7000|head -n 10

find還可以在後面再接其他合適的命令來處理查找結果,如查找/srv/ahome裏包含SUID、SGID、SBIT屬性的文件或者目錄,然後對結果使用ls -l命令。

[root@oracledb ahome]# find /srv/ahome -perm +7000 -exec ls -l {} \;
total 4
-rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 lainty1
-rw-rw-r-- 1 latiny2 project 7 Jul 3 11:20 latiny2
-rw-r--r-- 1 root project 0 Jul 3 14:27 test1.sh

[root@oracledb ahome]# find /srv/ahome -name latiny2 -exec ls -l {} \;
-rw-rw-r-- 1 latiny2 project 7 Jul 3 11:20 /srv/ahome/latiny2

查找/etc 下文件大小介於50K到60K的文件,並且對結果使用ls -l命令

[root@oracledb ahome]# find /etc -size +50k -size 60k -exec ls -l {} \;
-rw-r--r--. 1 root root 61021 Nov 12 2010 /etc/gconf/schemas/rhythmbox.schemas
[root@oracledb ahome]#

查找/etc 下文件容量大於50K且文件所有者不是root的文件,並且對結果使用ls -l命令

[root@oracledb ahome]# find /etc -size +50k -not -user root -exec ls -l {} \;

[root@oracledb srv]# find ./ -size -50k -not -user root -exec ls -l {} \;
-rw-rw-r-- 1 latiny2 project 7 Jul 3 11:20 ./ahome/latiny2
-rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 ./ahome/lainty1

查找/etc 容量大於1500k以及容量等於0的文件

[root@oracledb srv]# find /etc -size 0k -or -size +1500k

linux的查找命令 find whereis locate