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 ~]#

 

posted @ 2020-10-14 14:58  周青春-ZD  阅读(168)  评论(0编辑  收藏  举报