一、IO重定向(二)

 1、tr 命令

    tr –  转换和删除字符

    tr [OPTION]... SET1 [SET2]

     选项:

    -c 或——complerment :取字符集的补集

[root@6 ~]#  tr -c 'abc' '1' << end
> abcdefghijklmn
> end
abc111111111111[root@6 ~]#


     -d 或——delete :删除所有属于第一字符集的字符(可以用八进位制数代替);

[root@6 ~]# tr -cd '[1-9]' < a1
1234565678[root@6 ~]#
[root@6 ~]# tr -d '\141' << end ##a的八进位制为141
> abcdr
> end
bcdr


     -s 或—squeeze-repeats:把连续重复的字符以单独一个字符表示压缩

[root@6 ~]# tr -s 'se' << end
> asssssssssssdeeeeeeeeeeeeef
> end
asdef



      -t 或--truncate-set1:先删除第一字符集较第二字符集多出的字符

# echo  abcde |tr -t 'abcde' 'xyz'   ##-t,模式下,对第一字符集较第二字符集多的内容不做转换
 xyzde
# echo  abcdef |tr  'abcde' 'xyz' ##一般情况下,第一字符集多的将按第二字符集最后一个字符处理
  xyzzzf
[root@6 ~]# tr 'abc' 'xyzw' << end    ##当第二字符集比第一字符集多时,去掉第二字符集多的内容
> abcqsdfg123
> end
xyzqsdfg123



    特殊字符:

    \r  :^M

    \n :$

    # cat a.txt |tr -d '\r'   ###将win中的文本转换为linux中的文本文件

 2、从文件中导入STDIN

    使用< 来重定向标准输入

    某些命令能够接受从文件中导入的STDIN:

       $ tr ‘a-z’ ‘A-Z’< /etc/issue

[root@6 ~]# tr '[:lower:]' '[:upper:]'< /etc/issue
CENTOS RELEASE 6.8 (FINAL)
KERNEL \R ON AN \M
cat  >



     该命令会把/etc/issue 中的小写字符都转换成写写字符

      tr –d abc < /etc/fstab  删除fstab 文件中的所有abc 中任意字符

       按ctrl+d 离开,可以使用文件来代替键盘的输入

[root@7 ~]# cat  > d
abc
def
dhff        ###ctrl+d退出,回到命令提示符
[root@7 ~]# cat d
abc
def
dhff



       #Cat > e < d

[root@7 ~]# cat d
abc
def
dhff
[root@7 ~]# cat > e < d
[root@7 ~]# cat e
abc
def
dhff


3、把多行发送给STDIN

    使用“<< 终止词”命令从键盘把多行重导向给STDIN

    直到 终止词 位置的所有文本都发送给STDIN

    有时被称为就地文本(heretext)

    # mail -s "Please Call" admin@magedu.com <<END

    > Hi Wang,

    > Zhang

    > END    

    #echo "redhat"| passwd --stdin apple

[root@7 ~]# cat > c << end
> my
> name
> is
> lvasu.
> end
[root@7 ~]# cat c
my
name
is
lvasu.



4、管道

     管道(使用符号“| ”表示)用来连接命令

     命令1 |  命令2 |  命令3 | …

    将命令1 的STDOUT 发送给命令2 的STDIN ,命令2的 的

    STDOUT 发送到命令3 的STDIN

    STDERR 默认不能通过管道转发,可利用2>&1 或 或 |&  实现

    最后一个命令会在当前shell 进程的子shell 进程中执行用来

    组合多种工具的功能

    ls | tr 'a-z' 'A-Z'

    less :一页一页地查看输入:

    $ ls -l /etc | less

    mail:通过电子邮件发送输入:

    $ echo "test email" | mail \

    -s "test" user@example.com

    lpr :把输入发送给打印机

    $ echo "test print" | lpr -P printer_name

              

         # echo  abcdefg | tr 'a-z' 'A-Z'

[root@6 ~]# echo  abcdefg | tr 'a-z' 'A-Z'
ABCDEFG



          # Xecho  abcdefg 2>&1 | tr 'a-z' 'A-Z'

[root@6 ~]# Xecho  abcdefg 2>&1 | tr 'a-z' 'A-Z'
-BASH: XECHO: COMMAND NOT FOUND


          # Xecho  abcdefg |&  tr 'a-z' 'A-Z'

[root@6 ~]# Xecho  abcdefg  |&  tr 'a-z' 'A-Z'
-BASH: XECHO: COMMAND NOT FOUND



5、重定向到多个目标(tee)

     $ 命令1 | tee 名 文件名 |  命令2

     把命令1 的STDOUT保存在文件名中,然后管道输入给命令2

     使用:

    保存不同阶段的输出

    复杂管道的故障排除

    同时查看和记录输出

