init linux详解
init
目录
一、Linux init 详解
二、运行级别
三、运行级别的配置
四、/etc/inittab中的特殊配置
一、Linux init 详解
init是Linux系统操作中不可缺少的程序之一。
所谓的init进程,它是一个由内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以init始终是第一个进程(其进程编号始终为1)。
内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
二、运行级别
那么,到底什么是运行级呢?
简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)
# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 (xwindow)
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)
三、运行级别的配置 运行级别的配置是在/etc/inittab行内进行的,如下所示:
12 : 2 : wait : / etc / init.d / rc 2
第一个字段:id标识符(是一个任意指定的标签);
第二个字段:运行级别(这里是2);
第三个字段:运行方式,表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。
第四个字段:进程:(命令执行设置运行级别时的一切“杂活”)它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。根据Linux版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。
init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:
id : 2 : initdefault :
你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。比如说,内核命令行参数的指定可通过LILO来执行。这样一来,你就可以选择单用户模式了(即运行级别1)。
系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时,
init 就会从/etc/inittab运行相应的命令。
四、/etc/inittab中的特殊配置
/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如:
1. powerwait
允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P
S并通知init电源已被切断的软件。
2. ctrlaltdel
允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。
3. sysinit
系统启动时准备运行的命令。比如说,这个命令将清除/tmp。
上面列出的特殊关键字尚不完整。其他的关键字及其使用详情,可参考你的inittab手册页。
五、在单用户模式下引导
一个重要的运行级别就是单用户模式(运行级别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已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。
不同的运行级有不同的用处,也应该根据自己的不同情形来设置。
例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入:
init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。
linux-linuxtop命令各参数详解
linux-linuxtop命令各参数详解
简介
top命令是Linux下常⽤的性能分析⼯具,能够实时显⽰系统中各个进程的资源占⽤状况,类似于Windows的任务管理器。
top显⽰系统当前的进程和其他状况,是⼀个动态显⽰过程,即可以通过⽤户按键来不断刷新当前状态.如果在前台执⾏该命令,它将独占前台,直到⽤户终⽌该程序为⽌. ⽐较准
确的说,top命令提供了实时的对系统处理器的状态监视.它将显⽰系统中CPU最“敏感”的任务列表.该命令可以按CPU使⽤.内存使⽤和执⾏时间对任务进⾏排序;⽽且该命令的
很多特性都可以通过交互式命令或者在个⼈定制⽂件中进⾏设定.
下⾯详细介绍它的使⽤⽅法。
参数含义
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
linux多线程 pthread常用函数详解
linux多线程 pthread常用函数详解
Linux多线程是指在Linux操作系统中运行的多个线程。线程是执行程序的基本单位,它独立于其他线程而存在,但共享相同的地址空间。在Linux中,我们可以使用pthread库来实现多线程程序。本文将详细介绍pthread库中常用的函数,包括线程的创建、退出、同步等。
一、线程创建函数
1. pthread_create函数
pthread_create函数用于创建一个新线程。其原型如下:
c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void
*(*start_routine) (void *), void *arg);
参数说明:
- thread:用于存储新线程的ID
- attr:线程的属性,通常为NULL
- start_routine:线程要执行的函数地址
- arg:传递给线程函数的参数
2. pthread_join函数
pthread_join函数用于等待一个线程的结束。其原型如下: c
int pthread_join(pthread_t thread, void retval);
参数说明:
- thread:要等待结束的线程ID
- retval:用于存储线程的返回值
3. pthread_detach函数
pthread_detach函数用于将一个线程设置为分离状态,使其在退出时可以自动释放资源。其原型如下:
c
int pthread_detach(pthread_t thread);
参数说明:
- thread:要设置为分离状态的线程ID
二、线程退出函数
1. pthread_exit函数
pthread_exit函数用于退出当前线程,并返回一个值。其原型如下:
c
void pthread_exit(void *retval);
Linux系统中查看防火墙的命令详解
Linux系统中查看防火墙的命令详解
Linux系统中如果要查看到防火墙的状态信息要怎么办呢?下面由店铺为大家整理了Linux系统中查看防火墙的命令详解,希望对大家有帮助!
Linux系统中查看防火墙的命令详解:一、service方式
查看防火墙状态:
[root@centos6 ~]# service iptables status
iptables:未运行防火墙。
Linux系统中查看防火墙的命令详解:二、iptables方式
先进入init.d目录,命令如下:
[root@centos6 ~]# cd /etc/init.d/
[******************]#然后
查看防火墙状态:
[******************]#/etc/init.d/iptablesstatus补充:Linux系统中开启关闭防火墙的命令
存在以下两种方式:
一、service方式
开启防火墙:
[root@centos6 ~]# service iptables start
关闭防火墙:
[root@centos6 ~]# service iptables stop
二、iptables方式
先进入init.d目录,命令如下:
[root@centos6 ~]# cd /etc/init.d/
[******************]#然后
暂时关闭防火墙:
[******************]#/etc/init.d/iptablesstop重启iptables:
[******************]#/etc/init.d/iptablesrestart
Linux根目录详解
Linux根⽬录详解
Linux不像windows有cdef磁盘,它是多根的系统 c:\ d:\ e:\,每个盘⾥有⼀个根⽬录,Linux就只有⼀个根⽬录/,其他的
所有⽂件都在这个根⽬录下:
了解Linux⽂件系统的⽬录结构,是学好Linux的⾄关重要的⼀步.,深⼊了解linux⽂件⽬录结构的标准和每个⽬录的详细功能,对于我们⽤好linux系统很重要,下⾯就先了解⼀下linux⽬录结构的相关知识.
1、/:根⽬录,位于Linux⽂件系统⽬录结构的顶层,⼀般根⽬录下只存放⽬录,不要存放⽂件,/etc、/bin、/dev、/lib、/sbin应该和根⽬录放置在⼀个分区中。
2、/bin,/usr/bin:这两个⽬录为命令⽂件⽬录,也称为⼆进制⽬录。包含了供系统管理员及普通⽤户使⽤的重要的linux命
令和⼆进制(可执⾏)⽂件,包含shell解释器等。
3、/boot: 该⽬录中存放系统的内核⽂件和引导装载程序⽂件,/boot/vmlinuz为linux的内核⽂件,以及/boot/gurb。⼀般情
况下都是单独分区,分区⼤⼩200M即可。
4、/dev: 设备(device)⽂件⽬录,存放linux系统下的设备⽂件,访问该⽬录下某个⽂件,相当于访问某个设备,存放连
接到计算机上的设备(终端、磁盘驱动器、光驱及⽹卡等)的对应⽂件,包括字符设备和块设备等,常⽤的是挂载光驱:mount /dev/cdrom /mnt。
5、/etc: 系统配置⽂件存放的⽬录,该⽬录存放系统的⼤部分配置⽂件和⼦⽬录,重要的配置⽂件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系统有关)、/etc/sysconfig(与⽹络有关)、/etc/xinetd.d等等,修改配置⽂件
之前记得备份。该⽬录下的⽂件由系统管理员来使⽤,普通⽤户对⼤部分⽂件有只读权限。
6、/home: 系统默认的⽤户宿主⽬录,新增⽤户账号时,⽤户的宿主⽬录都存放在此⽬录下,~表⽰当前⽤户的宿主⽬
midjourney指令参数
midjourney指令参数
Midjourney指令参数
Midjourney是一款基于Python的开源工具,用于在Linux系统中执行各种任务。它可以帮助用户轻松地进行系统管理、自动化脚本编写和部署等操作。Midjourney包含了许多指令参数,这些参数可以帮助用户更好地使用该工具。
一、Midjourney指令参数简介
Midjourney中的指令参数分为两类:主要参数和辅助参数。
主要参数包括:
1. init:初始化midjourney项目。
2. build:构建midjourney项目。
3. run:运行midjourney项目。
4. test:测试midjourney项目。
5. deploy:部署midjourney项目。
辅助参数包括:
1. -h/--help:显示帮助信息。
2. -v/--version:显示版本信息。
3. -d/--debug:启用调试模式。
4. -c/--config-file :使用指定的配置文件。
5. --no-colors:禁用控制台颜色输出。
二、主要参数详解
1. init
init指令用于初始化一个新的midjourney项目。在执行该指令之前,用户需要在本地创建一个新的目录,并将其作为当前工作目录。执行init指令后,Midjourney会自动创建一些必要的文件和目录结构,并生成一个默认的配置文件。
2. build
build指令用于构建midjourney项目。在执行该指令之前,用户需要确保已经完成了代码的编写,并将其保存在项目目录中。执行build指令后,Midjourney会自动将代码打包成一个可执行文件,并将其保存在指定的输出目录中。
3. run
run指令用于运行midjourney项目。在执行该指令之前,用户需要确保已经完成了代码的构建,并将其保存在输出目录中。执行run指令后,Midjourney会自动启动一个新的进程,并加载项目的主模块。
linux下的stdin,stdout,stderr
用户操作 Linux 下 stdin stdout stderr 的由来 收藏
现在就从linux kernel的源代码的角度来分析该。
二:fork()与execve()中stderr,stdio.stdout的继承关系
其实用继承这个词好像不太准确,要准确一点,可能复制更适合.
首先有二点:
1:父进程fork出子进程后,是共享所有文件描述符的(实际上也包括socket)
2:进程在execve后,除了用O_CLOEXEC标志打开的文件外,其它的文件描述符都是会复制到下个执行序列(注意这里不会产生一个新进程,只是将旧的进程替换了)
下面我们从代码中找依据来论证以上的两个观点.
对于第一点:
我们在分析进程创建的时候,已经说过,如果父过程在创建子进程的时候带了CLONE_FILES标志的时候,会和父进程共享task->files.如果没有定义,就会复制父进程的task->files.无论是哪种情况,父子进程的环境都是相同的.
代码如下:
static int copy_files(unsigned long clone_flags, struct task_struct * tsk)
{
struct files_struct *oldf, *newf;
int error = 0;
oldf = current->files;
if (!oldf)
goto out;
if (clone_flags & CLONE_FILES) {
atomic_inc(&oldf->count);
goto out;
}
tsk->files = NULL;
newf = dup_fd(oldf, &error);
if (!newf)
Android 开机启动流程
Android booting
1
Android的开机流程
1. 系统引导bootloader
1) 源码:bootable/bootloader/*
2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择
a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写
b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.img包含内核,基本的文件系统,用于工程模式的烧写
c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)
2. 内核kernel
1) 源码:kernel/*
2) 说明:kernel由bootloader加载
3. 文件系统及应用init
1) 源码:system/core/init/*
2) 配置文件:system/rootdir/init.rc,
3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能
4. 重要的后台程序zygote
1) 源码:frameworks/base/cmds/app_main.cpp等
2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process
a) 建立Java Runtime,建立虚拟机
rc.local介绍(linux启动系列之一)
rc.local介绍(linux启动系列之⼀)
linux有⾃⼰⼀套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
本⽂中假设inittab中设置的init tree为:/etc/rc.d/rc0.d/etc/rc.d/rc1.d/etc/rc.d/rc2.d/etc/rc.d/rc3.d/etc/rc.d/rc4.d/etc/rc.d/rc5.d/etc/rc.d/rc6.d/etc/rc.d/init.d
⽬录1. 关于linux的启动2. 关于rc.d3. 启动脚本⽰例4. 关于rc.local5. 关于bash启动脚本6. 关于开机程序的⾃动启动
1. 关于linux的启动
init是所有进程的顶层init读取/etc/inittab,执⾏rc.sysinit脚本(注意⽂件名是不⼀定的,有些unix甚⾄会将语句直接写在inittab中)
rc.sysinit脚本作了很多⼯作:
init $PATH
config network
start swap function
set hostname
check root file system, repair if needed
check root space
....
rc.sysinit根据inittab执⾏rc?.d脚本linux是多⽤户系统,getty是多⽤户与单⽤户的分⽔岭在getty之前运⾏的是系统脚本
2. 关于rc.d
所有启动脚本放置在 /etc/rc.d/init.d下rc?.d中放置的是init.d中脚本的链接,命名格式是:
S{number}{name}
K{number}{name}
S开始的⽂件向脚本传递start参数
K开始的⽂件向脚本传递stop参数
number决定执⾏的顺序
3. 启动脚本⽰例
这是⼀个⽤来启动httpd的 /etc/rc.d/init.d/apache 脚本:代码:#!/bin/bash
......
可以看出他接受start,stop,restart,status参数
initrd详解(转)
initrd详解(转)
1.什么是 Initrd
initrd 的英⽂含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, boot loader 会将存储介质中的 initrd ⽂件加载到内存,内核启动时会在访问真正的根⽂件系统前先访问该内存中的 initrd ⽂件系统。在 boot loader 配置了 initrd 的情况下,内核启动被分成了两个阶段,第⼀阶段先执⾏ initrd ⽂件系统中的“某个⽂件“,完成加载驱动模块等任务,第⼆阶段才会执⾏真正的根⽂件系统中的 /sbin/init 进程。这⾥提到的“某个⽂件“,Linux2.6 内核会同以前版本内核的不同,所以这⾥暂时使⽤了“某个⽂件“这个称呼,后⾯会详细讲到。第⼀阶段启动的⽬的是为第⼆阶段的启动扫清⼀切障爱,最主要的是加载根⽂件系统存储介质的驱动模块。我们知道根⽂件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞⼤、臃肿。Initrd 的⽤途主要有以下四种:
1. linux 发⾏版的必备部件
linux 发⾏版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。Linux 发⾏版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,⽣成包含安装系统硬件驱动的initrd,⽆⾮是⼀种即可⾏⼜灵活的解决⽅案。2. livecd 的必备部件
同 linux 发⾏版相⽐,livecd 可能会⾯对更加复杂的硬件环境,所以也必须使⽤ initrd。3. 制作 Linux usb 启动盘必须使⽤ initrd
usb 设备是启动⽐较慢的设备,从驱动加载到设备真正可⽤⼤概需要⼏秒钟时间。如果将 usb 驱动编译进内核,内核通常不能成功访问 usb 设备中的⽂件系统。因为在内核访问 usb 设备时, usb 设备通常没有初始化完毕。所以常规的做法是,在 initrd 中加载 usb 驱动,然后休眠⼏秒中,等待 usb设备初始化完毕后再挂载 usb 设备中的⽂件系统。4. 在 linuxrc 脚本中可以很⽅便地启⽤个性化 bootsplash。
Linux入门基础教程
Linux⼊门基础教程
转载⾃:
1. 1 Linux操作系统简介
Linux是⼀套免费使⽤和⾃由传播的类Unix操作系统,是⼀个基于POSIX和UNIX的多⽤户、多任务、⽀持多线程和多CPU的操作系统。它能
运⾏主要的UNIX⼯具软件、应⽤程序和⽹络协议。它⽀持32位和64位硬件。Linux继承了Unix以⽹络为核⼼的设计思想,是⼀个性能稳定的
多⽤户⽹络操作系统。1991年的10⽉5⽇,Linux创始⼈林纳斯·托⽡兹(Linus Torvalds)在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞
⽣,1994年3⽉,Linux 1.0发布,代码量17万⾏,当时是按照完全⾃由免费的协议发布,随后正式采⽤GPL(General Public License的缩
写,是⼀份GNU通⽤公共授权)协议。Linux具有如下优点:
Ø 稳定、免费或者花费少
Ø 安全性⾼
Ø 多任务,多⽤户
Ø 耗资源少
Ø 由于内核⼩,所以它可以⽀持多种电⼦产品,如:Android⼿机、PDA等。
1. 2 Linux发展趋势
随着IT产业的不断发展,⽤户对⽹站体验要求也越来越⾼,⽽⽬前主流⽹站后端承载系统都是Linux系统,⽬前Android⼿机全部基于Linux内
核研发。企业⼤数据、云存储、虚拟化等先进技术都是基于Linux系统。2010年据有关权威部门统计:将来⼏年内我国软件⾏业的从业机会⼗分庞⼤,中国每年对软件⼈才的需求将达到50万⼈左右。⽽对于
Linux 专业⼈才的就业前景,更是⼴阔;据悉在未来5-10年内 Linux 专业⼈才的需求将达到 120 万+!尤其是有经验的资深的Linux⼯程师⽬
前⾮常的缺乏,薪资也是⾮常诱⼈,平均⽉薪都是15-20K,能⼒强的薪资更⾼。
所以机会对每个⼈都是公平的,关键是我们每个⼈如何去⾏动,选择⼤于努⼒。
1. 3 Linux系统安装
在安装Linux系统之前,先来了解windows系统结构,windows系统⼀般是安装在C盘系统盘,同样Linux也有类似的系统盘(/根分
