标准输入(stdin)是命令的输入,默认指向键盘;标准输出(stdout)是命令的输出,默认指向屏幕;标准错误(stderr)是命令错误信息的输出,默认指向屏幕。
输入重定向是指把文件导入命令中,输出重定向则是指把原本要输出到屏幕的信息写入文件中。在日常的学习和工作中,相较于输入重定向,输出重定向的使用频率更高。输出重定向可分为标准输出重定向和标准错误重定向两种不同的技术,以及清空写入与追加写入两种方式。
● 标准输入(stdin,文件描述符为0)重定向:默认从键盘输入,也可从其他文件或命令中输入。
● 标准输出(stdout,文件描述符为1)重定向:默认输出到屏幕。
● 标准错误(stderr,文件描述符为2)重定向:默认输出到屏幕。
例如,查看两个文件的属性信息,其中第二个文件是不存在的,虽然对这两个文件的操作都会分别在屏幕上输出一些信息,但对这两个文件操作的差异其实是很大的。
在上述命令中,名为abc的文件是存在的,输出信息是该文件的相关权限、所有者、所属组、文件大小及修改时间等信息,这也是标准输出信息。名为abcd的第二个文件是不存在的,因此在执行完ls命令后会显示报错提示信息,这也是标准错误信息。要想把原本输出到屏幕上的信息写入文件当中,就要区别这两种输出信息。
对于输入重定向来讲,用到的符号及其作用如表1.11所示。
表1.11 输入重定向用到的符号及其作用
对于输出重定向来讲,用到的符号及其作用如表1.12所示。
表1.12 输出重定向用到的符号及其作用
对于重定向中的标准输出模式,可以省略文件描述符1,而标准错误模式的文件描述符2是必需的。我们先来小试牛刀,通过标准输出重定向将“man bash”命令原本要输出到屏幕的信息写入文件readme.txt中,然后显示readme.txt文件中的内容。具体命令如下:
虽然都采用了输出重定向技术,但不同命令的标准输出信息和标准错误信息还是有区别的。例如,查看当前工作目录中某个文件的信息,这里以readme.txt文件为例,由于这个文件是真实存在的,因此使用标准输出即可将原本要输出到屏幕的信息写入文件中;如果这个文件不存在,则标准错误重定向依然会把信息输出到屏幕上。如果这个文件不存在,使用标准错误重定向也可将原本要输出到屏幕的信息写入文件中。
输入重定向相对来说用得少一些,在工作中遇到的概率会小一些。输入重定向的作用是把文件直接导入命令中。例如,使用输入重定向把readme.txt文件导入“wc -l”命令中,并统计文件内容的行数,具体命令如下:
管道符的作用可以用一句话来概括,即把前一个命令原本要输出到屏幕的标准输出当成后一个命令的标准输入。
例如,使用grep命令搜索关键词“/sbin/nologin”,并找出所有被限制登录系统的用户。借助管道符,可以把下面这两条命令:
合并成一条。合并的方法是:把搜索命令(grep命令)的输出值传递给统计命令(wc命令),也就是把原本要输出到屏幕的用户信息再交给wc命令做进一步的处理,因此,只需要把管道符放到两条命令之间即可,这简直是太方便了!合并后的命令和结果如下:
也可以将管道符添加到其他的命令中。例如,可以用翻页的形式查看目录“/etc”中的文件列表及属性信息:
大家千万不要误以为管道符只能在一个命令组合中使用一次,我们完全可以按照以下的格式来使用管道符:
变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。Linux系统中的环境变量是用来定义系统运行环境的一些参数,如不同用户的home目录、邮件保存目录等。
使用env命令可以查看Linux系统的环境变量。表1.13给出的是Linux系统中最重要的10个环境变量。
表1.13 Linux系统中最重要的10个环境变量
变量是由固定的变量名,以及用户或系统设置的变量值两部分组成的,可以根据工作需求来自行创建变量。例如,设置一个名称为WORKDIR的变量,方便用户更轻松地进入一个层次较深的目录。具体的命令如下: