1. 程式人生 > >第四天標準IO和管道

第四天標準IO和管道

ace 執行權限 用戶和組管理命令 direct chage nginx mage write rep

1、[root@centos7 ~]#cmd &> all.log(把輸出與錯誤信息都放到all這個文件裏面)
[root@centos7 ~]#cmd >all.log 2>&1(把錯誤信息都放到輸出裏面,這樣輸出就有輸出與錯誤)
[root@centos7 ~]#cdm 2>all.log 1>&2(把輸出信息放到錯誤的裏面,這個錯誤的信息就有輸出與錯誤)
[root@centos7 ~]#cmd &>all.log;
cmd >all.og 2>&1;
cmd 2>all.log 1>&2;(上面這三個效果是一樣的)

2、tr(命令可以對來自標準輸入的字符進行替換、壓縮和刪除。它可以將一組字符變成另一組字符,經常用來編寫優美的單行命令,作用很強大。)(替換與轉換)

-c 取字符集的補集
-d 刪除所有屬於第一字符集的字符
-s 把連續重復的字符以單位一個字符表示
-t 將第一個字符集對應字符轉化為第二字符集對應的字符
tr 轉換和刪除字符
tr [OPTION]... SET1 [SET2]
選項:
-c –C --complement:取字符集的補集
-d --delete:刪除所有屬於第一字符集的字符
-s --squeeze-repeats:把連續重復的字符以單獨一個字符表示
-t --truncate-set1:將第一個字符集對應字符轉化為第二字符集對應的字符

[:alnum:]:字母和數字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符
[:digit:]:數字 [:graph:]:圖形字符 [:lower:]:小寫字母 [:print:]:可打印字符
[:punct:]:標點符號 [:space:]:空白字符 [:upper:]:大寫字母
[:xdigit:]:十六進制字符
[root@centos7 ~]#tr ‘a-z‘ ‘A-Z‘(比如這個我要把第一行的所有字符轉換為大寫的字符)
buqbdwegqwduqwdhFYFIVYFYF345
BUQBDWEGQWDUQWDHFYFIVYFYF345

[root@centos7 ~]#tr ‘a-z‘ ‘A-Z‘ <file.log(就是把file.log的文件裏面的字母都轉換成大寫)

[root@centos7 ~]#tr ‘abc‘ ‘1234‘(轉換只是按照原abc轉雖然有1234但是對應的4卻沒有目標所以忽略不轉)
abcdef
123def

[root@centos7 ~]#tr -d ‘abc‘(使用d命令把有abc的字符給刪除了)
abdfabxxc
dfxx

[root@centos7 ~]#tr -dc ‘abc‘(除了abc其他的都刪除,取反的意思,輸入後按ctrl+D結束)
abcssiedf123
abc[root@centos7 ~]#

<我是剛剛做了實驗的,有輸出的功能,但是必須要有文件才能輸出,如:
touch eee ; echo "asdf" < eee
輸出就是asdf,但是文件eee中無內容
<的確挻奇怪的,不往文件裏寫東西,但是在使用的時候必須要有一個已存在的文件名才行

[root@centos7 data]#tr -s ‘‘ < df.log(將多余的空格替換)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 4648016 47755184 9% /
devtmpfs 583452 0 583452 0% /dev
tmpfs 599340 0 599340 0% /dev/shm
tmpfs 599340 9944 589396 2% /run
tmpfs 599340 0 599340 0% /sys/fs/cgroup
/dev/sda3 31441920 33048 31408872 1% /data
/dev/sda1 1038336 157924 880412 16% /boot
tmpfs 119872 40 119832 1% /run/user/0
[root@centos7 data]#tr -s ‘ ‘ < df.log(可以看一下替換的結果但沒有寫入)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 4648016 47755184 9% /
devtmpfs 583452 0 583452 0% /dev
tmpfs 599340 0 599340 0% /dev/shm
tmpfs 599340 9944 589396 2% /run
tmpfs 599340 0 599340 0% /sys/fs/cgroup
/dev/sda3 31441920 33048 31408872 1% /data
/dev/sda1 1038336 157924 880412 16% /boot
tmpfs 119872 40 119832 1% /run/user/0
[root@centos7 data]#cat df.log
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 4648016 47755184 9% /
devtmpfs 583452 0 583452 0% /dev
tmpfs 599340 0 599340 0% /dev/shm
tmpfs 599340 9944 589396 2% /run
tmpfs 599340 0 599340 0% /sys/fs/cgroup
/dev/sda3 31441920 33048 31408872 1% /data
/dev/sda1 1038336 157924 880412 16% /boot
tmpfs 119872 40 119832 1% /run/user/0
[root@centos7 data]#tr -s ‘ ‘ ‘:‘ < df.log(可以看一下替換的結果但沒有寫入)
Filesystem:1K-blocks:Used:Available:Use%:Mounted:on
/dev/sda2:52403200:4648016:47755184:9%:/
devtmpfs:583452:0:583452:0%:/dev
tmpfs:599340:0:599340:0%:/dev/shm
tmpfs:599340:9944:589396:2%:/run
tmpfs:599340:0:599340:0%:/sys/fs/cgroup
/dev/sda3:31441920:33048:31408872:1%:/data
/dev/sda1:1038336:157924:880412:16%:/boot
tmpfs:119872:40:119832:1%:/run/user/0

