目录
在这里,我描述了配置和管理系统的基本技巧,主要来自控制台。
screen(1) 是一个非常有用的工具,适用于通过不可靠或间歇性连接访问远程站点的人员,因为它支持中断的网络连接。
表 9.1. 支持中断网络连接的程序列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
screen
|
http://qa.debian.org/popcon.php?package=screen | 952 | 带有 VT100/ANSI 终端仿真的终端多路复用器 |
screen(1) 不仅允许一个终端窗口处理多个进程,而且还允许 远程 shell 进程在中断连接后继续存活。以下是 screen(1) 的典型使用场景。
您登录到远程机器。
您在单个控制台上启动 screen
。
您在用 ^A c
(“Control-A”后跟“c”)创建的 screen
窗口中执行多个程序。
您通过 ^A n
(“Control-A”后跟“n”)在多个 screen
窗口之间切换。
突然您需要离开终端,但您不想通过保持连接来丢失您的活动工作。
您可以通过任何方法 分离 screen
会话。
粗暴地拔掉您的网络连接
输入 ^A d
(“Control-A”后跟“d”)并手动从远程连接注销
输入 ^A DD
(“Control-A”后跟“DD”)以使 screen
分离并注销您
您再次登录到同一远程机器(甚至从不同的终端)。
您以“screen -r
”启动 screen
。
screen
神奇地 重新连接 所有之前的 screen
窗口以及所有正在运行的程序。
![]() |
提示 |
---|---|
对于按流量计费的网络连接(如拨号和数据包连接),您可以使用 |
在 screen
会话中,所有键盘输入都会发送到您当前的窗口,命令快捷键除外。所有 screen
命令快捷键都是通过键入 ^A
(“Control-A”)加上一个键[加上任何参数]来输入的。以下是需要记住的重要快捷键。
表 9.2. screen 的快捷键绑定列表
快捷键绑定 | 含义 |
---|---|
^A ?
|
显示帮助屏幕(显示快捷键绑定) |
^A c
|
创建一个新窗口并切换到它 |
^A n
|
转到下一个窗口 |
^A p
|
转到上一个窗口 |
^A 0
|
转到窗口编号 0 |
^A 1
|
转到窗口编号 1 |
^A w
|
显示窗口列表 |
^A a
|
将 Ctrl-A 作为键盘输入发送到当前窗口 |
^A h
|
将当前窗口的硬拷贝写入文件 |
^A H
|
开始/结束将当前窗口记录到文件 |
^A ^X
|
锁定终端(密码保护) |
^A d
|
从终端分离 screen 会话 |
^A DD
|
分离 screen 会话并注销 |
有关详细信息,请参阅 screen(1)。
许多程序将其活动记录在“/var/log/
”目录下。
内核日志守护进程:klogd(8)
系统日志守护进程:rsyslogd(8)
以下是值得注意的日志分析器(aptitude(8) 中的“~Gsecurity::log-analyzer
”)。
表 9.3. 系统日志分析器列表
![]() |
注意 |
---|---|
CRM114 提供了语言基础设施,可以使用 TRE regex 库 编写 模糊 过滤器。它最流行的用途是垃圾邮件过滤器,但也可以用作日志分析器。 |
简单地使用 script(1)(请参阅 第 1.4.9 节,“记录 shell 活动”)来记录 shell 活动会生成一个带有控制字符的文件。通过使用 col(1) 可以避免这种情况,如下所示。
$ script Script started, file is typescript
执行任何操作…并按 Ctrl-D
退出 script
。
$ col -bx <typescript >cleanedfile $ vim cleanedfile
如果您没有 script
(例如,在 initramfs 中的引导过程中),则可以改用以下方法。
$ sh -i 2>&1 | tee typescript
![]() |
提示 |
---|---|
一些 |
![]() |
提示 |
---|---|
您可以使用 screen(1) 和“ |
![]() |
提示 |
---|---|
您可以使用 emacs(1) 和“ |
虽然分页工具(如 more(1) 和 less(1)(请参阅 第 1.4.5 节,“分页器”))以及用于高亮显示和格式化的自定义工具(请参阅 第 11.1.8 节,“高亮显示和格式化纯文本数据”))可以很好地显示文本数据,但通用编辑器(请参阅 第 1.4.6 节,“文本编辑器”))是最通用和可定制的。
![]() |
提示 |
---|---|
对于 vim(1) 及其分页模式别名 view(1),“ |
“ls -l
”命令的时间和日期的默认显示格式取决于 locale(有关值,请参阅 第 1.2.6 节,“时间戳”)。首先引用“$LANG
”变量,并且可以使用“$LC_TIME
”变量覆盖它。
每个 locale 的实际默认显示格式取决于所使用的标准 C 库(libc6
软件包)的版本。即,不同版本的 Debian 具有不同的默认值。
如果您真的希望在 locale 之外定制此时间和日期的显示格式,则应通过“--time-style
”参数或通过“$TIME_STYLE
”值设置 时间样式值(请参阅 ls(1)、date(1)、“info coreutils 'ls invocation'
”)。
表 9.4. “ls -l
”命令在 lenny
中的时间和日期显示示例
时间样式值 | locale | 时间和日期的显示 |
---|---|---|
iso
|
任何 |
01-19 00:15
|
long-iso
|
任何 |
2009-01-19 00:15
|
full-iso
|
任何 |
2009-01-19 00:15:16.000000000 +0900
|
locale
|
C
|
Jan 19 00:15
|
locale
|
en_US.UTF-8
|
2009-01-19 00:15
|
locale
|
es_ES.UTF-8
|
ene 19 00:15
|
+%d.%m.%y %H:%M
|
任何 |
19.01.09 00:15
|
+%d.%b.%y %H:%M
|
C 或 en_US.UTF-8 |
19.Jan.09 00:15
|
+%d.%b.%y %H:%M
|
es_ES.UTF-8
|
19.ene.09 00:15
|
![]() |
提示 |
---|---|
您可以使用命令别名消除在命令行上键入长选项,例如“ |
![]() |
提示 |
---|---|
ISO 8601 用于这些 iso 格式。 |
使用 ANSI 转义码(请参阅“/usr/share/doc/xterm/ctlseqs.txt.gz
”),可以将 shell 回显彩色化为大多数现代终端。
例如,尝试以下操作
$ RED=$(printf "\x1b[31m") $ NORMAL=$(printf "\x1b[0m") $ REVERSE=$(printf "\x1b[7m") $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"
彩色化的命令对于在交互式环境中检查其输出非常方便。我将以下内容包含在我的“~/.bashrc
”中。
if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l' alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always' alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l' alias la='ls -A' fi
别名的使用将颜色效果限制为交互式命令使用。它比导出环境变量“export GREP_OPTIONS='--color=auto'
”具有优势,因为在分页程序(如 less(1))下可以看到颜色。如果您希望在管道传输到其他程序时抑制颜色,请在上面的“~/.bashrc
”示例中使用“--color=auto
”代替。
![]() |
提示 |
---|---|
您可以通过使用“ |
您可以记录编辑器活动以进行复杂重复操作。
对于 Vim,如下所示。
“qa
”:开始将键入的字符记录到名为“a
”的寄存器中。
… 编辑器活动
“q
”:结束记录键入的字符。
“@a
”:执行寄存器“a
”的内容。
对于 Emacs,如下所示。
“C-x (
”:开始定义键盘宏。
… 编辑器活动
“C-x )
”:结束定义键盘宏。
“C-x e
”:执行键盘宏。
有几种方法可以记录 X 应用程序的图形图像,包括 xterm
显示。
表 9.5. 图形图像操作工具列表
软件包 | popcon | 大小 | 命令 |
---|---|---|---|
xbase-clients
|
http://qa.debian.org/popcon.php?package=xbase-clients | 61 | xwd(1) |
gimp
|
http://qa.debian.org/popcon.php?package=gimp | 15168 | GUI 菜单 |
imagemagick
|
http://qa.debian.org/popcon.php?package=imagemagick | 207 | import(1) |
scrot
|
http://qa.debian.org/popcon.php?package=scrot | 80 | scrot(1) |
有一些专门的工具可以借助 DVCS 系统记录配置文件的更改。
表 9.6. 在 VCS 中记录配置历史记录的软件包列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
etckeeper
|
http://qa.debian.org/popcon.php?package=etckeeper | 242 | 使用 Git(默认)、Mercurial 或 Bazaar(新)存储配置文件及其元数据 |
changetrack
|
http://qa.debian.org/popcon.php?package=changetrack | 148 | 使用 RCS(旧)存储配置文件 |
我建议将 etckeeper
软件包与 git(1) 一起使用,它将整个“/etc
”置于 VCS 控制之下。其安装指南和教程可在“/usr/share/doc/etckeeper/README.gz
”中找到。
本质上,运行“sudo etckeeper init
”会为“/etc
”初始化 git 存储库,就像 第 10.9.5 节,“使用 Git 记录配置历史记录” 中解释的过程一样,但带有特殊的挂钩脚本以进行更彻底的设置。
在您更改配置时,您可以像往常一样使用 git(1) 来记录它们。它还在您每次运行软件包管理命令时自动记录更改。
![]() |
提示 |
---|---|
您可以通过执行“ |
使用 Linux live CD 或 debian-installer CD 在救援模式下启动系统,您可以轻松地重新配置引导设备上的数据存储。另请参阅 第 10.3 节,“二进制数据”。
磁盘空间使用情况可以通过 mount
、coreutils
和 xdu
软件包提供的程序进行评估
mount(8) 报告所有已挂载的文件系统(= 磁盘)。
df(1) 报告文件系统的磁盘空间使用情况。
du(1) 报告目录树的磁盘空间使用情况。
![]() |
提示 |
---|---|
您可以将 du(8) 的输出馈送到 xdu(1x),以使用“ |
对于 磁盘分区 配置,虽然 fdisk(8) 一直被认为是标准工具,但 parted(8) 也值得关注。“磁盘分区数据”、“分区表”、“分区映射”和“磁盘标签”都是同义词。
大多数 PC 使用经典的 主引导记录 (MBR) 方案将 磁盘分区 数据保存在第一个扇区中,即 LBA 扇区 0(512 字节)。
![]() |
注意 |
---|---|
一些带有 可扩展固件接口 (EFI) 的新 PC,包括基于 Intel 的 Mac,使用 GUID 分区表 (GPT) 方案将 磁盘分区 数据保存在第一个扇区之外。 |
虽然 fdisk(8) 一直是磁盘分区工具的标准,但 parted(8) 正在取代它。
表 9.7. 磁盘分区管理软件包列表
软件包 | popcon | 大小 | GPT | 描述 |
---|---|---|---|---|
util-linux
|
http://qa.debian.org/popcon.php?package=util-linux | 1593 | 不支持 | 杂项系统实用程序,包括 fdisk(8) 和 cfdisk(8) |
parted
|
http://qa.debian.org/popcon.php?package=parted | 262 | 支持 | GNU Parted 磁盘分区大小调整程序 |
gparted
|
http://qa.debian.org/popcon.php?package=gparted | 5074 | 支持 | 基于 libparted 的 GNOME 分区编辑器 |
gnu-fdisk
|
http://qa.debian.org/popcon.php?package=gnu-fdisk | 215 | 支持 | 控制台 fdisk(8)、cfdisk(8) 等的 GNU 替代品。 |
gdisk
|
http://qa.debian.org/popcon.php?package=gdisk | 636 | 支持 | 用于 GPT 磁盘的分区编辑器 |
gptsync
|
http://qa.debian.org/popcon.php?package=gptsync | 72 | 支持 | 将经典 MBR 分区表与 GPT 分区表同步 |
kpartx
|
http://qa.debian.org/popcon.php?package=kpartx | 104 | 支持 | 用于为分区创建设备映射的程序 |
![]() |
注意 |
---|---|
虽然 parted(8) 声称也可以创建和调整文件系统大小,但使用维护最好的专用工具(如 mkfs(8) (mkfs.msdos(8)、mkfs.ext2(8)、mkfs.ext3(8), …) 和 resize2fs(8))执行此类操作更安全。 |
![]() |
注意 |
---|---|
为了在 GPT 和 MBR 之间切换,您需要直接擦除磁盘内容的前几个块(请参阅 第 10.3.6 节,“清除文件内容”)并使用“ |
虽然重新配置分区或可移动存储介质的激活顺序可能会产生不同的分区名称,但您可以一致地访问它们。如果您有多个磁盘并且您的 BIOS 没有为它们提供一致的设备名称,这也很有帮助。
带有“-U
”选项的 mount(8) 可以使用 UUID 挂载块设备,而不是使用其文件名(如“/dev/sda3
”)。
“/etc/fstab
”(请参阅 fstab(5))可以使用 UUID。
引导加载程序(第 3.3 节,“阶段 2:引导加载程序”)也可以使用 UUID。
![]() |
提示 |
---|---|
您可以使用 blkid(8) 探测块特殊设备的 UUID。 |
![]() |
提示 |
---|---|
如果需要,可以使用 udev 规则使可移动存储介质等设备的设备节点保持静态。请参阅 第 3.5.11 节,“udev 系统”。 |
对于 ext3 文件系统,e2fsprogs
软件包提供以下内容。
mkfs(8) 和 fsck(8) 命令由 e2fsprogs
软件包作为各种文件系统相关程序(mkfs.fstype
和 fsck.fstype
)的前端提供。对于 ext3 文件系统,它们是 mkfs.ext3(8) 和 fsck.ext3(8)(它们硬链接到 mke2fs(8) 和 e2fsck(8))。
类似的命令可用于 Linux 支持的每个文件系统。
表 9.8. 文件系统管理软件包列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
e2fsprogs
|
http://qa.debian.org/popcon.php?package=e2fsprogs | 2233 | 用于 ext2/ext3/ext4 文件系统的实用程序 |
reiserfsprogs
|
http://qa.debian.org/popcon.php?package=reiserfsprogs | 1200 | 用于 Reiserfs 文件系统的实用程序 |
dosfstools
|
http://qa.debian.org/popcon.php?package=dosfstools | 162 | 用于 FAT 文件系统的实用程序。(Microsoft:MS-DOS、Windows) |
xfsprogs
|
http://qa.debian.org/popcon.php?package=xfsprogs | 3135 | 用于 XFS 文件系统的实用程序。(SGI:IRIX) |
ntfsprogs
|
http://qa.debian.org/popcon.php?package=ntfsprogs | 41 | 用于 NTFS 文件系统的实用程序。(Microsoft:Windows NT, …) |
jfsutils
|
http://qa.debian.org/popcon.php?package=jfsutils | 1024 | 用于 JFS 文件系统的实用程序。(IBM:AIX、OS/2) |
reiser4progs
|
http://qa.debian.org/popcon.php?package=reiser4progs | 1296 | 用于 Reiser4 文件系统的实用程序 |
hfsprogs
|
http://qa.debian.org/popcon.php?package=hfsprogs | 317 | 用于 HFS 和 HFS Plus 文件系统的实用程序。(Apple:Mac OS) |
btrfs-tools
|
http://qa.debian.org/popcon.php?package=btrfs-tools | 2061 | 用于 Btrfs 文件系统的实用程序 |
zerofree
|
http://qa.debian.org/popcon.php?package=zerofree | 47 | 从 ext2/3 文件系统中将空闲块清零的程序 |
![]() |
提示 |
---|---|
Ext4 文件系统是 Linux 系统的默认文件系统,强烈建议使用它,除非您有某些特定原因不使用。 |
![]() |
提示 |
---|---|
Btrfs 文件系统在 Linux 内核 3.2 (Debian |
![]() |
警告 |
---|---|
在 Btrfs 文件系统获得内核空间的在线 fsck(8) 功能和引导加载程序支持之前,您尚不应将其用于您的关键数据。 |
![]() |
提示 |
---|---|
一些工具允许在没有 Linux 内核支持的情况下访问文件系统(请参阅第 10.3.2 节,“在不挂载磁盘的情况下操作文件”)。 |
mkfs(8) 命令在 Linux 系统上创建文件系统。fsck(8) 命令在 Linux 系统上提供文件系统完整性检查和修复。
![]() |
注意 |
---|---|
通常在已挂载的文件系统上运行 |
![]() |
提示 |
---|---|
检查 “ |
![]() |
提示 |
---|---|
使用 “ |
可以通过在其上使用的挂载选项来优化文件系统的性能和特性(请参阅 fstab(5) 和 mount(8))。 值得注意的选项如下。
“defaults
” 选项意味着默认选项:“rw,suid,dev,exec,auto,nouser,async
”。 (通用)
“noatime
” 或 “relatime
” 选项对于加速读取访问非常有效。(通用)
“user
” 选项允许普通用户挂载文件系统。 此选项隐含 “noexec,nosuid,nodev
” 选项组合。(通用,用于 CD 和软盘)
“noexec,nodev,nosuid
” 选项组合用于增强安全性。(通用)
“noauto
” 选项限制仅通过显式操作进行挂载。(通用)
ext3fs 的 “data=journal
” 选项可以增强数据完整性以应对电源故障,但会损失一些写入速度。
![]() |
提示 |
---|---|
您需要提供内核启动参数(请参阅第 3.3 节,“第二阶段:引导加载程序”),例如 “ |
可以使用 tune2fs(8) 命令通过文件系统的超级块来优化文件系统的特性。
执行 “sudo tune2fs -l /dev/hda1
” 会显示 “/dev/hda1
” 上文件系统超级块的内容。
执行 “sudo tune2fs -c 50 /dev/hda1
” 会将 “/dev/hda1
” 上文件系统检查(启动期间执行 fsck
)的频率更改为每 50 次启动一次。
执行 “sudo tune2fs -j /dev/hda1
” 会向文件系统添加日志功能,即在 “/dev/hda1
” 上将文件系统从 ext2 转换为 ext3。(在未挂载的文件系统上执行此操作。)
执行 “sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1
” 会在 “/dev/hda1
” 上将其从 ext3 转换为 ext4。(在未挂载的文件系统上执行此操作。)
![]() |
警告 |
---|---|
在 GRUB 引导加载程序良好地支持 ext4 文件系统且已安装的 Linux 内核版本高于 2.6.30 之前,应避免将引导设备的文件系统转换为 ext4 文件系统。 |
![]() |
警告 |
---|---|
在操作硬盘配置之前,请检查您的硬件并阅读 hdparam(8) 的手册页,因为这可能对数据完整性非常危险。 |
您可以使用 “hdparm -tT /dev/hda
” 测试硬盘(例如 “/dev/hda
”)的磁盘访问速度。 对于某些通过 (E)IDE 连接的硬盘,您可以通过启用 “(E)IDE 32 位 I/O 支持”、启用 “using_dma 标志”、设置 “interrupt-unmask 标志” 和设置 “多扇区 16 I/O”(危险!)使用 “hdparm -q -c3 -d1 -u1 -m16 /dev/hda
” 来加速它。
您可以使用 “hdparm -W /dev/sda
” 测试硬盘(例如 “/dev/sda
”)的写入缓存功能。 您可以使用 “hdparm -W 0 /dev/sda
” 禁用其写入缓存功能。
您可能可以通过使用 “setcd -x 2
” 降低现代高速 CD-ROM 驱动器的速度来读取压制不良的 CDROM。
可以按如下方式优化 固态硬盘 (SSD) 的性能和磁盘磨损。
使用最新的 Linux 内核。(>= 3.2)
减少用于读取磁盘访问的磁盘写入。
在 /etc/fstab
中设置 “noatime
” 或 “relatime
” 挂载选项。
启用 TRIM 命令。
启用 SSD 优化的磁盘空间分配方案。
在 /etc/fstab
中为 Btrfs 设置 “ssd
” 挂载选项。
使系统每 10 分钟将数据刷新到磁盘,用于笔记本电脑。
在 /etc/fstab
中设置 “commit=600
” 挂载选项。 请参阅 fstab(5)。
设置 pm-utils 以即使在交流电源操作下也使用笔记本电脑模式。 请参阅 Debian BTS #659260。
![]() |
警告 |
---|---|
将刷新间隔从正常的 5 秒更改为 10 分钟会使您的数据容易受到电源故障的影响。 |
您可以使用 smartd(8) 守护程序监控和记录符合 SMART 的硬盘。
安装 smartmontools
软件包。
通过使用 df(1) 列出硬盘驱动器来识别它们。
让我们假设要监控的硬盘驱动器为 “/dev/hda
”。
检查 “smartctl -a /dev/hda
” 的输出,以查看 SMART 功能是否实际已启用。
如果未启用,则通过 “smartctl -s on -a /dev/hda
” 启用它。
通过以下方式启用 smartd(8) 守护程序运行。
取消注释 “/etc/default/smartmontools
” 文件中的 “start_smartd=yes
”。
通过 “sudo /etc/init.d/smartmontools restart
” 重启 smartd(8) 守护程序。
![]() |
提示 |
---|---|
可以使用 |
对于在安装时在 逻辑卷管理器 (LVM)(Linux 功能)上创建的分区,可以通过在多个存储设备上将区段连接到它们或从中截断区段来轻松调整它们的大小,而无需进行重大的系统重新配置。
![]() |
注意 |
---|---|
除非通过禁用硬盘的写入缓存来牺牲系统性能,否则当前 LVM 系统的部署可能会降低诸如 ext3fs 之类的日志文件系统所提供的文件系统损坏保证。 |
如果您有一个空分区(例如,“/dev/sdx
”),您可以使用 mkfs.ext3(1) 格式化它,并将其 mount(8) 到您需要更多空间的目录。(您需要复制原始数据内容。)
$ sudo mv work-dir old-dir $ sudo mkfs.ext3 /dev/sdx $ sudo mount -t ext3 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
![]() |
提示 |
---|---|
您可以选择挂载一个空的磁盘映像文件(请参阅第 10.2.5 节,“制作空磁盘映像文件”)作为环回设备(请参阅第 10.2.3 节,“挂载磁盘映像文件”)。 实际的磁盘使用量随着实际存储的数据量而增长。 |
如果您在另一个具有可用空间的分区上有一个空目录(例如,“/path/to/emp-dir
”),您可以将其与 “--bind
” 选项 mount(8) 到您需要更多空间的目录(例如,“work-dir
”)。
$ sudo mount --bind /path/to/emp-dir work-dir
![]() |
提示 |
---|---|
这是一种已弃用的方法。 如果可能,请改用第 9.3.13 节,“通过绑定挂载另一个目录来扩展可用存储空间”。 |
如果您在另一个具有可用空间的分区中有一个空目录(例如,“/path/to/emp-dir
”),您可以使用 ln(8) 创建指向该目录的符号链接。
$ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
![]() |
警告 |
---|---|
不要对系统管理的目录(例如 “ |
![]() |
注意 |
---|---|
某些软件可能无法很好地与 “指向目录的符号链接” 一起运行。 |
通过物理访问您的 PC,任何人都可以轻松获得 root 权限并访问您 PC 上的所有文件(请参阅第 4.7.4 节,“保护 root 密码”)。 这意味着登录密码系统无法保护您的私人和敏感数据免受可能的 PC 盗窃。 您必须部署数据加密技术来做到这一点。 虽然 GNU 隐私卫士(请参阅第 10.4 节,“数据安全基础设施”)可以加密文件,但这需要用户付出一定的努力。
dm-crypt 和 eCryptfs 通过 Linux 内核模块以最少的用户努力促进本地自动数据加密。
表 9.9. 数据加密实用程序列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
cryptsetup
|
http://qa.debian.org/popcon.php?package=cryptsetup | 648 | 加密块设备 (dm-crypt / LUKS) 的实用程序 |
cryptmount
|
http://qa.debian.org/popcon.php?package=cryptmount | 341 | 加密块设备 (dm-crypt / LUKS) 的实用程序,侧重于普通用户的挂载/卸载 |
ecryptfs-utils
|
http://qa.debian.org/popcon.php?package=ecryptfs-utils | 368 | 加密堆叠文件系统 (eCryptfs) 的实用程序 |
Dm-crypt 是使用 device-mapper 的加密文件系统。 Device-mapper 将一个块设备映射到另一个块设备。
eCryptfs 是另一个使用堆叠文件系统的加密文件系统。 堆叠文件系统将其自身堆叠在已挂载文件系统的现有目录之上。
![]() |
注意 |
---|---|
数据加密会消耗 CPU 时间等。 请权衡其好处和成本。 |
![]() |
注意 |
---|---|
整个 Debian 系统可以通过 debian-installer(lenny 或更高版本)使用 dm-crypt/LUKS 和 initramfs 安装在加密磁盘上。 |
![]() |
提示 |
---|---|
有关用户空间加密实用程序的信息,请参阅第 10.4 节,“数据安全基础设施”: GNU 隐私卫士。 |
您可以使用 dm-crypt/LUKS 加密可移动大容量存储设备(例如 “/dev/sdx
” 上的 USB 记忆棒)的内容。 您只需按如下方式格式化它。
# badblocks -c 1024 -s -w -t random -v /dev/sdx # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup luksOpen /dev/sdx1 sdx1 ... # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2008-10-04 18:44 control brw-rw---- 1 root disk 254, 0 2008-10-04 23:55 sdx1 # mkfs.vfat /dev/mapper/sdx1 ... # cryptsetup luksClose sdx1
然后,它可以像普通设备一样挂载到 “/media/<disk_label>
”,除了在现代桌面环境(例如使用 gnome-mount(1) 的 GNOME)下要求输入密码(请参阅第 10.1.10 节,“可移动存储设备”)。 区别在于写入它的每个数据都会被加密。 您也可以选择使用不同的文件格式格式化介质,例如,使用 “mkfs.ext3 /dev/sdx1
” 的 ext3。
![]() |
注意 |
---|---|
如果您真的对数据安全性感到偏执,您可能需要在上面的示例中多次覆盖。 尽管此操作非常耗时。 |
让我们假设您的原始 “/etc/fstab
” 包含以下内容。
/dev/sda7 swap sw 0 0
您可以通过如下方式使用 dm-crypt 启用加密交换分区。
# aptitude install cryptsetup # swapoff -a # echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab # perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab # /etc/init.d/cryptdisks restart ... # swapon -a
您可以使用 eCryptfs 和 ecryptfs-utils
软件包自动加密写入 “~/Private/
” 下的文件。
运行 ecryptfs-setup-private(1) 并按照提示设置 “~/Private/
”。
通过运行 ecryptfs-mount-private(1) 激活 “~/Private/
”。
将敏感数据文件移动到 “~/Private/
” 并根据需要创建符号链接。
候选文件:“~/.fetchmailrc
”、“~/.ssh/identity
”、“~/.ssh/id_rsa
”、“~/.ssh/id_dsa
” 和其他具有 “go-rwx
” 权限的文件
将敏感数据目录移动到 “~/Private/
” 中的子目录,并根据需要创建符号链接。
候选目录:“~/.gnupg
” 和其他具有 “go-rwx
” 权限的目录
从 “~/Desktop/Private/
” 创建到 “~/Private/
” 的符号链接,以便于桌面操作。
通过运行 ecryptfs-umount-private(1) 停用 “~/Private/
”。
在您需要加密数据时,通过发出 “ecryptfs-mount-private
” 激活 “~/Private/
”。
如果您使用您的登录密码来包装加密密钥,您可以通过 PAM(可插拔身份验证模块) 自动化挂载 eCryptfs。
在 “/etc/pam.d/common-auth
” 中的 “pam_permit.so
” 之前插入以下行。
auth required pam_ecryptfs.so unwrap
在 “/etc/pam.d/common-session
” 中的最后一行插入以下行。
session optional pam_ecryptfs.so unwrap
在 “/etc/pam.d/common-password
” 中的第一个活动行插入以下行。
password required pam_ecryptfs.so
这非常方便。
![]() |
警告 |
---|---|
PAM 的配置错误可能会使您无法访问自己的系统。 请参阅第 4 章,身份验证。 |
![]() |
注意 |
---|---|
如果您使用您的登录密码来包装加密密钥,则您的加密数据与您的用户登录密码一样安全(请参阅第 4.3 节,“好的密码”)。 除非您小心设置 强密码,否则当有人在偷走您的笔记本电脑后运行 密码破解 软件时,您的数据将面临风险(请参阅第 4.7.4 节,“保护 root 密码”)。 |
可以使用专用工具监控和控制程序活动。
表 9.10. 用于监控和控制程序活动的工具列表
![]() |
提示 |
---|---|
|
显示命令调用的进程所用的时间。
# time some_command >/dev/null real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode
nice 值用于控制进程的调度优先级。
表 9.11. 调度优先级的 nice 值列表
nice 值 | 调度优先级 |
---|---|
19 | 最低优先级进程 (nice) |
0 | 用户的非常高优先级进程 |
-20 | root 用户的非常高优先级进程 (not-nice) |
# nice -19 top # very nice # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast
有时,极端的 nice 值对系统的危害大于好处。 请谨慎使用此命令。
Debian 上的 ps(1) 命令同时支持 BSD 和 SystemV 功能,并有助于静态识别进程活动。
对于僵尸(defunct)子进程,您可以使用 “PPID
” 字段中标识的父进程 ID 杀死它们。
pstree(1) 命令显示进程树。
Debian 上的 top(1) 具有丰富的功能,有助于动态识别哪些进程行为异常。
表 9.13. top 命令列表
命令键 | 响应描述 |
---|---|
h 或 ? |
显示帮助 |
f
|
设置/重置显示字段 |
o
|
重新排序显示字段 |
F
|
设置排序键字段 |
k
|
杀死进程 |
r
|
重新调整进程的 nice 值 |
q
|
退出 top 命令 |
您可以使用 strace(1)、ltrace(1) 或 xtrace(1) 跟踪程序活动,分别用于系统调用和信号、库调用或 X11 客户端和服务器之间的通信。
您可以按如下方式跟踪 ls
命令的系统调用。
$ sudo strace ls
您还可以使用 fuser(1) 识别使用文件的进程,例如,对于 “/var/log/mail.log
”,使用以下命令。
$ sudo fuser -v /var/log/mail.log USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... rsyslogd
您会看到文件 “/var/log/mail.log
” 已被 rsyslogd(8) 命令打开以进行写入。
您还可以使用 fuser(1) 识别使用套接字的进程,例如,对于 “smtp/tcp
”,使用以下命令。
$ sudo fuser -v smtp/tcp USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4
有几种方法可以重复命令循环处理符合某些条件的文件,例如匹配 glob 模式 “*.ext
”。
Shell for 循环方法(请参阅第 12.1.4 节,“Shell 循环”)
for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
find(1) 和 xargs(1) 组合
find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
find(1) 与 “-exec
” 选项和命令
find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
find(1) 与 “-exec
” 选项和简短的 shell 脚本
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;
上述示例旨在确保正确处理奇怪的文件名,例如包含空格的文件名。 有关 find(1) 的更高级用法,请参阅第 10.1.5 节,“文件选择的惯用法”。
您可以设置从 图形用户界面 (GUI) 启动进程。
在 GNOME 桌面环境下,可以通过双击启动器图标、将文件图标拖放到启动器图标,或通过右键单击文件图标使用 “打开方式…” 菜单来启动带有正确参数的程序。 KDE 也可以做到同样的事情。
以下是在 GNOME 下创建一个启动器图标的示例,用于在 gnome-terminal(1) 中启动的 mc(1)。
通过以下方式创建一个可执行程序 “mc-term
”。
# cat >/usr/local/bin/mc-term <<EOF #!/bin/sh gnome-terminal -e "mc \$1" EOF # chmod 755 /usr/local/bin/mc-term
创建桌面启动器,如下所示。
右键单击桌面空间以选择 “创建启动器…
”。
将 “类型” 设置为 “应用程序
”。
将 “名称” 设置为 “mc
”。
将 “命令” 设置为 “mc-term %f
”。
单击 “确定”。
创建打开方式关联,如下所示。
右键单击文件夹以选择 “打开方式…
”。
单击打开“使用自定义命令”对话框,然后输入“mc-term %f
”。
单击“打开”。
![]() |
提示 |
---|---|
启动器是“ |
有些程序会自动启动另一个程序。以下是自定义此过程的检查点。
应用程序配置菜单
GNOME 桌面:“系统” → “首选项” → “首选应用程序”
KDE 桌面:“K” → “控制中心” → “KDE 组件” → “组件选择器”
Iceweasle 浏览器:“编辑” → “首选项” → “应用程序”
mc(1):“/etc/mc/mc.ext
”
环境变量,例如“$BROWSER
”、“$EDITOR
”、“$VISUAL
”和“$PAGER
”(请参阅 eviron(7))
用于程序(如“editor
”、“view
”、“x-www-browser
”、“gnome-www-browser
”和“www-browser
”)的 update-alternatives(8) 系统(请参阅 第 1.4.7 节“设置默认文本编辑器”)
“~/.mailcap
”和“/etc/mailcap
”文件内容,它们将 MIME 类型与程序关联(请参阅 mailcap(5))
“~/.mime.types
”和“/etc/mime.types
”文件内容,它们将文件名扩展名与 MIME 类型关联(请参阅 run-mailcap(1))
![]() |
提示 |
---|---|
update-mime(8) 使用“ |
![]() |
提示 |
---|---|
|
![]() |
提示 |
---|---|
为了在 X 下以首选应用程序身份运行控制台应用程序(如 |
# cat /usr/local/bin/mutt-term <<EOF #!/bin/sh gnome-terminal -e "mutt \$@" EOF chmod 755 /usr/local/bin/mutt-term
使用 kill(1) 通过进程 ID 杀死(或向其发送信号)进程。
使用 killall(1) 或 pkill(1) 通过进程命令名称和其他属性执行相同的操作。
使用 cron(8) 定期调度任务。请参阅 crontab(1) 和 crontab(5)。
您可以计划以普通用户身份运行进程,例如 foo
,方法是使用“crontab -e
”命令创建 crontab(5) 文件,如“/var/spool/cron/crontabs/foo
”。
以下是一个 crontab(5) 文件的示例。
# use /bin/sh to run commands, no matter what /etc/passwd says SHELL=/bin/sh # mail any output to paul, no matter whose crontab this is MAILTO=paul # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed) # run at 00:05, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every Sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
![]() |
提示 |
---|---|
对于未持续运行的系统,请安装 |
![]() |
提示 |
---|---|
对于计划的系统维护脚本,您可以从 root 帐户定期运行它们,方法是将此类脚本放在“ |
内核编译选项“Magic SysRq key”(SAK 键)提供了针对系统故障的保险,现在它是 Debian 内核的默认设置。按下 Alt-SysRq,然后按以下键之一,即可神奇地恢复对系统的控制。
表 9.15. SAK 命令键列表
Alt-SysRq 之后的键 | 操作说明 |
---|---|
r
|
在 X 崩溃后从raw 模式恢复键盘 |
0
|
将控制台日志级别更改为 0 以减少错误消息 |
k
|
k杀死当前虚拟控制台上的所有进程 |
e
|
向所有进程发送 SIGTERM,init(8) 除外 |
i
|
向所有进程发送 SIGKILL,init(8) 除外 |
s
|
s同步所有已挂载的文件系统 |
u
|
以只读方式重新挂载所有已挂载的文件系统(unmount) |
b
|
在不同步或卸载的情况下重boot 系统 |
“Alt-SysRq s”、“Alt-SysRq u”和“Alt-SysRq r”的组合非常适合摆脱非常糟糕的情况。
请参阅“/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz
”。
![]() |
注意 |
---|---|
Alt-SysRq 功能可能会被视为安全风险,因为它允许用户访问 root 特权功能。在“ |
![]() |
提示 |
---|---|
从 SSH 终端等,您可以通过写入“ |
您可以通过以下方式检查谁在使用系统。
who(1) 显示谁已登录。
w(1) 显示谁已登录以及他们正在做什么。
last(1) 显示上次登录用户的列表。
lastb(1) 显示上次错误登录用户的列表。
![]() |
提示 |
---|---|
“ |
对于类似 PCI 的设备(AGP、PCI-Express、CardBus、ExpressCard 等),lspci(8)(可能带有“-nn
”选项)是硬件识别的一个好的开始
或者,您可以通过读取“/proc/bus/pci/devices
”的内容或浏览“/sys/bus/pci
”下的目录树来识别硬件(请参阅 第 1.2.12 节“procfs 和 sysfs”)。
表 9.16. 硬件识别工具列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
pciutils
|
http://qa.debian.org/popcon.php?package=pciutils | 921 | Linux PCI 实用程序:lspci(8) |
usbutils
|
http://qa.debian.org/popcon.php?package=usbutils | 630 | Linux USB 实用程序:lsusb(8) |
pcmciautils
|
http://qa.debian.org/popcon.php?package=pcmciautils | 115 | Linux 2.6 的 PCMCIA 实用程序:pccardctl(8) |
scsitools
|
http://qa.debian.org/popcon.php?package=scsitools | 316 | SCSI 硬件管理工具集合:lsscsi(8) |
pnputils
|
http://qa.debian.org/popcon.php?package=pnputils | 108 | 即插即用 BIOS 实用程序:lspnp(8) |
procinfo
|
http://qa.debian.org/popcon.php?package=procinfo | 164 | 从“/proc ”获取的系统信息:lsdev(8) |
lshw
|
http://qa.debian.org/popcon.php?package=lshw | 712 | 有关硬件配置的信息:lshw(1) |
discover
|
http://qa.debian.org/popcon.php?package=discover | 66 | 硬件识别系统:discover(8) |
尽管现代 GUI 桌面系统(如 GNOME 和 KDE)上的大多数硬件配置都可以通过随附的 GUI 配置工具进行管理,但了解一些配置它们的基本方法是个好主意。
表 9.17. 硬件配置工具列表
![]() |
提示 |
---|---|
现代系统上的 CPU 频率缩放由内核模块(如 |
以下命令将系统和硬件时间设置为 MM/DD hh:mm, CCYY。
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
时间通常以 Debian 系统上的本地时间显示,但硬件和系统时间通常使用 UT(GMT)。
如果硬件 (BIOS) 时间设置为 UT,请将“/etc/default/rcS
”中的设置更改为“UTC=yes
”。
如果您希望通过网络更新系统时间,请考虑使用 NTP 服务,软件包如 ntp
、ntpdate
和 chrony
。
请参阅以下内容。
ntp-doc
软件包
![]() |
提示 |
---|---|
|
有几个组件可以配置字符控制台和 ncurses(3) 系统功能。
“/etc/terminfo/*/*
”文件 (terminfo(5))
“$TERM
”环境变量 (term(7))
setterm(1)、stty(1)、tic(1) 和 toe(1)
如果 xterm
的 terminfo
条目不适用于非 Debian xterm
,请在远程登录到 Debian 系统时,将终端类型“$TERM
”从“xterm
”更改为功能受限的版本之一,例如“xterm-r6
”。有关更多信息,请参阅“/usr/share/doc/libncurses5/FAQ
”。“dumb
”是“$TERM
”的最低公分母。
当前 Linux 2.6 的声卡的设备驱动程序由 高级 Linux 声音体系结构 (ALSA) 提供。ALSA 为以前的 开放声音系统 (OSS) 提供仿真模式,以实现兼容性。
运行“dpkg-reconfigure linux-sound-base
”以通过列入内核模块黑名单来选择要使用的声音系统 ALSA。除非您有非常新的声音硬件,否则 udev 基础结构应该配置您的声音系统。
![]() |
提示 |
---|---|
使用“ |
![]() |
提示 |
---|---|
如果您无法获得声音,则可能是您的扬声器已连接到静音输出。现代声音系统有许多输出。 |
应用程序软件不仅可以配置为直接访问声音设备,还可以配置为通过某些标准化的声音服务器系统访问它们。
表 9.18. 声音软件包列表
通常,每个流行的桌面环境都有一个通用的声音引擎。应用程序使用的每个声音引擎都可以选择连接到不同的声音服务器。
要禁用屏幕保护程序,请使用以下命令。
表 9.19. 用于禁用屏幕保护程序的命令列表
环境 | 命令 |
---|---|
Linux 控制台 |
setterm -powersave off
|
X Window(关闭屏幕保护程序) |
xset s off
|
X Window(禁用 dpms) |
xset -dpms
|
X Window(屏幕保护程序的 GUI 配置) |
xscreensaver-command -prefs
|
可以随时拔下 PC 扬声器以禁用嘟嘟声。删除 pcspkr
内核模块可以为您执行此操作。
以下命令可防止 readline(3) 程序(由 bash(1) 使用)在遇到“\a
”(ASCII=7)时发出嘟嘟声。
$ echo "set bell-style none">> ~/.inputrc
“/var/log/dmesg
”中的内核启动消息包含可用内存的总确切大小。
free(1) 和 top(1) 显示有关正在运行的系统上的内存资源的信息。
# grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572
![]() |
提示 |
---|---|
不要担心“ |
对于我的 MacBook,配备 1GB=1048576k DRAM(视频系统占用其中一部分),我看到以下内容。
表 9.20. 报告的内存大小列表
报告 | 大小 |
---|---|
dmesg 中的总大小 | 1016784k = 1GB - 31792k |
dmesg 中的可用空间 | 990528k |
shell 下的总大小 | 997184k |
shell 下的可用空间 | 20256k(但实际上为 321780k) |
系统维护不善可能会使您的系统容易受到外部利用。
对于系统安全性和完整性检查,您应该从以下内容开始。
debsums
软件包,请参阅 debsums(1) 和 第 2.5.2 节“顶级“Release”文件和真实性”。
chkrootkit
软件包,请参阅 chkrootkit(1)。
clamav
软件包系列,请参阅 clamscan(1) 和 freahclam(1)。
表 9.21. 用于系统安全性和完整性检查的工具列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
logcheck
|
http://qa.debian.org/popcon.php?package=logcheck | 284 | 用于通过邮件将系统日志文件中的异常发送给管理员的守护程序 |
debsums
|
http://qa.debian.org/popcon.php?package=debsums | 224 | 用于根据 MD5 校验和验证已安装的软件包文件的实用程序 |
chkrootkit
|
http://qa.debian.org/popcon.php?package=chkrootkit | 920 | rootkit 检测器 |
clamav
|
http://qa.debian.org/popcon.php?package=clamav | 584 | Unix 的防病毒实用程序 - 命令行界面 |
tiger
|
http://qa.debian.org/popcon.php?package=tiger | 2374 | 报告系统安全漏洞 |
tripwire
|
http://qa.debian.org/popcon.php?package=tripwire | 9029 | 文件和目录完整性检查器 |
john
|
http://qa.debian.org/popcon.php?package=john | 472 | 主动密码破解工具 |
aide
|
http://qa.debian.org/popcon.php?package=aide | 1320 | 高级入侵检测环境 - 静态二进制文件 |
bastille
|
http://qa.debian.org/popcon.php?package=bastille | 1960 | 安全加固工具 |
integrit
|
http://qa.debian.org/popcon.php?package=integrit | 440 | 文件完整性验证程序 |
crack
|
http://qa.debian.org/popcon.php?package=crack | 160 | 密码猜测程序 |
这是一个简单的脚本,用于检查典型的全局可写不正确的文件权限。
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
![]() |
注意 |
---|---|
由于 |
Debian 以软件包的形式分发模块化的 Linux 内核,用于受支持的架构。
与 2.4 相比,Linux 内核 2.6 有一些值得注意的功能。
设备由 udev 系统创建(请参阅 第 3.5.11 节“udev 系统”)。
对 IDE CD/DVD 设备的读/写访问不使用 ide-scsi
模块。
网络数据包过滤功能使用 iptable
内核模块。
许多 Linux 功能可以通过内核参数进行配置,如下所示。
由引导加载程序初始化的内核参数(请参阅 第 3.3 节“阶段 2:引导加载程序”)
在运行时由 sysctl(8) 更改的内核参数,用于通过 sysfs 访问的参数(请参阅 第 1.2.12 节“procfs 和 sysfs”)
当模块被激活时,由 modprobe(8) 的参数设置的模块参数(请参阅 第 10.2.3 节“挂载磁盘映像文件”)
请参阅 Linux 内核文档中的“kernel-parameters.txt(.gz)
”和其他相关文档(由 linux-doc-2.6.*
软件包提供的“/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*
”)。
大多数普通程序不需要内核头文件,实际上,如果您直接使用它们进行编译,可能会中断。它们应该针对 Debian 系统上的 libc6-dev
软件包(从 glibc
源代码软件包创建)提供的“/usr/include/linux
”和“/usr/include/asm
”中的头文件进行编译。
![]() |
注意 |
---|---|
对于编译某些内核特定的程序,例如来自外部源的内核模块和自动挂载程序守护程序 ( |
Debian 有其自己编译内核和相关模块的方法。
表 9.22. 要在 Debian 系统上重新编译内核而安装的关键软件包列表
软件包 | popcon | 大小 | 描述 |
---|---|---|---|
build-essential
|
http://qa.debian.org/popcon.php?package=build-essential | 48 | 用于构建 Debian 软件包的基本软件包:make 、gcc 、… |
bzip2
|
http://qa.debian.org/popcon.php?package=bzip2 | 86 | 用于 bz2 文件的压缩和解压缩实用程序 |
libncurses5-dev
|
http://qa.debian.org/popcon.php?package=libncurses5-dev | 1007 | ncurses 的开发人员库和文档 |
git
|
http://qa.debian.org/popcon.php?package=git | 13073 | git:Linux 内核使用的分布式版本控制系统 |
fakeroot
|
http://qa.debian.org/popcon.php?package=fakeroot | 316 | 为以非 root 用户身份构建软件包提供 fakeroot 环境 |
initramfs-tools
|
http://qa.debian.org/popcon.php?package=initramfs-tools | 321 | 用于构建 initramfs 的工具(Debian 特有) |
dkms
|
http://qa.debian.org/popcon.php?package=dkms | 338 | 动态内核模块支持 (DKMS)(通用) |
devscripts
|
http://qa.debian.org/popcon.php?package=devscripts | 1506 | Debian 软件包维护者的辅助脚本(Debian 特有) |
如果您在 第 3.3 节“阶段 2:引导加载程序”中使用 initrd
,请确保阅读 initramfs-tools(8)、update-initramfs(8)、mkinitramfs(8) 和 initramfs.conf(5) 中的相关信息。
![]() |
警告 |
---|---|
编译 Linux 内核源代码时,不要将符号链接从“ |
![]() |
注意 |
---|---|
在 Debian |
![]() |
注意 |
---|---|
动态内核模块支持 (DKMS) 是一种新的、独立于发行版的框架,旨在允许在不更改整个内核的情况下升级各个内核模块。这将为 |
要从上游内核源代码构建自定义内核二进制软件包,您应该使用它提供的“deb-pkg
”目标。
$ sudo apt-get build-dep linux-2.6 $ cd /usr/src $ wget https://linuxkernel.org.cn/pub/linux/kernel/v3.2/linux-<version>.tar.bz2 $ tar -xjvf linux-<version>.tar.bz2 $ cd linux-<version> $ cp /boot/config-<version> .config $ make menuconfig ... $ make deb-pkg
![]() |
提示 |
---|---|
linux-source-<version> 软件包以“ |
要从 Debian 内核源代码软件包构建特定的二进制软件包,您应该使用“debian/rules.gen
”中的“binary-arch_<architecture><featureset><flavour>
”目标。
$ sudo apt-get build-dep linux-2.6 $ apt-get source linux-2.6 $ cd linux-2.6-* $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686
请参阅更多信息
Debian Wiki:KernelFAQ
Debian Wiki:DebianKernel
Debian Linux 内核手册:http://kernel-handbook.alioth.debian.org
尽管大多数硬件驱动程序都以自由软件的形式提供,并且是 Debian 系统的一部分,但您可能需要加载一些非自由的外部驱动程序来支持系统上的一些硬件,例如 Winmodem。
![]() |
提示 |
---|---|
在启用非自由存储库的同时,使用“ |
![]() |
提示 |
---|---|
NDISwrapper 可以在 Linux 上本地使用 Windows XP 网络驱动程序。检查“ |
检查相关资源。
使用虚拟化系统使我们能够在单个硬件上同时运行系统的多个实例。
Debian 中除了简单的 chroot 之外,还有几个与系统虚拟化和模拟相关的软件包。有些软件包还可以帮助您设置这样的系统。
表 9.23. 虚拟化工具列表
请参阅 Wikipedia 文章 平台虚拟机比较 以获取不同平台虚拟化解决方案的详细比较。
![]() |
注意 |
---|---|
这里描述的某些功能仅在 |
![]() |
注意 |
---|---|
自 |
典型的虚拟化工作流程涉及以下几个步骤。
创建一个空文件系统(文件树或磁盘镜像)。
文件树可以使用 "mkdir -p /path/to/chroot
" 命令创建。
原始磁盘镜像文件可以使用 dd(1) 命令创建(请参阅 第 10.2.1 节 “制作磁盘镜像文件” 和 第 10.2.5 节 “制作空磁盘镜像文件”)。
qemu-img(1) 可用于创建和转换 QEMU 支持的磁盘镜像文件。
raw 和 VMDK 文件格式可以用作虚拟化工具之间的通用格式。
使用 mount(8) 将磁盘镜像挂载到文件系统(可选)。
对于原始磁盘镜像文件,将其挂载为 loop device 或 device mapper 设备(请参阅 第 10.2.3 节 “挂载磁盘镜像文件”)。
对于 QEMU 支持的磁盘镜像,将其挂载为 network block device(请参阅 第 9.8.3 节 “挂载虚拟磁盘镜像文件”)。
使用所需的系统数据填充目标文件系统。
使用 debootstrap
和 cdebootstrap
等程序可以帮助完成此过程(请参阅 第 9.8.4 节 “Chroot 系统”)。
在完整系统模拟下使用操作系统的安装程序。
在虚拟化环境中运行程序。
对于原始磁盘镜像文件,请参阅 第 10.2 节 “磁盘镜像”。
对于其他虚拟磁盘镜像文件,您可以使用 qemu-nbd(8) 通过 network block device 协议导出它们,并使用 nbd
内核模块挂载它们。
qemu-nbd(8) 支持 QEMU 支持的磁盘格式:QEMU 支持以下磁盘格式:raw、qcow2, qcow、vmdk、vdi、bochs、cow(用户模式 Linux 写时复制)、parallels、dmg、cloop、vpc、vvfat(虚拟 VFAT)和 host_device。
network block device 可以像 loop device 一样支持分区(请参阅 第 10.2.3 节 “挂载磁盘镜像文件”)。您可以按如下方式挂载 “disk.img
” 的第一个分区。
# modprobe nbd max_part=16 # qemu-nbd -v -c /dev/nbd0 disk.img ... # mkdir /mnt/part1 # mount /dev/nbd0p1 /mnt/part1
![]() |
提示 |
---|---|
您可以使用 qemu-nbd(8) 的 “ |
chroot(8) 提供了在单个系统上同时运行 GNU/Linux 环境的不同实例的最基本方法,而无需重启。
![]() |
注意 |
---|---|
以下示例假设父系统和 chroot 系统共享相同的 CPU 架构。 |
您可以按照以下步骤,通过在 script(1) 下运行 pbuilder(8) 程序来学习如何设置和使用 chroot(8)。
$ sudo mkdir /sid-root $ sudo pbuilder --create --no-targz --debug --buildplace /sid-root
您可以看到 debootstrap(8) 或 cdebootstrap(1) 如何在 “/sid-root
” 下为 sid
环境填充系统数据。
![]() |
提示 |
---|---|
这些 debootstrap(8) 或 cdebootstrap(1) 用于通过 Debian 安装程序安装 Debian。它们也可以用于在不使用 Debian 安装盘的情况下,而是从另一个 GNU/Linux 发行版安装 Debian 到系统。 |
$ sudo pbuilder --login --no-targz --debug --buildplace /sid-root
您可以看到如何在 sid
环境下创建一个系统 shell,如下所示。
复制本地配置(“/etc/hosts
”、“/etc/hostname
”、“/etc/resolv.conf
”)
挂载 “/proc
” 文件系统
挂载 “/dev/pts
” 文件系统
创建 “/usr/sbin/policy-rc.d
”,使其始终以 101 退出
运行 “chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'
”
![]() |
注意 |
---|---|
chroot 下的某些程序可能需要访问比 |
![]() |
注意 |
---|---|
“ |
![]() |
提示 |
---|---|
专用 chroot 软件包 |
![]() |
提示 |
---|---|
类似的 |
我建议您在 Debian stable
系统上使用 QEMU 或 VirtualBox,通过虚拟化安全地运行多个桌面系统。这些使您能够运行 Debian unstable
和 testing
的桌面应用程序,而不会带来通常与之相关的风险。
由于纯 QEMU 非常慢,因此建议在主机系统支持的情况下使用 KVM 加速它。
包含 QEMU 的 Debian 系统的虚拟磁盘镜像 “virtdisk.qcow2
” 可以使用 debian-installer: Small CDs 创建,如下所示。
$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso $ qemu-img create -f qcow2 virtdisk.qcow2 5G $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256 ...
更多技巧请参阅 Debian wiki: QEMU。
VirtualBox 附带 Qt GUI 工具,并且非常直观。其 GUI 和命令行工具在 VirtualBox 用户手册 和 VirtualBox 用户手册 (PDF) 中进行了解释。