8.1_Linux管道的使用和用戶管理

什麼是管道?

wKioL1ef9n7xilg1AABhH_ly20w292.png

管道就是把命令1的標準輸出發送給命令2的標準輸入,把命令2發的標準輸出發送給命令3的標準輸入。。。

最後一個命令會在當前shell進程的子shell進程中執行用來

管道實現了使用目的單一的小程序,組合小程序完成複雜的任務


管道需要配合其他命令的使用


tr命令的使用,常常用於配合管道

    -c或--complerment:取字符集的補集
    -d或--delete:刪除所有屬於第一字符集的字符;
    -s或-squeeze-repeats:把連續重複的字符以單獨一個字符表示
    -t或--truncate-set1:先刪除第一字符集較第二字符集多出的字符
    \NNN      八進制值爲NNN 的字符(1至3個數位)
    \\        反斜槓
    \a        終端鳴響
    \b        退格
    \f        換頁
    \n        換行
    \r        回車
    \t        水平製表符
    \v        垂直製表符
   [:alnum:]    所有的字母和數字
   [:alpha:]    所有的字母
   [:blank:]    所有呈水平排列的空白字符
   [:cntrl:]    所有的控制字符
   [:digit:]    所有的數字
   [:graph:]    所有的可打印字符,不包括空格
   [:lower:]    所有的小寫字母
   [:print:]    所有的可打印字符,包括空格
   [:punct:]    所有的標點字符
   [:space:]    所有呈水平或垂直排列的空白字符
   [:upper:]    所有的大寫字母
   [:xdigit:]   所有的十六進制數
   [=字符=]     所有和指定字符相等的字符


例如 ls | tr 'a-z' 'A-Z' 配合ls 命令把所有標準輸出的小寫字母都轉換成大寫字母

[root@centos6 ~]# ls -l | tr 'a-z' 'A-Z'
TOTAL 124
-RW-R--R--. 1 ROOT ROOT   860 JUL 28 17:33 1TEST
-RW-R--R--. 1 ROOT ROOT   909 JUL 28 17:34 2TEST
-RW-------. 1 ROOT ROOT  1482 JUL 20 17:25 ANACONDA-KS.CFG
-RW-R--R--. 1 ROOT ROOT    43 AUG  1 10:47 A.TXT
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 22 12:51 DESKTOP
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 DOCUMENTS
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 DOWNLOADS
-RW-R--R--. 1 ROOT ROOT     0 JUL 28 10:18 F[A-Z]
-RW-R--R--. 1 ROOT ROOT     0 JUL 28 10:18 F{A-Z}
-RW-R--R--. 1 ROOT ROOT     0 JUL 28 10:18 F[A-Z]
-RW-R--R--. 1 ROOT ROOT 55348 JUL 20 17:24 INSTALL.LOG
-RW-R--R--. 1 ROOT ROOT 10608 JUL 20 17:20 INSTALL.LOG.SYSLOG
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 MUSIC
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 PICTURES
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 PUBLIC
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 TEMPLATES
DRWXR-XR-X. 2 ROOT ROOT  4096 JUL 20 21:24 VIDEOS
DRWXR-XR-X. 9 ROOT ROOT  4096 OCT 19  2015 VMWARE-TOOLS-DISTRIB

tee命令,常常用於配合管道

NAME
       tee - read from standard input and write to standard output and files
           # 用來將標準輸入的內容輸出到標準輸出並可以保存爲文件
SYNOPSIS
       tee [OPTION]... [FILE]...
DESCRIPTION
       Copy standard input to each FILE, and also to standard output.
       -a, --append
              append to the given FILEs, do not overwrite
              # 附加到指定文件,並且不覆蓋
       -i, --ignore-interrupts
              ignore interrupt signals
              # 忽略中斷的信號
       --help display this help and exit
              # 顯示幫助和退出
       --version
              output version information and exit
              # 顯示版本信息和退出·
       If a FILE is -, copy again to standard output.
       # 如果文件類型是文件,複製文件文件到標準輸出。

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

把命令1的標準輸出保存在文件名中,然後管道輸入給命令2

使用:

     保存不同階段的輸出

     複雜管道的故障排除

     同時查看和記錄輸出


用戶管理


什麼是用戶?用戶資源獲取標識符,資源分配,安全權限模型的核心要素之一

沒用用戶,可否? 答案是YES


Linux用戶類別:

    管理員UID:root,0

    系統用戶UID:1-499(CentOS 6),1-1000(CentOS 7)

    登陸用戶UID:500+(CentOS 6),1000+(CentOS 7)

用戶組類別:

    管理員組GID:root,0

    系統組GID:1-499(CentOS 6),1-1000(CentOS 7)

    普通組GID:500+(CentOS 6),1000+(CentOS 7)


Linux組的類別:

     

用戶的主要組(主組、屬主):

    用戶必須屬於一個且只有一個主組

    組名同用戶名,且僅包含一個用戶:私有組

用戶的附加組(輔助組、屬組):

    一個用戶可以屬於零個或多個輔助組


CentOS6和7的默認UID和GID不同,這個是由於/etc/login.defs文件裏面的默認值所決定的

CentOS 6 UID和GID默認值

wKiom1egC9bSuxIAAAAkwAzZhvU369.png

CentOS 7 UID和GID默認值

wKioL1egC9bAeHcFAABGjOhu7ec016.png


Linux用戶和組的主要配置文件

/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)

該文件裏面一共有7項,包括

# [root@centos ~]# cat /etc/passwd
# root(用戶名):x(密碼):0(UID):0(GID):root(註釋):/root(家目錄):/bin/bash(默認SHELL)

假如把普通用戶的UID更改成0,該普通用戶會變成管理員賬號,因爲在Linux系統裏面,識別管理員是否爲管理員,就是查看用戶的UID號碼,爲0則爲管理員,在生產環境中,可能會把管理員root的賬號改成其他名字,這樣做是以防止******root賬號來進行破解。



/etc/group:組及其屬性信息

# [root@centos ~]# cat /etc/group
# root(主組):x(組密碼):0(GID):gentoo(附加組的用戶列表)



/etc/shadow:用戶密碼及其相關屬性

# [root@centos ~]# cat /etc/shadow
# root(用戶名):$6$(加密方式)jyarrud3(隨機數,俗稱鹽)$6AbktjO7BD7hQAMNK.Xx6YO7Tj3ooj9tEcclql5kCZ18Tvt7erKxPv212ssT32SFMEms0WegjsNhS0miktlkd0(用戶密碼):17008(最近更改密碼的日期,從1970年1月1號開始算):0(密碼再過幾天可以被更改):99999(密碼過期時間):7(密碼過期前提醒時間):(密碼過期後幾天賬號會被鎖定):(從1970年1月1日算起,多少天后帳號失效):(保留)

上面這個設置了密碼的用戶顯示的

現在我們再新建一個用戶看看

[root@centos6 ~]# useradd wan
[root@centos6 ~]# tail -1 /etc/shadow
wan:!!:17015:0:99999:7:::

我們會看見賬號密碼那裏有兩個!!,這表示賬號被鎖定,沒有密碼的話不允許該用戶去登陸,假如有密碼,但是那裏還是有一個歎號的話,也表示賬號被鎖定,不對用戶進行解鎖的話該用戶將無法登陸。假如沒有歎號的話,該用戶可以沒有密碼的情況下面直接登陸。不過該功能只能在CentOS 5版本和更老的版本可以實現,爲了安全起見,從CentOS 6以後已經修正此問題。



/etc/gshadow:組密碼及其相關屬性

# cat /etc/gshadow
# root/(主組):(組密碼):(組管理員列表):gentoo(附加組的用戶列表)

注意:爲安全起見,現在一般都沒有組密碼,直接管理員指派,因爲當其他用戶知道了組密碼,可以隨意加入該組,這樣的話就顯得不安全。



用戶和組管理命令


用戶管理命令


useradd [options] LOGIN 增加用戶


   -u  UID:指定UID

   -o  配合-u選項使用,不檢查UID的唯一性,

   -g  GID:指定GID,即用戶的主組,但GID要事先存在

   -G  GID:指定用戶的額外組,但GID要事先存在

   -N  不創建私用組做主組,使用users組做主組

   -d  目錄: 指定家目錄

   -m  創建用戶時,強制給用戶創建家目錄

   -M  創建用戶時,但不創建家目錄

   -c  備註:註釋

   -s  shell:指定默認shell,應該指定使用/etc/shells文件中出現的shell

   -r  創建系統用戶 特點:CentOS 6: ID<500,CentOS 7: ID<1000 默認shell爲/sbin/nologin

   -D  顯示或更改默認設置  (默認值設定:/etc/default/useradd文件中)(此命令相當於cat /e    tc/default/useradd)

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