3、多行重定向
[root@centos7 data]#ls
a a.bak df.log dir dir1 err.log fa fA fb fB fc fC fd fD fe ls.out nginx nginx-1.12 nginx-1.13
[root@centos7 data]#cat > a <<E(多行重定向一定要是<<這個名字比如叫E那麽結束的時候一定要也是E)

haha
hudqw
snxqw
snxhqwd
wiqdhowqd
wdiqwdo
wdqowd
wdioqwd
E
[root@centos7 data]#cat a
haha
hudqw
snxqw
snxhqwd
wiqdhowqd
wdiqwdo
wdqowd
wdioqwd
[root@centos7 data]#

[root@centos7 data]#tr ‘[:lower:]‘ ‘[:upper:]‘ <<EOF

abdc
wdeded
edfwef
wdqwe
EOF
ABDC
WDEDED
EDFWEF
WDQWE
[root@centos7 data]#

4、多重定向發郵件mail
[root@centos7 data]#mail -s ‘hello‘ guoguo(主題是hello,使用.(點擊.回車就結束寫文件了)來結束,遇到刪除顯示格式不對,用ctrl+刪除)
nishishui
who are you
.
EOT
我在guoguo電腦輸入mail就能看到郵件了(ctrl+D結束看)
[root@centos7 data]#mail -s ‘hello‘ guoguo <<EOF(使用多重定向的方式發郵件)

nihao
hello
hahah
EOF

[root@centos7 data]#cat > mail.txt
nihhao
hahah
lalal

[root@centos7 data]#cat mail.txt
nihhao
hahah
lalal

[root@centos7 data]#mail -s ‘hello‘ guoguo <mail.txt(通過這樣的重定向方式我就能把之前寫好的郵件直接發送了)

[root@centos7 file]#rm -f /var/spool/mail/guogu(刪除guoguo的所有郵件)

5、管道(標準輸出|左邊的標準輸出作為標準輸入)(工作用的非常多)
[root@centos7 data]#hostname | tr ‘a-z‘ ‘A-Z‘(這個寫法的技術就是把hostname的內容輸出的結果通過tr命令在一次執行)
CENTOS7.MAGEDU.COM
[root@centos7 data]#hostname | tr ‘a-z‘ ‘A-Z‘ | tr -d ‘.‘(這個寫法的技術就是把hostname的內容通過tr命令在一次執行在一次執行)
CENTOS7MAGEDUCOM

[root@centos7 ~]#cat mail.txt | mail -s ‘hello‘ guoguo(郵件的寫法也可以用重定向)

[root@centos7 data]#ls /boot/error |& tr ‘a-z‘ ‘A-Z‘(這種寫法就是不管/boot/error這個報錯不,都把錯的信息與輸出信息進行轉換)-----------------------------------------------(新機器)
[root@centos7 ~]#ls /boot /error 2>&1 | tr ‘a-z‘ ‘A-Z‘(這種寫法就是不管/boot/error這個報錯不,都把錯的信息與輸出信息進行轉換)-----------------------------------------------(老機器)
LS: CANNOT ACCESS /ERROR: NO SUCH FILE OR DIRECTORY
/BOOT:
CONFIG-3.10.0-957.EL7.X86_64
EFI
GRUB
GRUB2
INITRAMFS-0-RESCUE-EDDE23332C5E49F4B9D77052AE63DC7A.IMG
INITRAMFS-3.10.0-957.EL7.X86_64.IMG
SYMVERS-3.10.0-957.EL7.X86_64.GZ
SYSTEM.MAP-3.10.0-957.EL7.X86_64
VMLINUZ-0-RESCUE-EDDE23332C5E49F4B9D77052AE63DC7A
VMLINUZ-3.10.0-957.EL7.X86_64

[root@centos7 data]#echo {1..100}(計算1-100的總和)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[root@centos7 data]#echo {1..100} | tr ‘ ‘ + |bc
5050

[root@centos7 data]#seq -s + 1 100 |bc(或者是這個命令)
5050

