网络操作系统-Linux基础
主讲人:王柯wangk@swnu.edu.cn
西南师范大学计算机科学系2005年春
Red Hat Linux 系统管理
第13章-第18章
第13章用户管理
? 13.1 什么是用户帐户account?
? 13.2 root帐户
#reboot重启系统
reboot
#halt停机
halt
显示和设置系统的日
期与时间
关闭系统
改变系统的运行状态
设置用户密码
使用户成为超级用户
或另一个用户
#shutdown –r 23:30 ‘Warning: This system will shutdown at 23:30’
#shutdown –h now
#shutdown –r +5
shutdown
#su
#su wangke
su
#passwd wangke
passwd
#init 0 [123456Ss]
init
#date ‘+Date: %m/%d/%Y%nTime: %H:%M%S’
#date –s ’03/22/2005 10:10:00’
date
? init进程是系统所有进程的起点,Linux在完成核内引导以后,就
开始运行init程序。init程序需要读取配置文件/etc/inittab。
?initab是一个不可执行的文本文件,由若干行指令所组成。Inittab
中以#开始的行是注释行,除了注释行之外,每一行都有以下格
式:
id:runlevel:action:process
process为具体的执行程序。程序后面可以带参数。
action是描述其后的process的运行方式的。action可取的值包括:
initdefault、sysinit、boot、bootwait等:initdefault是一个特殊的action值,
用于标识缺省的启动级别;当init由核心激活以后,它将读取inittab中
的initdefault项,取得其中的runlevel,并作为当前的运行级别。如果没
有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入
runlevel。sysinit、boot、bootwait等action将在系统启动时无条件运行,
而忽略其中的runlevel。其余的action(不含initdefault)都与某个
runlevel相关。各个action的定义在inittab的man手册中有详细的描述。
runlevel是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、
6运行级别被系统保留:其中0作为shutdown 动作,1作为重启至单用户
模式,6为重启;S和s意义相同,表示单用户模式,且无需inittab文件,
因此也不在inittab中出现。实际上,进入单用户模式时,init直接在控
制台(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,都使
用了2、3、4、5几个级别,在Redhat系统中,2表示无NFS支持的多用
户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户
自定义,5表示XDM图形登录方式。7 -9级别也是可以使用的,传统
的Unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹
配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹
配成功才会执行。
id是入口标识符,它是一个字符串,对于getty或mingetty等其他login程
序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
process
id
runlevel
action
? 13.3 管理用户和组
包含加密后的组帐号密码信息/etc/gshadow
包含加密后的用户帐号密码信息,还可以包括密码时效信息。Shadow
只对超级用户可读,一般用户无法读取。字段包括——登录名:加密后
的密码:从1970 年1 月1 日到密码最后一次被更改的天数:距密码可以
更改之前的天数:距密码必须更改之前的天数:密码到期前用户被警告
的天数:密码到期后帐户被禁用的天数:从1970 年1 月1 日到帐号被禁
用的天数
/etc/shadow
格式是——登录帐号:密码(如果未被shadow 程序加密):用户标识符
UID:组标识符GID:用户信息主目录用户shell(若为空格则默认为
/bin/sh)。
/etc/passwd
如果有/etc/nologin 文件存在,login将只允许root 用户进行访问。它将
对其它用户显示此文件的内容并拒绝其登录。
/etc/nologin
本目录中存放着文件框架skeleton。比如/etc/skel/.bash_profile将作为框
架,在添加用户user时生成该用户/home/user/.bash_profile文件。
/etc/skel目录
包含系统可用的可能的“shell”的列表。
/etc/shells
包含有效的组名称和指定组中包括的用户。单一用户如果执行多个任
务,可以存在于多个组中。格式是——组名:组访问密码:组标识符GID:
用户名列表(用户名间以“,”分隔)
/etc/group
? 13.3 管理用户和组
本文件用于对用户作出附加访问限制,如果不存在这个文件,则没
有其他限制。
/etc/usertty
rpm 命令配置。所有的rpm 命令行选项都可以在这个文件中一起设
置,这样当任何rpm 命令在该系统中运行时,所有的选项都会全局
适用。
/etc/rpmrc
包含终端设备名称(每行一个名称,不包括前面的/dev/),登记了
的才允许root用户登录,如果不存在这个文件,则root可以在任何终
端上登录。
/etc/securetty
包含每日消息;在管理员希望向Linux 服务器的所有用户传达某个
消息时使用
/etc/motd
? 13.4 管理用户和组的命令
#passwd goodboy
设置用户密码
passwd
#usermod –s /bin/ash goodboy
#usermod –L goodboy
#usermod –U goodboy
#usermod –p “” goodboy
修改用户帐号属性
usermod
删除用户组
添加新用户组
删除用户帐号
添加新用户帐号
#groupdel oldgroupname
groupdel
#useradd -m -g users -s /bin/bash -c “dingding" goodboy
-c comment 描述新用户帐号,通常为用户全名。
-d home_dir 设置用户主目录,默认值为用户的登录名,并放在/home目录下。
-D 创建新帐号后保存为新帐号设置的默认信息。
-e expire_date 用MM/DD/YYYY格式设置帐号过期日期。
-f inactivity 设置口令失效时间,该值为0使口令失效后帐号立即失效,为-1
使该选项失效。
-g 设置基本组。
-k skel_dir 设置框架目录,该目录包含用户的初始配置文件,创建用户时该
目录下的文件都被复制到用户主目录下。
-m 自动创建用户主目录,并把框架目录(默认为/etc/skel)下的文件复制到用
户主目录下。
-M 不创建用户主目录。
-r 允许保留的系统帐号使用用户ID创建一个新帐号。
-s shell 指定用户的登录shell。
-u user_id 设置用户ID。
useradd
#userdel oldusername
#userdel –r oldusername
userdel
#groupadd newgroupname
groupadd
?引导和登录/注销类配置文件
非正式的。可以从rc、rc.sysinit 或/etc/inittab 调用。/etc/rc.d/rc.local
从rc 运行的脚本(X 表示1 到5 之间的任意数字)。这些目录
是特定“运行级别”的目录。当系统启动时,它会识别要启动的
运行级别,然后调用该运行级别的特定目录中存在的所有启动
脚本。例如,系统启动时通常会在引导消息之后显示“entering
run-level 3”的消息;这意味着/etc/rc.d/rc3.d/ 目录中的所有初始
化脚本都将被调用。
/etc/rc.d/rc/rcX.d
通常是所有运行级别的第一个脚本。/etc/rc.d/rc.sysinit
通常在所有运行级别运行,级别作为参数传送。例如,要以图
形(Graphics)模式(X-Server)引导机器,请在命令行运行下
面的命令:init 5。运行级别5 表示以图形模式引导系统。
/etc/rc.d/rc
按年代来讲,这是UNIX 中第一个配置文件。在一台UNIX 机
器打开之后启动的第一个程序是init,它知道该启动什么,这是
由于inittab 的存在。在运行级别改变时,init 读取inittab,然后
控制主进程的启动。
etc/inittab
这些文件由mingetty(和类似的程序)读取,用来向从终端
(issue)或通过telnet 会话(issue.net)连接的用户显示一个
“welcome”字符串。它们包括几行声明Red Hat 版本号、名称和
内核ID 的信息。它们由rc.local 使用。
/etc/issue &
/etc/issue.net
包括一行声明Red Hat 版本号和名称的信息。由rc.local 使用。/etc/redhat-release
?文件系统类配置文件
列举计算机当前“可以安装”的文件系统。这非常重要,因为计
算机引导时将运行mount -a 命令,该命令负责安装fstab 的倒数
第二列中带有“1”标记的每一个文件系统。
/etc/fstab
DOS 类型的文件系统上所有操作(创建目录、复制、格式化等
等)的配置。
/etc/mtools.conf
这将随着/proc/mount 文件的改变而不断改变。换句话说,文件
系统被安装和卸载时,改变会立即反映到此文件中。
/etc/mtab
?守护进程类配置文件
syslogd 守护进程的配置文件。syslogd 是一种守护进程,它
负责记录(写到磁盘)从其它程序发送到系统的消息。这
个服务尤其常被某些守护进程所使用,这些守护进程不会
有另外的方法来发出可能有问题存在的信号或向用户发送
消息。
/etc/log.d/conf/services/sys
logd.conf
kerneld的配置文件。kerneld并不是“作为守护进程的”内核。
它其实是一种在需要时负责“快速”加载附加内核模块的守
护进程。
/etc/modules.conf
Web 服务器Apache 的配置文件。/etc/httpd/conf/ httpd.conf
?/proc/sys/kernel/ 目录中的文件
指定modprobe 是否应该在启动时自动运行并加载必需的模块。modprobe
网络域,系统是该网络域的一部分。domainname
系统的主机名。hostname
显示操作系统的类型。ostype
显示操作系统的发行版版本号osrelease
如果值为1,Alt-SysRq 则为激活状态。sysrq
如果值为1,那么顺序按下这几个键将“彻底地”重新引导系统。ctrl-alt-del
内核可运行的最大任务数。threads-max
描述
文件名
?#ls-l
以“d”开头的是一个目录,最后一个字符”t”指明了该目录被设
置了粘着位
drwxrwxrwt
以“l”开头的是符号链接文件lrwxrwxrwx
根据第四个和第七个字符中的”s”判断,这是一个setUid加setGid
的可执行文件
-rwsr-sr-x
根据第四个字符”s”判断,这是一个setUid的可执行文件-rwsr-xr-x
以“p”开头的是管道文件prwxr--r--
以“s”开头的是socket文件srwxrwxrwx
以”c”开头的是字符设备文件crw-rw----
以”b”开头的是块设备文件brw-rw----
以“-”开头的是普通文件
-rw-r--r
?#ls-l
rm编辑器,cp等以“-”开头的是普通文件-rw-r--r
用....删除用......创建
类型符号
-rwsr-sr-x
-rwsr-xr-x
lrwxrwxrwx
prwxr--r--
srwxrwxrwx
crw-rw----
brw-rw----
drwxrwxrwt
#ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Nov 8 2002 /bin/sh -> bash*
根据第四个和第七个字符中
的”s”,这是一个setUid加
setGid的可执行文件
根据第四个字符”s”,这是一
个setUid的可执行文件
以“l”开头的是符号链接文件
以“p”开头的是管道文件
以“s”开头的是socket文件
以”c”开头的是字符设备文件
以”b”开头的是块设备文件
以“d”开头的是一个目录文件,
最后一个字符”t”指明了该目
录被设置了粘着位
rmdir,rm -rmkdir
rmln -s
rmmknod
rmsocket(2)
rmmknod
rmmknod
第14章系统信息监控
? 14.1 显示系统进程——ps命令
名称:ps
使用权限:所有使用者
使用方式:ps [options] [--help]
说明:显示瞬间进程(process) 的动态
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
au(x) 输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 进程拥有者
PID: pid
%CPU: 占用的CPU 使用率
%MEM: 占用的内存使用率
VSZ: 占用的虚拟内存大小
RSS: 占用的内存大小
TTY: 终端的次要装置号码(minor device number of tty)
STAT: 该进程的状态:
D: 不可中断的静止(正在进行I/O 动作)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的内存分页可分配
<: 高优先序的进程
N: 低优先序的进程
L: 有内存分页分配并锁在内存内(即时系统正在I/O)
START: 进程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
范例:
#ps
PID TTY TIME CMD
2791 ttyp0 00:00:00 tcsh
3092 ttyp0 00:00:00 ps
#ps -A
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kflushd
3 ? 00:00:00 kpiod
4 ? 00:00:00 kswapd
5 ? 00:00:00 mdrecoveryd
.......
#ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod]
root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd]
.......
? 14.1 显示系统进程——top命令
名称:top
使用权限:所有使用者
使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
说明:实时显示process 的动态
参数:
d : 设置显示的更新速度,或是在交互式命令( interactive command)按s 设置
q : 没有任何延迟的显示速度,如果使用者是有superuser 的权限,则top 将会以最高的优
先序执行
c : 切换显示模式,共有两种模式,一是只显示执行文件的名称,另一种是显示完整的路
径与名称
S : 累积模式,会将己完成或消失的子进程( dead child process ) 的CPU time 累积起来
s : 安全模式,消除交互式命令的潜在危机
i : 不显示任何闲置(idle) 或僵死(zombie) 的进程
n : 更新的次数,完成后将会退出top
b : 批模式,搭配“n”参数一起使用,可以用来将top 的结果输出到文件内
Interactive commands are:
h or ? Help Space Update display
q Quit ^L Redraw the screen
oO Change order of displayed fields
fF Add and remove fields
W Write configuration file ~/.toprc
n or # Set the number of processes to show
u Show only a specific user
k Kill a task (with any signal)
r Renice a task
s Set the delay in seconds between updates
Toggle:
C:collapsed SMP CPU info H:threads l:load average
S:cumulative mode i:idle processes m:memory info
I:Irix/Solaris view (SMP) c:command line t:summary info
Sort by:
A:age M:resident memory usage
N:pid T:time (or cumulative time)
P:CPU usage
范例:
显示更新十次后退出;
#top -n 10
使用者将不能利用交互式命令来对进程下命令:
#top -s
将更新显示二次的结果输出到名称为top.log 的文件里:
#top -n 2 -b > top.log
? 14.2 显示内存用量
名称:free
使用权限:所有使用者
使用方式:free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c
count] [-V]
说明:即时显示系统已用内存和空闲内存的动态
参数
-b,-k,-m,-g show output in bytes, KB, MB, or GB
-h show detailed low and high memory statistics
-o use old format (no -/+buffers/cache line)
-t display total for RAM + swap
-s update every [delay] seconds
-c update [count] times
-V display version information and exit
范例:
[root@tanenbaum wangk]# free -lm
total used free shared buffers cached
Mem: 123 119 3 0 1 40
Low: 123 119 3 0 0 0
High: 0 0 0 0 0 0
-/+ buffers/cache: 76 46
Swap: 538 32 506
? 14.3 文件系统监控
名称:df
使用权限:所有使用者
使用方式:df [选项]... [文件]...
说明:每个<文件>所在的文件系统的信息,默认是显示所有文件系统。
参数:
长选项必须用的参数在使用短选项时也是必须的。
-a, --all 包括大小为0 个块的文件系统
-B, --block-size=大小块以指定<大小>的字节为单位
-h, --human-readable 以容易理解的格式印出文件系统大小(例如1K
234M 2G)
-H, --si 类似-h,但取1000 的次方而不是1024
-i, --inodes 显示inode 信息而非块使用量
-k 即--block-size=1K
-l, --local 只显示本机的文件系统
--no-sync 取得使用量数据前不进行sync 动作(默认)
-P, --portability 使用POSIX 输出格式
--sync 取得使用量数据前先进行sync 动作
-t, --type=类型只印出指定<类型>的文件系统信息
-T, --print-type 印出文件系统类型
-x, --exclude-type=类型只印出不是指定<类型>的文件系统信息
-v (此选项不作处理)
--help 显示此帮助信息并离开
--version 显示版本信息并离开
<大小>可以是以下的单位(单位前可加上整数):
kB=1000,K=1024,MB=1000000,M=1048576,还有G、T、P、E、Z、Y 如此
类推。
范例:
[root@tanenbaum wangk]# df -ah
文件系统容量已用可用已用% 挂载点
/dev/hda2 4.1G 2.4G 1.5G 62% /
none 0 0 0 - /proc
usbdevfs 0 0 0 - /proc/bus/usb
none 0 0 0 - /dev/pts
none 62M 0 62M 0% /dev/shm
? 14.3 文件系统监控
名称:du
使用权限:所有使用者
使用方式:du [选项]... [文件]...
说明:总结每个<文件>的磁盘用量,目录则取总用量。
参数:
长选项必须用的参数在使用短选项时也是必须的。
-a, --all write counts for all files, not just directories
-B, --block-size=SIZE use SIZE-byte blocks
-b, --bytes print size in bytes
-c, --total produce a grand total
-D, --dereference-args dereference FILEs that are symbolic links
-h, --human-readable 以容易理解的格式印出文件大小(例如1K 234M 2G)
-H, --si 类似-h,但取1000 的次方而不是1024
-k 即--block-size=1K
-l, --count-links 连硬链接的大小也计算在内
-L, --dereference 找出任何符号链接指示的真正目的地
-S, --separate-dirs 不包括子目录的占用量
-s, --summarize 只分别计算命令列中每个参数所占的总用量
-x, --one-file-system skip directories on different filesystems
-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.
--exclude=PATTERN Exclude files that match PATTERN.
--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--help 显示此帮助信息并离开
--version 显示版本信息并离开
<大小>可以是以下的单位(单位前可加上整数):
kB=1000,K=1024,MB=1000000,M=1048576,还有G、T、P、E、Z、Y 如此类推。
范例:
[root@tanenbaum sambafiles]# du /usr/wangk/sambafiles
36 /usr/wangk/sambafiles
[root@tanenbaum sambafiles]# du
/usr/wangk/sambafiles/* -h
4.0K /usr/wangk/sambafiles/df.txt
4.0K /usr/wangk/sambafiles/du.txt
4.0K /usr/wangk/sambafiles/lspci.txt
4.0K /usr/wangk/sambafiles/samba.txt
8.0K /usr/wangk/sambafiles/top.log
? 14.4 获取硬件信息
名称:free
使用权限:所有使用者
使用方式:lspci [<switches>]
说明:每个<文件>所在的文件系统的信息,默认是显示所有
文件系统。
参数:
-v Be verbose
-n Show numeric ID's
-b Bus-centric view (PCI addresses and
IRQ's instead of those seen by the CPU)
-x Show hex-dump of config space
-s [[<bus>]:][<slot>][.[<func>]] Show only
devices in selected slots
-d [<vendor>]:[<device>] Show only selected
devices
-t Show bus tree
-m Produce machine-readable output
-i <file> Use specified ID database instead of
/usr/share/hwdata/pci.ids
-M Enable `bus mapping' mode (dangerous;
root only)
-P <dir> Use specified directory instead of
/proc/bus/pci
-H <mode> Use direct hardware access (<mode> =
1 or 2)
-F <file> Read configuration data from given
file
-G Enable PCI access debugging
范例:
[root@tanenbaum wangk]# lspci
00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
00:02.0 CardBus bridge: Texas Instruments PCI1450 (rev 03)
00:02.1 CardBus bridge: Texas Instruments PCI1450 (rev 03)
00:03.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 0c)
00:03.1 Serial controller: Lucent Microelectronics LT WinModem (rev 01)
00:05.0 Multimedia audio controller: Cirrus Logic CS 4614/22/24 [CrystalClear
SoundFusion Audio Accelerator] (rev 01)
00:07.0 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 02)
00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 03)
01:00.0 VGA compatible controller: S3 Inc. 86C270-294 Savage/IX-MV (rev 13)
? 14.5 查看日志文件
?日志文件(Log Files)是包含系统消息的文件,包括内核、
服务、在系统上运行的应用程序等。
存放各个程序的日志循环处理脚本/etc/logrotate.d目录
存放为了循环使用日志文件而设置的策略。按照默认配
置,日志每周都被循环,并被保存4周时间。
/etc/logrotate.conf
syslogd 守护进程的配置文件。syslogd 是一种守护进程,
它负责记录(写到磁盘)从其它程序发送到系统的消息。
这个服务尤其常被某些守护进程所使用,这些守护进程
不会有另外的方法来发出可能有问题存在的信号或向用
户发送消息。
/etc/log.d/conf/services/s
yslogd.conf
大多数日志文件都存放在这里
?/var/log/boot.log 引导日志
?/var/log/cron Cron日志
?/var/log/dmesg 内核启动日志
?/var/log/maillog 邮件日志
?/var/log/spooler News日志
?/var/log/rpmpkgs RPM软件包
?/var/log/secure 安全日志
?/var/log/XFree86.0.log XFree86日志
/var/log目录
被syslod维护的日志消息列表/etc/syslog.conf
第15章备份与恢复
? 15.1 备份文件
?15.1.1 备份的重要性
?15.1.2 备份前需考虑的因素
?15.1.3 选择备份介质
?15.1.4 选择备份工具
? 15.2 恢复文件
?备份(backup):
?定期进行的操作,用来保存重要的文档、文件或者整
个系统。
?通过转储操作,形成文件或文件系统的多个副本。
?备份类型:
full backup
incremental backup
differential backup
copy backup
daily backup
?归档(archive): 为了长期保存重要文档、文件或者整个
系统而作的操作。
名称:tar (tape archiver)
使用权限:所有使用者
使用方式:tar [OPTION]... [FILE]...
参数:
Main operation mode:
-t, --list list the contents of an archive
-x, --extract, --get extract files from an archive
-c, --create create a new archive
-d, --diff, --compare find differences between archive and file system
-r, --append append files to the end of an archive
-u, --update only append files newer than copy in archive
-A, --catenate append tar files to an archive
--concatenate same as -A
--delete delete from the archive (not on mag tapes!)
Device selection and switching:
-f, --file=ARCHIVE use archive file or device ARCHIVE
--force-local archive file is local even if has a colon
--rsh-command=COMMAND use remote COMMAND instead of rsh
-[0-7][lmh] specify drive and density
-M, --multi-volume create/list/extract multi-volume archive
-L, --tape-length=NUM change tape after writing NUM x 1024 bytes
-F, --info-script=FILE run script at end of each tape (implies -M)
--new-volume-script=FILE same as -F FILE
--volno-file=FILE use/update the volume number in FILE
Archive format selection:
-V, --label=NAME create archive with volume name NAME
PATTERN at list/extract time, a globbing
PATTERN
-o, --old-archive, --portability write a V7 format archive
--posix write a POSIX format archive
-j, --bzip2 filter the archive through bzip2
-z, --gzip, --ungzip filter the archive through gzip
-Z, --compress, --uncompress filter the archive through compress
--use-compress-program=PROG filter through PROG (must accept -d)
Handling of file attributes:
--owner=NAME force NAME as owner for
added files
--group=NAME force NAME as group for
added files
--mode=CHANGES force (symbolic) mode
CHANGES for added files
--atime-preserve don't change access times
on dumped files
-m, --modification-time don't extract file modified
time
--same-owner try extracting files with
the same ownership
--no-same-owner extract files as yourself
--numeric-owner always use numbers for
user/group names
-p, --same-permissions extract permissions
information
--no-same-permissions do not extract permissions
information
--preserve-permissions same as -p
-s, --same-order sort names to extract to
match archive
--preserve-order same as -s
--preserve same as both -p and -s
范例:
# Create archive.tar from files foo and bar.
tar -cvf archive.tar foo bar
tar -czvf archive.tar foo bar
# Create mutiple volumes from a certain directory.
tar -czvMf /dev/fd0 /home
# List all files in archive.tar verbosely.
tar -tvf archive.tar
# Extract all files from archive.tar.
tar -xvf archive.tar
tar -xzvf archive.tar
# Extract some files from archive.tar.
tar -xvf archive.tar dir1/file*.txt dir2/doc*.exe
# Extract some files from archive.tar.
tar –xp /home/alana/bethany.txt
.zip
.bz2
.gz
文件扩展
名
zip
bzip2
gzip
压缩工具
使用zip 来压缩文件:
#zip -r filename.zip filesdir
扩展压缩的zip 文件:
#unzip filename.zip
使用zip 命令同时处理多个文件和目录,方法是将它
们逐一列出,并用空格间隔:
#zip -r filename.zip file1 file2 file3 /usr/work/school
unzip
使用bzip2 来压缩文件:bzip2 filename
扩展压缩的bz文件:bunzip2 filename.bz2
同时处理多个文件和目录,方法是将它们逐一列出,
并用空格间隔:bzip2 file1 file2 file3 /usr/work/school
bunzip2
使用gzip来压缩文件:gzip filename
扩展压缩的gz文件:gunzip filename.gz
同时处理多个文件和目录,方法是将它们逐一列出,
并用空格间隔:gzip –r file1 file2 file3 /usr/work/school
gunzip
解压工
具
名称:gzip
使用权限:所有使用者
使用方式:gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...]
说明:
由于gzip 可以产生更理想的压缩比例,一般人多已改用gzip 为文件压缩工具。
参数:
-c --stdout write on standard output, keep original files unchanged
-d --decompress decompress
-f --force force overwrite of output file and compress links
-h --help give this help
-l --list list compressed file contents
-L --license display software license
-n --no-name do not save or restore the original name and time stamp
-N --name save or restore the original name and time stamp
-q --quiet suppress all warnings
-r --recursive operate recursively on directories
-S .suf --suffix .suf use suffix .suf on compressed files
-t --test test compressed file integrity
-v --verbose verbose mode
-V --version display version number
-1 --fast compress faster
-9 --best compress better
--rsyncable Make rsync-friendly archive
file... files to (de)compress. If none given, use standard input.
范例:
#将source.dat 压缩成source.dat.gz,若source.dat.gz已
经存在,内容则会被压缩文件覆盖。
gzip -f source.dat
#显示压缩文件source.dat.gz中的内容
gzip -l source.dat.gz
#将source.dat.gz解压成source.dat
gzip -d source.dat.gz
名称:compress
使用权限:所有使用者
使用方式:compress [-dfvcV] [-b maxbits] [file ...]
说明:
compress 是一个相当古老的unix 文件压缩指令,压缩后的文件会
加上一个.Z 后缀名以区别未压缩的文件,压缩后的文件可以以
uncompress 解压。若要将数个文件压成一个压缩文件,必须先将文
件tar 起来再压缩。由于gzip 可以产生更理想的压缩比例,一般
人多已改用gzip 为文件压缩工具。
参数:
c 输出结果至标准输出设备(一般指荧幕)
f 强迫写入文件,若目的文件已经存在,则会被覆盖(force)
v 将程式执行的讯息印在荧幕上(verbose)
b 设定共同字串数的上限,以位元计算,可以设定的值为9 至16
bits 。由于值越大,能使用的共同字串就越多,压缩比例就越大,
所以一般使用预设值16 bits (bits)
d 将压缩文件解压缩
V 列出版本讯息
范例:
#将source.dat 压缩成source.dat.Z ,若source.dat.Z 已经存在,内容则会
被压缩文件覆盖。
compress -f source.dat
#将source.dat 压缩成source.dat.Z ,并列印出压缩比例。
-v 与-f 可以一起使用
compress -vf source.dat
#将压缩后的资料输出后再导入target.dat.Z 可以改变压缩文件名。
compress -c source.dat > target.dat.Z
#-b 的值越大,压缩比例就越大,范围是9-16 ,预设值是16 。
compress -b 12 source.dat
#将source.dat.Z 解压成source.dat,若文件已经存在,使用者按y 以确定覆
盖文件,若使用-df 程式则会自动覆盖文件。由于系统会自动加入.Z 为文件后缀
名,所以source.dat 会自动当作source.dat.Z 处理。
compress -d source.dat
compress -d source.dat.Z
第16章软件包管理
名称:rpm
使用权限:所有使用者
使用方式:rpm [OPTION...]
参数:
Query options (with -q or --query): 查询
-c, --configfiles list all configuration files
-d, --docfiles list all documentation files
--dump dump basic file information
-l, --list list files in package
--queryformat=QUERYFORMAT use the following query format
-s, --state display the states of the listed files
-a, --all query/verify all packages
-f, --file query/verify package(s) owning file
-g, --group query/verify package(s) in group
-p, --package query/verify a package file
--specfile query a spec file
--whatrequires query/verify the package(s) which require a dependency
--whatprovides query/verify the package(s) which provide a dependency
Verify options (with -V or --verify):校验
--nomd5 don't verify MD5 digest of files
--nofiles don't verify files in package
--nodeps don't verify package dependencies
--noscript don't execute verify script(s)
-a, --all query/verify all packages
-f, --file query/verify package(s) owning file
-g, --group query/verify package(s) in group
-p, --package query/verify a package file
--specfile query a spec file
--whatrequires query/verify the package(s) which require a dependency
--whatprovides query/verify the package(s) which provide a dependency
Signature options:
--addsign sign package(s) (identical to --resign)
-K, --checksig verify package signature(s)
--import import an armored public key
--resign sign package(s) (identical to --addsign)
--nodigest don't verify package digest(s)
--nosignature don't verify package signature(s)
Database options:
--initdb initialize database
--rebuilddb rebuild database inverted lists from installed package headers
Install/Upgrade/Freshen/Erase options:安装/升级/刷新/删除
--aid add suggested packages to transaction
--allfiles install all files, even configurations which might otherwise be skipped
--allmatches remove all packages which match <package>(normally an error is generated if
<package> specified multiple packages)
--badreloc relocate files in non-relocateable package
-e, --erase=<package>+ erase (uninstall) package
--excludedocs do not install documentation
--excludepath=<path> skip files with leading component <path>
--force short hand for --replacepkgs --replacefiles
-F, --freshen=<packagefile>+ upgrade package(s) if already installed
-h, --hash print hash marks as package installs (good with -v)
--ignorearch don't verify package architecture
--ignoreos don't verify package operating system
--ignoresize don't check disk space before installing
-i, --install install package(s)
--justdb update the database, but do not modify the filesystem
--nodeps do not verify package dependencies
--nomd5 don't verify MD5 digest of files
--noorder do not reorder package installation to satisfy dependencies
--nosuggest do not suggest missing dependency resolution(s)
--noscripts do not execute package scriptlet(s)
--notriggers do not execute any scriptlet(s) triggered by this package
--oldpackage upgrade to an old version of the package(--force on upgrades does this automatically)
--percent print percentages as package installs
--prefix=<dir> relocate the package to <dir>, if relocatable
--relocate=<old>=<new> relocate files from path <old> to <new>
--repackage save erased package files by repackaging
--replacefiles install even if the package replaces installed files
--replacepkgs reinstall if the package is already present
--test don't install, but tell if it would work or not
-U, --upgrade=<packagefile>+ upgrade package(s)
Common options for all rpm modes:通用
-D, --define='MACRO EXPR' define MACRO with value EXPR
-E, --eval='EXPR' print macro expansion of EXPR
--macros=<FILE:...> read <FILE:...> instead of default file(s)
--nodigest don't verify package digest(s)
--nosignature don't verify package signature(s)
--rcfile=<FILE:...> read <FILE:...> instead of default file(s)
-r, --root=ROOT use ROOT as top level directory (default:"/")
--querytags display known query tags
--showrc display final rpmrc and macro configuration
--quiet provide less detailed output
-v, --verbose provide more detailed output
--version print the version of rpm being used
Options implemented via popt alias/exec:
--scripts list install/erase scriptlets from package(s)
--setperms set permissions of files in a package
--setugids set user/group ownership of files in a package
--conflicts list capabilities this package conflicts with
--obsoletes list other packages removed by installing this package
--provides list capabilities that this package provides
--requires list capabilities required by package(s)
--info list descriptive information from package(s)
--changelog list change logs for this package
--triggers list trigger scriptlets from package(s)
--last list package(s) by install time, most recent first
--filesbypkg list all files from each package
--fileclass list file names with classes
--filecolor list file names with colors
--fileprovide list file names with provides
--filerequire list file names with requires
--redhatprovides find package name that contains a provided capability (needs rpmdb-redhat package installed)
--redhatrequires find package name that contains a required capability (needs rpmdb-redhat package installed)
--buildpolicy=<policy> set buildroot <policy> (e.g. compress man pages)
--with=<option> enable configure <option> for build
--without=<option> disable configure <option> for build
? 16.3 制作RPM包
?16.3.1 释放压缩档案文件
?16.3.2 编译软件
?16.3.2 命令和程序子目录
?16.3.4 打包
?16.3.5 生成RPM包
压缩与解压缩工具
.zip
.bz2
.gz
文件扩展
名
zip
bzip2
gzip
压缩工具
使用zip 来压缩文件:
#zip -r filename.zip filesdir
扩展压缩的zip 文件:
#unzip filename.zip
使用zip 命令同时处理多个文件和目录,方法是将它
们逐一列出,并用空格间隔:
#zip -r filename.zip file1 file2 file3 /usr/work/school
unzip
使用bzip2 来压缩文件:bzip2 filename
扩展压缩的bz文件:bunzip2 filename.bz2
同时处理多个文件和目录,方法是将它们逐一列出,
并用空格间隔:bzip2 file1 file2 file3 /usr/work/school
bunzip2
使用gzip来压缩文件:gzip filename
扩展压缩的gz文件:gunzip filename.gz
同时处理多个文件和目录,方法是将它们逐一列出,
并用空格间隔:gzip –r file1 file2 file3 /usr/work/school
gunzip
解压工
具
名称:tar (tape archiver)
使用权限:所有使用者
使用方式:tar [OPTION]... [FILE]...
参数:
Main operation mode:
-t, --list list the contents of an archive
-x, --extract, --get extract files from an archive
-c, --create create a new archive
-d, --diff, --compare find differences between archive and file system
-r, --append append files to the end of an archive
-u, --update only append files newer than copy in archive
-A, --catenate append tar files to an archive
--concatenate same as -A
--delete delete from the archive (not on mag tapes!)
Device selection and switching:
-f, --file=ARCHIVE use archive file or device ARCHIVE
--force-local archive file is local even if has a colon
--rsh-command=COMMAND use remote COMMAND instead of rsh
-[0-7][lmh] specify drive and density
-M, --multi-volume create/list/extract multi-volume archive
-L, --tape-length=NUM change tape after writing NUM x 1024 bytes
-F, --info-script=FILE run script at end of each tape (implies -M)
--new-volume-script=FILE same as -F FILE
--volno-file=FILE use/update the volume number in FILE
Archive format selection:
-V, --label=NAME create archive with volume name NAME
PATTERN at list/extract time, a globbing
PATTERN
-o, --old-archive, --portability write a V7 format archive
--posix write a POSIX format archive
-j, --bzip2 filter the archive through bzip2
-z, --gzip, --ungzip filter the archive through gzip
-Z, --compress, --uncompress filter the archive through compress
--use-compress-program=PROG filter through PROG (must accept -d)
Handling of file attributes:
--owner=NAME force NAME as owner for
added files
--group=NAME force NAME as group for
added files
--mode=CHANGES force (symbolic) mode
CHANGES for added files
--atime-preserve don't change access times
on dumped files
-m, --modification-time don't extract file modified
time
--same-owner try extracting files with
the same ownership
--no-same-owner extract files as yourself
--numeric-owner always use numbers for
user/group names
-p, --same-permissions extract permissions
information
--no-same-permissions do not extract permissions
information
--preserve-permissions same as -p
-s, --same-order sort names to extract to
match archive
--preserve-order same as -s
--preserve same as both -p and -s
范例:
# Create archive.tar from files foo and bar.
tar -cvf archive.tar foo bar
tar -czvf archive.tar foo bar
# Create mutiple volumes from a certain directory.
tar -czvMf /dev/fd0 /home
# List all files in archive.tar verbosely.
tar -tvf archive.tar
# Extract all files from archive.tar.
tar -xvf archive.tar
tar -xzvf archive.tar
# Extract some files from archive.tar.
tar -xvf archive.tar dir1/file*.txt dir2/doc*.exe
# Extract some files from archive.tar.
tar –xp /home/alana/bethany.txt
? 16.3.2 编译软件
#make install
#make
#./configure
命令
一般由root用户运行此命令将编译好的程序安装到系统之中。通
常是将可执行程序放到/usr/local/bin子目录中;将所有配置文件放
到/etc子目录中;将共享库放到/usr/local/lib子目录中。
make实用程序可以自动判断一个大程序的哪些代码片段需要被重
新编译,并利用Makefile脚本程序完成实际的编译工作。
对系统的配置情况进行检测,并生成Makefile脚本程序文件。
功能
RPM build tree说明
可以用来存放spec 文件。spec 文件作为RPM 输入文件,
告诉RPM 如何构建和打包用户的软件。用户可以任意地
给spec文件命名并把它放到任何地方;RPM 对这些没有
要求。
/usr/src/redhat/SPECS
用户将源代码文件和补丁文件(*.tar.gz)放在这个目录中。/usr/src/redhat/SOURCES
RPM将创建好的源RPM 文件放在这个目录中。源RPM
文件简单地捆绑了spec 文件和构建软件包用到的所有源
文件和补丁文件。如果分发它,则其他人可以很容易地
用它重建您的软件。
/usr/src/redhat/SRPMS
/usr/src/redhat/RPMS
/usr/src/redhat/BUILD
目录名称
RPM将创建好的二进制RPM文件放在这个目录中。二进
制RPM 文件仅包含已编译的软件和如何安装的信息。
RPM的工作目录,完成诸如解包tar.gz文件、编译
(./configure make)、安装(make install)等工作。
说明
//头部
Summary: GNU indent //关于该软件包的描述
Name: indent //该软件包的基名Release
Version: 2.2.6 //该软件的版本号
Release: 1 // RPM 本身的版本号.如果修复了spec 文件中的
//一个错误并发布了该软件同一版本的新RPM,就应该增加发行版号
Source0: %{name}-%{version}.tar.gz //给这些源文件命名(通常为tar.gz 文件).%{name} 和%{version} 是RPM 宏
License: GPL //给出一些许可术语(如:“GPL”、“Commercial”、“Shareware”)
Group: Development/Tools //标识软件类型;那些试图帮助人们管理RPM 的程序通常按照组列出RPM。
//您可以在/usr/share/doc/rpm-4.2/GROUPS 文件看到一个Red Hat使用的组列表。
//但是您还可以使用那些组名以外的名称。
BuildRoot: %{_builddir}/%{name}-root //告诉RPM 这是在构建期间临时安装文件的地方。
//对于临时文件,这里使用了两个RPM 宏,而不是假设某个特定位置。
//%{_builddir} 以类似于/usr/src/redhat/BUILD 结束。
//描述节
%description //您应该在这里提供该软件更多的描述,这样任何人使用rpm -qi 查询软件包时都可以
//看到它。您可以解释这个软件包做什么,描述任何警告或附加的配置指令,等等。
The GNU indent program reformats C code to any of a variety of
formatting standards, or you can define your own.
//shell脚本节
%prep //负责对软件包解包。在最常见情况下,您只要用%setup 宏即可,它会做适当的事情,
//在构建目录下解包源tar 文件。加上-q 项只是为了减少输出。
%setup -q
Spec文件示例
%build //负责编译软件包。该shell 脚本从解压后软件包的子目录下运行。
./configure
make
%install //在构建系统上安装软件包。需要告诉系统将软件安装在哪里。
//RPM 用构建根的值定义一个shell 变量RPM_BUILD_ROOT
//因此在make install 时,我们只需将它作为DESTDIR 值传入即可。
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
%clean //删除临时文件
rm -rf $RPM_BUILD_ROOT
//文件列表节
%files //%files 列出应该捆绑到RPM 中的文件,并能够可选地设置许可权和其它信息。
//可以在%files 中用一行包括多个文件.
//如果在%files 下列出一个目录名,RPM 会包括该目录下的所有文件。
%defattr(-,root,root) //可以使用一次%defattr 来定义缺省的许可权、所有者和组;
// %defattr(-,root,root)会安装root 用户拥有的所有文件,使用当RPM 从构建系统
//捆绑它们时它们所具有的任何许可权。
//%doc 告诉RPM 这是一个文档文件,因此如果用户安装软件包时使用--excludedocs,
//将不安装该文件。可以用%attr(permissions,user,group) 覆盖个别文件的所有者和许可权。
//您也可以在%doc 下不带路径列出文件名,RPM 会在构建目录下查找这些文件并在RPM 文件
//中包括它们,并把它们安装到/usr/share/doc/%{name}-%{version}。
//以%doc 的形式包括README 和ChangeLog 这样的文件是个好主意。
/usr/local/bin/indent
%doc /usr/local/info/indent.info
%doc %attr(0444,root,root) /usr/local/man/man1/indent.1
%doc COPYING AUTHORS README NEWS
Spec文件示例
#rpm -showrc说明
RPM 在哪里放入新的源RPM 文件_srcrpmdir
RPM 在哪里查找源文件(tar 文件,等)_sourcedir
_sourcedir ${_topdir}/SOURCES
_topdir ${_usrsrc}/redhat
_usrsrc ${_usr}/src
_usr /usr
_rpmdir
变量
RPM 将把新的二进制RPM 文件放在哪里(在特
定于体系结构的子目录中)
说明
# rpmbuild -ba filename.spec所作的工作
运行%install 部分将代码安装到构建机器的目录中。
运行%build 部分来编译代码。
运行%clean 部分来除去临时构建目录。
读取%files 部分的文件列表,收集文件并创建二进制和源RPM 文件。
运行%prep 部分来将源代码解包到一个临时目录,并应用所有的补丁程序。
第17章内核升级
? 17.1 2.4版本内核的特点
?内核源代码的目录是/usr/src/linux-2.4(.20-8)
?支持ext3
?支持SMP
?支持USB
?支持IEEE 1394
? 17.2 准备升级
?创建引导软盘#mkbootdisk `uname –r`
?查看已安装的内核包#rpm –qa | grep kernel
? 17.3 下载新内核
?www.redhat.com/apps/support/errata
?www.kernel.org
? 17.4 升级内核
?#rpm –ivh kernel-2.4.20-2.47.1.i386.rpm
?#rpm –Uvh kernel-source-2.4.20-2.47.1.i386.rpm
?#rpm –Uvh kernel-docs-2.4.20-2.47.1.i386.rpm
?#rpm –Uvh kernel-utils-2.4.20-2.47.1.i386.rpm
? 17.5 校验初始RAM磁盘映像(create initial ramdisk
image for preloading module)
?初始RAM磁盘:允许模块化的内核在其能够进入模
块常驻的设备之前,具备进入内核需要从该设备引导
的模块的能力。(/dev/initrd is a RAM disk that is
initialized[i.e. loaded] by the boot loader before the
kernel is started.)
?检验初始RAM磁盘是否被创建
#ls –l /boot 看能否找到initrd-2.4.20-8.img
?创建初始RAM磁盘
#mkinitrd /boot/initrd-2.4.20-8.img 2.4.20-8
根据/lib/modules/2.4.20-8目录下而得
? 17.6 校验引导装载程序boot loader
?17.6.1 GRUB /boot/grub/grub.conf
? default=默认的操作系统(0表示第一个,1表示第二个..)
? timeout=默认等待时间(秒)
? splashimage=指定grub界面的背景图片
? title 设置操作系统的名称,不支持中文
? root(hd0,1) 设置内核在哪个分区上,root后面的是/boot所在分区的标识. grub的硬
盘是以(hdx,y)来标识的。IDE1主盘,IDE1从盘,IDE2主盘,IDE2从盘分别命名为
hd0,hd1,hd2,hd3;每个硬盘里的分区用也是以0开始的数字代替了原本以1开始的
LINUX下的命名,所以扩展分区的逻辑分区是从4开始命名的。
? kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/ 设置哪个文件是内核文件。说明
/boot/vmlinuz-2.4.20-8 就是要载入的内核。后面的都是传递给内核的参数。ro是以
readonly的意思。如果为boot单独分区,则内核前面的路径是“/”;如果没有为boot单
独分区,那么内核前面的路径就是"/boot".
? initrd /boot/initrd-2.4.20-8.img 设置用来初始RAM disk image
? rootnoverify (hdx,y) 指定windows所在分区,注意rootnoverify后有空格。
? chainloader +1 指定(hdx,y) 分区的第一扇区启动。GRUB 使用了"链式装入器
"(chainloader)。链式装入器从分区(hd0,0) 的引导记录中装入WinNT 自己的引导装
入器,然后引导它。这就是这种技术叫做链式装入的原因--它创建了一个从引导
装入器到另一个的链。这种链式装入技术可以用于引导任何版本的DOS 或
Windows。如果你在计算机中装有win98,winme,win2k,winxp的话,chainloader会把引
导权交与win的NTLoader来引导.
? 17.6 校验引导装载程序boot loader
?17.6.2 LILO /etc/lilo.conf
?prompt #给出“boot:”提示,强制LILO等待用户的键盘输入,按下回
车键则立即引导默认的操作系统,而按下Tab键则打印可供选择的操作系统。当“prompt”被设
置而“timeout”没有被设置时,系统会一直处于等待状态而不引导任何操作系统。不设置该参
数时,LILO不给出“boot:”提示而直接引导默认操作系统,除非用户按下了Shift、Ctrl、Alt三
键中的任何一个。大多数情况下,如果你的硬盘上有多个操作系统,建议使用参数,它留给
用户一个选择的余地。
? timeout=50 #设置等待键盘输入的时长,单位是0.1秒。超过这段时间没
有输入则为超时,系统将自动引导缺省的操作系统。如果不设置本参数,缺省的超时时间长
度为无穷大。
? default=2.4.20-2.30 #缺省引导label为2.4.20-2.30的操作系统
? boot=/dev/hda #将LILO安装在MBR。LILO作为主引导管理器
? map=/boot/map #指定“map”文件为/boot/map
? install=/boot/boot.b
? message=/boot/message #注释为/boot/message
? linear #产生用于替换硬盘sector/head/cylinder地址(硬盘几何参数)
的linear扇区地址。
? compact #产生一个更小的“map”文件
? image=/boot/vmlinuz-2.4.20-8 #设置包含Linux核心引导映像的文件或设备。
? label=OSname #通过此参数来标识操作系统名。用户可通过在LILO提示后
输入“标识”来决定引导哪一个操作系统。
? append=“root=LABEL=/” #append传递一个特殊硬件的参数串string给Linux系统的核
心。它常用来配置一些Linux不能正确测试到的硬件设备。
? 17.6 校验引导装载程序boot loader
?17.6.1 GRUB
/boot/grub/grub.conf
?17.6.2 LILO
/etc/lilo.conf
第18章设备
? 18.1 打印机配置
#redhat-config-printer(-gui)
#redhat-config-printer-tui
/etc/cups目录cups
Cups-
lpd
CUPS打印系统
/etc/printcap //printer capability数据库
/etc/printcap.local
/etc/printcap.old
/etc/lpd.conf //LPRng spooler系统配置文件
/etc/lpd.perms // LPRng spooler系统的
permission control file
lpd
LPRng打印系统
打印守
护进程
配置文件打印系统
? CUPS(Common Unix Printing System)
? 18.1 打印机配置
?18.1.1 添加打印机
选择打印机的队列类型:
本地连接
联网的CUPS(IPP)
联网的UNIX(LPD)
联网的Windows(SMB)
联网的Novell(NCP)
联网的JetDirect
?18.1.3 选择打印机型号
?18.1.4 打印测试页
?18.1.5 修改现存的打印机配置
?18.1.7 管理打印作业
?18.1.8 共享打印机
?18.1.9 切换打印系统#redhat-switch-printer
18.1.2 命令行配置18.1.6 保存配置文件
#lpq
查看打印队列
#service cups stop
#service lpd stop
停止守护进程
#lpr <filename>
打印文件
#redhat-config-printer-tui –Xexport > settings.xml
备份配置文件
#redhat-config-printer-tui –Ximport < settings.xml
导入配置文件
#redhat-config-printer-tui –Ximport --merge < settings.xml
合并导入配置文件
#service cups restart
#servie lpd restart
重启守护进程
#lprm <作业号>
从打印队列删除
#redhat-config-printer-tui –Xremove-local options
删除本地打印机
添加本地打印机
功能
#redhat-config-printer-tui –Xadd-local options
命令
18.2 内核模块(kernel module)
内核模块是驻留在/lib/modules 目录下,而且每个模块
文件名结尾都有一个".o"
/lib/modules目录
kerneld 的配置文件。kerneld 并不是“作为守护进程的”内
核。它其实是一种在需要时负责“快速”加载附加内核模
块的守护进程。
/etc/modules.conf
指定modprobe 是否应该在启动时自动运行并加载必需
的模块。
功能
/proc/sys/kernel/modprobe
配置文件
Module操作相关命令
显示模块信息
#modinfo <module>
不检查依赖关系,直接载入指定的模块
#insmod <module>
检查并解决依赖关系,然后载入指定的模块
#modprobe <module>
#rmmod <module>
#lsmod
命令
卸载指定的模块
显示当前载入了的模块列表,实质上是对/proc/modules输出
功能
内核模块
?所有最新的Linux 内核都支持内核模块。
?Kernel 模块是非常整齐的--它们是除非需要驻
留在硬盘上的内核部分。一旦内核需要一个特
定模块的功能时,它从硬盘被载入,自动集成
到内核中就可被使用了。另外,如果内核模块
有好几分钟未被使用,内核可以自愿地将其从
内存中调出--被称之为"自动清除"。
内核模块
?内核模块是驻留在/lib/modules 目录下,而且
每个模块文件名结尾都有一个".o"。每个模块
代表一个内核功能的特定组件--一个模块可能
提供FAT 文件系统支持,而另一个可能支持
一种特殊的ISA 以太网卡.
?模块使得内核占用少量的内存空间。可创建一
个内核只包含足以启动计算机的功能,而其他
的功能则在需要时被载入。由于内核能自动清
除它所载入的模块,系统的内存资源能被很好
地利用。
内核模块
?不能将所有一切放入模块中。由于模块是存放
在磁盘上,可启动的内核映像需要被编译入磁
盘控制器以及对基本文件系统(通常是ext2 文
件系统)的支持。如果您没有将这些重要的组件
编译入内核映像(而是将它们作为模块来编译),
内核就无法获得基本的功能来从磁盘上载入这
些模块了--导致了一个“鸡生蛋、蛋生鸡”的问
题!
构造自己的内核
?内核配置
?编译内核(或模块)
?启动流程
内核配置
?在编译内核前,需要配置它,配置是精确控制
在新内核中启用(禁止)哪些内核功能的机会。
也将控制哪些会被编译到内核的二进制映像(在
启动时被载入)而哪些被编译到需要时载入的内
核模块文件。
内核配置
?输入make menuconfig或者make xconfig。
如果您想要配置您的内核,使用上述选
择之一。如果您输入make menuconfig,
您将使用一个漂亮的基于文本的彩色菜
单系统来配置内核。如果您输入make
xconfig,您将使用一个更漂亮的基于X-
Window 的GUI 界面来配置内核的各种
选项。这里有一个使用“make
menuconfig”的屏幕截图:
内核配置
内核配置
?当使用"make menuconfig" 时,在左面出
现一个"< >" 的选项能被编译成为一个模
块。当选项被选中,按下空格键来循环
选择选项是被选中或未选中,("<*>")表
示将被编译成内核映像而("<M>")表示将
被编译成模块。
内核配置
?在这里有极其多的内核选项,在此不一一解释
--利用内核内置的帮助功能。基本上每个选项
都至少有一些描述,而且每个通常都有一行"
如果您不知道这个选项的含义,输入Y。(或者
N)"。这些提示在您不知道一个特定选项的含
义时能帮助您。
内核配置
? make dep; make clean
一旦内核配置完毕,就可开始编译它了。在能
编译它前,需要生成依赖(dependency)信息并
清除任何老的"编译结果"。这可以通过在
/usr/src/linux下输入make dep; make clean 完成。
内核配置
? make bzImage
编译二进制内核映像。输入make bzImage。过
几分钟后,编译会结束而且在
/usr/src/linux/arch/i386/boot(x86 PC 内核)目录下
找到bzImage文件。后面描述如何安装这个新
内核,现在要看看模块编译。
编译模块
?有了bzImage,下面要编译模块了。即使在配
置内核时没有使用任何模块,也不要跳过此步
骤。输入make modules; make modules_install。
这将导致模块被编译而且被安装到/usr/lib/<内
核版本号>目录下。
?到此内核已经被编译完成了,内核模块也编译
完成并被安装。现在是要重新配置LILO,以
使用新的内核。
?不要忘记在您要编译前使用"make clean" 命令。
启动配置
?重新配置LILO,它将负责载入新的内核。
LILO 是最流行的Linux 引导工具,而且为所
有的主流Linux 发行商所采用。
?察看/etc/lilo.conf 文件。它将包含一行看似
"image=/vmlinuz" 的语句。该语句告诉LILO
到何处找到内核。
启动配置
?要配置LILO 来使用新的内核,有两种选择。
第一个是覆盖现有的内核--除非手头上有一些
紧急启动措施如还有此内核的引导盘,这很危
险的方法。
?更为安全的选择是配置LILO使得它能从新的
或旧的内核引导。LILO 可配置成从新内核缺
省启动,但仍提供一种方法在遇上问题时能选
择旧的内核来启动。这是推荐的作法,也是将
随后介绍的方法。
启动配置
lilo.conf 文件有可能看起来如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1 read-only
image=/vmlinuz
label=linux
启动配置
要在的lilo.conf 文件中增添新的项目,参见下列
步骤。
?首先,拷贝/usr/src/linux/arch/i386/boot/bzImage
到根(root)分区上的一个文件,例如/vmlinuz2。
一旦拷贝完毕,复制lilo.conf 文件的最后三行
并将它们添加到该文件的最后...
启动配置
现在,lilo.conf 文件应该看起来如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1 read-only
image=/vmlinuz
label=linux
image=/vmlinuz
label=linux
启动配置
?首先,将第一个"image=" 行改为
"image=/vmlinuz2"。
?其次,将第二个"label=" 行改为
"label=oldlinux"。
?然后,确定在文件的开始有一行
"delay=20" --如果没有,增添一行。如果
它已经存在,将数字至少设为20。
启动配置
您最后的lilo.conf 文件将看起来如下:
boot=/dev/hda delay=20 vga=normal
root=/dev/hda1 read-only
image=/vmlinuz2
label=linux
image=/vmlinuz
label=oldlinux
启动配置
?作完这些修改后,需要以root 身份
运行“lilo”。这非常重要!如果您
不执行此步,启动的过程无法继续。
运行“lilo”将给lilo一个机会来更
新它的启动映射。
启动配置
?这个lilo.conf 文件可以用来允许您启动两个不
同的内核。它允许启动原来的内核,位于
/vmlinuz目录下。它也允许您启动新的内核,
位于/vmlinuz2 目录下。
?在缺省情况下,它将尝试启动新内核(指向新内
核的image/label 行首先出现在配置文件中)。
?如果,出于某种原因,需要启动旧内核,只需
在重新启动计算机时按住tab 键。LILO 将会监
测到此操作,然后允许您输入要启动的映像标
签名。要启动旧内核,输入“oldlinux”,然后按
回车键。
内核编译
更多的内核编译知识:
? http://www.tldp.org/HOWTO/Kernel-
HOWTO.html,另一个指导内核编译的资源
? http://www.tldp.org/HOWTO/LILO-crash-rescue-
HOWTO.html,介绍如何创建一个急救Linux
引导盘
? www.kernel.org,包含Linux 内核文档
内核编译
更多的内核编译知识:
? http://www.tldp.org/HOWTO/Kernel-
HOWTO.html,另一个指导内核编译的资源
? http://www.tldp.org/HOWTO/LILO-crash-rescue-
HOWTO.html,介绍如何创建一个急救Linux
引导盘
? www.kernel.org,包含Linux 内核文档
安装LN-1018网卡驱动程序
?step 1: 确保内核源代码在/usr/src/linux-2.4下
?step 2: 配置内核参数
#cd /usr/src/linux-2.4
#make menuconfig //如果Linux系统不支持;可以用#make xconfig或
#make config替换,都可配置内核参数
设置ne2000/ne1000 support为yes.然后退出
?step 3: 编译新内核
#make dep //分析内核配置并创建相关树,以确定要安装哪些内容
#make clean //清除以前编译留下的二进制文件
#make bzImage //创建内核,产生/usr/src/linux-2.4/arch/i386/boot/bzImage
?step 4: 修改启动配置
#cp arch/i386/boot/bzImage /boot/vmlinuz-mykernel
#vi /etc/lilo.conf //找到“image=”项,用“/boot/vmlinuz-mykernel”替代该项的原
有值
#lilo
#ifconfig eth0 202.202.96.37 up
#reboot
#dmesg | more //可以看到eth0成功启动