Linux入职基础-5.19_详解操作shell启动(应用实战3)

详解操作shell启动(应用实战3) 

所谓shell,简单说就是命令行界面的一个软件(比如:/bin/bash),让用户可以直接与操作系统对话。

一、从init初始化开始简单回顾

内核(/vmunix,/boot/zImage等)文件加载至内存以后,就开始运行第一个程序 /sbin/init,它的进程编号(pid)为1,是所有子进程的父进程;它运行于内存保护段一直到系统关机才停止。

/sbin/init进程首先读取文件 /etc/inittab,简单流程如下:

首先,执行脚本/etc/rc.d/rc.sysinit,设定系统程序运行所需的环境。

##/etc/inittab文件,具体体现为如下:

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

其次,当rc.sysinit程序执行完毕后,将返回init继续解析/etc/inittab文件,下一步就是执行脚本/etc/rc.d/rc,它接受“运行级别”作为参数(比如3或5等),启动对应运行级别的开机启动程序(在Windows叫做"服务",在Linux就叫做"守护进程")。在init进程结束的时候执行/etc/rc.d/rc.local脚本,就是留给用户自定义开机启动所需的。

##/etc/inittab文件,具体体现为如下:

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

每个运行级别在/etc目录下面,都有一个对应的子目录,指定要加载的程序。

[root@localhost~]# ll /etc/rc*.d

/etc/rc0.d-> rc.d/rc0.d

/etc/rc1.d-> rc.d/rc1.d

/etc/rc2.d-> rc.d/rc2.d

/etc/rc3.d-> rc.d/rc3.d

/etc/rc4.d-> rc.d/rc4.d

/etc/rc5.d-> rc.d/rc5.d

/etc/rc6.d-> rc.d/rc6.d

上面目录名中的"rc"表示run command(运行程序),数字0~6表示对应运行级别,d表示directory(目录)含义。下面让我们看看 /etc/rc3.d 目录中到底指定了哪些程序。

[root@localhost~]# ls  /etc/rc.d/rc3.d | sort

K01dnsmasq

K02avahi-dnsconfd

K02NetworkManager

……

K89pand

K89rdisc

K91capi

S00microcode_ctl

S04readahead_early

……

S99local

S99smartd

可以看到,目录/etc/rc3.d中文件名都是"字母S或K+两位数字+程序名"的形式。在这个目录里,遵循如下可循的规则:

规则1、字母S,代表Start,就是启动的含义(启动脚本,传递的运行参数为start);

规则2、字母K,代表Kill,就是关闭的含义(关闭脚本,传递的运行参数为stop),比如,运行级别的切换,需要关闭一些程序;

规则3、后面的两位数字表示处理顺序,数字越小越早处理;数字相同时,则按照程序名的字母顺序启动;

规则4、目录/etc/rc3.d中的所有文件都是链接文件,它们指向另外一个目录/etc/init.d(而/etc/init.d指向/etc/rc.d/init.d目录)。

[root@localhost~]# ll /etc/rc3.d/

lrwxrwxrwx1 root root 16 Nov 12 23:38 S99smartd -> ../init.d/smartd

 [root@localhost ~]# ll   /etc/init.d

lrwxrwxrwx1 root root 11 Nov 12 23:34 /etc/init.d -> rc.d/init.d

可以得出,无论对应哪个运行级别,它们真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。至于在每个运行级别中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。

基本流程如下:

二、开启终端

/etc/rc.d/rc执行完毕后,返回/sbin/init进程。此时基本系统环境已经设置,各种守护进程也已经启动。/sbin/init进程接下来会启动6个虚拟终端或者是X Window图形界面来等待用户登录系统。实际参考的选项是在/etc/inittab内的这一段:

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingettytty5

6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5

x:5:respawn:/etc/X11/prefdm–nodaemon

从上面可以看出在2345的运行级别时,都会以respawn方式执行/sbin/mingetty程序,mingetty(表示get teletype)程序能启动终端、设置模式,同时它会显示一个命令行式的文本界面。

如果我们使用的是run level 5,那么/sbin/init除了要初始化这6个虚拟终端机之外,它还会执行/etc/X11/prefdm –nodaemon这个命令,prefdm脚本会启动X Window 的图形界面。

三、用户登录

一旦发现有活动的终端(比如,控制台、虚拟终端或者远程的终端模拟器接入),/sbin/mingetty程序会给出login提示符:提示输入用户及口令。

用户的登录方式有三种:

命令行界面登录

图形界面登录

ssh登录

现在简单介绍这三种方式,因为它们都有不同的方式对用户进行认证。

命令行界面登录: /sbin/mingetty接收到用户输入用户名和密码后,就调用/bin/login程序核对用户身份与密码,如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell/bin/bash)。比如,root用户,实际参考的选项是在/etc/passwd内的这一段:

##以下是控制台终端显示的命令行登录界面的进程情况,如下:


图形界面登录:

如果运行级为5(图形界面启动),init进程调用显示管理器,即则运行xdm程序,给用户提供xdm图形界面的登录方式,Gnome图形界面对应的显示管理器为gdm(GNOME Display Manager),然后用户输入用户名和密码。如果密码正确,启动用户的会话。

##run leve 5 终端登录进程情况:

##以下从虚拟终端启动图形界面登录的进程情况:

⑶ssh登录:

init进程调用sshd程序(Debian还会再运行/etc/pam.d/ssh),取代getty和login,然后启动shell。

##以下是sshd登录方式的进程情况:

四、进入 login shell

login程序验证成功后,会向对应的终端在输出最近一次登录的信息(在/var/log/lastlog中有记录),并检查用户是否有新邮件(在/usr /spool/mail/的对应用户名目录下)。

然后开始/bin/bash设置各种环境变量,它会读入一系列的配置文件,不同登录方式也存在差异:

⑴命令行界面登录方式:

对于/bin/bash来说,系统首先寻找/etc/profile脚本文件,并执行它, 这是对所有用户都有效的配置。

然后如果用户的主目录中存在以下三个配置文件:

~/.bash_profile

~/.bash_login

~/.profile

仅执行三者中之一个,其它两个不再执行,比如,要是 ~/.bash_profile 存在,就不会再读入后面两个文件了。在这些文件中又可以调用了其它配置文件,所有的配置文件执行完成后,各种环境变量也就设置好了,这时会出现大家熟悉的命令行提示符。

⑵图形界面登录方式:

只加载 /etc/profile 和 ~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。

⑶ssh登录

与第一种命令行界面登录方式的情况完全相同

五、打开 non-login shell

上一步完成以后,Linux的启动过程就算结束,用户已经可以看到命令行提示符或者图形界面了。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值