答:您可能有一个损坏的文件系统,可能是由于在关闭电源或重置之前没有正确关闭 Linux 造成的。您需要使用最新的关闭程序来执行此操作,例如,util-linux 包中包含的程序,可在 sunsite 和 tsx-11 上找到。
如果幸运的话,程序 fsck(或者如果您没有自动的 fsck 前端,则使用相应的 e2fsck 或 xfsck)将能够修复您的文件系统。 如果不幸的话,文件系统将被破坏,您必须使用 mkfs(或 mke2fs、mkxfs 等)重新初始化它,并从备份恢复。
注意:不要尝试检查已挂载为读/写的文件系统——这包括根分区,如果您没有看到
VFS: mounted root ... read-only |
在启动时。
答:突然停止的 FTP 传输显然是由于某种形式的缓冲区溢出造成的。 Linux 和 Microsoft 服务器都会发生这种情况。 在 Linux 系统上,该问题似乎最常发生在发行版的服务器软件上。
如果您收到ftp: connection refused (ftp:连接被拒绝)错误,那么问题很可能是由于缺少身份验证。 请参阅 为什么我的 FTP 或 Telnet 服务器不允许登录?。
一种补救方法是用 OpenBSD FTP 服务器的 Linux 端口替换发行版的 FTP 服务器。 主页是: http://www.eleves.ens.fr:8080/home/madore/programs/。
要安装 BSD 服务器,请按照安装说明进行操作,并参阅以下手册页:inetd和inetd.conf。(如果您有更新的xinetd,请参见下文。) 务必告诉inetd单独运行 BSD 守护程序,而不是作为子进程运行,例如,tcpd. 注释掉以ftp开头的行/etc/inetd.conf文件中,并将其替换为类似于(如果您在ftpd中安装了新的/usr/local/sbin/):
# Original entry, commented out. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd # Replacement entry: ftp stream tcp nowait root /usr/local/sbin/ftpd -l |
替换守护程序将在重新启动或发送(以 root 身份)一个SIGHUP到inetd之后生效,例如
# kill -HUP inetd |
要配置xinetd,请在/etc/xinetd.d中创建一个条目,按照xinetd.conf手册页中的说明进行操作。 再次确保ftpd的命令行参数正确,并且您已安装了/etc/ftpusers和/etc/pam.d/ftp文件。 然后重新启动xinetd,使用命令/etc/rc.d/init.d/xinetd restart。 该命令应报告“OK”,并且重新启动将记录在系统消息日志中。
答:在 Linux 1.3.57 及更高版本中,
/proc/meminfo的格式已更改,free 的实现方式无法理解这种更改。
从 metalab.unc.edu 获取最新版本,位于/pub/Linux/system/Status/ps/procps-0.99.tgz.
答:如果 Netscape 和网络配置正确,则不应崩溃。 一些需要检查的事情:
确保MOZILLA_HOME环境变量已正确设置。 例如,如果您将 Netscape 安装在/usr/local/netscape/下,则应将其设置为MOZILLA_HOME的值。 从命令行设置它(例如,在 bash 下使用 "export MOZILLA_HOME="/usr/local/netscape"")或将其添加到您的个人或系统初始化文件中。 有关详细信息,请参阅您的 shell 的手册页。
如果您有全新版本的 Netscape,请尝试以前的版本,以防运行时库略有不兼容。 例如,如果安装了 Netscape 版本 4.75(在 shell 提示符下键入 "netscape --version"),请尝试安装版本 4.7。 所有版本都存档在 ftp://ftp.netscape.com/。
Netscape 使用自己的 Motif 和 Java Runtime Environment 库。 如果您的系统上安装了单独的版本,请确保它们不会干扰 Netscape 的库;例如,通过卸载它们。
确保 Netscape 可以连接到其默认名称服务器。 如果无法连接,该程序将显示为冻结并在几分钟后超时。 这表明系统的 Internet 连接存在问题;很可能,系统也无法连接到其他站点。
答:这适用于响应客户端但不允许登录的服务器守护程序。 在安装了可插拔身份验证模块的新系统上,请查找名为“ftp”或“telnet”的文件,位于目录/etc/pam/或/etc/pam.d/中。 如果不存在相应的身份验证文件,则配置 FTP 和 Telnet 身份验证以及其他 PAM 配置的说明应位于/usr/doc/pam-&version&中。 另请参阅 FTP 服务器显示:“421 service not available, remote server has closed connection.” 的答案。
如果是旧系统上的 FTP 服务器,请确保该帐户存在于/etc/passwd中,特别是anonymous.
。这种类型的问题也可能是由于未能正确解析主机地址造成的,尤其是在使用反向地址解析协议 (RARP) 时。 解决此问题的简单方法是在每台机器的/etc/hosts文件中列出所有相关的主机名和 IP 地址。 (请参阅 Sendmail 在每个命令处暂停长达一分钟中的示例/etc/hosts和/etc/resolv.conf文件)。 如果网络具有内部 DNS,请确保每台主机都可以使用它来解析网络地址。
如果主机根本不响应 FTP 或 Telnet 客户端,则服务器守护程序未正确安装,或者根本没有安装。 请参阅旧系统上的手册页inetd和inetd.conf或xinetd和xinetd.conf以及ftpd和telnetd.
答:这可能也适用于大多数其他浏览器。 在“首选项/导航器”菜单中,将您的主页设置为 Netscape 的bookmarks.html文件,该文件位于.netscape(带有前导句点) 子目录中。 例如,如果您的登录名是smith,则将主页设置为
file://home/smith/.netscape/bookmarks.html |
像这样设置您的个人主页将在 Netscape 启动时为您呈现一个格式良好(尽管可能很长)的书签页面。 并且该文件会在您添加、删除或访问已添加书签的站点时自动更新。
答:您的计算机中有两个时钟。 硬件 (CMOS) 时钟即使在计算机关闭时也会运行,并且在系统启动时和 DOS (如果您使用 DOS) 时使用。 普通系统时间(由 date 显示和设置)由内核在 Linux 运行时维护。
您可以使用/sbin/clock(现在在许多发行版中称为 hwclock) 显示 CMOS 时钟时间,或者从另一个时钟设置任一时钟。 请参阅man 8 clock或man 8 hwclock.
。还有各种其他程序可以校正系统漂移或在网络上传输时间的任一时钟或两个时钟。 其中一些可能已安装在您的系统上。 尝试查找 adjtimex(校正漂移)、网络时间协议客户端,如 netdate、getdate 和 xntp,或 NTP 客户端-服务器套件,如 chrony。 请参阅 如何找到特定的应用程序?。
答:它们本来就不应该起作用。 此功能已故意在 Linux 内核中禁用,因为 setuid 脚本几乎总是安全漏洞。 Sudo 和 SuidPerl 可以提供比 setuid 脚本或二进制文件更高的安全性,尤其是在执行权限仅限于特定用户 ID 或组 ID 时。
如果您想知道为什么 setuid 脚本是一个安全漏洞,请阅读 news:comp.unix.questions 的常见问题解答。
答:free 打印的“free”数字不包括用作磁盘缓冲区的内存——显示在buffers列中。 如果你想知道有多少内存是真正可用的,将该buffers数量加到free中。 新版本的 free 会打印一行额外的信息。
磁盘缓冲区缓存倾向于在 Linux 启动后很快增长。 当您加载更多程序并使用更多文件时,内容会被缓存。 过一段时间后它会稳定下来。
答:这是一种常见症状,表明未能缓存额外的内存。 具体问题取决于您的主板。
有时你需要在 BIOS 设置中启用某些区域的缓存。查看 CMOS 设置,看看是否有启用新的内存区域缓存的选项,该选项当前可能处于关闭状态。这种情况在 '486 电脑上似乎最常见。
有时 RAM 必须安装在特定的插槽中才能被缓存。
有时你需要设置跳线来启用缓存。
有些主板,如果你拥有的每单位缓存的 RAM 超过了硬件的预期,则不会缓存所有的 RAM。通常,完整的 256K 缓存可以解决这个问题。
如有疑问,请查阅手册。如果由于文档不完整而仍然无法解决问题,你可能希望向 news:comp.os.linux.hardware 发送消息,提供所有详细信息,如制造商、型号、日期代码等,以便其他 Linux 用户可以避免这种情况。
答:你可能正在使用非 shadow 密码程序,但却使用了 shadow 密码。
如果是这种情况,你必须获取或编译一个 shadow 密码版本的相关程序。shadow 密码套件可以在 ftp://tsx-11.mit.edu/pub/linux/sources/usr.bin/shadow/ 找到。 这是源代码。 二进制文件可能位于linux/binaries/usr.bin/.
答:你可能遇到了与 为什么有些程序(例如,xdm)不允许登录? 中相同的问题,并且还多了一个小问题。
如果你正在使用 shadow 密码,你应该在x或者星号放在密码字段中/etc/passwd针对每个帐户,这样,如果某个程序不知道 shadow 密码,它就不会认为这是一个无密码帐户并允许任何人进入。
答:你可能拥有的实际内存太少。如果你拥有的 RAM 少于你一次运行的所有程序,Linux 将会交换到你的硬盘驱动器并产生可怕的抖动。在这种情况下,解决方案是不一次运行那么多程序,或者购买更多内存。你还可以通过编译和使用配置选项较少的内核来回收一些内存。请参阅 如何升级/重新编译内核。
你可以通过 free 命令或键入以下命令来了解你正在使用多少内存和交换空间
$ cat /proc/meminfo |
如果你的内核配置了 RAM 磁盘,这可能会浪费空间并导致速度变慢。使用 LILO 或 rdev 告诉内核不要分配 RAM 磁盘(请参阅 LILO 文档或键入man rdev).
答:你可能存在一些权限问题,或者你有一个文件/etc/nologin.
在后一种情况下,将rm -f /etc/nologin放在你的/etc/rc.local或/etc/rc.d/*脚本中。
否则,请检查你的 shell 的权限,以及错误消息中出现的任何文件名,以及包含这些文件的目录,直到根目录。
答:你可能错误地将一些二进制数据发送到了你的屏幕。键入echo 'c'来修复它。许多 Linux 发行版都有一个命令,reset,可以做到这一点。
如果这没有帮助,请尝试直接屏幕转义命令echo 'Ctrl-V Ctrl-O'.
这会重置 Linux 控制台的默认字体。请记住,按住 Control 键并键入字母,而不是例如 Ctrl,然后 V。 序列 Ctrl-V Esc C。
会导致全屏重置。如果在键入二进制文件后 shell 命令行上还留有数据,请按 Ctrl-C 几次以恢复 shell 命令行。
另一个可能的命令是别名,sane,它可以与通用终端配合使用
$ alias sane='echo -e " c";tput is2; > stty sane line 1 rows $LINES columns $COLUMNS' |
别名用反引号 (`) 括起来,而不是单引号 (')。此处包含换行符是为了清晰起见,不是必需的。
确保$LINES和$COLUMNS在环境中使用类似于此命令的命令定义在~/.cshrc或~/.bashrc,
$ LINES=25; export $LINES; $COLUMNS=80; export $COLUMNS |
中使用正确的$LINES和$COLUMNS用于终端。
最后,stty -g 的输出可用于创建将重置终端的 shell 脚本
将 stty -g 的输出保存到文件中。在此示例中,该文件名为termset:
$ stty -g >termset |
stty -g 的输出(内容termset)看起来像
500:5:bd:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:73 |
编辑termset成为一个 shell 脚本; 添加解释器和 stty 命令
#!/bin/bash stty 500:5:bd:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:73 |
将可执行权限添加到 termset 并用作 shell 脚本
$ chmod +x termset $ ./termset |
[Floyd L. Davidson, Bernhard Gabler]
答:你确实创建了一个紧急软盘(或软盘),对吗?从紧急软盘或软盘对重新启动。例如,Slackware 发行版安装子目录中的 Slackware 引导和根磁盘对。
答:在 ftp://metalab.unc.edu/pub/Linux/system/recovery/ 中还有两个自制救援磁盘创建软件包。这些更好,因为它们上面有你自己的内核,因此你不会冒缺少设备和文件系统的风险。
获取 shell 提示符并使用类似如下的命令挂载你的硬盘:
$ mount -t ext2 /dev/hda1 /mnt |
然后你的文件系统在目录/mnt下可用,你可以修复问题。记住在重新启动之前卸载你的硬盘驱动器(首先 cd 到其他地方,否则它会说它很忙)。
A
![]() | 不正确地编辑/etc/目录中的任何文件都可能严重搞砸系统。 请保留任何文件的备用副本,以防出错。 |
如果你的 Linux 发行版允许,请尝试通过键入single在BOOT lilo提示符下引导到单用户模式。 对于较新的发行版,你可以在提示时键入以下内容来引导到单用户模式linux 1, linux single或者init=/bin/bash.
如果以上方法对你不起作用,请从安装或救援软盘启动,然后使用 Alt-F1 -- Alt-F8 切换到另一个虚拟控制台,然后在/mnt上挂载根文件系统。 然后继续执行以下步骤,以确定你的系统是否具有标准密码或 shadow 密码,以及如何删除密码。
使用你最喜欢的文本编辑器,编辑/etc/passwd文件中 root 条目以删除密码,该密码位于第一个和第二个冒号之间。'''仅当密码字段不包含x时,才执行此操作,否则请参阅下文。'''
root:Yhgew13xs:0:0: ... |
将其更改为
root::0:0: ... |
如果密码字段包含x,那么你必须从/etc/shadow文件中删除密码,该文件具有类似的格式。请参阅手册页man passwd和man 5 shadow.
[Paul Colquhuon, Robert Kiesling, Tom Plunket]
答:首先,确保你的/dev/lp*端口配置正确。 它的 IRQ(如果有)和端口地址需要与打印机卡上的设置匹配。 你应该能够将文件直接转储到打印机
$ cat the_file >/dev/lp1 |
如果 lpr 给你的消息类似myname@host: host not found“ 它可能意味着 TCP/IP 环回接口lo未正常工作。 环回支持已编译到大多数发行版内核中。 使用 ifconfig 命令检查接口是否已配置。 按照 Internet 惯例,网络号为 127.0.0.0,本地主机地址为 127.0.0.1。 如果一切配置正确,你应该能够 telnet 到你自己的机器并获得登录提示符。
确保/etc/hosts.lpd包含机器的主机名。
如果你的机器有支持网络的 lpd,比如 LPRng 自带的那个,确保/etc/lpd.perms配置正确。
还可以查看 Printing HOWTO。 “我在哪里可以获取 HOWTO 和其他文档?”。
答:要了解你是如何进入这种状态的,请参阅 EXT2-fs: warning: mounting unchecked file system。
重新挂载它。 如果/etc/fstab是正确的,你只需键入
mount -n -o remount / |
如果/etc/fstab是错误的,你必须给出设备名称,也可能给出类型:例如
mount -n -o remount -t ext2 /dev/hda2 / |
答:/proc中的任何文件都不是真实存在的,它们都是内核制造的“假装”文件,用于为你提供有关系统的信息,并且不占用任何硬盘空间。
/proc/kcore就像你计算机内存的“别名”。它的大小与你拥有的 RAM 量相同,如果你将其作为文件读取,则内核会进行内存读取。
答:格式化软盘的系统调用只能作为 root 完成,而不管/dev/fd0*的权限如何。 如果你希望任何用户都能够格式化软盘,请尝试获取 fdformat2 程序。 这通过 setuid 到 root 来解决问题。
答:PCMCIA Card Services 模块位于/lib/modules/版本/pcmcia,其中版本是内核的版本号,它使用特定于该内核映像的配置信息。 你系统上的 PCMCIA 模块将无法使用不同的内核映像。 当你升级内核时,你需要升级 PCMCIA 卡模块。
从旧内核升级时,请确保你拥有最新版本的运行时库、modutils 软件包等。 有关详细信息,请参阅文件Documentation/Changes在内核源代码树中。
重要说明:如果你使用 PCMCIA Card Services,请不要启用网络设备支持/袖珍型和便携式适配器内核配置菜单的选项,因为这与 Card Services 中的模块冲突。
了解旧内核的 PCMCIA 模块依赖性很有用。 你需要跟踪它们。 例如,如果你的 PCMCIA 卡依赖于作为旧内核模块安装的串行端口字符设备,那么你需要确保串行模块也可用于新内核和 PCMCIA 模块。
这里描述的步骤有些笨拙,但它比从头重新计算模块依赖关系,并确保升级模块被加载,以便非 PCMCIA 和 PCMCIA 都能正常工作要容易得多。最近的内核版本包含无数的模块选项,多得难以轻松跟踪。这些步骤尽可能多地使用现有的模块依赖关系,而不是要求您计算新的依赖关系。
但是,此过程没有考虑到模块依赖关系在不同内核版本之间不兼容的情况。在这些情况下,您需要使用 insmod 自己加载模块,或者调整/etc/conf.modules文件中的模块依赖关系。内核源代码树中的Documentation/modules.txtModules.txt还包含一个推荐的程序,用于确定要在常驻内核中包含哪些功能,以及将哪些功能构建为模块。
从本质上讲,当您安装新内核时,您需要按照以下步骤操作。
在构建新内核之前,使用 lsmod 命令记录您的系统当前使用的模块依赖关系。例如,lsmod 的部分输出可能如下所示:
Module Pages Used by memory_cs 2 0 ds 2 [memory_cs] 3 i82365 4 2 pcmcia_core 8 [memory_cs ds i82365] 3 sg 1 0 bsd_comp 1 0 ppp 5 [bsd_comp] 0 slhc 2 [ppp] 0 serial 8 0 psaux 1 0 lp 2 0 |
例如,这告诉您memory_cs模块需要首先加载 ds 和pcmcia_core模块。但它没有说明的是,为了避免重新计算模块依赖关系,您可能还需要提供serial, lp, psaux和其他标准模块,以防止在启动时使用 insmod 安装 pcmcia 例程时出现错误。查看/etc/modules文件将告诉您系统当前加载了哪些模块以及加载顺序。保存此文件的副本以供将来参考,直到您成功安装了新内核的模块。还将 lsmod 输出保存到文件中,例如,使用命令:lsmod >lsmod.old-kernel.output。
构建新内核,并将引导映像zImage或bzImage安装到软盘。为此,请更改为arch/i386/boot目录(如果您没有 Intel 机器,请替换正确的架构目录),并且在软盘驱动器中插入软盘后,执行命令
$ dd if=bzImage of=/dev/fd0 bs=512 |
如果您使用 make bzImage 命令构建内核,并且您的软盘驱动器是/dev/fd0。这会将可引导的内核映像写入软盘,并允许您尝试新内核,而无需替换 LILO 在硬盘驱动器上引导的现有内核。
从软盘引导新内核,以确保它正常工作。
在系统运行新内核的情况下,编译并安装当前版本的 PCMCIA Card Services 软件包,该软件包可从 metalab.unc.edu 以及其他 Linux 存档中获得。在安装 Card Services 实用程序之前,请更改/sbin/cardmgr和/sbin/cardctl到/sbin/cardmgr.old和/sbin/cardctl.old的名称。这些实用程序的旧版本与 Card Services 安装的替换实用程序不兼容。如果安装过程中出现问题,旧实用程序不会被覆盖,您可以根据需要恢复到旧版本。使用make config命令配置 Card Services 时,请确保构建脚本知道在哪里找到内核配置,可以通过使用来自正在运行的内核的信息,或者告诉构建过程新内核的源代码树在哪里。make config步骤应该顺利完成。从 Card Services 软件包安装模块会将它们放置在/lib/modules/版本/pcmcia目录中,其中 version 是新内核的版本号。
重新启动系统,并注意哪些(如果有)PCMCIA 设备可以工作。还要确保非 PCMCIA 硬件设备正在工作。很可能某些或所有这些设备都无法工作。使用 lsmod 确定内核在启动时加载了哪些模块,并将其与旧内核加载的模块列表进行比较,该列表是您从该过程的第一步保存的。(如果您没有保存 lsmod 输出的列表,请返回并重新启动旧内核,并立即创建列表。)
当所有模块都正确加载后,您可以替换硬盘驱动器上的旧内核映像。这很可能是/vmlinuz符号链接指向的文件。记住在硬盘驱动器上安装新的内核映像后,通过运行 lilo 命令来更新引导扇区。
另请参阅问题“如何升级/重新编译我的内核?”和“Modprobe 无法找到模块 'XXX'”以及类似的消息。