bash的基础特性
globbing 整体文件名通配(非部分),对多个文件进行匹配的一种匹配模式。 匹配模式需要用到 元字符(元数据相当于一本书的目录)。windows中也有元字符 * ,也叫万能通配符 ,代表任意长度的任意字符,linux也是. 举例
pa
, 所有以pa开头的所有文件都符合这个条件。 pa 所有以pa结尾的所有文件都符合这个条件。 pa 所有文件名中间包含pa的都符合这个条件。 pa 所有文件中包含p和a的都符合这个条件。 但是pa*只能用来描述p在a之前,不能来描述p在a之后。 ? 用来代替任意一个单独字符。 举例 pa? 以pa开头的文件,且文件名长度只能是3个,所以 pa不符合,paa符合,passwd不符合 ??pa 以pa结尾的文件,且文件名长度只能是4个 p?a 以p开头,以a结尾,且文件名只能是3个的文件。

[]中括号,匹配指定范围内的任意单个字符 有几种特殊格式 [a-z],[A-Z]都用来表示所有字母a-z的,不区分大小写. PS 由于[a-z]的顺序是aAbB...zZ的缘故,a-z会 漏掉一个大写的Z.同理A-Z会漏掉一个小的的z] 表示完整的a-z是[a-Z]或[A-z].

[0-9]用来表示所有数字

[a-Z][0-9]用来表示所有数字和字母.

中括号内只要出现一个符合在这个范围内的条件,就匹配成功. 举例 pa[0-9] 用来寻找以pa开头,后面数字0到9范围内的文件.且文件名长度不能超过3 pa[a-z] 用来寻找以pa开头.后面字符a到z范围内的文件.且文件名长度不能超过3 pa[0-9][0-9] 用来寻找以pa开头.后面存在2个数字的文件,文件名长度不能超过4 搜索包含200到299之间的文件, 2[0-9][0-9]即可.

小细节 匹配中[a-z]不区分大小写,但用户指定的话除外 举例.当前目录中存在 pa和Pa两个文件 使用 p[a-z] 只会显示pa这一个文件,因为Pa是大写P开头,不符合用户限定的小写条件.而 [a-z][a-z] 则会显示 pa和Pa两个文件,所以说匹配不区分大小写。

强制查找大写字母,则使用固定格式[:upper:],表示所有大写字母. 举例,查找包含大写字母a-z字母的文件 [[:upper:]],外侧的中括号表示指定范围,内侧的中括号[:upper:]则为固定格式. [取值[:upper:]范围],且只代替一个字符位置. 举例

touch PpP

ls [[:upper:]]p[[:upper:]]

PpP

[[:upper:]] 表示所有大写字母, [[:lower:]] 表示所有小写字母, [[:alpha:]] 表示所有字母, [[:digit:]] 表示所有数字. [[:alnum:]] 所有的字母和数字, [[:space:]] 所有空白字符,空格、TAB、及回车。水平及垂直制表符。 [[:punct:]] 所有标点符号。 [[:blank:]] 表示空格(水平制表符)及TAB 创建名字包含空白字符的文件时,需使用转意符,举例 touch p a 这样执行后是创建两个文件(a和b) touch p\ a 这样执行后创建的文件才是名字为p a的一个文件. 不加转意符,touch p a中,p和a之间的空格是用来表示两各参数的分隔符的 加入转意符,则表示p和a之间的空格就是空白字符本身,不再作为参数分隔数识别.

[^] 匹配指定范围外的任意单个字符 举例 [^[:upper:]] 除了大写字母外的所有文件名. [^[0-9]] 除了数字外的所有文件名, [^[:alnum:]] 除了字母和数字外的文件名,即特殊符号的文件.

tr命令 去除字符命令 tr + -d+要去的字符,举例

echo abc | tr –d b

ac

ln 创建软链接,硬链接 格式 : ln 源文件+目标文件 创建硬链接

ln /etc/issue /tmp/123

将etc下的issue创建为硬链接,目标指向tmp下的123,此时123的所有值,权限,大小.时间戳等完全一致.即这两个文件是同一个文件.就是位置不一样.

PS: 硬链接只能是在同一个分区(文件系统)内进行,不能跨分区(文件系统)进行.查看是否是统一分区命令 # df即可. Ln -s 源路径+目标路径 创建软链接

ln -s /tmp/issue /app/123

#将etc下的issue创建为软链接,此时运行/app下的123文件,其数据与/etc下 的issue相同,但权限,时间戳,路径不一致.用windows的说法就是:/app/123理解为/etc/issue的快捷方式. PS :软链接可以跨分区(文件系统来进行). 如果创建的{软、硬}链接文件事先不存在,则自动创建同名的文件.

套接字 客户端端口(随机)与服务器端口(固定)的连接方式。也就是两个端口号连接 叫套接字。 大部分套接字都是远程的,需要进程建立端口来实现,本机的套接字需要套接字文件实现。 以后连接Mysol就是用端口远程连接来实现。

nc -Ul name 创建一个套接字

nc -U name 加入这个套接字 (在同一个tty下,新建一个tty)

两个tty可以像QQ那样聊天了.

IO(输入输出设备)重定向及管道管理

程序=指令+数据
程序自己也有输入输出的概念(运行一段指令得出结果再保存到某处,比如计算机的后台服务程序)

数据来源 1 设备输入:2 程序自带:

