网络操作系统-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成功启动