zoukankan      html  css  js  c++  java
  • Linux 就该这么学 CH03 管道符、重定向和环境变量

    0 概述

    1 输入输出重定向

    重定向技术有5种模式:

    • 标准覆盖输出重定向
    • 标准追加输出重定向
    • 错误覆盖输出重定向
    • 错误追加输出重定向
    • 输入重定向

    输入重定向是将文件导入到命令中。
    输出重定向是将输入到屏幕的数据写入到指定文件中。输出重定向分为标准输出和错误输出两种,模式有追加和覆盖2种。

    • 标准输入重定向(STDIN,文件描述符为0)。
    • 标准输出重定向(STDOUT,文件描述符为1)。
    • 错误输出重定向(STDERR,文件描述符为2)。
      在这里插入图片描述
      在这里插入图片描述
      对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式文件描述符2必须写。
    [root@RHEL Desktop]# echo "i love linux." > test.txt
    [root@RHEL Desktop]# cat test.txt
    i love linux.
    [root@RHEL Desktop]# echo "i love linux." > test.txt
    [root@RHEL Desktop]# cat test.txt
    i love linux.
    [root@RHEL Desktop]# echo "i love linux." >> test.txt
    [root@RHEL Desktop]# cat test.txt
    i love linux.
    i love linux.
    [root@RHEL Desktop]# 
    

    如果标准和错误输出重定向只使用一种,那么另外一种依然会打印到屏幕上。
    当用户执行一个shell脚本时,可以使用错误重定向将错误信息保存到文本中。
    输入重定向是将文件内容导入命令中。
    [root@linuxprobe ~]# wc -l < test.txt

    2 管道符命令

    管道符命令 | 是把前一个命令原本要输出到屏幕上的标准正常数据当做后一个命令的标准输入。格式为"命令A|命令B|命令C"。
    例1:用grep 命令来筛选nologin账户,然后再统计有多少个。

    [root@RHEL Desktop]# grep "sbin/nologin" /etc/passwd | wc -l
    33
    

    例2:用管道符修改密码

    [root@RHEL Desktop]# echo "111" | passwd --stdin root
    Changing password for user root.
    passwd: all authentication tokens updated successfully.
    

    例3:使用mail邮件命令和输入重定向的分界符,让用户一直输入内容直到用户输入自定义的分界符,才结束输入。

    [root@RHEL Desktop]# mail -s readme root@felix << over
    > i love linux.
    > you love linux.
    > we love linux.
    > over
    [root@RHEL Desktop]# 
    

    上个例子中over是分界符,输入over 才会结束输入。

    3)命令行的通配符

    • *代表匹配0个或多个字符。
    • ?代表匹配单个字符。必须有一个字符与之对应。
    • 后面可以跟条件来限制字符的范围,比如 ?[0-9],限制数字,?[a-z]限制小写字母。
    [root@RHEL Desktop]# ls -l /dev/sda*
    brw-rw----. 1 root disk 8, 0 Aug 28  2019 /dev/sda
    brw-rw----. 1 root disk 8, 1 Aug 28  2019 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Aug 28  2019 /dev/sda2
    [root@RHEL Desktop]# ls -l /dev/sda?
    brw-rw----. 1 root disk 8, 1 Aug 28  2019 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Aug 28  2019 /dev/sda2
    [root@RHEL Desktop]# ls -l /dev/sda[0,2,4,6,8]
    brw-rw----. 1 root disk 8, 2 Aug 28  2019 /dev/sda2
    [root@RHEL Desktop]# 
    

    4) 常用的转义字符

    转义字符是用来处理输入的特殊数据。

    • 反斜杠 (): 使后面的一个变量变为单纯的字符串。
    • 单引号(’ '):使其中所有的变量变为单纯的字符串。
    • 双引号(" "):保留其中的变量属性,不进行转义处理。
    • 反引号(` `) :把其中的命令执行后返回结果。反引号在esc键下面,英文输入法。
    [root@RHEL Desktop]# PRICE=5
    [root@RHEL Desktop]# echo "Price is $PRICE"
    Price is 5
    [root@RHEL Desktop]# echo "Price is $PRICE"
    Price is $PRICE
    [root@RHEL Desktop]# echo 'Price is $PRICE'
    Price is $PRICE
    [root@RHEL Desktop]# echo `uname -a`
    Linux RHEL 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
    

    5) 重要的环境变量

    变量使计算机系统用于保存可变值的数据类型。一般变量名大写。可以通过变量名直接得到变量的值。
    Linux的执行命令分为4个步骤:

    1. 判断用户是否是以相对路径还是以绝对路径的方式输入命令,是则执行。
    2. 检测用户输入的是否是“别名变量”。
    3. Bash判断用户输入的命令是内部命令还是外部命令。内部命令会直接执行,外部命令则有第4步执行。
    4. 系统在多个路径中查找用户输入的命令文件,定义路径的变量叫PATH。PATH是告诉Bash待执行的命令可能存放的位置。PATH由多个路径组成,每个路径之间用 冒号: 间隔。
      在这里插入图片描述
      因为linux 是一个多用户多任务的操作系统,每个用户是独立的工作运行环境,所以一个相同的变量会因为用户的不同而具有不同的值。
      注: Linux中的一切都是文件,命令就是命令文件,根据命令名称搜索命令文件。PATH是命令文件的集合路径。

    1) alias

    alias命令用于给变量创建别名或者查看一个别名命令的实际命令,格式为: alias 别名=命令。(=两边不能有空格)。如:alias rm=‘rm -i’ ,命令有参数则应用" "或 ’ '括起来。

    [root@RHEL Desktop]# alias rm
    alias rm='rm -i'
    

    2) unalias

    unalias命令用于取消一个命令别名。格式为:unalias 别名。

    [root@RHEL Desktop]# unalias rm
    [root@RHEL Desktop]# alias rm
    bash: alias: rm: not found
    [root@RHEL Desktop]# alias rm='rm -i'
    [root@RHEL Desktop]# alias rm
    alias rm='rm -i'
    

    3) type

    type用于查看命令是内部命令还是外部命令。格式为 “type 命令名称”。

    [root@RHEL Desktop]# type ls
    ls is aliased to `ls --color=auto'
    [root@RHEL Desktop]# 
    

    4)env

    env命令来查看linux系统中所有的环境变量。

    [root@RHEL Desktop]# env
    XDG_VTNR=1
    XDG_SESSION_ID=1
    DBUS_STARTER_ADDRESS=unix:abstract=/tmp/dbus-ramjWdxtkg,guid=689276827ab3ad6ef0db54d65d65ca90
    
    

    5)export

    export可以将变量提升为全局变量,这样其他用户也可以使用。格式为:export 变量名。

    [root@RHEL Desktop]# PRICE=5
    [root@RHEL Desktop]# echo $PRICE
    5
    [root@RHEL Desktop]# su felix]
    su: user felix] does not exist
    [root@RHEL Desktop]# su felix
    [felix@RHEL Desktop]$ echo $PRICE
    
    [felix@RHEL Desktop]$ exit
    exit
    [root@RHEL Desktop]# export PRICE
    [root@RHEL Desktop]# su felix
    [felix@RHEL Desktop]$ echo $PRICE
    5
    [felix@RHEL Desktop]$ 
    
    
  • 相关阅读:
    Flink实例(117):FLINK-SQL应用场景(16)以upsert的方式读写Kafka数据——以Flink1.12为例(二)
    Flink实例(116):FLINK-SQL应用场景(15)以upsert的方式读写Kafka数据——以Flink1.12为例(一)
    数据挖掘实践(17):基础理论(十七)数据挖掘基础(四)模型解释
    数据挖掘实践(16):基础理论(十六)数据挖掘基础(三)特征工程(二)性能度量与评估方法
    rust 可变变量
    Rust学习(32):智能指针-Rc<T>
    rust 高级编程
    rust 所有权
    rust智能指针
    Anbox:容器中的 Android,anboxandroid
  • 原文地址:https://www.cnblogs.com/fhyfhy/p/11760984.html
Copyright © 2011-2022 走看看