一、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 dhff3、把多行發送給STDIN
使用“<< 終止詞”命令從鍵盤把多行重導向給STDIN
直到 終止詞 位置的所有文本都發送給STDIN
有時被稱為就地文本(heretext)
# mail -s "Please Call" [email protected] <<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" [email protected]
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 FOUND5、重定向到多個目標(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/Q4wQF3AqasBPX1dtQZah9PdcznYv4od3eYNFRJ7r06teBsJPxD50NRRlvFsSrD72.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/bash2.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/nologinvigr :編輯/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 ~]# grpck3、用戶和組管理命令
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 achpasswd 批量修改用戶口令
[root@6 ~]# cat b user1:user1pass user2:user2pass user3:user3pass user4:user4pass chpasswd b3.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/csh3.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 test3.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 lvasu3.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 : lvasu3.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 修改屬主 重啟登陸成功