美文网首页Linux学习|Gentoo/Arch/FreeBSD
Linux每周几个命令(一)--查找篇

Linux每周几个命令(一)--查找篇

作者: 此博废弃_更新在个人博客 | 来源:发表于2017-01-29 13:55 被阅读135次

    Linux每周几个命令--查找篇

    标签(空格分隔): linux


    当要查找某一个文件位置的时候,在linux下可以使用如下命令:

    1. which 查看可执行文件位置
    2. whereis 查看文件位置
    3. locate 配合数据库查找文件位置
    4. find 搜寻指定目录下的文件位置

    下面对其逐个分析:


    1.which

    which指令是在系统配置的Path环境变量中查找某一个命令的位置,并且返回第一个搜索结果.用该指令可以很轻松的查找到执行的到底是哪一个位置的命令.

    1.命令格式

    which 文件名
    

    2.命令作用

    在系统PATH变量中查找,并返回第一个结果
    

    3.使用示例
    查找mysql命令位置(前提安装了mysql)

    [root@VM_105_120_centos ~]# which mysql
    /usr/bin/mysql
    [root@VM_105_120_centos ~]# 
    

    查找java命令位置(前提安装了Java)

    [root@VM_105_120_centos ~]# which java
    /usr/java/jdk1.8.0_102/bin/java
    [root@VM_105_120_centos ~]# 
    

    查找失败时,会打印出当前PATH变量

    [root@VM_105_120_centos ~]# which apache
    /usr/bin/which: no apache in (/usr/java/jdk1.8.0_102/bin:/usr/java/jdk1.8.0_102/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_102/bin:/root/bin:/root/bin)
    [root@VM_105_120_centos ~]# 
    

    2.whereis

    whereis的搜索是有限的几种文件,但是其搜索速度很快,原因是李永乐linux的文件索引数据库,该数据库在centos下每天更新一次,所以到时whereis可能会查找出来已删除的文件,如果要实时查找,在执行命令前先执行updatedb,更新数据库索引你.

    1.命令格式

     whereis [选项] 文件
    

    2.命令参数

     -b         只搜索二进制文件
     -B <目录>  定义二进制文件查找路径
     -m         只搜索 man 手册
     -M <目录>  定义 man 手册查找路径
     -s         只搜索源代码
     -S <目录>  定义源代码查找路径
     -f         终止 <目录> 参数列表
     -u         搜索不常见记录
     -l         输出有效查找路径
    

    3.命令作用
    whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。

    4.使用示例
    查找出mysql位置,和which相比查找出了全部位置

    [root@VM_105_120_centos ~]# whereis mysql
    mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
    

    只查找二进制文件,也就是可执行文件,结果过滤掉了gz压缩文件

    [root@VM_105_120_centos ~]# whereis -b mysql
    mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql
    

    3.locate

    locate和whereis一样都是通过数据库查找,所以实时性会有问题,不同的是locate是查找文件的全路径,只要匹配就列出,而且支持正则表达式.

    1.命令格式

    locate [OPTION]... [PATTERN]...
    

    2.命令参数

    -i 忽略大小写
    -l 指定查找数量
    -r 正则匹配查找
    -c 统计出符合查找规则的数量
    

    3.命令作用

    快速定位符合要求的路径位置.
    

    4.使用示例
    locate查找mysql

    [root@VM_105_120_centos ~]# locate mysql
    /etc/ld.so.conf.d/mysql-x86_64.conf
    /etc/logrotate.d/mysql
    /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    /etc/rc.d/init.d/mysqld
    /etc/rc.d/rc0.d/K36mysqld
    /etc/rc.d/rc1.d/K36mysqld
    .......
    

    locate统计出含有mysql字符的数量

    [root@VM_105_120_centos ~]# locate -c mysql
    649
    

    locate查找mysql结尾的文件

    [root@VM_105_120_centos ~]# locate -r mysql$
    /etc/logrotate.d/mysql
    /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    /usr/bin/mysql
    /usr/lib64/mysql
    /usr/share/mysql
    /var/lib/mysql
    /var/lib/mysql/mysql
    

    4.find

    Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

    1.命令格式

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} ;
    

    2.命令参数

    -name 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]
    -gid n 查找属于 ID 号为 n 的用户组的所有文件。
    -uid n 查找属于 ID 号为 n 的用户的所有文件。
    -group 查找属于用户组名为所给字串的所有的文件。
    -user 查找属于用户名为所给字串的所有的文件。
    -nouser 查找没有属主的文件或目录
    -nogoroup 查找没有属组的文件或目录
    -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。
    -size n[bckw]查找指定文件大小的文件,n后面的字符表示单位,缺省为 b,代表 512字节的块。
    -type x 查找类型为 x 的文件,x 为下列字符之一:
        b 块设备文件
        c 字符设备文件
        d 目录文件
        p 命名管道(FIFO)
        f 普通文件
        l 符号链接文件(symbolic links)
        s socket 文件
    以时间为条件查找
    -amin n 查找 n 分钟以前被访问过的所有文件。
    -atime n 查找 n 天以前 24 小时内被访问过的所有文件。
    -cmin n 查找 n 分钟以前文件状态被修改过的所有文件。
    -ctime n 查找 n 天以前 24 小时内文件状态被修改过的所有文件。
    -mmin n 查找 n 分钟以前文件内容被修改过的所有文件。
    -mtime n 查找 n 天以前 24 小时内文件内容被修改过的所有文件。
    -print:将搜索结果输出到标准输出。
    

    3.使用示例
    在var目录下查找mysql

    [root@VM_105_120_centos ~]# find /var -name mysql 
    /var/lib/mysql
    /var/lib/mysql/mysql
    

    查找usr目录下mysql,并且类型为一般文件,最后列出详细信息

    [root@VM_105_120_centos ~]# find /usr -name mysql -type f  -exec ls -l {} \;
    -rwxr-xr-x 1 root root 10416008 9月  29 01:42 /usr/bin/mysql
    

    关于mtime这个以后会用的很多

    find $PATH -mtime 0 查找距当前时间 24 小时以内修改的文件
    find $PATH -mtime +n 查找距当前时间 n 天以外修改的文件
    find $PATH -mtime -n 查找距当前时间 n 天以内修改的文件
    find $PATH -mtime n 查询距当前时间 n 天之前 24 小时以内修改的文件
    

    关于exec,这个常用来批量处理
    find可以很好地定位到文件,但是往往我们定位到文件后还会继续其他操作,那么exec用处就来了.举个例子,查找tomcat的log文件,然后删除.

    [root@VM_105_120_centos ~]# find /root/apache-tomcat-8.5.6 -name *.log -exec rm {} \;
    

    执行后直接就删除了,也没提醒,这显然不合适,换成-ok,这个属于安全模式下的-exec

    [root@VM_105_120_centos ~]# find /root/apache-tomcat-8.5.6 -name *.txt -ok rm {} \;
    < rm ... /root/apache-tomcat-8.5.6/webapps/austoj/WEB-INF/view/robots.txt > ? y
    < rm ... /root/apache-tomcat-8.5.6/logs/localhost_access_log.2016-12-07.txt > ? y
    < rm ... /root/apache-tomcat-8.5.6/logs/localhost_access_log.2016-10-23.txt > ? n
    

    再比如查询48小时前更改过的文件,并删除

    [root@VM_105_120_centos ~]# find -atime 2 -ok rm {} \;
    < rm ... ./apache-tomcat-8.5.6/logs/localhost_access_log.2017-01-27.txt > ? y
    

    相关文章

      网友评论

        本文标题:Linux每周几个命令(一)--查找篇

        本文链接:https://www.haomeiwen.com/subject/aalcittx.html