当前位置: 首页 > Linux

Linux开机-关机脚本执行顺序及自启动脚本练习

时间:2023-04-06 23:23:04 Linux

linuxLinux是一个开源的计算机操作系统内核。它是一个用C语言编写的类Unix操作系统,符合POSIX标准。1990年代初Linux刚出现时,只是以源代码的形式出现,用户需要在其他操作系统下编译才能使用。后来出现了一些正式版本。最流行的官方版本有:SUSE、RedHat、Fedora、Debian、Ubuntu、CentOS、Gentoo等。用户可以根据自己的经验和喜好选择合适的Linux发行版。最初LinusTorvalds将Linux置于禁止任何商业活动的法规之下,但后来改为GNU通用公共许可证第二版。该协议允许任何人修改或分发该软件,包括商业活动,只要遵守该协议,所有基于Linux的软件也必须以该协议的形式发布并提供源代码。对于开发者来说,经常会接触到LINUX系统,甚至维护和开发,所以需要对启动/关闭过程有一定的了解,尤其是当大部分服务器都是Linux系统的时候,我们重启和切换服务是必须保证服务的功能不能中断,这就需要对linux的运行过程有深入的了解。本文仅记录一小部分过程。Linux操作系统运行级别Linux基于运行级别的概念使用了一个名为SysVinit的特殊启动工具。它在不同的系统上可能完全不同,所以不能假设一个脚本在某个Linux发行版上就可以正常工作。SysVinit工作在runlevel模式下,一般有7个(从0到6)runlevels(其实可以有更多的runlevels,但是是为了特殊情况,一般不会用到。详见init(8)),每个runlevel对应对于一组预先设定的任务,当启动一个运行级别时,计算机需要执行相应的任务。默认操作级别为3,不同操作级别说明如下:0:关闭计算机1:单用户模式??2:无网络多用户模式??3:有网络多用户模式??4:保留自定义,否则同操作级别35:同运行级别4,一般用于图形界面(GUI)登录(如X的xdm或KDE的kdm)6:重启计算机,可以使用runlevel查看,和您还可以在/etc/inittab文件中看到以下内容:#默认运行级别。RHS使用的运行级别是:#0-停止(不要将initdefault设置为此)#1-单用户模式#2-多用户,没有NFS(与3相同,如果你没有网络)#3-完全多用户mode#4-unused#5-X11#6-reboot(DoNOTsetinitdefaulttothis)#id:3:initdefault:#Systeminitialization.si::sysinit:/etc/rc.d/rc.sysinit表示我们系统目前的运行级别是3,所以我们需要看的是/etc/rc3.d下的内容。其实里面是有软链接的,所有的软链接都指向/etc/init.d/中的脚本文件的命名约定如下:[K|S][编号][服务名称]-->../init.d/servicenameS表示Start,service[number]表示脚本的运行优先级。脚本越小,运行优先级越高[服务名称]表示服务的名称。因此,如果我们需要定义一个服务启动的优先级(顺序),我们需要指定脚本的编号。开机过程中加载内核,开机,开始读取BIOS并进行主机自检;通过BIOS获取第一可引导设备,读取主引导区(MBR),获取引导管理程序;LILO启动后,如果选择WithLinuxastheoperatingsystemreadytoboot,首先加载的是内核。请记住,当时计算机内存中没有操作系统,PC(由于其自然设计缺陷)还无法访问机器上的所有内存。因此,内核必须在可用RAM的第一个兆字节内完全加载。为此,对内核进行了压缩。该文件的头部包含必要的代码,可以将CPU置于安全模式(从而解除内存限制),然后解压缩内核的其余部分。内核在内存中解压后,就可以运行了。这时内核只知道自己内置的各种函数,也就是说编译成模块的内核部分还不能使用。最基本的是,内核必须有足够的代码来设置它自己的虚拟内存子系统和根文件系统(通常是ext2文件系统)。内核启动并运行后,对硬件的检查将确定需要初始化哪些设备驱动程序。从这里开始,内核就可以挂载根文件系统了(这个过程类似于Windows识别和访问C盘的过程)。内核挂载根文件系统后,会启动并运行一个名为init的程序。init进程init程序开始执行系统初始化,首先读取/etc/inittab文件中的配置。在配置上,一般会先执行/etc/rc.d/rc.sysinit,然后执行/etc/init.d/functions,设置环境变量等,读取runlevel的配置级别。对于嵌入式开发,在执行rcN.d之前会有/etc/init.d/rcS单用户模式启动脚本执行。根据init设置的initdefault执行daemonstart(/etc/rc.d/rc[0-6].d/*),执行脚本以启动服务。在关闭时按顺序关闭服务。rc0.d~rc.6.d文件夹对应的是0-6级操作系统运行时需要执行的脚本。这些文件夹里的文件都是软链接文件,指向指定位置的脚本,而这些软链接都是指向同一个文件夹/etc/init.d/下的脚本文件,加载本地设置(/etc/init.d//rc.d/rc.local)rc.local文件,/etc/profile文件。该文件是系统启动时任何用户登录时执行的文件。在任何用户登录之前,root用户也会再次执行。~/.bash_profile文件。每个用户都存在此文件。它在用户登录时自动执行,并具有用户权限。它导出的环境变量对用户启动的后续进程有效。自启动脚本实践如果用户需要在开机后以root权限自动执行一些脚本,最好的办法就是编辑/etc/rc.d/rc.local文件。如果每一个用户登录,都要执行脚本,比如设置一些环境变量。然后应该修改/etc/profile文件。如果特定用户在登录时要执行特定脚本,例如设置用户特定的环境变量,则应修改~/.bash_profile文件。============/etc/profile=============这个文件设置了系统每个用户的环境信息。当用户第一次登录时,该文件被执行。并从/etc/profile.d目录中的配置文件中收集shell设置。===========/etc/bashrc===========为每个这个文件由运行bashshell的用户执行。打开bashshell时会读取此文件。==================~/.bash_profile===============每个用户都可以使用这个文件来输入shell信息专用于自己使用。当用户登录时,该文件只执行一次!默认情况下,他会设置一些环境变量,执行用户的.bashrc文件.==========~/.bashrc=========这个文件包含了你的bashshell特有的bash信息,当你登录和每次打开一个新的shell时,这个文件被.==========~/.profile==========在Debian中使用.profile文件代替.bash_profilefile.profile(Bourneshell和Kornshell使用)和.login(CShell使用)是.bash_profile的同义词,用于与其他shell兼容。在Debian中使用.profile文件而不是.bash_profile文件。===============~/.bash_logout===============每次退出系统(退出bashshell)时执行这个文件。linux怎么启动程序详解