用戶命令、權限、IO重定向、grep

/etc/passwd:
用戶名:密碼:UID:GID:註釋:家目錄:默認SHELL
/etc/group:
組名:密碼:GID:以此組爲其附加組的用戶列表
/etc/shadow:
用戶名:密碼:最近一次修改密碼的時間:最短使用期限:最長使用期限:警告時間:非活動時間:過期時間:
用戶管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
創建用戶:
useradd [options] USERNAME
-u UID:手動給用戶指定UID,默認用戶ID是不可重複的,所以這裏指定的UID一定是其他用戶尚未使用的ID號,而且要大於等於500
-g GID(基本組):無論是添加基本組還是附加組這個組必須得事先存在,才能指定和使用的,指定用戶基本組可以是組名或者GID都可以
-G GID,... (附加組):無論是添加基本組還是附加組這個組必須得事先存在,才能指定和使用的,指定用戶附加組可以是組名或者GID都可以,附加組可以是多個,指定多個附加組可以使用逗號隔開
-c "COMMENT":指定註釋信息,如果中間有空格可以用引號引起來
-d /path/to/directory:爲用戶指定家目錄,如果不指定默認在/home目錄下創建一個與用戶名相同的目錄作爲用戶的家目錄
-s SHELL(/bin/bash):指定用戶使用shell,指定shell的路徑,這個shell的路徑最好是出現在/etc/shells文件中的shell,這個文件指定了當前系統可用的安全shell
-m -k:如果用戶家目錄不存在就創建,強行給用戶創建家目錄,-k一般要跟-m一起使用,不使用-k也行,-k是把SKEL DIR(/etc/skel)中的所有文件,在創建家目錄以後,把這些文件複製到用戶的家目錄中,SKEL DIR是環境設置文件,是一些bash配置文件,也有可能是其他shell配置文件,如果沒有這些配置文件,在創建用戶以後在登錄用戶的時候,這些用戶的環境是不健全的不完整的,bash_logout .bash_profile .bashrc這三個文件都是bash用於用戶個人的環境配置文件,所以每創建一個用戶的時候,就算-m -k沒指定,它也會自動將這些文件複製過去的,只不過有時候可以強行指定必須得創建家目錄,而且給它複製skel文件
-M:不給用戶創建家目錄,就算/etc/login.defs設定用戶應該有家目錄,也不給他創建。
-r: 添加系統用戶,系統用戶是不會有家目錄,最好也不讓登錄,可以和選項-s一塊用指定shell爲/sbin/nologin
環境變量:
PATH:命令路徑
HISTSIZE:歷史命令緩存保存多少條
SHELL:用於保存用戶的默認shell
/etc/login.defs:
/etc/shells:指定了當前系統可用的安全shell
在創建用戶的時候如果沒有爲其指定組,將會創建一個跟用戶同名的基本組,而且一般UID和GID是保持一致的,如果出現特殊情況不保持一致,因爲剛好跟這個用戶ID號剛好相同的GID已經被其他用戶佔用了,可能就不會保持一致,但一般情況下對系統來說,爲了系統安全通常要求用戶和他的私有組ID號一般要跟用戶相同,不同的話被視爲特殊用戶了,這種用戶它的用戶名和組名或UID和GID不一致會在權限的設定上會有所不同

[root@Smoke ~]# useradd -u 1000 user1(創建用戶user1並指定UID爲1000)
[root@Smoke ~]# tail -n 1 /etc/passwd(顯示/etc/passwd文件最後一行,查看指定的user1用戶UID,-n指定只顯示文件最後一行,默認顯示10行)
user1:x:1000:1000::/home/user1:/bin/bash
[root@Smoke ~]# useradd -g hellosa user2(添加用戶user2並指定用戶基本組爲hellosa,由於hellosa組不存在,無法添加)
useradd: group 'hellosa' does not exist
[root@Smoke ~]# useradd -g mygroup user2(添加用戶user2並指定基本組爲mygroup,-g指定基本組)
[root@Smoke ~]# tail -n 1 /etc/passwd(顯示/etc/passwd文件最後一行,-n指定顯示1行,默認顯示10行)
user2:x:1001:515::/home/user2:/bin/bash
[root@Smoke ~]# useradd -G mygroup user3(創建用戶user3並添加附加組爲mygroup)
[root@Smoke ~]# tail -1 /etc/passwd(顯示passwd文件最後一行,-1顯示文件最後一行,默認顯示10行)
user3:x:1002:1002::/home/user3:/bin/bash
[root@Smoke ~]# tail /etc/group(顯示/group文件最後10行)
hadoop:x:502:
nfstest:x:510:
nagios:x:511:
puppet:x:493:
student:x:512:
vistor:x:513:
tom:x:514:
mygroup:x:515:user3(以此組爲附加組的用戶)
user1:x:1000:
user3:x:1002:
[root@Smoke ~]# useradd -c "Tony Blare" -d /home/blare user4(創建用戶user4,-c指定用戶的全名爲Tony Blare,-d指定用戶的家目錄爲/home/blare)
[root@Smoke ~]# tail -1 /etc/passwd(顯示passwd文件最後一行,-1顯示最後一行,默認顯示10行)
user4:x:1003:1003:Tony Blare(指定的註釋):/home/blare(指定的家目錄):/bin/bash
[root@Smoke ~]# useradd -s /sbin/nologin user5(添加用戶user5,並指定使用shell爲/sbnin/nologin,不讓登錄的shell)
[root@Smoke ~]# su - user5(切換到user5用戶無法登錄)
This account is currently not available.(當前用戶不可用)
[root@Smoke ~]# cat /etc/shells(查看系統可用的安全shell文件)
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[root@Smoke ~]# useradd -s /bin/tcsh user6(添加用戶user6並添加用戶使用shell爲tcsh)
[root@Smoke ~]# su - user6(切換user6用戶)
[user6@Smoke ~]$ echo $SHELL(顯示當前shell爲tcsh)
/bin/tcsh
[root@Smoke ~]# tail -1 /etc/passwd(線程passwd文件最後一行,-1顯示最後一行,默認顯示10行)
user6:x:1005:1005::/home/user6:/bin/tcsh(user6用戶的默認shell是tcsh)
[root@Smoke ~]# ls -a /etc/skel/(查看/etc/skel目錄文件及子目錄,.bash_logout  .bash_profile  .bashrc這三個文件都是bash用於用戶個人的環境配置文件,所以每創建一個用戶的時候,會自動將這些文件複製過去的)
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla
[root@Smoke ~]# cat /etc/login.defs(查看login.defs文件,裏面定義了用戶和組的一些默認配置參數)
PASS_MAX_DAYS        99999
PASS_MIN_DAYS        0(密碼最短使用期限)
PASS_MIN_LEN        5(最短長度)
PASS_WARN_AGE        7(警告時長)
UID_MIN                          500(用戶的ID號最小)
UID_MAX                        60000(用戶的ID號最大)
GID_MIN                          500(組ID號最小)
GID_MAX                        60000(組ID號最大)
CREATE_HOME        yes(默認創建用戶要不要給它創建家目錄)
UMASK           077(用戶家目錄權限)
USERGROUPS_ENAB yes(刪除用戶是否刪除它的私有組)
ENCRYPT_METHOD SHA512(用戶密碼使用什麼方式加密)
[root@Smoke ~]# useradd -M user7(創建user7,-M不創建家目錄)
[root@Smoke ~]# su - user7(切換到user7用戶,提示用戶沒有家目錄)
su: warning: cannot change directory to /home/user7: No such file or directory(給他指了家目錄,但是這個家目錄並不存在)
-bash-4.1$ pwd(沒有家目錄無法提供環境設定,所以命令提示符這樣)
/root
[root@Smoke ~]# useradd -r sysuser(添加sysuer爲系統用戶,-r系統用戶)
[root@Smoke ~]# tail -1 /etc/passwd(查看passwd文件最後一行,-1顯示最後一行,默認顯示10行)
sysuser:x:495:492::/home/sysuser:/bin/bash
[root@Smoke ~]# ls /home/(sysuser系統用戶不會有家目錄)
blare  hadoop  nagios  nfstest  Smoke  student  tom  user1  user3  user5  user6  vistor
[root@Smoke ~]# useradd -r sysuser2 -s /sbin/nologin(添加sysuser2並不允許登錄,-r系統用戶,-s指定shell爲/sbin/nologin)
[root@Smoke ~]# tail -n 1 /etc/passwd(查看passwd文件最後一行)
sysuser2:x:494:491::/home/sysuser2:/sbin/nologin

刪除用戶:
userdel:
userdel [option] USERNAME:如果在刪除用戶時候沒有指定任何選項,刪除用戶以後用戶的家目錄是不會被刪除的。
-r: 同時刪除用戶的家目錄
id:查看用戶的帳號屬性信息
id USER:顯示指定用戶的帳號屬性信息,不指定顯示當前用戶的帳號屬性信息。
-u:只看UID
-g:只看基本組GID
-G:顯示所有組GID
-n:name,顯示爲名稱,不顯示ID號
finger: 查看用戶帳號信息
finger USERNAME:檢索用戶信息的程序,還可以檢索遠程主機的用戶帳號信息

