第 15 章 基本系统

目录

目录结构

启动流程

更改运行级别

服务管理

更改启动服务

手动控制服务

常见系统服务

配置文件

全局配置文件

用户配置文件

环境变量

常用环境变量

目录结构

各种 Linux 发行版的目录结构可能不太一样,但它们都遵循 FHS(Filesystem Hierarchy Stand)。

实际上 FHS 只是规定了根目录下的各主要目录应该放些什么文件,仅了解这些还不够,下面是一般情况下 Linux 系统的目录结构

/   根目录
│
├boot/              启动文件。所有与系统启动有关的文件都保存在这里
│    └grub/         Grub 引导器相关的文件
│
├dev/               设备文件
├proc/              内核与进程镜像
│
├mnt/               临时挂载
├media/             挂载媒体设备
│
├root/              root用户 的 $HOME 目录
├home/
│    ├user/         普通用户 的 $HOME 目录
│    └.../
│
├bin/               系统程序
├sbin/              管理员系统程序
├lib/               系统程序库文件
├etc/               系统程序和大部分应用程序的全局配置文件
│   ├init.d/        SystemV 风格的启动脚本
│   ├rcX.d/         SystemV 启动脚本的链接,定义运行级别
│   ├rc.d/          BSD 风格的启动脚本
│   ├rc.xxx         BSD 风格启动脚本,定义运行级别
│   ├network/       网络配置文件
│   ├X11/           图形界面配置文件
│
├usr/
│   ├bin/           应用程序
│   ├sbin/          管理员应用程序
│   ├lib/           应用程序库文件
│   ├share/         应用程序资源文件
│   ├src/           应用程序源代码
│   ├local/
│   │     ├soft/    用户程序
│   │     └.../     通常使用单独文件夹
│   ├X11R6/         图形界面系统
│
├var/               动态数据
│
├temp/              临时文件

启动流程

  1. 读取 MBR 的信息,启动 Boot Manager1
  2. 加载系统内核,启动 init进程2
  3. init进程 读取 /etc/inittab 文件中的信息,并进入预设的运行级别,按顺序运行该运行级别对应文件夹下的脚本。脚本通常以 start 选项启动,并指向一个系统中的程序。3
  4. 根据 /etc/rcS.d/文件夹中对应的脚本启动 Xwindow 服务器 xorg 4
  5. 启动登录管理器,等待用户登录 5

1 Windows 使用 NTLDR 作为 Boot Manager,如果您的系统中安装多个版本的 Windows,您就需要在 NTLDR 中选择您要进入的系统。 Linux 通常使用功能强大,配置灵活的 GRUB 作为 Boot Manager,我们将在第 22 章 Grub中向您介绍它的使用方式。

2 init进程 是 Linux 的根进程,所有的系统进程都是它的子进程。

3 通常情况下, /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是 /etc/rcN.d/ 目录。例如您设定的运行级别为 3,那么它对应的启动目录为 /etc/rc3.d/

4 Xwindow 为 Linux 下的图形用户界面系统。

5 大多 Linux 系统默认使用 GDM 作为登录管理器,您在登录管理器界面中输入用户名和密码后,便可以登录系统。(您可以在 /etc/rc3.d/ 文件夹中找到一个名为 S13gdm 的链接)

更改运行级别

/etc/inittab 文件中找到如下内容:

# The default runlevel.
id:2:initdefault:

1 2 为系统的运行级别,默认的运行级别涵义如下:

0 关机
1 单用户维护模式
2~5 多用户模式
6 重启

服务管理

更改启动服务

在运行级别对应的文件夹中,您可以看到许多文件名以 S## 和 K## 起始的启动脚本链接。例如:

/etc/rcS.d/S35mountall.sh   挂载文件系统
/etc/rcS.d/S40networking    启用网络支持
/etc/rc2.d/S13gdm           启动登录管理器
/etc/rc2.d/S20makedev       创建设备文件
/etc/rc2.d/S23xinetd        启动超级进程
/etc/rc2.d/K20powernowd     针对某种硬件的电源管理支持

