selinux 和 awk的使用

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

(0)
上一篇 2018-05-15 11:14
下一篇 2018-05-15 11:55

相关推荐

  • 简述一下TCP三次握手四次挥手

    TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6。 原则上任何数据传输都无法确保绝对可靠,三次握手只是确保可靠的基本需要。 TCP三次握手 TCP建立连接为什么是三次握手,而不是两次或四次? 个人理解:因为要双方都要确定对方的网络没毛病,通讯正常。 还有一个网上看到的说法,我觉得很有意思: 我:1+1等于几? 她:2,2+2等于几? 我:4 …

    2018-04-30
  • 07 标准I/O和重定向

    三种写法总结: cmd $ all.log(较新系统的写法) cmd >all.log 2&1 (最常用写法) cmd 2>all.log 1>&2

    Linux笔记 2018-04-05
  • CentOS系统Shell编程语言基础之Bash的基础特性

    bash的基础特性之命令历史: 命令历史:shell进程会在其会话中保存此前用户提交执行过的命令~]#history定制history的功能,可通过环境变量实现HISTSIZE:shell进程可保留的命令历史的条数HISTFILE:持久保存命令历史的文件, “.bash_history”HISTFILESIZE:命令历史文件的大小 命令用法: history…

    Linux笔记 2018-06-27
  • 网络通信安全基础、openssl、openssh

    数据安全分为: 保密性:数据保密性、隐私性 完整性:数据完整性、系统完整性 可用性:数据有效性   安全攻击分为: 被动攻击:窃听 主动攻击:伪装、重放、消息篡改、拒绝服务   安全机制: 加密、数字签名、访问控制、数据完整性、认证交换机制、流量填充、路由控制、公证   安全服务: 认证: 访问控制: 数据保密性:连接、无连接、…

    Linux笔记 2017-12-06
  • grep命令 | 正则表达式

    date -s “2018-4-7”

    2018-04-07
  • 第二周作业

    第二周

    Linux笔记 2018-05-20