[root@centos7 data]#ls | tee ls.log(tee命令可以顯示與放入重定向的文件內)----------------------------------
a
a.bak
df.log
dir
dir1
err.log
fa
fA
fb
fB
fc
fC
fd
fD
fe
ls.out
mail.txt
nginx
nginx-1.12
nginx-1.13
[root@centos7 data]#ls | tee -a ls.log(加-a就是是在一次輸入就可以追加了)
[root@centos7 data]#ls
a a.bak df.log dir dir1 err.log fa fA fb fB fc fC fd fD fe ls.log ls.out mail.txt nginx nginx-1.12 nginx-1.13
[root@centos7 data]#cat ls.log
a
a.bak
df.log
dir
dir1
err.log
fa
fA
fb
fB
fc
fC
fd
fD
fe
ls.out
mail.txt
nginx
nginx-1.12
nginx-1.13

[root@centos7 data]#ls | tee -a ls.log(加上-a這個命令就是追加,不會被覆蓋了之前操作過的的命令就不會被覆蓋)

[root@centos7 ~]#tr ‘[:lower:]‘ ‘[:upper:]‘ < /etc/issue > /tmp/issue.out (將/etc/issue文件中的內容轉換為大寫後保存至/tmp/issue.out)

[root@centos7 ~]#who | tr ‘[:lower:]‘ ‘[:upper:]‘ > /tmp/who.out(將當前系統登錄用戶的信息轉換為大寫後保存至/tmp/who.out文件夾中)

系統的用戶名可以用這個變量顯示:[root@centos7 ~]#echo $USER
root

[root@centos7 ~]#lsb_release -a(先安裝先安裝lsb
命令是yum install lsb)
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)
Release: 7.6.1810
Codename: Core

練習題
1、將/etc/issue文件中的內容轉換為大寫後保存至/tmp/issue.out文件中
tr ‘a-z‘ ‘A-z‘ < /etc/issue > /tmp/issue.out(老師)
[root@centos7 ~]#cat /etc/issue | tr ‘a-z‘ ‘A-Z‘ > /tmp/issue.out(我)
2、將當前系統登錄用戶的信息轉換為大寫後保存至/tmp/who.out文件中
[root@centos7 ~]#who | tr ‘a-z‘ ‘A-Z‘ >/tmp/who.out
3、一個linux用戶給root發郵件,要求郵件標題為”help”,郵件正文如下:
Hello, I am 用戶名,The system version is here,please help me to check it ,thanks!
操作系統版本信息
[root@centos7 ~]#mail -s help root <<end

hello I am $USER ,The system version is here,please help me to check it ,thanks!
os:lsb_release -a
end
4、將/root/下文件列表,顯示成一行,並文件名之間用空格隔開
[root@centos7 ~]#ls | tr ‘\n‘ ‘ ‘
5、計算1+2+3+..+99+100的總和
[root@centos7 ~]#echo {1..100} | tr ‘ ‘ + |bc

6、標準輸入的命令--------------------------------------
cat,tr,mail,bc

7、[root@centos7 ~]#openssl rand -base64 12(隨機生成12位的字符)
oRYrg0oSfP7qtKrM

8、[root@centos7 ~]#touch openssl rand -base64 12 |tr -dc ‘[:alnum:]‘ |tr ‘[:upper:]‘ ‘[:lower:]‘(創建一個隨機的文件名)

9、3A
認證,授權,審計

用戶user
令牌token,identity
linux用戶:username/UID
管理員:root,0
普通用戶:1-65535
系統用戶:1-499(6),1-999(centos7)對守護進程獲取資源進行權限分配
登錄用戶:500+(6),1000+(centos7)交互式登錄

組group
windows查看用戶名稱cmd(net user),查看組(net localgroup)

linux組:Groupname/GID
管理員組:root,0
普通組:
系統組:1-499,1-999(centos7)
普通組:500+,1000+(centos7)

windows不允許組名與用戶名同名,linux可以

進程所能夠訪問資源的權限取決於進程的運行者的身份

linux如果guoguo這個用戶,分別都在三個組裏面都有,那麽guoguo的權限就是三個組加起來的權限

[root@centos7 ~]#ll(下面的兩個root表示的是左邊第一root是root用戶創建的a,第二個root表示的意思就是所屬的是這個root組)
total 1944
-rw-r--r--. 1 root root 0 Dec 3 01:31 a

用戶和組的配置文件
linux用戶的組的主要配置文件
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性

echo $SHELL(當前用戶用的shell類型)
cat /etc/shells(shell類型所有種類)
chsh -s /bin/csh guoguo(更改用戶bash類型為csh)
nologin的shell類型給服務類型用的就是不能登陸
su - guoguo切換用戶為guoguo登陸
openssl rand -base64 9(9位字符的口令隨機命令)
getent passwd guoguo=cat /etc/passwd(查看guoguo的passwd的信息,區別在於加了一個guoguo指定的)

/etc/default/useradd(創建用戶的時候參數就是這個參數決定的)
[root@centos7 file]#cat /etc/default/useradd

useradd defaults file

