whereisjava
whereis 命令只能用戶程序名稱的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m) 和源代碼文件(參數-s). 若是省略參數,則返回全部信息。和find相比,whereis查找的速度很是快,這是由於linux系統會將系統內的全部文件都記錄在一個數據庫文件中,當使用whereis和locate時,會從數據庫中查找數據,而不是像find命令那樣,通 過遍歷硬盤來查找,效率天然會很高。 node
可是該數據庫文件並非實時更新,默認狀況下時一星期更新一次,所以,咱們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛創建文件,卻沒法查找到,緣由就是由於數據庫文件沒有被更新。 linux
whereis [-bmsu] 文件或者目錄名nginx
-b: 只找二進制格式的文件正則表達式
-m: 只找在說明文件manual 路勁下的文件shell
-s: 只找source 源文件數據庫
-u: 查找不在上述三個選項中的其餘特殊文件vim
實例,查詢ifconfig文件名centos
[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:安全
locate
locate 讓使用者能夠很快速的搜尋檔案系統內是否有指定的檔案。其方法是先創建一個包括系統內全部檔案名稱及路徑的數據庫,以後當尋找時就只需查詢這個數據庫,而沒必要實際深刻檔案系統之中了。在通常的 distribution 之中,數據庫的創建都被放在 crontab 中自動執行。
1. 命令格式:
Locate [選擇參數] [樣式]
2.命令功能:
locate命令能夠在搜尋數據庫時快速找到檔案,locate爲模糊查找,數據庫由updatedb程序來更新,updatedb是由cron daemon週期性創建的,locate命令在搜尋數據庫時比由整個由硬盤資料來搜尋資料來得快,但較差勁的是locate所找到的檔案如果最近才創建或 剛改名的,可能會找不到,在內定值中,updatedb天天會跑一次,能夠由修改crontab來更新設定值。(etc/crontab)
locate指定用在搜尋符合條件的檔案,它會去儲存檔案與目錄名稱的數據庫內,locate查詢文件時,會去搜索/var/lib/mlocate/mlocage.db,尋找合乎範本樣式條件的檔案或目錄錄,可使用特殊字元(如」*」 或」?」等)來指定範本樣式,如指定範本爲kcpa*ner, locate會找出全部起始字串爲kcpa且結尾爲ner的檔案或目錄,如名稱爲kcpartner若目錄錄名稱爲kcpa_ner則會列出該目錄下包括 子目錄在內的全部檔案。
locate指令和find找尋檔案的功能相似,但locate是透過update程序將硬盤中的全部檔案和目錄資料先創建一個索引數據庫,在 執行loacte時直接找該索引,查詢速度會較快,索引數據庫通常是由操做系統管理,但也能夠直接下達update強迫系統當即修改索引數據庫。
3.命令參數:
-e 將排除在尋找的範圍以外。
-1 若是 是 1.則啓動安全模式。在安全模式下,使用者不會看到權限沒法看到 的檔案。這會始速度減慢,由於 locate 必須至實際的檔案系統中取得檔案的權限資料。
-f 將特定的檔案系統排除在外,例如咱們沒有到理要把 proc 檔案系統中的檔案 放在資料庫中。
-q 安靜模式,不會顯示任何錯誤訊息。
-n 至多顯示 n個輸出。
-r 使用正規運算式 作尋找的條件。
-o 指定資料庫存的名稱。
-d 指定資料庫的路徑
-h 顯示輔助訊息
-V 顯示程式的版本訊息
4.使用實例:
實例1:搜索etc目錄下全部以sh開頭的文件
[root@CentOS7 ~#]locate /etc/sh /etc/shadow /etc/shadow- /etc/shells [root@centos7 ~#]locate -r "/etc/\sh " # 正則,錨定詞首 /etc/shadow /etc/shadow- /etc/shells [root@centos7 ~#]
實例2:忽略大小寫
[root@centos7 ~#]locate -i ~/d /root/Desktop/root/Documents/root/Downloads /root/d1 /root/dd /var/lib/pcp/pmdas/root/domain.h [root@centos7 ~#]
實例3:更新數據庫
[root@centos7 ~#]locate ~/a /root/anaconda-ks.cfg [root@centos7 ~#]updatedb [root@centos7 ~#]locate ~/a /root/a.sh /root/anaconda-ks.cfg [root@centos7 ~#]
find
1. 主要用途:
find命令是一個實時查找工具,經過遍歷指定路徑而完成對文件的查找;在使用該命令時,若是不選定參數,則在當前目錄下查找子目錄與文件並顯示之;另外,任何位於參數以前的字符串,都將視爲欲查找的目錄名。因爲是實時遍歷查找,find有以下特性:精確實時查找,速度慢可能只搜索用戶具有讀取和執行權限的目錄。
2.find語法:
find [OPTION]... [查找路徑] [查找條件] [處理動做]
查找路徑:指定具體目標路徑,默認爲當前目錄
查找條件:指定的查找標準,能夠是文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的全部文件
處理動做:對符合條件的文件作操做,默認輸出至屏幕
3.查找條件:
1. 根據文件名和inode查找
2. 根據屬主、屬組查找
3. 根據文件類型查找
4. 根據邏輯組合條件查找
5. 根據文件大小來查找
6. 根據時間戳來查找
7. 根據權限來查找
4.處理動做:
1. -print: 默認動做,顯示至屏幕
2. -ls: 相似於對查找到的文件執行 ls -l 命令
3. -delete: 刪除查找到的文件
4. -fls file: 查找到的全部長格式的信息保存至指定文件中
5. -ok COMMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令,且都會交互式要求用戶確認
6. -exec COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令;
7. {}: 用於引用查找至的文件名稱自身
8. find 傳遞查找到的文件至後面指定的命令時,查找到全部符號條件的文件一次性傳遞給後面的命令
9. 有些命令不能接受過多的參數,此時命令執行可能會失敗,用 xargs 來規避此問題
find |xargs COMMAND
5.經常使用參數:
文件名和inode類:
-name "文件名稱": 支持使用glob, *, ?, [], [^] -iname "文件名稱": 不區分字母大小寫 -inum n: 按inode號查找 -somefile name: 相同的inode號文件 -links n: 連接數爲n的文件 -regex "PATTERN": 以PATTERN匹配整個文件路徑字符串,而不只僅是文件名稱
屬主屬組類:
-user USERNAME: 查找屬主爲指定用戶(UID)的文件 -group GROUPNAME: 查找屬組爲指定組(GID)的文件 -uid UserID: 查找屬主爲指定的UID號的文件 -gid GroupID: 查找屬組爲指定的GID號的文件 -nouser: 查找沒有屬主的文件 -nogroup: 查找沒有屬組的文件
文件類型類:
b block (buffered) special c character (unbuffered) special d directory p named pipe (FIFO)f regular file l symbolic link s socket
邏輯組合條件類:
組合條件:
與:-a 或:-o 非:-not, !
摩根定律:
(非P) 或(非Q) = 非(P且Q) (非P) 且 (非Q) = 非(P或Q)
文件大小類:
-size [+|-]#UNIT 經常使用單位:k,M,G #UNIT: (#-1,#] 如:5M 表示 (4M,5M] -#UNIT: [0,#-1] 如:-5M 表示 [0,5M] +#UNIT: (#,oo) 如:+5M 表示 (6M,oo)
關於文件大小類的解釋:爲何-size 5M 仍是找精確的5M而是表示(4M,5M], 試想文件的大小指什麼?是指文件數據的大小仍是包括了元數據後的大小,那你找元數據的大小有意義嗎?但文件的大小確定是包含元數據大小的,而咱們通常以文件大小找文件時每每考慮的是文件數據的大小;另外,精確查找必定大小的文件意義不大;因此這裏的大小會有1個單位的浮動。
時間戳類:
以」天」爲單位: -atime [+|-]# #: [#,#+1) +#: [#+1,oo) -#: [0,#) -mtime -ctime 以「分鐘」爲單位: -amin -mmin -cmin
關於時間戳類的解釋:爲何-atime 3 表示的是 [3,4),這個就很好解釋了,咱們這兒所說的時間是指時間段而非時刻,一「天」與一「分鐘」都是指一個時間段,只有[3,4)這個半閉半開的區間才能完整地表示第三天。
權限類:
-perm [/|-]MODE MODE: 精確匹配權限 /MODE: 任何一類(u,g,o)對象的權限中只要能一位匹配便可,屬於或關係。之前用'+',CentOS 7以'/'替代之 -MODE: 每一類對象都必須同時擁有指定權限,屬於與關係 0:表示不關注
示例:
find -perm 644 表示要嚴格匹配644的文件 find -perm +222 表示u,g,o任何一類用戶有寫權限即匹配 find -perm -222 表示僅嚴格匹配寫權限,即每一個用戶必需要有寫權限 find -perm -002 表示僅嚴格匹配other用戶的寫權限
6.使用示例:
實例1:將配置文件備份到指定目錄下並添加擴展名.org
[root@localhost ~]# find . -name "*.conf" -exec cp -r {} /testdir/{}.org \; [root@localhost ~]# cd /testdir/ [root@localhost testdir]# ls a.conf.org b.conf.org [root@localhost testdir]#
實例2:.提示刪除存在時間超過3天以上的屬主爲young的臨時文件
[root@localhost ~]# find /tmp -ctime +3 -user young -exec rm -fr {} \; [root@localhost ~]#
實例3:在主目錄中查找可被其它用戶寫入的文件
[root@localhost ~]# find ~ -perm -002 /root/num [root@localhost ~]# find ~ -perm -002 -exec chmod o-w {} \; [root@localhost ~]# ll num --w--w---- 1 root root 35 Jan 21 05:55 num
實例4:查找/var目錄下屬主爲root,且屬組爲mail的全部文件
[root@localhost ~]# find /var -user root -group mail -ls #默認關係就是與 1179652 4 drwxrwxr-x 2 root mail 4096 Jan 23 11:04 /var/spool/mail
實例5:查找/var目錄下不屬於root、lp、gdm的全部文件
[root@localhost ~]# find /var ! -user root ! -user lp ! -user gdm
實例6:查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是postfix的文件
[root@localhost ~]# find /var/ -mtime -7 ! -user root ! -user postfix -ls 1179676 4 drwx------ 3 daemon daemon 4096 Jan 23 11:04 /var/spool/at 524399 4 drwx------ 2 nginx nginx 4096 Jan 23 03:16 /var/log/nginx 524413 0 -rw-r--r-- 1 nginx root 0 Jan 23 03:16 /var/log/nginx/access.log 524391 0 -rw-r--r-- 1 nginx root 0 Jan 21 03:44 /var/log/nginx/error.log 132174 4 drwx------ 3 nginx nginx 4096 Jan 21 03:44 /var/lib/nginx 132175 4 drwx------ 7 nginx nginx 4096 Jan 21 03:44 /var/lib/nginx/tmp 132173 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/client_body 132219 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/proxy 132221 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/uwsgi 132222 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/scgi 132220 4 drwx------ 2 nginx root 4096 Jan 21 03:44 /var/lib/nginx/tmp/fastcgi
實例7:查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
[root@bash ~]# find / -nouser -o -nogroup -a -atime -7
實例8:查找/etc目錄下大於1M且類型爲普通文件的全部文件
[root@bash ~]# find /etc/ -size +1M -type f /etc/selinux/targeted/policy/policy.29 /etc/udev/hwdb.bin
實例9:查找/etc目錄下全部用戶都沒有寫權限的文件
[root@bash ~]# find /etc/ ! -perm /222 /etc/pki/ca-trust/extracted/java/cacerts /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem /etc/lvm/profile/cache-mq.profile /etc/lvm/profile/cache-smq.profile /etc/lvm/profile/command_profile_template.profile /etc/lvm/profile/metadata_profile_template.profile /etc/lvm/profile/thin-generic.profile /etc/lvm/profile/thin-performance.profile /etc/openldap/certs/password /etc/gshadow /etc/dbus-1/system.d/cups.conf /etc/shadow /etc/gshadow- /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf /etc/shadow- /etc/udev/hwdb.bin /etc/machine-id /etc/pam.d/cups /etc/sudoers
實例10:查找/etc目錄下至少有一類用戶沒有執行權限的文件
[root@bash ~]# find /etc/ ! -perm -111 # 至少有一類用戶沒有就是全部用戶都沒有
實例11:.查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶有寫權限的文件
[root@bash ~]# find /etc/init.d -perm -113 /etc/init.d
或者
[root@bash ~]# find /etc/init.d -perm -111 -perm -002 /etc/init.d
實例12:摩根定律找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
[root@centos7 ~]#find /tmp \( -not -user root -a -not -name 'f*' \) -ls 即 [root@centos7 ~]#find /tmp -not \( -user root -o -name 'f*' \) -ls
實例13:查找/etc/下,除/etc/sane.d目錄的其它全部.conf後綴的文件
[root@bash ~]# find /etc -path '/etc/sane.d' -prune -o -name '*.conf'
實例14:匹配文件路徑或文件
[root@bash ~]# find /usr/ -path '*local' /usr/bin/abrt-action-analyze-ccpp-local /usr/share/doc/postfix-2.10.1/examples/qmail-local /usr/share/aclocal /usr/libexec/postfix/local /usr/local
實例15:基於正則表達式匹配文件路徑
[root@bash ~]# find . -regex ".*txt$" ./.mozilla/firefox/4dqu966q.default/revocations.txt ./vimrc/spf13-vim/LICENSE.txt ./a.txt