Linux 系統下查找文件命令總結

文章出處:http://u6.gg/kq67b、樣式編輯:網絡工程師阿龍

查命令絕對路徑: 

which 用於查找並顯示給定命令的絕對路徑, 環境變量中 PATH 參數也可以被查出來。

[root@localhost ~]# which bash
/usr/bin/bash

[root@localhost ~]# which ls
alias ls='ls --color=auto'
    /usr/bin/ls

尋找特定文件: 

whereis 命令用來定位指令的二進制程序、源代碼文件和 man 手冊頁等相關文件的路徑, 該命令只能用於程序名的搜索

[root@localhost ~]# whereis --help

語法格式:[ whereis [選項] 文件名 ]

        -b              #只找二進制文件
        -m              #只找man文檔
        -s              #只找源代碼

使用 whereis -b 命令找二進制文件,與幫助手冊。

[root@localhost ~]# whereis -b ifconfig
ifconfig: /usr/sbin/ifconfig

[root@localhost ~]# whereis -m ifconfig
ifconfig: /usr/share/man/man8/ifconfig.8.gz

緩存查找文件: 

locate 搜索一個數據庫 / var/lib/mlocatedb, 這個數據庫中含有本地所有文件信息, Linux 系統自動創建這個數據庫, 並且每天自動更新一次, 所以使用 locate 命令查不到最新變動過的文件, 爲了避免這種情況, 可以在使用 locate 之前, 先使用 updatedb 命令, 手動更新數據庫, updatedb 命令會根據 / etc/updatedb.conf 來更新文件.

[root@localhost ~]# yum install -y mlocate
[root@localhost ~]# locate --help

語法格式:[ locate [選項] 文件名 ]

        -d 目錄        #指定數據庫所在的目錄
        -i             #忽略大小寫差異
        -r             #後面接正則表達式

使用 locate 命令查詢一個文件.

[root@localhost ~]# updatedb 
[root@localhost ~]# locate /etc/passwd
/etc/passwd
/etc/passwd-

遍歷文件查找:

 find 命令可以說是最重要的查找命令了,該命令參數較多。

[root@localhost ~]# find --help

語法格式:[ find [目錄] [屬性] 文件名 ]

        -name         #按文件名查找
        -size         #根據大小查找
        -user         #根據屬主查找
        -perm         #根據權限查找
        -type         #根據類型查找
        -time         #按時間查找
        -inum         #根據i節點查詢
        -exec         #查找後執行命令

-name 按文件名查找:

常用查詢通配符

\*     #匹配任意一個或多個字符
?     #匹配任意一個字符
[]     #指定範圍,外側加引號

查找 / var / 目錄下, 以. log 結尾的文件.

[root@localhost ~]# find /var/ -name "*.log"
/var/log/tuned/tuned.log
/var/log/audit/audit.log
/var/log/anaconda/X.log
/var/log/anaconda/program.log
....省略....

查找 / root / 目錄下, 以 [1-3 之間], 結尾是. txt 的文件

[root@localhost ~]# ls
1.txt  2.txt  3.txt  Catalog  File

[root@localhost ~]# find /root/ -name "[1-3].txt"
/root/1.txt
/root/2.txt
/root/3.txt

查找 / etc / 目錄下, 開頭是 6 個任意字符的文件

[root@localhost ~]# find /etc/ -name "??????"
/etc/grub.d
/etc/grub.d/README
/etc/shells
/etc/init.d
....省略....

-size 根據大小查找

單位是 block 數據塊  一塊是512字節
1M -> 1024k -> 2048 塊  (1塊是0.5k 也就是512字節)
100M -> 102400k -> 204800塊

查找 / etc / 目錄下, 小於 10k 的文件

root@localhost ~]# find /etc/ -size -10k
/etc/crypttab
/etc/.pwd.lock
/etc/environment
....省略....

查找 / etc / 目錄下, 大於 1M 的文件

[root@localhost ~]# find /etc/ -size +1M   #查詢大於1M的文件
/etc/udev/hwdb.bin
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.31
....省略....

#注意:+-號如果沒有,是精確到這麼大,通常都會帶上+或-號表示一個範圍.

-user 根據屬主與權限查找

在 / root 目錄中查找屬於 wang 用戶的文件

[root@localhost ~]# find /root/ -user wang
/root/1.txt
/root/2.txt
/root/3.txt
#注意:系統中要存在該用戶,否則會報錯誤.

查找 / boot / 目錄中權限是 644 的文件

[root@localhost ~]# find /boot/ -perm 0644
/boot/grub2/device.map
/boot/grub2/i386-pc/gcry_rmd160.mod
/boot/grub2/i386-pc/acpi.mod
/boot/grub2/i386-pc/gcry_rsa.mod
....省略....

-type 根據類型查找

-type f 二進制文件(普通文件)
-type l 軟鏈接文件
-type d 目錄

查找 / usr/bin / 目錄下, 類型是二進制文件.

[root@localhost ~]# find /usr/bin/ -type f
/usr/bin/cp
/usr/bin/gzip
/usr/bin/alias
/usr/bin/csplit
/usr/bin/bash
....省略....

-time 按時間查找

按天數   ctime  atime  mtime
按分鐘   cmin   amin     mmin

  c  change   #表示屬性被修改過:所有者、所屬組、權限
  a  access   #被訪問過(被查看過)
  m  modify   #表示內容被修改過

