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运维部落立场,如若转载,请注明出处:http://www.178linux.com/98572