目录
一.查找命令
1.locate
-
locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
-
索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库
-
索引构建过程需要遍历整个根文件系统,很消耗资源
-
locate和updatedb命令来自于mlocate包
选项 | 效果 |
-i | 不区分大小写的搜索 |
-n | 只列举前#个匹配项目 |
[root@localhost ~]#touch aaa
#数据库跟新
[root@localhost ~]#updatedb
#全数据库查找,不分大小写
[root@localhost ~]#locate -i aaa
/root/aaa
/usr/lib/python2.7/site-packages/dns/rdtypes/IN/AAAA.py
/usr/lib/python2.7/site-packages/dns/rdtypes/IN/AAAA.pyc
/usr/lib/python2.7/site-packages/dns/rdtypes/IN/AAAA.pyo
/usr/share/doc/postfix-2.10.1/README_FILES/AAAREADME
/var/cache/fontconfig/614d1caaa4d7914789410f6367de37ca-le64.cache-4
/var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le64.cache-4
#只显示三行
[root@localhost ~]#locate -n 3 aaa
/root/aaa
/var/cache/fontconfig/614d1caaa4d7914789410f6367de37ca-le64.cache-4
/var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le64.cache-4
[root@localhost ~]#locate -n 1 aaa
/root/aaa
[root@localhost ~]#
2.find
特点:
-
精确查找
-
实时查找
-
支持查找条件多
格式:
find [查找路径] [OPTION]... [查找条件] [处理动作]
查找路径:指定具体目标路径;不指定为默认为当前目录
查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕(print)
2.1.可选项
选项 | 类型 | 说明 |
-name | 名称 | 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 -iname "文件名称" 不区分大小写 |
-size | 文件大小 | 根据目标文件的大小进行查找一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件常用的容量单位包括 kB(注意 k 是小写)、MB、GB |
-user | 文件属主 | 根据文件是否属于目标用户进行查找 |
-type | 文件类型 | 根据文件的类型进行查找文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等 |
-inum | inode号 | 根据文件inode号查找 |
-perm | 权限 | 按文件权限查找 |
-maxdepth level | 最大搜索目录深度 | 将你的文件已分级的形式查找 |
-mindepth level | 最小搜索目录深度 | 将你的文件已分级的形式查找 |
2.2.根据文件名查找
-name "文件名称" #支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
-iname "文件名称" #不区分字母大小写
[root@localhost ~]#touch aa bb cc.txt
[root@localhost ~]#ls
aa bb initial-setup-ks.cfg 模板 图片 下载 桌面
anaconda-ks.cfg cc.txt 公共 视频 文档 音乐
#按照文件名字查找
[root@localhost ~]#find -name aa
./aa
#查找所有以.txt结尾的文件
[root@localhost ~]#find -name "*.txt"
./.cache/tracker/db-version.txt
./.cache/tracker/db-locale.txt
./.cache/tracker/parser-sha1.txt
./.cache/tracker/locale-for-miner-user-guides.txt
./.cache/tracker/locale-for-miner-apps.txt
./.cache/tracker/last-crawl.txt
./.cache/tracker/first-index.txt
./cc.txt
2.3.根据inode号查找
-inum n #按inode号查找
-samefile name #相同inode号的文件
-links n #链接数为n的文件
[root@localhost ~]#ls -i
67160135 aa 67171295 initial-setup-ks.cfg 67160161 图片 35874 桌面
67160130 anaconda-ks.cfg 102011458 公共 35875 文档
67160139 bb 67160160 模板 33568646 下载
67160140 cc.txt 102011459 视频 33568647 音乐
[root@localhost ~]#find -inum 67160135
./aa
[root@localhost ~]#ln aa dd
[root@localhost ~]#ll
总用量 8
-rw-r--r--. 2 root root 0 10月 26 16:36 aa
-rw-------. 1 root root 2050 10月 24 18:16 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 10月 26 16:36 bb
-rw-r--r--. 1 root root 0 10月 26 16:36 cc.txt
-rw-r--r--. 2 root root 0 10月 26 16:36 dd
-rw-r--r--. 1 root root 2098 10月 24 18:17 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 10月 24 18:17 下载
drwxr-xr-x. 2 root root 6 10月 24 18:17 音乐
drwxr-xr-x. 2 root root 6 10月 24 18:17 桌面
[root@localhost ~]#find -samefile aa
./aa
./dd
2.4.根据属主查找
-user USERNAME #查找属主为指定用户(UID)的文件
-group GRPNAME #查找属组为指定组(GID)的文件
-uid UserID #查找属主为指定的UID号的文件
-gid GroupID #查找属组为指定的GID号的文件
-nouser #查找没有属主的文件 无主
-nogroup #查找没有属组的文件
2.5.根据文件类型查找
类型 | 说明 |
f | 普通文件 |
d | 目录文件 |
l | 符号链接文件 |
s | 套接字文件 |
b | 块设备文件 |
c | 字符设备文件 |
p | 管道文件 |
2.6.根据文件大小查找
-size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感
#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]
-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]
+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)
2.7.根据时间戳查找
find . -type f 时间戳
#UNIX/Linux文件系统每个文件都有三种时间戳:
#访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
#修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
#变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
#搜索最近七天内被访问过的所有文件
find . -type f -atime -7
#搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7
#搜索超过七天内被访问过的所有文件
find . -type f -atime +7
#搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
#找出比file.log修改时间更长的所有文件
find . -type f -newer file.log
2.8.根据文件权限查找
##查找文件权限为404的文件
[root@localhost mnt]# find /mnt -perm 404
/mnt/file2
##查看文件权限中u位有r权限,并且o位有r权限的文件
[root@localhost mnt]# find /mnt -perm -404
/mnt
/mnt/file1
/mnt/file2
##查看文件权限中u位有r权限,或者o位有r权限的文件
[root@localhost mnt]# find /mnt -perm /404
/mnt
/mnt/file1
/mnt/file2
/mnt/file3
[root@localhost mnt]# ll -d /mnt/
drwxr-xr-x. 2 root root 42 Nov 14 09:41 /mnt/
2.9.组合条件
与:-a ,默认多个条件是与关系 -a 可以省略
或:-o
非:-not !-empty 空
[root@localhost 111]#ls
888 999 aaa bbb
#查找非目录文件
[root@localhost 111]#find ! -type d
./aaa
./bbb
#查找非目录文件或非空文件
[root@localhost 111]#find ! -type d -o ! -empty
.
./aaa
./bbb
2.10.排除目录
#-path<范本样式>:指定字符串作为寻找目录的范本样式.
#-prune:不寻找字符串作为寻找文件或目录的范本样式.
#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
find /etc -path '/etc/security' -a -prune -o -name "*.conf"
#查找/etc/下,除/etc/security和/etc/systemd,/etc/dbus-1三个目录的所有.conf后缀的文件
find /etc \( -path "/etc/security" -o -path "/etc/systemd" -o -path "/etc/dbus-1" \) -a -prune -o -name "*.conf"
#排除/proc和/sys目录
find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -type f -a -mmin -1
find /etc \( -path "/etc/sane.d" -o -path "/etc/speech-dispatcher" \) -prune -o -name "*.conf"
2.11.处理动作
#备份配置文件,添加.orig这个扩展名
find -name ".conf" -exec cp {} {}.orig \;
#提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} \;
#在主目录中寻找可被其它用户写入的文件
find ~ -perm -002 -exec chmod o-w {} \;
#查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data –type f -perm 644 -name "*.sh" –exec chmod 755 {} \;
#fls
find /mnt/ -name "*.bak" -fls abc
#将mnt 下 已bak结尾的文件 保存成abc
2.12.完整选项
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-type<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
2.13.举例说明
[root@test1 opt]# find /etc/ -name passwd
#查找名字叫 passwd的文件
/etc/pam.d/passwd
/etc/passwd
[root@test1 opt]# find /etc/ -name *.conf
#查找所有.conf 结尾的 ,不要在当前路径下找自己路径下的文件
/etc/resolv.conf
/etc/fonts/conf.d/57-dejavu-serif.conf
/etc/fonts/conf.d/65-1-vlgothic-gothic.conf
/etc/fonts/conf.d/31-cantarell.conf
/etc/fonts/conf.d/65-0-lohit-nepali.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/65-0-lohit-bengali.conf
[root@test1 opt]# find /mnt -user root
#查找 用户为root的用户
/mnt
/mnt/abc
/mnt/ad
/mnt/ad/ad2
/mnt/ad/ad2/bbbbb.txt
/mnt/zhangsanlianjie
[root@test1 opt]# find -size 1k
# 0.1字节 到 1k
./rh
./rh/aaa
[root@localhost boot]# find ./ -name "vm*"
#查找vm开头的
[root@localhost boot]# find /boot/ -size -10M -a -name "*img"
#小于10M 的img文件
[root@localhost etc]# find /etc/ -maxdepth 2 -mindepth 2
#只看第二级目录
[root@localhost opt]# find /boot -d
#先显示 文件在显示目录
#找/home 下属于zhangsan的文件并列出属性
[root@localhost opt]# find /home -user zhangsan -ls
#找/home 下属于zhangsan的文件并列出属性
[root@localhost opt]# useradd hehe
[root@localhost opt]# userdel hehe
[root@localhost opt]# ls /home/
hehe mysql zhangsan
[root@localhost opt]# ll /home/
总用量 0
drwx------. 3 1002 1002 78 8月 26 09:27 hehe
drwx------. 3 mysql mysql 78 8月 25 11:45 mysql
drwx------. 3 zhangsan zhangsan 78 8月 6 20:57 zhangsan
[root@localhost opt]# find /home/ -nouser
#找home下的无主文件夹
/home/hehe
/home/hehe/.mozilla
/home/hehe/.mozilla/extensions
/home/hehe/.mozilla/plugins
/home/hehe/.bash_logout
/home/hehe/.bash_profile
/home/hehe/.bashrc
#或与且的优先级
[root@localhost opt]# find /etc/ -type d -o -type l |wc -l
1008
[root@localhost opt]# find /etc/ -type d -o -type l -ls |wc -l
1008
[root@localhost opt]# find /etc/ -type d -o -type l -a -ls |wc -l
274
[root@localhost opt]# find /etc/ \( -type d -o -type l \) -a -ls |wc -l
1008
[root@localhost opt]# find -size 1G
#查找1G的文件会把所有都显示出来
.
./100.img
./99.img
#按大小查找新建两个文件
[root@localhost opt]# dd if=/dev/zero of=99.img bs=99M count=1
[root@localhost opt]# dd if=/dev/zero of=100.img bs=100M count=1
[root@localhost opt]# ls
100.img 99.img
[root@localhost opt]# find -size 100M
./100.img
[root@localhost opt]# find /opt/ -size 100M
/opt/100.img
[root@localhost opt]# ll 99.img
-rw-r--r--. 1 root root 103809024 8月 26 10:02 99.img
[root@localhost opt]# echo >>99.img
[root@localhost opt]# ll 99.img
-rw-r--r--. 1 root root 103809025 8月 26 10:03 99.img
[root@localhost opt]# find /opt/ -size 100M
/opt/100.img
/opt/99.img
#这是因为linux中的100M不是正好100M 是99开始不包括99到100(99-100]
#1024M和1G的区别
1024M 代表 1023M - 1024M 不包括1023
1G 表示 0G -1G 不包括0G
-size 10k 表示9k 到10k 且不包括9k
-size -10k 表示9k 以内 包括9k
-size +10k 表示10k 以上 不包括 10k
#权限查找 -perm
[root@localhost opt]# find -perm 644
./100.img
./99.img
./a.txt
[root@localhost opt]# find -name "*.img" -delete
#找到并删除要加引号
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令{}: 用于引用查找到的文件名称自身
[root@localhost opt]# find -name "*.txt" -ok mv {} /mnt \;
[root@localhost opt]# find -name "*.txt" -exec mv {} /mnt \;
二.删除命令
1.rm
rm [选项] 要删除的文件或目录
-
-f、强制
-
-i、交互
-
-r 递归(删除目录需要)
#如何删除特殊的文件
[root@localhost ~]# touch ./-f
# -开头的文件
[root@localhost ~]# ls
[root@localhost ~]# rm -f -f
#删除不掉
[root@localhost ~]# rm -f ./-f
#需要加路径
[root@localhost ~]# touch ./-f
[root@localhost ~]# rm -- -f
rm:是否删除普通空文件 "-f"?y
删除文件后空间不释放: 有别人在使用这个大文件,造成空间不释放。
实验:
2.shred
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用
shred安 全删除文件
格式:
shred [OPTION]... FILE...
选项 | 说明 |
-z | 最后一次覆盖添加0,以隐藏覆盖操作 |
-v | 能够显示操作进度 |
-u | 覆盖后截断并删除文件 |
-n # | 指定覆盖文件内容的次数(默认值是3次) |
[root@centos8 ~]#shred -zvun 5 passwords.txt
shred: passwords.txt: pass 1/6 (random)...
shred: passwords.txt: pass 2/6 (000000)...
shred: passwords.txt: pass 3/6 (random)...
shred: passwords.txt: pass 4/6 (ffffff)...
shred: passwords.txt: pass 5/6 (random)...
shred: passwords.txt: pass 6/6 (000000)...
shred: passwords.txt: removing
shred: passwords.txt: renamed to 0000000000000
shred: 0000000000000: renamed to 000000000000
shred: 000000000000: renamed to 00000000000
shred: 00000000000: renamed to 0000000000
shred: 0000000000: renamed to 000000000