程序的数据流有三种 输入的数据流 标准输入(stdin) 默认为键盘 输出的数据流 标准输出(stdout) 默认为显示器 错误数据输出流 错误输出(stderr) 默认为显示器

fd:文件描述符 对程序来说,标准输入用0表示,标准输出用1,错误输出用2来表示

io重定向

正确输出重定向 > 覆盖式 可以重新指定程序的默认输出位置,包括其他的终端(虚拟或实体).举例

cat /etc/issue > /tmp/issue.out 执行后,会先在/tmp目录下创建一个issue.out 的文件,再把/etc/issue当中的值复制过去.

通常用来在各设备之间来互相传递数据. PS cat /etc/issue /dev/sda 会干掉硬盘上的所有数据. 另外这种重新定向输出的结果是覆盖式的,且不询问用户.

正确输出重定向 >> 追加内容 与>覆盖原有内容不同的是,它会保留之前的内容,并在后面输出定向的内容.

set 设置或撤销shell选项的值以及位置参数. set -C 禁止使用覆盖重定向符 > 来覆盖已存在文件内容 set+C 关闭 set -C的效果 使用了set-C后,若想执行本次的覆盖指令,可在>后面加上|竖线即可. (竖线 shift+回车旁边的键) 强制覆盖操作 >| 举例

set-C set -C 的设定,只对当前shell有效。

cat /etc/issue > /tmp/issue.out

提示 无法覆盖已存在的文件

cat /etc/issue >| /tmp/issue.out

执行成功

set +C

# cat /etc/issue >| /tmp/issue.out

执行成功

错误输出流重定向 2> 覆盖式 错误输出流重定向 2>> 追加内容

cat /etc/issue1 2> /tmp/issue.err

本行的错误消息,被2>错误输出重定向转移到ieesu.err文件里去了

所以此时cat /tmp/issue.err的值为 没有那个文件或目录.

2> 2>> 是正确输出和错误输出 合并这两者的命令 &> &>> 不论是正确的还是错误的,都会输出重定向到指定位置. 举例,a文件值位 hello

cat a &>> /tmp/b

此时b的值为hello

cat abc &>> /tmp/b

因为abc文件不存在,同时使用了追加命令,所以此时b文件内容为 hello 没有那个文件或目录

cat a &>> /tmp/b 等于 cat a >> /tmp/b 2>&1

2>&1 默认错误输出为2,&符号相当于and,1是正确输出的意思.此指令代表如果命令正确,则输出文件到正确的1当中,如果不正确,就将错误的2追加到1指定的文件中. 2>&1 不能写为2>>&1

输入重定向 < 和管道的区别是,管道后可以接命令,输入重定向的目的地不能接命令.

mail命令 mail+ -s +主题+目的用户 回车编辑内容。编辑完后用 .结束 查看邮件 切换到目的用户,输入 mail,在出现的列表中选择邮件前的数字编号输入并回车,则显示. 回复邮件则按r键

tr 命令
tr set1 [set2] ,也可以<+文件的形式来读取数据 如果set1比set2长,那么多出的部分将按照set2中最后的一个符号来转换 如果set2比set1长,那么转换完set1后将停止转换。

tr -s set1 连续的字符只显示一个 tr -d set1 删除指定范围的字符 以上俩种不会修改原文件,只把指定的结果显示在屏幕上.

把输入的数据当中的字符,凡是在set1定义中出现的,按位对应转化为set2当中出现的字符. 举例 tr[a-z] [A-Z] 意思为,把输入的英文字符转为为大写的形式,第一个a-z是set1,A-Z是set2.

tr[a-z] [A-Z] < /tmp/issue.err

将输入定向改为issue.err文件内的内容,并将其中的所有小写字符转换为大写,输出到屏幕上.

tr命令通常用来转换.压缩,删除,替换字符等来使用.

<< 此处创建文档的意思,用法(多行重定向)

cat << eof

执行后,以文本形式输入数据,当输入eof后回车结束输入,并将所输入的内容显示在屏幕上.

cat > tmp/issue << eof

执行后,以文本形式输入数据,当输入eof后回车结束输入,并将所输入的内容保存到tmp/下的

issue文件中.

管道命令 | :连接程序.将前一个命令的输出位置,直接定向后一个程序,当做输入数据流.

cat /etc/issue | tr[a-z] [A-Z]

将cat的输出,当做了tr命令的输入,此时会在屏幕上显示大写的issue文件内容.

因为tr的输出位置没有发生变化.还是按cat的默认输出--屏幕. 可以存在多个管道

cat /etc/issue | tr [a-z] [A-Z] |tr -d [0-9]

将issue当中的小写字母换成大写的,并且删除当中的所有数字,将结果显示在屏幕上.

|命令是一次输入,一次输出

管道命令前可直接加命令 who | tr a-z A-Z
将who的信息改为大写并显示在桌面上。

输入重定向 < 和管道的区别是,管道后可以接命令,输入重定向的目的地不能接命令.

tee 命令,它可以实现一次输入,二次输出.一份放指定文件内,一份放管道里.

cat /etc/issue | tee /tmp/issue.tee | tr [a-z] [A-Z]

执行结果 先经过tee命令,将issue当中的数据保存至issue.tee当中

然后执行tr命令,将小写切换为大写,并将结果输出在屏幕上.

小技巧 tee命令可以创建出实际不存在的文件.