查找 / etc / 目錄下, 在 120 分鐘以內, 內容被修改過的文件

[root@localhost ~]# find /etc/ -mmin -120
/etc/
/etc/resolv.conf
/etc/group-
/etc/gshadow-
/etc/group
/etc/gshadow
....省略....

查找 / etc / 目錄下, 在 7 天之前, 屬性被修改過的文件

[root@localhost ~]# find /etc/ -ctime +7
/etc/resolv.conf
/etc/group-
/etc/gshadow-
....省略....

-inum 根據 i 節點查詢

有一些文件的硬鏈接數量很多,有相同的 i 節點,查找其中一個文件的 i 節點號,一次性刪除。

[root@localhost ~]# find ./ -inum 1024 -exec rm{} \;   #刪除相同I節點的數據

-and or 邏輯連接符

-a    (and 邏輯與)     
-o    (or  邏輯或)

在 / etc / 目錄下, 查找大於 1k, 並且小於 10k 的文件

[root@localhost ~]# find /etc/ -size +1k -a -size -10k
/etc/
/etc/grub.d/00_header
/etc/grub.d/20_ppc_terminfo
/etc/grub.d/00_tuned
/etc/rc.d/init.d/README
/etc/rc.d/init.d/netconsole
/etc/rc.d/init.d/network
/etc/pam.d
....省略....

-exec 命令執行連接符

[查詢格式] find  ...  -exec 命令 {}  \;

{}        #表示find查詢的結果集
        #是轉義符,不使用命令別名,直接使用命令本身
;         #分號是表示語句的結束.

#注意:固定格式,只能這樣寫.注意中間的空格.
(公衆號:網絡工程師阿龍)-----------------------------------------------------------------
說明: 轉義符的作用是什麼?

在linux中有一個別名機制,如rm刪除文件,執行的卻是rm -i(用which rm 可以查看命令別名),
使用rm刪除文件前會提示,就是因爲rm -i這個參數。如果想使用命令原意,可以在加\轉義,
如:\rm test.txt   則不會提示,直接刪除

查找 / var/log / 目錄下名字以. log 結尾的文件, 找到後執行 ls -l 顯示詳細信息.

[root@localhost ~]# find /var/log/ *.log -exec ls -l {} \;
total 1176
drwxr-xr-x. 2 root   root      204 Sep 18 09:12 anaconda
drwx------. 2 root   root       23 Sep 18 09:12 audit
-rw-------. 1 root   root    53001 Sep 19 00:57 boot.log
-rw-------. 1 root   utmp      384 Sep 18 09:22 btmp
drwxr-xr-x. 2 chrony chrony      6 Apr 12 13:37 chrony
-rw-------. 1 root   root     3523 Sep 19 01:01 cron
-rw-r--r--  1 root   root   119414 Sep 19 00:57 dmesg
-rw-r--r--  1 root   root   119599 Sep 18 23:35 dmesg.old
-rw-r--r--. 1 root   root     1320 Sep 19 00:23 firewalld
-rw-r--r--. 1 root   root      193 Sep 18 09:05 grubby_prune_debug
....

查找 / etc / 目錄下名字以 "init*" 開頭的文件, 找到後, 只列出文件, 過濾掉目錄, 並執行 ls -l 顯示詳細信息.

[root@localhost ~]# find /etc/ -name "init*" -a -type f -exec ls -l {} \;

-rw-r--r--. 1 root root 511 Apr 11 01:09 /etc/inittab
-rw-r--r--. 1 root root 798 Apr 11 01:09 /etc/sysconfig/init
-rwxr-xr-x. 1 root root 5419 Jan  2  2018 /etc/sysconfig/network-scripts/init.ipv6-global
-rw-r--r--. 1 root root 30 Apr 11 14:12 /etc/selinux/targeted/contexts/initrc_context

查找 / tmp / 下, 的 yum.log 文件, 找到後直接刪除.

[root@localhost tmp]# find /tmp/ -name yum.log -exec rm {} \;
[root@localhost tmp]#

查找根下, 找關於 lyshark 用戶的所有文件, 找到後直接刪除.

[root@localhost ~]# find / -user lyshark -exec rm -r {} \;

find: ‘/proc/1465/task/1465/fd/6’: No such file or directory
find: ‘/proc/1465/task/1465/fdinfo/6’: No such file or directory
find: ‘/proc/1465/fd/5’: No such file or directory
find: ‘/proc/1465/fdinfo/5’: No such file or directory
find: ‘/root/Catalog’: No such file or directory
find: ‘/home/lyshark’: No such file or directory
#rm -r 連帶目錄一起刪除.報錯原因:-exec 不適合大量傳輸,速率慢導致.

在根下, 查找 lyshark 用戶的文件, 找到後刪除, 刪除前會提示是否刪除.

[root@localhost ~]# find / -user lyshark -ok rm -r {} \;
find: ‘/proc/1777/task/1777/fd/6’: No such file or directory
find: ‘/proc/1777/task/1777/fdinfo/6’: No such file or directory

< rm ... /root/LyShark > ? y
# -ok的使用和-exec是一樣的,區別是-ok,執行時會提示你是否進行下一步操作.
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RYFNj8IsERWYASX0KOr-Qg