Shell文件权限和脚本执行
一、预备知识
1、shell的作用
2、常识
(1)Tab键自动补全
使用Terminal时,输入命令的前几个字母,敲tab会自动补全命令或文件名、目录等。
好处:操作速度更快;不容易出错;
(2)清屏命令
Ctrl + L 或 输入命令clear
(3)命令历史:
执行:history
清除历史:history -c
技巧1:!num 命令直接打开历史命令,num为history查看的序列
技巧2:!XX 命令查看历史命令中最后一次以xx结尾的命令
技巧3:Ctrl + R ,然后输入历史命令的一部分,能快速搜索想要找的历史操作全名
(4)命令别名:
使用频率高的复杂命令,可以设置简短的调用名称,存放位置: ~/.bashrc
alias 别名=‘实际执行命令’ 设置别名
unalias 别名 取消别名
alias [别名] 查看系统中的别名
注意:别名,重启后消失,若经常使用,可以保存到bashrc文件中
(5)输出重定向
1>相当于>正确重定向
2>错误重定向(将错误信息重定向到指定文件中)
将正确和错误的结果都重定向到文件中的方法:
命令 1> 文件 2>&1
命令 1>> 文件 2>&1
解释:错误的信息也会通过通道1进入文件中。
管道操作符号“|”
练习示例:
[root@Salve scripts]# free -m | grep Mem Mem:980875105173569 [root@Salve scripts]# free -m | grep -i mem Mem:980875105173569 [root@Salve scripts]# free -m | grep -i mem | awk 'print $4' awk: print $4 awk:^ syntax error [root@Salve scripts]# free -m | grep -i mem | awk '{print $4}' [root@Salve scripts]# free -m | grep -i mem | awk '{print $2,$3,$4}' [root@Salve scripts]# free -m | grep -i mem | awk '{print $2"\n",$3,$4}' 875105 [root@Salve scripts]# free -m | grep -i mem | awk '{print $2"\n",$3"\n",$4"\n"}' 875 [root@Salve scripts]# free -m | grep -i mem | awk '{print "total:"$2"\n","used:"$3"\n","free:"$4"\n"}' total:980 used:875 free:104
(6)Linux系统的启动级别
从0 到 6 共7个,比较重要的是0、3、5、6。
说明:
init 0 关机
init 3 字符模式模式(网络功能齐全)
init 5 图形界面
init 6 重启
注:可在终端输入init x进入到对应的状态,如重启:# init 6
二、认识权限和用户管理
1、关于权限
权限类型:
1、r 读
2、w 写
3、x 可执行
Linux用户
1、所有者(u)
2、所属组(g) (所有者及所有者所在组的全部用户)
3、其他用户(o)(其他组的所有用户(包括文件所有者))
4、所有用户(a)
文件权限解读
-rw-r--r--. 1 root root 44184 5月 22 00:28 install.log
- rw- r-- r-- root root 44184 insall.log
文件类型 所有者权限 所属组权限 其他用户权限 所有者 用户所在的组 文件大小 创建时间 文件名
[root@Salve ~]# ll 总用量 100 -rw-------. 1 root root 1752 5月 22 00:29 anaconda-ks.cfg -rw-r--r--. 1 root root 44184 5月 22 00:28 install.log [root@Salve ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash [root@Salve ~]# head -1 /etc/group root:x:0: [root@Salve ~]# cat /etc/group root:x:0: bin:x:1:bin,daemon
2、用户与权限
2.1、用户管理
(1)、用户查看
id username
(2)、用户添加
useradd username
创建用户,同时会产生新的用户组,并且用户属于该组
(3)、用户删除
userdel -r username
2.2、用户组
用户与组的关系:
(1)、把用户加入组
[root@Salve ~]# id test2 uid=501(test2) gid=501(test2) 组=501(test2) [root@Salve ~]# gpasswd -a test2 root #把用户test2加入到root组 Adding user test2 to group root [root@Salve ~]# id test2 uid=501(test2) gid=501(test2) 组=501(test2),0(root) #test2同时属于两个组
同时属于两个组后,两个组的权限都具备,即两个组权限之和
(2)、把组中用户删除
[root@Salve ~]# gpasswd -d test2 root
Removing user test2 from group root
3、权限分配
第一、二种修改用户对文件的权限
3.1、chmod权限分配
3.1.1、字母权限分配
chmod u+x file
chmod u-x file
(对用户单独设置权限用此方式。)
3.1.2、数字权限
chmod 755 file
数字对应权限如下:
r 4
w 2
x 1
755 rwx r-x r-x
754 rwx r-x r--
默认644
(当所有用户的权限都要修改时用词方法)
缺点:不能对用户的细化权限分配
3.2、acl权限分配
适用于对权限的细化需求,比如要求一些用户对某个文件file的权限如下:
1、root file rw-
2、root file r--
3、other file r--
4、user1 file rw
5、user2 file rx
6、user3 file wx (不能查看,但是能写入)
7、user4 file rwx (rwx只是对内容有权限,无法删除)
acl权限分配:
(1)、setfacl设置文件权限
setfacl -m u:user1:rw file01.txt
setfacl -m u:user2:rx file01.txt
(2)、getfacl查看文件权限
getfacl file01.txt
(3)、删除文件权限
setfacl -x user:user4 file01.txt
(4)、清空文件权限
setfacl -b file01.txt 擦除对文件所有的权限(恢复文件的原始状态权限:644)
(5)、创建和删除文件权限:
#需要对目录设置acl权限即可
setfacl -m u:user4:rwx mnt/
注意:
dr-xr-xr-x. 2 root root 4096 5月 24 14:19 mnt
切换到目录的一瞬间需要目录的x权限,否则不能切换目录。
setfacl -m u:user4:rwx -R /mnt/ R参数代表递归
(7)、目录中后期添加的子目录和文件如何继承父目录的权限
方法一: setfacl -m u:user4:rwx -R /mnt/ 繁琐 (应用实例:网站文件管理)
方法二:setfacl -m d:u:user4:rwx -R /mnt/ d代表default权限,会继承默认权限
用户对程序、命令的权限
3.3、sudo权限设置
设置用户对命令的执行权限-visodo:(1)、设置:
# visudo
user4 localhost=/usr/sbin/useradd,/usr/sbin/userdel
(2)、使用有密码的sudo授权命令
$ sudo /usr/sbin/useradd user5
$ sudo /usr/sbin/userdel -r user5
(3)、使用无密码的sudo授权命令 (使用情境:在脚本里输入命令)
$ sudo /usr/sbin/useradd user6
$ sudo /usr/sbin/userdel -r user6
设置形式:
user5 ALL=NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel
sudo ALL=NOPASSWD: /usr/sbin/userdel -r user4
三、Shell文件权限和脚本执行
1、Shell脚本简介
(1)、用途:完成特定的、较复杂的系统管理任务
(2)、格式:集中保存多条Linux命令,普通文本文件
(3)、执行方式:按照预设的顺序执行解释执行
2、编写可执行的Shell脚本
(1)、 建立包含执行语句的脚本文件
(2)、 #脚本文件中包含的内容
运行环境设置:#!/bin/bash
注释信息:以#开始的说明性文字
可执行的Linux命令行
(3)、为脚本文件添加可执行权限
3、执行Shell脚本的方式:
(1)、bash test.sh #不需要写解析器,并且不需要给脚本设置执行权限
(2)、./test.sh #需要写解析器,需要给脚本设置执行权限
4、Shell脚本例子:
(1)简单例子
#!/bin/bash #tesh.sh echo 'disk space:' echo df -Th echo echo 'free space:' free -m echo echo 'users:' for i in'ls /home' do id -u $i done
运行Shell脚本:
直接执行具有x权限的脚本文件:例如:./test.sh
使用指定的解释器程序执行脚本内容:例如:bash test.sh 、sh test.sh
(2)实例练习:
每周五17:30清理FTP服务器的公共共享目录
检查/var/ftp/pub/目录,将其所有子目录及文件的详细列表、当时的时间信息追加保存到/var/log/pubdir.log
文件中,然后清空该目录
yum -y install vsftpd*
#!/bin/bash #ftp目录统计 date >>/var/log/pubdir.log ls -lhR /var/ftp/pub >>/var/log/pubdir.log rm -rf /var/ftp/pub
crontab -e
查看任务计划:
crontab -l