回顾:
文件管理:ls, cat, tac, tail, head, more, less, cp, mv, rm, touch, stat, file, nano
用户管理:useradd, usermod, userdel, passwd, groupadd, groupmod, groupdel, id, su, chage, chfn, chsh, newgrp, gpasswd
用户类型:
管理员:0
一般用户:1-65535
系统用户:1-499,
这些用户的作用是系统刚启动是用来启动系统各进程的用户,因为进程是依附于用户来创建的,指明可以访问哪些资源。
普通用户:500+
userdd
-r:这个是创建系统用户,
不会为用户创建家目录,启动的bin/nologin,无法登陆的用户,所以这些系统用户是为了安全期间而设定的
组类型:
基本组
附加组
Linux文件类型:所有文件类型可用file指令查看
普通文件:-,f
目录:d
链接文件:l(软链接)
设备文件:
字符设备(线性设备):c
块设备(随机设备):b
命名管道:p
套接字文件:s
-d
-g -n
-l
权限管理: owner, group
文件属性有属主和属组的概念:
三类用户
属主,属组,其它
file1: fedora, fedora
权限:分为三种,read, write, execute
r, w, x
文件:
r: 可以使用内容查看类的命令来显示其相关内容;
w: 可以使用编辑器修改其内容;
x: 可以将其发起一个进程;
目录文件:
r: 可以使用ls命令查看目录内容的文件信息;
w: 可以创建、删除文件;
x: 可以使用ls -l命令查看目录内容的文件信息,并且可以使用cd命令切换此目录为工作目录;
用户的不拥有某位权限,则使用-占位;
r-x:
r--
rw-
-rw-r--r-- 1 root root 852 Jul 30 2013 bincp.sh
000:---, 0
001: --x, 1
010: -w-
011: -wx
100: r--
101: r-x
110: rw-, 6
111: rwx, 7
6: rw-
5: r-x
640: rw-r-----
使用三位八进制就可以表示三类权限了
元数据,属性,inode:
一个索引节点都有一个索引节点号,索引节点当中存储了每个文件的时间戳、权限、属主、属组、大小以及指向的磁盘块等信息
用户的权限就把存在文件的元数据中。
修改属主、属组:仅管理员可执行,chown(change owner), chgrp(change group)
改文件权限:chmod
chmod命令:
操作三类用户的权限:使用8进制形式
chmod [-R] OCTAL-MODE(八进制) file...
操作指定类别用户的权限:使用u,g,o,a来赋权,基于=或+/-来进行
[root@zhenzhen ~]# chmod u=rw,g=rw,o= a@b
[root@zhenzhen ~]# chmod -R u+x g-x a@b
[root@zhenzhen ~]# chmod +x a@b 直接对文件加所有用户的执行权限
chmod默认不会修改内部文件的权限,需要加选修-R
u: 属主
g: 属组
o: 其它
a: 所有
=:操作指定类别用户的权限;u=, ug=, u=,g=
+/-: 操作指定类别用户的单个权限: u-x, g+r, o-x, +x
参照其它文件的权限为当文件赋权
chmod --reference=要参照的文件 要修改权限的文件
rw-r--r--: rwxr-xr--
常见的权限模型:
755:rwxr-xr-x
644:rw-r--r--
700:rwx------
600
750
640:rw-r-----
040
umask:每个用户都有自己的umask
创建文件:666-umask=八进制权限
文件默认决不允许出现执行权限;
umask 023
666-023=644,如果出现最后一位是奇数则+1操作
创建目录:777-umask
可以使用umask+数字,修改当前用户的umask
root: 022
如果用户名和基本组组名一致:002;否则则为022;
!!!!!!!!!!!!!!!!!!!!重要!!!!!!!!!!!!!!!!!!!!!!!!
修改文件的属主或属组:
chown, chgrp 这里修改的是文件
-R: 递归,使该目录下的都改
--reference=
chown [option] UserName[{:|.}GroupName] file... 改文件的属主
chown root:root /tmp/permfile 可以同时修改文件的属主和属组
非常重要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
权限应用模型:
注意文件:drwxr-xr-x 2 root root 4096 Oct 7 12:40 2015-10-07-12-40
当前进程是以当前用户的身份去运行;
进程的属主,是否与文件的属主相同;如果相同,进程则以文件属主的权限来访问文件;否则
进程的属主所属的组,是否其中之一与文件的属组相同;如果相同,进程则以文件属组的权限来访问文件;否则,
进程则以文件的其它用户的权限来访问文件;
练习:
1、新建一个用户openstack,但不给其创建家目录;创建完成后使用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
练习:
完成以下任务:
(1)新建系统组mysql;新建系统用户mysql,属于mysql组,要求其没有家目录且shell为/sbin/nologin;
# groupadd -r mysql
# useradd -r -s /sbin/nologin -g mysql mysql
(2)新建GID为600的组magedu;新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
# groupadd -g 600 magedu
# mkdir /users 一定要先保证这个存在
# useradd -d /users/gentoo gentoo
# passwd gentoo
(3)新建用户centos,其家目录为/users/centos,密码同用户名;
# useradd -d /users/centos centos
# passwd centos
(4)新建用户www,其家目录为/users/www;删除www用户,但保留其家目录;
# useradd -d /users/www www
# userdel www
(5)用户gentoo和centos均以magedu为其附加组;
# usermod -a -G magedu gentoo
# usermod -a -G magedu centos
总结权限管理:chmod, chown, chgrp, umask
bash介绍:
shell: 人机交互界面
sh、csh、tcsh、bash、ksh、dash、zsh
bash: 命令解释器,能解释指令是什么,到哪里去找相应的程序,送给内核
bash特性之六:bash的快捷键
Ctrl+a: 跳至命令行首
Ctrl+e: 尾
Ctrl+u: 删除命令行首至当前光标所在处的内容
Ctrl+k: 删除当前光标所有处至命令行尾的内容
Ctrl+l: 清屏,相当于clear命令
Ctrl+c: 取消或终止;
Ctrl+z: 将当前命令送至后台
bash特性之七:bash补全
命令补全:
shell命令:内部,外部
外部:在系统某路径下有一个可执行程序
which+命令 可以查看命令的具体路径
PATH,是一组由冒号分隔的路径,指令默认去找执行程序的路径
可以全路径+指令 来运行指令
使用tab键执行补全
路径补全:在给出的打头路径补全;如果没有打头路径,则为当前;
#,$
bash: 解释器,解析器
编程语言:
C:关键字,选择、顺序
编译器:语言平台
解释器:语言平台
程序执行逻辑:
顺序执行
选择执行(条件)
循环执行:1+...+100
动态语言:
随时申请空间
解释型
perl, bash, python
静态语言:
可以提前合理分配空间,效率较高
编译型
C, C++
变量:
数据存储格式:
ASCII:11 字符编码
Binary:11
按照其变量是否需要严格定义其类型来划分:
强类型语言:C 需要预先声明变量的类型
弱类型语言:bash
定义变量类型的作用:
1、数据存储格式;
2、数据的有效存储范围;
3、比较机制不同;
4、参与的运算类型不同;
字符型
数值型:正,负
精确数值型:
整型:
近似数值型:
浮点数
单精度
双精度
布尔型:
bash特性之八:提供编程环境
变量
程序控制
#!/bin/bash 脚本文件的第一行,告诉内核使用哪种解释器!!!!!!使用哪种解释器来解释脚本
号称shebang
#!是告诉内核这是一个程序入口,后面的内核发现是一个解释器,则就认为这不是一个简单的可执行程序,就会调用解释器去处理文件内容
每个文件都有权限控制,通过x这个可执行程序的标志,可判断是否交由内核处理
加权限 chmod +x 文件名
例如ls是一个指令,是一段二进制程序,交由内核,内核找到程序的入口执行即可
练习:写一个脚本
1、创建一个组newgroup, id号为4000;
2、创建一个用户mageedu1, id号为3001,附加组为newgroup;
3、创建目录/tmp/hellodirxyz
4、复制/etc/fstab至上面的目录中
5、改变目录及内部文件的属主和属组为mageedu1;
6、让目录及内部文件的其它用户没有任何权限;
#!/bin/bash
# Description:
# Version:
# Datetime:
# Author:
myGroup="newgroup1"
myUser="mageedu2"
myDir="/tmp/hellodirxyz1"
myID=3002
groupadd -g 4001 $myGroup
useradd -u $myID -G $myGroup $myUser 注意-u
mkdir $myDir
cp /etc/fstab $myDir
chown -R $myUser:$myUser $myDir 注意-R
chmod -R o= $myDir
unset myGroup myUser myID myDir