《That's how Linux should learn》—charpter3

第三章 管道符、重定向与环境变量

与文件读写操作有关的重定向技术的5种模式——标准覆盖输出重定向、标准追加输出重定向、错误覆盖输出重定向、错误追加输出重定向以及输入重定向,解决输出信息的保存问题。

3.1 输入输出重定向

输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到 屏幕的数据信息写入到指定文件中。相较于输入重定向,我们使用输出重定向的频率更高,所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及清空写入与追加写入两种模式。
➢ 标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命 令中输入。
➢ 标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。➢ 错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。
《That's how Linux should learn》—charpter3
《That's how Linux should learn》—charpter3
对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描述符 2 必须要写。
ls -l linuxprobe > /root/stderr.txt
ls -l xxxxxx 2> /root/stderr.txt
输入重定向的作用是把 文件直接导入到命令中。接下来使用输入重定向把 readme.txt 文件导入给 wc -l 命令,统计一下文件中的内容行数。
wc -l < readme.txt == cat readme.txt | wc -l的管道符命令组合。

管道命令符

作用:把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命 令的标准输入”。
如用翻页的形式查看/etc 目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本看不清楚): ls -l /etc/ | more
修改密码时,输入两次密码进行确认,通过把管道符和passwd命令的
–stdin 参数相结合,我么可以一条命令来完成密码重置操作:
echo “linuxprobe” | passwd --stdin root
在发送电子邮件时,默认采用交互式的方式来进行,我们完全可以利用一条结合了管道符的命令语句,把编辑好的内容与标题一起“打包”,最终用这一条命令实现邮件的发送。 echo “Content” | mail -s “Subject” linuxprobe 。
下面这条自造的命令就结合使用了 mail 邮件命令与输入重定向的分界符,其目的是让用 户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入。
mail -s “Readme” [email protected] << over

命令行的通配符

ps:在Linux系统中,硬盘设备文件都是以 sda 开头并且存放到了/dev 目录中。
通配符就是通用的匹配信息的符号,比如星号()代 表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~ 9 之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意 一个字符。
ls -l /dev/sda
ls -l /dev/sda? ls -l /dev/sda[0-9] ls -l /dev/sda[135]

常用的转义字符

➢ 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
➢ 单引号(’’):转义其中所有的变量为单纯的字符串。
➢ 双引号(""):保留其中的变量属性,不进行转义处理。
➢ 反引号(``):把其中的命令执行后返回结果。
echo "Price is PRICE"PRICE" ,美元符 号与变量提取符号合并后的作用是显示当前程序的进程 ID 号码,要想让第一个“$”乖乖地作为美元符号,那么就需要使用反斜杠(\)来进行转义,将这 个命令提取符转义成单纯的文本,去除其特殊功能。:echo “Price is $$PRICE” 。
反引号的示例:echo uname -a

重要的环境变量

在 Linux 系统中,变量名称一般都是大 写的,这是一种约定俗成的规范。。Linux 系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件 存放位置等。
命令在 Linux 中的 执行分为 4 个步骤:
1、判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话,则直接执行。
2、Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为 “alias 别名=命令”。若要取消一个命令别名,则是用 unalias 命令,格式为“unalias 别名”。
3、Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继 续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。
4、系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存放 的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成的 变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对 Linux 命令的查找。 echo $PATH
在接手一台 Linux 系统后要在执 行命令前先检查 PATH 变量中是否有可疑的目录。
《That's how Linux should learn》—charpter3
Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行 环境,因此,一个相同的变量会因为用户身份的不同而具有不同的值。
echo $HOME
su - linuxprobe 切换用户身份
echo $HOME
自己创建变量,例如:
mkdir /home/workdir
WORKDIR=/home/workdir
cd $WORKDIR
pwd
但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。 如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了 。 export WORKDIR