第1节. 文件查找

章节目录

img

grep是过滤文本的行

cut是过滤文本的列

这里是磁盘上搜索文件

locate找文件非常快,依赖于mlocate.db

img

img

用updatedb创建/var/lib/mlocate/mlocate.db文件。如果工作中磁盘文件很多,就会占用磁盘IO,瞬间飙高,导致业务被波及。所以需要操作窗口。

默认模糊搜索

img

img

👇要updatedb(不能随便用,生产小心)更新一下数据库,就能利用locate查找了

img

img

img

locate支持基本正则

img

img

👆基本正则写起来还是比较麻烦,上图。

[15:27:53 root@localhost ~]#find / -name passwd |grep -Ei "^/[a-z]+/passwd$"
/etc/passwd
/Etc/passwd
/a/passwd
/A/passwd
/Z/passwd
/z/passwd
[15:28:17 root@localhost ~]#find / -name passwd |grep -Ei "^/[A-Z]+/passwd$"
/etc/passwd
/Etc/passwd
/a/passwd
/A/passwd
/Z/passwd
/z/passwd
[15:28:51 root@localhost ~]#find / -name passwd |grep -E "^/[A-Z]+/passwd$"
/A/passwd
/Z/passwd
[15:28:57 root@localhost ~]#find / -name passwd |grep -E "^/[a-z]+/passwd$"
/etc/passwd
/a/passwd
/z/passwd
[15:29:03 root@localhost ~]#find / -name passwd |grep -E "^/[a-Z]+/passwd$"
/etc/passwd
/Etc/passwd
/a/passwd
/A/passwd
/Z/passwd
/z/passwd
[15:29:09 root@localhost ~]#find / -name passwd |grep -E "^/[A-z]+/passwd$"
grep: Invalid range end
[15:29:17 root@localhost ~]#find / -name passwd |grep -E "^/[A-z]+/passwd$"
grep: Invalid range end
[15:29:22 root@localhost ~]#
👆通过上面的实验发现find后面的[A-Z][a-z][a-Z]这样写都有其特定的意义,但是没有[A-z]的写法。这点和通配符不同


[15:37:01 root@localhost ~]#locate -r "^/[a-z]+/passwd$"
[15:37:06 root@localhost ~]#locate -r "^/[A-Z]+/passwd$"
[15:37:10 root@localhost ~]#find / -name passwd |grep -E "^/[a-z]+/passwd$"
/etc/passwd
/a/passwd
/z/passwd
👆可见locate -r只支持正则,所以+这种扩展正则表达式 是不支持的。

[15:38:24 root@localhost ~]#locate -r "^/[A-Z]*/passwd$"
/A/passwd
/Z/passwd
[15:39:57 root@localhost ~]#locate -r "^/[a-Z]*/passwd$"
/A/passwd
/Etc/passwd
/Z/passwd
/a/passwd
/etc/passwd
/z/passwd
[15:40:01 root@localhost ~]#locate -r "^/[[:alnum:]]*/passwd$"
/A/passwd
/Etc/passwd
/Z/passwd
/a/passwd
/etc/passwd
/z/passwd
[15:40:45 root@localhost ~]#find / -name passwd |grep -E "^/[[:alnum:]]+/passwd$"
/etc/passwd
/Etc/passwd
/a/passwd
/A/passwd
/Z/passwd
/z/passwd

find 实时查找,其实也可以利用xargs变得快些,同样占CPU,locate就是在机器上APP服务维护阶段执行updatedb会占CPU

[15:36:15 root@pyConsole /]#time `ls --hide=proc | xargs -i -P 0 find /{} -name "*i*"`
-bash: /bin: Is a directory

real    0m1.101s
user    0m1.206s
sys     0m0.336s
[15:36:17 root@pyConsole /]#time `ls --hide=proc | xargs -i -P 0 find /{} -name "*i*"`
-bash: /bin: Is a directory