特殊设备 /dev/null 数据黑洞,放入当中的数据会自动丢弃 主要用来 只需要执行命令后的成功与否,不需要命令的执行结果时用

ls /var &> /dev/null 查看目录/var,并将结果输出到/dev/null中

echo $? 查看上一次命名执行后的参数,只有为0才是正确

0 执行成功

通常这种办法是用来运行编程或脚本时,查看有无错误时用,不要执行结果,只看正确与否.

用户,组和权限管理。

用户: 每个计算机使用者都是用户。通常是账号密码的形式来进行。 账号是识别这个用户唯一的标识,而密码是用来认证这个用户。 认证完毕后,计算机再分配对应的权限给这个用户。然后再审计(监督)这个用户。使用权限是否超标。 即 认证--授权---审计(监督)3A政策。 用户类别 1 管理员组 组ID号为 0 2 系统用户的数字ID取值范围 centos5和6 1-499 centos7 1-999 3 登录用户的数字ID取值范围 centos5和6 500--60000 centos7 1000-60000 4 普通用户是1-65535来表示。但一般只用到60000,后面的省略了。

linux上的运行的进程,所拥有的权限取决于用户本身,不同的用户,权限大不相同。系统用户是为了能够让那些后台进程或服务类进程以非管理员的身份运行而存在的。这样就达到了限制权限的目的。为此,通常需要创建多个普通用户,但这些用户从不登录。也可以说,系统用户是运行内核服务的普通用户。而通常说的进程,其实也是按发起者(用户)所拥有的权限来运行的。

计算机只认二进制数字,用户名也是用16位二进制来表示,取值范围0-65535.管理员默认为0.

名称解析:将用户名字转换为计算机能理解的名字的过程。使用名称解析库进行。名称解析库包含了 用户名和ID名的对应关系。linux的解析库就是 /etc/passwd.最开始是把用户名跟密码都放这里的,但为了安全,又将密码单独放入/etc/shadow数据库中并单独加密组的密码库文件是在 /etc/gshadow 。

用户组:用户的容器,能将多个用户合并在一起作为一个单独的逻辑组件。 它和文件的属主和属组一起形成一个完整的逻辑,便于对权限的授予及撤销。一个用户,对自己属主的文件拥有全部权限,而对属组的文件只有部分权限。linux用这种形式,对文件和用户进行立体化管理。

而判断当前用户对文件是否有访问权限顺序 文件所属人>文件所属组>其他 ,前面只要判定成功,则不再判定.

用户组按分类有如下三种:

组类别1 管理员组 0 普通用户组 1-65535 系统用户组 centos5和6 1-499 centos7 1-999 登录用户组 centos5和6 500--60000 centos7 1000-60000 同样需要用到解析库. 组的解析库为 /etc/group

组类别2 用户的基本组 即主组 用户的附加组 用户的额外组

组类别3 用户的私有组 组名同用户名,且只包含一个用户。 用户的公共组 组内包含了多个用户。 公共组不×××全。因为当组中某个用户创建了文件,这个文件对于组成员来说是共享的。

密码的使用策略 1 使用随机密码 2 长度不低于八位 3 使用包含大写字母,数字,标点符号,小写字母的混合组合 4 定期更换、

密码的加密算法 1 对称加密 加密和解密使用同一个加解密方式,将明文转换为密文。 2 非对称加密 加密和解密使用一对密码钥匙来加解密。每一对分为 公钥和私钥。 3 单向加密 只能加密,不能解密。提取数据指纹(特征码)来进行。 特点: 1 定长输出 不看源数据长短,算出的特征码是固定长度。 2 雪崩效应 任何一点数据的变化,都会导致结果绝不相同。 加密命令 md5 定长输出128位 sha1 定长输出160位 sha224 定长输出224位 sha256 定长输出256位 sha384 定长输出384位 sha512 定长输出512位 为了避免多个用户设置的密码一样,导致加密的结果一样,故在加密计算时会加入随机数(salt)来进行区分。(同一种加密,只要数据一样,结果必定相同,加入随机数会改变数据)在校队密码时候,将之前的随机数提取出来,再加上输入的密码进行计算,然后跟保存下来的结果相对比,一样的话就证明密码输入正确。

/etc/passwd 用户的信息库,包括用户名,用户密码等等,格式 name用户名 password密码 UID账号ID GID组ID GECOS注释信息 directory家目录 shell默认shell. 第一字段 用户名 第二字段 早期的用户密码,现在用x代替,x作为占位符,表示密码转移到/etc/shadow中去了 第三字段 指的是UID,用户的数字ID号。 第四字段 GID 用户所属的主组的ID号 第五字段 GECOS 用户的注释信息,比如公司电话啊,家庭电话等等. 第六字段 用户的家目录. 第七字段 用户的默认shell。 举例:# root:x:0:0:root:/root:/bin/bash中,root是用户名,x是密码占位符,第一个0是UID,第二个0是组ID.rott是用户的注释信息,/root是用户家目录,/bin/bash则是用户的默认shell.

/etc/shadow 存放用户密码及用户账号期限的信息,格式

登录名 加密了的密码 最后一次更改密码的日期 密码的最小年限 密码的最大年限 密码警告时间段 密码禁用期 账户过期日期 保留字段,中间用冒号隔开. 登录名 必须是系统内有效且存在的用户名 加密了的密码 用加密方式加密过的密码,包含算法. 最后一次更改密码的日期 从1970年1月1日开始,最近一次修改密码的时间.

