Linux笔记:命令进阶使用相关功能

Posted Naisu Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux笔记:命令进阶使用相关功能相关的知识,希望对你有一定的参考价值。

目的

使用linux时用户可以通过一个又一个的命令来完成各种操作,除了基础的各个命令外linux还提供了各种便利的功能来协调使用这些命令。这些功能让用户在使用linux时可以更加得心应手,也为shell脚本编写提供了巨大的可能性。这篇文章将对相关的内容做个简单的记录。

通配符

通配符可以用来代替匹配某些字符内容,常用的一些通配符示例如下:

表达式描述表达式描述
*单个或多个任意字符?单个任意字符
[145]匹配 1 4 5[abD]匹配 a b D
[4-8]匹配 4 5 6 7 8[a-z]匹配 a~z,即所有小写字母
[C-F]匹配 C D E F[2-7,c-e]匹配 2 ~ 7 和 c ~ e
[!345]不匹配3 4 5[^345]同[!345]
[[:alpha:]]单个任意字母[[:digit:]]单个任意数字
[[:upper:]]单个任意大写字母[[:lower:]]单个任意小写字母
[[:alnum:]]单个任意字母或数字[[:punct:]]单个标点符号

转义符

转义符在各种编程语言中都很常见,一般是将有特殊功能的符号变成普通字符或是反一反。在linux命令操作中主要可以使用下面几个转义符:

符号说明
反斜杠 \\将其后面的符号变为普通字符,比如变量符号、通配符等
单引号 ’ ’其内部所有内容都变为单纯的字符串
双引号 " "将其内部所有内容变为单纯的字符串,$和反引号不进行转义
反引号 ` `命令替换,替换为其中命令的结果,也可用 $( ) 代替
pi@raspberrypi:~ $ echo $HOME
/home/pi
pi@raspberrypi:~ $ echo \\$HOME
$HOME
pi@raspberrypi:~ $ echo '$HOME'
$HOME

pi@raspberrypi:~ $ echo date
date
pi@raspberrypi:~ $ echo `date`
Fri 03 Sep 2021 10:30:29 AM CST

流程控制

shell中通常一行只能使用一条命令,我们可以使用一些符号让多条命令一起执行,下面是一些基础的符号:

符号示例说明
;命令1 ; 命令2命令1和命令2按顺序执行
&&命令1 && 命令2当命令1执行正确,命令2才会执行
||命令1 || 命令2当命令1执行不正确,命令2才会执行
()(命令1 ; 命令2)括号内的内容会作为一整块执行,注意其中使用cd命令的话只会对这一块有效
pi@raspberrypi:~ $ (cd Desktop/; ls)
2.txt  3.txt  4.txt  5.txt
pi@raspberrypi:~ $ cd Desktop/; ls
2.txt  3.txt  4.txt  5.txt
pi@raspberrypi:~/Desktop $ cd Desktop/ || cd ~
bash: cd: Desktop/: No such file or directory
pi@raspberrypi:~ $ cd Desktop/ && pwd
/home/pi/Desktop
pi@raspberrypi:~/Desktop $ cd ~ || pwd ; ls
Bookshelf  Desktop  Documents  Downloads  Music  Pictures  Public  Share  Templates  Videos
pi@raspberrypi:~ $ cd ~ || (pwd ; ls)
pi@raspberrypi:~ $ cd ~ || pwd ; ls
Bookshelf  Desktop  Documents  Downloads  Music  Pictures  Public  Share  Templates  Videos
pi@raspberrypi:~ $ 

管道符

linux中管道符 | 是非常好用的一个功能,它的功能很简单 —— 把前一个命令要输出的信息当作后一个命令的标准输入

管道符最常用的场景就是结合 grep 命令使用:

重定向

通常操作命令时输出的内容会直接显示在shell中,我们可以使用重定向的方式将其输出到其它地方。重定向不光有输出的重定向,也有输入的重定向。linux中一切皆文件,这些输入输出的内容也被视为文件,对于这些文件还涉及到一个文件描述符(File Descriptor)的概念。这一节涉及到的文件描述符如下:

