日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux 文件查找命令集:find,locate,wheres,which,type

發(fā)布時(shí)間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 文件查找命令集:find,locate,wheres,which,type 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

        • 前言
        • find命令
          • 命令格式:
          • 常用選項(xiàng):
          • 舉例使用
        • locate命令
          • 命令格式
          • 使用實(shí)例
        • whereis命令
          • 使用過程:
        • which命令
        • type命令

前言

在linux系統(tǒng)中一切皆文件,此時(shí)我們想要從海量的文件中快速定位中我們想要的文件來,需要指定的命令來操作。以下為收集的各個(gè)命令,以及其優(yōu)劣,使用方式。

find命令

centos下:rpm包findutils-4.5.11-3.el7.x86_64
find是最常用也是最強(qiáng)大的查找命令,它可以查找任何類型的文件。

命令格式:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

常用選項(xiàng):
  • -name:按文件名來查找文件
  • -user:按照文件的屬主來查找文件
  • -group:按照文件所屬的組來查找文件
  • -perm:按照文件權(quán)限來查找文件
  • -prune:不在當(dāng)前指定目錄中查找
舉例使用

已知文件stdio.h存放在/usr大目錄下的多個(gè)子目錄,cd /usr目錄下
find -name "stdio.h" 表示在當(dāng)前目錄查找文件名稱為stdio.h的文件

find . -path ./include -prune -o -name "stdio.h" 在當(dāng)前目錄查及其子目錄查找名稱為stdio.h的文件,但是跳過include目錄;
這里的-o參數(shù)表示或關(guān)系,即兩者中只要有一個(gè)表達(dá)式滿足true即可輸出;
-a-not,-a表示只要有一個(gè)表達(dá)式不滿足則不輸出,-not表示對(duì)查找的結(jié)果進(jìn)行取反

find . -path ./include -o -name "stdio.h" -print 將匹配到的內(nèi)容文件輸出到標(biāo)準(zhǔn)輸出中

find / -user ceph 查找文件所有者為ceph的文件
find / -nouser -a -nogroup 查找系統(tǒng)中不屬于任何人,任何用戶組的文件(對(duì)于該部分文件需要保持警惕)

find /usr -mtime -4查找文件更新日時(shí)在距現(xiàn)在時(shí)刻4天以內(nèi)的文件
find /usr -mtime +4 查找文件更新日時(shí)在距現(xiàn)在時(shí)刻5天以上的文件
find /usr -mtime 4查找文件更新日時(shí)在距現(xiàn)在時(shí)刻4天以上5天以內(nèi)的文件

find / -type [c] 根據(jù)文件屬性進(jìn)行查找
其中[c]包括如下屬性:

  • p 管道文件/run/systemd/initctl/fifo
  • b block塊設(shè)備文件,類似與/dev/sdb磁盤盤符這種
  • c 字符設(shè)備,類似于/dev/tty63
  • d directory 目錄文件
  • f regular file 普通文件
  • l symbolic link 鏈接文件
  • s socket 套接字文件

find / -size +10M 按照文件大小進(jìn)行查找,+表示大于10M的文件,-表示小于10M的文件,同時(shí)還支持K,G,b(512B的塊大小)的單位查找

locate命令

centos下:rpm包為mlocate-0.26-5.el7.x86_64
locate命令實(shí)際是"find -name"的另一種寫法,但是查找方式跟find不同,它比find快得多。
因?yàn)樗凰阉骶唧w目錄,而是在一個(gè)數(shù)據(jù)庫(/var/lib/mlocate/mlocate.db)中搜索指定的文件。次數(shù)據(jù)庫含有本地文件的所有信息,此數(shù)據(jù)庫是linux系統(tǒng)自動(dòng)創(chuàng)建的,數(shù)據(jù)庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,默認(rèn)情況下為每天更新一次,所以用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件之前手動(dòng)的用updatedb命令更新數(shù)據(jù)庫。

命令格式

locate [OPTION]... [PATTERN]...