密码的最小年限 用户修改一次密码后,多久后需要再次更改密码的时间.为0或空字段表示没有限制,

密码的最大年限 过了这些天之后,用户必须改密码.为0的话表示用户不能改密码.空字段表示没有密码最大年限,包括没有密码警告时间段及密码禁用时间段.

密码警告时间段 密码过期之后,用来警告用户改密码的天数,空字段或0则表示没有警告时间 . 密码禁用期 密码过期后,接受这个密码的天数,空字段表示没有禁用期.它跟密码警告时间段的区别: 密码警告时间段内,用户不改密码依然可以登录计算机,但是密码禁用期内,不改密码则无法登录.

账户过期日期 从1970年一月一日起,账户过期的天数.

举例 # centos:$6$yp8y6.dV$ 当中. centos是登录名,$6$之间的6是说明采用了什么算法(6代表的是sha512算法) $yp8y6.dV$之间的yp8y6.dV 表示随机数(即salt)后面的长字符串 Ein8fv4JL2Wkc8NVovgT1cp.CgGQzGduumUc6cqlzYyMlIi8yGQd6UtxwZ./xzMt/04OZP38cxnpPbCCHvqvn/才是加密后的密码形式.其后的:17640:0:99999:7:::内

17640是指这个账号从1970年一月一日开始,截止到最近一次更改密码所 用的天数.后面的0是密码最小年限,为0或空字段则表示没有最小年龄.99999是密码最大年限.7是警告时间天数.密码禁用期为空,表示密码不会强制过期,账户过期日期为空,表示账户永不过期.保留字段为空,也就是没有将来使用的字段。

/etc/group 组的信息库 分为:组名,组密码占位符,组ID号,用户列表,该组的用户成员,以此组为附加组的用户的用户列表。

创建,更改,删除用户

useradd创建一个用户或更新默认新用户信息 格式 选项+用户名 创建后的用户会自动创建一个与其名字一个的组,称为该用户的主组。 -u 指定UID号。

-o 配合-u选项,不检查UID的唯一性。

-g 指定其所属的主组ID,这个组事先必须存在。

-c 用户注释信心。 格式 useradd -c +注释内容+用户名

-d 创建用户指定的家目录,它是通过复制/etc/skel此目录并改名为用户名来实现的.如果指定的目录事先实在,则不会为用户复制环境配置文件.不加此选项,默认是在home目录下,与用户名一样的目录。格式 # useradd -d +指定路径+用户名

手工创建家目录

mkdir /home/magetest 创建一个目录

cp -r /etc/skel/.[^.]* /home/magetest 复制源家目录文件到新建目录中

chown -R magetest:magetest /home/magetest 将新建目录的属主和属组改为magetest.

-s 指定用户的默认shell. 常规shell列表存储在/etc/shellls文件中.这里面的shell是安全的.如果指定的shell中无法使用,则用户无法登陆.如果默认shell被改为nologin,则代表这个用户属于启动系统服务的特定用户,一样无法登录.

-G 指明用户所属的附加组,多个组之间用逗号分隔。组必须事先存在。 格式 useradd -G 附加组名,附加组名... 用户名

-N 不创建私用组做主组,使用users组做主组 极端不安全,相当于自己建立的文件都被users这个默认公共组内的组成员共享了.

-r 创建系统用户.centos6的系统ID号小于500, 7的系统ID号小于1000.

-m 创建家目录,用于系统用户。

-M 不为用户创建家目录.

特殊: -D 显示创建用户后的一些默认配置信息.内容如下: GROUP=100 为用户创建的私有组 HOME=home 家目录 INACTIVE=-1 账户过期时间,-1是永不过期,默认为99999天. SHELL=/bin/bash 默认shell CRRATE MAIL SPOOL=yws 是否在/var/spool/mail/下给用户创建一个邮箱.yes为创建.

修改默认选项,uesradd -D +选项 举例

useradd -D -s /bin/csh

将默认shell改为/bin/csh

默认信息文件保存在 /etc/login.defs中 修改后的保存在/etc/default/useradd中,可以通过编辑这个文件来实现.

修改用户属性 usermod 格式 uesrmod+选项+用户名 -u 修改用户的UID -g 修改用户的基本组,即主组. 若用其他组来修改,则修改的放前.被改的组放后面 # usermod -g mage5 mage3 # 将mage3的主组改为mage5 -G 修改用户所属的附加组,原来的附加组会被覆盖.如果不想被覆盖,则需要加上-a选项 . -a 追加新的附加组,跟-G一起使用才有效. -c 修改注释信息. -d 修改用户的家目录.如果用户原来的家目录里面有文件,则会丢失这些文件.如果不想丢失这些文件,需要加上-m一起使用 -d必须放在目录前面,否则报错。 -m 将原来的家目录文件移动到新的家目录下保存,只能与-d一起使用才有效. 格式为 -m -d -l 修改用户名. -s 修改用户的默认shell. -L 锁定用户密码,即禁止用户登陆.锁定是在用户的密码字符串之前加一个感叹号! -U 解锁用户的密码. 解锁是把加的!号解除.

删除用户 userdel 格式 userdel+选项+用户名 -r 删除用户时,一并删除其家目录.

组创建命令 groupadd 格式 groupadd +选项+组名 -g 自定义GID,不指定的话,默认是上一个组的GID加1.

groupadd -g 702 liyang

