shell基础
操作系统的启动流程
安全优化
$$
\begin{cases}
单用户模式 破解密码\
grub加密\
光盘修复模式/救援模式 修复操作系统的问题\
BIOS加密\
\end{cases}
$$
shell基础
$$
\begin{cases}
介绍\
交互式环境\
命令语法\
bash解释器特性\
命令查找优先级\
查看帮助信息\
常用命令\
\end{cases}
$$
$$
文件处理相关命令
\begin{cases}
目录结构 单根结构\
系统目录注解(***)\
文件操作基础(增、删、改、查)\
查看文件内容、修改文件内容vim、查找文件find\
打包压缩、软硬连接
\字符处理命令
\begin{cases}
sort\
uniq\
cut\
tr\
wc\
\end{cases}
\路径
\begin{cases}
相对路径\
绝对路径\
\end{cases}
\end{cases}
$$
二、操作系统启动流程
加电
启动BIOS,检测启动项目
读取启动盘第一个扇区512bytes,包含是mbr主引导记录(446引导程序bootloader-grub)
grub启动
加载内核
$$
读取运行级别
\begin{cases}
0-关机\
1-单用户工作,不需要账号密码进入后就是管理员账号,用于系统维护,禁止远程登录\
2-多用户状态(没有NFS),没有网络\
3-完全多用户(有NFS)登录后进入控制台\
4-系统未使用,保留\
5-图形GUI模式\
6-重启\
\end{cases}
$$
centos7启动的第一个程序systemd,pid-0,启动其他服务
三、系统密码破解
1.重启
切换第一个模式,并按E(dit),编辑
进入最底层,找到ro rhgb……修改为:\ rw\ init=/sysroot/bin/sh
按CTRL-X进入单用户模式
执行chroot\ /sysroot/
passwd\ root回车输入密码
一定要再输入:
$$
vim\ /etc/sysconfig/selinux
$$
把selinux修改为disabled#关闭模式
2.为了防止其他人进行修改,可以在对grub进行一次加密
$$
1.执行grub2-setpassword\ 命令\
#\ grub2-setpassword\
enter\ password\
confirm\ password\
2.在打开文件/boot/grub2/grub.cfg,找到menuentray开头。找到条目后删除–unrestricted参数\
3.reboot重启验证,只有输入账号密码后,才能进入grub菜单修改管理密码
$$
3.BIOS加密,光盘修复
$$
\begin{cases}
#1、进入bios,从光盘启动\
#2、点击troubleshooting\
#3、进入界面\ 选择:rescue\ a\ centos\ Linux\ system\
#4、进入到rescue选项\ 按enter键\ 选1,其余选项为
\begin{cases}
1.continue:救援模式程序会自动查找系统中已有的文件系统,并可读写挂载到/mnt/sysimage目录\
2.read-only:会以只读的方式挂载已有的文件系统\
3.skip\ to\ sheell:手动挂载\
\end{cases}
\#5、sh切换bash模式\
chroot\ /mnt/sysimage\
#6、执行命令\
passwd\ root
\end{cases}
$$
4.扣主板bios电池,锁机柜
系统命令
1、什么是系统命令
shell解释器对系统接口的封装结果
系统命令/shell命令-shell解释器-系统接口-内核-硬件
2、为何要用系统命令
为了使用计算机
3、补充
第一层意思:shell代表的是解释器,是对系统接口的封装,即在系统接口外又加了一层壳,shell只是一种称呼,而bash解释器才是具体的一种shell
第二层意思:shell这门编程预言(一堆命令及语法)
4、 posix(了解)
posix全称可移植的操作系统接口,posix是一种规范
5、shell交互式环境
/#-超级管理员用户
¥-普通用户提示符
~-当前用户的个人文件夹-家目录
$$
useradd\ egon//创建用户\
passwd\ egon//交互式设置密码\
echo\ “123”\ |\ passwd\ –stdin\ egon//非交互式\
$$
6、shell命令的语法格式
命令:就是一个单词,对应着一个功能/程序,运行一条命令就启动一个进程
选项:对命令的描述,控制命令的具体运行
参数:命令的操作对象
ps:硬盘知识补充
硬盘-》水桶
分区-》水桶的隔断
挂载点/文件夹-》某一个具体的隔断
7、开始编写shell脚本程序
先切换到root用户,创建文件,后缀名没有硬性限制,通常以.sh结尾
1 | [root@egon ~~]# mkdir -p /a/b |
1.第一行表示我们选择使用的shell解释器是bash,也可以用:#!/usr/bin/env bash 此外shell的第一行比较特殊,一般以#!开始来指定使用的shell解释的类型
2.第二行以#开始,表示本行是注释,注释是对代码的解释说明
3.第三行中的echo是Linux中的输出命令
8、运行shell脚本程序
运行方式也存在几种
1.绝对路径
1 | 权限: |
2.相对路径
1 | 权限: |
3.解释器+文件路径(两种路径都可以)
1 | 权限: |
4.上述三种方式都是在子shell进程中执行程序,而方式四则是在当前shell进程中执行
1 | 例如 |
在当前shell解释器进程中执行脚本与在子shell进程中执行脚本的区别在于作用域
1 | 一个shell环境就是一个单独的全局作用域,不同的shell环境,无法访问彼此shell环境中的变量 |
9、调试shell程序
方法一、以调试的方式运行
1 | [root@egon test]# sh -vx login.sh #不加-v选项,只会显示程序中运行的代码,不会显示注释信息 |
方法二、只调试语法是否有问题,比如if判断少了结尾
1 | [root@egon test]# sh -n login.sh |
方法三、仅调试脚本的一部分,用set -x 与set +x包含,运行过程中会只打印它们包含的代码段的运行情况
1 | [root@egon test]# cat login.sh |