sunsili 发表于 2022-1-13 17:59:09

【命令用法】linux下如何快速查找文件 find grep which whereis ocate

本帖最后由 sunsili 于 2023-6-2 13:47 编辑

【命令用法】linux下如何快速查找文件 find grep which whereis ocate


前言
在使用linux时,经常需要进行文件查找。其中查找的命令主要有find grep which whereis ocate,但它们是有区别的。

  它们的区别:                  (1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
                  (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
                  (3)which       查看可执行文件的位置 ,只有设置了环境变量的程序才可以用
                  (4)whereis    寻找特定文件,只能用于查找二进制文件、源代码文件和man手册页
                  (5)locate       配合数据库查看文件位置 ,详情:locate -h查看帮助信息
         

一.find命令

    基本格式:findpath expressionfind --help
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec]

default path is the current directory; default expression is -print
expression may consist of: operators, options, tests, and actions:

operators (decreasing precedence; -and is implicit where no others are given):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

positional options (always true): -daystart -follow -regextype

normal options (always true, specified before other expressions):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race

tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
      -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
      -readable -writable -executable
      -wholename PATTERN -size N -true -type -uid N
      -used N -user NAME -xtype
      -context CONTEXT


actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

Report (and track progress on fixing) bugs via the findutils bug-reporting
page at http://savannah.gnu.org/ or, if you have no web access, by sending
email to <bug-findutils@gnu.org>.


    1.按照文件名查找

    (1)find / -name httpd.conf  #在根目录下查找文件httpd.conf,表示在整个硬盘查找
    (2)find /etc -name httpd.conf  #在/etc目录下文件httpd.conf
    (3)find /etc -name '*srm*'  #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
    (4)find . -name 'srm*'   #表示当前目录下查找文件名开头是字符串‘srm’的文件

    2.按照文件特征查找     

    (1)find / -amin -10   # 查找在系统中最后10分钟访问的文件(access time)
    (2)find / -atime -2   # 查找在系统中最后48小时访问的文件
    (3)find / -empty   # 查找在系统中为空的文件或者文件夹
    (4)find / -group cat   # 查找在系统中属于 group为cat的文件
    (5)find / -mmin -5   # 查找在系统中最后5分钟里修改过的文件(modify time)
    (6)find / -mtime -1   #查找在系统中最后24小时里修改过的文件
    (7)find / -user fred   #查找在系统中属于fred这个用户的文件
    (8)find / -size +10000c  #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
    (9)find / -size -1000k   #查找出小于1000KB的文件

    3.使用混合查找方式查找文件

    参数有: !,-and(-a),-or(-o)。

    (1)find /tmp -size +10000c -and -mtime +2   #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
         (2)find / -user fred -or -user george   #在/目录下查找用户是fred或者george的文件文件
         (3)find /tmp ! -user panda  #在/tmp目录中查找所有不属于panda用户的文件
      

  二、grep命令

   基本格式:grep expressiongrep --help
Usage: grep ... PATTERN ...
Search for PATTERN in each FILE.
Example: grep -i 'hello world' menu.h main.c

Pattern selection and interpretation:
-E, --extended-regexp   PATTERN is an extended regular expression
-F, --fixed-strings       PATTERN is a set of newline-separated strings
-G, --basic-regexp      PATTERN is a basic regular expression (default)
-P, --perl-regexp         PATTERN is a Perl regular expression
-e, --regexp=PATTERN      use PATTERN for matching
-f, --file=FILE         obtain PATTERN from FILE
-i, --ignore-case         ignore case distinctions
-w, --word-regexp         force PATTERN to match only whole words
-x, --line-regexp         force PATTERN to match only whole lines
-z, --null-data         a data line ends in 0 byte, not newline

Miscellaneous:
-s, --no-messages         suppress error messages
-v, --invert-match      select non-matching lines
-V, --version             display version information and exit
      --help                display this help text and exit

Output control:
-m, --max-count=NUM       stop after NUM selected lines
-b, --byte-offset         print the byte offset with output lines
-n, --line-number         print line number with output lines
      --line-buffered       flush output on every line
-H, --with-filename       print file name with output lines
-h, --no-filename         suppress the file name prefix on output
      --label=LABEL         use LABEL as the standard input file name prefix
-o, --only-matching       show only the part of a line matching PATTERN
-q, --quiet, --silent   suppress all normal output
      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
-a, --text                equivalent to --binary-files=text
-I                        equivalent to --binary-files=without-match
-d, --directories=ACTIONhow to handle directories;
                            ACTION is 'read', 'recurse', or 'skip'
-D, --devices=ACTION      how to handle devices, FIFOs and sockets;
                            ACTION is 'read' or 'skip'
-r, --recursive         like --directories=recurse
-R, --dereference-recursive
                            likewise, but follow all symlinks
      --include=FILE_PATTERN
                            search only files that match FILE_PATTERN
      --exclude=FILE_PATTERN
                            skip files and directories matching FILE_PATTERN
      --exclude-from=FILE   skip files matching any file pattern from FILE
      --exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs with no selected lines
-l, --files-with-matchesprint only names of FILEs with selected lines
-c, --count               print only a count of selected lines per FILE
-T, --initial-tab         make tabs line up (if needed)
-Z, --null                print 0 byte after FILE name

Context control:
-B, --before-context=NUMprint NUM lines of leading context
-A, --after-context=NUM   print NUM lines of trailing context
-C, --context=NUM         print NUM lines of output context
-NUM                      same as --context=NUM
      --group-separator=SEP use SEP as a group separator
      --no-group-separatoruse empty string as a group separator
      --color[=WHEN],
      --colour[=WHEN]       use markers to highlight the matching strings;
                            WHEN is 'always', 'never', or 'auto'
-U, --binary            do not strip CR characters at EOL (MSDOS/Windows)

When FILE is '-', read standard input.With no FILE, read '.' if
recursive, '-' otherwise.With fewer than two FILEs, assume -h.
Exit status is 0 if any line is selected, 1 otherwise;
if any error occurs and -q is not given, the exit status is 2.


    1.主要参数

    主要参数:
    -c:只输出匹配行的计数。
    -i:不区分大小写
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -n:显示匹配行及行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。

    pattern正则表达式主要参数:
    \: 忽略正则表达式中特殊字符的原有含义。
    ^:匹配正则表达式的开始行。
    $: 匹配正则表达式的结束行。
    \<:从匹配正则表达 式的行开始。
    \>:到匹配正则表达式的行结束。
    [ ]:单个字符,如即A符合要求 。
    [ - ]:范围,如,即A、B、C一直到Z都符合要求 。
    .:所有的单个字符。
    * :有字符,长度可以为0。

    2.实例 

      grep -r "字符串"很方便

  (1)grep 'test' d*  #显示所有以d开头的文件中包含 test的行
  (2)grep ‘test’ aa bb cc    #显示在aa,bb,cc文件中包含test的行
  (3)grep ‘\{5\}’ aa   #显示所有包含每行字符串至少有5个连续小写字符的字符串的行
  (4)grep magic /usr/src  #显示/usr/src目录下的文件(不含子目录)包含magic的行
  (5)grep -r magic /usr/src  #显示/usr/src目录下的文件(包含子目录)包含magic的行
  (6)grep -w pattern files :#只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

参考链接:https://blog.csdn.net/xxmonstor/article/details/80507769


sunsili 发表于 2023-6-2 11:01:20

cat log4js.2023-06-02-10.log | grep "cmd\":120"//查找 cmd":120\" 转译

sunsili 发表于 2023-6-26 14:24:06

查找所有文件名含“bbs.sunsili.com”的文件
find / * | grep "bbs.sunsili.com"

sunsili 发表于 2023-7-12 15:10:39

查找所有内部含“bbs.sunsili.com”的文件
grep -rn "bbs.sunsili.com" /

谷谷小师妹 发表于 2023-9-22 12:01:26

查找内容包含bbs.sunsili.com文件
grep -rl "bbs.sunsili.com" ./


页: [1]
查看完整版本: 【命令用法】linux下如何快速查找文件 find grep which whereis ocate