real    0m1.391s
user    0m1.496s
sys     0m0.356s
[15:36:22 root@pyConsole /]#time `ls --hide=proc | xargs -i -P 0 find /{} -name "*i*"`
-bash: /bin: Is a directory

real    0m1.123s
user    0m1.186s
sys     0m0.363s
[15:36:24 root@pyConsole /]#time `find / -name "*i*"`
find: ‘/proc/4065730’: No such file or directory
find: ‘/proc/4065733’: No such file or directory
-bash: /boot/efi: Is a directory

real    0m1.677s
user    0m1.380s
sys     0m0.396s
[15:36:28 root@pyConsole /]#time `find / -name "*i*"`
-bash: /boot/efi: Is a directory

real    0m1.721s
user    0m1.400s
sys     0m0.399s
[15:36:31 root@pyConsole /]#time `find / -name "*i*"`
-bash: /boot/efi: Is a directory

real    0m1.739s
user    0m1.407s
sys     0m0.404s
[15:36:34 root@pyConsole /]#

locate和find一样存在一些普通用户没有某些文件夹权限,也会搜不到。

img

img

find默认就是递归查找,也就是会进到子目录里继续查找。

[处理动作]比较实用,搜出来删除之类。

img

img

img

find 指定搜索深度

img

img

img

[16:08:08 root@pyConsole /]#find / -name "*i*" -maxdepth 1
find: warning: you have specified the -maxdepth option after a non-option argument -name, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

/bin
/sbin
/lib
/lib64
/media
/.bash_history
/switch
更精准一些的搜索方法
[16:10:06 root@pyConsole /]#find / -name "passwd"
/etc/pam.d/passwd
/etc/passwd
/var/lib/sss/mc/passwd
/usr/bin/passwd
/usr/share/licenses/passwd
/usr/share/doc/passwd
/usr/share/bash-completion/completions/passwd
[16:10:11 root@pyConsole /]#
[16:10:13 root@pyConsole /]#
[16:10:13 root@pyConsole /]#find / -name "passwd" -maxdepth 2
find: warning: you have specified the -maxdepth option after a non-option argument -name, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

/etc/passwd
[16:10:18 root@pyConsole /]#find -maxdepth 2 / -name passwd
find: paths must precede expression: /
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[16:10:59 root@pyConsole /]#find / -maxdepth 2 -name passwd
/etc/passwd
[16:11:11 root@pyConsole /]#find / -maxdepth 2 -mindepth 2 -name passwd
/etc/passwd
[16:11:22 root@pyConsole /]#find /  -name passwd
/etc/pam.d/passwd
/etc/passwd
/var/lib/sss/mc/passwd
/usr/bin/passwd
/usr/share/licenses/passwd
/usr/share/doc/passwd
/usr/share/bash-completion/completions/passwd
[16:11:29 root@pyConsole /]#
[16:11:32 root@pyConsole /]#find / -maxdepth 3 -mindepth 3 -name passwd
/etc/pam.d/passwd
/usr/bin/passwd
[16:11:36 root@pyConsole /]#

find -depth选项,这个有什么应用场景?想不出来

img

img

img

默认是先搜索目录本身,再进到每个目录再去搜索。

img

现在就是先处理文件,再处理文件夹。应用场景呢?

find自带的是通配符不是正则

img

img

find -iname 不分大小写

img

[16:32:18 root@localhost ~]#find / -name etc
/run/initramfs/state/etc
/etc
/usr/share/factory/etc
/usr/local/etc
[16:32:25 root@localhost ~]#find / -iname etc   👈忽略大小写的方法,这也是个总结点,以后用▲来表示总结线索吧,▲忽略大小写2
/run/initramfs/state/etc
/etc
/root/ETc
/usr/share/zoneinfo/Etc
/usr/share/zoneinfo/posix/Etc
/usr/share/zoneinfo/right/Etc
/usr/share/factory/etc
/usr/local/etc
/Etc
[16:32:32 root@localhost ~]#

find -inum 根据inode编号来搜

img

image-20220207165221450

