管理root借用权限(而不是命令)
当在/etc/sudoers中设置了普通用户命令的权限,普通用户可以通过sudo来将命令的权限提升至root等级(就是通过root用户,将权限分发给其他的用户);
vim /etc/sudoers 或者 visudo
100 root ALL=(ALL) ALL
101 men ALL=(ALL) /usr/bin/touch,/usr/bin/mkdir,/usr/bin/mv
root #用户名
ALL=(ALL) #用户登录进系统的白名单
ALL #表示给用户什么功能(必须写,绝对路径)
#查看,我有哪些可以提权的功能命令,借用root的能力,临时提权;
sudo -l
#sudo提权,跟你的系统中的文件属性权限,没有半毛钱关系;他是借用root的命令使用;
一、通配符号
* #前面字符出现0次或者0次以上
? #匹配任意一个字符
[] #匹配中括号中任意1个字符
{} #
1,【*】前面字符出现0次,或者0次以上
ll ./*.sh
-rw-r--r-- 1 root root 0 5月 30 08:55 ./1.sh
-rw-r--r-- 1 root root 0 5月 30 08:55 ./2.sh
-rw-r--r-- 1 root root 0 5月 30 08:55 ./3.sh
2,【?】匹配任意1个字符
ls ?.sh
1.sh 2.sh 3.sh 4.sh 5.sh 6.sh 7.sh 8.sh 9.sh
3,【[]】匹配中括号中任意1个字符
ll
总用量 0
-rw-r--r-- 1 root root 0 5月 30 09:33 a.txt
-rw-r--r-- 1 root root 0 5月 30 09:33 b.txt
-rw-r--r-- 1 root root 0 5月 30 09:33 c.txt
#中括号使用中,可以省略的写法,全是字母的[a-z],全是数字的[0-9]
ll ./[a-z]*
-rw-r--r-- 1 root root 0 5月 30 09:34 ./aassdddfff.sh
-rw-r--r-- 1 root root 0 5月 30 09:33 ./a.txt
-rw-r--r-- 1 root root 0 5月 30 09:33 ./b.txt
-rw-r--r-- 1 root root 0 5月 30 09:33 ./c.txt
#中括号取反
ll ./[!a-z]*
-rw-r--r-- 1 root root 0 5月 30 09:36 ./1.txt
-rw-r--r-- 1 root root 0 5月 30 09:36 ./2.txt
-rw-r--r-- 1 root root 0 5月 30 09:36 ./3.txt
ll ./[ab]*
-rw-r--r-- 1 root root 0 5月 30 09:34 ./aassdddfff.sh
-rw-r--r-- 1 root root 0 5月 30 09:33 ./a.txt
-rw-r--r-- 1 root root 0 5月 30 09:33 ./b.txt
4,【{}】生成序列信息
touch {1..10}
ls
1 10 2 3 4 5 6 7 8 9
touch {01..10}
ls
01 02 03 04 05 06 07 08 09 1 10 2 3 4 5 6 7 8 9
touch
ls
001 006 010 015 02 024 029 033 038 042 047 051 056 060 065 07 074 079 083 088 092 097 100 6
002 007 011 016 020 025 03 034 039 043 048 052 057 061 066 070 075 08 084 089 093 098 2 7
003 008 012 017 021 026 030 035 04 044 049 053 058 062 067 071 076 080 085 09 094 099 3 8
004 009 013 018 022 027 031 036 040 045 05 054 059 063 068 072 077 081 086 090 095 1 4 9
005 01 014 019 023 028 032 037 041 046 050 055 06 064 069 073 078 082 087 091 096 10 5
#大括号,可以控制查询,前面的字符出现的次数
echo A{,c}
Ab Ac
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak
cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}
cp 被复制者 复制到目标
cp 被复制者{,.bak}
echo {001..100..5}
001 006 011 016 021 026 031 036 041 046 051 056 061 066 071 076 081 086 091 096
{起始值..终止值..步长}
echo {a..z..5}
a f k p u z
${} #区别变量
boy=wa
echo "$boy"
wa
echo "$oldboyhahahahahahaha"
echo "${oldboy}hahahahahahaha"
wahahahahahahaha
echo "$oldboy
hahahahahahaha"
wa hahahahahahaha
二、系统的特殊符号
1,【;】命令结束、两个命令之间的分割/隔符
echo "hahaha" ; echo "xixixi"
hahaha
xixixi
echo "hahaha" echo "xixixi"
hahaha echo xixixi
#不管前面命令是否正确,后面的命令也继续执行;
echoo "hahaha" ; echo "xixixi"
-bash: echoo: 未找到命令
xixixi
##################################
在有些服务的配置文件当中,;也是注释的意思;
高可用服务keepalive,这个服务的配置文件当中,【;】就是注释的意思;
2,【#】
#注释内容,只能看,不执行
3,【|】将前面的命令结果,交给后面的命令操作
#过滤网卡信息
ip a | grep "192.168.10."
inet 192.168.10.24/24 brd 192.168.10.255 scope global dynamic ens33
#将找到的目录,移动到/opt下
#错误的;
find ./ -type d -name "192.168" | mv -t /opt
mv: 缺少了文件操作数
Try 'mv --help' for more information.
find ./ -type d -name "10.1" |xargs mv -t /opt/
4,【$】
1,调取变量
2,普通用户的提示符
#拓展:【$?】 #判断上一个命令执行的是够正确,0正确,非0错误
echo "11111" > /data/og.sh
echo $?
0
echo $?
127
5,引号和撬棍
"" #解析特殊符号和变量
'' #所见即所得,不解析特殊变量和符号
`` #限制性反引号里面的代码命令
#######################################
#所见即所得,写什么就打印什么
echo '$boy'
$oldboy
#【\】撬棍,还原本意
echo "\$oldboy"
$oldboy
cp `find ./ -name *.txt` /opt
6,重定向
#stdin :标准输入重定向(代码:0)
<
<<
cat < 1.txt
#替换案例tr命令:分析替换原理
echo "1 2 3 4"|tr "1 " "4"
4424344
echo "123" | tr "1" "4"
423
#将空格替换成换行符
echo "1 2 3"
1 2 3
echo "1 2 3" | tr " " "\n"
1
2
3
tr "\n" " " < 1.txt
1 2 3 4 5
#stdout :标准输出重定向(代码:1)
> #覆盖
>> #追加
[root@docker 1]# echo "111"
111
[root@docker 1]# echo "111" > 1.txt
[root@docker 1]# cat 1.txt
111
[root@docker 1]# echo "111" >> 1.txt
[root@docker 1]# cat 1.txt
111
111
[root@docker 1]# ls
1.txt
[root@docker 1]# cat > 1.txt
[root@docker 1]# cat > 1.txt << EOF
> 111
> 222
> 333
> 444
> 555
> EOF
[root@docker 1]# cat 1.txt
111
222
333
444
555
#stderr:标准错误输出重定向(代码:2)
1> #标准正确覆盖输出
1>> #标准正确追加输出
2> #标准错误覆盖
2>> #标准错误追加
&> #正确错误全输出(覆盖)
&>> #正确错误都输出(追加)
2>&1>> #没用
echo "hahaha" &>>3.txt
ll
总用量 8
-rw-r--r-- 1 root root 20 7月 1 19:35 1.txt
-rw-r--r-- 1 root root 7 7月 1 19:40 3.txt
cat 3.txt
hahaha
7,逻辑符号
#与 && #前面正确,才执行后面
#或 || #前面错误,才执行后面
#非 ! #取反
echo "haha" && echo "hehe"
haha
hehe
echo "haha" || echo "xixi"
haha
#!
find ./ -name "*.txt"
find ./ ! -name "*.txt"
#案例分析:与或的关系 [ -f /etc/hosts ] 判断文件是否存在的语句
[ -f /etc/hosts ] && echo "文件存在" || echo "文件不存在"
文件存在
[ -f /etc/hostss ] && echo "文件存在" || echo "文件不存在"
文件不存在
三、系统正则符号+grep
通配符:主要用于匹配文件的名称信息
正则符:主要配合三剑客,来过滤、匹配文件的内容
1、基础正则
^ #以什么开头
$ #以什么结尾
[] #中括号中任意一个字符
[^] #中括号中内容取反
.
*
2、准备环境
cat 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
·【^】以什么开头
#过滤出以I开头的行;
grep "^I" 1.txt
I love linux study.
#grep 取反参数 -v
grep -v "^I" 1.txt
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
·【$】以什么结尾
grep "666$" 1.txt
my qq is 666666
· 打印空行
grep -v "^$" 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
·【.】匹配任意1个,有且只有1个字符
grep "^." 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
1
2
#撬棍,还原本意;
grep "^\." 1.txt
grep "\.$" 1.txt
I love linux study.
·【*】连续出现0次或者0次以上的字符
grep "b*" 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
1
2
【.*】案例
grep -o 查看匹配过程
grep ".*" 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
1
2
grep -o ".*" 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
1
2
·【[]】匹配中括号中任意1个字符
grep "[ab]" 1.txt
zhangsan1122
abc
abcabc
abcabcabc
#中括号取反[^]
grep "[^ab]" 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
1
2
2,扩展正则
#grep如果想要识别扩展正则,需要:
grep -E
或者
egrep
###############################
+
[]+
?
|
()
a(n,m)
·【+】匹配前一个字符出现1次或者1次以上
grep -E "b+" 1.txt
abc
abcabc
abcabcabc
egrep -E "b+" 1.txt
abc
abcabc
abcabcabc
·【[]+】
grep -E "[bc+]" 1.txt
abc
abcabc
abcabcabc
·【?】匹配前一个字符出现0次或1次的情况
grep -E "b?" 1.txt
I love linux study.
my qq is 666666
zhangsan1122
abc
abcabc
abcabcabc
1
2
grep -E -o "b?" 1.txt
grep -E -o "b?" 1.txt
b
b
b
b
b
b
·【|】或者
grep -E "my|i" 1.txt
grep -E "my|i" 1.txt
I love linux study.
my qq is 666666
grep -E "error|failed" /var/log/messages
·【()】表示括号中是一个整体
grep -E "(my)|(lin)" 1.txt
I love linux study.
my qq is 666666
· 【a{n,m}】前面一个字符a,连续最少出现n次,最多出现m次
grep -E "b{1,2}" 1.txt
abc
abcabc
abcabcabc
grep -E -o "b{1,2}" 1.txt
b
b
b
b
b
b
grep -E "b{1}" 1.txt
abc
abcabc
abcabcabc