linux的查找命令 find whereis locate
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
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