Linux用户权限及脚本详解

Linux用户权限及脚本详解

一、权限

id=0                             //管理员权限
id介于1-999                       //系统中服务用户
id>1000                          //普通用户
r                                //只读数字权限4
w                                //写数字权限2
x                                //执行数字权限1
-                                //普通文件权限0

1.文件权限分解

[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.1.身份信息

1.用有人[user]    简[u]
2.拥有组[group]   简[g]
3.其他人[other]   简[o]

1.2.权限信息

1.读[read]       简[r]      权限[4]
2.写[write]      简[w]      权限[2]
3.执行[x]        权限[1] 
4.-[0]无权限

二、 shell脚本

1.要使用的字符介绍

1.通配符:~波形符
2.`command`=$(command)    //引用命令的执行结果

2.磁盘容量告警脚本

[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]结束

2.1.创建多个用户脚本

[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 ~]# 

2.3.脚本使用注意事项

1.${变量名} 应用变量的值
2.$(command)=`command`引用命令执行结果
3.{}一次引大括号里面的内容
4.变量名约定俗称用纯大写字母来表示
5.但是也可以用纯小写字母(不建议)大小混合,大写或小写与数据混合,就是不能为纯数字

3.定义变量

本地变量
1.脚本中的变量是本地变量,仅在脚本执行的瞬间生效
2.仅在当前用户下可查看使用的变量是本地变量,切换用户无效,切换table无效,子shell无效,仅仅临时生效的变量
A=100 B=200

环境变量
在所有的子shell中生效的变量,其他终端无效,其他用户无效
方法一:A=100
export A
方法二:export B=200

全局环境变量
是把环境变量定义到/etc/profile这个配置文件中,那就全局环境变量
在所有子shell中生效的变量,所有终端生效,所有用户生效

用户环境变量
把环境变量定义到~/.bash_profileh这个配置文件中,那就是用户环境变量
切换用户时,会先读取全局环境变量,再读用户环境变量,全局环境变量就被覆盖了

三、IO及管道

1.标准的输入和输出

1.standard   iuput        //标准输入(STDIN) – 缺省为键盘
2.standard   output       //标准输出(STDOUT) – 缺省为终端窗口,正确的结果
3.standard   error        //标准错误(STDERR) – 缺省为终端窗口

重定向输出到文件
command[命令] operator[操作符] filename[文件名]

操作符
> 将正确的结果重定向到操作符后面的文件中
2> 将错误的结果重定向到操作符后面的文件中
&> 重定向所有输出到文件
在重定向时, 缺省是覆盖文件内容.>>符号追加
>> 2>> &>>

1.1.重定向输出实例

//将正确的结果重定向到操作符后面的文件中
[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

1.2管道符I

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

1.3.grep简单用法

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

1.4.head和tail简单用法

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

1.5.awk简单用法

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列

你可能感兴趣的:(Linux系列,linux,运维,服务器)