1 init进程将以 start 为选项,按文件名顺序执行所有以 S## 起始的脚本。脚本名称中的数字越小,它将被越早执行。例如在 /etc/rc2.d/ 文件夹中, S13gdm 文件名中的数字小于 S23xinetd , S13gdm 将比 S23xinetd 先执行。

2 如果一个脚本链接,以 K## 起始,表示它将以 stop 选项被执行。如果相应服务没有启动,则不执行该脚本。

  • 如果您想禁止某一服务在启动时自动运行,您可以将相应运行级别中的脚本由 S##xxx 重命名为 K##xxx 。

手动控制服务

您也可以手动运行带有以下选项的启动脚本,来控制系统服务。 start 启动 stop 停止 restart 重启

/etc/rc2.d/K20powernowd start

有时您并不清楚某一运行级别有什么启动脚本;而且此类脚本的前三位字符并不固定,不便于记忆。这时,可以直接使用 /etc/init.d/ 文件夹中的启动脚本( /etc/rcX.d/ 中的启动脚本链接到 /etc/init.d/ 文件夹下相应脚本),这也是推荐的方式。

/etc/init.d/powernowd start

注意:以上命令的位置并没有包含在环境变量的搜索路径中,所以要输入完整路径。

常见系统服务

acpi-support 高级电源管理支持
acpid acpi 守护程序.这两个用于电源管理,非常重要
apmd acpi 的扩展
alsa 声音子系统
alsa-utils 声音子系统实用工具
cron 任务调度系统,建议开启
anacron cron 的子系统,将系统关闭期间的计划任务,在下一次系统运行时执行
atd 类似于 cron 的任务调度系统。建议关闭
binfmt-support 核心支持其他二进制的文件格式
bluez-utiles 蓝牙设备支持
bootlogd 启动日志。开启它
syslog-ng 系统日志,建议开启
klogd 同上,使用一种就可以了
sysklogd
cupsys 打印机子系统
dbus 消息总线系统(message bus system)。非常重要
dns-clean 使用拨号连接时,清除 dns信息
evms 企业卷管理系统
fetchmail 邮件用户代理守护进程,用于收取邮件
gdm gnome 登录管理器
gpm 终端中的鼠标支持
halt 别动它
hdparm 调整硬盘的脚本,配置文件为 /etc/hdparm.conf
hibernate 系统休眠
hotkey-setup 笔记本功能键支持
hotplug and hotplug-net 即插即用支持,比较复杂,建议不要动它
ifrename 网络接口重命名脚本。如果您有十块网卡,您应该开启它
inetd 配置文件为 /etc/inetd.conf
linux-restricted-modules-common 受限模块支持。1
lvm 逻辑卷管理系统支持
makedev 创建设备文件,非常重要
mdamd 磁盘阵列
module-init-tools /etc/modules加载扩展模块,建议开启
networking 网络支持。按 /etc/network/interfaces 文件预设激活网络,非常重要
ntpdate 时间同步服务,建议关闭
pcmcia pcmcia 设备支持
powernowd 移动 CPU 节能支持
ppp 拨号连接
ppp-dns
readahead 预加载库文件
reboot 别动它
resolvconf 自动配置 DNS
rmnologin 清除 nologin
rsync rsync 守护程序
sendsigs 在重启和关机期间发送信号
single 激活单用户模式
sshd ssh服务器
sudo 检查 sudo 状态
udev 用户空间 dev文件系统(userspace dev filesystem)。重要
umountfs 卸载文件系统
urandom 随机数生成器
usplash 开机画面支持
vbesave 显卡 BIOS 配置工具。保存显卡的状态
xorg-common 设置 X 服务 ICE socket
adjtimex 调整核心时钟的工具
dirmngr 证书列表管理工具
hwtools irqs 优化工具
libpam-devperm 系统崩溃之后,用于修理设备文件许可的守护程序
lm-sensors 板载传感器支持
mdadm-raid 磁盘陈列管理器
screen-cleanup 清除开机屏幕的脚本
xinetd 管理其他守护进程的一个 inetd 超级守护程序

1 /lib/linux-restricted-modules/ 文件夹中的模块为受限模块。例如某些驱动程序,如果您没有使用受限模块,就不需要开启它。

