管道符、重定向与环境变量(Linux就该这么学第三章)

第三章

3.1 输入输出重定向

  1. 输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输入到屏幕的数据信息写入到指定文件中。
  2. 输出重定向分为标准输出重定向和错误输出重定向两种不同的技术,以及清空写入和追加写入两种模式。
  • 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令重输入
  • 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕
  • 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕
  1. 输入重定向符号及作用
    • 命令 < 文件:将文件作为命令的标准输入
    • 命令 << 分界符:从标准输入中读入,知道遇见分界符才停止
    • 命令 < 文件1 > 文件2:将文件1作为命令的标准输入并将标准输出到文件2
  2. 输出重定向符号及作用
    • 命令 > 文件:将标准输出重定向到一个文件中(清空原文件数据)
    • 命令 2> 文件:将错误输出重定向到一个文件中(清空原文件数据)
    • 命令 >> 文件:将标准输出重定向向到文件中(追加到原有内容后面)
    • 命令 2>> 文件:将标准错误...
    • 命令 &>> 文件:将标准输出与错误输出共同写入文件中(追加)

image-20211129170311921

3.2 管道符命令

  1. 管道符的作用是“把前一个命令原本要输出到屏幕的标准正常数据当做是后一个命令的标准输入”

  2. 在Liunx中同时按下键盘 Shift + \ 可以输入管道符,执行格式为“命令A | 命令B”

  3. 例子:

    • 统计被限制登录用户个数命令

      grep "/sbin/nologin" /etc/passwd | wc -l

    • 用翻译的形式查看/etc目录中的文件列表及属性

      ls -l /etc/ | more

    • 通道符和passwd命令的--stdin参数结合,用一条命令完成密码重置

      echo "newpassword" | passwd --stdin root

    • 编辑好的邮件内容与标题一起“打包”,一条命令实现邮件发送

      echo "Content" | mail -s "Subject" emailaddress

    • 让用户一直输入内容,直到用户输入了其自定义的分界符时才结束输入

      mail -s "Readme" root@xxx.com << over

  4. 管道符可以在多个命令组合中使用,比如:命令A | 命令B | 命令C

3.3 命令行通配符

  1. 星号(*)代表匹配零个或多个字符
  2. 问号(?)代表匹配单个字符
  3. 中括号内加上数字[0-9] 代表匹配0~9之间的单个数字字符
  4. [abc] 代表匹配a、b、c三个字符中任意一个字符

常用转义字符

  1. 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串
  2. 单引号(''):转义其中所有的变量为单纯的字符串
  3. 双引号(""):保留其中的变量属性,不进行转义处理
  4. 反引号(``):把其中的命令执行后返回结果

image-20211130093523974

说明:$$作用为显示当前程序的进程ID号码,所以需要使用\对第一个$符号进行转义

3.5 重要的环境变量

  1. 基本概念

    • 变量是计算机系统用于保存可变值的数据类型
    • 在Linux系统中变量名称一般都是大写
    • 可以直接通过变量名称来提取到对应的变量值
    • Linux系统中环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放地址等
  2. Linux系统执行命令的4个步骤

    在Linux系统中一切都是文件,命令也不例外

    • 第一步:判断用户是否以绝对路径或相对路径的方式输入命令,如果是的话直接执行

    • 第二步:Linux系统检查用户输入命令是否为“别名命令”,即用一个自定义的命令名称来替换原来的命令名称。

      可以使用 alias 命令创建一个属于自己的别名命令,格式为:" alias 别名=命令 "

      如果要取消一个别名命令,使用 unalias 命令,格式为:" unalias 别名 "

      举例说明:rm 命令删除文件会要求我们再确认是否执行删除操作,其实这就是Linux系统为了防止用户误删文件而特意设置的rm别名命令。

      image-20211130095854142

      操作说明:首先给 rm -i 命令起一个别名为 rm,之后使用rm命令就会提示是否删除,需要输入y才能确认删除。然后我们再删除rm别名,之后再删除文件就不会再提示是否删除了。

    • 第三步:Bash解释器判断用户输入是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;绝大部分时间输入的是外部命令,这些步骤交由步骤4继续处理。可以使用“ type 命令” 判断用户输入的命令是内部命令还是外部命令。

    • 第四步:系统在多个路径中查找用户输入的命令文件,定义的这些路径的变量就叫做PATH ,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器会从这些位置中逐个查找。

      PATH是由多个路径值组成的变量,每个路径之间使用冒号间隔。

      image-20211130101046668

      为什么不能将当前目录(.)添加到PATH中?

      原因是尽管可以添加,从而在某些情况下可以让用户免去输出命令所在路径的麻烦。但如果黑客在比较常用的公共目录/tmp中存放了一个与ls或cd命令同名的木马文件,而用户恰巧在公共目录执行这些命令,就极有可能中招。

  3. Liunx中最最重要的10个环境变量

变量名称 作用
HOME 用户的主(家)目录
SHELL 用户在使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

拓展:

  • Liunx作为一个多用户多任务操作系统,为每个用户提供独立的、合适的工作运行环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值。
  • su 用于切换用户身份
  • 变量由固定的变量名与用户或系统设置的变量值两部分组成,可以自行创建变量来满足工作需求。
  • 自行创建的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。可以使用 export 命令将其提升为全局变量。

image-20211130102729539

原文地址:https://www.cnblogs.com/hzpeng/p/15623076.html