zoukankan      html  css  js  c++  java
  • linux 中的搜索命令

    which 查看可执行文件的位置。

    whereis 查看文件位置。

    locate 配合数据库查看文件位置。

    find 实际搜索硬盘查询文件名称。

    grep 查找文件内容


    一般不常用find命令,因为find命令比较庞大,搜索范围太大了,耗时长。
    对于which,它是根据PATH环境变量到该路径寻找可执行文件,所以它基本上就是“寻找可执行文件”命令。

    whereis呢?这个比较灵活了,可以加上参数来锁定精确的搜索一下,比如-b参数,就是只找二进制文件;-u参数,找没有说明文档的文件……等等。

    locate就更好了,它是这里最快的命令。可是有个缺点,它为什么快呢?因为locate是从本地的数据库文件中找(好像WINDOWS里的注册表)文件位置的,这就有缺点了,数据库文件没有更新的时候,某些没在数据库中的“文件位置”就会找不到了,呵呵。但是没关系,你可以在用locate之前先用“updatedb”命令更新一下数据库再找。

    grep 的作用通常是在一个文件中查找某个关键字

    命令的具体用法:

    1、find

      格式: find [dir] [expression]

      例如:在/etc中搜索vsftpd.conf文件2.grep: 差找文件内容

     [root@localhost ~]# find     /etc  -name vsftpd.conf
     
    2、locate  

    使用该命令要先运行updatedb;

    [root@localhost ~]# updatedb

      例如: 要找vsftpd.conf文件都位于哪个位置;

    [root@localhost ~]# locate vsftpd.conf

    3、whereis 

       比如我们不知道fdisk工具放在哪里,我们就可以用whereis fdisk 来查找;

      [root@localhost ~]# whereis fdisk

    4、which

      which 和where 相似,只是which是在我们所设置的环境变量中设置好的路径中寻找;比如;

     [root@localhost ~]# which fdisk
     
    5、grep
     
      格式:grep [option] pattern file

      例如:a. grep test *

                  在当前目录中查找 含有字符串 test 文件的行

              b. #find dir -name "file-patten" | xargs grep "patten"

                  在某个文件夹内的特定类型的文件中查找特定字符串

                  #find /usr/src/linux "*.[ch]" | xargs grep "include"

                  在/usr/src/linux文件夹内的所有.c和.h文件中查找字符串include

    应用场景实例:

    有时我们为了管理服务器,可能要查看一些日志文件或管理指令的输出,并抽取出来;这时我们要用到more和grep、egrep、|(管道),如果要输出到一个文件中, 还要用到 > 。

    比如我们查看/var/log/message 文件,并查找5月8号的日志;我们应该用如下的命令组合;

    [root@localhost ~]# cat  /var/log/messages |grep 'May  8' |more

    注意:因为May和8之间有两个空格,所以得用''号括起来。

    如果我们想把查看到的结果输出到一个文件中,应该用 > 输出到文件;

    [root@localhost ~]# cat  /var/log/messages |grep 'May  8' > ~/message0508.txt
    [root@localhost ~]# more ~/message0508.txt

    上面的例子,是我们首先用 cat 来查看/var/log/message 的内容,然后抽取带有 May 8字样的行,然后输出到用户家目录下的 message0508.txt文件中,然后再用more来查看message0508.txt文件内容;

    从一个输出结果中查找

    我们也可以从一个输出的结果中查找所需要的内容,请看下面的例子;

    [root@localhost ~]# ls -lh
    总计 24M
    -rwxr-xr-x 1 root root  545 04-25 11:21 adduml02.sh
    -rwxr-xr-x 1 root root  545 2004-01-18 adduml.sh
    -rw-rw-rw- 1 root root    0 04-25 14:26 dood
    drwxr-xr-t 2 root root 4.0K 04-24 21:59 googledir
    -rwxr-xr-x 1 root root    7 04-21 12:47 lsfile.sh
    -rw-r--r-- 1 root root  31K 05-08 13:47 message0508.txt
    drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17
    -rwxr-xr-x 1 root root  67K 04-22 14:13 mkuml-2004.07.17-ananas.tar.bz2
    drwxr-xr-x 2 root  502 4.0K 04-25 09:08 mydir
    -rw-r--r-- 1 root root 7.9M 04-27 20:35 myfile.img
    -rw-r--r-- 1 root root 4.0M 04-27 20:37 myfileSpaa
    -rw-r--r-- 1 root root 3.9M 04-27 20:37 myfileSpab
    -rw-r--r-- 1 root root 7.9M 04-27 20:38 newmyfile.img
    drwxrw-rw- 2 root root 4.0K 04-25 14:22 sundir
    drwxr-xr-x 2 root root 4.0K 04-25 09:20 testdir
    -rwxr-xr-x 1 root root  613 03-26 18:41 upgrade.log
    -rw------- 1 root root 4.0K 04-29 20:12 vsftpd.conf
    -rw-r--r-- 1 root root 4.0K 04-29 20:23 vsftpd.config
    -rw-r--r-- 1 root root  100 04-27 16:14 xaa

    在ls -lh 的输出结果中,查看带有04-27字样的行,我们看到带有04-27字样的行都出来了。04-27在这里表示文件创建或最后修改(访问)的时间。符合这一特征的都在里面。

    [root@localhost ~]# ls -lh |grep '04-27' |more
    -rw-r--r-- 1 root root 7.9M 04-27 20:35 myfile.img
    -rw-r--r-- 1 root root 4.0M 04-27 20:37 myfileSpaa
    -rw-r--r-- 1 root root 3.9M 04-27 20:37 myfileSpab
    -rw-r--r-- 1 root root 7.9M 04-27 20:38 newmyfile.img
    -rw-r--r-- 1 root root  100 04-27 16:14 xaa

    查找正在运行的程序:

    这也是从一个输出中查找的例子,先用ps 来列出所有正在运行中的进程,然后通过grep 来提取。下面的例子中查找是否有gaim程序在运行;

    [root@localhost ~]# ps -aux |grep gaim
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.6/FAQ
    beinan    2682  0.0  4.0 152644 30188 ?        S    08:59   0:16 gaim
    root      5660  0.0  0.0   5160   720 pts/1    S+   13:58   0:00 grep gaim

    从上面的例子,我们可以看到的确有gaim运行,进程号是2682 。如果想杀掉gaim怎么办?应该有kill 2682 或killall gaim

    [root@localhost ~]# kill 2682

    [root@localhost ~]# killall gaim

    对于进程的查找,也可以用pgrep 来进行;比如我们查找gaim;

    [root@localhost ~]# pgrep gaim
    2682

    等价于

    [root@localhost ~]# ps -aux |grep gaim
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.6/FAQ
    beinan    2682  4.4  2.3 105000 17504 ?        S    14:05   0:02 gaim
    root      5716  0.0  0.0   5156   712 pts/1    R+   14:06   0:00 grep gaim
  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/angryprogrammer/p/3231856.html
Copyright © 2011-2022 走看看