Linux学习Day4:管道符、重定向与环境变量

  仅仅是学习Linux系统的命令还不够,只有把多个命令按照自己想要的方式进行组合使用,才能提高工作效率。今天的内容主要是关于如何把命令组合在一起使用,使得输入的命令更准确、更高效,也为接下来的Shell脚本打好基础。

一、输入输出重定向


  输入重定向:指把文件内容导入到命令中。

  输出重定向:指把原本要输出到屏幕的数据信息写入到指定的文件中,又分为标准输出重定向错误输出重定向两种。

    •   标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令输入。
    •   标准输出重定向(STDIN,文件描述符为1):默认输出到屏幕。
    •   错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

  要区别对待两种输出信息,第一种是命令的标准输出信息,第二种是命令的报错提示信息(错误输出),如下所示:

[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1032 Feb 18  2019 anaconda-ks.cfg      //ls命令的标准输出信息,也是我们想要的信息
[root@linuxprobe ~]# 
[root@linuxprobe ~]# ls -l xxxxx
ls: cannot access xxxxx: No such file or directory      //因为xxxxx文件不存在,所以输出的是报错提示信息
[root@linuxprobe ~]# 

  对于输入重定向来说,用到的符号及其作用如下所示:

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止(分界符可以自己定义,如"EOF"、"over"等)
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

  对于输出重定向来说,用到的符号及其作用如下所示:

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原来文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有文件的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >>  文件 2>&1  或  命令 &>> 文件 将标准输出和错误输出共同写入到文件中(追加到原有内容的后面)

  通过标准输出重定向将 man ls 命令原本要输出到屏幕的信息写入文件readme.txt中,然后显示readme.txt文件中的内容,具体命令如下:

[root@linuxprobe ~]# man ls > readme.txt
[root@linuxprobe ~]# 
[root@linuxprobe ~]# cat readme.txt 
LS(1)                                                      User Commands                                                     LS(1)



NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information about the FILEs (the current directory by default).  Sort entries alphabetically if none of -cftuvSUX nor
       --sort is specified.
---------------------------------省略部分输出内容---------------------

  通过覆盖写入模式向readme.txt文件中写入一行数据,然后再通过追加写入模式再写入一行数据,具体命令如下:

[root@linuxprobe ~]# echo "Welcome to my home" > readme.txt      //清除原有的内容
[root@linuxprobe ~]# echo "Learning Linux is happy to me" >> readme.txt    //追加至原来文件内容的后面
[root@linuxprobe ~]# 
[root@linuxprobe ~]# cat readme.txt 
Welcome to my home
Learning Linux is happy to me
[root@linuxprobe ~]# 

  如果想把命令的报错信息写入文件,该如何操作呢?

[root@linuxprobe ~]# ls -l xxxxx
ls: cannot access xxxxx: No such file or directory     //提示xxxxx文件不存在
[root@linuxprobe ~]# 
[root@linuxprobe ~]# ls -l xxxxx 2> readme.txt    //将报错信息写入readme.txt文件
[root@linuxprobe ~]# 
[root@linuxprobe ~]# cat readme.txt 
ls: cannot access xxxxx: No such file or directory    //报错信息写入readme.txt文件成功
[root@linuxprobe ~]# 

  输入重定向相对来说比较冷门,在工作中遇到的概率较小。输入重定向的作用是把文件内容直接导入命令中。接下来使用输入重定向把readme.txt文件导入给wc -l命令,统计文件内容的行数。

[root@linuxprobe ~]# cat readme.txt 
ls: cannot access xxxxx: No such file or directory
[root@linuxprobe ~]# 
[root@linuxprobe ~]# wc -l < readme.txt    //使用输入重定向
1
[root@linuxprobe ~]# 

二、管道命令符


  管道符,即“|”,其执行的格式“命令A | 命令B”,当然可以这样使用:“命令A | 命令B | 命令C”。管道命令符的作用是把前一个命令A原本要输出到屏幕的标准正常数据当作是后一个命令B的标准输入,比如把搜索命令的输出值传递给统计命令,具体如下:

扫描二维码关注公众号,回复: 9308100 查看本文章
[root@localhost ~]# grep "/sbin/nologin" /etc/passwd | wc -l    
19
[root@localhost ~]# 

  再比如用翻页的形式查看/etc目录中的文件列表及属性信息:

[root@localhost ~]# ls -l /etc/ | more
total 1168
-rw-r--r--.  1 root root       16 Jun 18  2019 adjtime
-rw-r--r--.  1 root root     1518 Jun  7  2013 aliases
-rw-r--r--.  1 root root    12288 Jun 18  2019 aliases.db
drwxr-xr-x.  2 root root      236 Jun 18  2019 alternatives
-rw-------.  1 root root      541 Mar 31  2016 anacrontab
-rw-r--r--.  1 root root       55 Nov  4  2016 asound.conf
-rw-r--r--.  1 root root        1 Oct 30  2018 at.deny
drwxr-x---.  3 root root       43 Jun 18  2019 audisp
drwxr-x---.  3 root root       83 Jun 18  2019 audit
drwxr-xr-x.  2 root root       22 Jun 18  2019 bash_completion.d
-rw-r--r--.  1 root root     2853 Nov  5  2016 bashrc
drwxr-xr-x.  2 root root        6 Nov  6  2016 binfmt.d
-rw-r--r--.  1 root root       38 Nov 29  2016 centos-release
--More--

  在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过管道符和passwd命令的--stdin参数相结合,可以用一条命令来完成密码重置的操作:

[root@localhost ~]# echo "123456" | passwd --stdin root     //一条命令修改root用户密码
Changing password for user root.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# 

猜你喜欢

转载自www.cnblogs.com/xuliang-daydayup/p/12337711.html