linux学习笔记二(I/O重定向,管道)

前言:今天学习的是I/O重定向。

目的:帮助复习巩固。

内容:

        1.I/O重定向就是改变输入和输出的来源和去向,>代表的是输出重定向  ,<代表的是输入重定向(这两个重定向都是会覆盖掉重定向文件的内容 ,>>表示的追加重定向,没有输入追加重定向

    2.bash有一个开关功能的set,这个可以对一些东西进行开关,自行man。如:set -C是启用禁止对已经存在的文件进行重定向,但是即使是开启这个功能,那么也是可以强制的进行加上>|。set +C就是关闭以上的功能。

    3.标准的输入STDIN 0 ,标准输出STDOUT 1 ,标准错误STDERR 2。注意:标准的输入、输出和标准错误不是一个输出流 。

       1) 如:ls /varr > /tmp/var.out 这是不能够执行的,提示ls: /varr: No such file or directory。表示标准规的输出流和标准输入流不是一个流。

            改进以上方法:ls /varr 2> /tmp/var.out

            同理:ls /var 2> /tmp/var.out 虽然能够执行(在屏幕上显示),但是也是不能够重定向到标准的错误到/tmp/var.out

       2) 如果:想要错误的就用标准错误,正确就用标准的正确,那么

                ls /varr > /tmp/var.out 2> /tmp/var.out(注意这两个文件可以一样也可以不一样)

            还有一种方法就是:&>

                如:  ls /varr &> /tmp/var.out (将输出和错误都定向到一个文件中)。

    4.谈谈输入重定向;

        对于输入重定向不是每个命令都能用的,cat可以用,因为cat单个命令是要等待输入,tr也可以。

就是说能够在进行输入的指令可以用输入重定向。

        例如:cat < /etc/fstab 可以将fstab文件中的内容变为cat的输入部分。

             tr ‘a-z‘ ‘A-Z‘ < /etc/fstab

    5.虽然没有输入的最佳但是<< 可以表示文档的生成。

        cat << END 表示在输入的字符中遇到END则表示结束。

        这里有个重要的功能:

        cat >> filename << EOF(这个顺序是没有要求的) 表示要对文件filename进行追加内容,并且是遇到EOF则输入结束。

    6.谈谈管道:

        管道就是可以一个命令得到的结果给另外一个命令使用。

        如:echo "hello world" | tr ‘a-z‘ ‘A-Z‘

            echo "redhat" | passwd --stdin dongzi

            cut -d: -f1 /etc/passwd | sort

        注意:tee命令属于一个入口两出口的命令。

            如:echo "hello world" | tee /tmp/hello.out

                可以显示一次,然后在写入到文件中。

        管道的几道练习题:

        1)统计usr/bin目录下的文件数;

            答案:ls /uer/bin |wc -l

        2)取出当前系统上所有用户的shell,要求每种shell只显示一次。

            答案:cut -d: -f7 /etc/passwd|sort -u

        3)思考:如何显示/var/log目录下的每个文件的内容类型。

            答案:file /var/log.

        4)取出/etc/inittab文件的第6行。

            答案;head -6 /etc/inittab|tail -1

        5)取出/etc/passwd 文件中倒数第9个用户的用户名和shell,显示到屏幕上并且保存到/tmp/users文件中;

            答案:head -9 /etc/passwd |tail -1 |cut -d: -f1,7|tee /tmp/users 

        6)显示/etc目录下所有的以pa开头的文件并且统计个数;

            答案:ls -d /etc/pa*|wc -l

        7)不使用文本编辑器,将alias cls = clear 一行的内容添加到当前的用户.bashrc文件中;

            答案:echo "alias cls=clear" >>~/.bashrc

本文出自 “天道酬勤” 博客,谢绝转载!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。