locate和find查找文件命令详解

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

你可能感兴趣的:(运维,Linux系统,linux,运维)