[root@Smoke ~]# id(查看當前用戶的帳號屬性信息)
uid=0(root) gid=0(root) groups=0(root)
[root@Smoke ~]# id user1(顯示user1帳號相關信息)
uid=1000(user1) gid=1000(user1) groups=1000(user1)
[root@Smoke ~]# id -g user1(查看有效阻GID)
1000
[root@Smoke ~]# id -G user1(查看所有組GID)
1000
[root@Smoke ~]# id -G(查看當前用戶所有組GID,包括附加組和基本組)
0
[root@Smoke ~]# id -u -n user1(顯示user1用戶的UID爲名稱,-u顯示UID,-n顯示爲名稱)
user1
[root@Smoke ~]# id -g -n user1(顯示用戶user1基本組的組名,-g顯示用戶基本組GID,-n顯示爲名稱)
user1
[root@Smoke ~]# finger user1(檢索user1用戶帳號信息)
Login: user1(登錄名稱)                                Name:(完整名稱)
Directory: /home/user1(家目錄)                      Shell: /bin/bash(默認shell)
Never logged in.(什麼時候曾經登錄過)
No mail.(郵箱)
No Plan.(自動任務計劃)
[root@Smoke ~]# userdel user1(刪除用戶user1)
[root@Smoke ~]# ls /home/(顯示/home目錄文件及子目錄,user1的家目錄默認沒有被刪除)
blare  hadoop  nagios  nfstest  Smoke  student  tom  user1  user2  user3  user5  user6  vistor
[root@Smoke ~]# userdel -r user2(刪除user2用戶,-r刪除用戶家目錄)
[root@Smoke ~]# ls /home/(user2的家目錄被刪除)
blare  hadoop  nagios  nfstest  Smoke  student  tom  user1  user3  user5  user6  vistor

修改用戶帳號屬性:
usermod
-u UID:修改用戶的UID
-g GID:修改用戶基本組,改的組應該是事先存在的組
-a -G GID:不使用-a選項,會覆蓋此前的附加組;使用-a爲用戶追加附加組
-c:指定註釋信息
-d -m:爲用戶指定新的家目錄,如果此前創建的用戶已經登錄過,而且曾經在裏面創建過很多文件,就意味着它的家目錄有新文件,而給它指定新的家目錄,它原來的家目錄下的文件,這個用戶就無法訪問了,要想讓用戶仍然能訪問它此前創建的文件,通過-d指定新的家目錄一併使用-m選項,會把用戶家目錄的文件移動到新的家目錄
-s:更改用戶的shell
-l:更改用戶的登錄名
-e:定義用戶的過期時間,什麼時候禁用,格式YYYY-MM-DD(年月日)
-f:指定非活動時間,密碼過期了,帳號還沒有禁用那段時間
-L:鎖定帳號
-U:解鎖帳號

[root@Smoke ~]# id user3(查看user3帳號屬性信息)
uid=1002(user3) gid=1002(user3) groups=1002(user3),515(mygroup)
[root@Smoke ~]# usermod -u 2002 user3(更改user3用戶的UID爲2002)
[root@Smoke ~]# id user3(查看user3帳號屬性信息,uid已更改爲2002)
uid=2002(user3) gid=1002(user3) groups=1002(user3),515(mygroup)

chsh: 修改用戶的默認shell
chfn:修改finger註釋信息

[root@Smoke ~]# finger user3(查看用戶user3用戶帳號信息,默認shell爲bash)
Login: user3                                  Name:
Directory: /home/user3                      Shell: /bin/bash
Never logged in.
No mail.
No Plan.
[root@Smoke ~]# chsh user3(更改用戶user3默認shell)
Changing shell for user3.
New shell [/bin/bash]: /bin/tcsh(更改爲tcsh)
Shell changed.
[root@Smoke ~]# finger user3(查看用戶user3用戶帳號信息,默認shell被改爲tcsh)
Login: user3                                  Name:
Directory: /home/user3                      Shell: /bin/tcsh
Never logged in.
No mail.
No Plan.
[root@Smoke ~]# chfn user3(更改user3的註釋信息)
Changing finger information for user3.
Name []: User3(完整名字)      
Office []: Beijing(辦公室地址)
Office Phone []: 110(辦公室電話)
Home Phone []: 119(家電話)
Finger information changed.
[root@Smoke ~]# finger user3(查看user3的帳號信息)
Login: user3                                  Name: User3
Directory: /home/user3                      Shell: /bin/tcsh
Office: Beijing, 110                        Home Phone: 119
Never logged in.
No mail.
No Plan.
[root@Smoke ~]# tail -n 1 /etc/passwd(顯示passwd文件最後一行,-n指定顯示行數,默認10行,查看用戶的註釋信息)
user3:x:2002:1002:User3,Beijing,110,119:/home/user3:/bin/tcsh

密碼管理:
passwd [USERNAME]:普通用戶只能通過passwd來改自己的密碼,管理員可以更改指定用戶的密碼
--stdin:從標準輸入讀取密碼,標準輸入鍵盤
-l:鎖定用戶
-u:解鎖用戶
-n:密碼最短使用期限
-x:密碼最長使用期限
-w:警告時間
-i:非活動時間
-d: 刪除用戶密碼
pwck:檢查用戶帳號完整性

[root@Smoke ~]# passwd user3(修改user3用戶密碼)
Changing password for user user3.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
[root@Smoke ~]# echo "smoke520" | passwd --stdin user3(把smoke520字符串當作密碼傳遞過去,--stdin通過標準輸入來接收字符串用於用戶密碼)
Changing password for user user3.
passwd: all authentication tokens updated successfully.
[root@Smoke ~]# tail /etc/shadow(顯示shadow文件組後10行)
nagios:!!:16211:0:99999:7:::
puppet:!!:16218::::::
student:$6$IwqC8.BE$8y8zjWuOWbfYxjqAEVfNmaOwVikAvXo4ww6oOGiZ.chfG/nzD.j8nEoteMN5RKc3HMDR3H2RLkSRxzgd1F1FT0:16221:0:99999:7:::
vistor:$6$wBAiXxmQ$2GR2UAQPjCDJt.c8qAY9tttLm/Rs0saFVTZssIhKd8V2U0WTHf2d/CwUm4QgnTKg5auk6UYtKroDtoQ8f7f5A0:16221:0:99999:7:::
tom:$6$cakI4EDz$ff/s0OG.dv5EOrqkYr4Mzwo8nj0bKhf1yjXM7XQsj6uNxeS3I0NRiIH7sfZeH5ymZ.IgOAh5pV5nwfr.t2/ri0:16227:0:99999:7:::
user3:$6$0WBAWiJG$OD1eupZlj3YR6EFP..O7kWt6L7p1Y1/CO7S0pnYLEO.52wzvv9p45YzCQK2Kywfzzaqg4Tq7hQpzaitnlLHI./:16228:0:99999:7:::
user4:!!:16228:0:99999:7:::
user5:!!:16228:0:99999:7:::
user6:!!:16228:0:99999:7:::
user7:!!:16228:0:99999:7:::
[root@Smoke ~]# passwd -d user3(刪除user3用戶密碼)
Removing password for user user3.
passwd: Success
[root@Smoke ~]# tail /etc/shadow(顯示shadow文件最後10行,user3密碼被清空)
nagios:!!:16211:0:99999:7:::
puppet:!!:16218::::::
student:$6$IwqC8.BE$8y8zjWuOWbfYxjqAEVfNmaOwVikAvXo4ww6oOGiZ.chfG/nzD.j8nEoteMN5RKc3HMDR3H2RLkSRxzgd1F1FT0:16221:0:99999:7:::
vistor:$6$wBAiXxmQ$2GR2UAQPjCDJt.c8qAY9tttLm/Rs0saFVTZssIhKd8V2U0WTHf2d/CwUm4QgnTKg5auk6UYtKroDtoQ8f7f5A0:16221:0:99999:7:::
tom:$6$cakI4EDz$ff/s0OG.dv5EOrqkYr4Mzwo8nj0bKhf1yjXM7XQsj6uNxeS3I0NRiIH7sfZeH5ymZ.IgOAh5pV5nwfr.t2/ri0:16227:0:99999:7:::
user3::16228:0:99999:7:::
user4:!!:16228:0:99999:7:::
user5:!!:16228:0:99999:7:::
user6:!!:16228:0:99999:7:::
user7:!!:16228:0:99999:7:::
[root@Smoke ~]# pwck(檢測用戶帳號完整性)
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'saslauth': directory '/var/empty/saslauth' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'user7': directory '/home/user7' does not exist
pwck: no changes