创建一个ID号为702,名字为liyang的组

-r 创建系统组

groupadd -r ningbaobao

创建一个名字为ningbaobao的系统组

组修改命令 groupmod 格式 groupmod+选项+组名

-g 修改GID 没加-o选项的话 不能与其他组ID名相同

groupmod -g 701 liyang

将组名为liyang的组ID改为701

-n 修改组名字

gropmod -n kkk liyang

将组名字为liyang的改为kkk 被改名的组当中,如果有其他加入的组,其所属组也会改变。

组删除命令 groupdel 格式 groupdel+组名

如果删除的组中还包含其他的用户,那么这些用户将没有组织。

gruopdel liyang

删除组名为liyang的组。

示例: 1 创建用户gentoo,UID为4001,主组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001).

useradd -u 4001 gentoo

groupadd -g 5000 diatro,

groupadd -g 5001 gentoo

useradd -G diatro,peguin gentoo

id gentoo

2 创建用户fedora,其注释信息为"Fedora core",默认shell为/bin/tcsh.

useradd fedora -c "Fedora core" -s /bin/tcsh

id fedora

3 修改gentoo用户的家目录为/var/tmp/gentoo:要求其原有文件仍能被用户访问:

usermod -m -d /var/tmp/gentoo gentoo

4 为gentoo新增附加组netadmin

groupadd netadmin

usermod -a -G netadmin gentoo

密码管理命令 passwd

格式:passwd+选项+用户名
直接passwd,不带选项是修改自己的密码,passwd,后面加上用户名,则是修改指定用户的密码,但是默认只有root用户才有此权限. 密码默认保存位置 在/etc/passwd当中.也可以直接修改这个文件来实现一些变动,但一般不建议这么做.

-l和-u 锁定和解锁用户. -d 清除用户密码. -e+天数 密码过期期限 -i+天数 非活动期限,密码过期之后还能活动几天的期限 -n+天数 密码的最短使用期限 -x+天数 密码的最长使用期限 -w+天数 密码的警告期限.

--stdin 改变输入方式至标准输入,从管道读入新的密码 通常这么使用 echo"密码" | passwd --stdin 用户名通过管道的形式,将密码输送到指定用户名下.一般在脚本中这么用.可以批量修改用户密码

组密码管理命令 gpasswd 格式:选项+用户名+组名 密码保存在 /etc/gshadow

-a+用户名 向组中添加此用户,也就是 让此用户以此组为附加组。不能添加多个用户。PS:组管理员也可执行该命令

-d+用户名+组名 从指定组中移除此用户。组管理员也可执行该命令.

gpasswd -d liyang1 usrs 将用户liyang1从公共组user中删除

-r 将指定组的组密码删除掉 组管理员也可执行该命令

-R +组名 限制组成员访问该组 临时性限制,root可取消此限制.

-M, +USER1,USER2,... 一次性设置组成员(仅root执行)

-A+用户名1,用户名2....+组名,将指定的用户设定为该组的管理员.(仅root执行)

gpasswd hr1,hr2 zhangsan 将用户hr1,hr2都设置为zhangsan组的组管理员

chage修改密码期限命令 格式:chage+选项+用户名 -d 上一次更改的日期 -e 账户到期的日期,过了就不可用。 -w 用户密码到期前,提前收到警告信息的天数
-m 密码可更改的最小天数,为0则表示随时可以 -M 密码保持有效的最大天数。 -l 列出当前的设置。由普通用户来确定他们的密码或账号何时过期。 -i 停滞时期。如果一个密码已过期这些天,那么此账号将不可用。

groupmems 更改和查看组成员(仅root可用) 格式 选项+组 选项+用户.

-g 更改为指定组 使用该命令指定组时必须加上

-a 指定用户加入组

-d 从组中删除用户

-p 从组中清除所有成员

-l 显示组成员列表

groupmems -g zhangsan -a lisi

将lisi加入zhangsan的组

#groupmems -g zhangsan -d lisi

将lisi踢出zhangsan的组

groups+用户名 查看用户所属组列表。

newgrp +组名 当前用户的主组临时切换指定的组为主组

使用nesgrp命令临时加入组时,要加入的组必须事先有密码.当一个用户组加上密码后,不属于这个组的用户,在切换到这个组作为基本主的时候,必须输入密码才可以.若该组属于用户的附加组之一,则无需输入密码。要转入进去的组,必须设置上密码,没有密码则无法转入进去,避免任意用户切换到root组。

显示用户实际和有效的ID信息 id id+选项+用户名,直接id显示自己的信息。 -u 仅显示有效的UID -g 仅显示有效的GID -G 仅显示用户所属的所有组的ID号,基本组合附加组的。 -n 仅显示名称 # id -G -n 仅显示组的名字,不再显示ID号。

切换用户命令 su - +选项+用户名 加上 - 会通过读取用户的配置文件来重新初始化 不加 -不会读取目标用户的配置文件来初始化,但是可以传递给管道,用这个用户的身份去执行一些命令.只有管理员可以无密码的形式,切换至任意用户。非管理员切换至任意用户时,必须提供目标用户的密码。特殊用法 -c ,切换至目标用户,只执行一次命名再返回

su - yangyang -c “whoami” 切换到yangyang用户,并执行命令whoami

yangyang 执行结果。

修改用户所用shell chsh(只能root用户使用) chsh+用户名

chsh yangyang

提示修改,输入 /bin/csh