GROUP=100(如果特意不指定guoguo組,就指向這個組)
HOME=/home(家目錄的路徑)
INACTIVE=-1(賬戶過期後的有效期)
EXPIRE=(默認過期時間)
SHELL=/bin/bash(默認創建時用的就是bash)
SKEL=/etc/skel(創建用戶的home就是從這個文件夾復制的)
CREATE_MAIL_SPOOL=yes(mail默認就是創建的)

useradd guoguo(創建賬號guoguo,adduser其實是useradd的軟鏈接)
tcpdump:!!:17877::::::(兩個!!是鎖定賬號的,其實有一個!就是鎖定的意思)
usermod -U guoguo(解鎖,在運行一次就徹底解鎖了)
usermod -L guoguo(加鎖)(雖然guoguo不能登陸了,但是用su切換賬號是可以的)

生產中如果us1離職他的權限要給一個叫sd1的人,就可以用nano進去1、/etc/passwd/與/etc/shadow去修改
最後2、[root@centos7 ~]#ll /home(修改最後的guoguo叫sd1)
total 0
drwx------. 5 guoguo guoguo 128 Dec 13 20:18 guoguo

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

默認口令是加密的,可以用pwunconv這個命令顯示加密文件(老版本)
name:password:UID:GID:GECOS:directory:shell
名稱:密碼:UID:GID:GECOS:目錄:殼
該領域如下:

name這是用戶的登錄名。它不應該包含大寫字母。

password這是加密的用戶密碼,星號(*),或字母“x”。(見pwconv (8)
,以解釋“x”。)
UID特權根登錄帳戶(超級用戶)的用戶ID為0。

GID這是該用戶的數字主組ID。(為用戶定義了其他組
在系統組文件中;看到組(5))。

GECOS這個(描述字段)字段(有時稱為“評論字段”)是可選的,僅用於提供信息
姿勢。通常,它包含完整的用戶名。一些程序(例如手指(1))顯示
來自這個領域的信息。
GECOS是“通用電氣綜合操作系統”的縮寫,在GCOS誕生時更名為GCOS
通用電氣的大型系統部門被出售給霍尼韋爾。丹尼斯?裏奇(Dennis Ritchie)曾說過:“有時我們會
將打印機輸出或批處理作業發送到GCOS機器。密碼文件中的gcos字段是a
放置$IDENTcard的信息。不優雅。”
chfn guoguo(加描述信息)
finger guoguo(查看描述信息)(rpm -ivh 路徑Packages/finger-.....)(安裝finger的光盤)

directory這是用戶的主目錄:“用戶登錄後放置的初始目錄
在”。該字段中的值用於設置HOME環境變量。

系統創建用戶的時候,默認會創建這個用戶的家目錄home,但是系統文件都是從/etc/skel的隱藏文件拷貝的
cp -r /etc/skel/.[^.]* /data/home

shell這是在登錄時運行的程序(如果為空,請使用/bin/sh)。如果設置為不存在的可執行文件,
用戶將無法通過登錄(1)登錄。該字段中的值用於設置
SHELL環境變量。

/etc/shadow:用戶密碼及其相關屬性
passwd -e guoguo(立即讓用戶口令失效,登錄改口令,要輸一次舊口令,在輸入兩次新口令)
chage -l guoguo(查看用戶口令情況)
Last password change : never最後一次密碼更改:永遠不會
Password expires : never密碼過期:從未過期
Password inactive : never非活動密碼:從不
Account expires : never帳戶過期:從未過期
Minimum number of days between password change : 0密碼更改之間的最短天數:0
Maximum number of days between password change : 99999密碼更改之間的最大天數:99999
Number of days of warning before password expires : 7密碼過期前的警告天數:7

chage guoguo(如果被失效了,可以用交互式的提示加入)

/etc/login.defs(修改默認創建用戶密碼配置文件,默認時間是42比如)

[root@centos7 ~]#cat /etc/shadow(用戶密碼及其相關屬性)(內容如下)

guoguo:$6$iydIhmiHWFpOih2p$E4DflEwrAi9OO6VmUGXjlIIiTeyziOKrvbF5XIJ6PNOMgZz8qLs4U.14KaFgZHOZZUJsXXMNj83tDLHjOQVc3/::0:99999:7:::

$1=md5(128位bit)
$6=sha512(512位bit)
更改加密算法:authconfig --passalgo=sha256 --update

iydIhmiHWFpOih2p$如果口令一樣,是因為加salt(鹽)所以加密方法不一樣。

:這裏應該是更新了,這原來是放時間的:0
echo date +%s/3600/24 |bc(能算出來時間)

3/::0:這裏的0就是隨時改口令,命名3就是3天內不能改口令
(普通用戶輸入passwd直接改)

99999:是多少天之後口令就過期了
nano就可以更改/etc/shadow

chage guoguo 這個需要填寫幾個

7:就是提前7天通知你口令過期

99999:7:@: @就是表示口令過期後還可以用多長時間

99999:7:@:&: &就是表示賬戶的有效期(比如創建一個臨時賬號)

