通配符和命令化学反应
@
Linux 通配符
符号 | 作用 |
---|---|
“*” | 匹配任意多个,单个字符。 (常用) |
? | 匹配一个字符。 (几乎不用) |
[abcd] | 匹配其中的单个字符 |
[a-z] | 匹配其中的单个字符 |
[!abcd] | 匹配其中的单个字符 (取反) |
Linux特殊符号:路径和位置相关 | |
~ | 用户家目录 |
. | 代表当前目录 |
“-” | 代表上一次(相当于当前路径)用户所在的路径 |
.. | 代表上级目录 |
Linux特殊符号:引用字符串命令相关 | |
单引号(’’) | 所见即所得,被 ’’的内容不会发生变化 |
双引号(“”) | 会解析变量或命令,在输出,和不加引号相同“”表示一个整体 |
反引号(“) | 引用命令可以解析命令,相当与$() |
空格 | 赋值时,如果变量内容又空格会赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体输出,如果内容中有命令(要反引下)、变量等,会先把变量、命令解析出结果,然后输出最终内容,如果字符串中带有空格等特殊字符,则有可能无法完整的输出,因此需要改加双引号,一般连续的字符串、数字、路径等可以不加任何引号赋值和输出,不过无引号的情况最好用双引号替代之,特别是变量赋值时 |
**Linux特殊符号:其他 ** | |
; | 表示一个命令的结束,分隔命令 |
“#” | 注释 |
$ | 1. 字符串前加$,代表字符串变量内容 2. 普通用户提示符 |
\ | 逃脱符,转译符 |
{} | 1. 生成序列 2. 变量中表示分割作用 |
! | 1)在Bash中表示非,取反的意思 同^ 2)在vi/vim中表示强制 3)“!ls” 表示找出最近一次以ls开头的命令并运行 |
| | 将管道前边的命令通过管道交给后边的命令进一步处理 |
& | 将程序放入后台运行符 |
&& | 前一个命令执行成功,在执行后面一个命令 |
Linux特殊符号:重定向系列特殊字符 | |
0 | 表示标准输入(stdin),配合<或<<使用,数据流从右向左 |
1 | 表示标准输出(stdou),配合>或>>使用,数据流从左向右 |
2 | 标准错误(stderr),配合>或>>使用,数据流从左向右 |
0<或< | 标准输入重定向,清空已有内容,数据从文件流向处理的命令 |
0<<或<< | 追加输入重定向,追加内容到底部,数据从文件流向处理命令 |
1>或> | 标准输出重定向,正常输出重定向到文件,会清空已有内容 |
1>>或>> | 标准输出追加重定向,将内容追加到文件底部,不清空已有内容 |
2> | 错误输出重定向,将标准错误内容重定向到文件,如文件存在内容则清空 |
2>> | 错误输出追加重定向,将标准错误内容追加到文件底部,不会清空已有内容 |
“>/dev/null” | 黑洞 |
2>&1 &> | 错误正确一起追加的符号 |
;分号
作用 命令的分隔符 分隔多条命令
不管前面的命令是否执行成功都会继续往后执行
案例 如何在shell中用一行来执行 mkdir oldboy touch oldboy/test.txt rm oldboy/test.txt
[root@backup data]# mkdir -p /root/oldboy;touch /root/oldboy/test.txt;rm /root/oldboy/test.txt
rm:是否删除普通空文件 "/root/oldboy/test.txt"?
[root@backup ~]# ll
总用量 4
drwxr-xr-x 2 root root 4096 1月 21 21:10 data
drwxr-xr-x 2 root root 22 1月 21 21:17 oldboy
&&
作用 前面命令必须执行成功 在执行后面的命令 否则不会执行后面的命令
错误
[root@backup ~]# ll 123 && mkdir old
ls: 无法访问123: 没有那个文件或目录
正确
[root@backup ~]# ls data/ && mkdir old vmware-vmsvc.log
ks-script-AShK6w.log vmware-network.1.log X.log
ks-script-nf4aZ1.log vmware-network.2.log yum.log
[root@backup ~]# ll
总用量 4
drwxr-xr-x 2 root root 4096 1月 21 21:10 data
drwxr-xr-x 2 root root 6 1月 21 21:26 old
drwxr-xr-x 2 root root 22 1月 21 21:17 oldboy
: 和&结合使用
[root@backup ~]# touch oldboy.txt ; ll -d data/ && touch du.txt
drwxr-xr-x 2 root root 4096 1月 21 21:10 data/
[root@backup ~]# ll
总用量 4
drwxr-xr-x 2 root root 4096 1月 21 21:10 data
-rw-r--r-- 1 root root 0 1月 21 21:28 du.txt
drwxr-xr-x 2 root root 6 1月 21 21:26 old
drwxr-xr-x 2 root root 22 1月 21 21:17 oldboy
-rw-r--r-- 1 root root 0 1月 21 21:28 oldboy.txt
||
作用 前面的命令必须执行失败 在执行后面的命令
[root@backup ~]# ll qwe || mkdir du
ls: 无法访问qwe: 没有那个文件或目录
[root@backup ~]# ll
总用量 4
drwxr-xr-x 2 root root 4096 1月 21 21:10 data
drwxr-xr-x 2 root root 6 1月 21 21:31 du
& Linux系统中 把当前的进程放入后台使用
引号的区别:
不加引号 | 可以解析变量 | 同加引号相同 |
---|---|---|
双引号 | 可以解析变量 | 把不连续的内容作为一个字符串 |
单引号 | 不可以解析变量 | 所见即所得 |
引号
案例
不加引号
[root@backup ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
双引号
案例
[root@backup ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
单引号
==案例 ==
[root@backup ~]# echo '$PATH'
$PATH
“*”表示所有
==案例 ==
查找所有的任意字符开头以.txt结尾的文件
[root@backup ~]# ls *.txt
du.txt oldboy.txt
查找所有的old开头的文件
[root@backup ~]# ls old*
oldboy.txt
old:
oldboy:
test.txt
查找所有以old开头并且.txt结尾的
[root@backup ~]# ll old*.txt
-rw-r--r-- 1 root root 0 1月 21 21:28 oldboy.txt
[root@backup ~]# find ./ -type f -name 'old*.txt'
./oldboy.txt
? 表示任意字符
[root@backup ~]# ll d?.txt
-rw-r--r-- 1 root root 0 1月 21 21:28 du.txt
中括号[]
作用 匹配期中单个字符
[root@oldboy-lnb ~/20210118]#ll [a-z][a-z][a-z][0-9][0-9].txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu00.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu01.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu02.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu03.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu04.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu05.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu06.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu07.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu08.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu09.txt
-rw-r--r-- 1 root root 0 Jan 21 11:55 stu10.txt
{}大括号
作用 : 可以生成系列 变量中表示分隔作用
[root@oldboy-lnb ~/20210118]#echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboy-lnb ~/20210118]#cp oldboy.txt{,.bak}
[root@oldboy-lnb ~/20210118]#ll oldboy.txt{,.bak}
-rw-r--r-- 1 root root 0 Jan 21 12:06 oldboy.txt
-rw-r--r-- 1 root root 0 Jan 21 12:21 oldboy.txt.bak
! 对括号中内容取反
[root@backup ~]# ll [!ol]*
-rw-r--r-- 1 root root 0 1月 21 21:28 du.txt
data:
总用量 2536
-rw------- 1 root root 34270 1月 21 20:33 anaconda.log
-rw------- 1 root root 427157 1月 21 20:33 audit.log
-rw------- 1 root root 37274 1月 21 20:33 boot.log
-rw------- 1 root root 5465 1月 21 20:33 ifcfg.log
-rw------- 1 root root 1607656 1月 21 20:33 journal.log
-rw------- 1 root root 0 1月 21 20:33 ks-script-AShK6w.log
-rw------- 1 root root 0 1月 21 20:33 ks-script-nf4aZ1.lo
[root@oldboy-lnb ~/20210118]#ll [!!so]*
-bash: !so]*: event not found
\ 转义
[root@oldboy-lnb ~/20210118]#ll [!\!so]*
-rw-r--r-- 1 root root 0 Jan 21 12:11 1
-rw-r--r-- 1 root root 0 Jan 21 12:11 123
-rw-r--r-- 1 root root 41 Jan 21 12:06 1.txt
-rw-r--r-- 1 root root 0 Jan 21 12:06 awk-oldboy
-rw-r--r-- 1 root root 0 Jan 21 12:06 lidao-oldboy.txt
标 通配符 匹配查找文件名称 所有命令都支持
正则在普通命令中不支持 但是通配符在正则中有特殊含义
重定向符号
作用:对文件的内容进行处理操作
“>” | 标准正确输出重定向,先清空后写入 |
---|---|
2> | 标准错误输出重定向 |
“>>” | 标准错误追加输出重定向 |
2>> | 标准错误追加输出重定向 |
0 | 表示标准输入(stdin),配合<或<<使用,数据流从右向左 |
1 | 表示标准输出(stdou),配合>或>>使用,数据流从左向右 |
2 | 标准错误(stderr),配合>或>>使用,数据流从左向右 |
0<或< | 标准输入重定向,清空已有内容,数据从文件流向处理的命令 |
0<<或<< | 追加输入重定向,追加内容到底部,数据从文件流向处理命令 |
1>或> | 标准输出重定向,正常输出重定向到文件,会清空已有内容 |
1>>或>> | 标准输出追加重定向,将内容追加到文件底部,不清空已有内容 |
2> | 错误输出重定向,将标准错误内容重定向到文件,如文件存在内容则清空 |
2>> | 错误输出追加重定向,将标准错误内容追加到文件底部,不会清空已有内容 |
” >/dev/null” | 黑洞 |
2>&1 &> | 即标准错误和标准输出一样重定向到文件中 |
echo练习
echo 标准正确输出重定向,先清空后写入
[root@cs /]# echo oldboy > oldboy.txt 输入内容到文件中
[root@cs /]# cat oldboy.txt
oldboy
[root@cs /]# echo test > oldboy.txt
[root@cs /]# cat oldboy.txt
test 覆盖了oldboy
echo 错误输出重定向
[root@cs /]# ll hahha.txt > oldboy.txt
ls: 无法访问hahha.txt: 没有那个文件或目录
[root@cs /]# ll 3.txt 2> oldboy.txt 错误输出重定向
[root@cs /]# cat oldboy.txt
ls: 无法访问3.txt: 没有那个文件或目录
echo 正确追加重定向
[root@cs /]# echo oldboyjj >> oldboy.txt 追加内容到 oldboy.txt
[root@cs /]# cat oldboy.txt
ls: 无法访问3.txt: 没有那个文件或目录
oldboyjj
echo 错误追加重定向
[root@cs /]# llll 1.txt 2>> oldboy.txt 把报错内容追加到oldboy.txt
[root@cs /]# cat oldboy.txt
ls: 无法访问3.txt: 没有那个文件或目录
oldboyjj
-bash: llll: 未找到命令
echo 同时接收正确和错误信息
[root@cs /]# echo hahch > oldboy.txt 2>oldboy.txt
[root@cs /]#
[root@cs /]# cat oldboy.txt
hahch
[root@cs /]# echo hahh >> oldboy.txt 2>> oldboy.txt lll
[root@cs /]# cat oldboy.txt
hahch
hahh lll
root@cs /]# ech gagag >> oldboy.txt 2>>oldboy.txt
[root@cs /]# cat oldboy.txt
hahch
hahh lll
-bash: ech: 未找到命令
第二种方式:
[root@cs /]# ech heheh >> oldboy.txt 2>&1
[root@cs /]# cat oldboy.txt
hahch
hahh lll
-bash: ech: 未找到命令
-bash: ech: 未找到命令
第三种方法
[root@cs /]# echo hahah &>> oldboy.txt
[root@cs /]# cat oldboy.txt
hahch
hahh lll
-bash: ech: 未找到命令
-bash: ech: 未找到命令
hahah
Ps : 建议使用第三种