locate查找: ?基于数据库的模糊查找,查询的是完整的路径,有计划任务每天进行自动更新数据库,第一次查找的时候需要updatedb(更新数据库)
基于数据的查询优缺点:?
1、速度快,效率高。
2、没更新数据库就查找不出来新创建的文件或目录。
locate -n(表示匹配到的前n条数据) 10 -i(不区分大小写) ?passwd ?: ?不区分passwd的大小写,查找所有目录下的passwd文件,并且显示查找到的前10行
locate -i ?passwd ?| grep root ? : 查询以root开头的包含passwd关键字的目录
*find查找文件 : 实时查找文件
1、若不给定查找目录,默认查找当前所在目录
2、比locate慢,但是更精确
3、如果不给定路径默认是匹配所有文件
4、需要对查询的目录有rx权限,普通用户没有权限就无法查询
5、find为精确查找,想模糊查询就需要用到通配符
1、根据层级目录查找
-maxdepth ?level(最大所有目录深度,查找指定的目录为第一级) ?: ?find /etc -maxdepth 2 ?-name(iname为不区分匹配字符的大小写) ?passwd : ?查找/etc目录下面最大层级为2的passwd文件
/etc/pam.d/passwd : ?其中的/etc为第一层级,/pam.d为第二层级
-mindepth ?level(最小目录深度) ?: ?find /etc -mindepth 2 -name(iname为不区分匹配字符的大小写) passwd : ?查询/etc目录下面最小目录深度为2包含passwd的目录
例如: 想要查找到指定的目录层级下面的文件
find /etc/ -maxdepth 2 -mindepth 2 -name passwd ?: ?查找/etc目录深度为2的passwd文件
2、基于文件名匹配
-name : 精确匹配文件名,加通配符实现模糊查询 ? ?
-iname : 精确匹配文件,忽略大小写
3、基于inum(inode号)和links(链接数)
find /etc -links 2 -ls(接ls,查看文件的完整信息) : 查找/etc下面链接数为2的文件和完整的目录
find /etc -inum 34352788 ?-ls : 查找/etc下面inum号为34352788的文件的完整信息
4、基于文件的拥有人和拥有组查询
-user USERNAME : ?查找拥有人为指定用户(UID)的文件 ? ?for example : find /etc/ -user user1 -ls?
-group GROUPNAME : 查找拥有组为指定(GID)的文件 ? ? for example : find /etc/ -group user1 -ls?
-uid USERID : 查找UID为指定拥有人的用户或uid ? ? ? ? ? ? ?for example : find /etc/ -uid 1005 -ls?
-gid GROUPID : ?查找GID为指定拥有人的用户或gid ? ? ? ? for example : find /etc/ -gid 1005 -ls?
-nouser : 查找没有拥有人的文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? for example : find /etc/ -nouser -ls
-nogroup : 查找没有拥有组的文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?for example : find /etc/ -nogroup -ls
5、逻辑运算符
-a : ?表示并且,默认就是-a ? ? ? ? for example : find /etc/ \( -user user1 -group user2 \) -ls ? ? 注意把括号里面的当整体,括号两侧需要空格
-o : ?表示或 ? ? ? ? ? ? ? ? ? ? ? ? ? ? for example : find /home \( -user user1 -o -group user4 \) -ls
-not 或者 ! : ?非 ? ? ? ? ? ? ? ? ? ? ? for example : find /home \( -user user1 ?-not -group admin \) -ls?
6、基于文件类型查询
-type f : 查找文件类型为普通文件
b : ?块设备
c : ?字符文件
d : 目录
l ?: 链接文件(软连接文件,类似于快捷方式,硬链接为普通文件)
p : 管道文件
s : 套接字文件
find /etc ?-name ?PASSWD ?-type ?d ?-ls ?: 查找/etc下面类型为目录的PASSWD文件
7、基于文件大小查询
常用单位: ?K,M,G。括号里面的表示范围
find /tmp -size ?-5M [0,4M] : ?查询大小小于5M的文件
find /tmp -size ?+5M (5M,+00) ?: 查询大小大于5M的文件
find /tmp -size ?5M(4M,5M] : 查询大小大于4M并且小于等于5M的文件
dd if=/dev/zero of=/tmp/test1 ?bs=1M count=10?
dd : device to device 从设备到设备,只能用这个命令备份二进制文件,cp不可以
if : 输入是设备或者文件
of : 输出是设备或者文件
bs : block size 文件的最小组成单元
count : block的数量
文件有大小的不需要加bs
例如 : dd if=/etc/passswd ?of=test3 : 类似于复制文件
1、产生特定大小的文件,有传输速率,测试磁盘存储性能
dd if=/dev/zero(一个永远输出0的设备文件) of=/tmp/test1 bs=1M count=10?
2、产生特定大小的文件,用来做swap(交换文件分区),把文件格式化成swap分区,用mkswap命令
3、备份磁盘
dd if=/dev/nvme0n1 of=/dev/nvme1n1 (里面全是二进制文件,是无法打开的)
4、备份分区
dd if=/dev/nvme0n1p1 of=/boot.bak
恢复(先把分区卸载下来):
unmount ?/boot?
dd if=/tmp/boot.bak ?of=/dev/nvme0n1p1?
再重新挂在上去(只要能挂载上,就没有问题)
mount /dev/nvme0n1p1 /boot/
8、根据文件权限查找
-perm : 精确匹配权限
find ?-perm ?644 ?: 表示要严格匹配644的文件
find ?-perm ?/666(也叫模糊查询,类似于或or) : 表示拥有人、拥有组、其他人中的任意一个满足r或w权限,总共9种情况
find /etc/script -name '*.sh' ! -perm /111 ?-ls ?: ?表示/etc/script下所有.sh的文件拥有人拥有组其他人没有执行权限的
find ?-perm ?-222(类似于与and) : ?表示仅严格匹配写权限,即每个用户必须要有写权限
find -perm -002 ?: 表示仅严格匹配其他人的写权限
9、根据时间戳查找
以”天”为单位:
? ? -atime [+|-]# ? ? ? ?
? ? ? ? #: [#,#+1)
? ? ? ? +#: [#+1,oo) ? ? ? ?
? ? ? ? -#: [0,#)
? ? -mtime ? ?
? ? -ctime
以“分钟”为单位:
? ? -amin ? ; -mmin ? ?;-cmin ??
例如:
find /tmp -atime ?+7
10、对查找到的文件进行操作
(1) -print : 默认动作,显示至屏幕
(2) -ls : 类似于对查找的文件执行ls -l 命令
(3) -delete : 删除查找到的文件
(4) -fls file : 查找到的所有长格式的详细信息重定向至指定文件中
(5) -ok command {} \; 对查找到每个文件执行由command指定的命令,且都会交互式要求用户确认
(6) -exec command {} \;对查找到的每个文件执行由command指定的命令;
(7) {} : 用于引用查找到的文件名称自身
(8) 由于很多命令不支持(|)管道来传递参数,而且日常中有需求,所以就用xargs;
find ?/root/script ?-name ?'*.sh' ?! ?-perm ?/111 ?-ok ?chmod ?a+x {} ?\; ? : ?表示查询/root/script文件下所有.sh的拥有人、拥有组、其他人没有执行权限的,并且-ok后面用chmod加上执行权限(用了-ok需要配合\;)?
其中,{}表示-ok前面执行代码的内容
find -name '*.conf' ?| xargs ? rm -rf * ?: ?查找所有.conf 的文件然后通过管道删除