20180520课堂笔记

MBR信息查看


dd if=/dev/sda of=mbr.hex bs=512 count=1 #第一块硬盘中主读取数据存放mbr.hex文件中,每次读512字节,总共读一次
hexdump -C mbr.hex


Grub2信息查看
more /boot/grub2/grub.cfg
Kernel信息查看
more /boot/initramfs-*
Systemd信息查看
more /etc/systemd/system/default.target
Grub legacy相关配置文件
more /boot/grub/grub.conf


default=0             #默认启动菜单项目,0表示第一个title系统,1为第二个,以此类推
timeout=5            #可选择等待的时间
splashimage=(hd0,0)/grub/splash.xpm.gz             #定义启动时的背景图片
hiddenmenu           #隐藏菜单


title CentOS 6 (2.6.32-696.el6.x86_64) #操作系统名称


root (hd0,0) #表示内核文件存放的位置,这里指的是分区位置,非根目录!
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=d147051c-f05d-44a1-97d9-2f
dec594bf1f rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16
crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #内核名称以及一些启动时的核心参数。由于启动过程中需要挂载根目录,因此就需要指定根目录所在的分区
initrd /initramfs-2.6.32-696.el6.x86_64.img #ramfs文件路径,ramfs是一个简单的文件系统,它是基于ram的动态文件系统的一种Linux硬盘缓冲机制


grub是提供命令行接口的!


救援模式应用:
Centos6


情况1,忘记、破解root口令


1. 开机启动,在出现内核选项时按"键盘e"进行编辑;在行尾添加single-->Enter-->ctrl+b
2. echo 'new_passwd' | passwd --stdin root
3. reboot


情况2grub破坏的修复
1. mv /boot/grub/grub.conf /boot/grub/grub.conf.bak
2. reboot
3. 此时会进入grub的命令行模式
4. root (hd0,0)
5. kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda3
6. initrd /initramfs-2.6.32-696.el6.x86_64.img
7. boot
8. mv /boot/grub/grub.conf.bak /boot/grub/grub.conf


