Linux系统中经常会利用一些特殊的符号字符来表示一些特定含义的内容,便于数据检索和数据匹配。
系统通配符号介绍
1、系统通配符号简介
通配符号简单来说,就是键盘上的一些特殊符号,可以实现某些特殊的功能。
例如:用来模糊搜索系统中的文件,使用通配符号 * 和 ?字符来代替一个或多个真正的实际字符,从而提高检索效率
利用通配符可以在Linux命令行或bash脚本中轻松匹配或查找所需的文件,以提高工作效率。
通配符也是bash的内置功能,几乎适用于所有的Linux环境,常用的通配符号如下:
序号 | 符号 | 解释说明 |
---|---|---|
01 | * | 匹配任意(0个或多个)字符或字符串,包括空字符串 |
02 | ? | 匹配任意1个字符,有且只有一个字符 |
03 | [abcd] | 匹配abcd中任何一个字符,abcd也可是其他任意不连续字符 |
04 | [a-z] | 匹配a到z之间的任意一个字符,字符前后要连续,也可以用连续数字,即[1-9] |
05 | [!abcd] | 表示不匹配括号里面的任何一个字符,也可写为[!a-d],这里的!号可以用^替代,即[^adbcd] |
06 | {} | 表示用于生成字符序列信息以及组合序列,结合$符号使用可以用于识别变量信息 |
2、系统通配符号详述
01. *号的作用详述与实践
在Linux命令行通配符中,*号的意思是匹配所有(0到多个)字符;
在查找某一类文件时特别方便,在命令行中是十分常用的符号。
实践操作:
环境准备:
tiki wiki
[xiaoQ@xiaoq ~]$ mkdir test
[xiaoQ@xiaoq ~]$ cd test
[xiaoQ@xiaoq test]$ touch xiaoQ.txt xiaoT.txt test.txt
[xiaoQ@xiaoq test]$ touch xiaoC.sh
[xiaoQ@xiaoq test]$ ls
test.txt xiaoC.sh xiaoQ.txt xiaoT.txt
-- 3个txt结尾的文件,1个sh结尾的文件
实践情况-01:查看所有结尾为txt的文件
tiki wiki
[xiaoQ@xiaoq test]$ ls *.txt
test.txt xiaoQ.txt xiaoT.txt
-- 星号可以用于匹配任意开头信息,以指定信息结尾的文件
实践情况-02:查看所有结尾为sh的文件
tiki wiki
[xiaoQ@xiaoq test]$ ls *.sh
xiaoC.sh
-- 星号可以用于匹配任意开头信息,以指定信息结尾的文件
实践情况-03:查看所有开头为xiao的文件
tiki wiki
[xiaoQ@xiaoq test]$ ls xiao*
xiaoC.sh xiaoQ.txt xiaoT.txt
-- 星号可以用于匹配任意结尾信息,以指定信息开头的文件
实践情况-04:查看所有中间为iao的文件
tiki wiki
[xiaoQ@xiaoq test]$ ls *iao*
xiaoC.sh xiaoQ.txt xiaoT.txt
-- 星号可以用于匹配任意字符信息,以含有指定字符信息的文件
实践情况-05:查看所有隐藏文件和含有空格的文件
tiki wiki
# 查找指定隐藏文件信息
[xiaoQ@xiaoq test]$ touch .xiaoA .xiaoB
[xiaoQ@xiaoq test]$ ls ./.*
./.xiaoA ./.xiaoB
./.:
test.txt xiaoC.sh xiaoQ.txt xiaoT.txt
./..:
readme test
[xiaoQ@xiaoq test]$ ls ./.x*
./.xiaoA ./.xiaoB
# 查找含有空格字符文件
[xiaoQ@xiaoq test]$ touch 'xiao X.txt'
[xiaoQ@xiaoq test]$ ls xiao*X.txt
xiao X.txt
02. ?号的作用详述与实践
在Linux命令行通配符中,?号代表的是任意一个字符(有且只有一个),这个字符在实际工作中运用不多。
实践操作:
实践情况-01:查看所有结尾为.sh的文件
[xiaoQ@xiaoq test]$ ls
test.txt xiaoC.sh xiaoQ.txt xiaoT.txt xiao X.txt
[xiaoQ@xiaoq test]$ ls ?.sh
ls: cannot access ?.sh: No such file or directory
[xiaoQ@xiaoq test]$ touch a.sh b.sh c.sh
[xiaoQ@xiaoq test]$ ls ?.sh
a.sh b.sh c.sh
[xiaoQ@xiaoq test]$ ls ?????.sh
xiaoC.sh
03. [abcd]的作用详述与实践
在Linux命令行通配符中 [] 这个符号里面可以加abcd等0到多个字符,表示匹配abcd的任意一个字符中有且只有一个
实践操作:
实践情况-01:查看所有结尾为.sh的文件
[xiaoQ@xiaoq test]$ ls ?.sh
a.sh b.sh c.sh
[xiaoQ@xiaoq test]$ ls [abcd].sh
-- 匹配 .sh结尾的,且前面必须包含a b c d四个字符中的任意一个
a.sh b.sh c.sh
[xiaoQ@xiaoq test]$ touch ab.sh
[xiaoQ@xiaoq test]$ ls [abcd].sh
a.sh b.sh c.sh
-- ab表示两个字符,并不会被中括号中的内容匹配
[xiaoQ@xiaoq test]$ ls xi[abcd]oC.sh
xiaoC.sh
-- 匹配oC.sh结尾,开头是xi,之后是a b c d中的任意一个
04. [a-z] 的作用详述与实践
[]这个符号里面的a-z,表示匹配a到z的任意一个字符(有且只有一个),a-z要表示连续,也可以连续数字信息
例如:[1-9]表示的就是匹配1到9中的任意一个字符
实践操作:
实践情况-01:查看所有结尾为.sh的文件
[xiaoQ@xiaoq test]$ ls *.sh
ab.sh a.sh b.sh c.sh xiaoC.sh
[xiaoQ@xiaoq test]$ ls [a-z].sh
-- 匹配 .sh结尾,前面值包含a-z之间的任意一个字符
a.sh b.sh c.sh
[xiaoQ@xiaoq test]$ ls [a-z]?.sh
-- 匹配a到z之间包含的任意一个字符开头,后面任意1个字符,最后以.sh结尾的文件
ab.sh
[xiaoQ@xiaoq test]$ ls [a-z]????.sh
xiaoC.sh
-- 匹配a到z之间包含的任意一个字符开头,后面任意4个字符,最后以.sh结尾的文件
[xiaoQ@xiaoq test]$ touch 1 2
[xiaoQ@xiaoq test]$ ls [1-9]
-- 匹配1到9之间的任意一个数字
1 2
05. [!abcd] 的作用详述与实践
[!abcd]表示匹配除了abcd四个字符以外的任意一个字符(有且只有一个),也可写成[^abcd]或[^a-d]
实践操作:
实践情况-01:查找非abcd的单个字符的文件
[xiaoQ@xiaoq test]$ touch a b c d e f
[xiaoQ@xiaoq test]$ ls ?
1 2 a b c d e f
[xiaoQ@xiaoq test]$ ls [!abcd]
-- 匹配包含a b c d任意字符以外的单个字符文件
1 2 e f
[xiaoQ@xiaoq test]$ ls [^abcd]
-- 匹配包含a b c d任意字符以外的单个字符文件
1 2 e f
[xiaoQ@xiaoq test]$ ls [^a-d]
-- 匹配包含a b c d任意字符以外的单个字符文件
1 2 e f
[xiaoQ@xiaoq test]$ ls [^1-9]
-- 匹配包含1到9任意字符以外的单个字符文件
a b c d e f
综合练习:
练习-01:查找/etc/目录包含hosts字符串的所有文件
[root@xiaoq ~]# find /etc/ -type f -name "*hosts*"
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
练习-02:查找/etc目录下的所有文件,文件名的第一个字符为任意字符,第二字符为o p q中的任意一个,第三个字符不能在a到r之间,结尾是ts
[root@xiaoq ~]# find /etc/ -type f -name "?[opq][^a-r]ts"
/etc/hosts
06. {}的作用详述与实践
{}在系统中可以用于生成默认字母或数值序列,还可以实现序列信息的组合,以及可以实现加载变量信息
实践操作:
实践情况-01:利用{}生成字符序列信息
# 连续序列
[root@xiaoq ~]# echo {1..9}
1 2 3 4 5 6 7 8 9
[root@xiaoq ~]# echo {a..k}
a b c d e f g h i j k
# 间隔序列
[root@xiaoq ~]# echo {1..9..2}
1 3 5 7 9
[root@xiaoq ~]# echo {a..k..2}
a c e g i k
[root@xiaoq ~]# echo {a,f,1,3}
a f 1 3
实践情况-02:利用{}实现字符信息组合
[root@xiaoq ~]# echo {1,2}{a,b}
1a 1b 2a 2b
[root@xiaoq ~]# echo 1{a,b}
1a 1b
[root@xiaoq ~]# echo {1,2}a
1a 2a
# 利用序列组合可以实现数据快速备份
[root@xiaoq ~]# touch /etc/sysconfig/xiaoQ.conf
[root@xiaoq ~]# cp /etc/sysconfig/xiaoQ.conf{,.bak}
# 利用序列组合可以实现数据快速还原
[root@xiaoq ~]# mv /etc/sysconfig/xiaoQ.conf{.bak,}
mv: overwrite ‘/etc/sysconfig/xiaoQ.conf’? y
快速备份数据和快速还原数据图解:
快速备份数据:
快速还原数据:
实践情况-03:将变量括起来作为变量的分割符
[root@xiaoq ~]# num=6
[root@xiaoq ~]# echo $num
6
[root@xiaoq ~]# echo $num_info
-- 输出为空,系统将num_info作为变量了
[root@xiaoq ~]# echo ${num}_info
-- 将变量num括起来单独作为变量,后边_info当成正常字符信息,即可实现信息输出
6_info
系统特殊符号介绍
1、系统特殊符号简介
相比通配符号来说,Linux特殊符号更加复杂多样,且杂乱无章;因此,为了初学者便于记忆掌握,做了一定分类
-
系统基础类型特殊符号:; # | $
-
引号类型相关特殊符号:'' "" `` 无引号
-
重定向类型的特殊符号:> >> < << 及特殊情况
-
切换路径相关特殊符号:~ - . ..
-
判断逻辑相关特殊符号:&& || !
01.系统基础特殊符号
序号 | 符号 | 解释说明 |
---|---|---|
01 | ; | 表示一个命令的结束,也是命令间的分隔符 |
02 | # | 表示注释内容,是用来给管理员看的,系统不会执行以#好开头的内容 root用户的命令提示符 |
03 | | | 表示管道符号,将一个命令处理后的结果内容输出给下一个命令继续处理 |
04 | $ | 字符串前加$符号,代表字符串变量内容 代表普通用户的命令提示符 |
分号的介绍与实践
在Linux命令行中,分号表示一个命令的结束,也是命令间的分隔符;
在有些配置文件中,以分号开头的内容代表注释,例如在keepalived.conf高可用配置中就是如此:
实践操作作用演示:
[root@xiaoq ~]# ll /test -d
ls: cannot access /test: No such file or directory
[root@xiaoq ~]# mkdir /test ; cd /test ; pwd
-- 同时执行多个命令:创建指定目录,进入指定目录,并查看所在路径
/test
[root@xiaoq test]# ll /test/ -d
drwxr-xr-x 2 root root 6 Jan 12 21:39 /test/
井号的介绍与实践
在Linux系统的配置文件中,经常会看到以井号开头的内容,表示后面的注释内容,这部分内容是管理员看的;
系统不会执行以井号开头的内容。
实践操作作用演示:
# 正常编写脚本文件,并触发执行脚本文件
[root@xiaoq ~]# cat test_#.sh
echo xiaoQ linux
echo xiaoQ python
echo xiaoQ network
[root@xiaoq ~]# sh test_#.sh
xiaoQ linux
xiaoQ python
xiaoQ network
# 将脚本文件指定内容加井号注释,再执行脚本文件
[root@xiaoq ~]# cat test_#.sh
echo xiaoQ linux
# echo xiaoQ python
#echo xiaoQ network
[root@xiaoq ~]# sh test_#.sh
xiaoQ linux
-- 执行没有井号开头的行会被系统识别
系统中除了脚本文件或代码文件中会用到井号作为注释信息,一些配置文件也会使用井号作为注释信息:
[root@xiaoq ~]# tail /etc/ssh/sshd_config
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
管道符的介绍与实践
在Linux系统命令行中,管道符是极其重要的符号,类似于生活中的管道作用,只不过Linux管道里传输的是数据流;
在实际命令行中,命令处理后在并未得到想要的结果前,可以将数据交给其他命令继续处理,直到得到最终结果为止
一般在命令和命令之间就需要用管道衔接将数据流发过来进行处理。
实践操作作用演示:
[root@xiaoq ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.101 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::d349:f92:2e8e:dc7e prefixlen 64 scopeid 0x20<link> ::
ether 00:0c:29:19:74:65 txqueuelen 1000 (Ethernet)
RX packets 1043 bytes 95395 (93.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 882 bytes 110951 (108.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@xiaoq ~]# ifconfig eth0|grep 10.0.0
inet 10.0.0.101 netmask 255.255.255.0 broadcast 10.0.0.255
美元符的介绍与实践
在Linux系统命令行或shell脚本程序中,在字符串前加$符号,代表的是字符串变量的内容。
实践操作作用演示:
[root@xiaoq ~]# echo $OLDPWD
/test
[root@xiaoq ~]# echo $PWD
/root
[root@xiaoq ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@xiaoq ~]# xiaoQ=1
[root@xiaoq ~]# echo $xiaoQ
1
02.引号类型特殊符号
序号 | 符号 | 解释说明 |
---|---|---|
01 | 单引号 '' | 所见即所得,即输入单引号内容时会将单引号内的所有内容都原样输出; 或者描述为单引号里面看到的是什么就会输出什么,称为强引用 |
02 | 双引号 "" | 输出双引号内的所有内容时,如果内容中有变量、特殊字符等信息; 会将变量、特殊字符等信息解析出结果,然后在输出,称为弱引用 |
03 | 无引号 | 基本和有双引号的作用功能一致;只是在有空格字符存在时,需要使用双引号; 当需要生成序列信息时,需要使用无引号情况 |
04 | 反引号 | 一般用于引用命令,执行的时候命令会被执行,相当于"$()" 赋值和输出都要将命令用反引号引起来 |
单引号的介绍与实践
简单来说,当待处理的内容用单引号引起来时,引号里面有什么内容,处理时就一直保持引号之前的内容不变。
实践操作作用演示:
[root@xiaoq ~]# echo '$PATH'
$PATH
[root@xiaoq ~]# echo '`date`'
`date`
双引号的介绍与实践
当输出双引号内的所有内容时,会先将变量或特殊字符解释出来,然后输出最终的内容;
若在平时引用字符串时,不知如何应用引号符号,则可默认使用双引号。
实践操作作用演示:
[root@xiaoq ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@xiaoq ~]# echo "`date`"
Thu Dec 12 00:00:07 CST 2222
[root@xiaoq ~]# echo "xiaoQ"
xiaoQ
无引号的介绍与实践
不使用引号的功能与双引号类似,但由于没有引号,在引用字符串信息时,很难确定字符串的边界;
因此很容易出现各种未知的操作错误,所以建议处理字符串内容是建议使用双引号替代不加引号情况
实践操作作用演示:
[root@xiaoq ~]# echo "dir info $PWD"
dir info /root
[root@xiaoq ~]# echo dir info $PWD
dir info /root
-- 输出加载指定信息,无引号和双引号功能类似
[root@xiaoq ~]# xiaoQ=linux 123
-bash: 123: command not found
[root@xiaoq ~]# xiaoQ="linux 123"
-- 变量赋值时,字符串中有空格出现无引号情况无法确认边界情况,会赋值报错
[root@xiaoq ~]# echo {1..5}
1 2 3 4 5
[root@xiaoq ~]# echo "{1..5}"
{1..5}
-- 加载{}生成序列信息时,是不需要使用双引号的
反引号的介绍与实践
简单来说,当将带处理的字符串用反引号引起来的时候,系统会先将反引号里字符串当做命令进行解析识别;
然后针对解析后的结果做进一步的处理。反引号一般用于引用命令,执行的时候命令会被执行,等价于$()。
实践操作作用演示:
[root@xiaoq ~]# date
Thu Dec 12 00:00:21 CST 2222
[root@xiaoq ~]# echo date
date
[root@xiaoq ~]# echo `date`
Thu Dec 12 00:00:40 CST 2222
-- 可以识别解析命令信息
[root@xiaoq ~]# echo `aa`
-bash: aa: command not found
-- 反引号中只能解析识别有效的命令
[root@xiaoq ~]# host_info=`hostname`
[root@xiaoq ~]# echo $host_info
xiaoq.edu
-- 做赋值操作时,也可以使用反引号解析命令后的结果再赋值
[root@xiaoq ~]# cp /etc/hosts /data/hosts-`date +%F`
[root@xiaoq ~]# ll /data/hosts-`date +%F`
-rw-r--r-- 1 root root 180 Dec 12 00:02 /data/hosts-2222-12-12
-- 企业中做数据备份时,经常会用到反引号
03.重定向类型特殊符号
重定向是Linux里的一个重要名词,对于它的作用,就是类似于生活中的漏斗一样;
可以让数据从一个地方无损失地流到另一个地方。
序号 | 名称 | 解释说明 |
---|---|---|
01 | 标准输入(stdin) | 代码为0,配合<或<<使用 数据流从右向左 |
02 | 标准输出(stdout) | 代码为1,配合>或>>使用 数据流从左向右 |
03 | 标准错误(stderr) | 代码为2,配合2>或2>>使用 数据流从左向右 |
详细类型解读 | ||
01 | 标准输入重定向 | 0<或< 清空已有内容,数据一般从文件流向处理命令 |
02 | 追加输入重定向 | 0<<或<< 追加内容到底部,数据一般从文件流向处理命令 |
03 | 标准输出重定向 | 1>或> 正确输出重定向到文件,会清空已有的内容 |
04 | 标准输出追加重定向 | 1>>或>> 将内容追加重定向到文件底部,不会清空已有的内容 |
05 | 错误输出重定向 | 2> 将标准错误内容重定向到文件,如果文件存在内容则清空 |
06 | 标准错误输出追加重定向 | 2>> 将标准错误内容追加到文件底部,不会清空已有的内容 |
标准输入介绍与实践
利用标准输入,可以将指定的文件内容信息调取出来,让命令进行加载处理,可以是覆盖输入或追加输入;
# 标准输入方式读取文件内容
[root@xiaoq ~]# echo 1 2 3 > xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
1 2 3
[root@xiaoq ~]# cat<xiaoQ.txt
1 2 3
[root@xiaoq ~]# cat 0<xiaoQ.txt
1 2 3
# 标准输入方式处理文件内容
[root@xiaoq ~]# tr " " "\n" <xiaoQ.txt
1
2
3
[root@xiaoq ~]# xargs -n 1 <xiaoQ.txt
1
2
3
[root@xiaoq ~]# mail -s '邮件标题' 邮件地址 <邮件内容(文件)
[root@xiaoq ~]# mail -s 'test mail' xiaoQ@qq.com </etc/hosts
# 标准输入追加重定向
[root@xiaoq ~]# cat <<EOF
xiaoQ
EOF
xiaoQ
-- 读入数据输出到屏幕
[root@xiaoq ~]# cat >xiaoQ.txt<<EOF
> xiaoQ
> xiaoA
> xiaoB
> EOF
-- 读入数据输出到指定文件
[root@xiaoq ~]# cat xiaoQ.txt
xiaoQ
xiaoA
xiaoB
标准输出介绍与实践
利用标准输出,可以将指定的数据内容信息输出到指定文件中,实现对特定数据信息的永久保留,便于分析查看;
# 标准输出重定向
[root@xiaoq ~]# echo "123" 1>xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
123
[root@xiaoq ~]# mkdir -v /test_dir >xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
mkdir: created directory ‘/test_dir’
# 可以实现清空文件数据内容
[root@xiaoq ~]# cat xiaoQ.txt
123
[root@xiaoq ~]# cat /dev/null >xiaoQ.txt
或者
[root@xiaoq ~]# >xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
-- 清空文件操作,多用于对系统日志文件清理操作
# 标准追加输出重定向
[root@xiaoq ~]# echo 123 >>xiaoQ.txt
[root@xiaoq ~]# echo 456 >>xiaoQ.txt
[root@xiaoq ~]# echo 789 >>xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
123
456
789
错误输出介绍与实践
利用错误输出,可有将指定命令或程序执行过程中出现的错误提示信息输出到指定文件中,便于对操作进行复盘;
[root@xiaoq ~]# mkdir /test_dir
mkdir: cannot create directory ‘/test_dir’: File exists
[root@xiaoq ~]# mkdir /test_dir 2> xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
mkdir: cannot create directory ‘/test_dir’: File exists
标准输出与错误输出结合使用:(生成日志文件的机制)
# 方法一:1>>文件 2>>文件
[root@xiaoq ~]# mkdir -v /test_dir 1>>xiaoQ.txt 2>>xiaoQ.txt
[root@xiaoq ~]# mkdir -v /test_dir 1>>xiaoQ.txt 2>>xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
mkdir: created directory ‘/test_dir’
mkdir: cannot create directory ‘/test_dir’: File exists
# 方法二:2>&1
[root@xiaoq ~]# mkdir -v /test_dir >>xiaoQ.txt 2>&1
[root@xiaoq ~]# mkdir -v /test_dir >>xiaoQ.txt 2>&1
[root@xiaoq ~]# cat xiaoQ.txt
mkdir: created directory ‘/test_dir’
mkdir: cannot create directory ‘/test_dir’: File exists
# 方法三:&>> ※
[root@xiaoq ~]# mkdir -v /test_dir &>>xiaoQ.txt
[root@xiaoq ~]# mkdir -v /test_dir &>>xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ.txt
mkdir: created directory ‘/test_dir’
mkdir: cannot create directory ‘/test_dir’: File exists
知识点总结:
-
标准输入:表示将数据从文件中流入到处理的命令中,用代码0表示,使用<或<<符号来指示数据的流向;
-
标准输出:表示将命令处理的信息输出到指定文件中,用代码1表示,使用>或>>符号来指示数据的流向;
-
错误输出:表示将命令操作错误的信息输出到文件中,用代码2表示,使用2>或2>>符号来指示数据的流向;