head /etc/passwd

yangyang用户的默认shell改为了/bin/csh

pwck.grpck检查用户/组密码是否有问题,如有则列出.

newusers命令用于批处理的方式一次创建多个命令。 格式 命令+文件 文件的格式要与/etc/passw相同。即: 用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL.
举例:

namo 123 编辑内容如下

liyang1:x:521:521::/home/yangyang1:/bin/bash

liyang2:x:522:522::/home/yangyang2:/bin/bash liyang3:x:523:523::/home/yangyang3:/bin/bash

保存为 123.txt

newusers 123.txt

批量创建成功。

chpasswd 批量创建密码 语法 用户密码文件,格式为 用户名+冒号+密码

nano 456 编辑内容如下

liyang1:789

liyang2:789 liyang3:789

保存为 456.txt

chpasswd < 456.txt

liyang1,2,3密码同时设置为789.

chfn+用户名 设置指定用户个人信息,比如名字,电话等等.

chsh 指定用户shell 等同于 usermod -s 不解释

finger 列出指定用户的信息,在chfn中输入的信息这里可以看到 格式 选项+用户名. -l 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的 Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容。

-m 排除查找用户的真实姓名。

-s 列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。

-p 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的 Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容。

getent 可以用来察看系统的数据库中的相关记录, 格式 命令+文件/组 +组名/用户 +用户名

示例:

getent shadow 查看用户密码 不管是否在这个数据库的目录下,都可执行,无需加路径.

getent shadow liyang1 单独查看用户liyang1的密码.如果用户不存在,则无反应,什么也不显示.

genent group liyang 单独查看liyang组信息

chown 改变某个文件或目录的所有者和所属的组 格式 用户名字+文件/目录名字

chown zhangsan a

将文件a的所属用户改为zhangsan。 文件的所属主可修改文件的权限.

-R+用户+目录 递归处理,将指令目录下的所有文件及子目录一并处理,举例

chown -R zhangsan /home/magetest

将目录/home/magetest及其子目录的所属主改为zhangsan

chown+用户名+:组名+文件名/目录名 可以一次性改文件/目录的所属人,所属组.(rott用户可以运行)

chown zhangsan:lisi a 将文件a的所属人改为zhangsan,所属组改为lisi.

chown --reference=参考文件 替换文件 将按照参考文件的权限来设置要替换的文件权限.

chown --reference= zhangsan lisi

将lisi的文件权限改为和张三一模一样的.

chgrp修改组权限 仅root和文件的所属人可以更改文件的所属组(但所属人一定要属于目标组) 格式:chgrp+组名+文件/目录名 将文件/目录的所属组改为指定组.

chgrp zhangsan a

将文件a的所属组改为zhangsan

文件的权限归属及类型 u User, 即文件或目录的拥有者;

g Group,即文件或目录的所属群组;

o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;

a All,即全部的用户,包含拥有者,所属群组以及其他用户;

r 读取权限,数字代号为“4”;

w 写入权限,数字代号为“2”;

x 执行或切换权限,数字代号为“1”;

  • 不具任何权限,数字代号为“0”;

s 特殊功能说明:变更文件或目录的权限(后面在ACL详细说明)

文件的权限分布信息为 rwx rwx rwx 共计9位.rwx依次可理解为 读,写,执行 第一个rwx是指所属用户, 用u代替 第二个rwx是指所属组, 用g代替 第三个rwx是指所属其他人, 用o代替

判定权限的方式: 1 如果文件的属主(u)不是当前用户,那么先后顺序为 所属用户>所属组>所属其他人. 2 如果文件的属主(u)是当前用户,如果当前用户没有权限,那就结束判定,也不会去组或其他人里面再判定。

对于文件来说: **当仅r权限作用在文件上的时候,表示用户可以读取该文件的内容 *当仅w权限作用在文件上的时候,表示用户可以修改该文件的内容 写日志用。 当仅x权限作用在文件上的时候,没有意义。 **当rw同时作用在文件上的时候,表示用户可以读写文件 **当rx同时作用在文件上的时候,表示用户可以读且可以执行该文件 当wx同时作用在文件上的时候,权限与仅w相同 **当rwx同时作用在文件上的时候,用户可以读写执行。

对于目录来说: 当仅r权限作用在目录上的时候,表示用户可以短列出查看目录下的文件名 当仅w权限作用在目录上的时候,没有意义 *当仅x权限作用在目录上的时候,表示用户可以进入且可以访问目录下的文件,但不能列出文件名 当仅rw权限同时作用在目录上的时候,权限等同于仅r权限作用在目录 **当仅rx权限同时作用在目录上的时候,表示用户可以进入,可以访问子文件,同时可以长列出文件 *当仅wx权限同时作用在目录上的时候,表示用户可以进入,可以访问子文件,可以创建及删除,但不能列出 **当rwx权限同时作用在目录上的时候,表示用户有完整权限 X 对于批量增加x权限时,可以跳过文件而只对目录加x ,x对于文件来说意味着执行,对于目录来说代表着进入。

用数字来表示权限 r: 4 w: 2 x: 1

出现的组合种类: 7: rwx 6: rw 5: rx 4: r 3: wx 2: w 1: x
示例: 文件 123所属用户为root,所属组为liyang,权限表达为rwx -w- --x 那么理解为root用户对这个文件有读写删除等权限,liyang用户对这个文件不能看和直接修改,但可以通过追加>>的方式来写入数据.而其他人则无法对此文件来进行任何操作.

