美文网首页JavaWeb技术
linux搜索log文件的内容

linux搜索log文件的内容

作者: 问题_解决_分享_讨论_最优 | 来源:发表于2020-01-22 05:19 被阅读0次

    日志一般是记载每天所做的工作。在计算机科学中,日志是指服务器等电脑设备或软件的运作记录(Server log)。在电脑设备和软件出现问题时,日志是我们在排查问题的一个重要依据。查询日志是用户记录从客户端收到所有数据库或操作系统的查询,同时也包括了每一个客户端的链接和断开链接。
    如今各种花式日志系统大行其道,但在此同时也不要忘记linux查看日志的基础功能,今天就讲讲linux查看日志的常用基础功能

    ♛ 1 less
    1.1 less -N 日志文件名.log

    less -N test.log然后输入"/context"搜索context关键字

    点击键盘↑ ↓可以滚动,点击 N 可以查看上一个,n可以查看下一个

    1.2 less详解

    SUMMARY OF LESS COMMANDS
    
          Commands marked with * may be preceded by a number, N.
          Notes in parentheses indicate the behavior if N is given.
          A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
    
      h  H                 Display this help.
      q  :q  Q  :Q  ZZ     Exit.
     ---------------------------------------------------------------------------
    
                               MOVING
    
      e  ^E  j  ^N  CR  *  Forward  one line   (or N lines).
      y  ^Y  k  ^K  ^P  *  Backward one line   (or N lines).
      f  ^F  ^V  SPACE  *  Forward  one window (or N lines).
      b  ^B  ESC-v      *  Backward one window (or N lines).
      z                 *  Forward  one window (and set window to N).
      w                 *  Backward one window (and set window to N).
      ESC-SPACE         *  Forward  one window, but don't stop at end-of-file.
      d  ^D             *  Forward  one half-window (and set half-window to N).
      u  ^U             *  Backward one half-window (and set half-window to N).
      ESC-)  RightArrow *  Left  one half screen width (or N positions).
      ESC-(  LeftArrow  *  Right one half screen width (or N positions).
      F                    Forward forever; like "tail -f".
      r  ^R  ^L            Repaint screen.
      R                    Repaint screen, discarding buffered input.
            ---------------------------------------------------
            Default "window" is the screen height.
            Default "half-window" is half of the screen height.
     ---------------------------------------------------------------------------
    
                              SEARCHING
    
      /pattern          *  Search forward for (N-th) matching line.
      ?pattern          *  Search backward for (N-th) matching line.
      n                 *  Repeat previous search (for N-th occurrence).
      N                 *  Repeat previous search in reverse direction.
      ESC-n             *  Repeat previous search, spanning files.
      ESC-N             *  Repeat previous search, reverse dir. & spanning files.
      ESC-u                Undo (toggle) search highlighting.
      &pattern          *  Display only matching lines
            ---------------------------------------------------
            A search pattern may be preceded by one or more of:
            ^N or !  Search for NON-matching lines.
            ^E or *  Search multiple files (pass thru END OF FILE).
            ^F or @  Start search at FIRST file (for /) or last file (for ?).
            ^K       Highlight matches, but don't move (KEEP position).
            ^R       Don't use REGULAR EXPRESSIONS.
     ---------------------------------------------------------------------------
    
    HELP -- Press RETURN for more, or q when done
    

    ♛ 2 grep

    2.1 统计文件或者文本中包含匹配字符串的行数 -c 选项

    grep -c "context" daily.log

    linux搜索log文件的内容

    2.2 使用正则表达式 -E 选项

    grep -E "[1-9]+" daily.log

    搜索以数字2开头的行:

    linux搜索log文件的内容

    2.3 使用正则表达式 -E 选项

    grep -l "text" file1 file2 file3...

    2.4 grep详解

    用法: grep [选项]... PATTERN [FILE]...
    在每个 FILE 或是标准输入中查找 PATTERN。
    默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
    例如: grep -i 'hello world' menu.h main.c
    
    正则表达式选择与解释:
      -E, --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
      -F, --fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。
      -G, --basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)
      -P, --perl-regexp         PATTERN 是一个 Perl 正则表达式
      -e, --regexp=PATTERN      用 PATTERN 来进行匹配操作
      -f, --file=FILE           从 FILE 中取得 PATTERN
      -i, --ignore-case         忽略大小写
      -w, --word-regexp         强制 PATTERN 仅完全匹配字词
      -x, --line-regexp         强制 PATTERN 仅完全匹配一行
      -z, --null-data           一个 0 字节的数据行,但不是空行
    
    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
    
    输出控制:
      -m, --max-count=NUM       NUM 次匹配后停止
      -b, --byte-offset         输出的同时打印字节偏移
      -n, --line-number         输出的同时打印行号
          --line-buffered       每行输出清空
      -H, --with-filename       为每一匹配项打印文件名
      -h, --no-filename         输出时不显示文件名前缀
          --label=LABEL         将LABEL 作为标准输入文件名前缀
      -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=ACTION  how 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 containing no match
      -l, --files-with-matches  print only names of FILEs containing matches
      -c, --count               print only a count of matching lines per FILE
      -T, --initial-tab         make tabs line up (if needed)
      -Z, --null                print 0 byte after FILE name
    
    文件控制:
      -B, --before-context=NUM  打印以文本起始的NUM 行
      -A, --after-context=NUM   打印以文本结尾的NUM 行
      -C, --context=NUM         打印输出文本NUM 行
      -NUM                      same as --context=NUM
          --group-separator=SEP use SEP as a group separator
          --no-group-separator  use 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)
      -u, --unix-byte-offsets   report offsets as if CRs were not there
                                (MSDOS/Windows)
    
    ‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
    直接使用‘egrep’或是‘fgrep’均已不可行了。
    若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
    如果少于两个FILE 参数,就要默认使用-h 参数。
    如果有任意行被匹配,那退出状态为 0,否则为 1;
    如果有错误产生,且未指定 -q 参数,那退出状态为 2。
    
    请将错误报告给: bug-grep@gnu.org
    GNU Grep 主页: <http://www.gnu.org/software/grep/>
    GNU 软件的通用帮助: <http://www.gnu.org/gethelp/>
    

    根据 关键词 查看日志 并返回关键词所在行:

    grep -i "test" ./test.log 返回test.log中包含test的所有行(-i忽略大小写)

    ♛ 3 cat
    3.1 查看日志前n行

    cat test.log | head -n 5

    test.log为文件名,5为行数。

    3.2 查看日志尾n行

    cat test.log | tail -n 5

    3.3 根据关键词查看日志

    cat daily.log | grep "context"

    3.4 cat详解

    用法:cat [选项]... [文件]...
    将[文件]或标准输入组合输出到标准输出。
    
      -A, --show-all           等于-vET
      -b, --number-nonblank    对非空输出行编号
      -e                       等于-vE
      -E, --show-ends          在每行结束处显示"$"
      -n, --number             对输出的所有行编号
      -s, --squeeze-blank      不输出多行空行
      -t                       与-vT 等价
      -T, --show-tabs          将跳格字符显示为^I
      -u                       (被忽略)
      -v, --show-nonprinting   使用^ 和M- 引用,除了LFD和 TAB 之外
          --help        显示此帮助信息并退出
          --version        显示版本信息并退出
    
    如果没有指定文件,或者文件为"-",则从标准输入读取。
    
    示例:
      cat f - g  先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。
      cat        将标准输入的内容复制到标准输出。
    
    GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
    请向<http://translationproject.org/team/zh_CN.html> 报告cat 的翻译错误
    要获取完整文档,请运行:info coreutils 'cat invocation'
    [toutou@localhost front]$
    

    ♛ 4 tail和head命令
    4.1 tail常见用法

    tail -f test.log 可以动态的查看服务器运行状态的日志

    head -n 5 test.log 显示top 5行

    tail -n 5 test.log 显示last 5行

    tail -n +5 test.log 从第5行开始显示,显示第5行以后的

    4.2 tail详解

    用法:tail [选项]... [文件]...
    Print the last 10 lines of each FILE to standard output.
    With more than one FILE, precede each with a header giving the file name.
    With no FILE, or when FILE is -, read standard input.
    
    Mandatory arguments to long options are mandatory for short options too.
      -c, --bytes=K            output the last K bytes; or use -c +K to output
                                 bytes starting with the Kth of each file
      -f, --follow[={name|descriptor}]
                               output appended data as the file grows;
                                 an absent option argument means 'descriptor'
      -F                       same as --follow=name --retry
      -n, --lines=K            output the last K lines, instead of the last 10;
                                 or use -n +K to output starting with the Kth
          --max-unchanged-stats=N
                               with --follow=name, reopen a FILE which has not
                                 changed size after N (default 5) iterations
                                 to see if it has been unlinked or renamed
                                 (this is the usual case of rotated log files);
                                 with inotify, this option is rarely useful
          --pid=PID            with -f, terminate after process ID, PID dies
      -q, --quiet, --silent    never output headers giving file names
          --retry              keep trying to open a file if it is inaccessible
      -s, --sleep-interval=N   with -f, sleep for approximately N seconds
                                 (default 1.0) between iterations;
                                 with inotify and --pid=P, check process P at
                                 least once every N seconds
      -v, --verbose            always output headers giving file names
          --help        显示此帮助信息并退出
          --version        显示版本信息并退出
    
    If the first character of K (the number of bytes or lines) is a '+',
    print beginning with the Kth item from the start of each file, otherwise,
    print the last K items in the file.  K may have a multiplier suffix:
    b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
    GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
    
    如果您希望即时追查一个文件的有效名称而非描述内容(例如循环日志),默认
    的程序动作并不如您所愿。在这种场合可以使用--follow=name 选项,它会使
    tail 定期追踪打开给定名称的文件,以确认它是否被删除或被其它某些程序重新创建过。
    
    GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
    请向<http://translationproject.org/team/zh_CN.html> 报告tail 的翻译错误
    要获取完整文档,请运行:info coreutils 'tail invocation'
    

    ♛ 5 sed
    5.1 查看文件的第5行到第15行

    sed -n '5,15p' daily.log

    5.2 sed详解

    sed不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。 
        sed是一种很重要的文本过滤工具,使用一行命令或者使用管道与grep与awk相结合。是一种非交互性文本流编辑。 
        (1)调用sed的三种方式 
          使用sed命令行格式为:sed [options] sed命令 输入文件 
          使用sed脚本文件格式为:sed[options] -f sed脚本文件 输入文件 
          sed脚本文件[options] 输入文件 
          --不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。 
        (2)sed 命令的options如下 
            -n:不打印 
            -c:下一命令是编辑命令 
            -f:如果正在调用sed脚本文件 
        (3)sed在文件中查询文本的方式 
              --使用行号,可以是一个简单的数字,或是一个行号的范围 
              --使用正则表达式 
        (4)读取文本的方式 
              x       x为一行号 
              x,y       表示行号范围从x到y 
              /pattern/     查询包含模式的行 
              /pattern/pattern/ 查询包含两个模式的行 
              pattern/,x   在给定的行号上查询包含模式的行 
              x,/pattern/   通过行号和模式查询匹配行 
              x,y!       查询不包含指定行号x和y的行 
          (5)基本sed编辑命令 
                p   打印匹配行 
                d   删除匹配行 
                =   显示文件行号 
                a\   在定位行号后附加新文本信息 
                i\   在定位行号后插入新文本信息 
                c\   用新文本替换定位文本 
                s     使用替换模式替换相应模式 
                r     从另一个文件中读文件 
                w   写文本到一个文件 
                q     第一个模式匹配完成后推出或立即退出 
                l     显示与八禁止ASCII代码等价的控制字符 
                {}   在定位行执行的命令组 
                n     从另一个文件中读文本下一行,并附加在下一行 
                g     将模式2粘贴到/pattern n/ 
                y     传送字符 
        (6)举例说明: 
              sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印文件的所有信息而不是匹配信息) 
              sed -n '1,4p' test.txt 打印第一行到第四行的信息 
              sed -n '/los/p' test.txt模式匹配los,并打印出来 
              sed -n '2,/los/p' test.txt 从第二行开始。。知道匹配第一个los 
              sed -n '/^$/p' test.txt 匹配空行 
              sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行号 
              sed -n '/good/a\morning' test.txt 在匹配到的good后面附加morning 
              sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning 
              sed -n '/good/c\morning' test.txt 将匹配到的good替换成morning 
              sed '1,2d' test.txt 删除第1和2行 
              sed 's/good/good morning/g' test.txt 匹配good并替换成goodmorning 
              send 's/good/& hello /p' test.txt 匹配到good就在其后面加上hello 
              send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello
    

    ♛ 6 find
    6.1 查找目录下的所有文件中是否含有某个字符串

    find .|xargs grep -ri "context"

    6.2 find详解

    (1)查找具有某些特征文件的命令,可遍历当前目录甚至于整个文件系统来查看某些文件或目录,其遍历大的文件系统时一般放在后台执行。 
    (2)find命令的一般形式 
          find pathname -options [-print -exec -ok] 
          -pathname :find命令所查找的目录路径。如用"."来表示当前的目录,用/来表示系统根目录 
          -print :find命令将匹配的文件输出到标准输出 
          -exec: find命令对匹配的文件执行该参数所给出的shell命令,相应的命令形式为 
            'command'{} \; (注意{}和\之间的空格) 
          -ok 和 -exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 
        options有如下几种: 
        -name :按照文件名查找文件 
        -perm :按照文件权限来查找文件 
        -user :按照文件属主来查找文件 
        -group :按照文件所属的组来查找文件 
        -mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime 和-ctime选项,但它们都和-mtime选项相似。 
        -size n[c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。 
        -nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在 
        -newer file1 !file2查找更改时间比文件file1新但比文件file2旧的文件 
        -depth 先查找指定目录有无匹配文件,若无则再在子目录中查找 
        -type 查找某一类型的文件,如 
          b :块设备文件 
          d:目录 
          e:字符设备文件 
          p;管道文件 
          l:符号链接文件 
          f:普通文件 
    (3)find命令举例 
          find -name "*.txt" -print 查找txt结尾的文件并输出到屏幕上 
          find /cmd ".sh" -print 查找/cmd目录下所有sh文件,并输出 
          find . -perm 755 -print 查找当前目录下权限为755的文件,并输出 
          find `pwd` -user root -print 查找当前目录下属主为root的文件,并输出 
          find ./ -group sunwill -print 查找当前目录下所属主是sunwill的文件 
          find /var -mtime -5 -print 查找/var目录下更改时间为5天内的所有文件 
          find /var -mtime +5 -print 查找/var目录下更改时间为5天以前的所有文件 
          find /var -newer "myfile1" ! -newer "myfile2" -print 查找/var目录下比myfile1新,但是比myfile2旧的所有文件。 
          find /var -type d -print 查找/var目录下所有目录 
          find /var -type l -print 查找/var目录下所有的符号链接文件。 
          find . -size +1000000c -print 查找当前目录下大于1000000字节的文件 
          find / -name "con.file" -depth -print 查找根目录下有无"con.file",若无则在其子目录中查找 
          find . -type f -exec ls -l {} \; 查找当前目录下是否有普通文件,若有则执行ls -l 
    (4)xargs命令 
          在 使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec。不幸的是,有些系统对能够传递给exec的命 令长度有限制,这样find命令运行几分钟之后就算出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs的用处所在,特别是与 find命令一起使用,exec会发起多个进程,而xargs会多个,只有一个 
          find ./ -perm -7 -print | xargs chmod o-w 查找权限为7的文件并传递给chmod处理
    

    相关文章

      网友评论

        本文标题:linux搜索log文件的内容

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