一、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' :以某用户的身份运行某命令