简明Linux命令行笔记:find
根据条件查找文件
find [directory-list] [expression]
参数
directory-list用来指定find要搜索的目录层次结构或范围
当没有指定directory-list时,find将搜索当前工作目录的层次结构
条件
在expression中可以使用的条件很多,我把它们分类写出来了
其中部分条件包含+-n,意思是:
+n 比n大
-n 比n小
n 正好是n
以文件属性查找
-user name 查找所有者为name的文件
-group name 查找文件所在组为name的文件
-name filename 查找文件名为filename的文件
-nogroup 查找不属于任意群组的文件
-nouser 查找不属于任意用户的文件
-perm mode 依据文件权限查找文件
-inum n 查找节点为n的文件
-links +-n 查找文件链接数+-n的文件
-size +-n[c|k|M|G] 依据文件大小来查找文件,默认大小是+-n倍512字节的块,或使用Kb、Mb、Gb为单位
以时间单位查找
时间单位后面接+-n,表示多少(天,分钟)之内/外,下面是6种时间单位
天:ctime atime mtime
分钟:cmin amin mmin
那,上面的c a m代表什么意思呢
c change改变 ,表示文件属性被修改过,包括所有者、群组、权限等(也就是ls -l能看到的内容)
a access访问
m modify修改,表示文件内容被修改
以文件类型查找
-type filetype 如果文件类型为filetype,则文件满足查找条件,文件类型包括:
b 特殊的块文件
c 特殊的字符文件
d 目录文件
f 普通文件
l 符号链接
连接符
-a and逻辑与
-o or逻辑或
-exec command { } \; 此处是固定格式,表明查找到文件后执行某些操作
{ } 代表find中查找的结果
\ 代表转义符,使用命令本身的命令(忽略别名)
; 代表整条语句结束
-ok 询问是否执行操作,用法同exec
示例1 (以属性查找)
find -user
$ find /etc -user siu /etc/firefox-3.0 /etc/firefox-3.0/pref /etc/firefox-3.0/pref/apturl.js
根据所有者来查找文件
find -perm
$ find /etc -perm 600 /etc/ppp/chap-secrets /etc/ppp/pap-secrets /etc/passwd- /etc/group- /etc/gshadow- /etc/.pwd.lock /etc/shadow- /etc/apt/trustdb.gpg /etc/default/cacerts /etc/security/opasswd /etc/mysql/debian.cnf /etc/mtab.fuselock
根据文件权限来查找文件
find -name
$ find /etc -name init /etc/init /etc/apparmor/init $ find /etc -name init* /etc/init /etc/apparmor/init /etc/initramfs-tools /etc/initramfs-tools/scripts/init-premount /etc/initramfs-tools/scripts/init-bottom /etc/initramfs-tools/scripts/init-top /etc/initramfs-tools/initramfs.conf /etc/bash_completion.d/initramfs-tools /etc/init.d /etc/kernel/postinst.d/initramfs-tools /etc/kernel/postrm.d/initramfs-tools /etc/wireshark/init.lua
根据文件名全名查找,如果不是全名可以使用通配符*或?
find -nogroup -nouser
$ find /etc -nogroup -nouser $
查找没群组没用户的文件,此处木有
find -size
$ find /etc/ -size +1M /etc/brltty/zh-tw.ctb /etc/skel/.mozilla/firefox/mwad0hks.default/places.sqlite /etc/skel/.config/chromium/Safe Browsing Bloom
查找指定单位大小的文件,默认的单位是512字节的数据块block,很不方便
此处以M为单位,查找大于1M的文件
示例2 (以时间查找)
find -mmin
$ find /etc -mmin -120 /etc/cups /etc/cups/subscriptions.conf.O /etc/cups/subscriptions.conf
查找两个小时内被修改过内容的文件
find -mtime
$ find /etc -mtime -2 /etc /etc/mtab /etc/update-motd.d/10-help-text /etc/gnome/defaults.list /etc/cups
查找两天内被修改过内容的文件
示例3 (以文件类型查找)
find -type
$ find /etc -type d /etc /etc/at-spi2 /etc/purple /etc/ndiswrapper /etc/init /etc/ImageMagick /etc/gnome-app-install
查找/etc目录下文件类型是目录的文件
Tips:Linux中的一切都是文件,包括目录
示例4 (连接符)
-a 逻辑与
$ find /etc -name init* -a -type f /etc/initramfs-tools/initramfs.conf /etc/bash_completion.d/initramfs-tools /etc/kernel/postinst.d/initramfs-tools /etc/kernel/postrm.d/initramfs-tools /etc/wireshark/init.lua
查找/etc目录下名为init开头并且文件类型是普通的文件
-p 逻辑或
$ find /etc -name system -o -name init /etc/init /etc/apparmor/init /etc/systemd/system
查看/etc目录下名为system或init的文件
find -exec
$ find /etc -name system -exec ls -l {} \; 总用量 4 drwxr-xr-x 2 root root 4096 12月 9 21:49 multi-user.target.wants
查找名为system的文件并使用ls -l显示其详细信息
find -ok
$ ls -i 672684 aa $ find ./ -inum 672684 -ok rm {} \; < rm ... ./aa > ? y $ ls -i $
在本目录下查找指定节点的文件,并询问是否删除
Tips:-ok和-exec不一样的地方就是,一个询问后执行,另一个直接执行
假如部分Linux发行版设置了别名rm=‘rm -i’,那么此处 \ 转义符可还原rm本身的命令,此处是固定用法,潜规则
Tips
1.find命令异常强大,可以设置很多限制条件进行搜索,具体查看man页
2.使用find命令最好先指定查找范围,范围越小越好。同时,条件越精确效率越高