第三周blog
-
1
列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。
# who|cut -d’ ‘ -f 1 |sort -u -
2
取出最后登錄到當前系統的用戶的相關信息。
# who | tail -n 1 -
3
取出當前系統上被用戶當作其默認shell的最多的那個shell。
# cat /etc/passwd|cut -d: -f7|sort|uniq -c|sort -n|tail -n 1 -
4
將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。
# cat /etc/passwd|sort -n -t: -k3|tail -n 10|tr [a-z] [A-Z] > /tmp/etc.conf -
5
取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
# ifconfig |grep “inet addr” |cut -d: -f2|cut -d’ ‘ -f1 -
6
列出/etc目錄下所有以.conf結尾的文件的文件名,并將其名字轉換為大寫后保存至/tmp/etc.conf文件中。
# ls /etc/*.conf|tr [a-z] [A-Z] > /tmp/etc.conf -
7
顯示/var目錄下一級子目錄或文件的總個數。
# ls /var | wc -l -
8
取出/etc/group文件中第三個字段數值最小的10個組的名字。
# cat /etc/group|sort -n -t: -k3|head -n 10|cut -d: -f1 -
9
將/etc/fstab和/etc/issue文件的內容合并為同一個內容后保存至/tmp/etc.test文件中。
# cat /etc/fstab /etc/issue > /tmp/etc.test
-10
用戶及組管理命令概敘,
主要 – 1 用戶的增,刪,改,查:useradd,userdel,usermod,id
– 2 組的增,刪,改,查 : groupadd,groupdel,groupmod,id
– 3 用戶及組的密碼管理
用戶密碼:passwd
組密碼:gpasswd
~ (1) 創建組distro,其GID為2016; # groupadd -g 2016 distro ~ (2) 創建用戶mandriva, 其ID號為1005;基本組為distro; # useradd -u 1005 -g distro mandriva ~ (3) 創建用戶mageia,其ID號為1100,家目錄為/home/linux; # useradd -u 1100 -d /home/linux mageia ~ (4) 給用戶mageia添加密碼,密碼為mageedu; # echo mageedu|passwd --stdin mageia ~ (5) 刪除mandriva,但保留其家目錄; # userdel mandriva ~ (6) 創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin; # useradd -u 2002 -g distro -G peguin slackware ~ (7) 修改slackware的默認shell為/bin/tcsh; # usermod -s /bin/tcsh slackware ~ (8) 為用戶slackware新增附加組admins; # usermod -G admins slackware ~ (9) 為slackware添加密碼,且要求密碼最短使用期限為3天,最長為180天,警告為3天; # passwd -n 3 -x 180 -w 3 slackware ~ (10) 添加用戶openstack,其ID號為3003, 基本組為clouds,附加組為peguin和nova; # useradd -u 3003 -g clouds -G peguin,nova openstack ~ (11) 添加系統用戶mysql,要求其shell為/sbin/nologin; # useradd -r mysql -s /sbin/nologin ~ (12) 使用echo命令,非交互式為openstack添加密碼。 # echo "openstack" | passwd --stdin openstack
sed用法
-
1 sed作用
-
2 sed如何工作
-
3 sed詳細用法
sed用來處理什么
首先來看看man文檔中如何介紹sed
sed - stream editor for filtering and transforming text
其意是數據流編輯器,過濾并且改變文本.用于編輯文本的工具.
sed如何工作
-
sed工作機制
sed是數據流處理工具,每次只讀取一行數據,逐個讀取,并將其復制到內存中的特定空間,此空間是sed自己的工作車間,被稱為模式空間,即圖中parttern space。在模式空間中根據sed所指定的條件進行模式的匹配,可以匹配的行進行處理后,可能保留在模式空間中,可能直接打印至終端(stdout),這需要根據具體的編輯操作,如果不能匹配的行則不處理,保留在模式空間中,在下一行讀入數據之前,將模式空間中還保存的數據打印至標準輸出(stdout).一直循環此機制到條件對應的行.
sed詳細用法
sed [OPTION]... 'scripts' [file]... scripts:指的是sed命令匹配的標準,格式為"{[地址定位][編輯命令]}",即{[address-range][sed-command]}. OPTION: -n:不輸出模式空間的內容至屏幕; -e script, --expression=script: 多點編輯; -f /PATH/TO/SED_SCRIPT_FILE 直接運行sed腳本文件編輯,每行一個編輯命令 -r, --regexp-extended:支持使用擴展正則表達式; -i : 直接編輯原文件; 地址定位: 空地址:對全文進行處理;相當于1,$; #: 特定的第#行,例如5行即匹配第5行; $: 最后一行; /pattern/:被模式所匹配到的每一行; /pattern/,/pattern/: 從第一次模式匹配到的行開始,到第二次模式匹配到的行為止; #,/pattern/: 第#行到第一次模式匹配到的行為止; #,#: 指定行范圍,左側為起始行,右側為結束行; #,+#: 指定行范圍, 左側為起始行,右側為以左側為標準的偏移量; 例如: 3,+7 第三行至第十行 1,$ 第一行至最后一行 步進:~ 1~2:所有奇數行 2~2:所有偶數行 編輯命令: d:刪除; p:顯示模式空間內容; a \text:在行后面追加文本"text",支持使用\n實現多行追加; i \text:在行前面插入文本"text",支持使用\n實現多行插入; c \text: 把匹配到的行替換為此處指定的文本"text"; w /path/to/filename:將當前模式空間所匹配的行寫入到指定文件中; r /path/to/filename:讀取指定文件至匹配行的后面;可做文件合并; =:為模式匹配到的行打印行號;每個行號獨占一行; !:條件取反; 地址定位!編輯命令; 例如:'$!d',最后一行不刪除; s///:查找替換,其分隔符可自行指定,常用的有s$$$,s###等; 替換標記: g:全局替換; w:/path/to/somefile:將替換成功的結果保存至指定文件中; p:顯示替換成功的行;
example:
將/etc/hosts文件打印,為什么會每行顯示兩遍呢,其實就是sed工作機制,首先將一行讀入,根據條件是全文匹配,因此第一行直接打印至終端,然后再將模式空間保留原有的行再打印一次,因此便是兩行。 # sed 'p' /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 使用-n選項不打印模式空間的行,只顯示處理之后的行 # sed -n 'p' /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
創建一個測試文件/tmp/test
]# cat > /tmp/test # 1 # 2 # 3 # 4 # 5 刪除: 刪除/tmp/test第一行至第3行 ]# sed '1,3d' /tmp/test # 4 # 5 刪除/tmp/test第一行到三行以后,即到第四行 ]# sed '1,+3d' /tmp/test # 5 刪除/tmp/test全文 ]# sed '1,$d' /tmp/test 或者 ]# sed 'd' /tmp/test ]# 刪除/tmp/test奇數行,因此顯示偶數行 ]# sed '1~2d' /tmp/test # 2 # 4 刪除/tmp/test偶數行,因此顯示奇數行 ]# sed '2~2d' /tmp/test # 1 # 3 # 5 不刪除最后一行/tmp/test,并其顯示行號 ]# sed '$!d;=' /tmp/test 5 # 5
第二個測試文件/tmp/test_1
]# cat > /tmp/test_1 # 1 @ 2 # 3 @ 4 $ 5 在$符號開頭的行后添加兩行文本'test_1'和'test_2' ]# sed '/^\$/a \test_1 \ntest_2' /tmp/test_1 # 1 @ 2 # 3 @ 4 $ 5 test_1 test_2 將/tmp/test_2中文件內容讀到/tmp/test_1文件末尾 ]# sed 'r /tmp/test w /tmp/test_2' /tmp/test_1 # 1 @ 2 # 3 @ 4 $ 5 # 1 # 2 # 3 # 4 # 5 將非#開頭的行的行首修改為#,且僅顯示修改成功的行 ]# sed -n 's/^[^#]/#/p' /tmp/test_1 # 1 # 2 # 3 # 4 # 5 將所有非#的字符替換成#,并顯示替換成功的行 ]# sed -n 's/[^#]/#/gp' test_1 ### ### ### ### ### 將前三行所有非#字符替換成#,顯示成功替換的行,并且顯示4,5行 ]# sed -n -e '1,3s/[^#]/#/gp' -e '4,5p' test_1 ### ### ### @ 4 $ 5
高級使用:
在sed工作空間中,不僅僅只有parttern spacc,還有hold space,即保持空間。
以下是其使用:
高級編輯命令(僅做了解): h H : 覆蓋/追加從模式空間到保持空間; g G :覆蓋/追加從保持空間到模式空間; n N :覆蓋/追加讀取匹配到的行的下一行至模式空間中; d:刪除模式空間中的行; D: 刪除模式空間中的所有行; x:交換兩個空間的內容;
-
sed模式空間與保持空間
由于sed有兩個內存空間,且開始都是空的,便可以允許數據之間的交換,此處只是初步知曉其操作即可。以下有實例:
example: sed 'G' FILE:在原有的每行后方添加一個空白行; sed '1!G;h;$!d' FILE:逆序顯示文件的內容; sed 'n;d' FILE:顯示奇數行; sed '$!N;$!D' FILE:取出文件后兩行;
原創文章,作者:N25_sadan,如若轉載,請注明出處:http://www.www58058.com/64133