文件查找,我们在 windows 用的比较多,系统自带的搜索方式、第三方搜索工具 everything 等。 linux 上没有图形化界面,就要借助 find 指令来查了。
语法:
bashfind /etc -maxdepth 1 -type f -name "pa*"
命令 目录... 查找深度 类型 文件名称包含
bash[root@localhost /]# find /etc -maxdepth 1 -type f -name "pa*"
/etc/passwd
/etc/passwd
bashfind / -type f -size +100M
[root@localhost /]# find / -type f -size +100M
/proc/kcore
find: ‘/proc/1945/task/1945/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/1945/fdinfo/5’: 没有那个文件或目录
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/usr/lib/locale/locale-archive
[root@localhost /]# ll -h /usr/lib/locale/locale-archive
-rw-r--r--. 1 root root 102M 3月 15 20:10 /usr/lib/locale/locale-archive
proc
是进程目录,有些进程运行起来之后能看到文件信息,程序运行结束之后,进程文件也消失了,所以看到proc的报错很正常,并且 proc
的权限很高,不是一般人可以访问的,所以也经常会报权限不够等错误信息,所以以后看到 proc
的报错直接忽略即可。
bashfind /root/nginx-1.20.2 -type f -size -2k
bashfind / -type f -size +50M -and -size -100M
i 是 ignore 的简写,忽略的意思
bashfind /etc -maxdepth 1 -iname "pa*"
[root@localhost /]# find /etc -maxdepth 1 -name "pa*"
/etc/passwd
/etc/passwd-
/etc/pam.d
[root@localhost /]# find /etc -maxdepth 1 -iname "pa*"
/etc/passwd
/etc/passwd-
/etc/pam.d
/etc/Passwd
bash[root@localhost rrx]# stat 1.txt
文件:"1.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:801h/2049d Inode:51443079 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-03-21 19:54:59.146373949 +0800
最近更改:2024-03-21 19:54:59.146373949 +0800
最近改动:2024-03-21 19:56:03.543898223 +0800
创建时间:-
时间参数:atime mtime ctime amin mmin cmin
时间单位为天, -1 代表一天以内,+1 一天以前
bashfind /opt -type f -mtime -1
时间单位为分钟
bash[root@localhost ~]# find /root -type f -mmin -20
/root/.bash_history
/root/ReadMe.txt
/root/.lesshst
查找1天之前,10天之内,修改过的文件
bashfind /etc/ -type f -mtime +1 -and -mtime -10
取反: !
找名称以.txt结尾的文件
bash[root@localhost ~]# find /root -type f -name "*.txt" # 找名称以.txt结尾的文件
/root/1.txt
/root/学习前准备.txt
找名称中不是.txt结尾的文件
bash[root@localhost ~]# find /root -type f ! -name "*.txt"
/root/.bash_logout
/root/.bash_profile
...
找文件
bash[root@localhost ~]# find /root -type f
/root/.bash_logout
/root/.bash_profile
...
找文件夹
bash[root@localhost ~]# find /root ! -type f # 找文件夹
/root/jaden
/root/wulaoban
...
查找属于 Rrx 用户的所有目录和文件
bash[root@localhost ~]# useradd Rrx
[root@localhost ~]# find / -user Rrx
...
/var/spool/mail/Rrx
/home/Rrx
/home/Rrx/.bash_logout
/home/Rrx/.bash_profile
/home/Rrx/.bashrc
根据用户组来查
bashfind / -group Rrx
格式:
bash正常的 find 语句 + 操作 exec
比如我们查找到了一些病毒文件,想直接删除
bashfind /tmp -type f -size +10K -exec rm rf {} \;
{}
:表示我们找到的那些文件
\;
:正常 exec
语句最后要分号结尾,但是分号在 linux 中有特殊的意义,比如一次性执行两个指令可以 ls -lh;id
,这样执行,所以要对 ;
进行转义,意思是不要将 ;
作为 shell
指令的分隔符,\
就是转义符号
bash [root@localhost tmp]# find /tmp -name "vm*" -exec rm -rf {} \;
find: ‘/tmp/vmware-root_560-2957190359’: 没有那个文件或目录
find: ‘/tmp/vmware-root_555-4282367637’: 没有那个文件或目录
find: ‘/tmp/vmware-root_631-4021718894’: 没有那个文件或目录
[root@localhost tmp]# ls
ks-script-ed2ODG
nginx_jaden.tar.gz
systemd-private-d38b668730bf4589896221daead5dbea-chronyd.service-be3NkF
yum.log
下面示例就不演示了
bashfind /root -type f -mmin -30 ! -name ".*" -exec rm {} \;
find /root -maxdepth 1 -type d -name "Apa*" -mmin -30 -exec cp -a {} /tmp \;
本文作者:@Rrx
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!