shell脚本实例及Linux系统启动过程

技术分享  / 只看大图  / 倒序浏览   ©

#楼主# 2020-2-10

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1、编写脚本,担当二个位置参数,magedu和/www,判定系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www

~]# cat add_user.sh#!/bin/bashSCRIPT=$(basename $0)function usage(){    echo -e "\nUSAGE: $SCRIPT user_name home_dir \n"    exit 1}if [ $# -ne 2 ] ; then    usagefiid $1 &> /dev/nullif [ $? -eq 1 ] ; then   if [ -d $2 ] ; then      mkdir -p $2   fi   useradd $1 -d $2fi~]# bash add_user.sh magedu /www~]# id mageduuid=1000(magedu) gid=1000(magedu) groups=1000(magedu)# 切换到 magedu 用户~]# su - mageduLast login: Sat Feb  8 21:48:01 CST 2020 on pts/0[magedu@localhost ~]$ pwd/www2、使用expect实现自动登录系统。

# 首先需要安装 expect~]# yum install expect -y~]# cat ssh-expect.sh #!/usr/bin/expect -fset timeout 20set hostname [lindex $argv 0]set username [lindex $argv 1]set passwd   [lindex $argv 2]spawn ssh -l $username $hostnameexpect {   "(yes/no)" {       send "yes\n";       exp_continue   }   "password:" {       send "$passwd\n";   }}interact# 给脚本赋予可执行权限~]# chmod u+x ssh-expect.sh # 执行脚本~]# ./ssh-expect.sh  localhost root rootspawn ssh -l root localhostroot@localhost's password: Last login: Sun Feb  9 22:01:22 2020 from 192.168.58.1[root@localhost ~]# 3、简述linux操作系统启动流程

1.BIOS,(Basic Input/Output System) 基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程, 这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有非常就开始加载BIOS程序到内存当中。
2.MBR,(Master Boot Record) 主引导记录,MBR存储于磁盘的头部,大小为512bytes 其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。
3.GRUB,(Grand Unified Bootloader) 多系统启动程序,其执行过程可分为三个步骤:
* Stage1:这个其实就是MBR,它的重要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5  * Stage1_5:该步骤就是为了辨认文件系统* Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。 4.Kernel,内核,Kernel是Linux系统最重要的程序,现实上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件, initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。 因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs地点的设备, 故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。 Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个历程(用户空间的历程),执行/sbin/init,之后就将控制权交接给了init程序 Init
5.init,初始化,顾名思义,该程序就是进行OS初始化操作,现实上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行   第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看现实脚本,看看都做了什么):
1、激活udev和selinux;       2、根据/etc/sysctl.conf文件,来设定内核参数;   3、设定系统时钟;   4、装载硬盘映射;   5、启用互换分区;   6、设置主机名;   7、根文件系统检测,并以读写方式重新挂载根文件系统;  8、激活RAID和LVM设备;  9、启用磁盘配额;   10、根据/etc/fstab,检查并挂载其他文件系统;  11、清理过期的锁和PID文件 执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。 6.Runlevel ,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种
0:关机模式1:单一用户模式(直接以管理员身份进入)2:多用户模式(无网络)3:多用户模式(命令行)4:保留5:多用户模式(图形界面)6:重启在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本
Run level 0 – /etc/rc.d/rc0.d/ Run level 1 – /etc/rc.d/rc1.d/ Run level 2 – /etc/rc.d/rc2.d/ Run level 3 – /etc/rc.d/rc3.d/ Run level 4 – /etc/rc.d/rc4.d/ Run level 5 – /etc/rc.d/rc5.d/ Run level 6 – /etc/rc.d/rc6.d/这些目录下的脚本只有K和S开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。
4、破解centos7 密码。


  • 进入系统启动页面 按 e 键,进入grub编辑页面
030014vbnllygbusfpbgub.png

  • 找到 linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 地点行,在其后添加 init /bin/sh ,然后 ctrcl + x 键 启动单用户模式
030014muhhrjh7nojr9uun.png

  • 重新挂载根目录、修改密码、 创建 /.autorelabel 文件,重启
030015k1ovnzjjtnr5zejt.png

  • 用修改后的密码登录
030015w9q32uqy18q1u53z.png
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

亮小香猪

新手猿

  • 主题

    2

  • 帖子

    2

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