Linux學習匯總——Linux用戶組管理,文件權限管理,文本處理工具grep及egrep
本章Blog相關Linux相關知識點
解析:在數據庫按搜索碼查找相對應的條目,並找與之對應額外的其他數據庫的過程;名稱解析:UID ,組名解析:GID
數據庫:文本文件,sql數據庫,ldap數據庫,用戶庫:/etc/passwd ,密碼庫 :/etc/shadow,組庫:/etc/group,組密碼庫:/etc/gshadow
加密方法:對稱加密——加密和解密使用同一個密碼,如DES,AES ;公鑰加密——每個密碼都成對出現,一個公鑰,一個私鑰,如DSA,RSA;單向加密——常用於數據完整性校驗 ,特點1、雪崩效應,2、定長輸出,3、不可逆 ,如MD5 ,SHA1
# cat /etc/passwd(各項涵義如),用戶名:密碼占位符:UID:GID(基本組):備註信息:HOMEDIR(家目錄):默認SHell
# cat /etc/shadow(各項涵義如),用戶名:密碼占位符:最近一次密碼修改時間:最短使用時間:最長使用期限:密碼使用警告區間:非活動區間:賬號的過期期限:預留段
用戶類別:管理員(id為0),系統用戶(id 1-499),一般用戶(id 500-60000)
用戶組類別(以用戶為視角):私有組——創建用戶時,如果沒有為其指定所屬組,系統會自動為其創建一個與用戶名相同的組;基本組——用戶的默認組;附加組——額外組,默認組意外的其他組
權限 r w x
文件: r —— 可讀 ,可以使用cat 等命令查看 ;w —— 可寫 ,可以使用vi nano編輯文本內容 ;x —— 可以在命令提示付下當做命令提交給內核執行
目錄: r —— 可對此目錄使用ls 命令列出內部所有文件 ;w —— 可在此目錄中創建、刪除文件 ;x —— 可使用cd 切換到此目錄,也可使用ls -l 產看內部文件的詳細信息
三類用戶: u ——owner ;g——group ;o——other
進程的屬主,是否與文件的屬主相同:如果相同,進程則以文件屬主的權限來訪問文件;否則,進程的屬主所屬的組,是否其中之一與文件的屬組相同;如果相同,進程則以文件的屬組的權限來訪問文件,否則,進程則以文件的其他用戶的權限來訪問文件
Linux用戶組管理
useradd 創建用戶,命令格式
# useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid [ -o]] [-n] [-r] login
-u :指定UID
-g :指定GID(基本組),但GID要先存在
-G:指定GID(附加組),但組要先存在
-c :“COMMENT”註釋信息
-d :指定家目錄
-s :指定Shell路徑 /etc/shells:指定了當前系統中可用的安全shell ,# echo $SHELL 顯示當前shell
-m -k :強制為用戶創建家目錄,並把shell文件拷貝到家目錄
-M :/etc/login.defs ,不為用戶創建家目錄
-r :創建系統用戶 ,id 1-499 ,不為用戶創建家目錄且默認shell為 /sbin/nologin
userdel 刪除用戶,命令格式
# userdel [-r] login
若不加任意選項,默認不刪除家目錄
-r :刪除用戶的同時,刪除家目錄
passwd 修改密碼(普通用戶通過passwd 修改自己的密碼,管理員可通過passwd修改自己密碼,亦可通過passwd USERNAME 命令修改普通用戶的密碼),命令格式
# passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
--stdin
-l :lock 鎖定用戶
-u :unlock ,解鎖用戶
示例:echo “redhat”| passwd --stdin user3 設置用戶user3 密碼為redhat
usermod 修改用戶賬號屬性,命令格式
# usermod [-c comment] [-d home_dir [ -m]][-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-l login_name] [-s shell] [-u uid [ -o]] login
-u :指定UID
-g :指定GID(基本組)
-a -G:指定GID(附加組),為用戶在原有的附加組追加附加組,若不使用-a ,則會覆蓋原有的附加組
-c :“COMMENT”註釋信息
-d -m:指定家目錄,並移動此前家目錄的文件到新的家目錄
-s :指定Shell路徑 /etc/shells:指定了當前系統中可用的安全shell ,# echo $SHELL 顯示當前shell
-L :lock 鎖定用戶
-U :unlock ,解鎖用戶
-l:調整Lgoin 新的用戶名
# finger 查詢用戶賬號信息
# chsh USERNAME :change shell
# chfn COMMENT :change finger 註釋信息
id 查看用戶id號,命令格式
# id [OPTION]... [USERNAME]
-u :顯示UID ,可與-n組合使用
-nu :顯示用戶名
-g :顯示GID ,可與-n組合使用
-G :顯示擴展GID,可與-n組合使用
groupadd 添加組,命令格式:
# groupadd [-g gid [-o]] [-r] [-f] group
-g :指定GID
groupmod 修改組屬性,命令格式
# groupmod [-g gid [-o]] [-n group_name] group
-g :更改GID
-n :更改群組名
# groupdel group_name :刪除組
# gpasswd group_name:調整組密碼
Linux文件權限管理
只有管理員可以使用chgrp ,chown 命令調整文件權限屬性
chown 改變文件所有者及所屬組,命令格式
# chown [OPTION]... [OWNER][:[GROUP]] FILE...
# chown [OPTION]... --reference=RFILE FILE...
-R :修改目錄及其內部文件的所有者
--reference=/path/to/somefile file :設置file的所有者與/path/to/somefile 的所有者一致
chown user_name:group_name file :同時改變file文件的所有者和所屬組
chgrp 改變文件所屬組,命令格式
# chgrp [OPTION]... GROUP FILE...
# chgrp [OPTION]... --reference=RFILE FILE...
-R :修改目錄及其內部文件的所有者
--reference=/path/to/somefile file :設置file的所有者與/path/to/somefile 的所有者一致
chmod 修改文件權限,命令格式
# chmod [OPTION]... MODE[,MODE]... FILE...
# chmod [OPTION]... OCTAL-MODE FILE...
# chmod [OPTION]... --reference=RFILE FILE...
chmod [ugoa...][[+-=][rwx...]...] file :設置文件的用戶的權限
-R:修改目錄及其內部文件的所有者
--reference=/path/to/somefile file :設置file的所有者與/path/to/somefile 的所有者一致
Linux文本管理
wc 統計行數,單詞數或字節數,命令格式
# wc [OPTION]... [FILE]...
# wc [OPTION]... --files0-from=F
-l :統計行數
-c :統計字符數
-w :統計單詞數
tr 字符轉換或刪除字符,命令格式
# tr [OPTION]... SET1 [SET2]
-d ‘集合1’:刪除集合1
tr ‘集合1’‘集合2’ :替換功能
例:# cat /etc/passwd | tr 'abcd' 'ABCD' 顯示並替換文本內的abcd 為ABCD
例:# cat /etc/passwd | tr -d 'abcd' 顯示並刪除文本內的abcd 字符
cut 把文本中每行符合條件的片段做移除,命令格式
# cut OPTION... [FILE]...
-d 字符 :指定分隔符
-f n :指定顯示的第n個片段
-f n-m :指定顯示第n 至 m片段
-f n,m :指定顯示第n 及第m片段
例:# cut -d: -f1,3 /etc/passwd 顯示/etc/passwd 文本中以:做分隔符,顯示第1 和第3個片段
例:# echo“THis is a new line”| cut -d' ' -f3 顯示“THis is a new line" 文本中以' '(空白符)做分隔,顯示第3個片段
sort 文本內容排序,命令格式
# sort [OPTION]... [FILE]...
# sort [OPTION]... --files0-from=F
-f :忽略字符大小寫
-n :按照數值大小排序
-t 分隔符 -k 指定字段 :以指定字段進行排序
-u :重復的行僅顯示一次
例:# sort -n -t: -k3 /etc/passwd ,文本/etc/passwd 中以:為分隔符 ,以第三個片段UID 按照數值大小進行排序顯示
uniq 顯示重復的行,命令格式
# uniq [OPTION]... [INPUT [OUTPUT]]
-c :顯示每行內容及重復次數
-d :僅顯示重復的行
-u :僅顯示不重復的行
例:#ls -d /etc/[Pp]* | wc -l 顯示/etc/目錄下以P或p 開頭的文件並統計其個數
Linux文本處理工具之grep ,egrep 使用'' 或"" 引用
文本搜索工具grep 、egrep ——根據用戶指定的文本模式對目標文件進行逐步搜索,顯示能夠被匹配的行
grep ,egrep 顯示匹配的行,命令格式
# grep [OPTIONS] PATTERN [FILE...]
# grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
--color :顏色顯示
-v :取反顯示,反向顯示
-i :不區分字符大小寫
-o :僅顯示被匹配的字符串,而非整行
-E :支持擴展正則表達式 ,相當於egrep
例:grep -v '^$’/etc/rc.d/rc.sysinit :顯示非空白行
正則表達式:是一類字符所書寫的模式(PATTERN),包括基本正則表達式和擴展正則表達式
基本正則表達式:盡可能長的去匹配字符
字符匹配:
. :任意單個字符,例 # grep “r..t” /etc/rc.d/rc.sysinit
[ ] :指定範圍內的任意單個字符 ,例 [Ps] 包含P或s 的任意單個字符
[0-9] 或 [[:digit:]] :任意單個0-9的數字
[a-z]或 [[:lower:]] :任意單個a-z 小寫字母
[A-Z]或[[:upper:]] :任意單個A-Z大寫字母
[[:alpha:]] :任意單個大小寫字母
[[:alnum:]] :任意單個帶小寫字母或數字
[[:space:]] :任意單個空白符
[[:punct:]] :任意單個特殊字符
[^] :指定範圍外的任意單個字符
次數匹配:
* :前面的字符出現任意次 ,例 # grep “x*y”/etc/rc.d/rc.sysinit ,與通配符不同 * 代表任意長度的任意字符
.* :任意長度的任意字符
\? :前面的字符出現0次或1次 ,與通配符不同 ? 匹配任意單個字符
\{m\} :前面的字符匹配m次
\{m,n\} :前面的字符至少匹配m次 ,至多匹配n次 例:# grep --color=auto‘x\{2,6\}y' /etc/rc.d/rc.sysinit
位置錨定符:
^ :用於錨定行首 如,^Char
$ :錨定行尾 如 ,Char$
^$ :空白行
\<Char 或\b :錨定詞首
\>Char 或\b :錨定詞尾
分組符:
\(\) :分組 ,如 \(AB\) 代表AB為一個整體
引用:
\1 :後向引用,引用前面的第一個左括號及與之對應的右括號中的模式所匹配的內容(引用前面一模一樣的字符串,不是引用通配符格式)
\n :與上文含義相似
擴展正則表達式:egrep :使用擴展正則表達式,相當於grep -E
字符匹配:
. :任意單個字符,例 # egrep “r..t” /etc/rc.d/rc.sysinit
[ ] :指定範圍內的任意單個字符 ,例 [Ps] 包含P或s 的任意單個字符
[0-9] 或 [[:digit:]] :任意單個0-9的數字
[a-z]或 [[:lower:]] :任意單個a-z 小寫字母
[A-Z]或[[:upper:]] :任意單個A-Z大寫字母
[[:alpha:]] :任意單個大小寫字母
[[:alnum:]] :任意單個帶小寫字母或數字
[[:space:]] :任意單個空白符
[[:punct:]] :任意單個特殊字符
[^] :指定範圍外的任意單個字符
次數匹配:
* :前面的字符出現任意次 ,例 # grep “x*y”/etc/rc.d/rc.sysinit ,與通配符不同 * 代表任意長度的任意字符
.* :任意長度的任意字符
? :前面的字符出現0次或1次 ,與通配符不同 ? 匹配任意單個字符
+ :匹配其前面的字符至少一次
{m} :前面的字符匹配m次
{m,n} :前面的字符至少匹配m次 ,至多匹配n次 例:# egrep --color=auto‘x\{2,6\}y' /etc/rc.d/rc.sysinit
位置錨定符:
^ :用於錨定行首 如,^Char
$ :錨定行尾 如 ,Char$
^$ :空白行
\<Char 或\bChar :錨定詞首
\>Char 或Char\b :錨定詞尾
分組:
() :分組 ,如 (AB) 代表AB為一個整體
| :或者 (ab|bc) 代表ab 或bc ,左側或右側
引用:
\1 :後向引用,引用前面的第一個左括號及與之對應的右括號中的模式所匹配的內容(引用前面一模一樣的字符串,不是引用通配符格式)
\n :與上文含義相似
綜上,基本正則表達式與擴展表達式的區別 ,基本正則表達式分組及次數匹配引用需要加 “\” ,而擴展基本表達式中分組及次數匹配無需加“\”,且支持“+”及 “|” 引用等 。
正則表達式練習題
使用基本正則表達式和擴展正則表達式分別表示:
1、顯示/proc/meminfo 文件中以 大小寫 s開頭的行
# grep -i '^s' /proc/meminfo 或 # grep "[Ss]" /proc/meminfo
2、取出默認shell為非bash的用戶
# grep -v '/bin/bash\b' /etc/passwd | cut -d: -f1
3、取出默認shell為bash的且其ID號最大的用戶
# grep '/bin/bash\b' /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1
# egrep '/bin/bash\b' /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1
4、顯示/etc/rc.d/rc.sysinit文件中,以#開頭,後面跟至少一個空白字符,而後又至少一個非空白字符的行
# grep '^#[[:space:]]\{1,\}[^[:space:]]\{1,\}' /etc/rc.d/rc.sysinit
5、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行
# grep '^[[:space:]]\{1\}[^[:space:]]\{1,\}' /boot/grub/grub.conf
6、找出/etc/passwd文件中一位數或2位數
#grep '\<[0-9]\{1,2\}\>' /etc/passwd
7、找出ifconfig 命令結果中1到255之間的整數
# ifconfig | grep -E "\<([1-9][1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" 註意:數字要錨定詞首和詞尾
8、查看當前系統上root用戶的所有信息
# grep "^root\b" /etc/passwd
9、添加用戶bash和testbash ,而後找出當前系統上其用戶名和默認shell相同的用戶
# grep "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd
10、找出netstat -tan命令執行結果一“LISTEN”或“ESTABLISHED”結尾的行
# netstat -tan | egrep "LISTEN|ESTABLISHED"
11、取出當前系統上所有用戶的shell,要求:每種shell只顯示一次,且按升序顯示。
#cut -d: -f7 /etc/passwd | sort -u
本章blog命令匯總
# grep [OPTIONS] PATTERN [FILE...] :顯示匹配條件的行
# sort [OPTION]... [FILE]... :對文本內行排序
# wc [OPTION]... [FILE]... :統計行數,單詞數或字節數
# tr [OPTION]... SET1 [SET2] :統計行數,單詞數或字節數
# cut OPTION... [FILE]... :把文本中每行符合條件的片段做移除
# chown [OPTION]... [OWNER][:[GROUP]] FILE... :改變文件所有者及所屬組
# chgrp [OPTION]... GROUP FILE... :改變文件所屬組
# chmod [OPTION]... MODE[,MODE]... FILE... :修改文件權限
# useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid [ -o]] [-n] [-r] login :創建用戶
# userdel [-r] login :刪除用戶
# passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username] :修改密碼
# usermod [-c comment] [-d home_dir [ -m]][-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-l login_name] [-s shell] [-u uid [ -o]] login : 修改用戶賬號屬性
# finger :查詢用戶賬號信息
# chsh USERNAME :change shell
# chfn COMMENT :change finger 註釋信息
# id [OPTION]... [USERNAME] :查看用戶id號
# groupadd [-g gid [-o]] [-r] [-f] group :添加組
# groupmod [-g gid [-o]] [-n group_name] group :修改組屬性
# groupdel group_name :刪除組
# gpasswd group_name:調整組密碼
# uniq [OPTION]... [INPUT [OUTPUT]] :顯示或移除重復的行
Linux學習匯總——Linux用戶組管理,文件權限管理,文本處理工具grep及egrep