Linux每周幾個(gè)命令--查找篇
標(biāo)簽(空格分隔): linux
當(dāng)要查找某一個(gè)文件位置的時(shí)候,在linux下可以使用如下命令:
- which 查看可執(zhí)行文件位置
- whereis 查看文件位置
- locate 配合數(shù)據(jù)庫(kù)查找文件位置
- find 搜尋指定目錄下的文件位置
下面對(duì)其逐個(gè)分析:
1.which
which指令是在系統(tǒng)配置的Path環(huán)境變量中查找某一個(gè)命令的位置,并且返回第一個(gè)搜索結(jié)果.用該指令可以很輕松的查找到執(zhí)行的到底是哪一個(gè)位置的命令.
1.命令格式
which 文件名
2.命令作用
在系統(tǒng)PATH變量中查找,并返回第一個(gè)結(jié)果
3.使用示例
查找mysql命令位置(前提安裝了mysql)
[root@VM_105_120_centos ~]# which mysql
/usr/bin/mysql
[root@VM_105_120_centos ~]#
查找java命令位置(前提安裝了Java)
[root@VM_105_120_centos ~]# which java
/usr/java/jdk1.8.0_102/bin/java
[root@VM_105_120_centos ~]#
查找失敗時(shí),會(huì)打印出當(dāng)前PATH變量
[root@VM_105_120_centos ~]# which apache
/usr/bin/which: no apache in (/usr/java/jdk1.8.0_102/bin:/usr/java/jdk1.8.0_102/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_102/bin:/root/bin:/root/bin)
[root@VM_105_120_centos ~]#
2.whereis
whereis的搜索是有限的幾種文件,但是其搜索速度很快,原因是李永樂(lè)linux的文件索引數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)在centos下每天更新一次,所以到時(shí)whereis可能會(huì)查找出來(lái)已刪除的文件,如果要實(shí)時(shí)查找,在執(zhí)行命令前先執(zhí)行updatedb
,更新數(shù)據(jù)庫(kù)索引你.
1.命令格式
whereis [選項(xiàng)] 文件
2.命令參數(shù)
-b 只搜索二進(jìn)制文件
-B <目錄> 定義二進(jìn)制文件查找路徑
-m 只搜索 man 手冊(cè)
-M <目錄> 定義 man 手冊(cè)查找路徑
-s 只搜索源代碼
-S <目錄> 定義源代碼查找路徑
-f 終止 <目錄> 參數(shù)列表
-u 搜索不常見記錄
-l 輸出有效查找路徑
3.命令作用
whereis命令是定位可執(zhí)行文件膛檀、源代碼文件样眠、幫助文件在文件系統(tǒng)中的位置杀狡。這些文件的屬性應(yīng)屬于原始代碼抒抬,二進(jìn)制文件贤笆,或是幫助文件挤安。whereis 程序還具有搜索源代碼挡篓、指定備用搜索路徑和搜索不尋常項(xiàng)的能力捅暴。
4.使用示例
查找出mysql位置,和which相比查找出了全部位置
[root@VM_105_120_centos ~]# whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
只查找二進(jìn)制文件,也就是可執(zhí)行文件,結(jié)果過(guò)濾掉了gz壓縮文件
[root@VM_105_120_centos ~]# whereis -b mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql
3.locate
locate和whereis一樣都是通過(guò)數(shù)據(jù)庫(kù)查找,所以實(shí)時(shí)性會(huì)有問(wèn)題,不同的是locate是查找文件的全路徑,只要匹配就列出,而且支持正則表達(dá)式.
1.命令格式
locate [OPTION]... [PATTERN]...
2.命令參數(shù)
-i 忽略大小寫
-l 指定查找數(shù)量
-r 正則匹配查找
-c 統(tǒng)計(jì)出符合查找規(guī)則的數(shù)量
3.命令作用
快速定位符合要求的路徑位置.
4.使用示例
locate查找mysql
[root@VM_105_120_centos ~]# locate mysql
/etc/ld.so.conf.d/mysql-x86_64.conf
/etc/logrotate.d/mysql
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
/etc/rc.d/init.d/mysqld
/etc/rc.d/rc0.d/K36mysqld
/etc/rc.d/rc1.d/K36mysqld
.......
locate統(tǒng)計(jì)出含有mysql字符的數(shù)量
[root@VM_105_120_centos ~]# locate -c mysql
649
locate查找mysql結(jié)尾的文件
[root@VM_105_120_centos ~]# locate -r mysql$
/etc/logrotate.d/mysql
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
/usr/bin/mysql
/usr/lib64/mysql
/usr/share/mysql
/var/lib/mysql
/var/lib/mysql/mysql
4.find
Linux find命令用來(lái)在指定目錄下查找文件恬砂。任何位于參數(shù)之前的字符串都將被視為欲查找的目錄名。如果使用該命令時(shí)蓬痒,不設(shè)置任何參數(shù)泻骤,則find命令將在當(dāng)前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進(jìn)行顯示梧奢。
1.命令格式
find path -option [ -print ] [ -exec -ok command ] {} ;
2.命令參數(shù)
-name 查找文件名匹配所給字串的所有文件狱掂,字串內(nèi)可用通配符 *、?粹断、[ ]
-gid n 查找屬于 ID 號(hào)為 n 的用戶組的所有文件符欠。
-uid n 查找屬于 ID 號(hào)為 n 的用戶的所有文件嫡霞。
-group 查找屬于用戶組名為所給字串的所有的文件瓶埋。
-user 查找屬于用戶名為所給字串的所有的文件。
-nouser 查找沒(méi)有屬主的文件或目錄
-nogoroup 查找沒(méi)有屬組的文件或目錄
-perm 權(quán)限 查找具有指定權(quán)限的文件和目錄诊沪,權(quán)限的表示可以如711养筒,644。
-size n[bckw]查找指定文件大小的文件端姚,n后面的字符表示單位晕粪,缺省為 b,代表 512字節(jié)的塊渐裸。
-type x 查找類型為 x 的文件巫湘,x 為下列字符之一:
b 塊設(shè)備文件
c 字符設(shè)備文件
d 目錄文件
p 命名管道(FIFO)
f 普通文件
l 符號(hào)鏈接文件(symbolic links)
s socket 文件
以時(shí)間為條件查找
-amin n 查找 n 分鐘以前被訪問(wèn)過(guò)的所有文件。
-atime n 查找 n 天以前 24 小時(shí)內(nèi)被訪問(wèn)過(guò)的所有文件昏鹃。
-cmin n 查找 n 分鐘以前文件狀態(tài)被修改過(guò)的所有文件尚氛。
-ctime n 查找 n 天以前 24 小時(shí)內(nèi)文件狀態(tài)被修改過(guò)的所有文件。
-mmin n 查找 n 分鐘以前文件內(nèi)容被修改過(guò)的所有文件洞渤。
-mtime n 查找 n 天以前 24 小時(shí)內(nèi)文件內(nèi)容被修改過(guò)的所有文件阅嘶。
-print:將搜索結(jié)果輸出到標(biāo)準(zhǔn)輸出。
3.使用示例
在var目錄下查找mysql
[root@VM_105_120_centos ~]# find /var -name mysql
/var/lib/mysql
/var/lib/mysql/mysql
查找usr目錄下mysql,并且類型為一般文件,最后列出詳細(xì)信息
[root@VM_105_120_centos ~]# find /usr -name mysql -type f -exec ls -l {} \;
-rwxr-xr-x 1 root root 10416008 9月 29 01:42 /usr/bin/mysql
關(guān)于mtime這個(gè)以后會(huì)用的很多
find $PATH -mtime 0 查找距當(dāng)前時(shí)間 24 小時(shí)以內(nèi)修改的文件
find $PATH -mtime +n 查找距當(dāng)前時(shí)間 n 天以外修改的文件
find $PATH -mtime -n 查找距當(dāng)前時(shí)間 n 天以內(nèi)修改的文件
find $PATH -mtime n 查詢距當(dāng)前時(shí)間 n 天之前 24 小時(shí)以內(nèi)修改的文件
關(guān)于exec,這個(gè)常用來(lái)批量處理
find可以很好地定位到文件,但是往往我們定位到文件后還會(huì)繼續(xù)其他操作,那么exec用處就來(lái)了.舉個(gè)例子,查找tomcat的log文件,然后刪除.
[root@VM_105_120_centos ~]# find /root/apache-tomcat-8.5.6 -name *.log -exec rm {} \;
執(zhí)行后直接就刪除了,也沒(méi)提醒,這顯然不合適,換成-ok,這個(gè)屬于安全模式下的-exec
[root@VM_105_120_centos ~]# find /root/apache-tomcat-8.5.6 -name *.txt -ok rm {} \;
< rm ... /root/apache-tomcat-8.5.6/webapps/austoj/WEB-INF/view/robots.txt > ? y
< rm ... /root/apache-tomcat-8.5.6/logs/localhost_access_log.2016-12-07.txt > ? y
< rm ... /root/apache-tomcat-8.5.6/logs/localhost_access_log.2016-10-23.txt > ? n
再比如查詢48小時(shí)前更改過(guò)的文件,并刪除
[root@VM_105_120_centos ~]# find -atime 2 -ok rm {} \;
< rm ... ./apache-tomcat-8.5.6/logs/localhost_access_log.2017-01-27.txt > ? y