組管理:
創建組:groupadd
groupadd:添加組
-g GID:指定GID,不指定大於500的ID,而且是自上一個組ID加1
-r:添加爲系統組
groupmod:修改組屬性
-g GID:修改GID
-n GRPNAME:修改組名
groupdel:刪除組
gpasswd:爲組設定密碼
newgrp GRPNAME <--> exit:登錄一個新組,臨時切換用戶基本組爲另外一個組

[root@Smoke ~]# groupadd -r nginx(添加nginx爲系統組,-r系統組)
[root@Smoke ~]# tail -1 /etc/group(查看group文件最後一行,-1顯示最後一行,默認10行)
nginx:x:490:
[root@Smoke ~]# useradd hadoop(添加用戶hadoop)
[root@Smoke ~]# su - hadoop(切換到hadoop用戶)
[hadoop@Smoke ~]$ cd /tmp/(切換到/tmp目錄)
[hadoop@Smoke tmp]$ touch a.hadoop(創建a.hadoop文件)
[hadoop@Smoke tmp]$ ll a.hadoop(查看a.hadoop文件相信信息,屬主屬組是hadoop)
-rw-rw-r-- 1 hadoop hadoop 0 Jun  7 22:13 a.hadoop
[hadoop@Smoke tmp]$ id(查看用戶帳號屬性信息)
uid=502(hadoop) gid=502(hadoop) groups=502(hadoop)
[root@Smoke ~]# gpasswd mygroup(給mygroup組添加密碼)
Changing the password for group mygroup
New Password:
Re-enter new password:
[hadoop@Smoke tmp]$ newgrp mygroup(臨時切換當前用戶基本組爲另外一個組)
Password:
[hadoop@Smoke tmp]$ id(查看用戶帳號屬性信息)
uid=502(hadoop) gid=515(mygroup) groups=502(hadoop),515(mygroup)
[hadoop@Smoke tmp]$ touch b.hadoop(創建b.hadoop文件)
[hadoop@Smoke tmp]$ ll b.hadoop(查看b.hadoop文件詳細信息,屬主爲hadoop,屬組爲mygroup)
-rw-r--r-- 1 hadoop mygroup 0 Jun  7 22:21 b.hadoop
[hadoop@Smoke tmp]$ exit(退出)
exit
[hadoop@Smoke tmp]$ id(查看用戶帳號屬性信息)
uid=502(hadoop) gid=502(hadoop) groups=502(hadoop)

練習:
1、創建一個用戶mandriva,其ID號爲2002,基本組爲distro(組ID爲3003),附加組爲linux;

# groupadd -g 3003 distro
# groupadd linux
# useradd -u 2002 -g distro -G linux mandriva

2、創建一個用戶fedora,其全名爲Fedora Community,默認shell爲tcsh;
# useradd -c "Fedora Community" -s /bin/tcsh fedora
3、修改mandriva的ID號爲4004,基本組爲linux,附加組爲distro和fedora;
# usermod -u 4004 -g linux -G distro,fedora mandriva
4、給fedora加密碼,並設定其密碼最短使用期限爲2天,最長爲50天;
# passwd -n 2 -x 50 fedora
5、將mandriva的默認shell改爲/bin/bash;
usermod -s /bin/bash mandirva
6、添加系統用戶hbase,且不允許其登錄系統;
# useradd -r -s /sbin/nologin hbase
chage:改密用戶密碼過期信息
-d: 最近一次的修改時間,YYYY-MM-DD年月日
-E: 過期時間
-I:非活動時間
-m: 最短使用期限
-M: 最長使用期限
-W: 警告時間

權限管理:
r:可讀,對於文件可以使用查看命令查看文件內容,對於目錄可以使用ls命令,但是不能切換到此目錄,也不能使用ls -l
w:可寫,對文件而言可以編輯這個文件,對於目錄指的是可以在此目錄創建文件
x:可執行,對文件而言可以執行,可以把它提交給內核由內核判斷其運行方式,並且將其運行起來,或者說爲其啓動新的進程,對於目錄來說可以對其使用cd或ls -l命令,來查看裏面每個文件相信屬性信息
三類用戶:
u: 屬主
g: 屬組
o: 其它用戶
修改屬主:
chown: 改變文件屬主(只有管理員可以使用此命令)
# chown USERNAME file,...
-R: 修改目錄及其內部文件的屬主
--reference=/path/to/somefile file,...:reference引用參考,把指定文件的信息修改爲跟reference路徑的文件信息一樣

[root@Smoke ~]# chown hadoop /tmp/abc(改變abc文件的屬主爲hadoop)
[root@Smoke ~]# ls -l /tmp/abc(查看abc文件詳細信息,屬主改變爲hadoop)
-rw-r--r-- 1 hadoop root 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chown hadoop /tmp/hi(更改hi目錄屬主爲hadoop)
[root@Smoke ~]# ls -ld /tmp/hi/(查看hi目錄本身屬主,-l詳細信息,-d目錄本身,屬主爲hadoop)
drwxr-xr-x 2 hadoop root 4096 Jun  4 10:35 /tmp/hi/
[root@Smoke ~]# ls -l /tmp/hi/(目錄中的文件屬主沒有改變)
total 424
-rwxr-xr-x 1 root root  1288 Jun  4 10:35 abrt-ccpp
-rwxr-xr-x 1 root root  1628 Jun  4 10:35 abrtd
-rwxr-xr-x 1 root root  1642 Jun  4 10:35 abrt-oops
-rwxr-xr-x 1 root root  1725 Jun  4 10:35 acpid
-rwxr-xr-x 1 root root  2062 Jun  4 10:35 atd
-rwxr-xr-x 1 root root  3378 Jun  4 10:35 auditd
[root@Smoke ~]# chown -R hadoop /tmp/hi/(更改hadoop目錄及其內部文件屬主爲hadoop,-R遞歸)
[root@Smoke ~]# ls -l /tmp/hi/(查看hi目錄下的文件,屬主都改爲hadoop)
total 424
-rwxr-xr-x 1 hadoop root  1288 Jun  4 10:35 abrt-ccpp
-rwxr-xr-x 1 hadoop root  1628 Jun  4 10:35 abrtd
-rwxr-xr-x 1 hadoop root  1642 Jun  4 10:35 abrt-oops
-rwxr-xr-x 1 hadoop root  1725 Jun  4 10:35 acpid
-rwxr-xr-x 1 hadoop root  2062 Jun  4 10:35 atd
-rwxr-xr-x 1 hadoop root  3378 Jun  4 10:35 auditd
[root@Smoke ~]# ls -l /tmp/(查看/tmp目錄下文件及子目錄)
-rw-r--r--  1 hadoop  root      884 Jun  4 10:25 abc
-rw-r--r--  1 root    root        0 Jun  8 00:20 test
[root@Smoke ~]# chown --reference=/tmp/abc /tmp/test(更改test文件的信息和abc信息一樣)
-rw-r--r--  1 hadoop  root      884 Jun  4 10:25 abc
-rw-r--r--  1 hadoop  root        0 Jun  8 00:20 test

修改屬組:
# chgrp GRPNAME file,...改變文件屬組(只有管理員可以使用此命令)
-R:修改目錄及其內部文件的屬組
--reference=/path/to/somefile file,...reference引用參考,把指定文件的信息修改爲跟reference路徑的文件信息一樣

[root@Smoke ~]# chgrp mygroup /tmp/abc(更改abc的屬組爲mygroup)
[root@Smoke ~]# ls -l /tmp/abc(查看abc文件詳細信息,屬組改爲mygroup)
-rw-r--r-- 1 hadoop mygroup 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chgrp -R mygroup /tmp/hi/(更改hi目錄及其內部文件的屬組爲mygroup,-R遞歸)
[root@Smoke ~]# ls -ld /tmp/hi/(查看hi目錄本身信息,-l詳細信息,-d目錄本身)
drwxr-xr-x 2 hadoop mygroup 4096 Jun  4 10:35 /tmp/hi/
[root@Smoke ~]# ls -l /tmp/hi/(查看hi目錄下文件及子目錄詳細信息,屬組已經改爲mygroup,-l詳細信息)
total 424
-rwxr-xr-x 1 hadoop mygroup  1288 Jun  4 10:35 abrt-ccpp
-rwxr-xr-x 1 hadoop mygroup  1628 Jun  4 10:35 abrtd
-rwxr-xr-x 1 hadoop mygroup  1642 Jun  4 10:35 abrt-oops
-rwxr-xr-x 1 hadoop mygroup  1725 Jun  4 10:35 acpid
-rwxr-xr-x 1 hadoop mygroup  2062 Jun  4 10:35 atd
-rwxr-xr-x 1 hadoop mygroup  3378 Jun  4 10:35 auditd
-rwxr-xr-x 1 hadoop mygroup  4043 Jun  4 10:35 autofs

