##权限管理
owner,group,other
属主,属组,其他
###权限:
read write execute
r w x
用户的不拥有某位权限,则使用-占位
r-x:读和执行的权限
r--:只读权限
rw-:读写权限
使用8位数来表示
r:4
w:2
x:1
文件:
r:可以使用内容查看类的命令来显示其相关内容
w: 可以使用编辑器修改其内容
x:可以将其发起一个进程
目录:
r:可以使用ls命令查看目录内容的文件信息
w:可以创建、删除文件
x:可以使用ls -l命令来查看目录内容的文件信息,并且可以使用cd命令切换此目录为工作目录:
***修改文件的属主和属组 :仅管理员可执行,chown,chgrp***
###chmod命令
操作三类用户的权限:使用8进制形式
chmod OCTAL -MODE file ...
u:属主
g:属组
o:其他
a:所有
=:操作指定类型用户的权限
+/—:操作置顶类型用户的单个权限
参照其他文件的权限为当前文件来赋权
chmod --reference=参照文件名 文件名
操作指定类别用户的权限:使用u,g,o,a来赋权,基于=或+/-来进行
参照其他文件的权限当文件赋权限
###umask
创建文件:666-umask
文件默认决不允许出现执行权限:
创建目录:777-umask
root:022
如果用户名和基本组名一致:002,否则为022
###修改文件的属主或属组:chown,chgrp
chown [option] UserName [{:|.} GroupName] file ...
-R : 递归
-- reference
###权限应用模型:
1.进程的属主,是否与文件的属主相同,如果相同,进程则以文件属主的权限来访问文件,否则,进程的属主所属的组,是否其中之一与文件的属组相同,如果相同,进程则以文件属组的权限来访问文件;否则,进程则以文件的其他用户的权限来访问文件
2.总结权限管理:chmod chown chgrp umask
###练习
1.新建一个用户openstacl ,但不给其创建家目录,创建完成后使用su命令切换至此目录,查看其命令提示符及PATH和HOME两个环境变量的值
useradd -M openstack
su -openstack
echo $PATH $HOME
2.复制/etc/skel目录为/home/openstack
cp -r /etc/skel /home/openstack
3. 改变/home/openstack 及其 内部文件的属主属组均为openstack;
chown -R openstack.openstack /home/openstack
4./home/openstack及其内部的文件,属组合其他用户没有任何访问权限
chmod -R go=--- /home/openstack
su - openstack
echo $PATH $HOME
5. 新建系统组MySQL,新建系统用户MySQL ,属于MYSQL组,要求没有家目录且shell 为/sbin/nologin;
groupadd -r mysql
useradd -r -s /sbin/nologin -g mysql mysql
6. 新建GID为600的组doyle,新建用户gentoo ,要求家目录为/users/gentoo,密码同用户名字
groupadd -g 600 doyle
mkdir /users
useradd -d /users/gentoo gentoo
passwd gentooo
7. 新建用户centos,其家目录为/users/centos,密码同用户名字
useradd -d /users/centos centos;
passwd centos;
8. 新建用户www,其家目录为/users/www,删除www用户,但保留其家目录
useradd -d /users/www www;
userdel www
9. 用户gentoo和centos均为doyle为其附加组
usermod -a -G doyle gentoo
usermod -a -G doyle centos
##bash介绍
shell:人机交互界面,
bash: 命令解释器,解析器
###bash特性之六:
快捷键
Ctrl+a:跳至命令行首
Ctrl+e:跳至命令行尾
Ctrl+u:删除命令行首至当前光标所在处的内容
Ctrl+k:删除当前光标所在处至命令行尾的内容
Ctrl+l:清屏,相当于clear命令
Ctrl+c:终止或者取消命令
Ctrl+z:将当前命令送至后台(fg调回命令)
###bash特性之七:补全功能
命令补全:在PATH中搜索补全
shell命令:内部,外部
外部:在系统某路经下有一个可执行程序
PATH,一组以冒号分隔的路径
路径补全:在给出的打头路径下补全,如果没有打头路径,则为当前目录
使用tab补全
###bash特性之八:
提供编程环境
支持使用变量
支持程序控制
***#!/bin/bash被称为shebang***
###练习
1.创建一个组newgroup,id号为4000
2.创建一个用户doyle ,id 号为3001 ,附加组为newgroup;
3.创建目录/tmpj/hellodirxyz
4.复制/etc/fstab至上面的目录中
5.改变目录及内部文件的属主和属组为doyle
6.让目录及内部文件的其他用户没有任何权限
###bash的特性之九:bash中的变量
弱类型语言变量:
1.不强制区分变量的类型,无论存储何种数据,均已字符格式进行
2.无须事先声明:用到时,直接使用,直接赋值
bash:动态编程语言,是弱类型语言
变量的类型:
本地变量:只对当前shell进程有效,对其子shell以及其他shell都无效
定义变量: [set]Var_Name="Value"
引用变量: ${Var_Name}
撤销变量:unset Var_Name
局部变量:只对某一部分有效
定义变量:local Var_Name="Value"
环境变量:对其shell进程及其子shell有效:
定义:export Var_Name="var name"
注意不要和当前环境的环境变量冲突
位置变量:
$1,......$n
特殊变量
$0:脚本名称自身
$?:上一条命令的执行状态
状态用数字表示:0-255
0:表示成功
1-255:失败,1.2.127.255预留
$$
$!
$#
$*
变量的命名要求:
只能使用数字,字母,和下划线组成
不能以数字开头
不能使用程序中的关键字
见名知义
***不带任何参数的set,显示当前系统的所有变量***
***环境变量:用来定义bash的工作特性,用来保存当前会话的属性信息***
***显示所有环境变量:export ,env ,printenv***
###bash的配置文件:持久保存用户配置
profile类:为交互式登录的用户提供配置
/etc/profile 全局
/etc/profile.d/*.sh 全局
~/.bash_profile 个人配置,仅对当前用户有效
功能:
设定环境变量
运行命令或者脚本
bashrc 类:非交互工登录用户提供配置
/etc/bashrc:全局
~/.bashrc:个人配置
功能:
设定本地变量
定义命令别名
登陆类型:
交互式登录:直接通过终端输入用户信息登陆系统
su - UserName或su -l UserName:
如何读取配置文件
/etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile-->~/.bashrc -->/etc/bashrc
非交互式登录:
su UseName
图形界面下的终端
执行脚本的时候,先设置配置文件
如何读取配置文件
~/.bashrc -->/etc/bashrc -->/etc/profile.d/*.sh
通知shell重读系统文件
source(.) 重读配置文件
###bash脚本:面向过程的编程中
顺序执行:默认法则,逐条执行各命令
选择执行:分支,条件判断,符合条件的分支予以执行
循环执行:将同一段代买反复执行有限次,所以,循环必须有退出条件,否则将陷入死循环
####循环控制语句
for循环
for var_Name in 列表; do
循环体(正常执行的执行命令)
语句1
语句2
语句3
...
done
***bash -n 脚本文件 检查脚本文件语法是否错误***
while
until
###列表的生成方法:
生成数字列表{start..end}、seq[start][stop]
seq 起始数字、步长,结束数字
for:通过使用一个变量去遍历给定列表中的每个元素。在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环
总结:生成列表方式
1.直接给出列表
2.使用文件名通配的机制生成列表
3.可以使用{}或seq命令生成数字序列
4.使用命令生成
##文本处理类的命令
## wc
wc[option][file]...
-l:统计行数
-c:统计字节数
-w:统计单词数
## tr 转换字符或删除字符
tr '集合1' ’集合2‘
tr -d ’字符集合‘
###cut:根据制定的分隔符切片,并显示出需要显示的片
cut 选项 参数
-d字符:指定分隔符
-f数字:指定要显示的字段
单个数字:一个字段
多个离散字段:逗号分隔
多个连续字段:-分隔
###sort:按字符进行比较
sort[options] file
-f:忽略大小写
-n:对数字进行排序
-t:指定分隔符
-k 数字:指定分隔后进行比较字段
-u:重复的行,只显示一行
uniq:移除重复的行
-c:统计每一行出现的次数(靠着的行)
-d:仅显示出现最少两次的行
-u:仅显示不重复的行
##练习
(1) 切换指centos用户,定义本地变量FirstVar ,其值为“test variable”
su -centos
FirstVar="test variable"
(2) 另一个终端,使用gentoo用户查看FirsVar变量的值,如果没有值,为什么?
只对当前shell进程有效,对其子shell以及其他shell都无效
(3) 声明一个变量CurTime,其值为当前系统
curTime=`date +%T`
(4) 使用echo命令显示“the current time is:” is 后跟上curtime变量的值
echo "the current time is: $curTime"
(5) 回至centos用户的终端,复制/etc/pam.d目录至/tmp目录中,并重命令为test;
cp -r /etc/pam.d/ /tmp/test
(6) 声明变量fileName,其值为刚才复制的目录/tmp/test
fileName="/tmp/test"
(7) 修改变量filename所表示的目录及其内部所有文件的其他用户均没有任何访问权限;
chmod -R o=$fileName
(8) centos用户是否可以修改变量filename所表示的目录的属主和属组? 如果能,将其改变gentoo用户和gentoo组;如果不能,则使用root用户修改
##脚本练习
练习一: 写一个脚本,用file命令显示/var/log目录下每个文件的内容类型;
提示:列表生产的方法为/var/log/*
练习二:写一个脚本
1.创建一个/tmp/scripttest目录,用变量保存目录名‘
2. 在目录里创建测试文件tfile1-tfile20
3. 创建用户testuser1和testuser2;
4. 将tfile1-ftile10的属主和属组改为testuser1;
5. 将tfile1-tfile20的属主和属组改为testuser2