[root@7 ~]# cat d |tee a.txt
abc
def
dhff
[root@7 ~]# cat a.txt
abc
def
dhff



二、用户组(一)

1、基本知识

  1.1介绍安全3A   资源分派:

    Authentication :认证

    Authorization :授权

    Accouting|Audition :审计

 1.2、用户user

    令牌token,identity

    Linux 用户:Username/UID

    管理员:root, 0

    普通用户:1-65535

    系统用户:1-499 (CENTOS6 ), 1-999,对守护进程获取资源进行权限分配

    登录用户:500 (CENTOS6 )+, 1000+交互式登录

       查看用户信息命令:  

              #finger  

[root@6 桌面]# finger root
Login: root           Name: root
Directory: /root                    	Shell: /bin/bash
On since 二 8月  2 08:50 (CST) on tty1 from :0
   6 hours 12 minutes idle
On since 二 8月  2 08:52 (CST) on pts/0 from :0.0
  4 hours 1 minute idle
On since 二 8月  2 08:53 (CST) on pts/1 from 10.1.250.77
On since 二 8月  2 14:43 (CST) on pts/2 from 10.1.250.77
  18 minutes 25 seconds idle
New mail received 二 8月  2 09:48 2016 (CST)
    Unread since 一 8月  1 09:49 2016 (CST)
No Plan.



  1.3组group

    Linux 组:Groupname/GID

    管理员组:root, 0

    普通组:

    系统组:1-499, 1-999

    普通组:500+, 1000+

       ###用户和组的ID和名字可以相同的

  1.4、安全上下文  Linux 安全上下文   security context

    运行中的程序:进程 (process)

    以进程发起者的身份运行:

    root: /bin/cat

    mage: /bin/cat

    进程所能够访问资源的权限取决于进程的运行者的身份

  1.5、组的类别

    Linux 组的类别:

    用户的主要组( 主组):

    用户必须属于一个且只有一个主组

    组名同用户名,且仅包含一个用户:私有组

    用户的附加组( 辅助组):

    一个用户可以属于零个或多个辅助组

 

2、用户和组的配置文件及其格式

  2.1、用户和组的配置文件及文件格式

     Linux 用户和组的主要配置文件:

    /etc/passwd :用户及其属性信息( 名称、UID 、主组ID 等)

    login name :登录用名(wang)

    passwd :密码 (x)

    UID号 :用户身份编号 (1000)

    GID :登录默认所在组编号 (1000)

    GECOS :用户全名或注释

    home directory录 :用户主目录 (/home/wang)

    shell :用户默认使用shell (/bin/bash)

    /etc/group :组及其属性信息

[root@7 ~]# getent passwd root
root:x:0:0:root:/root:/bin/bash

    /etc/shadow :用户密码及其相关属性

    用户名:登录用名

    加密密码:一般用sha512 加密

    密码最近一次修改时间:1970 年1 月1日起到密码最近一次被更改的时间

             =0 用户下次登陆后必须修改时间

    密码最短修改时间:密码再过几天可以被变更

               =0 没有密码最短使用时间,(0 表示随时  可被变更)

    密码最长修改时间:密码再过几天必须被变更

             <最短修改时间时,则被禁止修改密码  (99999 表示永不过期)

    密码警告时间:密码过期前几天系统提醒用户

                (默认为一周)

    账号非活动时间:密码过期几天后帐号会被锁定

    账户过期时间:从1970 年1 月1 日算起,多少天后帐号失效。

[root@7 ~]# getent shadow root
root:$6$yE.b6vYZm3r2giVr$U9M5ROSqW0GgKYw/Q4wQF3AqasBPX1dtQZah9PdcznYv4od3eYNFRJ7r06teBsJPxD50NRRlvF***D72.JvuE.::0:99999:7:::



    /etc/group;组及其用户属性、

     群组名称:就是群组名称

           群组密码:通常不需要设定,密码是被记录在

           GID的 :就是群组的 ID

           以当前组为附加组的用户列表( 分隔符为逗号)

[root@7 ~]# getent group root
root:x:0:


    /etc/gshadow:组密码及其相关属性

     群组名称:就是群组名称

    群组密码:

    组管理员列表:组管理员的列表,更改组密码和成员

    以当前组为附加组的用户列表:( 分隔符为逗号)