同時更改屬主屬組:
chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...

[root@Smoke ~]# chown root:root /tmp/abc(更改abc文件的屬主屬組爲abc)
[root@Smoke ~]# ll /tmp/abc
-rw-r--r-- 1 root root 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chown :hadoop /tmp/abc(更改abc文件屬組爲hadoop)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息,屬組被改爲hadoop)
-rw-r--r-- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# ll /tmp/test(查看test文件詳細信息)
-rw-r--r-- 1 hadoop root 0 Jun  8 00:20 /tmp/test
[root@Smoke ~]# chown --reference=/tmp/abc /tmp/test(將test文件的信息更改爲跟abc一樣)
[root@Smoke ~]# ll /tmp/test(查看test文件詳細信息,test文件屬主屬組都被更改)
-rw-r--r-- 1 root hadoop 0 Jun  8 00:20 /tmp/test

修改文件權限:
chmod: 修改文件的權限
修改三類用戶的權限:
chmod MODE file,...
-R:修改目錄及其內部文件的屬組,遞歸修改
--reference=/path/to/somefile file,...:引用參考,把指定文件的信息修改爲跟reference路徑的文件信息一樣
rwxr-x---:八進制表示權限爲750,如果寫成75表示075,如果寫成5表示005。
修改某類用戶或某些類用戶權限:
u,g,o,a(所有)
chmod 用戶類別=MODE file,...
修改某類用戶的某位或某些位權限:
u,g,o,a
chmod 用戶類別+|-MODE file,...

[root@Smoke ~]# ls -l /tmp/abc(查看abc文件詳細信息)
-rw-r--r-- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod 750 /tmp/abc(更改abc權限爲750)
[root@Smoke ~]# ls -l /tmp/abc(查看abc文件詳細信息)
-rwxr-x--- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod 75 /tmp/abc(更改abc權限爲075)
[root@Smoke ~]# ls -l /tmp/abc(查看abc文件詳細信息)
----rwxr-x 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod 5 /tmp/abc(更改abc權限爲005)
[root@Smoke ~]# ls -l /tmp/abc(查看abc文件詳細信息)
-------r-x 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# ll /tmp/(查看/tmp目錄下文件及子目錄)
-------r-x  1 root    hadoop    884 Jun  4 10:25 abc
-rw-r--r--  1 root    hadoop      0 Jun  8 00:20 test
[root@Smoke ~]# chmod --reference=/tmp/test /tmp/abc(將abc文件的權限改爲跟test一樣)
[root@Smoke ~]# ll /tmp/(查看/tmp目錄及子目錄詳細信息)
-rw-r--r--  1 root    hadoop      0 Jun  8 00:20 test
-rw-r--r--  1 root    hadoop    884 Jun  4 10:25 abc
[root@Smoke ~]# chmod u=rwx /tmp/abc(更改abc文件屬主爲讀寫執行)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxr--r-- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod g=rw- /tmp/abc(更改abc屬組權限爲讀寫,-可以不寫)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxrw-r-- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod o=rx /tmp/abc(更改其他用戶爲讀執行)
[root@Smoke ~]# chmod g=r,o=r /tmp/abc(更改屬組爲只讀,其他爲只讀)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxr--r-- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod go=rw /tmp/abc(將屬組和其他都改爲讀寫)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxrw-rw- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod g=rx,o= /tmp/abc(更改屬組爲rx,其他沒有任何權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxr-x--- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod u-x /tmp/abc(去掉屬主的執行權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rw-r-x--- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod u+x,g-x /tmp/abc(屬主添加執行權限,屬組去掉執行權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxr----- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod u-x /tmp/abc(去掉屬主的執行權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rw-r----- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod a+x /tmp/abc(所有都加上執行權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rwxr-x--x 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod -x /tmp/abc(所有都減掉執行權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-rw-r----- 1 root hadoop 884 Jun  4 10:25 /tmp/abc
[root@Smoke ~]# chmod u-wx /tmp/abc(屬主去掉寫和執行權限)
[root@Smoke ~]# ll /tmp/abc(查看abc文件詳細信息)
-r--r----- 1 root hadoop 884 Jun  4 10:25 /tmp/abc

練習:
1、新建一個沒有家目錄的用戶openstack;
# useradd -M openstack
2、複製/etc/skel爲/home/openstack;
# cp -r /etc/skel /home/openstack
3、改變/home/openstack及其內部文件的屬主屬組均爲openstack;
# chown -R openstack:openstack /home/openstack
4、/home/openstack及其內部的文件,屬組和其它用戶沒有任何訪問權限
# chmod -R go= /home/openstack

[root@Smoke ~]# useradd -M openstack(添加openstack,-M不指定用戶家目錄)
[root@Smoke ~]# finger openstack(查看openstack註釋信息)
Login: openstack                              Name:
Directory: /home/openstack                  Shell: /bin/bash
Never logged in.
No mail.
No Plan.
[root@Smoke ~]# ls /home/(查看openstack是否有家目錄)
blare  hadoop  nagios  nfstest  Smoke  student  tom  user1  user3  user5  user6  user8  vistor
[root@Smoke ~]# id openstack(查看openstack用戶信息)
uid=2004(openstack) gid=2004(openstack) groups=2004(openstack)
[root@Smoke ~]# cp -r /etc/skel/ /home/openstack(拷貝skel目錄及子目錄文件到/home並重命名爲openstack,-r遞歸)
[root@Smoke ~]# ls -ld /home/openstack/(查看openstack目錄權限,-l詳細信息,-d目錄本身)
drwxr-xr-x 4 root root 4096 Jun  8 01:42 /home/openstack/
[root@Smoke ~]# ls -la /home/openstack/(查看openstack目錄下文件及子目錄向信息信息,-l詳細信息,-a所有文件,包含隱藏文件)
total 28
drwxr-xr-x   4 root root 4096 Jun  8 01:42 .
drwxr-xr-x. 16 root root 4096 Jun  8 01:42 ..
-rw-r--r--   1 root root   18 Jun  8 01:42 .bash_logout
-rw-r--r--   1 root root  176 Jun  8 01:42 .bash_profile
-rw-r--r--   1 root root  124 Jun  8 01:42 .bashrc
drwxr-xr-x   2 root root 4096 Jun  8 01:42 .gnome2
drwxr-xr-x   4 root root 4096 Jun  8 01:42 .mozilla
[root@Smoke ~]# chown -R openstack.openstack /home/openstack/(更改openstack目錄及子目錄文件屬主屬組爲openstack,-R遞歸)
[root@Smoke ~]# ls -ld /home/openstack/(查看openstack目錄本身,-l詳細信息,-d目錄本身)
drwxr-xr-x 4 openstack openstack 4096 Jun  8 01:42 /home/openstack/
[root@Smoke ~]# ls -la /home/openstack/(查看openstack目錄下文件及子目錄詳細信息,-l詳細信息,-a所有文件)
total 28
drwxr-xr-x   4 openstack openstack 4096 Jun  8 01:42 .
drwxr-xr-x. 16 root      root      4096 Jun  8 01:42 ..
-rw-r--r--   1 openstack openstack   18 Jun  8 01:42 .bash_logout
-rw-r--r--   1 openstack openstack  176 Jun  8 01:42 .bash_profile
-rw-r--r--   1 openstack openstack  124 Jun  8 01:42 .bashrc
drwxr-xr-x   2 openstack openstack 4096 Jun  8 01:42 .gnome2
drwxr-xr-x   4 openstack openstack 4096 Jun  8 01:42 .mozilla
[root@Smoke ~]# chmod -R go= /home/openstack/(更改openstack目錄及子目錄文件,屬組及其他權限爲沒有)
[root@Smoke ~]# ls -ld /home/openstack/(查看openstack目錄信息,-l詳細信息,-d目錄本身)
drwx------ 4 openstack openstack 4096 Jun  8 01:42 /home/openstack/
[root@Smoke ~]# ls -la /home/openstack/(查看openstack目錄及子目錄文件詳細信息,-l詳細信息,-a所有文件)
total 28
drwx------   4 openstack openstack 4096 Jun  8 01:42 .
drwxr-xr-x. 16 root      root      4096 Jun  8 01:42 ..
-rw-------   1 openstack openstack   18 Jun  8 01:42 .bash_logout
-rw-------   1 openstack openstack  176 Jun  8 01:42 .bash_profile
-rw-------   1 openstack openstack  124 Jun  8 01:42 .bashrc
drwx------   2 openstack openstack 4096 Jun  8 01:42 .gnome2
drwx------   4 openstack openstack 4096 Jun  8 01:42 .mozilla
[root@Smoke ~]# su - openstack(切換到oepnstack,用戶正常登錄並有了家目錄)
[openstack@Smoke ~]$
[root@Smoke ~]# ls -l /etc/shadow(shadown文件權限爲000,redhat5.x爲400)
---------- 1 root root 1907 Jun  8 01:40 /etc/shadow