主要使用的參數(shù)含義如下:

  • -A 打印所有匹配到的文件
  • -b 精確匹配需要查找的文件,即如果文件命中包含我們要查找的則不打印
  • -c 僅打印匹配到文件個(gè)數(shù)
  • -d --database DBPATH 指定自己的文件數(shù)據(jù)庫
  • -e 打印當(dāng)前系統(tǒng)存在的想要查找的文件
  • -i 忽略匹配出來的文件的差異
  • -m 已經(jīng)被忽略了,為了向后兼容
  • -l count 或者 -n count 限制輸出的條數(shù)
  • -r 支持普通的正則匹配,類似locate -r ceph-osd.[0-9] 查找ceph-osd.后面有一個(gè)數(shù)字的文件
  • -w 精確匹配,默認(rèn)不加也是精確匹配
使用實(shí)例

這里關(guān)于參數(shù)詳細(xì)的使用就不多說,以上都已經(jīng)提到
這里簡(jiǎn)單說一下locate的正則匹配,基本的正則符號(hào)參考正則符號(hào)
舉例:
locate -r ceph-osd.[0-9].log$ 查找以包含ceph-osd的字符串,且在ceph-osd.和.log之間有一個(gè)數(shù)字,且以log字符串結(jié)尾的文件

我們?cè)谑褂胠ocate的很多時(shí)候發(fā)現(xiàn)一個(gè)新的文件locate不到,關(guān)于locate命令的基本查找過程上面也已經(jīng)提到,因?yàn)閘ocate的文件獲取是從操作系統(tǒng)定時(shí)更新的數(shù)據(jù)庫中獲取,但是新的文件可能還沒有更新到數(shù)據(jù)庫(還沒有被系統(tǒng)設(shè)置的定時(shí)任務(wù)去更新數(shù)據(jù)庫),此時(shí)我們需要手動(dòng)更新以下該數(shù)據(jù)庫。
關(guān)于mlocate.db數(shù)據(jù)庫的更新任務(wù)在路徑為/etc/cron.daily/mlocate中,內(nèi)容如下

#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "rootfs" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"

我們做出如下測(cè)試

[root@node2 ~]# echo "i am a man" >test.cron
[root@node2 ~]# locate test.cro
[root@node2 ~]# updatedb  手動(dòng)跟新數(shù)據(jù)庫
[root@node2 ~]# locate test.cron   手動(dòng)更新即可發(fā)現(xiàn)我們創(chuàng)建的文件已經(jīng)存在
/root/test.cron

whereis命令

centos下的rpm包util-linux-2.23.2-26.el7.x86_64
whereis命令只能用于搜索二進(jìn)制文件(-b)、源代碼文件(-s)、說明文件(-m)。如果省略參數(shù)則返回所有的信息
使用起來也是非常簡(jiǎn)單

使用過程:
[root@node2 ~]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -b locate
locate: /usr/bin/locate
[root@node2 ~]# whereis -m locate
locate: /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -s locate
locate:[root@node2 ~]#

該命令能夠方便編譯機(jī)上的組件以及對(duì)應(yīng)源碼的查找

which命令

which命令是在PATH變量指定的路徑中搜索指定的系統(tǒng)命令的位置。用echo $PATH可顯示當(dāng)前PATH變量的值

[root@node2 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/root/perl5/bin:/b_iscsi/bn_cli:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@node2 ~]# which locate
/bin/locate

type命令

type命令主要用于區(qū)分一個(gè)命令到底是shell自帶的還是外部獨(dú)立的二進(jìn)制文件提供的。如果是shell自帶的則會(huì)提示此命令為shell buildin,否則會(huì)列出命令的位置。例如:cd為shell自帶的命令,當(dāng)用which查找時(shí),which會(huì)按照PATH變量設(shè)置的路徑進(jìn)行搜索,如果不是shell自帶命令,則結(jié)果會(huì)顯示no cd in...;用type cd則顯示cd為shell buildin命令。ssh不是shell自帶命令,用type時(shí)會(huì)顯示ssh的路徑。

[root@node2 ~]# type cd
cd is a shell builtin
[root@node2 ~]# type find
find is hashed (/bin/find)

總結(jié)

以上是生活随笔為你收集整理的linux 文件查找命令集:find,locate,wheres,which,type的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。