linux系統中咱們常常會須要查找某些文件,當有時候咱們不肯定一個文件的位置,好比某服務配置文件具體路徑,本身沒有頭緒去尋找的話會很難找,也會耽誤時間。linux就提供了不少命令,find,locate,which,whereis等。下面就詳細介紹這些命令並使用。php
find命令node
find命令是linux中最多見的查找文件的命令,功能很強大,它是用來在指定目錄下查找文件。任何位於參數以前的字符串都將被視爲欲查找的目錄名。若是使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。而且將查找到的子目錄和文件所有進行顯示。mysql
語法:linux
find (選項) (參數) [filename]nginx
示例:sql
搜索當前目錄(包含子目錄下全部文件和文件夾)。數據庫
[root@localhost /]# find .
搜索某個目錄下的全部子目錄和文件。json
[root@localhost /]# find /home 這裏會把home下全部子目錄文件都顯示出來
搜索某個目錄下的某個文件,這裏加上參數-name 就是表明搜索文件名稱。bash
[root@localhost /]# find /home -name "123.txt" /home/test123/abc/123.txt
對搜索目錄的深度限制,-maxdepth參數是對搜索深度的設置php7
[root@localhost /]# find . -maxdepth 1 1就是搜索一層 . ./boot ./dev ./home ./proc ./run ./sys ./etc ./root ./tmp
對文件類型的搜索,參數type
[root@localhost /]# find . -maxdepth 1 -type f f表明搜索文件 ./.autorelabel ./appendonly.aof ./dump.rdb [root@localhost /]# find . -maxdepth 1 -type d d表明搜索的是目錄 . ./boot ./dev ./home ./proc
上面搜索出來的文件目錄都僅僅只顯示名字,想看到詳細信息
[root@localhost /]# find . -maxdepth 1 -type f -exec ls -lh {} \; -rw-r--r-- 1 root root 0 6月 28 2017 ./.autorelabel -rw-r--r-- 1 root root 30M 9月 14 2017 ./appendonly.aof -rw-r--r-- 1 root root 4.5K 9月 14 2017 ./dump.rdb
按照文件或目錄的權限搜索。須要 find命令中 perm 參數。使用方法能夠參考這篇 https://blog.csdn.net/lidonghat/article/details/66478071
[root@localhost /]# find . -maxdepth 1 -type d -perm -755 -exec ls -dhl {} \; 按權限搜索當前目錄中的目錄 drwxr-xr-x 20 root root 3.3K 5月 6 13:02 ./dev drwxr-xr-x. 9 root root 87 5月 5 11:34 ./home drwxr-xr-x 35 root root 1020 5月 6 13:08 ./run drwxr-xr-x. 145 root root 8.0K 5月 6 13:03 ./etc drwxrwxrwt. 28 root root 8.0K 5月 6 15:55 ./tmp drwxr-xr-x. 24 root root 4.0K 5月 6 13:02 ./var drwxr-xr-x. 13 root root 4.0K 6月 27 2017 ./usr drwxr-xr-x. 2 root root 6 6月 10 2014 ./media drwxrwxrwx. 4 root root 27 12月 15 17:25 ./mnt drwxr-xr-x. 14 root root 4.0K 10月 13 2017 ./opt drwxr-xr-x. 2 root root 6 6月 10 2014 ./srv
[root@localhost /]# find . -maxdepth 1 -type f -perm 644 -exec ls -hl {} \; 按權限搜索當前目錄中的文件 -rw-r--r-- 1 root root 0 6月 28 2017 ./.autorelabel -rw-r--r-- 1 root root 30M 9月 14 2017 ./appendonly.aof -rw-r--r-- 1 root root 4.5K 9月 14 2017 ./dump.rdb
找到當前目錄下權限不是644的文件,-perm參數前面加了一個感嘆號,取反
[root@localhost /]# find . -maxdepth 1 -type f ! -perm 644 -exec ls -hl {} \; -rwxr-xr-x 1 root root 0 5月 6 16:06 ./zzz
模糊搜索文件後綴包含.bash的文件
[root@localhost /]# find /home -name "*.bash*" /home/xyy/.bash_logout /home/xyy/.bash_profile /home/xyy/.bashrc /home/xyy/.bash_history /home/mysql/.bash_logout
模糊搜索文件後綴不包含.bash的文件
[root@localhost /]# find /home ! -name "*.bash*"
搜索當前目錄屬於root用戶的文件
[root@localhost /]# find . -maxdepth 1 -type f -user root -exec ls -hl {} \; -rw-r--r-- 1 root root 0 6月 28 2017 ./.autorelabel -rw-r--r-- 1 root root 30M 9月 14 2017 ./appendonly.aof -rw-r--r-- 1 root root 4.5K 9月 14 2017 ./dump.rdb -rwxr-xr-x 1 root root 0 5月 6 16:06 ./zzz
搜索文件大小大於300m的文件
[root@localhost ~]# find / -type f -size +300M /proc/kcore find: ‘/proc/6258/task/6258/fdinfo/6’: 沒有那個文件或目錄 find: ‘/proc/6258/fdinfo/6’: 沒有那個文件或目錄 /usr/local/mysql/lib/libmysqld.a /usr/local/mysql/bin/mysqld
命令執行結果中有一些提示信息,這些信息不須要顯示,能夠去除。
[root@localhost ~]# find / -type f -size +300M 2>/dev/null
/proc/kcore /usr/local/mysql/lib/libmysqld.a /usr/local/mysql/bin/mysqld /usr/local/mysql/bin/mysql_embedded /usr/local/mysql/bin/mysqltest_embedded /usr/local/mysql/bin/mysql_client_test_embedded
知道每一個文件具體大小,後面加上使用du命令統計下。
[root@localhost ~]# find / -type f -size +300M 2>/dev/null | xargs du -sh
0 /proc/kcore 928M /usr/local/mysql/lib/libmysqld.a 350M /usr/local/mysql/bin/mysqld 330M /usr/local/mysql/bin/mysql_embedded 329M /usr/local/mysql/bin/mysqltest_embedded 331M /usr/local/mysql/bin/mysql_client_test_embedded 396M /usr/local/mysql/data/oa_workflow/OPERATION_LOGS.ibd 713M /usr/local/mysql/data/db_kingnet_oa/t_message.ibd
對結果的文件大小排序。
[root@localhost ~]# find / -type f -size +300M 2>/dev/null | xargs du -sh | sort -nr 928M /usr/local/mysql/lib/libmysqld.a 928M /opt/mysql-8.0.0-dmr/libmysqld/libmysqld.a 713M /usr/local/mysql/data/db_kingnet_oa/t_message.ibd 665M /opt/mysql-8.0.0-dmr/sql/libsql.a 643M /opt/mysql-8.0.0-dmr/libmysqld/libsql_embedded.a 488M /usr/local/mysql/data/oa_2018/operation_logs.ibd 396M /usr/local/mysql/data/oa_workflow/OPERATION_LOGS.ibd 364M /usr/local/mysql/data/oa_workflow_test/OPERATION_LOGS.ibd 350M /usr/local/mysql/bin/mysqld 350M /opt/mysql-8.0.0-dmr/sql/mysqld
計算當前目錄中文件md5的值並保存在文件中
[root@localhost oa]# find . -type f | xargs md5sum > md5.txt [root@localhost oa]# cat md5.txt cfa55387ce15a2fb9060dd448d88538f ./time.sh f107df99a0e3d3f3a1bb6abaa549e5d8 ./a.txt 707cce2673010a0d0191c4a2d2440580 ./.a.txt.swp 37c218cf1dcb7cdb3a483eb7b8244246 ./passwd d41d8cd98f00b204e9800998ecf8427e ./b.txt 98828b6f94757a6bdfdeb0ff6decaa7d ./md5.txt
結合-exec和xargs 選項來搜索出來find出來的結果。(xargs與管道的區別是:管道是將前面命令的標準輸出做爲後面的標準輸入,而xargs是實現「將標準輸入做爲命令的參數」)
exec後面跟着要執行的命令。
[root@localhost oa]# ll 總用量 16 -rw-r--r-- 1 root root 26 5月 6 16:25 a.txt -rw-r--r-- 1 root root 0 5月 6 13:38 b.txt -rw-r--r-- 1 root root 262 5月 6 18:08 md5.txt -rw-r--r-- 1 root root 2581 5月 4 13:47 passwd -rw-r--r-- 1 root root 30 4月 27 22:51 time.sh [root@localhost oa]# find . -type f -exec chmod 777 {} \; 將搜索出來的文件權限改爲777, 使用exec參數後面要固定跟上 {} \; [root@localhost oa]# ll 總用量 16 -rwxrwxrwx 1 root root 26 5月 6 16:25 a.txt -rwxrwxrwx 1 root root 0 5月 6 13:38 b.txt -rwxrwxrwx 1 root root 262 5月 6 18:08 md5.txt -rwxrwxrwx 1 root root 2581 5月 4 13:47 passwd -rwxrwxrwx 1 root root 30 4月 27 22:51 time.sh
還有個參數和exec功能同樣,只不過每一個具體執行的過程會提示是否贊成。
[root@localhost oa]# find . -type f -ok chmod 777 {} \; < chmod ... ./time.sh > ? y < chmod ... ./a.txt > ? y < chmod ... ./.a.txt.swp > ? y < chmod ... ./passwd > ? y < chmod ... ./b.txt > ? y < chmod ... ./md5.txt > ? y
用xargs顯示出每一個文件的信息。
[root@localhost oa]# find . -type f | xargs stat 文件:"./time.sh" 大小:30 塊:8 IO 塊:4096 普通文件 設備:fd00h/64768d Inode:1176906 硬連接:1 權限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root) 最近訪問:2018-05-06 18:07:52.548866071 +0800 最近更改:2018-04-27 22:51:34.869883350 +0800 最近改動:2018-05-06 20:53:43.855914501 +0800 建立時間:- 文件:"./a.txt" 大小:26 塊:8 IO 塊:4096 普通文件 設備:fd00h/64768d Inode:1176944 硬連接:1 權限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root) 最近訪問:2018-05-06 16:25:33.041110933 +0800 最近更改:2018-05-06 16:25:29.743048457 +0800 最近改動:2018-05-06 20:53:43.858914559 +0800
........
找出 / 目錄下以 .ini結尾的文件,並進行文件分類
[root@localhost pcntl]# find / -name *.ini -type f -print | xargs file /etc/php.d/curl.ini: ASCII text /etc/php.d/posix.ini: ASCII text /etc/php.d/phar.ini: ASCII text /etc/php.d/zip.ini: ASCII text /etc/php.d/sysvsem.ini: ASCII text /etc/php.d/sysvshm.ini: ASCII text /etc/php.d/json.ini: ASCII text /etc/php.d/sysvmsg.ini: ASCII text /etc/php.d/fileinfo.ini: ASCII text /etc/php.ini: ASCII English text /opt/baletu/jdk1.8.0_51/lib/missioncontrol/configuration/config.ini: ASCII text /opt/baletu/jdk1.8.0_51/bin/jmc.ini: ASCII text /alidata/www/baletoo/Issue/conf/application.ini: ASCII text, with CRLF line terminators /alidata/www/baletoo/m/YafMobile/conf/application.ini: ASCII text, with CRLF line terminators /alidata/www/baletoo/YafPc/conf/application.ini: ASCII text, with CRLF line terminators
find功能還有不少,這裏暫時就介紹這麼多。
whereis命令
whereis命令用來搜索出二進制程序、源代碼文件和man手冊頁等相關文件的路徑。它的搜索內容比較侷限,只能用於程序名的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。若是省略參數,則返回全部信息。
示例:
[root@localhost oa]# whereis mysql mysql: /usr/lib64/mysql /usr/local/mysql /usr/share/mysql /usr/local/mysql/bin/mysql
搜索二進制文件
[root@localhost oa]# whereis -b ls ls: /usr/bin/ls
which命令
which命令用於查找並顯示給定命令的絕對路徑,環境變量PATH中保存了查找命令時須要遍歷的目錄。which指令會在環境變量$PATH設置的目錄裏查找符合條件的文件。也就是說,使用which命令,就能夠看到某個系統命令是否存在,以及執行的究竟是哪個位置的命令。which是根據使用者所配置的$PATH 變量內的目錄去搜尋可運行檔的!因此不一樣的$PATH 配置內容所找到的內容不同。
示例:
[root@localhost oa]# which php /usr/local/php7/bin/php
locate命令
locate命令用來查找文件或目錄,它和find功能差很少,只不過比find命令塊不少,由於find是在系統中每一個目錄搜索,而locate是搜索linux中的一個數據庫。
示例:
[root@localhost tmp]# locate nginx.conf /opt/nginx-1.12.0/conf/nginx.conf /usr/local/nginx/conf/.nginx.conf.swp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.def
[root@localhost tmp]# touch nginx.conf [root@localhost tmp]# locate nginx.conf /opt/nginx-1.12.0/conf/nginx.conf /usr/local/nginx/conf/.nginx.conf.swp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.default /var/lib/pcp/pmdas/nginx/nginx.conf
locate這個命令不是搜索整個文件系統,而是搜索一個數據庫,因此搜索速度很快。Linux系統自動建立這個數據庫,而且天天自動更新一次,因此使用locate命令查不到最新變更過的文件。爲了不這種狀況,能夠在使用locate以前,先使用updatedb命令手動更新數據庫。
-v:顯示執行的詳細過程
[root@localhost ~]# touch song.php [root@localhost ~]# locate song.php /root/song.php
在tmp目錄下不行