1、输入输出重定向
-
重定向分类
- 标准输入重定向(STDIN,文件描述符为0):把文件导入到命令中。
- 标准输出重定向(STDOUT,文件描述符为1):正常的信息会写入文件,错误的信息链接至终端(打印到屏幕上)
- 错误输出重定向(STDERR,文件描述符为2):错误的信息会写入文件,正常的信息链接至终端(打印到屏幕上)
-
标准输出重定向
对于重定向中的标准输出模式,可以省略文件描述符1不写,但错误输出模式的文件描述符2一定要写
eg:ls -l examples.desktop > readme.txt
假设文件examples.desktop存在,则会将该文件的具体信息写入文件readme.txt中,并且文件readme.txt中的数据会被清空。(覆盖写入)
eg:echo "This is a file" >> readme.txt
将字符串信息This is a file追加到文件readme.txt中。(追加写入)
eg:ls -l xxxxx > readme.txt
假设文件xxxxx不存在,则屏幕会打印信息ls: 无法访问'xxxxx': 没有那个文件或目录,并且文件readme.txt中的内容被清空
eg:ls -l xxxxx >> readme.txt
假设文件xxxxx不存在,则屏幕会打印信息ls: 无法访问'xxxxx': 没有那个文件或目录,并且没有内容追加到文件readme.txt中。 -
错误输出重定向
特别注意:文件描述符和重定向符之间不能有空格
eg:ls -l examples.desktop 2> readme.txt
假设文件examples.desktop存在,则屏幕中会打印出文件examples.desktop的具体信息,并且文件readme.txt中的内容被清空
eg:ls -l examples.desktop 2>> readme.txt
假设文件examples.desktop存在,则屏幕中会打印出文件examples.desktop的具体信息,并且没有内容追加到文件readme.txt中。
eg:ls -l xxxxxx 2> readme.txt
假设文件xxxxxx不存在,则错误信息会写入文件readme.txt中,使用cat命令后会显示:ls: 无法访问'xxxxx': 没有那个文件或目录,屏幕不显示内容。
eg:ls -l xxxxxx 2>> readme.txt
假设文件xxxxxx不存在,则错误信息会追加到文件readme.txt中。 -
不区分标准输出和错误输出(正常和错误的信息均会写入文件)
eg:ls -l examples.desktop &> readme.txt ls -l xxxxx &>> readme.txt使用
cat命令后的输出结果为:-rw-r--r-- 1 lh lh 8980 11月 16 2021 examples.desktop ls: 无法访问'xxxxx': 没有那个文件或目录 -
输入重定向
eg:wc -l < examples.desktop
把文件examples.desktop导入到命令wc -l,最后输入文件的行数:240
eg:wc -l examples.desktop
标准执行格式,最后输出:240 examples.desktop,即行数+文件名称
2、管道命令符
Tips:把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入
- 执行格式:
命令A | 命令B | 命令C | ...
eg:grep /sbin/nologin /etc/passwd | wc -l
把原本要输出到屏幕的用户信息列表交给wc命令作进一步的加工,最后输出行数。
eg:ls -l /etc/ | more
以翻页的形式查看/etc目录中的文件列表及属性信息,原本这些信息会大量输出到屏幕中。
eg:ps -aux | grep bash
搜索与bash有关的进程信息。
eg:ps -aux | grep bash | tee result.txt
搜索与bash有关的进程信息,并同时输出到屏幕和文件中。
3、命令行的通配符
- 通配符
*
eg:ls -l /dev/sda*
匹配所有在/dev目录中且以sda开头的文件。通配符*可以放在前面、中间和后面的任意一个位置。 - 通配符
?
eg:ls -l /dev/sda?
匹配所有在/dev目录中、以sda开头并且后面仅跟随一个字符的文件。 - 通配符
[num-num]
eg:ls -l /dev/sda[0-9]
匹配所有在/dev目录中、以sda开头并且后面仅跟随0~9之间的单个数字的文件。 - 通配符
[num]
eg:ls -l /dev/sda[135]
匹配所有在/dev目录中、以sda开头并且后面仅跟随{1,3,5}的单个数字的文件。 - 通配符
{}
eg:touch {AA,BB,CC}.conf
一口气创建多个文件,本例创建的文件分别是AA.conf、BB.conf和CC.conf
eg:echo file{1,2,3,4}
打印多个信息,本例分别file1、file2、file3和file4
4、常用的转义字符
- 转义字符
""和\
eg:
先定义一个名为PRICE=5 echo "Price is \$$PRICE"PRICE的变量并赋值为5,然后输出对应的字符串。本例的输出结果为Price is $5。注:转义字符""意为保留其中的变量属性,不做转义处理;转义字符\意为使反斜杠后面的一个变量变为单纯的字符。 - 转义字符
''
eg:
本例的输出结果为PRICE=5 echo 'Price is \$$PRICE'Price is \$$PRICE。注:转义字符''意为转义其中所有的变量为单纯的字符串。 - 转义字符反引号
eg:
本例中使用echo `uname -a`echo命令来查看本机的Linux版本的内核信息。注:转义字符反引号意为把其中的命令执行后返回结果。 - 带双引和不带双引的区别
eg:
返回的结果均是echo AA BB CC echo "AA BB CC"AA BB CC,两者的区别在于第一种执行方式用户无法确定有几个参数,有可能AA BB CC当作一个参数直接输出到屏幕中,也有可能把AA、BB和CC分别输出到屏幕中。
技巧:参数中出现了空格,就加双引号,否则不用加
5、重要的环境变量
- Linux执行命令的4个步骤
- 判断用户是否以绝对用户或相对路径的方式输入命令(如
/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断。 - Linux系统检查用户输入的命令是否为“别名命令”
系统默认rm命令别名为rm -i,即删除文件时会弹出提示信息。
eg:alias cdhome='cd ~'
自定义命令的别名,将命令cd ~别名为cdhome;即使用cdhome命令则可以返回家目录,但下次开机则会失效。
eg:unalias cdhome
取消别名,使得别名失效,执行本例后cdhome命令将失效。 - Bash解释器判新用户输入的是内部命令还是外部命令。内部命令是解释器内的指令,会被直接执行,而用户在绝大部分时间输人的是外部命令,这些命令交由步骤4继续
eg:type echo //输出信息:echo is a shell builtin type uptime //输出信息: uptime is /usr/bin/uptime - 系统在多个路径中查找用户输人的命令文件,而定义这些路径的变量叫作 PATH。作用是告诉 Bash 解释器待执行的命令可能有放的位置,然后 Bash 解释器就会在这些位置中逐个查找(地址以冒号分隔)。
eg:echo $PATH //输出信息: /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
- 环境变量
HOME
eg:echo $HOME
查看用户的主目录(Linux是一个多用户的操作系统,每个用户所处的工作环境不同)。 - 自行创建变量
eg:
设置一个名称为mkdir ~/example WORKDIR=~/exampleWORKDIR的变量,执行命令cd $WORKDIR就可以跳转到目录~/example。 - 扩大变量的使用范围
eg:export WORKDIR
使用export命令后,Linux下的所有用户都能够使用变量WORKDIR - 取消变量
eg:unset WORKDIR
之后WORKDIR变量将消失。
文章介绍了Linux命令行中的输入输出重定向,包括标准输入、输出和错误输出的重定向,以及追加写入和覆盖写入的区别。此外,还讲解了管道命令符如何将一个命令的输出作为另一个命令的输入,以及通配符在文件名匹配中的使用。最后,提到了一些重要的转义字符和环境变量的作用,如PATH变量在查找命令路径中的角色。
484

被折叠的 条评论
为什么被折叠?



