linux文件搜索查找命令

linux文件搜索查找命令

1、grep

功能描述
grep 命令在一个或多个文件中查找与指定模式匹配的字符串。如果模式里包含有空格,必须用引号括起来。grep的模式只能是一个被引号括起来的字符串或者是一个单词,后面紧跟着的参数都被当作文件名。grep命令把结果输出到标准输出上,并不改变被搜索的源文件。

命令格式
grep pattern filename filename2 ...

grep有几个选项比较常用的
-i    查找时忽略大小写进行比较
-n    显示找到的行在文件中的行号
-v    显示不匹配的行

例1:在/etc/passwd文件中查找包含"bugboy"的行
[bugboy@bugboy ~]$ grep bugboy /etc/passwd
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

grep在/etc/passwd文件中查找含有bugboy的每一行,如果找到就把该行输出到标准输出上,grep的退出状态
为0;如果没找到,grep将不会输出任何信息,退出状态为1;如果指定的文件不存在,grep的退出状态为2。

grep模式支持正则表达式,下面是一些常用的正则表达式匹配元字符。

^      行起始锚定符,例如'^love',匹配所有以love开始的行。
$     行结束锚定符,例如'love$',匹配所有以love结束的行。
.      匹配任意一个字符, 例如'l..e',匹配所有以"l"开头,紧跟两个字符,然后以"e"结尾的字符串。
*     匹配0个或多个任意字符,例如' *bug',匹配以任意多个空格开始,后跟"bug"的字符串。
[]     匹配字符集中的一个字符,例如'[Bb]ook',匹配Book或book。
[^]   匹配不在字符集中的一个字符,例如'[^A-Z]low',匹配所有不以大写字母开头,后跟"low"的字符串。
/<   单词超始锚定符,例如'/<go',匹配所有以"go"开头的单词。
/>   单词结束锚定符,例如'or/>',匹配所有以"or"结束的单词。
x/{m/}    匹配m个x,例如'o/{5}',匹配5个o,即"ooooo"。
x/{m,/}   匹配至少m个x,例如'o/{5,/},匹配至少5个o,即"ooooo","oooooo"等。
x/{m,n/} 匹配m到n个x,例如'o/{2,5/}',匹配2到5个为,即"oo","ooo","oooo","ooooo"。

例2:在/etc/passwd中查找用户名以"b"开头的用户
[bugboy@bugboy test]$ grep ^b /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

例3:在/etc/passwd中查找SHELL为bash的用户
[bugboy@bugboy test]$ grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
ftp:x:14:50:FTP User:/var/ftp:/bin/bash
netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash
pvm:x:24:24::/usr/share/pvm3:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

例3:在/etc/passwd中查找含有"00"的行
[bugboy@bugboy test]$ grep '0/{2/}' /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
bugboy:x:500:500:YanDingcheng:/home/bugboy:/bin/bash

例4:查找sscanf.c文件中的非空行
[bugboy@bugboy test]$ cat sscanf.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    const char *str = "I am bugboy";
    char mystr[256];

    sscanf(str, "%s", mystr);
    printf("1: %s/n", mystr);

    char key[64], value[64];
    sscanf(str, "%s %s", key, value);

    printf("key: %s, value: %s/n", key, value);

    return 0;
}
[bugboy@bugboy test]$ grep -v '^ *$' sscanf.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    const char *str = "I am bugboy";
    char mystr[256];
    sscanf(str, "%s", mystr);
    printf("1: %s/n", mystr);
    char key[64], value[64];
    sscanf(str, "%s %s", key, value);
    printf("key: %s, value: %s/n", key, value);
    return 0;
}

例5:查找sscanf.c文件中含有"const char"的行,注意,如果要查找的字符串不只一个单词,要用引号括起来。
[bugboy@bugboy test]$ grep "const char" sscanf.c
    const char *str = "I am bugboy";
    
2、find

功能描述
find命令在文件系统中查找文件

命令格式
find  [path ...] [option] [-exec | -ok | -print]

find 命令的参数
path    find命令所查找的目录路径。
-exec   find命令对查找到的每一个匹配文件执行一个shell命令,命令格式为 "-exec command {} /;",
        注意“{}”和“/;”之间有一个空格,最后的“;“也不要忘了。
-ok     和-exec的作用相同,只是在执行命令之前请求用户确认,更安全的执行命令。
-print  将查找到的文件输出到标准输出。

例1:查到/tmp目录下所有扩展名为".tmp"的文件并删除。
[bugboy@bugboy test]$ find /tmp -name "*.tmp" -exec rm {} /;
这里用到了一个-name选项,是指按文件名查找,后面我将会对它进行说明。

命令选项
-name      按照文件名查找文件。
-perm       按照文件权限来查找文件。
-user        按照文件属主来查找文件。
-group     按照文件所属的组来查找文件。
-mtime -n +n  按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
              find命令还有-atime和-ctime选项,它们和-mtime选项类似。
-nogroup   查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser    查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! -newer file2  查找更改时间比文件file1新但比文件file2旧的文件。
-type      查找某一类型的文件,诸如:
    b - 块设备文件。
    d - 目录。
    c - 字符设备文件。
    p - 管道文件。
    l - 符号链接文件。
    f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth     在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype    查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,
                该配置文件中包含了本系统中有关文件系统的信息。
-mount     在查找文件时不跨越文件系统mount点。
-follow     如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio        对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

另外,下面三个的区别:
  -amin  n   查找系统中最后N分钟访问的文件
 -atime n  查找系统中最后n*24小时访问的文件
 -cmin  n  查找系统中最后N分钟被改变文件状态的文件
 -ctime n  查找系统中最后n*24小时被改变文件状态的文件
  -mmin  n  查找系统中最后N分钟被改变文件数据的文件
 -mtime n  查找系统中最后n*24小时被改变文件数据的文件

例2:查找当前目录下的块设备文件
[bugboy@bugboy dev]$ find . -type b
./fd0H720
./fd0H360
./fd0H1440
./fd0D720
这里省略掉了部份结果。

例3:查找当前目录下5天以内修改过的文件
[bugboy@bugboy test]$ find . -mtime -5
.
./toto.s
./toto.c
./tookit
./over
./over.s
./over.c
./tookit.c

例3:查找当前目录下比stat.c文件新,比over.c文件旧的文件
[bugboy@bugboy test]$ find . -newer stat.c ! -newer over.c
./toto.s
./crypt
./test
./toto.c
./strtok
./foo.h
./fstatvfs
./strsep.c

例4:查找当前目录下,具有644(用户可读、写,组可读,其它用户可读)权限的文件
[bugboy@bugboy test]$ find . -perm 644
./auto/gnip-1.0.tar.gz
./auto/gnip.o
./auto/.deps/gnip.Po

find命令与xargs命令相结合使用

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

