• Linux系统中文件定位与查找


    Linux系统中文件查找

    关键词 文件查找 | find | locate

    本文主要介绍有关文件查找的两个命令——find和locate,以及压缩打包的命令——compress, gzip,bzip2,xz等。有问题或建议可发至邮箱VatheSee@163.com.

    locate

    locate命令是通过查询Linux系统上预先构建的文件索引数据库,准确说来,这个数据库默认的位置是/var/lib/mlocate/mlocate.db,这个数据库一般由系统定时周期性更新,当然也可以通过updatedb命令手动更新,但是花费的时间周期可能很长,尤其在文件系统占用率很高的情况下。

    locate命令查找的特点:

    查找速度快
    
    模糊查找
    
    非实时查找

    命令格式及常用选项:

    locate [OPTION]... PATTERN...
        
        -h, --help      查看帮助文档      
        -i              忽略大小写搜索
        -n  N           最多显示N个匹配项目
        -r, --regexp    支持进行基本正则表达式匹配,默认支持glob统配符  
        --regex         支持使用扩展正则表达式
        -c              统计搜索到匹配的条目,但不输出具体条目

    find命令

    相对于locate命令,find命令查找有如下特点

    查询速度较快
    精确查找
    实时查找

    语法:

    find [-H] [-L] [-P] [-D  debugopts] [-Olevel]  [path...]
    [expression]
    
    [-H] [-L] [-P]  三选项用来控制处理符号链接文件
    [-D]            控制dubug
    [-O]            查询,设置优化等级

    以上5个参数基本不用,如果需要使用,位置必须在路径[path]之前

    常用格式:
    find [OPTION]... [查找路径] [查找条件] [处理动作]

    查找路径:指定需要查找的目录,如果是当前目录,可用“.”代替

    查找条件:指定查找标准,可以是文件名、大小、权限等

    处理动作:对符合条件的文件进行操作,默认输出至屏幕

    接下来详细介绍查找条件:

    根据文件名查找

    -name,      直接查找文件名,支持glob风格查找
    -iname,     不区分大小写,支持glob风格查找
    -regex,     支持正则表达式查找文件名
    -iregex,    不区分大小写,支持正则表达式查找文件名
    
    注意:如果对glob不了解,可以用man 7 glob查看

    根据文件从属关系查找

    -user,   	根据属主查找
    -group,     根据属组查找
    -uid        根据属主id查找
    -gid        根据属组id查找
    -nouser     判断是否属于无属主文件
    -nogroup    判断是否属于无属组文件

    根据文件类型查找

    -type

    常见文件类型有

    f    	普通文件
    d       目录文件
    l       符号链接文件
    b       块文件
    c       字符设备文件
    p   	管道文件
    s   	套接字文件

    以文件大小查找

    -size[+|-]  UNIT
    	常用单位:k, M, G

    以时间戳查找

    以“天”为单位:
    	-atime[+|-]
    	-mtime
    	-ctime
    
    以“分钟”为单位:
    
    	-amin
    	-mmin
    	-cmin

    根据权限查找

    -perm [/|-] mode
    	mode: 精确权限匹配
    	-mode
    	/mode: 任何一类用户的权限满足即可
    	+mode: 已废弃这种用法

    处理动作

    -print  输出至标准输出,默认的动作
    -ls 	类似于对查找的文件执行"ls -l"命令,输出文件的详细信息
    -delete 删除查找到的文件
    -fls  file   把查找到的所有文件的长格式信息保存到指定文件
    -ok CMD {} ;    	执行CMD,执行前询问
    -exec CMD {} ;   	执行CMD

    组合测试

    各个条件之间默认是以“与”连接,如果需要使用其他组合测试,必须加上

    -a      		与
    -o     		 	或
    -not, !    		非

    德·摩根定律

    (非 P) 或 (非 Q) = 非(P 且 Q)
    (非 P) 且 (非 Q) = 非(P 或 Q)

    练习

    1、查找/var目录下属主为root,且属组为mail的所有文件或目录;

    # find /var -user root -group mail

    2、查找/usr目录下不属于root、lp或gdm的所有文件或目录;

    # find /usr -not -user root 
    -a -not -user lp -a -not -user gdm
    # find /usr -not ( -user root -o -user lp -o -user gdm )

    3、查找/etc目录下最周一周内其内容修改过,同时属主不为root,也不是postfix的文件或目录;

    # find /etc -mtime -7 -a -not -user root -a -not -user postfix
    # find /etc/ -mtime -7 -a -not ( -user root -o -user postfix )

    4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录;

    # find / ( -nouser -o -nogroup ) -a -atime -7
    # find / ( -atime -7 -nouser -o -nogroup ) -ls

    5、查找/etc目录下大于1M且类型为普通文件的所有文件;

    # find /etc -size +1M -type f

    6、查找/etc目录下所有用户都没有写权限的文件;

    # find /etc -not -perm 222 -type f -ls
  • 相关阅读:
    Linux防火墙白名单设置
    postgre级联更新
    postgre查询表和记录数,查表字段
    PostgreSQL中的 时间格式转化常识
    android 阿里云oss上传
    android studio connot resolve
    Mysql 优化,慢查询
    Docker 容器更新,打包,上传到阿里云
    Mysql 替换字段的一部分内容
    Docker 安装Nginx
  • 原文地址:https://www.cnblogs.com/vathe/p/6692268.html
Copyright © 2020-2023  润新知