該命令,可以查看到創建用戶時候的各項默認值

例如更改其他用戶默認的家目錄和默認SHELL之類等等的參數就在這裏面


/etc/skel    家目錄文件的來源,在此文件夾裏面新建文件的話,創建新用戶的時候會連指定的新文件一併創建  

/etc/login.defs  一些用戶和組等創建的默認設置的文件



usermod [options] LOGIN 修改指定用戶(跟useradd命令使用方法類似)


    -u UID 更改用戶的UID

    -g GID 更改用戶的GID

    -G 附加組,配置-a 追加新的組,否則爲覆蓋

    -s SHELL 更改用戶的默認SHELL

    -c 註釋

    -d home,跟-m同時用移動家目錄數據

    -m 移動家目錄數據,跟-d同時用

    -l 新的名字,把用戶改名

    -e 指定過期日期 YYYY-MM-DD

    -f 設定非活動期限

    -L 鎖定指定用戶,在/etc/shadow 裏面加!    (同以上/etc/shadow的解釋)

    -U 解鎖用戶,將/etc/shadow 裏面的!號拿掉    (同以上/etc/shadow的解釋)


userdel [options] LOGIN 刪除指定用戶


    -r 連同家目錄和郵箱一起刪除



用戶組管理命令


groupadd [options] group 添加指定組

    -g:指定用戶的GID


groupmod [options] GROUP 修改指定組

    -g: 修改組的GID

    -n: 修改組的組名


groupdel [options] GROUP 刪除指定組


groupmems -a user_name | -d user_name | [-g group_name] | -l | -p  (CentOS 7纔有此命令)

    -l -g 用戶名: 查看指定用戶名組下面還有哪些用戶屬於此組

    -a    要增加的組 -g 用戶:   增加附加組



切換用戶或以其他用戶身份執行命令


切換用戶的方式:

su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄

su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換

root su至其他用戶無須密碼;非root用戶切換時需要密碼

換個身份執行命令:

su [-] UserName-c 'COMMAND'

選項:-l --login:

su -l UserName相當於su-UserName



查看用戶相關的ID信息


id [OPTION]... [USER]

    -u: 查看用戶的UID

    -g: 查看用戶的GID

    -G: 查看用戶的Groups

    -n: 查看用戶的Name


getent  passwd,shadow,gourp,gshadow  USERNAME/GROUPNAME

直接查看指定用戶/組裏面的passwd,shadow,gourp,gshadow文件裏面的內容



其他命令總結:


chsh:修改默認的shell

chfn:修改用戶註釋

vipw:使用vim來編輯passwd文件

vigr:使用vim來編輯group文件


pwconv:pwconv命令用來開啓用戶的投影密碼

pwunconv:pwconv命令用來關閉用戶的投影密碼

    Linux系統裏的用戶和羣組密碼,分別存放在名稱爲passwd和group的文件中, 這兩個文件位於/etc目錄下。因系統運作所需,任何人都得以讀取它們,造成安全上的破綻。投影密碼將文件內的密碼改存在/etc目錄下的shadow和gshadow文件內,只允許系統管理者讀取,同時把原密碼置換爲"x"字符,有效的強化了系統的安全性。 


openssl rand base64 10  隨機生成10位數


批量增加用戶和改密碼

newusers FILE(有格式的文件)  批量加用戶  文件格式  /etc/passwd 文件的格式 root:x:0:0::/root:/bin/bash

ex. newusers user.txt


chpasswd FILE (有格式的文件) 批量改密碼   USERNAME:PASSWORD

ex. cat p.txt |chpasswd


注意,按照以上步驟的方法批量添加完用戶和密碼以後,這些用戶的家目錄裏面並沒有配置,此時需要我們手動把這裏面的配置複製到它們的家目錄裏面

/etc/skel 這個文件甲下面的文件是關於用戶初始配置裏面的變量文件之類


cp -r /etc/skel/.[^.]* /home/USERNAME





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章