net25 第15周作业

栏目: 服务器 · 发布时间: 7年前

内容简介:net25 第15周作业

1、总结sed和awk的详细用法;

SED

sed模式空间
默认不编辑源文件,仅对模式空间中的数据做处理:而后,处理结束后,将模式空间打印屏幕

sed [options]'address+command' file...
-n:静默模式,不再默认显示模式空间的内容
-i:直接修改原文件
-e script -e script 同时执行多个脚本
-f /path/to/script file
-r :表示使用扩展正则表达式
address:
1.startline,endline
比如1,100
2./regexp/
/^root/
3./pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所以行
4.linenumber
指定行
5.startline,+N
从startline开始,向后的n行
6.步进行
 1~2  奇数行
 2~2  偶数行
7.$ 最后一行

command:
d:删除符合条件的行
P: 显示符合条件的行
a \string:在指定的行后面追加新行,内容为“string”
i \string:在指定的行前面追加新行,内容为“string”
c \string:将匹配到的的行替换为此处指定的文本text
r file:文件合并
w file:将地址指定的范围内的行另存为至指定文件中
=:为模式匹配到的行数的行打印行号
!取反
地址定界!编辑命令
s/pattern/string/修饰符:查找并替换,默认只替换每一行被模式匹配到的字符串
加修饰符
g:全局替换
i:忽略字符大小写
w /path/to/somefile:将替换成功的结果保存至指定文件中
p:显示替换成功的行
s///=s###=s@@@
\(\),\1,\2  sed ‘s/l..k/&r/g’  sed 's/\(l..k\)/\1r/g '
&:引用匹配模式的整个串



高级编辑命令
h:表示把模式空间的内容保存至保持空间
H:把模式空间中的内容追加至保持空间
g:把保持空间的内容覆盖至模式空间
G:把保持空间的内容追加至模式空间
x:把模式空间的内容与保持空间中内容互换
n:读取匹配到行的下一行至模式空间
N: 追加读取匹配到的行的下一行至模式空间中
D:删除多行模式空间中所有行

AWK

内建变量

FS:input field seperator,默认为空白字符

OFS:output field seperator,默认为空白字符

RS:input record seperator,输入时的换行符

ORS:outpout record seperator,输出时的换行符

NF:number of filed,字段数量 {print NF},{print $NF}

NR:number of record,行数

FNR:各文件分别计数,行数

FILENMAE当前文件名字

ARGC: 命令行参数的个数

ARGV: 数组,保存的是命令行所给定的各参数

printf命令

格式化输出:printf format,item1,item2...

(1)format必须给出
(2)不会自动换行,需要显式给出换行符,\n
(3)format中需要分别为后面的每个item指定一个
格式化符号

%c:显示字符串的ascii码
%d,%i:显示十进制整数
%e,%E:科学计数法数值显示
%f,显示为浮点型
%g,%G:以科学计数法或浮点型形式显示数值
%s:显示字符串
%u:无字符串
%%:显示%本身

条件表达式:

selector?if-true-expression:if-false-expression

eg:

awk -F: '{$3>=1000?usertype='common user':usertype="system admin";printf "%15s:%-s\n",$1,usertype}'
awk -F: 'printf "%15s:%-s",%1,(%3>1000?"common user":"system user")'
pattern

(1)empty 空模式,匹配每一行
(2)/regular expression/:仅处理能够被此处的模式匹配到的行
(3)relational expression:关系表达式,结果有“真”有“假”,结果为真才会处理
eg:

awk -F':' '$NF==/bin/bash {print $1,$NF}' /etc/passwd
awk -F':' '$NF~/bash$/ {print $1,$NF}' /etc/passwd
line range:行范围
startline,endline:/pat1/,/pat2/

注意;不支持直接给出数字的格式

~]# awk -F : '(NR>=2&&NR<=10){print $1}' /etc/passwd

BEGIN/END模式

BEGIN{}:仅在开始处理文件中文本之前执行一次 END{}:仅在文本处理完成之后执行一次

常见的action

(1)expression
(2)control statements: if,while等
(3)compound statement:组合语句
(4)input statement
(5)output statement

控制语句

if(condition){statment}

if(condition){statment} else {statement}

while(condition){statement}

do{statement} while(codition)

for(exp1,exp2,exp3){statement}

break

continue

delete arry[index]

delete arry

exit

{statement}

if-else

语法:if(condition) statement [else statement]

awk -F: '{if($3>1000) print $1,$3}' /etc/passwd
awk -F: '{if($3>=1000) {printf "common user: %s\n",$1} else {printf "root or system:%s\n",$1} }' /etc/passwd
使用场景:对awk取得的整行或某个字段做条件判断;

