Linux基本命令集.docx
- 文档编号:10304638
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:26
- 大小:32.17KB
Linux基本命令集.docx
《Linux基本命令集.docx》由会员分享,可在线阅读,更多相关《Linux基本命令集.docx(26页珍藏版)》请在冰豆网上搜索。
Linux基本命令集
(参考《鸟哥的linux私房菜》)
第四部分
16、启动流程、模块管理与loader
Linux启动流程分析
启动流程一览
引导装载程序可以指定使用哪个内核文件来启动,并实际加载内核到内存当中解压缩与执行,此时内核就能在内存中活动,并检测所有硬件信息与加载适当的驱动程序来使这部主机开始运行,等到内核检测硬件与加载驱动程序完毕后,一个最牛的操作系统就可以在你的电脑上跑了。
系统的启动过程:
1、加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备
2、读取并执行第一个启动设备内的MBR的bootLoader(即是grup,spfdisk等程序)
3、依据bootloader的设置加载内核,内核会开始检测硬件与加载驱动程序
4、在硬件驱动成功后,kernel会主动调用init进程,而init会取得run-level信息
5、init执行/etc/rc.sysiniit文件来准备软件执行的操作环境(如网络、时区等)
6、init执行run-level的各个服务的启动(script方式)
7、init执行/etc/rc.d/rc.local文件
8、init执行终端机模拟程序mingetty来启动login进程,最后等待用户登录
BIOS、bootloader与kernel加载
BIOS,开机自我测试与MBR
启动整个系统首先要加载BIOS,并通过BIOS程序去加载CMOS的信息,并且通过CMOS内的设置取得主机的各项硬件配置。
取得这些信息后,BIOS还会进行开机自检,然后执行硬件检测的初始化,并配置pnp设备,之后再定义出克启动的设备顺序,接下来会开始启动设备的数据读取(MBR相关的任务开始了)。
由于我们的系统软件大多数放在硬盘中,所以BIOS会指定启动的设备好让我们可以读取磁盘中的操作系统内核文件。
要一个引导装载文件来处理内核文件加载问题,这个引导装载文件程序称为bootloader。
它安装在启动设备的第一个扇区内,也就是我们一直谈论的MBR。
只要BIOS有办法通过init13这条信道来读取该磁盘的第一个扇区内的MBR,这样bootloader就能执行。
bootLoader功能
每个操作系统默认会安装一套bootLoader到它的文件系统中去,安装多重操作系统时,你会发现MBR经常会被不同的系统的bootloader所覆盖
bootloader功能:
1、提供菜单:
用户可以选择不同的启动选项,这也是多重引导的重要功能
2、加载内核文件:
直接指向可启动的程序区段来开始操作系统
3、转交其他loader:
将引导装载功能交给其他loader负责
注意:
先安装windows再安装linux
4、最终bootloader功能就是加载kernel文件
加载内核检测硬件与initrd的功能
开始读取内核文件后,linux会将内核解压缩到内存中去,并且利用内核的功能,开始检测与驱动各个周边的设备,包括存储设备、cpu、网卡、声卡等。
此时linux内核会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测到的硬件信息。
内核文件一般放置在/boot里面,并取名为/boot/vmlinuz。
内核模块放置在/lib/modules/目录内。
由于模块放置在磁盘根目录内(要记得/lib不可以与/分别放在不同的分区),因此在启动的过程中必须挂载根目录,这样才能读取内核模块提供驱动程序的功能,而且为了担心影响磁盘内的文件系统,因此启动过程中根目录只能以只读的方式来挂载。
usb、sata、scsi等磁盘设备的驱动程序通常都是以模块的方式存在的。
问题是,内核根本不认识sata磁盘,所以需要加载sata磁盘的驱动程序,否则根本无法挂载根目录。
但是sata的驱动程序在/lib/modules内,你根本无法挂载根目录,又怎么读取到/lib/modules内的驱动程序呢?
这是需要虚拟文件系统的帮助。
虚拟文件系统一般使用的文件名为/boot/initrd,这个文件的特色是它能够通过bootloader来加载到内存里,然后这个文件会被解压缩并且在内存当中仿真成一个根目录,且此仿真在内存当中的文件系统能够提供一个可执行的程序,通过该程序来加载启动过程中所最需要的内核模块,通常这些模块就是usb、raid、lvm、scsi等文件系统与磁盘接口的驱动程序。
等载入完成后,会帮助内核重新调用/sbin/init来开始后续的正常启动流程。
第一个进程init及配置文件/etc/inittab与runlevel
内核加载完毕后,内核会主动调用第一个进程,那就是/sbin/init,最主要的功能是准备软件执行的环境,包括系统的主机名、网络设置、语系处理、文件系统格式及其他服务的启动等。
而所有的操作会通过init的配置文件,即是/etc/inittab来规划,而inittab内还有一个很重要的设置选项,那就是默认的runlevel(启动执行等级)。
runlevel:
执行等级
1-halt(系统直接关机)
2-singleusermode(单用户维护模式,用在系统出问题时的维护)
3-multi-user,withoutNFS(类似下面的runlevel3,但是没有NFS服务)
4-Fullmulti-usermode(完整含有网络功能的纯文本模式)
5-unused(系统保留功能)
6-x11(与runlevel3类似,但是加载使用xwindows)
7-reboot(重启)
上述内容是/etc/inittab所设置
[设置选项]:
[runlevel]:
[init的操作行为]:
[命令选项]
init的处理流程
1、先取得runlevel即默认执行等级的相关等级
2、使用/etc/rc.d/rc.sysinit进行系统的初始化
3、由于runlevel是5,只进行“5:
5:
wait:
/etc/rc.d/rc5”,其他行略过
4、设置好[ctrl]+[alt]+[del]这组组合键的功能
5、设置不断电系统的pf,pr两种机制
6、启动mingetty的6个终端机(tty1-tty6)
7、最终以/etc/x11/perfdm-nodaemon启动图形界面
init处理系统初始化流程(/etc/rc.d/rc.sysinit)内容:
1、取得网络环境与主机类型
2、测试与挂载内存设备/proc及usb设备/sys
3、决定是否启动selinux
4、启动系统的随机数生成器
5、设置终端机字体
6、设置显示于启动过程中的欢迎界面
7、设置系统时间与时区设置:
需读入/etc/sysconfig/clock设置值
8、接口设备检测与plugandplay(pnp)参数测试
9、用户自定义模块的加载
10、加载内核的相关设置
11、设置主机名与初始化电源管理模块(ACPI)
12、初始化软件磁盘阵列:
主要通过/etc/mdadm。
conf来设置
13、初始化lvm的文件系统功能
14、以fsck检验文件系统:
会进行filesystemcheck
15、进行磁盘配额quota的转换
16、重新以可读写的模式挂载系统磁盘
17、启动quota功能:
所以我们不需要自定义quotaon的操作
18、启动系统伪随机数生成器
19、清除启动过程中产生的临时文件
20、将启动相关信息加载/var/log/dmesg文件中
上述设置说明基本的系统设置数据都写好了
启动系统服务与相关启动配置文件(/etc/rc.d/rcN&/etc/sysconfig)
通过外部第一号参数($1)来取得想要执行的脚本目录,即由/etc/rc.d/rc5可以取得/etc/rc5.d/这个目录来准备处理相关的脚本程序
找到/etc/rc5.d/K?
?
*开头的文件,并进行”/etc/rc5.d/K?
?
*stop”的操作
找到/etc/rc5.d/S?
?
*开头的文件,并进行”/etc/rc5.d/S?
?
*start”的操作
文件名全部以Sxx或Kxx开头,其中xx为数字,且这些数字在文件之间是相关性的
全部是链接文件,连接到standalone服务启动的目录/etc/init.d/中去
我们知道/etc/init.d/服务文件名{start,stop}来启动与关闭的,我们可以清晰了解到/etc/rc5.d/[SK]xx其实就是跑到/etc/init.d去找相应的服务脚本,然后分别进行start(Sxx)或stop(Kxx)操作而已。
/etc/rc5.d/K91caapistop/etc/init.d/capistop
/etc/rc5.d/S10networkstart/etc/init.d/networkstart
后面的数字代表执行顺序
用户自定义开机启动程序(/etc/rc.d/rc.local)
根据/etc/inittab的设置加载终端机或xwindows界面
在完成系统所有服务的启动后,接下来linux就会启动终端机或xwindows来等待用户登录
启动过程中用到的主要配置文件
关于模块:
/etc/modprobe.conf
/etc/sysconfig/*:
suthconfig
clock
i18n
keyboard&mouse
network
network-script
Runlevel的切换
要每次启动都执行某个默认的runlevel,则需要修改/etc/inittab内的选项设置,即是“id:
5:
initdefault:
”里面的数字。
如果仅是暂时更改系统的runlevel时,则使用init[0-6]来进行runlevel的更改,但是下次启动时,依旧是/etc/inittab的设置为准。
内核与内核模块
内核:
/boot/vmlinuz或/boot/vmlinuz-version
内核解压缩所需的RAMDisk:
/boot/initrd(/boot/initrd-version)
内核模块:
/lib/modules/version/kernel或/lib/modules/$(uname-r)/kernel
内核源码:
/usr/src/linux或/usr/src/kernels
如果内核被顺利加载到内存中,会有几个信息被记录下来:
内核版本:
/proc/version
系统内核功能:
/proc/sys/kernel
内核模块与依赖性
记录内核支持的模块的各项依赖性文件:
/lib/modules/$(uname-r)/modules.dep
创建此文件:
depmod[-Ane]
内核模块的查看:
lsmod
模块名称(Module)
模块大小(size)
此模块是否被其他模块所用(Usedby)
modinfo[-adln][module_name|filename]
内核模块的加载与删除
使用modprobe这个命令加载模块,也可以使用下面的命令(必须找到模块完整的文件名)
insmod[/full/path/module_name][parameters]
删除:
rmmod[-fw]module_name
直接使用modprobe来处理加载模块
modprbe[-lcfr]module_name
内核模块的额外参数设置:
/etc/modprobe.conf
bootloader:
Grub
linux将bootloader的程序代码执行与设置值加载分成2个阶段
stage1:
执行bootloader主程序,这个主程序必须被安装在启动区,及MBR或者是bootsector,但是并没有安装loader的配置文件
stage2:
主程序加载配置文件,一般来说,配置文件放置在/boot下面
Grub的配置文件/boot/grub/menu。
lst与菜单类型
硬盘与分区在grub中的代号
硬盘代号以小括号()括起来
硬盘以hd表示,后面接一组数字
以“查找顺序”作为硬盘的编号,而不是依照硬盘扁平电缆的排序
第一个查找到的硬盘为0号,第二个为1号,以此类推
每块硬盘的第一个分区代号为0,依序类推
/boot/grub/menu.lst配置文件
直接指定内核启动
利用chainloader的方式转交控制权
它只是将boot的控制权交给下一个bootsector或MBR内的bootloader而已,不需要检查下一个bootloader的文件系统
initrd的重要性与创建新的initrd文件
initrd内所包含的模块的大多是与启动过程有关的,而主要与文件系统及硬盘模块为主,一般来说,需要initrd的时刻有:
根目录所在磁盘为sata,usb或scsi等连接接口
根目录所在文件系统为lvm,raid等特殊格式
根目录所在文件系统为非传统linux“认识”的文件系统
其他必须在内核加载时所需的模块
重制initrd文件:
mkinitrd[-v][--with=模块名称]initrd文件名内核版本
测试与安装grub
grub-install[--root-directory=DIR]INSTALL_DEVICE
所以说,grub-install是grub相关的文件(例如文件系统定义的文件)到你的设备上面去等待在启动时被读取,但还是需要设置好配置文件后,再以grubshell来安装grub主程序到MBR或者bootsector上面去
用“root(hdx,x)”选择含有grub目录的那个分区代号
用“find/boot/grub/stage1”看能否找到安装信息的文件
用“find/boot/vmlinuz”看能否找到内核文件(不一定成功)
用”setup(hdx,x)”或“setup(hdx)”将grub安装在bootsector或MBR上面去
用“quit”离开grubshell
最后总结一下:
1、如果是从其他bootloader转成grub时,得先使用grub-install安装grub配置文件
2、开始编辑menu.lst这个重要的配置文件
3、通过grub来讲主程序安装到系统中去,如MBR的(hd0)或bootsector的(hd0,0)等。
启动前的额外功能修改
e:
进入grubshell编辑界面
o:
在光标下面一行再新增一行
d:
将光标所在行删除
关于内核功能当中的vga设置
vim/boot/grub/menu.lst
BIOS无法读取大硬盘的问题
解决办法:
新建/boot独立分区,并将/boot放置在最前面(最好重装系统)
为某个菜单加上那个密码
grub-md5-crypt
password选项一定要在title下面第一行,但是这种方法还是可以通过“e”编辑修改,怎么办?
只好通过整体的password(放在所有的title之前),然后在title下面的第一行设置lock
启动过程的问题解决
忘记root密码的解决之道
1、重启
2、启动进入grub菜单后,按“e”进入详细设置,将光标移到内核上方按“e”进入编辑界面,加上single,按下enter在按下b能够启动进入单用户维护模式
3、执行passwd命令chongjianroot密码,执行init5就可以切换成x窗口界面
init配置文件错误
将第一个进程(init)变成/bin/bash,执行命令mount–oremount,rw/
BIOS磁盘对应的问题(device.map)
因文件系统错误而无法启动
利用chroot切换到另一硬盘工作
17、系统设置工作(网络与打印机)与硬件检测
centos系统设置工作:
setup
runtool开始设置该项目,quit可以离开setup命令
authenticationconfiguration:
与用户身份有关的设置
firewallconfiguration:
简单设置防火墙和selinux的启动模式
keyboardconfiguration:
键盘按键的对应表
networkconfiguration:
设置网络参数的地方
systemservices:
设置一些服务是否在开机时启动
timezoneconfiguration:
时区选择
Xconfiguration:
设置XWindows相关的设置
用户身份验证设置
我们的linux除了使用自己提供的用户密码验证机制之外,还能够使用其他外部身份验证服务器所提供的各项验证功能。
网络配置选项(手动设置IP与自动获取)
1、手动配置固定IP
2、网络参数可自动获取(DHCP)
3、通过ADSL宽带拨号
设置:
1、如果你是使用手动设置的话,“UseDHCP”一定不能勾选,然后将下面的StaticIP,Netmask,DefaultgatewayIP设置值填上去即可,这三个设置值请联系你的网络管理员。
2、如果你是使用DHCP的自动获取IP方式,勾选“UseDHCP”后,将后面的三个设置值清空,这样就设置好网络参数了
防火墙设置
trusteddevice:
信任设备
MASQUERADEdevice:
数据包伪装的功能
如果你有网络,选择防火墙为“enable”状态,按下“customize”进入取消ssh选项,最后回来按下ok就行了
键盘形式设置
/etc/sysconfig/keyboard
系统服务的启动与否设置
ntsysv
系统时钟的时区设置
/etc/sysconfig/clock
X窗口界面分辨率设置
/etc/X11/xorg.conf
利用CUPS设置linux打印机
linux打印组件(打印操作、队列、服务与打印机)
http:
//www.linuxfoundation.org/en/OpenPrinting:
看是否打印机支持你的linux系统
打印组件
打印操作:
lpr,打印软件产生的打印操作就是产生一个打印的工作,这个打印操作就会进入排队等待的环境,等待打印服务来进行输出
打印队列
打印服务实际是负责沟通队列内的打印操作与打印机的服务,打印服务其实就是将队列内的打印操作的数据转成打印机识别的格式后,直接交给打印机输出而已。
CUPS支持的联机模式
如果你的打印机也具有网卡,那你就可以使用网络联网到你的打印机上面
常见的打印机联机模式:
socket
数据通过端口来传输,一般为port9100或35
LPD(较老的模式)
IPP(较流行的打印机打印协议)
SMB
网上邻居
parallel:
串行端口
USB:
USB打印机
以web界面管理网络打印机
要进行浏览器界面的管理操作时,你必须要:
启动CUPS这个服务(/etc/init.d/cupsstart)
具有root权限
默认仅能在本机(localhost)管理,无法使用远程联网连接到此linux系统
想要移交打印控制权,确认打印机存在且支持CUPS认可的相关协议,查询你linux主机是否启动CUPS服务
以web界面管理USB本地打印机
lsusb
addprinter
将linux本地打印机开放成网络打印机
修改CUPS的值
手动设置打印机
事实上我们刚才上面的操作都是修改/etc/cups里面的几个文件
/etc/cups/printers.conf:
打印机的设置值,都写在这个文件中
/etc/cups/cupsd.conf:
CUPS主要配置文件,包括作为服务器用途的设置
/etc/cups/ppd/*.ppd:
各个打印机的驱动程序(PPD配置文件)
eg:
1、下载合适的PPD驱动程序定义文件
首先你必须到打印机网站下载你的打印机驱动程序定义文件,将下载文件放到/usr/share/cups/model/目录下
2、启动CUPS以及打印机
接下来确定你的CUPS是启动的,而且打印机已经打开了电源,检查是否启动CUPS的方法
/etc/init.d/cupsrestart
netstat–tlunp|grep631
nmap
3、使用lpadmin进行打印机的新建与删除
lpadmin[-p自定义队列名][-vURI][-mPPD][-E]建立打印机
lpadmin[-d已存在的队列名]设置成默认打印机
lpadmin[-x已存在的队列名]删除此一打印机队列
4、打印机状态的查看
lpstat[-adprt]
5、利用lpr与lp产生打印操作
lpr[-Pprinter队列][-#打印份数]–U[username]file
lp[-dprinter队列][-n打印份数]file
6、打印作业的查看(lpq)与删除(lprm)
lpq[-al][-P打印队列]
lprm[-Pprinter队列]jobid
硬件数据收集与驱动及lm_sensors
lspci查看主机
lspci[-vvn]
lsusb:
系统接多少个usb设备情况
lsusb[-t]
iostat:
你的硬盘由开机到现在已经存储了多少数据
iostat[-c|-d][-k|-m][-t][间隔秒数][检测次数]
驱动usb设备
关于usb芯片版本
1.1OHCI/UHCI
2.0EHCI
启动U盘
代号/dev/sd[a-p],类似scsi硬盘代号,如果你要使用U盘的话,你的linux需支持scsi设备,有时候还要启动usb-storage(无法驱动时),顺利加载后,直接执行fdisk–l看你的USBU盘设备代号,使用mount将它挂载起来即可
启动USB打印机
使用lm_sensors取得温度、电压等信息
检测主板型号
sensor-detect
检测温度、电压等硬件参数
sensors
udev与hal简介
硬件如何检测与设备文件如何建立,这就与udev及HAL有关
18、软件安装:
源码与Tarball
因为linux上面的软件几乎都是经过GPL的授权,所以每个软件几乎均提供源代码,并且你可以自行修改源代码,以符合你的个人意愿,这就是开放源代码的好处
什么是开放源码、编译程序与可执行文件
linux系统真正识别的是可执行文件是二进制文件
vim进行程序的编写,写完的程序就是所谓的源代码。
这个程序代码文件其实就是一般的纯文本文件。
编写完源码文件后,再来是将这个文件“编译”成操作系统看得懂的二进制程序。
linux上最标准的语言是c语言,事实上,编译过程中会产生所谓的目标文件(objectfile),这些文件以*.o扩展名的形式存在,至于c语言程序代码文件以*.c作为扩展名。
有的时候,我们会调用其他的外部子程序,或者利用其它软件提供的“函数功能”,这时我们必须在编译过程中将该函数加进去,如此一来,编译程序就可以将所有的程序代码与函数库做一个链接(Link)以生成正确的执行文件。
什么是函数库
linux内核提供了相当多的函数库来给硬件开发者利用
函数库分为静态与动态函数库
函数库:
类似子程序的角色,可以被调来执行一段功能函数
什么是make与configure
当执行make时,make会去找makefile,那makefile怎么写?
通常软件开发商都会写一个检测程序来检测用户的操作环境,以及该操作环境是否有软件开发商所需要的其他功能,该检测程序检测完毕后,就会主动建立这个makefile规则文件,通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 基本 命令