个人技术分享

1. 输入输出重定向

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

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

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

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或者 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
1. 创建空白文件linuxprobe
touch linuxprobe
2. 显示创建的linuxprobe文件信息
ls -l linuxprobe
3. 通过标准输出重定向将man bash命令原本要输出到屏幕的信息写入到文件readme.txt中
man bash > readme.txt
4. 显示readme.txt文件中的内容
cat readme.txt
5. 通过覆盖写入模式向readme.txt文件写入"Welcome to LinuxProbe.Com"数据
echo "Welcome to LinuxProbe.Com" > readme.txt
6. 通过追加写入模式向readme.txt文件写入"Quality linux learning materials"数据
echo "Quality linux learning materials" >> readme.txt
7. 将linuxprobe文件(存在)信息写入到/root/stderr.txt文件中
ls -l linuxprobe > /root/stderr.txt
8. 将xxxxx文件(不存在)信息的报错信息写入到/root/stderr.txt文件中
ls -l xxxxx 2> /root/stderr.txt
9. 不区分标准输出和错误输出,将显示linuxprobe文件信息写入到readme.txt文件中
ls -l linuxprobe &>> readme.txt
10. 使用输入重定向统计readme.txt文件中的内容行数
wc -l < readme.txt

2. 管道符命令

执行格式为命令A | 命令B | ...,把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入。如果需要将管道符处理后的结果既输出到屏幕,又同时写入到文件中,则可以与tee命令结合使用。

1. 在/etc/passwd文件中查找禁止登录系统的用户数量(/sbin/nologin)
grep /sbin/nologin /etc/passwd | wc -l
2. 用翻页的形式查看/etc目录中的文件列表及属性信息
ls -l /etc | more
3. 搜索与bash有关的进程信息
ps aux | grep bash
4. 显示系统中所有与bash相关的进程信息,并同时将输出到屏幕和result.txt文件中
ps aux | grep bash | tee result.txt

3. 命令行的通配符

Linux系统中的通配符及含义

通配符 含义
* 任意字符
? 单个任意字符
[a-z] 单个小写字母
[A-Z] 单个大写字母
[a-Z] 单个字母
[0-9] 单个数字
[[:alpha:]] 任意字母
[[:upper:]] 任意大写字母
[[:lower:]] 任意小写字母
[[:digit:]] 所有数字
[[:alnum:]] 任意字母加数字
[[:punct:]] 标点符号
1. 匹配所有在/dev目录中且以sda开头的文件
ls -l /dev/sda*
2. 如果只想查看文件名以sda开头,但是后面还紧跟着其他某一个字符的文件的相关信息
ls -l /dev/sda?
3. 搜索/etc目录中所有以.conf结尾的配置文件
ls -l /etc/*.conf
4. 同时创建AA.conf,BB.conf和CC.conf三个空白文件
touch {AA,BB,CC}.conf

4. 常用的转义字符

4个最常用的转义字符如下所示。

\(反斜杠):使反斜杠后面的一个变量变为单纯的字符
''(单引号):转义其中所有的变量为单纯的字符串
""(双引号):保留其中的变量属性,不进行转义处理
``(反引号):把其中的命令执行后返回结果
1. 定义一个名为PRICE的变量并赋值为5
PRICE=5
2. 输出Price is 5信息
echo "Price is $PRICE"
3. 输出Price is $5信息
echo "Price is \$$PRICE"
4. 使用echo命令来查看本机的Linux版本和内核信息
echo `uname -a`

5. 重要的环境变量

命令在Linux中的执行分为4个步骤。
第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断。
第2步:Linux系统检查用户输入的命令是否为“别名”命令,即用一个自定义的命令名称来替换原本的命令名称。可以用alias命令来创建一个属于自己的命令别名,语法格式为alias 别名=命令。若要取消一个命令别名,则是用unalias命令,语法格式为unalias 别名
第3步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用type 命令名称来判断用户输入的命令是内部命令还是外部命令。
第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫做PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。

Linux系统中最重要的10个环境变量

变量名称 作用
HOME 用户的主目录(即家目录)
SHELL 用户在使用的Shell解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MALL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器
1. 将当前rm命令所被设置的别名取消掉
unalias rm
2. 再删除文件initial-setup-ks.cfg
rm initial-setup-ks.cfg
3. 查看echo命令是内部命令还是外部命令
type echo
4. 使用export将WORKDIR变量提升为全局变量
export WORKDIR
5. 后续不再使用WORKDIR变量,使用unset命令把它取消掉
unset WORKDIR

复习题

1

把ls命令的正常输出信息追加写入到error.txt文件中的命令是什么?
ls命令 >> error.txt

2

请简单概述管道符的作用。
命令A | 命令B | … 将命令A的输出作为命令B的输入

3

Bash解释器的通配符中,星号*代表几个字符?
星号代表任意字符(零个或多个)

4

PATH变量的作用是什么?
设定解释器搜索所执行命令的路径,找到其所在位置

5

一般情况下,为参数添加双引号有什么好处?
可以区分参数的数量

6

使用什么命令可以把名为LINUX的一般变量转换成全局变量?
export 命令