[16:54:36 root@localhost ~]#find / -inum 70
/sys/kernel/tracing/events/raw_syscalls/sys_exit/filter
/sys/kernel/debug/tracing/events/raw_syscalls/sys_exit/filter
/sys/fs/cgroup/devices/system.slice/sys-kernel-tracing.mount/tasks
/sys/fs/cgroup/memory/system.slice/system-systemd\x2dhibernate\x2dresume.slice/tasks
/sys/fs/cgroup/pids/system.slice/systemd-journald-dev-log.socket/pids.current
/sys/bus/memory/drivers_autoprobe
[16:54:39 root@localhost ~]#
[16:54:41 root@localhost ~]#
[16:54:41 root@localhost ~]#find / -inum 70 -exec  ls -il {} +   👈提前用一下exec看下效果呵呵
70 -rw-r--r--. 1 root root 4096 Feb  7 16:54  /sys/bus/memory/drivers_autoprobe
70 -rw-r--r--. 1 root root    0 Feb  7 16:54  /sys/fs/cgroup/devices/system.slice/sys-kernel-tracing.mount/tasks
70 -rw-r--r--. 1 root root    0 Feb  7 16:54 '/sys/fs/cgroup/memory/system.slice/system-systemd\x2dhibernate\x2dresume.slice/tasks'
70 -r--r--r--. 1 root root    0 Feb  7 16:54  /sys/fs/cgroup/pids/system.slice/systemd-journald-dev-log.socket/pids.current
70 -rw-r--r--. 1 root root    0 Jan 29 09:57  /sys/kernel/debug/tracing/events/raw_syscalls/sys_exit/filter
70 -rw-r--r--. 1 root root    0 Jan 29 09:57  /sys/kernel/tracing/events/raw_syscalls/sys_exit/filter
[16:54:43 root@localhost ~]#
👆节点编号相同也不是同一个文件哈哈。

插入一个find -exec的用法细节

image-20220706211408124

搜索inode节点编号,以及搜索inode相同的文件(硬的)

img

find 的regex要匹配的是全路径,locate不需要

img

img

对比实验
17:07:14 root@localhost ~]#ll /usr/share/pixmaps/
total 92
-rw-r--r--. 1 root root  5459 Sep  9 13:25 cockpit.png
-rw-r--r--. 1 root root 13071 Jun 28  2021 fedora-gdm-logo.png
-rw-r--r--. 1 root root 21820 Jun 28  2021 fedora-logo.png
-rw-r--r--. 1 root root 12760 Jun 28  2021 fedora-logo-small.png
-rw-r--r--. 1 root root  6620 Jun 28  2021 fedora-logo-sprite.png
-rw-r--r--. 1 root root  1442 Jun 28  2021 fedora-logo-sprite.svg
-rw-r--r--. 1 root root 14493 Jun 28  2021 system-logo-white.png

👇这是  -name后跟通配符
[17:07:37 root@localhost ~]#find /usr/share/pixmaps -name *png
/usr/share/pixmaps/fedora-gdm-logo.png
/usr/share/pixmaps/fedora-logo-small.png
/usr/share/pixmaps/fedora-logo-sprite.png
/usr/share/pixmaps/fedora-logo.png
/usr/share/pixmaps/system-logo-white.png
/usr/share/pixmaps/cockpit.png


👇这是  -regex后跟正则(扩展正则,因为不用\[xx\]这样写,也支持+),注意这里的正则匹配的是全路径
[17:08:21 root@localhost ~]#find /usr/share/pixmaps -regex ".*\.png$"
/usr/share/pixmaps/fedora-gdm-logo.png
/usr/share/pixmaps/fedora-logo-small.png
/usr/share/pixmaps/fedora-logo-sprite.png
/usr/share/pixmaps/fedora-logo.png
/usr/share/pixmaps/system-logo-white.png
/usr/share/pixmaps/cockpit.png
[17:08:30 root@localhost ~]#find /usr/share/pixmaps -regex "\.png$"
[17:08:33 root@localhost ~]#
[17:08:34 root@localhost ~]#

