linux I/O重定向

标准输入(stdin 0),标准输出(stdout 1),标准错误(stderr 2)


重定向标准输出

    ls -l /usr/bin > test.txt  //标准输出至文件test.txt,写之前先清空文件。

    ls -l /usr/bin >> test.txt  //追加写入至文件。

重定向标准错误

    ls -l /usr/bin 2> test.error.txt

重定向标准输出和标准错误至同一文件

    ls -l /usr/bin > test.txt 2>&1  //重定向标准输出至文件text.txt,然后把标准错误重定向到标准输出。
    // or
    ls -l /usr/bin &> test.txt

位存储桶(a bit bucket) /dev/null

    ls -l /usr/bin 2> /dev/null  //把不需要的输出直接丢掉。

cat 拷贝单个/多个文件内容至标准输出(屏幕)

    cat test.txt error.txt 

    cat // 不接文件名,默认标准输出为键盘,标准输出为屏幕,输入一行,立刻会打印一行。

    cat > test.txt  // 默认标准输入为键盘,标准输出为test.txt,可以直接键盘写入文件。
    insert first line
    insert second line
    CTRL+D 终止输入作为文件EOF

    cat test.txt // 打印文件内容

管道线(pipelines)

命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被一个 shell 特性所利用,这个特性叫做管道线。使用管道操作符 “|”(竖杠),一个命令的标准输出可 以管道到另一个命令的标准输入:

    command1 | command2  //注意管道线连接的是两个命令

过滤器

管道线经常用来对数据完成复杂的操作。有可能会把几个命令放在一起组成一个管道线。通常,以这种方式使用的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。

    ls /bin /usr/bin | sort | less   //先排序再输出

    ls /bin /usr/bin | sort | uniq | less  // 先排序,后去除重复列,再输出。

    ls /bin /usr/bin | sort | uniq -d | less //先排序,后找到重复列,然后输出。 “-d” 参数取出重复项。

wc - 打印行数(lines -l),单词数(words -m),字节数(bytes -c),字符数(character -m)。

    wc test.txt
    20 64664 455454 test.txt

    wc -lmbc  test.txt

grep 正则匹配查找

    ps aux | grep nginx -ab10  // -ab 显示关键字上下10行内容
    ps aux | grep -v nginx     // -v 取反,及只打印不包含nginx关键字的行
    ps aux | grep -i nginx     // -i 匹配时忽略大小写

head/tail 打印头尾10行数据

    head -n 100 text.txt

    tail -n 500 text.txt

    tail -f text.txt  // 不停打印写入的新日志。

tee -从 Stdin 读取数据,并同时输出到 Stdout 和文件

为了和我们的管道隐喻保持一致,Linux 提供了一个叫做 tee 的命令,这个命令制造了一 个 “tee”,安装到我们的管道上。tee 程序从标准输入读入数据,并且同时复制数据到标准输出 (允许数据继续随着管道线流动)和一个或多个文件。当在某个中间处理阶段来捕捉一个管道 线的内容时,这很有帮助。这里,我们重复执行一个先前的例子,这次包含 tee 命令,在 grep 过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt:
    ls /usr/bin | tee ls.txt | grep zip 
    bunzip2 
    bzip2 
    ....

猜你喜欢

转载自blog.csdn.net/YL_max/article/details/81227814