例5:查找当前目录下所有的.c文件,并在文件中搜索stat字符串,输出包含stat的行和行号
[bugboy@bugboy test]$ find . -name "*.c" | xargs grep -n stat
./stat.c:3:#include <sys/stat.h>
./stat.c:5:#include <sys/statvfs.h>
./stat.c:9:    struct statvfs fsd;
./stat.c:11:    statvfs("/", &fsd);
./fstatvfs.c:2:#include <sys/statvfs.h>
./fstatvfs.c:4:#include <sys/stat.h>
./fstatvfs.c:10:    struct statvfs vfs;
./fstatvfs.c:14:    if (fstatvfs(fd, &vfs) < 0) {
./fstatvfs.c:15:        fprintf(stderr, "fstatvfs error()./n");
./statl.c:2:#include <sys/stat.h>
./statl.c:8:    struct stat statbuf;
./statl.c:15:    stat(argv[1], &statbuf);
./statl.c:16:    if (S_ISDIR(statbuf.st_mode)) {
./statl.c:18:    } else if (S_ISBLK(statbuf.st_mode)) {
./test.c:7:static int get_netmask_len(const char *netmask)

3、which, whereis

which命令在PATH环境变量中查找可执行文件,并打印出文件的全路径。例
[bugboy@bugboy test]$ which test
/usr/bin/test
[bugboy@bugboy test]$ which ls man find
alias ls='ls --color=tty'
        /bin/ls
/usr/bin/man
/usr/bin/find

whereis命令查找源文件、可执行文件、手册文件的位置。例
[bugboy@bugboy test]$ whereis test
test: /usr/bin/test /usr/share/man/man1p/test.1p.gz /usr/share/man/man1/test.1.gz
[bugboy@bugboy test]$ whereis ls find
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
find: /usr/bin/find /usr/share/man/man1p/find.1p.gz /usr/share/man/man1/find.1.gz

which和whereis这两个命令都可以接受多个参数作为查找命令。

时间: 2024-12-31 19:23:03

linux文件搜索查找命令的相关文章

Linux如何搜索查找文件里面内容

   在Linux系统当中,如何搜.索查找文件里面的内容呢? 这个应该是系统维护.管理当中遇到最常见的需求.那么下面介绍,总结一下如何搜索.查找文件当中的内容. 搜索.查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容   1:搜索某个文件里面是否包含字符串,使用grep "search content" filename1, 例如   $ grep ORA alert_gsp.log $ grep "ORA" ale

linux下的find文件查找命令与grep文件内容查找命令

在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等.                 (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找. 一.find命令 基本格式:find  path expression 1.按照文件名查找 (1)find / -name httpd.conf

LINUX学习(四)在Linux文件内容查询命令

grep.fgrep和egrep命令 这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名. grep命令一次只能搜索一个指定的模式: egrep命令检索扩展的正则表达式(包括表达式组和可选项): fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令.         这组命令在搜索与定位文件中特定的主题方面非常有用.要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这

Linux文件操作常用命令整理

收集.整理日常系统管理或维护当中的,常用到的一些关于文件操作的命令或需求,后续会慢慢补充.完善!   查看.生成指定目录的目录树结构?   [root@DB-Server ~]#tree   #当前目录   [root@DB-Server ~]#tree  /home/oracle/kerry   查看当前目录或指定目录的大小? [root@DB-Server ~]#du -sh /u01 [root@DB-Server ~]#du -sh   查看各个文件或子文件夹大小 [root@DB-Se

Linux文件搜索命令

一,locate命令 locate +文件名 :在后台数据库中按文件名,优点是搜索速度更快,缺点是只能按照文件名称来搜索: locate命令所搜索的数据库会在 /var/lib/mlocate 这里搜索:默认数据库是一天一更新: 对于新建的文件,需要强制更新数据库(updatedb)才能搜索到: 二,搜索命令的命令 whereis 搜索命令所在的路径及帮助文档所在位置 选项:    -b  :只查找可执行文件    -m:只查找帮助文件 三,搜索命令的命令 which 四,find命令 用法:

转:linux 文件解压命令

1.tar命令 2. 3.tar 可以为文件和目录创建档案.利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘.利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的.Linux上的tar是GNU版本的. 4.语法:tar [主选项+辅选项] 文件或者目录 5.使用该命令时,主选项是必须要有的

LINUX学习(六)Linux文件内容统计命令

       wc命令 wc命令的功能为统计指定文件中的字节数.字数.行数, 并将统计结果显示输出. 语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选项含义如下: - c 统计字节数. - l 统计行数. - w 统计字数. 这些选项可以组合使用.  输出列的顺序和数目不受选项的顺序和数目的影响. 总是按下述顺序显示并且每项最多一列. 行数.字数

Linux系统下如何实现快速的文件搜索

  #whereis 查找已经安装的软件 在Linux上查找某个文件是一件比较麻烦的事情.毕竟在Linux中需要我们使用专用的"查找"命令来寻找在硬盘上的文件. inux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式,那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到.Linux中查找文件的命令通常为"find"命令,"find"命令能帮助我们在使用,管理Linux的

Linux如何搜索文件的方法

  在Linux上查找某个文件是一件比较麻烦的事情.毕竟在Linux中需要我们使用专用的"查找"命令来寻找在硬盘上的文件. Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式,那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到.Linux中查找文件的命令通常为"find"命令,"find"命令能帮助我们在使用,管理Linux的日常事务中方便的查找出我们需要的文件