第八周笔记

selinux 和 awk的使用

SELinux工作类型 :

strict: centos5,每个进程都受到selinux的控制

targeted: 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易 被入侵的进程,centos4只保护13个服务,centos5保护88个服务

minimum:centos7,修改的targeted,只对选择的网络服务

mls:提供MLS(多级安全)机制的安全性

targeted为默认类型,minimum和mls稳定性不足,未加以应用,strict已不再 使用

SELinux安全上下文

安全上下文有五个元素组成:

user:role:type:sensitivity:category (理论上有五项)

user_u:object_r:tmp_t:s0:c0 (实际上只有四项)

查看某个文件的安全上下文标签:

ls -Z +文件名

默认的上下文存放在二进制的SELinux策略库里面:

semanage fcontext –l

设置SELinux

SELinux的状态:

enforcing: 强制,每个受限的进程都必然受限

permissive: 允许,每个受限的进程违规操作不会被禁止,但会被记录于审 计日志

disabled: 禁用 selinux

相关命令:

getenforce: 获取selinux当前状态

sestatus :查看selinux状态

setenforce 0|1

0: 设置为permissive (禁用)

1: 设置为enforcing (半禁用状态)

配置文件: (下面两个地址一个为软连接的地址)

/etc/selinux/config

/etc/sysconfig/selinux

在配置文件里将selinux禁用设定为disabled后必须要重启才能生效。

一般都会将selinux禁用

 

 

awk

有多种版本:New awk(nawk),GNU awk( gawk) (centos用的是gawk)

awk为对文本文件逐行扫描处理的文本报告生成器 (无法对文件进行修改)

基本格式:

以:作为分割符取每一行的第一个和第二个位置变量(既取的是以:为分割的第一部分和第二部分的字符串)

awk -F: ‘{print $1,$2}’ /etc/passwd (输出格式中默认为空格为分割)

awk -F: ‘{print $1:$2}’ /etc/passwd (输出格式中可自定义为:为分割)

如果输出有$0则代表输出整行。

awk的内置变量

FS:输入字段分隔符,默认为空白字符

awk -v FS=’:’ ‘{print $1,FS,$3}’ /etc/passwd (输出是如果不加FS在中间默认为空格)

OFS:输出字段分隔符,默认为空白字符

awk -v FS=‘:’ -v OFS=‘:’ ‘{print $1,$3,$7}’ /etc/passwd (此为输入输出定义,输入时以: 为分割符,输出时也是以 : 为分割符显示的因为OFS定义了,也可自定义为别的字符作为分割)

RS:输入记录分隔符,指定输入时的换行符 (默认为换行符作为一行的结束,但也可自定义

awk -v RS=’ ‘ ‘{print }’ /etc/passwd (输入时以空格为换行标准来进行读取)

ORS:输出记录分隔符,输出时用指定符号代替换行符

awk -v RS=’ ‘ -v ORS=’###’‘{print }’ /etc/passwd

NF:字段数量

awk -F: ‘{print NF}’ /etc/fstab (查看一行总共分割为几个部分)

awk -F: ‘{print $NF}’ /etc/fstab (查看倒数第一个部分的内容)

awk -F: ‘{print $(NF-1)}’ /etc/passwd (查看倒数第二个部分的内容)

NR:添加行号的变量

awk ‘{print NR}’ /etc/fstab (只输出行号,可以在后面添加输出 的位置变量$1 ,$2等)

FNR:各文件分别计数,记录号

awk ‘{print FNR}’ /etc/fstab /etc/inittab (两个文件分别统计,不混在一起来统计)

ARGC:命令行参数的个数

awk ‘{print ARGC}’ /etc/fstab /etc/inittab (此命令的参数有三个 awk , /etc/fatab, /etc/inittab)

awk的自定义变量

自定义变量(区分字符大小写:)

示例:

awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab (输出的结果是,每处理一行/etc/fstab/文件则打印一行test变量赋值的内容“hello gawk” 后面的变量不用加$符号来引用

awk -v test=’hello gawk’ ‘BEGIN{print test}’ (只输出一行变量的内容,因为有BEGIN)

awk ‘BEGIN{test=”hello,gawk”;print test}’ (也可在输出是定义变量)

awk –F: ‘{sex=“male” ;print $1,sex,age;age=18}’ /etc/passwd (如果变量在后面,则第一行输出不包含)

也可以将输出格式的放在文件里然后引用即可

vim pass.awk

{print $1,$2}

awk -F: -f pass.awk /etc/passwd (使用时引用即可)

printf命令

格式化输出:printf

(1) 必须指定FORMAT (格式)

(2) 不会自动换行,需要显式给出换行控制符,\n

%c: 显示字符的ASCII码

%d, %i: 显示十进制整数

%e, %E:显示科学计数法数值

%f:显示为浮点数

%g, %G:以科学计数法或浮点形式显示数值

%s:显示字符串需要输出占用的长度

%u:无符号整数

%%: 显示%自身

修饰符

-: 左对齐(默认右对齐) %-15s (输出15个的空格-为左对齐,不写默认为右对齐)

例题:

awk -F: ‘{printf “%-20s-%-d\n”,$1,$2}’ /etc/passwd ($1$2输出时按“”里的定义格式来输出,%20s-%d\n

-前面的内容定义$1的输出格式,-后面的内容定义$2输出的格式,\n为指定结束要换行的换行符)

打印表头 awk BEGIN'{USER PASSD}’ 添加到上面的命令即可

awk -F: ‘{printf “Username: %s,UID:%d\n”,$1,$3}’ /etc/passwd (通常来说第一个%来定义第一个变量的格式,第二%来定义第二个变量的格式)

操作符

算术操作符

x+y, x-y, x*y, x/y, x^y, x%y 都可以

比较操作符

==, !=, >, >=, <, <=

模式匹配符:

~ 左边是否和右边匹配包含

!~ 是否不匹配 (匹配的字符要写在//中间,支持正则表达式)

示例:

awk –F: ‘$0 ~ /root/{print $1}‘ /etc/passwd ($0为整行,匹配有root的行,输出$1)

awk ‘$0~“^root”‘ /etc/passwd (匹配以root开头的行,默认输出$0 既整行可以不用写)

awk ‘$0 !~ /root/‘ /etc/passwd (取反)

awk –F: ‘$3==0’ /etc/passwd (取$3为0的那一个整行)

逻辑操作符

与&&,或||,非! (普通的与或非)

示例:

awk –F: ‘$3>=0 && $3<=1000 {print $1}’ /etc/passwd (并且的意思,要满足两个条件)

awk -F: ‘$3==0 || $3>=1000 {print $1}’ /etc/passwd (或 ,只要满足其中的一个条件)

awk -F: ‘!($3==0) {print $1}’ /etc/passwd (字符判断相等的然后取反)

awk -F: ‘!($3>=500) {print $3}’ /etc/passwd (大于等于然后取反)

函数调用: function_name(argu1, argu2, …)

条件表达式(三目表达式):

selector?if-true-expression:if-false-expression (如果判断的selector?为真,则执行if-true-expression反之则执行if-false-expression他们中间用:隔开)

案例:

awk -F: ‘{$3>=1000?usertype=”Common User”:usertype=”Sysadmin or SysUser”;printf “%15s:%-s\n”,$1,usertype}’ /etc/passwd (如果判断为真则使用第一个变量赋值,为假则相反。然后按照下面的格式打印输出两个变量)

行范围选择

awk -F: ‘/^root\>/,/^nobody\>/{print $1}’ /etc/passwd

awk -F: ‘(NR>=10&&NR<=20){print NR,$1}’ /etc/passwd

awk控制语句

break (结束整个循环操作)

continue (结束当前此次循环,不做任何操作,下此循环继续)

if-else 控制语句

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 Sysuser: %s\n”,$1}}’ /etc/passwd (双分支语句判断,并且输出格式定义)

while循环 控制语句

条件“真”,进入循环;条件“假”,退出循环

awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}’ /etc/grub2.cfg

