0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux文件查找

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2024-12-03 17:09 ? 次閱讀

Linux文件查找

1.find查找概述

為什么要有文件查找,因?yàn)楹芏鄷r(shí)候我們可能會(huì)忘了某個(gè)文件所在的位置,此時(shí)就需要通過(guò)find來(lái)查找。

find命令可以根據(jù)不同的條件來(lái)進(jìn)行查找文件,例如:文件名稱(chēng)、文件大小、文件修改時(shí)間、屬主屬組、權(quán)限、等等方式。同時(shí)find命令是Linux下必須掌握的。

*find 命令的基本語(yǔ)法如下*

命令 路徑 選項(xiàng) 表達(dá)式 動(dòng)作
find [path…] [options] [expression] [action]
查找 地區(qū) 妹紙 18-25歲 約?

是linux里面的一個(gè)實(shí)時(shí)查找工具,通過(guò)制定路徑完成文件查找

find [options] ..... [查找路徑] [查找條件] [處理動(dòng)作]

查找路徑:查找的位置,默認(rèn)是當(dāng)前文件夾

查找條件:制定查找的標(biāo)準(zhǔn),文件名、大小、類(lèi)型、日期等等

處理動(dòng)作:對(duì)符合條件的文件做什么操作,默認(rèn)是輸出到屏幕上

2.find查找示例

*以下列出所有find常用的選項(xiàng)*

1.find名稱(chēng)查找


#1.創(chuàng)建文件
touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}


#2.查找/etc目錄下包含ifcfg-eth0名稱(chēng)的文件
[root@lqz ~]# find /etc -name "ifcfg-eth1"


#3.-i 忽略大小寫(xiě)
[root@lqz ~]# find /etc -iname "ifcfg-eth1"
#查找/etc目錄下包含ifcfg-eth名稱(chēng)所有文件
[root@lqz ~]# find /etc/ -name "ifcfg-eth*"
[root@lqz ~]# find /etc -iname "ifcfg-eth*"

2.find大小查找


#1.查找大于5M的文件
[root@lqz ~]# find /etc -size +5M


#2.查找等于5M的文件
[root@lqz ~]# find /etc -size 5M


#3.查找小于5M的文件
[root@lqz ~]# find /etc -size -5M

3.find類(lèi)型查找


# f 文件
[root@lqz ~]# find /dev -type f
# d 目錄
[root@lqz ~]# find /dev -type d
# l 鏈接
[root@lqz ~]# find /dev -type l
# b 塊設(shè)備
[root@lqz ~]# find /dev -type b
# c 字符設(shè)備
[root@lqz ~]# find /dev -type c
# s 套接字
[root@lqz ~]# find /dev -type s
# p 管道文件
[root@lqz ~]# find /dev -type p

4.find時(shí)間查找


#1.創(chuàng)建測(cè)試文件(后期shell會(huì)講)
[root@lqz ~]# for i in {01..28};do date -s  201904$i && touch file-$i;done


#2.查找7天以前的文件(不會(huì)打印當(dāng)天的文件)
[root@lqz ~]# find ./ -iname "file-*" -mtime +7


#3.查找最近7天的文件,不建議使用(會(huì)打印當(dāng)天的文件)
[root@lqz ~]# find ./ -iname "file-*" -mtime -7


#4.查找第7天文件(不會(huì)打印當(dāng)天的文件)
[root@lqz ~]# find ./ -iname "file-*" -mtime 7


#5.本地文件保留最近7天的備份文件, 備份服務(wù)器保留3個(gè)月的備份文件(實(shí)際使用方案)
find /backup/ -iname "*.bak" -mtime +7 -delete
find /backup/ -iname "*.bak" -mtime +90 -delete

5.find用戶查找


#查找屬主是jack
[root@lqz ~]# find /home -user jack
#查找屬組是admin
[root@lqz ~]# find /home -group admin
#查找屬主是jack, 屬組是admin
[root@lqz ~]# find /home -user jack -group admin
#查找屬主是jack, 并且屬組是admin
[root@lqz ~]# find /home -user jack -a -group admin
#查找屬主是jack, 或者屬組是admin
[root@lqz ~]# find /home -user jack -o -group admin
#查找沒(méi)有屬主
[root@lqz ~]# find /home -nouser
#查找沒(méi)有屬組
[root@lqz ~]# find /home -nogroup
#查找沒(méi)有屬主或?qū)俳M
[root@lqz ~]# find /home -nouser -o -nogroup

