首页 > 代码库 > awk,systemctl,破解7root口令

awk,systemctl,破解7root口令

awk

-F 指明输入时用到的字段分隔符

默认空格为分隔符

-v 自定义变量


基本格式:awk [options] ‘program‘ file

$1,$2..$n称为域标识,$0为所有域。

文件的每一行称为记录

awk ‘{print}‘ /etc/passwd

默认 print $0 显示全段

 技术分享

awk ‘BEGIN{print "hello,awd"}‘

awk ‘{print "hello,awd"}‘ 支持输入


df |awk ‘{print $5}‘

df |awk ‘{print $1,$5}‘ ,默认以空格隔开

df |awk ‘{print $1"\t"$5}‘


awk -F: ‘print $1,$3‘ /etc/passwd

-F: 用:号作为分隔符


awk变量

输入字段分隔符

awk -v FS=":" ‘{print $1}‘ /etc/passwd

技术分享

技术分享-v FS=":"  等于-F:

awk -v FS="bash" ‘{print $1}‘ /etc/passwd

技术分享


awk -v FS=":" -v OFS="+++"‘ ‘{print $1,$3,$4,$5}‘ /etc/passwd   定义输出时候的分隔符

技术分享 冒号分隔之后用+++替代分隔

awk -v FS=":" -v OFS="\t" ‘{print $1,$3,$4,$5}‘ /etc/passwd 

技术分享


awk -v RS=" " ‘{print $1,$2}‘ f1  输出将空格成为独立的行 记录的分隔符

技术分享

awk -v RS=" " -v OFS="---" -v ORS="***" ‘{print $1,$2}‘ f1        -v ORS="***" 这个替换的是回车换行

技术分享

NF  统计字段

awk -F: ‘{print NF}‘ /etc/passwd

技术分享

NF统计字段

awk -v FS=":" ‘{print $NF}‘ /etc/passwd  等于显示$7

技术分享

awk -v FS=":" ‘{print $(NF-1)}‘ /etc/passwd   等于显示$6

技术分享


NR 显示行号

awk -v FS=":" ‘{print NR,$0}‘ /etc/passwd 

技术分享

awk -v FS=":" ‘{print NR,$0}‘ /etc/passwd /etc/issue

技术分享


FNR 分开文件计算

awk -v FS=":" ‘{print FNR,$0}‘ /etc/passwd /etc/issue

技术分享

FILENAME 每一行打印出文件名

awk -v FS=":" ‘{print FILENAME,$0}‘ /etc/passwd /etc/issue

技术分享将文件名字和路径写在前面


ARGC 显示命令的参数

awk -v FS=":" ‘{print ARGC,$0}‘ /etc/passwd /etc/issue

技术分享


ARGV 查看那几个参数

awk -v FS=":" ‘{print ARGV[0]}‘ /etc/passwd /etc/issue  查看第一个参数 [0-2] 3个

技术分享

变量:内置和自定义变量

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

awk-v FS=‘:‘ ‘{print $1,$3,$7}’ /etc/passwd

awk–F: ‘{print $1,$3,$7}’ /etc/passwd

技术分享

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

awk -v FS=‘:’ -v OFS=‘:’ ‘{print $1,$3,$7}’ /etc/passwd

技术分享

    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-1)}‘ /etc/passwd

技术分享

技术分享显示的是倒数第二位等于显示$6

    NR:行号

awk ‘{print NR}‘ /etc/fstab; awk END‘{print NR}‘ /etc/fstab

技术分享1-12是etc/fstab的行数,54是/etc/passwd的行数

awk自定义变量

awk -F: -v name="supername" ‘{print name,$1}‘ /etc/passwd

里面定义的name="supername"

技术分享

awk -F: -v name="supername" -f bin/awk.sh /etc/passwd   -f可以调用

技术分享

技术分享

awk -F: ‘{name="superman";print name,$1}‘ /etc/passwd  定义多个变量

技术分享

printf 命令

格式符:与item一一对应

%c: 显示字符的ASCII码

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

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

%f:显示为浮点数

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

%s:显示字符串  

%u:无符号整数

%%: 显示%自身


awk -F: ‘{printf "%s %d\n ",$1,$3}‘ /etc/passwd

技术分享


awk -F: ‘{printf "%20s %10.2fd\n ",$1,$3}‘ /etc/passwd  %20字符宽度,默认右对齐,左对齐%-20  

%10.2f 宽度为10,显示后两位小数

技术分享

操作符号,+ - * / 都支持

awk ‘BEGIN{print 10*10}‘

技术分享

技术分享

awk -v i=1 ‘BEGIN{print i++,i}‘ 

显示1 2  i在前就显示i,++i就加完再打印

技术分享

$0~"$root" 默认包含root


awk -F: ‘$3==0‘ /etc/passwd

        ‘$3=="root"‘  数字可以不加""

技术分享

技术分享

三目表达式

awk -F: ‘{$3>=1000?username="commonuser":username="sysuser";printf "%s %s %d",username,$1,$3}‘ /etc/passwd


技术分享

模式过滤

没写模式默认全部处理


正则表达式

awk ‘/^UUID/‘ /etc/fstab

技术分享将UUID开头的句子显示出来

awk ‘/bash$/‘ /etc/passwd

技术分享将bash结尾的行显示出来


relational expression: 关系表达式;结果有“真”有“假”;结果为“真”才会被处理;

真:结果为非0值,非空字符串

假:结果为空字符串



awk -F: ‘/^root\>/,/^ftp\>/‘ /etc/passwd

/root/开头到 /ftp/开头

技术分享

awk -F:‘BEGIN{print "username uid"}/^root\>/,/^ftp/{print $1,$3}END{print "end file"}‘ /etc/passwd


技术分享print与printf的区别在前者负责的数据会自动换行


判定语句

seq 10|awk ‘i=!i‘

第一行i开始=0 !i=1 第二行i=1 !i=0 第三行重复第一行,所以只会显示单数行。

所以显示奇数值

技术分享

seq 10|awk ‘!(i=!i)‘

技术分享加非判断结果显示偶数行

seq 10|awk -v i=1 ‘i=!i‘

偶数值

技术分享一开始赋值就是1,非1等于0假不输出。

seq 10|awk ‘{i=!i;print i}‘  可以查看到i的值变化

技术分享

组合语句

if-else

if(条件){组合}else if(条件){组合}else(条件){组合}



awk -F: ‘{if($3>=1000)print $1,$3}‘ /etc/passwd

技术分享

将ID大于1000的用户名字和ID打印出来,-F:用:号来做分隔符。


多条件判定

awk ‘BEGIN{ test=100;if(test>90){ print "very good";}else if(test>60){ print "good";}else{ print "no pass";}}‘

技术分享根据数据判定


while循环

条件真进入循环,条件假退出循环


awk


do-while循环

语法:do statement while(condition)

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


awk在处理数值较大的时候速度比较有优势


技术分享

break和continue

break 直接退出循环

continue 直接跳过当次循环

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

技术分享执行循环,当偶数的时候就跳出,等于奇数双加


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

技术分享等于执行了10次的双加,第11次完全跳出循环

next

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

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

打印UUID为偶数的行

技术分享


awk数组

关联数组:array[index-expression]

index-expression:

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

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

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


awk ‘BEGIN{week[0]="sun";week[1]="mon"; print week[0]}‘

技术分享数组[0]的数值

awk ‘BEGIN{week["frist"]="sum";week["two"]="mon";print week["frist"]}‘

技术分享字符串要用“”引入,纯数字可以不加。


awk ‘!arr[0]++‘ f1  去重复

awk ‘{!arr[$0]++;print $0,arr[$0]}‘ f1


第一次![$0]=1 再++所以第一次是真 输出

第二次出现重复的时候[$0]=2取反就是假。所以不输出

技术分享

技术分享第二次出现的数值+1之后判定条件就为正数,!正数等于0,就不输出重复的行数了。


遍历数组


awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]

="Tuesday";for(i in weekdays) {print weekdays[i]}}‘

显示所有的组成员

技术分享

netstat -tan | awk‘/^tcp\>/{state[$NF]++}END

{for(i in state) { print i,state[i]}}‘

最后的参数遇到相同的后面+1

技术分享

awk ‘{state[$1]++}END{for(i in state){ print i,state[i]}}‘

技术分享

awk函数

awk ‘BEGIN{srand();print rand()}‘

生成随机数

技术分享

awk ‘BEGIN{srand();print int(rand()*100)}‘

生成整数随机数

技术分享

awk ‘BEGIN{srand(); for (i=1;i<=10;i++)print int(rand()*100) }‘

技术分享显示10个随机整数

sub/gsub  (替换单个/替换整行)

echo "2008:08:08 08:08:08" | awk‘sub(/:/,"",$1)‘

技术分享第一个冒号分隔符替换

echo "2008:08:08 08:08:08" | awk‘gsub(/:/,"",$1)‘   gsub整个替换

技术分享因为我输出的是$1,awk格式是默认空格为分隔号,所以替换$1的整行冒号。(这里$1=2008:08:08)


split($5,ip,":") ip这个组从[1]开始

netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}‘  得出IP地址和IP地址出现的次数

技术分享统计IP链接的次数

function函数调用

awk -f fun.awk 调用awk函数

使用就fun.awk

function max(v1,v2) {

v1>v2?var=v1:var=v2

return var

}

END{a=3;b=2;print max(a,b);}

技术分享

技术分享要加执行权限使用

脚本调用开头写

!/bin/awk -f  加上执行权限就能直接运行


awk中使用操作系统的指令


awk ‘BEGIN{system("hostname")}‘

awk ‘BEGIN{system("echo xxx")}‘

awk ‘BEGIN{name="zczx";system("echo " name)}‘

技术分享

awk脚本

#cat f1.awk

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