(行首为空或没有空格 中间有linux16字符的行进行读取,然后i为变量NF为分割字段的个数,length($i)为判断每个分割后的字段的长度 ,i++ 循环直到判断变量i大于分割字段的个数NF,则结束输出。实际意义是;取出每行以空格隔开的每个字段和其长度)

do-while循环 控制语句

无论真假,至少执行一次循环体

awk ‘BEGIN{ total=0;i=0;do{ total=total+i;i++;}while(i<=100);print total}’ (带BEGIN的为测试输出,不需要添加文件,;求1+….100的和,首先初始化赋值给两个变量,i为循环相加的变量,total为总值,直到i<=100则停止相加,awk里可以使用各种运算方法)

for循环控制语句

awk ‘BEGIN{ total=0;for(i=0;i<=10000;i++){total+=i;};print total;}’(求1+….1000的和)

break和continue

awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i%2==0)continue;sum+=i}print sum}’

(0-100的奇数相加)

awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i==66)break;sum+=i}print sum}’

(到66则循环退出,既1+…65的值)

next: 提前结束对本行处理而直接进入下一行处理(awk自身循环)

awk -F: ‘{if($3%2!=0) next; print $1,$3}’ /etc/passwd

awk数组

(1) 可使用任意字符串;字符串要使用双引号括起来

(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值 初始化为“空串”

若要判断数组中是否存在某元素,要使用“index in array”格式进行遍历

awk ‘BEGIN{weekdays[“mon”]=”Monday”; weekdays[“tue”]=”Tuesday”;print weekdays[“mon”]}’

awk函数

sub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并将第一个匹配的内容替换为s

echo “2008:08:08 08:08:08” | awk ‘sub(/:/,“-“,$0)’ (只替换第一个)

gsub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并全部替换为s所表示的内容

echo “2008:08:08 08:08:08” | awk ‘gsub(/:/,“-“,$0)’ (全局替换)

echo “yd$C@M05MB%9&Bdh7dq+yVixp3vpw” | awk ‘gsub(/[^[:digit:]]/,” “,$0)’ (提取出数字)

awk中调用shell命令

空格是awk中的字符串连接符,如果system中需要使用awk中的变量可以使用 空格分隔,或者说除了awk的变量外其他一律用””引用起来。

awk BEGIN'{system(“hostname”) }’

awk ‘BEGIN{score=100; system(“echo your score is ” score) }’

awk中调用shell命令,shell的命令需要用双引号引起来,自身的变量不需要引起来,如果自身变量夹在shell命令中间,需要用两个双引号分开。如下面:

awk ‘BEGIN{score=100;system(“echo your” score “score is”)}’(将awk的自身的变量隔开)

将AWK写成脚本直接调用

vim f2.awk (编辑脚本文件)

#!/bin/awk –f (基于awk机制编写的脚本)

#this is a awk script (描述信息可以不要)

{if($3>=1000)print $1,$3}

chmod +x f2.awk (给脚本加上执行权限)

f2.awk –F: /etc/passwd

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:/98572

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐开户  万达注册  万达开户  guoqibee.com  万达注册  万达娱乐招商  万达娱乐直属QQ  万达直属  万达娱乐直属QQ  guoqibee.com