find命令與sort命令的使用方法
find命令
Linux find命令用來在指定目錄下查找文件。任何位于參數(shù)之前的字符串都將被視為欲查找的目錄名。如果使用該命令時(shí),不設(shè)置任何參數(shù),則find命令將在當(dāng)前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進(jìn)行顯示。
參數(shù)說明 :
find 根據(jù)下列規(guī)則判斷 path 和 expression,在命令列上第一個(gè) - ( ) , ! 之前的部份為 path,之后的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預(yù)設(shè) expression。
expression 中可使用的選項(xiàng)有二三十個(gè)之多,在此只介紹最常用的部份。
-type 按照文件類型去查找
b:塊設(shè)備文件;
c:字符設(shè)備文件;
d:目錄文件;
p: 命名管道;
f: 普通文件;
l: 符號(hào)鏈接文件;
-exec 相當(dāng)于shell執(zhí)行命令比如rm,mkdir,touch,等
-mtime 修改時(shí)間之前的文件,比如3天之前的,一般用于日志清理進(jìn)行匹配
-mount, -xdev : 只檢查和指定目錄在同一個(gè)文件系統(tǒng)下的文件,避免列出其它文件系統(tǒng)中的文件
-amin n : 在過去 n 分鐘內(nèi)被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去n天內(nèi)被讀取過的文件
-cmin n : 在過去 n 分鐘內(nèi)被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去n天內(nèi)被修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會(huì)忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會(huì)忽略大小寫
-size n : 文件大小 是 n 單位,b 代表 512 位元組的區(qū)塊,c 表示字元數(shù),k 表示 kilo bytes,w 是二個(gè)位元組。
-ok 一般使用rm的時(shí)候會(huì)用到,-ok rm {} \;
選擇y為刪除,選擇n為不刪除
查看git-eureka下或者當(dāng)前目錄下結(jié)尾以jar的文件
[root@zhaocheng ~]# find git-eureka/ -name '*.jar'git-eureka/eureka-service/target/eureka-service.jar[root@zhaocheng ~]# find . -name "*.jar"./pp/eureka-service/target/eureka-service.jar./git-eureka/eureka-service/target/eureka-service.jar查找出00目錄下的目錄 -d為目錄,-f為一般文件
[root@zhaocheng ~]# find 00 -type d0000/.git00/.git/objects00/.git/objects/pack00/.git/objects/52[root@zhaocheng ~]# find 00 -type f00/eureka-service-target.zip00/eureka.yaml00/.git/config00/.git/description00/.git/objects/52/c6e76bc253b21e1e59074e5730edb74b0af3991>訪問時(shí)間(access time 簡(jiǎn)寫為atime)
2>修改時(shí)間(modify time 簡(jiǎn)寫為mtime)
3>狀態(tài)修改時(shí)間(change time 簡(jiǎn)寫為ctime)
找出當(dāng)前目錄下有進(jìn)行訪問的目錄
[root@zhaocheng ~]# find . -atime -10./number.txt./.viminfo./filetest./fileteste./.cache/abrt/lastnotification./vim./harbor-offline-installer-v1.10.1.tgz./filetest2去微服務(wù)的logs目錄下找到40天以前的日志,并刪除,exec相當(dāng)于shell命令,可以執(zhí)行l(wèi)s touch rm等相關(guān)操作
[root@localhost]# find /data/deploy/rebuild2/restful-workorder/ROOT/logs/ -mtime +40 -name "*.log" -exec ls {} \;/data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-28.log/data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-27.log/data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-22.log/data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-23.log/data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-25.log/data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-26.log[root@sitWeb ROOT]# find /data/deploy/jinre/restful-workorder/ROOT/logs/ -mtime +40 -name "*.log" -exec rm -rf {} \;或者使用find與|xargs去進(jìn)行刪除log的日志
[root@zhaocheng log]# find /var/log/anaconda//var/log/anaconda//var/log/anaconda/storage.log/var/log/anaconda/ifcfg.log/var/log/anaconda/syslog/var/log/anaconda/a/var/log/anaconda/ks-script-A2uRCN.log/var/log/anaconda/program.log/var/log/anaconda/anaconda.log/var/log/anaconda/packaging.log/var/log/anaconda/ks-script-LPeMYl.log/var/log/anaconda/journal.log[root@zhaocheng log]# find /var/log/anaconda/ -name '*log' |xargs rm或者在刪除的時(shí)候用上-ok rm {} \; 這里會(huì)提示要不要?jiǎng)h除,y為確認(rèn)刪除,n為不刪除
[root@localhost ~]# find /var/log/ -name "*.gz" -size +2M -ok rm {} \;< rm ... /var/log/secure-201912161576437482.gz > ? n< rm ... /var/log/secure-202001111578684841.gz > ? n< rm ... /var/log/secure-201912301577646721.gz > ? n< rm ... /var/log/secure-201911221574363161.gz > ? n< rm ... /var/log/secure-202001271580065561.gz > ? n< rm ... /var/log/secure-201912241577130301.gz > ? n< rm ... /var/log/secure-202001051578164821.gz > ? n< rm ... /var/log/secure-202002091581191341.gz > ? n< rm ... /var/log/secure-201912041575402301.gz > ? n< rm ... /var/log/secure-201912111576006622.gz > ? n比如你想找nginx.conf的配置文件放在了什么位置,想查看有沒有相關(guān)php的配置,-name,找到符合-name的文件
[root@localhost scripts]# find / -name nginx.conf/usr/local/nginx/conf/nginx.conf/root/nginx/nginx-1.16.1/conf/nginx.conf[root@localhost scripts]# find /root/nginx/nginx-1.16.1/conf/ -name "*.conf" -exec grep php {} \; ???#location ~ \.php$ { ???#location ~ \.php$ {#fastcgi_index index.php;將yum.repos.d下的repo源移動(dòng)到bak下,{}就是里面的內(nèi)容,后面跟目錄
[root@localhost ~]# find /etc/yum.repos.d/ -name "*.repo" -exec mv {} /etc/yum.repos.d/bak \;[root@localhost ~]# ls /etc/yum.repos.d/bakfind命令與grep命令連用,找出/root下以filetest的文件,找出以halt的行
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;#halt:x:7:0:halt:/sbin:/sbin/haltfind命令與sed命令連用,找出/root下以filetest的文件,找出以halt的行,將它的以#開頭的注釋刪除掉
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;|sed 's/^#/halt&/' halt#halt:x:7:0:halt:/sbin:/sbin/haltfind命令與awk命令連用,找出/root下filetest這個(gè)文件,過濾出以halt的行,并以:為分隔符打印它的第二列
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;|awk -F ":" '{print $2}'x查找當(dāng)前文件下,大于30M的文件,xargs過濾符,一般find過濾的時(shí)候和管道一起使用
[root@zhaocheng git-eureka]# find . -type f -size +30M |xargs du -sh46M ??./eureka-service/target/eureka-service.jar40M ??./eureka-service.zip40M ??./.git/objects/c8/aeecf5dbe33c9e24a049738fcccc2aa8b4ff10找出/目錄下大于50M的文件并查看文件大小,進(jìn)行倒著排序,type類型一般用戶指定f為文件,或者d為目錄,-size大小,xargs進(jìn)行管道統(tǒng)計(jì),sort -n是指定數(shù)字,r是倒著排序
[root@zhaocheng ~]# find / -type f -size +50M |xargs du -sh |sort -nrfind: ‘/proc/8705/task/8705/fdinfo/6’: No such file or directoryfind: ‘/proc/8705/fdinfo/5’: No such file or directory500M ?/opt/binary_pkg.gz268M ?/opt/binary_pkg/image.tar.gz157M ?/data/soft/logstash-7.5.0.tar.gz136M ?/var/lib/rpm/Packages136M ?/usr/local/qcloud/YunJing/VulnerDetect/yhvs/Packages對(duì)于docker來講運(yùn)行的每個(gè)容器都會(huì)產(chǎn)生日志,也就是它的工作目錄/var/lib/docker/containers/xxx/xxx-json.log
我們平時(shí)清理的話也是需要將這個(gè)目錄進(jìn)行清理,現(xiàn)在去找出這個(gè)目錄里面大于2G的log,刪除日志一般需要使用cat /dev/null >xxx-json.log,使用rm -rf刪除正在寫入的日志磁盤空間不會(huì)減少
[root@k8s-node1 ~]# find /var/lib/docker/containers/ -name *-json.log -size +2G |xargs du -sh |sort -nr
找出前20行內(nèi)比較大的目錄,進(jìn)行倒著排序
-h, –human-readable ?以比較閱讀的方式輸出文件大小信息 (例如,1K 234M 2G)。注:該選項(xiàng)在很多其他命令(df, ls)中也有效。
-m ?以兆字節(jié)(M)為計(jì)算單位
–max-depth=N 只列出深度小于max-depth的目錄和文件的信息 –max-depth=0 的時(shí)候效果跟–s是 一樣
[root@zhaocheng ~]# du -hm --max-depth=2 |sort -nr |head -20642 ??.126 ??./git-eureka86 ??./pp81 ??./99/.git81 ??./9981 ??./88/.gituniq 命令刪除文件中的重復(fù)行。 uniq 命令讀取由 InFile 參數(shù)指定的標(biāo)準(zhǔn)輸入或文件。該命令首先比較相鄰的行,然后除去第二行和該行的后續(xù)副本。
用法:uniq[選項(xiàng)]…(輸入[輸出]]
從輸入(或標(biāo)準(zhǔn)輸入)中過濾相鄰的匹配行,
寫入到輸出(或標(biāo)準(zhǔn)輸出)。
以這個(gè)文件為示例
[root@zhaocheng ~]# cat filetestroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/halt參數(shù)解釋
-c ?????按出現(xiàn)的次數(shù)計(jì)算前綴行數(shù)
-d ????只打印重復(fù)的行
-D ????打印所有重復(fù)的行
如果沒有選項(xiàng),匹配的行將合并到第一個(gè)出現(xiàn)的行。
[root@zhaocheng ~]# uniq filetestroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/halt-c將文本中所有的字段進(jìn)行統(tǒng)計(jì),有一樣的就會(huì)統(tǒng)計(jì)出來
[root@zhaocheng ~]# uniq -c filetest ??3 root:x:0:0:root:/root:/bin/bash ??1 bin:x:1:1:bin:/bin:/sbin/nologin ??1 daemon:x:2:2:daemon:/sbin:/sbin/nologin ??1 adm:x:3:4:adm:/var/adm:/sbin/nologin ??1 halt:x:7:0:halt:/sbin:/sbin/halt-d只打印重復(fù)的行
[root@zhaocheng ~]# uniq -d filetestroot:x:0:0:root:/root:/bin/bash-D將所有的重復(fù)的行都打印出來,-d只將重復(fù)的行打印一次
[root@zhaocheng ~]# uniq -D filetestroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashsort
用法:排序[選項(xiàng)]…[文件]…
或者:[選項(xiàng)]…——files0-from = F
將所有文件的排序連接寫入標(biāo)準(zhǔn)輸出。
-b ?忽略每行前面開始出的空格字符。
-c ?檢查文件是否已經(jīng)按照順序排序。
-f ??排序時(shí),忽略大小寫字母。
-M ?將前面3個(gè)字母依照月份的縮寫進(jìn)行排序。
-n ?依照數(shù)值的大小排序。
-o ?<輸出文件> ?將排序后的結(jié)果存入指定的文件。
-r ??以相反的順序來排序。
-t ??<分隔字符> ?指定排序時(shí)所用的欄位分隔字符。
-k ?選擇以哪個(gè)區(qū)間進(jìn)行排序。
[root@zhaocheng ~]# sort filetestadm:x:3:4:adm:/var/adm:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/haltroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bash這里換成數(shù)字的話,那么就需要使用sort -n去進(jìn)行排序
[root@zhaocheng ~]# sort -n number.txt 2357566580-r的話就是進(jìn)行倒序進(jìn)行排列
[root@zhaocheng ~]# sort -n -r number.txt 8065567532比如在我們的linux/var/log下有很多的日志文件,比如有系統(tǒng)的計(jì)劃任務(wù)的,等等,但是里面的文件也比較多,可以通過sort去排序,方便查看
[root@k8s-master1 log]# du -sh * |sort -n -r755M ?messages236K ?wtmp132K ?cron-20200216132K ?cron-20200209132K ?cron-20200202132K ?cron-2020012668K ??cloud-init.log52K ??cron36K ??dmesg34M ??audit25M ??sa8.0K ?tuned8.0K ?boot.log-20191021sort -u可以也可以進(jìn)行排序以及去重
[root@zhaocheng ~]# sort -u filetestadm:x:3:4:adm:/var/adm:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/haltroot:x:0:0:root:/root:/bin/bash將我們的輸出的內(nèi)容進(jìn)行保存,這里就需要-o,存儲(chǔ)到指定文件
[root@zhaocheng ~]# sort -n -r number.txt -o number.txt [root@zhaocheng ~]# cat number.txt 986589087656553464
了解更多相關(guān)內(nèi)容歡迎關(guān)注http://www.kd010.com/