1、總結sed和awk的詳細用法; sed [OPTION]... 'script' [input-file] ... script: 地址定界編輯命令 常用選項: -n:不輸出模式空間中的內容至屏幕; -e script, --expression=script:多點編輯; -f /PATH/TO/SED_SCRIPT_FILE 每行一個編輯命令; -r, --regexp-extended:支持使用擴展正則表達式; -i[SUFFIX], --in-place[=SUFFIX]:直接編輯原文件 ; ~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab 地址定界: (1) 空地址:對全文進行處理; (2) 單地址: #:指定行; /pattern/:被此模式所匹配到的每一行; (3) 地址范圍 #,#: #,+#: #,/pat1/ /pat1/,/pat2/ $:最后一行; (4) 步進:~ 1~2:所有奇數行 2~2:所有偶數行 編輯命令: d:刪除; p:顯示模式空間中的內容; a \text:在行后面追加文本“text”,支持使用\n實現多行追加; i \text:在行前面插入文本“text”,支持使用\n實現多行插入; c \text:把匹配到的行替換為此處指定的文本“text”; w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中; r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;文件合并; =:為模式匹配到的行打印行號; !:條件取反; 地址定界!編輯命令; s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等; 替換標記: g:全局替換; w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中; p:顯示替換成功的行; 2、刪除/boot/grub/grub.conf文件中所有行的行首的空白字符; sed 's/^[[:space:]]//g' /boot/grub/grub.conf 3、刪除/etc/fstab文件中所有以#開頭,后跟至少一個空白字符的行的行首的#和空白字符; sed 's/^#[[:space:]]\+//' /etc/fstab 4、把/etc/fstab文件的奇數行另存為/tmp/fstab.3; sed 'n;d' /etc/fstab >>/tmp/fstab.3 5、echo一個文件路徑給sed命令,取出其基名;進一步地,取出其路徑名; echo /etc/fstab/ | sed -r 's@^/.*/([^/]+)/?$@\1@g' echo /etc/fstab/ | sed -r 's@[^/]+/?$@@g' 6、統計指定文件中所有行中每個單詞出現的次數; awk '{for(i=1;i<=NF;i++) {word[$i]++}}END{for(i in word) {print i,word[i]}}' /etc/fstab 7、統計當前系統上所有tcp連接的各種狀態的個數; netstat -tan|awk '/^tcp\>/{state[$NF]++}END{for(i in state){print i,state[i]}}' 8、統計指定的web訪問日志中各ip的資源訪問次數: awk '{ip[$1]++}END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log 9、寫一個腳本:定義一個數組,數組元素為/var/log目錄下所有以.log結尾的文件的名字;顯示每個文件的行數; #!/bin/bash filelist=$(ls /var/log/*.log) for line in ${filelist[*]};do echo $line wc -l ${line} done #!/bin/bash filelist=$(ls /var/log/*.log) for i in $(seq 0 $[${#filelist[*]}-1]);do echo ${filelist[$i]} wc -l ${filelist[$i]} done 10、寫一個腳本,能從所有同學中隨機挑選一個同學回答問題;進一步地:可接受一個參數,做為要挑選的同學的個數; #!/bin/bash # echo "student Name student NO" for i in {1..10};do stu[$i]=stu_$i echo "${stu[$i]} $i" done j=$[$RANDOM % 10+1] echo "Random picked student No:$j" echo "The student name is :${stu[$j]}" 可接受一個參數,做為要挑選的同學的個數; #!/bin/bash # read -p "Please Input student Numbers:" num echo "student Name student NO" for ((i=1;i<=$num;i++))do stu[$i]=stu_$i echo "${stu[$i]} $i" done j=$[$RANDOM % $num+1] echo "Random picked student No:$j" echo "The student name is :${stu[$j]}" 11、授權centos用戶可以運行fdisk命令完成磁盤管理,以及使用mkfs或mke2fs實現文件系統管理; vim /etc/sudoers centos ALL=(root) NOPASSWD:/sbin/fdisk,/sbin/mke2fs,/sbin/mkfs 12、授權gentoo用戶可以運行邏輯卷管理的相關命令; vim /etc/sudoers gentoo ALL=(root) lvm 13、基于pam_time.so模塊,限制用戶通過sshd服務遠程登錄只能在工作時間進行; vim /etc/ssh/sshd_config UsePAM noUsePAM yes #開啟Pam模塊認證 vim /etc/pam.d/sshd /lib64/security/pam_time.so 確保pam_time.so存在 vim /etc/pam.d/sshd account required pam_time.so vim /etc/security/time.conf *;*;*;MoTuWeThFr0900-1800 14、基于pam_listfile.so模塊,定義僅某些用戶,或某些組內的用戶可登錄系統; [root@localhost ~]# vim /etc/sshd_userlist root centos gentoo chmod 600 /etc/sshd_userlist chown root /etc/sshd_userlist vim /etc/pam.d/sshd #auth required pam_listfile.so item=user sense=allow file=/etc/sshd_userlist onerr=succeed
原創文章,作者:N22_上海_長清,如若轉載,請注明出處:http://www.www58058.com/63630
贊,第7題可以用格式化的方式來做,而不是敲很多空格~