回顾:

文件管理: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