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中,我们可以使用重定向的方式将其输出到其它地方。重定向不光有输出的重定向,也有输入的重定向。这里涉及到一个文件描述符(File Descriptor)的概念。

文件描述符以数字形式表示(0、1、2、……),简单的来说可以理解成为文件或设备(Linux中一切皆文件,设备在系统中也表现为文件)的指针。默认情况下文件描述符 0、1、2 是有特定功能和默认指向的文件的:

文件描述符名称功能默认操作
0stdin标准输入从键盘输入
1stdout标准输出输出到屏幕(终端)
2stderr标准错误输出到屏幕(终端)

我们常用的命令执行时如果有信息输出,这些信息都会输出到文件描述符1的文件中。默认情况下文件描述符1是指向屏幕(终端)的,所以我们可以在屏幕(终端)中看到命令输出的内容。

对于指针而言我们可以改变其指向的对象,文件描述符也差不多,我们可以改变其指向的文件。如果我们将文件描述符1指向的文件改成某个其它的文件,比如log.txt,那么命令执行时原本应该输出到屏幕(终端)的信息就会被输出到log.txt中,这就是重定向了。

基础的重定向方式如下:

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

在这里插入图片描述

上面只是些最基本的重定向,事实上重定向经常组合使用,组合使用时从左到右进行,比如下面的例子:

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

在这里插入图片描述

上面出现的各种重定向方式都只在当前进程的当前语句有效,如果想要在当前进程一直生效的化可以使用 exec 命令,可以使用 man execexec --help 等方式查看具体使用方式。

环境变量

在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

上面这些文件中通常默认已经有一些命令脚本了,其中就包含系统默认的环境变量设置。(通常来说bashrc是系统启动后就会执行的,而profile是用户登陆后才会执行的。)

可以使用 env 命令查看当前用户可用的环境变量。常用的一些环境变量如下:

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

总结

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naisu Xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值