linux下的重定向、管道符与环境变量

发布时间:2020/11/30 作者:天马行空 阅读(1123)

1、输入输出重定向
输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。
标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入。
标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。
输入重定向中用到的符号及其作用

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


输出重定向中用到的符号及其作用

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


追加写入日志:

[root@netljc ~]# echo '11111'>>test.log
[root@netljc ~]# echo '11111'>>test.log
[root@netljc ~]# echo '11111'>>test.log
[root@netljc ~]# echo '11111'>>test.log
[root@netljc ~]# cat test.log 
11111
11111
11111
11111



将pwd的帮助文档写入日志文件:

[root@netljc ~]# man pwd
[root@netljc ~]# man pwd >> pwd.log


2、管道命令符
管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”,只需要把管道符放到两条命令之间即可。

查询被限制登陆的用户个数:

[root@netljc ~]# grep /sbin/nologin /etc/passwd | wc -l
37


一条命令修改系统用户密码:

[root@netljc ~]# echo '123456' | passwd --stdin root

更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。


3、命令行的通配符
顾名思义,通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。

查看硬盘设备文件

[root@netljc ~]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 10月 27 17:16 /dev/sda
brw-rw----. 1 root disk 8, 1 10月 27 17:16 /dev/sda1
brw-rw----. 1 root disk 8, 2 10月 27 17:16 /dev/sda2
[root@netljc ~]# ll /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 10月 27 17:16 /dev/sda1
brw-rw----. 1 root disk 8, 2 10月 27 17:16 /dev/sda2
[root@netljc ~]# ll /dev/sda[135]
brw-rw----. 1 root disk 8, 1 10月 27 17:16 /dev/sda1


4、常用的转义字符
4 个最常用的转义字符如下所示。
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
单引号(''):转义其中所有的变量为单纯的字符串。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。

[root@netljc ~]# price=5
[root@netljc ~]# echo "price is $price"
price is 5
[root@netljc ~]# echo "price is $$price"
price is 45707price
[root@netljc ~]# echo "price is \$$price"
price is $5


5、重要的环境变量
命令在linux中执行的4个步骤:
第一步
判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。

第二步
检查命令是否是一个别名命令。定义一个命令别名:alias 别名=命令;取消别名:unalias 别名。

[root@iz2ze9pf0xgaj16n65280pz ~]# alias xx=pwd
[root@iz2ze9pf0xgaj16n65280pz ~]# xx
/root
[root@iz2ze9pf0xgaj16n65280pz ~]# unalias xx
[root@iz2ze9pf0xgaj16n65280pz ~]# xx

第三步
判断用户输入的是内部命令还是外部命令,内部命令直接执行,外部命令交给第四步,可以使用type 命令来查看是否是内部命令。

第四步
系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。

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

PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对Linux 命令的查找。可以使用 env 命令来查看到 Linux 系统中所有的环境变量。
Linux 系统中最重要的 10 个环境变量

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


Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值。

[root@netljc ~]# echo $HOME
/root
[root@netljc ~]# su netljc
[netljc@netljc root]$ echo $HOME
/home/netljc


在工作中我们可以将经常使用到的值定义成一个变量,但直接定义的变量作用范围有限,只能被当前用户使用,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了。

[netljc@netljc root]$ PRICE=300
[netljc@netljc root]$ echo $PRICE
300
[netljc@netljc root]$ export $PRICE
[netljc@netljc root]$ su root
密码:
[root@netljc ~]# echo $PRICE


关键字linux