[root@7 ~]# getent gshadow root
root:::


 

  2.2密码加密及复杂性策略

    加密机制:

    加密:明文-->  密文

    解密:密文-->  明文

    对称加密加密和解密使用同一个密码

         公钥加密:每个密码成对出现,一个为私钥(secret key),一个为公钥(public key)

          单向加密(指纹加密):散列加密,提取数据特征码 ,常用于数据完  整性校验

    单向加密:哈希算法,原文不同,密文必不同

    相同算法定长输出,获得密文不可逆推出原始数据

    雪崩效应:初始条件的微小改变,引起结果的巨大改变

    加密算法:  

        md5: message digest, 128bits              ###    $1

        sha1: secure hash algorithm, 160bits

        sha224: 224bits

        sha256: 256bits                        ###   $5

        sha384: 384bits

        sha512: 512bits       ###目前centos6之后只用的加密算法 $6

    (salt加盐):$1后两个$符之间的即为salt

  lv:$1$vBgtHhcL$S0a/60DF0dTcfbE/HpLDT1:17015:0:99999:7:::


    

    更改加密算法 authconfig --passalgo=sha256 -- update

[root@6 桌面]# authconfig --passalgo=md5 --update
[root@6 桌面]# useradd lv
[root@6 桌面]# getent shadow lv
lv:!!:17015:0:99999:7:::
[root@6 桌面]# passwd lv
更改用户 lv 的密码 。
新的 密码:
无效的密码: WAY 过短
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@6 桌面]# getent shadow lv
lv:$1$vBgtHhcL$S0a/60DF0dTcfbE/HpLDT1:17015:0:99999:7:::


   更改密码存放的位置:

      早期密码存放在/etc/passwd中,现在一般存放在中/etc/shadow,即转换存放位置。

      #pwunconv  pw passwd unconvert  不转换密码位置,存放在/etc/passwd

      #pwconv                   转换密码位置,存放在中/etc/shadow

[root@6 桌面]# head -1 /etc/shadow
root:$6$WCeeOGmBq7sO4OUR$7ilpCkqcbLCewVKKXKpOH1V1SBqZI4m57d1fZocbrlYZhbF9thDSGJhei1c.DYfnFT5UuamVtUS0CsESHBzqK/:17002:0:99999:7:::
[root@6 桌面]# pwunconv
[root@6 桌面]# head -1 /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 没有那个文件或目录
[root@6 桌面]# head -1 /etc/passwd
root:$6$WCeeOGmBq7sO4OUR$7ilpCkqcbLCewVKKXKpOH1V1SBqZI4m57d1fZocbrlYZhbF9thDSGJhei1c.DYfnFT5UuamVtUS0CsESHBzqK/:0:0:root:/root:/bin/bash
[root@6 桌面]# pwconv
[root@6 桌面]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash



  2.3文件操作

    vipw :编辑/etc/passwd  同时检查账户完整性

[root@7 ~]# vipw root
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin



    vigr :编辑/etc/group       同时检查账户的完整性

[root@7 ~]# vigr
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

   pwck :检查/etc/passwd

[root@7 ~]# pwck
用户“ftp”:目录 /var/ftp 不存在
用户“avahi-autoipd”:目录 /var/lib/avahi-autoipd 不存在
用户“saslauth”:目录 /run/saslauthd 不存在
用户“pulse”:目录 /var/run/pulse 不存在
用户“gnome-initial-setup”:目录 /run/gnome-initial-setup/ 不存在
pwck:无改变

    grpck:检查/etc/group

[root@7 ~]# grpck

3、用户和组管理命令

  3.1、用户创建:useradd

     useradd [options] LOGIN

        -u  UID :  [UID_MIN, UID_MAX] 定义在/etc/login.defs

        -o  配合-u  选项,不检查UID 的唯一性

        -g  GID :指明用户所属基本组,可为组名,也可以GID

        -c  "COMMENT" :用户的注释信息

        -d  HOME_DIR: 以指定的路径( 不存在) 为家目录

        -s  SHELL :  指明用户的默认shell 程序可用列表在/etc/shells 文件中

              -G  GROUP1[,GROUP2,...] :为用户指明附加组,组必须事先存在

        -N  不创建私用组做主组,使用users 组做主组 (users  UID:100)

        -r:  创建系统用户 CentOS 6: ID<500 ,CentOS 7: ID<1000

           -m (-k):强制创建家目录

             (-k):创建用户默认把/skel目录下的文件复制到用户家目录下

           -M: 拒绝为影虎创建家目录

      [root@6 ~]# useradd -u 1234 -G root,ftp -s /bin/csh  -d /testdir/testuser testuser

             

    默认值设定:/etc/default/useradd 文件中

    显示或更改默认设置

    #useradd -D

    useradd –D -s SHELL