注意:shadown文件權限爲000,redhat5.x爲400,密碼信息比較敏感不允許其他任何人查看,但是使用passwd修改的時候更改的密碼要保存到這個文件裏面,不是沒有寫權限,其實無論怎麼設定權限對管理員是無效的,就算改爲不能讀不能寫,管理員也可以使用chmod改爲讀寫,普通用戶使用passwd也可以更改自己的密碼,普通用戶修改的密碼依然會保存到這個文件裏面,但是普通用戶沒有任何權限,普通用戶來訪問passwd命令,命令啓動起來就是個進程,這個進程代表身份就是普通用戶身份,而普通用戶來訪問這個文件時候即不是屬主又不是屬組,它還不是管理員,而只能是其他用戶,而其他用戶沒有任何權限,如何將密碼保存到此文件中?

[root@Smoke ~]# ls -l $(which passwd)(使用命令替換將which passwd執行結果輸入給ls命令執行)
-rwsr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd
注意:passwd命令權限很獨特,屬主的權限是個s,就是這個s的存在才使得普通用戶也照樣也能夠改密碼。
[root@Smoke ~]# nano /etc/shadow(編輯shadow文件)
hello
[root@Smoke ~]# tail /etc/shadow(查看編輯的內容)
user3::16228:0:99999:7:::
user4:!!:16228:0:99999:7:::
user5:!!:16228:0:99999:7:::
user6:!!:16228:0:99999:7:::
user7:!!:16228:0:99999:7:::
sysuser:!!:16228::::::
sysuser2:!!:16228::::::
user8:!!:16228:0:99999:7:::
openstack:!!:16228:0:99999:7:::
hello

結果:所以管理員可以正常編輯shadow文件。
手動添加用戶:
手動添加用戶hive, 基本組爲hive (5000),附加組爲mygroup