#awk -F: -f f1.awk /etc/passwd

技术分享


#cat f2.awk

#!/bin/awk –f

#this is a awk script

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

#chmod +x f2.awk

#f1.awk –F: /etc/passwd


传递参数

#cat f2.awk

#!/bin/awk –f

{if($3 >=min && $3<=max)print $1,$3}

#f2.awk -F: min=100 max=200 /etc/passwd

指定 -F: 为分隔符号



1、统计/etc/fstab文件中每个文件系统类型出现的次数# awk‘/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}‘ /etc/fstab

技术分享

2、统计/etc/fstab文件中每个单词出现的次数;

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

技术分享


systemd 7版本之后使用的管理系统的工具

红帽开发的守护进程

CentOS 5: SysVinit

CentOS 6: Upstart

CentOS 7: Systemd


Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程


最大特点:系统引导实现服务并行启动

在6版本以前版本都是串行启动,所以启动较慢


unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息

配置文件:

/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行

/etc/systemd/system:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行



cd /etc/systemd/system 如果要存放服务的时候,放在这个路径下比较安全

技术分享

systemclt

systemclt -t 可以查看unit类型

技术分享

automount 文件系统自动挂载

技术分享

系统服务的管理

systemctl 支持保全

命令:systemctlCOMMAND name.service

启动:service name start ==> systemctlstart name.service

停止:service name stop ==> systemctlstop name.service

重启:service name restart ==> systemctlrestart name.service

状态:service name status ==> systemctlstatus name.service



禁止自动和手动启动:

systemctl mask name.service

取消禁止:

systemctl unmask name.service

用于不常用的服务可以通过禁止启动。


可以通过手动更改服务路径可以跳过mask 启动,mask 的原理就是将启动的软连接改成指向/dev/null。



systemctl list-units -t service 查看所有活动的服务

技术分享

systemctl list-units -t service -all 查看所有的服务

技术分享

systemctl is-enabled httpd  查询是否开机启动

技术分享

systemctl enabled httpd  改成开机启动

技术分享

systemctl disabled httpd 改成开机不启动  

技术分享

systemctl list-dependencies httpd.service  查看服务的依赖性

技术分享

systemctl kill 进程 杀进程


显示所有单元状态

systemctl


只显示服务单元的状态

systemctl --type=service

技术分享

显示sshd服务单元

systemctlstatus sshd.service–l


验证sshd服务当前是否活动

systemctl is-active sshd

技术分享

启动,停止和重启sshd服务

systemctl start sshd.service

systemctl stop sshd.service

systemctl restart sshd.service

技术分享

技术分享

重新加载配置

systemctl reload sshd.service

技术分享

列出活动状态的所有服务单元

systemctl list-units --type=service

技术分享

列出所有服务单元

systemctl list-units --type=service --all

技术分享

查看服务单元的启用和禁用状态。

systemctl list-unit-files --type=service

技术分享

列出失败的服务

systemctl --failed --type=service

技术分享


target 

systemctl list-dependencies .target  查看target的依赖性

技术分享

systemctl get-default 查看现在是神马状态

技术分享

systemctl get-default multi-usr.target 切换默认开机成字符界面

graphical.target  图形界面

通过更改软链接路径修改


systemctl isolate multi-usr.target 切换成字符界面

systemctl isolate graphical.target  切换成图形界面

软连接指向谁就运行谁



systemctl rescue 切换成救援模式

systemctlemergency 切换至emergency模式


CentOS7引导顺序

UEFi或BIOS初始化,运行POST开机自检

选择启动设备

引导装载程序, centos7是grub2

加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg

加载initramfs驱动模块

加载内核选项

内核初始化,centos7使用systemd代替init

执行initrd.target所有单元,包括挂载/etc/fstab

从initramfs根文件系统切换到磁盘根目录

systemd执行默认target配置,配置文件/etc/systemd/default.target/etc/systemd/system/


服务格式

cat httpd.service


分3部分

[unit]

Description描述

After:unit的启动次序  想当与依赖关系

Before:与after 相反

Requires: 强依赖,依赖的units无法激活,当前unit也无法激活

Wants:弱依赖

Conflicts:冲突项目


[Service]

Type

EnvironmentFile 文件路径

ExecStart 绝对路径

ExecReload 绝对路径



[Install]

Alias:别名

RequiredBy:强依赖

WantsdBy:强依赖


/etc/systemd/system :系统管理员和用户使用

/usr/lib/systemd/system 开发者使用

技术分享

技术分享


破解7root口令


启动时任意键暂停启动

按e键进入编辑模式

将光标移动linux16开始的行,添加内核参数rd.break

按ctrl-x启动   类似单一用户

mount –o remount,rw /sysroot

chroot /sysroot

passwd root

touch /.autorelabel  自动打标签,因为修改了标签会可能破坏了






本文出自 “zczx_展鸿” 博客,请务必保留此出处http://swzczx.blog.51cto.com/11767585/1880130

awk,systemctl,破解7root口令