添加或删除权限使用 +或-或=号来区分 举例

chown u-r lisi(原本权限为rwx) # chown g+r lisi(原本权限为-wx)

用户李四的权限减去r变为-wx # 用户组李四的权限加上r变为rwx

chown o=r-- 其他用户的权限变为 r--。

=号不可以直接加上之前不存在的权限,但能减去已存在的权限。

#chmod --reference a b 将a的权限应用在b的上面。

权限设置示例(chgrp,chown,chmod)

chgrp sales testfile 将文件testfile的所属组改为sales组。

chown root:admins testfile 将文件testfile的所属主改为root,所属组改为admins。

chmod u+wx,g-r,o=rx file 将文件file的属主权限加上wx,属组权限减去r,其他人权限设置为rx。

chmod -R g+rwX /testdir 将目录/testdir其下的所有文件,属组的权限改为rw,目录/testdir属组权限为rwX.

chmod 600 file 将文件file的权限设置为 rw- --- ---

chown mage testfile 将文件testfile的所属人改为mage.

默认权限 umask umask码通常用来计算,文件或目录创建时的默认权限. 但是文件属性带x不×××全,所以在创建文件时候,默认权限不是777,而是666,只有目录才是777.

umask码可以通过umask +数字的形式来调整默认值,所输入的数字是从右向左排列,如果只输入一位的话,其他位用0来补充.可以在 .bashrc当中永久修改umask的值.示例:

umask 2

0002 此时创建的目录权限为775,文件权限为666

1 文件:666-002=664 即rw- rw- r--

2 目录:777-002=775 即rwx rwx r-x

对于文件来说,用umask码创建的文件,如果设置的权限减去umask默认值,其后的值为奇数,那么将奇数按照最终的值+1再执行,目录无此限制.

在使用touch等创建文件的命令时,所建立的文件权限是基于umask默认值的 而在使用cp这类复制文件的命令是,复制后的文件权限是按照 源文件的权限减去默认umask值后得出值来计算.如果值为负数,则负数值那一项的权限为---.此外,如果源文件的权限没有读权限的话直接失败不让复制~!. 示例

umask 444

touch a 此时a的权限为 666-444=222 即 -w- -w- -w-

chmod 000 a

cp a /app/li 此时复制失败,因为源文件a权限为 -w- -w- -w-无法读取。

特殊的权限格式 当文件权限中x位表示为 s 的时候:

当s在u位上时(rws rwx rwx), (将一个文件属主上,加上特殊权限 chown u+s 文件名/文件路径.)对于可执行的二进制文件而言,任何人在执行该文件时,临时拥有其属主的权限. ps :rws, s是临时遮挡了x的位置,但不代表s就代替了x. 而如果想知道一个rws文件原本是否拥有x的权限时候,可以通过权限位上的S以及T是否是大写来决定(大写代表着之前没有x权限,小写代表之前有x权限)也可以通过stat+文件名/目录来查看.

stat+文件/文件路径 列出文件的详细信息(具体权限,绝对路径,inode号,特殊权限位等等)

将一个文件属组上,加上特殊权限 chown g+s 文件名/文件路径. 当s在g上时(rws rwx rwx),对于可执行的二进制文件而言,任何人在执行该文件时,临时拥有其属组的权限.对于目录作用了sgid权限之后,任何人在该目录下创建的文件的所属组,都会继承目录的所属组。通过这种方式,可以实现多用户共享方式的管理

mkdir wc 建立一个公共目录.

chgrp users wc/ 将这个公共目录的属组改为一个包含多用户的附加组。

chmod g+s wc/ 在这个公共目录的属组权限上上加一个s

实现了在wc这个公共目录里面,所有文件都共享的目的.

PS: 任何人在该目录下创建的文件的所属组,都继承该目录的所属组而不是自己的主组。包括root也是继承这个目录的所属组。

sticky 可以在other(其他人)权限上加一个特殊权限 T 。只对目录起效果,文件加T无意义。 格式 chmod o+t 加上T之后,在公共目录当中,除了这个目录的所属人以及root之外,其他人,只要不是自己创建的文件,是没有权限对其进行删除操作的。(对文件加上T并没有其他意义)

用数字表示 u位上的s,g位上的s, o位上的t 分别表示为 4 2 1 .umsk码共4位,从左向右第一位就是用来表达特殊权限值的。示例:

umask 222

touch a ; ll

r-- r-- r--

chmod 4444 a;ll 给文件a加上u+s权限并显示

r-S r-- r--

chmod 2444 a;ll 给文件a加上g+s权限并显示

r-- r-S r--

chmod 1444 a;ll 给文件a加上o+t权限并显示

r-- r-- r-T

其余特殊格式 一般是给root来准备的,防止一些误操作. chattr+i 不能删除,改名,更改
格式 添加 chattr +i 文件 取消 chattr -i 文件

chattr+a 只能追加内容.
格式 添加 chattr +a 文件 取消 chattr -a 文件

lsattr 查看文件是否拥有特性属性. 格式 lsattr + 文件.

取消目录上的特殊权限 格式 chattr -R -a/i +目录名。