情况3,破坏/boot目录,并修复
#这种比较极端的情况,需要借助光盘
1. rm -rf /boot/*
2. Rescue installed system #使用光盘启动,救援模式
3. 语言,键盘都选择默认;不启用网络
4. df -h #检查当前的系统环境
5. chroot /mnt/sysimage/
6. df -h
7. mount /dev/sr0/ /mnt
8. rpm -ivh kernel --force #安装内核
9. ls /boot
10. grub-install /dev/sda #安装grub
11. ls /boot
12 vi /boot/grub/grub.conf #可参考上步的配置,以下内容以实际为准
default=0
timeout=5
title c69
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda3
initrd /initramfs-2.6.32-696.el6.x86_64.img
13. sync  #  同步内核信息
14. exit
15. reboot


情况4,破坏fstab文件,并修复


1. 开机启动,在出现内核选项时按"键盘e"进行编辑;在行尾添加single-->Enter-->ctrl+b
2.用命令试验环境 df-Th
mount -o remount rw /
vi fstab进行编辑

分区+文件类型+是否开机运行

 

CentOs 7
情况1,忘记、破解root口令

1. 开机启动,在出现内核选项时按"键盘e"进行编辑;找到linux16行并在行尾添加内核参数
rd.break;并按ctrl+x进入单用户模式
2. mount –o remount,rw /sysroot
3. mount
4. chroot /sysroot
5. passwd root
6. touch /.autorelabel
7. exit
8. reboot

法二:1. 开机启动,在出现内核选项时按"键盘e"进行编辑;找到linux16行并在行尾添加
内核参数init=/bin/bash并按ctrl+x进入单用户模式
1.chroot /sysroot
2.passwd root
3.touch /.autorelabel
4.exit
5.reboot
注意:法一与法二的区别是:不用挂载,直接切换环境,更改密码


情况2grub破坏的修复
1. cd /boot/
2. rm -rf grub* #手动删除grub下的所有文件
3. 以光盘启动引导系统
4. chroot /mnt/sysimage
5. ls /boot
6.grub2-install /dev/sda
7. grub2-mkconfig -o /boot/grub2/grub.cfg
8. exit
9. reboot


情况3,破坏/boot目录,并修复
1. rm -rf /boot/*
2. chroot /mnt/sysimage
3. mount /dev/sr0 /mnt
4. rpm -ivh /mnt/Packages/kernel-3.1.x.rpm --force
5. ls /boot
6. reboot


情况4,破坏grub2下的grub.cfg并修复
1. cp /boot/grub2/grub.cfg grub.cfg.bak
2. rm -rf /boot/grub2/grub.cfg
3. init 6
4. grub>insmod xfs
  grub>set root=(hd0,1)
       grub>linux16 /vmlinuz-xxxxx root=/dev/mapper/centos-root


*** ** root=/dev/sda3 也可用UUID
grub>initrd16 /initramfs-.xxxxx.img
grub>boot
mv /boot/grub2/grub.cfg.bak /boot/grub2/grub.cfg


5. init 6

Selinux配置文件
more /etc/sysconfig/selinux
getenforce #查询当前selinux的模式
setenforce 0 #临时关闭selinux,重启后失效,==permissive
setenforce 1 #打开selinux,重启后失效,==enforcing
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #配置文件修改,重启后生效

break命令来退出任意类型的循环,包括whileuntil循环
#break nn指定了要跳出的循环层级,默认为1,表明跳出的是当前的循环,n2break命令就会停止下一级
#continue命令可以提前中止某次循环中的命令,但并不会完全终止整个循环
$0是程序名,$1是第一个参数,$2是第二个参数
total=$[ $1 * $2 ] 做运算的格式
./s3.sh 'micheal jackson' #有空格的字符必须要使用引号
#如果脚本参数超过9个,仍然可以处理,需要修改变量名。在第9个变量后,在变量前加${10}
name=$(basename $0) #basename,返回不包含路径的脚本
if [ -n "$1" ] #-n检测$1中是否有数据
echo There were $# parameters supplied. # $#含有脚本运行时携带的命令行参数的个
if [ $# -ne 2 ] #-ne测试命令行参数数量
# $*变量会将所有参数当成单个参数
# $@变量会单独处理每个参数

 

 


more s11.sh
#!/bin/bash
#
echo
count=1
#
for param in "$*" #for命令遍历这两个特殊变量,你能看到它们是如何不同地处理命令行参数的
do
echo "\$* Parameter #$count = $param"
count=$[ $count + 1 ]
done
#
echo
count=1
#
for param in "$@"
do
echo "\$@ Parameter #$count = $param"
count=$[ $count + 1 ]
done

#read命令从标准输入(键盘)或另一个文件描述符中接受输入。在收到输入后,read命令会将数据放进一个变量
echo -n "Enter your name: " #-n不会在字符串末尾换行
read name
echo "Hello $name

read -p "Please enter your age: " age #-p命令行指定提示符
days=$[ $age * 365 ]
#在上个例子中当有名字输入时,read命令会将姓和名保存在同一个变量中。read命令会将提示符后输入的所有数
据分配给单个变量,要么你就指定多个变量
read -p "Enter your name: " first last
echo "Checking data for $last, $first…"

read -p "Enter your name: "
echo
echo Hello $REPLY, welcome to my program. #read命令行中不指定变量,read命令会将它收到的任何数
据都放进特殊环境变量REPLY

#read -t 指定一个计时器 秒数
if read -t 5 -p "Please enter your name: " name

#当输入的字符达到预设的字符数时,就自动退出,将输入的数据赋给变量 ***-n3 表示最多三个字符
read -n1 -p "Do you want to continue [Y/N]? " answer

#要隐藏的数据类型,如输入密码
read -s -p "Enter your password: " pass
echo
echo "Is your password really $pass? "

#read读取linux文件中的文件
count=1
cat /etc/passwd | while read line
do
echo "Line $count: $line"
count=$[ $count + 1]
done
echo "Finished processing the file"
#while循环会持续通过read命令处理文件中的行,直到read命令以非零退出状态码退出

总结:本次课程学习了对系统报错问题的解决方法,包括配置文件,根目录等文件的删除与操作回复,以及root密码的修改操作,初步了解的单用户模式的操作问题,熟悉了救援模式等,实验中出现的问题慢慢能够自己解决,并且团队之间讨论并集中学习,能够更加促进学习。

猜你喜欢

转载自blog.csdn.net/Wxq960906/article/details/80445753
今日推荐