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
下一篇 2018-05-15

相关推荐

  • 脚本练习题

    1.使用脚本打印出如下图形 ************答案一:#!/bin/bash#1.接受一个参数为星星的个数。num=$1 #2.求出总共要打印的行数let lines=num*2 #3.for 循环处理每一行的数据for i in `seq $lines`;do#4.前半个星星处理逻辑if [ $i -le $num ];thenfor j in `s…

    Linux笔记 2018-03-26
  • Homework_week1

    一、描述计算机的组成及其功能 计算机是由运算器、控制器、存储器、输入设备、输出设备五大部件组成,每个部件的功能如下:运算器:完成各种算术运算和逻辑运算的装置,能进行加、减、乘、除等数学运算,也能作比较、判断、查找、逻辑运算等; 控制器:控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊的进行操作及处理;…

    2018-06-20
  • 二进制编译MariaDB

    安装环境 iptables selinux mariadb-server 卸载 创建账号 useradd -r -d /data/mysqldb -s /sbin/nologin mysql 解压缩 tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local/ 创建软链接 cd /usr/local l…

    Linux笔记 2018-06-10
  • linux文件管理命令和bash展开式

    文件管理 展开式

    Linux笔记 2018-05-21
  • xDroid——一款能够让Android应用程序运行在Linux中的软件

    Linux的生态环境,长久以来一直困扰着广大Linux爱好者。
    虽然Linux具有显著的稳定性、安全性和健壮性优势,但它对使用者计算机水平的高门槛要求,以及应用开发回报慢的问题,始终限制了应用开发者在Linux上的积极投入,由此带来了Linux环境下应用程序少、开发工具少、使用不方便等诸多问题。
    怎么能让Linux向Android一样,拥有数量众多的应用呢?

    Linux笔记 2018-07-02