6.find權(quán)限查找


#精切匹配644權(quán)限
[root@lqz ~]# find . -perm 644 -ls


#包含444權(quán)限即可
[root@lqz ~]# find . -perm -444  -ls
#查找全局可寫(xiě)(每位權(quán)限必須包含w)
[root@lqz ~]# find . -perm -222 -ls
#包含set uid
[root@lqz ~]# find  /usr/sbin -perm -4000 -ls
#包含set gid
[root@lqz ~]# find  /usr/sbin -perm -2000 -ls
#包含sticky
[root@lqz ~]# find  /usr/sbin -perm -1000 -ls

查找條件

根據(jù)文件名查找

-name 指定名稱(chēng),可以使用正則

-iname 忽略大小寫(xiě)

-links n 引用次數(shù)為n的文件

-regex 后面跟完整路徑,而不是文件名, 必須整個(gè)路徑完全匹配

制定搜索的層級(jí)

-maxdepth level 最大的搜索深度,指定的目錄為第1層

-mindepth level 最小的搜索深度,包括level層

根據(jù)屬主、屬組來(lái)查找

-user username 查找屬主為username的文件

-group groupname 查找屬組為groupname的文件

-uid id 查找屬主為id的文件

-gid id 查找屬組為id的文件

-nouser 查找沒(méi)有屬主的文件

-nogroup 查找沒(méi)有屬組的文件

m[root@192 test]#chown qiao b
m[root@192 test]#ll
total 0
drwxr-xr-x. 4 root root 24 Dec  4 22:50 a
-rw-r--r--. 1 qiao root  0 Dec  6 17:53 b
m[root@192 test]#chown :llx b
m[root@192 test]#ll
total 0
drwxr-xr-x. 4 root root 24 Dec  4 22:50 a
-rw-r--r--. 1 qiao llx   0 Dec  6 17:53 b
m[root@192 test]#find -group llx
./b
m[root@192 test]#id root
uid=0(root) gid=0(root) groups=0(root)
m[root@192 test]#id qiao
uid=1000(qiao) gid=1000(qiao) groups=1000(qiao)
m[root@192 test]#find -uid 1000
./b


m[root@192 test]#useradd xiaobao
m[root@192 test]#chown xiaobao b
m[root@192 test]#ll
total 0
drwxr-xr-x. 4 root    root 24 Dec  4 22:50 a
-rw-r--r--. 1 xiaobao llx   0 Dec  6 17:53 b
m[root@192 test]#userdel xiaobao
m[root@192 test]#ll
total 0
drwxr-xr-x. 4 root root 24 Dec  4 22:50 a
-rw-r--r--. 1 1002 llx   0 Dec  6 17:53 b
m[root@192 test]#find -nouser
./b


# 全盤(pán)找
m[root@192 test]#find / -nouser

根據(jù)文件類(lèi)型 -type

d 目錄

f 文件

l 符號(hào)鏈接

s 套接字

b 塊設(shè)備

c 字符設(shè)備

p 管道文件

m[root@192 test]#find -type f
./b

空文件或者空目錄

-empty

m[root@192 test]#find -empty

條件

與 -a

或 -o

非 -not

m[root@192 test]#find -empty -o -type d
m[root@192 test]#find -empty -not -type d
./b

摩根定律

非(A或者B) 非A 且非B

非(A且B)非A或非B

m[root@192 ~]#find !(-empty -a -tpye d)

排除目錄

-path

[root@localhost test]#find /etc -name *_config
/etc/ssh/ssh_config
/etc/ssh/sshd_config
[root@localhost test]#find /etc -path /etc/ssh -name *_config

按照大小來(lái)查找

-size # (#-1,#] 不包括#-1,包括#

-size -# [0,#-1] 包括#-1

-size +# (#,......)

按照時(shí)間來(lái)查找

-amin

-mmin

-cmin

-atime # [#,#+1)

-atime -# (0,#)

-atime +# [#+1,....]

查找7天以后的文件 find -atime +7

-mtime

-ctime

以分鐘為單位

3 處理動(dòng)作

find動(dòng)作處理,比如查找到一個(gè)文件后,需要對(duì)文件進(jìn)行如何處理, find的默認(rèn)動(dòng)作是 -print

1.find查找后的動(dòng)作命令示例

