自己整理的linux的安装和启动 1. Linux安装流程 1.1 安装过程总览 1. BIOS加电自检 2. 运行isolinux目录下面的isolinux.bin文件,这个isolinux.bin文件根据isolinux.cfg文件的选项来加载内核vmlinuz和initrd.img文件,initrd.img文件会在内存中生成一个虚拟的linux操作系统,为安装过程提供一个安装环境. 3. initrd.img文件中的/sbin/loader文件会探测安装介质,如果探测到是cd安装,就会运行images目录中的stage2.img(安装过程需要的所有镜像)镜像文件,这个文件中最重要的就是anaconda程序,我们看到的安装过程中的向导图就是这个anaconda程序的作用. 4. 安装完成,重启系统. 文件的调用顺序为isolinux/vmlinuz--->isolinux/initrd.img--->/init--->/sbin/loader--->imagaes/install.img--- >/usr/bin/anaconda 光盘结构介绍 * isolinux 目录存放光盘启动时的安装界面信息 * images 目录包括了必要的启动映像文件,最重要的是引导第二阶段安装需要用到的镜像文件install.img(rhel 5中是stage2.img),anaconda程序就在这个镜像文件中. * CentOS 目录存放安装软件包及信息 * .discinfo 文件是安装价质的识别信息 这个文件很重要 * lemp.tar.gz 文件存放系统初始化及其相关程序安装脚本. * EFI目录:用于64位的基于EFI的系统引导.其中BOOT目录下BOOTX64.conf为grub的配置文件,用于显示引导菜单. *TRANS.TBL文件:记录当前目录的列表,用mkisofs的-T参数重新生成,主要是为了长文件名称. /isolinux/iso.cfg 在iso文件中的isolinux目录下面,isolinux.cfg这里面就是我们在安装的时候出现的第一个界面上面的信息,还指明了改加载的内核镜像和initrd镜像: Install or upgrade an existing system Install system with basic video driver Rescue installed system Boot from local drive Memory test /isolinux/boot.msg 这个文件信息只显示了一句 Press the <Enter> key to begin installation process. /isolinux/splash.jpg 这张图片是我们安装界面的背景图片 1.2 vmlinuz vmlinuz是可引导的、压缩的内核."vm"代表"Virtual Memory".Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制.Linux能够使用硬盘空间作为虚拟内存,因此得名"vm",vmlinuz是可执行的Linux内核.vmlinuz是可引导的、压缩的内核."vm"代表"Virtual Memory".Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制.Linux能够使用硬盘空间作为虚拟内存,因此得名"vm".vmlinuz是可执行的Linux内核,vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,vmlinuz的建立有两种方式.一是编译内核时通过"make zImage"创建,然后通过: "cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz"产生. vmlinux不是压缩的内核,vmlinuz是压缩的内核. 一般来讲大家很容易理解的是这样的:系统内核 vmlinuz被加载到内存后开始提供底层支持,在内核的支持下各种模块,服务等被加载运行.这样当然是大家最容易接受的方式,曾经的linux就是这样的运行的.假设你的硬盘是scsi 接口而你的内核又不支持这种接口时,你的内核就没有办法访问硬盘,当然也没法加载硬盘上的文件系统,怎么办?好办!把内核加入scsi驱动源码然后重新编译出一个新的内核文件替换原来vmlinuz.需要改变标准内核默认提供支持的例子还有很多,如果每次都需要编译内核就太麻烦了.后来的linux就提供了一个灵活的方法来解决这些问题---initrd.img 1.3 initrd.img ininrd.img是什么呢?initrd 的含义是initialized ram disk. ramdisk是用一部分内存模拟成磁盘,让操作系统访问.我们可以通过下列的方式来解压initrd.img,来看看这个文件系统中有的文件: #file initrd.img /*查看一下这个文件的格式,如果是gzip compressed data,那么可以用下面的方式来操作*/ #cp init.img /initrd (目录initrd是自己建立的) #cd /initrd #mv initrd.img initrd.gz (改个名字) #gunzip initrd.gz (解压之后得到一个initrd的文件,用file命令可以看 到它是一个cpio格式的压缩档) #mkdir tmp #cd tmp #cpio -id < /initrd (通过这条命令可以将initrd提取出来,这样在当前的tmp目录下面可以看到文件:bin,dev,etc,firmware,init,lib,lib64,mode les,proc,sbin,selinux,sys,tmp,usr,var). initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd中mount根文件系统中需要装载的模块.这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件.在启动完成的阶段,根文件系统可以重新mount到其他设备上.我们常在编译核心的使用,使用make menuconfig,其中对某些而外的驱动,是可以选择以模块编译,还是<*>直接编译到核心里面.例如ext3文件系统驱动,如果核心需要放在该文件系统上,可以有两个方法: 引用 1、把其全都编译到内核中,则只需要一个内核文件系统即可启动; 2、把其编译为模块,然后通过initrd虚拟的内存系统加载; 也就是说initrd会在内存虚拟一个文件系统,然后可以根据不同的硬件加载不同的驱动,而不需要重新编译整个核心.,大部分的发行版都会通过这种方式对驱动进行加载. 1.4 anaconda 系统启动,加载启动映像,在内存中建立了linux系统环境后,解析安装程序映像文件,将安装程序载入内存,执行主执行程序anaconda,该程序是具体安装程序的一个口,负责启动具体的安转过程,完成linux系统的安装. Anaconda安装程序支持两种安装方式:交互式安装和非交互式安装. 交互式安装:就是安装过程中提示用户设置一些网络、和分区设置. 非交互式:通过kickstart配置文件实现自动化安装. 下面来查看anaconda文件内容: 进入安装盘镜像,将install.img挂载出来,执行以下命令: Mount -o loop -squashfs(可要可不要) images/install.img /mnt/stage2 Cd /mnt/stage2 解析后,我们可以看到,安装程序的主执行体anaconda在./usr/bin目录下,它是用python语言写的,其它安装脚本模块均在./usr/lib/anaconda目录下,今后的行文中,除非是anaconda主执行体,其余均指./usr/lib/anaconda目录下的模块,并将该目录简称为anaconda主目录. anaconda主目录的结构: Installclasses:子目录中的各个模块定义了在安装过程中用户可选择的安装类型.redhat9.0下包含了四个文件workstation.py,server.py,custom.py和personal_desktop.py.其中,workstation.py描述了工作站安装类型,server.py描述了服务器安装类型,custom.py描述了用户自定义安装类型,personal_desktop.py描述了个人桌面安装类型.每个安装类型描述文件根据相应安装类型的特点,分别对安装步骤、分区策略以及安装包的取舍给出了不同的方案. Iw子目录下包含所有安装图形界面类所在的模块,每个图形界面对应一个类,负责相应安装步骤图形界面的具体外观显示及与用户的交互,(可能)调用anaconda主目录下的相关安装行为模块完成具体的安装操作. textw子目录和iw子目录含义是一致的,只是包含的是字符安装模式的前端字符用户界面类所在的模块,每个字符用户界面对应一个类,负责与用户的交互,字符界面的采用了python的snack库. 如果说用户界面类是处理安装程序外观的话,则anaconda主目录下的各python模块则执行每个安装界面背后具体的安装行为,包括那些无用户界面安装步骤的安装操作. 1.5 isolinux.cfg配置文件 default vesamenu.c32 # 第一行,default vesamenu.c32,的,要用到菜单功能,有这个vesamenu.c32文件 #prompt 1 timeout 600 # 倒计时 600就是6秒 display boot.msg #显示一条信息,这里可以修改 menu background splash.jpg #显示菜单栏的安装界面背景图片 menu title Welcome to NeoKylin Linux Security OS V5! #显示菜单栏标题 menu color border 0 #ffffffff #00000000 #菜单栏边框颜色 menu color sel 7 #ffffffff #ff000000 #选中文字颜色 menu color title #0000ff #0000ff #标题颜色 menu color tabmsg 5 #ffffffff #00000000 menu color unsel #000000 #000000 #未选中颜色 menu color hotsel 6 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar #fafac0 #fafac0 label install #表示我们是要安装系统 #下面的是我们安装的时候看到的安装界面信息,如果我们安装时选择了某一项,相应的操作是通过这个文件来设置. menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg xdriver=vesa nomodeset quiet label install text menu label Install system with ^basic video driver (text) kernel vmlinuz append initrd=initrd.img ks=cdrom:/isolinux/ks_text.cfg xdriver=vesa nomodeset quiet label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue label local menu label Boot from ^local drive localboot 0xffff label memtest86 menu label ^Memory test kernel memtest append - 2.Linux系统启动概览
图1 启动概览 3. 加载BIOS 当你打开计算机电源,计算机会加载BIOS(Basic Input Output System).系统加电后会读取其中各项数据, BIOS信息是如此的重要,以至于计算机在最开始就找到它.这是BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等.在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的. 在此之后,PC获得了第一启动设备代号. 4. Boot Loader 4.1 stage1 第一启动设备上面的第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,里面存放了预启动信息、分区表信息.当启动设备找到之后,加载MBR到RAM中执行.在linux系统中,这个阶段读取的文件是/boot/grub/stage1.一旦这个boot loader加载到RAM,BIOS就把计算机控制权交给它. 内存中运行的MBR包括了程序代码和分区表两个部分,如图2所示.512bytes中的前446bytes用来放bootloader,其中既有可执行代码也有错误消息文件.接下来的64bytes是四个分区表,每个16bytes.是两个bytes的magic number(其实就是0xAA55),主要是用来校验这个MBR是不是有效.stage1 bootloader的主要功能就是装载第二引导程序(stage2) ,这主要是归结于在主引导扇区中没有足够的空间用于其他操作.图2 MBR结构图 要查看 MBR 的内容,可下面的命令: # dd if=/dev/sda of=mbr.bin bs=512 count=1 # od -xa mbr.bin 显示结果为: 0000000 …… * 0001000 最左边表示的是文件的偏移量,用八进制表示的,(0001000)表示成十进制就是512,这个dd命令需要以root用户的身份运行,它从 /dev/sda上读取前 512 个字节的内容,并将其写入mbr.bin文件中.od命令会以十六进制和ASCII码格式打印这个二进制文件的内容. 4.2 stage1.5 在/boot/grub目录下面,有fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,stage1.5和文件系统有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么此时就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的stage1.5. 4.3 stage2 Stage2 Boot Loader 就是在操作系统内核运行之前运行的一段小程序.通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备,并且加载内核. 我们常常把first-stage(stage1)和second-stage(stage2)的boot loaders合称为Linux Loader(LILO)或是x86 PC环境下的GRand Unified Bootloader (GRUB). 在GRUB中,通过文件/boot/grub/grub.conf来显示一个菜单或是输入命令 .GRUB相对于LILO的最大的好处是它能够读懂各种linux的文件系统.实际上,GRUB是把前面说的两个stage的boot loader扩展到三个阶段,也就是在stage1之后,加入了stage1.5 boot loader,来完成对文件系统的认知的.比如reiserfs_stage1_5 (从一个 Reiser文件系统)或者e2fs_stage1_5 (从ext2或者ext3文件系统)加载.当这个stage 1.5 boot loader加载运行之后,stage 2 boot loader才加载. grub是在grub.conf的支配下运行的 ,一旦grub从它的命令行或者配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统. grub的功能: 1.能够实现启动哪个操作系统 2.grub的编辑模式可以直接向内核传递参数. 3.加密保护功能 在我系统/boot/grub/grub.conf文件中linux引导命令如下: # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making chan ges to this file # NOTICE: You do not have a /boot partition. This means that # all kernel and initrd paths are relative to /, eg. # root (hd0,0) # kernel /boot/vmlinuz-version ro root=/dev/sda1 # initrd /boot/initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=10 /*默认等待时间,可以设置的长一点*/ splashimage=(hd0,0)/boot/grub/splash.xpm.gz Hiddenmenu /*这个将menu菜单隐藏了,如果你安装了多个系统,可以将这个注释掉,则系统启动时选择操作系统会变的更加方便*/ title Red Hat Enterprise Linux (2.6.32-131.0.15.el6.i686) root (hd0,0) kernel /boot/vmlinuz-2.6.32-131.0.15.el6.i686 ro root=UUID= 922f42cd-a6af-4784-a743-b43753054838 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KE YTABLE=us crashkernel=auto rhgb quiet initrd /boot/initramfs-2.6.32-131.0.15.el6.i686.img root (hd0,0) ,root 表示用于定义你的grub的第二阶段用到的一些文件包配置文件和kernel文件所在的分区的,(hd0,0)表示的是第一块硬盘的第一个主分区.grub不管你是什么硬盘,都叫hd,第一块硬盘hd0,第一个分区0 ,表示为(hd0,0) . 文件中的kernel命令用来指定内核所在的位置,"/"代表(hd0,0),也就是grub的根目录. 这些信息记录在/var/log/dmesg,记录了初始化过程中的所有信息. initrd命令用来指定初始化RAM的img文件所在位置. 对grub命令进行加密: 1)使用命令/sbin/grub-md5-crypt来产生grub使用的密码 /sbin/grub-md5-crypt Password: Retype password: $1$3YbPF$FVKSKDFJKWJEKJF90XRkrl 2)修改/boot/grub.conf加入password --md5 $1$3YbPF$FVK SKDFJKWJEKJF90XRkrl,这句话一定要加在title之前.这样在重启系统时在grub的启动grub菜单时,想按下e进入编译模式时,要先按下p输入grub密码. 当stage 2加载完毕,GRUB可以列出可用的kernel(在/boot/grub/grub.conf中定义).你可以选择其中的一个,并且设置你选中的kernel的启动参数. 当stage 2 boot loader加载到内存后,默认的kernel映像和initrd映像会加载到内存中.这些映像加载完毕之后,stage 2 boot loader就会激活kernel映像. 5. kernel Stage 2 bootloader之后,内核已经加载到了内存中,控制权转移到了kernerl.这个kernel一般还不是一个可执行的kernel,而是压缩过的kernel映像.通常这个映像使用zlib压缩为zImage (compressed image,小于512KB) 或者是bzImage (big compressed image,大于512KB).在这个映像的初始部分是一个小模块,进行一些基本的硬件初始化工作,然后把可执行的kernel部分解压出来,放到内存高位.接下来,这个模块就调用kernel,开始kernel引导工作.当解压缩内核完成后,屏幕输出"OK, booting the kernel".系统将解压后的内核放置在内存之中,kernel会立即初始化系统中各设备并做相关配置工作,其中包括CPU、I/O、存储设备等.在2.6内核中,支持两种格式的initrd,一种是2.4内核的文件系统镜像image-initrd,一种是cpio格式.以 cpio 格式为例,内核判断initrd为cpio的文件格式后,会将initrd中的内容释放到rootfs中.initrd一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统/时,会先访问initrd 文件系统.将initrd中的内容打开来看,会发现有bin、devetc、lib、procsys、sysroot、 init等文件(包含目录).其中包含了一些设备的驱模拟块,比如scsi ata等设备驱动模块,同时还有几个基本的可执行程序 insmod, modprobe, lvm,nash.主要目的是加载一些存储介质的驱动模块,如上面所说的scsi ideusb等设备驱动模块,初始化LVM,把/根文件系统以只读方式挂载 initrd中的内容释放到rootfs中后,Kernel会执行其中的init文件,这里的init是一个nash脚本,由nash解释器执行.这个时候内核的控制权移交给init文件处理,我们查看init文件的内容,主要也是加载各种存储介质相关的设备驱动. 驱动加载后,会创建一个根设备,然后将根文件系统/以只读的方式挂载.这步结束后,执行switchroot,转换到真正的根/上面去,同时运行/sbin/init程序,这就是我们系统的1号进程,此后,系统启动的控制权移交给 init 进程.关于switchroot,这是在nash中定义的程序. 总结:在整个kernel的启动中,在stage 2的boot loader载入到内存中的initial-RAM disk (initrd) 会被拷贝到RAM中,并挂载起来.它以一个临时的文件系统的身份在RAM中工作,kernel在没有任何物理设备挂载的情况下也可以完整的启动起来.正是所有与外围设备相关的交互都可以放到initrd中,kernel本身虽然很小,但却支持范围极其广的硬件设备.在kernel的启动完成之后,root文件系统就会回滚(通过pivot_root),initrd的root文件系统被卸载,实际的root文件系统被挂载起来. Initrd存在是Linux Kernel需要适应多种不同的硬件架构,但是将所有的硬件驱动编入Kernel又是不实际的,Kernel也不可能每新出一种硬件结构,就将该硬件的设备驱动写入内核.实际上LinuxKernel仅是包含了基本的硬件驱动,在系统安装过程中会检测系统硬件信息,根据安装信息和系统硬件信息将一部分设备驱动写入 initrd .这样在以后启动系统时,一部分设备驱动就放在 initrd 中来加载. 综上,kernel的主要操作包括: 1.Device探测 2.驱动程序初始化 3.以只读方式加载根文件系统 4.启动init进程 initrd是inital ram disk的宿写. 当存在initrd的时候,机器启动的过程大概是以下几个步骤(当initrd这一行用noinitrd 命令代替后,就不存在initrd了) 1)boot loader(grub)加载内核和initrd.img 2)内核将压缩的initrd.img解压成正常的ram disk并且释放initrd所占的内存空间 3)initrd作为根目录以读写方式被挂载 4)initrd里面的文件linuxrc被执行 5)linuxrc挂载新的文件系统 6)linuxrc使用pivot_root系统调用指定新的根目录并将现有的根目录place到指定位置. 7)在新的文件系统下正式init 8)initrd被卸载 6. init进程 6.1 读取inittable 内核被加载运行完成之后,第一个运行的程序便是/sbin/init,这个程序会去读取/etc/inittab文件,并在其中找一行指定默认运行级别的代码,然后根据指定级别运行初始化服务. /etc/inittab中的配置信息格式如下: id:runlevel:action:process id:标示符 runlevel:运行级别 action:对应运行级别所进行的操作 process:执行的命令 runlevel运行等级设定如下: 0:关机 1:单用户模式 2:无网络支持的多用户模式 3:有网络支持的多用户模式 4:保留,未使用 5:有网络支持有X-Window支持的多用户模式 6:重新引导系统,即重启 其中的action有如下选项: respawn:表示init程序对此process进行监控,即使此进程被终止也立即被启动; wait:表示init进程只调用一次此process,并等待其结束后再进行下一步操作; initdefault:表示系统运行后默认进入的运行级别;进入某个级别会默认开始执行对应级别的各种进程,故此处不定义process,如果此条记录不存在,会直接进入文本模式; sysinit:系统启动时准备运行的命令,此命令直接指向系统启动后运行的第一个初始化脚本/etc/rc.d/rc.sysinint; powerfail:表示当电源被切断后(有ups时)运行后面的proces ; powerokwait:当电源监测发现电源恢复则执行后面的process ; ctrlaltdel:允许init在用户于控制台键盘上按下C t r l A l t D e l组合键时,重新启动系统.注意,如果该系统放在一个公共场所,系统管理员可将C t r l A l t D e l组合键配置为别的行为,比如忽略等. 6.2 在单用户模式下引导 一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,尽可能少地运行系统服务,其中包含登录.单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死. 一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1.内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了.内核同时也为init指定命令行,init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关). 有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,应该尽可能地运行fsck). 如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式.这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的.文件系统不连贯的现象极为少见,通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然. 安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码.否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘). 不同的运行级有不同的用处,也应该根据自己的不同情形来设置. 6.3 执行rc.sysinit 在设定了运行等级后,Linux系统执行的初始化脚本文件/etc/rc.d/rc.sysinit对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统它做的工作有: 1. 激活udev和selinux; 2. 通过读取/etc/sysctl.conf设置内核参数 3. 设置系统时间 4. 加载键盘映射 5. 启用swap分区 6. 设置主机名 7. 检查根文件系统,并以读写方式重新挂载根文件系统 8. 激活LVM和RAID设备 9. 启动磁盘限额 10. 挂载其他文件系统 11. 清理过期文件锁和PID文件 在执行sysinit脚本中,默认调用/etc/sysconfig中的文件来进行设置系统的环境,若想看系统加载的信息可以利用dmesg来查看. 6.4 开启和关闭服务 开启和关闭和服务是按照文件/etc/rc.d/rcX.d/[KS]来执行的. 终止"K"开头的服务,然后启动"S"开头的服务. 对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录.这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字.比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中.在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字.如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头.许多情况下,这些命令脚本程序的执行顺序都很重要.为了安排它们的执行顺序,在字母S或者 K的后面紧跟着一个两位数字,数值小的在数值大的前面执行.比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55 named之前执行. 系统先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序.对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数. 6.5 自定义脚本程序 执行/etc/rc.d/rc.local,Redhat Linux中的运行模式2、3、5都把/etc/rc.d/rc.lo cal做为初始化脚本中的一个,Linux留给用户进行个性化的地方.你可以把你想设置和启动的东西放到这里. 7. 登陆 完成了系统所有的启动任务后,到了我们用户输入用户名和密码.Linux的账号验证程序是login ,login会对用户名进行分析:如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出.这通常用来系统维护时防止非root用户登录.只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录./etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制. 在分析完用户名后,login将搜索/etc/passwd以及/etc/shadow来验证密码以及设置账户的其它信息,比如:主目录是什么、使用何种shell.如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为/bin/bash. login程序成功后,会向对应的终端在输出最近一次登录的信息(在/var/log/lastlog中有记录),并检查用户是否有新邮件(在/usr/spool/mail/的对应用户名目录下).然后开始设置各种环境变量:对于bash来说,系统寻找/etc/profile脚本文件,并执行它;然后如果用户的主目录中存在.bash_profile文件,就执行它,在这些文件中又可能调用了其它配置文件,所有的配置文件执行后后,各种环境变量也设好了,这时会出现大家熟悉的命令行提示符,到此整个启动过程就结束了.