[root@Smoke ~]# nano /etc/group(編輯組文件)
mygroup:x:515:user3,user6,hive
hive:x:5000:
[root@Smoke ~]# nano /etc/passwd(編輯passwd文件)
hive:x:5000:5000:Hive:/home/hive:/bin/bash
[root@Smoke ~]# date +%s
1402164923
[root@Smoke ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1402164923/86400
16228
quit
[root@Smoke ~]# nano /etc/shadow
hive:!!:16228:0:99999:7:::
[root@Smoke ~]# cp -r /etc/skel/ /home/hive
[root@Smoke ~]# chown -R hive.hive /home/hive/
[root@Smoke ~]# chmod -R go= /home/hive/
[root@Smoke ~]# ls -ld /home/hive/
drwx------ 4 hive hive 4096 Jun  8 02:22 /home/hive/
[root@Smoke ~]# ls -la /home/hive/
total 28
drwx------   4 hive hive 4096 Jun  8 02:22 .
drwxr-xr-x. 17 root root 4096 Jun  8 02:22 ..
-rw-------   1 hive hive   18 Jun  8 02:22 .bash_logout
-rw-------   1 hive hive  176 Jun  8 02:22 .bash_profile
-rw-------   1 hive hive  124 Jun  8 02:22 .bashrc
drwx------   2 hive hive 4096 Jun  8 02:22 .gnome2
drwx------   4 hive hive 4096 Jun  8 02:22 .mozilla
[root@Smoke ~]# su - hive(切換到hive用戶)
[hive@Smoke ~]$ id(查看當前用戶帳號信息)
uid=5000(hive) gid=5000(hive) groups=5000(hive),515(mygroup)
由於/etc/shadow文件中hive用戶的帳號是鎖定!!,沒有設置密碼,無法正常登錄,所以需要生成密碼
[hive@Smoke ~]$ openssl passwd(opensll生成密碼,輸入兩次密碼,生成字符串)
Password:
Verifying - Password:
ckc6yx6DwmL6.

但是這裏沒有往密碼中加鹽,因爲/etc/shadow文件中的用戶密碼都加入調味鹽,讓其不同相同密碼用戶不會導致字符串一樣。

[hive@Smoke ~]$ whatis passwd
passwd               (1)  - update user's authentication tokens
passwd               (5)  - password file
passwd [sslpasswd]   (1ssl)  - compute password hashes
[hive@Smoke ~]$ man sslpasswd
passwd - compute password hashes
-1:指定加密算法,1是md5。
-salt string:指定鹽,雜質。
[hive@Smoke ~]$ openssl passwd -1 -salt '12345678'(openssl生成密碼串,-1代表md5,-salt加入8位字符)
Password:
$1$12345678$1X.khkQVJbTq3.0kwYfM40
[root@Smoke ~]# nano /etc/shadow
hive:$1$12345678$1X.khkQVJbTq3.0kwYfM40:16228:0:99999:7:::

測試:通過在Xshell新建新的會話,通過帳號hive密碼smoke520登錄系統,能夠正常登錄,手動添加用戶測試正常。
bc使用方法:

[root@Smoke ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1*2
2
3/5
0(注意:沒有小數位,沒有保留精度,只是是圓整的,圓整就是把小數東西直接去了)
scale=2(指定保留兩位精度)
3/5
.60
quit
默認權限:

管理員:
文件默認權限:644
目錄默認權限:755
普通用戶:
文件默認權限:664
目錄默認權限:775
linux內在法則文件默認都沒有執行權限,
umask:遮罩碼,用戶創建文件或目錄用到的遮罩碼

# umask(查看當前用戶遮罩碼)
# umask 022(設定遮罩碼)

666-umask:創建文件使用666減去遮罩碼
777-umask:創建目錄使用777減去遮罩碼
管理員遮罩碼是022
創建文件權限爲:644
創建目錄權限爲:755
普通用戶遮罩碼是002創建文件權限爲:664
創建目錄權限爲:775
普通用戶umask: 023
文件:666-023=643 X(文件有執行權限)
目錄:777-023=754
注意:文件默認不能具有執行權限,如果算得的結果中有執行權限,則將其權限加1;

[root@Smoke ~]# cd /tmp/(切換到/tmp目錄)
[root@Smoke tmp]# touch hellosa(創建hellosa文件)
[root@Smoke tmp]# ls -l hellosa(查看hellosa文件詳細信息)
-rw-r--r-- 1 root root 0 Jun  8 16:26 hellosa[root@Smoke tmp]# mkdir testdir(創建testdir目錄)
[root@Smoke tmp]# ls -ld testdir/(查看testdir目錄詳細信息,-l詳細信息,-d目錄本身)
drwxr-xr-x 2 root root 4096 Jun  8 16:28 testdir/

普通用戶:

[hive@Smoke ~]$ touch test
[hive@Smoke ~]$ mkdir testdir
[hive@Smoke ~]$ ls -l
total 4
-rw-rw-r-- 1 hive hive    0 Jun  8 16:30 test
drwxrwxr-x 2 hive hive 4096 Jun  8 16:30 testdir
[root@Smoke ~]# umask(管理員的遮罩碼是022)
0022
[hive@Smoke ~]$ umask(普通用戶的遮罩碼是002)
0002
[hive@Smoke ~]$ umask 022(設置普通用戶hive的遮罩碼爲022)
[hive@Smoke ~]$ umask(查看用戶遮罩碼)
0022
[hive@Smoke ~]$ touch hello(創建hello文件)
[hive@Smoke ~]$ mkdir hellosa(創建目錄hellosa)
[hive@Smoke ~]$ ll(查看創建的hello文件全爲644,hellosa目錄爲755)
total 8
-rw-r--r-- 1 hive hive    0 Jun  8 16:40 hello
drwxr-xr-x 2 hive hive 4096 Jun  8 16:40 hellosa
-rw-rw-r-- 1 hive hive    0 Jun  8 16:30 test
drwxrwxr-x 2 hive hive 4096 Jun  8 16:30 testdir
[hive@Smoke ~]$ rm -rf ./*(刪除當前目錄下所有文件,-r刪除目錄及目錄下文件,-f強制刪除)
[hive@Smoke ~]$ touch abc(創建文件abc)
[hive@Smoke ~]$ mkdir dir(創建dir目錄)
[hive@Smoke ~]$ ll(查看當前目錄文件詳細信息,abc權限爲644,目錄權限爲754,文件和算的權限不一樣)
total 4
-rw-r--r-- 1 hive hive    0 Jun  8 16:46 abc
drwxr-xr-- 2 hive hive 4096 Jun  8 16:46 dir
[hive@Smoke ~]$ umask 027(設置遮罩碼爲027)
[hive@Smoke ~]$ umask(查看遮罩碼)
0027
[hive@Smoke ~]$ touch hello(創建文件hello)
[hive@Smoke ~]$ mkdir hellodir(創建hellodir目錄)
[hive@Smoke ~]$ ll(查看當前目錄文件子目錄詳細信息, hello權限爲640,hellodir權限爲750)
total 8
-rw-r--r-- 1 hive hive    0 Jun  8 16:46 abc
drwxr-xr-- 2 hive hive 4096 Jun  8 16:46 dir
-rw-r----- 1 hive hive    0 Jun  8 16:52 hello
drwxr-x--- 2 hive hive 4096 Jun  8 16:53 hellodir
[hive@Smoke ~]$ logout

重新使用終端通過用戶名加密碼登錄hive用戶

[hive@Smoke ~]$ umask(查看遮罩碼又變爲002)
0002

站在用戶登錄的角度來說,SHELL的類型:
登錄式shell:
正常通常某終端登錄
su - USERNAME
su -l USERNAME
非登錄式shell:
su USERNAME
圖形終端下打開命令窗口
自動執行的shell腳本
bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/.sh, /etc/bashrc
個人配置
~/.bash_profile, ~/.bashrc
profile類的文件:
設定環境變量
運行命令或腳本
bashrc類的文件:
設定本地變量
定義命令別名
設置環境變量想對所有用戶生效放到/etc/profile或在/etc/profile.d/下建立一個以.sh結尾的文件,在裏面定義,如果只想對當前用戶生效編輯自己家目錄下的~/.bash_profile文件,所以放到個人配置裏面只對當前用戶生效,放到全局對所有用戶都生效,如果兩個文件裏面都有,一個環境變量在全局也定義了,在個人配置也定義了,而且結果還不一樣,以個人配置的爲準,作用範圍越小的越是最終生效的。
登錄式shell,配置文件及次序:
/etc/profile --> /etc/profile.d/
.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登錄式shell:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
profile: 定義環境變量、運行程序或腳本
bashrc:定義本地變量、命令別名

[hive@Smoke ~]$ alias cls=clear(定義clear命名別名爲cls)
[hive@Smoke ~]$ cls(可以使用)
[hive@Smoke ~]$ logout
重新使用終端通過用戶名加密碼登錄hive用戶
[hive@Smoke ~]$ cls(定義的cls別名不能使用)
-bash: cls: command not found

總結:不能生效,不能跨shell生效,要想生效編輯~/.bashrc文件[hive@Smoke ~]$ nano .bashrc(編輯個人配置文件bashrc添加需要定義的命令別名)

# .bashrc
# Source global definitions

if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias cls='clear'

[hive@Smoke ~]$ cls(不能用)
-bash: cls: command not found.
原因:shell讀取配置文件在執行那一刻讀取,現在已經執行好了,因此現在編輯也無效,只能對下次登錄有效
[hive@Smoke ~]$ logout(退出)

重新使用終端通過用戶名加密碼登錄hive用戶

[hive@Smoke ~]$ cls(可以使用)
[hive@Smoke ~]$ nano .bash_profile(編輯bash_profile文件,定義命令腳本)
echo "Hello, hive. Welcome to our system. It is `date`."
[hive@Smoke ~]$ logout(退出)

重新使用終端通過用戶名加密碼登錄hive用戶

Connecting to 172.16.100.1:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Jun  8 17:33:01 2014 from 172.16.100.254
Hello, hive. Welcome to our system. It is Sun Jun  8 17:41:31 CST 2014.

定義umask對當前用戶生效:

[hive@Smoke ~]$ nano .bash_profile
umask 027
[hive@Smoke ~]$ logout(退出)

重新使用終端通過用戶名加密碼登錄hive用戶

[hive@Smoke ~]$ umask(查看遮罩碼爲027,永久有效)
0027

爲什麼默認是002:

[hive@Smoke ~]$ cat /etc/bashrc
   if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then(解釋:如果用戶UDI大於199並且GID和UID一樣,那麼用戶的umask是002)
      umask 002
   else(否則umask爲022)
      umask 022
   fi
[hive@Smoke ~]$ id(查看用戶帳號信息)
uid=5000(hive) gid=5000(hive) groups=5000(hive),515(mygroup)

結果:hive用戶的uid>199,並且uid和gid一樣,所以默認umask是002
bash:腳本解釋器

計算機五大部件:
運算器、控制器: CPU
存儲器:RAM
輸入設備/輸出設備
程序:是由指令和數據組成
控制器:讀取指令,並在指令控制下去讀取要進行的運算包括數據和要執行的計算,控制器會控制告訴我們運算器到那去取數據,把數據取過來以後,運算器開始做運算,運算的結果由控制器的控制下輸出到存儲器當中
運算器:整個運算過程由運算器完成
存儲器:
地址總線:內存尋址
數據總線:傳輸數據
控制總結:控制指令
寄存器:CPU暫時存儲器
I/O: 硬盤,鍵盤/鼠標
程序
INPUT設備:輸入設備
OUTPUT設備:輸出設備
系統設定
默認輸出設備:標準輸出,STDOUT, 1
默認輸入設備:標準輸入, STDIN, 0
標準錯誤輸出:STDERR, 2
標準輸入:鍵盤
標準輸出和錯誤輸出:顯示器
I/O重定向:本來輸入設備是鍵盤,但是改成了別的,就是輸入設備重定向,輸出也可以重定向,錯誤輸出也能重定向,改變了輸入來源或輸出來源的
Linux:

: 覆蓋輸出,原有的內容會被覆蓋

:追加輸出,保留此前文件原有內容
set -C: 禁止對已經存在文件使用覆蓋重定向;
強制覆蓋輸出,則使用 >|
set +C: 關閉上述功能
2>: 重定向錯誤輸出
2>>: 追加方式
標準輸出和標準錯誤輸出屬於不同的數據流
ls /var/ > /tmp/var3.out 2> /tmp/err.out:將ls執行結果標準輸出重定向到var3.out,標準錯誤輸出重定向到err.out
&>: 重定向標準輸出或錯誤輸出至同一個文件
<:輸入重定向
<<:Here Document在此處生成文檔
cat << END/EOF(END OF FILE):END/EOF結束符
cat >> /tmp/myfile.txt << EOF:將cat的內容追加輸出到myfile.txt,<< EOF生成文檔
管道:前一個命令的輸出,作爲後一個命令的輸入
命令1 | 命令2 | 命令3 | ...
tee:從標準輸入讀取數據,並且發送至標準輸出和文件,可以實現將一個數據即保存到文件中又能夠輸出到顯示器


[hive@Smoke ~]$ ls /var/(查看/var目錄下的文件及子目錄)
account  crash  db     ftp      games  lib    lock  mail  opt       run    tmp  yp
cache    cvs    empty  ftproot  gdm    local  log   nis   preserve  spool  www
[hive@Smoke ~]$ ls /var/ &gt; /tmp/var.out(將ls執行結果輸出重定向到var.out文件)
[hive@Smoke ~]$ cat /tmp/var.out(查看var.out)
account
cache
crash
cvs
db
empty
ftp
ftproot
games
gdm
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
www
yp
[hive@Smoke ~]$ cat /etc/fstab
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 /                       ext4    defaults        1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot                   ext4    defaults        1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[hive@Smoke ~]$ cat /etc/fstab &gt; /tmp/var.out(將cat執行結果輸出到var.out文件)
[hive@Smoke ~]$ cat /tmp/var.out(查看var.out)

#

/etc/fstab

Created by anaconda on Mon Apr 14 08:18:01 2014

#

Accessible filesystems, by reference, are maintained under '/dev/disk'

See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[hive@Smoke ~]$ ls /var >> /tmp/var.out(將ls執行結果追加到var.out文件)
[hive@Smoke ~]$ cat /tmp/var.out(查看var.out文件)
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
account
cache
crash
cvs
db
empty
ftp
ftproot
games
gdm
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
www
yp
[hive@Smoke ~]$ set -C(打開禁止對已經存在文件使用覆蓋重定向)
[hive@Smoke ~]$ ls /usr > /tmp/var.out(將ls執行結果覆蓋輸出到var.out)
-bash: /tmp/var.out: cannot overwrite existing file(不允許覆蓋已經存在的文件)
[hive@Smoke ~]$ set +C(關閉進制對已經存在文件使用覆蓋重定向)
[hive@Smoke ~]$ ls /usr/ > /tmp/var.out(將ls執行結果覆蓋輸出到var.out)
[hive@Smoke ~]$ set -C(打開禁止對已經存在文件使用覆蓋重定向)
[hive@Smoke ~]$ ls /usr/ > /tmp/var.out(將ls執行結果覆蓋輸出到var.out)
-bash: /tmp/var.out: cannot overwrite existing file(不允許覆蓋已經存在的文件)
[hive@Smoke ~]$ ls /usr/ >| /tmp/var.out(將ls執行結果強制覆蓋輸出到var.out)
[hive@Smoke ~]$ set +C(關閉進制對已經存在文件使用覆蓋重定向)
[hive@Smoke ~]$ ls /varr > /tmp/var2.out(將ls執行結果輸出到var2.out,var寫錯成varr,無法標準輸出重定向)
ls: cannot access /varr: No such file or directory
[hive@Smoke ~]$ ls /varr 2> /tmp/var2.out(將ls錯誤執行結果輸出到var2.out)
[hive@Smoke ~]$ cat /tmp/var2.out(查看var2.out文件)
ls: cannot access /varr: No such file or directory
[hive@Smoke ~]$ ls /varr > /tmp/var3.out 2> /tmp/err.out(將ls執行結果標準輸出重定向到var3.out,標準錯誤輸出重定向到err.out)
[hive@Smoke ~]$ cat /tmp/err.out(查看err.out文件)
ls: cannot access /varr: No such file or directory
[hive@Smoke ~]$ ls /var/ > /tmp/var3.out 2> /tmp/err.out(將ls執行結果標準輸出重定向到var3.out,標準錯誤輸出重定向到err.out)
[hive@Smoke ~]$ cat /tmp/var3.out(查看var3.out文件)
account
cache
crash
cvs
db
empty
ftp
ftproot
games
gdm
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
www
yp
[hive@Smoke ~]$ ls /var6 &> /tmp/var5.out(將標準輸出和錯誤標準輸出都重定向到var5.out)
[hive@Smoke ~]$ cat /tmp/var5.out(查看var5.out文件)
ls: cannot access /var6: No such file or directory
[hive@Smoke ~]$ ls /var &> /tmp/var5.out(將標準輸出和錯誤標準輸出都重定向到var5.out)
[hive@Smoke ~]$ cat /tmp/var5.out(查看var5.out文件)
account
cache
crash
cvs
db
empty
ftp
ftproot
games
gdm
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
www
yp
[hive@Smoke ~]$ cat < /etc/fstab
UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1
UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2
UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[hive@Smoke ~]$ tr 'a-z' 'A-Z' /etc/fstab(tr不能跟文件名,報錯誤)
tr: extra operand /etc/fstab'<br/>Trytr --help' for more information.
[hive@Smoke ~]$ tr 'a-z' 'A-Z' < /etc/fstab(使用輸入重定向將fstab內容輸入讓tr將小寫換爲大寫)
UUID=9F66AADB-2E9A-49D5-9748-CECEEA2D41F0 / EXT4 DEFAULTS 1 1
UUID=67344573-C4C0-4B5F-BEAE-E6837A9712F7 /BOOT EXT4 DEFAULTS 1 2
UUID=FB6D8EA4-ED81-4024-BCBC-7BC44F431282 SWAP SWAP DEFAULTS 0 0
TMPFS /DEV/SHM TMPFS DEFAULTS 0 0
DEVPTS /DEV/PTS DEVPTS GID=5,MODE=620 0 0
SYSFS /SYS SYSFS DEFAULTS 0 0
PROC /PROC PROC DEFAULTS 0 0
[hive@Smoke ~]$ cat << END(在此處生成文檔,END文件結束標記)

The first line.
The second line.
END
The first line.
The second line.
[root@Smoke ~]# cat >> /tmp/myfile.txt << EOF(將cat的內容追加輸出到myfile.txt,<< EOF生成文檔)
The first line.
The second line.
EOF
[root@Smoke ~]# cat /tmp/myfile.txt(查看myfile.txt文件)
The first line.
The second line.
[root@Smoke ~]# echo "hello,world." | tr 'a-z' 'A-Z'(將echo內容通過管道輸出給tr將小寫換成大寫)
HELLO,WORLD.
[root@Smoke ~]# echo "redhat" | passwd --stdin hive(將echo內容通過管道送給passwd更改hive用戶密碼,--從標準輸入讀取密碼,標準輸入鍵盤)
Changing password for user hive.
passwd: all authentication tokens updated successfully.
[root@Smoke ~]# cat /etc/passwd | sort(將cat顯示passwd文件內容,通過管道輸入給sort進行排序,默認升序)
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@Smoke ~]# cut -d: -f1 /etc/passwd | sort(對文件passwd通過冒號進行分段並取出第一段,通過管道輸入給sort進行排序,默認升序)
abrt
adm
apache
avahi-autoipd
bin
daemon
dbus
ftp
games
gdm
[root@Smoke ~]# cut -d: -f3 /etc/passwd | sort(對文件passwd通過冒號進行分段並取出第三段,通過管道輸入給sort進行排序,默認升序)
0
1
10
1003
1004
1005
1006
11
[root@Smoke ~]# cut -d: -f3 /etc/passwd | sort -n對文件passwd通過冒號進行分段並取出第三段,通過管道輸入給sort進行排序,-n按字符大小排序,默認升序)
0
1
2
3
4
5
6
7
[root@Smoke ~]# cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'(對文件passwd通過冒號進行分段並取出第一段,通過管道輸入給sort進行排序,默認升序,並將排序結果輸入給tr將所有小寫字母更好成大寫)
ABRT
ADM
APACHE
AVAHI-AUTOIPD
BIN
DAEMON
DBUS
FTP
GAMES
GDM
GOPHER
[root@Smoke ~]# ls /var | tr 'a-z' 'A-Z'(將ls命令的輸出通過管道輸入給tr將文件名小寫全更換爲大寫)
ACCOUNT
CACHE
CRASH
CVS
DB
EMPTY
FTP
FTPROOT
GAMES
GDM
LIB
LOCAL
LOCK
LOG
MAIL
NIS
OPT
PRESERVE
RUN
SPOOL
TMP
WWW
YP
[root@Smoke ~]# echo "Hello,World." | tee /tmp/hello.out(將echo命令的輸出通過管道輸入給tee,將內容保存至hello.out文件,並顯示出來)
Hello,World.
[root@Smoke ~]# cat /tmp/hello.out(查看hello.out文件)
Hello,World.
[root@Smoke ~]# wc -l /etc/passwd | cut -d' ' -f1(只顯示passwd文件有多少行,不顯示目錄,將wc命令的輸出通過管道輸入給cut,通過空白進行分段,並顯示第一行)
53

練習:
1、統計/usr/bin/目錄下的文件個數;
`# ls /usr/bin | wc -l`
2、取出當前系統上所有用戶的shell,要求,每種shell只顯示一次,並且按順序進行顯示;
`# cut -d: -f7 /etc/passwd | sort -u`
3、思考:如何顯示/var/log目錄下每個文件的內容類型?
file /var/log/*
4、取出/etc/inittab文件的第6行;
`# head -6 /etc/inittab | tail -1`
5、取出/etc/passwd文件中倒數第9個用戶的用戶名和shell,顯示到屏幕上並將其保存至/tmp/users文件中;
`# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users`
6、顯示/etc目錄下所有以pa開頭的文件,並統計其個數;
`# ls -d /etc/pa* | wc -l`
7、不使用文本編輯器,將alias cls=clear一行內容添加至當前用戶的.bashrc文件中;
`# echo "alias cls=clear" &gt;&gt; ~/.bashrc`
1、

[root@Smoke ~]# ls /usr/bin/ | wc -l(顯示bin目錄下有多少文件子目錄,將ls命令執行結果通過管道輸入給wc統計,-l行數)
1642
[root@Smoke ~]# ls -l /usr/bin/ | wc -l(顯示bin目錄下有多少文件子目錄,將ls命令執行結果通過管道輸入給wc統計,-l行數)
1643
[root@Smoke ~]# ls -l /usr/bin/ | head -n 1(將ls命令執行結果通過管道輸入給head只顯示第一行)
total 214204(文件總體大小)

2、

[root@Smoke ~]# cut -d: -f7 /etc/passwd | sort -u
/bin/bash
/bin/false
/bin/sync
/bin/tcsh
/sbin/halt
/sbin/nologin
/sbin/shutdown

3、

[root@Smoke ~]# file /var/log/*
[root@Smoke ~]# cd /var/log/
[root@Smoke log]# file ls /var/log/

4、

[root@Smoke ~]# head -6 /etc/inittab | tail -1
#

5、

[root@Smoke ~]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
user4:/bin/bash

6、

[root@Smoke ~]# ls -d /etc/pa* | wc -l
5

7、

[root@Smoke ~]# echo "alias cls=clear" >> ~/.bashrc
[root@Smoke ~]# printf "alias cls=clear" >> ~/.bashrc

grep, egrep, fgrep
grep: 根據模式搜索文本,並將符合模式的文本行顯示出來。
Pattern: 模式,文本字符和正則表達式的元字符組合而成匹配條件
grep [options] PATTERN [FILE...]
-i,--ignore-case:忽略大小寫
--color[=WHEN],--colour[=WHEN]:顯示顏色
-v: 顯示沒有被模式匹配到的行
-o:只顯示被模式匹配到的字符串
-E: 使用擴展正則表達式
-A #: 當某一行被grep指定的模式所匹配到以後,不但顯示這一行,還會顯示匹配到這一行後的多少行,#代表數值
-B #: 當某一行被grep指定的模式所匹配到以後,不但顯示這一行,還會顯示匹配到這一行前的多少行,#代表數值
-C #: 當某一行被grep指定的模式所匹配到以後,不但顯示這一行,還會顯示匹配到這一行前行後的多少行,#代表數值
文件名通配符:
*: 任意長度的任意字符
?:任意單個字符
[]:匹配指定範圍內的任意單個字符

正則表達式:部分匹配,顯示的是整行
正則表達式:REGular EXPression, REGEXP
元字符:
.: 匹配任意單個字符
[]: 匹配指定範圍內的任意單個字符
^:匹配指定範圍外的任意單個字符
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
字符集合:[:digit:]數字, [:lower:]小寫字母, [:upper:]大寫字母, [:punct:]標點符號, [:space:]空白字符, [:alpha:]所有字母, [:alnum:]所有數字字母
匹配次數(貪婪模式):
: 匹配其前面的字符任意次
a, b, ab, aab, acb, adb, amnb
a
b, a?b
a.b
.
: 任意長度的任意字符
\?: 匹配其前面的字符1次或0次
{m,n}:匹配其前面的字符至少m次,至多n次
{1,}:匹配其面前的字符至少1次
{0,3}:匹配其前面的字符至多3次
位置錨定:
^: 錨定行首,此字符後面的任意內容必須出現在行首
$: 錨定行尾,此字符前面的任意內容必須出現在行尾
^$: 空白行
\<或\b: 錨定詞首,其後面的任意字符必須作爲單詞首部出現
\>或\b: 錨定詞尾,其前面的任意字符必須作爲單詞的尾部出現
\<root\>或\broot\b:在整個文件每一行找root單詞,必須作爲整個單詞出現
分組:
():把內容分組
(ab):把ab當成整體,ab可以出現任意次
後向引用
\1: 引用第一個左括號以及與之對應的右括號所包括的所有內容
\2: 引用第二個左括號以及與之對應的右括號所包括的所有內容
\3: 引用第三個左括號以及與之對應的右括號所包括的所有內容
He love his lover.
She liker her lover.
He like his liker.
She lover her liker.
l..e
'(l..e).
\1'

[root@Smoke ~]# grep 'root' /etc/passwd(查找passwd文件包含root的字符的行)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# grep -i 'root' /etc/passwd(查找passwd文件包含root的字符的行,-i不區分大小寫)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# grep --color=auto 'root' /etc/passwd(查找passwd文件中包含root字符的行,--color使用高亮顯示)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# alias grep='grep --color'(給grep --color取別名叫grep)
[root@Smoke ~]# grep -v 'root' /etc/passwd(查找passwd文件中包含root字符的行,-v顯示沒有被root匹配到的行)
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@Smoke ~]# grep -o 'root' /etc/passwd(查找passwd文件中包含root的字符,-o只顯示匹配到的字符串)
root
root
root
root
root
[root@Smoke ~]# grep 'r..t' /etc/passwd(查找passwd文件中包含r開頭t結尾中間任意兩個字符)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# nano test.txt(編輯test.txt文件)
a
b
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a.*b' test.txt(查找test.txt文件中a開頭b結尾中間任意長度任意字符)
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a*b' test.txt(查找test.txt文件中以a開頭任意次數後面b)
b
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a\?b' test.txt(查找test.txt文件中a可有可無後面跟b)
b
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a\{1,3\}b' test.txt(查找test.txt文件中a至少1次至多3次後面跟b)
ab
aab
[root@Smoke ~]# grep 'a.\{1,3\}b' test.txt(查找test.txt文件中a和b之間出現1個字符2個字符3個字符,而且什麼字符都可以,至少有1個至多有3個)
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@Smoke ~]# grep 'w$' /etc/inittab(查找inittab文件w結尾的行)
\# For information on how to write upstart event handlers, or how
[root@Smoke ~]# grep 'b..h$' /etc/passwd(查找passwd文件中b和h之間跟任意兩個字符,並且必須出現在行尾)
root:x:0:0:root:/root:/bin/bash
Smoke:x:500:500:Smoke:/home/Smoke:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
hadoop:x:502:502::/home/hadoop:/bin/bash
nfstest:x:510:510::/home/nfstest:/bin/bash
student:x:512:512::/home/student:/bin/bash
vistor:x:513:513::/home/vistor:/bin/bash
tom:x:514:514::/home/tom:/bin/bash
user4:x:1003:1003:Tony Blare:/home/blare:/bin/bash
user7:x:1006:1006::/home/user7:/bin/bash
sysuser:x:495:492::/home/sysuser:/bin/bash
user8:x:2003:2003::/home/user8:/bin/bash
openstack:x:2004:2004::/home/openstack:/bin/bash
hive:x:5000:5000:Hive:/home/hive:/bin/bash
[root@Smoke ~]# grep '^$' /etc/inittab | wc -l(查找inittab文件存在空白字符的行將結果通過管道輸入wc統計行數)
9
[root@Smoke ~]# grep '[[:digit:]]$' /etc/inittab(查找inittab文件中以數字結尾的行)
\#   5 - X11
[root@Smoke ~]# grep '[[:space:]][[:digit:]]$' /etc/inittab(查找inittab文件中以一個或多個空白字符後面跟數字結尾的行)
[root@Smoke ~]# nano test2.txt
This is        root.
The user is mroot.
rooter is a dog's name.
chroot is a command.
mrooter        is not a word.
[root@Smoke ~]# grep 'root\>' test2.txt(查找test2.txt文件中root必須出現在詞尾的行)
This is root.
The user is mroot.
chroot is a command.
[root@Smoke ~]# grep '\<root' test2.txt(查找test2.txt文件中root必須出現在詞首的行)
This is root.
rooter is a dog's name.
[root@Smoke ~]# grep '\<root\>' test2.txt(查找test2.txt文件中root單詞的行)
This is root.
[root@Smoke ~]# grep '\broot\b' test2.txt(查找test2.txt文件中root單詞的行)
This is root.
[root@Smoke ~]# nano test3.txt(編輯test3.txt文件)
He love        his lover.
She liker her lover.
He like        his liker.
She lover her liker.
[root@Smoke ~]# grep 'l..e' test3.txt(查找test3.txt文件中l和e中間任意連個字符)
He love his lover.
She liker her lover.
He like his liker.
She lover her liker
[root@Smoke ~]# nano test3.txt(編輯test3.txt文件)
He love        his lover.
She liker her lover.
He like        his liker.
She lover her liker.
She like him.
[root@Smoke ~]# grep  'l..e.*l..er' test3.txt(查找test3.txt文件中l和e之間任意兩個字符,l和er之間任意兩個字符,中間任意長度任意字符)
He love his lover.
She liker her lover.
He like his liker.
She lover her liker.
[root@Smoke ~]# grep '\(l..e\).*\1' test3.txt(查找test3.txt文件中l和e之間任意兩個字符並且後面和前面字符相同)
He love his lover.
He like his liker.
[root@Smoke ~]# grep '\([[:digit:]]\).*\1$' /etc/inittab(查找inittab文件任意地方是數字,而且行尾必須和這個數字相同)
\#   5 - X11

練習:
1、顯示/proc/meminfo文件中以不區分大小的s開頭的行;
grep -i '^s' /proc/meminfo
grep '^[sS]' /proc/meminfo
2、顯示/etc/passwd中以nologin結尾的行;
grep 'nologin$' /etc/passwd
取出默認shell爲/sbin/nologin的用戶列表
grep "nologin$' /etc/passwd | cut -d: -f1
取出默認shell爲bash,且其用戶ID號最小的用戶的用戶名
grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
3、顯示/etc/inittab中以#開頭,且後面跟一個或多個空白字符,而後又跟了任意非空白字符的行;
grep "^#[[:space:]]{1,}[^[:space:]]" /etc/inittab
4、顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;
grep ':[0-9]:' /etc/inittab
5、顯示/boot/grub/grub.conf文件中以一個或多個空白字符開頭的行;
grep '^[[:space:]]{1,}' /boot/grub/grub.conf
6、顯示/etc/inittab文件中以一個數字開頭並以一個與開頭數字相同的數字結尾的行;
grep '^([0-9]).*\1$' /etc/inittab
練習:
1、找出某文件中的,1位數,或2位數;
grep '[0-9]{1,2}' /proc/cpuinfo
grep --color '\<[0-9]{1,2}\>' /proc/cpuinfo
2、找出ifconfig命令結果中的1-255之間的整數;
ifconfig | egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\>'

3、查找當前系統上名字爲student(必須出現在行首)的用戶的帳號的相關信息, 文件爲/etc/passwd
grep '^student\>' /etc/passwd | cut -d: -f3
id -u student
student1
student2
練習:分析/etc/inittab文件中如下文本中前兩行的特徵(每一行中出現在數字必須相同),請寫出可以精確找到類似兩行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3
grep '^l([0-9]):\1.*\1$' /etc/inittab

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