awk,systemctl,破解7root口令

awk

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

默认空格为分隔符

-v 自定义变量

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

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

文件的每一行称为记录

awk '{print}' /etc/passwd

默认 print $0 显示全段

 blob.png

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

blob.png

blob.png-v FS=":"  等于-F:

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

blob.png

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

blob.png 冒号分隔之后用+++替代分隔

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

blob.png

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

blob.png

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

blob.png

NF  统计字段

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

blob.png

NF统计字段

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

blob.png

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

blob.png

NR 显示行号

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

blob.png

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

blob.png

FNR 分开文件计算

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

blob.png

FILENAME 每一行打印出文件名

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

blob.png将文件名字和路径写在前面

ARGC 显示命令的参数

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

blob.png

ARGV 查看那几个参数

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

blob.png

变量:内置和自定义变量

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

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

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

blob.png

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

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

blob.png

    RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效

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

blob.png

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

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

blob.png

    NF:字段数量

awk -F:‘{print NF}’ /etc/fstab,引用内置变量不用$

awk -F: '{print $(NF-1)}' /etc/passwd

blob.png

blob.png显示的是倒数第二位等于显示$6

    NR:行号

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

blob.png1-12是etc/fstab的行数,54是/etc/passwd的行数

awk自定义变量

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

里面定义的name="supername"

blob.png

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

blob.png

blob.png

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

blob.png

printf 命令

格式符:与item一一对应

%c: 显示字符的ASCII码

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

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

%f:显示为浮点数

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

%s:显示字符串  

%u:无符号整数

%%: 显示%自身

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

blob.png

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

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

blob.png

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

awk 'BEGIN{print 10*10}'

blob.png

blob.png

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

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

blob.png

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

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

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

blob.png

blob.png

三目表达式

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

blob.png

模式过滤

没写模式默认全部处理

正则表达式

awk '/^UUID/' /etc/fstab

blob.png将UUID开头的句子显示出来

awk '/bash$/' /etc/passwd

blob.png将bash结尾的行显示出来

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

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

假:结果为空字符串

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

/root/开头到 /ftp/开头

blob.png

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

blob.pngprint与printf的区别在前者负责的数据会自动换行

判定语句

seq 10|awk 'i=!i'

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

所以显示奇数值

blob.png

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

blob.png加非判断结果显示偶数行

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

偶数值

blob.png一开始赋值就是1,非1等于0假不输出。

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

blob.png

组合语句

if-else

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

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

blob.png

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

多条件判定

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

blob.png根据数据判定

while循环

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

awk

do-while循环

语法:do statement while(condition)

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

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

QQ图片20160920111817.png

break和continue

break 直接退出循环

continue 直接跳过当次循环

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

blob.png执行循环,当偶数的时候就跳出,等于奇数双加

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

blob.png等于执行了10次的双加,第11次完全跳出循环

next

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

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

打印UUID为偶数的行

blob.png

awk数组

关联数组:array[index-expression]

index-expression:

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

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

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

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

blob.png数组[0]的数值

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

blob.png字符串要用“”引入,纯数字可以不加。

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

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

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

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

blob.png

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

遍历数组

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

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

显示所有的组成员

blob.png

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

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

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

blob.png

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

blob.png

awk函数

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

生成随机数

blob.png

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

生成整数随机数

blob.png

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

blob.png显示10个随机整数

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

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

blob.png第一个冒号分隔符替换

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

blob.png因为我输出的是$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地址出现的次数

blob.png统计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);}

blob.png

blob.png要加执行权限使用

脚本调用开头写

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

awk中使用操作系统的指令

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

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

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

blob.png

awk脚本

#cat f1.awk

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

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

blob.png

#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

blob.png

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

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

blob.png

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 如果要存放服务的时候,放在这个路径下比较安全

blob.png

systemclt

systemclt -t 可以查看unit类型

blob.png

automount 文件系统自动挂载

blob.png

系统服务的管理

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 查看所有活动的服务

blob.png

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

blob.png

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

blob.png

systemctl enabled httpd  改成开机启动

blob.png

systemctl disabled httpd 改成开机不启动  

blob.png

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

blob.png

systemctl kill 进程 杀进程

显示所有单元状态

systemctl

只显示服务单元的状态

systemctl –type=service

blob.png

显示sshd服务单元

systemctlstatus sshd.service–l

验证sshd服务当前是否活动

systemctl is-active sshd

blob.png

启动,停止和重启sshd服务

systemctl start sshd.service

systemctl stop sshd.service

systemctl restart sshd.service

blob.png

blob.png

重新加载配置

systemctl reload sshd.service

blob.png

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

systemctl list-units –type=service

blob.png

列出所有服务单元

systemctl list-units –type=service –all

blob.png

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

systemctl list-unit-files –type=service

blob.png

列出失败的服务

systemctl –failed –type=service

blob.png

target 

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

blob.png

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

blob.png

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 开发者使用

blob.png

blob.png

破解7root口令

启动时任意键暂停启动

按e键进入编辑模式

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

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

mount –o remount,rw /sysroot

chroot /sysroot

passwd root

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

原创文章,作者:swzczx,如若转载,请注明出处:http://www.178linux.com/48050

(0)
上一篇 2016-10-05 20:21
下一篇 2016-10-06 09:52

相关推荐

  • CentOS进程管理

    CentOS进程管理 笔记 Linux系统中的基本运行单位是进程,通过对系统系统中的进程的管理能够对系统的实时运行状态进行了解和调度。Linux中提供了用于查看、调整和停止进程的命令。本文仍然以RHEL6说明Linux系统的进程管理。 CentOS进程管理 一、进程概述 二、查看进程 1、使用ps命令 2、top命令 一、进程概述 程序是保存在存储介质中的可…

    Linux干货 2017-05-15
  • 8-15作业

    1、写个脚本,实现以下三角形    *   ***  ***** ******* #!/bin/bash # read -p " input a number : " n for l&nbs…

    Linux干货 2016-08-21
  • linux之/home目录转移分区。

    linux之/home目录转移分区。     I,基本思路,将/home目录的数据转移到新的分区,再将/home目录挂载到新的分区。     II,添加硬盘,进行分区,添加新硬盘不重启机器识别命令echo “- – -”  /sys/class/scsi_host/host#/scan,然后进行 …

    Linux干货 2017-06-19
  • 网络班22期+第二周作业练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示? Linux上文件管理类命令常用的有:pwd、ls、cd、cp、touch、mv、rm、rmdir 1)pwd:显示当前工作目录 2)ls:列出指定目录下的内容 常用的选项有: -a:列出目录中的所有文件,包括隐藏文件 -A:显示除.和..之外的所有文件 -l,相当于–long,显示…

    Linux干货 2016-08-29
  • 网络基础笔记

    网络管理笔记 1. 网络概念:     一组网络设备或计算机,通过无形的规则链接起来的体系!    2. 应用程序种类:     (1)批处理应用程序:            FTP、TFTP、库存更新    &nbsp…

    Linux干货 2017-03-16
  • 马哥教育网络班20期+第6周练习博客

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@bogon ~]# cp /etc/rc.d/rc.sysinit  /tmp/rc.sysinit […

    Linux干货 2016-07-22