美文网首页Linux
《Linux就该这么学 》笔记(六)| 管道符、重定向和环境变量

《Linux就该这么学 》笔记(六)| 管道符、重定向和环境变量

作者: Ricsy | 来源:发表于2019-07-25 18:33 被阅读36次


    1. 重定向

    重定向技术的 5 种模式

    • 标准覆盖输出重定向
    • 标准追加输出重定向
    • 错误覆盖输出重定向
    • 错误追加输出重定向
    • 输入重定向
    重定向 缩写 文件描述符 描述
    标准输入重定向 STDIN 0 默认从键盘输入,也可从其他文件或命令中输入
    标准输出重定向 STDOUT 1 默认输出到屏幕
    错误输出重定向 STDERR 2 默认输出到屏幕

    提示:

    • 对于重定向中的标准输出模式,可以省略文件描述符 1 不写
    • 对于重定向中的错误输出模式,文件描述符 2是必须要写的

    输入重定向

    符号 作用
    命令 < 文件 将文件作为命令的标准输入
    命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
    命令 <文件1> <文件2> 将文件 1 作为命令的标准输入并将标准输出到文件 2

    输出重定向

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

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

    如:

    1. 通过标准输出重定向将 man bash 命令原本要输出到屏幕的信息
      写入到文件 readme.txt 中,然后显示 readme.txt 文件中的内容
      man bash > readme.txt
      cat readme.txt

    2. 通过覆盖写入模式向 readme.txt 文件写入一行数据(该文件
      中包含上一个实验的 man 命令信息),然后再通过追加写入模式向文件再写入一次数据
      echo "HelloWorld\!" > readme.txt
      echo "Hi" >> readme.txt

    2. 管道命令符

    把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入
    命令 A | 命令 B
    命令 A | 命令 B | 命令 C|...

    如:

    1. 找出被限制登录用户个数
      grep "/sbin/nologin" /etc/passwd | wc -l

    2. 翻页的形式查看/etc 目录中的文件列表及属性信息
      ls -l /etc/ | more

    3. 在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和 passwd 命令的--stdin 参数相结合,我们可以用一条命令来完成密码重置操作(不过会在history看到,不安全)
      echo "123456" | passwd --stdin root

    3. 命令行的通配符

    通配符就是通用的匹配信息的符号

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

    如:

    ls -alh /dev/sda*

    ls -alh /dev/sda?

    ls -alh /dev/sda[0-9]

    ls -alh /dev/sda[137]

    4. 常用的转义字符

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

    如:

    PRICE=5
    echo "Price is $PRICE"

    echo "Price is $$PRICE"

    提示:

    • 美元符号与变量提取符号合并后的$$作用是显示当前程序的进程 ID

    echo "Price is \$$PRICE"

    5. 重要的环境变量

    • Linux 系统中一切都是文件
    • 变量是计算机系统用于保存可变值的数据类型
    • 在 Linux 系统中,变量名称一般都是大写的,这是一种约定俗成的规范
    • 可以直接通过变量名称来提取到对应的变量值 echo [变量名]
    • Linux系统中的环境变量是用来定义系统运行环境的一些参数
    • PATH 变量的作用是设定解释器搜索所执行的命令的路径

    问题:

    • 为什么不能将当前目录(.)添加到 PATH 中呢? ”
      原因是尽管可以将当前目录(.)添加到 PATH 变量中,从而在某些情况下可以让用户免去输入命令所在路径的麻烦。但是,如果黑客在比较常用的公共目录/tmp 中存放了一个与 ls 或 cd 命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招了

    Linux 系统中最重要的 10 个环境变量

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

    变量是由固定的变量名与用户或系统设置的变量值两部分组成的

    完全可以自行创建变量,来满足工作需求。例如设置一个名称为WORKDIR 的变量,方便用户更轻松地进入一个层次较深的目录
    mkdir /home/workdir
    WORKDIR=/home/workdir

    提示:

    • 这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用,export 命令将其提升为全局变量
    • export WORKDIR

    更新中.....


    相关文章

      网友评论

        本文标题:《Linux就该这么学 》笔记(六)| 管道符、重定向和环境变量

        本文链接:https://www.haomeiwen.com/subject/dvsqrctx.html