👇这是locate -r 后跟 正则
[17:09:12 root@localhost ~]#locate -r "/usr/share/pixmaps/.*\.png$"
/usr/share/pixmaps/cockpit.png
/usr/share/pixmaps/fedora-gdm-logo.png
/usr/share/pixmaps/fedora-logo-small.png
/usr/share/pixmaps/fedora-logo-sprite.png
/usr/share/pixmaps/fedora-logo.png
/usr/share/pixmaps/system-logo-white.png
👇当然locate无需全路径

image-20220207171246996

find 选项的PPT总结图

img

还有一个补充,要注意-name 后面要带上双引号的

[18:32:04 root@localhost ~]#find -name "f*"
./f2
./data/f2
./data/f1
./f1~
./fz~
./f3
./f1
./f1.link
[18:32:05 root@localhost ~]#find -name f*
find: paths must precede expression: f1~
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[18:32:11 root@localhost ~]#
[18:32:12 root@localhost ~]#
[18:32:12 root@localhost ~]#

按属主和属组查找

img

img

默认是print,这里换了个动作-ls

所以其实不用上面的-exec "ls" {} + 这么麻烦,简单的ls直接加就行了。

img

img

img

img

这样-nouser就体现出来了👆

根据文件类型查找

img

搜索所有文件夹

img

搜索所有块

img

搜索空文件或空文件夹

img

img

组合条件与或非

img

非空文件和文件夹

img

并且关系

img

img

或者关系

img

img

img

-a与的运算优先级要比-o或运算高,所以-type f -a -ls先进行运算了。

img

img

img

关键点来了,为什么-name "f*" -o -type f -a -ls 后面先算,结果就是t.txt了呢

image-20220208170701914

[17:28:06 root@localhost data]#ll
total 16
-rw-r--r--+ 1 root root 10 Jan 29 17:49 f1
-rw-r--r--+ 2 root root  4 Jan 29 17:49 f2
-rw-r--r--+ 2 root root  4 Jan 29 17:49 f2.link
drwxr-xr-x. 2 root root  6 Feb  8 10:39 fdir
-rw-r--r--. 1 root root 65 Jan 29 10:59 t.txt
[17:28:08 root@localhost data]#
[17:28:10 root@localhost data]#find ./ -name "f*" -o -type f -ls  👈不太好解释为什么变成了1行
 33577450      4 -rw-r--r--   1  root     root           65 Jan 29 10:59 ./t.txt
👆上面的命令等价于下面两个的结果做了-o,但是-o显然不能用man里的用法来解释这个结果。
[17:28:12 root@localhost data]#find ./ -name "f*"
./f1
./f2
./fdir
./f2.link
[17:28:16 root@localhost data]#find ./ -type f -ls
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 33577450      4 -rw-r--r--   1  root     root           65 Jan 29 10:59 ./t.txt
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link
[17:28:21 root@localhost data]#

👇倒是如果大家都是一个格式都是ls -l长格式就可以-o了
[17:32:00 root@localhost data]#find ./ -name "f*" -ls
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 51325760      0 drwxr-xr-x   2  root     root            6 Feb  8 10:39 ./fdir  👈
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link
[17:32:02 root@localhost data]#find ./ -type f -ls
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 33577450      4 -rw-r--r--   1  root     root           65 Jan 29 10:59 ./t.txt 👈
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link
[17:32:08 root@localhost data]#find ./ -name "f*" -ls -o -type f -ls
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 33577450      4 -rw-r--r--   1  root     root           65 Jan 29 10:59 ./t.txt 👈
 51325760      0 drwxr-xr-x   2  root     root            6 Feb  8 10:39 ./fdir     👈
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link


------------👇这段是符合-o的本来逻辑的,就是前面true就不算后面了----------
[17:33:24 root@localhost data]#find ./ -name "f*" -ls -o -type f
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 51325760      0 drwxr-xr-x   2  root     root            6 Feb  8 10:39 ./fdir
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link
[17:33:28 root@localhost data]#
[17:33:44 root@localhost data]#find ./ -name "f*" -ls
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 51325760      0 drwxr-xr-x   2  root     root            6 Feb  8 10:39 ./fdir
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link
[17:33:59 root@localhost data]#
[17:34:01 root@localhost data]#find ./ -type f
./f1
./f2
./t.txt
./f2.link