文件描述符名称类型默认操作
0stdin标准输入文件从键盘输入
1stdout标准输出文件输出到屏幕
2stderr标准错误文件输出到屏幕

了解文件描述符后就可以介绍重定向了,基础的重定向内容如下:

表达式描述
命令 < 文件将文件作为命令的标准输入
命令 << 分界符从标准输入中读入,直到遇见分界符才停止,分界符是自己定义的字符串
命令 > 文件将标准输出覆盖到文件中,等价于 命令 1> 文件
命令 >> 文件将标准输出追加到文件中,等价于 命令 1>> 文件
命令 2> 文件将错误信息覆盖到文件中
命令 2>> 文件将错误信息追加到文件中
命令 &> 文件将标准输出和错误信息覆盖到文件中
命令 &>> 文件将标准输出和错误信息追加到文件中

上面只是些最基本的重定向,事实上重定向经常组合使用,比如下面的例子:

表达式描述
命令 < 文件A > 文件B将文件A作为命令的标准输入并将标准输出到文件B
命令 > 文件A 2>> 文件B将标准输出覆盖到文件A中,将错误信息追加到文件B中
命令 > 文件 2>&1这个表达式相当于 命令 1> 文件 2>&1
先将标准输出覆盖到文件中,再将错误信息也修改为标准输出,这样它也会写入到文件中
最终的结果就是标准输出和错误信息一起覆盖到文件中
命令 >> 文件 2>&1将标准输出和错误信息一起覆追加到文件中

环境变量

在shell中可以像各种编程语言一样定义变量,然后在一般操作中使用这些变量:

pi@raspberrypi:~ $ NAISU=/home/pi/Desktop
pi@raspberrypi:~ $ cd $NAISU
pi@raspberrypi:~/Desktop $ pwd
/home/pi/Desktop

一个变量可以有多个值,各个值之间使用:(冒号)分隔:

pi@raspberrypi:~/Desktop $ NAISU=aaa
pi@raspberrypi:~/Desktop $ echo $NAISU 
aaa
pi@raspberrypi:~/Desktop $ NAISU=$NAISU:bb
pi@raspberrypi:~/Desktop $ echo $NAISU 
aaa:bb

上面的定义的这些变量只有当前用户可以用,需要输出到全局才可以给其他用户用:

pi@raspberrypi:~/Desktop $ export NAISU

如果不需要这个变量了可以把它取消掉:

pi@raspberrypi:~/Desktop $ unset NAISU

前面定义的变量在系统重启后就消失了,想要重启后还能继续用的话只要在系统启动或是用户登陆时会执行的脚本中添加相关的命令即可。通常可用的脚本文件有一下一些(可能有也可能没有,依顺序执行,对于同一个变量后面的会覆盖前面的):
/etc/profile /etc/bashrc ~/.bash_profile ~/.profile ~/.bashrc

上面这些文件中通常默认已经有一些内容了,这些内容就是系统默认的环境变量。可以使用 env 命令查看当前用户可用的环境变量。常用的一些环境变量如下:

变量名描述变量名描述
HOME用户的主目录SHELL用户在使用的Shell解释器名称
PATH解释器搜索用户执行命令的路径EDITOR用户默认的文本解释器
RANDOM生成一个随机数字LANG系统语言、语系名称

总结

这篇文章中介绍的各个命令使用相关的功能单个来看都非常简单,但是组合起来使用就拥有了丰富的可能性。很多时候仅仅使用命令与上面各个功能组合就可以实现大部分需求了。

以上是关于Linux笔记:命令进阶使用相关功能的主要内容,如果未能解决你的问题,请参考以下文章

Linux自学笔记——nginx应用进阶

linux进阶之路vim命令常见操作(附vim键盘图,建议收藏)

linux进阶之路vim命令常见操作(附vim键盘图,建议收藏)

Linux学习46 Linux网络相关属性配置进阶与实战

Linux学习笔记之grep命令及sed 命令相关选项

JavaEE精英进阶课学习笔记《博学谷》