Linux就该这么学

第二章:管道符、重定向与环境变量

    管道符命令    管道符命令“|”的作用是将前一个命令的标准输出当作后一个命令的标准输入,格式为:“命令A | 命令B”。(管道符命令可以多次使用:命令A | 命令B | 命令C)

             例1: 想要统计所有不允许登陆系统的用户数量怎么用一条命令执行:

                首先找出被限制登陆用户的命令是:# grep "/sbin/nologin" /etc/passwd

                然后统计文本行数的命令是:# wc -l

                于是我们可以通过管道符命令“|”将这两个命令链接起来就可以实现目标输出了:# grep "/sbin/nologin" /etc/passwd | wc -l

             例2: 向hxm用户发送一封邮件¹:# echo "Content" | mail -s "Subject" hxm

                  使用非交互式²设置用户密码,将root的密码修改为sewy:# echo "sewy" | passwd --stdin root

                 注释1:linux发送邮件可能会遇到发送失败,不支持邮件发送的情况,这时候就需要查看下inet_protocols协议的配置了:# /usr/sbin/postconf |grep inet_protocols  输出:inet_protocols = all

                     这时候就需要修改ipv4:# vi /etc/postfix/main.cf  将其中的 inet_protocols = all 改为 inet_protocols = ipv4 然后重启postfix:# service postfix restart

                 注释2:非交互式就是指shell不与你交互,直接执行文件或命令并结束完成;交互式是指shell等待你的输入,并执行你提交的命令,需要shell与你进行交互。

    输入输出重定向  对于输出或输入做一些处理。                               ----------------------------------------------  10-25  ------------------------------------------

             标准输入(STDIN,文件描述符为0):默认从键盘输入,为0时表示从其他文件或命令的输出。

             标准输出(STDOUT,文件描述符为1):默认输出到屏幕,为1时表示是文件。

             错误输出(STDERR,文件描述符为2):默认输出到屏幕,为2时表示是文件。

             符号          作用                                             符号            作用

             命令 > 文件      将标准输出重定向到一个文件中(清空原有文件的数据)                      命令 < 文件        将文件作为命令的标准输入

             命令 2> 文件      将错误输出重定向到一个文件中(清空原有文件的数据)                      命令 << 分界符      从标准输入中读取,直到遇到“分界符”才停止

             命令 >> 文件      将标准输出重定向到一个文件中(追加到原有内容的后面)                     命令 < 文件1 > 文件2   将文件1作为命令的标准输入并将标准输出输出到文件2

             命令 2>> 文件      将错误输出重定向到一个文件中(追加到原有内容的后面)

             命令 >> 文件 2>$1   将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

             例如:

                将man命令的帮助文档写入到/root/man.txt中:# man bash > /root/man.txt

                向readme.txt中写入一行文字:# echo "Welcome to the world of Linux!" > readme.txt

                向readme.txr中追加一行文字:# echo "Linux is so easy" >> readme.txt

                查看readme.txt中的内容:# cat readme.txt 

                Welcome to the world of Linux!

                Linux is so easy

                把readme.txt文件作为输入重定向给wc -l命令来计算行数,命令等同于“cat readme.txt | wc -l”:# wc -l < readme.txt    输出:2

                用echo、mail和管道符命令(|)发给hxm用户一封邮件,但内容只能有一句话:# echo "Hello Hxm!" | mail -s "Title" hxm

                如果不局限于一句话且标题为“Mail”的邮件,那就逐行输入,直到分界符才停止:# mail -s "Mail" 824087197@qq.com << over

                > Hello Hxm!

                > How are you?

                > I heard that you are using millet phone, really?

                > I think that must be cool.

                > over

                正常情况下输入分界符后会结束输入操作并发送邮件,不会有报错信息。

                如果咱们用“ls”命令查看文件信息,若文件不存在则将报错信息输出到“/root/stderr.txt”中:# ls heheda 2> /root/stderr.txt

                如果“cat /root/stderr.txt”后文件为空,则表示有heheda文件,所以没有报错信息,如果不为空,则里面的文件内容为:ls: cannot access heheda: No such file or directory

    命令行通配符  为了更方便的对命令进行批量的特殊处理。               --------------------------------------------------------   11-15   ----------------------------------------------------

            通配符    含义            通配符    含义            通配符    含义            通配符    含义

            *      匹配零个或多个字符      ?      匹配任意单个字符      [0-9]    匹配范围内的数字       [abc]    匹配已出的任意字符

            另外bash解释器还支持很多的特殊字符扩展:

            字符      作用           字符      作用            字符      作用          字符       作用

            \(反斜杠)  转义后面单个字符      ''(单引号)   转义所有的字符      ""(双引号)   变量依然生效      ``(反引号)   执行命令语句

            例如执行uname -a 后可以查看本机内核的版本与架构信息(反引号里面的命令会被执行):

            # echo `uname -a`    输出:Linux iZ28jc899pfZ 3.10.0-123.9.3.el7.x86_64 #1 SMP Thu Nov 6 15:06:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

    实用的PATH变量  alias命令用于设置命令的别名,格式为:“alias 别名=命令”。例如可以将询问复制命令起个别名:# alias cp="cp -i"

              unalias命令则用于取消命令的别名,格式为:“unalias 别名”。

              内部命令:属于解释器内部的;    外部命令:独立于解释器外的命令文件;

              想要判断某个命令是“内部命令”,还是“外部命令”,可以通过执行“type 命令名称”来判断,例如:type pwd。输出结果为:pwd is a shell builtin。

    重要的环境变量   在Linux中有许多的环境变量,我们可以用“env”命令来查看到它们。            ---------------------------------------------   11-16   ---------------------------------------------

              变量是由固定的“变量名”与用户或系统设置的“变量值”两部分组成的,如果有需求可直接修改。

              变量名称    作用             变量名称    作用          变量名称    作用                变量名称    作用

              HOME     用户的主目录的“家”      MAIL      邮件信箱文件      PS1      bash提示符             EDITOR    默认文本编辑器

              SHELL     当前的shell是哪个程序     LANG      语言数据       HISTFILESIZE history命令存储数量         HOME     用户主目录

              HISTSIZE   历史命令记录条数       RANDOM    随机数字       PATH      在路径中的目录查找执行文件

              可以用“echo $HOME”来查看当前用户的家目录是哪个,一般是“/root”。

              例:假设需要设置一个变量“WORKDIR”,让用户执行“cd $WORKDIR”就登陆到/home/workdir目录中,该怎么实现?

                定义方法:变量名称=新的值    查看方法:echo $变量名称

                首先创建该目录:# mkdir /home/workdir      然后设置变量:# WORKDIR=/home/workdir    然后执行:# cd $WORKDIR 就可以了

                不过该变量名称只能当前用户可以使用,其他用户使用不了,因为它是一个局部的变量,如果想让每一个用户都可以使用该变量的话,需要将它设置成全局变量:export命令用户将局部变量提升为全局变量,格式

                为:“export 变量名[=变量值]”。将WORKDIR设置成全局变量:# export WORKDIR。这样的话其他用户就都可以使用该变量了。

 

posted @ 2016-10-23 23:29  Jakey_Hong  阅读(408)  评论(0编辑  收藏  举报