第七十讲——攒系统之外的杂项 本文共有20129个字,关键词: 我们可能已经能够将攒的小linux在虚拟机上挂载启动了,看着启动起来的界面是不是感觉也不是那么难?我们在复制命令及其依赖的库文件时是不是觉得太繁琐了,实在是辛苦,当然写个脚本也是能够代替手工操作的,以之前的脚本功底按理说实现起来并不复杂。 那么接下来就介绍一个逆天的工具,其实也不是工具,是一个程序,叫buybox,这个程序能够实现多个命令的操作,仅依靠一个二进制的程序,听起来是不是很厉害的样子? 我们下载buybox并安装,进入/bin下有许多的连接文件,这些链接文件名称都是系统中的命令,且都指向buybox,也就是说名字不一样功能也就不一样,实在是厉害。 所以我们完全可以使用buybox+内核搭建一个平台,也就是说,我们可以使用buybox做成一个initrd文件,即虚拟根文件系统,再使用buybox来作为真正的根文件系统+kernel,但是buybox上面没有bash,但是我们可以移植过去,busybox自带的shell有ash和hash。 查看本机的硬件信息: cat /proc/cpuinfo lsusb列出本机的usb属性信息 lspci 显示出pci总线的所有设备类型 hal-device更为详细的硬件信息 Hardware Abstract Layer硬件抽象层 驱动可以做进内核,也可以做成模块,一般来说核心硬件,如硬盘驱动最好做进内核,而网卡驱动一类做成模块。 内核的编译: 一配置: #make menuconfig #make gconfig #make kconfig 二编译整个内核 #make 三模块的安装位置/lib/mudles/KERNEL_VERSION #make install 四是安装 make install 我们可能会遇到当编译完内核后,还需要添加模块,这个时候我们只需要编译一个模块或者一个目录,即实现部分编译。 一是只实现编译某子目录下的相关代码 #make /dir(指定相应的目录即可) 在我们解压内核后会看到arch目录,此目录下为根硬件平台相关的内核核心,但是在编译核心时也会编译模块,因为我们选择了哪些模块以及内核支持哪些模块,核心得知道,核心会将模块遍历一遍,可能不会安装或者编译。 二是只编译部分模块 make /device/net 三是只编译某一模块 make */device/net/pcnet32.ko 四是将编译完成的结果放到别的目录 make o=/tmp/kernel 编译buybox,同内核编译。 make menuconfig make make install 交叉编译:用A平台编译非A平台上的程序的方式叫做交叉编译。 bash特性: 变量的默认赋值: 当一个变量为空或者不存在时(用户没有从键盘上输入),我们可以这么操作: ${A:-30}即当$A存在且不为空时为$A中的值,否则将30赋值给$A ${A:+30} 与-相反,如果A不空使用后面的值,如果A为空,则A为空。 ${parameter:+word} 如果parameter未定义或者为空,则变量展开为word的值,并将展开后的值赋值给parameter 变量的切片: ${A:3:4}表示截取变量A略过前三个字符后,截取四个字符,截取字段可以省略,表示至末尾字符。 3:略过几个字符 4:截取几个字符 我们知道服务脚本是支持配置文件的,一般说来服务脚本位于/etc/rc.d/init.d下,配置文件位于/etc/sysconfig下 服务脚本的配置文件一般与服务脚本同名 局部变量,使用local进行定义,只在函数中有效。 #mktmp 用于创建临时文件或目录 #mktmp /tmp/file.## ##为随机生成的数值,该命令的返回值为一个文件的路径。 #mktmp –t 创建一个临时目录。 信号:进程间通信的一种方式 kill –SIGNAL PID 1 HUP 2 INT 9 KILL 15 TERM 我们在脚本中可以实现(9、15)信号外的信号捕捉 ctrl + c 发送的是2号信号 在脚本内部使用trap命令进行命令的捕捉 trap ‘COMMAND’(执行的命令)信号列表(需要捕捉的信号列表) 一行中执行多个语句时使用分号分隔即可。 当我们退出时需要执行很多的操作,此时我们可以定义一个函数,将一些创建的临时文件删除,或其它保护操作。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-02-08 评论 1714 次浏览