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 的文件然后通过管道删除