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.178linux.com/63630


评论列表(1条)
赞,第7题可以用格式化的方式来做,而不是敲很多空格~