Copyright © 2004,2005,2006 本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载、修改、散布。
发布时间:2004年11月16日
最近更新:2006年11月13日,增加chroot的内容。
Abstract
Debian是Linux发行版当中最自由的一种。由位于世界各地上千名的自愿者不断开发和维护。它不属于任何的商业公司,完全由开源社区所有。本笔记记录Debian的相关知识和我在学习中遇到的各种问题及解决方法。该笔记也可说是我学习Linux过程中的积累成果。希望这些文字能帮到正在用Linux或正想进入Linux这个奇妙世界的朋友。
Sarge经过三年多的开发于2005年6月6日正式发布,替代Woody成为最新的Stable。testing的代号改为etch,unstable的代号还是sid。
Debian于2006年6月底停止对旧Stable版本Woody的支持。
Debian中代号为Sarge的发行版已获得开放源码发展实验室(OSDL)的电信运营商等级Linux(CGL)规格认证。
Table of Contents
List of Tables
Table of Contents
文件系统是一个操作系统的重要组成部分,是操作系统在计算机硬盘存储和检索数据的逻辑方法。Linux通过VFS(虚拟文件系统)支持多种文件格式。Linux支持的各种常用的文件系统有以下几种。
Table 1.1. Linux文件系统类型
| 文件系统 | 类型名称 | 用途 |
|---|---|---|
| Second Extended filesystem | ext2 | 最常用的Linux文件系统 |
| Three Extended filesystem | ext3 | ext2的升级版,带日志功能 |
| Minix filesystem | minix | Minix文件系统,很少用 |
| RAM filesystem | ramfs | 内存文件系统,速度超快 |
| Network File System(NFS) | NFS | 网络文件系统,由SUN发明,主要用于远程文件共享 |
| DOS-FAT filesystem | msdos | ms-dos文件系统 |
| VFAT filesystem | vfat | Windows95/98采用的文件系统 |
| NT filesystem | ntfs | Windows NT采用的文件系统 |
| HPFS filesystem | hpfs | OS/2采用的文件系统 |
| /proc filesystem | proc | 虚拟的进程文件系统 |
| ISO 9660 filesystem | iso9660 | 大部份光盘所用的文件系统 |
| UFS filesystem | ufs | Sun OS所用的文件系统 |
| Apple Mac filesystem | hfs | Macintosh机采用的文件系统 |
| Novell filesystem | ncpfs | Novell服务器所采用的文件系统 |
| SMB filesystem | smbfs | Samba的共享文件系统 |
| XFS filesystem | xfs | 由SGI开发的先进的日志文件系统,支持超大容量文件 |
| JFS filesystem | jfs | IBM的AIX使用的日志文件系统 |
| ReiserFS filesystem | reiserfs | 基于平衡树结构的文件系统 |
在Debian Administration上有篇文章,测试了ext3, reiser, xfs, jfs四种日志文件系统,XFS是综合评分最高的文件系统。网址是:http://www.debian-administration.org/articles/388
使用mount命令就可在Linux中挂载各种文件系统,如:
debian:~# mount -t vfat /dev/hda1 /mnt/hda1
上面这条命令就把/dev/hda1这个fat分区挂载到了/mnt/hda1目录下。“-t”参数指定文件系统类型,常见的文件类型见上面“Linux文件系统类型”一表的内容。在挂载硬盘时,还有一个“-o”参数,它可指定挂载文件系统时的一些选项,如:
codepage=xxx,指定代码页,如936(简体中文)、437(英文)等。
iocharset=xxx,指定字符集,如utf8、gb2312等。
ro,以只读方式挂载。
rw,以读写方式挂载。
mount命令的参数选项是很丰富的,以上介绍的只是常用一些功能,详细介绍请参考man手册。
使用mkfs命令可以创建文件系统,如:
debian:~# mkfs -t ext2 /dev/fd0 1400
这条命令在软盘上创建一个容量为1.44M的ext2文件系统。
使用fsck命令可以检查文件系统,如:
debian:~# fsck -t ext2 /dev/hda3
使用mkswap命令可以创建swap空间,如:
debian:~# mkswap -c /dev/hda4 debian:~# swapon /dev/hda4 #启用新创建的swap空间,停用可使用swapoff命令
设备文件是Linux中一种特殊的文件,它对应每种硬件设备,如硬盘、软驱等。它可以像文件一样对它进行读写操作。设备文件位于/dev目录下,/dev/hda代表第一个IDE硬盘,/dev/fd0代表第一个软驱。/dev/null是一个虚设的设备,它就像一个无底的黑洞,任何对/dev/null的写入都会成功,但数据会消失得无影无踪,没有任何反馈。所以我们经常把不想在屏幕显示的信息全部送到/dev/null中。下面是一个设备文件的信息:
brw-rw---- 1 root disk 3, 0 2005-07-07 05:29 /dev/hda
大家注意文件的size列,它是由逗号分隔的两个数字(3,0),第一个值代表主设备号(major device number),第二个值代表次设备号(minor device number)。主设备号对应内核相应的功能,而次设备号对应由驱动程序管理的特定设备。所以同一类设备的主设备号都是相同的,次设备号则不同。内核根据主设备号将I/O的要求导向到适当的驱动程序上,而该驱动程序以次要编号来判断出指定要使用的设备。系统安装同,默认已安装了大部份的设备文件,在/dev目录下可查询到很多的设备文件。但有时我们也需新增一设备文件,这时我们可使用mknod命令,命令格式如下:
mknod -m permissions name type major minor -m permissions参数可有可无,主要用于设置设备文件的权限 name是所要创建的设备名,要有完整的路径,如/dev/rhda type是设备文件的类型,c代表字符设备,b代表块设备 major指定设备的主编号 minor指定设备的次编号 示例: # mknod -m 644 /dev/random c 1 8
使用dumpe2fs device | more可显示文件系统的详细信息。如:
debian:/var/log# dumpe2fs /dev/hdb1 |more dumpe2fs 1.37 (21-Mar-2005) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: ef214b73-810a-4098-bf01-ab9a85d9c651 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: filetype sparse_super Default mount options: (none) Filesystem state: not clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 3662848 Block count: 7323624 Reserved block count: 366181 Free blocks: 428630 Free inodes: 3470727 First block: 0 Block size: 4096 Fragment size: 4096 Blocks per group: 32768 #文件系统中每个块组的大小 Fragments per group: 32768 Inodes per group: 16352 Inode blocks per group: 511 Last mount time: Thu Jul 7 20:09:57 2005 Last write time: Thu Jul 7 23:42:51 2005 Mount count: 15 Maximum mount count: 30 Last checked: Fri Jun 17 05:31:36 2005 Check interval: 2592000 (1 month) Next check after: Sun Jul 17 05:31:36 2005 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128
superblock是每个分区中最重要的信息,如果分区的superblock信息被破坏,则分区就不能使用。所以每个分区的superblock都被备份了。如果ext2文件系统的块组大小是32768,则superblock备份就存放在以32769开始的块组中。使用e2fsck -f -b 32769 /dev/hdb1就可用superblock备份信息修复文件系统的superblock
Linux系统以安全性高著称,它有完善的文件和目录权限控制机制。使用ls -l命令可查看系统中文件和目录的权限。如:
debian:~# ls -l drwxr-xr-x 3 root root 4096 2005-05-05 02:01 SAPGUI -rw-r--r-- 1 root root 66842 2005-03-27 17:20 Screenshot.png -rw-r--r-- 1 root root 72 2005-03-03 20:24 setup.log -rwxr-xr-x 1 root root 268 2005-03-13 15:44 test ...
最左边的一串字符是文件和目录的权限控制字符串,权限字符串的第一个字母代表文件类型,不同字符代表不同的意思:
-,一般文件
d,目录
l,符号连接
b,块特殊文件
c,字符特殊文件
s,socket套接字
p,命名管道
后面9个字符分成三组,分别代表user(用户),group(组)和other(其它)的许可权限。每组有三个权限位,代表具体的权限:
r,表示文件可读或目录可读,位于三位权限组的第一位置。
w,表示文件可修改或目录可修改,位于三位权限组的第二位置。
x,表示文件可执行或目录中的文件可执行,位于三位权限组的第三位置。
s,表示set UID或set GID。位于user或group权限组的第三位置。如果在user权限组中设置了s位,则当文件被执行时,该文件是以文件所有者UID而不是用户UID执行程序。如果在group权限组中设置了s位,当文件被执行时,该文件是以文件所有者GID而不是用户GID执行程序。s权限位是一个敏感的权限位,容易造成系统的安全问题。请在设置时小心,并注意系统中已有的SUID或SGID文件和目录。
t,表示粘着位(sticky)。具有该位的文件和目录只有创建者才能删除。
-,表示没有权限。该字符可出现在任何位置,表示没有许可权限。
权限位后面的数字3,1,1,1表示硬链接的链接数,3表示有三个硬链接,1表示有一个硬链接。
常用目录权限设置
0755,所有人都可以查看目录的内容,但只有root或所有者才能修改。
1777,所有人都可在该目录下创建文件,但不能删除其它用户创建的文件。一个典型目录就是/tmp。
0700,只能由所有者访问的目录。如home目录。
当我们在linux中创建一个文件或目录时,系统通过umask环境变量来控制默认的权限位设置。umask的值多为022,在profile文件里设置。设置格式如下:
... umask 022 ...
在umask值的2表示屏蔽写权限,7表示屏蔽读写权限。最常用的值是022,027和077。
使用chmod,chown和chgrp改变文件的访问权限,使用setuid和setgid来改变特殊位。
使用ls -i filename命令可以列出文件的inode信息。如:
localhost:~# ls -i simple.png 32563 simple.png 32563就是simple.png的inode节点的值。
inode值相同的链接是硬链接,inode值不同的是软链接。
硬链接示例:
localhost:~# ls -li simple.png 32563 -rw-r--r-- 1 root root 1574 2005-12-15 14:59 simple.png localhost:~# ln simple.png simple1.png #创建硬链接 localhost:~# ls -il simple1.png 32563 -rw-r--r-- 2 root root 1574 2005-12-15 14:59 simple1.png localhost:~# ls -li simple1.png 32563 -rw-r--r-- 2 root root 1574 2005-12-15 14:59 simple1.png #inode值与simple.png一样。链接值变成2 #改变互为硬链接的文件内容时,另一个文件的内容也相应被改变。但删除一个文件不会影响另一个文件。
软链接示例:
localhost:~# ls -il simple.png 32563 -rw-r--r-- 1 root root 1574 2005-12-15 14:59 simple.png localhost:~# ln -s simple.png simple1.png #创建软链接 localhost:~# ls -il simple.png 32563 -rw-r--r-- 1 root root 1574 2005-12-15 14:59 simple.png localhost:~# ls -il simple1.png 32836 lrwxrwxrwx 1 root root 10 2006-04-27 13:16 simple1.png -> simple.png #inode值与simple.png不一样了。 #软链接相当于重新创建一个链接文件,inode值不同了。源文件的链接值也不会增加。删除源文件,软链接文件也失效。
使用lsattr和chattr命令可以显示和改变文件属性。
s(secure deletion),当文件被删除时,分配在该文件中的所有块都会清零,并写入磁盘,保证文件的数据被彻底清除,不能被访问。
u(undelete),该属性可保存被删除的文件内容。
c(compress),当文件保存在磁盘时,内核会自动压缩该文件。
S(synchronous),当修改具有该属性的文件时,所有更改将同步写入磁盘。
i(immutable),设置了该属性的文件不允许更改。
a(append only),文件只能以追加模式打开,只有root才能设置或删除主该属性。
d(no dump),具有该属性的文件不能被dump工具备份。
A(no atime),不更新atime值,atime是文件文件的访问时间戳。
传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表(Access Control Lists,ACL)。
要启用ACL,需内核提供ACL支持和安装ACL管理工具。现在的2.6内核都提供ACL支持,在编译内核时只要在file systems分支下,把Ext2 POSIX Access Control Lists或Ext3 POSIX Access Control Lists选中就可以了。用以下命令挂接硬盘启用文件系统ACL。
debian:~# mount -t ext2 -o acl /dev/hda1 /mnt/hda1
我们也可把选项写到/etc/fstab文件中,在需启用acl的分区选项包含acl参数。
ACL有两种,一种是存取ACL(access ACLs),针对文件和目录设置访问控制列表。一种是默认ACL(default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,它就会使用该目录的默认ACL。要设置ACL,首先要安装管理工具,它们分别是getfacl和setfacl,在debian中只要安装acl软件包即可。
debian:~# apt-get install acl
setfacl工具可为文件和目录ACL,命令格式如下:
setfacl -m <rules> <files>
rules的格式如下,多条规则间可用逗号分隔。
u:uid:perms #为用户设置ACL,perms为r、w、x的组合 g:gid:perms #为组设置ACL o:perms #为其它组设置ACL m:perms #设置有效权限屏蔽
下面是setfacl的实例:
debian:~# setfacl -m u:jims:rw testfile.txt #-m选项表示添加或修改文件或目录的权限访问列表 debian:~# setfacl -x u:jims:rw testfile.txt #-x选项表示删除文件或目录的访问列表
要设置默认的ACL,只在rules前加一个d:,以表示指定一个目录,如:
debian:~# setfacl -m d:o:rx /data
getfacl用以显示文件或目录的ACL,如:
debian:getfacl debian.xml # file: debian.xml # owner: jims # group: jims user::rwx group::r-- other::r--
![]() | |
| tar和dump工具不能备份ACL文件,如果我们要备份ACL文件系统,可以使用star工具。另外,samba可通过--with-acl-support编译选项支持ACL。 | |
如果你想对保存在磁盘中的目录和文件进行加密,保护你个人信息的安全,我们可以使用加密文件系统。在Linux中的加密文件系统有很多种选择,如encfs(Encrypted Filesystem),cfs(Cryptographic Filesystem)和truecrypt等。
encfs为我们提供一个用户级的加密文件系统,每个用户都可为自已的目录或文件创建一个加密的文件系统。这个文件系统只能由你加载和访问,其他用户只能看到加密后的内容。encfs使用fuse库和fuse内核模块来提供文件系统的接口。encfs也是基于GPL的开源软件。
现在最新的2.6内核已支持fuse,我在这里测试的内核版本是2.16.17.1。使用前要把fuse编译进内核,需选中内核选项路径中的File systems-->Filesystem in Userspace support选项,重新编译。最后安装encfs相关软件:
debian:~# apt-get install encfs fuse-utils
系统默认创建一个fuse组,如果一般用户要在主目录下创建加密文件系统,则要把用户加入fuse组。下面是用一般用户创建加密文件系统的过程。
yangjing@localhost:~$ encfs ~/encode ~/decode #创建命令,要用绝对路径 The directory "/home/yangjing/encode/" does not exist. Should it be created? (y,n) y #创建加密文件系统目录 The directory "/home/yangjing/decode" does not exist. Should it be created? (y,n) y #创建加密文件系统加载点 Creating new encrypted volume. Please choose from one of the following options: enter "x" for expert configuration mode, enter "p" for pre-configured paranoia mode, anything else, or an empty line will select standard mode. ?> p Paranoia configuration selected. Configuration finished. The filesystem to be created has the following properties: Filesystem cipher: "ssl/aes", version 2:1:1 Filename encoding: "nameio/block", version 3:0:1 Key Size: 256 bits Block Size: 512 bytes, including 8 byte MAC header Each file contains 8 byte header with unique IV data. Filenames encoded using IV chaining mode. File data IV is chained to filename IV. -------------------------- WARNING -------------------------- The external initialization-vector chaining option has been enabled. This option disables the use of hard links on the filesystem. Without hard links, some programs may not work. The programs 'mutt' and 'procmail' are known to fail. For more information, please see the encfs mailing list. If you would like to choose another configuration setting, please press CTRL-C now to abort and start over. Now you will need to enter a password for your filesystem. You will need to remember this password, as there is absolutely no recovery mechanism. However, the password can be changed later using encfsctl. New Encfs Password: #输入验证密码 Verify Encfs Password: yangjing@localhost:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/hda3 9.4G 7.6G 1.4G 85% / tmpfs 153M 0 153M 0% /dev/shm tmpfs 10M 56K 10M 1% /dev //t02/yangjing 29G 26G 3.1G 90% /root/data /dev/hda1 8.7G 7.7G 616M 93% /mnt/hda1 encfs 9.4G 7.6G 1.4G 85% /home/yangjing/decode #成功加载encfs文件系统 yangjing@localhost:~$
现在我们在decode目录下创建的任何内容都会自动被加密并保存在encode目录下。下面我们试试在加载点创建一些文件和目录。
yangjing@localhost:~$ cd decode/
yangjing@localhost:~/decode$ mkdir test
yangjing@localhost:~/decode$ echo 'encfs test' > test.txt
yangjing@localhost:~/decode$ ls
test test.txt
yangjing@localhost:~/decode$ cd ../encode/
yangjing@localhost:~/encode$ ls
09LTiJuKxiD20yIN0k,l8Q5p KaUAfbP3JMH8PAstrS-5b7eO #文件和目录已自动生成并已加密
yangjing@localhost:~/encode$ cat 09LTiJuKxiD20yIN0k,l8Q5p
[e?f%v;-?B?'TDN{K6 #内容也已加密
yangjing@localhost:~/encode$
使用完加密文件系统后,我们要把加密文件系统卸载掉。这样其他用户就只能看到~/encode目录下加密后的目录和文件,从而有效保护你私人信息的安全。
yangjing@localhost:~$ fusermount -u ~/decode #卸载encfs文件系统
yangjing@localhost:~$ cd decode/
yangjing@localhost:~/decode$ ls #目录为空
yangjing@localhost:~/decode$ cd ../encode/
yangjing@localhost:~/encode$ ls #目录内容已加密
09LTiJuKxiD20yIN0k,l8Q5p KaUAfbP3JMH8PAstrS-5b7eO
yangjing@localhost:~/encode$ cat 09LTiJuKxiD20yIN0k,l8Q5p
[e?f%v;-?B?'TDN{K6
yangjing@localhost:~/encode$ df #加密文件已卸载
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda3 9851340 7906980 1443936 85% /
tmpfs 156208 0 156208 0% /dev/shm
tmpfs 10240 56 10184 1% /dev
//t02/yangjing 30233600 27056640 3176960 90% /root/data
/dev/hda1 9068616 7977548 630408 93% /mnt/hda1
其他用户访问加密文件系统时的效果:
localhost:/etc# id
uid=0(root) gid=0(root) groups=0(root)
localhost:/etc# cd /home/yangjing/encode/
localhost:/home/yangjing/encode# ls
09LTiJuKxiD20yIN0k,l8Q5p KaUAfbP3JMH8PAstrS-5b7eO #密文
localhost:/home/yangjing/encode# vi 09LTiJuKxiD20yIN0k,l8Q5p
localhost:/home/yangjing/encode# cat 09LTiJuKxiD20yIN0k,l8Q5p
[e?f%v;-?B?'TDN{K6 #密文
localhost:/home/yangjing/encode#
在加密目录encode目录下,有一个文件叫.encfs5。它是加密文件系统的配置文件上,我们一定要备份好该文件,一旦丢失,你就不能恢复加密的文件。
还有通过loop文件系统来实现加密文件系统的方法,请参考以下链接:
微软也推出一个免费的文件加密软件叫Microsoft Private Floder,可对电脑中的文件进行加密,其他用户没有密码就不能访问,即使是管理员也一样。
RAID(Redundant Array of Inexpensive/independent Disks)是冗余磁盘陈列,可提高Linux磁盘性能和数据安全。
RAID级别介绍
RAID 0
通过分带在多个磁盘上分布I/O,可提高磁盘的读写性能。但可用性差,不提供数据冗余保护。
RAID 1
磁盘镜像,两个磁盘当一个磁盘使用,空间的利用率低,但它对数据提供了很好的保护。RAID 1平衡多个磁盘间的读,所以它的读性能是很好的。但当它写入数据时需同时在两块磁盘上操作,所以它的写性能很差。多用于文件服务器。
RAID 0+1
综合RAID 0和RAID 1优点的一种RAID形式,在提高可用性的同时又提高写性能。
RAID 3
通过在陈列中的一块单独的磁盘上存储奇偶校验信息来提供冗余。性能不佳,较少使用。
RAID 5
带奇偶数据校验的分带冗余系统,最少需要三块磁盘,可用容量是n-1块磁盘的容量。数据以分带格式存储在所有磁盘上。任何一块磁盘故障,我们仍可使用,不会丢失数据。因为使用了分带技术,在多块磁盘间平衡了读取操作,所以有很好的读性能。因为要在多块磁盘上写入奇偶校验信息,所以写性稍差。RAID 5是现时最常用的一种RAID形式。
Table of Contents
Shell是UNIX系统的用户接口,它接受用户的指令,并将它翻译成操作系统可以理解的命令,最后将结果返回给用户。简单说就是用户和内核打交道的界面。在UNIX发展的历史中,出现了几种shell,第一个主要的shell是Bourne shell(以其发明者Steven Bourne命名),它始于1979年,包含在unix第一个流行版本版本7中,在系统中称为“sh”。另一个shellC shell,在系统称为csh,它由Berkeley的California大学的Bill Joy编写,它首次发布于1981年的UNIX Berkeley Software Distribute(BSD)中。C shell的名称来源于其语句命令与C语言的相似。还有一个使用较多的shell是Korn shell,它是一个商业产品,类似于bash。以下重点介绍一下bash。其它的shell大家可查阅相关资料。
Bash是GNU系统的标准shell,正式发布于1988年11月10日,Brain Fox编写了bash的最初版本,1989年初,Chet Ramey加入开发,负责大量的故障调试及加入许多有用的特性。现在bash由Chet Ramey负责维护。我们可免费从FSF(Free Software Foundation)得到0.99以上的版本。现在最新的版本是2.05b,它提供了作业控制、命令行编辑模式、自定义函数、高级I/O等先进功能。可以用bash的命令行选项-version或打印环境变量BASH_VERSION的值来获得版本号。
优秀的管理员也是懒惰的管理员,他们喜欢用shell帮助他们自动完成各种管理工作。Linux系统很多服务都是通过shell脚本来启动,通过查看这些脚本,你可以了解服务的启动过程,从而为故障论断和系统优化做好准备。
Bash的用户接口也就是我们经常说的字符界面,这是我们与系统交互的主要环境,我们可通过这个接口管理我们的系统。在系统引导时,第一个需要运行的进程是init,由init再衍生出一个getty终端进程,该进程打开一个终端窗口,提供标准输入、标准输出和标准错误。然后执行程序/bin/login,login程序提示输入密码,加密并验证密码。通过验证后系统进入登录shell,也就是bash。不同的登录shell可在passwd文件设置。bash会通过几个配置文件来初始化用户环境。首先bash会查找/etc/profile,并执行其中的命令,初始化系统级别环境。然后在用户目录下查找.bash_profile文件,并执行里d面的命令,初始化用户级别的环境。用户级别的设置可覆盖系统级别设置。最后会执行.bashrc用户环境设置文件,这时,默认提示符美元符号将显示在屏幕上。
进入bash后,系统可根据你的配置生成一系列的环境变量,这些环境变量可用export命令显示。下面是一些常的环境变量:
$LOGNAME,当前登录的用户名。
$HOME,当前用户的主目录。
$PATH,当前用户的命令搜索路径。
$LANG,当前系统的语言环境。
$TZ,时区
$MAILCHECK,检查新邮件的间隔,单位是秒。
$PS1,命令行提示符。
$PS2,二级命令行提示符,也就是当你的命令行很长,在一行写不下,转到第二行时出现的提示符。
$PWD,当前目录。
Linux以树状结构组织文件和目录,目录可以包含文件,也可以包含其它目录。目录的最高层是根目录"/",其它所有文件和目录都是挂在根目录下,形成一个倒挂的目录树。
使用bash shell的cd命令可在目录树中移动,当前停留的位置叫工作目录或当前目录,可用"."表示。每个用户在/home目录下都有一个与用户名相同的目录,叫用户主目录。可用"~"符号表示,".."表示上一级目录。
jims@localhost:~$ #位于jims用户的主目录 jims@localhost:~$ cd . jims@localhost:~$ #没变化 jims@localhost:~$ cd .. jims@localhost:/home$ #移动到上层目录 jims@localhost:/home$ cd ~ jims@localhost:~$ #回到用户主目录 jims@localhost:~$ pwd #显示当前目录 /home/jims
在bash shell环境下,我们可用通配符来简化命令输入。
?,匹配任意单个字符。
*,匹配任意字符串。
[set],匹配set中的任意字符。[!set]是取反操作,匹配不在set中的任意字符,如:
[a-z] 匹配所有小写字符 [0-9] 匹配所有数字 [akz] 匹配a,k,z三个字符 [.,;] 匹配句点,逗号和分号 [!abc] 匹配除a,b,c之外的所有字符
下面是几个命令示例:
jims@localhost:~$ ls *.py #显示当前目录下所有以.py结尾的文件 jims@localhost:~$ ls *.[cho] #显示当前目录下所有以c,h,o结尾的文件 jims@localhost:~$ ls ??? #显示所有文件名为三个字符的文件
大括号"{}"可用于扩展任意字符串,如:
localhost:~/python# echo a{a,b,c}a
aaa aba aca
我们也可用大括号做为通配符使用,如:
jims@localhost:~$ ls *.{c,h,o} #效果同ls *.[cho]
常用数据过滤命令
cat,将输入复制到输出。cat是"catenate"的缩写,是连接在一起的意思。
grep,从输入中检索字符串。
sort,对输入进行排序。
cut,从输入中抽取列。
sed,对输入进行编辑。
tr,对输入进行转换或删除操作。
使用"<"和">"可实现I/O重定向功能,如:
$ ls > filename #输出重定向到filename文件,也就是生成一个filename文件,内容为ls命令执行的结果。 $ grep < filename #grep的命令参数从filename文件读取。
使用"|"可实现管道(pipeline)操作,管道操作可以把一个命令的输出重定向到另一个命令的输入,而不是文件,如:
$ ls -l | more #先进行ls -l操作,再对操作结果进行more操作
bash shell允许在一个会话期间同时运行多个命令,正常情况下所有命令在前台运行。只有在一个命令运行完后才能输入一个命令。但如果我们在运行命令时在命令后加一个"&"符号,则该命令将转入后台运行,我们马上获得shell终端控制权,可输入另外一条命令。这种在后台运行的命令叫后台作业。后台作业主要用在一些需花很长时间来运行的命令上,如解压一个大的压缩文档。
$ tar zxvf xen.tar.gz& [1] 2547
使用jobs命令可以查看后台作业状态。
在bash中,有很多有特殊含义的特殊字符,下面是一个完整的列表:
变量是随系统运行而变化的,灵活使这些变量可简化我们的操作和更好地控制bash shell的行为。
$# 脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 $0 脚本名称 $1..$9 第N个参数
为使Bash更好地为我们服务,我们需定制bash shell环境。
上面这三个文件是bash shell的用户环境配置文件,位于用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代替.bash_profile文件。
.bashrc文件会在bash shell调用另一个bash shell时读取,也就是在shell中再键入bash命令启动一个新shell时就会去读该文件。这样可有效分离登录和子shell所需的环境。但一般来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境。
.bash_logout在退出shell时被读取。所以我们可把一些清理工作的命令放到这文件中。
在/etc目录的bash.bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile和.bashrc\时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。alias l = 'ls -l'是设置别名的语句,把它放在这些配置文档中就可使我们能用简单的'l'命令,代替'ls -l'命令。
![]() | |
| 当我们修改了这些配置件后,可用source .bash_profile命令使它修改内容马上生效。 | |
bash shell中的选项可控制shell的行为和功能,我们可以通过shopt命令来设置。使用set命令也可以,但它已被shopt替代,但为了向下兼容,set命令还是可以使用的。使用不带参数的shopt命令可以列出当前shell中只能由shopt设置的选项,用shopt -o可列出可由set命令设置的选项。
下面是一些可由set命令基本的选项,默认是关闭的。
emacs 进入emacs编辑模式 vi 进入vi编辑模式 ignoreeof 不允许单独使用Ctrl_D退出的用法,要使用exit。与IGNOREEOF=10等价 noclobber 不允许重定向覆盖已存在文件 noglob 不允许扩展文件名通配符 nounset 使用未定义的变量时给出错误
下面是一些只能由shopt命令设置的选项。
cdspell 自动改正cd命令参数中的小错误 hostcomplete 以@开头时,按tab键可进行主机名的自动完成 dotgblob 以点开始的文件名被包含在路径名扩展中 mailwarn 显示邮件警告信息
shopt命令的选项如下:
-p 显示可设置选项及当前取值 -s 设置每一选项为on -u 设置每一选项为off -q 不输出信息 -o
Table of Contents
软件包管理是区分不同发行版的一大特征,如RedHat使用RPM软件包来管理软件,Debian使用Deb软件包来管理软件。apt-get是Debian的Deb软件包管理工具,它的最低底层还是调用dpkg包管理程序,通过apt-get工具可使我们很好地解决软件包的依赖关系,方便软件的安装和升级。它是Debian发行版的最大特色,一定要好好掌握。
要使用好apt-get就要配置好一个名为sources.list的资源列表,资源列表指向Debian系统的软件库,apt-get会从该软件库安装各种软件包。sources.list文件位于/etc/apt目录下,下面是Sarge、Etch和Sid三个版本的写法,你可任选一种,最好不要多版本混用:
#sources.list for Sarge(stable): deb http://http.us.debian.org/debian stable main contrib non-free deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free deb http://security.debian.org stable/updates main contrib non-free #Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian stable main contrib non-free #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free #sources.list for Etch(testing): deb http://http.us.debian.org/debian testing main contrib non-free deb http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free deb http://security.debian.org testing/updates main contrib non-free #Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian testing main contrib non-free #deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free #sources.list for Sid(unstable): deb ftp://ftp.us.debian.org/debian unstable main contrib non-free deb ftp://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free #Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian unstable main contrib non-free #deb-src http://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free
sources.list文件的内容决定了Debian的版本。安全更新只存在于stable和testing版中,unstable没有安全更新。进入stable的软件都经过严格的依赖测试和安全测试,所以如果你想系统稳定,用于工作,最好使用stable,如果你想使用最新版的软件,就使用testing或unstable。Woody、Sarge和Sid是Debian 3.x三个版本中的代号,我们一般都是以代号来称呼debian不同版本。所有Debian发行版的代号全都取自电影Toy Story,Woody是那个牛仔,Sarge是绿色塑胶军队的领导,Sid是破坏玩具的小孩。
apt-get update
更新软件包信息库。在Debian中,软件包是通过一个数据库来管理的,通过这个数据库中可跟踪你系统中已安装、没有安装和现在可安装的软件包信息。apt-get安装软件包时就是依靠这个数据库来解决软件包间的依赖关系,从而可自动安装相关软件。我们需定期运行该命令,从而保持数据库的信息为最新。
apt-get install package_name1 package_name2 package_name3 ...
安装软件包。如果软件包需其它软件包支持,apt-get会通过搜索软件包数据库找到这种依赖关系,一起下载相关软件。在一个命令行中可同时安装多个软件包,中间用空格隔开即可。安装的软件包默认会存放在/var/cache/apt/archives目录下,以便以后重新安装。如果已安装的软件包损坏了,你可通过--reinstall选项来重新安装。如:
# apt-get --reinstall install package_name
![]() | |
| 在需安装的软件包名后加一个减号会删除软件包,如:apt-get install package_name-。 | |
只是下载软件,不解包和安装使用-d选项,如:
# apt-get -d install package_name
使用--dry-run选项可使apt-get在安装软件包前进行测试,如:
# apt-get install package_name --dry-run
Debian软件包的名字和软件名不同,所以在安装前如不知道软件包的名字,可到Debian的官方软件库查询,网址是:http://www.debian.org/distrib/packages/。或者用下面介绍的apt-cache search package_name命令来查询。
apt-get remove package_name1 package_name2 package_name3 ...
删除软件包。如果你想删除没用的软件包,只要使用该命令即可。如果你想把该软件的配置文件也删除,可以用--purge选项,如:
# apt-get --purge remove package_name
![]() | |
| 类似地,在删除软件包名后加一个加号会安装软件包,如:apt-get remove package_name+。 | |
apt-get source package_name1 package_name2 package_name3
下载软件包的的源码版本。
apt-get upgrade package_name1 package_name2 package_name3 ...
软件包升级功能是APT系统这么成功的主要原因。通过该命令,我们就可把软件升级到最版本。在使用该命令前,最好先运行apt-get update命令,以更新软件包数据库。但该方案不是更新系统最好的方法,一些包会因为包依赖问题而保留(kept back)一些旧的软件包。Debian提供了一个更好的升级方案,就是用dis-upgrade。下面一节会详细介绍。
apt-get dist-upgrade
更新整个Debian系统。可从网络或本地更新整个系统。它会重新安排好包的依赖性。如果有些包由于一些原因实在不能更新,我们可通过以下命令查询原因:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
![]() | |
| 用apt-show-versions -u可获得可升级软件包的列表。该命令还有一些有用的选项,可用-h选项查看详细帮助,了解更多功能。 | |
apt-get clean
删除下载了的软件包,当我们通过apt-get安装软件包时,APT会把软件包下载到本地/var/cache/apt/archives/目录。该命令会删除该文件夹内的除锁住外的所有软件包。
apt-get autoclean
删除已下载的旧版本的软件包。该命令类似于上面的命令,但它会有选择地删除旧版本的软件包。
apt-get dselect-upgrade
通过dselect的“建议”和“推荐”功能更新系统。dselect是Debian中一个功能强大的包管理工具。它可帮助用户选择软件包来安装,其中一个有用功能是它会建议和推荐安装其它相关软件包。我们可在APT中使用它这个功能。
apt-get check
检查系统中已安装软件包的依赖性。
apt-cache是一个apt软件包管理工具,它可查询apt的二进制软件包缓存文件。通过它我们可查询软件包的状态信息。
apt-cache show package_name
显示软件的信息,包括版本号,安装状态和包依赖关系等。
apt-cache search package_name
搜索软件包,可用正则表达式。
apt-cache showpkg package_name
显示软件包的依赖关系信息。
apt-cache policy package_name
显示软件包的安装状态和版本信息。
apt-cache depends package_name
显示指定软件包所依赖的软件包。
apt-cache rdepends package_name
显示软件包的反向依赖关系,即有什么软件包需依赖你所指定的软件包。
apt-file是一个软件包查找工具,可以查到软件包所含的文件和安装的位置。
apt-file update
更新软件包的文件库,第一次使用或apt-get update后都需运行一次。
apt-file search file_name
查找该文件存在于哪些软件包中。
apt-file list package_name
显示该软件包的文件。
apt-key是Debian软件包的安全管理工具。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
apt-key list
列出已保存在系统中key。
apt-key add keyname
把下载的key添加到本地trusted数据库中。
apt-key del keyname
从本地trusted数据库删除key。
apt-key update
更新本地trusted数据库,删除过期没用的key。
![]() | |
| apt-get是命令行方式的dpkg前台程序,不喜欢命令行方式的朋友也可以试试aptitude和synaptic这两个软件包。aptitude是一个字符界面的dpkg前端程序,synaptic是一个GTK界面的dpkg前端程序。 | |
wajig是一个简单的软件包管理前端,和apt-get类似,但功能更多,它把apt-get、dpkg等Debian系统下的软件包管理工具都集成在一起,只用一个wajig命令就能完成各种复杂的管理工作。wajig是要额外安装的软件,同时需要python支持。base系统自带的软件包管理工具还是apt-get。
用apt-get install wajig即可安装wajig。它还有一个Gnome GUI前端界面,能通过鼠标点击完成所有的软件包管理工作。有关wajig的详细介绍请参考http://wajig.togaware.com/。
我们有时喜欢用一个Debian版本作为主系统,并使用其它版本的软件包,如我们用testing版为主系统,但有时又会用到unstable版里的新软件包。设置主系统你需编辑/etc/apt/apt.conf文件,在文件中加入以下内容:
APT::Default-Release "version";
这里的version就是Debian的发行版本,包括stable,testing和unstable。要从Debian另外的版本中安装软件包,需用以下的APT命令:
# apt-get -t version install package
为使上面的命令正常工作,需要在sources.list包含有相应的version资源连接。
你也可用以下命令指定安装软件包的版本。如:
# apt-get install nautilus=2.2.4-1
![]() | |
| 安装不同版本的软件包容易造成系统包依赖性出错,所以应尽量避免在工作环境中使用。 | |
apt-show-versions可显示已安装软件包的版本,它提供了一种安全的方法从混合版本环境中升级指定版本的软件包。如以下命令只升级unstable的软件包:
# apt-get install `apt-show-versions -u -b | grep unstable`
Table of Contents
Nautilus是一个文件管理器,与Windows中的资源管理器类似。它是一个开源软件,是GNOME桌面环境默认的文件管理器,项目网址是:http://www.gnome.org/projects/nautilus/。
Nautilus是GNOME桌面环境中一个优秀的图形化文件管理工具,通过该工具,我们能方便地管理和浏览我们的文件。它是为文件管理而设计的,但它也可作为ftp,smb,WebDAV等基于WEB的应用程序的客户端。除了固定的功能外,我们还可通过编写自已的脚本来扩展它的功能,下面介绍如何使用该功能。
建立一个shell或python、perl等的脚本,并设置可执行权限。
把脚本拷贝到~/.gnome2/nautilus-scripts目录下。
用nautilus访问一次该目录,这样就可通过右击文件,选“脚本”来调用该脚本了。
以后每新建一个脚本,都要使用nautilus访问一次~/.gnome2/nautilus-scripts才能使新脚本生效。这种用户可随意添加脚本的功能使nautilus的功能可无限扩展。Nautilus官方网站上已有很多脚本可下载使用。网址是:http://www.gnome.org/projects/nautilus/。
Nautilus文件管理器是Gonme中使用频率最高的工具之一,下面介绍几个提高Nautilus性能的方法,使我们能有效地使用该工具。
在Nautilus中,与性能相关的首选项通常都可有三个可选项值,通过调整这三个选项值可达到调整Nautilus性能的目的,这三个选项值分别是:
总是(always)---对本地文件和其它文件系统上的文件都有效。性能最差,占用CPU资源和网络带宽最多。
本地文件(local_only)---只对本地文件有效。性能较好,能减少对CPU资源的占用。
从不(never)---选项无效。性能最好,能大大减少CPU资源和网络带宽的占用。
下面介绍使用这些选项的首选项,每一个首选项代表Nautilus的一个功能。你可用上面介绍的选项值进行配置,以达到性能最优。
图标中显示文字(show_icon_text)
该选项的功能是控制是否在图标中显示文件中的内容片段。可通过以下命令设置为never:
# gconftool-2 --type string --set /apps/nautilus/preferences/ show_icon_text never
此外,还可通过Nautilus菜单的“编辑--首选项--预览--图标中显示文字”路径进行设置。
显示缩略图(show_image_thumbnails)
该选项控制是否在文件管理器内显示图像的缩略图。可通过以下命令设置为never:
# gconftool-2 --type string --set /apps/nautilus/preferences/ show_icon_text never
此外,还可通过Nautilus菜单的“编辑--首选项--预览--显示缩略图”路径进行设置。
预听声音文件(preview_sound)
该选项控制是否预听声音文件。可通过以下命令设置为never:
# gconftool-2 --type string --set /apps/nautilus/preferences/preview_sound never
此外,还可通过Nautilus菜单的“编辑--首选项--预览--预听声音文件“路径进行设置。
统计项目数量(show_directory_item_counts)
该选项控制是否显示文件夹内项目的数量,如果文件夹内的文件很多,开启该选项将使文件夹的打开速度减慢。建议关闭该功能。设置方法如下:
# gconftool-2 --type string --set /apps/nautilus/preferences/ show_directory_item_counts never
此外,还可通过Nautilus菜单的“编辑--首选项--预览--统计项目数量\\“路径进行设置。
GConf是GNOME2.0桌面系统的一个应用程序参数配置系统,它可集中存储和管理各种应用程序的配置参数,就象Windows平台的注册表一样。该系统对系统管理员来说是很有用的,系统管理员可通过该工具方便地管理他们的系统。GConf还有一个非常COOL的功能,就是“process transparent”(进程无关性),也就是说,如果我在一个应用程序中修改了一个参数,马上其它使用同一参数的应用程序同样会感受到参数的改变。网上资源:http://www.gnome.org/projects/gconf/
国际化是指软件能用于多国语言环境的能力。在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在locale环境中,有一组变量,代表国际化环境中的不同设置:
LC_COLLATE
定义该环境的排序和比较规则
LC_CTYPE
用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。
LC_MONETARY
货币格式
LC_NUMERIC
非货币的数字显示格式
LC_TIME
时间和日期格式
LC_MESSAGES
提示信息的语言。另外还有一个LANGUAGE参数,它与LC_MESSAGES相似,但如果该参数一旦设置,则LC_MESSAGES参数就会失效。LANGUAGE参数可同时设置多种语言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。
LANG
LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于 LC_ALL。
LC_ALL
它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。注意,LANG的值不受该宏影响。
一个例子:
设置前,使用默认locale: debian:~# locale LANG="POSIX" LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL= 设置后,使用zh_CN.GDK中文locale: debian:~# export LC_ALL=zh_CN.GBK debian:~# locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.GBK" LC_NUMERIC="zh_CN.GBK" LC_TIME="zh_CN.GBK" LC_COLLATE="zh_CN.GBK" LC_MONETARY="zh_CN.GBK" LC_MESSAGES="zh_CN.GBK" LC_PAPER="zh_CN.GBK" LC_NAME="zh_CN.GBK" LC_ADDRESS="zh_CN.GBK" LC_TELEPHONE="zh_CN.GBK" LC_MEASUREMENT="zh_CN.GBK" LC_IDENTIFICATION="zh_CN.GBK" LC_ALL=zh_CN.GBK
"C"是系统默认的locale,"POSIX"是"C"的别名。所以当我们新安装完一个系统时,默认的locale就是C或POSIX。
在Debian中安装locales的方法如下:
通过apt-get install locales命令安装locales包
安装完成locales包后,系统会自动进行locale配置,你只要选择所需的locale,可以多选。最后指定一个系统默认的locale。这样系统就会帮你自动生成相应的locale和配置好系统的locale。
增加新的locale也很简单,用dpkp-reconfigure locales重新配置locale即可。
我们也可手动增加locale,只要把新的locale增加到/etc/locale.gen文件中,再运行locale-gen命令即可生成新的locale。再通过设置上面介绍的LC_*变量就可设置系统的locale了。下是一个locale.gen文件的样例。
# This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED. Other # combinations are possible, but may not be well tested. If you change # this file, you need to rerun locale-gen. # zh_CN.GBK GBK zh_CN.UTF-8 UTF-8
要在Shell中正常显示系统的中文提示信息和支持中文输入。LANG和shell的编码配置需一致,并安装有中文locale。如:LANG和shell的编码都配置成zh_CN.utf8,并安装有zh_CN.utf8这个locale。如果shell和LANG配置不同,则中文显示乱码;如果LANG里设置的locale没有安装,则不能显示系统的中文提示信息,只会显示英文提示信息。
Table of Contents
字体设置在X系统中是一项较复杂而又非常重要的内容,字体是我们一进入X window就必须整天面对的,清晰、美观的字体会使我们工作起来赏心悦目,轻松愉快。XFree86是X系统在X86架构中的免费实现(现在好象不是GPL的了),也是现在Linux系统默认的X系统。为了设置好字体,我们需了解XFree86系统中的字体系统的原理和实现技术。只是照抄网上的设置可能也可配置出一套效果不错的字体,但这样我们只会知其然而不其所以然,不能融会贯通,灵活应用。请随我慢慢进入XFree86中的字体系统,一窥其中的奥秘。
![]() | |
| 有关X系统和XFree86的资料可参考我整理的X window学习笔记,里面对这两个系统的历史渊源有详细介绍。 | |
XFree86系统有两套的字体系统,这也是为什么X window中字体设置较复杂的原因之一。这两套的字体系统分别是:核心X11字体系统和Xft字体系统。核心X11字体系统是应用最广泛的一套字体系统,所有的X系统都支持。Xft字体系统是一个新的字体技术,只能用在基于XFree86系统的X系统上,但该套字体系统配置简单,容易使用,将是未来发展的方向。
Xft是一个library,它没有自已的配置机制,它依靠fontconfig库来配置和定制字体,Xft负责字体的显示。也就是说,fontconfig是一种让X系统可以找到某种字体的库,而Xft是负责在X系统中把fontconfig库找到的字体如何显示出来的库。所以讨论Xft字体配置其实就是讨论fontconfig。fontconfig包含在XFree86发布版中。
fontconfig的作用:
自动搜索字体路径,发现新拷贝的字体。
当需显示的字体不存在时,会自动选择其它字体代替显示。这也就是我们在美化字体时为什么要调整字体的排列顺序的原因。
配合Xft等X系统的渲染引擎,实现质量的字体输出。
fontconfig的配置文件有三个,一个是系统级的配置文件,位于/etc/fonts/fonts.conf,该目录下还有一个local.conf,一般我们只修改local.conf文件,fonts.conf一般不建议去修改。第三个配置文件是用户主目录下的~/.fonts.conf,它是用户级的字体配置文件,只对当前用户有效。这三个文件的格式是一样的,都是一个XML格式的文件。该XML文件的语法规则在fonts.dtd里定义。详细的配置介绍请参考中国Linux公社中的“Linux高质量字体研究”论坛。
在Xft字体系统中安装新的字体是很简单的,只需把字体文件拷贝到fonts.conf中指定的字体文件目录即可,fontconfig会自动感知新字体。默认的字体目录有四个,分别是:
/usr/share/fonts
/usr/X11R6/lib/X11/fonts/Type1
/usr/local/share/fonts
~/.fonts
把新字体文件拷贝到字体目录后,我们就可用fc-list命令列出新安装的字体,如果没有,可用fc-cache命令手动更新系统字体配置。这样,再运行fc-list就应该可以看到新安装的字体了。使用Xft字体系统是不用配置/etc/X11/XF86config-4的,也不用重启X服务器使配置生效。Xft字体系统比起传统的X11核心字体系统来说真的是方便很多。所以它是未来的发展方向。目前,并不是所有的应用程序都支持Xft字体系统。下面是各类程序对Xft字体系统的支持情况介绍:
GTK+2.x和QT程序都可以使用Xft字体系统,但GTK+1.x程序是不支持Xft字体系统的,它只能使用X11核心字体系统。
GTK+2.2版本及以上的程序默认使用Xft字体系统,不用进行配置。GTK+2.0程序如果要使用Xft,则需设置环境变量GDK_USE_XFT=1。
GTK+2.x程序字体配置可通过gnome桌面系统提供的gnome-font-properties工具来配置,该工具可在GNOME桌面环境中的"应用程序"--"桌面首选项"--"字体"中找到。GTK+2.x程序还有一个全局配置文件/etc/gtk-2.0/gtkrc,里面可设置GTK+2.x程序所用字体,该文件的内容如下:
style "gtk-default-zh-cn" {
font_name = "Bitstream Vera Sans 10,SimSun 10"
}
class "GtkWidget" style "gtk-default-zh-cn"
这样GTK+2.x程序的英文会用10号的Bitstream Vera Sans字体显示,中文会用10号的SimSun字体显示。
QT程序的默认字体可在KDE的“控制中心”--“外观和主题”--“字体”中设置,也可运行qtconfig图形化配置工具设置。但好象控制中心的设置优先级高于qtconfig工具。
配置X11核心字体有两步,第一步是建立字体目录,在该目录中包含字体文件。第二步是配置X服务器,使它能使用这些字体。下面我以配置simsun.ttc字体为例说明:
X服务器的字体目录一般默认已建好,如/usr/X11R6/lib/X11/fonts/truetype。我们把simsun.ttc拷贝到该目录。
生成字体索引文件,如果是位图字体则只有一个fonts.dir索引文件,如果是像simsun.ttc这样的可缩放字体则还需要一个fonts.scale索引文件。索引文件可通过工具自动生成,如果是TrueType字体,可使用ttmkfdir工具。其它的字体可用mkfontdir和mkfontscale这两个工具来生成。simsun.ttc是TrueType字体,所以我用ttmkfdir工具生成fonts.scale:
debian:/usr/X11R6/lib/X11/fonts/truetype# ttmkfdir
fonts.dir文件和fonts.scale内容是一样的,所以可直接拷贝。如果不用拷贝的方式,用mkfontdir命令也可以,结果是一样的。
设置XF86config-4配置文件,确定包含上述字体路径和正确加载X字体模块。
Section "Files"
# FontPath "unix/:7110" # local font server
# if the local font server has problems, we can fall back on these
FontPath "/usr/X11R6/lib/X11/fonts/truetype"
FontPath "/usr/lib/X11/fonts/misc"
FontPath "/usr/lib/X11/fonts/cyrillic"
FontPath "/usr/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/lib/X11/fonts/Type1"
FontPath "/usr/lib/X11/fonts/CID"
FontPath "/usr/lib/X11/fonts/Speedo"
FontPath "/usr/lib/X11/fonts/100dpi"
FontPath "/usr/lib/X11/fonts/75dpi"
EndSection
Section "Module"
# Load "GLcore"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
# Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "speedo"
Load "type1"
Load "vbe"
Load "xtt"
EndSection
从XFree86转到X.org后,配置文件使用/etc/X11/xorg.conf代替原来的XF86Config-4。在X.org中,使用开源的freetype模块,所以要注释掉xtt模块,重新启用freetype。
Section "Module"
# Load "xtt"
Load "GLcore"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "speedo"
Load "type1"
Load "vbe"
EndSection
如果没启用freetype模块,则系统会找不到GB2312和GB18030编码的X11核心中文字体,影响freemind、xmms等要使用X11核心字体程序的中文显示。
字体模块列表:
bitmap:位图字体,支持的字体文件有*.bdf,*.pcf和*.snf。
type1:Type1字体,支持的字体文件有*.pfa和*.pfb,还有CIDFonts。
speedo:Bitstream Speedo字体,支持的字体文件有*.spd。
freetype:TrueType字体,支持的字体文件有*.ttf和*.ttc。,在X.org系统中,xtt模块功能合并到该模块中。
xtt:另一个的TrueType字体模块,支持的字体文件有*.ttf和*.ttc。在X.org系统中,不使该模块,该模块的功能合并到freetype模块中。
重启X服务器后就可使用simsun中文字体了,或者使用xset fp rehash命令重新刷新字体。xlsfonts命令可列出系统中已安装的X11核心字体。
![]() | |
| 如果你是使用Debian系统,则可使用defoma(Debian Font Manager)工具来帮你完成以上设置。该工具的使用请参考本文“Debian的安装和配置”一章的内容。 | |
GTK+1.x程序使用X11核心字体系统。要在GTK+1.x程序中使用simsun字体,需配置/etc/gtk/gtkrc.zh_CN文件,内容如下:
# This file defines the fontsets for Chinese language (zh) using
# the simplified chinese standard GuoBiao as in mainland China (CN)
#
# 1999, Pablo Saratxaga <pablo@mandrakesoft.com>
#
style "gtk-default-zh-cn" {
fontset = "-*-bitstream vera Serif-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252,\
-*-simsun-medium-r-normal-*-12-*-*-*-*-*-gbk-0"
}
class "GtkWidget" style "gtk-default-zh-cn"
这样GTK+1.x程序可显示中文了,中文使用simsun字体,英文使用bitstream vera sans字体。
Table of Contents
Linux的网络功能是非常强大和先进的,这也是Linux成为很多公司服务器的首选软件的原因之一。本章记录Debian系统下的网络配置。
电脑通过网卡连接网络,每块网卡都有一个独一无二的48位地址,为便以记忆,我们把这些地址写成6组以冒号分隔的的十六进制数字,如:00:20:E0:C1:0F:F6。前3组是网卡制造商的标识码,由IANA分配。这种地址我们称它为介质访问控制器地址(MAC地址,Media Access Controller Address)。在网络通信中,最终是使用该地址来标识每台电脑的。
每台联网的电脑都需要有一个唯一的IP地址标识,就好象我们家的门牌号码一下。IP地址可以手工分配,也可以由电脑自动分配。手工分配是IP地址是固定不变的,叫静态IP地址分配模式。由电脑通过DHCP服务器自动分配的IP地址是不固定的,叫动态IP分配模式。动态IP分配模式一般在网络较大的环境下使用。电脑自动维护一个IP地址池,当客户有需要时从这个IP地址池中临时租用一个IP地址来使用。使用动态IP能有效减少网管员的维护工作量。
特殊的IP地址
0.0.0.0
表示默认的网络和主机的集合。
255.255.255.255
广播地址,代表本网段的所有主机。
127.0.0.1
本机回环地址,主要用于测试本机网络功能。
224.0.0.1
组播地址。224.0.0.1特指所有主机,224.0.0.2特指所有路由器。
169.254.x.x
当动态获取IP地址的主机不能从DHCP服务器正常取IP时,电脑就会自动指定一个169.254.x.x地址。
10.x.x.x、172.16.x.x~172.31.x.x、192.168.x.x
私有地址,只能用于企业内部。保留这此地址是为了区分Internet地址和企业内部网地址,避免内部网连接Internet时造成IP地址冲突和混乱。私有地址是不能和Internet连接的,如果内部网要连接Internet,需进行私有地址到公共地址的转换(NAT)。
![]() | |
| 对于一台网络主机,它只能接收要本机IP地址广播地址和组播地址。 | |
IP地址伪装(IP masquerading,也称为IPMASQ)技术允许私有网络中的一台或多台没有公共IP地址的计算机与Internet通信。充当IPMASQ服务器的电脑相当于一个网关,私有网络中的电脑对外网来说是完全不可见的。外网看到的只是作为IPMASQ服务器的IP地址。因为当私有网络需与Internet通信时,数据包会被发送到IPMASQ服务器,IPMASQ服务器会改写数据包的IP报头使它们看上去就好象全部出自IPMASQ服务器。当外部的应答数据包到达时,IPMASQ服务器持先反转对刚才外出数据包的IP报头所做的改写,再把它们转发给相应的内部电脑。从而实现内部私有网络对Internet的访问。
网络地址转换(NAT,Network Address Translation)是另一种应用范围更广的技术,具有NAT功能的网络设备能把某个IP空间里IP地址转换为另一个IP地址空间里的IP地址。它与IP伪装技术的主要区别是:NAT技术可以把某个内部网络里的每一个IP地址分别转换成独立的外部IP地址。另外,当转换后,外部地址也可以访问内部地址。
Table of Contents
Linux等开源软件的优点是可配置性强,同一种功能可通过不同的方法来实现,所以我们使用的系统都会有差别,配置方式也不尽相同。为了积累知识和备忘,我把我在安装和配置Debian桌面系统的所有操作都记录在该章节中。
Debian发行版为我们提供了灵活的安装方式,可以先安装一个很小的(几十兆)base系统,再通过网络更新系统和安装其它应用软件。这种方式要求有较好的网络环境,比如ADSL。我就是采用这种方式安装的,下面是我的具体操作步骤:
到http://people.debian.org/~blade/boot-floppies/netinst-full-pre/下载bootbf2_4_iso.zip安装镜像。解压密码是:“Yes, I know that this data may be harmful!”。注意密码串中的标点符号和空格都要正确输入。解压后,刻录成启动光盘。
用启动光盘启动电脑,在出现boot:提示符状态后直接按回车载入内核。
对硬盘分区,我的分区在安装之前已用分区工具分好,所以可直接挂接。我设置了一个交换分区(swap)和一个linux分区(ext2)。完成格式化后把分区挂接为根分区。接着就可配置主机名和网络了,我的网卡需加载设备驱动模组才能识别,我的网卡是最常见的RTL-8139,选择“ne”模组支持即可。最后选安装基本系统开始安装。
![]() | |
| 如果启动盘找不到硬盘,可用我的方法,先用一些分区工具分好区再装,或下载500多兆那个启动盘,在出现boot:提示符时打bf24启动应该就可以找到硬盘了。 | |
安装完基本系统后,需配置系统的启动信息。Debian默认使用lilo做为启动管理器,我的系统中本来已有windows XP系统,我用lilo来统一管理双系统的启动,所以我把lilo安装到MBR中。
取出光盘重启电脑,成功启动Linux后,系统会自动运行base-config程序进行系统的初始配置,配置的内容有:
时区设置:亚洲/上海
设置root用户密码和启动shadow
设置sorucelist为http方式
我不想用exim作为我的邮件客户端,所以不配置exim程序。
进入Debian系统后,首先配置ADSL拔号程序,运行pppoeconfig进行配置。按提示填上ADSL帐号和密码即可。注意,eth0的网关不要设,否则会连接不上外网。
成功连接Internet后就可进行下一步安装了,首先把系统升级到testing。把/etc/apt/sources.list里所有的stable改成testing。再运行apt-get update获取最新的软件包信息,最后运行apt-get dist-upgrade更新整个系统。以后升级系统中的软件只需运行apt-get update和apt-get upgrade两步即可。apt-get dist-upgrade只用于debian系统版本的升级,如stable升级到testing。
更新完系统后,需运行lilo -v -v -v更新启动信息,否则在系统重启时会出现LI两个字符后停住,不能正常启动系统。
debootstrap可以在一个运行中的Debian系统中安装一套全新的Deiban base系统,我们可以把新系统安装在一个目录中或一个分区中。安装完成后用chroot命令就可进入新安装的系统中,就好象在我们的系统中多了一套全新的操作系统一样,这对我们进行系统和服务的测试是很有用的。
安装方法很简单,先下载debootstrap软件包。
debian:~# apt-get install debootstrap
安装完debootstrap后,我们就可用它来安装Debian base系统啦,debootstrap的命令格式如下:
debootstrap --arch <架构> <版本> <debian的安装挂载点> <镜像站点的URL>
我在i386机器的电脑上安装sid版的debian系统,安装在/root/base目录下,选用的镜像站点为http://debian.cn99.com/debian。
debian:~# debootstrap --arch i386 sid base http://debian.cn99.com/debian I: Retrieving Release I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... I: Found additional base dependencies: update-inetd I: Checking component main on http://debian.cn99.com/debian... I: Retrieving adduser I: Validating adduser I: Retrieving apt I: Validating apt I: Retrieving apt-utils I: Validating apt-utils I: Retrieving aptitude ...
安装完成后,我们就可以用chroot命令进入新的系统。为了使一些程序正常运行,我们还要挂装proc文件系统。
debian:~# chroot base debian:/# mount proc
光盘上的内核较旧,所以成功安装完成系统后,一般都要更新内核,以支持更多的硬件和提高系统性能。在Debian发行版中,更新内核也可使用apt-get install kernel-image-2.x.x方式来直接更新。但这样更新有两个问题,一是内核包的更新要滞后于Linux内核的更新速度,也就是说采用该方式你用不到最新的内核;二是内核包不是针对你的计算机编译的,所以性能和配置可能会不符合你的要求。我一般不用这种方式更新我的内核,而是采用直接编译内核源码,再用make-kpkg命令打包的方式来安装。make-kpkg是Debian的内核打包工具,它可编译Linux源码,并打包成Debian格式的内核安装包。这样我们即可使用最新的Linux内核,又可用Debian的方式安装和管理内核包,一举两得。现在来看看具体的安装过程,我把2.4.20内核更新到最新的2.6.10。
到http://www.kernel.org下载最新的2.6.10内核,解压到/usr/src目录下。
安装编译2.6内核所需的软件
# apt-get install kernel-package ncurses-dev fakeroot module-init-tools
在/usr/src/linux-2.6.10目录下运行以下命令配置和编译新内核:
# make menuconfig # make-kpkg clean # fakeroot make-kpkg --revision=mykernel.1.0 kernel_image
![]() | |
| 如果编译失败,可用make clean和make menuconfig重新配置和编译。配置信息默认会保存在/usr/src/linux-2.6.10/.config文件中。 | |
内核编译完成后在/usr/src目录下就会生成一个kernel-image-2.6.10_mykernel.1.0_i386.deb软件包,用以下命令安装:
# dpkg -i kernel-image-2.6.10_mykernel.1.0_i386.deb
这样,在/boot目录下会生成System.map-2.6.10,vmlinuz-2.6.10文件。在安装内核时会提示是否制作启动盘和是否自动配置LILO,我都选择NO。用手动方式设置LILO。打开/etc/lilo.conf文件,修改相关部份的内容,修改的内容如下:
...
#使用图形菜单
bitmap=/boot/coffee.bmp
bmp-colors=14,11,,15,9,0
#bmp-table=120p,173p,1,15,17
bmp-timer=254p,432p,1,0,0
# Installs the specified file as the new boot sector
# You have the choice between: bmp, compat, menu and text
# Look in /boot/ and in lilo.conf(5) manpage for details
#
install=bmp
...
#内核配置
default=Linux2.6.10
image=/boot/vmlinuz-2.6.10
label=Linux2.6.10
read-only
# restricted
# alias=1
image=/boot/vmlinuz-2.4.20-bf2.4
label=Linuxold
read-only
optional
# restricted
# alias=2
...
用lilo -v -v -v更新启动信息。如果没有出错信息则可重启电脑,默认是以新内核来启动的。用上下光标可选择不同的启动内核。
![]() | |
| 如想用dpkg -i 重新安装相同内核,要做一些清理工作。需把/boot/System.map-2.6.10、/boot/vmlinuz-2.6.10和/lib/modules/2.6.10改名备份起来或删除掉,但为了安全,建议采用改名备份方式。安装时会提示需重启来重建/lib/modules/2.6.10目录,按继续即可。 | |
2.6.10内核配置备忘录
内核配置完成后,在退出配置菜单时如果选择保存配置,则会在当前目录中生成一个.config文件,以文本的形式记录内核的所有配置参数。该配置文件会在下次用make menuconfig命令配置内核时自动导入。我们也可以通过内核配置菜单最下面的导入和存盘功能导入其它内核配置文件和把当前配置以任意的名字保存在其它地方。
Loadable module support-->Module unloading选项可允许卸载已加载的内核模块。通过该功能,我们可以通过rmmod module_name和modprobe module_name命令改变内核模块的加载参数。
如需支持富士FinePix 2800 Zoom数码相机,需选中Device Drivers-->USB support-->UHCI HCD(most Intel and VIA) support支持。如果成功配置,在启动时会自动检测到数码相机,并自动把相机的存储卡挂接在/media/usbdisk目录下。如果对自已机器上的USB设备接口不清楚,可用# lspci -v命令来列出本机的设备信息。
在我的Fosa手提电脑上编译内核2.6.10以支持USB鼠标和触摸板。用lspci -v命令列出本机USB设备的硬件信息如下:
0000:00:01.2 USB Controller: Silicon Integrated Systems [SiS] USB 1.0 Controller (rev 07) (prog-if 10 [OHCI])
Subsystem: Silicon Integrated Systems [SiS] USB 1.0 Controller
Flags: bus master, medium devsel, latency 64, IRQ 11
Memory at 000d0000 (32-bit, non-prefetchable) [size=4K]
USB设备接口类型是OHCI的,所以配置内核时选中Device Drivers--->Usb Support--->OHCI HCD support,并把它编译进内核。重启手提电脑,自检时出现如下信息,驱动成功。
ohci_hcd 0000:00:01.2: Silicon Integrated Systems [SiS] USB 1.0 Controller ohci_hcd 0000:00:01.2: USB HC TakeOver from BIOS/SMM ohci_hcd 0000:00:01.2: irq 11, pci mem 0xd0000 ohci_hcd 0000:00:01.2: new USB bus registered, assigned bus number 1 ohci_hcd 0000:00:01.2: resetting from state 'reset', control = 0x0 ohci_hcd 0000:00:01.2: enabling initreset quirk ohci_hcd 0000:00:01.2: OHCI controller state ohci_hcd 0000:00:01.2: OHCI 1.0, with legacy support registers ohci_hcd 0000:00:01.2: control 0x083 HCFS=operational CBSR=3 ohci_hcd 0000:00:01.2: cmdstatus 0x00000 SOC=0 ohci_hcd 0000:00:01.2: intrstatus 0x00000044 RHSC SF ohci_hcd 0000:00:01.2: intrenable 0x8000000a MIE RD WDH ohci_hcd 0000:00:01.2: hcca frame #0003 ohci_hcd 0000:00:01.2: roothub.a 01000203 POTPGT=1 NPS NDP=3 ohci_hcd 0000:00:01.2: roothub.b 00000000 PPCM=0000 DR=0000 ohci_hcd 0000:00:01.2: roothub.status 00008000 DRWE ohci_hcd 0000:00:01.2: roothub.portstatus [0] 0x00010301 CSC LSDA PPS CCS ohci_hcd 0000:00:01.2: roothub.portstatus [1] 0x00000100 PPS ohci_hcd 0000:00:01.2: roothub.portstatus [2] 0x00000100 PPS usb usb1: new device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: default language 0x0409 usb usb1: Product: Silicon Integrated Systems [SiS] USB 1.0 Controller usb usb1: Manufacturer: Linux 2.6.10 ohci_hcd usb usb1: SerialNumber: 0000:00:01.2 usb usb1: hotplug usb usb1: adding 1-0:1.0 (config #1, interface 0) usb 1-0:1.0: hotplug hub 1-0:1.0: usb_probe_interface hub 1-0:1.0: usb_probe_interface - got id hub 1-0:1.0: USB hub found hub 1-0:1.0: 3 ports detected hub 1-0:1.0: standalone hub hub 1-0:1.0: no power switching (usb 1.0) hub 1-0:1.0: global over-current protection hub 1-0:1.0: power on to power good time: 2ms hub 1-0:1.0: local power source is good hub 1-0:1.0: no over-current condition exists ohci_hcd 0000:00:01.2: created debug files hub 1-0:1.0: state 5 ports 3 chg ffff evt ffff usbcore: registered new driver hiddev ohci_hcd 0000:00:01.2: GetStatus roothub.portstatus [0] = 0x00010301 CSC LSDA PPS CCS hub 1-0:1.0: port 1, status 0301, change 0001, 1.5 Mb/s hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x301 ohci_hcd 0000:00:01.2: GetStatus roothub.portstatus [0] = 0x00100303 PRSC LSDA PPS PES CCS usb 1-1: new low speed USB device using ohci_hcd and address 2 ohci_hcd 0000:00:01.2: GetStatus roothub.portstatus [0] = 0x00100303 PRSC LSDA PPS PES CCS usb 1-1: skipped 1 descriptor after interface usb 1-1: new device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1: default language 0x0409 usb 1-1: Product: USB OpticalWheel Mouse usb 1-1: hotplug usb 1-1: adding 1-1:1.0 (config #1, interface 0) usb 1-1:1.0: hotplug hub 1-0:1.0: port 2, status 0100, change 0000, 12 Mb/s hub 1-0:1.0: port 3, status 0100, change 0000, 12 Mb/s usbhid 1-1:1.0: usb_probe_interface usbhid 1-1:1.0: usb_probe_interface - got id input: USB HID v1.10 Mouse [USB OpticalWheel Mouse] on usb-0000:00:01.2-1 usbcore: registered new driver usbhid drivers/usb/input/hid-core.c: v2.0:USB HID core driver mice: PS/2 mouse device common for all mice input: AT Translated Set 2 keyboard on isa0060/serio0 Synaptics Touchpad, model: 1 Firmware: 4.6 180 degree mounted touchpad Sensor: 18 new absolute packet format Touchpad has extended capability bits -> four buttons -> multifinger detection -> palm detection input: SynPS/2 Synaptics TouchPad on isa0060/serio4
/etc/X11/XF86config-4配置文件中与鼠标配置相关的内容如下:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/psaux"
Option "Protocol" "Auto"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Generic Mouse"
Driver "mouse"
Option "SendCoreEvents" "true"
Option "Device" "/dev/input/mice"
Option "Protocol" "Auto"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
...
Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse" #这里的两个Mouse设备标识名要对应上面
InputDevice "Generic Mouse"
EndSection
配置内核支持图形化启动界面。以下网站http://www.bootsplash.org/有详细介绍。为了支持图形化启动界面,我们需为内核打补丁。我的内核版本是2.6.10。到http://www.bootsplash.de/files/下载与内核对应的补丁文件bootsplash-3.1.4-2.6.10.diff。用以下命令为内核源码打上该补丁:
# cd /usr/src/linux-2.6.10 # patch -p1 < bootsplash-3.1.4-2.6.10.diff
接着配置内核,选中以下选项,以下所有选项不能以内核模块形式编译,都要直接编译进内核:
Device Drivers --> Block Devices --> Initial RAM disk(initrd) support
Device Drivers --> Graphics Support --> VGA 16-color graphics support
Device Drivers --> Graphics Support --> VESA VGA graphics support
Device Drivers --> Graphics Support --> Console display driver support --> Framebuffer Console support
Device Drivers --> Graphics Support --> Bootsplash configuration --> Bootup splash Screen
![]() | |
| 该选项在打了内核补丁后才会出现。 | |
File systems --> Miscellaneous filesystems --> Compressed ROM file system support (cramfs)
配置内核后就可以用上面介绍的方法重新编译内核了。下一步是安装bootsplash工具。把下面这句加到/etc/apt/source.list里。
deb http://www.bootsplash.de/files/debian/ unstable main
用以下方法安装:
# apt-get update # apt-get install bootsplash # apt-get install sysv-rc-bootsplash 该软件包启用进度条和动画
在配置bootsplash时会问你是否安装一个新的bootsplash主题替换已存在的主题。如果你是第一次安装,请选择none,这样将会自动生成一个/boot/initrd.splash映像,并设置一个默认的newlinux主题。
接下来要更新启动器了,我是用lilo的,配置内容如下:
default=Linux2.6.10
image=/boot/vmlinuz-2.6.10
label=Linux2.6.10
read-only
initrd=/boot/initrd.splash #新增选项,指出映像文件
vga=791 #新增选项,设置显示像素1024X768
append="splash=verbose" #新增选项,设置显示模式为详细
# restricted
# alias=1
vga的取值见下表: