IO重定向及用户管理命令


- #### 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]... 查看用户所属组列表
```

猜你喜欢

转载自blog.csdn.net/qq_41924470/article/details/80059439