LINUX操作系统基本符号说明
-
课程介绍部分
1). 系统符号 # ~ $ . ..
2). 通配符号 * {}
根据文件名称进行匹配信息
3). 正则符号 *
根据内容进行匹配 -
系统符号作用
a 简化操作 如:.. ~ ; &&
b 进行匹配 -
系统特殊符号:
- 基础符号系列
美元符号:$ //取变量内容、配合awk去列、普通用户提示符、
叹号符号: ! //取反、强制
竖线符号: | //前一个命令执行结果交给后面命令处理
xargs: 将信息进行分组显示
同时查询多个文件并查看这些文件中的内容:
touch abc{1..9}.txt
find / -maxdepth 2 -type f -name "abc*" | xargs cat
将查询到的多个文件的详细信息显示出来:
find / -name "abc*" | xargs ls -l
需求:删除/root下的三个abc文件
find / -maxdepth 2 -type f -name "abc*" | xargs rm -rf
作业:
查找指定数据信息进行复制:查找出*.txt文件,批量复制到/tmp目录:- 将找到的信息放到cp 和 最终目录中间
find /root -type f -name "*.txt"|xargs -i cp {} /abc456 - 利用cp指明谁是数据最终保存的目录信息
find /root -type f -name "*.txt"|xargs cp -t /abc456
查找指定数据信息进行移动:查找出.txt文件,批量移动到/tmp目录:
# find /root -type f -name ".txt"|xargs mv -t /abc-
引号符号系列
'' 输出的信息,写什么显示什么
[root@pillar1m abc123]# echo 'abc123 $LANG $abc456'
abc123 $LANG $abc456
"" 和单引号功能类似 但对特殊信息会做解析
[root@pillar1m abc123]# echo "abc123 $LANG $abc456"
abc123 en_US.UTF-8 123
`` ($()) 将引号中的命令先执行,将执行结果交给引号外面的命令进行处理
没有引号 和双引号功能类似 但是可以直接识别通配符信息,如:# echo -
重定向输出符号:
1> 标准输出重定向符号
2> 错误输出重定向符号1>> 标准输出追加重定向符号
2>> 错误输出追加重定向符号
&> 正确错误重定向输出作业:
如何将正确信息和错误信息都输出到文件中:方法一: 将正确和错误信息同时保留到一个文件
[root@pillar1m abc123]# echo abc123 >>/abc123/info.log 2>>/abc123/info.log方法二: 将正确和错误信息同时保留到一个文件
[root@pillar1m abc123]# echo abc123 &>/abc123/info.log方法三: 将正确和错误信息同时保留到一个文件
[root@pillar1m abc123]# echo abc123 >/abc123/info.log 2>&1
< 标准输入重定向符号
passwd --stdin zhangsan < pass.txt
<< 标准输入追加重定向符号
cat >>/abc123.txt<<EOF
XXX
XXX
EOF -
路径信息系列
../ 上一级目录
./ 当前路径
~ 返回到家目录- 两个目录之间进行快速切换
- 逻辑符号系列
&& 与逻辑符号 前一个命令执行成功, 再执行后面的命令
|| 或逻辑符号 前一个命令执行失败, 再执行后面的命令
&&符号实践操作:
作业:
需要创建一个/test目录, 在目录中创建一个abc123.txt||符号实践操作
需求: /test/abc123.txt删除失败了,在/test/error.txt文件中生成失败信息[root@pillar1m tmp]# rm /test/abc1231.txt || echo "failed" >>/test/error.txt
[root@pillar1m tmp]# rm /test/abc123.txt || echo "failed" >>/test/error.txt
- 基础符号系列
-
系统通配符号:
利用通配符号匹配文件名称信息- 模糊匹配所有内容 abc123 abc ab a*
find / -name "ab" //0个或多个字符
ll /abc123/.txt
{} 生成序列信息 (生成一行序列)
生成连续序列
echo {1..10}
echo {001..100}
echo {a..z}
echo {A..Z}
生成不连续序列
echo {1..10..2} 奇数序列
echo {0..10..2} 偶数序列
echo {www,bbs,blog}生成组合序列
[root@pillar1m tmp]# echo {A,B}{01,02}
A01 A02 B01 B02
[root@pillar1m tmp]# echo A{01,02}
A01 A02
[root@pillar1m tmp]# echo A{,02}
A A02常用的文件备份操作:
cp /etc/passwd /etc/passwd.back
cp /etc/passwd
生成银行卡密码全部组合并统计总共多少个密码:
echo {0..9}{0..9}{0..9}{0..9}{0..9}
作业:
- 在/abc123目录中创建test.txt文件,并在/abc123目录中生成test.txt.back备份文件
mkdir /abc123 && touch /abc123/test.txt && cp /abc123/test.txt
- 如何将刚刚的备份文件快速还原
# cp /abc123/test.txt{.back,}
- 模糊匹配所有内容 abc123 abc ab a*
-
课程内容总结
01. 系统符号
1. 系统常用符号 # $
2. 路径系列符号 ~ - .. .
3. 重定向符号 > >> 2> 2>> < << &> 2>&1 /dev/null
4. 逻辑符号 && ||
5. 引号符号 "" '' `` ($()) 没有引号
02. 通配符号 根据文件名称进行筛选过滤
* 模糊匹配字符
{} 生成序列信息 / 生成组合序列 (快速备份文件/快速恢复文件)
操作系统正则符号说明
-
正则符号
- 利用正则符号匹配文件内容信息
- 正则符号经常出现在各种开发语言中, python java php shell
- 正则符号经常被三剑客命令使用
-
基础正则符号: basic
- 尖角符号:^
以什么开头的信息
ll /etc | grep "^d"
- 美元符号:$
以什么结尾的信息
ll -F /etc/ | grep "/$"
- 将全部内容显示,但不要显示空行
^$ -- 空行
grep -v "^$" 文件中过滤
测试环境:
cat >>~/test.txt<<EOF
I am Edison!
I can sing. - 尖角符号:^
I like music, hip-hop!
our site is https://clot.com
my qq num is 1234567890.
not 12345678900.
my god ,i am not Big handsome boy,but Edison!
EOF
4) 点符号 .
匹配任意一个字符,且只有一个字符
命令执行结果:
[root@pillar1m ~]# grep "." ~/test.txt
显示匹配过程:
[root@pillar1m ~]# grep "." ~/test.txt -o
5) 星符号 * ???
匹配前一个字符连续出现了0次或者多次
[root@pillar1m ~]# grep "0*" ~/test.txt
6) 点和星结合: .* 匹配任意所有信息 .* == *
[root@pillar1m ~]# grep "^o.*m$" ~/test.txt //必须加.表示以.为参照匹配所有内容
问题: 贪婪匹配问题:
[root@pillar1m ~]# grep "^m.*o" ~/test.txt
my god ,i am not Big handsome boy,but Edison!
指定具体信息阻止贪婪匹配
[root@pillar1m ~]# grep "^m.*od" ~/test.txt
7) 转义符号: \
\作用:
01. 将有特殊意义符号,转义成普通信息进行识别
将文件中的以 . 结尾的信息进行过滤:
# grep ".$" ~/test.txt //该命令无法真正过滤出以.结尾的行
# grep "\.$" ~/test.txt //使用转义符号
02. 将没有意义的信息转义为有特殊意义的信息
\n 换行符号
\t 制表符号
换行符号作用:
案例:
# echo -e "编号\t姓名\t性别\n01\t张三\t男\n02\t李四\t女"
# echo -e "\e[1;31m This is red text \e[0m" //e为字体上色,\e[0m,为将颜色重置为默认颜色,否则之后所输出的所有信息都将是31号颜色:
# echo -e "\e[1;31m This is red text" //此命令未使用重置,因此后续输入都将是红色
重置=0
黑色=30
红色=31
绿色=32
黄色=33
蓝色=34
粉色=35
青色=36
白色=37
\e[1;31m //1表示为文本显示类型
1=粗体
4=下划线
5=闪烁
7=背景色
# echo -n "123"
# echo "456"
# echo -n "123" && echo "456" //n为不换行输出,
8) 括号符号:[ ]
有包含a、b、c的行
[root@pillar1m ~]# grep "[abc]" test.txt
匹配多个字符信息
[root@pillar1m ~]# grep "h[a-z]p" ~/test.txt
作业:将以I开头和m开头的行都找出来
# grep "^[Im]" test.txt
9) 括号和尖号组合 [^]
排除符号,除了a、b、c外,匹配包含其他字符的行:
[root@pillar1m ~]# grep -v "[abc]" test.txt
grep "[^abc]" test.txt
扩展正则符号:
默认 grep sed不能直接识别
grep 提升自己 -- egrep/grep -E
sed 提升自己 -- sed -r
1) +号符号:
匹配前一个字符连续出现了1次或者多次
[root@pillar1m ~]# grep "0*" test.txt
[root@pillar1m ~]# egrep "0+" test.txt -o
cat >> ~/test02.txt<<EOF
张三 123456
李四 123457
王五 abcdef
王五1 def123
赵六 123459
EOF
找出qq信息输入错误的内容
[root@pillar1m ~]# grep [0-9] test02.txt
[root@pillar1m ~]# grep -E "[0-9]+" test02.txt
[root@pillar1m ~]# grep -E "[0-9]+" test02.txt -o
[root@pillar1m ~]# grep -Ev "[0-9]+" test02.txt
王五 abcdef
作业:通过[]筛选出不包含#号和;号开头的行
# grep -v "^[#;]" /etc/ssh/ssh_config
2) 竖线符号:|
或者符号,用于匹配多个信息
[root@pillar1m ~]# grep -E "my|0" test.txt
只查找当前系统中张三和root的用户信息:
# grep -E "^zhangsan|^root" /etc/passwd
3) 括号符号: ()
作用:
1. 指定信息进行整体匹配
[root@pillar1m ~]# grep -E "(my)" test.txt
2. 进行后项引用前项使用: sed命令替换功能
批量创建用户 test01..test10
[root@pillar1m ~]# echo test{01..10}
[root@pillar1m ~]# echo test{01..10} | xargs -n1
第一种方式:
[root@pillar1m ~]# echo test{11..12} | xargs -n1 useradd
第二种方式:
[root@pillar1m ~]# echo test{01..10} | xargs -n1 | sed -r 's#(.*)#useradd \1#g'
[root@pillar1m ~]# echo test{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g' | bash
企业面试题: 批量创建用户 test01..test10,并给每个用户设置密码信息,默认初始化密码(123456)
01. 如何创建用户 给用户设置密码
02. 基础命令 echo {}/seq -w 10
03. sed命令替换信息方法
04. 正则符号 .* ()
05. 基础符号 ; |
06. bash内置命令
[root@pillar1m ~]# seq -w 10 | sed -r 's#(.*)#useradd test\1;echo 123456 | passwd --stdin test\1#g'
# echo abc{01..10} | xargs -n1 | sed -r 's#(.*)#useradd \1;echo \1| passwd --stdin \1 #g'
将输出的信息
echo 123456 ==> 转换为 <123456>进行显示
[root@pillar1m ~]# echo 123456|sed -r 's#(.*)#123<\1>#g'
<123456>
()符号扩展:
只对数字内容增加括号显示:
cat >>~/test03.txt<<EOF
123456
88888
abcde
中文
语言
EOF
# cat ~/test03.txt | sed -r 's#([0-9]+)#<\1>#g'
echo 123456 ==> 转换为 <12><34><56>进行显示
[root@pillar1m ~]# echo 123456 ==> 转换为 <12><34><56>进行显示
[root@pillar1m ~]# echo 123456
123456
[root@pillar1m ~]# echo 123456 | sed -r "s#(12)(34)(56)#<\1><\2><\3>#g"
[root@pillar1m ~]# echo 123456 | sed -r "s#(12)(34)(56)#<\1><><\3>#g"
[root@pillar1m ~]# cat test03.txt | sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
[root@pillar1m ~]# echo 123456 | sed -r "s#(12)(34)(56)#<\1><\3><\3>#g"
4) 括号符号:{}
可以指定字符连续匹配的次数
第一种情况: x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
[root@pillar1m ~]# grep -E "0{2,3}" test.txt
[root@pillar1m ~]# grep "0+" test.txt
[root@pillar1m ~]# grep -E "0+" test.txt
第二种情况: x{n} 表示前一个字符正好连续出现了n次
[root@pillar1m ~]# grep -E "0{2}" test.txt
[root@pillar1m ~]# grep -E "0{2}" test.txt -o
第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
[root@pillar1m ~]# grep -E "0{2,}" test.txt
[root@pillar1m ~]# grep -E "0{2,}" test.txt -o
第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
[root@pillar1m ~]# grep -E "0{,2}" test.txt
5) 问号符号 ?
定义匹配前一个字符出现0或者1次
创建一个测试环境:
cat >>test04.txt<<EOF
gd
god
good
goood
gooood
EOF
[root@pillar1m ~]# grep "o*" test04.txt
gd
god
good
goood
gooood
[root@pillar1m ~]# egrep "o+" test04.txt
god
good
goood
gooood
[root@pillar1m ~]# egrep "o?" test04.txt
gd
god
good
goood
gooood
[root@pillar1m ~]# egrep "o?" test04.txt -o
o
o
o
o
o
o
o
o
o
o
[root@pillar1m ~]# egrep "o+" test04.txt -o
o
oo
ooo
oooo
补充: 想让grep sed命令可以直接识别扩展正则
[root@pillar1m ~]# grep "o\+" test04.txt
god
good
goood
gooood
[root@pillar1m ~]# grep -E "0{,2}" test.txt
[root@pillar1m ~]# echo 123456 | sed "s#..
.
.
..
.
.
..
.
.
<\1><\2><\3>#g"
<12><34><56>
总结:
* 匹配前一个字符出现0次或者多次
+ 匹配前一个字符出现1次或者多次
{} 匹配前一个字符指定出现多少次,至少0次
? 匹配前一个字符出现0次或者1次
.*
作业:利用ifconfig ens32只把IP地址信息显示出来
# ifconfig ens32
ifconfig ens33 | grep -E "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" -o | head -1
[root@pillar1m ~]# ifconfig ens32 | egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
[root@pillar1m ~]# ifconfig ens32 | egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o | head -1