• Linux就该这么学28期——Day04 管道符、重定向符、环境变量


    3.1输入输出重定向  顾名思义就是将输入输出的结果指向另一个地方  >  <

    输出重定向分两类:

      标准输出重定向:  一个“>”会清空源文件信息  两个">"可以追加不清空

              >  覆盖

              >>  追加

      错误输出重定向:  报错信息不能通过标准重定向符输出到文件中,需要使用错误输出重定向符

              2>  覆盖

              2>>  追加

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

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

    输入重定向符:

      < 文件        将文件作为命令的标准输入

      << 分界符        从标准输入中读入,直到遇见分界符才停止

      < 文件1 > 文件2   将文件1作为命令的标准输入并将标准输出到文件2

    [root@linuxprobe ~]# wc -l < readme.txt      信息流传给命令
    2
    [root@linuxprobe ~]# wc -l /etc/passwd
    38 /etc/passwdwc -l /etc/passwd”是一种非常标准的“命令+参数+对象”的执行格式
    而这次的“wc -l < readme.txt”则是将readme.txt文件内的内容通过操作符导入到的命令中,没有被当作命令对象进行执行的过程
    因此wc命令只能读到信息流的数据,没有文件名称的信息。

    3.2 管道命令符  任意门

    命令A | 命令B  A执行的结果数据 传给B的动作继续执行

    [root@linuxprobe ~]# grep /sbin/nologin /etc/passwd | wc -l
    40
    passwd     --stdin    参数    接收标准输入或管道符进来的密码
    把管道符和passwd命令的--stdin参数相结合,可以用一条命令来完成密码重置操作。
    [root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root
    Changing password for user root.
    passwd: all authentication tokens updated successfully.

    3.3 命令行的通配符

    *  匹配 零个或多个字符

    ?  匹配单个字符

    [0-9]·  单个数字

    [a-z]  单个小写字母

    [A-Z]  单个大写字母

    [1,3,5]  匹配精准数字

    {1,2,23}  大括号可以匹配23  强匹配

    [1,4,23]   中括号,只要字符出现就会匹配  2   3   23

    [:alpha:]  任意字母

    [:upper:]  任意大写字母

    [:lower:]  任意小写字母

    [:digit:]  任意数字

    [:alnum:]  任意字母加数字

    [:punct:]  标点符号

    通配符不仅可以被用于搜索文件或代替被通配的字符,还可以与创建文件的命令相结合,一口气创建出好多个文件。唯一区别是要用到大括号,并且字段之间用逗号间隔:
    
    [root@linuxprobe ~]# touch {AA,BB,CC}.conf
    [root@linuxprobe ~]# ls -l *.conf
    -rw-r--r--. 1 root root 0 Sep 22 01:54 AA.conf
    -rw-r--r--. 1 root root 0 Sep 22 01:54 BB.conf
    -rw-r--r--. 1 root root 0 Sep 22 01:54 CC.conf
    再或者输出一些指定的信息,玩法特别多,接下来大家就自己开发吧~:
    
    [root@linuxprobe ~]# echo file{1,2,3,4,5}
    file1 file2 file3 file4 file5

    3.4 转义字符

    反斜杠():使反斜杠后面的一个变量变为单纯的字符。

    单引号('   '):转义其中所有的变量为单纯的字符串

    双引号("    "):保留其中的变量属性,不进行转义处理。

    反引号(`    `):把其中的命令执行后返回结果。

    $$  显示当前程序的进程ID

    [root@linuxprobe ~]# PRICE=5
    [root@linuxprobe ~]# echo "Price is $PRICE"
    Price is 5
    接下来,我们希望能够输出“Price is $5”,即价格是5美元的字符串内容,但碰巧美元符号与变量提取符号合并后的$$作用是显示当前程序的进程ID号码,于是命令执行后输出的内容并不是我们所预期的:
    
    [root@linuxprobe ~]# echo "Price is $$PRICE" 
    Price is 3767PRICE
    要想让第一个“$”乖乖地作为美元符号,那么就需要使用反斜杠()来进行转义,将这个命令提取符转义成单纯的文本,去除其特殊功能:
    
    [root@linuxprobe ~]# echo "Price is $$PRICE"
    Price is $5

    参数中如果出现了空格,那么就加双引号,如果参数中没有空格,那就不用加~

    3.5 重要的环境变量

    命令在Linux中的执行分为四个步骤:

    1. 绝对路径、相对路径 直接执行

    2. 别名  alias  执行其本身命令  “alias 别名=命令”  unalias    取消别名 

    3.内部命令  使用率仅0.1%  “type 命令名称”来判断用户输入的命令是内部命令还是外部命令:

    4.外部命令  PATH:解释器小助手  告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。

    [root@linuxprobe ~]# echo $PATH
    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
    [root@linuxprobe ~]# PATH=$PATH:/root/bin
    [root@linuxprobe ~]# echo $PATH
    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin

    接手新电脑后,执行命令前先检查PATH变量中是否有可疑目录

    env命令  查看当前Linux系统中所有的环境变量

    重要的10个环境变量:

    HOME    用户的主目录
    SHELL  用户在使用的shell解释器的名称
    HISTSIZE  输出的历史命令记录条数
    HISTFILESIZE  保存的历史命令条数
    MAIL  邮件保存路径
    LANG  系统语言。语系名称
    RANDOM  生成随机数字
    PS1  Bash解释器的提示符
    PATH  定义解释器搜索用户执行命令的路径
    EDITOR  用户默认的文本编辑器
    [root@linuxprobe ~]# echo $PS1
    [u@h W]$
    [root@linuxprobe ~]# echo $MAIL
    /var/spool/mail/root
    [root@linuxprobe ~]# echo $PATH
    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
    [root@linuxprobe ~]# echo $HOME
    /root
    [root@linuxprobe ~]# echo $SHELL
    /bin/bash
    [root@linuxprobe ~]# echo $HISTSIZE
    1000
    [root@linuxprobe ~]# echo $HISTFILESIZE
    1000
    [root@linuxprobe ~]# echo $LANG
    en_US.UTF-8

    自行创建的变量属于个人私有,想要变为全局变量需要使用export命令将其提升。

    直接在终端设置的变量能够立即生效,但重启服务器后就会消失掉,因此我们需要将变量和变量值写入到.bashrc或者.bash_profile文件中以确保永久能使用它们。
    [root@linuxprobe ~]# mkdir /home/workdir [root@linuxprobe ~]# WORKDIR=/home/workdir [root@linuxprobe ~]# cd $WORKDIR [root@linuxprobe workdir]# pwd /home/workdir 但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用: [root@linuxprobe workdir]# su linuxprobe [linuxprobe@linuxprobe ~]$ cd $WORKDIR [linuxprobe@linuxprobe ~]$ echo $WORKDIR [linuxprobe@linuxprobe ~]$ exit 如果工作需要,可以使用export命令将其提升为全局变量,这样其他用户也就可以使用它了: [root@linuxprobe ~]# export WORKDIR [root@linuxprobe ~]# su linuxprobe [linuxprobe@linuxprobe ~]$ cd $WORKDIR [linuxprobe@linuxprobe workdir]$ pwd /home/workdir 后续要是不用这个变量了,那么就顺手执行下unset命令取消掉它吧: [root@linuxprobe ~]# unset WORKDIR [root@linuxprobe ~]#
  • 相关阅读:
    [Android教程]通过Intent分享数据内容给其他应用程序
    【Android您问我讲】Android 2.x中使用actionbar Actionbarsherlock的使用
    PHP按比例生成縮略圖片
    PHP實現任務計畫
    javascript下漢字和Unicode編碼互轉代碼
    js存/讀取cookie函數
    php Captcha 練習
    PHP概率抽獎
    讓iframe自適應高度
    簡單的 PHP 將sql文件導入數據庫程序
  • 原文地址:https://www.cnblogs.com/Eric-Chou/p/13814894.html
Copyright © 2020-2023  润新知