Linux 的重要知识点


Linux 的重要知识点 Linux 文件系统精通指南 究竟什么是“文件系统”?Sheryl Calish 介绍了这个概念以及它的实际应用 尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件。 遗憾的是,新手通常会混淆介绍 Linux 文件系统概念的术语。术语文件系统 可以在 Linux 文件编制中互换使用,用于指代几个不同但相关的概念。除磁盘分区的具体实例外,文件系 统还指代数据结构以及分区中文件的管理方法。 另新手更感困惑的是,该术语还用于指代系统中文件的整体组织形式:目录树。此外,该术 语还可以指代目录树中的每个子目录,如在 /home 文件系统中。某些人认为,这些目录和 子目录不能称作真正意义上的文件系统,除非它们均驻留在各自的磁盘分区上。然而,其他 人却将其称作文件系统,这无疑又增添了困惑。 Linux 老手可以从上下文中理解这些术语的含义。而新手却很难在一时半会儿就辨别出这样 的上下文。 本文的主要目标就是提供足够的背景知识,以帮助您辨别此术语的上下文。在阐明文件系统 术语的细微差别的过程中,您还将学习如何将某些非常有用的相关工具从理论应用上升到实 际应用。 本文主要介绍了 2.4 版 Linux 内核中的 Linux 磁盘分区和文件管理系统特性。此外,还 介绍了 2.6 版 Linux 内核中的新特性。 磁盘分区概述 Linux 和 UNIX 中的基本文件存储单元都是磁盘分区,即将一个或多个硬盘的逻辑划分, 操作系统将每个逻辑分区视为独立的磁盘。文件和文件管理系统“居住”在磁盘分区中。Linux 将这些磁盘分区作为设备处理,进而通过 /dev 目录中的特殊文件使用文件 I/O 机制。 有两种类型的设备文件:块和字符/原始。两者之间的一个重要差别是,块设备被缓冲,而 字符设备因为没有文件管理系统,所以不被缓冲。在 Oracle 集群文件系统 (OCFS) 推出 之前,使用原始设备是提高 Oracle 数据文件分区性能的常见方法。(在本文的后续部分, 我们将详细介绍原始设备。) 存储在磁盘最开始位置的分区表提供了该磁盘上分区的映射。可以使用 fdisk 命令查看系 统的分区表。 # fdisk -l Disk /dev/hda:240 heads, 63 sectors, 1940 cylinders Units = cylinders of 15120 * 512 bytes Device Boot Start End Blocks Id System /dev/hda 1 286 2162128+ c Win95 FAT32 (LBA) /dev/hda2 * 288 1940 12496680 5 Extended /dev/hda5 288 289 15088+ 83 Linux /dev/hda6 290 844 4195768+ 83 Linux /dev/hda7 845 983 1050808+ 82 Linux swap /dev/hda8 984 1816 6297448+ 83 Linux /dev/hda9 1817 1940 937408+ 83 Linux 分区表中的名称 /dev/hda 至 /dev/hdd 分别代表 IDE 驱动器 1 至 4,其中 hda 代表驱 动器 1,hdb 代表驱动器 2,依此类推。驱动器内的分区用数字指代,因此 /dev/hda5 是 第一个 IDE 驱动器上的第五个分区。对于 SCSI 驱动器,使用了类似的命名模式:/dev/sda to /dev/sdd。 第一至第四个分区保留给主分区,第五个及随后的分区用于逻辑分区。因此,以上所示的分 区表中有一个驱动器 hda,它包含一个主分区 hda1、一个扩展分区 hda2 和五个逻辑分 区 /dev/hda5 至 /dev/hda9。以名称 shmfs 列出的文件系统表示根据 Linux 2.4 中的 POSIX 标准挂载为特殊文件系统的共享内存文件系统。 您可能已经注意到,在 fdisk 列表中 LBA 是括在括号中的。LBA 表示逻辑块寻址,它将 硬盘的柱面、块和扇区模式转换为线性块编号进行处理。 在 Linux 中,分区分为主分区、扩展分区和逻辑分区。术语主分区 是先前 x86 系统上四 个分区限制的遗留产物。与 DOS 和 Windows 不同,Linux 可以从主分区或逻辑分区启 动。用作逻辑分区占位符的主分区称作扩展分区。扩展分区本身拥有指向一个或多个逻辑分 区(它们只是主分区的子分区)的分区表。在以上的 fdisk 列表中,hda2 就是一个扩展 分区。 文件管理系统概述 要使分区后的磁盘可用,必须在其上构建文件系统。这种情况下,通常还将文件系统称作“分 区类型”、“基于磁盘的文件系统”和“文件系统类型”。实际上,可以将这些文件系统看作是文 件管理系统,这是因为该称呼正体现了它们的功能:它们通过维护文件上的元数据,使系统 上的文件保持状态一致。 Linux 项目的特点之一是需要实现与每个可用实用程序的多个样式和首选设置的兼容性,而 这种兼容性在可用文件管理系统的选择上体现得最为明显。Linux 内核内部的虚拟文件系统 (VFS) 实现了此选择。VFS 采用了一组可由其他文件管理系统使用的基本数据结构。这些 数据结构是超级块、inode、dentry(或目录文件)和数据块。 每个分区都包含一个超级块,用于维护分区中文件系统上的信息,包括一组在每个超级块中 唯一编号的 inode、空闲 inode 的数目以及 inode 总数、数据块总数、空闲数据块数和文 件系统的状态。文件系统的状态有两种:干净(当文件处于未更改状态时)和脏(当有未写 入磁盘的文件系统更改时)。超级块中的一个 inode 对应着一个文件。 除文件名外,inode 包含了有关文件的所有信息,其中包括: • 地址 • 类型 • 大小 • 所有者 • 对文件数据所在块的引用 • 文件最后一次修改和访问的时间戳。 可以使用以下命令查看文件的 inode: $ ls -i 正如前面已经提到的,inode 只在超级块中唯一编号,且每个分区只有一个超级块,这就是 硬链接无法跨越多个分区的原因。 文件名通过 dentry 对象(用户看到的是目录文件)链接到一个 inode 编号。数据块保存 实际的文件数据。 Linux 支持任何具备 VFS 定义的基本函数集的文件管理系统。对于像 vfat 这样的文件管 理系统,Linux 项目提供了它自己的设备驱动程序。 您可以从以下输出中看到,不同的文件管理系统可以存在于同一系统的不同分区上。 df -T Filesystem Type 1K Blocks Used Available Use% Mounted on /dev/hda6 reiserfs 4195632 2015020 2180612 49% / /dev/hda5 ext2 14607 3778 10075 8% /boot /dev/hda9 reiserfs 937372 202368 735004 22% /home /dev/hda8 reiserfs 6297248 3882504 2414744 62% /opt shmfs shm 256220 0 256220 0% /dev/shm /dev/hda1 vfat 2159992 1854192 305800 86% /windows/C 当前,Oracle 用户遇到的最常用的文件管理系统是 ext2/ext3、ReiserFS(不受 Oracle 支 持)和 OCFS。以下是非 Oracle 分区主要特性的汇总表。 特性 ext2 ext3 ReiserFS3.6(不受 Oracle 支持) 最大分区大小 4TB 4TB 16TB 最大文件大小 2GB-4GB 2GB-4GB 8TB 块大小 1KB-4KB 1KB-4KB 只有 4KB 日志功能 无 是 有 崩溃后重新启动 慢 快 非常快 用于恢复清除文件 的工具 有 有 无 崩溃后数据的状态 良好 非常好 一般 ACL 支持 有 有 无 稳定性 优秀 良好 良好 由于 ext2 和 ReiserFS 均提供了用户级安全性以及更高效的磁盘空间使用等特性,因此 尽管至少 ext2 确实提供了碎片整理工具,但几乎不需要这些工具。Ext2 是传统的、事实 上的标准 Linux 文件管理系统。它是 Red Hat 版本 Linux 的默认文件管理系统,而 ReiserFS 是 SUSE 的默认文件管理系统。ext2/ext3 的最大文件大小实际上取决于所选择 的块大小和硬件体系结构。ext2 的许多特性之一是它允许由磁盘分区决定块大小。 ReiserFS 技术允许在磁盘分区中使用可变的文件大小(这是因为它基于平衡树技术而不是 基于范围),因此除日志功能以外,高效的空间使用也是其设计所固有的。 日志文件管理系统(如 ext3 和 ReiserFS)记录对文件系统元数据:inode、空闲块分配映 射、inode 映射等的更改。当系统崩溃时,可以通过此方式检查日志以获得最近修改的元数 据,从而确保快速恢复文件系统。此功能对大型系统尤其重要。如果没有此功能,则在出现 硬件故障后,对于 ext2 等文件系统,需要在重新启动时运行 fsck 工具。对于大型文件系 统,此过程可能要花费几个小时。 当然,记录日志需要付出一定的代价,即需要在处理时间和恢复之间寻求一个平衡。对于 ext3,可以选择日志记录模式,这些模式允许在寻求上述平衡时做出某些自主决定。journal 模式(记录所有文件系统数据,包括数据块和元数据)是最安全但也是最慢的模式。默认模 式(称作 orderd)只记录元数据,但在写元数据之前先将数据块写入磁盘,从而在快速恢 复和快速性能之间取得折衷。最快的模式是 writeback 模式,该模式只记录元数据。在此 模式中,可能会丢失文件数据,但文件系统自身的完整性将得到维护。 在编写本文档期间,Reiser4 刚好已经发布。同 ReiserFS3.6 一样,ReiserFS4 只记录元 数据。与 ReiserFS3.6 不同的是,它基于新的舞蹈树算法,此算法似乎比平衡树算法更快。 它还可以扩展到使用无数个 CPU,而且在磁盘写入时具有内置加密和压缩功能。 OCFS 是 Oracle 真正应用程序集群 (RAC)、配置文件和数据库文件的指定文件管理系统。 其他文件(甚至是 Oracle 软件文件)将在 ext2/ext3 或 ReiserFS 上获得更好的性能。 当前,就文件管理系统的选择来讲,共同的见解是,除少数情况外,ext2、ext3 和 ReiserFS 之间的性能基本相当。然而在各种系统的拥护者之间却爆发了激烈的争论。ReiserFS 由于 能够处理可变的文件大小,因此更适用于具有许多小文件的系统。当然,如果您正要或计划 在 Linux 上运行 Oracle RAC,则可能需要为 Oracle 数据文件和配置文件安装 OCFS 或 使用自动存储管理 (ASM)。 除了最常见的 ext2/ext3 和 ReiserFS 文件系统以外,Linux 还支持其他本地文件系统, 包括 IBM 的 jsf 和 SGI 的 xfs。对传统 UNIX 文件系统的支持包括 SYSV、BSD、 Solaris、Next 和 Veritas VxFS。在各个级别支持的其他文件系统包括 • Microsoft 的 fat、ntfs、vfat、fat32 • IBM 的 hpfs (OS/2) • Apple 的 Macintosh hfs • Amiga 的 affs • Acorn 磁盘文件系统 adfs 请注意,Oracle 不支持某些文件系统,因此在使用这些文件系统时风险自负。 Linux 内核 2.6 版中最重要的新特性是访问控制列表 (ACL)。ACL 允许为一个或多个用户 列表或用户组授予对单个文件的使用权限。其他新特性包括: • 对 CD-ROM 上使用的 ISO 9660 文件系统的增强支持 • 可以存储在文件系统中的默认挂载选项 • 用于加速文件搜索的索引目录 • 对 Windows 的逻辑磁盘管理器(动态磁盘)的支持 • 能够将 ntfs 挂载为读/写,但写仍处于试验状态 • 对 fat12(旧 DOS 文件系统)的增强支持 处理分区和文件系统的工具 要添加一个新磁盘或调整现有磁盘的大小,您需要使用 fdisk 或 cfdisk。尽管 cfdisk 表 面上更易于使用,但 fdisk 已被证实最适用于磁盘分区。以下是有关使用 Linux 版本 fdisk 的几个原则,帮助您了解其可能得到的结果。 首先,以超级用户身份用设备名称调用 fdisk: # fdisk /dev/hda The number of cylinders for this disk is set to 1940. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help):m 可以通过使用 p(或 print)命令显示分区表。使用 n 或 new 命令可创建新分区;使用 w 或 write 命令可把新分区表写入磁盘。输入新命令后,fdisk 需要知道您要创建逻辑分区 还是主分区: Command (m for help):n Command action l logical (5 or over) p primary partition (1-4) l No free sectors available Command (m for help): 您可以看到,如果没有任何空闲空间(如上所示),则您将收到以上消息。但如果有空闲空 间,则 fdisk 需要知道您想要的分区号。如果输入“p”(代表主分区),则您将需要做出以 下选择。 Partition number (1-4): 对于逻辑分区,您将需要做出以下选择 Partition number (5 or over): 然后,您可以输入新分区的起始柱面号。fdisk 将推荐一个默认编号,如下所示: First cylinder (1-1940, default 1):1 您可以选择接受此编号。接下来,您需要输入最后一个柱面或分区大小: Last cylinder or +sizeM or +sizeK(1-1940), default 5721:1G 此刻,fdisk 将假设这是一个常规 Linux 分区(由分区表“ID”列中的十六进制数字 83 标 识)。可以使用 fdisk 中的 t 或 type 命令更改分区类型。可以使用 l 或 list 命令取 得 fdisk 的可用分区类型。以下是可用类型的部分列表: ID System 82 Linux swap 83 Linux 85 Linux extended 8e Linux LVM 必须注意,在您运行 write 命令之前,您在 fdisk 中执行的任何操作都将是临时的—如果 您出于任何原因要离开 fdisk,则这确实很有好处。 重新组织分区和文件管理系统 由于每个分区都包含各自的文件管理系统,因此调整分区大小涉及调整文件管理系统和分区 的大小。因此,可用的重新分区工具取决于所用文件管理系统的类型。对于 ext2/ext3 系 统,有一些可以选择将 resize2fs 与 fdisk、GNU Parted 或 Partition Magic 结合使用。 对于 ReiserFS,只能将 cfdisk 与 resize_resiszerfs 搭配使用,这是因为 GNU Parted 对于 ReiserFS 来说仍需改进。 resize2fs 和 resize_reiserfs 都可以调整文件管理系统的大小,并要求使用单独的分区大 小调整程序 — fdisk 或 cfdisk。我本人曾使用过 GNU Parted 对 ext2 分区进行重新分 区。这是一个相当容易使用的程序。GNU Parted 对 ReiserFS 的支持将来会变得更稳健。 Partition Magic 是一个用于 DOS 和 Windows 的商业程序,但如果从它附带的启动软盘 或 CD-ROM 运行,则可以用于 Linux ext2/ext3 分区。 尽管实际的命令取决于您所要更改到的系统,但更改文件管理系统的一般过程涉及 • 备份分区上的文件 • 删除分区中的文件 • 如果使用的是 fdisk,则可能删除一个分区以便为两个更小的分区留出空间 • 使用相应的命令生成新文件系统。例如,要创建 ext2 文件系统,您可以使用 $ mke2fs /dev/hda5 15088 _ ..I 可以随意指定块计数,如以上命令中的 15,088。以上事件序列的唯一例外是使用以下命令 从 ext2 系统移植到 ext3 系统 $tune2fs -j /dev/hda3 但仍应进行备份。 挂载分区 仅当具有超级用户权限的用户挂载了分区,分区才在 Linux 中可用。对于 /etc/fstab 文件 中列出的 Linux 分区,系统启动时会自动挂载。对于 CD-ROM 和软盘驱动器,通常只需 单击相应图标即可。 可与挂载选项结合使用的选项取决于文件管理系统。例如,您可以按如下方式指定 ext3 日 志选项: $ mount -t ext3 -o data=journaled /dev/hda9 /home 要拆下软盘或 CD-ROM,您需要在拆下它之前使用以下命令将其卸载 $ umount /media/floppy 在 Linux 2.4 之前,一个文件系统只能挂载一次。而现在,不限制文件系统的挂载次数。 结论 Linux 文件系统是一个多方面的概念。本讨论旨在作为根据您自己的需要对它的有用性和合 意性进行进一步研究的基础。 在本文的第 2 部分中,我们将介绍集群文件系统,其中包括 OCFS。 linux 文件系统基础 一 、linux 文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。 目录提供了管理文件的一个方便而有效的途径。 linux 使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整 而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。 /根目录 ┃ ┏━━━┳━━━━┳━━━━┳━━━╋━━━━┳━━━━┳━━━━┳━━━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ bin home dev etc lib sbin tmp usr var ┃ ┃ ┏━┻━┓ ┏━━━━┳━━━┳━┻━┳━━━┳━━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ rc.d cron.d X11R6 src lib local man bin ┃ ┃ ┃ ┏━━━┳━━━┳━┻━┳━━━━┓ ┃ ┏━━━╋━━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ init.d rc0.d rc1.d rc2.d …… linux bin lib src linux 采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。 微软的 DOS 和 windows 也是采用树型结构,但是在 DOS 和 windows 中这样的树型结构的 根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。但是在 linux 中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。从结构上讲,各个磁 盘分区上的树型目录不一定是并列的。 如果这样讲不好理解的话,我来举个例子: 有一块硬盘,分成了 4 个分区,分别是/;/boot;/usr 和 windows 下的 fat 对于/和/boot 或者/和/usr,它们是从属关系;对于/boot 和/usr,它们是并列关系。 如果我把 windows 下的 fat 分区挂载到/mnt/winc 下,(挂载??哦,别急,呵呵,一会就讲, 一会就讲。)那么对于/mnt/winc 和/usr 或/mnt/winc 和/boot 来说,它们是从属于目录树上没 有任何关系的两个分支。 因为 linux 是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文 件进行统一管理。但就是这一点让很多从 windows 转到 linux 的初学者感到头疼。下面列出 了 linux 下一些主要目录的功用。 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~user 表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似 windows 里的.dll 文件 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /root 系统管理员的主目录(呵呵,特权阶级) /mnt 系统提供这个目录是让用户临时挂载其他的文件系统。 /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫 什么.chk)就在这里 /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 /var 某些大文件的溢出区,比方说各种服务的日志文件 /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含: /usr/X11R6 存放 X window 的目录 /usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc linux 文档 /usr/include linux 下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码,linux 内核的源代码就放在/usr/src/linux 里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库 二 、linux 文件系统 文件系统指文件存在的物理空间,linux 系统中每个分区都是一个文件系统,都有自己的目 录层次结构。linux 会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统 的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自 己的文件系统。 linux 文件系统使用索引节点来记录文件信息,作用像 windows 的文件分配表。 索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘 中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点 数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中 的索引号,称为索引节点号。 linux 文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名 称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连 接。 对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件 名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。 可以用 ln 命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。 连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是: 硬连接:原文件名和连接文件名都指向相同的物理地址。 目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区) 文件在磁盘中只有一个拷贝,节省硬盘空间; 由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删 除。 符号连接:用 ln -s 命令建立文件的符号连接 符号连接是 linux 特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。 类似 windows 下的快捷方式。 可以删除原有的文件而保存连接文件,没有防止误删除功能。 这一段的的内容过于抽象,又是节点又是数组的,我已经尽量通俗再通俗了,又不好加例子 作演示。大家如果还是云里雾里的话,我也没有什么办法了,只有先记住,日后在实际应用 中慢慢体会、理解了。这也是我学习的一个方法吧。 三 、挂载文件系统 由上一节知道,linux 系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux 会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结 构。这里所说的“按一定方式”就是指的挂载。 将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂 载。把该子目录称为挂载点。 举个例子吧: 根分区: /根目录 ┃ ┏━━━━┳━━━━┳━━━━┳━━━━╋━━━┳━━━┳━━━━┳━━━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ bin home dev etc lib sbin tmp usr var ┃ ┏━┻━┓ ┃ ┃ rc.d cron.d ┃ ┏━━━┳━━━┳━┻━┳━━━━┓ ┃ ┃ ┃ ┃ ┃ init.d rc0.d rc1.d rc2.d …… /usr 分区 : usr ┃ ┏━━━━┳━━━╋━━━┳━━━┳━━━┓ ┃ ┃ ┃ ┃ ┃ ┃ X11R6 src lib local man bin ┃ ┃ ┃ ┏━━━╋━━━┓ ┃ ┃ ┃ ┃ linux bin lib src 挂载之后就形成了文章开始时的那个图。像不像挂上去的? 注意:1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前 的内容将不可用。 对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他 操作系统使用的文件系统的格式与 linux 使用的文件系统格式是不一样的。光盘是 ISO9660; 软盘是 fat16 或 ext2;windows NT 是 fat16、NTFS;windows98 是 fat16、fat32;windows2000 和 windowsXP 是 fat16、fat32、NTFS。挂载前要了解 linux 是否支持所要挂载的文件系统格 式。 挂载时使用 mount 命令: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有 -t<文件系统类型> 指定设备的文件系统类型,常见的有: minix linux 最早使用的文件系统 ext2 linux 目前常用的文件系统 msdos MS-DOS 的 fat,就是 fat16 vfat windows98 常用的 fat32 nfs 网络文件系统 iso9660 CD-ROM 光盘标准文件系统 ntfs windows NT 2000 的文件系统 hpfs OS/2 文件系统 auto 自动检测文件系统 -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab 中。常用的有 codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 nouser 使一般用户无法挂载 user 可以让一般用户挂载设备 提醒一下,mount 命令没有建立挂载点的功能,因此你应该确保执行 mount 命令时,挂载点 已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样 OK?) 例子:windows98 装在 hda1 分区,同时计算机上还有软盘和光盘需要挂载。 # mk /mnt/winc # mk /mnt/floppy # mk /mnt/cdrom # mount -t vfat /dev/hda1 /mnt/winc # mount -t msdos /dev/fd0 /mnt/floppy # mount -t iso9660 /dev/cdrom /mnt/cdrom 现在就可以进入/mnt/winc 等目录读写这些文件系统了。 要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常 随时更换的话,我想就不会犯这样的错误了:-> ) 如果你的 windows98 目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。 这就要用到 -o 参数里的 codepage iocharset 选项。codepage 指定文件系统的代码页,简体中 文中文代码是 936;iocharset 指定字符集,简体中文一般用 cp936 或 gb2312。 当挂载的文件系统 linux 不支持时,mount 一定报错,如 windows2000 的 ntfs 文件系统。可 以重新编译 linux 内核以获得对该文件系统的支持。关于重新编译 linux 内核,就不在这里 说了。 四 、自动挂载 每次开机访问 windows 分区都要运行 mount 命令显然太烦琐,为什么访问其他的 linux 分区 不用使用 mount 命令呢? 其实,每次开机时,linux 自动将需要挂载的 linux 分区挂载上了。那么我们是不是可以设定 让 linux 在启动的时候也挂载我们希望挂载的分区,如 windows 分区,以实现文件系统的自 动挂载呢? 这是完全可以的。在/etc 目录下有个 fstab 文件,它里面列出了 linux 开机时自动挂载的文件 系统的列表。我的/etc/fstab 文件如下: /dev/hda2 / ext3 defaults 1 1 /dev/hda1 /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 /dev/hda3 swap swap defaults 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 /dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0 /dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0 在/etc/fstab 文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的 文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还 望高手指点。 在最后两行是我手工添加的 windows 下的 C;D 盘,加了 codepage=936 和 ocharset=cp936 参数以支持中文文件名。参数 defaults 实际上包含了一组默认参数: rw 以可读写模式挂载 suid 开启用户 ID 和群组 ID 设置位 dev 可解读文件系统上的字符或区块设备 exec 可执行二进制文件 auto 自动挂载 nouser 使一般用户无法挂载 async 以非同步方式执行文件系统的输入输出操作 大家可以看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为 noauto。(如果你非 要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。) linux文件结构 根(root)文件系统 根文件系统一般应设置的小一些,因为它包含着重要的文件并且小一些的、不常修改的文件 系统就有一个更好的机会不被毁坏掉。一个毁坏的根文件系统通常意味着系统将不能启动 了,除非使用特殊方法(例如,从软盘启动),所以你不会去冒这个险的。 根目录通常不包含任何其他文件,除了可能会有些系统的标准启动引导用的影像文件,常称 为/vmlinuz。所有其它文件都在根文件系统的子目录中: /bin 在启动引导期间所需的命令,也可以被普通用户使用(大概在启动引导以后)。 /sbin 如同/bin,但该目录中的命令不是给普通用户使用的,尽管他们在需要和允许时可能可以使 用。 /etc 该目录中存储了与机器有关的配置文件。 /root 用户root的主目录。 /lib 根文件系统中的程序所需的共享库文件。 /lib/modules 可加载的内核模块,尤其是那些当从灾难中恢复启动引导系统时所需的模块文件(例如,网 络以及文件系统驱动程序)。 /dev 设备文件。 /tmp 临时文件。启动后程序运行时应使用/var/tmp,而 非/tmp,因为前者可能在有更大的空间 的磁盘上。 /boot 用于系统启动引导加载程序。例如,LILO。内核影像文件常常是放置在此的,而不是直接 放在根目录下。如果有许多内核影像文件,该目录很容易变得很大,因此此时将其置于一个 分离独立的文件系统更好些。另一个理由就是要确保内核影像文件被存于IDE磁盘的 1024 柱面以内。 /mnt 系统管理员为临时加载的加载点。程序不会自动地加载到/mnt的。/mnt可以再划分成子目 录(例如,/mnt/dosa可以是使用MS-DOS文件系统的软驱,/mnt/exta可以是一个ext2 文件系统)。 /proc,/usr,/var,/home 其它文件系统的加载点。 /etc目录 /etc目录包含有许多的文件。有些文件将在下面给予讨论。对于其他一些文件,你应该确定 它们是属于哪个程序的并且阅读所属程序的manual page。许多网络配置文件也包含于 /etc目录中,它们在网络管理员手册中给予了讨论。 /etc/rc 或 /etc/rc.d 或 /etc/rc?.d 在系统启动时或当改变了运行层时所要运行的描述(scripts)文件或者是描述文件的目录。 更多信息请参见有关init的章节。 /etc/passwd 用户数据库,所含的域有用户名、实际名称、该用户主目录、加密过的口令以及有关各个用 户的其它一些信息。该文件的格式在/man{passwd} manual page中有记载。 /etc/fdprm 软盘参数表。描述了不同软盘的格式样式。由setfdprm程序使用。有关信息请参阅setfdprm 的manual page。 /etc/fstab 列出了在系统启动时由mount –a命令自动加载的文件系统(在/etc/rc或者同等的启动文 件中)。在Linux中,该文件也包含由swapon –a自动使用的的交换区的信息。有关更详细 的信息,请参阅第四章中加载与卸载小节以及mount的manual page。 /etc/group 与/etc/passwd相类似,但描述了组的信息而非用户信息。详细信息请参见group的 manual page。 /etc/inittab init的配置文件。 /etc/issue getty输出的在login提示之前的信息。通常含有一小段叙述或是欢迎使用系统的消息。内容 由系统管理员决定。 /etc/magic file的配置文件。包含了基于file猜测出的文件类型的各种文件格式的描述。 /etc/motd 当日消息,在成功登录后将自动输出(显示)。其内容由系统管理员决定。常用于给所有用 户送信息,比如计划中的关机时间警告消息。 /etc/mtab 当前加载的文件系统的列表。最初是由启动引导描述文件所设置,并由mount命令自动地 更新。当需要一个已加载文件系统列表时被使用,例如,在df命令中使用。 /etc/shadow 安装了影子(shadow)口令软件的系统中的影子口令文件。影子口令将加密的口令从 /etc/passwd中移入/etc/shadow中;后者只有root用户才能读取。这使得破解口令变的 极其困难。 /etc/login.defs login命令的配置文件。 /etc/printcap 与/etc/termcap相类似,但用于打印机。具有不同的语法。 /etc/profile,/etc/csh.login,/etc/csh.cshrc Bourne或C shell在登录或启动时所执行的文件。系统管理员可以使用它为所有用户设置全 局设置值。对于各个shell参见各自的manual page。 /etc/securetty 确定安全终端,也即,确定能以root登录的终端。典型地,只有虚拟终端被列入,因此从调 制解调器或网络侵入系统以获得超级用户的权限几乎是不可能的事(至少是非常困难的)。 /etc/shells 列出可信赖的shell。Chsh命令允许用户改变他们的登录shell为shells中所列出的shell之 一。一台机器的提供FTP服务的服务器进程ftpd,将检查用户的shell是否在/etc/shells中被 列出。除非用户的shell被列出,否则系统将阻止该用户的登录。 /etc/termcap 终端性能数据库。描述了各种终端可被哪些“escape序列”所控制。取代那些直接输出的只 能工作于一种特殊牌子的终端上的逃逸序列(escape sequence)的程序已经写出,该程 序在/etc/termcap中查询正确的序列来工作。其结果就是许多程序能够在绝大多数的终端 上使用。详细信息参见termcap、curs_termcap以及terminfo的manual pages。 /dev目录 /dev目录包含所有设备的特殊设备文件。设备文件是以特定规则命名的文件;它们在设备 列表(见XXX)中进行了描述。设备文件是在系统安装时创建的,以后是由/dev/MAKEDEV 描述文件来创建。/dev/MAKEDEV.local是由系统管理员写的描述文件,用以建立仅是本 地的设备文件或连接文件(也即,那些不是标准MAKEDEV中的部分,如有些非标准设备驱 动程序的设备文件)。 /usr文件系统 / usr文件系统通常很大,因为所有的程序都安装于此。/usr中的所有文件通常来自Linux 发行版;本地安装的程序以及其它程序都放在/usr/local下。这使得从发行的一个新版中更 新系统成为可能,甚至完全更新至新版而无须再次安装所有的程序。下面列出了/usr中的一 些子目录(有些不很重要的子目录这里没有列出,详细信息参见FSSTND)。 /usr/x11R6 X窗口系统,所有文件。为了简化X的开发与安装,X的文件并没有集成到系统的其余部分 中去。在/usr/x11R6 下有个目录树,与/usr下的相类似。 /usr/X386 与/usr/X11R6 类似,但是是X11 版本 5。 /usr/bin 几乎所有的用户命令。有些命令在/bin或/usr/local/bin之中。 /usr/sbin 系统管理命令,是根文件系统不需要的,例如,绝大多数的服务器程序。 /usr/man,/usr/info,/usr/doc 随机手册(manual pages),GNU 信息文档以及各种其它的文档资料。 /usr/include C编程语言的头文件。为了一致性这本应位于/usr/lib之下,但是传统的习惯势力一直支持 这样的命名。 /usr/lib 程序和子系统的不变数据文件,包括一些场所配置文件。名字lib来源于library;最初的编程 子程序库是存于/usr/lib中。 /usr/local 这个地方用于存放本地安装的软件和其它一些文件。 /var文件系统 /var中包含着数据文件,当系统正常运行时,这些数据文件是变化的。对于每个系统来说 它是特定的,也即,不能在网络上与其它计算机共享这些数据文件。 /var/catman 用于格式化过的man pages的高速缓冲。Manual pages的原始资料通常是存放在 /usr/man/man*中的;有些manual pages是以预格式化的版本形式给出的,存储于 /usr/man/chat*中。其它一些manual pages在第一次使用时需要进行格式化处理;格式 化过的版本就被存于/var/man目录中,因此下一个人阅读同样的page时就不用等待格式 化过程了。(/var/catman的内容如同临时目录一样常常被清理的。) /var/lib 当系统正常运行时改动过的文件。 /var/local 安装于/usr/local中的程序的可变的数据(也即,由系统管理员安装的程序)。注意,即使 是本地安装的程序也应该使用/var的其它目录,例如,/var/lock。 /var/lock 上锁文件(锁定的文件)。许多程序遵循一个惯例,在/var/lock目录中建立上锁文件,用以 指出它们正在使用一个特殊的设备或文件。其它的程序将会注意到这一点并会避免再使用这 个特殊的设备或文件。 /var/log 各种程序的操作记录文件,特别是login(/var/log/wtmp,该文件中记录了所有的对系统 的登录和退出)以及syslog(/var/log/messages,这里存储了内核和系统程序所有的消 息)。/var/log中的文件经常会变得很大,需要定期进行清理。 /var/run 含有有关系统信息的文件,这些信息在系统下一次启动之前一直有效。例如, /var/run/utmp中含有当前登录的人的信息。 /var/spool 用于邮件、新闻、打印队列以及其它排队工作的目录。每个不同的spool在/var/spool下面 都有自己的子目录,例如,用户邮件箱在/var/spool/mail之中。 /var/tmp 大的临时文件或者需要比在/tmp中更长期存在的临时文件。(尽管系统管理员可能不允许很 陈旧的文件存在于/var/tmp中。) /proc文件系统 /proc文件系统是一个幻影文件系统,它在磁盘上并不存在。相反地,内核在内存中创建了 它。它用于提供有关系统的信息(最初是关于处理器的,因此有了此名称)。一些重要的文 件和目录在下面给出了说明。在manual page的proc中有更详细的说明。 /proc/1 是一个有关进程1信息的目录。每一个进程在/proc下面都有一个以其进程号为名称的目录。 /proc/cpuinfo 有关处理器的信息,如它的类型、制造日期、型号以及性能。 /proc/devices 配置进当前运行内核的设备驱动程序的列表。 /proc/dma 显示当前哪个DMA通道正在被使用。 /proc/filesystems 配置进内核的文件系统。 /proc/interrupts 显示哪些中断被使用以及它们使用了多少次。 /proc/ioports 显示此时那些端口正被使用着。 /proc/kcore 是系统物理内存的一个映像。它的大小与你的物理内存完全一样,但实际上并不真正占据那 样多的内存;他是在程序访问它时瞬时产生的。(记住:除非你将其复制到别的地方去,否 则它在/proc下不占用任何磁盘空间。) /proc/kmsg 内核输出的消息。这些消息同样也被送到了syslog中。 /proc/ksyms 内核的符号表。 /proc/loadavg 系统的“平均负荷”;是三个毫无意义的指示值,指示出此时系统有多少工作要做。 /proc/meminfo 物理内存和交换区使用情况的信息。 /proc/modules 此时哪些内核模块被加载。 /proc/net 网络协议的状态信息。 /proc/self 一个进程目录的符号连接,该进程属于在/proc中查看信息的程序的。当两个进程在观察 /proc时,它们取得不同的连接。这主要是为了方便程序观察它们自己的进程目录。 /proc/stat 有关系统的静态参数,如系统自启动以来的页故障(page faults)数。 /proc/uptime 系统启动的时间。 /proc/version 内核版本。 可以注意到,虽然以上文件基本上是易读的文本文件,这些文件的格式有时可能还是难于理 解。有许多命令就只是读入上述文件并格式化成利于理解的格式。例如,free程序读入 /proc/meminfo信息并将字节数转换成千字节(同时也加入了少量的信息)。 Linux 系统在使用光盘、软盘或 U 盘时,必须先执行挂载(mount)命令。挂载命令会将这 些存储介质指定成系统中的某个目录,以后直接访问相应目录即可读写存储介质上的数据。 1.挂载光盘 挂载光盘的命令如下: # mount -t is09660 /dev/cdrom /mnt/cdrom 该命令将光盘挂载到/mnt/cdrom 目录,使用“ls /mnt/cdrom”命令即可显示光盘中数据和 文件。 卸载光盘的命令如下: # umount /mnt/cdrom 2.挂载软盘 将软盘挂载到/mnt/floppy 目录的命令如下: # mount /dev/fd0 /mnt/floppy 卸载软盘的命令如下: #umount /mnt/floppy 3.挂载 U 盘挂载 U 盘相对复杂一些。 首先使用“fdisk -l”命令查看外挂闪存的设备号,一般为/dev/sda1。然后用“mkdir /mnt/usb”命令建立一个挂载 U 盘用的目录。之后使用如下命令挂载 FAT 格式的 U 盘: # mount -t msdos /dev/sda1 /mnt/usb 使用如下命令挂载 FAT32 格式的 U 盘: # mount -t vfat /dev/sda1 /mnt/usb 4.挂载外挂硬盘分区 挂载外挂硬盘分区(FAT32 格式)同样需要先用“fdisk -1”查看外挂的硬盘分区设备号, 假设为/dev/hda1。建立/mnt/vfat 挂载目录后,使用如下命令进行挂载: # mount -t vfat /dev/hda1 /mnt/vfat 注意,默认情况下 Linux 只允许 root 用户执行 mount 命令。如果想让一般用户也能挂 载,并且希望在系统启动时自动挂载光盘或软盘,需要修改/etc/fstab 配置文件,加入以下内 容: LABEL=/ / ext3 defaults 11 /dev/cdrom/mnt/cdrom iSo9660 auto,owner,kudzu,ro,user 00 /dev/fdo /mnt/floppy auto auto,owner,kudzu,ro,user 00 其中,“user”表示将 mount 命令赋予一般用户使用。 /etc/fstab 文件在 Linux 的帮助手册中讲得很详细,读者不妨看一看。 挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount 命令参数非常多,这里主要讲一下 今天我们要用到的。 命令格式: mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常 用类型有: 光盘或光盘镜像:iso9660 DOS fat16 文件系统:msdos Windows 9x fat32 文件系统:vfat Windows NT ntfs 文件系统:ntfs Mount Windows 文件网络共享:smbfs UNIX(LINUX) 文件网络共享:nfs 2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有: loop:用来把一个文件当成硬盘分区挂接上系统 ro:采用只读方式挂接设备 rw:采用读写方式挂接设备 iocharset:指定访问文件系统所用字符集 3.device 要挂接(mount)的设备。 4.dir 设备在系统上的挂接点(mount point)。 挂接光盘镜像文件 由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在 Windows 下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟光驱来使用。这样做有 许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问 题,随用随调十分方便;三、硬盘的读取速度要远远高于光盘的读取速度,CPU 占用率大大 降低。其实 linux 系统下制作和使用光盘镜像比 Windows 系统更方便,不必借用任何第三方 软件包。 1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。 #cp /dev/cdrom /home/sunky/mydisk.iso 或 #dd if=/dev/cdrom of=/home/sunky/mydisk.iso 注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件 /home/sunky/mydisk.iso 2、将文件和目录制作成光盘镜像文件,执行下面的命令。 #mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir 注:这条命令将/home/sunky/mydir 目录下所有的目录和文件制作成光盘镜像文件 /home/sunky/mydisk.iso,光盘卷标为:mydisk 3、光盘镜像文件的挂接(mount) #mkdir /mnt/vcdrom 注:建立一个目录用来作挂接点(mount point) #mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom 注:使用/mnt/vcdrom 就可以访问盘镜像文件 mydisk.iso 里的所有文件了。 挂接移动硬盘 对linux 系统而言,USB 接口的移动硬盘是当作 SCSI 设备对待的。插入移动硬盘之前, 应先用 fdisk –l 或 more /proc/partitions 查看系统的硬盘和硬盘分区情况。 [root at pldyrouter /]# fdisk -l Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes 255 heads, 63 sectors/track, 8924 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 4 32098+ de Dell Utility /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS /dev/sda3 2555 7904 42973875 83 Linux /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA) /dev/sda5 7905 8924 8193118+ 82 Linux swap 在这里可以清楚地看到系统有一块 SCSI 硬盘/dev/sda 和它的四个磁盘分区/dev/sda1 -- /dev/sda4, /dev/sda5 是分区/dev/sda4 的逻辑分区。接好移动硬盘后,再用 fdisk –l 或 more /proc/partitions 查看系统的硬盘和硬盘分区情况 [root at pldyrouter /]# fdisk -l Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes 255 heads, 63 sectors/track, 8924 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 4 32098+ de Dell Utility /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS /dev/sda3 2555 7904 42973875 83 Linux /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA) /dev/sda5 7905 8924 8193118+ 82 Linux swap Disk /dev/sdc: 40.0 GB, 40007761920 bytes 255 heads, 63 sectors/track, 4864 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 510 4096543+ 7 HPFS/NTFS /dev/sdc2 511 4864 34973505 f Win95 Ext'd (LBA) /dev/sdc5 511 4864 34973473+ b Win95 FAT32 大家应该可以发现多了一个 SCSI 硬盘/dev/sdc 和它的两个磁盘分区/dev/sdc1?、/dev/sdc2, 其中/dev/sdc5 是/dev/sdc2 分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1 和 /dev/sdc5。 #mkdir -p /mnt/usbhd1 #mkdir -p /mnt/usbhd2 注:建立目录用来作挂接点(mount point) #mount -t ntfs /dev/sdc1 /mnt/usbhd1 #mount -t vfat /dev/sdc5 /mnt/usbhd2 注:对ntfs 格式的磁盘分区应使用-t ntfs 参数,对 fat32 格式的磁盘分区应使用-t vfat 参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。 #mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1 #mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2 linux 系统下使用 fdisk 分区命令和 mkfs 文件系统创建命令可以将移动硬盘的分区制作 成 linux 系统所特有的 ext2、ext3 格式。这样,在 linux 下使用就更方便了。使用下面的命 令直接挂接即可。 #mount /dev/sdc1 /mnt/usbhd1 挂接 U 盘 和USB 接口的移动硬盘一样对 linux 系统而言 U 盘也是当作 SCSI 设备对待的。使用方 法和移动硬盘完全一样。插入 U 盘之前,应先用 fdisk –l 或 more /proc/partitions 查看系统 的硬盘和硬盘分区情况。 [root at pldyrouter root]# fdisk -l Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes 255 heads, 63 sectors/track, 8924 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 4 32098+ de Dell Utility /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS /dev/sda3 2555 7904 42973875 83 Linux /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA) /dev/sda5 7905 8924 8193118+ 82 Linux swap 插入U 盘后,再用 fdisk –l 或 more /proc/partitions 查看系统的硬盘和硬盘分区情况。 [root at pldyrouter root]# fdisk -l Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes 255 heads, 63 sectors/track, 8924 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 4 32098+ de Dell Utility /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS /dev/sda3 2555 7904 42973875 83 Linux /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA) /dev/sda5 7905 8924 8193118+ 82 Linux swap Disk /dev/sdd: 131 MB, 131072000 bytes 9 heads, 32 sectors/track, 888 cylinders Units = cylinders of 288 * 512 = 147456 bytes Device Boot Start End Blocks Id System /dev/sdd1 * 1 889 127983+ b Win95 FAT32 Partition 1 has different physical/logical endings: phys=(1000, 8, 32) logical=(888, 7, 31) 系统多了一个 SCSI 硬盘/dev/sdd 和一个磁盘分区/dev/sdd1,/dev/sdd1 就是我们要挂接的 U 盘。 #mkdir -p /mnt/usb 注:建立一个目录用来作挂接点(mount point) #mount -t vfat /dev/sdd1 /mnt/usb 注:现在可以通过/mnt/usb 来访问 U 盘了, 若汉字文件名显示为乱码或不显示,可以使 用下面的命令。 #mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb 挂接 Windows 文件共享 Windows 网络共享的核心是 SMB/CIFS,在 linux 下要挂接(mount)windows 的磁盘共享, 就必须安装和使用 samba 软件包。现在流行的 linux 发行版绝大多数已经包含了 samba 软件 包,如果安装 linux 系统时未安装 samba 请首先安装 samba。当然也可以到 www.samba.org 网站下载......新的版本是 3.0.10 版。 当windows 系统共享设置好以后,就可以在 linux 客户端挂接(mount)了,具体操作如下: # mkdir –p /mnt/samba 注:建立一个目录用来作挂接点(mount point) # mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba 注:administrator 和 pldy123 是 ip 地址为 10.140.133.23 windows 计算机的一个用户名 和密码,c$是这台计算机的一个磁盘共享 如此就可以在 linux 系统上通过/mnt/samba 来访问 windows 系统磁盘上的文件了。以上 操作在 redhat as server 3、redflag server 4.1、suse server 9 以及 windows NT 4.0、windows 2000、 windows xp、windows 2003 环境下测试通过。 挂接 UNIX 系统 NFS 文件共享 类似于 windows 的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是 NFS(网 络文件系统),下面我们就以 SUN Solaris2.8 和 REDHAT as server 3 为例简单介绍一下在 linux 下如何 mount nfs 网络共享。 在linux 客户端挂接(mount)NFS 磁盘共享之前,必须先配置好 NFS 服务端。 1、Solaris 系统 NFS 服务端配置方法如下: (1)修改 /etc/dfs/dfstab, 增加共享目录 share -F nfs -o rw /export/home/sunky (2)启动 nfs 服务 # /etc/init.d/nfs.server start (3)NFS 服务启动以后,也可以使用下面的命令增加新的共享 # share /export/home/sunky1 # share /export/home/sunky2 注:/export/home/sunky 和/export/home/sunky1 是准备共享的目录 2、linux 系统 NFS 服务端配置方法如下: (1)修改 /etc/exports,增加共享目录 /export/home/sunky 10.140.133.23(rw) /export/home/sunky1 *(rw) /export/home/sunky2 linux-client(rw) 注:/export/home/目录下的 sunky、sunky1、sunky2 是准备共享的目录,10.140.133.23、 *、linux- client 是被允许挂接此共享 linux 客户机的 IP 地址或主机名。如果要使用主机名 linux-client 必须在服务端主机/etc/hosts 文件里增加 linux-client 主机 ip 定义。格式如下: 10.140.133.23 linux-client (2)启动与停止 NFS 服务 /etc/rc.d/init.d/portmap start (在 REDHAT 中 PORTMAP 是默认启动的) /etc/rc.d/init.d/nfs start 启动 NFS 服务 /etc/rc.d/init.d/nfs stop 停止 NFS 服务 注:若修改/etc/export 文件增加新的共享,应先停止 NFS 服务,再启动 NFS 服务方 能使新增加的共享起作用。使用命令 exportfs -rv 也可以达到同样的效果。 3、linux 客户端挂接(mount)其他 linux 系统或 UNIX 系统的 NFS 共享 # mkdir –p /mnt/nfs 注:建立一个目录用来作挂接点(mount point) #mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs 注:这里我们假设 10.140.133.9 是 NFS 服务端的主机 IP 地址,当然这里也可以使用 主机名,但必须在本机/etc/hosts 文件里增加服务端 ip 定义。/export/home/sunky 为服务端共 享的目录。 如此就可以在 linux 客户端通过/mnt/nfs 来访问其它 linux 系统或 UNIX 系统以 NFS 方式 共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9 以及 Solaris 7、Solaris 8、Solaris 9 for x86&sparc 环境下测试通过。 实例解说 fdisk 使用方法 一、fdisk 的介绍; fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作 工具;本人译的不太好,也没有看中文文档;其实就是分区工具; fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如 linux 、 fat32、 linux 、linux swap 、fat16 以及其实类 Unix 类操作系统的文件系统等;当然我 们用 fdisk 对磁盘操作分区时,并不是一个终点,我们还要对分区进行格式化所需要的文 件系统;这样一个分区才能使用;这和 DOS 中的 fdisk 是类似的; 二、合理规划您的硬盘分区; 在操作分区之前,我们要明白硬盘分区一点理论,比如硬盘容量和分区大小的计算;对 一个硬盘如何规划分区等,请参考如下文档,谢谢; 《合理规划您的硬盘分区》 三、fdisk -l 查看硬盘及分区信息; 通过《合理规划您的硬盘分区》 ,我们知道主分区(包括扩展分区)的总个数不能超过 四个;也不能把扩展分区包围在主分区之间;根据这个原则,我们划分硬盘分区就比较 容易的多;也能为以后减少不必要的麻烦; 1、通过 fdisk -l 查看机器所挂硬盘个数及分区情况; [root@localhost beinan]# fdisk -l Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 9729 55617030 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux /dev/hda10 7752 9729 15888253+ 83 Linux Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux /dev/sda6 51 76 200781 83 Linux 通过上面的信息,我们知道此机器中挂载两个硬盘(或移动硬盘),其中一个是 hda 另一 个是 sda ;如果我们想查看单个硬盘情况,可以通过 fdisk -l /dev/hda1 或者 fdisk -l /dev/sda1 来操作;以 fdisk -l 输出的硬盘标识为准; 其中 hda 有三个主分区(包括扩展分区),分别是主分区 hda1 hda2 和 hda3(扩展分 区) ;逻辑分区是 hda5 到 hda10; 其中 sda 有两个主分区(包括扩展分区),分别是 hda1 和 hda2 (扩展分区);逻辑分 区是 sda5 hda6 ; 硬盘总容量=主分区(包括扩展分区)总容量 扩展分区容量=逻辑分区总容量 通过上面的例子,我们可以得知 hda=hda1+hda2+hda3,其中 hda3=hda5+hda6+hda7+hda8+hda9+hda10 ... ... 2、关于 fdisk -l 一些数值的说明; Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes 这个硬盘是 80G 的,有 255 个磁面;63 个扇区;9729 个磁柱;每个 cylinder(磁柱) 的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为); 分区序列 引导 开始 终止 容量 分区类型 ID 分区类型 Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 9729 55617030 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux /dev/hda10 7752 9729 15888253+ 83 Linux 说明: 硬盘分区的表示:在 Linux 是通过 hd*x 或 sd*x 表示的,其中 * 表示的是 a、b、c ... ... x 表示的数字 1、2、3 ... ... hd 大多是 IDE 硬盘;sd 大多是 SCSI 或移动存储; 引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区; Start (开始):表示的一个分区从 X cylinder(磁柱)开始; End (结束):表示一个分区到 Y cylinder(磁柱)结束; id 和 System 表示的是一个意思,id 看起来不太直观,我们要在 fdisk 一个分区时,通过 指定 id 来确认分区类型;比如 7表示的就 NTFS 分区;这个在 fdisk 中要通过 t 功能来 指定。下面的部份会提到; Blocks(容量):这是我翻译的,其实不准确,表示的意思的确是容量的意思,其单位是 K;一个分区容量的值是由下面的公式而来的; Blocks = (相应分区 End 数值 - 相应分区 Start 数值)x 单位 cylinder(磁柱)的容量 所以我们算一下 hda1 的 Blocks 的大小 : hda1 Blocks=(765-1)x8225.280=6284113.92 K = 6284.113.92M 注:换算单位以硬盘厂家提供的 10 进位算起,如果以操作系统二进制来算,这个分区容 量应该更少一些,得出的这个值和我们通过 fdisk -l 看到的 /dev/hda1 的值是大体相当 的,因为换算方法不一样,所以也不可能尽可能的精确;再加上分区时的一点损失之类, 有时或大或小是存在的; 我们查看分区大小或者文件的时候,还是用十进制来计算比较直观;推算办法是 byte 向 前推小数点三位就是 K ,K 单位的值向前推小数点三位就是 M,M 向前推小数点三位就 是 G... ... 一般也差不了多少;这么算就行; 3、估算一个存储设备是否被完全划分; 我们估算一个硬盘是否完全被划分,我们只要看 fdisk -l 输出的内容中的 cylinders(柱 体) 上一个分区的 End 和 下一个分区的 Start 是不是一个连续的数字,另外要看一下 每个硬盘设备的 fdisk -l 的开头部份,看一下他的 cylinders(柱体)的值; 比如 hda 设备,我们看到的是 9729 cylinders ;我们通过 hda 的分区表可以看到上一个 分区的 End 的值+1 就是下一个分区的 Start 的值;比如 hda2 的 Start 的值是 hda1 的 End 的值+1,这证明 hda1 和 hda2 中间没有空白分区,是连续的,以此类推;在 hda10, 我们看到 End 的值是 9729 ,而在 fdisk -l 头部信息中也有 9729 cylinders,证明这个硬 盘已经完全划分; Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux /dev/sda6 51 76 200781 83 Linux 我们再看看 sda 移动储是不是被完全划分了;sda 有 125 个 cylinders (柱体),有一 个主分区和一个扩展分区构成;在扩展分区中,我们看到 End 的值为 125,而这个移动硬 盘的 cylinder 也是 125,这能说明这个硬盘不可能再添加任何主分区了;根据我们上面所 说的 sda1 sda2 sda5 sda6 之间未有任何未划分空间,但 sda6 的 cylinders (柱体)的 End 值却是 76 ,而 sda 总的 cylinders (柱体)有 125 个,由此看来 sda 在 sda6 后 面有未划分区域; 至于 sda 有多少未划分空间,我们算一下就知道了;扩展分区总容量是 806400 K ,大 约是 806.400M 左右,而逻辑分区 sda5 和 sda6 的大小加起来是 400M 左右,所以还 仍有 400M 左右未划分空间,并且只能划分为链逻辑分区; 四、fdisk 对硬盘及分区的操作,进入 fdisk 对硬盘操作阶段; 我们可以对硬盘进行分区操作,前提是您把 fdisk -l 弄明白了;通过 fdisk -l ,我们能找 出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是 /dev/hda ,另一个是/dev/sda ; fdisk 操作硬盘的命令格式如下: [root@localhost beinan]# fdisk 设备 比如我们通过 fdisk -l 得知 /dev/hda 或者 /dev/sda 设备;我们如果想再添加或者删除 一些分区,可以用 [root@localhost beinan]# fdisk /dev/hda 或 [root@localhost beinan]# fdisk /dev/sda 注 在以后的例子中,我们要以 /dev/sda 设备为例,来讲解如何用 fdisk 来操作添加、 删除分区等动作; 1、fdisk 的说明; 当我们通过 fdisk 设备,进入相应设备的操作时,会发现有如下的提示;以 fdisk /dev/sda 设备为例,以下同; [root@localhost beinan]# fdisk /dev/sda Command (m for help): 在这里按 m ,就会输出帮助; Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition 注:这是删除一个分区的动作; l list known partition types 注:l 是列出分区类型,以供我们设置相应分区的类型; m print this menu 注:m 是列出帮助信息; n add a new partition 注:添加一个分区; o create a new empty DOS partition table p print the partition table 注:p 列出分区表; q quit without saving changes 注:不保存退出; s create a new empty Sun disklabel t change a partition's system id 注:t 改变分区类型; u change display/entry units v verify the partition table w write table to disk and exit 注:把分区表写入硬盘并退出; x extra functionality (experts only) 注:扩展应用,专家功能; 其实我们常用的只有注有中文的,其它的功能我们不常用(呵,主要是我不会用,否则 早会卖弄一下了);x 扩展功能,也不是常用的;一般的情况下只要懂得 d l m p q t w 就 行了; 下面以实例操作来详述,没有例子没有办法就,新手也看不懂; 2、列出当前操作硬盘的分区情况,用 p; Command (m for help): p Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux /dev/sda6 51 76 200781 83 Linux 3、通过 fdisk 的 d 指令来删除一个分区; Command (m for help): p 注:列出分区情况; Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux /dev/sda6 51 76 200781 83 Linux Command (m for help): d 注:执行删除分区指定; Partition number (1-6): 6 注:我想删除 sda6 ,就在这里输入 6 ; Command (m for help): p 注:再查看一下硬盘分区情况,看是否删除了? Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux Command (m for help): 警告:删除分区时要小心,请看好分区的序号,如果您删除了扩展分区,扩展分区之下 的逻辑分区都会删除;所以操作时一定要小心;如果知道自己操作错了,请不要惊慌, 用 q 不保存退出;切记切记!!!!在 分区操作错了之时,千万不要输入 w 保存退出!!! 4、通过 fdisk 的 n 指令增加一个分区; Command (m for help): p Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux Command (m for help): n 注:增加一个分区; Command action l logical (5 or over) 注:增加逻辑分区,分区编号要大于 5;为什么要大于 5, 因为已经有 sda5 了; p primary partition (1-4) 注:增加一个主分区;编号从 1-4 ;但 sda1 和 sda2 都被占用,所以只能从 3 开始; p Partition number (1-4): 3 No free sectors available 注:失败中,为什么失败? 注:我试图增加一个主分区,看来是失败了,为什么失败?因为我们看到主分区+扩展分 区把整个磁盘都用光了,看扩展分区的 End 的值,再看一下 p输出信息中有 125 cylinders;最好还是看前面部份;那里有提到; 所以我们只能增加逻辑分区了; Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l 注:在这里输入 l,就进入划分逻辑分区阶段了; First cylinder (51-125, default 51): 注:这个就是分区的 Start 值;这里最好直接按 回车,如果您输入了一个非默认的数字,会造成空间浪费; Using default value 51 Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个 是定义分区大小的,+200M 就是大小为 200M ;当然您也可以根据 p 提示的单位 cylinder 的大小来算,然后来指定 End 的数值。回头看看是怎么算的;还是用+200M 这个办法来添加, 这样能直观一点。如果您想添加一个 10G 左右大小的分区,请输入 +10000M ; Command (m for help): 5、通过 fdisk 的 t 指令指定分区类型; Command (m for help): t 注:通过 t 来指定分区类型; Partition number (1-6): 6 注:要改变哪个分区类型呢?我指定了 6,其实也就是 sda6 Hex code (type L to list codes):L 注:在这里输入 L,就可以查看分区类型的 id 了; Hex code (type L to list codes): b 注:如果我想让这个分区是 W95 FAT32 类型的,通 过 L 查看得知 b 是表示的是,所以输入了 b; Changed system type of partition 6 to b (W95 FAT32) 注:系统信息,改变成功;是否 是改变了,请用 p 查看; Command (m for help): p Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ c W95 FAT32 (LBA) /dev/sda2 26 125 806400 5 Extended /dev/sda5 26 50 201568+ 83 Linux /dev/sda6 51 75 201568+ b W95 FAT32 6、fdisk 的退出,用 q 或者 w; 其中 q是 不保存退出,w 是保存退出; Command (m for help): w 或 Command (m for help): q 7、一个添加分区的例子; 本例中我们会添加两个 200M 的主分区,其它为扩展分区,在扩展分区中我们添加两个 200M 大小的逻辑分区; Command (m for help): p 注:列出分区表; Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System Command (m for help): n 注:添加分区; Command action e extended p primary partition (1-4) p 注:添加主分区; Partition number (1-4): 1 注:添加主分区 1; First cylinder (1-125, default 1): 注:直接回车,主分区 1 的起始位置;默认为 1,默 认就好; Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-125, default 125): +200M 注:指定 分区大小,用+200M 来指定大小为 200M Command (m for help): n 注:添加新分区; Command action e extended p primary partition (1-4) p 注:添加主分区 Partition number (1-4): 2 注:添加主分区 2; First cylinder (26-125, default 26): Using default value 26 Last cylinder or +size or +sizeM or +sizeK (26-125, default 125): +200M 注:指定 分区大小,用+200M 来指定大小为 200M Command (m for help): n Command action e extended p primary partition (1-4) e 注:添加扩展分区; Partition number (1-4): 3 注:指定为 3 ,因为主分区已经分了两个了,这个也算主分 区,从 3 开始; First cylinder (51-125, default 51): 注:直接回车; Using default value 51 Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): 注:直接回车, 把其余的所有空间都给扩展分区; Using default value 125 Command (m for help): p Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ 83 Linux /dev/sda2 26 50 201600 83 Linux /dev/sda3 51 125 604800 5 Extended Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l 注:添加逻辑分区; First cylinder (51-125, default 51): Using default value 51 Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:添加 一个大小为 200M 大小的分区; Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l 注:添加一个逻辑分区; First cylinder (76-125, default 76): Using default value 76 Last cylinder or +size or +sizeM or +sizeK (76-125, default 125): +200M 注:添加 一个大小为 200M 大小的分区; Command (m for help): p 列出分区表; Disk /dev/sda: 1035 MB, 1035730944 bytes 256 heads, 63 sectors/track, 125 cylinders Units = cylinders of 16128 * 512 = 8257536 bytes Device Boot Start End Blocks Id System /dev/sda1 1 25 201568+ 83 Linux /dev/sda2 26 50 201600 83 Linux /dev/sda3 51 125 604800 5 Extended /dev/sda5 51 75 201568+ 83 Linux /dev/sda6 76 100 201568+ 83 Linux 然后我们根据前面所说通过 t 指令来改变分区类型; 最后不要忘记 w 保存退出; 五、对分区进行格式化,以及加载; 先提示一下;用 mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfatmkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令来格式化分区,比如我想格式化 sda6 为 ext3 文件系统,则输入; [root@localhost beinan]# mkfs.ext3 /dev/sda6 如果我想加载 sda6 到目前系统来存取文件,应该有 mount 命令,但首先您得建一个挂 载目录;比如 /mnt/sda6 ; [root@localhost beinan]# mkdir /mnt/sda6 [root@localhost beinan]# mount /dev/sda6 /mnt/sda6 [root@localhost beinan]# df -lh Filesystem 容量 已用 可用 已用% 挂载点 /dev/hda8 11G 8.4G 2.0G 81% / /dev/shm 236M 0 236M 0% /dev/shm /dev/hda10 16G 6.9G 8.3G 46% /mnt/hda10 /dev/sda6 191M 5.6M 176M 4% /mnt/sda6 这样我们就能进入 /mnt/sda6 目录,然后存取文件了; 具体的权限方法,以及 mount 更详细的用法,在以后我会专门写一个帖子;在一帖中放 下所有的内容实在有点为难; 后记: 在本文写完后,我还要写另一个分区工具 parted;在 Fedora 4.0 中 cfdisk 被去掉了; 所以不想介绍这个工具; 一、系统引导过程简介 系统引导过程主要由以下几个步骤组成(以硬盘启动为例) 1、 开机; 2、 BIOS 加电自检(POST---Power On Self Test),内存地址为 0fff:0000; 3、 将硬盘第一个扇区(0 头 0 道 1 扇区,也就是 Boot Sector)读入内存地址 0000:7c00 处; 4、 检查(WORD)0000:7dfe 是否等于 0xaa55.若不等于则转去尝试其他介质;如果没有其 他启动介质,则显示 ”No ROM BASIC” ,然后死机; 5、 跳转到 0000:7c00 处执行 MBR 中的程序; 6、 MBR 先将自己复制到 0000:0600 处,然后继续执行; 7、 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或者不止一个活动分区, 则停止; 8、 将活动分区的第一个扇区读入内存地址 0000:7c00 处; 9、 检查(WORD)0000:7dfe 是否等于 0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动; 10、 跳转到 0000:7c00 处继续执行特定系统的启动程序; 11、 启动系统. 以上步骤中(2),(3),(4),(5)步由 BIOS 的引导程序完成;(6),(7),(8),(9),(10)步由 MBR 中的 引导程序完成. 一般多系统引导程序(如 Smart Boot Manager, BootStar, PQBoot 等)都是将标准主引导记 录替换成自己的引导程序,在运行系统启动程序之前让用户选择想要启动的分区.而某些 系统自带的多系统引导程序(如 LILO,NT Loader 等)则可以将自己的引导程序放在系统所 处分区的第一个扇区中,在 Linux 中即为两个扇区的 SuperBlock. 注:以上步骤中使用的是标准的 MBR,多系统引导程序的引导过程与此不同. 二、硬盘结构及参数 3D 参数(Disk Geometry):CHS(Cylinder/Head/Sector) C-Cylinder 柱面数表示硬盘每面盘 片上有几条磁道,最大为 1024(用 10 个二进制位存储);H-Head 磁头数表示硬盘总共有几 个磁头,也就是几面盘片,最大为 256(用 8 个二进制位存储);S-Sector 扇区数表示每条磁道 上有几个扇区,最大为 63(用 6 个二进制位存储). 1、引导扇区 Boot Sector 组成 Boot Sector也就是硬盘的第一个扇区,它由MBR(Master Boot Record), DPT(Disk Partition Table) 和 Boot Record ID 三部分组成. MBR 又称为主引导记录,占用 Boot Sector 的前 446 个字节(0~0x1BD),存放系统主引导程序(它负责从活动分区中装载并且运行系统引导 程序). DPT 即主分区表占用 64 个字节(0x1BE~0x1FD),记录磁盘的基本分区信息.主分区 表分为四个分区项,每项 16 个字节,分别记录每个主分区的信息(因此最多可以有四个主分 区). Boot Record ID 即引导区标记占用两个字节(0x1FE~0x1FF),对于合法引导区,它等于 0xaa55,这是判别引导区是否合法的标志). Boot Secor 具体结构如图: 2、分区表结构简介 分区表由四个分区项构成,每一项结构如下: BYTE State:分区状态,0=未激活,0x80=激活(注意此项); BYTE StartHead:分区起始磁头号; WORD StartSC:分区起始扇区和柱面号,底字节的底 6 位为扇区号,高 2 位为柱面号的第 9,10 位,高字节为柱面号的低 8 位; BYTE Type:分区类型,如 0x0B=FAT32,0x83=Linux 等,00 表示此项未用; BYTE EndHead:分区结束磁头号; WORD EndSC:分区结束扇区和柱面号,定义同前; DWORD Relative:在线性寻址方式下的分区相对扇区地址(对于基本分区即为绝对地址); DWORD Sectors:分区大小(总扇区数). 在 DOS 或 Windows 系统下,基本分区必须以柱面为单位划分(Sectors*Heads 个扇区),如 对于 CHS 为 764/256/63 的硬盘,分区的最小尺寸为 256*63*512/1048576=7.875MB. 由于硬盘的第一个扇区已经被引导扇区占用,所以一般来说,硬盘的第一个磁道(0 头 0 道) 的其余 62 个扇区是不会被分区占用的.某些分区软件甚至将第一个柱面全部空出来. 扩展分区结构如图: 合理规划您的硬盘分区 一、关于硬盘种类、物理几何结构及硬盘容量、分区大小计算; 1、硬盘种类、物理几何结构 硬盘的种类主要是 SCSI 、IDE 、以及现在流行的 SATA 等;任何一种硬盘的生产都要一 定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI 标准已经经历了 SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的 Ultral-160 就是基于 SCSI-3 标准的;IDE 遵循的是 ATA 标准,而目前流行的 SATA,是 ATA 标准的升级版本; IDE 是并口设备,而 SATA 是串口,SATA 的发展目的是替换 IDE; 硬盘的物理几何结构是由盘、磁盘表面、柱面、扇区组成,一个张硬盘内部是由几张碟 片叠加在一起,这样形成一个柱体面;每个碟片都有上下表面;磁头和磁盘表面接触从 而能读取数据; 2、硬盘容量及分区大小的算法; 我们通过 fdsik -l 可以发现如下的信息: Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 9729 55617030 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux /dev/hda10 7752 9729 15888253+ 83 Linux 其中 heads 是磁盘面;sectors 是扇区;cylinders 是柱面;每个扇区大小是 512byte, 也就是 0.5K; 通过上面的例子,我们发现此硬盘有 255 个磁盘面,有 63 个扇区,有 9729 个柱面;所 以整个硬盘体积换算公式应该是: 磁面个数 x 扇区个数 x 每个扇区的大小 512 x 柱面个数 = 硬盘体积 (单位 bytes) 所以在本例中磁盘的大小应该计算如下: 255 x 63 x 512 x 9729 = 80023749120 bytes 提示:由于硬盘生产商和操作系统换算不太一样,硬盘厂家以 10 进位的办法来换算,而 操作系统是以 2 进位制来换算,所以在换算成 M 或者 G 时,不同的算法结果却不一样; 所以我们的硬盘有时标出的是 80G,在操作系统下看却少几 M; 上面例子中,硬盘厂家算法 和 操作系统算数比较: 硬盘厂家: 80023749120 bytes = 80023749.120 K = 80023.749120 M (向大单位换 算,每次除以 1000) 操作系统: 80023749120 bytes = 78148192.5 K = 76316.594238281 M (向大单位换 算,每次除以 1024) 我们在查看分区大小的时候,可以用生产厂家提供的算法来简单推算分区的大小;把小 数点向前移动六位就是以 G 表示的大小;比如 hda1 的大小约为 6.144831G ; 二、关于硬盘分区划分标准及合理分区结构; 1、硬盘分区划分标准 硬盘的分区由主分区、扩展分区和逻辑分区组成;所以我们在对硬盘分区时要遵循这个 标准;主分区(包括扩展分区)的最大个数是四个,主分区(包含扩展分区)的个数硬 盘的主引导记录 MBR(Master Boot Recorder)决定的,MBR 存放启动管理程序(GRUB, LILO,NTLOARDER 等)和分区表记录。其中扩展分区也算一个主分区;扩展分区下可以 包含更多的逻辑分区;所以主分区(包括扩展分区)范围是从 1-4,逻辑分区是从 5 开始 的;比如下面的例子: Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 9729 55617030 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux /dev/hda10 7752 9729 15888253+ 83 Linux 通过这个例子,我们可以看到主分区有 3 个,从 hda1-hda3 ,扩展分区由 hda5-hda10 ; 此硬盘没有主分区 4,所以也没有显示主分区 hda4 ;但逻辑分区不可能从 4 开始,因为那 是主分区的位置,明白了吧; 2、硬盘设备(包括移动存储设备)在 Linux 或者其它类 Unix 系统的表示; IDE 硬盘在 Linux 或者其它类 Unix 系统的一般表示为 hd* ,比如 hda、hdb ... ... ,我 们可以通过 fdisk -l 来查看;有时您可能只有一个硬盘,在操作系统中看到的却是 hdb , 这与硬盘的跳线有关;另外 hdc 大多表示是光驱设备;如果您有两块硬盘,大多是 hda 和 hdb。在这方面说的太多也无用,还是以 fdisk -l 为准为好; SCSI 和 SATA 硬盘在 Linux 通常也是表示为 sd* ,比如 sda 、sdb ... ... 以 fdisk -l 为 准 移动存储设备在 linux 表示为 sd* ,比如 sda 、sdb ... ... 以 fdisk -l 为准 3、合理的规划分区; 关于一个磁盘的分区,一个磁盘应该有四个主分区,其中扩展也算一个主分区;存在以 下情况: 1)分区结构之一:四个主分区,没有扩展分区; [主|分区 1] [主分|区 2] [主|分区 3] [主|分区 4] 这种情况,如果您想在一个磁盘上划分五个以上分区,这样是行不通的; 三个主分区 一个扩展分区; [ 主 | 分区 1 ] [ 主 | 分区 2 ] [ 主 | 分区 3 ] [扩展分区] [逻辑|分区 5] [逻辑|分区 6] [逻辑|分区 7] [逻辑|分区 8] ... ... 这种情况行得通,而且分区的自由度比较大;分区也不受约束,能分超过 5 个分区;这 只是举一个例子; 2)最合理的的分区方式; 最合理的分区结构:主分区在前,扩展分区在后,然后在扩展分区中划分逻辑分区;主 分区的个数+扩展分区个数要控制在四个之内;比如下面的分区是比较好的; [主|分区 1] [主|分区 2] [主|分区 3] [扩展分区] | [逻辑|分区 5] [逻辑|分区 6] [逻辑|分区 7] [逻辑|分区 8] ... ... [主|分区 1] [主|分区 2] [扩展分区] | [逻辑|分区 5] [逻辑|分区 6] [逻辑|分区 7] [逻辑|分区 8] ... ... [主|分区 1] [扩展分区] | [逻辑|分区 5] [逻辑|分区 6] [逻辑|分区 7] [逻辑|分区 8] ... ... 最不合理的分区结构: 主分区包围扩展分区;比如下面的; [主|分区 1] [主|分区 2] [扩展分区] [主|分区 4] [空白未分区空间] | [逻辑|分区 5] [逻辑|分区 6] [逻辑|分区 7] [逻辑|分区 8] ... ... 这样 [主|分区 2] 和 [主|分区 4] 之间的 [扩展分区] 是有自由度,但[主|分区 4]后 的[空白未分区空间]怎么办?除非把主分区 4 完全利用扩展分区后的空间,否则您想在 主分区 4 后再划一个分区是不可能的,划分逻辑分区更不可能; 虽然类似此种办法也符 合一个磁盘四个主分区的标准,但这样主分区包围扩展分区的分区方法实在不可取; 我们根据这个标题,查看一下我们的例子,是不是符合这个标准呢? Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 9729 55617030 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux /dev/hda10 7752 9729 15888253+ 83 Linux 后记: 把分区基础写出来,主要是想让新手弟兄知道什么是合理的分区结构,如果把硬盘分区 规划好了,也为以学习省却了不少麻烦;在此文后,我计划写具体的分区工具介绍;这 也算一个基础知识的积累;虽然老手都会,但新手可能还是需要的; Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍 一、df 命令; df 是来自于 coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘 的使用情况以及文件系统被挂载的位置; 举例: [root@localhost beinan]# df -lh Filesystem 容量 已用 可用 已用% 挂载点 /dev/hda8 11G 6.0G 4.4G 58% / /dev/shm 236M 0 236M 0% /dev/shm /dev/sda1 56G 22G 35G 39% /mnt/sda1 我们从中可以看到,系统安装在/dev/hda8 ;还有一个 56G 的磁盘分区/dev/sda1 挂载在 /mnt/sda1 中; 其它的参数请参考 man df 二、fdsik fdisk 是一款强大的磁盘操作工具,来自 util-linux 软件包,我们在这里只说他如何查看磁 盘分区表及分区结构;参数 -l ,通过-l 参数,能获得机器中所有的硬盘的分区情况; [root@localhost beinan]# fdisk -l Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 7751 39728745 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux 在上面 Blocks 中,表示的是分区的大小,Blocks 的单位是 byte ,我们可以换算成 M, 比如第一个分区/dev/hda1 的大小如果换算成 M,应该是 6144831/1024=6000M,也就 是 6G 左右,其实没有这么麻烦,粗略的看一下把小数点向前移动三位,就知道大约的体 积有多大了; System 表示的文件系统,比如/dev/hda1 是 NTFS 格式的;/dev/hda2 表示是 fat32 格 式的文件系统;. 在此例中,我们要特别注意的是/dev/hda3 分区,这是扩展分区;他下面包含着逻辑分区, 其实这个分区相当于一个容器;从属于她的有 hda5,hda6,hda7,hda8,hda9 ; 我们还注意到一点,怎么没有 hda4 呢?为什么 hda4 没有包含在扩展分区?一个磁盘最 多有四个主分区; hda1-4 算都是主分区;hda4 不可能包含在扩展分区里,另外扩展分 区也算主分区;在本例中,没有 hda4 这个分区,当然我们可以把其中的一个分区设置为 主分区,只是我当时分区的时候没有这么做而已; 再仔细统计一下,我们看一看这个磁盘是不是还有空间?hda1+hda2+hda3=实际已经分 区的体积,所以我们可以这样算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),换算成 M 单位,小数点向前移三位,所以目前已经划分好的分区大约占 用体积是 62259.876(M),其实最精确的计算 62259876/1024=60800.67(M);而这个 磁盘大小是 80.0 GB (80026361856byte),其实实际大小也就是 78150.744(M);通 过我们一系列的计算,我们可以得出这个硬盘目前还有使用的空间;大约还有 18G 未分 区的空间; fdisk -l 能列出机器中所有磁盘的个数,也能列出所有磁盘分区情况;比如: [root@localhost beinan]# fdisk -l Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 7751 39728745 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux Disk /dev/sda: 60.0 GB, 60011642880 bytes 64 heads, 32 sectors/track, 57231 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Device Boot Start End Blocks Id System /dev/sda1 1 57231 58604528 83 Linux 通过上面我们可以知道此机器有两块硬盘,我们也可以指定 fdisk -l 来查看其中一个硬盘 的分区情况; [root@localhost beinan]# fdisk -l /dev/sda Disk /dev/sda: 60.0 GB, 60011642880 bytes 64 heads, 32 sectors/track, 57231 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Device Boot Start End Blocks Id System /dev/sda1 1 57231 58604528 83 Linux 通过上面情况可以知道,在/dev/sda 这个磁盘中,只有一个分区;使用量差不多是百分百 了; 我们还可以来查看 /dev/hda 的 [root@localhost beinan]# fdisk -l /dev/hda 自己试试看? 三、cfdisk 来自于 util-linux 的软件包; cfdisk 也是一款不错的分区工具;在有些发行版中,此工具已经从 util-linux 包中剔除; cfdisk 简单易用是他的特点;和 DOS 中的 fdisk 相似;在本标题中,我们只来解说如何 查看机器的中的磁盘分区状况及所用的文件系统等; 查看磁盘分区的用法 cfdisk -Ps 磁盘设备名; 比如 [root@localhost beinan]cfdisk -Ps [root@localhost beinan]cfdisk -Ps /dev/hda [root@localhost beinan]cfdisk -Ps Partition Table for /dev/hda First Last # Type Sector Sector Offset Length Filesystem Type (ID) Flag -- ------- ----------- ----------- ------ ----------- -------------------- ---- 1 Primary 0 23438834 63 23438835 Linux (83) Boot 2 Primary 23438835 156296384 0 132857550 Extended (05) None 5 Logical 23438835 155268224 63 131829390 Linux (83) None 6 Logical 155268225 156296384 63 1028160 Linux swap (82) None 我们只用的参数 -Ps,就列出了磁盘的分区情况;目前在 Slackware Debian Mandrake 等 主流发行版中存在 cfdisk ,而 fedora 4.0 把这个小工具剔除了;有点可惜;这是我在 Slackware 中操作的; 如果您这样操作,就更直观了; [root@localhost beinan]cfdisk 磁盘设备名 举例: [root@localhost beinan]cfdisk /dev/hda 您所看到的是如下的模式: cfdisk 2.12a Disk Drive: /dev/hda Size: 80026361856 bytes, 80.0 GB Heads: 255 Sectors per Track: 63 Cylinders: 9729 Name Flags Part Type FS Type [Label] Size (MB) ------------------------------------------------------------------------------ ------------- hda1 Boot Primary Linux ReiserFS 12000.69 hda5 Logical Linux ReiserFS 67496.65 hda6 Logical Linux swap 526.42 [Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ] [ Type ] [ Units ] [ Write ] Toggle bootable flag of the current partition 您进入了 cfdisk 的操作界面;用键盘移动指针到[Quit]就可以退出; 四、parted 功能不错的分区工具;在 Fedora 4.0 中有带,可以自己安装上;在此主题 中,我们只说如何查看磁盘的分区情况; 调用方法简单,parted 默认是打开的设备是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit [root@localhost beinan]# parted 使用 /dev/hda (parted) p /dev/hda 的磁盘几何结构:0.000-76319.085 兆字节 磁盘标签类型:msdos Minor 起始点 终止点 类型 文件系统 标志 1 0.031 6000.842 主分区 ntfs 启动 2 6000.842 22003.088 主分区 fat32 lba 3 22003.088 60800.690 扩展分区 5 22003.119 30004.211 逻辑分区 reiserfs 6 30004.242 40005.615 逻辑分区 reiserfs 7 40005.646 40774.350 逻辑分区 linux-swap 8 40774.381 52219.094 逻辑分区 ext3 9 52219.125 60800.690 逻辑分区 reiserfs 我们在 partd 的操作面上,用 p 就可以列出当前磁盘的分区情况,如果想要查看其它磁 盘,可以用 select 功能,比如 select /dev/sda ; 五、qtparted ,与 parted 相关的软件还有 qtparted ,也能查看到磁盘的结构和所 用的文件系统,是图形化的; [beinan@localhost ~]# qtparted 图形化的查看,一目了然; 六、sfdisk 也是一个分区工具,功能也多多;我们在这里只说他的列磁盘分区情况的功 能; [root@localhost beinan]# sfdisk -l 自己看看吧; sfdisk 有几个很有用的功能;有兴趣的弟兄不妨看看; 七、partx 也简要的说一说,有些系统自带了这个工具,功能也简单,和 fdisk 、parted、 cfdisk 来说不值一提;不用也罢; 用法: partx 设备名 [root@localhost beinan]# partx /dev/hda # 1: 63- 12289724 ( 12289662 sectors, 6292 MB) # 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB) # 3: 45062325-124519814 ( 79457490 sectors, 40682 MB) # 4: 0- -1 ( 0 sectors, 0 MB) # 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB) # 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB) # 7: 81931563- 83505869 ( 1574307 sectors, 806 MB) # 8: 83505933-106944704 ( 23438772 sectors, 12000 MB) # 9: 106944768-124519814 ( 17575047 sectors, 8998 MB) 八、查看目前机器中的所有磁盘及分区情况: [beinan@localhost ~]$ cat /proc/partitions major minor #blocks name 3 0 78150744 hda 3 1 6144831 hda1 3 2 16386300 hda2 3 5 8193118 hda5 3 6 10241406 hda6 3 7 787153 hda7 3 8 11719386 hda8 3 9 8787523 hda9 8 0 58605120 sda 8 1 58604528 sda1 九、mac-fdisk 这个工具主要是用在 Powerpc 版本的 Linux 中,咱们常用 X86 版本中 没有这个工具;这个只是介绍一下; Linux必学 60 个命令文件处理 Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、 文件存取、目录操作、进程管理、文件权限设定等。所以,在 Linux 系统上工作 离不开使用系统提供的命令。要想真正理解Linux 系统,就必须从Linux 命令学 起,通过基础的命令学习可以进一步理解 Linux 系统。 不同 Linux 发行版的命令数量不一样,但 Linux 发行版本最少的命令也有 200 多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作 用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、 umount、chsh、exit、last; ◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、 ln; ◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、 kill、crontab; ◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、 rlogin、rcp、finger、mail、 nslookup; ◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、 sudo ps、who; ◆ 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。 本文以 Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍 Linux 下的安装和 登录命令。 login 1.作用 login 的作用是登录系统,它的使用权限是所有用户。 2.格式 login [name][-p ][-h 主机名称] 3.主要参数 -p:通知 login 保持现在的环境参数。 -h:用来向远程登录的之间传输用户名。 如果选择用命令行模式登录 Linux 的话,那么看到的第一个Linux 命令就是 login:。 一般界面是这样的: Manddrake Linux release 9.1(Bamboo) for i586 renrel 2.4.21-0.13mdk on i686 / tty1 localhost login:root password: 上面代码中,第一行是Linux 发行版本号,第二行是内核版本号和登录的虚 拟控制台,我们在第三行输入登录名,按“Enter”键在Password 后输入账户密 码,即可登录系统。出于安全考虑,输入账户密码时字符不会在屏幕上回显,光 标也不移动。 登录后会看到下面这个界面(以超级用户为例): [root@localhost root]# last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月、日、时间和使用的虚拟控制台。 4.应用技巧 Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许 一个用户进行多次登录。这是因为 Linux 和许多版本的 Unix 一样,提供了虚拟 控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接 相连的监视器和键盘)进行多次登录。每个虚拟控制台可以看作是一个独立的工 作站,工作台之间可以切换。虚拟控制台的切换可以通过按下Alt 键和一个功能 键来实现,通常使用 F1-F6 。 例如,用户登录后,按一下“Alt+F2”键,用户就可以看到上面出现的 “login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+F1” 键,就可以回到第一个虚拟控制台。 一个新安装的 Linux 系统允许用户使用 “Alt+F1”到“Alt+F6”键来访问前六个虚拟控制台。虚拟控制台最有用的是, 当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作,关闭这个程 序。 shutdown 1.作用 shutdown 命令的作用是关闭计算机,它的使用权限是超级用户。 2.格式 shutdown [-h][-i][-k][-m][-t] 3.重要参数 -t:在改变到其它运行级别之前,告诉 init 程序多久以后关机。 -k:并不真正关机,只是送警告信号给每位登录者。 -h:关机后关闭电源。 -c:cancel current process 取消目前正在执行的关机程序。所以这个选 项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每 位使用者。 -F:在重启计算机时强迫 fsck。 -time:设定关机前的时间。 -m: 将系统改为单用户模式。 -i:关机时显示系统信息。 4.命令说明 shutdown 命令可以安全地将系统关机。有些用户会使用直接断掉电源的方 式来关闭 Linux 系统,这是十分危险的。因为 Linux 与 Windows 不同,其后台运 行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的 状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown 命令,系统管理员会通知所有登录的用户系统将要关闭,并且login 指令会被冻 结,即新的用户不能再登录。 halt 1.作用 halt 命令的作用是关闭系统,它的使用权限是超级用户。 2.格式 halt [-n] [-w] [-d] [-f] [-i] [-p] 3.主要参数说明 -n:防止 sync 系统调用,它用在用 fsck 修补根分区之后,以阻止内核用 老版本的超级块覆盖修补过的超级块。 -w:并不是真正的重启或关机,只是写 wtmp(/var/log/wtmp)纪录。 -f:没有调用 shutdown,而强制关机或重启。 -i:关机(或重启)前,关掉所有的网络接口。 -f:强迫关机,不呼叫 shutdown 这个指令。 -p: 当关机的时候顺便做关闭电源的动作。 -d:关闭系统,但不留下纪录。 4.命令说明 halt 就是调用 shutdown -h。halt 执行时,杀死应用进程,执行 sync(将 存于 buffer 中的资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停 止内核。若系统的运行级别为 0 或 6,则关闭系统;否则以 shutdown 指令(加 上-h 参数)来取代。 reboot 1.作用 reboot 命令的作用是重新启动计算机,它的使用权限是系统管理者。 2.格式 reboot [-n] [-w] [-d] [-f] [-i] 3.主要参数 -n: 在重开机前不做将记忆体资料写回硬盘的动作。 -w: 并不会真的重开机,只是把记录写到/var/log/wtmp 文件里。 -d: 不把记录写到/var/log/wtmp 文件里(-n 这个参数包含了-d)。 -i: 在重开机之前先把所有与网络相关的装置停止。 install 1.作用 install 命令的作用是安装或升级软件或备份数据,它的使用权限是所有用 户。 2.格式 (1)install [选项]... 来源 目的地 (2)install [选项]... 来源... 目录 (3)install -d [选项]... 目录... 在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已 存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建 所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须 的。 3.主要参数 --backup[=CONTROL]:为每个已存在的目的地文件进行备份。 -b:类似 --backup,但不接受任何参数。 -c:(此选项不作处理)。 -d,--directory:所有参数都作为目录处理,而且会创建指定目录的所 有主目录。 -D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第 一种使用格式中有用。 -g,--group=组:自行设定所属组,而不是进程目前的所属组。 -m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。 -o,--owner=所有者:自行设定所有者 (只适用于超级用户)。 -p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应 的目的地文件的时间属性。 -s,--strip:用 strip 命令删除 symbol table,只适用于第一及第二 种使用格式。 -S,--suffix=后缀:自行指定备份文件的<后缀>。 -v,--verbose:处理每个文件/目录时印出名称。 --help:显示此帮助信息并离开。 --version:显示版本信息并离开。 mount 1.作用 mount 命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab 中允许的使用者。 2.格式 mount -a [-fv] [-t vfstype] [-n] [-rw] [-F] device dir 3.主要参数 -h:显示辅助信息。 -v:显示信息,通常和-f 用来除错。 -a:将/etc/fstab 中定义的所有文件系统挂上。 -F:这个命令通常和-a 一起使用,它会为每一个 mount 的动作产生一个 行程负责执行。在系统需要挂上大量 NFS 文件系统时可以加快加载的速度。 -f:通常用于除错。它会使 mount 不执行实际挂上的动作,而是模拟整个 挂上的过程,通常会和-v 一起使用。 -t vfstype:显示被加载文件系统的类型。 -n:一般而言,mount 挂上后会在/etc/mtab 中写入一笔资料,在系统中没 有可写入文件系统的情况下,可以用这个选项取消这个动作。 4.应用技巧 在 Linux 和 Unix 系统上,所有文件都是作为一个大型树(以/为根)的一部 分访问的。要访问CD-ROM 上的文件,需要将CD-ROM 设备挂装在文件树中的某个 挂装点。如果发行版安装了自动挂装包,那么这个步骤可自动进行。在 Linux 中,如果要使用硬盘、光驱等储存设备 ,就得先将它加载,当储存设备挂上了 之后,就可以把它当成一个目录来访问。挂上一个设备使用 mount 命令。 在使 用 mount 这个指令时,至少要先知道下列三种信息:要加载对象的文件系统类型、 要加载对象的设备名称及要将设备加载到哪个目录下。 (1)Linux 可以识别的文件系统 ◆ Windows 95/98 常用的 FAT 32 文件系统:vfat ; ◆ Win NT/2000 的文件系统:ntfs ; ◆ OS/2 用的文件系统:hpfs; ◆ Linux 用的文件系统:ext2、ext3; ◆ CD-ROM 光盘用的文件系统:iso9660。 虽然 vfat 是指 FAT 32 系统,但事实上它也兼容 FAT 16 的文件系统类型。 (2)确定设备的名称 在 Linux 中,设备名称通常都存在/dev 里。这些设备名称的命名都是有规 则的,可以用“推理”的方式把设备名称找出来。例如,/dev/hda1 这个 IDE 设 备,hd 是 Hard Disk(硬盘)的,sd 是 SCSI Device,fd 是 Floppy Device(或是 Floppy Disk?)。a 代表第一个设备,通常 IDE 接口可以接上 4 个 IDE 设备(比如 4 块硬盘)。所以要识别 IDE 硬盘的方法分别就是 hda、hdb、hdc、hdd。hda1 中 的“1”代表 hda 的第一个硬盘分区 (partition),hda2 代表 hda 的第二主分区, 第一个逻辑分区从 hda5 开始,依此类推。 此外,可以直接检查 /var/log/messages 文件,在该文件中可以找到计算机开机后系统已辨认出来的 设备代号。 (3)查找挂接点 在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt 的空目录, 该目录就是专门用来当作挂载点(Mount Point)的目录。建议在/mnt 里建几个 /mnt/cdrom、/mnt/floppy、/mnt/mo 等目录,当作目录的专用挂载点。举例而 言,如要挂载下列 5 个设备,其执行指令可能如下 (假设都是 Linux 的 ext2 系 统,如果是 Windows XX 请将 ext2 改成 vfat): 软盘 ===>mount -t ext2 /dev/fd0 /mnt/floppy cdrom ===>mount -t iso9660 /dev/hdc /mnt/cdrom SCSI cdrom ===>mount -t iso9660 /dev/sdb /mnt/scdrom SCSI cdr ===>mount -t iso9660 /dev/sdc /mnt/scdr 不过目前大多数较新的 Linux 发行版本(包括红旗 Linux、中软 Linux、 Mandrake Linux 等)都可以自动挂装文件系统,但 Red Hat Linux 除外。 umount 1.作用 umount 命令的作用是卸载一个文件系统,它的使用权限是超级用户或 /etc/fstab 中允许的使用者。 2.格式 unmount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir 3.使用说明 umount 命令是 mount 命令的逆操作,它的参数和使用方法和 mount 命令是 一样的。Linux 挂装 CD-ROM 后,会锁定 CD—ROM,这样就不能用 CD-ROM 面板上 的 Eject 按钮弹出它。但是,当不再需要光盘时,如果已将/cdrom 作为符号链 接,请使用 umount/cdrom 来卸装它。仅当无用户正在使用光盘时,该命令才会 成功。该命令包括了将带有当前工作目录当作该光盘中的目录的终端窗口。 chsh 1.作用 chsh 命令的作用是更改使用者 shell 设定,它的使用权限是所有使用者。 2.格式 chsh [ -s ] [ -list] [ --help ] [ -v ] [ username ] 3.主要参数 -l:显示系统所有 Shell 类型。 -v:显示 Shell 版本号。 4.应用技巧 前面介绍了 Linux 下有多种 Shell,一般缺省的是 Bash,如果想更换 Shell 类型可以使用 chsh 命令。先输入账户密码,然后输入新 Shell 类型,如果操作 正确系统会显示“Shell change”。其界面一般如下: Changing fihanging shell for cao Password: New shell [/bin/bash]: /bin/tcsh 上面代码中,[ ]内是目前使用的 Shell。普通用户只能修改自己的 Shell, 超级用户可以修改全体用户的 Shell。要想查询系统提供哪些 Shell,可以使用 chsh -l 命令,见图 1 所示。 图 1 系统可以使用的 Shell 类型 从图 1 中可以看到,笔者系统中可以使用的 Shell 有 bash(缺省)、csh、 sh、tcsh 四种。 exit 1.作用 exit 命令的作用是退出系统,它的使用权限是所有用户。 2.格式 exit 3.参数 exit 命令没有参数,运行后退出系统进入登录界面。 last 1.作用 last 命令的作用是显示近期用户或终端的登录情况,它的使用权限是所有 用户。通过 last 命令查看该程序的 log,管理员可以获知谁曾经或企图连接系 统。 2.格式 1ast[—n][-f file][-t tty] [—h 节点][-I —IP][—1][-y][1D] 3.主要参数 -n:指定输出记录的条数。 -f file:指定用文件 file 作为查询用的 log 文件。 -t tty:只显示指定的虚拟控制台上登录情况。 -h 节点:只显示指定的节点上的登录情况。 -i IP:只显示指定的 IP 上登录的情况。 -1:用 IP 来显示远端地址。 -y:显示记录的年、月、日。 -ID:知道查询的用户名。 -x:显示系统关闭、用户登录和退出的历史。 动手练习 上面介绍了 Linux 安装和登录命令,下面介绍几个实例,动手练习一下刚才 讲过的命令。 1.一次运行多个命令 在一个命令行中可以执行多个命令,用分号将各个命令隔开即可,例如: #last -x;halt 上面代码表示在显示系统关闭、用户登录和退出的历史后关闭计算机。 2.利用 mount 挂装文件系统访问 Windows 系统 许多 Linux 发行版本现在都可以自动加载 Vfat 分区来访问 Windows 系统, 而 Red Hat 各个版本都没有自动加载 Vfat 分区,因此还需要进行手工操作。 mount 可以将 Windows 分区作为 Linux 的一个“文件”挂接到 Linux 的一个 空文件夹下,从而将 Windows 的分区和/mnt 这个目录联系起来。因此,只要访 问这个文件夹就相当于访问该分区了。首先要在/mnt 下建立 winc 文件夹,在命 令提示符下输入下面命令: #mount -t vfat /dev/hda1 /mnt/winc 即表示将 Windows 的 C 分区挂到 Liunx 的/mnt/winc 目录下。这时,在 /mnt/winc 目录下就可以看到 Windows 中 C 盘的内容了。使用类似的方法可以访 问 Windows 系统的 D、E盘。在Linux 系统显示 Windows 的分区一般顺序这样的: hda1为C盘、hda5为D盘、hda6 为 E 盘……以此类推。上述方法可以查看 Windows 系统有一个很大的问题,就是Windows 中的所有中文文件名或文件夹名全部显示 为问号“?”,而英文却可以正常显示。我们可以通过加入一些参数让它显示中 文。还以上面的操作为例,此时输入命令: #mount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc 现在它就可以正常显示中文了。 3.使用 mount 加挂闪盘上的文件系统 在 Linux 下使用闪盘非常简单。Linux 对 USB 设备有很好的支持,当插入闪 盘后,闪盘被识别为一个 SCSI 盘,通常输入以下命令: # mount /dev/sda1 /usb 就能够加挂闪盘上的文件系统。 小知识 Linux 命令与 Shell 所谓 Shell,就是命令解释程序,它提供了程序设计接口,可以使用程序来 编程。学习 Shell 对于 Linux 初学者理解 Linux 系统是非常重要的。Linux 系统 的 Shell 作为操作系统的外壳,为用户提供了使用操作系统的接口。Shell 是命 令语言、命令解释程序及程序设计语言的统称,是用户和Linux 内核之间的接口 程序。如果把 Linux 内核想象成一个球体的中心,Shell 就是围绕内核的外层。 当从 Shell 或其它程序向 Linux 传递命令时,内核会做出相应的反应。Shell 在 Linux 系统的作用和 MS DOS 下的 COMMAND.COM 和 Windows 95/98 的 explorer.exe 相似。Shell虽然不是系统核心的一部分,只是系统核心的一个外 延,但它能够调用系统内核的大部分功能。因此,可以说 Shell 是 Unux/Linux 最重要的实用程序。 Linux 中的 Shell 有多种类型,其中最常用的是 Bourne Shell(sh)、C Shell(csh)和 Korn Shell(ksh)。大多数 Linux 发行版本缺省的 Shell 是 Bourne Again Shell,它是 Bourne Shell 的扩展,简称 bash,与 Bourne Shell 完全向 后兼容,并且在 Bourne Shell 的基础上增加了很多特性。bash 放在/bin/bash 中,可以提供如命令补全、命令编辑和命令历史表等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编程接口,同时又有很友好的 用户界面。Linux 系统中 200 多个命令中有 40 个是 bash 的内部命令,主要包括 exit、less、lp、kill、 cd、pwd、fc、fg 等。 Linux 系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己 的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。 文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以 包括可执行的程序和其它非正文内容。 Linux 文件系统具有良好的结构,系统 提供了很多文件处理程序。这里主要介绍常用的文件处理命令。 file 1.作用 file 通过探测文件内容判断文件类型,使用权限是所有用户。 2.格式 file [options] 文件名 3.[options]主要参数 -v:在标准输出后显示版本信息,并且退出。 -z:探测压缩过的文件类型。 -L:允许符合连接。 -f name:从文件 namefile 中读取要分析的文件名列表。 4.简单说明 使用 file 命令可以知道某个文件究竟是二进制(ELF 格式)的可执行文件, 还 是 Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、 Shell 脚本、英文文本、二进制可执行文件、C 语言源文件、文本文件、DOS 的 可执行文件。 5.应用实例 如果我们看到一个没有后缀的文件 grap,可以使用下面命令: $ file grap grap: English text 此时系统显示这是一个英文文本文件。需要说明的是,file 命令不能探测包括 图形、音频、视频等多媒体文件类型。 mkdir 1.作用 mkdir 命令的作用是建立名称为 dirname 的子目录,与MS DOS下的 md 命令类似, 它的使用权限是所有用户。 2.格式 mkdir [options] 目录名 3.[options]主要参数 -m, --mode=模式:设定权限<模式>,与 chmod 类似。 -p, --parents:需要时创建上层目录;如果目录早已存在,则不当作错误。 -v, --verbose:每次创建新目录都显示信息。 --version:显示版本信息后离开。 4.应用实例 在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创 建的目录名是“tsk”,让所有用户都有 rwx(即读、写、执行的权限),那么可 以使用以下命令: $ mkdir -m 777 tsk grep 1.作用 grep 命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。 grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它 的使用权限是所有用户。 2.格式 grep [options] 3.主要参数 [options]主要参数: -c:只输出匹配行的计数。 -I:不区分大小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 pattern 正则表达式主要参数: \:忽略正则表达式中特殊字符的原有含义。 ^:匹配正则表达式的开始行。 $: 匹配正则表达式的结束行。 \<:从匹配正则表达式的行开始。 \>:到匹配正则表达式的行结束。 [ ]:单个字符,如[A]即 A 符合要求 。 [ - ]:范围,如[A-Z],即 A、B、C 一直到 Z 都符合要求 。 。:所有的单个字符。 * :有字符,长度可以为 0。 正则表达式是 Linux/Unix 系统中非常重要的概念。正则表达式(也称为 “regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果 一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹 配(Match)。这和DOS 中用户可以使用通配符“*”代表任意字符类似。在Linux 系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替 换”操作和其它功能。 4.应用实例 查询 DNS 服务是日常工作之一,这意味着要维护覆盖不同网络的大量 IP 地址。 有时 IP 地址会超过 2000 个。如果要查看nnn.nnn 网络地址,但是却忘了第二部 分中的其余部分,只知到有两个句点,例如 nnn nn..。要抽取其中所有 nnn.nnn IP 地址,使用[0-9 ]\{3 \}\.[0-0\{3\}\。含义是任意数字出现 3 次,后跟 句点,接着是任意数字出现 3 次,后跟句点。 $grep '[0-9 ]\{3 \}\.[0-0\{3\}\' ipfile 补充说明,grep 家族还包括 fgrep 和 egrep。fgrep 是 fix grep,允许查找字符 串而不是一个模式;egrep 是扩展 grep,支持基本及扩展的正则表达式,但不支 持\q 模式范围的应用及与之相对应的一些更加规范的模式。 dd 1.作用 dd 命令用来复制文件,并根据参数将数据转换和格式化。 2.格式 dd [options] 3.[opitions]主要参数 bs=字节:强迫 ibs=<字节>及 obs=<字节>。 cbs=字节:每次转换指定的<字节>。 conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。 count=块数目:只复制指定<块数目>的输入数据。 ibs=字节:每次读取指定的<字节>。 if=文件:读取<文件>内容,而非标准输入的数据。 obs=字节:每次写入指定的<字节>。 of=文件:将数据写入<文件>,而不在标准输出显示。 seek=块数目:先略过以 obs 为单位的指定<块数目>的输出数据。 skip=块数目:先略过以 ibs 为单位的指定<块数目>的输入数据。 4.应用实例 dd 命令常常用来制作 Linux 启动盘。先找一个可引导内核,令它的根设备指向 正确的根分区,然后使用 dd 命令将其写入软盘: $ rdev vmlinuz /dev/hda $dd if=vmlinuz of=/dev/fd0 上面代码说明,使用rdev 命令将可引导内核 vmlinuz 中的根设备指向/dev/hda, 请把“hda”换成自己的根分区,接下来用 dd 命令将该内核写入软盘。 find 1.作用 find 命令的作用是在目录中搜索文件,它的使用权限是所有用户。 2.格式 find [path][options][expression] path 指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径 列表,相互用空格分离,如果不写 path,那么默认为当前目录。 3.主要参数 [options]参数: -depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。 -maxdepth levels:表示至多查找到开始目录的第 level 层子目录。level 是 一个非负数,如果 level 是 0 的话表示仅在当前目录中查找。 -mindepth levels:表示至少查找到开始目录的第 level 层子目录。 -mount:不在其它文件系统(如 Msdos、Vfat 等)的目录和文件中查找。 -version:打印版本。 [expression]是匹配表达式,是 find 命令接受的表达式,find 命令的所有操作 都是针对表达式的。它的参数非常多,这里只介绍一些常用的参数。 —name:支持统配符*和?。 -atime n:搜索在过去 n 天读取过的文件。 -ctime n:搜索在过去 n 天修改过的文件。 -group grpoupname:搜索所有组为 grpoupname 的文件。 -user 用户名:搜索所有文件属主为用户名(ID 或名称)的文件。 -size n:搜索文件大小是 n 个 block 的文件。 -print:输出搜索结果,并且打印。 4.应用技巧 find 命令查找文件的几种方法: (1)根据文件名查找 例如,我们想要查找一个文件名是 lilo.conf 的文件,可以使用如下命令: find / -name lilo.conf find 命令后的“/”表示搜索整个硬盘。 (2)快速查找文件 根据文件名查找文件会遇到一个实际问题,就是要花费相当长的一段时间,特别 是大型 Linux 文件系统和大容量硬盘文件放在很深的子目录中时。如果我们知道 了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时 间。比如smb.conf 文件,从它的文件后缀“.conf”可以判断这是一个配置文件, 那么它应该在/etc 目录内,此时可以使用下面命令: find /etc -name smb.conf 这样,使用“快速查找文件”方式可以缩短时间。 (3)根据部分文件名查找方法 有时我们知道只某个文件包含有 abvd 这 4 个字,那么要查找系统中所有包含有 这 4 个字符的文件可以输入下面命令: find / -name '*abvd*' 输入这个命令以后,Linux 系统会将在/目录中查找所有的包含有 abvd这4个字 符的文件(其中*是通配符),比如 abvdrmyz 等符合条件的文件都能显示出来。 (4) 使用混合查找方式查找文件 find 命令可以使用混合查找的方法,例如,我们想在/etc目录中查找大于 500000 字节,并且在 24 小时内修改的某个文件,则可以使用-and (与)把两个查找参数 链接起来组合成一个混合的查找方式。 find /etc -size +500000c -and -mtime +1 mv 1.作用 mv 命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它 的使用权限是所有用户。该命令如同 DOS 命令中的 ren 和 move 的组合。 2.格式 mv[options] 源文件或目录 目标文件或目录 3.[options]主要参数 -i:交互方式操作。如果 mv 操作将导致对已存在的目标文件的覆盖,此时系统 询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件。 -f:禁止交互操作。mv 操作要覆盖某个已有的目标文件时不给任何指示,指定 此参数后 i 参数将不再起作用。 4.应用实例 (1)将/usr/cbu 中的所有文件移到当前目录(用“.”表示)中: $ mv /usr/cbu/ * . (2)将文件 cjh.txt 重命名为 wjz.txt: $ mv cjh.txt wjz.txt ls 1.作用 ls 命令用于显示目录内容,类似 DOS 下的 dir 命令,它的使用权限是所有用户。 2.格式 ls [options][2004108174040.htm] 3.options 主要参数 -a, --all:不隐藏任何以“.” 字符开始的项目。 -A, --almost-all:列出除了“ . ”及 “.. ”以外的任何项目。 --author:印出每个文件著作者。 -b, --escape:以八进制溢出序列表示不可打印的字符。 --block-size=大小:块以指定<大小>的字节为单位。 -B, --ignore-backups:不列出任何以 ~ 字符结束的项目。 -f:不进行排序,-aU 参数生效,-lst 参数失效。 -F, --classify:加上文件类型的指示符号 (*/=@| 其中一个)。 -g:like -l, but do not list owner。 -G, --no-group:inhibit display of group information。 -i, --inode:列出每个文件的 inode 号。 -I, --ignore=样式:不印出任何符合 Shell 万用字符<样式>的项目。 -k:即--block-size=1K。 -l:使用较长格式列出信息。 -L, --dereference:当显示符号链接的文件信息时,显示符号链接所指示的 对象,而并非符号链接本身的信息。 -m:所有项目以逗号分隔,并填满整行行宽。 -n, --numeric-uid-gid:类似-l,但列出 UID 及 GID 号。 -N, --literal:列出未经处理的项目名称,例如不特别处理控制字符。 -p, --file-type:加上文件类型的指示符号 (/=@| 其中一个)。 -Q, --quote-name:将项目名称括上双引号。 -r, --reverse:依相反次序排列。 -R, --recursive:同时列出所有子目录层。 -s, --size:以块大小为序。 4.应用举例 ls 命令是 Linux 系统使用频率最多的命令,它的参数也是 Linux 命令中最多的。 使用 ls 命令时会有几种不同的颜色,其中蓝色表示是目录,绿色表示是可执行 文件,红色表示是压缩文件,浅蓝色表示是链接文件,加粗的黑色表示符号链接, 灰色表示是其它格式文件。ls 最常使用的是 ls- l,见图 1 所示。 图 1 使用 ls-l 命令 文件类型开头是由 10 个字符构成的字符串。其中第一个字符表示文件类型,它 可以是下述类型之一:-(普通文件)、d(目录)、l(符号链接)、b(块设 备文件)、c(字符设备文件)。后面的 9 个字符表示文件的访问权限,分为 3 组,每组 3 位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三 组表示其他用户的权限。每一组的三个字符分别表示对文件的读(r)、写(w) 和执行权限(x)。对于目录,表示进入权限。s 表示当文件被执行时,把该文 件的 UID 或 GID 赋予执行进程的 UID(用户 ID)或 GID(组 ID)。t 表示设置标 志位(留在内存,不被换出)。如果该文件是目录,那么在该目录中的文件只能 被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,那么在该文件 执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地 装入该文件。接着显示的是文件大小、生成时间、文件或命令名称。 diff 1.作用 diff 命令用于两个文件之间的比较,并指出两者的不同,它的使用权限是所有 用户。 2.格式 diff [options] 源文件 目标文件 3.[options]主要参数 -a:将所有文件当作文本文件来处理。 -b:忽略空格造成的不同。 -B:忽略空行造成的不同。 -c:使用纲要输出格式。 -H:利用试探法加速对大文件的搜索。 -I:忽略大小写的变化。 -n --rcs:输出 RCS 格式。 cmp 1.作用 cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用 权限是所有用户。 2.格式 cmp[options] 文件名 3.[options]主要参数 -l: 将字节以十进制的方式输出,并方便将两个文件中不同的以八进制的方式输 出。 cat 1.作用 cat(“concatenate”的缩写)命令用于连接并显示指定的一个和多个文件的有 关信息,它的使用权限是所有用户。 2.格式 cat [options] 文件 1 文件 2…… 3.[options]主要参数 -n:由第一行开始对所有输出的行数编号。 -b:和-n 相似,只不过对于空白行不编号。 -s:当遇到有连续两行以上的空白行时,就代换为一行的空白行。 4.应用举例 (1)cat 命令一个最简单的用处是显示文本文件的内容。例如,我们想在命令 行看一下 README 文件的内容,可以使用命令: $ cat README (2)有时需要将几个文件处理成一个文件,并将这种处理的结果保存到一个单 独的输出文件。cat 命令在其输入上接受一个或多个文件,并将它们作为一个单 独的文件打印到它的输出。例如,把README 和 INSTALL 的文件内容加上行号(空 白行不加)之后,将内容附加到一个新文本文件 File1 中: $ cat README INSTALL File1 (3)cat 还有一个重要的功能就是可以对行进行编号,见图 2 所示。这种功能 对于程序文档的编制,以及法律和科学文档的编制很方便,打印在左边的行号使 得参考文档的某一部分变得容易,这些在编程、科学研究、业务报告甚至是立法 工作中都是非常重要的。 图 2 使用 cat 命令/etc/named.conf 文件进行编号 对行进行编号功能有-b(只能对非空白行进行编号)和-n(可以对所有行进行编 号)两个参数: $ cat -b /etc/named.conf ln 1.作用 ln 命令用来在文件之间创建链接,它的使用权限是所有用户。 2.格式 ln [options] 源文件 [链接名] 3.参数 -f:链结时先将源文件删除。 -d:允许系统管理者硬链结自己的目录。 -s:进行软链结(Symbolic Link)。 -b:将在链结时会被覆盖或删除的文件进行备份。 链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。 硬连接指通过索引节点来进行的连接。在Linux 的文件系统中,保存在磁盘分区 中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。 在 Linux 中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接 到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引 节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接, 只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是 说,文件才会被真正删除。 与硬连接相对应,Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link), 也叫软连接。软链接文件有点类似于Windows 的快捷方式。它实际上是特殊文件 的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的 位置信息。 动手联系 上面我们介绍了 Linux 文件处理命令,下面介绍几个实例,大家可以动手练习一 下刚才讲过的命令。 1.利用符号链接快速访问关键目录 符号链接是一个非常实用的功能。假设有一些目录或文件需要频繁使用,但由于 Linux 的文件和目录结构等原因,这个文件或目录在很深的子目录中。比如, Apache Web服务器文档位于系统的/usr/local/httpd/htdocs 中,并且不想每次 都要从主目录进入这样一个长的路径之中(实际上,这个路径也非常不容易记 忆)。 为了解决这个问题,可以在主目录中创建一个符号链接,这样在需要进入该目录 时,只需进入这个链接即可。 为了能方便地进入 Web 服务器(/usr/local/httpd/htdocs)文档所在的目录,在 主目录下可以使用以下命令: $ ln -s /usr/local/httpd/htdocs gg 这样每次进入 gg 目录就可访问 Web 服务器的文档,以后如果不再访问 Web 服务 器的文档时,删除 gg 即可,而真正的 Web 服务器的文档并没有删除。 2.使用 dd 命令将 init.rd 格式的 root.ram 内容导入内存 dd if=/dev/fd0 of=floppy.fd dd if=root.ram of=/dev/ram0 # 3.grep 命令系统调用 grep 是 Linux/Unix 中使用最广泛的命令之一,许多 Linux 系统内部都可以调用 它。 (1)如果要查询目录列表中的目录,方法如下: $ ls -l | grep '∧d' (2)如果在一个目录中查询不包含目录的所有文件,方法如下: $ ls -l | grep '∧[∧d]' (3)用 find 命令调用 grep,如所有 C 源代码中的“Chinput”,方法如下: $find /ZhXwin -name *.c -exec grep -q -s Chinput {} \;-print 对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还 是用户等都是文件,Linux 系统管理的命令是它正常运行的核心。熟悉了 Linux 常用的文件处理命令以后,这一讲介绍对系统和用户进行管理的命令。 df 1.作用 df 命令用来检查文件系统的磁盘空间占用情况,使用权限是所有用户。 2.格式 df [options] 3.主要参数 -s:对每个 Names 参数只给出占用的数据块总数。 -a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不 指定-s,也不指定-a,则只显示 Names 中的每一个目录及其中的各子目录所 占的磁盘块数。 -k:以 1024 字节为单位列出磁盘空间使用情况。 -x:跳过在不同文件系统上的目录不予统计。 -l:计算所有的文件大小,对硬链接文件则计算多次。 -i:显示 inode 信息而非块使用量。 -h:以容易理解的格式印出文件系统大小,例如 136KB、254MB、21GB。 -P:使用 POSIX 输出格式。 -T:显示文件系统类型。 4.说明 df 命令被广泛地用来生成文件系统的使用统计数据,它能显示系统中所有的文件 系统的信息,包括总容量、可用的空闲空间、目前的安装点等。 超级权限用户使用 df 命令时会发现这样的情况:某个分区的容量超过了 100%。 这是因为 Linux 系统为超级用户保留了 10%的空间,由其单独支配。也就是说, 对于超级用户而言,他所见到的硬盘容量将是 110%。这样的安排对于系统管理 而言是有好处的,当硬盘被使用的容量接近 100%时系统管理员还可以正常工 作。 5.应用实例 Linux 支持的文件系统非常多,包括 JFS、ReiserFS、ext、ext2、ext3、ISO9660、 XFS、Minx、vfat、MSDOS 等。使用 df -T 命令查看磁盘空间时还可以得到文 件系统的信息: #df -T 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/hda7 reiserfs 5.2G 1.6G 3.7G 30% / /dev/hda1 vfat 2.4G 1.6G 827M 66% /windows/C /dev/hda5 vfat 3.0G 1.7G 1.3G 57% /windows/D /dev/hda9 vfat 3.0G 2.4G 566M 82% /windows/E /dev/hda10 NTFS 3.2G 573M 2.6G 18% /windows/F /dev/hda11 vfat 1.6G 1.5G 23M 99% /windows/G 从上面除了可以看到磁盘空间的容量、使用情况外,分区的文件系统类型、挂载 点等信息也一览无遗。 top 1.作用 top 命令用来显示执行中的程序进程,使用权限是所有用户。 2.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数 d:指定更新的间隔,以秒计算。 q:没有任何延迟的更新。如果使用者有超级用户,则 top 命令将会以最高的优 先序执行。 c:显示进程完整的路径与名称。 S:累积模式,会将己完成或消失的子行程的 CPU 时间累积起来。 s:安全模式。 i:不显示任何闲置(Idle)或无用(Zombie)的行程。 n:显示更新的次数,完成后将会退出 top。 4.说明 top 命令是 Linux 系统管理的一个主要命令,通过它可以获得许多信息。这里我 们结合图 1 来说明它给出的信息。 图 1 top 命令的显示 在图 1 中,第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用 户数目、平均负载。第二行显示的是所有启动的进程、目前运行的、挂起 (Sleeping)的和无用(Zombie)的进程。第三行显示的是目前 CPU 的使用情况, 包括系统占用的比例、用户使用比例、闲置(Idle)比例。第四行显示物理内存的 使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。 第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速 缓存的大小。第六行显示的项目最多,下面列出了详细解释。 PID(Process ID):进程标示号。 USER:进程所有者的用户名。 PR:进程的优先级别。 NI:进程的优先级别数值。 VIRT:进程占用的虚拟内存值。 RES:进程占用的物理内存值。 SHR:进程使用的共享内存值。 S:进程的状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态,N 表示 该进程优先值是负数。 %CPU:该进程占用的 CPU 使用率。 %MEM:该进程占用的物理内存和总内存的百分比。 TIME+:该进程启动后占用的总的 CPU 时间。 Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完 整的命令行。 top 命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些 命令是通过快捷键启动的。 <空格>:立刻刷新。 P:根据 CPU 使用大小进行排序。 T:根据时间、累计时间排序。 q:退出 top 命令。 m:切换显示内存信息。 t:切换显示进程和 CPU 状态信息。 c:切换显示命令名称和完整命令行。 M:根据使用内存大小进行排序。 W:将当前设置写入~/.toprc 文件中。这是写 top 配置文件的推荐方法。 可以看到,top 命令是一个功能十分强大的监控系统的工具,对于系统管理员而 言尤其重要。但是,它的缺点是会消耗很多系统资源。 5.应用实例 使用 top 命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看 指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用 户的进程运行界面,见图 2 所示。 图 2 使用 top 命令监视指定用户 free 1.作用 free 命令用来显示内存的使用情况,使用权限是所有用户。 2.格式 free [-b|-k|-m] [-o] [-s delay] [-t] [-V] 3.主要参数 -b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。 -s delay:显示每隔多少秒数来显示一次内存使用情况。 -t:显示内存总和列。 -o:不显示缓冲区调节列。 4.应用实例 free 命令是用来查看内存使用情况的主要命令。和 top 命令相比,它的优点是使 用简单,并且只占用很少的系统资源。通过-S 参数可以使用 free 命令不间断 地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。 #free -b -s5 使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每 5 秒更新一次。 quota 1.作用 quota 命令用来显示磁盘使用情况和限制情况,使用权限超级用户。 2.格式 quota [-g][-u][-v][-p] 用户名 组名 3.参数 -g:显示用户所在组的磁盘使用限制。 -u:显示用户的磁盘使用限制。 -v:显示没有分配空间的文件系统的分配情况。 -p:显示简化信息。 4.应用实例 在企业应用中磁盘配额非常重要,普通用户要学会看懂自己的磁盘使用情况。要 查询自己的磁盘配额可以使用下面命令(下例中用户账号是 caojh): #quota caojh Disk quotas for user caojh(uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/hda3 58 200000 400000 41 500 1000 以上显示 ID 号为 502 的 caojh 账号,文件个数设置为 500~1000 个,硬盘空间 限制设置为 200MB~400MB。一旦磁盘配额要用完时,就需要删除一些垃圾文 件或向系统管理员请求追加配额。 at 1.作用 at 命令用来在指定时刻执行指定的命令序列。 2.格式 at [-V] [-q x] [-f file] [-m] time 3.主要参数 -V:显示标准错误输出。 -q:许多队列输出。 -f:从文件中读取作业。 -m:执行完作业后发送电子邮件到用户。 time:设定作业执行的时间。time 格式有严格的要求,由小时、分钟、日期和时 间的偏移量组成,其中日期的格式为 MM.DD.YY,MM 是分钟,DD 是日期,YY 是指年份。偏移量的格式为时间+偏移量,单位是 minutes、hours 和 days。 4.应用实例 #at -f data 15:30 +2 days 上面命令表示让系统在两天后的 17:30 执行文件 data 中指明的作业。 lp 1.作用 lp 是打印文件的命令,使用权限是所有用户。 2.格式 lp [-c][-d][-m][-number][-title][-p] 3.主要参数 -c:先拷贝文件再打印。 -d:打印队列文件。 -m:打印结束后发送电子邮件到用户。 -number:打印份数。 -title:打印标题。 -p:设定打印的优先级别,最高为 100。 4.应用实例 (1)使用 lp 命令打印多个文件 #lp 2 3 4 request id is 11 (3 file(s)) 其中 2、3、4 分别是文件名;“request id is 11 (3 file(s)) ”表示这是第 11 个打印 命令,依次打印这三个文件。 (2)设定打印优先级别 #lp lp -d LaserJet -p 90 /etc/aliases 通过添加“-p 90”,规定了打印作业的优先级为 90。它将在优先级低于 90 的打印 作业之前打印,包括没有设置优先级的作业,缺省优先级是 50 useradd 1.作用 useradd 命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。 2.格式 useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name 3.主要参数 -c:加上备注文字,备注文字保存在 passwd 的备注栏中。 -d:指定用户登入时的启始目录。 -D:变更预设值。 -e:指定账号的有效期限,缺省表示永久有效。 -f:指定在密码过期后多少天即关闭该账号。 -g:指定用户所属的群组。 -G:指定用户所属的附加群组。 -m:自动建立用户的登入目录。 -M:不要自动建立用户的登入目录。 -n:取消建立以用户名称为名的群组。 -r:建立系统账号。 -s:指定用户登入后所使用的 shell。 -u:指定用户 ID 号。 4.说明 useradd 可用来建立用户账号,它和 adduser 命令是相同的。账号建好之后,再 用 passwd 设定账号的密码。使用 useradd 命令所建立的账号,实际上是保存在 /etc/passwd 文本文件中。 5.应用实例 建立一个新用户账户,并设置 ID: #useradd caojh -u 544 需要说明的是,设定 ID 值时尽量要大于 500,以免冲突。因为 Linux 安装后会 建立一些特殊用户,一般 0 到 499 之间的值留给 bin、mail 这样的系统账号。 groupadd 1.作用 groupadd 命令用于将新组加入系统。 2.格式 groupadd [-g gid] [-o]] [-r] [-f] groupname 3.主要参数 -g gid:指定组 ID 号。 -o:允许组 ID 号,不必惟一。 -r:加入组 ID 号,低于 499 系统账号。 -f:加入已经有的组时,发展程序退出。 4.应用实例 建立一个新组,并设置组 ID 加入系统: #groupadd -g 344 cjh 此时在/etc/passwd 文件中产生一个组 ID(GID)是 344 的项目。 kill 1.作用 kill 命令用来中止一个进程。 2.格式 kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] 3.参数 -s:指定发送的信号。 -p:模拟发送信号。 -l:指定信号的名称列表。 pid:要中止进程的 ID 号。 Signal:表示信号。 4.说明 进程是 Linux 系统中一个非常重要的概念。Linux 是一个多任务的操作系统,系 统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是 内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好 地为用户服务。 Linux 操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交 互进程是由一个 Shell 启动的进程。交互进程既可以在前台运行,也可以在后台 运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护 进程)时 Linux 系统启动时启动的进程,并在后台运行。例如,httpd 是著名的 Apache 服务器的监控进程。 kill 命令的工作原理是,向 Linux 系统的内核发送一个系统操作信号和某个程序 的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在 top 命令中,我们看到系统运行许多进程,有时就需要使用 kill 中止某些进程来 提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是 当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程 序。此时使用的命令就是 kill,因为 kill 是大多数 Shell 内部命令可以直接调用的。 5.应用实例 (1)强行中止(经常使用杀掉)一个进程标识号为 324 的进程: #kill -9 324 (2)解除 Linux 系统的死锁 在 Linux 中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。 此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即 可。当 kill 处于 X-Window 界面时,主要的程序(除了崩溃的程序之外)一般都已 经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果 Mozilla 浏览器程序出现了锁死的情况,可以使用 kill 命令来中止所有包含有 Mozolla 浏览器的程序。首先用 top 命令查处该程序的 PID,然后使用 kill 命令 停止这个程序: #kill -SIGKILL XXX 其中,XXX 是包含有 Mozolla 浏览器的程序的进程标识号。 (3)使用命令回收内存 我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill 命令可 以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用 top 命 令发现一个无用 (Zombie) 的进程,此时可以使用下面命令: #kill -9 XXX 其中,XXX 是无用的进程标识号。 然后使用下面命令: #free 此时会发现可用内存容量增加了。 (4)killall 命令 Linux 下还提供了一个 killall 命令,可以直接使用进程的名字而不是进程标识号, 例如: # killall -HUP inetd crontab 1.作用 使用 crontab 命令可以修改 crontab 配置文件,然后该配置由 cron 公用程序在 适当的时间执行,该命令使用权限是所有用户。 2.格式 crontab [ -u user ] 文件 crontab [ -u user ] { -l | -r | -e } 3.主要参数 -e:执行文字编辑器来设定时程表,内定的文字编辑器是 vi。 -r:删除目前的时程表。 -l:列出目前的时程表。 crontab 文件的格式为“M H D m d cmd”。其中,M 代表分钟(0~59),H 代 表小时(0~23),D 代表天(1~31),m 代表月(1~12),d 代表一星期内 的天(0~6,0 为星期天)。cmd 表示要运行的程序,它被送入 sh 执行,这个 Shell 只有 USER、HOME、SHELL 三个环境变量。 4.说明 和 at 命令相比,crontab 命令适合完成固定周期的任务。 5.应用实例 设置一个定时、定期的系统提示: [cao @www cao]#crontab -e 此时系统会打开一个 vi 编辑器。 如果输入以下内容:35 17 * * 5 wall "Tomorrow is Saturday I will go CS",然后 存盘退出。这时在/var/spool/cron/目录下会生产一个 cao 的文件,内容如下: # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.2707 installed on Thu Jan 1 22:01:51 2004) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) 35 17 * * 5 wall "Tomorrow is Saturday I will play CS " 这样每个星期五 17:35 系统就会弹出一个终端,提醒星期六可以打打 CS 了! 显示结果见图 3 所示。 图 3 一个定时、定期的系统提示 动手练习 1.联合使用 kill 和 top 命令观察系统性能的变化 首先启动一个终端运行 top 命令,然后再启动一个终端使用 kill 命令,见图 4 所 示。 图 4 观察 kill 命令对 top 终端的影响 这时利用上面介绍的 kill 命令来中止一些程序: #kill SIGKILL XXX 然后再看 top 命令终端的变化,包括内存容量、CPU 使用率、系统负载等。注 意,有些进程是不能中止的,不过学习 Linux 命令时可以试试,看看系统有什么 反应。 2.使用 at 和 halt 命令定时关机 首先设定关机时间是 17:35,输入下面代码: #at 17:35 warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at>halt `-i -p at> job 6 at 2004-01-01 17:35 此时实际上就已经进入 Linux 系统的 Shell,并且编写一个最简单程序:halt -i -p。上面 Shell 中的文本结束符号表示按“Ctrl+D”组合键关闭命令,提交任务 退出 Shell。“Job 6 at 2004-01-01 17:35”表示系统接受第 6 个 at 命令,在“2004 -01-01 17:35”时执行命令:先把所有网络相关的装置停止,关闭系统后关闭 电源。 3.用 crontab 命令实现每天定时的病毒扫描 前面已经介绍了一个简单的 crontab 命令操作,这里看一些更重要的操作。 (1)建立一个文件,文件名称自己设定,假设为 caoproject: #crontab -e (2)文件内容如下: 05 09 * * * antivir 用 vi 编辑后存盘退出。antivir 是一个查杀 Linux 病毒的软件,当然需要时先安装 在系统中。 (3)使用 crontab 命令添加到任务列表中: #crontab caoproject 这样系统内所有用户在每天的 9 点 05 分会自动进行病毒扫描。 4.用 kill 使修改的配置文件马上生效 Windows 用户一般都知道,重要配置文件修改后往往都要重新启动计算机才能 使修改生效。而 Linux 由于采用了模块化设计,可以自己根据需要实时设定服务。 这里以网络服务 inetd 为例介绍一些操作技巧。 inetd 是一个监听守护进程,监听与提供互联网服务进程(如 rlogin、telnet、ftp、 rsh)进行连接的要求,并扩展所需的服务进程。默认情况下,inetd 监听的这些 daemon 均列于/etc /inetd.conf 文件中。编辑/etc/inetd.conf 文件,可以改变 inetd 启动服务器守护进程的选项,然后驱使 inetd 以 SIGHUP(signal 1)向当前的 inetd 进程发送信号,使 inetd 重读该文件。这一过程由 kill 命令来实现。 用 vi 或其它编辑器修改 inetd.conf 后,首先使用下面命令: #ps -ef |grep inetd 上面代码表明查询 inetd.conf 的进程号(PID),这里假设是 1426,然后使用下面 命令: # kill -1426 inetd 这样配置文件就生效了。 这一讲介绍的系统管理命令都是比较重要的,特别是 crontab 命令和 quota 命令 使用起来会有一定难度,需要多做一些练习。另外,使用 kill 命令要注意“-9“这 个参数,练习时最好不要运行一些重要的程序。 因为 Linux 系统是在 Internet 上起源和发展的,它与生俱来拥有强大的网络功能和丰富的 网络应用软件,尤其是 TCP/IP 网络协议的实现尤为成熟。Linux 的网络命令比较多,其中 一些命令像 ping、 ftp、telnet、route、netstat 等在其它操作系统上也能看到,但也有 一些 Unix/Linux 系统独有的命令,如 ifconfig、 finger、mail 等。Linux 网络操作命令 的一个特点是,命令参数选项和功能很多,一个命令往往还可以实现其它命令的功能。 ifconfig 1.作用 ifconfig 用于查看和更改网络接口的地址和参数,包括 IP 地址、网络掩码、广播地址,使 用权限是超级用户。 2.格式 ifconfig -interface [options] address 3.主要参数 -interface:指定的网络接口名,如 eth0 和 eth1。 up:激活指定的网络接口卡。 down:关闭指定的网络接口。 broadcast address:设置接口的广播地址。 pointopoint:启用点对点方式。 address:设置指定接口设备的 IP 地址。 netmask address:设置接口的子网掩码。 4.应用说明 ifconfig 是用来设置和配置网卡的命令行工具。为了手工配置网络,这是一个必须掌握的命 令。使用该命令的好处是无须重新启动机器。要赋给 eth0 接口 IP 地址 207.164.186.2, 并且马上激活它,使用下面命令: #fconfig eth0 210.34.6.89 netmask 255.255.255.128 broadcast 210.34.6.127 该命令的作用是设置网卡 eth0 的 IP 地址、网络掩码和网络的本地广播地址。若运行不带 任何参数的 ifconfig 命令,这个命令将显示机器所有激活接口的信息。带有“-a”参数的命 令则显示所有接口的信息,包括没有激活的接口。注意,用 ifconfig 命令配置的网络设备 参数,机器重新启动以后将会丢失。 如果要暂停某个网络接口的工作,可以使用 down 参数: #ifconfig eth0 down ip 1.作用 ip 是 iproute2 软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工 具,例如 ifconfig、route 等,使用权限为超级用户。几乎所有的 Linux 发行版本都支持该 命令。 2.格式 ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 3.主要参数 OPTIONS 是修改 ip 行为或改变其输出的选项。所有的选项都是以-字符开头,分为长、短 两种形式。目前,ip 支持如表 1 所示选项。 OBJECT 是要管理者获取信息的对象。目前 ip 认识的对象见表 2 所示。 表 1 ip 支持的选项 -V,-Version 打印 ip 的版本并退出。 -s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或多次,则输出的信息 将更为详尽。 -f,-family 这个选项后面接协议种类,包括 inet、inet6 或 link,强调使用的协议种类。 如果没有足够的信息告诉 ip 使用的协议种类,ip 就会使用默认值 inet 或 any。link 比较特 殊,它表示不涉及任何网络协议。 -4 是-family inet 的简写。 -6 是-family inet6 的简写。 -0 是-family link 的简写。 -o,-oneline 对每行记录都使用单行输出,回行用字符代替。如果需要使用 wc、grep 等 工具处理 ip 的输出,则会用到这个选项。 -r,-resolve 查询域名解析系统,用获得的主机名代替主机 IP 地址 COMMAND 设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip 支持对 象的增加(add)、删除(delete)和展示(show 或 list)。有些对象不支持这些操作,或者有 其它的一些命令。对于所有的对象,用户可以使用 help 命令获得帮助。这个命令会列出这 个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip 会使用默认的命令。 一般情况下,默认命令是 list,如果对象不能列出,就会执行 help 命令。 ARGUMENTS 是命令的一些参数,它们倚赖于对象和命令。ip 支持两种类型的参数:flag 和 parameter。flag 由一个关键词组成;parameter 由一个关键词加一个数值组成。为 了方便,每个命令都有一个可以忽略的默认参数。例如,参数 dev 是 ip link 命令的默认参 数,因此 ip link ls eth0 等于 ip link ls dev eth0。我们将在后面的详细介绍每个命令的 使用,命令的默认参数将使用 default 标出。 4.应用实例 添加 IP 地址 192.168.2.2/24 到 eth0 网卡上: #ip addr add 192.168.1.1/24 dev eth0 丢弃源地址属于 192.168.2.0/24 网络的所有数据报: #ip rule add from 192.168.2.0/24 prio 32777 reject ping 1.作用 ping 检测主机网络接口状态,使用权限是所有用户。 2.格式 ping [-dfnqrRv][-c][-i][-I][-l][-p][-s][-t] IP 地址 3.主要参数 -d:使用 Socket 的 SO_DEBUG 功能。 -c:设置完成要求回应的次数。 -f:极限检测。 -i:指定收发信息的间隔秒数。 -I:网络界面使用指定的网络界面送出数据包。 -l:前置载入,设置在送出要求信息之前,先行发出的数据包。 -n:只输出数值。 -p:设置填满数据包的范本样式。 -q:不显示指令执行过程,开头和结尾的相关信息除外。 -r:忽略普通的 Routing Table,直接将数据包送到远端主机上。 -R:记录路由过程。 -s:设置数据包的大小。 -t:设置存活数值 TTL 的大小。 -v:详细显示指令的执行过程。 ping 命令是使用最多的网络指令,通常我们使用它检测网络是否连通,它使用 ICMP 协议。 但是有时会有这样的情况,我们可以浏览器查看一个网页,但是却无法 ping 通,这是因为 一些网站处于安全考虑安装了防火墙。另外,也可以在自己计算机上试一试,通过下面的方 法使系统对 ping 没有反应: # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all netstat 1.作用 检查整个 Linux 网络状态。 2.格式 netstat [-acCeFghilMnNoprstuvVwx][-A][--ip] 3.主要参数 -a--all:显示所有连线中的 Socket。 -A:列出该网络类型连线中的 IP 相关地址和网络类型。 -c--continuous:持续列出网络状态。 -C--cache:显示路由器配置的快取信息。 -e--extend:显示网络其它相关信息。 -F--fib:显示 FIB。 -g--groups:显示多重广播功能群组组员名单。 -h--help:在线帮助。 -i--interfaces:显示网络界面信息表单。 -l--listening:显示监控中的服务器的 Socket。 -M--masquerade:显示伪装的网络连线。 -n--numeric:直接使用 IP 地址,而不通过域名服务器。 -N--netlink--symbolic:显示网络硬件外围设备的符号连接名称。 -o--timers:显示计时器。 -p--programs:显示正在使用 Socket 的程序识别码和程序名称。 -r--route:显示 Routing Table。 -s--statistice:显示网络工作信息统计表。 -t--tcp:显示 TCP 传输协议的连线状况。 -u--udp:显示 UDP 传输协议的连线状况。 -v--verbose:显示指令执行过程。 -V--version:显示版本信息。 -w--raw:显示 RAW 传输协议的连线状况。 -x--unix:和指定“-A unix”参数相同。 --ip--inet:和指定“-A inet”参数相同。 4.应用实例 netstat 主要用于 Linux 察看自身的网络状况,如开启的端口、在为哪些用户服务,以及 服务的状态等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的 网络状态的察看工具。在默认情况下,netstat 只显示已建立连接的端口。如果要显示处于 监听状态的所有端口,使用-a 参数即可: #netstat -a Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:32768 *:* LISTEN tcp 0 0 *:32769 *:* LISTEN tcp 0 0 *:nfs *:* LISTEN tcp 0 0 *:32770 *:* LISTEN tcp 0 0 *:868 *:* LISTEN tcp 0 0 *:617 *:* LISTEN tcp 0 0 *:mysql *:* LISTEN tcp 0 0 *:netbios-ssn *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 *:10000 *:* LISTEN tcp 0 0 *:http *:* LISTEN ...... 上面显示出,这台主机同时提供 HTTP、FTP、NFS、MySQL 等服务。 telnet 1.作用 telnet 表示开启终端机阶段作业,并登入远端主机。telnet 是一个 Linux 命令,同时也是 一个协议(远程登陆协议)。 2.格式 telnet [-8acdEfFKLrx][-b][-e][-k][-l][-n][-S][-X][主机名称 IP 地址<通信端口>] 3.主要参数 -8:允许使用 8 位字符资料,包括输入与输出。 -a:尝试自动登入远端系统。 -b:使用别名指定远端主机名称。 -c:不读取用户专属目录里的.telnetrc 文件。 -d:启动排错模式。 -e:设置脱离字符。 -E:滤除脱离字符。 -f:此参数的效果和指定“-F”参数相同。 -F:使用 Kerberos V5 认证时,加上此参数可把本地主机的认证数据上传到远端主机。 -k:使用 Kerberos 认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。 -K:不自动登入远端主机。 -l:指定要登入远端主机的用户名称。 -L:允许输出 8 位字符资料。 -n:指定文件记录相关信息。 -r:使用类似 rlogin 指令的用户界面。 -S:服务类型,设置 telnet 连线所需的 IP TOS 信息。 -x:假设主机有支持数据加密的功能,就使用它。 -X:关闭指定的认证形态。 4.应用说明 用户使用 telnet 命令可以进行远程登录,并在远程计算机之间进行通信。用户通过网络在 远程计算机上登录,就像登录到本地机上执行命令一样。为了通过 telnet 登录到远程计算 机上,必须知道远程机上的合法用户名和口令。虽然有些系统确实为远程用户提供登录功能, 但出于对安全的考虑,要限制来宾的操作权限,因此,这种情况下能使用的功能是很少的。 telnet 只为普通终端提供终端仿真,而不支持 X-Window 等图形环境。当允许远程用户登 录时,系统通常把这些用户放在一个受限制的 Shell 中,以防系统被怀有恶意的或不小心的 用户破坏。用户还可以使用 telnet 从远程站点登录到自己的计算机上,检查电子邮件、编 辑文件和运行程序,就像在本地登录一样。 ftp 1.作用 ftp 命令进行远程文件传输。FTP 是 ARPANet 的标准文件传输协议,该网络就是现今 Internet 的前身,所以 ftp 既是协议又是一个命令。 2.格式 ftp [-dignv][主机名称 IP 地址] 3.主要参数 -d:详细显示指令执行过程,便于排错分析程序执行的情形。 -i:关闭互动模式,不询问任何问题。 -g:关闭本地主机文件名称支持特殊字符的扩充特性。 -n:不使用自动登陆。 -v:显示指令执行过程。 4.应用说明 ftp 命令是标准的文件传输协议的用户接口,是在 TCP/IP 网络计算机之间传输文件简单有 效的方法,它允许用户传输 ASCⅡ文件和二进制文件。为了使用 ftp 来传输文件,用户必 须知道远程计算机上的合法用户名和口令。这个用户名/口令的组合用来确认 ftp 会话,并 用来确定用户对要传输的文件进行什么样的访问。另外,用户需要知道对其进行 ftp 会话的 计算机名字的 IP 地址。 用户可以通过使用 ftp 客户程序,连接到另一台计算机上;可以在目录中上下移动、列出目 录内容;可以把文件从远程计算机机拷贝到本地机上;还可以把文件从本地机传输到远程系 统中。ftp 内部命令有 72 个,下面列出主要几个内部命令: ls:列出远程机的当前目录。 cd:在远程机上改变工作目录。 lcd:在本地机上改变工作目录。 close:终止当前的 ftp 会话。 hash:每次传输完数据缓冲区中的数据后就显示一个#号。 get(mget):从远程机传送指定文件到本地机。 put(mput):从本地机传送指定文件到远程机。 quit:断开与远程机的连接,并退出 ftp。 route 1.作用 route 表示手工产生、修改和查看路由表。 2.格式 #route [-add][-net|-host] targetaddress [-netmask Nm][dev]If] #route [-delete][-net|-host] targetaddress [gw Gw] [-netmask Nm] [dev]If] 3.主要参数 -add:增加路由。 -delete:删除路由。 -net:路由到达的是一个网络,而不是一台主机。 -host:路由到达的是一台主机。 -netmask Nm:指定路由的子网掩码。 gw:指定路由的网关。 [dev]If:强迫路由链指定接口。 4.应用实例 route 命令是用来查看和设置 Linux 系统的路由信息,以实现与其它网络的通信。要实现 两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网 关来实现。 在 Linux 系统中,设置路由通常是为了解决以下问题:该 Linux 系统在一个局域网中,局 域网中有一个网关,能够让机器访问 Internet,那么就需要将这台机器的 IP 地址设置为 Linux 机器的默认路由。使用下面命令可以增加一个默认路由: route add 0.0.0.0 192.168.1.1 rlogin 1.作用 rlogin 用来进行远程注册。 2.格式 rlogin [ -8EKLdx ] [ -e char ] [-k realm ] [ - l username ] host 3.主要参数 -8:此选项始终允许 8 位输入数据通道。该选项允许发送格式化的 ANSI 字符和其它的特 殊代码。如果不用这个选项,除非远端的不是终止和启动字符,否则就去掉奇偶校验位。 -E:停止把任何字符当作转义字符。当和-8 选项一起使用时,它提供一个完全的透明连接。 -K:关闭所有的 Kerberos 确认。只有与使用 Kerberos 确认协议的主机连接时才使用这 个选项。 -L:允许 rlogin 会话在 litout 模式中运行。要了解更多信息,请查阅 tty 联机帮助。 -d:打开与远程主机进行通信的 TCP sockets 的 socket 调试。要了解更多信息,请查阅 setsockopt 的联机帮助。 -e:为 rlogin 会话设置转义字符,默认的转义字符是“~”。 -k:请求 rlogin 获得在指定区域内远程主机的 Kerberos 许可,而不是获得由 krb_realmofhost(3)确定的远程主机区域内的远程主机的 Kerberos 许可。 -x:为所有通过 rlogin 会话传送的数据打开 DES 加密。这会影响响应时间和 CPU 利用率, 但是可以提高安全性。 4.使用说明 如果在网络中的不同系统上都有账号,或者可以访问别人在另一个系统上的账号,那么要访 问别的系统中的账号,首先就要注册到系统中,接着通过网络远程注册到账号所在的系统中。 rlogin 可以远程注册到别的系统中,它的参数应是一个系统名。 rcp 1.作用 rcp 代表远程文件拷贝,用于计算机之间文件拷贝,使用权限是所有用户。 2.格式 rcp [-px] [-k realm] file1 file2 rcp [-px] [-r] [-k realm] file 3.主要参数 -r:递归地把源目录中的所有内容拷贝到目的目录中。要使用这个选项,目的必须是一个目 录。 -p:试图保留源文件的修改时间和模式,忽略 umask。 -k:请求 rcp 获得在指定区域内的远程主机的 Kerberos 许可,而不是获得由 krb_relmofhost(3)确定的远程主机区域内的远程主机的 Kerberos 许可。 -x:为传送的所有数据打开 DES 加密。 finger 1.作用 finger 用来查询一台主机上的登录账号的信息,通常会显示用户名、主目录、停滞时间、 登录时间、登录 Shell 等信息,使用权限为所有用户。 2.格式 finger [选项] [使用者] [用户@主机] 3.主要参数 -s:显示用户注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。 -l:除了用-s 选项显示的信息外,还显示用户主目录、登录 Shell、邮件状态等信息,以及 用户主目录下的.plan、.project 和.forward 文件的内容。 -p:除了不显示.plan 文件和.project 文件以外,与-l 选项相同。 4.应用实例 在计算机上使用 finger: [root@localhost root]# Finger Login Name Tty Idle Login Time Office Office Phone root root tty1 2 Dec 15 11 root root pts/0 1 Dec 15 11 root root *pts/1 Dec 15 11 5.应用说明 如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采 用[用户名@主机名] 的格式,不过要查询的网络主机需要运行 finger 守护进程的支持。 mail 1.作用 mail 作用是发送电子邮件,使用权限是所有用户。此外,mail 还是一个电子邮件程序。 2.格式 mail [-s subject] [-c address] [-b address] mail -f [mailbox]mail [-u user] 3.主要参数 -b address:表示输出信息的匿名收信人地址清单。 -c address:表示输出信息的抄送()收信人地址清单。 -f [mailbox]:从收件箱者指定邮箱读取邮件。 -s subject:指定输出信息的主体行。 [-u user]:端口指定优化的收件箱读取邮件。 nslookup 1.作用 nslookup 命令的功能是查询一台机器的 IP 地址和其对应的域名。使用权限所有用户。它 通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器,就可以用这个 命令查看不同主机的 IP 地址对应的域名。 2.格式 nslookup [IP 地址/域名] 3.应用实例 (1)在本地计算机上使用 nslookup 命令 $ nslookup Default Server: name.cao.com.cn Address: 192.168.1.9 > 在符号“>”后面输入要查询的 IP 地址域名,并回车即可。如果要退出该命令,输入“exit”, 并回车即可。 (2)使用 nslookup 命令测试 named 输入下面命令: nslookup 然后就进入交换式 nslookup 环境。如果 named 正常启动,则 nslookup 会显示当前 DNS 服务器的地址和域名,否则表示 named 没能正常启动。 下面简单介绍一些基本的 DNS 诊断。 ◆ 检查正向 DNS 解析,在 nslookup 提示符下输入带域名的主机名,如 hp712.my.com, nslookup 应能显示该主机名对应的 IP 地址。如果只输入 hp712,nslookup 会根据 /etc/resolv.conf 的定义,自动添加 my.com 域名,并回答对应的 IP 地址。 ◆检查反向 DNS 解析,在 nslookup 提示符下输入某个 IP 地址,如 192.22.33.20, nslookup 应能回答该 IP 地址所对应的主机名。 ◆检查 MX 邮件地址记录在 nslookup 提示符下输入: set q=mx 然后输入某个域名,输入 my.com 和 mail.my.com,nslookup 应能够回答对应的邮件服 务器地址,即 support.my.com 和 support2.my.com。 动手练习 1.危险的网络命令 互联网的发展使安全成为一个不能忽视的问题,finger、ftp、rcp 和 telnet 在本质上都是 不安全的,因为它们在网络上用明文传送口令和数据,嗅探器可以非常容易地截获这些口令 和数据。而且,这些服务程序的安全验证方式也是有弱点的,很容易受到“中间服务器”方式 的攻击。这里笔者把一些不安全的命令根据危险等级列出,见表 3 所示。 现在 ftp、telnet 可以被 SSH 命令代替绑定在端口 22 上,其连接采用协商方式,使用 RSA 加密。身份鉴别完成之后,后面的所有流量都使用 IDEA 进行加密。SSH(Secure Shell) 程序可以通过网络登录到远程主机,并执行命令。rcp、rlogin 等远程调用命令也逐渐被 VNC 软件代替。 2.在一张网卡上绑定多个 IP 地址 在 Linux 下,可以使用 ifconfig 方便地绑定多个 IP 地址到一张网卡。例如,eth0 接口的 原有 IP 地址为 192.168.0 .254,可以执行下面命令: ifconfig eth0:0 192.168.0.253 netmask 255.255.255.0 ifconfig eth0:1 192.168.0.252 netmask 255.255.255.0 ...... 3.修改网卡 MAC 地址 首先必须关闭网卡设备,命令如下: /sbin/ifconfig eth0 down 修改 MAC 地址,命令如下: /sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE 重新启用网卡: /sbin/ifconfig eht0 up 这样网卡的 MAC 地址就更改完成了。每张网卡的 MAC 地址是惟一,但不是不能修改的, 只要保证在网络中的 MAC 地址的惟一性就可以了。 4.初步部署 IPv6 IPv4 技术在网络发展中起到了巨大的作用,不过随着时间的流逝它无论在网络地址的提 供、服务质量、安全性等方面都越来越力不从心,IPv6 呼之欲出。Linux 是所有操作系统 中最先支持 IPv6 的,一般 Linux 基于 2.4 内核的 Linux 发行版本都可以直接使用 IPv6, 不过主要发行版本没有加载 IPv6 模块,可以使用命令手工加载,需要超级用户的权限。 (1)加载 IPv6 模块 使用命令检测,其中 inet6 addr: fe80::5054:abff:fe34:5b09/64,就是 eth0 网卡的 IPv6 地址。 # modprobe IPv6 #ifconfig eth0 Link encap:Ethernet HWaddr 52:54:AB:34:5B:09 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::5054:abff:fe34:5b09/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:21 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:1360 (1.3 Kb) Interrupt:5 Base address:0xec00 (2)使用 ping 命令检测网卡的 IPv6 地址是否有效 #ping6 -I eth0 -c 2 fe80::200:e8ff:fea0:2586 和 IPv4 不一样,使用 ping6 命令时必须指定一个网卡界面,否则系统不知道将数据包发送 到哪个网络设备。I 表示 Interface、eth0 是第一个网卡,-c 表示回路,2 表示 ping6 操 作两次。结果见图 1 所示。 图 1 IPv6 网络下的 ping6 命令 (3)使用 ip 命令在 IPv6 下为 eth0 增加一个 IP 地址 #ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0 使用 ifconfig 命令,查看网卡是否出现第二个 IPv6 地址。 Linux 网络的主要优点是能够实现资源和信息的共享,并且用户可以远程访问信息。Linux 提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户进行网络设定、检查网 络状况、登录到远程计算机上、传输文件和执行远程命令等。 上面介绍了 Linux 中比较重要的网络命令,其实 Linux 还有许多命令需要学习。Linux 网 络操作命令的一个特点就是命令参数选项很多,并不要求全部记住,关键在于理解命令的主 要用途和学会使用帮助信息。 虽然 Linux 和 Windows NT/2000 系统一样是一个多用户的系统,但是它们之间有不少重 要的差别。对于很多习惯了 Windows 系统的管理员来讲,如何保证 Linux 操作系统安全、 可靠将会面临许多新的挑战。本文将重点介绍 Linux 系统安全的命令。 passwd 1.作用 passwd 命令原来修改账户的登陆密码,使用权限是所有用户。 2.格式 passwd [选项] 账户名称 3.主要参数 -l:锁定已经命名的账户名称,只有具备超级用户权限的使用者方可使用。 -u:解开账户锁定状态,只有具备超级用户权限的使用者方可使用。 -x, --maximum=DAYS:最大密码使用时间(天),只有具备超级用户权限的使用者方 可使用。 -n, --minimum=DAYS:最小密码使用时间(天),只有具备超级用户权限的使用者方可 使用。 -d:删除使用者的密码, 只有具备超级用户权限的使用者方可使用。 -S:检查指定使用者的密码认证种类, 只有具备超级用户权限的使用者方可使用。 4.应用实例 $ passwd Changing password for user cao. Changing password for cao (current) UNIX password: New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. 从上面可以看到,使用 passwd 命令需要输入旧的密码,然后再输入两次新密码。 su 1.作用 su 的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。 2.格式 su [选项]... [-] [USER [ARG]...] 3.主要参数 -f , --fast:不必读启动文件(如 csh.cshrc 等),仅用于 csh 或 tcsh 两种 Shell。 -l , --login:加了这个参数之后,就好像是重新登陆为该使用者一样,大部分环境变量(例 如 HOME、SHELL 和 USER 等)都是以该使用者(USER)为主,并且工作目录也会改变。 如果没有指定 USER,缺省情况是 root。 -m, -p ,--preserve-environment:执行 su 时不改变环境变数。 -c command:变更账号为 USER 的使用者,并执行指令(command)后再变回原来使 用者。 USER:欲变更的使用者账号,ARG 传入新的 Shell 参数。 4.应用实例 变更账号为超级用户,并在执行 df 命令后还原使用者。 su -c df root umask 1.作用 umask 设置用户文件和目录的文件创建缺省屏蔽值,若将此命令放入 profile 文件,就可 控制该用户后续所建文件的存取许可。它告诉系统在创建文件时不给谁存取许可。使用权限 是所有用户。 2.格式 umask [-p] [-S] [mode] 3.参数 -S:确定当前的 umask 设置。 -p:修改 umask 设置。 [mode]:修改数值。 4.说明 传统 Unix 的 umask 值是 022,这样就可以防止同属于该组的其它用户及别的组的用户修 改该用户的文件。既然每个用户都拥有并属于一个自己的私有组,那么这种“组保护模式” 就不在需要了。严密的权限设定构成了 Linux 安全的基础,在权限上犯错误是致命的。需 要注意的是,umask 命令用来设置进程所创建的文件的读写权限,最保险的值是 0077, 即关闭创建文件的进程以外的所有进程的读写权限,表示为-rw-------。在~ /.bash_profile 中,加上一行命令 umask 0077 可以保证每次启动 Shell 后, 进程的 umask 权限都可以被正确设定。 5.应用实例 umask -S u=rwx,g=rx,o=rx umask -p 177 umask -S u=rw,g=,o= 上述 5 行命令,首先显示当前状态,然后把 umask 值改为 177,结果只有文件所有者具 有读写文件的权限,其它用户不能访问该文件。这显然是一种非常安全的设置。 chgrp 1.作用 chgrp 表示修改一个或多个文件或目录所属的组。使用权限是超级用户。 2.格式 chgrp [选项]... 组 文件... 或 chgrp [选项]... --reference=参考文件 文件... 将每个<文件>的所属组设定为<组>。 3.参数 -c, --changes :像 --verbose,但只在有更改时才显示结果。 --dereference:会影响符号链接所指示的对象,而非符号链接本身。 -h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持 更改符号链接的所有者,此选项才有效)。 -f, --silent, --quiet:去除大部分的错误信息。 --reference=参考文件:使用<参考文件>的所属组,而非指定的<组>。 -R, --recursive:递归处理所有的文件及子目录。 -v, --verbose:处理任何文件都会显示信息。 4.应用说明 该命令改变指定指定文件所属的用户组。其中 group 可以是用户组 ID,也可以是 /etc/group 文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通 配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。 5.应用实例 改变/opt/local /book/及其子目录下的所有文件的属组为 book,命令如下: $ chgrp - R book /opt/local /book chmod 1.作用 chmod 命令是非常重要的,用于改变文件或目录的访问权限,用户可以用它控制文件或目 录的访问权限,使用权限是超级用户。 2.格式 chmod 命令有两种用法。一种是包含字母和操作符表达式的字符设定法(相对权限设定); 另一种是包含数字的数字设定法(绝对权限设定)。 (1)字符设定法 chmod [who] [+ | - | =] [mode] 文件名 ◆操作对象 who 可以是下述字母中的任一个或它们的组合 u:表示用户,即文件或目录的所有者。 g:表示同组用户,即与文件属主有相同组 ID 的所有用户。 o:表示其它用户。 a:表示所有用户,它是系统默认值。 ◆操作符号 +:添加某个权限。 -:取消某个权限。 =:赋予给定权限,并取消其它所有权限(如果有的话)。 ◆设置 mode 的权限可用下述字母的任意组合 r:可读。 w:可写。 x:可执行。 X:只有目标文件对某些用户是可执行的或该目标文件是目录时才追加 x 属性。 s:文件执行时把进程的属主或组 ID 置为该文件的文件属主。方式“u+s”设置文件的用户 ID 位,“g+s”设置组 ID 位。 t:保存程序的文本到交换设备上。 u:与文件属主拥有一样的权限。 g:与和文件属主同组的用户拥有一样的权限。 o:与其它用户拥有一样的权限。 文件名:以空格分开的要改变权限的文件列表,支持通配符。 一个命令行中可以给出多个权限方式,其间用逗号隔开。 (2) 数字设定法 数字设定法的一般形式为: chmod [mode] 文件名 数字属性的格式应为 3 个 0 到 7 的八进制数,其顺序是(u)(g)(o)文件名,以空格分开的要 改变权限的文件列表,支持通配符。 数字表示的权限的含义如下:0001 为所有者的执行权限;0002 为所有者的写权限;0004 为所有者的读权限;0010 为组的执行权限;0020 为组的写权限;0040 为组的读权限; 0100 为其他人的执行权限;0200 为其他人的写权限;0400 为其他人的读权限;1000 为粘贴位置位;2000 表示假如这个文件是可执行文件,则为组 ID 为位置位,否则其中文 件锁定位置位;4000 表示假如这个文件是可执行文件,则为用户 ID 为位置位。 3.实例 如果一个系统管理员写了一个表格(tem)让所有用户填写,那么必须授权用户对这个文件有 读写权限,可以使用命令:#chmod 666 tem 上面代码中,这个 666 数字是如何计算出来的呢?0002 为所有者的写权限,0004 为所有 者的读权限,0020 为组的写权限,0040 为组的读权限, 0200 为其他人的写权限,0400 为其他人的读权限,这 6 个数字相加就是 666(注以上数字都是八进制数),结果见图 1 所示。 图 1 用 chmod 数字方法设定文件权限 从图 1 可以看出,tem 文件的权限是-rw-rw-rw-,即用户对这个文件有读写权限。 如果用字符权限设定使用下面命令: #chmod a =wx tem chown 1.作用 更改一个或多个文件或目录的属主和属组。使用权限是超级用户。 2.格式 chown [选项] 用户或组 文件 3.主要参数 --dereference:受影响的是符号链接所指示的对象,而非符号链接本身。 -h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持 更改符号链接的所有者,此选项才有效)。 --from=目前所有者:目前组只当每个文件的所有者和组符合选项所指定的,才会更改所有 者和组。其中一个可以省略,这已省略的属性就不需要符合原有的属性。 -f, --silent, --quiet:去除大部分的错误信息。 -R, --recursive:递归处理所有的文件及子目录。 -v, --verbose:处理任何文件都会显示信息。 4.说明 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或用户 ID;组可以 是组名或组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经 常使用 chown 命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的 权限。 5.应用实例 1.把文件 shiyan.c 的所有者改为 wan $ chown wan shiyan.c 2.把目录/hi 及其下的所有文件和子目录的属主改成 wan,属组改成 users。 $ chown - R wan.users /hi chattr 1.作用 修改 ext2 和 ext3 文件系统属性(attribute),使用权限超级用户。 2.格式 chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录 3.主要参数 -R:递归处理所有的文件及子目录。 -V:详细显示修改内容,并打印输出。 -:失效属性。 +:激活属性。 = :指定属性。 A:Atime,告诉系统不要修改对这个文件的最后访问时间。 S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。 a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个 文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除 任何文件。 i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任 何的进程只能修改目录之下的文件,不允许建立和删除文件。 D:检查压缩文件中的错误。 d:No dump,在进行文件系统备份时,dump 程序将忽略这个文件。 C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后 的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。 s:Secure Delete,让系统在删除这个文件时,使用 0 填充文件所在的区域。 u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢 复删除这个文件。 4.说明 chattr 命令的作用很大,其中一些功能是由 Linux 内核版本来支持的,如果 Linux 内核版 本低于 2.2,那么许多功能不能实现。同样-D 检查压缩文件中的错误的功能,需要 2.5.19 以上内核才能支持。另外,通过 chattr 命令修改属性能够提高系统的安全性,但是它并不 适合所有的目录。chattr 命令不能保护/、/dev、/tmp、/var 目录。 5.应用实例 1.恢复/root 目录,即子目录的所有文件 # chattr -R +u/root 2.用 chattr 命令防止系统中某个关键文件被修改 在 Linux 下,有些配置文件(passwd ,fatab)是不允许任何人修改的,为了防止被误删除 或修改,可以设定该文件的“不可修改位(immutable)”,命令如下: # chattr +i /etc/fstab sudo 1.作用 sudo 是一种以限制配置文件中的命令为基础,在有限时间内给用户使用,并且记录到日志 中的命令,权限是所有用户。 2.格式 sudo [-bhHpV] [-s ] [-u <用户>] [指令] sudo [-klv] 3.主要参数 -b:在后台执行命令。 -h:显示帮助。 -H:将 HOME 环境变量设为新身份的 HOME 环境变量。 -k:结束密码的有效期,即下次将需要输入密码。 -l:列出当前用户可以使用的命令。 -p:改变询问密码的提示符号。 -s :执行指定的 Shell。 -u <用户>:以指定的用户为新身份,不使用时默认为 root。 -v:延长密码有效期 5 分钟。 4.说明 sudo 命令的配置在/etc/sudoers 文件中。当用户使用 sudo 时,需要输入口令以验证使 用者身份。随后的一段时间内可以使用定义好的命令,当使用配置文件中没有的命令时,将 会有报警的记录。sudo 是系统管理员用来允许某些用户以 root 身份运行部分/全部系统命 令的程序。一个明显的用途是增强了站点的安全性,如果需要每天以超级用户的身份做一些 日常工作,经常执行一些固定的几个只有超级用户身份才能执行的命令,那么用 sudo 是非 常适合的。 ps 1.作用 ps 显示瞬间进程 (process) 的动态,使用权限是所有使用者。 2.格式 ps [options] [--help] 3.主要参数 ps 的参数非常多, 此出仅列出几个常用的参数。 -A:列出所有的进程。 -l:显示长列表。 -m:显示内存信息。 -w:显示加宽可以显示较多的信息。 -e:显示所有进程。 a:显示终端上的所有进程,包括其它用户的进程。 -au:显示较详细的信息。 -aux:显示所有包含其它使用者的进程。 4.说明 要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps 命 令就是最基本、也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行、 运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。图 2 给出 了 ps-aux 命令详解。大部分信息都可以通过执行该命令得到。最常用的三个参数是 u、a、 x。下面就结合这三个参数详细说明 ps 命令的作用:ps aux 图 2 ps-aux 命令详解 图 2 第 2 行代码中,USER 表示进程拥有者;PID 表示进程标示符;%CPU 表示占用的 CPU 使用率;%MEM 占用的物理内存使用率;VSZ 表示占用的虚拟内存大小;RSS 为进 程占用的物理内存值;TTY 为终端的次要装置号码。 STAT 表示进程的状态,其中 D 为不可中断的静止(I/O 动作);R 正在执行中;S 静止 状态;T 暂停执行;Z 不存在,但暂时无法消除;W 没有足够的内存分页可分配;高优先序 的进程;N 低优先序的进程;L 有内存分页分配并锁在内存体内 (实时系统或 I/O)。START 为进程开始时间。TIME 为执行的时间。COMMAND 是所执行的指令。 4.应用实例 在进行系统维护时,经常会出现内存使用量惊人,而又不知道是哪一个进程占用了大量进程 的情况。除了可以使用 top 命令查看内存使用情况之外,还可以使用下面的命令: ps aux | sort +5n who 1.作用 who 显示系统中有哪些用户登陆系统,显示的资料包含了使用者 ID、使用的登陆终端、上 线时间、呆滞时间、CPU 占用,以及做了些什么。 使用权限为所有用户。 2.格式 who - [husfV] [user] 3.主要参数 -h:不要显示标题列。 -u:不要显示使用者的动作/工作。 -s:使用简短的格式来显示。 -f:不要显示使用者的上线位置。 -V:显示程序版本。 4.说明 该命令主要用于查看当前在线上的用户情况。如果用户想和其它用户建立即时通信,比如使 用 talk 命令,那么首先要确定的就是该用户确实在线上,不然 talk 进程就无法建立起来。 又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用 who 命令。who 命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 动手练习 1.使用 Linux 命令检测系统入侵者 安装过 Mandrake Linux 和 Red Hat Linux 的用户都会知道,Linux 系统会内置三种不同 级别(标准、高、更高)的防火墙,当进行了 Linux 服务器的安装和一些基本的设置后, 服务器应该说是比较安全的,但是也会有黑客通过各种方法利用系统管理员的疏忽侵入系 统。如何快速查找黑客非常重要。一般来说,可以使用命令查询黑客是否入侵,见表 1。 表 1 查询黑客入侵现象的命令对应表 举例说明,如果黑客嗅探网络,那么它必须使网卡接口处于混杂模式,使用下面命令进行查 询: #ifconfig -a eth0 Link encap:Ethernet HWaddr 00:00:E8:A0:25:86 inet addr:192.168.1.7 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING PROMISCUOUS MTU:1500 Metric:1 ...... 从这个命令的输出中,可以看到上面讲到的这些概念。第一行的 00:00:E8:A0:25:86 是 mac 地址,第二行的 192.168.1.7 是 IP 地址,第四行讲的是接收数据状态,这时正在被 黑客嗅探。一般而言,网卡有几种接收数据帧的状态,如 Broadcast、Multicast、 Promiscuous 等。Broadcast 是指接收所有类型为广播报文的数据帧;Multicast 是指接 收特定的组播报文;Promiscuous 则是通常说的混杂模式,是指对报文中的目的硬件地址 不加任何检查、全部接收的工作模式。 2.限制 su 命令的滥用 我们知道,超级用户在 Linux 中有最大的权利,几乎所有黑客都想得到这个目标。Linux 可以增加对切换到超级用户的限制。使用 PAM (Pluggable Authentication Modules) 可以禁止除在 wheel 组以外的任何人 su 成 root,修 改/etc/pam.d/su 文件,除去屏蔽标 识#。使用 /usr/sbin/usermod G10 bjecadm 将 bjecadm 这个账号加入 gid 为 10 的 组,就是 wheel 组。命令如下: /etc/pam.d/su # 使用密码验证# auth sufficient /lib/security/pam_wheel.so debug # 限制只有 wheel 组用户才可以切换到 root# auth required /lib/security/pam_wheel.so use_uid chmod -G10 bjecadm 另外,每当用户试图使用 su 命令进入系统用户时,命令将在/usr/adm/sulog 文件中写一 条信息,若该文件记录了大量试图用 su 进入 root 的无效操作信息,则表明了可能有人企图破 译 root 口令。 Linux 命令有着强大的功能。对于 Linux 系统管理员来说,往往只需要通过各种安全命令 技巧,组合构成安全防线。从计算机安全的角度看,世界上没有绝对安全的计算机系统, Linux 系统也不例外。 在前面几讲中,我们把 Linux 命令按照在系统中的作用分成几个部分分别予以介绍。但是, 还有一些命令不好划分,然而学习它们同样是比较重要的。 tar 1.作用 tar 命令是 Unix/Linux 系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使 用权限是所有用户。 2.格式 tar [主选项+辅选项] 文件或目录 3.主要参数 使用该命令时,主选项是必须要有的,它告诉 tar 要做什么事情,辅选项是辅助使用的,可 以选用。 主选项: -c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。 -r 把要存档的文件追加到档案文件的未尾。例如用户已经做好备份文件,又发现还有一个 目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件 中。 -t 列出档案文件的内容,查看已经备份了哪些文件。 -u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的 文件,则把它追加到备份文件的最后。 -x 从档案文件中释放文件。 辅助选项: -b 该选项是为磁带机设定的,其后跟一数字,用来说明区块的大小,系统预设值为 20 (20×512 bytes)。 -f 使用档案文件或设备,这个选项通常是必选的。 -k 保存已经存在的文件。例如把某个文件还原,在还原的过程中遇到相同的文件,不会进 行覆盖。 -m 在还原文件时,把所有文件的修改时间设定为现在。 -M 创建多卷的档案文件,以便在几个磁盘中存放。 -v 详细报告 tar 处理的文件信息。如无此选项,tar 不报告文件信息。 -w 每一步都要求确认。 -z 用 gzip 来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定 要使用该选项进行解压缩。 4.应用说明 tar 是 Tape Archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上。如果下载 过 Linux 的源代码,或许已经碰到过 tar 文件 请注意,不要忘了 Linux 是区分大小写的。例如,tar 命令应该总是以小写的形式执行。命 令行开关可以是大写、小写或大小写的混合。例如,-t 和-T 执行不同的功能。文件或目录 名称可以混合使用大小写,而且就像命令和命令行开关一样是区分大小写的。 5.应用实例 tar 是一个命令行的工具,没有图形界面。使用 Konsole 打开一个终端窗口,接下来是一 个简单的备份命令(在/temp 目录中创建一个 back.tar 的文件,/usr 目录中所有内容都 包含在其中。): $tar cvf - /usr > /temp/back.tar 另外,tar 命令支持前面第三讲中讲过的 crontab 命令,可以用 crontab 工具设置成基于 时间的有规律地运行。例如,每晚 6 点把/usr 目录备份到 hda—第一个 IDE 接口的主驱动 器 (总是位于第一个硬盘)中,只要将下面语句添加到 root 的 crontab 中即可: $00 06 * * * tar cvf /dev/hda1/usrfiles.tar - /usr 一般情况下,以下这些目录是需要备份的: ◆/etc 包含所有核心配置文件,其中包括网络配置、系统名称、防火墙规则、用户、组, 以及其它全局系统项。 ◆ /var 包含系统守护进程(服务)所使用的信息,包括 DNS 配置、DHCP 租期、邮件缓 冲文件、HTTP 服务器文件、dB2 实例配置等。 ◆/home 包含所有默认用户的主目录,包括个人设置、已下载的文件和用户不希望失去的 其它信息。 ◆/root 根(root)用户的主目录。 ◆/opt 是安装许多非系统文件的地方。IBM 软件就安装在这里。OpenOffice、JDK 和其 它软件在默认情况下也安装在这里。 有些目录是可以不备份的: ◆ /proc 应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境 的虚拟化视图,包括诸如/proc/kcore 这样的文件,这个文件是整个运行内存的虚拟视图。 备份这些文件只是在浪费资源。 ◆/dev 包含硬件设备的文件表示。如果计划还原到一个空白的系统,就可以备份/dev。然 而,如果计划还原到一个已安装的 Linux 系统,那么备份/dev 是没有必要的。 unzip 1.作用 unzip 命令位于/usr/bin 目录中,它们和 MS DOS 下的 pkzip、pkunzip 及 MS Windows 中的 Winzip 软件功能一样,将文件压缩成.zip 文件,以节省硬盘空间,当需要的时候再将 压缩文件用 unzip 命令解开。该命令使用权限是所有用户。 2.格式 unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip 文件][文件][-d <目录>][-x < 文件>] 3.主要参数 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换。 -f:更新现有的文件。 -l:显示压缩文件内所包含的文件。 -p:与-c 参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。 -t:检查压缩文件是否正确。 -u:与-f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到 目录中。 -v:执行是时显示详细的信息。 -z:仅显示压缩文件的备注文字。 -a:对文本文件进行必要的字符转换。 -b:不要对文本文件进行字符转换。 -C:压缩文件中的文件名称区分大小写。 -j:不处理压缩文件中原有的目录路径。 -L:将压缩文件中的全部文件名改为小写。 -M:将输出结果送到 more 程序处理。 -n:解压缩时不要覆盖原有的文件。 -o:不必先询问用户,unzip 执行后覆盖原有文件。 -P<密码>:使用 zip 的密码选项。 -q:执行时不显示任何信息。 -s:将文件名中的空白字符转换为底线字符。 -V:保留 VMS 的文件版本信息。 -X:解压缩时同时回存文件原来的 UID/GID。 [.zip 文件]:指定.zip 压缩文件。 [文件]:指定要处理.zip 压缩文件中的哪些文件。 -d<目录>:指定文件解压缩后所要存储的目录。 -x<文件>:指定不要处理.zip 压缩文件中的哪些文件。 -Z unzip:-Z 等于执行 zipinfo 指令。在 Linux 中,还提供了一个叫 zipinfo 的工具,能 够察看 zip 压缩文件的详细信息。unzip 最新版本是 5.50。 gunzip 1.作用 gunzip 命令作用是解压文件,使用权限是所有用户。 2.格式 gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][文件...] 或者 gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][目录] 3.主要参数 -a 或--ascii:使用 ASCII 文字模式。 -c 或--stdout 或--to-stdout:把解压后的文件输出到标准输出设备。 -f 或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在,以及该文件是否为符 号连接。 -h 或--help:在线帮助。 -l 或--list:列出压缩文件的相关信息。 -L 或--license:显示版本与版权信息。 -n 或--no-name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略 不予处理。 -N 或--name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到 解开的文件上。 -q 或--quiet:不显示警告信息。 -r 或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理。 -S<压缩字尾字符串>或--suffix<压缩字尾字符串>:更改压缩字尾字符串。 -t 或--test:测试压缩文件是否正确无误。 -v 或--verbose:显示指令执行过程。 -V 或--version:显示版本信息。 4.说明 gunzip 是个使用广泛的解压缩程序,它用于解开被 gzip 压缩过的文件,这些压缩文件预 设最后的扩展名为“.gz”。事实上,gunzip 就是 gzip 的硬连接,因此不论是压缩或解压缩, 都可通过 gzip 指令单独完成。gunzip 最新版本是 1.3.3 。 unarj 1.作用 unarj 解压缩格式为.arj 格式的文件,使用权限是所有用户。 2.格式 unarj [eltx][.arj 压缩文件] 3.主要参数 e:解压缩.arj 文件。 l:显示压缩文件内所包含的文件。 t:检查压缩文件是否正确。 x:解压缩时保留原有的路径。 4.说明 带有.arj 扩展名的文件是由用于 MS DOS 和 Windows 的 ARJ 实用程序创建的。因为 ARJ 是一种不能免费获得源代码的共享件程序,所以在 mtools 1.作用 mtools 实际上是一个命令集合,是 DOS 文件系统的工具程序,它可以模拟许多 DOS 命 令,使用起来非常方便。使用权限是所有用户。Linux 系统提供了一组称为 mtools 的可 移植工具,可以让用户轻松地从标准的 DOS 软盘上读、写文件和目录。它们对 DOS 和 Linux 环境之间交换文件非常有用。mtools 的使用非常简单,如果想把软盘里所有的文件都拷贝 到硬盘上,那么就可以执行以下命令: mcopy a:*.* 也就是说,只需要在相应的 DOS 命令之前加上一个字母“m”,就可以完成对应的功能了。 一般 Linux 发行版本中都有这个软件,可以使用下面命令检查一下。 rpm -qa|grep mtools 如果没有安装,也没有关系,可以从网上下载(http://mtools.linux.lu/)一个最新版本来 安装。目前可供下载的最新 mtools 版本是 2.包括的命令 mcd 目录名:改变 MS DOS 下的目录。 mcopy 源文件 目标文件:在 MS DOS 和 Unix 之间复制文件。 mdel 文件名:删除 MS DOS 下的文件。 mdir 目录名:显示 MS DOS 下的目录。 mformat 驱动器号:在低级格式化的软盘上创建 MS DOS 文件系统。 rnlabel 驱动器号:产生 MS DOS 下的卷标。 mmd 目录名:建立 MS DOS 下的目录。 mrd 目录名:删除 MS DOS 下的目录。 mren 源文件 目标文件:重新命名已存在的 MS DOS 文件。 mtype 文件名:显示 MS DOS 文件的内容。 请注意,这些命令和对应的 MS DOS 命令非常相似。在 mtools 命令中,“/”和“\”是可以 混用的。因为文件列表的是 DOS 系统下的文档,对大小写并不敏感,所以“CDE”和“cde” 在这里是一样的。 3.应用实例 (1)如果把软盘进行快速格式化,可以使用命令 mformat: mformat A: mtools 当初发展的目的是用来处理 DOS 文件系统的,所以只能用在 FAT 文件格式的分区 上。需要注意的是,如果用 mount 命令来挂载了 FAT16/32 分区,那么就不能使用 mtools 的指令来处理这些分区上的文件。这是因为一旦 FAT16/32 分区挂到了 Linux 文件目录下, Linux 就会将其视为文件系统本身的一部分,这时如果要对其操作就必须使用 Linux 本身 所附带的指令集。 (2)将 DOS 盘上的文件 htca.c 复制到当前目录下,并用 ls 命令进行验证。 $ mcopy a:\htca.c $ ls -l htca.c -rw-r- -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.c man 1.作用 man 命令用来提供在线帮助,使用权限是所有用户。在 Linux 系统中存储着一部联机使用 的手册,以供用户在终端上查找。使用 man 命令可以调阅其中的帮助信息,非常方便和实 用。 2.格式 man 命令名称 man [-acdfhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P pager] [-S section_list] [section] name ... 3.参数 -C config_file:指定设定文件 man.conf,缺省值是/etc/man.conf。 -M path:指定了联机手册的搜寻路径, 如果没有指定则使用环境变数 MANPATH 的设定; 如果没有使用 MANPATH, 则会使用/usr/lib/man.conf 内的设定;如果 MANPATH 是 空字串,则表示使用缺省值。 -P pager:指定使用何种 pager.man 会优先使用此选项设定,然后是依环境变数 MANPAGER 设定,然后是环境变数 PAGER;man 缺省使用/usr/bin/less -is。 -S section_list man:所搜寻的章节列表(以冒号分隔),此选项会覆盖环境变数 MANSECT 的设定。 -a man:缺省情况是在显示第一个找到的手册之后,就会停止搜寻,使用此选项会强迫 man 继续显示所有符合 name 的联机手册。 -c:即使有最新的 cat page,也继续对联机手册重新作排版,本选项在屏幕的行列数改变 时或已排版的联机手册损坏时特别有意义。 -d:不要真的显示联机手册,只显示除错讯息。 -D:同时显示联机手册与除错讯息。 -h:显示求助讯息然后结束程式 。 -K:对所有的联机手册搜寻所指定的字串。请注意,本功能回应速度可能很慢,如果指定 section(区域)会对速度有帮助。 -m system:依所指定的 system 名称而指定另一组的联机手册。 man:是 manual(手册)的缩写。在输入命令有困难时,可以立刻得到这个文档。例如, 如 果使用 ps 命令时遇到困难,可以输入 man ps 得到帮助信息,此时会显示出 ps 的手册页 (man page)。 由于手册页 man page是用 less 程序来看的(可以方便地使屏幕上翻和下翻), 所以在 man page 里可以使用 less 的所有选项。 less 中比较重要的功能键有: [q] 退出; [Enter] 一行行地下翻; [Space] 一页页地下翻; [b] 上翻一页; [/] 后跟一个字符串和[Enter]来查找字符串; [n] 发现上一次查找的下一个匹配。 4.阅读手册页 手册页在很少的空间里提供了很多的信息, 这里简单介绍一下大多数手册页中都有的部分 内容。Linux 手册页主要有九个部分:用户指令、系统调用、程序库、设备说明、文件格式、 游戏、杂项、系统指令、内核,手册页快照见图 1 所示。 图 1 ps 命令手册页快照 Linux 手册页布局见表 1。 5.应用实例 Linux 命令中有一些基础的、重要的命令,例如 ps、find、cat 和 ls 等。下面来举一个综 合应用的例子,由此可以看出 man 的地位在 Linux 中可谓至关重要。但是,man 所显示 的信息却不是普通的文本,如果直接将这些文字重定向到一个文本文件,就会发现在 man 中高亮显示的文字就变成了两个,而且有不计其数的制表符,使打印、编辑都变得非常不便。 不过,使用下面这样一条语句就能得到 ps 命令打印。 # man ps | col -b | lpr 这条命令同时运用了输出重定向和管道两种技巧,作用是将 ps 命令的帮助信息可以直接打 印出来。更多的 Man 文件可以查看 Linux Man unencode 1.作用 unencode 命令可以把一个二进制文件表编码为一个文本文件,使用权限是所有用户。 2.格式 uuencode [-hv] [源文件] 目标文件 3.主要参数 -h:列出指令使用格式(help) 。 -v:列出版本信息。 4.应用说明 uuencode 指令可以将二进制文件转化成可使用电子邮件发送的 ASCII 编码形式。 uuencode 编码后的资料都以 begin 开始,以 end 作为结束,且通常其中的每一行的开始 均为“M”,中间部分是编码过的文件,编码后的文件比源文件要大一些。 uudecode 1.作用 uudecode 命令用来将 uuencode 编码后的档案还原,uudecode 只会将 begin 与 end 标记之间的编码资料还原,程序会跳过标记以外的资料。它的使用权限为所有用户。 2.格式 uuencode [-hv] [file1 ...] 3.主要参数 -h:列出指令使用格式(help)。 -v:列出版本信息。 4.应用实例 使用下面命令一次还原几个文件: uuencode file1.uud file2.uud file3.uud 动手练习 1.在 Linux 命令行下发送邮件 虽然 Linux 桌面应用发展很快,但是命令行(Shell)在 Linux 中依然有很强的生命力。如 果能确认电子邮件服务器支持 8bit 的字节,就可以直接使用下面命令: cat <附件文件名> | mail <邮件地址> cat(cat 是 concatenate 的缩写)命令是将几个文件处理成一个文件,并将这种处理的结 果保存到一个单独的输出文件,这里我们用它来合并邮件的文本。 写好邮件名称,比如叫 cjkmail,然后使用下面命令: $uuencode <附件文件名> <附件文件名> >>cjkmail 这样就可以用 vi 编辑器写 cjkmail 文件,并在前面写上信的正文,然后寄出。 对方收到信后,把信中属于 cjkmail 中的内容拷贝出来,存为 themail.uue。如果对方是 在 Windows 下,就可以用 WinRAR 或 WinZip 解压,这样就可以看到附件。 如果对方也使用 Linux,可以用 undecode 命令还原: $ uudencode -o<附件文件名> themail.uue 2.实现 tar 的分卷 笔者想把一个 378MB 的文件压缩成多个 63MB 的文件(笔者的 USB 为 64MB),使用下 面命令: $tar czvf - dir | split -d -b 63m 然后合并命令: $cat x* > dir.tgz 以上例子实际是由三个命令组合完成的,即用 tar 打包,用 split 分割,用 cat 合并。“tar czvf - dir”的意思是把 dir 目录打包,并输出到标准输出(argv),这样就可以直接用管道输出 给 split。 3.连续执行一个命令 使用 watch 命令,可以反复执行命令。如果和 ls 配合,可以达到观察某文件大小变化的效 果。 $watch ls -l file.name 4.用 tar 命令导出一个文件 有一个 tar 格式的 DVD 文件 GLvPro6.4_linux.tar,因为该文件非常大(4.7GB),如果 全部解压比较麻烦,可以用下面命令先导出 readme.txt 看看。 tar xvf GLvPro6.4_linux.tar readme.txt 这样 readme.txt 就单独被导出了。 5.用 tar 打包一个目录时只备份其中的几个子目录 tar cf --exclude home/cjh home/cao 这样 home 目录下只有 cjh 和 cao 两个子目录备份。 到此为止,Linux 必学的 60 个命令已经全部介绍完了。Linux 的命令行方式功能强大,如 果熟练掌握了 Linux 的常用命令,往往只需要通过各种技巧就可以组合构成一条复杂的命 令,从而完成用户任务。Linux 系统中的命令实在是太多了,不可能像在 MS DOS 中把所 有的命令及参数都记住。Linux 系统提供了一些方法,比如可以通过“help”和“man”来查 询名令。 linux下软件的基本安装和卸载 Linux 软件的安装和卸载一直是困扰许多新用户的难题。在 Windows 中,我们可以使用软件 自带的安装卸载程序或在控制面板中的"添加/删除程序"来实现。与其相类似,在 Linux 下有 一个功能强大的软件安装卸载工具,名为 RPM。它可以用来建立、安装、查询、更新、卸 载软件。该工具是在命令行下使用的。在 Shell 的提示符后输入 rpm,就可获得该命令的帮 助信息。 软件的安装 Linux 下软件的安装主要有两种不同的形式。第一种安装文件名为 xxx.tar.gz;另 一 种 安 装文件名为 xxx.i386.rpm。以第一种方式发行的软件多为以源码形式发送的;第二种方式则 是直接以二进制形式发送的。 对于第一种,安装方法如下: 1 .首先,将安装文件拷贝至你的目录中。例如,如果你是以 root 身份登录上的,就将软件 拷贝至/root 中。 #cp xxx.tar.gz /root 2 .由于该文件是被压缩并打包的,应对其解压缩。命令为: #tar xvzf 2004109124523.htm.tar.gz 3. 执行该命令后,安装文件按路径,解压缩在当前目录下。用 ls 命令可以看到解压缩后的 文件。通常在解压缩后产生的文件中,有"Install"的文件。该文件为纯文本文件,详细讲述 了该软件包的安装方法。 4.执行解压缩后产生的一个名为 configure 的可执行脚本程序。它是用于检查系统是否有 编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编 译工作做准备。命令为: #./configure 5.检查通过后,将生成用于编译的 MakeFile 文件。此时,可以开始进行编译了。编译 的过程视软件的规模和计算机性能的不同,所耗费的时间也不同。命令为: #make。 6.成功编译后,键入如下的命令开始安装: #make install 7.安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命 令: #make clean #make distclean 至此,软件的安装结束。 对于第二种,其安装方法要简单得多。 同第一种方式一样,将安装文件拷贝至你的目录中。然后使用 rpm 来安装该文件。命 令如下: #rpm -i 2004109124523.htm.i386.rpm rpm 将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册 到 rpm 的数据库中。参数 i 的作用是使 rpm 进入安装模式。 软件的卸载 1.软件的卸载主要是使用 rpm 来进行的。卸载软件首先要知道软件包在系统中注册的名 称。键入命令: #rpm -q -a 即可查询到当前系统中安装的所有的软件包。 2. 确定了要卸载的软件的名称,就 可以开始实际卸载该软件了。键入命令: #rpm -e [package name] 即可卸载软件。参数 e 的作用是使 rpm 进入卸载模式。对名为[package name]的软件包 进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载, rpm 将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载: #rpm -e [package name] -nodeps Linux下软件安装详解(图) 在 Windows 下安装软件时,只需用鼠标双击软件的安装程序,或者用 Zip 等解压缩软件解 压缩即可安装。在 Linux 下安装软件对初学者来说,难度高于 Windows 下软件安装。下面 我就详细讲解 Linux 下如何安装软件。 先来看看 Linux 软件扩展名。软件后缀为.rpm 最初是 Red Hat Linux 提供的一种包封装 格式,现在许多 Linux 发行版本都使用;后缀为.deb 是 Debain Linux 提供的一种包封装格式; 后缀为.tar.gz、tar.Z、tar.bz2 或.tgz 是使用 Unix 系统打包工具 tar 打包的;后缀为.bin 的一般 是一些商业软件。通过扩展名可以了解软件格式,进而了解软件安装。 RPM 格式软件包的安装 1.简介 几乎所有的 Linux 发行版本都使用某种形式的软件包管理安装、更新和卸载软件。与直 接从源代码安装相比,软件包管理易于安装和卸载;易于更新已安装的软件包;易于保护配 置文件;易于跟踪已安装文件。 RPM 全称是 Red Hat Package Manager(Red Hat 包管理器)。RPM 本质上就是一个包, 包含可以立即在特定机器体系结构上安装和运行的 Linux 软件。RPM 示意图见图 1。 大多数 Linux RPM 软件包的命名有一定的规律,它遵循名称-版本-修正版-类型- MYsoftware-1.2 -1.i386.rpm 。 2.安装 RPM 包软件 # rpm -ivh MYsoftware-1.2 -1.i386.rpm RPM 命令主要参数: -i 安装软件。 -t 测试安装,不是真的安装。 -p 显示安装进度。 -f 忽略任何错误。 -U 升级安装。 -v 检测套件是否正确安装。 这些参数可以同时采用。更多的内容可以参考 RPM 的命令帮助。 3.卸载软件 # rpm -e 软件名 需要说明的是,上面代码中使用的是软件名,而不是软件包名。例如,要卸载 software-1.2.-1.i386.rpm 这个包时,应执行: #rpm -e software 4.强行卸载 RPM 包 有时除去一个 RPM 是不行的,尤其是系统上有别的程序依赖于它的时候。如果执行命 令会显示如下错误信息: ## rpm -e xsnow error: removing these packages would break dependencies: /usr/X11R6/bin/xsnow is needed by x-amusements-1.0-1 在这种情况下,可以用--force 选项重新安装 xsnow: ## rpm -ivh --force xsnow-1.41-1.i386.rpm xsnow 这里推荐使用工具软件 Kleandisk,用它可以安全彻底清理掉不再使用的 RPM 包。 5.安装.src.rpm 类型的文件 目前RPM 有两种模式,一种是已经过编码的(i386.rpm),一种是未经编码的(src.rpm)。 rpm --rebuild Filename.src.rpm 这时系统会建立一个文件 Filenamr.rpm,在/usr/src/redflag/RPMS/子目录下,一般是 i386, 具体情况和 Linux 发行版本有关。然后执行下面代码即可: rpm -ivh /usr/src/regflag/RPMS/i386/Filename.rpm 使用deb 打包的软件安装 deb 是 Debian Linux 提供的一个包管理器,它与 RPM 十分类似。但由于 RPM 出现得早, 并且应用广泛,所以在各种版本的 Linux 中都常见到,而 Debian 的包管理器 dpkg 只出现在 Debina Linux 中。它的优点是不用被严格的依赖性检查所困扰,缺点是只在 Debian Linux 发 行版中才能见到这个包管理工具。 1. 安装 # dpkg -i MYsoftware-1.2.-1.deb 2. 卸载 # dpkg -e MYsoftware 使用源代码进行软件安装 和RPM 安装方式相比,使用源代码进行软件安装会复杂一些,但是用源代码安装软件 是 Linux 下进行软件安装的重要手段,也是运行 Linux 的最主要的优势之一。使用源代码安 装软件,能按照用户的需要选择定制的安装方式进行安装,而不是仅仅依靠那些在安装包中 的预配置的参数选择安装。另外,仍然有一些软件程序只能从源代码处进行安装。 现在有很多地方都提供源代码包,到底在什么地方获得取决于软件的特殊需要。对于那 些使用比较普遍的软件,如 Sendmail,可以从商业网站处下载源代码软件包(如 http://www.sendmail.org )。一般的软件包,可从开发者的 Web 站点下载。下面介绍一下安 装步骤: 1.解压数据包 源代码软件通常以.tar.gz 做为扩展名,也有 tar.Z、tar.bz2 或.tgz 为扩展名的。不同扩展名 解压缩命令也不相同,见表 1。 2.编译软件 成功解压缩源代码文件后,进入解包的目录。在安装前阅读 Readme 文件和 Install 文件。 尽管许多源代码文件包都使用基本相同的命令,但是有时在阅读这些文件时能发现一些重要 的区别。例如,有些软件包含一个可以安装的安装脚本程序(.sh)。在安装前阅读这些说 明文件,有助于安装成功和节约时间。 在安装软件以前要成为 root 用户。实现这一点通常有两种方式:在另一台终端以 root 用户登录,或者输入“su”,此时系统会提示输入 root 用户的密码。输入密码以后,就将一直 拥有 root 用户的权限。如果已经是 root 用户,那就可以进行下一步。 通常的安装方法是从安装包的目录执行以下命令: gunzip soft1.tar.gz cd soft1 #. /configure #配置# make #调用 make# make install #安装源代码# 删除安装时产生的临时文件: #make clean 卸载软件: #make uninstall 有些软件包的源代码编译安装后可以用 make uninstall 命令卸载。如果不提供此功能, 则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很 难把它删除干净,应该在编译前进行配置。 .bin 文件安装 扩展名为.bin 文件是二进制的,它也是源程序经编译后得到的机器语言。有一些软件可 以发布为以.bin 为后缀的安装包,例如,流媒体播放器 RealONE。如果安装过 RealONE 的 Windows 版的话,那么安装 RealONE for Linux 版本(文件名:r1p1_linux22_libc6_i386_a1.bin) 就非常简单了: #chmod +x r1p1_linux22_libc6_i386_a1.bin ./ r1p1_linux22_libc6_i386_a1.bin 接下来选择安装方式,有普通安装和高级安装两种。如果不想改动安装目录,就可选择 普通安装,整个安装过程几乎和在 Windwos 下一样。 .bin 文件的卸载,以 RealONE for Linux 为例,如果采用普通安装方式的话,在用户主 目录下会有 Real 和 Realplayer9 两个文件夹,把它们删除即可。 Linux 绿色软件 Linux 也有一些绿色软件,不过不是很多。Linux 系统提供一种机制:自动响应软件运 行进程的要求,为它设定好可以马上运行的环境。这种机制可以是一种接口,或者是中间件。 程序员编写的程序可以直接拷贝分发,不用安装,只要点击程序的图标,访问操作系统提供 的接口,设定好就可以工作。若要删除软件,直接删除就可以,不用链接文件。这是最简单 的软件安装、卸载方式。 上面介绍了 Linux 软件安装的方法,对于 Linux 初学者来说,RPM 安装是一个不错的 选择。如果想真正掌握 Linux 系统,源代码安装仍然是 Linux 下软件安装的重要手段。
还剩111页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

核桃板栗

贡献于2012-09-25

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf