尋找指令的絕對路徑的方式是使用which指令。 which指令有一個很方便的功能,它可以在環境變數的PATH參數中尋找給定指令的路徑。透過使用which指令,我們可以輕鬆地取得一個指令的完整路徑資訊。這對於需要執行特定命令的腳本和程式來說非常有用。所以,利用which指令,我們可以輕鬆地找到並顯示給定指令的絕對路徑。
#[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 ? y # -ok的使用和-exec是一样的,区别是-ok,执行时会提示你是否进行下一步操作.
以上是Linux 系統下 找檔案 指令總結,這個很哇塞!的詳細內容。更多資訊請關注PHP中文網其他相關文章!