访问控制列表 ACL 又称存取控制串列,是使用以访问控制矩阵为基础的访问控制方法,每一个对象对应一个串列主体[1]。访问控制表描述每一个对象各自的访问控制,并记录可对此对象进行访问的所有主体对对象的权限。 ACL:实现灵活的权限管理,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 ACL的生效顺序: owner > acl user > group acl group 谁多谁优先 > other 传统属主>acl属主>acl属组或传统属组>其他用户,acl属组和传统属组之间,谁的权限大,就优先执行那个.

CentOS7 默认创建的xfs和ext4文件系统具有ACL功能 .

CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

centos6有时候不支持acl,可以用下列方法解决:

1 创建新分区添加ACL功能.

fdisk /dev/sda

输入n回车开始创建

回车

要求输入最小柱面及最大柱面,可以直接输入N+G,比如1G. 分区完成

输入w回车保存

parrx -a /dev/sda 通知内核更改分区信息.

mkfs.ext4 /dev/sda3 将sda3分区格式转换为ext4.

2 执行命令 setfacl -m u:root:rwx test 如果不报错,则证明当前系统支持ACL.

或者tune2fs -l /dev/sda3 |grep acl 可以检查sda3分区是否可以设置ACL.

出现 Default mount options: user_xatter acl 代表可以设置.

出现 none为不可用ACL ,这个时候执行命令:

tune2fs -o acl /dev/sda6 就可以执行acl权限了。

setfacl 为目录设置acl权限 getfacl 查看指定文件或目录的acl权限

格式 :添加 setfacl -m (u/g):目录属主:rwx(要设置的权限) 文件或目录名/ 删除 setfacl -x (u/g):目录属主:文件或目录名/

setfacl -m 是设定的意思,u/g是权限位,目录属主是被设置目录的属主名字.

其余选项:

-m u:uname:rwx 文件/目录名 设置u位置上的指定acl权限.

-m g:gname:rwx 文件/目录名 设置g位置上的指定acl权限.

-m d:u:wang:rx 目录名. 设置指定位置上的默认acl权限

-x u:uname 文件/目录名 删除指定文件/目录上对用户的acl权限.

setfacl -Rm g:sales:rwX 目录名 递归设置指定位置的acl权限.大写的X表示,碰到文件就不加x.

setfacl -M file.acl 文件名/目录名 从可读取文件当中读取事先安排好的acl权限.文件内容遵循以下格式来保存. u:属主名:rwx g:属组名:rwx

setfacl -X file.acl 目录名 同-M,批量删除指定目录的acl权限,删除时文件格式保存为 u:属主名 g:属组名

tune2fs -o acl /dev 设置指定分区上的acl永久生效

getfacl +文件/目录名 查看指定文件/目录上的acl权限.

setfacl -b 删除指定文件/目录上的所有acl权限.

setfacl -k 目录名/ 删除指定目录的默认acl权限.

同一个目录上可以设置多个不同的u/s的ACL权限.

将house/目录yangyang用户的用户位权限上加上rwx的acl权限.

setfacl -m u:yangyang:rwx house/

成功后目录权限最后边的.变为+(..rwx.变为..rwx+)

设置后用 getfacl house/可以查看具体到个人的acl权限.例如:

file: 当前目录/

owner: 属主

group: 属组

user::rwx 传统的u位权限 两个冒号

user:yangyang:rwx(所设置yangyang的ACL权限) 单个冒号

user:yangyang2:r-x(所设置yangyang2的ACL权限)单个冒号

group::r-x 传统的属组权限 两个冒号

mask::rwx 只有当设置了acl权限的时候才会出现,代表当前目录的权限上限,任何acl权限超过这个上限的权限均无效.设置上限方式: setfacl -m m:rwx(可随意设置) 文件或目录名,举例

house/下 ,a文件权限 rwx .b文件权限 r-x ,c文件权限 -wx .

setfacl -m m:rw- house/ ; ll 设置权限上限为rw-并显示

a文件权限 rw- ,b文件权限 r-- ,c文件权限 -w-

设置权限上限后,超出的会删除,本来没有的也不会额外添加上去.但是这种方式对 acl的u和g,以及

传统的组有效果.传统用户及其他人权限不受影响.其他人权限可单独设置.chmod o+(rwx).

设置了acl后,chmod g+(rwx)+目录名就不是设置组权限了,而是mask的值了.所以在 rwx rwx rwx当中,中间的rwx实际上显示的就是mask的权限上限.

other::r-x 其他人权限 传统的其他人权限 两个冒号

ACL生效顺序:属主>acl用户>传统组=acl组>其他人(组与acl组是谁的权限是最大谁优先,实际工作中,设置了acl组之后,基本上用不到传统组了).

通过setfacl -m 设置的acl权限只对当前已经存在的文件及目录生效,未来的不会 设置对一个目录默认的acl权限:

setfacl -m d:u:属主:rwx 目录名/

对未来创建的文件和目录都保留一致的acl权限,当前已经存在的不受影响.

想对当前也起效,则再执行一条命令,如下

setfacl -Rm d:u:属主:rwx 目录名/

设置成功后会在other下方多出一堆default选项。

备份和恢复acl 主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具.是不会保留目录和文件的ACL信息。

tar cvf 123.tar 123/ 在123目录下创建压缩包123.tar

getfacl -R 123 > acl.txt 将123目录的acl备份为acl.txt

tar xvf 123.tar -C /var/tmp/ 解压缩到/var/tmp/

mv acl.txt /var/tmp/ 备份文件转入到/var/tmp/下

serfacl --restore acl.txt 恢复acl.

--restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)