配置文件

小心:无论任何情况下,修改配置文件之前,先备份它

建议使用这个命令

sudo cp xxx xxx_`date +%y%m%d_%H:%M`

当然这很麻烦,您可以新建一个名为 bak 的文件,内容如下:

#!/bin/bash
sudo cp $1  $1_`date +%y%m%d_%H:%M`

把它放在您能够记住的目录下,比如 /home ,执行命令 sh /home/bak xxx ,就可以将当前文件夹下的文件 xxx 另存为 xxx_yymmdd_HH:MM 的格式了

全局配置文件

表 15.1.

系统初始化 /etc/inittab 运行级别、控制台数量
/etc/timezone 时区
/etc/inetd.conf 超级进程
文件系统 /etc/fstab 开机时挂载的文件系统
/etc/mtab 当前挂载的文件系统
用户系统 /etc/passwd 用户信息
/etc/shadow 用户密码
/etc/group 群组信息
/etc/gshadow 群组密码
/etc/sudoers Sudoer 列表1
Shell /etc/shell 可用 Shell 列表
/etc/inputrc ReadLine 控件设定
/etc/profile 用户首选项
/etc/bash.bashrc bash 配置文件
系统环境 /etc/environment 环境变量
/etc/updatedb.conf 文件检索数据库配置信息
/etc/issue 发行信息
/etc/issue.net
/etc/screenrc 屏幕设定
网络 /etc/iftab 网卡 MAC地址绑定
/etc/hosts 主机列表
/etc/hostname 主机名
/etc/resolv.conf 域名解析服务器地址
/etc/network/interfaces 网卡配置文件

1 请使用“visudo”命令修改此文件,而不要直接编辑

用户配置文件

/etc/ 目录下的文件,只有 root用户 才有权修改。应用软件的全局配置文件,普通用户也不应该修改,因为所有用户都要用到。

如果要通过配置软件,来适应特殊需求,您可以修改用户配置文件。

用户配置文件通常为全局配置文件的同名隐藏文件,放在$HOME目录下,例如:

全局配置文件 用户配置文件
/etc/inputrc /home/user/.inputrc
/etc/vim/vimrc /home/user/.vim/vimrc
/etc/bash.bashrc /home/user/.bashrc 1

1 也有少数例外,通常是系统程序

环境变量

环境变量是作用在整个系统中的变量。

很多软件工作的时候都要读取环境变量[21]的值来确定其工作方式。例如 cd 这个程序,如果不带任何选项执行,它会读取 $HOME 这个变量的值,然后进入到这个目录,也就是用户的 HOME 目录。使用 echo 显示一个环境变量:

echo $HOME
/home/user  

echo HOME
HOME

1 依据惯例,变量名称通常使用大写字母;$ 告诉 echo 这是一个变量,不要将字符串“HOME”直接输出到屏幕

2 输出字符串“HOME”到屏幕

WELCOME="Hello!"
echo $WELCOME
Hello!
env | grep WELCOME
export WELCOME
env | grep WELCOME
Hello!

1 定义一个变量

2 输出这个变量

3 env 输出所有环境变量

4 将输出通过管道发送到 grep,检查其中是否有“WELCOME”这个值

5 export 将变量 WELCOME 导出为环境变量

定义一个环境变量,可以将定义变量和导出变量一起进行

export WELCOME ="Hello!"

1 实际上不会有什么程序要用到 $WELCOME 这个变量,定义它只是为了演示

常用环境变量

变量名 说明
SHELL 默认 Shell
HISTSIZE 历史纪录
PATH 搜索路径
EDITOR 默认编辑器
TERM 默认终端
HOME 用户目录
LANG 系统语言
XMODIFIERS=@im 默认输入法

[21] 必须由大量不同程序共享,独立于应用程序的优先选项,通常由环境变量指定,

如果通过配置文件给每个程序分别指定,既麻烦又容易出差错。

例如语言环境,如果所有能够使用多语言的程序都使用自己的配置文件确定其工作界面的语言,逐一去修改它们的配置文件将是一件苦恼的事情