Linux执行init服务全流程

合集下载

开机第四阶段:init进程对系统初始化流程图

开机第四阶段:init进程对系统初始化流程图

/sbin/init|--->/etc/init/rcS.conf|--->exec /etc/rc.d/rc.sysinit 执行第一个脚本(Ubuntu中为/etc/init/rc-sysinit.conf) |--->/bin/hostname 获取主机名(设置$HOSTNAME)|--->/etc/sysconfig/network 配置网络基本参数|--->/proc/mounts 检测并挂载procfs,sysfs到/proc,/sys|--->/etc/init.d/functions 包含一些通用函数,会被/etc/init.d(是到rc.d/init.d的链接)下的脚本用到 |--->/etc/sysconfig/i18n设置终端字符集|--->/etc/sysconfig/init设置终端和图形界面的一些参数|--->deamon(),killproc(),pidofproc()一些通用函数|--->status(),echo_success()等|--->update_boot_stage(),strstr()等|--->/selinux/enforce 检查SELinux的状态|--->/etc/system-release 打印熟悉的发行版信息“Welcome to SentOS ..."|--->/proc/cmdline 获取内核启动的命令行参数|--->/proc/sys/kernel/modprobe 获取modprobe的位置(为/sbin/modprobe)|--->/sbin/sysctl初始化硬件(通过sysctl设置运行时内核参数)|--->kill $nashpid 杀死所有的nash进程(我们在initrd中使用的shell)|--->/sbin/start_udev 启动udev(动态设备管理进程)|--->/bin/taskset 设置进程的默认CPU亲合值(即优先使用哪个CPU,用在多处理器环境中) |--->/etc/sysconfig/modules/*.modules 加载其他用户自定义的模块|--->sysctl -e -p /etc/sysctl.conf 配置内核参数|--->/proc/devices 获取设备号及相应设备名,以便进行设备初始化|--->/sbin/dmraid 激活software raid|--->/sbin/kpartx “/dev/mapper/..." 为software raid上的每块硬盘创建设备映射|--->/.autofsck 是否自动执行文件系统检查|--->sulogin 若为单用户模式,执行单用户登录程序|--->plymouth --show-splash显示启动时的背景画面|--->/etc/sysconfig/readonly-root 设置root文件系统挂载方式|--->从/etc/fstab挂载暂存设备|--->/etc/rwtab, /etc/rwtab.d/* 挂载其他有卷标的分区|--->ip addr show 获取并设置网上ip地址|--->从/etc/fstab挂载持久数据的存储设备|--->/etc/statetab, /etc/statetab.d/* 持载其他持久数据的存储设备|--->/sbin/fsck 检查文件系统|--->umount -a & reboot -f 如果检查失败,卸载文件系统并重启|--->如果文件系统检查没有失败,以读写方式重新挂载root文件系统|--->挂载所有其他的文件系统|--->cat /var/lib/random-seed >/dev/urandom 初始化伪随机数生成器|--->/usr/sbin/system-config-keyboard,passwd,...配置机器相关参数(如果有需要的话) |--->/etc/sysconfig/network 重新读取网络配置数据,并重设hostname|--->清除相关的/, /var,/tmp数据|--->/sbin/swapon 开启各个交换区分(根据/proc/swaps)|--->/usr/sbin/system-config-network-cmd 执行引导时的网络配置(传递内核启动的netprofile参数) |--->dmesg -s 131072 > /var/log/dmesg 转储内核启动的消息信息|--->/etc/inittab|--->id:5:initdefault:查找initdefault定义的运行级别(为5,图形用户界面)|--->telinit $runlevel 切换到对应级别运行|--->/etc/init/rc.conf|--->exec /etc/rc.d/rc $RUNLEVEL|--->/etc/profile.d/lang.sh 设置语言环境|--->/etc/rc.d/rc5.d/KNxxxx 先关闭相关服务(在关闭系统时也会执行)--->/etc/rc.d/init.d/xxxx|--->/etc/rc.d/rc5.d/SNxxxx 再开启相关服务|--->etc/rc.d/rc5.d/xxxx|--->/etc/rc.d/rc.local 在所有init脚本运行完之后运行,可在些添加自己的初始化命令(Ubuntu中为/etc/rc.local) |--->/etc/init/start-ttys.conf 启动tty1-tty6设备|--->/etc/sysconfig/init 指定tty设备,通常为/dev/tty1-/dev/tty6|--->/etc/init/tty.conf|--->exec /sbin/mingetty $TTY 在每个tty设备上启动mingetty|--->成功后就可以通过Ctrl+Alt+F1..F6在各个不同的tty之间切换######################################### 字符界面 ####################################|--->fork()--->/sbin/mingetty 运行mingetty程序,出现字符登录界面|--->/etc/issue 在登录界面上显示发行版信息|--->exec("/bin/login",...) 运行/bin/login程序,验证用户名和口令|--->/etc/passwd 读取passwd文件核对用户名和口令|--->everzhou:x:500:500:everzhou:/home/everzhou:/bin/bash|--->切换到工作目录/home/everzhou|--->初始化环境变量$HOME,$PATH等|--->/etc/motd 显示当天的消息|--->检查新邮件|--->exec("/bin/bash",...) 运行bash程序|--->/etc/profile 执行这些脚本中的命令|--->.bash_profile或.bashrc|--->ENV=$HOME/.anyfilename; export ENV 运行$ENV指向的脚本(如果设置了的话) |--->bash运行中 mingetty,login最后替换成了bash,登录成功########################################## 图形界面 ####################################### |--->/etc/init/prefdm.conf|--->exec /etc/X11/prefdm -nodaemon 准备启动指定的X图形界面(X Display Manager)|--->/etc/sysconfig/i18n 设置语言环境|--->/etc/sysconfig/desktop 读取指定的DM配置(如果有的话)|--->exec /usr/sbin/gdm 启动指定的DM(gdm, kdm, wdm或xdm,默认为/usr/sbin/gdm) |--->启动X server窗口|--->/etc/gdm/custom.conf 根据配置在X窗口中显示登录界面|--->用户选择语言、键盘布局、会话等|--->/usr/share/xsessions/gnome.desktop 读取会话要显示的名称--->Exec=gnome-session 指定默认的会话程序|--->用户输入用户名和密码|--->用/bin/login验证用户名和密码|--->/etc/gdm/PreSession/* 执行会话前的一些任务(比如更改X窗口的默认背景)|--->/etc/gdm/PostLogin/* 执行一些登录后立即需要运行的命令|--->/etc/gdm/Xsession gnome-session--->/etc/X11/xinit/Xsession启动GNOME会话 |--->/etc/X11/xinit/xinitrc-common导入Xsession与xinitrc共用的代码|--->/etc/profile.d/lang.sh 设置i18n环境|--->/etc/X11/Xresources 读取用户登录时需要载入的全局资源 |--->/etc/X11/Xmodmap 读取的全局的键盘配置(用于xdm和xinit,用startx启动图形界面时要用到) |--->/etc/X11/xinit/xinitrc.d/* 运行所有的xinitrc脚本 |--->exec -l $SHELL -c gnome-session执行特定的环境设置(以前是执行 ./Xclients.d/Xclients.gnome-session.sh) |--->/etc/X11/xinit/Xclients 运行各个X客户端的脚本(或者$HOME/.xsession,或者$HOME/.Xclients) |--->/etc/sysconfig/desktop 读取指定的会话程序配置(如果有的话)|--->exec "$(type -p gnome-session)" 默认运行gnome-session,进入GNOME桌面 |--->GNOME桌面运行中 ,mingetty,login最后替换成了gnome程序,登录成功|--->/etc/gdm/PostSession/* GNOME会话结束时运行的脚本########################## 在字符界面下通过startx启动图形界面 ############################## |--->/bin/bash 在字符界面的Shell下|--->/usr/bin/startx|--->记录$HOME目录和/etc/X11/xinit下的.xinitrc和.xserverrc文件以$HOME目录下的为优先|--->解析用户指定的client、server、display参数及其选项|--->没有指定参数时就设为前面记录的.xinitrc和.xserverrc文件|--->XAUTHORITY=$HOME/.Xauthority 设置XAUTHORITY环境变量|--->设置X server的权限信息|--->xinit $client $clientargs -- $server $display $serverargs 启动X server和第一个X client |--->/etc/X11/xinit/xinitrc 用来运行各个X client(上面没有指定第一个client时) |--->/etc/X11/xinit/xinitrc-common 导入Xsession与xinitrc共用的代码|--->/etc/profile.d/lang.sh 设置i18n环境|--->/etc/X11/Xresources 读取用户登录时需要载入的全局资源|--->/etc/X11/Xmodmap 读取全局的键盘配置|--->/etc/X11/xinit/xinitrc.d/* 运行所有的xinitrc脚本|--->/etc/X11/xinit/Xclients 运行各个X client的脚本(或者$HOME/.Xclients) |--->/etc/sysconfig/desktop 读取指定的会话程序配置(如果有的话)|--->exec "$(type -p gnome-session)" 默认运行gnome-session,进入GNOME桌面|--->GNOME桌面运行中 mingetty,login最后替换成了gnome程序,登录成功|--->/etc/gdm/PostSession/* GNOME会话结束时运行的脚本。

linux中init命令的详细解释

linux中init命令的详细解释

linux中init命令的详细解释linxu下的init命令是进程初始化工具。

下面由店铺为大家整理了linux的init命令的详细解释的相关知识,希望对大家有帮助!一、linux中的init命令的详细解释init命令init命令是Linux下的进程初始化工具,init进程是所有Linux的进程的父进程,它的进程号为1。

init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。

语法init(选项)(参数)选项-b:不执行相关脚本而直接进入单用户模式;-s:切换到单用户模式。

参数运行等级:指定Linux系统要切换到的运行等级。

二、linux中的init命令的详解实例几个常用的命令查看系统进程命令:ps -ef | head查看init的配置文件:more /etc/inittab查看系统当前运行的级别:runlevel运行级别到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。

这个级别从0到6 ,具有不同的功能。

你也可以在/etc/inittab中查看它的英文介绍。

#0 停机(千万不能把initdefault 设置为0)#1 单用户模式#2 多用户,没有 NFS(和级别3相似,会停止部分服务)#3 完全多用户模式#4 没有用到#5 x11(Xwindow)#6 重新启动(千万不要把initdefault 设置为6)三、linux的init命令的六种模式简介6种模式中有两种是系统内定的:0:停止系统运行。

init 0〈回车〉相当于 halt〈回车〉。

6:重启系统。

init 6〈回车〉相当于 reboot〈回车〉。

如果你了解/etc/inittab文件,就千万不要把0设为缺省登录模式,否则你的Linux的运行就只能两点一线了——开机←→停机,或者是开机←→重启的无限循环。

嵌入式linux系统的启动流程

嵌入式linux系统的启动流程

嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。

这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。

2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。

Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。

3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。

内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。

4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。

在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。

5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。

init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。

6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。

这些服务和应用程序通常运行在用户空间,提供各种功能和服务。

以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。

同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。

arm版本linux系统的启动流程

arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。

在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。

本文将详细介绍ARM版本Linux系统的启动流程。

一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。

在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。

引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。

二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。

内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。

内核需要设置异常向量表,以便正确处理异常。

2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。

3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。

init进程是系统中所有其他进程的父进程,负责系统的初始化工作。

三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。

在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。

设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。

它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。

四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。

启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。

2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。

linux main函数执行流程

linux main函数执行流程

linux main函数执行流程
在Linux系统中,C程序的主函数(main函数)执行流程遵循
以下步骤:
1. 程序启动,当你在终端中输入可执行文件的名称并按下回车
键时,操作系统会创建一个新的进程来运行该程序。

2. 加载程序,操作系统会将可执行文件从磁盘加载到内存中,
并为程序分配必要的资源,比如堆栈空间、全局变量等。

3. 运行 main 函数,一旦程序被加载到内存中,操作系统会找
到程序中的 main 函数,并开始执行它。

main函数是C程序的入口点,程序会从这里开始执行。

4. 执行 main 函数中的代码,main函数中的代码会按照顺序
被执行,它可能包括变量声明、函数调用、逻辑判断、循环等操作。

5. 返回值,当 main 函数执行完毕时,它会返回一个整型值作
为程序的退出状态码。

通常情况下,返回 0 表示程序顺利执行,而
其他值则表示程序出现了错误。

6. 程序结束,一旦 main 函数执行完毕并返回了退出状态码,
操作系统会关闭程序所占用的资源,并终止该进程的执行。

总的来说,Linux系统中的 main 函数执行流程遵循程序加载、main 函数执行、返回值传递和程序结束这几个基本步骤。

通过这些
步骤,程序能够在Linux系统上正确地执行并完成它的任务。

Slackware Linux操作系统启动过程详解

Slackware Linux操作系统启动过程详解

Slackware Linux操作系统启动过程详解Joe Brockme IE r 研究了Slackware Linux init 进程。

他讨论了系统如何初始化服务、各种运行级别是什么,以及如何从缺省安装中添加或除去服务来定制系统。

我们的示例使用x86 平台上的Slackware Linux 发行版(请参阅本文后面的参考资料)。

大多数信息可用于其它Linux 发行版,但在细节处会略有不同。

尤其是,与其说Slackware 的init 结构类似于System V 结构,还不如说它更类似于BSD Unix结构,尽管Slackware 的最新发行版中的程序做了一些让步,它们要将服务添加到启动,但期望这些服务是System V 目录结构。

(请参阅侧栏,“BSD 和系统V init 脚本之间的差异”。

)所有进程的父代当Linux 机器引导时,究竟会发生什么?在计算机的BIOS 完成其任务后,系统会读取硬盘(或软盘,或CD-ROM,或Zip 驱动器……Linux 是非常灵活的)的第一位,并会遇到引导装入程序。

虽然GRUB 和其它装入程序也逐渐变得流行,但通常这就是Linux 装入程序(LInux LOader),一般称作LILO。

然后LILO 将Linux 内核装入内存,并开始展示它的魔力。

Linux 内核初始化了诸如SCSI 卡之类的设备,以及其它内核中内置的硬件设备。

然后内核运行init,它是除内核之外在系统运行的第一个进程。

如果执行ps ax | grep 1 ,就会看到init 的进程ID (PID) 是1。

装入init 之后,它会读取inittab 以查看下一步做什么。

inittab 告诉init 要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件。

运行级别运行级别是由系统上的所有服务在某个给定时间定义的(基本上是操作方式)。

Linux 可以有几种操作方式:单用户方式、单用户联网方式、多用户方式、始于X 窗口的多用户方式,等等。

ubuntu init原理

ubuntu init原理

ubuntu init原理Ubuntu init原理Ubuntu是一个基于Linux的操作系统,而init是Linux系统中的一个重要组件。

本文将介绍Ubuntu init的原理和工作流程。

一、什么是initinit是Linux系统中的第一个进程,它是所有其他进程的父进程。

当Linux系统启动时,init进程是最先启动的进程,它负责启动其他系统进程和服务。

init进程的PID(进程ID)始终为1。

二、init的工作流程1. 加载内核当计算机启动时,BIOS会加载操作系统的内核到内存中。

在Ubuntu中,内核文件通常是/vmlinuz。

一旦内核加载完成,控制权就会交给内核。

2. 内核启动内核启动后,会进行一系列的初始化工作,包括初始化硬件设备、建立内存空间映射等。

然后,内核会执行init程序。

3. 执行init程序在Ubuntu中,init程序是由systemd来实现的。

systemd是一个用于控制系统进程和服务的初始化系统。

当内核启动后,会加载systemd进程(systemd的PID为1),systemd会根据配置文件进行初始化工作。

配置文件通常位于/etc/systemd/system目录下,其中包括启动服务的配置文件和其他初始化信息。

4. 启动系统服务在初始化过程中,systemd会根据配置文件启动各种系统服务。

这些服务可以是系统自带的,也可以是用户定义的。

例如,systemd 会启动网络服务、打印服务、SSH服务等,以确保系统正常运行。

5. 启动用户会话在系统服务启动完成后,systemd会启动用户会话。

用户会话是指用户登录后的工作环境,可以是图形界面或命令行界面。

系统会根据用户的配置文件(如/etc/passwd)来决定用户会话的启动方式。

例如,如果用户配置了使用图形界面登录,则会启动相应的图形环境;如果用户配置了使用命令行界面登录,则会启动终端。

6. 用户登录用户可以使用用户名和密码登录系统。

linux服务方式启动程序脚本(init.d脚本)

linux服务方式启动程序脚本(init.d脚本)

linux服务⽅式启动程序脚本(init.d脚本)这才是真正正确的让jar后台启动的脚本,⽹络上的各种nohoup的脚本都是临时执⾏⼀次任务⽤的。

#!/bin/sh## init.d script##### BEGIN INIT INFO# Provides: mongodb# Required-Start: $network $local_fs $remote_fs# Required-Stop: $network $local_fs $remote_fs# Should-Start: $named# Should-Stop:# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: An object/document-oriented database# Description: MongoDB is a high-performance, open source, schema-free# document-oriented data store that's easy to deploy, manage# and use. It's network accessible, written in C++ and offers# the following features:# .# * Collection oriented storage - easy storage of object-# style data# * Full index support, including on inner objects# * Query profiling# * Replication and fail-over support# * Efficient storage of binary data including large# objects (e.g. videos)# * Auto-sharding for cloud-level scalability (Q209)# .# This package is build with V8 JavaScript engine.# .# High performance, scalability, and reasonable depth of# functionality are the goals for the project.### END INIT INFODAEMON=/usr/local/jdk1.8.0_40/bin/javaOPTION=-jarVAR=/usr/local/danabang.storage/danabang.storage.jarDESC=danabang.storage# Default defaults. Can be overridden by the /etc/default/$NAMENAME=danabang.storagePIDFILE=/var/data/danabang.storage/log/$NAME.pidRUNAS=tangruiif test ! -x $DAEMON; thenecho "Could not find $DAEMON"exit 0fi. /lib/lsb/init-functionsSTARTTIME=1DIETIME=10 # Time to wait for the server to die, in seconds# If this value is set too low you might not# let some servers to die gracefully and# 'restart' will not workrunning_pid() {# Check if a given process pid's cmdline matches a given namepid=$1name=$2[ -z "$pid" ] && return 1[ ! -d /proc/$pid ] && return 1cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`# Is this the expected server[ "$cmd" != "$name" ] && return 1return 0}running() {# Check if the process is running looking at /proc# (works for all users)# No pidfile, probably no daemon present[ ! -f "$PIDFILE" ] && return 1pid=`cat $PIDFILE`running_pid $pid $DAEMON || return 1return 0}start_server() {# Start the process using the wrapperstart-stop-daemon --background --start --quiet --pidfile $PIDFILE \ --make-pidfile --chuid $RUNAS \--exec $DAEMON -- $OPTION $VARerrcode=$?return $errcode}stop_server() {# Stop the process using the wrapperstart-stop-daemon --stop --quiet --pidfile $PIDFILE \--user $RUNAS \--exec $DAEMONerrcode=$?return $errcode}force_stop() {# Force the process to die killing it manually[ ! -e "$PIDFILE" ] && returnif running ; thenkill -15 $pid# Is it really dead?sleep "$DIETIME"sif running ; thenkill -9 $pidsleep "$DIETIME"sif running ; thenecho "Cannot kill $NAME (pid=$pid)!"exit 1fififirm -f $PIDFILE}case "$1" instart)log_daemon_msg "Starting $DESC" "$NAME"# Check if it's running firstif running ; thenlog_progress_msg "apparently already running"log_end_msg 0exit 0fiif start_server ; then# NOTE: Some servers might die some time after they start,# this code will detect this issue if STARTTIME is set# to a reasonable value[ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time if running ; then# It's ok, the server started and is runninglog_end_msg 0else# It is not running after we did startlog_end_msg 1fielse# Either we could not start itlog_end_msg 1fi;;stop)log_daemon_msg "Stopping $DESC" "$NAME"if running ; then# Only stop the server if we see it runningerrcode=0stop_server || errcode=$?log_end_msg $errcodeelse# If it's not running don't do anythinglog_progress_msg "apparently not running"log_end_msg 0exit 0fi;;force-stop)# First try to stop gracefully the program$0 stopif running; then# If it's still running try to kill it more forcefullylog_daemon_msg "Stopping (force) $DESC" "$NAME"errcode=0force_stop || errcode=$?log_end_msg $errcodefi;;restart|force-reload)log_daemon_msg "Restarting $DESC" "$NAME"errcode=0stop_server || errcode=$?# Wait some sensible amount, some server need this[ -n "$DIETIME" ] && sleep $DIETIMEstart_server || errcode=$?[ -n "$STARTTIME" ] && sleep $STARTTIMErunning || errcode=$?log_end_msg $errcode;;status)log_daemon_msg "Checking status of $DESC" "$NAME"if running ; thenlog_progress_msg "running"log_end_msg 0elselog_progress_msg "apparently not running"log_end_msg 1exit 1fi;;*)N=/etc/init.d/$NAMEecho "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1;;esacexit 0。

linux systemd service 的执行流程

linux systemd service 的执行流程

linux systemd service 的执行流程systemd是Linux系统中的一个初始化系统和服务管理器,它负责启动系统的各个组件和服务。

systemd通过使用单一进程和配置文件来替代传统的SysV init脚本,提供了更为先进和灵活的管理方式。

下面是systemd服务的执行流程,详细描述了服务的启动、运行和停止的过程。

1.系统引导:当计算机启动时,系统会加载内核并触发init进程,init进程会负责初始化系统。

在现代Linux系统中,init进程通常是systemd。

systemd的启动是由initramfs(初始内存文件系统)引导的,initramfs负责加载关键的驱动程序和文件系统,然后启动systemd。

2.systemd进程启动:一旦initramfs引导完成,systemd进程将被启动。

systemd会读取其配置文件,主要是/etc/systemd/system.conf和/etc/systemd/user.conf,以确定系统和用户级别的默认配置。

3.Target的激活:systemd使用”target”的概念,一个target是一组相关的服务的集合。

例如,graphical.target表示启动图形用户界面,multi-user.target表示启动多用户模式。

systemd会根据默认目标(通常是multi-user.target)启动相应的服务。

4.服务单元的激活:每个服务在systemd中都由一个单元文件(unit file)定义,这些文件通常存储在/etc/systemd/system/目录中。

systemd会读取目标关联的服务单元,并按需激活这些服务。

服务单元包括服务的配置信息、依赖关系、执行路径等。

5.依赖关系解析:systemd会解析服务单元之间的依赖关系,并按照正确的顺序启动这些服务。

依赖关系可以指定服务之间的启动顺序,确保在需要的时候正确地启动和停止服务。

linux系统初始化脚本init.rc的语法介绍

linux系统初始化脚本init.rc的语法介绍

Android初始化语言包含了四种类型的声明:Actions(行动)、Commands(命令)、Services(服务)和Options(选项)。

所有这些都是以行为单位的,各种记号由空格来隔开。

C语言风格的反斜杠号可用于在记号间插入空格。

双引号也可用于防止字符串被空格分割成多个记号。

行末的反斜杠用于折行。

注释行以井号(#)开头(允许以空格开头)。

Actions和Services声明一个新的分组。

所有的命令或选项都属于最近申明的分组。

位于第一个分组之前的命令或选项将会被忽略。

Actions和Services有唯一的名字。

如果有重名的情况,第二个申明的将会被作为错误忽略。

(???我们是否应该以覆盖来代替忽略) Actions(行动) ---------- Actions其实就是一序列的Commands(命令)。

Actions都有一个trigger(触发器),它被用于决定action的执行时间。

当一个符合action触发条件的事件发生时,action会被加入到执行队列的末尾,除非它已经在队列里了。

队列中的每一个action都被依次提取出,而这个action中的每个command(命令)都将被依次执行。

Init在这些命令的执行期间还控制着其他的活动(设备节点的创建和注销、属性的设置、进程的重启)。

Actions的形式如下: on 《trigger》 《command》 《command》 《command》 Services(服务) ---------- Services(服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。

Services(服务)的形式如下: service 《name》《pathname》 [ 《argument》 ]* 《option》 《option》 ... Options(选项) ---------- Options(选项)是一个Services(服务)的修正者。

linux启动顺序讲解

linux启动顺序讲解

linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。

Linux基础命令---init进程

Linux基础命令---init进程

Linux基础命令---init进程initinit是所有进程的⽗进程,它由内核执⾏,可以启动其他所有的进程。

init指令在启动时会参考/etc/inittab⽂件的配置,完成其他进程的启动。

init通常不会由⽤户进程执⾏,并且期望进程id为1。

如果不是这样,它将实际执⾏telinit(8)并将所有参数传递给它。

init管理的进程称为作业,并由/etc/init⽬录中的⽂件定义。

init(8)是⼀个基于事件的init守护进程。

这意味着作业将通过系统状态发⽣的更改⾃动启动和停⽌,包括作业的启动和停⽌。

这与基于依赖项的init守护进程不同,后者启动⼀组指定的⽬标作业,并通过迭代它们的依赖项来解决它们应该启动的顺序和其他作业所需的顺序。

主要事件是startup (7)事件,在守护进程加载完其配置后发出。

其他有⽤的事件是以作业更改状态发出的starting (7)、started (7)、stopping (7)和stopped (7)事件。

init有7种运⾏等级运⾏等级说明0关机1单⽤户模式2多⽤户模式,不启动nfs3多⽤户模式,有⽹络功能4保留5图形界⾯6重启Upstart init(8)守护进程不跟踪运⾏级别本⾝,⽽是完全由⽤户空间⼯具实现。

为表⽰运⾏级的更改⽽发出的事件是runlevel(7)事件。

此命令的适⽤范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法init [选项] [参数]2、选项列表选项说明--help显⽰帮助⽂档--version显⽰命令版本--verbose将有关作业状态更改和事件释放的详细消息输出到系统控制台或⽇志,这对于调试引导⾮常有⽤。

3、实例⽆。

Linux操作系统启动流程图文详解

Linux操作系统启动流程图文详解

Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。

上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。

加载完BIOS信息,计算机将根据顺序进⾏启动。

2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。

被复制到物理内存的内容是Boot Loader,然后进⾏引导。

3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。

4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。

5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。

简要分析linux系统的启动过程

简要分析linux系统的启动过程

简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。

2)读取MBR,进⾏MBR引导。

3)grub引导菜单(Boot Loader)。

4)加载内核kernel。

5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。

7)启动内核模块,执⾏不同级别的脚本程序。

8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。

linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。

下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。

[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。

linux-start

linux-start

/etc/rc.d/rc.sysinit
主要做在各个运行模式中相同的初始化工作,包括: ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢
调入keymap以及系统字体 启动swapping 设置主机名 设置NIS域名 检查(fsck)并mount文件系统 打开quota 装载声卡模块 设置系统时钟 等等。

/etc/rc.d/rc
可以设置)来执行相应目录下的脚本。凡是以Kxx开头的 , 都以stop为参数来调用;凡是以Sxx开头的,都以start为参 数来调用。调用的顺序按xx 假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调 用
➢ /etc/rc.d/rc3.d/下的脚本。 ➢ linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为
# 0 - 停机(千万不能把initdefault 设置为0 ) # 1 - 单用户模式
# # # # # #
s 2 3 4 5 6
-
init s = init 1 多用户,没有 NFS 完全多用户模式(标准的运行级) 没有用到 X11 多用户图形模式(xwindow) 重新启动(千万不要把initdefault设置为6 )
Linux开机流程
1
linux开机顺序总览
启动方式和执行 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 ➢ /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模 式 ➢ /etc/rc.d/rc.local #相应级别服务启动之后、 在执 行该文件(其实也可以把需要执行的命令写到该文件 中) /sbin/mingetty # 等待用户登录
chkconfig(续)

简述linux启动流程

简述linux启动流程

简述linux启动流程Linux系统启动的过程可以分为以下几个步骤:BIOS自检、引导加载程序、内核初始化、系统初始化和登录。

当计算机启动时,BIOS(Basic Input/Output System,基本输入/输出系统)会自检硬件设备,确保它们正常工作。

BIOS还会检查启动设备的设置,并寻找引导加载程序。

接下来,引导加载程序(Boot Loader)会被加载到计算机的内存中。

引导加载程序的作用是在计算机启动时加载操作系统内核。

常用的引导加载程序有GRUB(GRand Unified Bootloader)和LILO(LInux LOader)。

引导加载程序加载内核后,内核开始初始化。

内核是操作系统的核心,负责管理计算机的硬件和软件资源。

内核初始化的过程包括设置内核参数、初始化进程、加载驱动程序等。

在这个阶段,内核还会挂载根文件系统,以便后续的系统初始化和运行。

系统初始化是Linux启动过程的下一个阶段。

在系统初始化过程中,Linux会启动各种系统服务和进程,包括网络服务、文件系统服务、用户管理服务等。

此外,系统还会进行一些配置操作,如加载配置文件、设置环境变量等。

系统初始化的过程可能会涉及到一些启动脚本和配置文件,以确保系统能够正确地启动和运行。

当系统初始化完成后,用户可以通过登录界面或命令行界面登录到Linux系统。

在登录之前,系统可能会要求用户输入用户名和密码进行身份验证。

一旦验证通过,用户就可以开始使用Linux系统提供的各种功能和应用程序了。

总结起来,Linux启动流程包括BIOS自检、引导加载程序、内核初始化、系统初始化和登录。

这个过程确保了Linux操作系统能够正常启动并提供各种功能和服务。

通过了解Linux启动流程,我们可以更好地理解Linux系统的运行机制,并能够更好地管理和使用Linux操作系统。

init 0原理

init 0原理

init 0原理
init 0是一个用于关机的命令,它的原理是将系统转到运行级别0,也就是关机状态。

在Linux系统中,运行级别0通常用于关机或重启操作。

关机是指将计算机系统从运行状态转为关闭状态的过程。

当我们执行init 0命令时,系统会先执行一系列的关闭操作,包括关闭正在运行的进程、卸载文件系统、释放硬件资源等。

最后,系统会发送信号通知硬件设备关闭电源,从而实现关机的目的。

init 0命令的执行过程大致如下:
1.首先,系统会检查当前运行级别是否为0,如果已经是0,则表示系统已经处于关机状态,不需要再执行关机操作。

2.系统会发送信号给所有正在运行的进程,通知它们关闭并保存当前的状态。

3.系统会卸载所有已挂载的文件系统,确保数据已经完全写入硬盘。

4.系统会释放所有的硬件资源,包括CPU、内存、磁盘等。

5.最后,系统会发送信号给电源管理模块,通知它关闭电源,从而完成关机操作。

通过执行init 0命令,我们可以安全地将计算机系统关闭,避免数据丢失或硬件损坏的风险。

在日常使用中,我们可以通过命令行或操作系统提供的关机按钮执行关机操作。

总结起来,init 0命令的原理是将系统转到运行级别0,从而实现关机操作。

它通过关闭进程、卸载文件系统、释放硬件资源等步骤,确保系统安全地关闭。

关机是计算机使用中常见的操作,通过init 0命令可以快速、安全地实现关机。

无论是在服务器还是个人电脑上,我们都可以通过执行该命令来关闭系统。

zynq linux操作基本流程

zynq linux操作基本流程

zynq linux操作基本流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Zynq SoC启动Linux操作系统的基本流程详解Zynq System-on-Chip (SoC) 是Xilinx公司的一款高度集成的器件,它结合了ARM处理器和可编程逻辑(FPGA)部分,广泛应用于嵌入式系统设计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档