Linux基础(2) 管道符、重定向与环境变量

1、输入输出重定向

  • 重定向分类

    1. 标准输入重定向(STDIN,文件描述符为0):把文件导入到命令中。
    2. 标准输出重定向(STDOUT,文件描述符为1):正常的信息会写入文件,错误的信息链接至终端(打印到屏幕上)
    3. 错误输出重定向(STDERR,文件描述符为2):错误的信息会写入文件,正常的信息链接至终端(打印到屏幕上)
  • 标准输出重定向
    对于重定向中的标准输出模式,可以省略文件描述符1不写,但错误输出模式的文件描述符2一定要写
    egls -l examples.desktop > readme.txt
    假设文件examples.desktop存在,则会将该文件的具体信息写入文件readme.txt中,并且文件readme.txt中的数据会被清空。(覆盖写入)
    egecho "This is a file" >> readme.txt
    将字符串信息This is a file追加到文件readme.txt中。(追加写入)
    egls -l xxxxx > readme.txt
    假设文件xxxxx不存在,则屏幕会打印信息ls: 无法访问'xxxxx': 没有那个文件或目录 ,并且文件readme.txt 中的内容被清空
    egls -l xxxxx >> readme.txt
    假设文件xxxxx不存在,则屏幕会打印信息ls: 无法访问'xxxxx': 没有那个文件或目录 ,并且没有内容追加到文件readme.txt 中。

  • 错误输出重定向
    特别注意:文件描述符和重定向符之间不能有空格
    egls -l examples.desktop 2> readme.txt
    假设文件examples.desktop存在,则屏幕中会打印出文件examples.desktop的具体信息,并且文件readme.txt 中的内容被清空
    egls -l examples.desktop 2>> readme.txt
    假设文件examples.desktop存在,则屏幕中会打印出文件examples.desktop的具体信息,并且没有内容追加到文件readme.txt 中。
    egls -l xxxxxx 2> readme.txt
    假设文件xxxxxx 不存在,则错误信息会写入文件readme.txt 中,使用cat命令后会显示:ls: 无法访问'xxxxx': 没有那个文件或目录,屏幕不显示内容。
    egls -l xxxxxx 2>> readme.txt
    假设文件xxxxxx 不存在,则错误信息会追加到文件readme.txt 中。

  • 不区分标准输出和错误输出(正常和错误的信息均会写入文件)
    eg

    ls -l examples.desktop &> readme.txt
    ls -l xxxxx &>> readme.txt
    

    使用cat命令后的输出结果为:

    -rw-r--r-- 1 lh lh 8980 1116  2021 examples.desktop
    ls: 无法访问'xxxxx': 没有那个文件或目录
    
  • 输入重定向
    egwc -l < examples.desktop
    把文件examples.desktop导入到命令wc -l,最后输入文件的行数:240
    egwc -l examples.desktop
    标准执行格式,最后输出:240 examples.desktop,即行数+文件名称

2、管道命令符

Tips:把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入

  • 执行格式:命令A | 命令B | 命令C | ...
    eggrep /sbin/nologin /etc/passwd | wc -l
    把原本要输出到屏幕的用户信息列表交给wc命令作进一步的加工,最后输出行数。
    egls -l /etc/ | more
    以翻页的形式查看/etc目录中的文件列表及属性信息,原本这些信息会大量输出到屏幕中。
    egps -aux | grep bash
    搜索与bash有关的进程信息。
    egps -aux | grep bash | tee result.txt
    搜索与bash有关的进程信息,并同时输出到屏幕和文件中。

3、命令行的通配符

  • 通配符*
    egls -l /dev/sda*
    匹配所有在/dev目录中且以sda开头的文件。通配符*可以放在前面、中间和后面的任意一个位置。
  • 通配符?
    egls -l /dev/sda?
    匹配所有在/dev目录中、以sda开头并且后面仅跟随一个字符的文件。
  • 通配符[num-num]
    egls -l /dev/sda[0-9]
    匹配所有在/dev目录中、以sda开头并且后面仅跟随0~9之间的单个数字的文件。
  • 通配符[num]
    egls -l /dev/sda[135]
    匹配所有在/dev目录中、以sda开头并且后面仅跟随{1,3,5}的单个数字的文件。
  • 通配符{}
    egtouch {AA,BB,CC}.conf
    一口气创建多个文件,本例创建的文件分别是AA.confBB.confCC.conf
    egecho file{1,2,3,4}
    打印多个信息,本例分别file1 file2 file3 file4

4、常用的转义字符

  • 转义字符""\
    eg
    PRICE=5
    echo "Price is \$$PRICE"
    
    先定义一个名为PRICE的变量并赋值为5,然后输出对应的字符串。本例的输出结果为Price is $5。注:转义字符""意为保留其中的变量属性,不做转义处理;转义字符\意为使反斜杠后面的一个变量变为单纯的字符。
  • 转义字符''
    eg
    PRICE=5
    echo 'Price is \$$PRICE'
    
    本例的输出结果为Price is \$$PRICE。注:转义字符''意为转义其中所有的变量为单纯的字符串。
  • 转义字符反引号
    eg
    echo `uname -a`
    
    本例中使用echo命令来查看本机的Linux版本的内核信息。注:转义字符反引号意为把其中的命令执行后返回结果。
  • 带双引和不带双引的区别
    eg
    echo AA BB CC
    echo "AA BB CC"
    
    返回的结果均是AA BB CC,两者的区别在于第一种执行方式用户无法确定有几个参数,有可能AA BB CC当作一个参数直接输出到屏幕中,也有可能把AABBCC分别输出到屏幕中。
    技巧:参数中出现了空格,就加双引号,否则不用加

5、重要的环境变量

  • Linux执行命令的4个步骤
  1. 判断用户是否以绝对用户或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断。
  2. Linux系统检查用户输入的命令是否为“别名命令”
    系统默认rm命令别名为rm -i,即删除文件时会弹出提示信息。
    egalias cdhome='cd ~'
    自定义命令的别名,将命令cd ~别名为cdhome;即使用cdhome命令则可以返回家目录,但下次开机则会失效。
    egunalias cdhome
    取消别名,使得别名失效,执行本例后cdhome命令将失效。
  3. Bash解释器判新用户输入的是内部命令还是外部命令。内部命令是解释器内的指令,会被直接执行,而用户在绝大部分时间输人的是外部命令,这些命令交由步骤4继续
    eg
    type echo  //输出信息:echo is a shell builtin
    type uptime //输出信息: uptime is /usr/bin/uptime
    
  4. 系统在多个路径中查找用户输人的命令文件,而定义这些路径的变量叫作 PATH。作用是告诉 Bash 解释器待执行的命令可能有放的位置,然后 Bash 解释器就会在这些位置中逐个查找(地址以冒号分隔)。
    eg
     echo $PATH //输出信息: /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
    
  • 环境变量HOME
    egecho $HOME
    查看用户的主目录(Linux是一个多用户的操作系统,每个用户所处的工作环境不同)。
  • 自行创建变量
    eg
    mkdir ~/example
    WORKDIR=~/example
    
    设置一个名称为WORKDIR的变量,执行命令cd $WORKDIR 就可以跳转到目录~/example
  • 扩大变量的使用范围
    eg:export WORKDIR
    使用export命令后,Linux下的所有用户都能够使用变量WORKDIR
  • 取消变量
    eg:unset WORKDIR
    之后WORKDIR变量将消失。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elec Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值