/etc/group:組及其屬性信息(內容如下)
linux必須有一個主組,(windows可以不屬於組,默認是user)
比如:guoguo:x:1000:guoguo
guoguo:組名
x:組口令
1000:組ID
guoguo:最後的guoguo就是組的成員附加組,如果有多個用,分隔,他們把guoguo當作附加組

[root@centos7 file]#groups guoguo(這個命令是看guoguo是怎麽看組)
guoguo : guoguo(第一個guoguo是主組,第二個guoguo是附加組,如果還有就還是附加組,我發現每一個賬號都有一個同名的主組與附加組)

/etc/gshadow:組密碼及其相關屬性(內容如下)(默認不建議加口令,默認就是關閉)guoguo:!!::guoguo(默認組密碼是關閉的)
guoguo:第一個guoguo是組名
!!:禁止使用口令登陸
!!:@:guoguo:@誰是組長,多個組長用逗號隔開
br/>guoguo:!!::guoguo(默認組密碼是關閉的)
guoguo:第一個guoguo是組名
!!:禁止使用口令登陸
!!:@:guoguo:@誰是組長,多個組長用逗號隔開

gpasswd guoguo(給guoguo這個組加口令)
newgroup guoguo(就是加入guoguo這個組,並且讓guoguo作為主組,需要輸入組密碼)

文件操作:
vipw=vi /etc/passwd(pwck檢查這個格式)

vigr=vi /etc/group(grpck檢查)

用戶和組管理命令

用戶管理命令:
-----useradd(增加)-------
useradd --help
useradd guoguo
useradd -u 2000 guoguo(指定UID)
getent passwd guoguo=cat /etc/passwd(查看guoguo的passwd的信息,區別在於加了一個guoguo指定的)

批量賬號創建:
首先創建一個txt文件,用nano打開passwd把復制的都復制到txt文件下
通過scp userlist.txt 192.168.30.128:/data(userlist就是命名,yes傳過去後)
查看data目錄就會有這個文件,通過newuser /data/userlist.txt(newuser批量創建用戶上傳文件)
再批量改口令
nano pass.txt(裏面寫app1:123)
app2:456

最後在用cat pass.txt | chpasswd(就可以批量改口令)

默認值設定:/etc/default/useradd---------------------------------------
顯示或更改默認設置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP

使用方法:useradd [options]登錄
useradd - d
useradd - d[選項]
選項:
的主目錄的基目錄
新帳戶
useradd [options] LOGIN

PPT
-u UID
-o 配合-u 選項,不檢查UID的唯一性
-g GID 指明用戶所屬基本組,可為組名,也可以GID
-c "COMMENT“ 用戶的註釋信息
-d HOME_DIR 以指定的路徑(不存在)為家目錄
-s SHELL 指明用戶的默認shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 為用戶指明附加組,組須事先存在
-N 不創建私用組做主組,使用users組做主組
-r 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 創建家目錄,用於系統用戶
-M 不創建家目錄,用於非系統用戶

官方
-c,——註釋信息useradd -c "Gentoo Distribution"(註釋信息)
-d,——home-dir新帳號的home目錄打印或更改默認useradd配置(useradd mysql -d /data/mysql)
-e,——新賬戶到期日
-f,——新賬戶的密碼處於非活動狀態
-g,——gid組名或新組的主組的ID賬戶
-G,——群群新補充群群列表賬戶幫助顯示此幫助消息並退出useradd -G app1,app3 guoguo(創建到附加組,多個時需要加"")追加用useradd -aG app1,app3 guoguo,useradd -G " " guoguo(就是把附加組關閉了)
-k,——skel SKEL_DIR使用這個可選的骨架目錄默認值覆蓋/etc/login.defs不要將用戶添加到最後的日誌和faillog數據庫創建用戶的主目錄
不要創建用戶的主目錄
-N,——非用戶組不要創建與之同名的組用戶(不同名的主組,那麽主組就是user)
-o,——非唯一允許創建用戶與副本(非唯一)UID
-p,——密碼密碼加密後的新賬號密碼系統創建一個系統帳戶
-R,——根目錄CHROOT_DIR到chroot目錄
-s,——shell shell登錄新帳號的shell(useradd -s /sbin/nologin -r -m guoguo)
-u,——uid新賬號的用戶ID用戶組創建與用戶同名的組
-Z,——SELinux -user SEUSER為SELinux用戶映射使用特定的SEUSER
-M(不在home創建家目錄,用於非系統用戶)
-m(創建加目錄用於系統用戶)

練習題
useradd -c "Gentoo Distribution"-G bin,root -s /bin/csh guoguo

groupadd webs
useradd varnish -G webs
useradd nginx -G webs
useradd mysql -s /sbin/nologin/(不可交互的登陸系統就是服務器系統)

echo magedu |passwd --stdin nginx(passwd guoguo默認是用這個)
echo magedu |passwd --stdin varnish
echo magedu |passwd --stdin mysql

