美文网首页
LinuxCommandLine -- 4

LinuxCommandLine -- 4

作者: liaozb1996 | 来源:发表于2018-04-23 19:55 被阅读0次

    I/O redirection input/output redirection
    Everything is file 3个不同的文件:

    • stdin
    • stdout
    • stderr

    重定向输出

    标准输出

    # 重定向 stdout
    ls -l /usr/bin/ > ls-output.txt  # 覆盖
    ls -l /usr/bin/ >> ls-output.txt  # 追加
    

    错误输出

    file descriptor: 每个文件流(file stream)都有一个数字标识。其中,前三个分别是:

    • 0: stdin
    • 1: stdout
    • 2: stderr

    重定向错误输出

    ls no-exist 2> ls-error.txt
    

    # 将消息重定向到 stderr
    $ cat > error.sh
    #!/bin/bash
    echo 'error message' >&2
    
    $ chmod +x error.sh
    $ ./error.sh
    error message
    
    # 将 stderr 重定向到 文件
    $ ./error.sh 2> error.txt
    
    同时重定向标准输出和错误输出
    # 方式一:将 stdout 重定向到文件,再将 stderr 重定向到 stdout (顺序不能颠倒,适用于老版本的shell)
    $ ls no-exist > ls-output.txt 2>&1
    
    
    # 方式二:新版本的 bash
    $ ls no-exist &> ls-output.txt
    $ ls no-exist &>> ls-output.tx
    

    /dev/null

    ls message-not-wanted > /dev/null
    

    管道

    管道(pipeline):将第一个命令的输出传给第二个命令的输入

    $ ls -l /usr/bin/ | less
    

    filer

    sort:

    • -r: reverse
    • -u: unique
    $ ls
    file_001  file_010  file_019  file_028  file_037  file_046  file_055  file_064  file_073  file_082  file_091  file_100
    file_002  file_011  file_020  file_029  file_038  file_047  file_056  file_065  file_074  file_083  file_092
    file_003  file_012  file_021  file_030  file_039  file_048  file_057  file_066  file_075  file_084  file_093
    file_004  file_013  file_022  file_031  file_040  file_049  file_058  file_067  file_076  file_085  file_094
    file_005  file_014  file_023  file_032  file_041  file_050  file_059  file_068  file_077  file_086  file_095
    file_006  file_015  file_024  file_033  file_042  file_051  file_060  file_069  file_078  file_087  file_096
    file_007  file_016  file_025  file_034  file_043  file_052  file_061  file_070  file_079  file_088  file_097
    file_008  file_017  file_026  file_035  file_044  file_053  file_062  file_071  file_080  file_089  file_098
    file_009  file_018  file_027  file_036  file_045  file_054  file_063  file_072  file_081  file_090  file_099
    $
    $ ls | sort | head -n 5
    file_001
    file_002
    file_003
    file_004
    file_005
    $
    $ ls | sort -r | head -n 5
    file_100
    file_099
    file_098
    file_097
    file_096
    

    # 将两个目录的程序结合起来,排序,去除重复 -u, --unique
    ls /usr/bin/ /bin/ | sort -u
    

    uniq重复的对已排序的内容进行去重

    • uniq -d:(duplicate) 仅显示重复的内容
    # 去重
    $ ls /usr/bin/ /bin/ | sort | uniq
    # 仅显示有重复的行
    $ ls /usr/bin/ /bin/ | sort | uniq -d
    

    wc 计算行数,单词数,字节数

    $ cat > data.txt
    Hello World
    I am using Linux
    
    $ wc data.txt  # lines words bytes
     2  6 29 data.txt
    
    #最长的一行有16个字符
    $ wc -L data.txt
    16 data.txt
    
    # 共有 653 个程序
    $ ls /usr/bin/ | wc -l
    653
    

    grep:支持正则表达式,将每一行和 模式 (pattern) 匹配,成功则输出

    • -i:不区分大小写
    • -v:输出不匹配的项
    # 查看系统中有多少软件是更压缩文件相关的
    $ ls /usr/bin/ /bin/ | grep zip
    gpg-zip
    gunzip
    gzip
    gpg-zip
    gunzip
    gzip
    

    • head -n 5 data.txt:查看前5行
    • tail -n 5 data.txt:查看后5行
    • tail -f: 查看后10行,并监视文件,当有新内容时,立即显示
    # 查看前5行
    $ ls /usr/bin/ | head -n 5
    [
    addr2line
    alias
    apropos
    ar
    
    • 以上的命令,当给定文件名作为参数时,命令从文件中读取内容作为输入
    • 还可以用于管道中

    tee:从标准输出中读取内容,并将内容写入一个文件和标准输出

    tee 通常用于捕捉管道中的内容

    $ ls /usr/bin/ | tee programs.txt | grep zip
    gpg-zip
    gunzip
    gzip
    
    $ wc -l programs.txt
    653 programs.txt
    

    cat

    cat 除了查看简单文本外,还可以...

    将下载的文件拼接起来

    $ ls
    hi.mp3_1  hi.mp3_2  hi.mp3_3
    
    $ cat hi.mp3_* > hi.mp3  # 系统会按顺序展开通配符
    

    快捷的文本编辑器

    # <Ctrl-D> 表示 EOF,文本末尾
    $ cat > hello.txt
    Hello World, I am using Linux right now.<Ctrl-D>

    相关文章

      网友评论

          本文标题:LinuxCommandLine -- 4

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