id=0 //管理员权限
id介于1-999 //系统中服务用户
id>1000 //普通用户
r //只读数字权限4
w //写数字权限2
x //执行数字权限1
- //普通文件权限0
[root@xie ~]# ll -d /etc/passwd
-rw-r--r--. 1 root root 2052 Jul 20 10:02 /etc/passwd
[-] 表示普通文件
[d] 表示目录文件
[l] 表示链接
[c] 字符类型
[b] 块设备
[rw-] 拥有人权限
[r--] 拥有组权限
[r--] 其他人权限
1.用有人[user] 简[u]
2.拥有组[group] 简[g]
3.其他人[other] 简[o]
1.读[read] 简[r] 权限[4]
2.写[write] 简[w] 权限[2]
3.执行[x] 权限[1]
4.-[0]无权限
1.通配符:~波形符
2.`command`=$(command) //引用命令的执行结果
[root@xie ~]# df -h | grep -w / | awk '{print $5}' | sed 's/%//g'
6
df -h //列出磁盘使用情况
grep -w //表示搜索根下
[root@xie ~]# cat pan
#!/bin/bash
DISK=`df -h | grep -w / | awk '{print $5}' | sed 's/%//g'`
if [ "$DISK" -ge 5 ];then
echo "warning,the root partition is full!"
fi
$后跟大写引用[-ge]表示大于号;结束[then]那么的意思[fi]结束
[root@xie ~]# echo -e "user1\nuser2\nuser3\nuser4\nuser5" > user.txt
[root@xie ~]# cat user.txt
user1
user2
user3
user4
user5
[root@xie ~]# cat user
#!/bin/bash
for USERS in $(cat user.txt) [for循环创建的user中的数据]
do [循环要干什么]
useradd $USERS [做的事情是创建用户]
echo redhat | passwd --stdin $USERS [配置密码]
done [完成]
[root@xie ~]# chmod +x user
[root@xie ~]# ./user
useradd: user 'user1' already exists
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
Changing password for user user4.
passwd: all authentication tokens updated successfully.
Changing password for user user5.
passwd: all authentication tokens updated successfully.
[root@xie ~]#
1.${变量名} 应用变量的值
2.$(command)=`command`引用命令执行结果
3.{}一次引大括号里面的内容
4.变量名约定俗称用纯大写字母来表示
5.但是也可以用纯小写字母(不建议)大小混合,大写或小写与数据混合,就是不能为纯数字
本地变量
1.脚本中的变量是本地变量,仅在脚本执行的瞬间生效
2.仅在当前用户下可查看使用的变量是本地变量,切换用户无效,切换table无效,子shell无效,仅仅临时生效的变量
A=100 B=200
环境变量
在所有的子shell中生效的变量,其他终端无效,其他用户无效
方法一:A=100
export A
方法二:export B=200
全局环境变量
是把环境变量定义到/etc/profile这个配置文件中,那就全局环境变量
在所有子shell中生效的变量,所有终端生效,所有用户生效
用户环境变量
把环境变量定义到~/.bash_profileh这个配置文件中,那就是用户环境变量
切换用户时,会先读取全局环境变量,再读用户环境变量,全局环境变量就被覆盖了
1.standard iuput //标准输入(STDIN) – 缺省为键盘
2.standard output //标准输出(STDOUT) – 缺省为终端窗口,正确的结果
3.standard error //标准错误(STDERR) – 缺省为终端窗口
重定向输出到文件
command[命令] operator[操作符] filename[文件名]
操作符
> 将正确的结果重定向到操作符后面的文件中
2> 将错误的结果重定向到操作符后面的文件中
&> 重定向所有输出到文件
在重定向时, 缺省是覆盖文件内容.>>符号追加
>> 2>> &>>
//将正确的结果重定向到操作符后面的文件中
[root@xie ~]# echo "520-1314" > find.txt
[root@xie ~]# find / -name find.txt > find2.txt //查找到的文件绝对路径追加到文件
[root@xie ~]# cat find2.txt
/root/find.txt
//将错误文件重定向到新文件
[root@xie ~]# cat afasfasf 2> 11111
[root@xie ~]# cat 11111
cat: afasfasf: No such file or directory
//重定向所有输出文件到文件
[root@xie ~]# cat find.txt &> 1
[root@xie ~]# cat 1
520-1314
command1 ; command2 ; command3
//多条命令用分隔符隔开,顺序执行,前后无关联
command1 | command2 [ | commandN... ]
//多条命令用管道符隔开,前一条命令的输出结果是后一条命令的输入
//管道符用法
[root@xie ~]# ss -anltup | grep "t*" > /canshu
[root@xie ~]# cat /canshu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp UNCONN 0 0 *:123 *:* users:(("chronyd",1043,1))
tcp UNCONN 0 0 127.0.0.1:323 *:* users:(("chronyd",1043,3))
tcp UNCONN 0 0 *:39523 *:* users:(("avahi-daemon",1022,13))
tcp UNCONN 0 0 *:5353 *:* users:(("avahi-daemon",1022,12))
tcp UNCONN 0 0 :::123 :::* users:(("chronyd",1043,2))
tcp UNCONN 0 0 ::1:323 :::* users:(("chronyd",1043,5))
tcp LISTEN 0 128 *:22 *:* users:(("sshd",1526,3))
tcp LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",14126,12))
tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",2007,13))
tcp LISTEN 0 128 127.0.0.1:6010 *:* users:(("sshd",13810,9))
tcp LISTEN 0 128 :::22 :::* users:(("sshd",1526,4))
tcp LISTEN 0 128 ::1:631 :::* users:(("cupsd",14126,11))
tcp LISTEN 0 100 ::1:25 :::* users:(("master",2007,14))
tcp LISTEN 0 128
grep
+w //word单词
+i //忽略大小写
-f //循环读取
-q //不显示处理信息
-v //显示详细的处理信息
-c //<数目> 显示的字节数
-n //<行数> 显示文件的尾部 n 行内容
--pid=PID //与-f合用,表示在进程ID,PID死掉之后结束
-q --quiet, --silent //从不输出给出文件名的首部
-s --sleep-interval=S //与-f合用,表示在每次反复的间隔休眠S秒
grep实例:
[root@xie ~]# grep -i user1 /etc/passwd
user1:x:1001:1001::/home/user1:/bin/bash
head //开头行
-n //行
tail //末尾行
-n //行
[head实例]:
[root@xie ~]# head -n 10 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
awk //基于列的文本报告工具
语法:awk [选项] '匹配模式 {执行动作}'
-F '' //指定分隔符,可以使用正则表达式[]指定多个分隔符
-v OFS='' //指定打印时的分隔符
执行动作:
'{print $#}' //选择打印第#列,$0代表所有列,$NF代表最后1列
匹配模式:
'/关键字/' //匹配关键字的行,支持正则表达式
'/关键字1/,/关键字2/' //匹配从关键字1到关键字2中间所有的行
'NR==1' //匹配第1行
'NR>=10' //匹配行数大于10的所有行并显示行号
'$1==1' //匹配第1列的值等于1的行
'$1>=10 && $1<=20' //匹配第1列的值大于等于10并小于等于20的行
'$1>=10 || $3!=20' //匹配第1列的值大于等于10或者第3列的值不等于20的行
'$NF~"/sbin/nologin"' //匹配最后1列字符为/sbin/nologin的行
'$NF~!"/sbin/nologin"' //匹配最后1列字符不为/sbin/nologin的行
语法示例:
awk -F ':' '{print "第一列:"$1,"第二列:"$2,"第三列:"$3}' /etc/passwd
//使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
awk -F ':' -v OFS='-' '{print $1,$2,$3}' /etc/passwd
//使用:为分隔符分割/etc/passwd文件中的内容,按照想要的格式打印出来
awk -F '[:/]+' '{print $1,$6}' /etc/passwd
//使用:或/或:/或多个:或多个/或多个:/为分隔符分割/etc/passwd文件中的内容,打印出第1列和第6列