------usermod(用戶屬性修改)------

usermod [OPTION] login
-u UID: 新UID
-g GID: 新主組
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項
-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: 設定非活動期限

比如:usermod -G bin wang(wang加入bin組)
usermod -G bin root(如果在用root加入bin組之前的wang就會被擠掉)
usermod -aG bin root(使用這個就可以追加)

  usermod -G "" wang(直接把附加組變成空,就都去掉了)
  usemod -l oldwang wang(登陸原來叫王,現在叫老王,只是改用戶名其他地方不改)

-------userde(刪除用戶)-----
默認家目錄與郵箱是不刪除的
ls /home -l
ll /var/spool/mail/(郵箱)

userde -r guoguo(就可以把郵箱與家目錄一起刪除了,最好不要用r,萬一要用到用戶的數據呢)

userdel(刪除)
組賬號維護命令
groupadd(增加)
groupmod(修改)
groupdel(刪除)

總結:groupadd、groupmod、groupdel
-u uid
-r 創建系統用戶
-s shell類型
-d 指定家目錄路徑
-c 加描述
-g 指定主組
-G 附加組

id命令
id [OPTION]... [USER]
-u: 顯示UID(用戶id)
-g: 顯示GID (組id)
-G: 顯示用戶所屬的組的ID
-n: 顯示名稱,需配合ugG使用

id apache &> /dev/null(創建之前要判斷一下,這個命令就清空了,反正就是不想顯示出來)

切換用戶或以其他用戶身份執行命令
su [options...] [-] [user [args...]]
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄
su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換
?root su至其他用戶無須密碼;非root用戶切換時需要密碼
?換個身份執行命令:
su [-] UserName -c ‘COMMAND‘
?選項:-l --login
su -l UserName 相當於 su - UserName

su guoguo(不完全切換,保留環境)
su - guoguo(完全切換,就像重新登陸)
su -(root默認不需要用戶與密碼,普通用戶登陸需要用戶與密碼)
exit(退回原來身份)或者logout

su - root -c ‘cat /etc/shadow‘(這個命令就是在wang下使用root的權限看你要執行的命令,這是單引號)
不要一直切來切去,最後用logout

sudo -i切換root(烏班圖)

設置密碼
passwd [OPTIONS] UserName: 修改指定用戶的密碼
常用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼(用的比較多)
-f:強制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限
--stdin:從標準輸入接收用戶密碼
示例:echo "PASSWORD" | passwd --stdin USERNAME

修改用戶密碼策略
chage [OPTION]... LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE
-I --inactive INACTIVE
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 顯示密碼策略
示例:
chage -d 0 tom 下一次登錄強制重設密碼
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom

用戶相關的其它命令
chfn 指定個人信息
chsh 指定shell
finger

創建組
groupadd [OPTION]... group_name
-g GID 指明GID號;[GID_MIN, GID_MAX]
-r 創建系統組
CentOS 6: ID<500
CentOS 7: ID<1000

groupadd -g 1234 nginx(創建組)
useradd -g nginx -u 1234 nginx(這樣的寫的話主組與這個用戶的ID號就能一致)

修改和刪除組
組屬性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
組刪除:groupdel
groupdel GROUP

附加組可以刪,主組不可以

更改組密碼
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,... 設置有管理權限的用戶列表

newgrp命令:臨時切換主組
如果用戶本不屬於此組,則需要組密碼

groupadd g1(創建一個g1組)
gpasswd -a wang g1(將wang加入g1組)
gpasswd -d wang g1(將wang從g1組刪除)

[root@centos7 ~]#groups guoguo (查看guoguo屬於哪個組)
guoguo : guoguo

gpasswd -A guoguo g1(將guoguo設置為主的管理員)

更改和查看組成員
groupmems [options] [action]
options:
-g, --group groupname 更改為指定組 (只有root)
Actions:
-a, --add username 指定用戶加入組
-d, --delete username 從組中刪除用戶
-p, --purge 從組中清除所有成員
-l, --list 顯示組成員列表
groups [OPTION].[USERNAME]... 查看用戶所屬組列表

usermod -aG root wang
pgasswd -a wang root
groupmems -s wang -g root

getent passwd | shadow | group | gshadow(查看口令文件)
linux的root組並不是管理員,不要理解為管理員組,在linux看管理員就看uid
useradd -s /sbin/nologin -r -d /data/mysql -m -u 1234 mysql(經常創建用戶,s是bash類型,r不是系統用戶服務器用戶,指定用戶家目錄,默認r是不創建家目錄的,使用-m就是強制創建,-u是指定Uid)

token(uid,gid,groups)
當界面出現亂碼的時候使用reset命令可以重置字符

文件的權限:
read(讀) r(確保文件是可讀的,根據文件,二進制程序不能隨便去改!)(針對文本)
write(寫)w(針對文本)
excute(執行)x(文本給執行沒有什麽意義)