while循环
语法:while(condition) statement

使用场景:对一行内的多个字段逐一类似处理时使用,对数组中逐一处理时使用

awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}' /boot/grub2/grub.cfg
awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>7){print $i,length($i)}; i++}}' /boot/grub2/grub.cfg
do-wile循环
语法:do statement while(condition)

意义;至少执行一次循环

for循环
语法:for(epr1;epr2;epr3) statement

awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /boot/grub2/grub.cfg
awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {if(length($i) > 7){print $i,length($i)}}}' /boot/grub2/grub.cfg
特殊用法:

能够遍历数组中的元素:

语法: for(var in arry) (for-body)

switch语句
语法:switch(expression){case VALUE or /REGEXP/:statement;case VALUE2 or /REGEXP2/: statement;...;default:statement}

break和continue
break [n] continue

next 提前结束对本行的处理而直接进入下一行
awk -F: '{if($3%2!=0) next;print $1,$3}' /etc/passwd
awk 数组
关联数组:array[index-expression]

index-expression:

(1)可使用任意字符串,字符串要加双引号
(2)如果某组元素事先不存在,在引用时,awk会自动创建此元素,并将某值初始化为“空串”:
若要判断数组中是否存在某元素,要使用“index in array”格式进行

若要遍历数组中的每个元素,要使用for循环

awk 'BEGIN{weekdays["mon"]="monday";weekdays["tue"]="tuesday";for(i in weekdays) {print weekdays[i]}}'
注意:var会遍历array的每个索引

netstat -nta | awk '/^tcp\>/{state[$NF]++}END{for(i in state){print i,state[i]}}'
统计指定文件中每个单词出现的次数

awk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}' /etc/fstab

2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符;

vim: %s@^[[:space:]]+@@g

sed:sed -i -r ‘s/^[[:space:]]+//g’ /boot/grub/grub.conf

3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符;

vim: %s@^#[[:space:]]+@@g

sed: sed -i -r ‘s/^#[[:space:]]+//g’ /etc/fstab

4、把/etc/fstab文件的奇数行另存为/tmp/fstab.3;

sed: sed -n ‘1~2p’ /etc/fstab > /tmp/fstab.3

sed: sed ‘n;d’ /etc/fstab > /tmp/fstab.3

5、echo一个文件路径给sed命令,取出其基名;进一步地,取出其路径名;

echo “/etc/fstab/tab” | sed -r -n ‘s@^/.*/([^/]+$)@\1@p’

echo “/etc/fstab/tab/tab1” | sed -r -n ‘s@(^/.*/)[^/]+$@\1@p’

6、统计指定文件中所有行中每个单词出现的次数;

awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}’ /boot/grub/grub.conf

7、统计当前系统上所有tcp连接的各种状态的个数;

netstat -nta | awk ‘/^tcp>/{count[$6]++}END{for(i in count){print i,count[i]}}’

8、统计指定的web访问日志中各ip的资源访问次数:

awk ‘{count[$1]++}END{for(i in count){print i,count[i]}}’ access.log

9、写一个脚本:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;显示每个文件的行数;

#!/bin/bash
declare -A logs
for i in `ls /var/log/*.log`;do
    log_lines=`wc -l $i`
    logs[$i]=$log_lines
    echo "${logs[$i]}"
done

10、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,做为要挑选的同学的个数;

#!/bin/bash

if [ $1 ];then
    for((i=1;i<=$1;i++));then
        a=$[$RANDOM%11]
        echo $a
else
    a=$[$RANDOM%11]
    echo $a
fi

11、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;

visudo

centos   ALL=(root)   NOPASSWD:/usr/sbin/fdisk  /usr/sbin/mkfs /sbin/mke2fs

12、授权gentoo用户可以运行逻辑卷管理的相关命令;

visudo
Cmnd_Alias LVM=/sbin/pvcreate  /sbin/vgcreate /sbin/lvcreate /sbin/vgextend /sbin/lvextend

gentoo ALL=(root) NOPASSWD:LVM

13、基于pam_time.so模块,限制用户通过sshd服务远程登录只能在工作时间进行;

~]# vim /etc/pam.d/sshd 
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    required     pam_time.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth

~]# /etc/security/time.conf
sshd;*;root;Wk0900-1800

14、基于pam_listfile.so模块,定义仅某些用户,或某些组内的用户可登录系统;

]# vim sshd 
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    required     pam_listfile.so item=user sense=allow  file=/etc/user_allow onerr=succeed
account    required     pam_time.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth

~]# vim /etc/user_allow
root

~]#chmod 600 /etc/user_allow

以上所述就是小编给大家介绍的《net25 第15周作业》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hacking Growth

Hacking Growth

Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00

The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具