[root@6 桌面]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes



    默认配置文件:

     /etc/default/useradd

    /etc/skel/*

    /etc/login.defs

    批量创建用户:

    newusers passwd 格式文件 批量创建用户

user1:x:3000:::/testdir/user1:/bin/csh
user2:x:3001:::/testdir/user2:/bin/csh
user3:x:3002:::/testdir/user3:/bin/csh
user4:x:3003:::/testdir/user4:/bin/csh
newusers  a



      cat b|chpasswd 批量修改用户口令

[root@6 ~]# cat b
user1:user1pass
user2:user2pass
user3:user3pass
user4:user4pass
chpasswd  b

  3.2用户属性修改usermod,chfn

   usermod [OPTION] login

    -u UID:  新UID

    -g GID:  新基本组

    -G GROUP1[,GROUP2,...[,GROUPN]]] :新附加组,原来的附加

    组将会被覆盖;若保留原有,则要同时使用-a 选项,表示append;

    -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:  设定非活动期限;

     -o:忽略检查,而直接修改用户UID   -u -o

     chfn:修改、添加附加信息

root@6 桌面]# chfn lvasu
Changing finger information for lvasu.
Name []: lvasu
Office []: class1
Office Phone []: 911
Home Phone []: ****
Finger information changed.
[root@6 桌面]# finger lvasu
Login: lvasu          	Name: lvasu
Directory: /home/lvasu              	Shell: /bin/bash
Office: class1, 911	Home Phone: ****
Last login 一 8月  1 18:09 (CST) on pts/2 from 10.1.250.77
Mail last read 日 7月 31 22:21 2016 (CST)
No Plan.



     chsh:修改用户shell类型  

[root@6 桌面]# chsh -s /bin/csh  lvasu
Changing shell for lvasu.
Shell changed.
[root@6 桌面]# getent passwd lvasu
lvasu:x:1001:500:lvasu,class1,911,****:/home/lvasu:/bin/csh


  3.3、删除用户userdel

      userdel [OPTION]... login

          -r:  删除用户家目录;

[root@6 桌面]# userdel -r lv
[root@6 桌面]# ls /home
ha1  ha2  ha3  lvasu  test
[root@6 桌面]# useradd app
[root@6 桌面]# userdel app
[root@6 桌面]# ls /home
app  ha1  ha2  ha3  lvasu  test



 3.4查看用户相关的ID 信息  

   id [OPTION]... [USER]

    -u: UID

    -g: GID

    -G: Groups

    -n: Name

[root@6 桌面]# id -u lvasu
1001
[root@6 桌面]# id -g lvasu
500
[root@6 桌面]# id -G lvasu
500
[root@6 桌面]# id -un lvasu
lvasu
[root@6 桌面]# id -gn lvasu
lvasu
[root@6 桌面]# id -Gn lvasu
lvasu



 3.5  组修改

  groupmems   用户组管理

  groupmems -a user_name | -d user_name | [-g group_name] | -l | -p

         -a :添加组用户

         -d:删除组用户

         -p:删除组内的所有用户(当组内没有其他用户的时候)

[root@6 桌面]# groupmems -a lvasu
[root@6 桌面]# id lvasu
uid=1001(lvasu) gid=500(lvasu) 组=500(lvasu),0(root)
[root@6 桌面]# groupmems -d lvasu
[root@6 桌面]# id lvasu
uid=1001(lvasu) gid=500(lvasu) 组=500(lvasu)

    #newgrp    临时切换主组     exit退出

[root@6 桌面]# newgrp lvasu
[root@6 桌面]# id
uid=0(root) gid=500(lvasu) 组=500(lvasu),0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@6 桌面]# exit
exit
[root@6 桌面]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    #groups     显示组中的用户

     groups [OPTION]... [USERNAME]...

[root@6 桌面]# groups root
root : root
[root@6 桌面]# groups lvasu
lvasu : lvasu


   3.6切换用户或以其他用户身份执行命令

     su [options...] [-] [user [args...]]

       切换用户的方式:

    su UserName:非登录式切换,即不会读取目标用户的

    配置文件,不改变当前工作目录

    su - UserName:登录式切换,会读取目标用户的配置

    文件,切换至家目录,完全切换

      ###读取的配置文件不同

    root su 至其他用户无须密码;非root 用户切换时需要密码

    换个身份执行命令:

    su [-] UserName -c 'COMMAND'      

    选项:-l --login: :

    su -l UserName 于 相当于 su - UserName

      su -c 退出切换用户模式

          # su - root -c `cat /etc/shadow`


如何给用户提权

    1、通过SU 、SU -  切换到管理员账户

    2、通过把用户加入到管理员组

    3、通过useradd -u  -o  0  user  将用户设置为管理员

           取消管理员设置,修改/etc/passwd 文件  的UID 为原UID

           # chown -R  lvasu /home/lvasu    修改属主  重启登陆成功