当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪linux中的login过程浅析      问题:添加了个用户,出现了一个情形,有的添加用户home目录下有.bashrc等相关文件,有的则没有,机型基本一样,添加命令是同一个,烦恼已来了。 系统启动过程,略去关注一个文件/etc/ini.........
    ▪有关Linux关机流程的一些思考      问题: 系统上面运行着monit和heartbeat,monit监控heartbeat的状态,当heartbeat进程出现问题的时候,monit会重新拉起heartbeat。这本来是一个perfect的功能,但是当重启时,heartbeat早于monit关闭,此时h.........
    ▪了解profile,bashrc,bash_profile之间的区别与联系      本文为大家介绍profile,bashrc,bash_profile之间的区别与联系,供大家学习参考。 /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文.........

[1]linux中的login过程浅析
    来源: 互联网  发布时间: 2013-12-24

问题:添加了个用户,出现了一个情形,有的添加用户home目录下有.bashrc等相关文件,有的则没有,机型基本一样,添加命令是同一个,烦恼已来了。
系统启动过程,略去关注一个文件/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/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

这里告诉我们有6个字符终端,可以供我们使用,从tty1到tty6,第一个字段是终端序号,第二个代表系统运行级别,我现在运行在3下面,那我ps就可以看到可以登录的终端:
root 3385 0.0 0.0 1664 472 tty1 Ss+ 19:31 0:00 /sbin/mingetty
root 3386 0.0 0.0 1664 472 tty2 Ss+ 19:31 0:00 /sbin/mingetty
root 3387 0.0 0.0 1664 468 tty3 Ss+ 19:31 0:00 /sbin/mingetty
root 3388 0.0 0.0 1664 476 tty4 Ss+ 19:31 0:00 /sbin/mingetty
root 3389 0.0 0.0 1664 476 tty5 Ss+ 19:31 0:00 /sbin/mingetty
root 3390 0.0 0.0 1664 476 tty6 Ss+ 19:31 0:00 /sbin/mingetty

当我们使用终端登录进去后我们发现其中的一个进程消失了。
root 3993 1 0 May14 tty2 00:00:00 /sbin/mingetty tty2
root 3994 1 0 May14 tty3 00:00:00 /sbin/mingetty tty3
root 3995 1 0 May14 tty4 00:00:00 /sbin/mingetty tty4
root 3996 1 0 May14 tty5 00:00:00 /sbin/mingetty tty5
root 3997 1 0 May14 tty6 00:00:00 /sbin/mingetty tty6

tty1哪去了,实际上tty1 进程掉用了login程序,tty1退出了,我们通过ps我们可以看到login进程。
root 7735 1 0 11:09 ? 00:00:00 login -- root
root 7781 7735 0 11:17 tty1 00:00:00 \_ -bash

我们看到login使用root用户,并且产生了子进程bash。
首先login的过程中,如果我们输入的用户名或者密码错误,那登陆就不会成功,这是显而易见的。
所以登陆过程分为3步:
1)、验证用户名密码
2)、获取初始化环境
3)、为用户启动shell

初始化shell环境

初始化shell环境主要做的事情:
1)、转到我们的home目录(chdir)
2)、把终端的所有权改成用户的(chown)
3)、改变终端的访问权限,以使用户可以读写
4)、通过setgid和initgroup来设置用户的group IDs
5)、用login所有的信息初始化环境: HOME, SHELL, USER LOGNAME, PATH
6)、改变我们的user ID(通过setuid), 同时触发登录的shell------execl("/bin/sh", "-sh", (char *)0);

到此,登陆完成。


    
[2]有关Linux关机流程的一些思考
    来源: 互联网  发布时间: 2013-12-24

问题:
系统上面运行着monit和heartbeat,monit监控heartbeat的状态,当heartbeat进程出现问题的时候,monit会重新拉起heartbeat。这本来是一个perfect的功能,但是当重启时,heartbeat早于monit关闭,此时heartbeat又被拉起,导致heartbeat双方通信出现问题。下面分析下系统关机的过程,并验证下解决问题的推断。

1.验证用户身份
只有root用户才可以执行关机或者重启命令,所以关机检查当前用户是不是超级用户。
 

代码如下:
bash-3.2$ id
uid=502(com) gid=502(com) groups=502(com),503(piduser)
bash-3.2$ /sbin/shutdown -h now
shutdown: you must be root to do that!

可以明显看到只有root用户才可以执行这条命令
2.解析命令行参数
这里我们只分析shutdown -r now 这条命令
这里的-r设置downlevel 为6
0是关机,6是重启
3. 检查关机命令是否在运行
4. 生成关机pid,在/var/run/shutdwon.pid
5. 忽略系统信号
6. 执行关机
 在/var/log/messages我们可以看到这条日志shutting down for system reboot,说明系统开始执行关机流程了。
7. 执行init
 关掉/etc/rc6.d下面以k开头的进程,然后执行kill -1 SIGTERM,最后执行kill -1 SIGILL
8. 完成关机。


    
[3]了解profile,bashrc,bash_profile之间的区别与联系
    来源: 互联网  发布时间: 2013-12-24

本文为大家介绍profile,bashrc,bash_profile之间的区别与联系,供大家学习参考。

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。(每个用户都有一个.bashrc文件,在用户目录下)
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。

在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:/.bash_profile、 ~/.bash_login、 ~/.profile。

如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi

~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /etc/bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。
(3)~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪shell脚本编程之case语句学习笔记 iis7站长之家
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3