一丧肴、find的常用用法
find < path > < expression > < cmd >
path
: 所要搜索的目錄及其所有子目錄残揉。默認(rèn)為當(dāng)前目錄。
expression
: 所要搜索的文件的特征芋浮。
cmd
: 對搜索結(jié)果進(jìn)行特定的處理抱环。
參數(shù):
-perm
按照文件權(quán)限來查找文件-mtime -n/+n
按照文件的更改時(shí)間來查找文件, -n表示文件更改時(shí)間距現(xiàn)在n天以內(nèi),+n表示文件更改時(shí)間距現(xiàn)在n天以前镇草。-newer file1 ! file2
查找更改時(shí)間比文件file1新但比文件file2舊的文件-type
查找某一類型的文件濒憋,諸如:
b
- 塊設(shè)備文件。
d
- 目錄陶夜。
c
- 字符設(shè)備文件。
p
- 管道文件裆站。
l
- 符號鏈接文件条辟。
f
- 普通文件-exec
,find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令宏胯。相應(yīng)命令的形式為’command’{}
\;
注意{}
和\;
之間的空格-ok
羽嫡,和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令肩袍,在執(zhí)行每一個(gè)命令之前杭棵,都會給出提示,讓用戶來確定是否執(zhí)行氛赐。
example:
find . -perm 755 –print 在當(dāng)前目錄下查找文件權(quán)限位為755的文件
find / -mtime -5 –print 在系統(tǒng)根目錄下查找更改時(shí)間在5日以內(nèi)的文件
find /var/adm -mtime +3 –print 在/var/adm目錄下查找更改時(shí)間在3日以前的文件
find /etc -type d –print 在/etc目錄下查找所有的目錄 [type表示查找什么樣的文件類型]
find ./ -size 0 -exec rm {} \; = rm -i `find ./ -size 0` = find ./ -size 0 | xargs rm -f & 刪除文件大小為零的文件
find 與xargs的結(jié)合 常用于find進(jìn)行查找文件魂爪,之后xargs對其進(jìn)行處理
xargs的使用是由于很多命令不支持|管道來傳遞參數(shù),才因此使用這個(gè)命令
如下方的例子艰管,xargs -i 表示的是將前面find找到的結(jié)果一行一行賦值給{}滓侍,-t表示的是先打印命令,然后再執(zhí)行牲芋。
xargs的其他參數(shù)具體使用方法參見:xargs的用法
[root@master01 test]# touch file{1..3}.log
[root@master01 test]# ls
file1.log file2.log file3.log
[root@master01 test]# find . -type f -exec ls {} \;
./file1.log
./file2.log
./file3.log
# 復(fù)制并修改符合條件的文件
[root@master01 test]# find . -type f -exec cp {} {}.bak \;
[root@master01 test]# ls
file1.log file1.log.bak file2.log file2.log.bak file3.log file3.log.bak
# rename將符合條件的文件改名
[root@master01 test]# find . -type f -exec rename .log.bak .txt {} \;
[root@master01 test]# ls
file1.log file1.txt file2.log file2.txt file3.log file3.txt
------------
# 找到符合條件的文件并復(fù)制到遠(yuǎn)程服務(wù)器上
[root@zz-master01 test]# find . -type f -name "*.txt"| xargs -i -t scp {} zz-master01:/root
scp ./file1.txt zz-master01:/root
root@zz-master01's password:
file1.txt 100% 0 0.0KB/s 00:00
scp ./file2.txt zz-master01:/root
root@zz-master01's password:
file2.txt 100% 0 0.0KB/s 00:00
scp ./file3.txt zz-master01:/root
root@zz-master01's password:
file3.txt 100% 0 0.0KB/s 00:00
值得注意的是 find 在尋找數(shù)據(jù)的時(shí)候相當(dāng)?shù)暮挠脖P撩笆,所以沒事情不要使用 find 啦!有更棒的指令可以取代呦缸浦,那就是下方的whereis
與 locate
二夕冲、locate命令
locate
命令其實(shí)是“find -name
”的另一種寫法,但是要比后者快得多裂逐,原因在于它不搜索具體目錄歹鱼,而是搜索一個(gè)數(shù)據(jù)庫(/var/lib/locatedb),這個(gè)數(shù)據(jù)庫中含有本地所有文件信息卜高。Linux系統(tǒng)自動創(chuàng)建這個(gè)數(shù)據(jù)庫醉冤,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件篙悯。為了避免這種情況蚁阳,可以在使用locate之前,先使用updatedb命令鸽照,手動更新數(shù)據(jù)庫
locate /etc/sh
搜索etc目錄下所有以sh開頭的文件螺捐。 【locate后面直接接一個(gè)路徑,locate /etc/*.log】
$ locate -i ~/m
搜索用戶主目錄下,所有以m開頭的文件定血,并且忽略大小寫赔癌。【-i表示忽略大小寫】
三澜沟、whereis命令
whereis
命令只能用于程序名的搜索灾票,而且只搜索二進(jìn)制文件(參數(shù)-b
)、man說明文件(參數(shù)-m
)和源代碼文件(參數(shù)-s
)茫虽。如果省略參數(shù)刊苍,則返回所有信息
whereis grep [如不加任何參數(shù)就會搜索所有相關(guān)的文件,如grep 的man說明文件濒析,源碼包]
example:
[root@data ~]# whereis grep
grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz
[root@data ~]# whereis -b grep
grep: /bin/grep
四正什、which命令
which
命令的作用是,在PATH變量指定的路徑中号杏,搜索某個(gè)系統(tǒng)命令的位置婴氮,并且返回第一個(gè)搜索結(jié)果。也就是說盾致,使用which命令主经,就可以看到某個(gè)系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個(gè)位置的命令庭惜。
example:
[root@data ~]# which grep 【可以看出grep這個(gè)命令是在/bin下】
/bin/grep
五旨怠、grep命令
grep 命令參數(shù):
- -i 忽略大小寫
- -A 前面
- -B 后面
- -C 上下
- -l 只顯示搜索的文件名
- -n 給每行數(shù)據(jù)添加行數(shù)
- -R 遞歸
- -w 單詞邊界
- -E 正則表達(dá)式中不需要擴(kuò)展
- -o 輸出匹配的那部分,而不是整行
- -o|wc -l 顯示文件中某個(gè)單詞出現(xiàn)的次數(shù)
- -c 匹配的行數(shù)
- -v 反向
- -q 不輸出但返回值
example:
- 在/root/桌面下搜索所有含有root 的文件:
[root@scott 桌面]# grep -l "root" -R /root/桌面
/root/桌面/passwd
- 打印出/etc/passwd文件中包含gdm的行,并打出其下面2行:
[root@scott ~]# grep -A2 -n gdm /etc/passwd
26:gdm:x:42:42::/var/lib/gdm:/sbin/nologin
27-ntp:x:38:38::/etc/ntp:/sbin/nologin
28-apache:x:48:48:Apache:/var/www:/sbin/nologin
------如果是打印出gdm的上面兩行用B2蜈块,如果是上面兩行以及下面兩行用C2 --------------