Get To Know Linux: The /etc/init.d Directory
If you use Linux you most likely have heard of the init.d directory. But what exactly does this directory do? It ultimately does one thing but it does that one thing for your entire system, so init.d is very important. The init.d directory contains a number of start/stop scripts for various services on your system. Everything from acpid to x11-common is controlled from this directory. Of course it's not exactly that simple.
If you look at the /etc directory you will find directories that are in the form rc#.d (Where # is a number reflects a specific initialization level - from 0 to 6). Within each of these directories is a number of other scripts that control processes. These scripts will either begin with a "K" or an "S". All "K" scripts are run before "S" scripts. And depending upon where the scripts are located will determine when the scripts initiate. Between the directories the system services work together like a well-oiled machine. But there are times when you need to start or stop a process cleanly and without using the kill or killall commands. That is where the /etc/init.d directory comes in handy.
Now if you are using a distribution like Fedora you might find this directory in /etc/rc.d/init.d. Regardless of location, it serves the same purpose.
In order to control any of the scripts in init.d manually you have to have root (or sudo) access. Each script will be run as a command and the structure of the command will look like:
/etc/init.d/command OPTION
Where command is the actual command to run and OPTION can be one of the following:
- start
- stop
- reload
- restart
- force-reload
Most often you will use either start, stop, or restart. So if you want to stop your network you can issue the command:
/etc/init.d/networking stop
Or if you make a change to your network and need to restart it, you could do so with the following command:
/etc/init.d/networking restart
Some of the more common init scripts in this directory are:
- networking
- samba
- apache2
- ftpd
- sshd
- dovecot
- mysql
Of course there may be more often-used scripts in your directory - it depends upon what you have installed. The above list was taken from a Ubuntu Server 8.10 installation so a standard desktop installation would have a few less networking-type scripts.
But what about /etc/rc.local
There is a third option that I used to use quite a bit. This option is the /etc/rc.local script. This file runs after all other init level scripts have run, so it's safe to put various commands that you want to have issued upon startup. Many times I will place mounting instructions for things like nfs in this script. This is also a good place to place "troubleshooting" scripts in. For instance, once I had a machine that, for some reason, samba seemed to not want to start. Even afer checking to make sure the Samba daemon was setup to initialize at boot up. So instead of spending all of my time up front with this I simply placed the line:
/etc/init.d/samba start
in the /etc/rc.local script and Samba worked like a charm. Eventually I would come back and trouble shoot this issue.
Final Thoughts
Linux is flexible. Linux is so flexible there is almost, inevitably, numerous ways to solve a single problem. Starting a system service is one such issue. With the help of the /etc/init.d system (as well as /etc/rc.local) you can pretty much rest assured your service will start.
Advertisement
ABOUT JACK WALLEN
/etc/init.d
如果你使用过linux系统,那么你一定听过init.d目录。但是这个目录究竟是做什么用的?他基本上只做一件事,但是这件事是为你的整个系统服务的,所以init.d目录非常重要。这个目录里面包含了一系列系统里面服务的开启和停止的脚本。从acpid到x11-common的各项事务都受它控制。所以init.d没有想象的那么简单。
当你查看/etc目录时,你会发现许多rc#.d形式的目录。(#代表数字0-6,指相对的初始化水平)这些目录中包含许多进程的控制脚本。这些脚本以’K’或者’S’开头。所有以’K’开头的脚本先于以’S’开头的脚本运行。这些脚本所在位置将决定这些脚本启动的时间。这些系统系统服务像一个高效率的机器一样在这些目录间共同工作。有时候你想在不使用kill或者killall进程的情况下,干净的启动或者停止一个脚本的时候,、inin.d这个目录就派上用场了。
如果你是用的是Fedore系统,你将可以找到/etc/rc.d/init.d目录。无论init.d在什么位置,它都将发挥同样的作用。
为了能够使用init.d目录下的脚本,你需要有root或者sudo权限。所有的这些命令将被当做一个命令运行,这些命令的结构大致如下:
/etc/init.d/command OPTION
command指的是你实际运行的命令。OPTION可以是下面几种:
- start
- stop
- reload
- resart
- force-reload
大多数情况下你使用的是start,stop,restart。例如:你想关掉你的网路连接,你可以使用如下的命令:
/etc/init.d/networking restart
或者当你修改了你的网络配置,需要重启网络的时候。你可以使用下面的命令:
/etc/init.d/networking restart
这个目录下常用的脚本有:
- samba
- apache2
- ftpd
- sshd
- dovecot
- mysql
- networking
当然你的目录下可能含有其他的一些常用脚本。这个取决于你安装了什么服务。
/etc/rc.local
/etc/rc.local是我经常是用的另一个脚本。这个脚本在系统初始化脚本之后运行,所以你可以放心的将你想在系统启动后执行的脚本放在里面。通常我会将nfs的挂载脚本放在里面。同时也是一个放调试脚本的好地方。比如,有一次我的系统中得samba服务无法正常启动,尽管检查确认本该随着系统一起启动的。通常我也会话大量的时间去寻找原因,仅仅是在rc.local文件里下写下这么一行
/etc/init.d/samba start
samba无法启动的问题就解决了
总结
Linux系统是灵活的,正因为这种灵活性,同一个问题总可以找到多种解决方案。启动系统服务就是个很好的例子。 在/etc/init.d和/etc/rc.local的帮助下,你可以确保你的系统服务可以启动和运行。
https://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/
Get To Know Linux: The /etc/init.d Directory的更多相关文章
- Linux系统/etc/init.d目录
理解Linux系统/etc/init.d目录和/etc/rc.local脚本 http://blog.csdn.net/acs713/article/details/7322082 Linux文件目录 ...
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
一.关于/etc/init.d 如果你使用过Linux系统,那么你一定听说过init.d目录.这个目录到底是干嘛的呢?它归根结底只做了一件事情,但这件事情非同小可,是为整个系统做的,因此它非常重 ...
- linux中/etc/init.d [转]
一.关于/etc/init.d 如果你使用过linux系统,那么你一定听说过init.d目录.这个目录到底是干嘛的呢?它归根结底只做了一件事情,但这件事情非同小可,是为整个系统做的,因此它非常重要.i ...
- linux系统/sbin/init执行过程
对于Linux的启动过程,之前一直都是研究到内核运行/sbin/init,启动第一个用户进程为止,因为这部分一直都是在内核态工作,所以对于学习内核还是有帮助的,当时/sbin/init之后的过程也需要 ...
- Linux reboot与init 6区别
Reboot与init 6的区别 - flyingcloud_2008的专栏 - CSDN博客https://blog.csdn.net/flyingcloud_2008/article/detail ...
- linux 下的init 0,1,2,3,4,5,6知识介绍
一. init是Linux系统操作中不可缺少的程序之一. 所谓的init进程,它是一个由内核启动的用户级进程. 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后, ...
- Linux中/etc/init.d
原文链接:http://blog.163.com/laorenyuhai126@126/blog/static/193507792010525110516/ 在这个目录下的档案都是连结档,均指向到 ...
- 为什么linux系统中init被systemd替换了
Linux init 进程是系统初始化进程,比较古老了,所以出现了一些新的替代方案: Upstart – A init replacement daemon implemented in Ubuntu ...
- 基础(二):Linux系统/etc/init.d目录和/etc/rc.local脚本
原文来自http://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/ 译文来自http://blog.csdn. ...
随机推荐
- C++的学习笔记1
一: 为了惯例具有指针成员的类,必须定义三个复制控制成员:复制构造函数.赋值操作符和析构函数. 复制构造函数分配新元素并从被复制对象处复制值,赋值操作符撤销所保存的原对象并从右操作数向左操 ...
- 机器学习:gensim之Word2Vec 详解
一 前言 Word2Vec是同上一篇提及的PageRank一样,都是Google的工程师和机器学习专家所提出的的:在学习这些算法.模型的时候,最好优先去看Google提出者的原汁Paper和Proje ...
- 获取sql server中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区别
http://www.lmwlove.com/ac/ID480 在sql server2005,如果要获某个表最新增加的自增量,我们都知道,可以使用COPE_IDENTITY. IDENT_CURRE ...
- Django auth 用户验证
## Django本身内建这样的功能,admin管理页面就使用了这样的验证机制,admin管理页面就有Groups和Users选项 ## 需要在models.py中导入 from django.con ...
- PJzhang:shell基础入门的2个疗程-two
猫宁!!! 第6节:重定向 标准输入,标准输出,错误输出 输入重定向符号'<' 输出重定向符号'>'(清空之后再输入),'>>'(当前内容不变,在最后一行追加),'2>' ...
- 关于Typescript - HTMLElement上使用append / prepend函数的问题
因最近在做浏览器打印界面水印的问题,用到后台动态创建标签,样式的处理用到了append,prend函数,Angular build打包的时候却抛出了异常↓ ERROR in src/app/route ...
- [转帖]Windows 下如何配置Oracle ASM???
Windows 下如何配置Oracle ASM??? candon123关注10人评论16725人阅读2011-02-09 21:40:57 本篇介绍了如何在windows下创建裸设备,并创建AS ...
- gz文件的压缩和解压
gz文件的压缩和解压 压缩: gzip filename 解压: gunzip filename.gz
- 与C++开启新路途
1.我与C的过去 学习C语言大概是从18年8月开始,一直到19年3月.我完成了对C的基本认识和学习,也顺利通过了二级C计算机的考试.不过当你开始深入于C的世界时,你会发现学习的基础好像略有浅薄.宏的世 ...
- C++学习 之 函数的重载及内联(笔记)
1.函数的使用: 1.1 将数组传递给函数: 当需要给函数传递数组作为参数时,其实传过来的是实参的地址就相当于使用引用或指针作为形参. 例: int DisPlayArray(int Number[] ...