第六十九讲——手动攒系统(二) 本文共有26324个字,关键词: 当我们攒完一个小系统后,添加所需要的命令,但是我们经过尝试使用halt、init命令并不能实现关机、重启,原因是我们使用halt –p/init 0都是先进行运行级别的切换,再执行对应级别下的脚本,K##、S##等等,所以执行halt命令并不能在命令行下关机。 exec halt –p使用exec后指令替换父进程,然而exec helt –p也不能完成在新攒的系统上关机。 因此我们需要将脚本写入对应级别下,并在inittab文件中声明级别。 10:0:wait:/etc/rc.d/rc.sysdone(脚本名字随意,自己要能够看懂) 我切换级别的时候,应该是先将对应级别下K开头的stop掉,S开头的脚本start起来。 在我们攒系统的过程中因为硬盘的同步可能不是实时的,我们使用sync命令同步数据到硬盘,否则会因为数据不全或者文件系统中的inod号异常而造成文件系统崩溃。当文件系统损坏时,我们应当进行修复,修复之前应当先将所有文件打包存放到其他地方。 首先cd到损坏的文件系统中 find . |cpio –H newc –quit –o |gzip -9>/root/sysroot.gz 卸载损坏的文件系统,umount 挂载点 修复文件系统,其实也就是重新格式化文件系统 mke2fs –j /dev/sd# 重新挂载文件系统到指定的挂载点,mount命令实现挂载,不再赘述。 cd 进入修复好的文件系统中,将打包的文件还原回来 zcat /root/sysroot.gz |cpio –id 展开归档后继续重新以新的硬盘作为启动盘尝试启动攒的linux系统。 在红帽系列系统启动时,如果服务正确启动,我们会看到显示绿色的OK字样,如果服务启动失败,则显示FAIL红色,且总是显示在行末,其实现的机制为输出打印时计算屏宽。 例如: A=”12346” echo ${#A}在变量名前加#,取变量中所包含字符串的长度。 ${#VARNAME},使用此特性计算[ok]/[fail]字符的长度。 stty –F /dev/console size 显示物理终端的屏幕大小 输出为25 80 25行 80列(又叫屏宽) 使用屏宽减去字符的长度得到空格的长度,然后将[OK]/[FAIL]追加在行末。 当我们在脚本中调用一个文件中定义的函数的时候,得先装载,装载的方法为: . /path/to/function_name(函数所在目录) 函数文件在头部不用声明魔数,即!#/bin/bash等等 我们在登录操作系统后,会发现下面会有一些打印的信息,这些信息实际上是从一个文件中读取的并输出的,这个文件为/etc/isue,而内核在使用这个文件的时候并不是全部打印,因为在/etc/issue文件中存在逃逸字符,例如\r、\m分别代表uname –r、uname –m,这是由mingetty调用完成的。 #man mingetty可以查看到在/etc/issue文件中支持的逃逸字符。/etc/issue为终端的提示信息,在要求用户登录时显示,也可以使用mingetty指定显示。 grub.conf(/boot/grub/) ############## timeout=5 title linuxhobby.top root (hd0,0) kernel /vmlinuz ro root=/dev/hda#(指定根的位置) quiet(静默模式) 内核的初始化信息 ############## 我们需要知道的是,我们在操作系统启动起来之后看见的登录界面是由login程序所提供的页面。 login也可以实现用户的验证,在编译login时需要依赖pam模块,pam是红帽验证用户的插入式模块,对于系统来说,认证用户是到特定的位置实现的,这个特定的位置就是/etc/passwd、/etc/shadow。 而实际上,操作系统并不是这么工作的(直接访问passwd、shadow文件),我们的用户账号是放在别的位置,例如放在NIS、LDAP、MYSQL数据库中,只是我们传统是放在这两个文件当中。 这也就意味着我们在编译login程序时,将其直接连接到/etc/passwd、/etc/shadow文件,这样一来我们想要变更认证方式就变得比较困难,所以在/etc/passwd、/etc/shadow文件之间有一个中间层(nsswitch) nsswitch:network service switch网络服务转换/切换 nsswitch是一个柜架,它能够完成到哪儿去找用户的账号密码,在我们想要变更认证方式的时候,只需要修改/etc/nsswitch.conf即可实现。 nsswitch实现的功能叫做网络服务转换,也叫做名称解析开关,它只是定义了名称解析是如何工作的:用户的名称转换成ID号,将用户的组名转换成ID号,将主机名转换成ID号。 nsswitch既然是一个服务(程序),那么就可能会依赖库文件,nsswitch依赖的库文件都是以libnss开头的,32位的操作系统存在/lib下,64位存在于/lib64.在/usr/lib(64)下也存在库文件。 我们在攒一个操作系统的时候,需要将必须的库文件复制过去,nsswitch中间层所需要的库文件也是。 /lib(64)/libnss* files(链接文件) 指定、/etc/passwd、/etc/passwd的位置 在复制时保留链接文件使用-d选项 cp –d 复制链接时,保持连接属性。 我们在执行mingetty程序的时候,mingetty会启动一个终端,在启动终端后再在这个终端上执行一个login的程序(打印登录提示符) --loginprog=/bin/login默认调用的登录程序,我们可以定义/bin/bash让其直接执行bash程序 mount –n –o remount,rw /将根重新挂载为读写 stty –F /dev/console speed 显示当前显示器的速率,显示器属于线性设备,一般为38400. e2fsck –f /dev/sd# 强制检查文件系统,检查文件系统是相当耗费资源的,所以在服务器上一般将自动检查文件系统关闭,避免服务器瞬间超负荷运转。 小技巧: 在虚拟机中添加一块SCSI硬盘不能被立即识别的办法(重启一般能够解决) #cd /sys/class/scsi_host/ ls当前目录会发现有几个或一个以host#开头的文件,我们向其中echo一句话 #echo “- - -” >host#/scan 此时我们使用fdisk –l查看会发现scsi类型的硬盘已经显示出来了。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-02-07 评论 1715 次浏览