- #### IO重定向
```
I:input指的是标准输入 描述符用0表示
O:output指的是标准输入 描述符用1表示
标准错误 描述符用2表示
```
一般文件或者命令的标准输入是指的键盘,标准输出是值得终端窗口。
我们用重定向来改变他们的方向
大于号> 表示标准输出:把输出内容定向到一个文件中
```
> filename
# >操作, 将会把文件"filename"变为一个空文件(就是size为0).
# 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).
```
set –C 禁止将内容覆盖已有文件,
但可追加
\>| file 强制覆盖
set +C 允许覆盖
>> filename
```
# 》操作, 如果文件不存在会创建文件,如果文件存在将会把输出的内容追加到文件"filename"中
```
2> fliename
```
2>filename 指的是把标准错误输出的内容重定向到文件"filename"中清空原文件
```
同理
2>> fliename
```
2>> filename指的是把标准错误输出的内容追加到文件"filename"中
```
2>&1 filename
```
重定标准错误到标准输出
将错误消息的输出, 发送到与标准输出所指向的地方.
```
&>filename
将标准输出和标准错误都重定向到文件"filename"中
```
合并多个程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
```
2>&1
重定向stderr到stdout.
< FILENAME
从文件中接受输入.
与">"是成对命令, 并且通常都是结合使用.
<< 表示多行重定向
<<后面跟的是多行重定向开始与结束的字符,他可以是任何字符 ,开始字符必须与结束字符相同,结束字符必须单独一行
示例:把两个E之间的多行自发作为cat命令的标准输入
[zhangxiao@zhangxiao ~]$cat <<E
```
> s
> s
> d
> d
> f
> s
> E
s
s
d
d
f
s
[zhangxiao@zhangxiao ~]$
```
- #### tr
语法:tr + 【选项】 +参数
常用选项
```
-c或——complerment:取代所有不属于字符集的字符;(取反)
-d或——delete:删除所有属于第一字符集的字符;(删除)
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;(压缩相同的连续字符)
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。(当第一字符集比第二个字符集字符多时,第一字符集超出来的不生效)
```
示例:把输入的小写字母换成大写字母
```
[zhangxiao@zhangxiao ~]$tr [a-z] [A-Z]
afdfdfyuc
AFDFDFYUC
sssssss
SSSSSSS
[zhangxiao@zhangxiao ~]$
```
示例:删除输入的字母中的abcd
```
[zhangxiao@zhangxiao ~]$tr -d "abcd"
ssfaasdasncvj
ssfssnvj
[zhangxiao@zhangxiao ~]$
```
- #### 管道 |
|表示管道,指的是|前面的标准输出当做|后面的标准输入
示例
```
[zhangxiao@zhangxiao ~]$cat script.log | tr -d "abcde"
This sttmnt is snt to th log fil, "sript.log".
```
- #### tee
用法:cmd1 | tee [-a ]filename | cmd2
把命令1的标准输出保存到filename中同时作为cmd2的标准输入
```
[zhangxiao@zhangxiao ~]$echo "hello" | tee pwa1
hello
[zhangxiao@zhangxiao ~]$la
-bash: la: command not found
[zhangxiao@zhangxiao ~]$ls
Desktop Documents Downloads helloword Music PAAA Pictures Public pwa1 script.log Templates test1 Videos
[zhangxiao@zhangxiao ~]$
```
- #### 用户权限管理
> 首先用户的权限是有token决定的,token是登录系统获取的,所以修改了用户权限后只有重新登录系统后才可以生效。
与用户和组有关的文件
```
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
```
passwd格式:
```
用户名:密码(X是站位符):UID:gid:备注:家目录:shell
shaow格式:
用户名:密码(加密):mtime(距1970年):密码的最短变更时间(距今):密码的最长有效期:过期几天提醒:过期几天锁定:多长时间失效(距1970.1.1)
```
group格式:
```
组名称:组密码(7版本一般在gshaow中):gid:当前组为附加组的用户列表
```
gshdow:
组名称:组密码:管理员列表:当前组为附加组的用户
> 这四个用户配置文件通常不建议直接修改,如果修改的话最好用命令
> vipw和vigr 修改
> pwck和grpck 检查修改的文件语法有没有错误
- #### :useradd
语法:useradd [选项] 用户名
常用选项:
```
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID号
-c "COMMENT":用户的注释信息
-d HOME_DIR: 以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
```
新建用户的相关文件有
/etc/default/useradd
/etc/skel/*
/etc/login.defs
- #### 批量创建用户
- #### newusers
newusers+参数(可以创建一个pass文档格式文件管道传给newusers)
- #### chpasswd
用法同上,批量修改用户口令
- #### usermod
- 语法:usermode [选项] 用户名
常用选项:
```
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
```
示例:把用户zhangxiao加到组xiaoxiao作为附加组
```
[root@zhangxiao ~]# usermod -G xiaoxiao zhangxiao
[root@zhangxiao ~]# id zhangxiao
uid=500(zhangxiao) gid=500(zhangxiao) groups=500(zhangxiao),501(xiaoxiao)
```
- #### userdel
语法userdel [选项]...用户名
选项- r 删除用户家目录
- #### id
语法:id+[选项]+用户名
常用选项:
```
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
```
示例:显示用户zhangxiao的UID
```
[root@zhangxiao ~]# id -u zhangxiao
500
[root@zhangxiao ~]#
```
- #### su
用法su [-] username
```
su username:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
```
常用用法su [-] UserName -c 'COMMAND'
- #### passwd
- 用法:passwd [OPTIONS] UserName:
```
常用选项:-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f: 强制操作
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
echo "PASSWORD" | passwd --stdin USERNAME
```
- #### chage
修改用户密码时间
语法chage [OPTION]... LOGIN
```
-d LAST_DAY
-E --expiredate EXPIRE_DATE
到期时间
-I --inactive INACTIVE
过期的宽限期
-m --mindays MIN_DAYS 最短可修改时间
-M --maxdays MAX_DAYS 密码的最长有效期
-W --warndays WARN_DAYS 提示时间
–l 显示密码策略
```
- #### chfn
语法:chfn+username
指定用户信息
chsh:指定shell
- #### finger 查看所登录的用户及描述
示例
```
[zhangxiao@zhangxiao ~]$finger
Login Name Tty Idle Login Time Office Office Phone
xiaoxiao zhangxiao tty3 Apr 3 10:45 bj 000
zhangxiao zhangxiao tty2 1:00 Apr 3 08:15
zhangxiao zhangxiao tty1 2:47 Apr 3 07:59 (:0)
zhangxiao zhangxiao pts/1 1:30 Apr 3 08:16 (vfn795y4y0a39yv.mshome.net)
zhangxiao zhangxiao pts/2 Apr 3 09:24 (vfn795y4y0a39yv.mshome.net)
[zhangxiao@zhangxiao ~]$^C
```
- #### groupadd
语法:groupadd [OPTION]... group_name
```
-g GID: 指明GID号
-r: 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
```
组属性修改:groupmod
- #### groupmod [OPTION]... group
-n group_name: 新名字
```
-g GID: 新的GID
组删除:groupdel
groupdel GROUP
```
- #### groupmems [options] [action]
options:
```
-g, --group groupname 更改为指定组 (只有root)
Actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列表
groups [OPTION].[USERNAME]... 查看用户所属组列表
```