linux中/etc/rc.local与/etc/init.d详解

发布时间:2020-03-26编辑:脚本学堂
有关linux中rc.local文件与init.d用法诚意解,在rc.local中自定义开机启动程序,init.d目录中存放脚本,主要为linux以rpm包安装时设定的一些服务启动脚本,感兴趣的朋友参考下。

linux中/etc/rc.local与/etc/init.d用法

1. /etc/rc.local
自定义开机启动程序,把需要开机自动运行的程序写在这个脚本中。Linux系统启动流程图文详解有关linux开机启动脚本的顺序

在完成 run level 3 的服务启动后,如果还有其他的动作想要完成时,要寄一封 mail 给某个系统管理帐号,通知他,系统刚刚重新开机完毕,那么,是否应该要制作一个 shell script 放置在 /etc/rc.d/init.d/ 里面,然后再以连结方式连结到 /etc/rc.d/rc3.d/中呢?

当然不需要!/etc/rc.d/rc.local 档案就可以执行您自己想要执行的系统指令了。像不像早期 DOS 年代的 autoexec.bat 与 config.sys 呢? ^_^
也就是说,我有任何想要在开机时就进行的工作时,直接将他写入 /etc/rc.local , 那么该工作就会在开机的时候自动被载入喔!而不必等登入系统去启动!

一般来说,鸟哥就很喜欢把自己制作的 shell script 完整档名写入 /etc/rc.d/rc.local ,如此一来,开机就会将我的 shell script 执行过。

也就是说,在linux启动的最后阶段,系统会执行存于rc.local中的命令。和windows里面的“启动”菜单有点像,但是设置麻烦些,功能更强大

使用情况:
1)oracle等服务器的启动:如果你需要你的oracle可以随着系统一起启动,你可以去看看/etc/oratab这个文件,然后去了解它,你就会发现这里才是它正确的位置所在
2)静态路由: 对于需要增加大量的不是本网段的路由时,很多人喜欢在/etc/rc.d/rc.local里添加类似
 

route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.224.0.251
route add -host 192.168.100.1gw 10.224.0.251

2、/etc/init.d
这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动,停止,重启这些服务。举个例子来说,如果你要重新启动 sendmail 的话,而且你的 sendmail 是以 rpm 来安装的,那么下达 /etc/rc.d/init.d/sendmail restart 就可以直接启动 sendmail 啰!
前面说到,/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别), 是该运行init.d里的脚本了,但是并不是直接运行,而是有选择的因为系统并不需要启动所有的服务。

那么,系统是如何选择哪些需要启动哪些不要呢?这时刚才说的运行级别就起作用了。在决定了系统启动的run level之后,/etc/rc.d/rc这个脚本先执行。在RH9和FC7的源码中它都是一上来就check_runlevel()(虽然实现的代码不一样,也大同小异),知道了运行级别之后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d。每个目录下都是到init.d目录的一部分脚本一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在rc5.d下,但是放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件,真正干活到init.d里的脚本。

启动文件rc.local、/etc/bash.bashrc、~/bashrc、/etc/profile、~/.profile【转载from joyride】值得了解
分类: Linux c编程 2011-04-20 22:39 1534人阅读 评论(1) 收藏 举报
bashloginshell图形远程登录ubuntu

系统启动文件
1、/etc/rc.local
系统启动需要加载的守护进程(服务)和执行的程序。
该文件只有一条“exit 0”语句,用户可加入自己的启动程序,但需要保证最后的返回是0。

脚本代码:
 

复制代码 代码示例:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#启动SSHD
/usr/sbin/sshd

#启动Telnet
service openbsd-inetd start

#启动WEB服务器lighttpd
cd /home/usr948/lighttpd-1.4.19/usr/bin
./lighttpd -f ./lighttpd.conf

#启动xdm,xmanager需要使用它来进行远程登录到桌面。
/usr/bin/xdm

exit 0

注意,该文件中不能加入用户shell下的脚本,例如加入 alias ll="ls -l" 无效,因为该文件的执行环境是在系统shell下,系统尚未进入用户shell环境。
为什么加入上面的alias语句无效:
要加入启动脚本,可修改 /etc/bash.bashrc 或 ~/bashrc 或 /etc/profile 或 ~/.profile。将文件中的语句“ # alias ll='ls -l' ”中的“#”号去掉即可。
关于ubuntu的bash启动文件从bash的几个初始化文件 - [Ubuntu]
(1)/etc/profile
全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
(2)/ect/bashrc
Ubuntu没有此文件,与之对应的是/ect/bash.bashrc
它也是全局(公有)的
bash执行时,不管是何种方式,都会读取此文件。
(3)~/.profile
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。
另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile和~/.bash_login。
(4)~/.bash_login
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。
(5)~/.bash_profile
Unbutu默认没有此文件,可新建。
只有bash是以login形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc。
(6)~/.bashrc
当bash是以non-login形式执行时,读取此文件。若是以login形式执行,则不会读取此文件。
(7)~/.bash_logout
注销时,且是longin形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

例子:
1、图形模式登录时,顺序读取:/etc/profile和~/.profile
2、图形模式登录后,打开终端时,顺序读取:/etc/bash.bashrc和~/.bashrc
3、文本模式登录时,顺序读取:/etc/bash.bashrc,/etc/profile和~/.bash_profile
4、从其它用户su到该用户,则分两种情况:
1)如果带-l参数(或-参数,--login参数),如:su -l username,则bash是lonin的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile和~ /.bash_profile。
2)如果没有带-l参数,则bash是non-login的,它将顺序读取:/etc/bash.bashrc和~/.bashrc
5、注销时,或退出su登录的用户,如果是longin方式,那么bash会读取:~/.bash_logout
6、执行自定义的shell文件时,若使用“bash -l a.sh”的方式,则bash会读取行:/etc/profile和~/.bash_profile,若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh(这个不属于bash shell),则不会读取上面的任何文件。
7、以上例孩子中只要是读取到~/.bash_profile的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。