------------👇这段是不符合-o的本来"表面"逻辑的,看起来像是短格式在前(左),长格式在(右),会变成左边的文件名去掩码右边的文件名,掩出来就剩下一个t.txt在用find里的ls(其实就是ls -dils)显示出来----------可能这里的-o就是异或运算了,相同出0就消掉了,不同也就是t.txt不同就出1也就保留了-----但显然上面的例子是逻辑或--▲linux逻辑混乱案例1--
[17:34:22 root@localhost data]#find ./ -name "f*"
./f1
./f2
./fdir
./f2.link
[17:34:34 root@localhost data]#find ./ -type f -ls
 33577448      4 -rw-r--r--   1  root     root           10 Jan 29 17:49 ./f1
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2
 33577450      4 -rw-r--r--   1  root     root           65 Jan 29 10:59 ./t.txt
 33577447      4 -rw-r--r--   2  root     root            4 Jan 29 17:49 ./f2.link
[17:34:48 root@localhost data]#
[17:34:56 root@localhost data]#find ./ -name "f*" -o -type f -ls
 33577450      4 -rw-r--r--   1  root     root           65 Jan 29 10:59 ./t.txt
[17:35:04 root@localhost data]#

总之,这东西要规范了用就是-a是默认存在的 优于 -o,然后要规范使用小阔话来实现正确的逻辑,否则结果很难解释。

德·摩根定律

image-20220208175140732

img

img

locate -r xx是正则,find -name xx是通配,locate xx是包含就算,find -regex 是扩展正则,本章上文有总结过了。

如果find 后接 regex就需要是全路径匹配。

img

img

img

img

image-20220208181236458

[18:04:14 root@localhost ~]#find /etc -name *.conf | head -10
/etc/dnf/dnf.conf
/etc/dnf/plugins/kpatch.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/protected.d/dnf.conf
/etc/dnf/protected.d/setup.conf
/etc/dnf/protected.d/systemd.conf
/etc/dnf/protected.d/sudo.conf
/etc/dnf/protected.d/yum.conf
/etc/libreport/events.d/collect_dnf.conf
[18:04:18 root@localhost ~]#touch x.conf
[18:04:33 root@localhost ~]#find /etc -name *.conf | head -10
[18:04:36 root@localhost ~]#find /etc -name *.conf
[18:04:39 root@localhost ~]#👇-name后面一定要加上引号,否则你看家目录里的文件竟然会影响/etc/下面的文件匹配,这个似乎很不合理,但是让我联想到了pycharm的init文件也是,你只要跑一个普通的xx.py文件,就会先跑一个init文件,但是也不至于像linux这种奇奇怪怪的问题。
都说linux稳定,今儿给大家看看逻辑不通的两个案例~▲linux逻辑混乱案例2
[18:04:39 root@localhost ~]#find /etc -name "*.conf" | head -10
/etc/dnf/dnf.conf
/etc/dnf/plugins/kpatch.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/protected.d/dnf.conf
/etc/dnf/protected.d/setup.conf
/etc/dnf/protected.d/systemd.conf
/etc/dnf/protected.d/sudo.conf
/etc/dnf/protected.d/yum.conf
/etc/libreport/events.d/collect_dnf.conf

▲linux逻辑混乱案例2

