九、expect命令与系统启动流程解析

接上个章节:
位置变量Shell脚本应用示例:
编写脚本,接受二个位置参数,magedu和/www,判断系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www

cat location_useradd.sh 
#!/bin/bash
result=`id $1 &>/dev/null;echo $?`
if [ -z "$1" ];then
        echo "Please input your username."
        exit 0
elif [ -z "$2" ];then
        echo "Please input home directory."
        exit 0
elif [ $result -eq 0 ];then
        echo "该用户已存在"
else
        useradd $1 -m -d $2 && id $1
fi

验证结果:

[root@localhost ~]# ./location_useradd.sh 
Please input your username.
[root@localhost ~]# ./location_useradd.sh magedu
Please input home directory.
[root@localhost ~]# ./location_useradd.sh magedu /www
uid=2029(magedu) gid=2031(magedu) groups=2031(magedu)
[root@localhost ~]# ./location_useradd.sh magedu /www
该用户已存在

一、expect介绍

           expect 是由Don Libes基于Tcl( Tool Command Language )语言开发的一款工具,主要应用于自动化交互式操作的场景,借助 expect 处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,能够大大提高系统管理人员的工作效率。
语法:expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
选项

  • -c:从命令行执行expect脚本,默认expect是交互地执行的
  • -d:可以输出输出调试信息

相关指令

  • spawn 启动新的进程
  • send 用于向进程发送字符串
  • expect 从进程接收字符串
  • interact 允许用户交互
  • exp_continue 匹配多个字符串在执行动作后加此命令

expect最常用的语法(tcl语言:模式-动作)

  • 单一分支模式语法:
    expect “hi” {send “You said hi\n"}
    匹配到hi后,会输出“you said hi”,并换行

  • 多分支模式语法:
    expect "hi" { send "You said hi\n" }
    "hehe" { send "Hehe yourself\n" }
    "bye" { send "Good bye\n" }

  • 匹配hi,hello,bye任意字符串时,执行相应输出。等同如下:
    expect {
    "hi" { send "You said hi\n"}
    "hehe" { send "Hehe yourself\n"}
    "bye" { send " Good bye\n"}
    }

示例:使用expect实现自动登录系统

cat ssh.exp
#!/usr/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
spawn ssh $user@$ip
expect {
            "yes/no" { send "yes\n";exp_contine }
            "password" { send "$password\n" }
}
interact

验证结果:

./ssh5.exp <ipaddress> root <password>
spawn ssh root@172.16.77.131
root@172.16.77.131's password: 
Last login: Sat May 30 22:49:22 2020 from 172.16.77.131

二、系统启动流程

2.1 Linux系统组成

Linux: kernel+rootfs
kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs:程序和glibc
库:函数集合, function, 调用接口(头文件负责描述)
程序:二进制执行文件

2.2 系统引导流程

CentOS 6:

  • 固件firmware(CMOS/BIOS) POST加电自检
  • 自举程序BootLoader(GRUB) 加载内核
  • 载入内核kernel 驱动硬件
  • 启动进程init)
    读取执行配置文件/etc/inittab 依次执行其中的有效语句设定initdefault默认的运行级别
    启动/etc/rc.d/rc.sysinit 系统服务初始化加载脚本
    通过rc这个脚本判断initdefault系统缺省的运行级别
    执行相对应目录下的启动脚本/etc/rc.d/rcN.d (N=0-6) 脚本开头S表示启动,K表示关闭。
  • 执行/bin/login程序,等待用户登录

CentOS 7:

  • UEFi或BIOS初始化,运行POST开机自检
  • 选择启动设备
  • 引导装载程序:grub2
  • 加载装载程序的配置文件:
    /etc/grub.d/
    /etc/default/grub
    /boot/grub2/grub.cfg
  • 加载initramfs驱动模块
  • 加载内核选项
  • 内核初始化,使用systemd
  • 执行initrd.target所有单元,包括挂载/etc/fstab
  • 从initramfs根文件系统切换到磁盘根目录
  • systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  • systemd执行sysinit.target初始化系统及basic.target准备操作系统
  • systemd启动multi-user.target下的本机与服务器服务
  • systemd执行multi-user.target下的/etc/rc.d/rc.local
  • systemd执行multi-user.target下的getty.target及登录服务
  • systemd执行graphical需要的服务

三、破解centos7 系统登陆口令

  1. 重新引导机器(略)
  2. 进入单用户模式
    在看到内核引导列表时,按e进行编辑,在以linux16开头的行尾加入init=/bin/sh,去掉rhgb和 quiet参数可以查看详细的启动过程(可选),按ctrl+x启动系统,此时无需密码即可进入系统
  3. 重置密码
    进入单用户模式,以rw的方式重新挂载/(否则没有权限写入):
mount -o remount,rw /

    强制修改用户的密码
    echo 'password' | passwd --stdin root

    为了保证一些文件受到selinux上下文的影响,所以必须执行下面的命令:
    touch /.autorelabel

    启动初始化进入系统:
    exec /sbin/init

  1. 验证
    在登陆提示符或窗口处输入重置后的密码,查看是否能够正常登陆
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351