文件屬性操作
chown 設置文件的所有者
chgrp 設置文件的屬組信息

[root@centos7 data]#chown guoguo f1(我把剛創建的f1的所有者變成guoguo)
[root@centos7 data]#ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo root 0 Dec 17 19:15 f1
drwxr-xr-x. 2 root root 6 Dec 16 20:16 home
-rw-r--r--. 1 root root 0 Dec 16 20:52 mail.txt
[root@centos7 data]#

[root@centos7 data]#chgrp rpc f1(我接著把f1的主組變成rpc,rpc也是一個組)

[root@centos7 data]#groupadd g1(我創建了兩個組g1與g2)
[root@centos7 data]#groupadd g2
[root@centos7 data]#groupmems -a guoguo -g g1(通過這個方式把g1加入guoguo成為附加組)
[root@centos7 data]#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@centos7 data]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo),1001(g1)
[root@centos7 data]#usermod -aG g2 guoguo(通過這個方式把g2加入guoguo成為附加組,如果不加a就會把之前加的g1組給覆蓋)
[root@centos7 data]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo),1001(g1),1002(g2)

[guoguo@centos7 data]$ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo rpc 0 Dec 17 19:15 f1(首先f1是屬於guoguo創建的)
[root@centos7 data]#su guoguo
[guoguo@centos7 data]$chown mage f1(我把這個文件的創建權限給mage系統是不允許的)
chown: changing ownership of ‘f1’: Operation not permitted
[guoguo@centos7 data]$chgrp g1 f1(但是我可以給他改變主組,改組的前提也是改他屬於的組[root@centos7 data]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo),1001(g1),1002(g2))
[guoguo@centos7 data]$ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo g1 0 Dec 17 19:15 f1
總結:
第一普通用戶是不能改文件的所有者-----------------------------------------------------
第二作為普通用戶要是改文件的所屬組,1這個文件是他的,第二在一個組(主+附加組)---------------------------

對於普通用戶來說
文件所有者(權限最大)
屬於這個組(權限小一點)
什麽都不是 (最嚴)

[guoguo@centos7 data]$ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo g1 0 Dec 17 19:15 f1(拿f1舉例子)
f1這個文件對於guoguo來說只有讀寫沒有執行
f1這個文件對於g1組來說只有讀的權限
當然對於other來說只有讀的權限

前三個rw- 針對的是所有者
中間三個r-- 針對所屬組
r--other 其他

給這三個授權chmod(更改用戶的權限)
模式法(mode):
who opt給用戶做什麽事
chmod (你對誰操作) (你要做什麽操作)(你要針對他給什麽權限)(這個是對應的文件)

who:所有者用(u) 所屬組(g) other(o)

opt:+ - =

權限:r w x X(X事特殊權限)

刪除文件的權限是由目錄決定的,如果要刪除文件,就必須要對這個目錄具有寫的權限!--------------------------------
[guoguo@centos7 data]$ll -d /data(比如我要刪除我之前創建的f1,他在data文件夾下面,但是你看data這個文件夾other的權限!)
drwxr-xr-x. 3 root root 57 Dec 17 19:15 /data(為啥guoguo這個用戶能運行ls看data的f1呢,因為他有other的執行權限)

對於目錄如果沒有執行權限不能cd進去,也不能查看文件的屬性與內容,就算有讀也沒用(一般給X,r要不都不給,這是目錄的基礎權限)
對於目錄來說,如果只有執行權限,看不了文件,但是如果dir下面的f1與f2文件我知道的話我就能進去(這一句話可以理解一下,主要跟上一句一樣,總體是襯托上面的第一句!)
目錄的w寫權限決定我能不能刪除這個目錄的文件,就算我看不了這個目錄的文件,我只要有這個目錄寫的權限我就能刪除(!前提rw刪不了,xw能刪,xrw必須能刪除)

下面的這三個執行效果是一樣的(這樣的話所有人都看不了ls了,輕易不要做)
chmod -x /bin/ls / 反過來就是加上+x
chmod ugo-x /bin/ls
chmod a-x /bin/ls(a就是all所有的意思)

比如:chmod u+x,g-w,o= file(=就是空權限)
chmod o+r f1

[guoguo@centos7 data]$ll /etc/shadow
----------. 1 root root 1272 Dec 17 19:29 /etc/shadow
(權限都是----為啥root能看,因為root是老板特殊,你能管嗎,讀寫root不受控制,執行權限root還是受影響的)
(二進制的讀權限不是必須的,可以沒有)

文件的權限:
read(讀) r(確保文件是可讀的,根據文件,二進制程序不能隨便去改!)(針對文本)
write(寫)w(針對文本)
excute(執行)x(文本給執行沒有什麽意義)

文件屬性操作
chown 設置文件的所有者
chgrp 設置文件的屬組信息

