? ? ? ? 1.?tr命令
? ? ? ? ? ?? tr 轉換和刪除字符 ? tr [OPTION]… SET1 [SET2] ?
選項: -c –C –complement:取字符集的補集(取反的意思)
-d –delete:刪除所有屬于第一字符集的字符
-s –squeeze-repeats:把連續重復的字符以單獨一個字符表示
-t –truncate-set1:將第一個字符集對應字符轉化為第二字符集對應的字符.
2. 多行重定向需要在后面加個終止符 <<加隨意字符即可。
例如 ;cat > fn1 <<dv ?? 中就是以dv為結束符的? ,結束符的前面后面不可加任何東西。
3. 管道命令符
命令1 |命令2 ?? 既把前一個的命令標準輸出作為命令2的標準輸入,錯的輸出則不可執行。
練習
? 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/下文件列表,顯示成一行,并文件名之間用空格隔開 ( ls /root | tr ‘ \n’? ‘? ‘?)
5、計算1+2+3+..+99+100的總和 ?( echo {1..100} | tr ‘ ‘? ‘ +’ | bc)
6、刪除Windows文本文件中的‘^M’字符 ?(tr -d ‘\r’ <windown)
7、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格 (echo ‘……’? | tr -dc ‘ 0-9’ ‘ ? ‘ )?
8、將PATH變量每個目錄顯示在獨立的一行 ? (echo $PATH |tr ? ‘ :’‘ \n’ )
9、將指定文件中0-9分別替代成a-j ?(tr ? ‘0-9’ ‘a-j’? )
10、將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立的一行,并無空行( tr ‘? ‘? ‘\n’ <fn)
4? .用戶組和權限
管理員:uid 0
系統用戶: uid? 1-499? 1-999
普通用戶:? uid? 500+ ? ? ? ? 1000+
組的類別
?Linux組的類別
用戶的主要組(primary group) 用戶必須屬于一個且只有一個主組 組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group) 一個用戶可以屬于零個或多個輔助組
用戶和組的配置文件
?Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)(用戶名,密碼,UID,GID,描述信息,家目錄路徑,shell類型)七個信息。
描述信息可用命令修改 chfn lv? 例如下圖 ? ? chsh -s /bin/csh? lv? 該lv賬號的shell類型。
/etc/group:組及其屬性信息
/shadow文件格式 ?登錄用名 ?用戶密碼:一般用sha512加密 ?從1970年1月1日起到密碼最近一次被更改的時間 ?密碼再過幾天可以被變更(0表示隨時可被變更) ?密碼再過幾天必須被變更(99999表示永不過期) ?密碼過期前幾天系統提醒用戶(默認為一周) ?密碼過期幾天后帳號會被鎖定 ?從1970年1月1日算起,多少天后帳號失效 etc/shadow:用戶密碼及其相關屬性。
立即登陸該口令 即將99999改為0? 既命令立即過期了 。用命令 passwd -e lv
/etc/gshadow:組密碼及其相關屬性
給用戶加密碼 passwd + 用戶名 ? ? 添加用戶useradd +用戶名
給組加密碼? gpasswd +? 組名 ? ? ? ?? 組在用戶創建時自動生成組
加入其他組 newgrp +組名 然后輸入組的密碼即可
?vipw和vigr 更改用戶和組的配置文件的命令
?pwck和grpck 用來檢查更改后的配置文件的檢查
用戶創建useradd(只能一次創建一個用戶) ? ? ? 組的創建 groupadd ?
useradd [options] LOGIN -u UID
-o 配合-u 選項,不檢查UID的唯一性
-g GID:指明用戶所屬基本組,可為組名,也可以GID
-c “COMMENT”:用戶的注釋信息
-d HOME_DIR: 以指定的路徑(不存在)為家目錄
-s SHELL: 指明用戶的默認shell程序 可用列表在/etc/shells文件中 (創建不可交互系統 -s? /sbin/nologin)
-G GROUP1[,GROUP2,…]:為用戶指明附加組,組須事先存在
-N 不創建私用組做主組,使用users組做主組
-r: 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000 -m 創建家目錄,用于系統用戶
-M 不創建家目錄,用于非系統用戶
默認值設定:/etc/default/useradd文件中 ?顯示或更改默認設置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
批量該口令? 首先創建一個文本文檔 paa用nano 編輯 將用戶名和密碼寫里面例如 hh:12345 ? bb:12345 保存
之后用以下命令來更改。cat? paa | chpasswd
批量用戶創建? newusers +f1 ? 其中f1 文件為/etc/passwd/文件下顯示的用戶格式才行
用戶屬性修改
? usermod [OPTION] login
-u UID: 新UID -g GID: 新主組
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋; 若保留原有,則要同時使用-a選項(usermod -G hh? lv ?? 將 lv加入hh組中 。 組和用戶都必須事先存在的)。如果再加一個則會覆蓋,要不想覆蓋,需要加-a來完成)或者還有其他兩種方法:groupmems -a 用戶 -g 組, ? gpasswd -a 用戶? 組 ? )? 想要用戶 退出某個已加入的組 可用 usermod -G? ” 用戶 ? ? 用空格替換掉原先的組)
-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: 設定非活動期限
更改和查看組成員
?groupmems [options] [action] options:
-g, –group groupname 更改為指定組 (只有root) Actions:
-a, –add username 指定用戶加入組
-d, –delete username 從組中刪除用戶
-p, –purge 從組中清除所有成員
-l, –list 顯示組成員列表
?groups [OPTION].[USERNAME]… 查看用戶所屬組列表
查看hh組中的成員 用命令 groupmems? -l? -g? hh ? 就可以了
查看用戶跟那個組 groups ? +用戶
5 。 文件的權限管理設置
文件屬性操作 ?
chown 設置文件的所有者 ?(chown? hh? txt ? 把txt的所有者改為hh. 用戶應該是已存在的)
chgrp 設置文件的屬組信息? (chgrp? rpc? txt ? 把txt文件的所有組改為rpc? 組也應該是存在的)
chmod? u-/+ (rwx) 文件名 ? ? ? chmod 642 文件名? (r=4? w=2 x=1)
g-/+(rwx)? 文件名
0-/+(rwx) 文件名 ? ? ? ? ? ( -R? 遞歸操作)遞歸是+X 只是針對目錄加執行權限,文件不加? 但文件本身有執行權限,就會對其補加齊執行權限。
默認新建的文件及目錄權限值計算公式和umask 值有關 直接輸入umask 可以看出值。
;然后 文件默認權限 + umask 值= 文件是666 目錄是777
當文件算出的值中有奇數 奇數自動加1 即可 ? 要想存住,可保存在 ?? .bashrc 文件里。
例如 umask=則215 則文件默認權限值為666-216=450? 奇數加1? 為460 ,及 有u=w ? ? g=wx ? o= 空)
目錄的權限為777-215=562? 則權限值為526 ? 目錄不用奇數加1 )
ACL
如果想要除了(u g o )三種人以外的用戶設定文件的權限則需要使用ACL權限來實現。
例如 ;想要第四個用戶擁有讀寫的權限 setfacl -m u:第四個用戶 :rw ? fn文件)
ACL執行的順序 文件所有著,自定義用戶,自定義組,其他人。
用getfacl 文件名 ?? 可查看文件的第四個用戶訪問權限。
setfacl -b fn 即刪除fn文件的ACL訪問控制列表。
設定文件特定屬性
chattr +i 不能刪除,改名,更改 ?
chattr +a 只能追加內容 ?
lsattr 顯示特定屬性
三種特殊權限
suid? 繼承所有者的權限 (及其他兩類用戶都有所有者的權限)只是應二進制可執行程序上? 4+原有的數字表示 及46422.? chmod 4622 f1
sgid? 繼承所有組的權限 ? ? ? 2+755? 如上文
sticky 粘滯位 當 目錄的三個權限為777是則其他人也可操作或刪除自己的文件? 加上sticky權限后只能自己刪除自己的文件了? 字母? o+t 數字 1 表示? chmod 1775 f1(只作用于目錄)
chattr +i 不能刪除,改名,更改 ?
chattr +a 只能追加內容 ?
lsattr 顯示特定屬性
習題
2、備份/testdir/dir里所有文件的ACL權限到/root/acl.txt中,清除 /testdir/dir中所有ACL權限,最后還原ACL權限
首先創建目錄 mkdir -p /testdir/dir? 其次創建文件 touch /root/acl.txt
然后備份 ? getfacl -R /testdir/dir? > /root/acl.txt? 中去
然后清除權限? setfacl -b /testdir/dir
最后還原權限? setfacl? –restore? /root/dir
1、在/testdir/dir里創建的新文件自動屬于webs組,組apps的成員如: tomcat能對這些新文件有讀寫權限,組dbs的成員如:mysql只能對新文 件有讀權限,其它用戶(不屬于webs,apps,dbs)不能訪問這個文件夾
首先建目錄 mkdir -p /tesedir/dir?
再依次建三個組 groupadd webs ? ? groupadd? apps ?? groupadd? dbs ?
再建兩個用戶 useradd tomcat ?? useradd mysqul?
之后將目錄所有者更換到webs組中去? chgrp? webs? /testdir/dir?
下一步 設置 目錄/testdir/dir的權限 chmod 770 /testdir/dir?
之后將tomcat mysqul 添加到組中? usermod -G apps tomcat ? ?? usermod -G? dbs mysql?
在后? 用ACL權限更改 apps,dbs組的權限 setfacl? -m g:apps:rw? /testdir/dir ? setfacl -m g:dbs:r? /testdir/dir
6 . 文本處理工具
1.cat
-E 顯示換行符$
-v 顯示^M
-T 顯示^I即tab
-A = -EvT
-n 輸出的結果前顯示行號
-b 輸出的結果前顯示行號,非空行不參與排列
-s 將連續的空行壓縮為一行
查看文件可用 more 和less 分頁查看
2.sort
-n 按數字排列
-r 倒序排列,默認升序
-t 指定分隔符
-k 指定哪一列
-f 忽略大小寫
-u 刪除重復行
3.head -n 10 /ect/fstab:輸出文件前10行
-c 10 文件名 按字節查看前10個字節
tail -n 10 /ect/fstab:輸出文件后10行
-c 10 文件名 :按字節查看后10個字節。
-f 文件名:動態顯示,可用來查看日志。
cut
-d 指定分隔符(默認為tab)
-f 取第幾列
-c 安字符切割
–output-delimiter=STRING 指定輸出的分隔符
paste:合并兩個文件同一行號到一行。
-d 指定分隔符
-s 壓縮連續的空行成一行
例: paste file1 file2 -d:
練習:(1)利用df,取出分區利用率的最大值,只要數字。
df |tr -s ” ” : |cut -d: -f5 |sort -n |tail -n 1 |cut -d% -f1
(2)列出當前系統中的所有用戶的uid
cat /etc/passwd|cut -d: -f1,3 –output-delimiter=的UID是
4.wc:統計工具
-l 只計數行數
-w 只計數單詞數
-c 字節
-m 字符
5.uniq
去除連續重復行,往往和sort配合使用,先排序,再去重
-c 顯示重復的次數
-d 僅顯示重復行
-u 僅顯示非重復行
head [OPTION]… [FILE]…
-c #: 指定獲取前#字節
-n #: 指定獲取前#行 -#: 指定行數 ?
tail [OPTION]… [FILE]…
-c #: 指定獲取后#字節
-n #: 指定獲取后#行 -#:
-f: 跟蹤顯示文件fd新追加的內容,常用日志監控 相當于 –follow=descriptor
-F: 跟蹤文件名,相當于—follow=name –retry ?
tailf 類似tail –f,當文件不增長時并不訪問文件
習題 截取IP地址
ifconfig | head -n2 | tail -n1 | tr -s ‘ ’ : | cut -d; -f4?
對網站訪問IP 地址列出前十名
如訪問數據在2.log 文件中
cat 2.log | cut -d‘ ’ -f1 | uniq -c | sort -nr | head -n10
思路 截取每一行第一列數據,重復的統計壓縮 并顯示數字,排序,顯示前十行的數據。
查出用戶UID最大值的用戶名、UID及shell類型
?cat /etc/passwd | cut -d: -f1,3,7 | sort -t: -k2 -nr
4、查出/tmp的權限,以數字方式顯示
stat -c %a /tmp/? 最簡單的方法
5、統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序
netstat -tun | grep ESTAB | tr -s ‘ ‘ : | cut -d: -f6 |sort -nr | uniq -c
7 . 文本過濾工具 grep? 和正則表達式
grep命令選項
? –color=auto: 對匹配到的文本著色顯示 ?
-v: 顯示不被pattern匹配到的行 ?
-i: 忽略字符大小寫 ?
-n:顯示匹配的行號 ?
-c: 統計匹配的行數 (只顯示有幾行的數)?
-o: 僅顯示匹配到的字符串 ?
-q: 靜默模式,不輸出任何信息 ?
-A #: after, 后#行 ?(例如: -A3 既包含字符串的后面3行)
-B #: before, 前#行 ?( 例如 -B2既包含字符串的前面2行)
-C #:context, 前后各#行 (例如;-C4既前后各四行,共計8行的)?
-e:實現多個選項間的邏輯or關系 grep –e ‘cat ’ -e ‘dog’ file ?(-eq -ew -ej ? ?? 三個是或者的意思)
-w:匹配整個單詞 (數字和字母以及下劃線是不能區分單詞的 ,既他們和字母或下劃線及單詞可組成一個字符串 例如? 123root ? wer_12q ? 123_1qw ?? 他們都屬于整個單詞。)?
-E:使用ERE ?
-F:相當于fgrep,不支持正則表達式
正則表達式?
字符匹配:
. 匹配任意單個字符
[] 匹配指定范圍內的任意單個字符
[^] 匹配指定范圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母
[:upper:] 大寫字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
[:digit:] 十進制數字
[:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次 貪婪模式:盡可能長的匹配
.* 任意長度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置錨定:
定位出現的位置
^ 行首錨定,用于模式的最左側
$ 行尾錨定,用于模式的最右側
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 詞首錨定,用于單詞模式的左側
\> 或 \b 詞尾錨定;用于單詞模式的右側
\<PATTERN\> 匹配整個單詞
分組:
\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,如: \(root\)\+ ?
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這 些變量的命名方式為: \1, \2, \3, … ?
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符 ?
示例: \(string1\+\(string2\)*\) \1 :string1\+\(string2\)* \2 :string2 ?
后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身 ?或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
分組 \(asd\) ? ? \1 ? asd為整個字符 ? 1代表和前面括號里一樣的字符?
習題
1、顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)
cat /proc/meminfo | grep -i ^s ??
2、顯示/etc/passwd文件中不以/bin/bash結尾的行 ?
cat /etc/passwd | grep -v “/bin/bash”$
3、顯示用戶rpc默認的shell程序
?cat /etc/passwd | grep -w ^rpc | cut -d: -f7
4、找出/etc/passwd中的兩位或三位數
cat /etc/passwd | grep -ow “[0-9]\{2,3\}
5、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面有非 空白字符的行
?cat /etc/grub2.cfg | grep ‘^[[:space:]]\+[^[:space:]]’
6、找出“netstat -tan”命令結果中以LISTEN后跟任意多個空白字符結尾的行
?netstat -tan | grep -w “\<LISTEN\>[[:space:]]*$”
7、顯示CentOS7上所有系統用戶的用戶名和UID ?
cat /etc/passwd | cut -d: -f1,3 | grep -w “[0-9]\{1,3\}” | sort -t: -k2 -nr |
8、添加用戶bash、testbash、basher、sh、nologin(其shell為/sbin/nologin),找 出/etc/passwd用戶名和shell同名的行 cat /etc/passwd | grep “^\(.*\):.*/\1$”?
9、利用df和grep,取出磁盤各分區利用率,并從大到小排序
df | grep /dev/sda |tr -s ‘ ‘ % | cut -d% -f5 |sort -nr | head -n1
正則表達式的分組
分組:\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,如: \(root\)\+ ?
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這 些變量的命名方式為: \1, \2, \3, … ?
\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符 ?
示例: \(string1\+\(string2\)*\) \1 :string1\+\(string2\)* \2 :string2 ?
后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身 ?
或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
擴展的正則表達是
?字符匹配:
. 任意單個字符
[] 指定范圍的字符
[^] 不在指定范圍的字符
次數匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
練習
1、顯示三個用戶root、mage、wang的UID和默認shell ?
cat /etc/passwd | grep -Ew “^(root|mage|wang)” | cut -d: -f1,7
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一 個小括號的行
cat /etc/rc.d/init.d/functions | grep “^[[:alnum:]_]\+()”
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
?echo /etc/rc.d/init.d/functions |egrep -o “[^/]*/?$”
4、使用egrep取出上面路徑的目錄名
echo /etc/rc.d/init.d/functions |grep -E “^/.*/\<“
5、統計last命令中以root登錄的每個主機IP地址登錄次數 ?
6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
[root@centos7 ~]# echo {1..100}| egrep -w [0-9]{1} -o
[root@centos7 ~]# echo {1..100}| egrep -w [1-9][0-9]
[root@centos7 ~]# echo {190..300}| egrep -w 2[0-4][0-9]
[root@centos7 ~]# echo {190..300}| egrep -w 25[0-5] ?
7、顯示ifconfig命令結果中所有IPv4地址 ?
?ifconfig |sed -r -n ‘s/^(.*addr:)(.*)(Bcast.*)/\2/p’
ifconfig |egrep -o “\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>”
8、將此字符串:welcome to magedu linux 中的每個字符去重并排序,重復 次數多的排到前面
echo “welcome to magedu linux” | grep -o “[[:alpha:]]” | sort | uniq | tr ‘\n’ ‘ ‘?
8.文本編輯工具VIM
vim的三種工作模式 命令模式,編輯模式,擴展模式
1 命令模式 到編輯模式的轉換
i: insert, 在光標所在處輸入
I:在當前光標所在行的行首輸入
a: append, 在光標所在處后面輸入
A:在當前光標所在行的行尾輸入
o: 在當前光標所在行的下方打開一個新行
O:在當前光標所在行的上方打開一個新行
最好在命令模式中退出保存 從其他模式中回到命令模式按esc鍵即可在按:可進入擴展模式 推出保存用以下按鍵來實現
擴展模式: :q 退出 :q! 強制退出,丟棄做出的修改 :wq 保存退出 :x 保存退出
w 寫(存)磁盤文件
wq 寫入并退出
x 寫入并退出
q 退出
q! 不存盤退出,即使更改都將丟失
r filename 讀文件內容到當前文件中
w filename 將當前文件內容寫入另一個文件
!command 執行命令
?命令模式光標跳轉
?字符間跳轉: h: 左 l: 右 j: 下 k: 上
#COMMAND:跳轉由#指定的個數的字符 ?
單詞間跳轉: w:下一個單詞的詞首 e:當前或下一單詞的詞尾 b:當前或前一個單詞的詞首 #COMMAND:由#指定一次跳轉的單詞數 ?
當前頁跳轉: H:頁首 M:頁中間行 L:頁底
?刪除命令:
d: 刪除命令,可結合光標跳轉字符,實現范圍刪除
d$: 刪除到行尾
d^:刪除到非空行首
d0:刪除到行首
dw: de: db: #COMMAND ?
dd: 刪除光標所在的行
#dd:多行刪除 ?
D:從當前光標位置一直刪除到行尾,留空行,等同于
d$ command 讀入命令的輸出
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/94734