三、深入Shell
1、通配符
Shell命令中可以使用通配符来同时匹配多个文件方便操作。Linux的通配符除了 MSDOS中常用的“*
”和“?
”外,还包括“[]
”和“!
”组成的字符组模式,能够扩充需要匹配的文件的范围。
1. 通配符“*
”
通配符“*
”代表任意长度的任何字符,如“a*
”可表示诸如“abc
”“about
”等以“a
”开头的字符串。需要注意的是通配符不能与开头的文件名匹配。例如,“*
”不能匹配到名为“.file
”的文件,而必须使用“.*
”才能匹配到类似“.file
”的文件。
2. 通配符“?
”
通配符“?
”代表任何一个字符,如“a?
”就可表示诸如“ab
”“at
”等以“a
”开头并仅有两个字符的字符串。
3. 字符组通配符“[ ]
”“-
”和“!
”
“[ ]
”表示指定的字符范围,“[ ]
”内的任意一个字符都用于匹配。“[ ]
”内的字符范围可以由直接给出的字符组成,也可以由起始字符、和终止字符组成。例如,“[abc]*
”或“[a-c]*
”都表示所有以“a
”“b
”或者“C
”开头的字符串。而如果使用“!
”,则表示不在此范围之内的其他字符。
通配符在指定一系列文件名时非常有用,例如:
命令 | 作用 |
---|---|
ls *.png | 列出所有PNG图片文件 |
ls a? | 列出首字母是a, 文件名只有两个字符的所有文件 |
ls [abc]* | 列出首字母是a、b或者c的所有文件 |
ls [!abc]* | 列出首字母不是a、b、c的所有文件 |
ls [a-z]* | 列出首字母是小写字母的所有文件 |
2、重定向
Linux中通常利用键盘输人数据,而命令的执行结果和错误信息都输出到屏幕。也就是说,Linux的标准输人是键盘,标准输出和标准错误输出是屏幕。
Shell中不使用系统的标准输人、标准输出或标准错误输出端口,重新指定至文件的情况称为重定向。根据输出效果的不同,与输出相关的重定向可分为输出重定向、附加输出重定向和错误输出重定向 3种。与输人相关的重定向只有一种,称为输人重定向。
1. 输出重定向
输出重定向就是命令执行的结果不在标准输出(屏幕)上显示,而是保存到某一文件的操作,利用符号">
"来实现。
例:将当前目录中所有文件和子目录的详细信息保存到list
文件。
[jerry@centos ~]$ls -al >list
[jerry@centos ~]$
ls -al
命令显示当前目录中所有文件和子目录的详细信息,一般情况下应在屏幕上显示送些信息。而命令中使用输出重定向符号">
"和文件名后,屏幕上就不会出现任何信息,而将本应出现在屏幕上的内容全部保存到指定的文件中。指定的文件并不需要预先创建,输出重定向能新建命令中指定的文件。而如果指定的文件已存在,则其原有内容将被覆盖。
cat
命令可用于查看文本文件的内容,而如果与输出重定向相配合,则有更加强大的功能。
- 创建文本文件
格式:cat >文件
说明:输入此类命令后,屏幕光标闪烁,用户输入文件内容。所有的内容输入完成后,按【Enter
】键将光标移动到下一行,然后按【Ctrl+D
】组合键结束输入,再次出现Shell命令提示符.
- 合并文本文件
格式:cat 文件列表 > 文件
说明:将文件列表中所有文件的内容合并到指定文件。
2. 附加输出重定向
附加输出重定向的功能与输出重定向基本相同。两者的不同之处在于:附加输出重定向将输出内容追加到原有内容的后面,而不会覆盖其内容,利用符号">>
"来实现附加输出重定向功能。
3. 错误输出重定向
Shell中标准输出与错误输出是两个独立的输出操作。标准输出是输出命令执行的结果,而错误输出是输出命令执行中的错误信息。错误输出也进行重定向,并可分为下两种情况:
- 程序的执行结果显示在屏幕上,而错误信息重定向到指定文件,使用"
2>
"符号。 - 程序的执行结果和错误信息都重定向到同一文件,使用"
&>
"符号。
4. 输入重定向
输人重定向跟输出重定向完全相反,是指不从标准输入(键盘)读人数据,而是从文件读入数据,用"<
"符号来实现。由于大多数命令都以参数的形式在命令行上指定输人文件,所以输人重定向并不常使用。但是,少数命令(如patch
命令)不接受文件名作为参数,必须使用输人重定向。
3、管道
管道是Shell的另一大特征,其将多个命令前后连接起来形成一个管道流。管道流中的每一个命令都作为一个单独的进程运行,前一命令的输出结果传送到后一命令作为输入,从左到右依次执行每个命令。利用"|
"符号实现管道功能。综合利用重定向和管道能够完成一些比授复杂的操作。
4、历史记录
利用Shell命令进行操作时,用户需要多次反复输人相关的命令行,这比较费时且不太方便。为避免用户的重复劳动,Shell提供历史记录、别名和自动补全等功能,简化Shell命令输人工作。
1. 历史记录简介
Shell记录一定数量的已执行的命令,当需要再次执行时,不用再次输人,直接调用即可。用户主目录中名为.bash_history
的隐藏文件,用于保存曾执行过的Shell命令。每当用户退出登录或关机后,本次操作中使用过的所有Shell命令就会追加保存在该文件中。Bash默认最多保存1000条Shell命令的历史记录。
2. 利用历史记录的方法
-
使用上下方向键、【
PgUp
】或【PgDn
】键,在Shell命令提示符后出现已执行过的命令。直接按【Enter
】键就可再次执行这一命令,也可以对历史记录进行编辑,修改为用户所需的命令后再执行。 -
先利用
history
命令查看Shell命令的历史记录,然后调用已执行过的Shell命令。
格式:history [数字]
功能:查看Shell命令的历史记录。如果不使用数字参数,则查看Shell命令的所有历史记录。如果使用数字参数,则查看最近执行过的指定个数的Shell命令。
3. 再次执行已执行过的Shell命令
格式:!序号
功能:执行指定序号的Shell命令,而"!!
"命令再次执行刚刚执行过的那个Shell命令。
5、别名
別名是按照Shell命令标准格式所写命令行的缩写,用以减少输人,方便使用。用户只要输人别名命令,就执行对应的Shell命令。alias
命令可查看和设置别名。
格式:alias [别名=1标准Shell命令行,]
功能:查看和设置别名。
1. 查看别名
无参数的alias
命令查看用户可使用的所有别名命令及其对应的标准Shell命令。
Shell规定:当别名命令与标准Shell命令同名时,別名命令优先于标准Shell命令执行。也就是说,在Shell命令的提示符后输入ls
命令时,其真正执行的并不是标准的ls
命令,而是ls
别名命令,即执行ls --color= auto
命令。如果要使用标准的Shell命令,需要在命令名前添加"\
“字符,即输人”\ls
"命令将执行标准的ls
命令。
2. 设置别名
使用带参数的alias
命令可设置用户的别名命令。在设置別名时,"=
"的两边不能有空格,并在标准Shell命令行的两端使用单引号。将用户经常使用的命令设置为别名命令将大大提高工作效率。
6、自动补全
自动补全,是指用户在输人命令时不需要输人完整的命令,只需要输人前几个字母,系统会自动找出匹配的文件或命令,避免输入时出现差错。利用【Tab
】键实现自动补全功能。
- 自动补全文件或目录名
- 自动补全命令名