[18:13:15 root@localhost ~]#cd /data/        
---进到/data下find -name 不带*看看,果然是当前目录会干掉实际搜索的目录文件,具体往下看👇---
[18:13:25 root@localhost data]#
[18:13:25 root@localhost data]#
[18:13:25 root@localhost data]#
[18:13:25 root@localhost data]#find /etc -name *.conf | head -10   👈现在不带引号可以搜到
/etc/dnf/dnf.conf
/etc/dnf/plugins/kpatch.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/protected.d/dnf.conf
/etc/dnf/protected.d/setup.conf
/etc/dnf/protected.d/systemd.conf
/etc/dnf/protected.d/sudo.conf
/etc/dnf/protected.d/yum.conf
/etc/libreport/events.d/collect_dnf.conf
[18:13:28 root@localhost data]#ll
total 16
-rw-r--r--+ 1 root root 10 Jan 29 17:49 f1
-rw-r--r--+ 2 root root  4 Jan 29 17:49 f2
-rw-r--r--+ 2 root root  4 Jan 29 17:49 f2.link
drwxr-xr-x. 2 root root  6 Feb  8 10:39 fdir
-rw-r--r--. 1 root root 65 Jan 29 10:59 t.txt
[18:13:31 root@localhost data]#touch a.conf   👈只要在find的命令键入的当前目录下创建a.conf
[18:13:48 root@localhost data]#find /etc -name *.conf | head -10  👈就搜不到了
[18:13:51 root@localhost data]#
[18:13:53 root@localhost data]#touch /etc/b.conf 
[18:14:02 root@localhost data]#touch /etc/a.conf  👈然后在/etc/下面创建a.conf就搜索到了
[18:14:05 root@localhost data]#
[18:14:05 root@localhost data]#find /etc -name *.conf | head -10
/etc/a.conf
[18:14:07 root@localhost data]#
[18:14:07 root@localhost data]#touch b.conf  👈再在/data下创建b.conf,就报错了哈哈。
[18:16:14 root@localhost data]#find /etc -name *.conf | head -10
find: paths must precede expression: b.conf
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[18:16:40 root@localhost data]#rm -rf b.conf
[18:17:32 root@localhost data]#find /etc -name *.conf | head -10
/etc/a.conf
[18:17:34 root@localhost data]#

find的裁剪,让我想到了vtp的裁剪

image-20220208182108339

用裁剪prune,它的裁剪语法是组合逻辑的,不是很简洁

img

img

image-20220208182522036

题外话

搜arp协议文件

img

搜文件大小区间(] -size

img

img

img

img

img

写10K,实际上是(9k-10k]

img

👆既然是(9k-10k]之间,那么8192就不在里面了,自然就搜不到了。

img

img

image-20220209171636948

搜文件时间区间[) -size

img

img

👆这个线索可以拎出来,▲判断某个动作或者事件 带来了哪些影响,①比如yum history是可以回滚yum的动作(包括依赖,这是remove做不到的);②就是这里的时间,我这一分钟内完成了用户的创建,于是我查看1分钟来产生的新文件-mmin -1就这些,所以八九不离十的 就是useradd 产生的。

Image

权限搜索-perm xxx

img

img

img

img

img

  1. -perm /222的意思是三个人(所有者、所属组、other)只要有一个角色有写权限就匹配出来,本质是222 和 / 的组合,010 或 010 或 010 ,0是不关心,1是固定住,/是或的关系。
  2. -perm 222的意思是只找出 权限为222的文件或文件夹
  3. -perm -222的意思是010 且 010 且 010,三者都必须有写权限就行。
  4. 助记: -少就是且 /多就是或 要知道/以前等价于+ ,就是说+222等价于/222,只不过+不推荐了。

下面👇的理解过程是不是有问题,是的~!

image-20220209175259129

image-20220209175347874

总结下

当/XXX都不为0的时候好理解:就是xx or xx or xx或者的关系,比如/222就是只要三者一个有写

当/XXX为101 001 010 反正只要有0出现,就意味着0不看,比如/202就是u和o两个中的有一人有写

注意/333表示u,g,o三者一人有写和执行?请看下例👇 ★是拆成二进制然后bit位之间或的关系

是整体111111111 9个bit位之间是或的关系,而不是u,g,o之间的关系。

[18:06:26 root@pyConsole test]#find -perm /333  👈表示111111111都是或
.
./f1
./f2
./f3
./f4
./f5
[18:06:32 root@pyConsole test]#find -perm /303  👈表示011nulnulnul011都是或,不看g,只看u和o
.
./f1
./f2
./f3
./f5
[18:06:34 root@pyConsole test]#ll
total 0
---x--x-w- 1 root root 0 Feb  9 17:45 f1
-rw-rw--w- 1 root root 0 Feb  9 17:45 f2
-r--r---wx 1 root root 0 Feb  9 17:48 f3
------x--- 1 root root 0 Feb  9 17:56 f4
---x------ 1 root root 0 Feb  9 17:59 f5
[18:06:35 root@pyConsole test]#

image-20220209183000252

image-20220209183257351

----------------------上面这段其实是后写的,下面的是梳理过程中的截图,保留供参考---上面的结论OK的----------

image-20220209180225002

image-20220209180358342

[18:00:21 root@pyConsole test]#ll 
total 0
---x--x-w- 1 root root 0 Feb  9 17:45 f1
-rw-rw--w- 1 root root 0 Feb  9 17:45 f2
-r--r---wx 1 root root 0 Feb  9 17:48 f3
------x--- 1 root root 0 Feb  9 17:56 f4
---x------ 1 root root 0 Feb  9 17:59 f5
[18:00:22 root@pyConsole test]#find -perm /100
.
./f1
./f5
[18:00:25 root@pyConsole test]#find -perm -100
.
./f1
./f5
[18:00:27 root@pyConsole test]#find -perm /101
.
./f1
./f3
./f5
[18:00:29 root@pyConsole test]#find -perm /111
.
./f1
./f3
./f4
./f5
[18:00:31 root@pyConsole test]#

image-20220209181217909

img

分析 find -perm /622 的意思👇

img

上图错了,/622,不是必须6,而是110里面有一个就行了

img

img

哈哈,上图是最最开始的笔记,那会我就发现啦,哈哈,给自己点个赞👍。不过没有这一次梳理的完整。


所以回到一开始的PPT

image-20220209183650178

① xxx就是精确匹配,000就是u,g,r三者权限都是---的文件,精确匹配不存在什么或,不存在0表示不关注的说法;倒是存在bit位的并且哦,哈哈~

② 然后接下来:

2.1 /表示或,人家说了一位就是bit位,看到没,哈哈

2.2 0表示不关注,这个0说的是/303,里的这个0是十位数的0,哈哈(不对,这个0依然是二进制的0),好家伙,PPT果然言简意赅,结果大佬就讲错了。

2.3 同样-xxx 人家也说了0表示不关注,然后是bit位之间的且。

image-20220209185147312

2.5 一句话总结:/ 和 - 都是展开bit二进制后,0不关注,然后/就是或,-就是与。

③ 我牛逼的地方来了哦,以上总结OK了到位了,问题来了,如果我要find 权限是rw?---rw?也就是707,606,607,706的文件捏,哦你要输入 find -perm -606 没办法了吧,哈哈,还不如这样

image-20220209190900482

image-20221212183259833

find 后的处理

img

image-20220209191128981

👆上面的用法很危险。

重定向的>等于-fls

img

-ok 的交互

img

但是是交互式的。

-exec的非交互

img

案例,日志处理

img

找到大于10M的,移动到tmp/下。

img

img

img

image-20220209192131047

还是不行,因为还有子文件夹,//没关系的,不影响效果。

img

image-20220209192416095

👆上图存在同名冲突的问题的。那样怎么做呢?遗留问题用⚪这个吧哈哈。

文章标识有▲、⚪、了★预留。⚪是微软输入法yuan第5个。

img

找到符合文件\文件夹,然后整体(带路径)搬到某个文件里去

image-20230202144646317

将上面查找出来的符合条件:1天内修改过的 并且 名字不是 . 的--这就去除了当前目录。找出来后,带路径复制到目标文件夹处。

image-20230202144732698

但是上图要注意cp -a --path 才行,-a就是保证属性不变。

img

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2024-07-28 14:48:03

results matching ""

    No results matching ""