歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

class

日期:2017/3/3 10:58:41   编辑:Linux技術

一、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" [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 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/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/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
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 修改屬主 重啟登陸成功

Copyright © Linux教程網 All Rights Reserved