動(dòng)作 含義
-print 打印查找到的內(nèi)容(默認(rèn))
-ls 以長(zhǎng)格式顯示的方式打印查找到的內(nèi)容
-delete 刪除查找到的文件(僅能刪除空目錄)
-ok 后面跟自定義 shell 命令(會(huì)提示是否操作)
-exec 后面跟自定義 shell 命令(標(biāo)準(zhǔn)寫(xiě)法 -exec

- -print 默認(rèn)的處理動(dòng)作,顯示在屏幕上
- -ls 類(lèi)似于ls -l 顯示長(zhǎng)格式
- -delete 刪除查找到的文件
- -fls file 將查找的結(jié)果以長(zhǎng)格式保存到文件中
- -ok command {} ; 對(duì)每一個(gè)查找到的文件執(zhí)行command命令,在執(zhí)行命令之前要先提示用戶是否要執(zhí)行

find -size 2M -ok rm -rf {} ;
找到2M的文件,刪除,提示刪除

-exec command {} ; 對(duì)查到的每一個(gè)文件執(zhí)行command命令,不需要確認(rèn),一次性交給后面命令處理

find -size 2M -exec rm -rf {} ;
m[root@192 test]#find -size 2M -delete


#1.使用-print打印查找到的文件
[root@lqz ~]# find /etc -name "ifcfg*"
[root@lqz ~]# find /etc -name "ifcfg*" -print


#2.使用-ls打印查找到的文件,以長(zhǎng)格式顯示
[root@lqz ~]# find /etc -name "ifcfg*" -ls


#3.使用-delete刪除文件,但僅能刪除空目錄
[root@lqz ~]# find /etc -name "ifcfg*" -delete


#4.使用-ok實(shí)現(xiàn)文件拷貝,但會(huì)提示是否拷貝
[root@lqz ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp ;


#5.使用-exec實(shí)現(xiàn)文件拷貝和文件刪除。
[root@lqz ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp ;
[root@lqz ~]# find /etc -name "ifcfg*" -exec rm -f {} ;

2.使用find命令結(jié)合x(chóng)args

有的命令不支持管道

命令參數(shù)過(guò)長(zhǎng)

xargs 將管道前面的內(nèi)容一條一條的交給后面命令處理

echo file{1..50000}|xargs touch

一般會(huì)跟find使用


#xargs將前者命令查找到的文件作為一個(gè)整體傳遞后者命令的輸入
[root@lqz ~]# touch file.txt
[root@lqz ~]# find . -name "file.txt" |xargs rm -f
[root@lqz ~]# find . -name "file.txt" |xargs -I {} cp -rvf {} /var/tmp

3.find邏輯運(yùn)算符

符號(hào) 作用
-a
-o
-not|!


#1.查找當(dāng)前目錄下,屬主不是hdfs的所有文件
[root@lqz ~]# find . -not -user hdfs 
[root@lqz ~]# find . ! -user hdfs
        
#2.查找當(dāng)前目錄下,屬主屬于hdfs,且大小大于300字節(jié)的文件
[root@lqz ~]# find . -type f -a -user hdfs -a -size +300c
            
#3.查找當(dāng)前目錄下的屬主為hdfs或者以xml結(jié)尾的普通文件
[root@lqz ~]# find . -type f -a ( -user hdfs -o -name '*.xml' )

4.find相關(guān)練習(xí)題

1.查找/tmp目錄下,屬主不是root,且文件名不以f開(kāi)頭的文件
2.查找/var目錄下屬主為root,且屬組為mail的所有文件
3.查找/var目錄下不屬于root、lp、gdm的所有文件
4.查找/var目錄下最近一周內(nèi)其內(nèi)容修改過(guò),同時(shí)屬主不為root,也不是postfix的文件
5.查找/etc目錄下大于1M且類(lèi)型為普通文件的所有文件
6.將/etc/中的所有目錄(僅目錄)復(fù)制到/tmp下,目錄結(jié)構(gòu)不變
7.將/etc目錄復(fù)制到/var/tmp/,/var/tmp/etc的所有目錄權(quán)限777/var/tmp/etc目錄中所有文件權(quán)限666
8.保留/var/log/下最近7天的日志文件,其他全部刪除
9.創(chuàng)建touch file{1..10}10個(gè)文件, 保留file9,其他一次全部刪除
10.解釋如下每條命令含義
mkdir /root/dir1
touch /root/dir1/file{1..10}
find /root/dir1 -type f -name "file5"
find /root/dir1 ! -name "file5"
find /root/dir1 -name "file5" -o -name "file9"
find /root/dir1 -name "file5" -o -name "file9" -ls
find /root/dir1 ( -name "file5" -o -name "file9" ) -ls
find /root/dir1 ( -name "file5" -o -name "file9" ) -exec rm -rvf {} ;
find /root/dir1  ! ( -name "file4" -o -name "file8" ) -exec rm -vf {}  ;

linux三劍客

三劍客詳解

grep

awk

sed

grep

grep [option] "模式" file

option

--color=auto 對(duì)匹配到的行添加顏色
-v 取反
-i 不區(qū)分大小寫(xiě)
-n 查找的內(nèi)容增加行號(hào)
-c 打印匹配到的行數(shù)
-o 只顯示匹配到的文字
-q 靜默模式
-A # after 向下顯示#行
-B # before 向上顯示#行
—C # context 上下分別顯示#行
-e 或者 grep -e 'user' -e 'root' passwd 或的意思
-E 擴(kuò)展正則表達(dá)式
-F 不使用正則表達(dá)式
-r 遞歸
-w 匹配整個(gè)單詞

正則表達(dá)式元字符

字符匹配

. 任意單個(gè)字符

[] 匹配指定范圍內(nèi)的任意單個(gè)字符 [0-9] [a-z] [A-Z]

[^] 取反

[] 大寫(xiě)字母

[] 小寫(xiě)字母

[] 字母和數(shù)字

[] 大小寫(xiě)字母

[] 數(shù)字

m[root@192 test]#grep '[[]]+' c
# 匹配數(shù)字




[:black:] 空白
[:punct:] 標(biāo)點(diǎn)符號(hào)
匹配次數(shù)
* 表示任意次數(shù)
.* 任意字符任意次數(shù)
? 表示0或者1次
+ 至少一次
{n} 表示n次 轉(zhuǎn)義字符
{m,n} 最少m次,最多n次
{n,} 至少n次
{,n} 至多n次
位置錨定
^ 開(kāi)頭
$結(jié)尾
^$ 空行
grep -v "^#" /etc/ssh/sshd_config |grep -v "^$" 顯示不以#開(kāi)頭并且不是空行

分組

grep "(c|C)at" a

向后引用

1 前面第一個(gè)括號(hào)出現(xiàn)的內(nèi)容匹配完成之后再后面在出現(xiàn)一次

2 前面第二個(gè)括號(hào)出現(xiàn)的內(nèi)容匹配完成之后再后面在出現(xiàn)一次

grep "(l..e).*1" c
love djfdjfd;d love

擴(kuò)展正則表達(dá)式

與正則表達(dá)式的區(qū)別是不需要轉(zhuǎn)義

grep -E "(c|C)at" a
不需要加進(jìn)行轉(zhuǎn)義

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209498
  • Find
    +關(guān)注

    關(guān)注

    0

    文章

    54

    瀏覽量

    11650

原文標(biāo)題:正則表達(dá)式元字符

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux中怎么用find查找文件

    find命令用來(lái)在指定目錄下查找文件的命令,和locate不同,find命令是實(shí)時(shí)精確查找,不做模糊匹配,但是可以使用通配符查找,相對(duì)更精確。任何位于參數(shù)之前的字符串都將被視為欲查找
    發(fā)表于 11-26 13:52

    Linux文件查找命令find,xargs詳述

    Linux文件查找命令find,xargs詳述 前言:關(guān)于find命令 由于find具有強(qiáng)大的功能,所以它的選項(xiàng)也很多,其中大部分選項(xiàng)都值得我們花時(shí)間來(lái)了解一下。即使系統(tǒng)中含有網(wǎng)絡(luò)文件
    發(fā)表于 11-07 11:17 ?0次下載

    Linux文件管理命令語(yǔ)法、參數(shù)、實(shí)例全匯總

    Linux find命令用來(lái)在指定目錄下查找文件。任何位于參數(shù)之前的字符串都將被視為欲查找的目錄名。如果使用該命令時(shí),不設(shè)置任何參數(shù),則find命令將在當(dāng)前目錄下查找子目錄與
    的頭像 發(fā)表于 03-14 17:48 ?4138次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件</b>管理命令語(yǔ)法、參數(shù)、實(shí)例全匯總

    Linux中的35個(gè)find命令用法

    Linux查找命令是Linux系統(tǒng)中最重要和最常用的命令之一。查找用于根據(jù)與參數(shù)匹配的文件指定的條件來(lái)搜索和
    的頭像 發(fā)表于 02-02 16:53 ?3671次閱讀
    <b class='flag-5'>Linux</b>中的35個(gè)find命令用法

    虛擬機(jī):Linux查找網(wǎng)卡所用的驅(qū)動(dòng)

    虛擬機(jī):Linux查找網(wǎng)卡所用的驅(qū)動(dòng)
    的頭像 發(fā)表于 06-22 15:29 ?3549次閱讀
    虛擬機(jī):<b class='flag-5'>Linux</b><b class='flag-5'>查找</b>網(wǎng)卡所用的驅(qū)動(dòng)

    如何在Linux使用wc命令統(tǒng)計(jì)目錄文件

    盡管不是很經(jīng)常需要知道,但有時(shí)您需要找出指定目錄中有多少個(gè)文件。例如,Linux系統(tǒng)inodes用完,則需要查找哪個(gè)目錄包含成千上萬(wàn)個(gè)文件。
    的頭像 發(fā)表于 12-09 16:48 ?1842次閱讀

    如何在Linux查找斷開(kāi)的符號(hào)鏈接

    在之前的文章中,我們解釋了什么是 Linux 中的符號(hào)鏈接。符號(hào)鏈接(Symbolic links 或 symlinks)或軟鏈接(soft links)用于在 Linux 中創(chuàng)建指向其他文件
    的頭像 發(fā)表于 02-06 18:23 ?1644次閱讀

    Python如何快速查找文件

    但是既然用到了Python,就想到可不可以來(lái)自己實(shí)現(xiàn)一下,下面的分析是針對(duì)一個(gè)目錄來(lái)查找的,當(dāng)你知道文件大致有什么東西的時(shí)候,比如你要查找 md 結(jié)尾的的文件,又大致知道在哪個(gè)目錄的時(shí)
    的頭像 發(fā)表于 03-03 15:39 ?1429次閱讀

    如何使用命令行在Linux查找文件

    對(duì)于Linux新用戶來(lái)說(shuō),在Linux查找文件可能有點(diǎn)困難。但是,在適當(dāng)?shù)闹笇?dǎo)下,任何人都可以創(chuàng)建文件快捷方式或找到其Linux系統(tǒng)中有多
    的頭像 發(fā)表于 03-23 14:55 ?4252次閱讀

    如何在Linux查找文件所有者?

    Linux 系統(tǒng)中,每個(gè)文件和目錄都有一個(gè)所有者(owner)和一個(gè)所屬組(group)。所有者通常是創(chuàng)建該文件或目錄的用戶,而所屬組通常是文件或目錄所屬的組。在某些情況下,您可能
    的頭像 發(fā)表于 05-12 14:31 ?1284次閱讀
    如何在<b class='flag-5'>Linux</b>中<b class='flag-5'>查找文件</b>所有者?

    linux查找文件的命令

    Linux中,可以使用以下命令來(lái)查找文件: find 命令:可以在指定目錄及其子目錄中查找文件,支持根據(jù)文件名、文件類(lèi)型、
    的頭像 發(fā)表于 11-08 14:24 ?1307次閱讀

    Linux文件系統(tǒng)特點(diǎn)

    Linux文件系統(tǒng)特點(diǎn) 文件系統(tǒng)要有嚴(yán)格的組織形式,使得文件能夠以塊為單位進(jìn)行存儲(chǔ)。 文件系統(tǒng)中也要有索引區(qū),用來(lái)方便
    的頭像 發(fā)表于 11-09 14:48 ?1192次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>文件</b>系統(tǒng)特點(diǎn)

    Linux文件查找神器對(duì)決:Locate與find選誰(shuí)

    linux 中有很多查找工具,今天主要講解locate,find兩個(gè)工具。 一、 locate 1、性能介紹 查詢(xún)系統(tǒng)上預(yù)建的文件索引 數(shù)據(jù)庫(kù) /var/lib/mlocate/mlocate.db
    的頭像 發(fā)表于 12-18 14:00 ?140次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件</b><b class='flag-5'>查找</b>神器對(duì)決:Locate與find選誰(shuí)