什么是管道?
管道就是把命令1的标准输出发送给命令2的标准输入,把命令2发的标准输出发送给命令3的标准输入。。。
最后一个命令会在当前shell进程的子shell进程中执行用来
管道实现了使用目的单一的小程序,组合小程序完成复杂的任务
管道需要配合其他命令的使用
tr命令的使用,常常用于配合管道
-c或--complerment:取字符集的补集 -d或--delete:删除所有属于第一字符集的字符; -s或-squeeze-repeats:把连续重复的字符以单独一个字符表示 -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符 \NNN 八进制值为NNN 的字符(1至3个数位) \\ 反斜杠 \a 终端鸣响 \b 退格 \f 换页 \n 换行 \r 回车 \t 水平制表符 \v 垂直制表符 [:alnum:] 所有的字母和数字 [:alpha:] 所有的字母 [:blank:] 所有呈水平排列的空白字符 [:cntrl:] 所有的控制字符 [:digit:] 所有的数字 [:graph:] 所有的可打印字符,不包括空格 [:lower:] 所有的小写字母 [:print:] 所有的可打印字符,包括空格 [:punct:] 所有的标点字符 [:space:] 所有呈水平或垂直排列的空白字符 [:upper:] 所有的大写字母 [:xdigit:] 所有的十六进制数 [=字符=] 所有和指定字符相等的字符
例如 ls | tr ‘a-z‘ ‘A-Z‘ 配合ls 命令把所有标准输出的小写字母都转换成大写字母
[[email protected] ~]# ls -l | tr ‘a-z‘ ‘A-Z‘ TOTAL 124 -RW-R--R--. 1 ROOT ROOT 860 JUL 28 17:33 1TEST -RW-R--R--. 1 ROOT ROOT 909 JUL 28 17:34 2TEST -RW-------. 1 ROOT ROOT 1482 JUL 20 17:25 ANACONDA-KS.CFG -RW-R--R--. 1 ROOT ROOT 43 AUG 1 10:47 A.TXT DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 22 12:51 DESKTOP DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 DOCUMENTS DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 DOWNLOADS -RW-R--R--. 1 ROOT ROOT 0 JUL 28 10:18 F[A-Z] -RW-R--R--. 1 ROOT ROOT 0 JUL 28 10:18 F{A-Z} -RW-R--R--. 1 ROOT ROOT 0 JUL 28 10:18 F[A-Z] -RW-R--R--. 1 ROOT ROOT 55348 JUL 20 17:24 INSTALL.LOG -RW-R--R--. 1 ROOT ROOT 10608 JUL 20 17:20 INSTALL.LOG.SYSLOG DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 MUSIC DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 PICTURES DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 PUBLIC DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 TEMPLATES DRWXR-XR-X. 2 ROOT ROOT 4096 JUL 20 21:24 VIDEOS DRWXR-XR-X. 9 ROOT ROOT 4096 OCT 19 2015 VMWARE-TOOLS-DISTRIB
tee命令,常常用于配合管道
NAME tee - read from standard input and write to standard output and files # 用来将标准输入的内容输出到标准输出并可以保存为文件 SYNOPSIS tee [OPTION]... [FILE]... DESCRIPTION Copy standard input to each FILE, and also to standard output. -a, --append append to the given FILEs, do not overwrite # 附加到指定文件,并且不覆盖 -i, --ignore-interrupts ignore interrupt signals # 忽略中断的信号 --help display this help and exit # 显示帮助和退出 --version output version information and exit # 显示版本信息和退出· If a FILE is -, copy again to standard output. # 如果文件类型是文件,复制文件文件到标准输出。
$命令1 | tee文件名| 命令2
把命令1的标准输出保存在文件名中,然后管道输入给命令2
使用:
保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
用户管理
什么是用户?用户资源获取标识符,资源分配,安全权限模型的核心要素之一
没用用户,可否? 答案是YES
Linux用户类别:
管理员UID:root,0
系统用户UID:1-499(CentOS 6),1-1000(CentOS 7)
登陆用户UID:500+(CentOS 6),1000+(CentOS 7)
用户组类别:
管理员组GID:root,0
系统组GID:1-499(CentOS 6),1-1000(CentOS 7)
普通组GID:500+(CentOS 6),1000+(CentOS 7)
Linux组的类别:
用户的主要组(主组、属主):
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户:私有组
用户的附加组(辅助组、属组):
一个用户可以属于零个或多个辅助组
CentOS6和7的默认UID和GID不同,这个是由于/etc/login.defs文件里面的默认值所决定的
CentOS 6 UID和GID默认值
CentOS 7 UID和GID默认值
Linux用户和组的主要配置文件
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
该文件里面一共有7项,包括
# [[email protected] ~]# cat /etc/passwd # root(用户名):x(密码):0(UID):0(GID):root(注释):/root(家目录):/bin/bash(默认SHELL)
假如把普通用户的UID更改成0,该普通用户会变成管理员账号,因为在Linux系统里面,识别管理员是否为管理员,就是查看用户的UID号码,为0则为管理员,在生产环境中,可能会把管理员root的账号改成其他名字,这样做是以防止黑客攻击root账号来进行破解。
/etc/group:组及其属性信息
# [[email protected] ~]# cat /etc/group # root(主组):x(组密码):0(GID):gentoo(附加组的用户列表)
/etc/shadow:用户密码及其相关属性
# [[email protected] ~]# cat /etc/shadow # root(用户名):$6$(加密方式)jyarrud3(随机数,俗称盐)$6AbktjO7BD7hQAMNK.Xx6YO7Tj3ooj9tEcclql5kCZ18Tvt7erKxPv212ssT32SFMEms0WegjsNhS0miktlkd0(用户密码):17008(最近更改密码的日期,从1970年1月1号开始算):0(密码再过几天可以被更改):99999(密码过期时间):7(密码过期前提醒时间):(密码过期后几天账号会被锁定):(从1970年1月1日算起,多少天后帐号失效):(保留)
上面这个设置了密码的用户显示的
现在我们再新建一个用户看看
[[email protected] ~]# useradd wan [[email protected] ~]# tail -1 /etc/shadow wan:!!:17015:0:99999:7:::
我们会看见账号密码那里有两个!!,这表示账号被锁定,没有密码的话不允许该用户去登陆,假如有密码,但是那里还是有一个叹号的话,也表示账号被锁定,不对用户进行解锁的话该用户将无法登陆。假如没有叹号的话,该用户可以没有密码的情况下面直接登陆。不过该功能只能在CentOS 5版本和更老的版本可以实现,为了安全起见,从CentOS 6以后已经修正此问题。
/etc/gshadow:组密码及其相关属性
# cat /etc/gshadow # root/(主组):(组密码):(组管理员列表):gentoo(附加组的用户列表)
注意:为安全起见,现在一般都没有组密码,直接管理员指派,因为当其他用户知道了组密码,可以随意加入该组,这样的话就显得不安全。
用户和组管理命令
用户管理命令
useradd [options] LOGIN 增加用户
-u UID:指定UID
-o 配合-u选项使用,不检查UID的唯一性,
-g GID:指定GID,即用户的主组,但GID要事先存在
-G GID:指定用户的额外组,但GID要事先存在
-N 不创建私用组做主组,使用users组做主组
-d 目录: 指定家目录
-m 创建用户时,强制给用户创建家目录
-M 创建用户时,但不创建家目录
-c 备注:注释
-s shell:指定默认shell,应该指定使用/etc/shells文件中出现的shell
-r 创建系统用户 特点:CentOS 6: ID<500,CentOS 7: ID<1000 默认shell为/sbin/nologin
-D 显示或更改默认设置 (默认值设定:/etc/default/useradd文件中)(此命令相当于cat /e tc/default/useradd)
[[email protected] ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
该命令,可以查看到创建用户时候的各项默认值
例如更改其他用户默认的家目录和默认SHELL之类等等的参数就在这里面
/etc/skel 家目录文件的来源,在此文件夹里面新建文件的话,创建新用户的时候会连指定的新文件一并创建
/etc/login.defs 一些用户和组等创建的默认设置的文件
usermod [options] LOGIN 修改指定用户(跟useradd命令使用方法类似)
-u UID 更改用户的UID
-g GID 更改用户的GID
-G 附加组,配置-a 追加新的组,否则为覆盖
-s SHELL 更改用户的默认SHELL
-c 注释
-d home,跟-m同时用移动家目录数据
-m 移动家目录数据,跟-d同时用
-l 新的名字,把用户改名
-e 指定过期日期 YYYY-MM-DD
-f 设定非活动期限
-L 锁定指定用户,在/etc/shadow 里面加! (同以上/etc/shadow的解释)
-U 解锁用户,将/etc/shadow 里面的!号拿掉 (同以上/etc/shadow的解释)
userdel [options] LOGIN 删除指定用户
-r 连同家目录和邮箱一起删除
用户组管理命令
groupadd [options] group 添加指定组
-g:指定用户的GID
groupmod [options] GROUP 修改指定组
-g: 修改组的GID
-n: 修改组的组名
groupdel [options] GROUP 删除指定组
groupmems -a user_name | -d user_name | [-g group_name] | -l | -p (CentOS 7才有此命令)
-l -g 用户名: 查看指定用户名组下面还有哪些用户属于此组
-a 要增加的组 -g 用户: 增加附加组
切换用户或以其他用户身份执行命令
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
su [-] UserName-c ‘COMMAND‘
选项:-l --login:
su -l UserName相当于su-UserName
查看用户相关的ID信息
id [OPTION]... [USER]
-u: 查看用户的UID
-g: 查看用户的GID
-G: 查看用户的Groups
-n: 查看用户的Name
getent passwd,shadow,gourp,gshadow USERNAME/GROUPNAME
直接查看指定用户/组里面的passwd,shadow,gourp,gshadow文件里面的内容
其他命令总结:
chsh:修改默认的shell
chfn:修改用户注释
vipw:使用vim来编辑passwd文件
vigr:使用vim来编辑group文件
pwconv:pwconv命令用来开启用户的投影密码
pwunconv:pwconv命令用来关闭用户的投影密码
Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于/etc目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在/etc目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性。
openssl rand base64 10 随机生成10位数
批量增加用户和改密码
newusers FILE(有格式的文件) 批量加用户 文件格式 /etc/passwd 文件的格式 root:x:0:0::/root:/bin/bash
ex. newusers user.txt
chpasswd FILE (有格式的文件) 批量改密码 USERNAME:PASSWORD
ex. cat p.txt |chpasswd
注意,按照以上步骤的方法批量添加完用户和密码以后,这些用户的家目录里面并没有配置,此时需要我们手动把这里面的配置复制到它们的家目录里面
/etc/skel 这个文件甲下面的文件是关于用户初始配置里面的变量文件之类
cp -r /etc/skel/.[^.]* /home/USERNAME