.*(包括..這不就是跑路啊,跑根目錄了)--------------------------不能用rm

系統看權限的順序1、看是所有者嗎?不看後面了,
2、看是組裏的人嗎?後面不看了
3、看other

使用whatis可以查詢多個系統不同的屬性
[root@centos7 ~]#whatis passwd
passwd (1) - update user‘s authentication tokens
sslpasswd (1ssl) - compute password hashes
passwd (5) - password file
[root@centos7 ~]#man 5 passwd

guoguo:x:1000:1000:guoguo:/home/guoguo:/bin/bash
用戶名:密碼:UID:主組:

把passwd裏面比如用戶guoguo後面加上nologin那麽這個guoguo的用戶就不能登陸了

也就是說以後給進程給服務用的賬號都是nologin類型的

[root@centos7 ~]#cat /etc/shadow(放用戶口令的)
有兩個!!是鎖定不讓系統登陸
polkitd:!!:17856::::::

[root@centos7 ~]#cat /var/spool/mail/guoguo(可以看到我之前發的郵件)

[root@centos7 ~]#cat /etc/default/useradd

useradd defaults file

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@centos7 ~]#cat /etc/group(查看組)

[root@centos7 ~]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo)
id號 主組

[root@centos7 ~]#groups guoguo(這個命令是看屬於什麽組)
guoguo : guoguo
主組 附加組

10、從linux上傳到windows文件
[root@centos7 ~]#cd /data
[root@centos7 data]#touch linux.txt
[root@centos7 data]#cat > linux.txt(這種寫法可以往這個txt文件寫內容)
123
^C
[root@centos7 data]#cat linux.txt
123
[root@centos7 data]#sz
sz: need at least one file to send
Try `sz --help‘ for more information.
[root@centos7 data]#sz linux.txt(用這個sz加要傳的文件可以上傳到windows的管理員的下載的目錄)
rz(從windows下載文件到linux)
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring linux.txt...
100% 4 bytes 4 bytes/sec 00:00:01 0 Errors

11、[root@centos7 data]#hexxdump -c 文件(查看二進制)

12、[root@centos7 ~]#id(通過ID命令可以查詢組的ID)
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@centos7 ~]#id guoguo(uid是guoguo自己,gid是組的id)
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo)

13、[root@centos7 ~]# 用戶名:密碼:uid:主組:描述信息(可以使用chfn guoguo來添加描述):家目錄:

14、[root@centos7 ~]#cat /etc/shells(cat查看shell類型)
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

15、
[root@centos7 ~]#echo $SHELL
/bin/bash(查看自己的shell類型)

16、[root@centos7 ~]#chsh -s /bin/nologin(類型) guoguo(把guoguo的bash類型修改為nologin類型是系統的賬號不能登陸的)

17、[root@centos7 ~]#su -wang(切換賬號登陸用us)

18、[root@centos7 ~]#cat /etc/shadow(是存用戶密碼的)
guoguo:$6$iydIhmiHWFpOih2p$E4DflEwrAi9OO6VmUGXjlIIiTeyziOKrvbF5XIJ6PNOMgZz8qLs4U.14KaFgZHOZZUJsXXMNj83tDLHjOQVc3/::0:99999:7:::
$1加密算法是MD5,$6用的算法為sha512

MD5與sha1已經被破解

19、[root@centos7 ~]#authconfig --passalgo=sha256 --update(修改加密算法)

20、[root@centos7 ~]#openssl rand -base64 9(隨機命令)

21、[root@centos7 ~]#usermod -L guoguo(給guoguo這個文件加鎖)
[root@centos7 ~]#cat /etc/shadow(用這個命令查詢,是存用戶密碼的,guoguo前面有!的就是登陸被禁用了,但是用[root@centos7 ~]#su guoguo切換是沒有問題的)

22、[root@centos7 ~]#passwd guoguo(這個命令是修改guoguo的口令)

23、[root@centos7 ~]#passwd -e guoguo(強制讓用戶口令過期,這樣就可以重新登陸了)

24、[root@centos7 ~]#chage -l guoguo(查看口令參數)

25、[root@centos7 ~]#chage guoguo(修改guoguo口令有效期的參數)

26、[root@centos7 ~]#nano /etc/login.defs(修改配置文件是賬號配置文件固定設置的)

27、[root@centos7 ~]#useradd guoguoguo(創建一個新的叫guoguoguo的賬號)

28、ll /var/spool/mail(這裏存放的是各個賬號的郵件,當然用rm可以清空郵件)

29、ll etc/group(查看組)

30、cat /etc/default/useradd(創建組時的特性)

31、/etc/passwd /etc/shadow /etc/login.defs /etc/default/useradd /etc/skel/

32、修改一個人的用戶與權限要修改:/etc/passwd與/etc/shadow/還有家裏目錄的ll /home/

第四天標準IO和管道