一、bash的I/O重定向及管道
1、Linux下一般缺省的输入称之为标准输入,即键盘输入,缺省的输出称之为标准输出,即显示器输出。Linux给程序提供了三种I/O设备:
标准输入(STDIN)--0:默认接受来自键盘的输入
标准输出(STDOUT)--1:默认输出到终端窗口
标准错误(STDERR)--2:默认输出到终端窗口
I/O重定向即改变默认位置。
输出重定向常用语法:
CMD > file:把STDOUT重定向到file文件中,原有文件内容会被覆盖;
CMD >> file:在原有文件的基础上,把STDOUT追加到file文件中;
CMD 2> file:把STDERR重定向到file文件中,原有文件内容会被覆盖
CMD 2>> file:在原有文件的基础上,把STDERR追加到file文件中;
CMD &> file:合并STDOUT和STDERR重定向到文件中,原有文件会被覆盖;
CMD &>> file:在原有文件的基础上,把合并的STDOUT和STDERR追加到文件中;
CMD &> file 等同于 CMD > file 2>&1
CMD &> file 等同于 CMD > file 2>>&1
(cmd1;cmd2...) > file :合并多个程序的STDOUT重定向到文件中;
输入重定向常用语法:
CMD < file :以file文件内容作为CMD命令的STDIN;
CMD << eof:将键盘的多行输入重定向到STDIN,直到以eof为结束符终止输入;
2、管道符(|)
管道符的作用是以“|”前面命令的标准输出作为后面命令的标准输入,可以同时使用多个管道符。
需要注意的是:
(1)管道命令只处理前一个命令的正确输出,不处理错误输出
(2)管道命令的后一命令必须能够接收标准输入流才行
应用举例:
]# ls -l /etc | less :分页显示ls输出的内容
3、字符转换命令:tr
用法:tr [选项]... SET1 [SET2]
从标准输入中替换、缩减或删除字符,并将结果写到标准输出
常用选项:
-c,-C:使用SET1的补集
-d:删除SET1匹配的内容,不做替换
-s:把匹配SET1的连续重复的字符以单独一个字符表示
-t:把第一个字符集对应字符转化为第二字符集对应的字符(一对一转换)
SET是一组字符串,也可以使用一下方式表达:
\NNN:使用八进制值表达(1至3位)
\\:反斜线
\a:告警省
\b:退格
\f:换页
\n:换行
\r:回车
\t:水平制表符
\v:垂直制表符
二、用户和组管理
1、Linux用户分为管理员和普通用户,管理员的UID为0,普通用户的UID范围为1-65535,其中普通用户又分为系统用户和登录用户两种:
系统用户:1-499(centos6及以前版本系统) 1-999(centos7系统)
登录用户:500+(centos6及以前版本系统) 1000+(centos7系统)
Linux用户组也分为管理员组和普通组,管理员组的GID为0,普通组的GID范围为:1-65535,其中普通组又分为系统组和非系统组两种:
系统组:1-499(centos6及以前版本系统) 1-999(centos7系统)
非系统组:500+(centos6及以前版本系统) 1000+(centos7系统)
对于一个用户而言,可以有多个不同的组,分别成之为主组和附加组,主组组名与用户名相同,且仅包含一个用户,也叫私有组,一个用户必须属于一个且只有一个主组。主组以外的组属于用户的附加组,一个用户可以属于零个或多个附加组。
2、Linux用户和组相关的配置文件有:
/etc/passwd:记录了用户及其属性信息(名称、UID、主组ID等)
/etc/group:记录了用户组及其属性信息
/etc/shadow:记录了用户密码及其相关属性
/etc/gshadow:记录了组密码及其相关属性
/etc/passwd文件包含有7个字段,分别为:
(1)login name:登录用户名
(2)passwd:密码(一般用X来表示,因为密码信息存于另一文件中)
(3)UID:用户ID
(4)GID:组ID
(5)GECOS:用户全明或注释信息
(6)Home directory:用户家目录
(7)SHELL:用户默认使用的SHELL
/etc/group文件包含有4个字段,分别为:
组名称、组密码、组ID、组成员(以当前组为附加组的用户列表,逗号隔开)、
/etc/shadow文件包含9个字段,分别为:
(1)用户名:登录用户名
(2)密码:经过加密的密码,一般使用sha512加密
(3)最近一次更改密码的日期:从1970年1月1号起到密码最近一次被更改时间
(4)密码的最小使用期限:密码再过几天可以被更改(默认0表示随时可以更改)
(5)密码的最大使用期限:密码再过几天必须更改(默认99999表示永不过期)
(6)密码的警告时间段:密码过期前几天系统提醒用户(默认为一周)
(7)密码禁用期:密码过期几天后账号会被锁定
(8)账户的过期日期:从1970年1月1号起,多少天后账号失效
(9)保留字段
/etc/gshadow文件包含有4个字段,分别为:
组名称、组密码、组管理员列表、以当前组为附加组的用户列表(多个用户用逗号隔开)
3、getent命令
用法: getent [选项...] 数据库 [键 ...]
getent passwd :相当于cat /etc/passwd,后面可跟某个用户,用来单独显示某用户的信息;
getent group:相当于cat /etc/group,后面可跟某用户组,用来单独显示某用户组的信息;
getent shadow:相当于cat /etc/shadow,后面可跟某个用户,用来单独显示某用户的密码信息;
getent gshadow:相当于cat /etc/gshadow,后面可跟某用户组,用来单独显示某用户组的密码信息;
4、chfn命令
chfn username:设置某用户的详细注释信息,如显示名、电话号码等
5、finger命令
finger username:查看某用户的详细注释信息
6、chsh命令
chsh [-s shell] [-l] [-u] [-v] [username]:设置某用户的shell
7、useradd命令
用法:useradd [选项] 登录名
常用选项:
-c:指定用户的注释性描述信息,需要使用引号"";
-d:指定用户的家目录
-D:表示修改用户的默认选项(修改/etc/default/useradd文件)
-g:指定新用户的主组,如果没有指定则使用与用户名相同的组名
-G:指定新用户的附加组,可以有多个,用逗号隔开,组必须事前创建好
-M:不创建用户的家目录
-N:不创建同名的组
-o:允许使用重复的UID创建用户
-r:创建一个系统用户
-s:指定用户的默认shell
-u:指定用户的UID
8、groupadd命令
用法:groupadd [选项] 组
常用选项:
-f:如果组则成功退出,且如果指定GID已存在,则取消-g选项的作用
-g:指定GID
-o:允许创建有重复GID的组
-r:创建系统组
9、usermod命令
用法:usermod [选项] 登录名
常用选项:
-c:修改注释描述信息
-d:指定用户新的家目录,原有家目录中的文件不会同时移动至新的家目录,若要移动需要同时使用-m选项
-u:指定用户新的UID
-g:指定用户新的GID
-G:指定用户新的附加组,原来的附加组将会被覆盖,若要保留原有附加组需同时使用-a选项
-s:指定用户新的默认shell
-l:指定用户新的登录名
-L:锁定指定用户
-U:解锁指定用户
-e:指定用户账号的过期日期,格式为YYYY-MM-DD
10、groupmod命令
用法:groupmod [选项] 组名
常用选项:
-g:指定新的GID
-n:更改新的组名
11、userdel命令
用法:userdel [选项] 登录名
常用选项:
-r:删除用户家目录和邮件
12、groupdel命令
用法:groupdel [选项] 组
13、passwd命令
用法: passwd [选项...] <帐号名称>
常用选项:
-d:删除账号密码,只有管理员用户才能执行此操作
-l:锁定指定用户,只有管理员用户才能执行此操作
-u:解锁指定用户,只有管理员用户才能执行此操作
-n mindays:指定最短使用期限,只有管理员用户才能执行此操作
-x maxdays:指定最长使用期限,只有管理员用户才能执行此操作
-w warndays:提前多少天告警,只有管理员用户才能执行此操作
-i inactive-days:当密码过期后经过多少天该账号会被禁用,只有管理员用户才能执行此操作
--stdin:从标准输入接受用户密码,只有管理员用户才能执行此操作
-S:报告用户的密码状态,只有管理员用户才能执行此操作
14、gpasswd命令
用法:gpasswd [选项] 组
-a user:将user添加到指定组中
-d user:将user从指定组中删除
15、groups命令
用法:groups [用户名]...
显示指定用户所在的用户组,如果没有指定用户,则默认为当前进程用户
16、groupmems命令
用法:groupmems [选项] [动作]
选项:
-g:指定用户组
动作:
-a user:将用户user添加到指定组中
-d user:将用户user从指定组中删除
-p:从指定组中移除所有成员
-l:列出组中的所有成员
17:id命令
用法:id [选项]... [用户名]
常用选项:
-u:只显示uid
-g:只显示有效的gid
-G:显示所有组ID
-n:显示组名称而非数字
18、su命令
用法:su [选项]... [-] [用户 [参数]... ]
su Username:非登录式切换,即不会读取目标用户的配置文件
su -Username:登录式切换,会读取目标用户的配置文件,完全切换
su -username -c 'command' :以某用户的身份运行某命令