第四天
1、tr命令
tr 轉換和刪除字符
tr set1 set2
選項:
-c –C –complement:取字符集的補集
-d –delete:刪除所有屬于第一字符集的字符
-s –squeeze-repeats:把連續重復的字符以單獨一個字符表示
-t –truncate-set1:將第一個字符集對應字符轉化為第二字符集對應的字符
\n 換行 \r 回車? \t tab \v 垂直版tab
tr ‘a-z’ ‘A-Z’
等待你輸入: 如 abcde
則顯示 ABCDE
tr ‘abcd’ ‘1234’
asdfasdf
1s4f1s4f
tr ‘a-z’ ‘A-Z’ < anaconda-ks.cfg > f1.log
意思就是把文件anaconda-ks.cfg內容輸入到tr然后通過tr把內容中的小寫字母轉換成大寫字母在輸出到文件
f1.log
tr ‘abcd’ ‘1234’
abcdef
1234ef
tr ‘abc’ ‘1234’
abcdef
123def
tr -d ‘abc’
abdfabxxc
dfxx
tr -dc ‘abc’?? 對’abc‘取反然后刪除
23423aabc3sff
必須按CTRL+D才顯示
aabc
tr -s ‘abc’???? 連續重復的字母壓縮成一個
aaaaabbbbaaaaccccdddd
abacdddd
在windows中建立文件win.txt 內容為
a
b
c
在linux中顯示為abc怎么轉換成正確格式?
\r就是return回車的意思
通過hexdump -c打開文件發現比linux文件多了0d通過ASC表發現0d為10進制13代表回車
tr -d ‘\r’ < win.txt > win3.txt
cat win3.txt
a?? b?????? c
把多個空格壓縮成一個空格
tr -s ‘ ‘ < win3.txt
a b c
tr -s “ “ :df.log
把df.log中的空格壓縮成一個并把空格替換成:號
2、單行重定向<,多行重定向<<
單行重定向 <
tr ‘a-z’ ‘A-Z’ > /etc/issue
該命令會把/etc/issue中的小寫字符都轉換成大寫字符
tr -d abc < /etc/fstab刪除fstab文件中的所有abc中任意字符
多行重定向《自己喜歡的任意詞例如END 有時稱為就地文本(heretext)
mail -s “Please Call” admin@magedu.com <<END
> Hi Wang,
> >
Please give me a call when you get in. We may need
> to do some maintenance on server1.
> >
Details when you’re on-site
> Zhang
> END
cat >f2 <<E
>hh
> dj…
>E 才結束 而且E必須單行而且不能有空格
3、管道 | 、 |tee
管道? ?|
cmd1|cmd2
cmd1的標準輸出做為cmd2的標準輸入,相互利用
hostname|tr ‘a-z’ ‘A-Z’
CENTOS7.MAGEDU.COM
hostname | tr ‘a-z’ ‘A-Z’ | tr -d ‘.’
CENTOS7MAGEDUCOM
如果不能保證cmd1中的內容正確例如不存在/error但是也想把錯誤內容輸入則
ls /boot /error 2>&1 | tr ‘a-z’ ‘A-Z’
或者
ls /boot /error |& tr ‘a-z’ ‘A-Z’
df | tr -s ‘ ‘ ‘;’
替換df下空格為;
計算1+2+3…100
echo {1..100}|tr ‘ ‘ + |bc
seq -s + 100|bc
5050
重定向到多個目標 tee
ls | tee ls.log
即寫入文件還在屏幕顯示結果
ls | tee -a ls.log
在ls.log里追加ls顯示結果
如果同時想把ls.log里面內容換行刪除可以
ls | tee -a ls.log | tr -d ‘\n’
注意:左邊命令必須有標準輸入 右邊命令必須有標準輸出
echo abcdef | tr ‘abcd’ ‘xyz’
xyzzef
練習
1、將/etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中
2、將當前系統登錄用戶的信息轉換為大寫后保存至/tmp/who.out文件中
3、一個linux用戶給root發郵件,要求郵件標題為”help” ,郵件正文如下:
Hello, I am 用戶名,The system version is here,please help me to check it ,thanks!
操作系統版本信息
4、將/root/下文件列表,顯示成一行,并文件名之間用空格隔開
5、計算1+2+3+..+99+100的總和
6、刪除Windows文本文件中的‘^M’ 字符
7、處理字符串“ xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
8、將PATH變量每個目錄顯示在獨立的一行
9、 將指定文件中0-9分別替代成a-j
10、將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立的一行,并無空行
練習答案
1.tr ‘[:lower:]’ ‘[:upper:]’ < /etc/issue > /tmp/issue.out
2.who | tr ‘[:lower:]’ ‘[:upper:]’ > /tmp/who.out
3.mail -s “help” root <<END
Hello,I am $USER,The system version is here , please help me to check it ,thanks !
OS version: `lsb_release -a`
END
4.ls /root | tr ‘\n’ ‘ ‘
5.echo {1..100} | tr ‘ ‘ ‘+’ |bc
6.tr -d ‘\r’ < win.txt > win4.txt
7.echo ‘xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4’ | tr -dc ‘[:digit:][:space:]’
8.echo $PATH | tr ‘:’ ‘\n’
9.tr ‘0-9’ ‘a-j’ < /data/1
10.tr -dc ‘[:alpha:][:space:]’ < /etc/centos-release | tr -s ‘ ‘ ‘\n’
4、新增用戶、用戶組管理,以及用戶權限管理
安全機制3A
Authentication 認證
Authorization 授權
Accouting|Audition 審計
令牌token,identity
登陸成功才會發token
如果想訪問file則系統根據你的token判斷你是否有權限訪問file
系統用戶就是服務進程之類的不是普通用戶都是軟件
linux創立一個用戶名同時會創立一個同名用戶組
用戶能不能訪問此文件不是由進程決定的,而是由此用戶的安全上下文決定的
安全上下文context(運行此程序的用戶身份,用戶組身份)
wang g1 read g2 write g3 read 累加權限 read write
主要組primary group
一個賬號必須屬于一個組且只有一個主組組名同用戶名,且僅包含一個用戶,私有組當然也可以是現有組
附加組supplementary group
一個用戶可以屬于0個或多個附加組
Linux安全上下文
運行中的程序:進程 (process)
以進程發起者的身份運行:
root: /bin/cat
mage: /bin/cat
進程所能夠訪問資源的權限取決于進程的運行者的身份
id命令查名和主組
主要配置文件
/etc/passwd:名稱UID 主組ID
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬
用命令打開后再用cat /etc/passwd就可以看到加密密碼一般不推薦
pwunconv 顯示加密密碼
pwconv 不顯示加密密碼
注意
如果系統沒有管理員則會變成無法啟動!!
/etc/passwd 格式為
login name:passwd:UID:GID:GECOS:home directory:shell
添加GECOS描述信息
chfn wan
Name []:wanchangqiang
Office []: IT
Office Phone []:10086
Home Phone []:10000
finger wang
finger
查用戶信息
6需要安裝
系統創建賬號一般是從/etc/skel下拷貝標準配置
cp -r /etc/skel/.[^.]*? /data/max
改max的shell為/bin/csh
chsh -s /bin/csh wang
想讓max賬號沒法登陸
chsh -s /sbin/nologin max 則max沒法登陸
/etc/shadow
讓用戶密碼立即過期,登陸時必須改密碼
passwd -e max
等價于
chage -d 0 max
查max賬戶的密碼修改相關信息
chage -l max
修改max賬號的密碼相關信息
chage max
如果希望所有新建的賬戶密碼有效期統一為42天則可以直接修改配置文件
cat /etc/login.defs
例如創建賬號Max
useradd Max
passwd Max
不然Max賬戶無法登陸
查看創建賬號時的各種配置文件生成的地方
cat /etc/default/useradd
UID范圍只是系統默認的范圍,可以人為超越這個范圍
系統創建用戶默認都是從/etc/skel/文件夾下復制初始配置文件到新用戶的文件夾下的
所以如果想新用戶帶有別的文件可以直接往/etc/skel目錄加文件
如果有新員工A進入公司想讓他直接用已離職的B員工的用戶權限,可以直接修改B員工用戶名為A,再要求
A修改密碼即可
就是進入/etc/passwd和/etc/shadow還有修改家目錄/home/B的文件夾直接修改用戶名A即可
新建用戶的相關文件
/etc/default/useradd
/etc/skel/*
/etc/login.defs
更改加密算法
authconfig –passalo=sha256 –update 默認sha512 改成sha256
實際上是修改了一個文件/etc/login.defs
單向加密:哈希算法
md5
sha1
sha224
sha256
sha384
sha512
修改默認創建用戶時會用的配置可以用命令
cat /etc/default/useradd 可以查各種用戶信息
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
單個用戶增加
useradd name
group
/etc/group文件里最后的是用戶的附加組往里面加人可以把這些人也加到這些附加組里面
關于組group的信息
/etc/group /
/etc/gshadow/
注意必須保持兩個文件里面的組成員信息相同,否則會出現命令異常的狀況??!
給Max組加密碼
gpasswd Max
newgrp 臨時切換主組? 例如
newgrp Maxi
就是Max的主組切換為Maxi
如果用戶本不屬于此組則需要知道口令
vipw = vi /etc/passwd???? vi相對于nano有語法檢查功能
改完之后運行
pwck可以檢查報警
同理
vigr = vi /etc/group
grpck
如果id超了范圍則下一個建立賬戶就跟回原來的下一個id號
如果id沒有超上限則會按照上一個創建的id下一個
生產中一般管理多臺機子,都會指定id號這樣方便管理
如果原來id號已經存在,還要強行建立相同id號的賬號則用
useradd -ou 2000 name
一般不推薦這么做
useradd -G bin,root -s /bin/csh -c “Gentoo Distribution”
如果要指定賬戶uid,則uid范圍可以人為超過指定范圍
useradd -u 66666 xixi
getent passwd xixi
只看/etc/passwd下與xixi相關的那行
新建賬號boy讓他的主組屬于已存在組Maxi則
useradd -g Maxi boy
創建一個賬戶Max ,并添加附加信息hi
useradd -c hi Max
創建一個新賬號Max,讓他的默認家目錄在/data/Max則
useradd -d /data/Max Max
創建一個新賬號nginx 讓它成為一個系統賬號同時設置shell類型為/sbin/nologin
useradd -s /sbin/nologin -r nginx
創建一個新賬號openstack 讓它成為一個系統賬號同時設置shell類型為/sbin/nologin同時為他設置家目錄
useradd -s /sbin/nologin -r -m openstack
創建一個用戶Max,同時不創建他的家目錄則
useradd -M Max
創建一個用戶Max,同時讓他加入附加組app1,app3則
useradd -G “app1,app3” Max
創建Maxi用戶,并使用戶所屬組為users則
useradd -N Maxi
刪除Max用戶同時刪除其家目錄
userdel -r Max
創建時郵箱信息放在/var/spool/mail下用userdel -r 會一起刪除其存放的用戶信息
練習
1、創建用戶gentoo,附加組為bin和root,默認shell為/bin/csh,注釋信息為
“Gentoo Distribution”?
2、創建下面的用戶、組和組成員關系
名字為webs 的組
用戶nginx 使用webs 作為附屬組
用戶varnish,也使用webs 作為附屬組
用戶mysql,不可交互登錄系統,且不是webs 的成員,nginx,varnish,mysql密碼都是magedu
答案
1、useradd -G bin,root -s /bin/csh -c “Gentoo Distribution” gettoo
2、
1)groupadd webs
2)useradd -G webs nginx
3)useradd -G webs varnish
4)useradd -r -s /sbin/nologin mysql
5)echo magedu > passwd –stdin nginx
echo magedu > passwd –stdin varnish
echo magedu > passwd –stdin mysql
給mage組加密碼則
gpasswd mage
Max賬號加入到mage組做為其主組則
newgrp mage
如果需要批量創建用戶或者批量遷移用戶例如把文件從centos7遷移到centos6
可以先創建/datd/userlist.txt然后把/etc/passwd里面需要遷移的用戶內容拷貝進文件里面注意重復的用戶
必須刪除,然后執行。
先執行遠程拷貝命令scp
scp userlist.txt 192.168.30.100:/data(此為centos6 ip)
如果沒有寫目錄默認就是在/root下
然后按yes,之后輸入對方密碼就能傳文件
newusers /data/userlist.txt 按照/data/userlist.txt批量創建用戶
chpasswd 批量修改用戶口令
批量修改口令可以直接創建一個文本pass.txt內容為
app1:redhat
app2:oopp
app3:abc
app4:abc
app5:redhat
然后執行
cat pass.txt | chpasswd
usermod
對于已有用戶需要修改用戶信息則可以用usermod命令
用戶Max加入到附加組root并不覆蓋原有附加組bin則用
usermod -aG root Max
如果想要Max不屬于任何附加組則
usermod -G “” Max
如果想修改用戶名Max為Maxi則
usermod -l Maxi Max
但是家目錄還是沒改的需要手動更改
默認用戶郵箱目錄 /var/spool/mail/
刪除用戶userdel
userdel -r 刪除用戶名和用戶目錄
不過一般工作中不用-r以防萬一需要用舊用戶里面的數據
刪除組用groupdel
但是當一個組是某個用戶的主組的時候此組不能刪除例如,存在用戶Max則
groupdel Max
無法執行,因為他是用戶Max的主組,如果附加組則可以直接刪除
如果想刪除組Max那么需要先指定用戶Max的主組為其他組,讓他不成為任何一個用戶的主組,然后執行
刪除
useradd? usermod userdel
-u
-r????????????????? -r
-s
-d
-c
-g
-G
id命令
-u
-g
-G
-Gn
一般創建用戶之前都用id命令先判斷是否存在此用戶才執行創建
id Max
su切換用戶
su Max
為不完整切換身份切換環境信息不切換
su – Max
為完全切換身份切換環境信息也切換
在生產環境中,推薦先用普通賬戶登陸等需要執行一些高級操作才切換到root比較安全
從當前賬號Max切換到root以執行cat /etc/shadow完成后再退回Max賬號
su – root -c ‘cat /etc/shadow’
注意:每次執行完切換系統會有切換記錄,盡量少切換,每次切換完用exit不然會有很多奇怪錯誤
在生產環境中,需要創建特定的gid和uid相同的賬號的時候可以通過以下方法創建,例如創建id為1234的
nginx賬號:
groupadd -p 1234 nginx
useradd -g nginx -u 1234 nginx
更改組的口令用gpasswd
gpasswd -a user group1 將用戶添加到指定組
gpasswd -d user group1從指定組中移除用戶user
gpasswd -A user1,user2… 設置有管理權限的用戶列表例如
gpasswd -A Max g1
查詢某個組里的成員有誰用groupmems
groupmems -l -g groupname
在某個組里加人
groupmems -a username -g groupname
在某個組里刪人
groupmems -d username -g groupname
查看賬號屬于哪個組
groups username
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95930