linux 文件查找命令集:find,locate,wheres,which,type
文章目錄
- 前言
- find命令
- 命令格式:
- 常用選項:
- 舉例使用
- locate命令
- 命令格式
- 使用實例
- whereis命令
- 使用過程:
- which命令
- type命令
前言
在linux系統中一切皆文件,此時我們想要從海量的文件中快速定位中我們想要的文件來,需要指定的命令來操作。以下為收集的各個命令,以及其優劣,使用方式。
find命令
centos下:rpm包findutils-4.5.11-3.el7.x86_64
find是最常用也是最強大的查找命令,它可以查找任何類型的文件。
命令格式:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
常用選項:
-name:按文件名來查找文件-user:按照文件的屬主來查找文件-group:按照文件所屬的組來查找文件-perm:按照文件權限來查找文件-prune:不在當前指定目錄中查找
舉例使用
已知文件stdio.h存放在/usr大目錄下的多個子目錄,cd /usr目錄下
find -name "stdio.h" 表示在當前目錄查找文件名稱為stdio.h的文件
find . -path ./include -prune -o -name "stdio.h" 在當前目錄查及其子目錄查找名稱為stdio.h的文件,但是跳過include目錄;
這里的-o參數表示或關系,即兩者中只要有一個表達式滿足true即可輸出;
同-a和-not,-a表示只要有一個表達式不滿足則不輸出,-not表示對查找的結果進行取反
find . -path ./include -o -name "stdio.h" -print 將匹配到的內容文件輸出到標準輸出中
find / -user ceph 查找文件所有者為ceph的文件
find / -nouser -a -nogroup 查找系統中不屬于任何人,任何用戶組的文件(對于該部分文件需要保持警惕)
find /usr -mtime -4查找文件更新日時在距現在時刻4天以內的文件
find /usr -mtime +4 查找文件更新日時在距現在時刻5天以上的文件
find /usr -mtime 4查找文件更新日時在距現在時刻4天以上5天以內的文件
find / -type [c] 根據文件屬性進行查找
其中[c]包括如下屬性:
p管道文件/run/systemd/initctl/fifobblock塊設備文件,類似與/dev/sdb磁盤盤符這種c字符設備,類似于/dev/tty63ddirectory 目錄文件fregular file 普通文件lsymbolic link 鏈接文件ssocket 套接字文件
find / -size +10M 按照文件大小進行查找,+表示大于10M的文件,-表示小于10M的文件,同時還支持K,G,b(512B的塊大小)的單位查找
locate命令
centos下:rpm包為mlocate-0.26-5.el7.x86_64
locate命令實際是"find -name"的另一種寫法,但是查找方式跟find不同,它比find快得多。
因為它不搜索具體目錄,而是在一個數據庫(/var/lib/mlocate/mlocate.db)中搜索指定的文件。次數據庫含有本地文件的所有信息,此數據庫是linux系統自動創建的,數據庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,默認情況下為每天更新一次,所以用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件之前手動的用updatedb命令更新數據庫。
命令格式
locate [OPTION]... [PATTERN]...
主要使用的參數含義如下:
-A打印所有匹配到的文件-b精確匹配需要查找的文件,即如果文件命中包含我們要查找的則不打印-c僅打印匹配到文件個數-d --database DBPATH指定自己的文件數據庫-e打印當前系統存在的想要查找的文件-i忽略匹配出來的文件的差異-m已經被忽略了,為了向后兼容-l count 或者 -n count限制輸出的條數-r支持普通的正則匹配,類似locate -r ceph-osd.[0-9]查找ceph-osd.后面有一個數字的文件-w精確匹配,默認不加也是精確匹配
使用實例
這里關于參數詳細的使用就不多說,以上都已經提到
這里簡單說一下locate的正則匹配,基本的正則符號參考正則符號
舉例:
locate -r ceph-osd.[0-9].log$ 查找以包含ceph-osd的字符串,且在ceph-osd.和.log之間有一個數字,且以log字符串結尾的文件
我們在使用locate的很多時候發現一個新的文件locate不到,關于locate命令的基本查找過程上面也已經提到,因為locate的文件獲取是從操作系統定時更新的數據庫中獲取,但是新的文件可能還沒有更新到數據庫(還沒有被系統設置的定時任務去更新數據庫),此時我們需要手動更新以下該數據庫。
關于mlocate.db數據庫的更新任務在路徑為/etc/cron.daily/mlocate中,內容如下
#!/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"
我們做出如下測試
[root@node2 ~]# echo "i am a man" >test.cron
[root@node2 ~]# locate test.cro
[root@node2 ~]# updatedb 手動跟新數據庫
[root@node2 ~]# locate test.cron 手動更新即可發現我們創建的文件已經存在
/root/test.cron
whereis命令
centos下的rpm包util-linux-2.23.2-26.el7.x86_64
whereis命令只能用于搜索二進制文件(-b)、源代碼文件(-s)、說明文件(-m)。如果省略參數則返回所有的信息
使用起來也是非常簡單
使用過程:
[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 ~]#
該命令能夠方便編譯機上的組件以及對應源碼的查找
which命令
which命令是在PATH變量指定的路徑中搜索指定的系統命令的位置。用echo $PATH可顯示當前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命令主要用于區分一個命令到底是shell自帶的還是外部獨立的二進制文件提供的。如果是shell自帶的則會提示此命令為shell buildin,否則會列出命令的位置。例如:cd為shell自帶的命令,當用which查找時,which會按照PATH變量設置的路徑進行搜索,如果不是shell自帶命令,則結果會顯示no cd in...;用type cd則顯示cd為shell buildin命令。ssh不是shell自帶命令,用type時會顯示ssh的路徑。
[root@node2 ~]# type cd
cd is a shell builtin
[root@node2 ~]# type find
find is hashed (/bin/find)
總結
以上是生活随笔為你收集整理的linux 文件查找命令集:find,locate,wheres,which,type的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个情侣的个性签名!
- 下一篇: 贪心:Burst Balloons 最少