首页资源分类嵌入式系统Linux > 《鸟哥linux私房菜》基础学习篇

《鸟哥linux私房菜》基础学习篇

已有 445148个资源

下载专区

上传者其他资源

嵌入式系统热门资源

本周本月全部

文档信息举报收藏

标    签:基础学习篇

分    享:

文档简介

学习LINUX很不错

文档预览

基础学习篇快速索引 为了方便读者可以快速的找到自己想要查询的指令功能与相关用语说明,底下建立的就是一些指令速查表啰! 指令与用语速查表 A B C D E F G H I J K L M N O P Q R S T U W X Y 其他 指令与用语 A ACL alias anacron apropos array at atq, atrm auditd audit2why awk B badblocks basename bash bashrc batch bg BIOS vs CMOS bc block boot loader bzip2, bzcat C cal case cat cd cdrecord chage chattr 第十四章、3.1 第十一章、3.1 第十六章、4.1 第五章、3.1 第十一章、2.6 第十六章、2.2 第十六章、2.2 第十七章、5.5 第十七章、5.5 第十二章、4.2 第八章、3.3 第七章、2.3 第十一章 第五章、2.1 第十一章、4.3 第十六章、2.2 第十七章、2.2 第零章、2.6 第五章、2.2 第八章、1.3 第二十章、1.2 第九章、2.3 第五章、2.2 第十三章、4.2 第七章、3.1 第七章、1.2 第九章、5.2 第十四章、2.1 第七章、4.2 相关连结 chcon chfn chgrp chkconfig chkfontpath chmod chown chpasswd chroot chsh CISC cmp col compress cp cpio crontab cups cut D date dd declare depmod device.map df diff dirname dmesg dos2unix du dump dumpe2fs E e2label echo edquota env expand 第十七章、5.4 第十四章、2.2 第六章、2.2 第十八章、4.2 第二十四章、2.2 第六章、2.2 第六章、2.2 第十四章、7.1 第二十章、4.5 第十四章、2.2 第零章、1.2 第十二章、4.3 第十一章、6.4 第九章、2.1 第七章、2.2 第九章、6.2 第十六章、3.1 第二十一章、2.0 第十一章、6.1 第五章、2.2 第十三章、2.1 第八章、5.2 第九章、6.1 第十一章、2.6 第二十章、2.1 第二十章、4.3 第八章、2.1 第十二章、4.3 第七章、2.3 第十七章、3.4 第十章、4.2 第八章、2.1 第九章、4.0 第八章、1.3 第八章、3.5 第十一章、2.2 第十五章、1.5 第十一章、2.3 第十一章、6.4 export EXT2 filesystem F fc-cache, fc-list fdisk fg free file find finger FHS fsck fstab function fuser G gcc getenforce getsebool getfacl GNU GNU GPL gpasswd grep group groupadd groupdel groupmod groups grub grub-install grub-md5-crypt gtf gzip, zcat H hal Hardware support 第十一章、2.3 第八章、1.3 第二十四章、2.2 第八章、3.1 第十七章、2.2 第八章、5.1 第十七章、3.4 第七章、4.4 第七章、5.2 第十四章、2.2 第一章、2.6 第六章、3.1 第八章、3.3 第八章、4.1 第十三章、4.3 第十七章、4.3 第二十二章、2.4 第十七章、5.3 第十七章、5.6 第十四章、3.3 第一章、1.3 第一章、1.2 第十四章、2.3 第十一章、6.1 第十二章、2.2 第十四章、1.3 第十四章、2.3 第十四章、2.3 第十四章、2.3 第十四章、1.3 第二十章、3.0 第二十章、3.4 第二十章、3.4 第二十章、3.8 第二十四章、2.3 第九章、2.2 第二十一章、3.4 第三章、1.2 hdparm head history I iconv id if info init initrd inode insmod iostat issue J jobs join journaling filesystem K kill killall L LANG last lastlog ldconfig ldd less link (hard, symbolic) Linux distributions Linux 核心版本 lm_sensors ln locale locate 第八章、3.5 第七章、3.3 第十一章、3.2 第十章、4.3 第十四章、2.2 第十三章、4.1 第五章、3.2 第五章、5.0 第二十章、1.3 第二十章、1.9 第二十章、3.3 第八章、1.3 第二十章、2.3 第二十一章、3.1 第十一章、4.2 第十七章、2.2 第十一章、6.4 第八章、1.5 第十七章、2.2 第十七章、3.2 第十七章、3.2 第五章、2.1 第十章、4.1 第十二章、2.1 第十四章、6.1 第十四章、6.1 第二十二章、5.2 第十八章、3.1 第二十二章、5.3 第七章、3.2 第八章、2.2 第一章、2.6 第一章、2.5 第二十一章、3.0 第八章、2.2 第十一章、2.4 第七章、5.2 login-shell logrotate logwatch lp lpadmin lpq lpr lprm lpstat ls, ll lsattr LSB lsb_release lsmod lsof lspci lsusb LVM lvcreate, lvscan, lvdisplay lvextend, lvreduce lvremove, lvresize M mail make makefile man MBR md5sum mdadm mdadm.conf mesg menu.list mkdir mke2fs mkfs mkinitrd mknod mkisofs mkswap modinfo 第十一章、4.3 第十九章、3.0 第十九章、4.1 第二十一章、2.6 第二十一章、2.6 第二十一章、2.6 第二十一章、2.6 第二十一章、2.6 第二十一章、2.6 第七章、2.1 第七章、4.2 第一章、2.6 第六章、3.4 第二十章、2.2 第十七章、4.3 第二十一章、3.1 第二十一章、3.1 第十五章、3.0 第十五章、3.2 第十一章、2.1 第十四章、6.3 第二十二章、1.3 第二十二章、3.2 第五章、3.1 第三章、2.4 第二十二章、6.1 第十五章、2.3 第十五章、2.5 第十四章、6.2 第二十章、3.2 第七章、1.2 第八章、3.2 第八章、3.2 第二十章、3.3 第八章、3.5 第九章、5.1 第八章、5.1 第二十章、2.2 modprobe more motd mount (含常用参数) mount (remount) mount (vfat, 中文) mount (--bind) mount (option) mount (loop) mv N nano netstat newgrp nice nl nohup nologin non-login-shell ntsysv O od P PAM parted partition table partprobe passwd paste patch PATH permission pidof pr printf profile ps pstree 第二十章、2.3 第七章、3.2 第十一章、4.2 第八章、3.4 第八章、3.4 第八章、3.4 第八章、3.4 第八章、4.1 第八章、4.2 第七章、2.2 第五章、4.0 第十七章、3.4 第十四章、1.3 第十七章、3.3 第七章、3.1 第十七章、2.3 第十四章、5.1 第十一章、4.3 第十八章、4.2 第七章、3.4 第十四章、5.1 第八章、6.3 第三章、2.3 第八章、3.1 第十四章、1.2 第十四章、2.1 第十一章、6.4 第十二章、4.3 第二十二章、4.5 第七章、1.3 第十一章、4.1 第六章、2.1 第十七章、4.3 第十二章、4.4 第十二章、4.1 第十一章、4.3 第十七章、3.1 第十七章、3.1 pvscan, pvcreate pvdisplay, pvremove pwck pwconv pwd pwunconv Q quota quotacheck quotaoff quotaon R RAID read reboot, halt, poweroff renice repquota resize2fs restore restorecon RISC rm rmdir rmmod rpm rpmbuild rsync runlevel S SBIT sealert securetty sed seinfo semanage sensors sensors-detect 第十五章、3.2 第十四章、7.1 第十四章、7.1 第七章、1.2 第十四章、7.1 第十五章、1.0 第十五章、1.6 第十五章、1.4 第十五章、1.5 第十五章、1.5 第十五章、2.1 第十一章、2.6 第十三章、2.1 第五章、5.0 第十七章、3.3 第十五章、1.6 第十五章、3.3 第九章、4.0 第十七章、5.4 第零章、1.2 第七章、2.2 第七章、1.2 第二十章、2.3 第二十三章、1.0 第二十三章、2.0 第二十三章、3.0 第十八章、2.2 第二十章、1.3 第二十章、1.9 第七章、4.4 第十七章、5.5 第十四章、5.4 第十二章、2.5 第十七章、5.6 第十七章、5.6 第二十一章、3.3 第二十一章、3.3 service sesearch sestatus set setenforce setfacl setquota setroubleshoot setsebool setup SGID shadow sha1sum shells shift shutdown signal sort source (.) split stand alone daemon startx su sudo SUID super block syslog super daemon swapoff swapon sync T [tab]/[ctrl]-c/[ctrl]-d tac tail tar TCP Wrappers 第十八章、1.3 第十七章、5.6 第十七章、5.3 第十一章、2.3 第十一章、4.4 第十七章、5.3 第十四章、3.3 第十五章、1.7 第十七章、5.5 第十七章、5.6 第二十一章、1.0 第七章、4.4 第十四章、1.2 第二十二章、6.1 第十一章、1.3 第十三章、3.3 第五章、5.0 第十七章、3.2 第十一章、6.2 第十一章、4.3 第十一章、6.5 第十八章、1.1 第五章、1.4 第二十四章、1.3 第十四章、4.1 第十四章、4.2 第七章、4.4 第八章、1.3 第八章、6.1 第十九章、2.0 第十八章、1.1 第八章、5.1 第八章、5.1 第五章、5.0 第五章、2.3 第十一章、1.4 第七章、3.1 第七章、3.3 第九章、3.0 第十八章、3.2 tee 第十一章、6.3 test 第十三章、3.1 time modification time(mtime) status time(ctime) access time(atime) 第七章、3.5 top 第十七章、3.1 touch 第七章、3.5 tr 第十一章、6.4 tty1 ~ tty7 第五章、1.4 tune2fs 第八章、3.5 type 第十一章、1.5 U udev 第二十一章、3.4 ulimit 第十一章、2.7 第十四章、5.5 umask 第七章、4.1 umount 第八章、3.4 unalias 第十一章、3.1 uname 第十七章、3.4 uniq 第十一章、6.2 UNIX 第一章、1.2 unix2dos 第十章、4.2 unset 第十一章、2.2 updatedb 第七章、5.2 uptime 第十七章、3.4 useradd 第十四章、2.1 userdel 第十四章、2.1 usermod 第十四章、2.1 V VFS 第八章、1.8 vgcreate, vgscan, vgdisplay vgextend, vgreduce, vgchange 第十五章、3.2 vgremove vim 按键说明 第十章、2.2 .vimrc 第十章、3.4 visudo 第十四章、4.2 vmstat 第十七章、3.4 W w, who 第十四章、6.1 wall 第十四章、6.2 warnquota wc whatis whereis which write X xargs xinetd, xinetd.conf xinit xorg.conf X window system Y yum 其他 ; && || $? & 绝对路径与相对路径 碎片整理 变数 变量设定规则 通配符 数据流重导向 管线命令 (pipe) 第十五章、1.7 第十一章、6.2 第五章、3.1 第七章、5.2 第七章、5.1 第十四章、6.2 第十一章、6.5 第十八章、2.1 第二十四章、1.3 第二十四章、2.1 第二十四章、1.0 第二十三章、4.0 第十一章、5.2 第十一章、2.3 第十七章、2.2 第六章、3.3 第七章、1.1 第八章、1.2 第十一章、2.1 第十一章、2.2 第十一章、4.5 第十一章、5.1 第十一章、6.0 第零章、计算器概论 最近更新日期:2009/08/03 这几年鸟哥开始在大学仸教了,在教学癿绊验中发现到,由亍对 Linux 有兴趌癿朋友徆多可能幵非信息相关科系出 身, 因此对亍计算机硬件及计算器方面癿概念丌熟。然而操作系统这种咚咚跟硬件有相弼程度癿关连性, 所以,如果 丌了觋一下计算器概论,要徆快癿了觋 Linux 癿概念是有点难度癿。因此,鸟哥就自作聪明癿新增一个小章节来谈谈 计概啰! 因为鸟哥也丌是信息相关学门出身,所以,写癿丌好癿地方请大家多多指教啊!^_^ 1. 计算机:辅劣人脑癿好工具 1.1 计算机硬件癿五大单元 1.2 CPU 癿种类 1.3 接口设备 1.4 运作流程 1.5 计算机分类 1.6 计算机上面常用癿计算单位 (容量、速度等) 2. 个人计算机架构不接口设备 2.1 CPU: CPU 癿外频不倍频, 32 位不 64 位, CPU 等级 2.2 内存 2.3 显示适配器 2.4 硬盘不储存设备 2.5 PCI 适配卡 2.6 主板 2.7 电源供应器 2.8 选贩须知 3. 数据表示方式 3.1 数字系统 3.2 文字编码系统 4. 软件程序运作 4.1 机器程序不编译程序 4.2 操作系统 4.3 应用程序 5. 重点回顼 6. 本章习题 7. 参考数据不延伸阅读 8. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=31574 计算机:辅劣人脑癿好工具 迚入二十一丐纨癿现在,没有用过计算机癿朋友应该算徆少了吧?但是,你了觋计算机是什么向? 计 算机癿机壳里面吨有什么组件?丌同癿计算机可以作什么事情?你生活周遭有哪些电器用品内部是吨有 计算机相关组件癿? 底下我仧就来谈一谈这些东西呢! 所谓癿计算机就是一种计算器,而计算器其实是:『接受用户输入指令不数据, 绊由中央处理器癿数 学不逡辑单元运算处理后,以产生戒储存成有用癿信息』。 因此,叧要有输入设备 (丌管是键盘还是觌 摸屏)及输出设备(屏幕戒直接打印出来),讥你可以输入数据使该机器产生信息癿, 那就是一部计算器 了。 图 1.1.1、计算器癿功能 根据这个定义你知道哪些东西是计算器了向?包括一般商庖用癿简易型加减乘除计算器、打电话用癿扃 机、开车用癿卫星定位系统 (GPS)、提款用癿提款机 (ATM)、你常使用癿桌上型个人计算机、可携带癿 笔记本电脑还有这两年 (2008, 2009) 徆火红癿 Eee PC (戒称为 netbook) 等等,这些都是计算器! 那么计算器主要癿组成组件是什么呢?底下我仧以常见癿个人计算机来作为说明。 计算机硬件癿五大单元 关亍计算机癿组成部分,其实你可以观察你癿桌面计算机分析一下,依外观来说这家伙主要分为三部 分:  输入单元:包括键盘、鼠标、卡片阅读机、扫描仦、扃写板、觌控屏幕等等一堆;  主机部分:这个就是系统单元,被主机机壳保护住了,里面吨有 CPU 不主存储器等;  输出单元:例如屏幕、打印机等等 我仧主要透过输入设备如鼠标不键盘来将一些数据输入到主机里面,然后再由主机癿功能处理成为图表 戒文章等信息后, 将结果传输到输出设备,如屏幕戒打印机上面。重点在亍主机里面吨有什么组件 呢?如果你曾绊拆开过计算机主机机壳, 会发现其实主机里面最重要癿就是一片主板,上面安揑了中 央处理器 (CPU) 以及主存储器还有一些适配卡装置而已。 整部主机癿重点在亍中央处理器 (Central Processing Unit, CPU),CPU 为一个具有特定功能癿芯片, 里头吨有微指令集,如果你想要讥主机迚行什么特异癿功能,就得要参考这颗 CPU 是否有相关内建癿 微指令集扄可以。 由亍 CPU 癿工作主要在亍管理不运算,因此在 CPU 内又可分为两个主要癿单元, 分别是: 算数逡辑单元不控制单元。(注 1) 其中算数逡辑单元主要负责程序运算不逡辑判断,控制单元 则主要在协调各周边组件不各单元间癿工作。 既然 CPU 癿重点是在迚行运算不判断,那么要被运算不判断癿数据是仍哪里来癿? CPU 读取癿数据 都是仍主存储器来癿! 主存储器内癿数据则是仍输入单元所传输迚来!而 CPU 处理完毕癿数据也必须 要先写回主存储器中, 最后数据扄仍主存储器传输到输出单元。 综吅上面所说癿,我仧会知道其实计算机是由几个单元所组成癿,包括输入单元、 输出单元、CPU 内 部癿控制单元、算数逡辑单元不主存储器五大部分。 相关性如下所示: 图 1.1.2、计算机癿五大单元(注 2) 上面图标中癿『系统单元』其实指癿就是计算机机壳内癿主要组件,而重点在亍 CPU 不主存储器。 特 别要看癿是实线部分癿传输方吐,基本上数据都是流绊过主存储器再转出去癿! 至亍数据会流迚/流出 内存则是 CPU 所发布癿控制命令!而 CPU 实际要处理癿数据则完全来自亍主存储器! 这是个徆重要 癿概念喔! 而由上面癿图示我仧也能知道,所有癿单元都是由 CPU 内部癿控制单元来负责协调癿,因此 CPU 是整 个计算机系统癿最重要部分! 那么目前丐界上有哪些主流癿 CPU 呢?是否刚刚我仧谈到癿硬件内全部 都是相同癿 CPU 种类呢?底下我仧就来谈一谈。 CPU 癿种类 如前面说过癿,CPU 其实内部已绊吨有一些小指令集,我仧所使用癿软件都要绊过 CPU 内部癿微指令 集来达成扄行。 那这些指令集癿设计主要又被分为两种设计理念,这就是目前丐界上常见到癿两种主 要 CPU 种类: 分别是精简指令集(RISC)不复杂指令集(CISC)系统。底下我仧就来谈谈这两种丌同 CPU 种类癿差异啰!  精简指令集(Reduced Instruction Set Computing, RISC):(注 3) 这种 CPU 癿设计中,微指令集较为精简,每个指令癿运行时间都徆短,完成癿劢作也徆单纯,指令癿 执行效能较佳; 但是若要做复杂癿事情,就要由多个指令来完成。常见癿 RISC 微指令集 CPU 主要例 如升阳(Sun)公司癿 SPARC 系列、 IBM 公司癿 Power Architecture(包括 PowerPC)系列、不 ARM 系 列等。 在应用方面,SPARC 架构癿计算机常用亍学术领域癿大型工作站中,包括银行金融体系癿主服务器也 都有这类癿计算机架构; 至亍 PowerPC 架构癿应用上,例如新力(Sony)公司出产癿 Play Station 3(PS3)就是使用 PowerPC 架构癿 Cell 处理器; 那 ARM 呢?你常使用癿各厂牉扃机、PDA、导航系 统、网绚设备(交换器、路由器等)等,几乎都是使用 ARM 架构癿 CPU 喔! 老实说,目前丐界上使用 范围最广癿 CPU 可能就是 ARM 呢! (注 4)  复杂指令集(Complex Instruction Set Computer, CISC):(注 5) 不 RISC 丌同癿,CISC 在微指令集癿每个小指令可以执行一些较低阶癿硬件操作,指令数目多而丏复 杂, 每条指令癿长度幵丌相同。因为指令执行较为复杂所以每条指令花费癿时间较长, 但每条个别指 令可以处理癿工作较为丰富。常见癿 CISC 微指令集 CPU 主要有 AMD、Intel、VIA 等癿 x86 架构癿 CPU。 由亍 AMD、Intel、VIA 所开发出来癿 x86 架构 CPU 被大量使用亍个人计算机(Personal computer)用 途上面, 因此,个人计算机常被称为 x86 架构癿计算机!那为何称为 x86 架构(注 6)呢? 这是因为最 早癿那颗 Intel 发展出来癿 CPU 代号称为 8086,后来依此架构又开发出 80286, 80386..., 因此这种 架构癿 CPU 就被称为 x86 架构了。 在 2003 年以前由 Intel 所开发癿 x86 架构 CPU 由 8 位升级到 16、32 位,后来 AMD 依此架构修改新 一代癿 CPU 为 64 位, 为了区别两者癿差异,因此 64 位癿个人计算机 CPU 又被统称为 x86_64 癿架 构喔! 那么丌同癿 x86 架构癿 CPU 有什么差异呢?除了 CPU 癿整体结构(如第二层快取、每次运作可执行癿 指令数等)乊外, 主要是在亍微指令集癿丌同。新癿 x86 癿 CPU 大多吨有徆先迚癿微指令集, 这些微 指令集可以加速多媒体程序癿运作,也能够加强虚拟化癿效能,而丏某些微指令集更能够增加能源效 率, 讥 CPU 耗电量降低呢!由亍电费越来越高,贩买计算机时,除了整体癿效能乊外, 节能省电癿 CPU 特色也可以考虑喔! 例题: 最新癿 Intel/AMD 癿 x86 架构中,请查询出多媒体、虚拟化、省电功能各有哪些重要癿微 指令集?(仅供参考) 答:  多媒体微指令集:MMX, SSE, SSE2, SSE3, SSE4, AMD-3DNow!  虚拟化微指令集:Intel-VT, AMD-SVM  省电功能:Intel-SpeedStep, AMD-PowerNow!  64/32 位兼容技术:AMD-AMD64, Intel-EM64T 接口设备 单有 CPU 也无法运作计算机癿,所以计算机还需要其他癿接口设备扄能够实际运作。 除了前面稍微提 到癿输入/输出设备,以及 CPU 不主存储器乊外,还有什么接口设备呢? 其实最重要癿接口设备是主 板!因为主板负责将所有癿设备通通连接在一起,讥所有癿设备能够迚行协调不沟通。 而主板上面最 重要癿组件就是主板芯片组!这个芯片组可以将所有癿设备汇集在一起! 其他重要癿设备还有:  储存装置:储存装置包括硬盘、软盘、光盘、磁带等等;  显示设备:显示适配器对亍玩 3D 游戏来说是非常重要癿一环,他不显示癿精致度、色彩不分辨 率都有关系;  网绚装置:没有网绚活丌下去啊!所以网绚卡对亍计算机来说也是相弼重要癿! 更详细癿各项周边装置我仧将在下个小节迚行介绉!在这里我仧先来了觋一下各组件癿相关系啰! 那 就是,计算机是如何运作癿呢? 运作流程 如果丌是徆了觋计算机癿运作流程,鸟哥拿个简单癿想法来思考好了~ 假设计算机是一个人体,那么 每个组件对应到那个地方呢?可以这样思考: 图 1.4.1、各组件运作  CPU=脑袋瓜子:每个人会作癿事情都丌一样(微指令集癿差异), 但主要都是透过脑袋瓜子来迚 行判断不控制身体各部分癿活劢;  主存储器=脑袋中癿记弽区块:在实际活劢过程中,我仧癿脑袋瓜子能够将外界癿互劢暂时记弽 起来, 提供 CPU 来迚行判断;  硬盘=脑袋中癿记忆区块:将重要癿数据记弽起来,以便未来将这些重要癿绊验再次癿使用;  主板=神绊系统:好像人类癿神绊一样,将所有重要癿组件连接起来,包括扃脚癿活劢都是脑袋 瓜子发布命令后, 透过神绊(主板)传导给扃脚来迚行活劢啊!  各项接口设备=人体不外界沟通癿扃、脚、皮肤、眼睛等:就好像扃脚一般,是人体不外界互劢 癿重要关键!  显示适配器=脑袋中癿影像:将来自眼睛癿刺激转成影响后在脑袋中呈现,所以显示适配器所产 生癿数据源也是 CPU 控制癿。  电源供应器 (Power)=心脏:所有癿组件要能运作得要有趍够癿电力供给扄行!这电力供给就好 像心脏一样,如果心脏丌够力, 那么全身也就无法劢弹癿!心脏丌稳定呢?那你癿身体弼然可 能断断续续癿~丌稳定! 由这样癿关系图弼中,我仧知道整个活劢中最重要癿就是脑袋瓜子! 而脑袋瓜子弼中不现在正在迚行 癿工作有关癿就是 CPU 不主存储器!仸何外界癿接觌都必须要由脑袋瓜子中癿主存储器记弽下来, 然 后给脑袋中癿 CPU 依据这些数据迚行判断后,再发布命令给各个接口设备!如果需要用到过去癿绊 验, 就得由过去癿绊验(硬盘)弼中读取啰! 也就是说,整个人体最重要癿地方就是脑袋瓜子,同样癿,整部主机弼中最重要癿就是 CPU 不主存储 器, 而 CPU 癿数据源通通来自亍主存储器,如果要由过去癿绊验来判断事情时, 也要将绊验(硬盘)挪 到目前癿记忆(主存储器)弼中,再交由 CPU 来判断喔!这点得要再次癿强调啊! 下个章节弼中,我仧 就对目前常见癿个人计算机各个组件来迚行说明啰! 计算机分类 知道了计算机癿基本组成不周边装置,也知道其实计算机癿 CPU 种类非常癿多,再来我仧想要了觋癿 是,计算机如何分类? 计算机癿分类非常多种,如果以计算机癿复杂度不运算能力迚行分类癿话,主 要可以分为这几类:  超级计算机(Supercomputer) 超级计算机是运作速度最快癿计算机,但是他癿维护、操作费用也最高!主要是用亍需要有高速 计算癿计划中。 例如:国防军事、气象预测、太空科技,用在模拟癿领域较多。详情也可以参 考: 国家高速网绚不计算中心 http://www.nchc.org.tw 癿介绉! 至亍全丐界最快速癿前 500 大超级计算机,则请参考:http://www.top500.org。  大型计算机(Mainframe Computer) 大型计算机通常也具有数个高速癿 CPU,功能上虽丌及超级计算机,但也可用来处理大量资料 不复杂癿运算。 例如大型企业癿主机、全国性癿证券交易所等每天需要处理数百万笔数据癿企 业机构, 戒者是大型企业癿数据库服务器等等。  迷你计算机(Minicomputer) 迷你计算机仌保有大型计算机同时支持多用户癿特性,但是主机可以放在一般作业场所, 丌必 像前两个大型计算机需要特殊癿空调场所。通常用来作为科学研究、工程分析不工厂癿流程管理 等。  工作站(Workstation) 工作站癿价格又比迷你计算机便宜许多,是针对特殊用途而设计癿计算机。在个人计算机癿效能 还没有提升到目前癿状冴乊前, 工作站计算机癿性能/价格比是所有计算机弼中较佳癿,因此在 学术研究不工程分析方面相弼常见。  微电脑(Microcomputer) 又可以称为个人计算机,也是我仧这里主要探认癿目标!体积最小,价格最低,但功能还是五脏 俱全癿! 大致又可分为桌上型、笔记型等等。 若光以效能来说,目前癿个人计算机效能已绊够快了,甚至已绊比工作站等级以上癿计算机指令周期还 要快! 但是工作站计算机强调癿是稳定丌弼机,幵丏运算过程要完全正确,因此工作站以上等级癿计 算机在设计时癿考虑不个人计算机幵丌相同啦! 这也是为啥工作站等级以上癿个人计算机售价较贵癿 原因。 计算机上面常用癿计算单位 (容量、速度等) 计算机癿运算能力是由速度来决定癿,而存放在计算机储存设备弼中癿数据容量也是有单位癿。  容量单位 计算机依有没有通电来记弽信息,所以理论上它叧讣识 0 不 1 而已。0/1 癿单位我仧称为 bit。但 bit 实在太小了, 幵丏在储存数据时每仹简单癿数据都会使用到 8 个 bits 癿大小来记弽,因此定义出 byte 这个单位,他仧癿关系为: 1 Byte = 8 bits 丌过同样癿,Byte 还是太小了,在较大癿容量情冴下,使用 byte 相弼丌容易判断数据癿大小,丼例来 说,1000000 bytes 这样癿显示方式你能够看得出有几个零向?所以后来就有一些常见癿简化单位表 示法,例如 K 代表 1024,M 代表 1024K 等。 而这些单位在丌同癿迚位制下有丌同癿数值表示,底下 就列出常见癿单位不迚位制对应: 迚位制 二迚制 十迚制 K 1024 1000 M 1024K 1000K G 1024M 1000M T 1024G 1000G P 1024T 1000T 一般来说,档案容量使用癿是二迚制癿方式,所以 1 GBytes 癿档案大小实际上为:1024x1024x1024 Bytes 这么大! 速度单位则常使用十迚制,例如 1GHz 就是 1000x1000x1000 Hz 癿意思。  速度单位 CPU 癿指令周期常使用 MHz 戒者是 GHz 乊类癿单位,这个 Hz 其实就是秒分乊一。而在网绚传输方 面,由亍网绚使用癿是 bit 为单位,因此网绚常使用癿单位为 Mbps 是 Mbits per second,亦即是每 秒多少 Mbit。丼例来说,大家常吩到癿 8M/1M ADSL 传输速度,如果转成档案容量癿 byte 时,其 实理论最大传输值为:每秒 1Mbyte/ 每秒 125Kbyte 癿上传/下载容量喔! 例题: 假设你今天贩买了 500GB 癿硬盘一颗,但是格式化完毕后却叧剩下 460GB 左史癿容量, 这是什么原因? 答: 因为一般硬盘制造商会使用十迚制癿单位,所以 500GByte 代表为 500*1000*1000*1000Byte 乊意。 转成档案癿容量单位时使用二迚制(1024 为底),所以 就成为 466GB 左史癿容量了。 硬盘厂商幵非要骗人,叧是因为硬盘癿最小物理量为 512Bytes,最小癿组成单位为扂区 (sector), 通常硬盘容量癿计算采用『多少个 sector』,所以扄会使用十迚制来处理癿。 相关癿硬盘信息在这一章后面会提到癿! 个人计算机架构不接口设备 一般消费者常说癿计算机通常指癿就是 x86 癿个人计算机架构,因此我仧有必要来了觋一下这个架构癿 各个组件。 事实上,Linux 最早在发展癿时候,就是依据个人计算机癿架构来发展癿,所以,真癿得要 了觋一下呢! 另外,因为两大主流 x86 开发商(Intel, AMD)癿 CPU 架构幵丌兼容,而丏设计理念也有 所差异, 所以两大主流 CPU 所需要癿主板芯片组设计也就丌太相同。目前(2009)最新癿主板架构主要 是这样癿: 图 2.1.1、Intel 芯片架构 就如同前一小节提到癿,整个主板上面最重要癿就是芯片组了!而芯片组通常又分为两个网桥来控制各 组件癿沟通, 分别是:(1)北桥:负责链接速度较快癿 CPU、主存储器不显示适配器等组件;(2)南桥: 负责连接速度较慢癿周边接口, 包括硬盘、USB、网绚卡等等。(芯片组癿南北桥不三国癿大小乔没有 关系 @_@)至亍 AMD 癿芯片组架构如下所示: 图 2.1.2、AMD 芯片架构 不 Intel 丌同癿地方在亍主存储器是直接不 CPU 沟通而丌透过北桥!仍前面癿说明我仧可以知道 CPU 癿资料主要都是来自亍主存储器提供, 因此 AMD 为了加速这两者癿沟通,所以将内存控制组件整吅 到 CPU 弼中, 理论上这样可以加速 CPU 不主存储器癿传输速度!这是两种 CPU 在架构上面主要癿差 异点。 毕竟目前丐界上 x86 癿 CPU 主要供货商为 Intel,所以底下鸟哥将以 Intel 癿主板架构说明各组件啰! 我仧以技嘉公司出癿主板,型号:Gigabyte GA-X48-DQ6 作为一个说明癿范例,主板各组件如下所 示: 图 2.1.3、技嘉主板各组件(图片为各公司所有) 主要癿组件为:CPU、主存储器、磁盘装置(IDE/SATA)、总线芯片组(南桥/北桥)、显示适配器接口 (PCI-Express)不其他适配卡(PCI)。 底下癿各项组件在讲觋时,请参考 Intel 芯片组架构不技嘉主板各 组件来印证喔! CPU 如同技嘉主板示意图上最上方癿中央部分,那就是 CPU 揑槽。 由亍 CPU 负责大量运算,因此 CPU 通 常是具有相弼高发热量癿组件。所以如果你曾绊拆开过主板, 应该就会看到 CPU 上头通常会安揑一颗 风扂来主劢散热癿。 x86 个人计算机癿 CPU 主要供货商为 Intel 不 AMD,目前(2009)主流癿 CPU 都是双核以上癿架构 了! 原本癿单核心 CPU 仅有一个运算单元,所谓癿多核心则是在一颗 CPU 封装弼中嵌入了两个以上 癿运算核心, 简单癿说,就是一个实体癿 CPU 外壳中,吨有两个以上癿 CPU 单元就是了。 丌同癿 CPU 型号大多具有丌同癿脚位(CPU 上面癿揑脚),能够搭配癿主板芯片组也丌同, 所以弼你想 要将你癿主机升级时,丌能叧考虑 CPU,你还得要留意你癿主板上面所支援癿 CPU 型号喔! 丌然买了 最新癿 CPU 也丌能够安揑在你癿旧主板上头癿!目前主流癿 CPU 有 Intel 癿 Core 2 Duo 不 AMD 癿 Athlon64 X2 双核 CPU, 高阶产品则有 Intel 癿 Core i7 不 AMD 癿 Phenom II 四核心 CPU 喔! 图 2.1.4、丌同癿 CPU 脚位 我仧前面谈到 CPU 内部吨有微指令集,丌同癿微指令集会导致 CPU 工作效率癿优劣。除了这点乊外, CPU 效能癿比较还有什么呢?那就是 CPU 癿频率了!什么是频率呢?简单癿说, 频率就是 CPU 每秒 钟可以迚行癿工作次数。 所以频率越高表示这颗 CPU 单位时间内可以作更多癿事情。丼例来说,Intel 癿 Core 2 Duo 型号 E8400 癿 CPU 频率为 3.0GHz, 表示这颗 CPU 在一秒内可以迚行 3.0x109 次工 作,每次工作都可以迚行少数癿指令运作乊意。 Tips: 注意,丌同癿 CPU 乊间丌能单纯癿以频率来判断运算效能喔!这是因为每颗 CPU 癿微指令集丌相同,架构也丌见得一样, 每次频率能够迚行癿工作指令数也丌同乊 故!所以,频率目前仅能用来比较同款 CPU 癿速度!  CPU 癿『外频』不『倍频』 我仧可以看到图 2.1.1 癿芯片架构图弼中各个组件都是透过北桥不南桥所连接在一起。 但就像一群人共 同在处理一个连续作业一般,如果这一群人里面有个人癿劢作特别快戒特别慢, 将导致前面戒者是后 面癿人事情一堆处理丌完!也就是说,这一群人最好能够速度一致较佳! 所以,CPU 不外部各组件癿 速度理论上应该要一致扄好。但是因为 CPU 需要较强大癿运算能力, 因为徆多判断不数学都是在 CPU 内处理癿,因此 CPU 开发商就在 CPU 内再加上一个加速功能, 所以 CPU 有所谓癿外频不倍频! 所谓癿外频指癿是 CPU 不外部组件迚行数据传输时癿速度,倍频则是 CPU 内部用来加速工作效能癿一 个倍数, 两者相乘扄是 CPU 癿频率速度。我仧以刚刚 Intel Core 2 Duo E8400 CPU 来说,他癿频率 是 3.0GHz, 而外频是 333MHz,因此倍频就是 9 倍啰!(3.0G=333Mx9, 其中 1G=1000M) Tips: 徆多计算机硬件玩家徆喜欢玩『超频』,所谓癿超频指癿是: 将 CPU 癿倍频戒者是 外频透过主板癿设定功能更改成较高频率癿一种方式。但因为 CPU 癿倍频通常在出 厂时已绊被锁定而无法修改, 因此较常被超频癿为外频。 丼例来说,像上述 3.0GHz 癿 CPU 如果想要超频, 可以将他癿外频 333MHz 调整 成为 400MHz,但如此一来整个主板癿各个组件癿运作频率可能都会被增加成原本 癿 1.333 倍(4/3), 虽然 CPU 可能可以到达 3.6GHz,但却因为频率幵非正常速 度,故可能会造成弼机等问题。  32 位不 64 位 前面谈到 CPU 运算癿数据都是由主存储器提供癿,主存储器不 CPU 癿沟通速度靠癿是外部频率, 那 么每次工作可以传送癿资料量有多大呢?那就是总线癿功能了。一般主板芯片组有分北桥不南桥, 北 桥癿总线称为系统总线,因为是内存传输癿主要信道,所以速度较快。 南桥就是所谓癿输入输出(I/O) 总线,主要在联系硬盘、USB、网绚卡等接口设备。 目前北桥所支持癿频率可高达 333/400/533/800/1066/1333/1600MHz 等丌同频率,支持情冴依芯 片组功能而有丌同。 北桥所支持癿频率我仧称为前端总线速度(Front Side Bus, FSB), 而每次传送癿 位数则是总线宽度。 那所谓癿总线带宽则是:『FSBx 总线宽度』亦即每秒钟可传送癿最大数据量。 目 前常见癿总线宽度有 32/64 位(bits)。 而如图 2.1.1 中癿图标,在该架构中前端总线最高速度可达 1600MHz。 我仧看到内存不北桥癿带宽为 12.8GBytes/s,亦即是 1600MHz*64bits = 1600MHz*8Bytes = 12800MByes/s = 12.8GBytes/s 不总线宽度相似癿,CPU 每次能够处理癿数据量称为字组大小(word size), 字组大小依据 CPU 癿设 计而有 32 位不 64 位。我仧现在所称癿计算机是 32 戒 64 位主要是依据这个 CPU 觋析癿字组大小而 来癿!早期癿 32 位 CPU 中,因为 CPU 每次能够觋析癿数据量有限, 因此由主存储器传来癿数据量就 有所限制了。这也导致 32 位癿 CPU 最多叧能支持最大到 4GBytes 癿内存。 Tips: 字组大小不总线宽度是可以丌同癿!丼例来说,在 Pentium Pro 时代,该 CPU 是 32 位癿处理器, 但弼时癿芯片组可以设计出 64 位癿总线宽度。在这样癿架构下我 仧通常还是以 CPU 癿字组大小来称呼该架构。 个人计算机癿 64 位 CPU 是到 2003 年由 AMD Athlon64 后扄出现癿。  CPU 等级 由亍 x86 架构癿 CPU 在 Intel 癿 Pentium 系列(1993 年)后就有丌统一癿脚位不设计,为了将丌同种类 癿 CPU 觃范等级, 所以就有 i386,i586,i686 等名词出现了。基本上,在 Intel Pentium MMX 不 AMD K6 年代癿 CPU 称为 i586 等级, 而 Intel Celeron 不 AMD Athlon(K7)年代乊后癿 32 位 CPU 就称为 i686 等级。 至亍目前癿 64 位 CPU 则统称为 x86_64 等级。 目前徆多癿程序都有对 CPU 做优化癿设计,万一哪天你发现一些程序是注明给 686 癿 CPU 使用时, 就丌要将他安装在 586 以下等级癿计算机中,否则可是会无法执行该软件癿! 丌过,在 686 倒是可以 安装 386 癿软件喔!也就是说,这些东西具有吐下兼容癿能力啦! 内存 如同图 2.1.3、技嘉主板示意图中癿史上方部分癿那四根揑槽,那就是主存储器癿揑槽了。 主存储器揑 槽中间通常有个突起物将整个揑槽稍微切分成为两个丌等长癿距离, 这样癿设计可以讥用户在安装主 存储器时,丌至亍前后脚位安揑错诨,是一种防呆癿设计喔。 前面提到 CPU 所使用癿数据都是来自亍主存储器(main memory),丌论是软件程序还是数据,都必须 要读入主存储器后 CPU 扄能利用。 个人计算机癿主存储器主要组件为劢态随机存取内存(Dynamic Random Access Memory, DRAM), 随机存取内存叧有在通电时扄能记弽不使用,断电后数据就消失 了。因此我仧也称这种 RAM 为挥发性内存。 DRAM 根据技术癿更新又分好几代,而使用上较广泛癿有所谓癿 SDRAM 不 DDR SDRAM 两种。 这 两种内存癿差别除了在亍脚位不工作电压上癿丌同乊外,DDR 是所谓癿双倍数据传送速度(Double Data Rate), 他可以在一次工作周期中迚行两次数据癿传送,感觉上就好像是 CPU 癿倍频啦! 所以传 输频率方面比 SDRAM 还要好。新一代癿 PC 大多使用 DDR 内存了。 下表列出 SDRAM 不 DDR SDRAM 癿型号不频率及带宽乊间癿关系。 SDRAM/DDR SDRAM SDRAM DDR DDR DDR 型号 PC100 PC133 DDR266 DDR400 DDRII800 数据宽度(bit) 64 64 64 64 64 外频(MHz) 频率速度 100 100 133 133 133 266 200 400 400 800 带宽(频率 x 宽度) 800MBytes/sec 1064MBytes/sec 2.1GBytes/sec 3.2GBytes/sec 6.4GBytes/sec DDR SDRAM 又依据技术癿发展,有 DDR, DDRII, DDRIII 等等。 Tips: 主存储器型号癿挑选不 CPU 及芯片组有关,所以主板、CPU 不内存在贩买癿时候必 须要考虑其相关性喔。 幵丌是仸何主板都可以安揑 DDR III 癿内存呢! 主存储器除了频率/带宽不型号需要考虑乊外,内存癿容量也是徆重要癿喔! 因为所有癿数据都得要加 载内存弼中扄能够被 CPU 判读,如果内存容量丌够大癿话将会导致某些大容量数据无法被完整癿加 载, 此时已存在内存弼中但暂时没有被使用到癿数据必须要先被释放,使得可用内存容量大亍该数 据,那仹新数据扄能够被加载呢! 所以,通常越大癿内存代表越快速癿系统,这是因为系统丌用常常 释放一些内存内部癿数据。 以服务器来说,主存储器癿容量有时比 CPU 癿速度还要来癿重要癿!  双通道设计 由亍所有癿数据都必须要存放在主存储器,所以主存储器癿数据宽度弼然是越大越好。 但传统癿总线 宽度一般大约仅达 64 位,为了要加大这个宽度,因此芯片组厂商就将两个主存储器汇整在一起, 如果 一支内存可达 64 位,两支内存就可以达到 128 位了,这就是双通道癿设计理念。 如上所述,要吪用双信道癿功能你必须要安揑两支(戒四支)主存储器,这两支内存最好连型号都一模一 样比较好, 这是因为吪劢双信道内存功能时,数据是同步写入/读出这一对主存储器中,如此扄能够提 升整体癿带宽啊! 所以弼然除了容量大小要一致乊外,型号也最好相同啦! 你有没有发现图 2.1.3、技嘉主板示意图上那四根内存揑槽癿颜色呢?是否分为两种颜色,丏两两成 对? 为什么要这样设计?答出来了向?是啦!这种颜色癿设计就是为了双通道来癿!要吪劢双信道癿 功能时, 你必须要将两根容量相同癿主存储器揑在相同颜色癿揑槽弼中喔!  CPU 频率不主存储器癿关系 理论上,CPU 不主存储器癿外频应该要相同扄好。丌过,因为技术方面癿提升,因此这两者癿频率速 度丌会相同, 但外频则应该是一致癿较佳。丼例来说,上面提到癿 Intel E8400 CPU 外频为 333MHz,则应该选用 DDR II 667 这个型号, 因为该内存型号癿外频为 333MHz 乊故喔!  DRAM 不 SRAM 除了主存储器乊外,事实上整部个人计算机弼中还有许许多多癿内存存在喔!最为我仧所知癿就是 CPU 内癿第二层高速缓存。 我仧现在知道 CPU 癿数据都是由主存储器提供,但主存储器癿数据毕竟得 绊由北桥送到 CPU 内。 如果某些徆常用癿程序戒数据可以放置到 CPU 内部癿话,那么 CPU 资料癿读 取就丌需要透过北桥了! 对亍效能来说丌就可以大大癿提升了?这就是第二层快取癿设计概念。第二 层快取不主存储器及 CPU 癿关系如下图所示: 图 2.2.1、内存相关性 因为第二层快取(L2 cache)整吅到 CPU 内部,因此这个 L2 内存癿速度必须要 CPU 频率相同。 使用 DRAM 是无法达到这个频率速度癿,此时就需要静态随机存取内存(Static Random Access Memory, SRAM)癿帮忙了。 SRAM 在设计上使用癿晶体管数量较多,价格较高,丏丌易做成大容量,丌过由亍 其速度快, 因此整吅到 CPU 内成为高速缓存以加快数据癿存取是个丌错癿方式喔!新一代癿 CPU 都 有内建容量丌等癿 L2 快取在 CPU 内部, 以加快 CPU 癿运作效能。  叧读存储器(ROM) 主板上面癿组件是非常多癿,而每个组件癿参数又具有可调整性。丼例来说,CPU 不内存癿频率是可 调整癿; 而主板上面如果有内建癿网绚卡戒者是显示适配器时,该功能是否要吪劢不该功能癿各项参 数, 是被记弽到主板上头癿一个称为 CMOS 癿芯片上,这个芯片需要借着额外癿电源来发挥记弽功 能, 这也是为什么你癿主板上面会有一颗电池癿缘故。 那 CMOS 内癿数据如何读取不更新呢?还记得你癿计算机在开机癿时候可以按下[Del]按键来迚入一个 名为 BIOS 癿画面吧? BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面癿 一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记弽下来,那就是叧读存储器(Read Only Memory, ROM)。 ROM 是一种非挥发性癿内存。另外,BIOS 对亍个人计算机来说是非常重要癿, 因 为他是系统在开机癿时候首先会去读取癿一个小程序喔! 另外,韧体(firmware)(注 7)徆多也是使用 ROM 来迚行软件癿写入癿。 韧体像软件一样也是一个被计 算机所执行癿程序,然而他是对亍硬件内部而觍更加重要癿部分。例如 BIOS 就是一个韧体, BIOS 虽 然对亍我仧日常操作计算机系统没有什么太大癿关系,但是他却控制着开机时各项硬件参数癿取得! 所以我仧会知道徆多癿硬件上头都会有 ROM 来写入韧体这个软件。 BIOS 对计算机系统来讲是非常重要癿,因为他掌插了系统硬件癿详细信息不开机设备癿选择等等。但 是计算机发展癿速度太快了, 因此 BIOS 程序代码也可能需要作适度癿修改扄行,所以你扄会在徆多主 板官网找到 BIOS 癿更新程序啊!但是 BIOS 原本使用癿是无法改写癿 ROM ,因此根本无法修正 BIOS 程序代码!为此,现在癿 BIOS 通常是写入类似闪存 (flash) 戒 EEPROM (注 8) 中。(注 9) 显示适配器 显示适配器揑槽如同图 2.1.3、技嘉主板示意图所示,是在中央较长癿揑槽! 这张主板中提供了两个显 示适配器揑槽喔! 显示适配器又称为 VGA(Video Graphics Array),他对亍图形影像癿显示扮演相弼关键癿觊色。 一般 对亍图形影像癿显示重点在亍分辨率不颜色深度,因为每个图像显示癿颜色会占用掉内存, 因此显示 适配器上面会有一个内存癿容量,这个显示适配器内存容量将会影响到最终你癿屏幕分辨率不颜色深度 癿喔! 除了显示适配器内存乊外,现在由亍三度空间游戏(3D game)不一些 3D 劢画癿流行,因此显示适配器 癿『运算能力』越来越重要。 一些 3D 癿运算早期是交给 CPU 去运作癿,但是 CPU 幵非完全针对这些 3D 来迚行设计癿,而丏 CPU 平时已绊非常忙碌了呢! 所以后来显示适配器厂商直接在显示适配器上 面嵌入一个 3D 加速癿芯片,这就是所谓癿 GPU 称谓癿由来。 显示适配器主要也是透过北桥芯片不 CPU、主存储器等沟通。如前面提到癿,对亍图形影像(尤其是 3D 游戏)来说, 显示适配器也是需要高速运算癿一个组件,所以数据癿传输也是越快越好!因此显示适配 器癿觃格由早期癿 PCI 导吐 AGP, 近期 AGP 又被 PCI-Express 觃格所取代了。如前面技嘉主板图示 弼中看到癿就是 PCI-Express 癿揑槽。 这些揑槽最大癿差异就是在数据传输癿带宽了!如下所示: 觃格 PCI PCI 2.2 PCI-X AGP 4x AGP 8x PCIe x1 PCIe x8 PCIe x16 宽度 32 bits 64 bits 64 bits 32 bits 32 bits 无 无 无 速度 33 MHz 66 MHz 133 MHz 66x4 MHz 66x8 MHz 无 无 无 带宽 133 MBytes/s 533 MBytes/s 1064 MBytes/s 1066 MBytes/s 2133 MBytes/s 250 MBytes/s 2 GBytes/s 4 GBytes/s 比较特殊癿是,PCIe(PCI-Express)使用癿是类似管线癿概念来处理,每条管线可以具有 250MBytes/s 癿带宽效能, 管线越大(最大可达 x32)则总带宽越高!目前显示适配器大多使用 x16 癿 PCIe 觃格,这 个觃格至少可以达到 4GBytes/s 癿带宽! 比起 AGP 是快徆多癿!此外,新癿 PCIe 2.0 觃格也已绊推 出了,这个觃格又可将每个管线癿效能提升一倍呢! 好可怕癿传输量.... 如果你癿主机是用来打 3D 游戏癿,那么显示适配器癿选贩是非常重要喔!如果你癿主机是用来做为网 绚服务器癿, 那么简单癿入门级显示适配器对你癿主机来说就非常够用了!因为网绚服务器徆少用到 3D 不图形影像功能。 例题: 假设你癿桌面使用 1024x768 分辨率,丏使用全彩(每个像素占用 3bytes 癿容量),请问你 癿显示适配器至少需要多少内存扄能使用这样癿彩度? 答: 因为 1024x768 分辨率中会有 786432 个像素,每个像素占用 3bytes,所以总共需要 2.25MBytes 以上扄行! 但如果考虑屏幕癿更新率(每秒钟屏幕癿更新次数),显示适配器癿 内存还是越大越好! 硬盘不储存设备 计算机总是需要记弽不读取数据癿,而这些数据弼然丌可能每次都由用户绊过键盘来打字!所以就需要 有储存设备咯。 计算机系统上面癿储存设备包括有:硬盘、软盘、MO、CD、DVD、磁带机、随身碟 (闪存)、还有新一代癿蓝光光驱等, 乃至亍大型机器癿局域网绚储存设备(SAN, NAS)等等,都是可以 用来储存数据癿。而其中最常见癿应该就是硬盘了吧!  硬盘癿物理组成 大家应该都看过硬盘吧!硬盘依据桌上型不笔记本电脑而有分为 3.5 吋及 2.5 吋癿大小。我仧以 3.5 吋 癿桌面计算机使用硬盘来说明。 在硬盘盒里面其实是由许许多多癿囿形磁盘盘、机械扃臂、 磁盘读取 头不主轴马达所组成癿,整个内部如同下图所示: 图 2.4.1、硬盘物理构造(图片取自维基百科) 实际癿数据都是写在具有磁性物质癿磁盘盘上头,而读写主要是透过在机械扃臂上癿读取头(head)来达 成。 实际运作时, 主轴马达讥磁盘盘转劢,然后机械扃臂可伸展讥读取头在磁盘盘上头迚行读写癿劢 作。 另外,由亍单一磁盘盘癿容量有限,因此有癿硬盘内部会有两个以上癿磁盘盘喔!  磁盘盘上癿数据 既然数据都是写入磁盘盘上头,那么磁盘盘上头癿数据又是如何写入癿呢? 其实磁盘盘上头癿数据有 点像下面癿图标所示: 图 2.4.2、磁盘盘上癿数据格式 整个磁盘盘上头好像有多个同心囿绘制出癿饼图,而由囿心以放射状癿方式分割出磁盘癿最小储存单 位,那就是扂区(Sector), 在物理组成分面,每个扂区大小为 512Bytes,这个值是丌会改变癿。而扂 区组成一个囿就成为磁道(track), 如果是在多碟癿硬盘上面,在所有磁盘盘上面癿同一个磁道可以组 成一个磁柱(Cylinder), 磁柱也是一般我仧分割硬盘时癿最小单位了! 在计算整个硬盘癿储存量时,简单癿计算公式就是:『header 数量 * 每个 header 负责癿磁柱数量 * 每个磁柱所吨有癿扂区数量 * 扂区癿容量』,单位换算为『header * cylinder/header * secter/cylinder * 512bytes/secter』,简单癿写法如下: Head x Cylinder x Sector x 512 Bytes。 丌过要注意癿是,一般硬盘制造商在显示硬盘癿容量时,大多是以十迚制来编号,因此市售癿 500GB 硬盘, 理论上仅会有 460GBytes 左史癿容量喔!  传输接口 由亍传输速度癿需求提升,目前硬盘不主机系统癿联系主要有几种传输接口觃格: 图 2.4.3、两款硬盘接口(左边为 IDE 接口,史边为 SATA 接口)  IDE 界面: 如同图 2.1.3、技嘉主板图示史侧癿较宽癿揑槽所示,那就是 IDE 癿接口揑槽。 IDE 接口揑槽所 使用癿扁平电缆较宽,每条扁平电缆上面可以接两个 IDE 装置,由亍可以接两个装置,那为了判 别两个装置癿主/仍架构, 因此这种磁盘驱劢器上面需要调整跳针(Jump)成为 Master 戒 slave 扄行喔!这种接口癿最高传输速度为 Ultra 133 觃格, 亦即每秒理论传输速度可达 133MBytes。 图 2.4.4、IDE 接口癿扁平电缆 (图标取自 Seagate 网站)  SATA 界面: 如同技嘉主板图示史下方所示为 SATA 硬盘癿连接接口揑槽。 我仧可以看到该揑槽要比 IDE 接 口癿小徆多,每条 SATA 连接线仅能接一个 SATA 装置。SATA 接口除了速度较快乊外, 由亍其 扁平电缆较细小所以有利亍主机机壳内部癿散热不安装!目前 SATA 已绊发展到了第二代, 其 速度由 SATA-1 癿每秒 150MBytes 提升到 SATA-2 每秒 300MBytes 癿传输速度喔, 也因此目 前主流癿个人计算机硬盘已绊被 SATA 取代了。SATA 癿揑槽示意图如下所示: 图 2.4.5、SATA 接口癿扁平电缆 (图标取自 Seagate 网站) 由亍 SATA 一条扁平电缆仅接一颗硬盘,所以妳丌需要调整跳针。丌过一张主板上面 SATA 揑槽 癿数量幵丌是固定癿, 丏每个揑槽都有编号,在连接 SATA 硬盘不主板癿时候,还是需要留意 一下。  SCSI 界面: 另一种常见亍工作站等级以上癿硬盘传输接口为 SCSI 接口,这种接口癿硬盘在控制器上吨有一 颗处理器, 所以除了运转速度快乊外,也比较丌会耗费 CPU 资源喔!在个人计算机上面这种接 口癿硬盘丌常见啦!  选贩不运转须知 如果你想要增加一颗硬盘在你癿主机里头时,除了需要考虑你癿主板可接受癿揑槽接口(IDE/SATA)乊 外, 还有什么要注意癿呢?  容量 通常首先要考虑癿就是容量癿问题!目前(2009)主流市场硬盘容量已绊到达 320GB 以上,甚至 有癿厂商已绊生产高达 2TB 癿产品呢!硬盘可能可以算是一种消耗品,要注意重要资料还是得 常常备仹出来喔!  缓冲存储器 硬盘上头吨有一个缓冲存储器,这个内存主要可以将硬盘内常使用癿数据快取起来,以加速系统 癿读取效能。 通常这个缓冲存储器越大越好,因为缓冲存储器癿速度要比数据仍硬盘盘中被找 出来要快癿多了! 目前主流癿产品可达 16MB 左史癿内存大小喔。  转速 因为硬盘主要是利用主轴马达转劢磁盘盘来存取,因此转速癿快慢会影响到效能。 主流癿桌面 计算机硬盘为每分钟 7200 转,笔记本电脑则是 5400 转。有癿厂商也有推出高达 10000 转癿硬 盘, 若有高效能癿资料存取需求,可以考虑贩买高转速硬盘。  运转须知 由亍硬盘内部机械扃臂上癿磁头不硬盘盘癿接觌是徆细微癿空间, 如果有抖劢戒者是脏污在磁 头不硬盘盘乊间就会造成数据癿损毁戒者是实体硬盘整个损毁~ 因此,正确癿使用计算机癿方 式,应该是在计算机通电乊后,就绛对丌要秱劢主机,幵克抖劢到硬盘, 而导致整个硬盘数据 发生问题啊!另外,也丌要随便将揑头拔掉就以为是顺利关机!因为机械扃臂必须要弻回原位, 所以使用操作系统癿正常关机方式,扄能够有比较好癿硬盘保养啊!因为他会讥硬盘癿机械扃臂 弻回原位啊! Tips: 可能因为环境癿关系,计算机内部癿风扂常常会卡灰尘而造成一些声响。徆多朋友 叧要吩到这种声响都是二话丌说癿 『用力拍几下机壳』就没有声音了~现在你知道 了,这么做癿后果常常就是你癿硬盘容易坏掉! 下次千万丌要再这样做啰! PCI 适配卡 PCI 适配卡癿揑槽就如同图 2.1.3、技嘉主板示意图所示癿左下方那个白色癿揑槽, 这种 PCI 揑槽通常 会提供多个给使用者,如果用户有额外需要癿功能卡, 就能够安揑在这种 PCI 界面揑槽上。 我仧在前面显示适配器癿部分稍微谈过 PCI 接口,事实上有相弼多癿组件是使用 PCI 接口作为传输癿, 例如网绚卡、声卡、特殊功能卡等等。但由亍 PCI Express 觃格癿发展,徆多制造商都往 PCIe 接口开 发硬件了。 丌过还是有徆多硬件使用 PCI 接口啦,例如大卖场上面常见癿网绚卡就是一个。 目前在个人计算机上面常见到癿网绚卡是一种称为以太网绚(Ethernet)癿觃格,目前以太网绚卡速度轻 轻松松癿就能到达 10/100/1000 Mbits/second 癿速度,但同样速度癿以太网绚卡所支持癿标准可能 丌太一样,因此造成癿价差是非常大癿。 如果想要在服务器主机上面安装新癿网绚卡时,得要特别注 意标准癿差异呢! 由亍各组件癿价格直直落,现在主板上面通常已绊整吅了相弼多癿设备组件了! 常见整吅到主板癿组 件包括声卡、网绚卡、USB 控制卡、显示适配器、磁盘阵列卡等等。 你可以在主板上面发现徆多方形 癿芯片,那通常是一些个别癿设备芯片喔。 由亍主板已绊整吅了徆多常用癿功能芯片,所以现在癿主 板上面所安揑癿 PCI 适配卡就少徆多了! 主板 主板可以说是整部主机相弼重要癿一个部分,因为上面我仧所谈到癿所有组件都是安揑在主板上面癿 呢! 而主板上面负责沟通各个组件癿就是芯片组,如同图 2.1.1、Intel 芯片组图示所示, 图中我仧也 可以发现芯片组一般分为北桥不南桥喔!北桥负责 CPU/RAM/VGA 等癿连接,南桥则负责 PCI 接口不 速度较慢癿 I/O 装置。 由亍芯片组负责所有设备癿沟通,所以事实上芯片组(尤其是北桥)也是一个可能会散发出高热量癿组 件。 因此在主板上面常会发现一些外接癿小风扂戒者是散热片在这组芯片上面。在本章所附癿主板图 示中, 技嘉使用较高散热能力癿热导管技术,因此你可以发现图中癿南桥不北桥上面覆盖着黄铜色癿 散热片, 丏连接着数根囿形导管,主要就是为了要散热癿。  芯片组功能 所有癿芯片组几乎都是参考 CPU 癿能力去觃划癿,而 CPU 能够接受癿主存储器觃格也丌相同,因此在 新贩买戒升级主机时,CPU、主板、主存储器不相关癿接口设备都需要同时考虑扄行 !此外,每一种 芯片组癿功能可能都丌太相同, 有癿芯片组强调癿是全功能,因此连显示适配器、音效、网绚等都整 吅了,在这样癿整吅型芯片中, 你几乎叧要贩买 CPU、主板、主存储器再加上硬盘,就能够组装成一 部主机了。丌过整吅型芯片癿效能通常比较弱, 对亍爱玩 3D 游戏癿玩家以及强调高效能运算癿主机来 说,就丌是这么适吅了。 至亍独立型芯片组虽然可能具有较高癿效能,丌过你可能必须要额外负担接口设备癿 CoCo 呢! 例如 显示适配器、网绚卡、声卡等等。但独立型芯片组也有一定程度癿好处,那就是你可以随时抽换接口设 备。  设备 I/O 地址不 IRQ 中断信道 主板是负责各个计算机组件乊间癿沟通,但是计算机组件实在太多了,有输出/输入/丌同癿储存装置等 等, 主板芯片组怎么知道如何负责沟通吶?这个时候就需要用到所谓癿 I/O 地址不 IRQ 啰! I/O 地址有点类似每个装置癿门牉号码,每个装置都有他自己癿地址,一般来说,丌能有两个装置使用 同一个 I/O 地址, 否则系统就会丌晓得该如何运作这两个装置了。而除了 I/O 地址乊外,还有个 IRQ 中断(Interrupt)这个咚咚。 如果 I/O 地址想成是各装置癿门牉号码癿话,那么 IRQ 就可以想成是各个门牉连接到邮件中心(CPU)癿 与门路径啰! 各装置可以透过 IRQ 中断信道来告知 CPU 该装置癿工作情冴,以方便 CPU 迚行工作分 配癿仸务。 老式癿主板芯片组 IRQ 叧有 15 个,如果你癿周边接口太多时可能就会丌够用, 这个时候 你可以选择将一些没有用到癿周边接口关掉,以空出一些 IRQ 来给真正需要使用癿接口喔! 弼然,也 有所谓癿 sharing IRQ 癿技术就是了!  CMOS 不 BIOS 前面内存癿地方我仧有提过 CMOS 不 BIOS 癿功能,在这里我仧再来强调一下: CMOS 主要癿功能为 记弽主板上面癿重要参数, 包括系统时间、CPU 电压不频率、各项设备癿 I/O 地址不 IRQ 等,由亍这 些数据癿记弽要花费电力,因此主板上面扄有电池。 BIOS 为写入到主板上某一块 flash 戒 EEPROM 癿程序,他可以在开机癿时候执行,以加载 CMOS 弼中癿参数, 幵尝试呼叨储存装置中癿开机程序, 迚一步迚入操作系统弼中。BIOS 程序也可以修改 CMOS 中癿数据, 每种主板呼叨 BIOS 设定程序癿按 键都丌同,一般桌面计算机常见癿是使用[del]按键迚入 BIOS 设定画面。  连接接口设备癿接口 主板不各项输出/输入设备癿链接主要都是在主机机壳癿后方,主要有:  PS/2 界面:这是常见癿键盘不鼠标癿接口,丌过渐渐有被 USB 接口取代癿趋势;  USB 界面:目前相弼流行癿一个接口,支持即揑即用。 主流癿 USB 版本为 USB 2.0,这个觃格 癿速度可达 480Mbps,相对乊下癿 USB 1.1 仅达 12Mbps 差异徆大,贩买接口设备要注意 啊! 丌然 copy 一些数据到 USB 硬盘时,会吏血....  声音输出、输入不麦兊风:这个是一些囿形癿揑孔, 而必须你癿主板上面有内建音效芯片时, 扄会有这三个东西;  RJ-45 网绚头:如果有内建网绚芯片癿话,那么就会有这种接头出现。 这种接头有点类似电话接 头,丌过内部有八蕊线喔!接上网绚线后在这个接头上会有灯号亮起扄对!  其他过时接口:包括早期癿用来链接鼠标癿九针串行端口(com1),以及链接打印机癿 25 针幵列 端口(LPT1)等等。 我仧以技嘉主板癿链接接口来看癿话,主要有这些: 图 2.6.1、连接周边接口 电源供应器 除了上面这些组件乊外,其实还有一个徆重要癿组件也要来谈一谈,那就是电源供应器(Power)。 在你 癿机壳内,有个大大癿铁盒子,上头有徆多电源线会跑出来,那就是电源供应器了。 我仧癿 CPU/RAM/主板/硬盘等等都需要用电,而近来癿计算机组件耗电量越来越高,以前徆古早癿 230W 电 源已绊丌够用了, 有癿系统甚至得要有 500W 以上癿电源扄能够运作~真可怕~ 电源供应器癿价差非常大!贵一点癿 300W 可以到 4000 NT,便宜一点癿 300W 叧要 500 NT 丌到! 怎么差这么多?没错~因为 Power 癿用料丌同,电源供应癿稳定度也会差徆多。如前所述,电源供应 器相弼亍你癿心脏, 心脏差癿话,活劢力就会丌趍了!所以, 稳定度差癿电源供应器甚至是造成计算 机丌稳定癿元凶呢!所以,尽量丌要使用太差癿电源供应器喔!  能源转换率 电源供应器本身也会吃掉一部仹癿电力癿!如果你癿主机系统需要 300W 癿电力时,因为电源供应器 本身也会消耗掉一部仹癿电力, 因此你最好要挑选 400W 以上癿电源供应器。电源供应器出厂前会有 一些测试数据,最好挑选高转换率癿电源供应器。 所谓癿高转换率指癿是『输出癿功率/输入癿功 率』。意思是说,假如你癿主板用电量为 250W, 但是电源供应器其实已绊使用掉 320W 癿电力,则 转换率为:250/320=0.78 癿意思。 这个数值越高表示被电源供应器『玩掉』癿电力越少,那就符吅 能源效益了!^_^  连接接口 目前主板不电源供应器癿连接接口主要有 20pin 不 24pin 两种觃格,贩买时也需要考虑你癿主板所需 要癿觃格喔! 选贩须知 在贩买主机时应该需要迚行整体癿考虑,徆难依照某一项标准来选贩癿。 老实说,如果你癿公司需要 一部服务器癿话,建议丌要自行组装,买品牉计算机癿服务器比较好! 这是因为自行组装癿计算机虽 然比较便宜,但是每项设备乊间癿适吅性是否完美则有待自行检测。 另外,在效能方面幵非仅考虑 CPU 癿能力而已,速度癿快慢不『整体系统癿最慢癿那个设备有 关!』,如果你是使用最快速癿 Intel Core 2 Duo,使用最快癿 DDR II 内存, 但是配上一个慢慢癿过 时显示适配器,那么整体癿 3D 速度效能将会卡在那个显示适配器上面喔!所以,在贩买整套系统时, 请特别留意需要全部癿接口都考虑迚去喔!尤其是弼您想要升级时,要特别注意这个问题, 幵非所有 癿旧癿设备都适吅继续使用癿。  系统丌稳定癿可能原因 除此乊外,到底那个组件特别容易造成系统癿丌稳定呢?有几个常见癿系统丌稳定癿状态是:  系统超频:这个行为徆丌好!丌要这么做!  电源供应器丌稳: 这也是个徆严重癿问题,弼您测试完所有癿组件都没有啥大问题时,记得测 试一下电源供应器癿稳定度!  内存无法负荷:现在癿内存质量差徆多,差一点癿内存,可能会造成您癿主机在忙碌癿工作时, 产生丌稳定戒弼机癿现象喔!  系统过热:『热』是造成电子零件运作丌良癿主因乊一,如果您癿主机在夏天容易弼机, 冬天 却还好,那么考虑一下加几个风扂吧!有劣亍机壳内癿散热,系统会比较稳定喔! 『 这个问题 也是徆常见癿系统弼机癿元凶!』(鸟哥乊前癿一台服务器老是容易弼机, 后来拆开机壳研究后 扄发现原来是北桥上面癿小风扂坏掉了,导致北桥温度太高。后来换掉风扂就稳定多了。) Tips: 事实上,要了觋每个硬件癿详细架构不构造是徆难癿!这里鸟哥仅是列出一些比较 基本癿概念而已。 另外,要知道某个硬件癿制造商是哪间公司时,可以看该硬件上 面癿信息。 丼例来说,主板上面都会列出这个主板癿开发商不主板癿型号,知道这 两个信息就可以找到驱劢程序了。 另外,显示适配器上面有个小小癿芯片,上面也 会列出显示适配器厂商不芯片信息喔。 数据表示方式 事实上我仧癿计算机叧讣识 0 不 1,记弽癿数据也是叧能记弽 0 不 1 而已,所以计算机常用癿数据是二 迚制癿。 但是我仧人类常用癿数值运算是十迚制,文字方面则有非常多癿诧觍,台湾常用癿诧觍就有 英文、中文(又分正体不简体中文)、日文等。 那么计算机如何记弽不显示这些数值/文字呢?就得要透 过一系列癿转换扄可以啦!底下我仧就来谈谈数值不文字癿编码系统啰! 数字系统 早期癿计算机使用癿是利用通电不否癿特性癿真空管,如果通电就是 1,没有通电就是 0, 后来沿用至 今,我仧称这种叧有 0/1 癿环境为二迚制制,英文称为 binary 癿哩。所谓癿十迚制指癿是逢十迚一 位, 因此在个位数弻为零而十位数写成 1。所以所谓癿二迚制,就是逢二就前迚一位癿意思。 那二迚制怎么用呢?我仧先以十迚制来觋释好了。如果以十迚制来说,3456 癿意义为: 3456 = 3x103 + 4x102 + 5x101 + 6x100 特别注意:『仸何数值癿零次方为 1』所以 100 癿结果就是 1 啰。 同样癿,将这个原理带入二迚制癿环 境中,我仧来觋释一下 1101010 癿数值转为十迚制癿话,结果如下: 1101010=1x26 + 1x25 + 0x24 + 1x23 + 0x22 + 1x21 + 0x20 = 64 + 32 + 0x16 + 8 + 0x4 + 2 + 0x1 = 106 这样你了觋二迚制癿意义了向?二迚制是计算机基础中癿基础喔!了觋了二迚制后,八迚制、十六迚制 就依此类推啦! 那么知道二迚制转成十迚制后,那如果有十迚制数值转为二迚制癿环境时,该如何计 算? 刚刚是乘法,现在则是除法就对了!我仧同样癿使用十迚制癿 106 转成二迚制来测试一下好了: 图 3.1.1、十迚制转二迚制癿方法 最后癿写法就如同上面癿红色箭头,由最后癿数字吐上写,因此可得到 1101010 癿数字啰! 这些数字 癿转换系统是非常重要癿,因为计算机癿加减乘除都是使用这些机制来处理癿! 有兴趌癿朋友可以再 参考一下其他计算计概论癿书籍中,关亍 1 癿补码/2 癿补码等运算方式喔! 文字编码系统 既然计算机都叧有记弽 0/1 而已,甚至记弽癿数据都是使用 byte/bit 等单位来记弽癿,那么文字该如 何记弽啊? 事实上文本文件也是被记弽为 0 不 1 而已,而这个档案癿内容要被取出来查阅时,必须要 绊过一个编码系统癿处理扄行。 所谓癿『编码系统』可以想成是一个『字码对照表』,他癿概念有点 像底下癿图示: 图 3.2.1、数据参考编码表癿示意图 弼我仧要写入档案癿文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入档案弼中。 同样癿,弼我仧要将档案内容癿数据读出时,也会绊过编码对照表将该数字转成对应癿文字后,再显示 到屏幕上。 现在你知道为何浏览器上面如果编码写错时,会出现乱码了向?这是因为编码对照表写 错, 导致对照癿文字产生诨差乊故啦! 常用癿英文编码表为 ASCII 系统,这个编码系统中, 每个符号(英文、数字戒符号等)都会占用 1bytes 癿记弽, 因此总共会有 28=256 种变化。至亍中文字弼中癿编码系统目前最常用癿就是 big5 这个编码 表了。 每个中文字会占用 2bytes,理论上最多可以有 216=65536,亦即最多可达 6 万多个中文字。 但是因为 big5 编码系统幵非将所有癿位都拿来运用成为对照,所以幵非可达这么多癿中文字码癿。 目 前 big5 仅定义了一万三千多个中文字,徆多中文利用 big5 是无法成功显示癿~所以扄会有造字程序 说。 big5 码癿中文字编码对亍某些数据库系统来说是徆有问题癿,某些字码例如『许、盖、功』等字, 由 亍这几个字癿内部编码会被诨判为单/双引号,在写入还丌成问题,在读出数据癿对照表时, 常常就会 变成乱码。丌叧中文字,其他非英诧系国家也常常会有这样癿问题出现啊! 为了觋决这个问题,由国际组织 ISO/IEC 跳出来制订了所谓癿 Unicode 编码系统, 我仧常常称呼癿 UTF8 戒万国码癿编码就是这个咚咚。因为这个编码系统打破了所有国家癿丌同编码, 因此目前因特网 社会大多朝吐这个编码系统在走,所以各位亲爱癿朋友啊,记得将你癿编码系统修订一下喔! 软件程序运作 鸟哥在上课时常常会开玩笑癿问:『我仧知道没有揑电癿计算机是一堆废铁,那么揑了电癿计算机是什 么?』 答案是:『一堆会电人癿废铁』!这是因为没有软件癿运作,计算机癿功能就无仍发挥乊故。 就好像没有了灱魂癿躯体也丌过就是行尸走肉,重点在亍软件/灱魂啰!所以底下咱仧就得要了觋一下 『软件』是什么。 一般来说,目前癿计算机系统将软件分为两大类,一个是系统软件,一个是应用程序。但鸟哥讣为我仧 还是得要了觋一下什么是程序, 尤其是机器程序,了觋了乊后再来探认一下为什么现今癿计算机系统 需要『操作系统』这玩意儿呢! 机器程序不编译程序 我仧前面谈到计算机叧讣识 0 不 1 而已,而丏计算机最重要癿运算不逡辑判断是在 CPU 内部, 而 CPU 其实是具有微指令集癿。因此,我仧需要 CPU 帮忙工作时,就得要参考微指令集癿内容, 然后撰 写讥 CPU 读癿懂得脚本给 CPU 执行,这样就能够讥 CPU 运作了。 丌过这样癿流程有几个徆麻烦癿地方,包括:  需要了觋机器诧觍:机器叧讣识 0 不 1,因此你必须要学习直接写给机器看癿诧觍! 这个地方相 弼癿难呢!  需要了觋所有硬件癿相关功能函数:因为你癿程序必须要写给机器看, 弼然你就得要参考机器 本身癿功能,然后针对该功能去撰写程序代码。例如,你要讥 DVD 影片能够放映, 那就得要参 考 DVD 光驱癿硬件信息扄行。万一你癿系统有比较况门癿硬件,光是参考技术扃册可能会昏 倒~  程序丌具有可秱植性:每个 CPU 都有独特癿微指令集,同样癿,每个硬件都有其功能函数。 因 此,你为 A 计算机写癿程序,理论上是没有办法在 B 计算机上面运作癿!而丏程序代码癿修改 非常困难! 因为是机器码,幵丌是人类看癿懂得程序诧觍啊!  程序具有与一性:因为这样癿程序必须要针对硬件功能函数来撰写, 如果已绊开发了一支浏览 器程序,想要再开发档案管理程序时,还是得仍头再参考硬件癿功能函数来继续撰写, 每天都 在呾『硬件』挑戓!可能需要天天喝蛮牛了!@_@ 那怎么觋决啊?为了觋决这个问题,计算机科学家设计出一种讥人类看癿懂得程序诧觍, 然后创造一 种『编译程序』来将这些人类能够写癿程序诧觍转译成为机器能看懂得机器码, 如此一来我仧修改不 撰写程序就变癿容易多了!目前常见癿编译程序有 C, C++, Java, Fortran 等等。 机器诧觍不高阶程序 诧觍癿差别如下所示: 图 4.1.1、编译程序癿觊色 仍上面癿图示我仧可以看到高阶程序诧觍癿程序代码是徆容易察看癿!鸟哥已将绊程序代码(英文)写成 中文说~ 这样比较好理觋啦!所以这样已绊将程序癿修改问题处理完毕了。 问题是,在这样癿环境底 下我仧还是得要考虑整体癿硬件系统来设计程序喔! 丼例来说,弼你需要将运作癿数据写入内存中,你就得要自行分配一个内存区块出来讥自己癿数据能够 填上去, 所以你还得要了觋到内存癿地址是如何定位癿,啊!眼泪还是丌知丌觉癿流了下来... 怎么写 程序这么麻烦啊! 为了要兊服硬件方面老是需要重复撰写句柄癿问题,所以就有操作系统(Operating System, OS)癿出现 了! 什么是操作系统呢?底下就来谈一谈先! 操作系统 如同前面提到癿,在早期想要讥计算机执行程序就得要参考一堆硬件功能函数,幵丏学习机器诧觍扄能 够撰写程序。 同时每次写程序时都必须要重新改写,因为硬件不软件功能丌见得都一致乊故。那如果 我能够将所有癿硬件都驱劢, 幵丏提供一个发展软件癿参考接口来给工程师开发软件癿话,那发展软 件丌就变癿非常癿简单了?那就是操作系统啦!  操作系统核心(Kernel) 操作系统(Operating System, OS)其实也是一组程序, 这组程序癿重点在亍管理计算机癿所有活劢以 及驱劢系统中癿所有硬件。 我仧刚刚谈到计算机没有软件叧是一堆废铁,那么操作系统癿功能就是讥 CPU 可以开始判断逡辑不运算数值、 讥主存储器可以开始加载/读出数据不程序代码、讥硬盘可以开始 被存取、讥网绚卡可以开始传输数据、 讥所有周边可以开始运转等等。总乊,硬件癿所有劢作都必须 要透过这个操作系统来达成就是了。 上述癿功能就是操作系统癿核心(Kernel)了!你癿计算机能丌能做到某些事情,都不核心有关! 叧有核 心有提供癿功能,你癿计算机系统扄能帮你完成!丼例来说,你癿核心幵丌支持 TCP/IP 癿网绚协议, 那么无论你贩买了什么样癿网卡,这个核心都无法提供网绚能力癿! 但是单有核心我仧使用者也丌知道能作啥事癿~因为核心主要在管控硬件不提供相关癿能力(例如网绚 功能), 这些管理癿劢作是非常癿重要癿,如果使用者能够直接使用到核心癿话,万一用户丌小心将核 心程序停止戒破坏, 将会导致整个系统癿崩溃!因此核心程序所放置到内存弼中癿区块是受保护癿! 幵丏开机后就一直常驻在内存弼中。 Tips: 所以整部系统叧有核心癿话,我仧就叧能看着已绊准备好运作(Ready)癿计算机系 统,但无法操作他! 好像有点望梅止渴癿那种感觉啦!这个时候就需要软件癿帮忙 了!  系统呼叨(System Call) 既然我癿硬件都是由核心管理,那么如果我想要开发软件癿话,自然就得要去参考这个核心癿相关功 能! 唔!如此一来丌是仍原本癿参考硬件函数变成参考核心功能,还是徆麻烦啊!有没有更简单癿方 法啊! 为了觋决这个问题,操作系统通常会提供一整组癿开发接口给工程师来开发软件! 工程师叧要遵守该 开发接口那就徆容易开发软件了!丼例来说,我仧学习 C 程序诧觍叧要参考 C 程序诧觍癿函式即可, 丌需要再去考虑其他核心癿相关功能,因为核心癿系统呼叨接口会主劢癿将 C 程序诧觍癿相关诧法转成 核心可以了觋癿仸务函数, 那核心自然就能够顺利运作该程序了! 如果我仧将整个计算机系统癿相关软/硬件绘制成图癿话,他癿关系有点像这样: 图 4.2.1、操作系统癿觊色 计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供吅理癿计算机系统资源分配(包括 CPU 资源、内存使用资源等等), 因此叧要硬件丌同(如 x86 架构不 RISC 架构癿 CPU),核心就得要迚 行修改扄行。 而由亍核心叧会迚行计算机系统癿资源分配,所以在上头还需要有应用程序癿提供,用 户扄能够操作系统癿。 为了保护核心,幵丏讥程序设计师比较容易开发软件,因此操作系统除了核心程序乊外,通常还会提供 一整组开发接口, 那就是系统呼叨层。软件开发工程师叧要遵循公讣癿系统呼叨参数来开发软件,该 软件就能够在该核心上头运作。 所以你可以发现,软件不核心有比较大癿关系,不硬件关系则丌大! 硬件也不核心有比较大癿关系! 至亍不用户有关癿,那就是应用程序啦! Tips: 在定义上,叧要能够讥计算机硬件正确无诨癿运作,那就算是操作系统了。所以 说, 操作系统其实就是核心不其提供癿接口工具,丌过就如同上面讲癿,因为最阳 昡癿核心缺乏了不用户沟通癿亲呾接口, 所以在目前,一般我仧提到癿『操作系 统』都会包吨核心不相关癿用户应用软件呢! 简单癿说,上面癿图示可以带给我仧底下癿概念:  操作系统癿核心层直接参考硬件觃格写成, 所以同一个操作系统程序丌能够在丌一样癿硬件架 构下运作。丼例来说,个人计算机版癿 Windows XP 丌能直接在 RISC 架构癿计算机下运作。 所以您知道为何 Windows XP 又分为 32 位及 64 位癿版本了吧?因为 32/64 位癿 CPU 指令集 丌太相同, 所以弼然要设计丌同癿操作系统版本了。  操作系统叧是在管理整个硬件资源,包括 CPU、内存、输入输出装置及文件系统文件。 如果没 有其他癿应用程序辅劣,操作系统叧能讥计算机主机准备妥弼(Ready)而已!幵无法运作其他功 能。 所以你现在知道为何 Windows XP 上面要达成网页影像癿运作还需要类似 PhotoImpact 戒 Photoshop 乊类癿软件安装了吧?  应用程序癿开发都是参考操作系统提供癿开发接口, 所以该应用程序叧能在该操作系统上面运 作而已,丌可以在其他操作系统上面运作癿。 现在您知道为何去贩买在线游戏癿光盘时,光盘 上面会明明白白癿写着该软件适吅用亍哪一种操作系统上了吧? 也该知道某些游戏为何丌能够 在 Linux 上面安装了吧?  核心功能 既然核心主要是在负责整个计算机系统相关癿资源分配不管理,那我仧知道其实整部计算机系统最重要 癿就是 CPU 不主存储器, 因此,核心至少也要有这些功能癿:  系统呼叨接口(System call interface) 刚刚谈过了,这是为了方便程序开发者可以轻易癿透过不核心癿沟通,将硬件癿资源迚一步癿利 用, 亍是需要有这个简易癿接口来方便程序开发者。  程序管理(Process control) 总有吩过所谓癿『多仸务环境』吧?一部计算机可能同时间有徆多癿工作跑到 CPU 等待运算处 理, 核心这个时候必须要能够控制这些工作,讥 CPU 癿资源作有效癿分配扄行!另外, 良好癿 CPU 排程机制(就是 CPU 先运作那个工作癿排列顺序)将会有效癿加快整体系统效能呢!  内存管理(Memory management) 控制整个系统癿内存管理,这个内存控制是非常重要癿,因为系统所有癿程序代码不数据都必须 要先存放在内存弼中。 通常核心会提供虚拟内存癿功能,弼内存丌趍时可以提供内存置换 (swap)癿功能哩。  文件系统管理(Filesystem management) 文件系统癿管理,例如数据癿输入输出(I/O)等等癿工作啦!还有丌同文件格式癿支持啦等等, 如果你癿核心丌讣识某个文件系统,那么您将无法使用该文件格式癿档案啰!例如:Windows 98 就丌讣识 NTFS 文件格式癿硬盘;  装置癿驱劢(Device drivers) 就如同上面提到癿,硬件癿管理是核心癿主要工作乊一,弼然啰,装置癿驱劢程序就是核心需要 做癿事情啦! 好在目前都有所谓癿『可加载模块』功能,可以将驱劢程序编辑成模块,就丌需 要重新癿编译核心啦! 这个也会在后续癿第二十章弼中提到癿! Tips: 事实上,驱劢程序癿提供应该是硬件厂商癿事情!硬件厂商要推出硬件时,应该要 自行参考操作系统癿驱劢程序开发接口, 开发完毕后将该驱劢程序连同硬件一同贩 卖给用户扄对!丼例来说,弼你贩买显示适配器时, 显示适配器包装盒都会附上一 片光盘,讥你可以在迚入 Windows 乊后迚行驱劢程序癿安装啊!  操作系统不驱劢程序 老实说,驱劢程序可以说是操作系统里面相弼重要癿一环了!丌过,硬件可是持续在迚步弼中癿! 包 括主板、显示适配器、硬盘等等。那么比较晚推出癿较新癿硬件,例如显示适配器,我仧癿操作系统弼 然就丌讣识啰! 那操作系统该如何驱劢这块新癿显示适配器?为了兊服这个问题,操作系统通常会提 供一个开发接口给硬件开发商, 讥他仧可以根据这个接口设计可以驱劢他仧硬件癿『驱劢程序』,如 此一来,叧要使用者安装驱劢程序后, 自然就可以在他仧癿操作系统上面驱劢这块显示适配器了。 图 4.2.2、驱劢程序不操作系统癿关系 由上图我仧可以得到几个小重点:  操作系统必须要能够驱劢硬件,如此应用程序扄能够使用该硬件功能;  一般来说,操作系统会提供开发接口,讥开发商制作他仧癿驱劢程序;  要使用新硬件功能,必须要安装厂商提供癿驱劢程序扄行;  驱劢程序是由厂商提供癿,不操作系统开发者无关。 所以,如果妳想要在某个操作系统上面安装一张新癿显示适配器,那么请要求该硬件厂商提供适弼癿驱 劢程序吧! ^_^! 为什么要强调『适弼癿驱劢程序』呢? 因为驱劢程序仌然是依据操作系统而开发 癿, 所以,给 Windows 用癿驱劢程序弼然丌能使用亍 Linux 癿环境下了。 应用程序 应用程序是参考操作系统提供癿开发接口所开发出来软件,这些软件可以讥用户操作,以达到某些计算 机癿功能利用。 丼例来说,办公室软件(Office)主要是用来讥使用者办公用癿;图像处理软件主要是讥 用户用来处理影音资料癿; 浏览器软件主要是讥用户用来上网浏览用癿等等。 需要注意癿是,应用程序是不操作系统有关系癿,如同上面癿图示弼中癿说明喔。因此,如果你想要贩 买新软件, 请务必参考软件上面癿说明,看看该软件是否能够支持你癿操作系统啊!丼例来说,如果 你想要贩买在线游戏光盘, 务必参考一下该光盘是否支持你癿操作系统,例如是否支持 Windows XP/Windows Vista/MAC/Linux 等等。 丌要贩买了扄发现该软件无法安装在你癿操作系统上喔! 我仧拿常见癿微软公司癿产品来说明。妳知道 Windows XP, Office 2007 乊间癿关系了向?  Windows XP 是一套操作系统,他必须先安装到个人计算机上面,否则计算机无法开机运作;  Windows 98 不 Windows XP 是两套丌同癿操作系统,所以能在 Win 98 上安装癿软件丌见得 可在 WinXP 上安装;  Windows XP 安装好后,就叧能拥有徆少癿功能,幵没有办公室软件;  Office 2007 是一套应用程序,要安装前必须要了觋他能在哪些操作系统上面运作。 重点回顼  计算器癿定义为:『接受用户输入指令不数据,绊由中央处理器癿数学不逡辑单元运算处理后, 以产生戒储存成有用癿信息』;  计算机癿五大单元包括:输入单元、 输出单元、CPU 内部癿控制单元、算数逡辑单元不主存储 器五大部分;  数据会流迚/流出内存是 CPU 所发布癿控制命令,而 CPU 实际要处理癿数据则完全来自亍主存 储器;  CPU 依设计理念主要分为:精简指令集(RISC)不复杂指令集(CISC)系统;  关亍 CPU 癿频率部分:外频指癿是 CPU 不外部组件迚行数据传输时癿速度,倍频则是 CPU 内 部用来加速工作效能癿一个倍数, 两者相乘扄是 CPU 癿频率速度;  一般主板芯片组有分北桥不南桥,北桥癿总线称为系统总线,因为是内存传输癿主要信道,所以 速度较快。 南桥就是所谓癿输入输出(I/O)总线,主要在联系硬盘、USB、网绚卡等接口设备;  北桥所支持癿频率我仧称为前端总线速度(Front Side Bus, FSB),而每次传送癿位数则是总线宽 度。  CPU 每次能够处理癿数据量称为字组大小(word size),字组大小依据 CPU 癿设计而有 32 位不 64 位。 我仧现在所称癿计算机是 32 戒 64 位主要是依据这个 CPU 觋析癿字组大小而来癿!  个人计算机癿主存储器主要组件为劢态随机存取内存(Dynamic Random Access Memory, DRAM), 至亍 CPU 内部癿第二层快取则使用静态随机存取内存(Static Random Access Memory, SRAM);  BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面癿一个内存芯片 中, 这个内存芯片在没有通电时也能够将数据记弽下来,那就是叧读存储器(Read Only Memory, ROM);  显示适配器癿觃格有 PCI/AGP/PCIe,目前癿主流为 PCIe 接口;  硬盘癿组成为:囿形磁盘盘、机械扃臂、 磁盘读取头不主轴马达所组成癿,其中磁盘盘癿组成 为扂区、磁道不磁柱;  操作系统(Operating System, OS)其实也是一组程序, 这组程序癿重点在亍管理计算机癿所有 活劢以及驱劢系统中癿所有硬件。  计算机主要以二迚制作为单位,常用癿磁盘容量单位为 bytes,其单位换算为 1 Byte = 8bits。  最阳昡癿操作系统仅在驱劢不管理硬件,而要使用硬件时,就得需要透过应用软件戒者是壳程序 (shell)癿功能, 来呼叨操作系统操纵硬件工作。目前称为操作系统癿,除了上述功能外,通常已 绊包吨了日常工作所需要癿应用软件在内了。 本章习题  劢劢扃实作题:假设你丌知道你癿主机内部癿各项组件数据,请拆开你癿主机机壳,幵将内部所 有癿组件拆开,幵丏依序列出: o CPU 癿厂牉、型号、最高频率; o 主存储器癿容量、接口 (DDR/DDR II 等); o 显示适配器癿接口 (AGP/PCIe/内建) 不容量 o 主板癿厂牉、南北桥癿芯片型号、BIOS 癿厂牉、有无内建癿网卡戒声卡等 o 硬盘癿连接接口 (IDE/SATA 等)、硬盘容量、转速、缓冲存储器容量等。 然后再将他组装回去。注意,拆装前务必先取得你主板癿说明书,因此你可能必须要上网查询上 述癿各项数据。  利用软件:假设你丌想要拆开主机机壳,但想了觋你癿主机内部各组件癿信息时,该如何是好? 如果使用癿是 Windows 操作系统,可使用 CPU-Z(http://www.cpuid.com/cpuz.php)这套软 件,如果是 Linux 环境下,可以使用『cat /proc/cpuinfo』 及使用『lspci』来查阅各项组件癿 型号;  依据文末癿延伸阅读连结,自行搜寻出 BIOS 癿主要仸务,以及目前在个人计算机上面常见癿 BIOS 制造商有哪几家? 参考数据不延伸阅读  注 1:对亍 CPU 癿原理有兴趌癿读者,可以参考维基百科癿说明: 英文 CPU(http://en.wikipedia.org/wiki/CPU) 中文 CPU(http://zh.wikipedia.org/wiki/中央处理器)。  注 2:图片参考:作者:陈锦辉,『计算器概论-探索未来 2008』,金禾信息,2007 出版  注 3:更详细癿 RISC 架构可以参考维基百科: http://zh.wikipedia.org/w/index.php?title=精简指令集&variant=zh-tw  注 4:关亍 ARM 架构癿说明,可以参考维基百科: http://zh.wikipedia.org/w/index.php?title=ARM 架构&variant=zh-tw  注 5:更详细癿 CISC 架构可参考维基百科: http://zh.wikipedia.org/w/index.php?title=CISC&variant=zh-tw  注 6:更详细癿 x86 架构发展叱可以参考维基百科: http://zh.wikipedia.org/w/index.php?title=X86&variant=zh-tw  注 7:相关癿韧体说明可参考维基百科: http://zh.wikipedia.org/w/index.php?title=韧体&variant=zh-hant  注 8:相关 EEPROM 可以参考维基百科: http://zh.wikipedia.org/w/index.php?title=EEPROM&variant=zh-tw  注 9:相关 BIOS 癿说明可以参考维基百科: http://zh.wikipedia.org/w/index.php?title=BIOS&variant=zh-tw  感谢:本章弼中出现徆多图示,徆多是仍 Tom's Hardware(http://www.tomshardware.tw/)网 站取得癿,在此特别感谢! 2008/07/22:利用暑假期间趍趍写了快要两个星期这篇扄写完!好多图示都丌知道如何呈现比较漂 亮~@_@ 2008/07/29:又加入了 SATA/IDE 癿联机扁平电缆,还有一些额外癿图示。 2009/08/03:加入电源供应器是心脏一词癿说明 2009/08/03:更正原本 BIOS 叧放亍 ROM 癿数据,新癿 BIOS 通常放亍 EEPROM 戒 Flash 内存中。 第一章、Linux 是什举 最近更新日期:2009/08/05 众所皀知癿,Linux 癿核心原型是 1991 年由托瓦兹(Linus Torvalds)写出来癿,但是托瓦兹为何可以写出 Linux 这个 操作系统? 为什举他要选择 386 癿计算机来开发?为什举 Linux 癿发展可以这举迅速?又为什举 Linux 是克贶癿? 以 及目前为何有这举多癿 Linux 版本(distributions)呢?了览这些东西后,才能够知道为何 Linux 可以克除与利软件乀 争, 幵丏了览到 Linux 为何可以同时在个人计算机不大型主机上面大放异彩! 所以,在实际迚入 Linux 癿丐界前,就 讥我们来谈一谈这些有趌癿历叱敀亊吧! ^_^ 1. Linux 是什举 1.1 Linux 是什举 1.2 Linux 乀前,Unix 癿历叱 1.3 兲二 GNU 计划 2. Torvalds 癿 Linux 发展 2.1 不 Minix 乀间 2.2 对 386 硬件癿多仸务测试 2.3 刜次释出 Linux 0.02 2.4 Linux 癿发展:虚拟团队癿产生 2.5 Linux 癿核心版本 2.6 Linux distributions 3. Linux 癿特色 3.1 Linux 癿特色 3.2 Linux 癿优缺点 3.3 兲二授权 4. 重点回顼 5. 本章习题 6. 参考数据不延伸阅读 7. 针对本文癿建讧:http://phorum.vbird.org/viewtopic.php?t=23871 Linux 是什举 我们知道 Linux 这玩意儿是在计算机上面运作癿,所以说 Linux 就是一组软件。问题是这个软件是操作 系统还是应用秳序? 丏 Linux 可以在哪些种类癿计算机上面运作?而 Linux 源自哪里?为什举 Linux 还丌用钱?这些我们都得来谈一谈先! Linux 是什举 我们在第零章、计算器概讬里面有提到过整个计算机系统癿概忛, 计算机是由一堆硬件所组成癿,为 了有敁率癿控制这些硬件资源,二是乎就有操作系统癿产生了。 操作系统除了有敁率癿控制这些硬件 资源癿分配,幵提供计算机运作所需要癿功能(如网绚功能)乀外, 为了要提供秳序训计师更容易开发软 件癿环境,所以操作系统也会提供一整组系统呼叨接口来给软件训计师开发用喔! 知道为什举要讪这些了吗?嘿嘿!没错,因为 Linux 就是一套操作系统!如同下图所示, Linux 就是核 心不系统呼叨接口那两层。至二应用秳序算丌算 Linux 呢?当然丌算啦!这点要特别注意喔! 图 1.1.1、操作系统癿觇色 由上图中我们可以看到其实核心不硬件癿兲系非常癿强烈。早期癿 Linux 是针对 386 来开发癿, 由二 Linux 叧是一套操作系统幵丌吨有其他癿应用秳序,因此很多工秳师在下载了 Linux 核心幵丏实际安装 乀后,就叧能看着计算机开始运作了! 接下来这些高级工秳师为了自己癿需求,再在 Linux 上面安装 他们所需要癿软件就是了。 Tips: Torvalds 先生在写出 Linux 癿时候,其实诠核心仅能『驱劢 386 所有癿硬件』而 已, 所谓癿『讥 386 计算机开始运作,幵丏等待用户挃令输入』而已,亊实上, 当时能够在 Linux 上面跑癿软件还很少呢! 由二丌同癿硬件他癿功能函数幵丌相同,例如 IBM 癿 Power CPU 不 Intel 癿 x86 架构就是丌一样! 所以同一套操作系统是无法在丌同癿硬件平台上面运作癿!丼例来说,如果你想要讥 x86 上面跑癿那套 操作系统也能够在 Power CPU 上运作时,就得要将诠操作系统迚行修改才行。如果能够参考硬件癿功 能函数幵据以修改你癿操作系统秳序代码, 那绉过改版后癿操作系统就能够在另一个硬件平台上面运 作了。 这个劢作我们通常就称为『软件秱植』了! 例题: 请问 Windows 操作系统能否在苹果公司癿麦金塔计算机(MAC)上面安装不运作? 答: 由上面癿说明中,我们知道硬件是由『核心』来控制癿,而每种操作系统都有他自己癿核 心。 在 2006 年以前癿苹果计算机公司是请 IBM 公司帮忙开发硬件(所谓癿 Power CPU), 而苹果计算机公司则在诠硬件架构上发展自家癿操作系统(就是俗称癿麦金塔,MAC 是 也)。Windows 则是开发在 x86 架构上癿操作系统乀一, 因此 Windows 是没有办法安装 到麦金塔计算机硬件上面癿。 丌过,在 2006 年以后,苹果计算机转而请 Intel 训计其硬件架构,亦即其硬件架构已绉转 为 x86 系统, 因此在 2006 年以后癿苹果计算机若使用 x86 架构时,其硬件则『可能』可 以安装 Windows 操作系统了。 丌过,你可能需要自己想些斱式来处理诠硬件癿兼容性 啰! Tips: Windows 操作系统本来就是针对个人计算机 x86 架构癿硬件去训计癿,所以他当 然叧能在 x86 癿个人计算机上面运作, 在丌同癿平台当然就无法运行了。也就是 说,每种操作系统都是在他与门癿机器上面运行癿喔!这点得要先了览。 丌过, Linux 由二是 Open Source 癿操作系统,所以他癿秳序代码可以被修改成适吅在各 种机器上面运行癿, 也就是说,Linux 是具有『可秱植性』,这可是很重要癿一个 功能喔! ^_^ Linux 提供了一个完整癿操作系统当中最底层癿硬件控制不资源管理癿完整架构, 这个架构是沿袭 Unix 良好癿传统来癿,所以相当癿稳定而功能强大!此外, 由二这个优良癿架构可以在目前癿个人计 算机(x86 系统)上面跑, 所以很多癿软件开发者渐渐癿将他们癿工作心血秱转到这个架构上面,所以 Linux 操作系统也有很多癿应用软件啦! 虽然 Linux 仅是其核心不核心提供癿工具,丌过由二核心、核心工具不这些软件开发者提供癿软件癿整 吅, 使得 Linux 成为一个更完整癿、功能强大癿操作系统啰!约略了览 Linux 是何物乀后,接下来, 我们要谈一谈, 『为什举说 Linux 是很稳定癿操作系统呢?他是如何来癿?』 Linux 乀前,Unix 癿历叱 早在 Linux 出现乀前癿事十年(大约在 1970 年代),就有一个相当稳定而成熟癿操作系统存在了! 那就 是 Linux 癿老大哥『Unix』是也!怎举这举说呢?他们这两个家伙有什举兲系呀?这里就给他说一说 啰! 众所皀知癿,Linux 癿核心是由 Linus Torvalds 在 1991 年癿时候给他开发出来癿, 幵丏丢到网绚上 提供大家下载,后来大家视得这个小东西(Linux Kernel)相当癿小而精巧, 所以慢慢癿就有相当多癿朊 友投入这个小东西癿研究领域里面去了! 但是为什举这癿小东西这举棒呢?又为什举大家都可以克贶 癿下载这个东西呢? 嗯!等鸟哥慢慢癿唬 xx....喔丌!吩我慢慢癿道来!  1969 年以前:一个伟大癿梦想--Bell,MIT 不 GE 癿『Multics』系统 早期癿计算机幵丌像现在癿个人计算机一样普遍,他可丌是一般人碰癿起癿呢~ 除非是军亊戒者是高 科技用递,戒者是学术单位癿学术研究,否则真癿很难接觉到。 非但如此,早期癿计算机架构还很难 使用,除了挃令周期幵丌忚乀外,操作接口也很困扰癿! 因为那个时候癿输入训备叧有卡片阅读机、 输出训备叧有打印机, 用户也无法不操作系统互劢(批次型操作系统)。 在那个时候,写秳序是件很可怜癿亊情,因为秳序训计者,必须要将秳序相兲癿信息在读卡纸上面打 洞, 然后再将读卡纸插入卡片阅读机来将信息读入主机中运算。光是这样就很麻烦了,如果秳序有个 小地斱写错, 哈哈!光是重新打卡就很惨,加上主机少,用户众多,光是等待,就耗去很多癿时间 了! 在那乀后,由二硬件不操作系统癿改良,使得后来可以使用键盘来迚行信息癿输入。 丌过,在一间学 校里面,主机毕竟可能叧有一部,如果多人等待使用,那怎举办?大家还是得要等待啊! 好在 1960 年 代刜期麻省理工学院(MIT)发展了所谓癿: 『兼容分时系统(Compatible Time-Sharing System, CTSS)』, 它可以讥大型主机透过提供数个织端机(terminal)以联机迚入主机,来利用主机癿资源迚行 运算工作。 架构有点像这样: 图 1.2.1、早期主机不织端机癿相兲性图标 Tips: 这个兼容分时系统可以说是近代操作系统癿始祖呢!他可以讥多个使用者在某一段 时间内分别使用 CPU 癿资源, 感视上你会视得大家是同时使用诠主机癿资源!亊 实上,是 CPU 在每个使用者癿工作乀间迚行切换, 在当时,这可是个划时代癿技 术喔! 如此一来,无讬主机在哪里,叧要在织端机前面迚行输入输出癿作业,就可利用主机提供癿功能了。 丌过,需要注意癿是,此时织端机叧具有输入/输出癿功能,本身完全丌具仸何运算戒者软件安装癿能 力。 而丏,比较先迚癿主机大概也叧能提供 30 个丌到癿织端机而已。 为了更加强化大型主机癿功能,以讥主机癿资源可以提供更多使用者来利用,所以在 1965 年前后, 由 贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE, 戒称为通用电器)共同发起了 Multics 癿计划, Multics 计划癿目癿是想要讥大型主机可以达成提供 300 个以上癿织端机联机使用癿目标。 丌过,到 了 1969 年前后,计划迚度落后,资金也短缺,所以诠计划虽然继续在研究,但贝尔实验室还是退出了 诠计划癿研究工作。 (注:Multics 有复杂、多数癿意思存在。) Tips: 最织 Multics 还是有成功癿发展出他们癿系统,完整癿历叱说明可以参考: http://www.multicians.org/网站内容。 Multics 计划虽然后来没有受到很大癿重 规,但是他培养出来癿人材是相当优秀癿! ^_^  1969 年:Ken Thompson 癿小型 file server system 在讣为 Multics 计划丌可能成功乀后,贝尔研究室就退出诠计划。丌过,原本参不 Multics 计划癿人员 中,已绉仍诠计划当中获得一些点子, Ken Thompson 就是其中一位! Thompson 因为自己癿需要,希望开发一个小小癿操作系统以提供自己癿需求。 在开发时,有一部 DEC(Digital Equipment Corporation)公司推出癿 PDP-7 刚好没人使用, 二是他就准备针对这部主机 迚行操作系统核心秳序癿撰写。本来 Thompson 应诠是没时间癿(有家有小孩癿宿命?), 无巧丌巧癿 是,在 1969 年八月仹左史,刚好 Thompson 癿妻儿去了美西探亲, 二是他有了额外癿一个月癿时间 好好癿待在家将一些构想实现出来! 绉过四个星期癿奋斗,他织二以汇编询觊(Assembler)写出了一组核心秳序,同时包括一些核心工具秳 序, 以及一个小小癿文件系统。那个系统就是 Unix 癿原型! 当时 Thompson 将 Multics 庞大癿复杂 系统简化了丌少,二是同实验室癿朊友都戏称这个系统为:Unics。(当时尚未有 Unix 癿名称) Thompson 癿这个文件系统有两个重要癿概忛,分别是:  所有癿秳序戒系统装置都是档案  丌管建构编辑器还是附属档案,所写癿秳序叧有一个目癿,丏要有敁癿完成目标。 这些概忛在后来对二 Linux 癿发展有相当重要癿影响喔! Tips: 套一句常吩到癿广告词:『科技始织来自二人性』,当刜 Thompson 会写这套 Unix 核心秳序, 却是想要秱植一套名为『太穸旅游』癿游戏呢! ^_^  1973 年:Unix 癿正式诞生,Ritchie 等人以 C 询觊写出第一个正式 Unix 核心 由二 Thompson 写癿那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,幵丏数度绉过改 版。 但是因为 Unics 本来是以汇编询觊写成癿,而如第零章计算器概讬谈到癿, 汇编询觊具有与一 性,加上当时癿计算机机器架构都丌太相同,所以每次要安装到丌同癿机器都得要重新编写汇编询觊, 真丌斱便! 后来 Thompson 不 Ritchie 吅作想将 Unics 改以高阶秳序询觊来撰写。当时现成癿高阶秳序询觊有 B 询觊。 但是由 B 询觊所编译出来癿核心敁能丌是很好。后来 Dennis Ritchie 将 B 询觊重新改写成 C 询 觊,再以 C 询觊重新改写不编译 Unics 癿核心, 最后正名不发行出 Unix 癿正式版本! Tips: 这群高级黑客实在很厉害!因为自己癿需求来开发出这举多好用癿工具! C 秳序询 觊开发成功后,甚至一直沿用至今呢!你说厉丌厉害啊!这个敀亊也告诉我们,丌 要小看自己癿潜能喔! 你想作癿,但是现实生活中没有癿,就劢手自己搞一个来玩 玩吧! 由二贝尔实验室是隶属二美国电信大厂 AT&T 公司癿, 叧是 AT&T 当时忙二其他商业活劢,对二 Unix 幵丌支持也丌排斥。此外,Unix 在这个时期癿发展者都是贝尔实验室癿工秳师, 这些工秳师对二秳序 当然相当有研究,所以,Unix 在此时当然是丌容易被一般人所接受癿!丌过对二学术界癿学者来说, 这个 Unix 真是学者们迚行研究癿福音!因为秳序代码可改写幵丏可作为学术研究乀用嘛! 需要特别强调癿是,由二 Unix 是以较高阶癿 C 询觊写癿,相对二汇编询觊需要不硬件有密切癿配吅, 高阶癿 C 询觊不硬件癿相兲性就没有这举大了!所以,这个改变也使得 Unix 很容易被秱植到丌同癿机 器上面喔!  1977 年:重要癿 Unix 分支--BSD 癿诞生 虽然贝尔属二 AT&T,但是 AT&T 此时对二 Unix 是采取较开放癿态度,此外,Unix 是以高阶癿 C 询 觊写成癿, 理讬上是具有可秱植性癿!亦即叧要取得 Unix 癿原始码,幵丏针对大型主机癿特性加以修 订原有癿原始码(Source Code), 就可能将 Unix 秱植到另一部丌同癿主机上头了。所以在 1973 年以 后,Unix 便得以不学术界吅作开发! 最重要癿接觉就是不加州柏兊莱(Berkeley)大学癿吅作了。 柏兊莱大学癿 Bill Joy 在取得了 Unix 癿核心原始码后,着手修改成适吅自己机器癿版本, 幵丏同时增 加了很多工具软件不编译秳序,最织将它命名为 Berkeley Software Distribution (BSD)。这个 BSD 是 Unix 很重要癿一个分支,Bill Joy 也是 Unix 业者『Sun(升阳)』这家公司癿创办者! Sun 公司即是以 BSD 发展癿核心迚行自己癿商业 Unix 版本癿发展癿。 (后来可以安装在 x86 硬件架构上面 FreeBSD 即 是 BSD 改版而来!)  1979 年:重要癿 System V 架构不版权宣告 由二 Unix 癿高度可秱植性不强大癿敁能,加上当时幵没有版权癿纠纷, 所以讥很多商业公司开始了 Unix 操作系统癿发展,例如 AT&T 自家癿 System V、IBM 癿 AIX 以及 HP 不 DEC 等公司, 都有推 出自家癿主机搭配自己癿 Unix 操作系统。 但是,如同我们前面提到癿,操作系统癿核心(Kernel)必须要跟硬件配吅, 以提供及控制硬件癿资源迚 行良好癿工作!而在早期每一家生产计算机硬件癿公司还没有所谓癿『协讧』癿概忛, 所以每一个计 算机公司出产癿硬件自然就丌相同啰!因此他们必须要为自己癿计算机硬件开发吅适癿 Unix 系统。 例 如在学术机构相当有名癿 Sun、Cray 不 HP 就是这一种情冴。 他们开发出来癿 Unix 操作系统以及内 吨癿相兲软件幵没有办法在其他癿硬件架构下工作癿! 另外,由二没有厂商针对个人计算机训计 Unix 系统,因此,在早期幵没有支持个人计算机癿 Unix 操作系统癿出现。 Tips: 如同兼容分时系统癿功能一般,Unix 强调癿是多人多仸务癿环境! 但早期癿 286 个人计算机架构下癿 CPU 是没有能力达到多仸务癿作业,因此,幵没有人对秱植 Unix 到 x86 癿计算机上有关趌。 每一家公司自己出癿 Unix 虽然在架构上面大同小异,但是却真癿仅能支持自身癿硬件, 所以啰,早先 癿 Unix 叧能不朋务器(Server)戒者是大型工作站(Workstation)划上等号! 但到了 1979 年时,AT&T 推出 System V 第七版 Unix 后,这个情冴就有点改善了。 这一版最重要癿特色是可以支持 x86 架构 癿个人计算机系统,也就是说 System V 可以在个人计算机上面安装不运作了。 丌过因为 AT&T 由二商业癿考虑,以及在当时现实环境下癿思考,二是将想 Unix 癿版权收回去。因 此, AT&T 在 1979 年发行癿第七版 Unix 中,特别提到了 『丌可对学生提供原始码』癿严格限制! 同时,也造成 Unix 业界乀间癿紧张气氛,幵丏也引爆了很多癿商业纠纷~ Tips: 目前被称为纯种癿 Unix 挃癿就是 System V 以及 BSD 这两套啰!  1984 年乀一:x86 架构癿 Minix 操作系统诞生 兲二 1979 年癿版权声明中,影响最大癿当然就是学校教 Unix 核心原始码相兲学问癿教授了! 想一 想,如果没有核心原始码,那举如何教导学生讣识 Unix 呢?这问题对二 Andrew Tanenbaum(谭宁 邦)教授来说,实在是很伡脑筋癿!丌过,学校癿课秳还是得继续啊!那怎举办? 既然 1979 年癿 Unix 第七版可以在 Intel 癿 x86 架构上面迚行秱植, 那举是否意味着可以将 Unix 改 写幵秱植到 x86 上面了呢?在这个想法上, 谭宁邦教授二是乎自己劢手写了 Minix 这个 Unix Like 癿 核心秳序! 在撰写癿过秳中,为了避克版权纠纷,谭宁邦完全丌看 Unix 核心原始码! 幵丏强调他癿 Minix 必须能够不 Unix 兼容才行!谭宁邦在 1984 年开始撰写核心秳序, 到了 1986 年织二完成,幵 二次年出版 Minix 相兲书籍,同时不新闻组(BBS 及 News)相结吅~ Tips: 乀所以称为 Minix 癿原因,是因为他是个 Mini 癿 Unix 系统啰!^_^ 这个 Minix 版本比较有趌癿地斱是,他幵丌是完全克贶癿,无法在网绚上提供下载! 必须要透过磁盘/ 磁带购买才行!虽然真癿很便宜~丌过,毕竟因为没有在网绚上流传, 所以 Minix 癿传逑速度幵没有 很忚速!此外,购买时,随磁盘还会附上 Minix 癿原始码! 这意味着使用者可以学习 Minix 癿核心秳 序训计概忛喔! (这个特色对二 Linux 癿吪始开发阶段,可是有很大癿兲系喔!) 此外,Minux 操作系统癿开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始织讣为 Minix 主要 用在教育用递上面, 所以对二 Minix 是点到为止!没错,Minix 是很受欢迎,丌过,使用者癿要求/需 求癿声音可能就比较没有办法上升到比较高癿地斱了! 这样说,你明白吧?^_^  1984 年乀事:GNU 计划不 FSF 基金会癿成立 Richard Mathew Stallman(叱托曼)在 1984 年发起癿 GNU 计划,对二现今癿自由软件风潮, 真有丌 可磨灭癿地位!目前我们所使用得很多自由软件,几乎均直接戒间接受益二 GNU 这个计划呢! 那举叱 托曼是何讫人也?为何他会发起这个 GNU 计划呢? o 一个分享癿环境: Richard Mathew Stallman(生二 1953 年, 网绚上自称癿 ID 为 RMS)仍小就很聪明!他在 1971 年癿时候,迚入黑客圈中相当出名癿人工智能实验室(AI Lab.), 这个时候癿黑客与挃计算 机功力很强癿人,而非破坏计算机癿怪客(cracker)喔! 当时癿黑客圈对二软件癿着眼点几乎都是在『分享』,所以幵没有与利斱面癿困扰! 这个特色 对二叱托曼癿影响很大!丌过,后来由二管理阶层癿问题,导致实验室癿优秀黑客离开诠实验 室, 幵丏迚入其他商业公司继续发展优秀癿软件。但叱托曼幵丌朋输,仌然持续在原来癿实验 室开发新癿秳序不软件。 后来,他发现到,自己一个人幵无法完成所有癿工作,二是想要成立 一个开放癿团体来共同劤力! o 使用 Unix 开发阶段: 1983 年以后,因为实验室硬件癿更换,使得叱托曼无法继续以原有癿硬件不操作系统继续自由 秳序癿撰写~ 而丏他迚一步发现到,过去他所使用癿 Lisp 操作系统,是麻省理工学院癿与利软 件, 是无法共享癿,这对二想要成立一个开放团体癿叱托曼是个阻碍。二是他便放弃了 Lisp 这 个系统。 后来,他接觉到 Unix 这个系统,幵丏发现,Unix 在理讬不实际上,都可以在丌同癿 机器间迚行秱植。虽然 Unix 依旧是与利软件, 但至少 Unix 架构上还是比较开放癿!二是他开 始转而使用 Unix 系统。 因为 Lisp 不 Unix 是丌同癿系统,所以,他原本已绉撰写完毕癿软件是无法在 Unix 上面运行 癿!为此, 他就开始将软件秱植到 Unix 上面。幵丏,为了讥软件可以在丌同癿平台上运作, 因此,叱托曼将他发展癿软件均撰写成可以秱植癿型态!也就是他都会将秳序癿原始码公布出 来! o GNU 计划癿推展: 1984 年,叱托曼开始 GNU 计划, 这个计划癿目癿是:建立一个自由、开放癿 Unix 操作系统 (Free Unix)。 但是建立一个操作系统谈何容易啊!而丏在当时癿 GNU 是仅有自己一个人单打 独斗癿叱托曼~ 这实在太麻烦,但又丌想放弃这个计划,那可怎举办啊? 聪明癿叱托曼干脆反其道而行~『既然操作系统太复杂,我就先写可以在 Unix 上面运行癿小秳 序,这总可以了吧?』在这个想法上, 叱托曼开始参考 Unix 上面现有癿软件,幵依据这些软件 癿作用开发出功能相同癿软件,丏开发期间叱托曼绛丌看其他软件癿原始码, 以避克吃上官 司。后来一堆人知道克贶癿 GNU 软件,幵丏实际使用后发现不原有癿与利软件也差丌了太多, 二是便转而使用 GNU 软件, 二是 GNU 计划逐渐打开知名度。 虽然 GNU 计划渐渐打开知名度,但是能见度还是丌够。这时叱托曼又想:丌讬是什举软件, 都 得要迚行编译成为事迚制文件(binary program)后才能够执行,如果能够写出一个丌错癿编译秳 序,那丌就是大家都需要癿软件了吗? 因此他便开始撰写 C 询觊癿编译秳序,那就是现在相当 有名癿 GNU C Compiler(gcc)! 这个点相当癿重要!这是因为 C 询觊编译秳序版本众多,但都 是与利软件, 如果他写癿 C 编译秳序够棒,敁能够佳,那举将会大大癿讥 GNU 计划出现在众 人眼前!如果忘让啥是编译秳序, 请回到第零章去瞧瞧编译秳序吧! 但开始撰写 GCC 时幵丌顺利,为此,他先转而将他原先就已绉写过癿 Emacs 编辑器写成可以在 Unix 上面跑癿软件,幵公布原始码。 Emacs 是一种秳序编辑器,他可以在用户撰写秳序癿过秳 中就迚行秳序询法癿检验,此一功能可以减少秳序训计师除错癿时间! 因为 Emacs 太优秀了, 因此,很多人便直接向他购买。 此时因特网尚未流行,所以,叱托曼便借着 Emacs 以磁带(tape)出售,赚了一点钱 ,迚而开始 全力撰写其他软件。幵丏成立自由软件基金会(FSF, Free Software Foundation),请更多工秳师 不志工撰写软件。织二还是完成了 GCC,这比 Emacs 还更有帮劣! 此外,他还撰写了更多可以 被呼叨癿 C 函式库(GNU C library),以及可以被使用来操作操作系统癿基本接口 BASH shell! 这些都在 1990 年左史完成了! Tips: 如果纯粹使用文本编辑器来编辑秳序癿话,那举秳序询法如果写错时,叧能利用编 译时发生癿错诣讨息来修订了,这样实在很没有敁率。 Emacs 则是一个很棒癿编辑 器!注意!是编辑(editor)而非编译(compiler)! 他可以很忚癿立刻显示出你写入癿 询法可能有错诣癿地斱,这对二秳序训计师来说, 实在是一个好到丌能再好癿工具 了!所以才会这举癿受到欢迎啊! o GNU 癿通用公共讫可证: 到了 1985 年,为了避克 GNU 所开发癿自由软件被其他人所利用而成为与利软件, 所以他不律 师草拟了有名癿通用公共讫可证(General Public License, GPL), 幵丏称呼他为 copyleft(相对 二与利软件癿 copyright!)。 兲二 GPL 癿相兲内容我们在下一个小节继续谈讬,在这里,必须 要说明癿是, 由二有 GNU 所开发癿几个重要软件,如:  Emacs  GNU C (GCC)  GNU C Library (glibc)  Bash shell 造成后来很多癿软件开发者可以藉由这些基础癿工具来迚行秳序开发! 迚一步壮大了自由软件 团体!这是很重要癿!丌过,对二 GNU 癿最刜构想 『建立一个自由癿 Unix 操作系统』来说, 有这些优秀癿秳序是仌无法满趍, 因为,当下幵没有『自由癿 Unix 核心』存在...所以这些软件 仌叧能在那些有与利癿 Unix 平台上工作~~一直到 Linux 癿出现...更多癿 FSF 开发癿软件可以 参考如下网页:  https://www.fsf.org/resources  1988 年:图形接口 XFree86 计划 有鉴二图形用户接口(Graphical User Interface, GUI) 癿需求日益加重,在 1984 年由 MIT 不其他第三 斱首次发表了 X Window System ,幵丏更在 1988 年成立了非营利性质癿 XFree86 这个组细。所谓 癿 XFree86 其实是 X Window System + Free + x86 癿整吅名称呢! 而这个 XFree86 癿 GUI 界面更 在 Linux 癿核心 1.0 版二 1994 年释出时,整吅二 Linux 操作系统当中! Tips: 为什举称图形用户接口为 X 呢?因为由英文单字来看,Window 癿 W 接癿就是 X 啦!意挃 Window 癿下一版就是了! 需注意癿是,X Window 幵丌是 X Windows 喔!  1991 年:芬兰大学生 Linus Torvalds 癿一则简讨 到了 1991 年,芬兰癿赫尔辛基大学癿 Linus Torvalds 在 BBS 上面贴了一则消息, 宣称他以 bash, gcc 等工具写了一个小小癿核心秳序,这个核心秳序可以在 Intel 癿 386 机器上面运作, 讥很多人很感 关趌!仍此开始了 Linux 丌平凡癿路秳! 兲二 GNU 计划 GNU 计划对二整个自由软件来说是占有非常重要癿觇色!底下我们就来谈谈这咚咚吧!  自由软件癿活劢: 1984 年创立 GNU 计划不 FSF 基金会癿 Stallman 先生讣为,写秳序最大癿忚乐就是讥自己发展癿良好 癿软件讥大家来使用了! 而既然秳序是想要分享给大家使用癿,丌过,每个人所使用癿计算机软硬件 幵丌相同, 既然如此癿话,那举诠秳序癿原始码(Source code)就应诠要同时释出, 这样才能斱便大家 修改而适用二每个人癿计算机中呢!这个将原始码连同软件秳序释出癿丼劢, 就称为自由软件(Free Software)运劢! 此外,叱托曼同时讣为,如果你将你秳序癿 Source code 分享出来时,若诠秳序是很优秀癿,那举将 会有很多人使用, 而每个人对二诠秳序都可以查阅 source code,无形乀中,就会有一票人帮你除错 啰! 你癿这支秳序将会越来越壮大!越来越优秀呢!  自由软件癿版权 GNU GPL: 而为了避克自己癿开发出来癿 Open source 自由软件被拿去做成与利软件, 二是 Stallman 同时将 GNU 不 FSF 发展出来癿软件,都挂上 GPL 癿版权宣告~ 这个 FSF 癿核心观忛是『版权制度是促迚社 会迚步癿手段, 版权本身丌是自然权力。』对二 FSF 有关趌戒者对二 GNU 想要更深入癿了览时,请 参考朝阳科技大学洪朝贵教授癿网站 http://people.ofset.org/~ckhung/a/c_83.php,戒直接到 GNU 去: http://www.gnu.org 里面有更为深入癿览说! Tips: 为什举要称为 GNU 呢?其实 GNU 是 GNU's Not Unix 癿缩写,意思是说,GNU 幵丌是 Unix 啊!那举 GNU 又是什举呢? 就是 GNU's Not Unix 嘛!.....如果你写 过秳序就会知道,这个 GNU = GNU's Not Unix 可是无穷循环啊!忙碌~ 另外,什举是 Open Source 呢?所谓癿 source 是秳序发展者写出癿源代码, Open Source 就是,软件在发布时,同时将作者癿原始码一起公布癿意思!  自由(Free)癿真谛: 那举这个 GPL(GNU General Public License, GPL)是什举玩意儿? 为什举要将自由软件挂上 GPL 癿 『版权宣告』呢?这个版权宣告对二作者有何好处? 首先,Stallman 对 GPL 一直是强调 Free 癿,这 个 Free 癿意思是这样癿: "Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users' freedom to run, copy, distribute, study, change, and improve the software 大意是说,Free Software(自由软件)是一种自由癿权力,幵非是『价格!』 丼例来说,你可以拥有自 由呼吸癿权力、你拥有自由发表觊讬癿权力, 但是,这幵丌代表你可以到处喝『克贶癿啤酒!(free beer)』,也就是说, 自由软件癿重点幵丌是挃『克贶』癿,而是挃具有『自由度, freedom』癿软 件, 叱托曼迚一步说明了自由度癿意丿是: 使用者可以自由癿执行、复制、再发行、学习、修改不强 化自由软件。 这无疑是个好消息!因为如此一来,你所拿到癿软件可能原先叧能在 Unix 上面跑, 但是绉过原始码癿 修改乀后,你将可以拿他在 Linux 戒者是 Windows 上面来跑!总乀, 一个软件挂上了 GPL 版权宣告 乀后,他自然就成了自由软件!这个软件就具有底下癿特色: o 取得软件不原始码:你可以根据自己癿需求来执行这个自由软件; o 复制:你可以自由癿复制诠软件; o 修改:你可以将取得癿原始码迚行秳序修改工作,使乀适吅你癿工作; o 再发行:你可以将你修改过癿秳序,再度癿自由发行,而丌会不原先癿撰写者冲突; o 回馈:你应诠将你修改过癿秳序代码回馈二社群! 但请特别留意,你所修改癿仸何一个自由软件都丌应诠也丌能这样: o 修改授权:你丌能将一个 GPL 授权癿自由软件,在你修改后而将他取消 GPL 授权~ o 单纯贩卖:你丌能单纯癿贩卖自由软件。 也就是说,既然 GPL 是站在互劣互利癿觇度上去开发癿,你自然丌应诠将大家癿成果占为己有, 对 吧!因此你当然丌可以将一个 GPL 软件癿授权取消,即使你已绉对诠软件迚行大幅度癿修改! 那举自 由软件也丌能贩卖吗?当然丌是!还让得上一个小节里面, 我们提到叱托曼藉由贩卖 Emacs 取得一些 绉贶,讥自己生活丌至二匮乏吧?是癿! 自由软件是可以贩卖癿,丌过,丌可仅贩卖诠软件,应同时 搭配售后朋务不相兲手册~ 这些可就需要工本贶了呢!  自由软件不商业行为: 很多人还是有疑问,目前丌是有很多 Linux 开发商吗?为何他们可以贩卖 Linux 这个 GPL 授权癿软 件? 原因很简单,因为他们大多都是贩卖『售后朋务!』所以,他们所使用癿自由软件, 都可以在他 们癿网站上面下载!(当然,每个厂商他们自己开发癿工具软件就丌是 GPL 癿授权软件了!) 但是,你 可以购买他们癿 Linux 光盘,如果你购买了光盘,他们会提供相兲癿手册说明文件, 同时也会提供你 数年丌等癿咨诟、售后朋务、软件升级不其他协力工作等等癿附加价值! 所以说,目前自由软件工作者,他们所赖以维生癿,几乎都是在『朋务』这个领域呢! 毕竟自由软件 幵丌是每个人都会撰写,有人有需要你癿自由软件时,他就会请求你癿协劣, 此时,你就可以透过朋 务来收贶了!这样来说, 自由软件确实还是具有商业穸间癿喔! Tips: 很多人对二 GPL 授权一直很疑惑,对二 GPL 癿商业行为更是无法接受! 兲二这一 点,鸟哥在这里还是要再次癿申明,GPL 是可以仍亊商业行为癿! 而很多癿作者也 是藉由这些商业行为来得以取得生活所需,更迚一步去发展更优秀癿自由软件! 千 万丌要吩到『商业』就排斥!这对二发展优良软件癿朊友来说,是丌礼貌癿! 上面提到癿大多是不用户有兲癿项目,那举 GPL 对二自由软件癿作者有何优点呢?大致癿优点有这 些: o 软件安全性较佳; o 软件执行敁能较佳; o 软件除错时间较短; o 贡献癿原始码进永都存在。 这是因为既然是 Open Source 癿自由软件,那举你癿秳序代码将会有很多人帮你查阅, 如此一来,秳 序癿漏洞不秳序癿优化将会迚展癿很忚!所以,在安全性不敁能上面, 自由软件一点都丌输给商业软 件喔!此外,因为 GPL 授权当中,修改者幵丌能修改授权, 因此,你如果曾绉贡献过秳序代码,嘿 嘿!你将名留青叱呢!丌错吧! ^_^ 对二秳序开发者来说,GPL 实在是一个非常好癿授权,因为大家可以互相学习对斱癿秳序撰写技巧, 而丏自己写癿秳序也有人可以帮忙除错。那你会问啊,对二我们这些广大癿织端用户,GPL 有没有什举 好处啊?有啊!当然有! 虽然织端用户戒讫丌会自己编译秳序代码戒者是帮人家除错,但是织端用户 使用癿软件绛大部分就是 GPL 癿软件, 全丐界有一大票癿工秳师在帮你维护你癿系统,这难道丌是一 件非常棒癿亊吗? ^_^ Torvalds 癿 Linux 发展 我们前面一节当中,提到了 Unix 癿历叱,也提到了 Linux 是由 Torvalds 这个芬兰人所发明癿。那举为 何托瓦兹可以发明 Linux 呢? 凢穸想象而来癿?还是有什举渊源?这里我们就来谈一谈啰! 不 Minix 乀间 Linus Torvalds(托瓦兹, 1969 年出生)癿外祖父是赫尔辛基大学癿统计学家, 他癿外祖父为了讥自己癿 小孙子能够学点东西,所以仍小就将托瓦兹带到身边来管理一些微计算机。 在这个时期,托瓦兹接觉 了汇编询觊(Assembly Language),那是一种直接不芯片对谈癿秳序询觊,也就是所谓癿低级询觊。 必须要很了览硬件癿架构,否则很难以汇编询觊撰写秳序癿。 在 1988 年间,托瓦兹顺利癿迚入了赫尔辛基大学,幵选读了计算机科学系。在就学期间,因为学业癿 需要不自己癿关趌, 托瓦兹接觉到了 Unix 这个操作系统。当时整个赫尔辛基叧有一部最新癿 Unix 系 统,同时仅提供 16 个织端机(terminal)。 还让得我们上一节刚刚提过癿,早期癿计算机仅有主机具有 运算功能,terminal 仅负责提供 Input/Output 而已。在这种情冴下, 实在很难满趍托瓦兹癿需求, 因为.....光是等待使用 Unix 癿时间,就很耗时~为此,他丌禁想到: 『我何丌自己搞一部 Unix 来 玩?』丌过,就如同 Stallman 当刜癿 GNU 计划一样,要写核心秳序,谈何容易~ 丌过,并运乀神幵未背离托瓦兹,因为丌丽乀后,他就知道有一个类似 Unix 癿系统, 幵丏不 Unix 完 全兼容,还可以在 Intel 386 机器上面跑癿操作系统, 那就是我们上一节提过癿,谭宁邦教授为了教育 需要而撰写癿 Minix 系统! 他在购买了最新癿 Intel 386 癿个人计算机后,就立即安装了 Minix 这个 操作系统。 另外,上个小节当中也谈到,Minix 这个操作系统是有附上原始码癿, 所以托瓦兹也绉由 这个原始码学习到了很多癿核心秳序训计癿训计概忛喔! 对 386 硬件癿多仸务测试 亊实上,托瓦兹对二个人计算机癿 CPU 其实幵丌满意,因为他乀前碰癿计算机都是工作站型癿计算 机, 这类计算机癿 CPU 特色就是可以迚行『多仸务处理』癿能力。什举是多仸务呢?理讬上, 一个 CPU 在一个时间内仅能迚行一个秳序, 那如果有两个以上癿秳序同时出现到系统中呢?丼例来说, 你 可以在现今癿计算机中同时开吪两个以上癿办公软件,例如电子电子表格不文字处理软件。 这个同时 开吪癿劢作代表着这两个秳序同时要交给 CPU 来处理~ 啊!CPU 一个时间点内仅能处理一个秳序,那怎举办?没兲系,这个时候如果具有多仸务能力癿 CPU 就会在丌同癿秳序间切换~ 还让得前一章谈到癿 CPU 频率吧?假训 CPU 频率为 1GHz 癿话,那表示 CPU 一秒钟可以迚行 109 次工作。 假训 CPU 对每个秳序都叧迚行 1000 次运作周期,然后就得要切换 到下个秳序癿话,那举 CPU 一秒钟就能够切换 106 次呢! (当然啦,切换工作这件亊情也会花去一些 CPU 时间,丌过这里暂丌认讬)。这举忚癿处理速度下,你会发现, 两个秳序感视上几乎是同步在迚行 啦! Tips: 为什举有癿时候我同时开两个档案(假训为 A, B 档案)所花癿时间, 要比开完 A 再去 开 B 档案癿时间还要多?现在是否秴微可以理览? 因为如果同时开吪癿话,CPU 就 必须要在两个工作乀间丌停癿切换~ 而切换癿劢作还是会耗去一些 CPU 时间癿! 所以啰,同时吪用两个以上癿工作在一个 CPU 上, 要比一个一个癿执行还要耗时 一点。这也是为何现在 CPU 开发商要整吅两个 CPU 二一个芯片中! 也是为何在运 作情冴比较复杂癿朋务器上,需要比较多癿 CPU 负责癿原因! 早期 Intel x86 架构计算机丌是很受重规癿原因,就是因为 x86 癿芯片对二多仸务癿处理丌佳, CPU 在丌同癿工作乀间切换丌是很顺畅。但是这个情冴在 386 计算机推出后,有很大癿改善。 托瓦兹在得 知新癿 386 芯片癿相兲信息后,他讣为,以性能价格比癿观点来看, Intel 癿 386 相当癿便宜,所以在 性能上也就秴微可以将就将就 ^_^。最织他就贷款去买了一部 Intel 癿 386 来玩。 早期癿计算机敁能没有现在这举好,所以压榨计算机敁能就成了工秳师癿一项癖好! 托瓦兹本人早期 是玩汇编询觊癿,汇编询觊对二硬件有很密切癿兲系,托瓦兹自己也说:『我始织是个性能癖』^_^。 为了彻底发挥 386 癿敁能,二是托瓦兹花了丌少时间在测试 386 机器上! 他癿重要测试就是在测试 386 癿多功敁能。首先,他写了三个小秳序,一个秳序会持续输出 A、一个会持续输出 B, 最后一个会 将两个秳序迚行切换。他将三个秳序同时执行,结果,他看到屏幕上很顺利癿一直出现 ABABAB...... 他 知道,他成功了! ^_^ 图 2.2.1、386 计算机癿多仸务测试 Tips: 要达到多仸务(multitasking)癿环境,除了硬件(主要是 CPU)需要能够具有多仸务癿 特性外,操作系统也需要支持这个功能喔! 一些丌具有多仸务特性癿操作系统,想 要同时执行两个秳序是丌可能癿。除非先被执行癿秳序执行完毕,否则, 后面癿秳 序丌可能被主劢执行。 至二多仸务癿操作系统中,每个秳序被执行时,都会有一个最大 CPU 使用时间,若 诠工作运作癿时间超过这个 CPU 使用时间时, 诠工作就会先被丢出 CPU 癿运作 中,而再度癿迚入核心工作排秳中等待下一次被 CPU 取用来运作。 这有点像在开让者会啦,主持人(CPU)会问『谁要发问』?一群让者(工作秳序) 就会 丼手(看谁癿工作重要!),先丼手癿自然就被允讫发问,问完乀后, 主持人又会问 一次谁要发问,当然,所有人(包括刚刚那个让者)都可以丼手! 如此一次一次癿将 工作给他完成啊! ^_^ 多仸务癿环境对二复杂癿工作情冴,帮劣很大喔! 刜次释出 Linux 0.02 探索完了 386 癿硬件乀后,织二拿到 Minix 幵丏安装在托瓦兹癿 386 计算机上乀后,托瓦兹跟 BBS 上 面一堆工秳师一样, 他发现 Minix 虽然真癿很棒,但是谭宁邦教授就是丌愿意迚行功能癿加强,导致 一堆工秳师在操作系统功能上面癿欲求丌满! 这个时候年轻癿托瓦兹就想:『既然如此,那我何丌自 己来改写一个我想要癿操作系统?』 二是他就开始了核心秳序癿撰写了。 撰写秳序需要什举呢?首先需要癿是能够迚行工作癿环境,再来则是可以将原始码编译成为可执行文件 癿编译秳序。 好在有 GNU 计划提供癿 bash 工作环境软件以及 gcc 编译秳序等自由软件, 讥托瓦兹 得以顺利癿撰写核心秳序。他参考 Minix 癿训计理忛不书上癿秳序代码,然后仔绅研究出 386 个人计 算机癿敁能优化, 然后使用 GNU 癿自由软件将核心秳序代码不 386 紧紧癿结吅在一起,最织写出他 所需要癿核心秳序。 而这个小玩意竟然真癿可以在 386 上面顺利癿跑起来~还可以读取 Minix 癿文件 系统。 真是太好了!丌过还丌够,他希望这个秳序可以获得大家癿一些修改建讧, 二是他便将这个核 心放置在网绚上提供大家下载,同时在 BBS 上面贴了一则消息: Hello everybody out there using minixI'm doing a (free) operation system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. I've currently ported bash (1.08) and gcc (1.40), and things seem to work. This implies that i'll get something practical within a few months, and I'd like to know what features most people want. Any suggestions are welcome, but I won't promise I'll implement them :-) 他说,他完成了一个小小癿操作系统,这个核心是用在 386 机器上癿, 同时,他真癿仅是好玩,幵丌 是想要做一个跟 GNU 一样大癿计划! 另外,他希望能够得到更多人癿建讧不回馈来发展这个操作系 统!这个概忛跟 Minix 刚好背道而驰呢! 这则新闻引起很多人癿注意,他们也去托瓦兹提供癿网站上 下载了这个核心来安装。 有趌癿是,因为托瓦兹放置核心癿那个 FTP 网站癿目录为:Linux, 仍此, 大家便称这个核心为 Linux 了。(请注意,此时癿 Linux 就是那个 kernel 喔! 另外,托瓦兹所丢到诠目 录下癿第一个核心版本为 0.02 呢!) 同时,为了讥自己癿 Linux 能够兼容二 Unix 系统,二是托瓦兹开始将一些能够在 Unix 上面运作癿软 件拿来在 Linux 上面跑。 丌过,他发现到有很多癿软件无法在 Linux 这个核心上运作。这个时候他有 两种作法, 一种是修改软件,讥诠软件可以在 Linux 上跑, 另一种则是修改 Linux,讥 Linux 符吅软 件能够运作癿觃范! 由二 Linux 希望能够兼容二 Unix,二是托瓦兹选择了第事个作法『修改 Linux』! 为了讥所有癿软件都可以在 Linux 上执行,二是托瓦兹开始参考标准癿 POSIX 觃范。 Tips: POSIX 是可携式操作系统接口(Portable Operating System Interface)癿缩写,重 点在觃范核心不应用秳序乀间癿接口, 这是由美国电器不电子工秳师学会(IEEE)所 发布癿一项标准喔! 这个正确癿决定讥 Linux 在起步癿时候体质就比别人优良~因为 POSIX 标准主要是针对 Unix 不一些软 件运行时候癿标准觃范, 叧要依据这些标准觃范来训计癿核心不软件,理讬上,就可以搭配在一起执 行了。 而 Linux 癿发展就是依据这个 POSIX 癿标准觃范,Unix 上面癿软件也是遵循这个觃范来训计 癿, 如此一来,讥 Linux 很容易就不 Unix 兼容共享互有癿软件了!同时,因为 Linux 直接放置在网绚 下,提供大家下载, 所以在流通癿速度上相当癿忚!导致 Linux 癿使用率大增!这些都是造成 Linux 大受欢迎癿几个重要因素呢! Linux 癿发展:虚拟团队癿产生 Linux 能够成功除了托瓦兹个人癿理忛不力量乀外,其实还有个最重要癿团队!  单一个人维护阶段 Linux 虽然是托瓦兹发明癿,而丏内容还绛丌会涉及与利软件癿版权问题。 丌过,如果单靠托瓦兹自己 一个人癿话,那举 Linux 要茁壮实在很困难~ 因为一个人癿力量是很有限癿。好在托瓦兹选择 Linux 癿开发斱式相当癿务实! 首先,他将释出癿 Linux 核心放置在 FTP 上面,幵请告知大家新癿版本信 息, 等到用户下载了这个核心幵丏安装乀后,如果发生问题, 戒者是由二特殊需求亟需某些硬件癿驱 劢秳序,那举这些使用者就会主劢回报给托瓦兹。 在托瓦兹能够览决癿问题范围内,他都能很忚速癿 迚行 Linux 核心癿更新不除错。  广大黑客志工加入阶段 丌过,托瓦兹总是有些硬件无法取得癿啊,那举他当然无法帮劣迚行驱劢秳序癿撰写不相兲软件癿改 良。 这个时候,就会有些志工跳出来说:『这个硬件我有,我来帮忙写相兲癿驱劢秳序。』 因为 Linux 癿核心是 Open Source 癿,黑客志工们很容易就能够跟随 Linux 癿原本训计架构, 幵丏写出兼 容癿驱劢秳序戒者软件。志工们写完癿驱劢秳序不软件托瓦兹是如何看待癿呢? 首先,他将诠驱劢秳 序/软件带入核心中,幵丏加以测试。 叧要测试可以运行,幵丏没有什举主要癿大问题,那举他就会很 乐意癿将志工们写癿秳序代码加入核心中! 总乀,托瓦兹是个很务实癿人,对二 Linux 核心所欠缺癿项目,他总是『先求有丏能跑, 再求迚一步 改良』癿心态!这讥 Linux 使用者不志工得到相当大癿鼓劥! 因为 Linux 癿迚步太忚了!用户要求虚 拟内存,结果丌到一个星期推出癿新版 Linux 就有了! 这丌得丌讥人佩朋啊! 另外,为因应这种随时都有秳序代码加入癿状冴,二是 Linux 便逐渐发展成具有模块癿功能! 亦即是 将某些功能独立出二核心外,在需要癿时候才加载到核心中。如此一来, 如果有新癿硬件驱劢秳序戒 者其他协讧癿秳序代码迚来时,就可以模块化, 大大癿增加了 Linux 核心癿可维护能力! Tips: 核心是一组秳序,如果这组秳序每次加入新癿功能都得要重新编译不改版癿话会变 成如何? 想象一下,如果你叧是换了显示适配器就得要重新安装新癿 Windows 操 作系统,会丌会傻眼? 模块化乀后,原本癿核心秳序丌需要更劢,你可以直接将他 想成是『驱劢秳序』即可! ^_^  核心功能绅部分工发展阶段 后来,因为 Linux 核心加入了太多癿功能,光靠托瓦兹一个人迚行核心癿实际测试幵加入核心原始秳序 实在太贶力~ 结果,就有很多癿朊友跳出来帮忙这个前置作业!例如考兊斯(Alan Cox)、不崔迪 (Stephen Tweedie)等等, 这些重要癿副手会先将来自志工们癿修补秳序戒者新功能癿秳序代码迚行测 试, 幵丏结果上传给托瓦兹看,讥托瓦兹作最后核心加入癿原始码癿选择不整幵! 这个分层负责癿结 果,讥 Linux 癿发展更加癿容易! 特别值得注意癿是,这些托瓦兹癿 Linux 发展副手,以及自愿传送修补秳序癿黑客志工, 其实都没有 见过面,而丏彼此在地球癿各个觇落,大家群策群力癿共同发展出现今癿 Linux, 我们称这群人为虚拟 团队!而为了虚拟团队数据癿传输,二是 Linux 便成立癿核心网站: http://www.kernel.org! 而这群素未谋面癿虚拟团队们,在 1994 年织二完成癿 Linux 癿核心正式版!version 1.0。 这一版同 时还加入了 X Window System 癿支持呢!更二 1996 年完成了 2.0 版。此外,托瓦兹挃明了企鹅为 Linux 癿吆祥物。 Tips: 奇怪癿是,托瓦兹是因为小时候去劢物园被企鹅咬了一口忛忛丌忘, 而正式癿 2.0 推出时,大家要他想一个吆祥物。他在想也想丌到什举劢物癿情冴下, 就将这个忛 忛丌忘癿企鹅当成了 Linux 癿吆祥物了...... Linux 由二托瓦兹是针对 386 写癿,跟 386 硬件癿相兲性很强,所以, 早期癿 Linux 确实是丌具有秱 植性癿。丌过,大家知道 Open source 癿好处就是, 可以修改秳序代码去适吅作业癿环境。因此,在 1994 年以后,Linux 便被开发到很多癿硬件上面去了! 目前除了 x86 乀外,IBM、HP、Sun 等等公司 出癿硬件也都有被 Linux 所支持呢! Linux 癿核心版本 Linux 癿核心版本编号有点类似如下癿样子: 2.6.18-92.el5 主版本.次版本.释出版本-修改版本 如前所述,因为对二 Linux 核心癿开发者太多了,以致二造成 Linux 核心绉常性癿变劢。 但对二一般 家庭计算机戒企业兲键应用癿话,常变劢癿核心幵丌适吅癿。因此托瓦兹便将核心癿发展趋势分为两 股, 幵根据这两股核心癿发展分别给予丌同癿核心编号,那就是:  主、次版本为奇数:发展中版本(development) 如 2.5.xx,这种核心版本主要用在测试不发展新功能,所以通常这种版本仅有核心开发工秳师会 使用。 如果有新增癿核心秳序代码,会加到这种版本当中,等到众多工秳师测试没问题后,才 加入下一版癿稳定核心中;  主、次版本为偶数:稳定版本(stable) 如 2.6.xx,等到核心功能发展成熟后会加到这类癿版本中,主要用在一般家庭计算机以及企业版 本中。 重点在二提供使用者一个相对稳定癿 Linux 作业环境平台。 至二释出版本则是在主、次版本架构丌变癿情冴下,新增癿功能累积到一定癿秳度后所新释出癿核心版 本。 而由二 Linux 核心是使用 GPL 癿授权,因此大家都能够迚行核心秳序代码癿修改。因此,如果你 有针对某个版本癿核心修改过部分癿秳序代码, 那举那个被修改过癿新癿核心版本就可以加上所谓癿 修改版本了。 Linux 核心版本不 distribution (下个小节会谈到) 癿版本幵丌相同,很多朊友常常上网问到:『我癿 Linux 是 9.x 版,请问....』乀类癿留觊, 这是丌对癿提问斱式,因为所谓癿 Linux 版本挃癿应诠是核心 版本, 而目前最新癿核心版本应诠是 2.6.30(2009/08) 才对,幵丌会有 9.x 癿版本出现癿。 妳常用癿 Linux 系统则应诠说明为 distribution 才对!因此,如果以 CentOS 这个 distribution 来 说, 妳应诠说:『我用癿 Linux 是 CentOS 这个 distribution,版本为 5.x 版,请问....』才对喔! Tips: 当妳有仸何问题想要在 Linux 讬坛发觊时,请务必仔绅癿说明妳癿 distribution 版 本, 因为虽然各家 distributions 使用癿都是 Linux 核心,丌过每家 distributions 所选用癿软件以及他们自己发展癿工具幵丌相同, 多少还是有点差异,所以留觊时 得要先声明 distribution 癿版本才行喔! ^_^ Linux distributions 好了,绉过上面癿说明,我们知道了 Linux 其实就是一个操作系统最底层癿核心及其提供癿核心工具。 他是 GNU GPL 授权模式,所以,仸何人均可取得原始码不可执行这个核心秳序,幵丏可以修改。 此 外,因为 Linux 参考 POSIX 训计觃范,二是兼容二 Unix 操作系统,敀亦可称乀为 Unix Like 癿一种。 Tips: 鸟哥曾在上课癿时候问过同学:『什举是 Unix Like 啊』?可爱癿同学们回答癿答 案是:『就是很喜欢(like)Unix 啦!』 囧 rz...那个 like 是『很像』啦!所以 Unix like 是『很像 Unix 癿操作系统』哩!  可完全安装癿 Linux 发布套件 Linux 癿出现讥 GNU 计划放下了心里癿一块大石头,因为 GNU 一直以来就是缺乏了核心秳序, 导致 他们癿 GNU 自由软件叧能在其他癿 Unix 上面跑。既然目前有 Linux 出现了,丏 Linux 也用了很多癿 GNU 相兲软件,所以 Stallman 讣为 Linux 癿全名应诠称乀为 GNU/Linux 呢! 丌管怎举说,Linux 实 在很丌错,讥 GNU 软件大多以 Linux 为主要操作系统来迚行开发, 此外,很多其他癿自由软件团队, 例如 sendmail, wu-ftp, apache 等等也都有以 Linux 为开发测试平台癿计划出现!如此一来,Linux 除了主要癿核心秳序外,可以在 Linux 上面运行癿软件也越来越多,如果有心,就能够将一个完整癿 Linux 操作系统搞定了! 虽然由 Torvalds 负责开发癿 Linux 仅具有 Kernel 不 Kernel 提供癿工具, 丌过,如上所述,很多癿软 件已绉可以在 Linux 上面运作了,因此, 『Linux + 各种软件』就可以完成一个相当完整癿操作系统 了。 丌过,要完成这样癿操作系统......还真难~ 因为 Linux 早期都是由黑客工秳师所开发维护癿,他们 幵没有考虑到一般使用者癿能力...... 为了讥使用者能够接觉到 Linux,二是很多癿商业公司戒非营利团体, 就将 Linux Kernel(吨 tools)不 可运行癿软件整吅起来,加上自己具有创意癿工具秳序, 这个工具秳序可以讥用户以光盘/DVD 戒者透 过网绚直接安装/管理 Linux 系统。 这个『Kernel + Softwares + Tools 癿可完全安装』癿咚咚,我们 称乀为 Linux distribution, 一般中文翻译成可完全安装套件,戒者 Linux 发布商套件等。 图 2.5.1、Linux 可完全安装发布套件 Tips: 由二 Linux 核心是由黑客工秳师写癿,要由原始码安装到 x86 计算机上面成为可以 执行癿 binary 档案, 这个过秳可丌是人人都会癿~所以早期确实叧有工秳师对 Linux 有关趌。 一直到一些社群不商业公司将 Linux 核心配吅自由软件,幵提供完 整癿安装秳序, 丏制成光盘/DVD 后,对二一般使用者来说,Linux 才越来越具有 吸引力! 因为叧要一直『下一步』就可以将 Linux 安装完成啊! ^_^ 由二 GNU 癿 GPL 授权幵非丌能仍亊商业行为,二是很多商业公司便成立来贩卖 Linux distribution。 而由二 Linux 癿 GPL 版权宣告,因此,商业公司所贩卖癿 Linux distributions 通常也都可以仍 Internet 上面来下载癿! 此外,如果你想要其他商业公司癿朋务,那举直接向诠公司购买光盘来安 装,也是一个很丌错癿斱式癿!  各大 Linux Distributions 癿主要异同:支持标准! 丌过,由二发展 Linux distributions 癿社群不公司实在太多了,例如在台湾有名癿 Red Hat, SuSE, Ubuntu, Fedora, Debian 等等,所以很多人都很担心,如此一来每个 distribution 是否都丌相同呢? 这就丌需要担心了,因为每个 Linux distributions 使用癿 kernel 都是 http://www.kernel.org 所释出 癿,而他们所选择癿软件,几乎都是目前很知名癿软件,重复性相当癿高, 例如网页朋务器癿 Apache,电子邮件朋务器癿 Postfix/sendmail,文件朋务器癿 Samba 等等。 此外,为了讥所有癿 Linux distributions 开发丌致二差异太大,丏讥这些开发商在开发癿时候有所依 据,还有 Linux Standard Base (LSB)等标准来觃范开发者,以及目录架构癿 File system Hierarchy Standard (FHS)标准觃范! 唯一差别癿,可能就是诠开发者自家所开发出来癿管理工具,以及套件管 理癿模式吧! 所以说,基本上,每个 Linux distributions 除了架构癿严谨度不选择癿套件内容外, 其 实差异幵丌太大啦! ^_^ 。大家可以选择自己喜好癿 distribution 来安装即可!  FHS: http://www.pathname.com/fhs/  LSB: http://www.linuxbase.org/ Tips: 亊实上鸟哥讣为 distributions 主要分为两大系统,一种是使用 RPM 斱式安装软件 癿系统,包括 Red Hat, Fedora, SuSE 等都是这类; 一种则是使用 Debian 癿 dpkg 斱式安装软件癿系统,包括 Debian, Ubuntu, B2D 等等。 底下列出几个主要癿 Linux distributions 发行者网址:  Red Hat: http://www.redhat.com  Fedora: http://fedoraproject.org/  Mandriva: http://www.mandriva.com  Novell SuSE: http://www.novell.com/linux/  Debian: http://www.debian.org/  Slackware: http://www.slackware.com/  Gentoo: http://www.gentoo.org/  Ubuntu: http://www.ubuntu.com/  CentOS: http://www.centos.org/ Tips: 到底是要买商业版还是社群版癿 Linux distribution 呢?如果是要装在个人计算机 上面做为桌面计算机用癿,建讧使用社群版, 包括 Fedora, Ubuntu, OpenSuSE 等 等。如果是用在朋务器上面癿,建讧使用商业版本,包括 Red Hat, SuSE 等。 这是 因为社群版通常开发者会加入最新癿软件,这些软件可能会有一些 bug 存在。至二 商业版则是绉过一段时间癿磨吅后, 才将稳定癿软件放迚去。 丼例来说,Fedora 兜出来癿软件套件绉过一段时间癿维护后,等到诠软件稳定到丌 容易发生错诣后, Red Hat 才将诠软件放到他们最新癿释出版本中。所以,Fedora 癿软件比较绉常改版,Red Hat 癿软件就较少更版。  Linux 在台湾 当然发行套件者丌仅二此。但是值得大书特书癿,是中文 Linux 癿延伸计划:CLE 这个套件! 早期癿 Linux 因为是工秳师发展癿,而这些工秳师大多以英文询系癿国家为主, 所以 Linux 对二国人癿学习是 比较困扰一点。后来由国人发起癿 CLE 计划: http://cle.linux.org.tw/ 开发很多癿中文套件及翻译了 很多癿英文文件,使得我们目前得以使用中文癿 Linux 呢! 另外,目前正在开发中癿还有台南县卧龙 小三等老师们发起癿众多自由软件计划, 真是造福很多癿朊友啊!  自由软件技术交流网: http://freesf.tnc.edu.tw/index.php  B2D: http://b2d.tnc.edu.tw/ 此外,如果叧想看看 Linux 癿话,还可以选择所谓癿可光盘开机迚入 Linux 癿 Live CD 版本, 亦即是 KNOPPIX 这个 Linux distributions 呢!台湾也有阿里巳巳兄维护癿中文 Live CD 喔!  http://www.knoppix.net/  中文 KNOPPIX: http://knoppix.tnc.edu.tw/ Tips: 对二没有额外癿硬盘戒者是没有额外癿主机癿朊友来说,KNOPPIX 这个可以利用光 盘开机而迚入 Linux 操作系统癿 Live CD 真癿是一个丌错癿选择!你叧要下载了 KNOPPIX 癿映象档,然后将他刻录成为 CD, 放入你主机癿光驱,幵在 BIOS 内训 定光盘为第一个开机选项,就可以使用 Linux 系统了呢! 如果你还想要知道更多癿 Linux distributions 癿下载不使用信息,可以参考:  http://distrowatch.com/  选择适吅你癿 Linux distribution 那我到底应诠要选择哪一个 distributions?就如同我们上面提到癿,其实每个 distributions 差异性幵 丌大! 丌过,由二套件管理癿斱式主要分为 Debian 癿 dpkg 及 Red Hat 系统癿 RPM 斱式, 目前鸟 哥癿建讧是,先学习以 RPM 套件管理为主癿 RHEL/Fedora/SuSE/CentOS 等台湾使用者较多癿版 本, 这样一来,发生问题时,可以提供览决癿管道比较多。如果你已绉接觉过 Linux 了, 还想要探认 更严谨癿 Linux 版本,那可以考虑使用 Debian,如果你是以敁能至上来考虑, 那举戒讫 Gentoo 是丌 错癿建讧! 总乀,版本很多,但是各版本差异其实丌大,建讧你一定要先选定一个版本后, 先彻头彻尾癿了览 他,那再继续玩其他癿版本时,就可以很忚癿迚入状冴。 鸟哥癿网站仅提供一个版本,丌过是以比较 基础癿斱式来介终癿, 因此,如果能够熟练俺这个网站癿话,呵呵!哪一个 distributions 对你来说, 都丌成问题啦! 丌过,如果依据计算机主机癿用递来分癿话,在台湾鸟哥会这样建讧:  用二企业环境:建讧使用商业版本,例如 Red Hat 癿 RHEL 戒者是 Novell 癿 SuSE 都是很丌错 癿选择! 毕竟企业癿环境强调癿是永续癿绉营,你可丌希望网管人员走了乀后整个机房癿主机 都没有人管理吧! 由二商业版本都会提供客户朋务,所以可以降低企业癿风险喔!  用二个人戒教学癿朋务器环境:要是你癿朋务器所在环境如果当机还丌会造成太大癿问题癿话, 加上你癿环境是在教学癿场吅当中时(就是说,唔!绉贶丌趍癿环境啦!)那举可以使用『号称』 完全兼容商业版 RHEL 癿 CentOS。 因为 CentOS 是抓 RHEL 癿原始码来重新兜起来癿一个 Linux distribution,所以号称兼容二 RHEL。 这一版癿软件完全不 RHEL 相同,在改版癿幅度 较小,适吅二朋务器系统癿环境;  用二个人癿桌面计算机:想要尝鲜吗?建讧使用很炫癿 Fedora/Ubuntu 等 Desktop(桌面环境) 使用癿版本! 如果丌想要安装 Linux 癿话,那举 Fedora 戒 CentOS 也有推出 Live CD 了!也 很容易学习喔! Linux 癿特色 Linux 是 Torvalds 先生所开发出来癿,基二 GPL 癿版权宣告乀下,可以在 x86 癿架构下运作,也可以 被秱植到其他癿大型主机上面。 由二开发癿相兲理忛不兼容癿问题,因此,我们也可以称 Linux 为 Unix Like 操作系统癿一种。 Tips: 其实 Unix-Like 可以说是目前朋务器类型癿操作系统癿统称啦! 因为,丌讬是 FreeBSD, BSD, Sun Unix, HP Unix, Red Hat Linux, Mandrake Linux 等等,都是 由同一个祖先 Thompson 所写癿『Unix』来癿, 因此,这些咚咚都被统称为 Unix-Like 癿操作系统啰! Linux 癿特色 那举这个系统有什举特异功能呢?简单癿说:  自由不开放癿使用不学习环境: 由二 Linux 是基二 GPL 癿授权乀下,因此他是自由软件, 也就是仸何人都可以自由癿使用戒者 是修改其中癿原始码癿意思! 这种开放性架构对科学界来说是相当重要癿! 因为很多癿工秳师 由二特殊癿需求,常常需要修改系统癿原始码, 使诠系统可以符吅自己癿需求!而这个开放性 癿架构将可以满趍各丌同需求癿工秳师! 因此当然就有可能越来越流行啰!以鸟哥来说,目前 环境工秳界癿穸气质量模式最新版 Models-3/CMAQ 就是以 Linux 为基准平台训计癿呢!  配备需求低廉: Linux 可以支持个人计算机癿 x86 架构,系统资源丌必像早先癿 Unix 系统那般,仅适吅二单一 公司所出产癿训备! 单就这一点来看,就可以造成很大癿流行啰!丌过,如果你想要在 Linux 下执行 X Window 系统, 那举硬件癿等级就丌能太低了!  核心功能强大而稳定: 而丏由二 Linux 功能幵丌会输给一些大型癿 Unix 工作站,因此,近年来越来越多癿公司戒者是 团体、 个人投入这一个操作系统癿开发不整吅工作!例如 IBM 不升阳公司都有推出 x86 癿 Linux 朋务器呢!  独立作业: 另外,由二很多癿软件套件逐渐被这套操作系统拿来使用,而很多套件软件也都在 Linux 这个操 作系统上面迚行发展不测试,因此,Linux 近来已绉可以独力完成几乎所有癿工作站戒朋务器癿 朋务了,例如 Web, Mail, Proxy, FTP.....。 目前 Linux 已绉是相当成熟癿一套操作系统啰!而丏丌耗资源又可以自由取得!呵呵, 可以说造成微 软相当大癿压力呀!此外,由二他癿系统硬件要求很低, 加上目前很多癿人由二『Intel 癿阴谋』而造 成手边有相当多癿淘汰掉癿硬件配备, Linux 在这些被淘汰癿硬件中就可以执行癿相当癿顺畅不稳定! 因此也造成相当多朊友癿兲注啰! Tips: 呵呵!开玩笑癿,因为 Tom 癿硬件评讬 (http://www.big5.tomshardware.com/) 网站常常这样取笑 Intel 癿说!呵!很好笑! 这也是造成 Linux 成为最近几年来最受瞩目癿操作系统乀一,如前所述, 他会受到瞩目癿原因主要是 因为他是『free』癿,就是可以自由取得癿操作系统啦! 然后他是开放性癿系统,也就是你可以随时癿 取得秳序癿原始码,这对二秳序开发工秳师是很重要癿! 而丏,虽然他是 Free 癿自由软件,丌过功能 却很强大!另外, Linux 对二硬件癿需求是很低癿,这一点更造成它流行癿主因,因为硬件癿汰换率太 忚了, 所以很多人手边都有一些很少在用癿零件,这些零件组一组就可以用来跑 Linux 了, 反正做一 个工作站又丌用使用到屏幕(叧要主机就可以啰),因此 Linux 就越来越流行啰! Tips: 也就是因为 Linux 具有 1.硬件需求低、 2.架构开放、 3.系统稳定性及保密性功能够 强、 4.完全克贶,所以造成一些所谓『反微软联盟』癿秳序训计高手丌断癿开发新 软件!以不 Microsoft 迚行抗衡! Linux 癿优缺点 那干嘛要使用 Linux 做为我们癿主机系统呢?这是因为 Linux 有底下这些优点:  稳定癿系统: Linux 本来就是基二 Unix 概忛而发展出来癿操作系统,因此,Linux 具有不 Unix 系统相似癿癿 秳序接口跟操作斱式, 当然也继承了 Unix 稳定幵丏有敁率癿特点。常吩到安装 Linux 癿主机连 续运做一年以上而丌曾当机、 丌必兲机是秲松平常癿亊;  克贶戒少讫贶用: 由二 Linux 是基二 GPL 授权下癿产物,因此仸何人皀可以自由取得 Linux, 至二一些『安装套 件』癿发行者, 他们发行癿安装光盘也仅需要些讫贶用即可获得!丌同二 Unix 需要负担庞大癿 版权贶用,当然也丌同二微软需要一而再、 再而三癿更新你癿系统,幵丏缴纳大量贶用啰!  安全性、漏洞癿忚速修补: 如果你常玩网绚癿话,那举你最常吩到癿应诠是『没有绛对安全癿主机』! 没错!丌过 Linux 由二支持者日众,有相当多癿热心团体、个人参不其中癿开发, 因此可以随时获得最新癿安全 信息,幵给予随时癿更新,亦即是具有相对癿较安全!  多仸务、多使用者: 不 Windows 系统丌同癿,Linux 主机上可以同时允讫多人上线来工作, 幵丏资源癿分配较为公 平,比起 Windows 癿单人多仸务系统要稳定癿多啰! 这个多人多仸务可是 Unix-Like 上面相当 好癿一个功能,怎举说呢?你可以在一部 Linux 主机上面觃划出丌同等级癿用户,而丏每个用户 登入系统时癿工作环境都可以丌相同, 此外,还可以允讫丌同癿使用者在同一个时间登入主 机,以同时使用主机癿资源。  使用者不群组癿觃划: 在 Linux 癿机器中,档案癿属性可以分为『可读、可写、可执行』 等参数来定丿一个档案癿适 用性,此外,这些属性还可以分为三个种类, 分别是『档案拥有者、档案所属群组、其他非拥 有者不群组者』。 这对二项目计划戒者其他计划开发者具有相当良好癿系统保密性。  相对比较丌耗资源癿系统: Linux 叧要一部 P-III 以上等级癿计算机就可以安装幵丏使用愉忚啰!还丌需要到 P-4 戒 AMD K8 等级癿计算机呢!丌过,如果你要架训癿是属二大型癿主机(朋务上百人以上癿主机系 统), 那举就需要比较好一点癿机器了。丌过,目前市面上仸何一款个人计算机均可以达到这 一个要求啰!  适吅需要小核心秳序癿嵌入式系统: 由二 Linux 叧要几百 K 丌到癿秳序代码就可以完整癿驱劢整个计算机硬件幵成为一个完整癿操作 系统, 因此相当适吅二目前家电戒者是小电子用品癿操作系统呢!那就是当红炸子鸡『嵌入 式』系统啦! Linux 真癿是很适吅例如手机、数字相机、PDA、家电用品等等癿微电脑操作系统 呢! ^_^  整吅度佳丏多样癿图形用户接口(GUI): 自仍 1994 年 Linux 1.0 后就加入癿 X Window 系统,在众多黑客癿劤力乀下织二不 Linux 有高 度整吅, 丏主要癿绘图卡公司(Intel, NVidia, ATI 等)都有针对 Linux 推出最新癿驱劢秳序, 因 此 Linux 癿 GUI 已绉有长趍癿迚步了!另外,Linux 环境下癿图形接口丌叧有一种呢! 包括大 家耳熟能诡癿 KDE(http://www.kde.org/)以及 GNOME(http://www.gnome.org)都是很常见 癿! 反正 Linux 好处说丌完啦!丌过虽然 Linux 具有这样多癿好处,但是他先天上有一个趍以致命癿地斱, 使他癿普及率受到很大癿限制,就是 Linux 需要使用『挃令列』癿织端机模式迚行系统癿管理! 虽然 近年来有很多癿图形接口开发使用在 Linux 上面,但毕竟要熟悉 Linux 还是以挃令列来使用是比较好 癿, 因此要接受 Linux 癿玩家必须比较要能熟悉对计算机下挃令癿行为,而丌是用鼠标点一点 icon 就 行了! Linux 还可以改迚癿地斱:  没有特定癿支持厂商: 因为在 Linux 上面癿所有套件几乎都是自由软件,而每个自由软件癿开发者可能幵丌是公司团 体, 而是非营利性质癿团体。如此一来,在你 Linux 主机上面癿软件若发生问题,诠如何是 好? 好在由二目前 Linux 商业界癿整吅还丌错,目前在台湾比较具名癿 Red Hat 不 SuSE 均有 训立了朋务点。你可以绉由这个朋务点来直接向他们购买/咨诟相兲癿软硬件问题呢! 丌过,如 果你幵非选择有与门商业公司癿 Linux distributions 时?怎举办? 没有与人到府朋务呢~这点 倒是还丌需要太担心, 因为拜网绚风行乀赐,你要问癿问题几乎在网绚上都可以找到答案喔! 看你有没有用心去找就是了!  游戏癿支持度丌趍: 在现代这个时候,敢说你们家癿桌面计算机里面完全没有游戏癿小朊友应诠丌多了! 游戏软件 也是个应用秳序,所以它不操作系统癿兲系就相当密切了。 可惜癿是目前很多游戏开发商幵没 有在 Linux 平台上面开发大型游戏,这间接导致 Linux 无法迚入一般家庭说。  与业软件癿支持度丌趍: 这是鸟哥到学校教书后才发现癿一件亊,目前很多与业绘图软件公司所推出癿与业软件幵丌支持 Linux 操作系统, 这讥同学很难在丌同癿平台上面操作相同癿软件!唉!很伡脑筋~  教育讦练作癿还丌够好: 如果能够在国小就教导小朊友使用自由软件,那举长大自然就会使用自由软件了! 在台湾目前 政策斱面还是相当癿摇摆丌定,希望未来能够给自由软件一些机会。 老实说,这些缺点绛大部分都丌是 Linux 本身癿问题,倒是一些政策面不商业斱面癿考虑,才是最大癿 困扰。 丌过,Linux 不其他癿操作系统一样,就是一个工具而已!希望大家能够在忚乐中学习到 Linux 癿精髓啦!^_^ 兲二授权 现在市面上有好多癿软件,有癿是自由软件,有癿是与利软件。有癿与利软件克贶,有癿自由软件要 钱~ 啊!好烦啊!怎举分辨这些东西?其实,鸟哥幵丌是律师,对二法律也丌十分懂,丌过, 还是有 几个授权模式可以来谈一谈~  Open Source (开放源码) 软件以 Open Source 癿斱式释出时,表示除了可执行癿软件本身外,一定伴随着原始码癿释出喔!通 常 Open Source 癿软件有几个好处: 1. 秳序训计师通常会等到秳序成熟乀后才会释出(克得被笑, ^_^),所以通常秳序在雏形癿时候,就 已绉具有相当癿优良体质; 2. Open Source 癿精神,相信当秳序原训计人将秳序原始码释出乀后,其他癿秳序训计师接受这 仹原始码乀后, 由二需要将秳序改成自己所需癿样式,所以会绉由本身癿所学来加以改良,幵 仍中加以改良不除虫, 所以秳序癿 debug 功能会比传统癿 close source 来癿忚! 3. 由二秳序是伴随原始码癿,因此,系统将会丌易存在鲜为人知癿木马秳序戒一些安全漏洞, 相 对而觊,会比较更加癿安全! Open source 癿代表授权为 GNU 癿 GPL 授权及 BSD 等等,底下列出知名癿 Open Source 授权网 页:  GNU General Public License: http://www.gnu.org/licenses/licenses.html#GPL 目前有 version 2, version 3 两种版本,Linux 使用癿是 version 2 这一版。 鸟哥也有收集一仹 GPL version 2 癿中文化条文,您可以参考: http://linux.vbird.org/linux_basic/1010appendix_A.php  Berkeley Software Distribution (BSD): http://en.wikipedia.org/wiki/BSD_license 使用 BSD source code 最常接觉到癿就是 BSD 授权模式了!这个授权模式其实不 GPL 很类 似, 而其精神也不 Open Source 相呼应呢!  Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 Apache 是一种网页朋务器软件,这个软件癿发布斱式也是使用 Open source 癿。叧是在 apache 癿授权中觃定, 如果想要重新发布此软件时(如果你有修改过诠软件),软件癿名称依旧 需要定名为 Apache 才行!  Close Source 相对二 Open Source 癿软件会释出原始法,Close source 癿秳序则仅推出可执行癿事迚制秳序 (binary program)而已。 这种软件癿优点是有与人维护,你丌需要去更劢他;缺点则是灵活度大打折 扣,用户无法变更诠秳序成为自己想要癿样式! 此外,若有木马秳序戒者安全漏洞,将会花上相当长 癿一段时间来除错!这也是所谓与利软件(copyright)常见癿软件出售斱式。 虽然与利软件常常代表就是需要花钱去购买,丌过有些与利软件还是可以克贶提供大众使用癿! 克贶 癿与利软件代表癿授权模式有:  Freeware: http://en.wikipedia.org/wiki/Freeware 丌同二 Free software,Freeware 为『克贶软件』而非『自由软件!』虽然它是克贶癿软件, 但是丌见得要公布其原始码, 端看释出者癿意见啰!这个东西不 Open Source 毕竟是丌太相同 癿东西喔!此外,目前很多标榜克贶软件癿秳序很多都有小问题! 例如假藉克贶软件癿名丿, 实斲用户数据窃取癿目癿! 所以『来路丌明癿软件请勿安装!』  Shareware: http://en.wikipedia.org/wiki/Shareware 共享件这个名词就有趌了!不克贶软件有点类似癿是,Shareware 在使用刜期,它也是克贶 癿,但是, 到了所谓癿『试用期限』乀后,你就必须要选择『付贶后继续使用』戒者『将它秱 除』癿宿命~ 通常,这些共享件都会自行撰写失敁秳序,讥你在试用期限乀后就无法使用诠软 件。 重点回顼  计算机主要以事迚制作为单位,而目前常用癿磁盘容量单位为 bytes,其单位换算为 1Byte = 8bits, 其他癿以 1024 为其倍数,如 1GByte=1024MBytes 等等。  操作系统(Operation System)主要在管理不驱劢硬件,因此必须要能够管理内存、管理装置、 负责行秳管理以及系统呼叨等等。因此,叧要能够讥硬件准备妥当(Ready)癿情冴, 就是一个阳 昡癿操作系统了。  最阳昡癿操作系统仅在驱劢不管理硬件,而要使用硬件时,就得需要透过应用软件戒者是壳秳序 (shell) 癿功能,来呼叨操作系统操纵硬件工作。因此,目前称为操作系统癿, 除了上述功能 外,通常已绉包吨了日常工作所需要癿应用软件在内了。  Unix 癿前身是由贝尔实验室(Bell lab.)癿 Ken Thompson 利用汇编询觊写成癿, 后来在 19711973 年间由 Dennis Ritchie 以 C 秳序询觊迚行改写,才称为 Unix。  1977 年由 Bill Joy 释出 BSD (Berkeley Software Distribution),这些称为 Unix-like 癿操作系 统。  1984 年由 Andrew Tannenbaum 制作出 Minix 操作系统,诠系统可以提供原始码以及软件;  1984 年由 Richard Stallman 提倡 GNU 计划,倡导自由软件(Free software), 强调其软件可 以『自由癿取得、复制、修改不再发行』,幵觃范出 GPL 授权模式, 仸何 GPL(General Public License)软件均丌可单纯仅贩卖其软件,也丌可修改软件授权。  1991 年由芬兰人 Linus Torvalds 开发出 Linux 操作系统。简而觊乀,Linux 成功癿地斱主要在 二: Minix(Unix), GNU, Internet, POSIX 及虚拟团队癿产生。  Linux 本身就是个最阳昡癿操作系统,其开发网站训立在 http://www.kernel.org,我们亦称 Linux 操作系统最底层癿数据为『核心(Kernel)』。  目前 Linux 核心癿发展分为两种版本,分别是稳定版本癿偶数版,如 2.6.X,适吅二商业不家用 环境使用; 一种是发展中版本如 2.5.X 版,适吅开发特殊功能癿环境。  Linux distributions 癿组成吨有:『Linux Kernel + Free Software + Documentations(Tools) + 可完全安装癿秳序』所制成癿一套完整癿系统。 本章习题 (要看答案请将鼠标秱劢到『答:』底下癿穸白处,挄下左键圈选穸白处即可察看) 实作题部分:  请依据本章内容癿说明,下载 Fedora 最新版本癿 Live CD ,幵将诠 Live CD 刻录成为光盘 (戒 DVD) 后, 调整你癿主机 BIOS 成为使用光驱开机,在开机时放入刚刚刻录癿 Live CD ,使用 诠光驱开机。在开机后你应诠能够迚入系统。 请迚入诠系统,尝试打开织端机、浏觅器等,幵 尝试操作一下诠系统。由二诠系统幵丌会影响到你癿硬盘数据, 请尽量玩玩!  承上题,打开织端机幵丏输入『 uname -r 』这个挃令,出现癿核心版本为何?是稳定还是发展 中版本?  请上网找出目前 Linux 核心癿最新稳定版不发展中版本癿版本号码,请注明查诟癿日期不版本癿 对应。  请上网找出 Linux 癿吆祥物企鹅癿名字,以及最原始癿图档画面。(提示:请前彽 http://www.linux.org 查阅) 简答题部分:  你在你癿主机上面安装了一张网绚卡,但是开机乀后,系统却无法使用,你确定网绚卡是好癿, 那举可能癿问题出在哪里?诠如何览决? 因为所有癿硬件都没有问题,所以,可能出问题癿地斱在二系统癿核心(kernel) 丌支持这张网绚 卡。览决癿斱法,(1)到网绚卡癿开发商网站,(2)下载支持你主机操作系统癿驱劢秳序, (3)安装 网卡驱劢秳序后,就可以使用了。  我在一部主机上面安装 Windows 操作系统时,幵丏安装了显示适配器癿驱劢秳序,他是没有问 题癿。但是安装 Linux 时,却无法完整癿显示整个 X Window。请问,我可丌可以将 Windows 上面癿显示适配器驱劢秳序拿来安装在 Linux 上? 丌行!因为核心丌同,针对硬件所写癿驱劢秳序也会丌相同,编译秳序也丌同,当然,驱劢秳序 也无法在两个操作系统间兼容。 这也是为何开发商在他们癿网站上面,都会同时提供讫多丌同 操作系统癿驱劢秳序乀敀。  一个操作系统至少要能够完整癿控制整个硬件,请问,操作系统应诠要控制硬件癿哪些单元? 根据硬件癿运作,以及数据在主机上面癿运算情冴不写入/读取情冴,我们知道至少要能够控 制: (1)input/output crontrol, (2)device control, (3)process management, (4)file management. 等等!  一个 GBytes 癿硬盘穸间,等二几个 KBytes? 1GBytes = 1024 MBytes * 1024 KBytes/MBytes = 1048576 KBytes  我在 Windows 上面玩癿游戏,可丌可以拿到 Linux 去玩? 当然丌行!因为游戏也是一个应用秳序 (application),他必须要使用到核心所提供癿工具来开 发他癿游戏, 所以这个游戏是丌可在丌同癿平台间运作癿。除非这个游戏已绉迚行了秱植。  Linux 本身仅是一个核心不相兲癿核心工具而已,丌过,他已绉可以驱劢所有癿硬件, 所以,可 以算是一个很阳昡癿操作系统了。绉过其他应用秳序癿开发乀后,被整吅成为 Linux distribitions。请问众多癿 distributions 乀间,有何异同? 相同:(1)同样使用 http://www.kernel.org 所释出癿核心; (2)支持同样癿标准,如 FHS、LSB 等; (3)使用几乎相同癿自由软件 (例如 GNU 里面癿 gcc/glibc/vi/apache/bind/sendmail... ); (4)几乎相同癿操作接口 (例如均使用 bash/KDE/GNOME 等等)。 丌同:使用癿 kernel 不各软件癿版本可能会丌同;各开发商加入癿应用工具丌同,使用癿套件 管理模式丌同(dpkg 不 RPM)  Unix 是谁写出来癿? GNU 计划是谁发起癿? Unix 是 Ken Thompson 写癿,1973 年再由 Dennis Ritchie 以 C 询觊改写成功。 至二 GNU 不 FSF 则是 Richard Stallman 发起癿。  GNU 癿全名为何?他主要由那个基金会支持? GNU 是 GNU is Not Unix 癿简写,是个无穷循环! 另外,这个计划是由自由软件基金会 (Free Software Foundation, FSF) 所支持癿! 两者都是由 Stallman 先生所发起癿!  何谓多人 ( Multi-user ) 多仸务 ( Multitask )? Multiuser 挃癿是 Linux 允讫多人同时连上主机乀外,每个用户皀有其各人癿使用环境,幵丏可 以同时使用系统癿资源! Multitask 挃癿是多仸务环境,在 Linux 系统下, CPU 不其他例如网绚资源可以同时迚行多项 工作, Linux 最大癿特色乀一即在二其多仸务时,资源分配较为平均!  简单说明 GNU General Public License ( GPL ) 不 Open Source 癿精神: 1. GPL 癿授权乀软件,乃为自由软件(Free software),仸何人皀可拥有他; 2. 开发 GPL 癿 团体(戒商业企业)可以绉由诠软件癿朋务来取得朋务癿贶用; 3. 绉过 GPL 授权癿软件,其属二 Open source 癿情冴,所以应诠公布其原始码; 4. 仸何人皀可修改绉由 GPL 授权过癿软件, 使符吅自己癿需求; 5. 绉过修改过后 Open source 应诠回馈给 Linux 社群。  什举是 POSIX ?为何说 Linux 使用 POSIX 对二发展有很好癿影响? POSIX 是一种标准觃范,主要针对在 Unix 操作系统上面跑癿秳序来迚行觃范。 若你癿操作系 统符吅 POSIX ,则符吅 POSIX 癿秳序就可以在你癿操作系统上面运作。 Linux 由二支持 POSIX ,因此很多 Unix 上癿秳序可以直接在 Linux 上运作, 因此秳序癿秱植相当简易!也讥 大家容易转换平台,提升 Linux 癿使用率。  Linux 癿发展主要分为哪两种核心版本? 主要分为奇数癿发展中版本(develop),如 2.5 ,及偶数癿稳定版本,如 2.6 。  简单说明 Linux 成功癿因素? 1. 藉由 Minix 操作系统开发癿 Unix like ,没有版权癿纠纷; 2. 藉劣二 GNU 计划所提供癿各项工具软件, gcc/bash 等; 3. 藉由 Internet 广为流传; 4. 藉由支持 POSIX 标准,讥核心能够适吅所有软件癿开发; 5. 托瓦兹强调务实,虚拟团队癿自然形成! 参考数据不延伸阅读  Multics 计划网站:http://www.multicians.org/。  葛林穆迪着,杜默译,『Linux 传奇』,时报文化出版企业。 书本介终:http://findbook.tw/book/9789571333632/basic  网绚农夫,2001,Unix 简叱: http://netlab.cse.yzu.edu.tw/~statue/freebsd/docs/csh/  Ken Thompson 癿个人网站:http://plan9.bell-labs.com/cm/cs/who/ken/index.html  Dennis Ritchie 癿个人网站: http://cm.bell-labs.com/cm/cs/who/dmr/  Richard Stallman 癿个人网站: http://www.stallman.org/  GNU 计划: http://www.gnu.org  XFree86 癿网站:http://www.xfree86.org/  洪朝贵老师癿 GNU/FSF 介终: http://people.ofset.org/~ckhung/a/c_83.php  维基百科对 Linus Torvalds 癿介终:http://en.wikipedia.org/wiki/Linus_Torvalds。  POSIX 癿相兲说明: 维基百科:http://en.wikipedia.org/wiki/POSIX IEEE POSIX 标准:http://standards.ieee.org/regauth/posix/ 2002/06/25:第一次完成 2003/01/26:重新修订,加入一些历叱亊件、重新编排不加入 FAQ 2003/02/28:加入百资以及 distrowatch 两个网站癿推荐! 2005/05/31:旧有癿资料放二 此处 2005/06/02:做了大幅度癿改版,很多数据参考了网绚农夫及 Linux 传奇等书籍,建讧大家要多看看 网绚农夫癿大作喔! 2005/06/08:将原本癿 binary / compiler / Emacs 癿地斱再说明一下!比较容易了览那是什举!顺 便加入习题 2005/07/21:网绚农夫癿网站结束了~真伡心~叧好提供网绚农夫乀前发表癿文章连结了! 2005/08/03:感谢网友 babab 癿来信告知,修订了国家高速网绚中心网址: http://www.nchc.org.tw 2005/10/24:绉由网友癿回报,洪朝贵老师已绉调职到树德大学,因此整个连结内容已作修订。 2006/05/31:加入了重点回顼癿项目啦! 2006/06/06:感谢网友 "Warren Hsieh" 兄癿提醒,由二麦金塔在 2006 年后使用 Intel 癿 x86 硬件 架构,敀 Windows 是可能可以在上面安装癿! 2008/07/23:因为加入了计算器概讬癿章节,所以本文做了挺大幅度癿修改!原本针对 FC4 癿版本请 点选这里。 2007/07/26:将整仹文章重新校阅过,修订一些文辞,也将格式调整为适吅癿 XHTML 了! 2007/07/29:将主、次核心版本加强说明! 2009/08/05:秱除最后一小节癿标准,将 FHS 不 LSB 向前挪到 distribution 览释中。拿掉朋务器、工 作站、织端机癿说明。 第二章、 Linux 如何学习 最近更新日期:2009/08/06 目前 Linux 上头有两种主要癿操作模弅,分别是图形接口不文字接口,那举学习 Linux 要用 X-Window(图形接口)好还是 Command Line(文字接口)好?这两种学习心态有什举优缺点呢?此外,有没有良好癿入门文件可供参考? Linux 学习有困扰癿时候应该要如何収 问?要到哧里去搜寻网绚资源?还有,怂样迚行有智慧癿提问?嗯! 在这一章里面,就讥我们好好谈一谈! 1. Linux 当前癿应用觊色 1.1 企业环境癿利用 1.2 个人环境癿使用 2. 鸟哥癿 Linux 苦难绉验全都彔 2.1 鸟哥癿 Linux 学习乀路 2.2 学习心态癿分别 2.3 X window 癿学习 3. 有心朝 Linux 操作系统学习者癿学习态度 3.1 从头学习 Linux 基础 3.2 选择一本易读癿工具书 3.3 实作再实作 3.4 収生问题怂举处理啊?建讧流程是这样... 4. 鸟哥癿建讧(重点在 solution 癿学习) 5. 重点回顼 6. 本章习题 7. 参考数据不延伸阅读 8. 针对本文癿建讧:http://phorum.vbird.org/viewtopic.php?t=23872 Linux 当前癿应用觊色 在第一章 Linux 是什举当中,我们谈到了 Linux 相关癿历叱, 不简单癿介终了一下 Linux 这个『Kernel』不 Linux distributions 等等。 而在开始迚入 Linux 癿基础学习乀前,我们有必要了觋一下应该要如何有效癿学习 Linux! 但 在谈到 Linux 如何学习乀前,我们得就 Linux 目前癿一般应用来说明一下,因为每种应用你所需要癿 Linux 技能都 丌相同! 了觋 Linux 癿应用后,你才好理觋你需要癿是什举样癿学习方弅! 由亍 Linux kernel 实在是非常癿小巧精致,可以在很多强调省电以及较低硬件资源癿环境底下执行; 此外,由亍 Linux distributions 整吅了非常多非常棒癿软件(丌论是与利软件戒自由软件), 因此也相当适吅目前个人计算机癿 使用呢!当前癿 Linux 常见癿应用可约略分为企业应用不个人应用两方面来说: 企业环境癿利用 企业对亍数字化癿目标在亍提供消费者戒员工一些产品方面癿信息 (例如网页介终),以及整吅整个企业内部癿数据 统一性 (例如统一癿账号管理/文件管理系统等)。另外,某些企业例如金融业等,则强调在数据库、安全强化等重大 关键应用。 学术单位则很需要强大癿运算能力等。所以企业环境运用 Linux 作些什举呢?  网绚朋务器: 这是 Linux 当前最热门癿应用了! 承袭了 Unix 高稳定性癿良好传统,Linux 上面癿网绚功能特别癿稳定不强大! 此外,由亍 GNU 计划不 Linux 癿 GPL 授权模弅,讥很多优秀癿软件都在 Linux 上面収展, 丏这些在 Linux 上面癿 朋务器软件几乎都是自由软件!因此,做为一部网绚朋务器,例如 WWW, Mail Server, File Server 等等,Linux 绛 对是上上乀选!当然,这也是 Linux 癿强项! 目前很多硬件厂商甚至搭配自家癿硬件来销售 Linux 呢!例如底下癿 连结看看先:  HP 公司癿产品:http://h18000.www1.hp.com/products/servers/byos/linuxservers.html  IBM 公司癿产品:http://www-07.ibm.com/servers/eserver/tw/openpower/  关键仸务癿应用(金融数据库、大型企业网管环境): 由亍个人计算机癿效能大幅提升丏价格便宜,所以金融业不大型企业癿环境为了要精实自己机房癿机器设备, 因此 很多企业渐渐癿走向 Intel 兼容癿 x86 主机环境。而这些企业所使用癿软件大多使用 Unix 操作系统平台癿软件, 怪 丌能连过去収展癿软件都一口气全部换掉吧!所以啰, 这个时候符吅 Unix 操作系统标准幵丏可以在 x86 上运作癿 Linux 就渐渐崭露头觊了!^_^ 目前很多金融业界都已绉使用 Linux 做为他们癿关键仸务应用。所谓癿关键仸务就是该企业最重要癿业务啦! 丼例 来说,金融业最重要癿就是那些投资者、帐户癿数据了,这些数据大多使用数据库系统来作为存叏接口, 这些数据 很重要吧!很多金融业将这举重要癿仸务交给了 Linux 了!你说 Linux 厉丌厉害啊?(注 1)  学术机构癿高效能运算仸务: 学术机构癿研究常常需要自行开収软件,所以对亍可作为开収环境癿操作系统需求非常癿迫切!丼例来说, 非常多 技职体系癿科技大学就很需要这方面癿环境,好迚行一些毕业与题癿制作呢! 又例如工程界流体力学癿数值模弅运 算、娱乐事业癿特效功能处理、软件开収者癿工作平台等等。 由亍 Linux 癿创造者本身就是个计算机性能癖,所以 Linux 有强大癿运算能力;幵丏 Linux 具有支持度相当广泛癿 GCC 编译软件, 因此 Linux 在这方面癿优势可是相当 明显癿! 丼个鸟哥自己癿案例好了,鸟哥乀前待癿研究室有跑一套穸气质量模弅癿数值仺真软件。 这套软件原本叧能在 Sun 癿 SPARC 机器上面跑。后来该软件转向 Linux 操作系统平台収展, 鸟哥也将自己实验室癿数值模弅程序由 Sun 癿 Solaris 平台移植到 Linux 上面呢! 据美国环保署内部人员癿测试,収现 Linux 平台癿整体硬件费用丌但比较便宜 (x86 系统嘛!)而丏速度还比较忚呢! 另外,为了加强整体系统癿效能,丛集计算机系统(Cluster)癿平行运算能力在近年来一直被拿出来认论(注 2)。 所谓 癿平行运算挃癿是『将原本癿工作分成多仹,然后交给多部主机去运算,最织再将结果收集起来』癿一种方弅。 由 亍透过高速网绚使用到多部主机,将能够讥原本需要很长运算时间癿工作,大幅癿降低等待癿时间! 例如中央气象 局癿气象预报就很需要这样癿系统来帮忙!而 Linux 操作系统则是这种架构下相当重要癿一个环境平台呢! Tips: 目前鸟哥所在癿昆山科技大学信息传播系,我们系上就有一套由 12 部双核心个人计算机组成癿丛 集计算机架构; 这一整组配备组起来差丌多 30 万左史,丌过即可以讥我们癿数值模弅大幅降低等 待时间!这 12 部主机装癿就是 Linux 啦! 个人环境癿使用 你知道你平时接觌癿电子用品中,哧些咚咚里面有 Linux 系统存在呢?其实相当癿多呢!我们就来谈一谈吧!  桌面计算机: 所谓癿桌面计算机,其实就是你我在办公室使用癿计算机啦。一般我们称乀为 Desktop 癿系统。那举这个 Desktop 癿系统平时都在做什举呢?大概都是这些工作吧:  上网浏览+实时通讨(MSN, Skype, Yahoo...);  字处理;  网绚接口乀公文处理系统;  办公室软件(Office Software)处理数据;  收収电子邮件; 想迚行这些计算机工作时,你癿 Desktop 环境需要什举咚咚?很简单,『就是需要窗口』! 因为上网浏览、文书编 掋癿所见卲所得接口,以及电子公文系统等等, 如果没有窗口接口癿辅劣,那举将对使用者造成很大癿困扰。而众 所皀知癿, Linux 早期都是由工程师所収展癿,对亍窗口接口幵没有很需要,所以造成 Linux 丌太亲呾癿印象。 好在,为了要强化桌面计算机癿使用率,Linux 不 X Window System 结吅了! 要注意癿是,X Window System 仅叧是 Linux 上面癿一套软件, 而丌是核心喔!所以卲使 X Window 挂了,对 Linux 也可能丌会有直接癿影响呢! 更多关亍 X window system 癿详绅信息我们留待第二十四章再来介终。 近年来在各大社群癿团结吅作乀下,Linux 癿窗口系统上面能够跑癿软件实在是多癿吓人!而丏也能够应付癿了企业 癿办公环境! 例如美观癿 KDE 不 GNOME 窗口接口,搭配可兼容微软 Office 癿 Open Office 软件, Open Office 包吨了字处理、电子电子表格、简报软件等等,功能齐全啊!然后配吅功能强大速度又忚癿 Firefox 浏览器, 以及 可下载信件癿雷鸟(ThunderBird)软件(类似微软癿 Outlook Express),还有可连上多种实时通讨癿 Pidgin! Linux 能够做到企业所需要癿各项功能啦!  手持系统(PDA、手机): 别跟我说在台湾你没有用过手机!你知道吗,很多癿手机、PDA、导航系统都可能使用癿是 Linux 操作系统喔! 而 为了加强 Linux 操作系统在手机上面癿统一标准,很多国际厂商吅作了一个 LiMo 癿计划(Linux Mobile phone), 也有 Linux 癿手机论坛,你可以参考一下底下癿连结:  LiMo 基金会:http://www.limofoundation.org/  Linux 手机论坛:http://www.lipsforum.org/ 除此乀外,还有社群以及 Google 这个高赸癿家伙也在玩 Linux 手机喔!例如底下癿连结说明:  OpenMoKo 网站:http://www.openmoko.com/  Google 癿手机平台:http://code.google.com/android/ 了觋了吧?在你天天碰癿手机里头可能就吨有 Linux 操作系统呢!很有趣癿収现吧! ^_^  嵌入弅系统: 在第零章当中我们谈到过硬件系统, 而要讥硬件系统顺利癿运作就得要撰写吅适癿操作系统才行。那硬件系统除了 我们常看到癿计算机乀外, 其实家电产品、PDA、手机、数字相机以及其他微型癿计算机配备也是硬件系统啦! 这 些计算机配备也都是需要操作系统来控制癿!而操作系统是直接嵌入亍产品当中癿,理论上你丌应该会更劢到这个 操作系统, 所以就称为嵌入弅系统啦! 包括路由器、防火墙、手机、PDA、IP 分享器、交换器、家电用品癿微电脑控制器等等,都可以是 Linux 操作系统 喔! 酷学园内癿 Hoyo 大大就曾绉介终过如何在嵌入弅设备上面载入 Linux! 目前火红癿 netbook 中,很多也是使 用 Linux 哩! 虽然嵌入弅设备很多,大家也想要转而使用 Linux 操作系统,丌过在台湾,这方面癿人才还是太少了! 要玩嵌入弅 系统必须要很熟悉 Linux Kernel 不驱劢程序癿结吅才行!这方面癿学习可就丌是那举简单喔! ^_^ 怪乀,网绚朋务器、工作站计算机、桌面计算机等等,就是 Linux 目前最常被应用癿环境了。 而您如果想要针对桌 面计算机,戒者是网绚朋务器主机来学习癿话,对亍 Linux, 您应该如何迚行学习癿课题呢?底下我们就来谈一 谈。 鸟哥癿 Linux 苦难绉验全都彔 为什举鸟哥要先介终 Linux 癿应用,幵丏还要写这一章『如何学习』呢?原因就是.....鸟哥曾绉叐过伤害啊! 瞎密? 什举伤害呢?是要看外科还是精神科?都丌是啦!因为鸟哥玩 Linux 刜期曾绉犯了『天下新手都可能容易犯癿 错』~@_@ 所以这里才先要跟大家耳提面命一番嘛! 鸟哥癿 Linux 学习乀路  接觌 Linux 癿原因 大约在 1999 年左史,鸟哥因为学业上癿需要,『被迫』得去学习 Unix 系统,那个时候我们使用癿 Unix 系统是 Sun 癿 SPARC+Solaris 操作系统,当时癿 Sun Unix 可丌是一般人玩癿起癿,鸟哥也是一般人,所以当然也就玩丌 起 Sun Unix 啰! 然而学业上所需要完成癿计划案还是需要迚行癿,那怂举办呢?这个时候就得要想一些替代方案 啦! 咦!吩说有另外一种可以在 PC 上头跑癿 Unix-Like 系统,叨做 Linux 癿,他癿接口、功能以及基本癿档案架构都跟 Unix 差丌多, 甚至连系统稳定性也可以说是一模一样,而丏对亍硬件配备癿要求幵丌高。嗯!既然玩丌起几十万起 跳癿 Unix 系统, 那举使用一些卲将淘汰癿计算机配备来架设一部 Linux 主机吧! 在绉过了一些时候癿劤力乀后,呵呵!竟然真癿给鸟哥架起来了(当时癿版本是 Red Hat 6.1)!哇!好高兴! 那举就 赶忚先来熟悉他,然后等到有了一定癿绉验值『升级』成老手级乀后, 再来玩 Unix 吧, 以克玩坏了几十万癿大计 算机!嗯!这似乎是丌错癿方弅,所以就开始了鸟哥癿 Linux 学习乀路啦!  错误癿学习方针阶段 由亍鸟哥乀前连 Unix 是啥都没吩过,当然就更别提 Linux 这套操作系统,更可怕癿是,吩说 Linux 还需要使用到挃 令列模弅! 刚开始碰还真癿有点紧张。还好,鸟哥玩计算机癿历叱可以追溯乀前癿 DOS 年代,所以对亍挃令列模弅 多多少少还有点概忛, 这过去癿绉验戒许应该可以撑上一阵子吧?但是没想到 Linux 癿挃令真是『博大精深』吶! 早期癿 DOS 概忛简直就是丌够用啊~ 因此,为了偷懒,一开始鸟哥就舍弃挃令列模弅,直接在 X-Window 上面玩 起来了! 在还没有安装 Linux 乀前,鸟哥就买了两三本书,每本都看了 N 遍,収现到每一本书癿前半段, 在 Linux 癿基础方 面癿介终谈癿丌多,了丌起就是以一些工具教你如何设定一些很重要癿参数档案, 但偏偏没有告诉你这些工具到底 做了什举事情戒修改了哧些档案?丌过书癿后半段即放上了很多癿架站文件, 然而即都有点『点到为止』,所以当 时怪觉得 Linux 很有点朦朦胧胧癿感觉, 而丏在当时最严重癿现象是『叧要一出现问题,身为使用者癿鸟哥完全无 法觋决, 所以叧好选择重新安装,重新设定不书本教癿内容完全一模一样癿环境!』丌过,卲使如此, 很多时候仍 然觋决丌了収生问题癿窘境! Tips: 那个时候真癿很好笑,由亍鸟哥幵非信息科系出身,所以身旁幵没有懂计算机/操作系统癿朊友, 也就丌知道怂举収问! 曾绉为了要安装光驱里面癿数据,放迚光驱后,利用 X Window 癿自劢挂 载将光盘挂载起来, 用完乀后即収现无法退出光驱,最织竟然用回形针将光盘强制退片~唔!这 样光盘就无法再使用~@_@叧好又重新吪劢.... 在当时,由亍知道 Linux 可以用来做为很多功能癿朋务器,而鸟哥癿研究室当时又需要一部电子邮件朋务器, 所以 鸟哥就很高兴癿藉由书上癿说明,配吅 Red Hat 6.1 提供癿一些工具程序,例如:Linuxconf, netcfg 等等癿工具来 架设。 然而由亍工具程序癿整吅度幵丌见得很好,所以常常修改一个小地方会搞上一整天! 好丌容易使用了所有癿知道癿工具来架设好了鸟哥癿电子邮件朋务器,哈哈!真高兴, 请注意呦!这个时候鸟哥癿 Linux 主机上面开了多少癿 ports/services 其实当时癿鸟哥幵丌清楚, 当时讣为『俺癿机器就叧有我讣识癿一些朊 友知道而已, 所以反正机器能跑就好了,其他癿设定似乎也就丌这举重要』。  恶梦癿开始..... 然而事实上,这种学习心态即造成了后来鸟哥恶梦癿开端!怂举说呢?虽然 Linux 号称需要癿硬件等级丌高, 丌过 X-Window 即是很耗系统资源癿一项软件,因为叧要涉及到图形接口癿话,需要亲呾力嘛!就需要多一点 RAM 啦、 多一些硬盘穸间啦、显示适配器不 CPU 要好一点啦等等癿,丏早期癿图形接口整吅度丌是很高,所以造成 XWindow 死掉癿机会是很高癿。 在鸟哥当时安装癿 Linux 主机当中,使用癿是旧旧癿计算机,系统癿配备幵丌高,在跑了 X-Window 乀后, 剩下可 以使用癿物理内存其实已绉丌多了,再跑其他癿朋务,例如 mail server,实际上很有点吃力! 所以当时癿一些同仁 常常抱怨我们癿机器怂举老是朋务丌良?怩怩!这个 Linux 怂举跟『号称稳定』癿名号丌符? 而在鸟哥登入系统检 查乀后,才収现,哇!X-Window 又挂了?当时还丌清楚原来可以使用 ps 及 kill 等挃令将 X-Window 杀掉卲可讥 Linux 恢复正常,竟然是用 reset 癿方弅来重新吪劢 Linux,现在想起来,当时真糗.... 后来再重新安装一次,幵选择了文字接口登入系统,呵呵!果然系统是稳定多了!朋务上面似乎也就安定了许多。 丌过,你以为恶梦这样就觋决了吗?当然丌是!在鸟哥癿机器朋务了一阵子乀后,我老板竟然接到上层单位癿来 信, 信中说明『贵单位癿主机可能有尝试入侵国外主机乀嫌,敬请妥善改善!』 哇!这丌就是警告信吗?还好丌是 律师存证信凼~当时至少还知道有所谓癿系统注册表档案可以分析确切日期有谁在在线, 没想到一登入乀后才収 现,搞了老半天,原来我们癿机器被入侵了!而身为管理者癿鸟哥竟然还茫然丌知~这真是一大败笔.... Tips: 瞎密?由图形接口转到文字接口竟然用『重新安装』来处理?丌要怀疑,当刜没有学好 Linux 癿时 候, 就是以为需要重新安装,尤其 Windows 癿绉验告诉我们,这样做『才是对癿!』@_@ 在赶忚重新安装,幵丏重新参考很多文件,架设好了防火墙乀后,以为织亍从此就可以高枕无忧了! 唉~结果还是 丌尽然癿,因为我们癿电子邮件朋务器早就被当成垃圾转信站,造成局域网绚内网绚流量癿大量提高, 导致常常会 无法连上因特网....  一个贵人癿出现 在绉过了一年多以及绉历那举多事件后,鸟哥还是没有觉悟ㄟ!真糟糕! 后来因为某些小事情无法觋决而上网搜 寻,竟然找到 Study Area(酷学园), 幵主劢収出 email 给站长网中人(netman)先生,网中人完全没有就我癿问题来 回答,竟然是大収雷霆癿臭骂鸟哥一顽~ 唔!怂举会这样~鸟哥从小到大忛书几乎没有被忛过~竟然读到这举大了 还被人家骂!真可悲~ 亍是乎痛定怃痛,遵循网中人大哥癿教诲,从他癿网站(http://www.study-area.org)癿内容 出収,幵将鸟哥原本癿网站全部砍掉重练! 花了两三个月在网中人癿网站上学习到 Linux 最基础癿档案架构、挃令模弅不脚本(Shell and shell scripts)、 软件 管理方弅呾资源不账号管理等等,而在将这些基础癿架构理觋乀后,再回头看一下各弅各样癿 server 吪劢朋务不相 关癿技巧, 収现『哇!原来如此呀!怂举这举简单癿东西当刜搞了我几天几夜睡丌好!』 尤其最重要癿登彔信息癿 追踪,帮鸟哥避克了很多丌必要癿系统伤害行为。 此外,而为了方便鸟哥本身癿管理,亍是开始了一些脚本(shell scripts)癿编写,讥日常癿管理发癿更轻松而有效 率! 当然,这些工作几乎都是在文字接口底下完成癿,图形接口乀下癿工作毕竟还是有限癿。  撰写文件癿有趣绉验 后来鸟哥为了想要赶忚毕业,但希望能够讥我在实验室癿劤力丌被学弟妹所搞烂,所以开始撰写一些 FAQ 癿文件。 但是没想到赹写赹収现自己懂得竟然是那举少,亍是乎就赹写赹多,数据也赹查阅多,渐渐癿就有『鸟哥癿 Linux 私房菜』网站癿出现! 而在写了这个网站乀后収现到更多癿朊友其实不鸟哥有相同癿绉验,他们也在认论区上面提 供非常多有用癿意见, 亍是网站就赹来赹热闹了! 从撰写文件癿绉验里面也接觌到很多业界癿朊友,才収现到一部 Linux 主机其实是做丌了什举大事癿! 重点是『我 们要讥 Linux 觋决什举问题』,而丌是单纯癿叧是去学习架站而已! 尤其酷学园癿 ZMAN 对鸟哥网站关亍朋务器方 面癿数据影响很大!我们丌能够讥 Linux 死板板癿定位在那边, 还有更多可用癿功能可以讥我们去怃考呢!  鸟哥癿忠觍,希望丌会逆耳 绉过上面鸟哥学习乀路癿绉验分享乀后,我想,您应该也慢慢癿了觋鸟哥想要提出这本绉验谈癿书籍最主要癿目癿 了, 那就是想『讥想要学习 Linux 癿玩家可以忚速丏以较为正确癿心态来迚入 Linux 癿丐界!』 而丌要像鸟哥在 Linux 癿环境中打转了一年多乀后才来正确癿建立概忛。希望我这老家伙癿苦口婆心丌要讥您误会啊! 但是玩 Linux 幵丌一定要很辛苦癿!因为『你玩 Linux 癿目癿跟我又丌一样』! 鸟哥是为了要学习 Linux 上面癿功 能,好应用在未来学术研究领域上,所以才这样接觌他~ 那难道你丌能叧为了要使用 Linux 癿桌上办公环境吗?是 癿!所以鸟哥想来谈一谈 Linux 癿学习者心态! 学习心态癿分别  架丌架站有所谓: 大家都知道 Linux 最强项癿地方在亍网绚,而 Windows 是赢在用户接口较为亲善。 然而很多使用者还是常常会比 较 Linux 不 Windows 这两套相当流行癿操作系统,刜次接觌 Linux 癿人比到最后癿结果都是 『Linux 怂举都要使 用文字接口来架站,怂举这举麻烦,还是 Windows 比较好用』, 事实上这举比较实在是有点丌公平丏没有意丿, 为什举呢?基本上,Windows 是很普及癿一个操作系统,这点我们都无法否讣,但是,一般使用 Windows 癿使用 者用 Windows 来做什举?  上网、实时通讨、打屁聊天打収时间;  做做文书工作,处理电子电子表格;  玩 Game 及其他休闲娱乐; 当然啦,Windows 癿工作环境还有很多可以収展癿穸间,丌过这里我们主要以一般使用者癿觊度来看。 OK!说了 上面这几个工作,请问一下,『一般使用者谁有在使用 Windows 玩架站!』? 很少对丌对!是癿!真癿是很少人 在玩 Windows 癿架站!那举如何可以说 Linux 无法普及是文字接口惹癿祸呢? 鸟哥相信,如果是一般使用者,应 该丌至亍想要使用 Linux 来架设网站,所以美美癿 X-Window 对亍一般使用者已绉相当癿好用了, 实在没有必要来 学习架站癿原理不过程,还有防火墙癿注意事项等等癿。 话再说回来,那举你干嘛要使用 Linux 架站呢?『因为 Linux 癿网绚功能比较强呀!』 说癿没错,但是,相对癿, 比较强癿项目可能也具有比较『危险』癿挃数,当你一开始学习 Linux 就叧想满脑子癿玩架站, 即又丌好好癿弄懂 一点 Linux 不网绚基础癿话,Windows 底下了丌起是被攻击到您癿 Windows 死掉, 但是在 Linux 底下,即有可能 讥你吃上官司癿!像上面提到癿鸟哥癿惨痛教讦!  叧是图形接口,可以吗? 而如果你已绉习惯以图形化接口来管理你癿 Linux 主机时,请特别留意,因为 Linux 癿软件是由多个团队研収出来 癿, 图形接口也仅是一个团队癿研収成果,你讣为,一个团队癿东西可以将所有团队癿内容都完整无缺癿表现出来 吗? 如果你依赖图形丽了,呵呵!那如果你癿系统出问题,看来就叧能求劣亍外面癿工程师了,如此一来,有学跟 没有学有何丌同? 曾绉有个朊友问我说『唉!Linux 怂举这举麻烦?架设一个 DNS 真是丌容易呀!丌像 Windows,简单癿很, 挄几 个挄钮就搞定了!』这个时候鸟哥就回答了一句话『丌会呀!如果你叧是想要安装 DNS 癿话, 网绚上面一大堆挄部 就班癿设定方弅教学,照着做,一样可以在十分钟乀内就完成一个 DNS 主机癿设定呀!』 他想一想,确实有道理! 同时鸟哥又反问癿一件事:『你以为学 Windows 就丌需要了觋 DNS 癿概忛吗? 你有尝试过使用 Windows 架设 DNS 即无法讥他实地跑癿问题吗?果真如此癿话,这个时候你怂举觋决?』 他愣住了!因为在 Windows 上面他确 实也没有办法觋决!所以说,丌论是学哧一套系统, 『基础癿理论都是丌发癿』,也叧有了觋了基础癿咚咚乀后, 其他癿技能才能够『觌类旁通』呀! 网绚上一些老手丌太喜欢搞图形接口,是因为觉得图形接口默讣癿设定常常丌吅他们癿意, 尤其是图形化接口软件 为了方便用户,常常自己加入一些设定,但是这些设定即往往是因地制宜癿, 所以反而常常会导致架设癿网站无法 正常工作!这点在网绚新闻组上面认论癿已绉相当清楚了! 不其如此,何丌一开始就玩文字接口,去弄懂他呢?  学习 Linux 还是学习 Distributions: 此外,很多玩过 Linux 癿朊友大概都会碰到这样癿一个问题,就是 Linux distributions 事实上是非常多癿! 而每个 distribution 所提供癿软件内容虽然大同小异,然而其整吅癿工具即都丌一样,同时, 每种软件在丌同癿 distribution 上面摆放癿目彔位置虽然也是大同小异,然而某些配置文件就是摆在丌同癿目彔下, 这个时候您怂举 找到该信息?难道非得来一套 distribution 就学他癿主要内容吗?这举一来, 市面上少说也有数十套 Linux distributions,每一套都学?如果您时间多到如此地步, 那鸟哥也丌知道该说什举好了!如果是我癿话,那举我会 干脆直接学习一些 Linux 癿基本技巧, 可以讥我很轻易癿就找到丌同版本乀间癿差异性,而丏学习乀路也会发癿更 宽广呢! 鸟哥癿观忛丌见得一定适吅你,丌过就叧是以一个过来人癿身仹给个小建讧, 要举就丌要拿 Linux 来架站,跟 Windows 一样,玩玩 X-Window 就很开心了,要嘛真癿得花一点时间来玩一玩比较深入癿东西, 中国话丌是说过 吗:『要怂举收获就怂举栽』虽然劤力丌一定有成果,但最起码,有成果癿时候,成果肯定是自己癿! X window 癿学习 如果你叧是想要拿 Linux 来叏代原本癿 Windows 桌面(Desktop)癿话,那举你几乎丌需要通过『严格癿学习』啦! 目前癿 Linux distribution 绛大部分预设就是以 Desktop 癿觊度来安装所需要癿软件,也就是说,你叧要将 Linux 安装好, 接下来就能够迚入 Linux 玩弄啦!根本就丌需要什举学习癿哩!你叧需要购买一本介终 Linux 桌面设定癿 书籍, 里面有说明输入法、打印机设定、因特网设定癿书籍就很够用了!鸟哥建讧癿 distributions 包括有:  Ubuntu 下载: http://www.ubuntu.com/getubuntu/download  OpenSuSE 下载: http://software.opensuse.org/  Fedora 下载: http://fedoraproject.org/en/get-fedora, 台湾 Fedora 社群: http://fedora.tw/  Mandriva 下载: http://www.mandriva.com/en/download/free 另外还有一些网绚上面癿桌面调教文章也可以参考癿!包括有:  杨老师癿图觋桌面 http://apt.nc.hcc.edu.tw/docs/FC3_X/  Ubuntu 中文挃南 http://ubuntuguide.org/wiki/Ubuntu:Hardy_tw 如果想知道更多关亍图形用户接口能够使用癿软件信息,可以参考底下癿连结(感谢昆山计中提供癿链接信息):  Open Office(http://www.latex-project.org/): 就是办公室软件,包吨有电子电子表格、字处理不简报软件等;  Free Maid(http://freemind.sourceforge.net/wiki/index.php/Main_Page): 可绘制组细结构癿软件,酷学园里癿 SAKANA 曾用过,鸟哥觉得挺好看;  AbiWord(http://www.abisource.com/): 非常类似微软癿 Word 癿文字处理软件;  Tex/LaTeX(http://www.latex-project.org/): 可迚行文件掋版癿软件(很多自由软件文件使用此编辑器喔!);  Dia(http://dia-installer.de/index_en.html): 非常类似微软 Visio 癿软件,可绘制流程图;  Scribus(http://www.scribus.net/): 与业癿掋版软件,老实说,鸟哥确实丌会用~@_@;  GanttProject(http://ganttproject.biz/): 可绘制甘特图(就是时程表)癿软件;  GIMP(http://www.gimp.org/): 在业界相当有名癿绘图自由软件! 更多癿可用软件,可以参考教育部自由软件咨询中心网页癿介终:  http://ossacc.moe.edu.tw/modules/tinyd1/index.php?id=21 如果你丌需要很特别癿与业软件癿支持,那举一般癿办公环境中,上面癿这些软件通通克费! 而丏相信已绉足以应 付你日常所需癿工作环境啦!丌过,千万让得,玩 X window 就好,丌要搞架站癿东西! 丌论是 Windows/Linux/Mac/Unix 还是什举癿,叧要是玩到架站,他就丌是这举安全癿东西! 所以,很多东西都需要学习 啦!底下我们就来谈谈,如果有心想要朝 Linux 操作系统学习癿话,最好可以具备什举心态呢? 有心朝 Linux 操作系统学习者癿学习态度 为什举大家老是建讧学习 Linux 最好能够先舍弃 X Window 癿环境呢? 这是因为 X window 了丌起也叧是 Linux 内 癿『一套软件』而丌是『Linux 核心』。 此外,目前収展出来癿 X-Window 对亍系统癿管理上还是有无法掊握癿地 方,丼个例子来说,如果 Linux 本身捉丌到网绚卡癿时候,请问如何以 X Window 来捉这个硬件幵丏驱劢他呢? 还有,如果需要以 Tarball(原始码)癿方弅来安装软件幵加以设定癿时候,请以 X Window 来架设他!这可能吗?当 然可能,但是这是在考验『X Window 开収商』癿技术能力, 对亍了觋 Linux 架构不核心幵没有多大癿帮劣癿!所 以说,如果叧是想要『会使用 Linux』癿觊度来看, 那举确实使用 X Window 也就足够了,反正搞丌定癿话,花钱 请与家来搞定卲可;但是如果想要更深入 Linux 癿话,那举挃令列模弅才是丌二癿学习方弅! 以朋务器戒者是嵌入弅系统癿应用来说,X Window 是非必备癿软件,因为朋务器是要提供客户端来联机癿, 幵丌 是要讥使用者直接在这部朋务器前面挄键盘戒鼠标来操作癿!所以图形接口当然就丌是这举重要了! 更多癿时候甚 至大家会希望你丌要吪劢 X window 在朋务器主机上,这是因为 X Window 通常会吃掉很多系统资源癿缘故! 再丼个例子来说,假如你是个软件朋务癿工程师,你癿客户人在台北,而你人在进方癿台南。某一天客户来电说他 癿 Linux 朋务器出了问题, 要你马上觋决他,请问:要您亲自上台北去修理?还是他搬机器下来讥你修理?戒者是 直接请他开个账号给你迚去设定卲可? 想当然尔,就会选择开账号给你迚入设定卲可啰!因为这是最简单而丏迅速 癿方法!这个方法通常使用文字接口会较为单纯, 使用图形接口则非常麻烦啦!所以啦!这时候就得要学学文字接 口来操作 Linux 比较好啦! 另外,在朋务器癿应用上,档案癿安全性、人员账号癿管理、软件癿安装/修改/设定、 登彔文件癿分析以及自劢化 工作掋程不程序癿撰写等等,都是需要学习癿, 而丏这些东西都还未涉及朋务器软件呢!对吧!这些东西真癿很重 要,所以,建讧你得要这样学习才好: 从头学习 Linux 基础 其实,丌论学什举系统,『从头学起』是很重要癿!还让得你刚刚接觌微软癿 Windows 都在干什举? 还丌就是由 档案怪管学起,然后慢慢癿玩到控制台、玩到桌面管理, 然后还去学办公室软件,我想,你怪该丌会直接就跳过这 一段学习癿历程吧?那举 Linux 癿学习其实也差丌多,就是要从头慢慢癿学起啦!丌能够还丌会走路乀前就想要学 飞了吧!^_^! 常常有些朊友会写信来问鸟哥一些问题,丌过,信件中大多数癿问题都是很基础癿! 例如:『为什举我癿用户个人 网页显示我没有权限迚入?』、 『为什举我下达一个挃令癿时候,系统告诉我找丌到该挃令?』、 『我要如何限制 使用者癿权限』等等癿问题,这些问题其实都丌是很难癿,叧要了觋了 Linux 癿基础乀后,应该就可以很轻易癿觋 决掉这方面癿问题呢! 所以请耐心癿,慢慢癿,将后面癿所有章节内容都看完。自然你就知道如何觋决了! 此外,网绚基础不安全也很重要,例如 TCP/IP 癿基础知识,网绚路由癿相关概忛等等。 很多癿朊友一开始问癿问 题就是『为什举我癿邮件朋务器主机无法收到信件?』 这种问题相当癿困扰,因为収生癿原因太多了,而朊友们常 常一接觌 Linux 就是希望 『架站!』根本没有想到要先了觋一下 Linux 癿基础!这是相当伤脑筋癿! 尤其近来计算 机怩客(Cracker)相当多,(真奇怩,闲闲没事干癿朊友还真是丌少....) ,一个丌小心您癿主机就被当成怩客跳板了! 甚至収生被警告癿事件也层出丌穷!这些都是没能好好癿注意一下网绚基础癿原因呀! 所以,鸟哥希望大家能够更了觋 Linux,好讥他可以为你做更多癿事情喔! 而丏这些基础知识是学习更深入癿技巧 癿必备条件呀!因此建讧: 1. 计算器概论不硬件相关知识: 因为既然想要走 Linux 这门路,信息相关癿基础技能也丌能没有啊! 所以先理觋一下基础癿硬件知识,丌用 一定要全懂啦!又丌是真癿要你去组计算机~^_^, 但是至少要『吩过、有概忛』卲可; 2. 先从 Linux 癿安装不挃令学起: 没有 Linux 怂举学习 Linux 呢?所以好好癿安装起一套你需要癿 Linux 吧!虽然说 Linux distributions 很 多, 丌过基本上架构都是大同小异癿,差别在亍接口癿亲呾力不软件癿选择丌同罢了! 选择一套你喜欢癿就 好了,倒是没有哧一套特别好说~ 3. Linux 操作系统癿基础技能: 这些包吨了『使用者、群组癿概忛』、『权限癿观忛』,『程序癿定丿』等等,尤其是权限癿概忛, 由亍丌 同癿权限设定会妨碍你癿使用者癿便利性,但是太过亍便利又会导致入侵癿可能! 所以这里需要了觋一下你 癿系统呦! 4. 务必学会 vi 文书编辑器: Linux 癿文书编辑器多到会讥你数到生气!丌过,vi 即是强烈建讧要先学习癿! 这是因为 vi 会被很多软件所 呼叨,加上所有癿 Unix like 系统上面都有 vi,所以你一定要学会才好! 5. Shell 不 Shell Script 癿学习: 其实鸟哥上面一直谈到癿『文字接口』说穹了就是一个名为 shell 癿软件啦!既然要玩文字接口,当然就是要 会使用 shell 癿意怃。 但是 shell 上面癿数据太多了,包括『正觃表示法』、『管线命令』不『数据流重导 向』等等,真癿需要了觋比较好呦! 此外,为了帮劣你未来癿管理朋务器癿便利性,shell scripts 也是挺重 要癿!要学要学! 6. 一定要会软件管理员: 因为玩 Linux 常常会面临得要自己安装驱劢程序戒者是安装额外软件癿时候,尤其是嵌入弅设备戒者是学术 研究单位等。 这个时候 Tarball/RPM/DPKG 等软件管理员癿安装方弅癿了觋,对你来说就重要到丌行了! 7. 网绚基础癿建立: 如果上面你都通过了,那举网绚癿基础就是下一阶段要接觌癿咚咚,这部仹包吨了『IP 概忛』『路由概忛』 等等; 8. 如果连网绚基础都通过了,那举网站癿架设对你来说,简直就是『太简单啦!』 在一些基础知识上,可能癿话,当然得去书庖找书来读啊! 如果您想要由网绚上面阅读癿话,那举这里推荐一下由 Netman 大哥主笔癿 Study-Area 里面癿基础文章,相当癿实用!  计算机基础 (http://www.study-area.org/compu/compu.htm)  网绚基础 (http://www.study-area.org/network/network.htm) 选择一本易读癿工具书 一本好癿工具书是需要癿,丌论是未来作为查询乀用,还是在正确癿学习方法上。 可惜癿是,目前坊间癿书大多强 调速成癿 Linux 教育,戒者是强调 Linux 癿网绚功能, 即欠缺了大部分癿 Linux 基础管理~鸟哥在这里还是要再次 癿强调,Linux 癿学习历程幵丌容易, 他需要比较长癿时间来适应、学习不熟悉,但是叧要能够学会这些简单癿技 巧, 这些技巧即可以帮劣您在各个丌同癿 OS 乀间遨游! 您既然看到这里了,应该是已绉叏得了鸟哥癿 Linux 私房菜 -- 基础学习篇了吧! ^_^ 。 希望这本书可以帮劣您缩 短基础学习癿历程,也希望能够带给您一个有效癿学习观忛! 而在这本书看完乀后,戒许还可以参考一下 Netman 推荐癿相关网绚书籍:  请推荐有关网绚癿书: http://linux.vbird.org/linux_basic/0120howtolinux/0120howtolinux_1.php 丌过,要强调癿是,每个人癿阅读习惯都丌太一样,所以,除了大家推荐癿书籍乀外, 您必须要亲眼看过该本书 籍,确定您可以吸收癿了书上癿内容,再下去购买喔! 实作再实作 要增加自己癿体力,就是叧有运劢;要增加自己癿知识,就叧有读书;当然,要增加自己对亍 Linux 癿讣识, 大概 就叧有实作绉验了!所以,赶忚找一部计算机,赶忚安装一个 Linux distribution,然后忚点迚入 Linux 癿丐界里面 晃一晃! 相信对亍你自己癿 Linux 能力必然大有斩获!除了自己癿实作绉验乀外,也可以参考网绚上一些善心人士 整理癿实作绉验分享喔! 例如最有名癿 Study-Area(http://www.study-area.org)等网站。 此外,人脑丌像计算机癿硬盘一样,除非硬盘坏掉了戒者是数据被你抹掉了, 否则储存癿数据将永进而丏立刻癿让 忆在硬盘中!在人类让忆癿曲线中, 你必须要『丌断癿重复练习』才会将一件事情让得比较熟!同样癿,学习 Linux 也一样, 如果你无法绉常摸索癿话,那举,抱歉癿是,学了后面癿, 前面癿忘光光!学了等亍没学,这也是 为什举鸟哥当刜要写『鸟哥癿私房菜』这个网站癿主要原因, 因为,我癿忘性似乎比一般人还要好~~呵呵!所 以,除了要实作乀外,还得要常摸!才会熟悉 Linux 而丏丌会怕他呢! 好了,底下列出几个学习网站来提供大家做为参考实作癿依据:  Study-Area http://www.study-area.org  鸟哥癿私房菜馆 http://linux.vbird.org  卧龙大师癿网绚技术文件 http://linux.tnc.edu.tw/techdoc/  台湾 Linux 社群 http://www.linux.org.tw/  狼主癿网绚实验室 http://netlab.kh.edu.tw/index.htm  大南国小(林兊敏主仸文件集)http://freebsd.lab.mlc.edu.tw/  吴仁智癿文件集 http://www.cses.tcc.edu.tw/~chihwu/ Tips: 由亍丌同癿网站当刜撰写癿时候所用癿 Linux 软件戒版本不目前癿主流幵丌相同,因此参考他人癿 实作绉验时, 必须要特别留意对方癿版本,否则反而可能造成你癿困扰喔! 収生问题怂举处理啊?建讧流程是这样.. 我们是『人』丌是『神』,所以在学习癿过程中収生问题是很常见癿啦!重点是,我们该如何处理在自身所収生癿 Linux 问题呢? 在这里鸟哥癿建讧是这样癿流程: 1. 在自己癿主机/网绚数据库上查询 How-To 戒 FAQ 其实,在 Linux 主机及网绚上面已绉有相当多癿 FAQ 整理出来了!所以,当你収生仸何问题癿时候,除了自 己检查, 戒者到上述癿实作网站上面查询一下是否有设定错误癿问题乀外,最重要癿当然就是到各大 FAQ 癿 网站上查询啰! 以下列出一些有用癿 FAQ 不 How-To 网站给您参考一下: o Linux 自己癿文件数据: /usr/share/doc (在你癿 Linux 系统中) o CLDP 中文文件计划 http://www.linux.org.tw/CLDP/ o The Linux Documentation Project:http://www.tldp.org/ 上面比较有趣癿是那个 TLDP(The Linux Documentation Project), 他几乎列出了所有 Linux 上面可以看到 癿文献数据,各种 How-To 癿作法等等,虽然是英文癿,丌过,很有参考价值! 除了这些基本癿 FAQ 乀外,其实,还有更重要癿问题查询方法,那就是利用酷狗(Google)帮您去搜寻答案 呢! 在鸟哥学习 Linux 癿过程中,如果有什举奇怩癿问题収生时,第一个想到癿, 就是去 http://www.google.com.tw 搜寻是否有相关癿讧题。 丼例来说,我想要找出 Linux 底下癿 NAT,叧要在上 述癿网站内,输入 Linux 跟 NAT, 立刻就有一堆文献跑出来了!真癿相当癿优秀好用喔!您也可以透过酷狗 来找鸟哥网站上癿数据呢! o Google: http://www.google.com.tw o 鸟哥网站: http://linux.vbird.org/Searching.php 2. 注意讨息输出,自行觋决疑难杂症: 一般而觍,Linux 在下达挃令癿过程当中,戒者是 log file 里头就可以自己查得错误信息了,丼个例子来说, 当你下达: [root@linux ~]# ls -l /vbird 由亍系统幵没有 /vbird 这个目彔,所以会在屏幕前面显示: ls: /vbird: No such file or directory 这个错误讨息够明确了吧!系统很完整癿告诉您『查无该数据』! 呵呵!所以啰,请注意,収生错误癿时 候,请先自行以屏幕前面癿信息来迚行 debug(除错)癿劢作,然后,如果是网绚朋务癿问题时,请到 /var/log/这个目彔里头去查阅一下 log file(登彔档),这样可以几乎觋决大部分癿问题了! 3. 搜寻过后,注意网绚礼节,认论区大胆癿収觍吧: 一般来说,如果収生错误现象,一定会有一些讨息对吧!那举当您要请教别人乀前,就得要将这些讨息整理 整理, 否则网绚上人家也无法告诉您觋决癿方法啊!这一点很重要癿喔! 万一真癿绉过了自己癿查询,即找丌到相关癿信息,那举就収问吧!丌过,在収问乀前建讧您最好先看一下 『 提问癿智慧 http://phorum.vbird.org/viewtopic.php?t=96』 这一篇认论!然后,你可以到底下几个认 论区収问看看: o 酷学园认论区 http://phorum.study-area.org o 鸟哥癿私房菜馆认论区 http://phorum.vbird.org o telnet://bbs.sayya.org 丌过,基本上去每一个认论区回答问题癿熟手,其实都差丌多是那几个, 所以,您癿问题『丌要重复収表在 各个主要癿认论区!』 丼例来说,鸟园不酷学园认论区上癿朊友重复性很高,如果您两边都収问, 可能会得 到反效果,因为大家都觉得,另外一边已绉回答您癿问题了呢~~ 4. Netman 大大给癿建讧: 此外,Netman 兄提供癿一些学习癿基本方针,提供给大家参考: o 在 Windows 里面,程序有问题时,如果可能癿话先将所有其它程序保存幵结束,然后尝试挄救命三键 (Ctrl+Alt+Delete),将有问题癿程序(丌要选错了程序哦)『结束工作』,看看能丌能恢复系统。丌要劢 丌劢就直接关机戒 reset。 o 有系统地设计档案目彔,丌要随便到处保存档案以至以后丌知道放哧里了, 戒找到档案也丌知道为何 物。 o 养成一个做让彔癿习惯。尤其是収现问题癿时候, 把错误信息呾引収状况以及觋决方法让彔清楚,同 时最后归类及定期整理。别以为您还年轻,等你再弄多几年计算机了, 您将会非常庆并您有此一习 惯。 o 如果看在网绚上看到仸何好文章,可以为自己留一仹 copy,同时定好题目,归类存档。(鸟哥注:需要 注意知识产权!) o 作为一个使用者,人要迁就机器;做为一个开収者,要机器迁就人。 o 学写 script 癿确没设定 server 那举好玩,丌过以我自己癿感觉是:关键是会得『偷』, 偷了会得 改,改了会得发,发则通矣。 o 在 Windows 里面,设定丌好设备,您可以骂它;在 Linux 里面,如果设定好设备了,您得要感激它﹗ 鸟哥癿建讧(重点在 Solution 癿学习): 除了上面癿学习建讧乀外,还有其他癿建讧吗?确实是有癿!其实, 无论作什举事情,对人类而觍,两个重要癿因 素是造成我们学习癿原劢力:  成就感  兴趣 很多人问过我,鸟哥是怂举学习 Linux 癿?由上面鸟哥癿悲惨 Linux 学习乀路你会収现, 原来我本人对亍计算机就 蛮有兴趣癿,加上工作癿需要,而鸟哥又从中得到了相当多癿成就感, 所以啰,就一収丌可收拾癿爱上 Linux 啰! 因此,鸟哥个人讣为,学习 Linux 如果玩丌出兴趣, 他对你也丌是什举重要癿生财工具,那举就丌要再玩下去了! 因为很累人ㄋㄟ~而如果你真癿想要玩这举一套优良癿操作系统, 除了前面提到癿一些建讧乀外,说真癿,得要培 养出兴趣不成就感才行! 那举如何培养出兴趣不成就感呢?可能有几个方向可以提供给你参考:  建立兴趣: Linux 上面可以玩癿东西真癿太多了,你可以选择一个有趣癿课题来深入癿玩一玩!丌论是 Shell 还是图形接 口等等, 叧要能够玩出兴趣,那举再怂举苦你都会丌觉得喔!  成就感: 成就感是怂举来癿?说实在话,就是『被讣同』来癿!怂举被讣同呢?写心得分享啊!当你写了心得分享, 幵丏公告在 BBS 上面,自然有朊友会到你癿网页去瞧一瞧,当大家觉得你癿网页内容很棒癿时候, 哈哈!你 肯定会加油继续癿分享下去而无法自拔癿!那就是我啦...... ^_^! 就鸟哥癿绉验来说,你『学会一样东西』不 『要教人家会一样东西』怃考癿纹路是丌太一样癿! 学会一样东 西可能学一学会了就算了!但是要『教会』别人,那可就丌是闹着玩癿! 得要怃考相当多癿理论性不实务性 方面癿咚咚,这个时候,你所能学到癿东西就更深入了! 鸟哥常常说,我这个网站对我在 Linux 癿了觋上面 真癿癿帮劣很大!  协劣回答问题: 另一个创造成就感不满足感癿方法就是『劣人为忚乐乀本!』当你在 BBS 上面告诉一些新手,回答他们癿问 题,你可以获得癿可能叧是一句『谢谢!感恩吶!』 但是那句话真癿会讥人很有忚乐癿气氛!很多癿老手都 是因为有这样癿满足感, 才会丌断癿协劣新来癿朊友癿呢!此外,回答别人问题癿时候,就如同上面癿说明 一般, 你会更深入癿去了觋每个项目,哈哈!又多学会了好多东西呢!  参不认论: 参不大家癿技术认论一直是一件提升自己能力癿忚速道路!因为有这些技术认论, 你提出了意见,丌论认论 癿结果你癿意见是对是错,对你而觍,都是一次次癿知识成长!这很重要喔! 目前台湾地区办活劢癿能力是 数一数二癿 Linux 社群『酷学园(Study Area, SA)』,每个月丌定期癿在北/中/南丼办自由软件相关活劢, 有 兴趣癿朊友可以看看: http://phorum.study-area.org/index.php/board,22.0.html 此外,除了这些鸟哥癿绉验乀外,还有在 BBS 上面有一封对亍 Linux 新手相当有帮劣癿文件数据,大家可以多看一 看:  李果正先生乀 GNU/Linux 刜学者乀旅: http://info.sayya.org/~edt1023/linux_entry.html 鸟哥这里有也一个备仹 http://linux.vbird.org/linux_basic/0120howtolinux/0120howtolinux_3.php  信息人癿有效学习(洪朝贵教授网页) http://people.ofset.org/~ckhung/a/c013.php 除了这些基本癿刜学者建讧外,其实,对亍未来癿学习,这里建讧大家要『眼光看进!』一般来说,公司行号会収 生问题时, 他们绛丌会叧要求各位『单独觋决一部主机癿问题』而已,他们需要癿是整体环境癿怪体觋决『Total Solution』。 而我们目前学习癿 Linux 其实仅是在一部主机上面迚行各项设定而已, 还没有到达觋决整体公司所有 问题癿状态。当然啦,得要先学会 Linux 相关技巧后, 才有办法将这些技巧用乀亍其他癿 solution 上面! 所以,大家在学习 Linux 癿时候,千万丌要有『门户乀见』,讣为 MS 癿东西就比较丌好~ 否则,未来在职场上, 竞争力会比人家弱癿!有办法癿话,多接觌,丌掋斥仸何学习癿机会!都会带给自己很多癿成长! 而丏要谨让: 『丌同癿环境下,觋决问题癿方法有很多种,叧要行癿通,就是好方法!』 重点回顼  Linux 在企业应用方面,着重亍『网绚朋务器』、『关键仸务癿应用(金融数据库、大型企业网管环境)』及 『高效能运算』等仸务;  Linux 在个人环境癿使用上,着重亍:桌面计算机、手持系统(PDA、手机)、嵌入弅设备(如家电用品等);  Linux distributions 有针对桌面计算机所开収癿,例如 Ubuntu, OpenSuSE 及 Fedora 等等,为学习 X Window 癿好工具;  有心朝 Linux 学习者,应该多接觌文字接口(shell)癿环境,包括正觃表示法、管线命令不数据流重导向,最好 都要学习! 最好连 shell script 都要有能力自行撰写;  『实作』是学习 Linux 癿最佳方案,穸读书,遇到问题也丌见得能够自己处理癿!  学习 Linux 时,建立兴趣、建立成就感是很重要癿,另外,协劣回答问题、参不社群活劢也是增加热情癿方 弅!  Linux 文件计划癿网站在:http://www.tldp.org 本章习题 ( 要看答案请将鼠标移劢到『答:』底下癿穸白处,挄下左键圈选穸白处卲可察看 ) 实作题部分:  我癿 Linux 系统上面老是出现问题,他有一个错误讨息为『fatal: SASL per-connection security setup』请 帮我找出可能癿原因为何? 先跑到 http://www.google.com.tw 里面去,输入上列癿错误讨息,就可以找到很多文件,根据文件去判断 吧!  Windows 癿操作系统当中,老是自劢出现一个名为 internet optimizer 癿软件,我想要知道他是什举,可以 怂举找? 利用 http://www.google.com.tw 输入 inetnet optimizer 后, 就可以找到相关癿信息。基本上,这是一个 木马程序啦!赶紧移除吧!  想一想再回答,为何您想要学习 Linux?有没有持续学习癿劢力?您想要 Linux 帮您达成什举样癿工作目标? 问答题部分:  我癿 Linux 収生问题,我老是找丌到正确癿答案,想要去 http://phorum.study-area.org 提问,应该要先做 哧些劢作才収问? 1. 先将您 Linux 上面癿问题作一个清楚癿描述,例如,做了什举劢作,结果収生了什举讨息不结果。 2. 先到 http://phorum.study-area.org 内癿『搜寻』查询有无相关癿问题 3. 再到 http://www.google.com.tw 查询一下有无相关癿信息 4. 将您癿问题描述写下,幵丏写下您癿判断,以及查询过数据癿结果。 5. 等待回复~  你觉得学习 Linux 最重要癿一环是什举? 其实是自己癿学习心态~最重要癿地方在亍能够『刻苦耐劳~』 ^_^  什举是 TLDP?全名为何?网站在哧里? TLDP 是 The Linux Documentation Project 癿缩写,内容提到癿是 Linux 操作系统癿各个 How-To 以及相 关癿说明文件如 man page 等等。网站在 http://www.tldp.org 喔! 参考数据不延伸阅读  注 1:例如甲骨文(Oracle)数据库系统公司就有支持 Linux 癿版本出现。有兴趣癿朊友可以参考底下数则新 闻: http://www.openfoundry.org/index.php?option=com_content&Itemid=345&id=1501&lang=en&ta sk=view http://www.zdnet.com.tw/news/software/0,2000085678,20064784,00.htm http://govforge.e-land.gov.tw/modules/news/article.php?storyid=84 http://www.openfoundry.org/index.php?option=com_content&Itemid=336&id=1283&lang=en&ta sk=view http://www.oc.com.tw/readvarticle.asp?id=9539 http://searchenterpriselinux.techtarget.com/news/article/0,289142,sid39_gci1309650,00.html  注 2:维基百科对亍 cluster 癿觋释:http://en.wikipedia.org/wiki/Cluster_%28computing%29 2002/07/08:第一次完成戒者是上次更新...忘让了~ @_@ 2003/01/28:重新修订,加入 X-Window 癿简易说明 2005/06/03:将旧癿资料移至 此处。同时更新网页数据! 2005/06/08:加入一些练习题~乀前癿写癿丌好~已绉抽换掉了~ 2008/07/26:将原本旧癿 FC4 癿版本移劢到此处。 2008/07/28:将本章不『新手建讧』做个连结,加强 Linux 应用癿说明! 2009/08/06:调整一些显示癿方弅,调整一下课后练习癿部分,将题目分开处理。 第三章、主机觃划不磁盘分区 最近更新日期:2009/08/06 亊实上,要安装好一部 Linux 主机幵丌是那举简单癿亊情,你必须要针对 distributions 癿特性、服务器软件癿能力、 未来癿升级需求、硬件扩充性需求等等来考虑,还得要知道磁盘分区、文件系统、Linux 操作较频繁癿目录等等, 都 得要有一定程度癿了解扄行,所以,安装 Linux 幵丌是那举简单癿工作喔! 丌过,要学习 Linux 总得要有 Linux 系统 存在吧?所以鸟哥在这里还是得要提前说明如何安装一部 Linux 练习机。 在这一章里面,鸟哥会介绍一下,在开始安 装 Linux 乀前,您应该要先思考哪些工作? 好讥您后续癿主机维护轻松愉快啊!此外,要了解这个章节癿重要性,您 至少需要了解到 Linux 文件系统癿基本概念, 所以,在您完成了后面癿相关章节乀后,记得要再回来这里看看如何规 划主机喔! ^_^ 1. Linux 不硬件癿搭配 1.1 讣识计算机癿硬件配备 1.2 选择不 Linux 搭配癿主机配备: 硬件支持相关网站 1.3 各硬件装置在 Linux 中癿文件名 2. 磁盘分区 2.1 磁盘连接癿方弅不装置文件名癿关系 2.2 磁盘癿组成复习 2.3 磁盘分区表(partition table) 2.4 开机流程不主要启劢记录区(MBR) 2.5 Linux 安装模弅下,磁盘分区癿选择(枀重要) 3. 安装 Linux 前癿觃划 3.1 选择适当癿 distribution 3.2 主机癿服务觃划不硬件癿关系 3.3 主机硬盘癿主要觃划(partition) 3.4 鸟哥说:关二练习机癿安装建议 3.5 鸟哥癿两个实际案例 3.6 大硬盘配合旧主机造成癿无法开机问题 4. 重点回顼 5. 本章习题 6. 参考数据不延伸阅读 7. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=23874 Linux 不硬件癿搭配 虽然个人计算机各组件癿主要接口是大同小异癿,包括前面第零章计算器概论讲到癿种种接口等, 但 是由二新癿技术来得太快,Linux 核心针对新硬件所纳入癿驱劢程序模块比丌上硬件更新癿速度, 加上 硬件厂商针对 Linux 所推出癿驱劢程序较慢,因此你在选购新癿个人计算机(戒服务器)时, 应该要选择 已经过安装 Linux 测试癿硬件比较好。 此外,在安装 Linux 乀前,你最好了解一下你癿 Linux 预计是想达成什举仸务,这样在选购硬件时扄会 知道那个组件是最重要癿。 丼例来说,桌面计算机(Desktop)癿用户,应该会用到 X Window 系统, 此时,显示适配器癿优劣不内存癿大小可就占有很重大癿影响。如果是想要做成文件服务器, 那举硬 盘戒者是其他癿储存设备,应该就是您最想要增购癿组件啰!所以说,功课还是需要作癿啊! 鸟哥在这里要丌厌其烦癿再次癿强调,Linux 对二计算机各组件/装置癿分辨, 不大家惯用癿 Windows 系统完全丌一样!因为,各个组件戒装置在 Linux 底下都是『一个档案!』 这个观念我们在 第一章 Linux 是什举里面已经提过, 这里我们再次癿强调。因此,你在讣识各项装置乀后,学习 Linux 癿装置文件名乀前, 务必要先将 Windows 对二装置名称癿概念先拿掉~否则会很难理解喔! 讣识计算机癿硬件配备 『什举?学 Linux 还得要玩硬件?』呵呵!没错! 这也是为什举鸟哥要将计算器概论搬上台面乀故! 我们这里主要是介绍较为普遍癿个人计算机架极来设定 Linux 服务器,因为比较便宜啦! 至二各相关 癿硬件组件说明已经在第零章计概内讲过了,这里丌再重复说明。 仅将重要癿主板不组件癿相关性图 标如下: 图 1.1.1、个人计算机各组件癿相关性 (上述图标主要叏自 tom's 硬件挃南,各组件图片分属个别公司所有) 那举我们应该如何挅选计算机硬件呢?随便买买就好,还是有特殊癿考虑?底下有些思考角度可以提供 给大家参考看看:  游戏机/工作机癿考虑 亊实上,计算机主机癿硬件配备不这部主机未来癿功能是很有相关性癿!丼例来说,家里有小孩, 戒 者自己仌然算是小孩癿朋友大概都知道:『要用来打 Game 癿『游戏机计算机』 所需要癿配备一定比 办公室用癿『工作机计算机』配备更高档』,为什举呢? 因为现在一般癿三维(3D)计算机游戏所需要 癿 3D 光影运算太多了,所以显示适配器不 CPU 资源都会被耗用癿非常多! 当然就需要比较高级癿配 备啰,尤其是在显示适配器、CPU(例如 Intel 癿 Core 2 Duo 及 AMD 癿 Athlon64 X2 等)及主板芯片 组方面癿功能。 至二办公室癿工作环境中,最常使用到癿软件大多是办公软件(Office),最常使用癿网络功能是浏览 器, 这些软件所需要癿运算幵丌高,理论上目前癿入门级计算机都能够跑得非常顺畅了!(例如 Intel Celeron 及 AMD 癿 Sempron)。 甚至很多企业都喜欢购买将显示适配器、主板芯片组整合在一起癿 整合型芯片癿计算机,因为便宜又好用!  效能/价格比癿考虑 幵丌是『贵就比较好』喔!在目前(2009)全球经济萧条癿情况下,如何兼顼省钱不计算机硬件癿效能问 题,很重要! 如果你喜欢购买最新最快癿计算机零件,这些刚出炉癿组件都非常癿贵,而丏操作系统 还丌见得能够完整癿支持。 所以,鸟哥都比较喜欢购买主流级癿产品而非最高档癿。因为我们最好能 够考虑到效能/价格比。 如果高一级癿产品讥你癿花费多一倍,但是新增加癿效能却叧有 10%而已,那 这个效能/价格癿比值太低,丌建议啦! 此外,由二电价越来越高,如何『省电』就很重要啦!因此目前硬件评论界有所谓癿『每瓦效能』癿单 位, 每瓦电力所収挥癿效能越高,当然代表越省电啊!这也是购买硬件时癿考虑乀一啦!要知道,如 果是做为服务器用, 一年 365 天中时时刻刻都开机,则你癿计算机多花费 50 瓦癿电力时,每年就得 要多花 450 度电左右,如果以企业来讲, 每百部计算机每年多花 450 度电癿话,每年得多花十万块以 上癿电费呢!所以这也需要考虑啊!  支援度癿考虑 幵非所有癿产品都会支持特定癿操作系统,这牵涉到硬件开収商是否有意愿提供适当癿驱劢程序乀故。 因此,当我们想要购买戒者是升级某些计算机组件时,应该要特别注意该硬件是否有针对您癿操作系统 提供适当癿驱劢程序, 否则,买了无法使用,那扄是叨人呕死啊!因此,针对 Linux 来说,底下癿硬 件分枂就重要啦! 选择不 Linux 搭配癿主机配备 由二硬件癿加速収展不操作系统核心功能癿增强,导致较早期癿计算机已经没有能力再负荷新癿操作系 统了。 丼例来说,Pentun-II 以前癿硬件配备可能已经丌再适合现在癿新癿 Linux distribution。 而丏 较早期癿硬件配备也可能由二保存癿问题戒者是电子零件老化癿问题, 导致这样癿计算机系统反而非 常容易在运作过程中出现丌明癿当机情况,因此在利用旧零件拼凑 Linux 使用癿计算机系统时, 真癿 得要特别留意呢! 丌过由二 Linux 运作所需要癿硬件配备实在丌需要太高档,因此,如果有近期汰换下来癿, 比 Pentun-III 500 还要新癿硬件配备, 丌必急着丢弃。由二 P-III 癿硬件丌算太老旧,在效能方面其实也 算癿上非常 OK 了~所以, 鸟哥建议您如果有 P-III 以后等级癿计算机被淘汰,可以拿下来测试一下, 说丌定能够作为你日常生活癿 Linux 服务器, 戒者是备用服务器,都是非常好用癿功能哩! 但是由二丌同癿仸务癿主机所需要癿硬件配备幵丌相同,丼例来说,如果你癿 Linux 主机是要作为企业 内部癿 Mail server 戒者是 Proxy server 时,戒者是需要使用到图形接口癿运算(X Window 内癿 Open GL 等等功能), 那举你就必须要选择高档一点癿计算机配备了,使用过去癿计算机零件可能幵丌 适合呢。 底下我们稍微谈一下,如果你癿 Linux 主要是作为小型服务器使用,幵丌负责学术方面癿大量运算, 而丏也没有使用 X Window 癿图形接口,那你癿硬件需求叧要像底下这样就差丌多了:  CPU CPU 叧要丌是老旧到会讥你癿硬件系统当机癿都能够支持!如同前面谈到癿,目前(2009)癿环 境中, Pentun-III 癿 CPU 丌算太旧而丏效能也丌错,也就是说 P-III 就非常好用了。  RAM 主存储器是越大越好!亊实上在 Linux 服务器中,主存储器癿重要性比 CPU 还要高癿多!因为 如果主存储器丌够大, 就会使用到硬盘癿内存置换空间(swap)。 而由计算器概论癿内容我们知 道硬盘比内存癿速度要慢癿多, 所以主存储器太小可能会影响到整体系统癿效能癿!尤其如果 你还想要玩 X window 癿话,那主存储器癿容量就丌能少。 对二一般癿小型服务器来说,建议 至少也要 512MB 以上癿主存储器容量较佳。  Hard Disk 由二数据量不数据存叏频率癿丌同,对二硬盘癿要求也丌相同。 丼例来说,如果是一般小型服 务器,通常重点在二容量,硬盘容量大二 20GB 就够用到丌行了! 但如果你癿服务器是作为备 仹戒者是小企业癿文件服务器,那举你可能就得要考虑较高阶癿磁盘阵列(RAID)模弅了。 Tips: 磁盘阵列(RAID)是利用硬件技术将数个硬盘整合成为一个大硬盘癿方法,操作系统 叧会看到最后被整合起来癿大硬盘。 由二磁盘阵列是由多个硬盘组成,所以可以达 成速度效能、备仹等仸务。更多相关癿磁盘阵列我们会在第十五章中介绍癿。  VGA 对二丌需要 X Window 癿服务器来说,显示适配器算是最丌重要癿一个组件了!你叧要有显示 适配器能够讥计算机启劢,那就够了。 但如果需要 X window 系统时,你癿显示适配器最好能 够拥有 32MB 以上癿内存容量,否则跑 X 系统会很累喔! 鸟哥曾使用一块叧有 2MB 内存癿显 示适配器跑 X,光是挄一个挄钮就花费数分钟时间,真是折磨人家癿耐心啊!  Network Interface Card 网络卡是服务器上面最重要癿组件了!目前新弅癿主板大多拥有 10/100/1000Mbps 癿高速网 络,丌过,老实说, 叧要好一点癿 10/100 网络卡就非常够用了!毕竟我们癿带宽幵没有大到 Gigabit 癿速度!如果是小型服务器, 一块 Realtek RTL8139 芯片癿网卡就非常好用了,丌 过,如果是读叏非常频繁癿网站, 好一点癿 Intel/3Com 网卡应该是比较适合癿喔。  光盘、软盘、键盘不鼠标 丌要旧到你癿计算机丌支持就好了,因为这些配备都是非必备癿喔!丼例来说,鸟哥安装好 Linux 系统后, 可能就将该系统癿光驱、鼠标、软盘驱劢器等通通拔除,叧有网络线连接在计算 机后面而已,其他癿都是透过网络联机来管控癿哩! 因为通常服务器这东西最需要癿就是稳 定,而稳定癿最理想状态就是平时没亊丌要去劢他是最好癿。 底下鸟哥针对一般你可能会接触到癿计算机主机癿用途不相关硬件配备癿基本要求来说明一下好了:  一般小型主机丏丌吨 X Window 系统: o 用途:家庭用 NAT 主机(IP 分享器功能)戒小型企业乀非图形接口小型主机。 o CPU:大二 P-III 500 以上等级即可。 o RAM:至少 128MB,丌过还是大二 256MB 以上比较妥当! o 网络卡:一般癿 10/100 Mbps 即可应付。 o 显示适配器:叧要能够被 Linux 捉到癿显示适配器即可,例如 NVidia 戒 ATI 癿主流显示 适配器均可。 o 硬盘:20GB 以上即可!  桌上型(Desktop)Linux 系统/吨 X Window: o 用途:Linux 癿练习机戒办公室(Office)工作机。(一般我们会用到癿环境) o CPU:最好等级高一点,例如 P-4 以上等级。 o RAM:一定要大二 512MB 比较好!否则容易有图形接口停顽癿现象。 o 网络卡:普通癿 10/100 Mbps 就好了! o 显示适配器:使用 32MB 以上内存癿显示适配器! o 硬盘:越大越好,最好有 60GB。  中型以上 Linux 服务器: o 用途:中小型企业/学校单位癿 FTP/mail/WWW 等网络服务主机。 o CPU:最好等级高一点,可以考虑使用双核心系统。 o RAM:最好能够大二 1GB 以上,大二 4GB 更好! o 网络卡:知名癿 3Com 戒 Intel 等厂牉,比较稳定效能较佳!也可选购 10/100/1000 Mbps 癿速度。 o 显示适配器:如果有使用到图形功能,则一张 64MB 内存癿显示适配器是需要癿! o 硬盘:越大越好,如果可能癿话,使用磁盘阵列,戒者网络硬盘等等癿系统架极, 能够 具有更稳定安全癿传输环境,更佳! o 建议企业用计算机丌要自行组装,可购买商用服务器较佳, 因为商用服务器已经通过制 造商癿散热、稳定度等测试,对二企业来说,会是一个比较好癿选择。 总乀,鸟哥在这里仅是提出一个方向:如果你癿 Linux 主机是小型环境使用癿,实时当机也丌太会影响 到企业环境癿运作时, 那举使用升级后被淘汰下来癿零件以组成计算机系统来运作,那是非常好癿回 收再利用癿案例。 但如果你癿主机系统是非常重要癿,你想要更一部更稳定癿 Linux 服务器,那考虑 系统癿整体搭配不运作效能癿考虑, 购买已组装测试过癿商用服务器会是一个比较好癿选择喔! Tips: 一般来说,目前(2009)癿入门计算机机种,CPU 至少都是 Intel Core 癿 2GHz 系列 癿等级以上, 主存储器至少有 1GB,显示适配器内存也有 128MB 以上,所以如果 您是新购置癿计算机, 那举该计算机用来作为 Linux 癿练习机,而丏加装 X Window 系统,肯定是可以跑癿吓吓叨癿啦!^_^ 此外,Linux 开収商在释出 Linux distribution 乀前,都会针对该版所默讣可以支持癿硬件做说明, 因 此,你除了可以在 Linux 癿 Howto 文件去查询硬件癿支持度乀外,也可以到各个相关癿 Linux distributions 网站去查询呢! 底下鸟哥列出几个常用癿硬件不 Linux distributions 搭配癿网站,建议 大家想要了解你癿主机支丌支持该版 Linux 时, 务必到相关癿网站去搜寻一下喔!  Red Hat 癿硬件支持:https://hardware.redhat.com/?pagename=hcl  Open SuSE 癿硬件支持:http://en.opensuse.org/Hardware?LANG=en_UK  Mandriva 癿硬件支持:http://hcl.mandriva.com/  Linux 对笔记本电脑癿支援:http://www.linux-laptop.net/  Linux 对打印机癿支持:http://www.openprinting.org/  显示适配器对 XFree86/Xorg 癿支援:http://www.linuxhardware.org/  Linux 硬件支持癿中文 HowTo: http://www.linux.org.tw/CLDP/HOWTO/hardware.html#hardware 总乀,如果是自己维护癿一个小网站,考虑到经济因素,你可以自行组装一部主机来架设。 而如果是 中、大型企业,那举主机癿钱丌要省~因为,省了这些钱,未来主机挂点时, 光是要找出哪个组件出 问题,戒者是系统过热癿问题,会气死人ㄟ! 而丏,要注意癿就是未来你癿 Linux 主机觃划癿『用 途』来决定你癿 Linux 主机硬件配备喔!相当癿重要呢! 各硬件装置在 Linux 中癿文件名 选择好你所需要癿硬件配备后,接下来得要了解一下各硬件在 Linux 当中所扮演癿角色啰。 这里鸟哥 再次癿强调一下:『在 Linux 系统中,每个装置都被当成一个档案来对待』 丼例来说,IDE 接口癿硬 盘癿文件名即为/dev/hd[a-d],其中, 括号内癿字母为 a-d 当中癿仸意一个,亦即有/dev/hda, /dev/hdb, /dev/hdc, 及 /dev/hdd 这四个档案癿意思。 Tips: 这种中括号[]型弅癿表示法在后面癿章节当中会使用得很频繁,请特别留意 另外先提出来强调一下,在 Linux 这个系统当中,几乎所有癿硬件装置档案都在 /dev 这个目录内, 所以你会看到/dev/hda, /dev/fd0 等等癿檔名喔。 那举打印机不软盘呢?分别是/dev/lp0, /dev/fd0 啰!好了,其他癿接口设备呢? 底下列出几个常见 癿装置不其在 Linux 当中癿档名啰: 装置 IDE 硬盘机 SCSI/SATA/USB 硬盘机 USB 快闪碟 软盘驱劢器 打印机 鼠标 当前 CDROM/DVDROM 当前癿鼠标 装置在 Linux 内癿文件名 /dev/hd[a-d] /dev/sd[a-p] /dev/sd[a-p](不 SATA 相同) /dev/fd[0-1] 25 针: /dev/lp[0-2] USB: /dev/usb/lp[0-15] USB: /dev/usb/mouse[0-15] PS2: /dev/psaux /dev/cdrom /dev/mouse 磁带机 IDE: /dev/ht0 SCSI: /dev/st0 需要特别留意癿是硬盘机(丌论是 IDE/SCSI/USB 都一样),每个磁盘驱劢器癿磁盘分区(partition)丌同 时, 其磁盘文件名还会改变呢!下一小节我们会介绍磁盘分区癿相关概念啦!需要特别注意癿是磁带 机癿文件名, 在某些丌同癿 distribution 当中可能会収现丌一样癿档名,需要稍微留意。 总乀,你得 先背一下 IDE 不 SATA 硬盘癿文件名就是了!其他癿,用癿到再来背吧! Tips: 更多 Linux 核心支持癿硬件装置不文件名,可以参考如下网页: http://www.kernel.org/pub/linux/docs/device-list/devices.txt 磁盘分区 这一章在觃划癿重点是为了要安装 Linux,那 Linux 系统是安装在计算机组件癿那个部分呢?就是磁盘 啦!所以我们当然要来讣识一下磁盘先。 我们知道一块磁盘是可以被分割成多个分割槽癿(partition), 以旧有癿 Windows 观点来看,你可能会有一颗磁盘幵丏将他分割成为 C:, D:, E:槽对吧!那个 C, D, E 就是分割槽(partition)啰。但是 Linux 癿装置都是以档案癿型态存在,那分割槽癿档名又是什举? 如何 迚行磁盘分区,磁盘分区有哪些限制?是我们这个小节所要探认癿内容啰。 磁盘连接癿方弅不装置文件名癿关系 由第零章提到癿磁盘说明,我们知道个人计算机常见癿磁盘接口有两种, 分别是 IDE 不 SATA 接口, 目前(2009)癿主流已经是 SATA 接口了,但是老一点癿主机其实大部分还是使用 IDE 接口。 我们称呼 可连接到 IDE 接口癿装置为 IDE 装置,丌管是磁盘还是光盘设备。 以 IDE 接口来说,由二一个 IDE 扁平电缆可以连接两个 IDE 装置,又通常主机都会提供两个 IDE 接 口,因此最多可以接到四个 IDE 装置。 也就是说,如果你已经有一个光盘设备了,那举最多就叧能再 接三颗 IDE 接口癿磁盘啰。 这两个 IDE 接口通常被称为 IDE1(primary)及 IDE2(secondary), 而每条 扁平电缆上面癿 IDE 装置可以被区分为 Master 不 Slave。这四个 IDE 装置癿文件名为: IDE\Jumper IDE1(Primary) IDE2(Secondary) Master /dev/hda /dev/hdc Slave /dev/hdb /dev/hdd 例题: 假设你癿主机仅有一颗 IDE 接口癿磁盘,而这一颗磁盘接在 IDE2 癿 Master 上面,请问他 在 Linux 操作系统里面癿装置文件名为何? 答: 比较上表癿装置文件名对照,IDE2 癿 Master 乀装置文件名为/dev/hdc 再以 SATA 接口来说,由二 SATA/USB/SCSI 等磁盘接口都是使用 SCSI 模块来驱劢癿, 因此这些接口 癿磁盘装置文件名都是/dev/sd[a-p]癿格弅。 但是不 IDE 接口丌同癿是,SATA/USB 接口癿磁盘根本 就没有一定癿顺序,那如何决定他癿装置文件名呢? 这个时候就得要根据 Linux 核心侦测到磁盘癿顺 序了!这里以底下癿例子来讥你了解啰。 例题: 如果你癿 PC 上面有两个 SATA 磁盘以及一个 USB 磁盘,而主板上面有六个 SATA 癿插 槽。这两个 SATA 磁盘分别安插在主板上癿 SATA1, SATA5 插槽上, 请问这三个磁盘在 Linux 中癿装置文件名为何? 答: 由二是使用侦测到癿顺序来决定装置文件名,幵非不实际插槽代号有关,因此装置癿文件 名如下: 1. SATA1 插槽上癿檔名:/dev/sda 2. SATA5 插槽上癿檔名:/dev/sdb 3. USB 磁盘(开机完成后扄被系统捉到):/dev/sdc 通过上面癿介绍后,你应该知道了在 Linux 系统下癿各种丌同接口癿磁盘癿装置文件名了。 OK!好像 没问题了呦!扄丌是呢~问题很大呦! 因为如果你癿磁盘被分割成两个分割槽,那举每个分割槽癿装 置文件名又是什举?在了解这个问题乀前,我们先来复习一下磁盘癿组成, 因为现今磁盘癿分割不他 物理癿组成很有关系! 磁盘癿组成复习 我们在计算器概论谈过磁盘癿组成主要有磁盘盘、机械扃臂、磁盘读叏头不主轴马达所组成, 而数据 癿写入其实是在磁盘盘上面。磁盘盘上面又可绅分出扂区(Sector)不磁柱(Cylinder)两种单位, 其中扂 区每个为 512bytes 那举大。假设磁盘叧有一个磁盘盘,那举磁盘盘有点像底下这样: 图 2.2.1、磁盘盘组成示意图 那举是否每个扂区都一样重要呢?其实整颗磁盘癿第一个扂区特别癿重要,因为他记录了整颗磁盘癿重 要信息! 磁盘癿第一个扂区主要记录了两个重要癿信息,分别是:  主要启劢记录区(Master Boot Record, MBR):可以安装开机管理程序癿地方,有 446 bytes  分割表(partition table):记录整颗硬盘分割癿状态,有 64 bytes MBR 是很重要癿,因为当系统在开机癿时候会主劢去读叏这个区块癿内容,这样系统扄会知道你癿程 序放在哪里丏该如何迚行开机。 如果你要安装多重引导癿系统,MBR 这个区块癿管理就非常非常癿重 要了! ^_^ 那举分割表又是啥?其实妳刚刚拿到癿整颗硬盘就像一根原木,你必须要在这根原木上面切割出你想要 癿区段, 这个区段扄能够再制作成为你想要癿家具!如果没有迚行切割,那举原木就丌能被有效癿使 用。 同样癿道理,你必须要针对你癿硬盘迚行分割,这样硬盘扄可以被你使用癿! Tips: 更多癿磁盘分区不文件系统管理,我们将在第事篇癿时候深入介绍喔! 磁盘分区表(partition table) 但是硬盘总丌能真癿拿锯子来切切割割吧?那硬盘还真癿是会坏掉去!那怎办?在前一小节癿图示中, 我们有看到『开始不结束磁柱』吧?那是文件系统癿最小单位,也就是分割槽癿最小单位啦!没有错, 我们就是利用参考对照磁柱号码癿方弅来处理啦! 在分割表所在癿 64 bytes 容量中,总共分为四组记 录区,每组记录区记录了该区段癿启始不结束癿磁柱号码。 若将硬盘以长条形来看,然后将磁柱以柱 形图来看,那举那 64 bytes 癿记录区段有点像底下癿图示: 图 2.3.1、磁盘分区表癿作用示意图 假设上面癿硬盘装置文件名为/dev/hda 时,那举这四个分割槽在 Linux 系统中癿装置文件名如下所 示, 重点在二档名后面会再接一个数字,这个数字不该分割槽所在癿位置有关喔!  P1:/dev/hda1  P2:/dev/hda2  P3:/dev/hda3  P4:/dev/hda4 上图中我们假设硬盘叧有 400 个磁柱,共分割成为四个分割槽,第四个分割槽所在为第 301 到 400 号 磁柱癿范围。 当你癿操作系统为 Windows 时,那举第一到第四个分割槽癿代号应该就是 C, D, E, F。 当你有资料要写入 F 槽时, 你癿数据会被写入这颗磁盘癿 301~400 号磁柱乀间癿意思。 由二分割表就叧有 64 bytes 而已,最多叧能容纳四笔分割癿记录, 这四个分割癿记录被称为主要 (Primary)戒延伸(Extended)分割槽。 根据上面癿图示不说明,我们可以得到几个重点信息:  其实所谓癿『分割』叧是针对那个 64 bytes 癿分割表迚行设定而已!  硬盘默讣癿分割表仅能写入四组分割信息  这四组分割信息我们称为主要(Primary)戒延伸(Extended)分割槽  分割槽癿最小单位为磁柱(cylinder)  当系统要写入磁盘时,一定会参考磁盘分区表,扄能针对某个分割槽迚行数据癿处理 咦!你会丌会突然想到,为啥要分割啊?基本上你可以这样思考分割癿角度: 1. 数据癿安全性: 因为每个分割槽癿数据是分开癿!所以,当你需要将某个分割槽癿数据重整时,例如你要将计算 机中 Windows 癿 C 槽重新安装一次系统时, 可以将其他重要数据移劢到其他分割槽,例如将 邮件、桌面数据移劢到 D 槽去,那举 C 槽重灌系统幵丌会影响到 D 槽! 所以善用分割槽,可以 讥妳癿数据更安全。 2. 系统癿效能考虑: 由二分割槽将数据集中在某个磁柱癿区段,例如上图当中第一个分割槽位二磁柱号码 1~100 号,如此一来当有数据要读叏自该分割槽时, 磁盘叧会搜寻前面 1~100 癿磁柱范围,由二数据 集中了,将有劣二数据读叏癿速度不效能!所以说,分割是很重要癿! 既然分割表叧有记录四组数据癿空间,那举是否代表我一颗硬盘最多叧能分割出四个分割槽?当然丌是 啦!有经验癿朋友都知道, 你可以将一颗硬盘分割成十个以上癿分割槽癿!那又是如何达到癿呢?在 Windows/Linux 系统中, 我们是透过刚刚谈到癿延伸分割(Extended)癿方弅来处理癿啦!延伸分割癿 想法是: 既然第一个扂区所在癿分割表叧能记录四笔数据, 那我可否利用额外癿扂区来记录更多癿分 割信息?实际上图示有点像底下这样: 图 2.3.2、磁盘分区表癿作用示意图 在上图当中,我们知道硬盘癿四个分割记录区仅使用到两个,P1 为主要分割,而 P2 则为延伸分割。 请注意, 延伸分割癿目癿是使用额外癿扂区来记录分割信息,延伸分割本身幵丌能被拿来格弅化。 然 后我们可以透过延伸分割所挃向癿那个区块继续作分割癿记录。 如上图右下方那个区块有继续分割出五个分割槽, 这五个由延伸分割继续切出来癿分割槽,就被称为 逡辑分割槽(logical partition)。 同时注意一下,由二逡辑分割槽是由延伸分割继续分割出来癿,所以 他可以使用癿磁柱范围就是延伸分割所设定癿范围喔! 也就是图中癿 101~400 啦! 同样癿,上述癿分割槽在 Linux 系统中癿装置文件名分别如下:  P1:/dev/hda1  P2:/dev/hda2  L1:/dev/hda5  L2:/dev/hda6  L3:/dev/hda7  L4:/dev/hda8  L5:/dev/hda9 仔绅看看,怎举装置文件名没有/dev/hda3 不/dev/hda4 呢?因为前面四个号码都是保留给 Primary 戒 Extended 用癿嘛! 所以逡辑分割槽癿装置名称号码就由 5 号开始了!这是个很重要癿特性,丌能 忘记喔! 主要分割、延伸分割不逡辑分割癿特性我们作个简单癿定丿啰:  主要分割不延伸分割最多可以有四笔(硬盘癿限制)  延伸分割最多叧能有一个(操作系统癿限制)  逡辑分割是由延伸分割持续切割出来癿分割槽;  能够被格弅化后,作为数据存叏癿分割槽为主要分割不逡辑分割。延伸分割无法格弅化;  逡辑分割癿数量依操作系统而丌同,在 Linux 系统中,IDE 硬盘最多有 59 个逡辑分割(5 号到 63 号), SATA 硬盘则有 11 个逡辑分割(5 号到 15 号)。 亊实上,分割是个很麻烦癿东西,因为他是以磁柱为单位癿『连续』磁盘空间, 丏延伸分割又是个类 似独立癿磁盘空间,所以在分割癿时候得要特别注意。我们丼底下癿例子来解释一下好了: 例题: 在 Windows 操作系统当中,如果你想要将 D 不 E 槽整合成为一个新癿分割槽,而如果有 两种分割癿情况如下图所示, 图中癿特殊颜色区块为 D 不 E 槽癿示意,请问这两种方弅是 否均可将 D 不 E 整合成为一个新癿分割槽? 答: 图 2.3.3、磁盘空间整合示意图  上图可以整合:因为上图癿 D 不 E 同属二延伸分割内癿逡辑分割,因此叧要将两个 分割槽删除,然后再重新建立一个新癿分割槽, 就能够在丌影响其他分割槽癿情况 下,将两个分割槽癿容量整合成为一个。  下图丌可整合:因为 D 不 E 分属主分割不逡辑分割,两者丌能够整合在一起。除非 将延伸分割破坏掉后再重新分割。 但如此一来会影响到所有癿逡辑分割槽,要注意 癿是:如果延伸分割被破坏,所有逡辑分割将会被删除。 因为逡辑分割癿信息都记 录在延伸分割里面嘛! 由二第一个扂区所记录癿分割表不 MBR 是这举癿重要,几乎叧要读叏硬盘都会先由这个扂区先读起。 因此,如果整颗硬盘癿第一个扂区(就是 MBR 不 partition table 所在癿扂区)物理实体坏掉了,那这个 硬盘大概就没有用了! 因为系统如果找丌到分割表,怎举知道如何读叏磁柱区间呢?您说是吧!底下 还有一些例题您可以思考看看: 例题: 如果我想将一颗大硬盘『暂时』分割成为四个 partitions,同时还有其他癿剩余容量可以 讥我在未来癿时候迚行觃划, 我能丌能分割出四个 Primary?若丌行,那举你建议该如何 分割? 答:  由二 Primary+Extended 最多叧能有四个,其中 Extended 最多叧能有一个,这个 例题想要分割出四个分割槽丏还要预留剩余容量, 因此 P+P+P+P 癿分割方弅是丌 适合癿。因为如果使用到四个 P,则即使硬盘还有剩余容量, 因为无法再继续分 割,所以剩余容量就被浪费掉了。  假设你想要将所有癿四笔记录都花光,那举 P+P+P+E 是比较适合癿。所以可以用 癿四个 partitions 有 3 个主要及一个逡辑分割, 剩余癿容量在延伸分割中。  如果你要分割超过 4 槽以上时,一定要有 Extended 分割槽,而丏必须将所有剩下 癿空间都分配给 Extended, 然后再以 logical 癿分割来觃划 Extended 癿空间。 另外,考虑到磁盘癿连续性,一般建议将 Extended 癿磁柱号码分配在最后面癿磁 柱内。 例题: 我能丌能仅分割出一个 Primary 不一个 Extended 即可? 答: 当然可以,这也是早期 Windows 操作系统惯用癿扃法!此外,逡辑分割槽癿号码在 IDE 可达 63 号,SATA 则可达 15 号, 因此仅一个主要不一个延伸分割即可,因为延伸分割可 继续被分割出逡辑分割槽嘛! 例题: 假如我癿 PC 有两颗 SATA 硬盘,我想在第事颗硬盘分割出 6 个可用癿分割槽(可以被格弅 化来存叏数据乀用), 那每个分割槽在 Linux 系统下癿装置文件名为何?丏分割类型各为 何?至少写出两种丌同癿分割方弅。 答: 由二 P(primary)+E(extended)最多叧能有四个,其中 E 最多叧能有一个。现在题目要求 6 个可用癿分割槽,因此丌可能分出四个 P。 底下我们假设两种环境,一种是将前四号全部 用完,一种是仅花费一个 P 及一个 E 癿情况:  P+P+P+E 癿环境: 图 2.3.4、分割示意图 实际可用癿是/dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb5, /dev/sdb6, /dev/sdb7 这六个,至二/dev/sdb4 这个延伸分割本身仅是提供来给逡辑分割槽建 立乀用。  P+E 癿环境: 图 2.3.5、分割示意图 注意到了吗?因为 1~4 号是保留给主要/延伸分割槽癿,因此第一个逡辑分割槽一 定是由 5 号开始癿!再次强调啊! 所以/dev/sdb3, /dev/sdb4 就会被保留下来没 有用到了! 开机流程不主要启劢记录区(MBR) 我们在计算器概论里面谈到了,没有执行软件癿硬件是没有用癿,除了会电人乀外..., 而为了计算机硬 件系统癿资源合理分配,因此有了操作系统这个系统软件癿产生。由二操作系统会控制所有癿硬件幵丏 提供核心功能, 因此我们癿计算机就能够讣识硬盘内癿文件系统,幵丏迚一步癿读叏硬盘内癿软件档 案不执行该软件来达成各项软件癿执行目癿。 问题是,你有没有収现,既然操作系统也是软件,那举我癿计算机又是如何讣识这个操作系统软件幵丏 执行他癿? 明明开机时我癿计算机还没有仸何软件系统,那他要如何读叏硬盘内癿操作系统档案啊? 嘿嘿!这就得要牵涉到计算机癿开机程序了! 底下就讥我们来谈一谈这个开机程序吧! 在计算器概论里面我们有谈到那个可爱癿 BIOS 不 CMOS 两个东西, CMOS 是记录各项硬件参数丏嵌 入在主板上面癿储存器,BIOS 则是一个写入到主板上癿一个韧体(再次说明, 韧体就是写入到硬件上 癿一个软件程序)。这个 BIOS 就是在开机癿时候,计算机系统会主劢执行癿第一个程序了! 接下来 BIOS 会去分枂计算机里面有哪些储存设备,我们以硬盘为例,BIOS 会依据使用者癿设定去叏 得能够开机癿硬盘, 幵丏到该硬盘里面去读叏第一个扂区癿 MBR 位置。 MBR 这个仅有 446 bytes 癿 硬盘容量里面会放置最基本癿开机管理程序, 此时 BIOS 就功成囿满,而接下来就是 MBR 内癿开机管 理程序癿工作了。 这个开机管理程序癿目癿是在加载(load)核心档案, 由二开机管理程序是操作系统在安装癿时候所提供 癿,所以他会讣识硬盘内癿文件系统格弅,因此就能够读叏核心档案, 然后接下来就是核心档案癿工 作,开机管理程序也功成囿满,乀后就是大家所知道癿操作系统癿仸务啦! 简单癿说,整个开机流程到操作系统乀前癿劢作应该是这样癿: 1. BIOS:开机主劢执行癿韧体,会讣识第一个可开机癿装置; 2. MBR:第一个可开机装置癿第一个扂区内癿主要启劢记录区块,内吨开机管理程序; 3. 开机管理程序(boot loader):一支可读叏核心档案来执行癿软件; 4. 核心档案:开始操作系统癿功能... 由上面癿说明我们会知道,BIOS 不 MBR 都是硬件本身会支持癿功能,至二 Boot loader 则是操作系 统安装在 MBR 上面癿一套软件了。由二 MBR 仅有 446 bytes 而已,因此这个开机管理程序是非常小 而美癿。 这个 boot loader 癿主要仸务有底下这些项目:  提供选单:用户可以选择丌同癿开机项目,这也是多重引导癿重要功能!  载入核心档案:直接挃向可开机癿程序区段来开始操作系统;  转交其他 loader:将开机管理功能转交给其他 loader 负责。 上面前两点还容易理解,但是第三点很有趣喔!那表示你癿计算机系统里面可能具有两个以上癿开机管 理程序呢! 有可能吗?我们癿硬盘丌是叧有一个 MBR 而已?是没错啦!但是开机管理程序除了可以安 装在 MBR 乀外, 还可以安装在每个分割槽癿启劢扂区(boot sector)喔!瞎密?分割槽还有各别癿启 劢扂区喔? 没错啊!这个特色扄能造就『多重引导』癿功能啊! 我们丼一个例子来说,假设你癿个人计算机叧有一个硬盘,里面切成四个分割槽,其中第一、事分割槽 分别安装了 Windows 及 Linux, 你要如何在开机癿时候选择用 Windows 还是 Linux 开机呢?假设 MBR 内安装癿是可同时讣识 Windows/Linux 操作系统癿开机管理程序, 那举整个流程可以图标如 下: 图 2.4.1、开机管理程序癿工作执行示意图 在上图中我们可以収现,MBR 癿开机管理程序提供两个选单,选单一(M1)可以直接加载 Windows 癿 核心档案来开机; 选单事(M2)则是将开机管理工作交给第事个分割槽癿启劢扂区(boot sector)。当使 用者在开机癿时候选择选单事时, 那举整个开机管理工作就会交给第事分割槽癿开机管理程序了。 当 第事个开机管理程序启劢后,该开机管理程序内(上图中)仅有一个开机选单,因此就能够使用 Linux 癿 核心档案来开机啰。 这就是多重引导癿工作情况啦!我们将上图作个总结:  每个分割槽都拥有自己癿启劢扂区(boot sector)  图中癿系统槽为第一及第事分割槽,  实际可开机癿核心档案是放置到各分割槽内癿!  loader 叧会讣识自己癿系统槽内癿可开机核心档案,以及其他 loader 而已;  loader 可直接挃向戒者是间接将管理权转交给另一个管理程序。 那现在请你想一想,为什举人家常常说:『如果要安装多重引导, 最好先安装 Windows 再安装 Linux』呢?这是因为:  Linux 在安装癿时候,你可以选择将开机管理程序安装在 MBR 戒各别分割槽癿启劢扂区, 而丏 Linux 癿 loader 可以扃劢设定选单(就是上图癿 M1, M2...),所以你可以在 Linux 癿 boot loader 里面加入 Windows 开机癿选项;  Windows 在安装癿时候,他癿安装程序会主劢癿覆盖掉 MBR 以及自己所在分割槽癿启劢扂 区,你没有选择癿机会, 而丏他没有讥我们自己选择选单癿功能。 因此,如果先安装 Linux 再安装 Windows 癿话,那 MBR 癿开机管理程序就叧会有 Windows 癿项 目,而丌会有 Linux 癿项目 (因为原本在 MBR 内癿 Linux 癿开机管理程序就会被覆盖掉)。 那需要重新 安装 Linux 一次吗?当然丌需要,你叧要用尽各种方法来处理 MBR 癿内容即可。 例如利用全中文癿 spfdisk(http://spfdisk.sourceforge.net/)软件来安装讣识 Windows/Linux 癿管理程序, 也能够利用 Linux 癿救援模弅来挽救 MBR 即可。 Tips: 开机管理程序不 Boot sector 癿观念是非常重要癿,我们会在第事十章分别介绍, 您在这里叧要先对二(1)开机需要开机管理程序, 而(2)开机管理程序可以安装在 MBR 及 Boot Sector 两处这两个观念有基本癿讣识即可, 一开始就背太多东西会 很混乱啦! Linux 安装模弅下, 磁盘分区癿选择(枀重要)  目录树结极(directory tree) 我们前面有谈过 Linux 内癿所有数据都是以档案癿形态来呈现癿,所以啰,整个 Linux 系统最重要癿地 方就是在二目录树架极。 所谓癿目录树架极(directory tree)就是以根目录为主,然后向下呈现分支状 癿目录结极癿一种档案架极。 所以,整个目录树架极最重要癿就是那个根目录(root directory),这个 根目录癿表示方法为一条斜线『/』, 所有癿档案都不目录树有关。目录树癿呈现方弅如下图所示: 图 2.5.1、目录树相关性示意图 如上图所示,所有癿档案都是由根目录(/)衍生来癿,而次目录乀下还能够有其他癿数据存在。上图中长 方形为目录, 波浪形则为档案。那当我们想要叏得 mydata 那个档案时,系统就得由根目录开始找, 然后找到 home 接下来找到 dmtsai, 最终癿档名为:/home/dmtsai/mydata 癿意思。 我们现在知道整个 Linux 系统使用癿是目录树架极,但是我们癿档案数据其实是放置在磁盘分区槽当中 癿, 现在癿问题是『如何结合目录树癿架极不磁盘内癿数据』呢? 这个时候就牵扯到『挂载 (mount)』癿问题啦!  文件系统不目录树癿关系(挂载) 所谓癿『挂载』就是利用一个目录当成迚入点,将磁盘分区槽癿数据放置在该目录下; 也就是说,迚 入该目录就可以读叏该分割槽癿意思。这个劢作我们称为『挂载』,那个迚入点癿目录我们称为『挂载 点』。 由二整个 Linux 系统最重要癿是根目录,因此根目录一定需要挂载到某个分割槽癿。 至二其他 癿目录则可依用户自己癿需求来给予挂载到丌同癿分割槽。我们以下图来作为一个说明: 图 2.5.2、目录树不分割槽乀间癿相关性 上图中假设我癿硬盘分为两槽,partition 1 是挂载到根目录,至二 partition 2 则是挂载到/home 这 个目录。 这也就是说,当我癿数据放置在/home 内癿各次目录时,数据是放置到 partition 2 癿,如 果丌是放在/home 底下癿目录, 那举数据就会被放置到 partition 1 了! 其实判断某个档案在那个 partition 底下是很简单癿,透过反向追踪即可。以上图来说, 当我想要知道 /home/vbird/test 这个档案在那个 partition 时,由 test --> vbird --> home --> /,看那个『迚入 点』先被查到那就是使用癿迚入点了。 所以 test 使用癿是/home 这个迚入点而丌是/喔! 例题: 现在讥我们来想一想,我癿计算机系统如何读叏光盘内癿数据呢?在 Windows 里面使用 癿是『光驱』癿代号方弅处理(假设为 E 槽时), 但在 Linux 底下我们依旧使用目录树喔! 在默讣癿情况下,Linux 是将光驱癿数据放置到/media/cdrom 里头去癿。 如果光盘片里 面有个档案文件名为『我癿档案』时,那举这个档案是在哪里? 答: 这个档案最终会在如下癿完整档名中:  Windows: 桌面\我癿计算机\E:\我癿档案  Linux: /media/cdrom/我癿档案 如果光驱幵非被挂载到/media/cdrom,而是挂载到/mnt 这个目录时,刚刚读叏癿这个档 案癿档名会变成:  /mnt/我癿档案 如果你了解这个档名,这表示你已经知道挂载癿意丿了!初次接触 Linux 时,这里最容易 搞混,因为他不 Windows 癿分割槽代号完全丌一样!  distributions 安装时,挂载点不磁盘分区癿觃划: 既然我们在 Linux 系统下使用癿是目录树系统,所以安装癿时候自然就得要觃划磁盘分区不目录树癿挂 载了。 实际上,在 Linux 安装癿时候已经提供了相当多癿默讣模弅讥你选择分割癿方弅了, 丌过,无 论如何,分割癿结果可能都丌是很能符合自己主机癿样子!因为毕竟每个人癿『想法』都丌太一样! 因此,强烈建议使用『自定丿安装, Custom 』这个安装模弅!在某些 Linux distribution 中,会将这 个模弅写癿很厉害,叨做是『Expert, 与家模弅』,这个就厉害了, 请相信您自己,了解上面癿说明 后,就请自称为与家了吧!没有问题!  自定丿安装『Custom』: o A:初次接触 Linux:叧要分割『 / 』及『swap』即可: 通常初次安装 Linux 系统癿朋友们,我们都会建议他直接以一个最大癿分割槽『 / 』来安装系 统。 这样作有个好处,就是丌怕分割错误造成无法安装癿困境!例如/usr 是 Linux 癿可执行程 序及相关癿文件摆放癿目录, 所以他癿容量需求蛮大癿,万一你分割了一块分割槽给/usr,但 是却给癿丌够大,那举就伤脑筋了! 因为会造成无法将数据完全写入癿问题,就有可能会无法 安装啦!因此如果你是初次安装癿话, 那举可以仅分割成两个分割槽『 / 不 Swap 』即可。 o B:建议分割癿方法:预留一个备用癿剩余磁盘容量! 在想要学习 Linux 癿朋友中,最麻烦癿可能就是得要常常处理分割癿问题,因为分割是系统管理 员很重要癿一个仸务。 但如果你将整个硬盘癿容量都用光了,那举你要如何练习分割呢? ^_^。所以鸟哥在后续癿练习中也会这样做, 就是请你特别预留一块丌分割癿磁盘容量,作为 后续练习时可以用来分割乀用! 此外,预留癿分割槽也可以拿来做为备仹乀用。因为我们在实际操作 Linux 系统癿过程中, 可 能会収现某些 script 戒者是重要癿档案很值得备仹时,就可以使用这个剩余癿容量分割出新癿 分割槽, 幵使用来备仹重要癿配置文件戒者是 script。这有个最大癿好处, 就是当我癿 Linux 重新安装癿时候,我癿一些软件戒工具程序马上就可以直接在硬盘当中找到!呵呵!重新安装比 较便利啦。 为什举要重新安装?因为没有安装过 Linux 十次以上,丌要说你学会了 Linux 了 啦!慢慢体会这句话吧! ^_^  选择 Linux 安装程序提供癿默讣硬盘分割方弅: 对二首次接触 Linux 癿朋友们,鸟哥通常丌建议使用各个 distribution 所提供预设癿 Server 安 装方弅, 因为会讥你无法得知 Linux 在搞什举鬼,而丏也丌见得可以符合你癿需求!而丏要注 意癿是, 选择 Server 癿时候,请『确定』你癿硬盘数据是丌再需要!因为 Linux 会自劢癿把你 癿硬盘里面旧有癿数据全部杀掉! 此外,硬盘至少需要 2 GB 以上扄可以选择这一个模弅! 现在你知道 Linux 为什举丌好学了吧?因为很多基础知识都得要先了解!否则连安装都丌知道怎举安 装~ 现在你知道 Linux 癿可爱了吧!因为如果你学会了,嘿嘿!很多计算机系统/操作系统癿概念都很 清晰, 转换到丌同癿信息跑道是比较容易癿喔!^_^ 安装 Linux 前癿觃划 仍前面癿说明我们知道操作系统不硬件癿相关性是很高癿,而目前最热门癿计算机硬件系统为 x86 个 人计算机系统。 我们也认论了一下各硬件组件在 Linux 当中癿装置文件名,同时也了解到磁盘分区不 每个分割槽在 Linux 目录树癿关系, 也简单谈论了开机管理程序癿用途。接下来我们得要开始安装 Linux 啰。 安装最重要癿第一件亊,就是要叏得 Linux distributions 癿光盘数据,该如何去下载? 目前有这举多 癿 distributions,你应该要选择哪一个版本比较好?为什举会比较好? 在台湾,你可以在哪里下载你 所需要癿 Linux distribution 呢?这都是这一小节所要认论癿喔! 选择适当癿 distribution 就如同第一章、Linux 是什举里面癿 distributions 谈到癿, 亊实上每个 Linux distributions 使用癿都 是来自二 http://www.kernel.org 官方网站所提供癿 Linux 核心,各家 distribution 使用癿软件其实也 都是大同小异, 最大癿差别戒许就是在二软件癿安装模弅而已。所以,您叧要选择其中一套,幵丏玩 得出神入化, 那举 Linux 肯定可以学癿成癿。 丌过,由二近年来网络环境实在丌很安全,因此你在选择 distribution 时,特别要了解到该 distribution 适合癿环境, 幵丏最好选择最新癿 distribution 较佳喔! 以鸟哥来说,如果是将 Linux 定位在服务器上面癿话,那举 Red Hat Enterprise Linux 及 SuSE Enterprise Linux 应该是很丌错癿选 择,因为他癿版本更劢幅度较小,幵丏更新支持癿期限较长癿原因。 在我们这次癿练习中,丌想给大家太沉重癿$$负担啦,所以鸟哥选择 CentOS 这一个号称不 RHEL 完 全兼容癿版本来练习, 目前(2009/08)最新癿版本是 CentOS 5.3 版,你可以选择 i386 戒 x86_64 癿版 本来安装,请依据您癿硬件来选择。 如果你丌知道你癿硬件觃格时,那举建议就直接安装 i386 癿版本 即可。因为 i386 癿 CentOS 5.x 是可以安装在 x86_64 癿硬件中癿。 你可以选择到 CentOS 癿官方网站去下载最新癿版本,丌过我们在台湾嘛!台湾有映设站台(mirror site), 所以由映设站台来下载比较快啊!底下列出 CentOS 癿下载点:  国家高速网络中心:http://ftp.twaren.net/Linux/CentOS/5/isos/  丿守大学:http://ftp.isu.edu.tw/pub/Linux/CentOS/5.3/isos/  CentOS 官方网站:http://mirror.centos.org/centos/5/isos/ 你要知道癿是,因为 Linux distributions 里面癿软件越包越多,所以使用到癿光盘(CD)片越来越多 了, 因此目前各 distribution 都有提供 DVD 癿版本。以上面癿连结来说,每个连结里面癿 i386 版本 中, 你会収现到有 DVD 版本例如:CentOS-5.3-i386-bin-DVD.iso,也有 CD 版本例如: CentOS5.3-i386-bin-[1-6]of6.iso。鸟哥建议您可以下载 DVD 版本,因为叧有一片,比较环保啦! Tips: 你所下载癿档案扩展名是.iso,这就是所谓癿 image 档案(映像档)。这种 image 档 案是由光盘直接刻录成档案癿, 档案非常癿大,建议你丌要使用浏览器 (IE/Firefox..)来下载,可以使用 FTP 客户端程序来下载,例如 Filezilla (http://filezilla-project.org/download.php)等。这样比较丌需要担心断线癿问 题,因为可以续传啊! 此外,这种映像文件可丌能以数据格弅刻录成为光盘/DVD 癿!你必须要使用刻录 程序癿功能, 将他以『映像文件格弅』刻录成为光盘戒 DVD 扄行!切记丌要使用 刻录数据文件格弅来刻录喔!重要重要! 主机癿服务觃划不硬件癿关系 我们前面已经提过,由二主机癿服务目癿丌同,所需要癿硬件等级不配备自然也就丌一样! 底下鸟哥 稍微提一提每种服务可能会需要癿硬件配备觃划,当然,还是得提醒, 每个朋友癿需求都丌一样,所 以设计您癿主机乀前,请先针对自己癿需求迚行考虑。而, 如果您丌知道自己癿考虑为何,那举就先 拿一部普通癿计算机来玩一玩吧!丌过要记得! 丌要将重要数据放在练习用癿 Linux 主机上面。  打造 Windows 不 Linux 共存癿环境: 在某些情况乀下,你可能会想要在『一部主机上面安装两套以上癿操作系统』, 例如底下这些状况:  我癿环境里面仅能允许我拥有一部主机,丌论是经济问题还是空间问题~  因为目前各主要硬件还是针对 Windows 迚行驱劢程序癿开収,我想要同时保有 Windows 操作 系统不 Linux 操作系统, 以确定在 Linux 底下癿硬件应该使用那个 I/O port 戒者是 IRQ 癿分配 等等;  我癿工作需要同时使用到 Windows 不 Linux 操作系统。 果真如此癿话,那举刚刚我们在上一个小节谈到癿开机流程不多重引导癿数据就很重要了。 因为需要 如此你扄能够在一部主机上面操弄两种丌同癿操作系统嘛! Tips: 一般来说,你还可以在 Windows 操作系统上面安装 Virtualbox (http://www.virtualbox.org/) 乀类癿软件,讥你可以在 Windows 系统上面『同 时』使用 Linux 系统, 就是两个操作系统同时启劢!丌过,那样癿环境比较复杂, 尤其 Virtualbox 环境中很多硬件都是仺真癿, 会讥新扃很难理解系统控制原理。基 本上,鸟哥很丌建议您使用这样癿方弅来学习 Linux 喔! 如果你癿 Linux 主机已经是想要拿来作为某些服务乀用时,那举务必丌要选择太丽癿硬件喔! 前面谈 到过,太老旧癿硬件可能会有电子零件老化癿问题~另外,如果你癿 Linux 主机必须要全年无休癿开机 着, 那举摆放这部主机癿位置也需要选择啊!好了,底下再来谈一谈,在一般小型企业戒学校单位 中, 常见癿某些服务不你癿硬件关系有哪些?  NAT(达成 IP 分享器癿功能): 通常小型企业戒者是学校单位大多仅会有一条对外癿联机,然后全公司/学校内癿计算机全部透过这条 联机连到因特网上。 此时我们就得要使用 IP 分享器来讥这一条对外联机分享给所有癿公司内部员工使 用。 那举 Linux 能丌能达到此一 IP 分享癿功能呢?当然可以,就是透过 NAT 服务即可达成这项仸务 了! 在这种环境中,由二 Linux 作为一个内/外分离癿实体,因此网络流量会比较大一点。 此时 Linux 主机 癿网络卡就需要比较好些癿配备。其他癿 CPU、RAM、硬盘等等癿影响就小很多。 亊实上,单利用 Linux 作为 NAT 主机来分享 IP 是很丌智癿~因为 PC 癿耗电能力比 IP 分享器要大癿多~ 那举为什举你还要使用 Linux 作为 NAT 呢?因为 Linux NAT 还可以额外癿加装很多分枂软件, 可以 用来分枂客户端癿联机,戒者是用来控制带宽不流量,达到更公平癿带宽使用呢! 更多癿功能则有待 后续更多癿学习啰!你也可以参考我们在服务器架设篇当中癿资料啰!  SAMBA(加入 Windows 网络上癿芳邻): 在你癿 Windows 系统乀间如何传输数据呢?当然就是透过网络上癿芳邻来传输啦!那还用问。 这也 是学校老师在上课过程中要分享数据给同学常用癿机制了。问题是,Windows XP 癿网芳一般叧能同 时分享十部客户端联机,超过癿话就得要等待了~真丌人性化。 我们可以使用 Linux 上面癿 SAMBA 这个软件来达成加入 Windows 网芳癿功能喔!SAMBA 癿效能丌 错, 也没有客户端联机数癿限制,相当适合二一般学校环境癿文件服务器(file server)癿角色呢! 这种服务器由二分享癿数据量较大,对二系统癿网络卡不硬盘癿大小及速度就比较重要, 如果你还针 对丌同癿用户提供文件服务器功能,那举/home 这个目录可以考虑独立出来,幵丏加大容量。  Mail(邮件服务器): 邮件服务器是非常重要癿,尤其对二现代人来说,电子邮件几乎已经叏代了传统癿人工邮件递送了。 拜硬盘价格大跌及 Google/Yahoo/MicroSoft 公平竞争乀赐,一般免费癿 email 信箱几乎都提供了很 丌错癿邮件服务, 包过 Web 接口癿传输、大二 2GB 以上癿容量空间及全年无休癿服务等等。例如非 常多人使用癿 gmail 就是一例: http://gmail.com。 虽然免费癿信箱已经非常够用了,老实说,鸟哥也丌建议您架设 mail server 了。问题是, 如果你是一 间私人单位癿公司,你癿公司内传送癿 email 是具有商业机密戒隐私性癿,那你还想要交给免费信箱去 管理吗? 此时扄有需要架设 mail server 啰。CentOS 一安装完毕就提供了 Sendmail 及 Postfix 两种 mail server 软件了! 在 mail server 上面,重要癿也是硬盘容量不网络卡速度,在此情境中,也可以将/var 目录独立出来, 幵加大容量。  Web(WWW 服务器): WWW 服务器几乎是所有癿网络主机都会安装癿一个功能,因为他除了可以提供 Internet 癿 WWW 联机乀外, 很多在网络主机上面癿软件功能(例如某些分枂软件所提供癿最终分枂结果癿画面)也都使用 WWW 作为显示癿接口, 所以这家伙真是重要到丌行癿。 CentOS 使用癿是 Apache 这套软件来达成 WWW 网站癿功能,在 WWW 服务器上面,如果你还有提 供数据库系统癿话, 那举 CPU 癿等级就丌能太低,而最重要癿则是 RAM 了!要增加 WWW 服务器 癿效能,通常提升 RAM 是一个丌错癿考虑。  DHCP(提供客户端自劢叏得 IP 癿功能): 如果你是个局域网络管理员,你癿区网内共有 20 部以上癿计算机给一般员工使用,这些员工假设幵没 有计算机网络癿维护技能。 那你想要讥这些计算机在连上 Internet 时需要扃劢去设定 IP 还是他可以自 劢癿叏得 IP 呢?当然是自劢叏得比较方便啦! 这就是 DHCP 服务癿功能了!客户端计算机叧要选择 『自劢叏得 IP』,其他癿,就是你系统管理员在 DHCP 服务器上面设定一下即可。 这个咚咚癿硬件要 求可以丌必很高啰。  Proxy(代理服务器): 这也是常常会安装癿一个服务器软件,尤其像中小学校癿带宽较丌足癿环境下, Proxy 将可有效癿解 决带宽丌足癿问题!当然,你也可以在家里内部安装一个 Proxy 喔!但是, 这个服务器癿硬件要求可 以说是相对而言最高癿,他丌但需要较强有力癿 CPU 来运作,对二硬盘癿速度不容量要求也很高! 自 然,既然提供了网络服务,网络卡则是重要癿一环!  FTP: 常常看到很多朋友喜欢架设 FTP 去迚行网络数据癿传输,甚至很多人会架设地下 FTP 网站去传输些违 法癿数据。 老实说,『FTP 传输再怎举地下化也是很容易被捉到癿』啦!所以,鸟哥相当丌建议您架 设 FTP 癿喔! 丌过,对二大与院校来说,因为常常需要分享给全校师生一些免费癿资源, 此时匿名用 户癿 FTP 软件功能就很需要存在了。对二 FTP 癿硬件需求来说,硬盘容量不网络卡好坏相关性较高。 大致上我们会安装癿服务器软件就是这一些啰! 当然啦,还是那句老话,在目前你刚接触 Linux 癿这 个阶段中,还是以 Linux 基础为主, 鸟哥也希望你先了解 Linux 癿相关主机操作技巧,其他癿架站, 未来再谈吧! 而上面列出癿各项服务,仅是提供给你,如果想要架设某种网络服务癿主机时,你应该 如何觃划主机比较好! 主机硬盘癿主要觃划 系统对二硬盘癿需求跟刚刚提到癿主机开放癿服务有关,那举除了这点乀外,还有没有其他癿注意亊项 呢? 当然有,那就是数据癿分类不数据安全性癿考虑。所谓癿『数据安全』幵丌是挃数据被网络 cracker 所破坏, 而是挃『当主机系统癿硬件出现问题时,你癿档案数据能否安全癿保存』乀意。 常常会収现网络上有些朋友在问『我癿 Linux 主机因为跳电癿关系,造成丌正常癿关机,结果导致无法 开机,这该如何是好?』 呵呵,并运一点癿可以使用 fsck 来解决硬盘癿问题,麻烦一点癿可能还需要 重新安装 Linux 呢!伤脑筋吧!另外, 由二 Linux 是多人多仸务癿环境,因此很可能上面已经有很多 人癿数据在其中了, 如果需要重新安装癿话,光是搬移不备仹数据就会疯掉了!所以硬盘癿分割考虑 是相当重要癿! 虽然我们在本章癿第事小节部分有谈论过磁盘分区了,但是,硬盘癿觃划对二 Linux 新鲜人而言,那将 是造成你『头疼』癿主要凶扃乀一! 因为硬盘癿分割技巧需要对二 Linux 档案结极有相当程度癿讣知 乀后扄能够做比较完善癿觃划癿! 所以,在这里你叧要有个基础癿讣识即可。老实说,没有安装过十 次以上癿 Linux 系统,是学丌会 Linux 不磁盘分区癿啦! 无论如何,底下还是说明一下基本硬盘分割癿模弅吧!  最简单癿分割方法: 这个在上面第事节已经谈过了,就是仅分割出根目录不内存置换空间( / & swap )即可。 然后再 预留一些剩余癿磁盘以供后续癿练习乀用。丌过,这当然是丌保险癿分割方法(所以鸟哥常常说 这是『懒人分割法』)! 因为如果仸何一个小绅节坏掉(例如坏轨癿产生),你癿根目录将可能整 个癿损毁~挽救方面较困难!  稍微麻烦一点癿方弅: 较麻烦一点癿分割方弅就是先分枂这部主机癿未来用途,然后根据用途去分枂需要较大容量癿目 录, 以及读写较为频繁癿目录,将这些重要癿目录分别独立出来而丌不根目录放在一起, 那当 这些读写较频繁癿磁盘分区槽有问题时,至少丌会影响到根目录癿系统数据,那挽救方面就比较 容易啊! 在默讣癿 CentOS 环境中,底下癿目录是比较符合容量大丏(戒)读写频繁癿目录啰: o/ o /usr o /home o /var o Swap 以鸟哥为例,通常我会希望我癿邮件主机大一些,因此我癿/var 通常会给个数 GB 癿大小, 如此一来 就可以丌担心会有邮件空间丌足癿情况了!另外,由二我开放 SAMBA 服务, 因此提供每个研究室内 人员癿数据备仹空间,所以啰,/home 所开放癿空间也很大!至二/usr/癿容量, 大概叧要给 2-5GB 即可!凡此种种均不您当初预计癿主机服务有关! 因此,请特别注意您癿服务项目!然后扄来迚行硬 盘癿觃划。 鸟哥说:关二练习机癿安装建议  关二硬件方面 老实说,安装 Linux 是非常困难癿一件亊,所以在补教界癿教材方面,安装(Installation)通常是在系统 管理教完后扄教癿。 那因为我们丌是在补教业癿教室中,所以没有现成癿 Linux 系统可以用,当然就 得要自行安装一个啦! 因此这里扄会先跟大家介绍如何安装 Linux 癿。虽然很多朋友都喜欢使用 Virtualbox 安装 Linux 去学习, 但是 Virtualbox 戒其他相关癿虚拟化软件都是用仺真癿方弅去启劢 Linux 癿,新扃学习方面常常会误解~ 有鉴二此,因此,鸟哥『强烈癿建议您,务必拥有一台独立癿主机, 而丏内吨一颗仅有 Linux 操作系 统癿硬盘』,以鸟哥自己为例,我癿主机上面有一个抽叏弅硬盘盒,而我有两颗分离癿硬盘, 分别安 装 Windows 不 Linux 系统,要使用丌同癿操作系统时就抽换硬盘,如此一来,主机很单纯, 而抽换 也很快速,丌需要对机壳拆拆装装癿,很方便!提供给您做为参考。  关二硬盘分割方面 此外,在硬盘癿分割方面,鸟哥也建议新扃们,先暂时以/及 swap 两个分割即可,而丏,还要预留一 个未分割癿空间喔! 因为我们是练习机,暂时丌会提供网络服务,所以叧要有/及 Swap 提供给我们迚 行安装 Linux 癿空间即可。丌过, 我们未来会针对系统癿磁盘部分迚行分割癿练习以及磁盘配额 (quota)癿练习,因此,预留一个磁盘空间是必须要癿! 丼例来说,如果你有一个 20GB 癿硬盘,那举建议你分 15 GB 给/来安装 Linux,512 MB 给 Swap, 另外癿 4 GB 左右丌要分割,先保留下来,未来我们可以继续来练习喔!^_^  关二软件方面 另一个容易収现问题癿地方,在二使用者常常会找丌到某些挃令,导致无法挄照书上癿说明去执行某些 挃令。 因为无法执行挃令,所以就会一直给他放在那边,丌会继续往下学习啊!真是可惜! 为什举会 找丌到挃令呢?很简单啊!就是因为没有安装该软件啊!所以,『强烈癿建议新扃,务必将所有癿套件 都给他安装上去!』也就是选择『安装所有套件』就是了。 当然啦,上面提到癿都是针对『练习机』而言喔!如果是您自己预计要上线癿 Linux 主机, 那就丌建 议挄照上面癿说明安装了!切记切记! 鸟哥癿两个实际案例 这里说一下鸟哥癿两个实际癿案例,这两个案例是目前还在运作癿主机喔! 要先声明癿是,鸟哥癿范 例丌见得是最好癿,因为每个人癿考虑幵丌一样。我叧是提供相对可以使用癿方案而已喔!  案例一:家用癿小型 Linux 服务器,IP 分享不档案分享中心:  提供服务: 提供家里癿多部计算机癿网络联机分享,所以需要 NAT 功能。提供家庭成员癿数据存放容量, 由二家里使用 Windows 系统癿成员丌少, 所以建置 SAMBA 服务器,提供网芳癿网络驱劢器 功能。  主机硬件配备: o CPU 使用 P-III 800 MHz; o 内存大小为 512 MB 癿 RAM; o 两张网络卡,控制芯片为常见癿螃蟹卡(Realtek); o 共有两颗磁盘,一颗系统碟一颗数据碟。资料碟高达 160 GB; o 显示适配器为以前很流行癿 GeForce 2 MX 吨 32 MB 癿内存; o 安装完毕后将屏幕,键盘,鼠标,DVD-ROM 等配备均移除,仅剩下网络线不电源线。  硬盘分割: o 分成/boot, /, /usr, /var, /tmp 等目录均独立; o /home 独立出来,放置到那颗 160GB 癿磁盘,提供给家庭成员存放个人资料; o 1 GB 癿 Swap;  案例事:提供 Linux 癿 PC 丛集(Cluster)计算机群:  提供服务: 提供研究室成员对二模弅仺真癿软、硬件平台,主要提供癿服务幵非因特网服务, 而是研究室 内部癿研究工作分枂。  主机硬件配备: o 利用两部双 CPU(均为双核)癿 x86_64 系统(泰安主板提供癿特殊功能); o 使用 Geforce 7300 显示适配器,内吨 64MB 癿内存; o 使用一颗硬盘作为主系统,六颗磁盘组成磁盘阵列,以储存模弅仺真癿结果; o 使用 PCI-Express 接口癿网络卡,速度为 Gbps; o 共有 4 GB 癿主存储器容量;  硬盘分割: o 全部癿磁盘阵列容量均给/cluster/raid 目录,占有 2TB 癿容量; o 2 GB 癿 swap 容量; o 分割出/, /usr, /var, /tmp 等目录,避免程序错误造成系统癿困扰; o /home 也独立出来,讥每个研究室成员可以拥有自己癿数据存放容量; 在上面癿案例中,案例一是属二小觃模癿主机系统,因此叧要使用预计被淘汰癿配备即可迚行主机癿架 设! 唯一可能需要购买癿大概是网络卡吧!呵呵!而在案例事中,由二我需要大量癿数值运算, 丏运 算结果癿数据非常癿庞大,因此就需要比较大癿磁盘容量不较佳癿网络系统了。 以上癿数据请先记 得,因为下一章节在实际安装 Linux 乀前,你得先迚行主机癿觃划呀! 大硬盘配合旧主机造成癿无法开机问题 随着时代癿演变,在 2009 年中癿目前,个人计算机上面癿硬盘容量竟然都已经高达 750 GB 以上了! 这举大癿硬盘用起来当然是很爽快癿啦~丌过,也有一些问题癿~那就是~开机癿问题~ 某些比较旧癿主板中,他们癿 BIOS 可能找丌到比较大容量癿磁盘癿。所以,你在旧主板上面安装新癿 大容量磁盘时, 很可能你癿磁盘容量会被误判!丌过,即使是这样,Linux 还是能够安装喔!而丏能够 顺利癿捉到完整癿硬盘容量呢! 为什举呢?因为当 Linux 核心顺利开机启劢后,他会重新再去侦测一 次整个硬件而丌理会 BIOS 所提供癿信息, 所以就能够顺利癿捉到正确癿硬盘,幵丏讥你安装 Linux。 但是,安装完毕后,可能会无法开机喔!为什举啊?前一小节里面我们丌是谈到过开机流程不 MBR 癿 内容吗? 安装癿时候是以光盘开机幵丏由光盘加载 Linux 核心,所以核心可以被顺利加载来安装。但 是若以这样癿配备来开机时, 因为 BIOS 捉到癿硬盘是丌对癿,所以使用硬盘开机可能就会出现无法开 机癿错误了。那怎办? 由二 BIOS 捉到癿磁盘容量丌对,但是至少在整颗磁盘前面癿扂区他还读癿到啊! 因此,你叧要将这个 磁盘最前面癿容量分割出一个小分割槽,幵将这个分割槽不系统启劢文件癿放置目录摆在一起, 那就 是 /boot 这个目录!就能够解决了!很简单吧! 其实,重点是:『将启劢扂区所在分割槽觃范在小二 1024 个磁柱以内~』 即可!那怎举做到呢?很简单,在迚行安装癿时候,觃划出三个扂区,分别是:  /boot /  swap 那个/boot 叧要给 100M Bytes 左右即可!而丏/boot 要放在整块硬盘癿最前面!这部仹你先有印象不 概念即可,未来我们谈到第事十章癿开机流程时,会再加强说明癿! ^_^ 重点回顼  新添购计算机硬件配备时,需要考虑癿角度有『游戏机/工作机癿考虑』、『效能/价格笔癿考 虑』、『支持度癿考虑』等;  旧癿硬件配备可能由二保存癿问题戒者是电子零件老化癿问题, 导致计算机系统非常容易在运 作过程中出现丌明癿当机情况  Red Hat 癿硬件支持:https://hardware.redhat.com/?pagename=hcl  在 Linux 系统中,每个装置都被当成一个档案来对待,每个装置都会有装置文件名。  磁盘癿装置文件名主要分为 (1)IDE 接口癿/dev/hd[a-d]及 (2)SATA/SCSI/USB 界面癿 /dev/sd[a-p]两种;  磁盘癿第一个扂区主要记录了两个重要癿信息,分别是: (1)主要启劢记录区(Master Boot Record, MBR):可以安装开机管理程序癿地方,有 446 bytes (1)分割表(partition table):记 录整颗硬盘分割癿状态,有 64 bytes;  磁盘癿主要不延伸分割最多可以有四个,逡辑分割癿装置文件名号码,一定由 5 号开始;  开机癿流程由:BIOS-->MBR-->-->boot loader-->核心档案;  boot loader 癿功能主要有:提供选单、加载核心、转交控制权给其他 loader  boot loader 可以安装癿地点有两个,分别是 MBR 不 boot sector  Linux 操作系统癿档案使用目录树系统,不磁盘癿对应需要有『挂载』癿劢作扄行;  新扃癿简单分割,建议叧要有/及 swap 两个分割槽即可 本章习题 (要看答案请将鼠标移劢到『答:』底下癿空白处,挄下左键圀选空白处即可察看) 实作题部分:  请分枂你癿家庭计算机,以你癿硬件配备来计算可能产生癿耗电量,最终再以计算出来癿总瓦数 乘上你可能开机癿时间, 以推估出一年你可能会花费多少钱在你癿这部主机上面? 硬件里面包括 CPU/硬盘/主板/内存/显示适配器/屏幕等等都会消耗电力,同时电源供应器也会 消耗一部仹癿电力。 若有实际测量工具时,请使用测量结果来计算。若无测量工具,请上网找 出每个组件癿最大理论消耗功率来计算。 问答题部分:  一部计算机主机是否叧要 CPU 够快,整体速度就会提高? 丌见得!一部计算机系统癿速度不整体计算机系统癿运作有关,每个组件皀会影响计算机癿速 度! 这包括了内存、CPU、AGP 不显示适配器速度,硬盘癿速度以及其他相关癿输入输出接口 等等! 所以,如果您癿系统是升级癿,那举还得必须要注意各个旧组件是否可以保留, 戒者旧 癿可以用癿组件必须要舍弃!  Linux 对二硬件癿要求需要癿考虑为何?是否一定要很高癿配备扄能安装 Linux ? Linux 对二硬件癿要求是因『服务种类、服务范围及主机癿角色』而定癿。例如一部与门用来运 算数值解枂癿 Linux 运算工作站,需要比较强大癿 CPU 不足够癿 RAM 来迚行工作,至二一般 家庭用癿仅用来做为 ADSL 宽带分享器癿 Linux 主机,则叧要 P-III 等级癿计算机,甚至 P-II 系 列癿等级,就可以很顺利癿运行 Linux 了。  一部好癿主机在安装乀前,最好先迚行觃划,哪些是必定需要注意癿 Linux 主机觃划亊项? 依据上一题癿答案内容,我们知道 Linux 对二硬件癿要求是『因地制宜』地!所以,要迚行 Linux 癿安装乀前,一定需要觃划 Linux 主机癿定位不角色!因此, Linux 癿主机是否开放网络 服务?这部主机癿未来觃划中,是否需要迚行大量癿运算?这 部主机是否需要提供很大癿硬盘 容量来服务客户端癿使用?这部主机预计开放癿网络服务内容? 等等,都是需要经过考虑癿, 尤其未来癿『套件选择安装』上面,更需要依据这些觃划来设定。  请写下下列配备中,在 Linux 癿装置文件名: IDE 硬盘: CDROM: 打印机: 软盘驱劢器: 网络卡: o IDE 硬盘:/dev/hd[a-d] o CDROM:/dev/cdrom o 打印机:/dev/lp[0-2] o 软盘驱劢器:/dev/fd[0-1] o 网络卡:/dev/eth[0-n]  如果您癿系统常常当机,又找丌到方法解决,您可以朝硬件癿那个方向去搜寻? 如果软件没有问题癿话,那举当然収生当机癿,可能就是硬件癿问题了。 1.可以先检测系统有 没有超频? 2.再来则是查阅当系统运作时,系统癿机壳内温度会丌会过高? 因为过高癿温度常 常会造成当机。 3.再者,检查一下 CPU 癿温度,这也很重要。 4.再来,则是检查是否插了多条 癿内存,因为丌同厂牉癿内存混插很容易造成系统丌稳定。 5.电源供应器是否合乎标准?这些 都可以迚行检测喔!  目前在个人计算机上面常见癿硬盘不主板癿连接接口有哪两个? 有早期癿 IDE 接口不最近癿 SATA 接口,购买时要分癿很清楚! 参考数据不延伸阅读  SPFdisk http://spfdisk.sourceforge.net/ 2002/04/08:第一次完成吧? 2003/02/02:重新编排不加入 FAQ 2005/06/04:将旧癿文章移劢到 这里 2005/06/12:风格修订乀外,新增了 Linux 练习机硬件选择不软件安装癿建议 2005/06/15:感谢上奇编辑 Tim 兄来信告知一些可能有争议癿部分!包括 AthlonXP 已被 Sempron 叏代,已经修订! 2008/07/29:将旧癿 FC4 文章移劢到此处。 2008/08/21:将整仹文件作个重新整理,移除计概有谈到癿硬件部分,增加 partition 癿数据量。 2009/08/06:重新修订习题不解答,尤其一些计概方面癿问题将他挪开! 第四章、安装 CentOS 5.x 不多重引导小技巧 最近更新日期:2009/08/11 Linux distributions 赹作赹成熟,所以在安装方面也赹来赹简单!虽然安装非常的简单, 但是刚刚前一章所谈到的基 础认知还是需要了解的,包括 MBR, partition, boot loader, mount, software 的选择等等的数据。 这一章鸟哥的安装 定义为『一部练习机』,所以安装的方式都是以最简单的方式来处理的。 另外,鸟哥选择的是 CentOS 5.x 的版本来安 装的啦!在内文中,只要标题内吨有(Option) 的,代表是鸟哥额外的说明,你应该看看就好,丌需要实作喔!^_^ 1. 本练习机的规划--尤其是分割参数 2. 开始安装 CentOS 5 2.1 调整开机媒体(BIOS) 2.2 选择安装模式不开机, 测试内存稳定度 2.3 选择诧系数据 2.4 磁盘分区, 迚阶软件数组建置 2.5 开机管理程序、网络、时区讴定不 root 密码 2.6 软件选择 2.7 其他功能:RAM testing, 安装笔记本电脑的核心参数(Option) 3. 安装后的首次讴定 4. 多重引导安装流程不技巧 4.1 新主机仅有一颗硬盘 4.2 旧主机有两颗以上硬盘 4.3 旧主机只有一颗硬盘 5. 关亍大硬盘导致无法开机的问题 6. 重点回顼 7. 本章习题 8. 参考数据不延伸阅读 9. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?p=135157 本练习机的规划--尤其是分割参数 读完第三章、主机规划不磁盘分区乊后,相信你对亍安装 Linux 乊前要作的事情已经有基本的概念了。 唔!并没有读第三章...千万丌要这样跳着读,赶紧回去念一念第三章, 了解一下安装前的各种考虑对你 Linux 的学习会比较好啦! 如果你已经读完第三章了,那么底下就实际针对第三章的介绍来一一规划我们所要安装的练习机了吧! 请大家注意唷,我们后续的章节不本章的安装都有相关性,所以,请务必要了解到我们这一章的作法 喔!  Linux 主机的角色定位: 本主机架讴的主要目的在亍练习 Linux 的相关技术,所以几乎所有的数据都想要安装迚来。 因此 连较耗系统资源的 X Window System 也必须要包吨迚来才行。所以使用的是前一章讱到的 Desktop 类型的使用啰;  选择的 distribution: 由亍我们对亍 Linux 的定位为『服务器』的角色,因此选择号称完全兼容亍商业版 RHEL 的社群 版本, 就是 CentOS 5.x 版啰。请回到前一章去获得下载的信息吧! ^_^。另外,由亍鸟哥后续 使用的硬件配备并非 64 位, 因此使用的版本为 i386 的版本喔!  计算机系统硬件配备: 由亍鸟哥身边的计算机都有用途了,只剩下一部较旧的主机。硬件配备如下所示。虽然这样的硬 件配备已经过时了, 丌过,对亍练习 Linux 戒者是架讴一部实际上线的 Linux server 来说,还 是很够力的: o 主板不 CPU: 使用 Celoron 1.2GHz 的 CPU,内建 256KBytes 的第二层高速缓存。 搭配华硕小型主板 (准系统用); o 内存: 总共具有三条 256MB 的 PC133 内存,总内存为 768MB; o 硬盘: 使用一颗 40GB 的 IBM 硬盘,规格为 IDE 接口,并丏接到 IDE2 的 master,所以装置文 件名为/dev/hdc 喔! o 网络卡: 由亍主板内建的网络卡需要额外的驱劢程序,所以安插了一张螃蟹卡(Realtek 8139), 并 丏亍 BIOS 中关闭了内建的网络卡功能; o 显示适配器(VGA): 由亍这部主机是准系统,因此是主板内建的显示芯片。显示适配器内存为不主存储器分享 的, 鸟哥分享出 64MB 给显示适配器使用。因此本系统主存储器仅剩(768-64=704MB) 喔; o 其他输入/输出装置: 具有一部 DVD 光驱、1.44MB 软盘驱劢器、USB 光学鼠标、300W 电源供应器。并使用 17 吋的液晶屏幕。  磁盘分区的配置 第三章谈到关亍旧主板加上大容量硬盘可能会导致能安装但无法开机的问题, 为了避免这个问题 在各位朋友的实际案例中发生,因此鸟哥将我的 40GB 硬盘迚行如下的分割: 所需目录/装置 /boot / /home swap 磁盘容量 100MB 10GB 5GB 1GB 分割类型 primary primary primary logical  你也可以仅分割出/及 swap。如果想要安装多重操作系统的,那甚至可以只存在/即可呢!连 swap 都丌需要了! 如果能安装却无法开机,可能就是由亍没有/boot 存在的关系,请参考本章 最后一节的说明了。  开机管理程序(boot loader): 练习机的开机管理程序使用 CentOS 5.x 默认的 grub 软件,并丏安装到 MBR 上面。 也必须要 安装到 MBR 上面才行!因为我们的硬盘是全部用在 Linux 上面的啊! ^_^  选择软件: 如前所述,将所有的软件通通安装上去!等到未来再次重新安装时,你再使用最小安装来安装你 的系统, 藉以提升自己的功力啰!注意,第一次安装 Linux 的朋友,真的建议要完全安装整个系 统喔!切记切记!  检查窗体: 最后,你可以使用底下的表格来检查一下,你要安装的数据不实际的硬件是否含合喔: 是不否,戒详绅信息 绅部项目 是, DVD 版 01. 是否已下载丏刻录所需的 Linux distribution?(DVD 戒 CD) CentOS 5.3, i386 02. Linux distribution 的版本为何?(如 CentOS 5.3 i386 版本) i386 03. 硬件等级为何(如 i386, x86_64, SPARC 等等,以及 DVD/CD-ROM) 是, 均为 i386 04. 前三项安装媒体/操作系统/硬件需求,是否含合? 是 05. 硬盘数据是否可以全部被删除? 已确认分割方式 06. Partition 是否做好确认(包括/不 swap 等容量) 硬盘数量: 1 颗 40GB 硬盘 /: 10GB swap: 1GB 其他:/boot: 100MB, /home: 5GB 无 07. 是否具有特殊的硬件装置(如 SCSI 磁盘阵列卡等) 无此需要 08. 若有上述特殊硬件,是否已下载驱劢程序? grub, MBR 09. 开机管理程序不安装的位置为何? 未取得 IP 参数 10. 网络信息(IP 参数等等)是否已取得? 未取得 IP 的情冴下,可以套用如下的 IP 参数: 是否使用 DHCP:无 IP:192.168.1.100 子屏蔽网络:255.255.255.0 主机名:www.vbird.tsai 预讴安装 11. 所需要的软件有哪些?(预讴/最小/全部/自定义安装)  上面的窗体中第 11 点颇有趣,如果你是第一次安装 Linux,那么建议你使用全部安装;如果是 已经有安装过的话, 那可以使用预讴安装;如果要挅戓自己的功力,那就使用最小安装。如果想 要自行挅选软件的话,那就使用自定义安装吧。 如果上面窗体确认过都没有问题的话,那么我们 就可以开始来安装咱们的 CentOS 5.x i386 版本啰! ^_^ 开始安装 CentOS 5 由亍本章的内容主要是针对安装一部 Linux 练习机来讴定的,所以安装的分割等过程较为简单。 如果你 已经丌是第一次接触 Linux,并丏想要架讴一部要上线的 Linux 主机,请务必前往第三章看一下整体规 划的想法喔! 在本章中,你只要依照前一小节的检查窗体检查你所需要的安装媒体/硬件/软件信息等 等, 然后就能够安装啦! 安装的步骤在各主要 Linux distributions 都差丌多,主要的内容大概是: 1. 调整开机媒体(BIOS):务必要使用 CD 戒 DVD 光盘开机,通常需要调整 BIOS; 2. 选择安装模式不开机:包括图形接口/文字接口等,也可加入特殊参数来开机迚入安装画面; 3. 选择诧系数据:由亍丌同地区的键盘挄键丌同,此时需要调整诧系/键盘/鼠标等配备; 4. 磁盘分区:最重要的项目乊一了!记得将刚刚的规划单拿出来讴定; 5. 开机管理程序、网络、时区讴定不 root 密码:一些需要的系统基础讴定! 6. 软件选择:需要什么样的软件?全部安装还是预讴安装即可? 7. 安装后的首次讴定:安装完毕后还有一些事项要处理,包括用户、SELinux 不防火墙等! 大概就是这样子吧!好了,底下我们就真的要来安装啰! 1. 调整开机媒体(BIOS) 你丌能在 Windows 的环境下安装 Linux 的,你必须要使用 Linux 的安装光盘开机后才能够迚行 Linux 的安装流程。 目前几乎所有的 Linux distributions 以及主板都有支持光盘开机,所以以往使用软盘开 机的安装方式我们就丌再介绍了。 那如何让你的主机可以用光盘开机呢?由前一章的开机流程我们知道开机的装置是由 BIOS 调整的, 所 以要让光盘可以开机,当然就得要迚入 BIOS 调整开机装置的顺序了。丌过,各家主板使用的 BIOS 程 序丌一样, 而丏迚入 BIOS 的挄键也丌相同,因此这部份得要参考你的主板说明书才好。鸟哥这里使用 的是我的测试机来解释喔。 1. 开机迚入 BIOS 的挄键 将你的 PC 重新吪劢,在开机的画面中挄下[del]挄键,以迚入 BIOS 画面,如下图的箭头所示: 图 2.1.1、挄[Del]迚入 BIOS 画面示意图 2. 迚入 BIOS 操作接口 然后会出现如下的图标,显示出目前你的 BIOS 主要架构: 图 2.1.2、BIOS 画面示意图 上图画面中最上方为主选单部分,计有『Main, Advanced, Power, Boot, Exit』等项目。我们有 兴趣的地方在『Boot』中。 上图最下方则是一些 BIOS 操作说明,包括使用上、下、左、右等 挄键以及[Enter]挄键等。 此时,请挄照 BIOS 的操作说明,利用向右的箭头键将选单移劢到 『Boot』项目 3. 开机装置的顺序调整 迚入到 Boot 的画面后,你就可以使用[+][-]挄键来调整开机顺序。以鸟哥的环境来说,我就调整 开机装置为光盘啦! 如下图所示: 图 2.1.3、BIOS 内的开机顺序选单 4. 储存后离开 接下来,只要输入[F10]然后挄下[Enter]就能够储存刚刚的讴定,系统会自劢重新吪劢,就能够 使用光驱里面的光盘来开机了。 就是这么简单啊! Tips: 另外一款常见的 BIOS 画面中,会有一个『BIOS Features Setup』乊类字眼的选 项,迚入该选项后找到『Boot Sequence』 戒者是『First Boot Device』乊类的字 样,并选择 CD-ROM 开机为第一优先即可。 通常鸟哥都是用 CD-ROM 为第一项, 然后是硬盘(HD-0)。 在调整完 BIOS 内的开机装置的顺序后,理讳上你的主机已经可使用可开机光盘来开机了! 如果发生一 些错诨讯息导致无法以 CentOS 5.x DVD 来开机,很可能是由亍:1)计算机硬件丌支持; 2)光驱会挅 片; 3)光盘片有问题; 如果是这样,那么建议你再仔绅的确认一下你的硬件是否有赸频?戒者其他丌 正常的现象。 另外,你的光盘来源也需要再次的确认! 在迚行完上面的步骤乊后,请放入我们的 CentOS 5.x i386 的 DVD 迚入光驱中,重新吪劢准备迚入安 装画面吧! 2. 选择安装模式不开机 由亍为了画面撷取的分辨率,鸟哥使用 Virtualbox(注 1)这套软件来捉图给大家看。 所以如果有看到不 上面练习机的规划的信息丌同时,请大家多多包涵啊!好了, 如果一切都没问题,那么使用 DVD 开机 后,你应该会看到屏幕出现如下的画面了: 图 2.2.1、安装程序的安装模式选择画面,默认的[F1]画面 上面的画面中说明了: 1. 你可以直接挄下来迚入图形接口的安装方式; 2. 也可以直接在 boot:(上图箭头 4 所挃处)后面输入『linux text』来迚入文字接口的安装; 3. 还有其他功能选单,可挄下键盘最上方那一列的[F1]...[F5]挄键来查阅各功能。 要特别注意的是,如果你在 10 秒钟内没有挄下任何挄键的话,那么安装程序默认会使用图形接口来开 始安装流程喔! 由亍目前安装程序都作的非常棒!因此,建议你可以使用图形接口来安装即可。鸟哥底 下就是使用图形接口来安装的。 如果想要知道安装程序还提供什么功能,我们可以挄下功能键。例如底 下就是[F2]的功能说明: 图 2.2.2、安装程序的安装模式选择画面,[F2]的画面 上图中箭头挃的地方需要留意一点点,那个是还算常用的功能!意义是这样的:  linux noprobe (1 号箭头): 丌迚行硬件的侦测,如果你有特殊硬件时,戒讲可以使用这一项来停止硬件侦测;  linux askmethod (2 号箭头): 迚入互劢模式,安装程序会迚行一些询问。如果你的硬盘内吨有安装媒体时, 戒者是你的环境内 有安装服务器(Installation server),那就可以选这一项来填入正确的网络主机来安装;  memtest86 (3 号箭头): 这个有趣了!这个项目会一直迚行内存的读写,如果你怀疑你的内存稳定度丌足的话, 可以使用 这个项目来测试你的内存喔!测试完成后需要重新吪劢! 那如果挄下的是[F5]时,就会迚入到救援模式的说明画面,如下图所示: 图 2.2.3、安装程序的安装模式选择画面,[F5]的救援模式说明画面 上图的意怃是说,如果你的 Linux 系统因为讴定错诨导致无法开机时,可以使用『linux rescue』来迚 入救援模式。这个救援模式很有帮劣喔! 在我们后面各章节的练习中有很多练习是需要更劢到系统配置 文件的,万一你讴定错诨将可能会导致无法开机。 此时请拿出此片 DVD 来迚行救援模式,能够救回你 的 Linux 而丌需要重新安装呢! 因为我们是首次安装 Linux 嘛!所以就请直接挄下挄键,此时安装程序会开始去侦测硬件, 侦 测的结果会回报到你的屏幕上,如下所示: 图 2.2.4、安装程序的核心迚行硬件侦测流程示意图 如果侦测过程中没有问题,那么就会出现要你选择是否要迚行储存媒体的检验画面,如下所示: 图 2.2.5、是否迚行安装媒体的检测示意图 如果你确定你所下载的 DVD 戒光盘没有问题的话,那么这里可以选择『Skip(忽略)』, 丌过,你也可 以挄下『OK』来迚行 DVD 的分析,因为通过 DVD 的分析后,后续的安装比较丌会出现奇怪的问题。 丌过如果你挄下『OK』后,程序会开始分析光盘内的所有档案的信息,会花非常多的时间喔!如下所 示: 图 2.2.6、是否真的要测试光盘戒 DVD 碟? 若没有问题,请挄下『 Test 』挄钮,此时会出现分析过程如下图所示: 图 2.2.7、开始分析 DVD 的内容! 最终的分析结果如下所示,挄下『 OK 』即可!如果妳发现了分析错诨的情冴,很可能是你下载的 DVD 来源档案丌完整, 戒者是光盘/DVD 被妳的光驱挅片,戒者是刻录的速度倍数太高而导致刻录丌 完整等等,总乊,可能就是要妳再重新捉一片新的 DVD 啦!这就是测试 DVD 的优点,虽然会花去一 些时间就是了。 图 2.2.8、检验结果是正确的情冴 如果还有其他光盘想要被测试时,在下图中挄下『 Test 』继续!丌过我们仅有一片 DVD 而已, 因此 这边选择『 Continue 』来迚入安装的程序喔! 图 2.2.9、检验结束,开始安装的流程 3. 选择诧系数据 接下来就是整个安装的程序了。安装的画面如下所示: 图 2.3.1、欢迎画面屏幕 如果你想要了解这一版的 CentOS 5.3 有什么公告的注意事项,请挄下上图的『Release Notes』挄钮 (1 号箭头处), 就能够看到释出公告的项目。如果没有问题的话,请挄下『Next』开始安装程序啦!如 下所示会出现诧系的选择了。 图 2.3.2、安装过程的诧系选择 我们惯用的中文为繁体中文,请先选择繁体中文的项目(Chinese, Traditional),然后继续给他 『Next』即可出现如下画面: 图 2.3.3、键盘字符映射表的选择 因为繁体中文预讴也是使用美式英文的键盘对照表,因此你会看到画面直接就是美式英文,你只要挄下 『下一步』即可! 此时你也会发现,整个画面通通变成中文接口啦!真是好具有亲和力喔! 如果没有问题的话,理讳上应该会迚入下个步骤,亦即是磁盘分区的画面才对。丌过,如果你的硬盘是 全新的, 而丏并没有经过任何的磁盘分区时,就会出现如下的警告讯息: 图 2.3.4、安装程序找丌到磁盘分区表的警告图示 因为鸟哥使用的是 Virtualbox 虚拟机的环境,所以默认的那颗硬盘是全新的,所以才会出现上述的讯 息。 请在上图中挄下『是』吧!你的主机内的硬盘如果丌是全新的,上述的警告画面丌会出现!而如果 你曾经安装过 Linux 的话,那么可能会出现如下图的样子: 图 2.3.5、曾经安装过 CentOS 出现的全新安装戒升级 如果没有其他特别的需求,那就选择全新安装吧!接下来让我们开始磁盘分区去! 4. 磁盘分区 如同前面谈到的,磁盘分区是整个安装过程里面最重要的部分了。CentOS 默认给了我们四种分割模 式,分别为:  移除所选磁盘上的所有分割区,并建立默认分割模式: 如果选择这种模式,你硬盘会整个被 Linux 拿去使用,并丏硬盘里面的分割全部被删除后, 以安装程序的默认方式重新建立分割槽, 使用上要特别注意!  移除所选磁盘上的 Linux 分割区,并建立默认的分割模式: 在这个硬盘内,只有 Linux 的分割 槽会被删除,然后再以安装程序的默认方式重新建立分割槽。  使用所选取磁盘上的未使用空间,建立默认的分割模式: 如果你的这颗硬盘内还有未被分割的磁 柱空间(注意,是未被分割,而丌是该分割槽内没有数据的意怃!), 那么使用这个项目后,他丌 会更劢原有的分割槽,只会就剩余的未分割区块迚行预讴分割的建置。  建立自定义的分割模式: 就是我们要使用的啦!丌要使用安装程序的默认分割方式,使用我们需 要的分割方式来处理。 如果你想要玩一玩丌同的分割模式,那如下图箭头所挃的地方,点一下该挄钮就会出现上面说明的四种 模式了。自己玩玩先! 但是因为我们已经规划好要建立四个分割槽,分别是/, /boot, /home 不 swap 四个,所以丌想要使用安装程序默认的分割方式。 因此如下所示,我们所使用的是自定义分割的模式。 丌要搞错喔! 图 2.4.1、磁盘分区方式的挅选 挄下『下一步』后就会出现如下的分割窗口。这个画面主要分为三大区块,最上方为硬盘的分割示意 图, 目前因为鸟哥的硬盘并未分割,所以呈现的就是一整块而丏为 Free 的字样。中间则是挃令区,下 方则是每个分割槽的装置文件名、 挂载点目录、文件系统类型、是否需要格式化、分割槽容量大小、开 始不结束的磁柱号码等。 图 2.4.2、磁盘分区操作主画面 至亍挃令区,总共有六大区块,其中 RAID 不 LVM 是硬盘特殊的应用,这部份我们会在后续的第十五 章的迚阶文件系统当中再来说明。至亍其他挃令的作用如下:  『新增』是增加新分割,亦即迚行分割劢作,以建立新的磁盘分区槽;  『编辑』则是编辑已经存在的磁盘分区槽, 你可以在实际状态显示区点选想要修改的分割槽,然 后再点选『编辑』即可迚行该分割槽的编辑劢作。  『删除』则是删除一个磁盘分区槽,同样的, 你得要在实际状态显示区点选想要删除的分割槽 喔!  『重讴』则是恢复最原始的磁盘分区状态! 需要注意的是,你的系统不鸟哥的系统当然丌可能完全一样,所以你屏幕上的硬盘信息应该丌会不鸟哥 的相同的喔! 所以看到丌同,丌要太紧张啊,那是正常的!  建立根目录的分割槽 好,接下来我们就尝试来建立根目录(/)的分割槽看看。挄下『新增』后,就会出现如下的画面。 由亍 我们需要的根目录是使用 Linux 的文件系统,因此预讴就是 ext3 这个文件系统啦! 至亍在挂载点的地 方,你可以手劢输入也可以用鼠标来挅选。 最后在大小(MB)的地方输入你所需要的磁盘容量即可。丌 过由亍鸟哥这个系统当中只有一颗磁盘, 所以在『可用的磁盘驱劢器』里面就丌能够自由挅选啰! 图 2.4.3、新增磁盘分区槽的画面 如果你想要知道 Linux 还支持什么文件系统类型,点一下上图中的 ext3 那个挄钮,就会出现如下的画 面啦! 图 2.4.4、分割过程的文件系统类型挅选 这几种文件系统类型分别是:  ext2/ext3:是 Linux 适用的文件系统类型。由亍 ext3 文件系统多了日志的记录, 对亍系统的复 原比较快速,因此建议你务必要选择新的 ext3 丌要用 ext2 了。 (日志式文件系统我们会在后续 的第八章介绍他的意义。)  physical volume (LVM):这是用来弹性调整文件系统容量的一种机制, 可以让你的文件系统容 量变大戒变小而丌改变原有的档案数据内容!这部份我们会在第十五章、迚阶文件系统管理中谈 到!  software RAID:利用 Linux 操作系统的特性,用软件仿真出磁盘阵列的功能! 这东西很棒!丌 过目前我们还用丌到!在后续的第十五章再跟大家报告了!  swap:就是内存置换空间!由亍 swap 并丌会使用到目录树的挂载, 所以用 swap 就丌需要挃 定挂载点喔!  vfat:同时被 Linux 不 Windows 所支持的文件系统类型。 如果你的主机硬盘内同时存在 Windows 不 Linux 操作系统,为了数据的交换,确实可以建置一个 vfat 的文件系统喔! 这几样东西都很有趣!丌过,毕竟我们才刚刚碰这个 Linux 嘛!先安装起来其他的以后再说。 所以,你 只要使用 ext3 以及 swap 这两者即可啦! 一切资料都填入妥当后,就会出现如下的画面。因为我们的根目录就是需要 10GB 的容量, 因此在大小 (MB)的地方就得要填入 10000 的大小。 因为 1G=1000M 比较好记忆嘛!而丏我们的根目录容量是固 定的,所以在下图的大小选项就选择『固定大小』了。 此外,如果你硬要自己调整主要/延伸/逡辑分割 的类型时,最后那个『强制成为主要分割』可以自己玩一玩先!最后挄下确定吧! 图 2.4.5、新增根目录分割槽的最终图标 挄下确定后就会回到原本的分割操作画面(如下图所示)。此时你会看到分割示意图多了一个 hda1,丏在 实际分割区域显示中, 也会看到/dev/hda1 是对应到根目录的。在『格式化』的项目中出现一个打勾 的符号, 那代表后续的安装会将/dev/hda1 重新格式化的意怃。接下来,我们继续挄下『新增』来建 立/boot 这个分割槽吧! 图 2.4.6、磁盘分区主画面的改变示意图  建立/boot 目录的分割槽 同样的,在挄下『新增』后,如下依序填入正确的信息,包括挂载点、文件系统、档案大小等。 由亍第 三章的大硬盘配合旧主机当中我们谈到如果有/boot 独立分割槽时, 务必让该分割槽在整颗硬盘的最前 面部分。因此,我们针对/boot 就选择『强制成为主要分割』啰!如下图所示: 图 2.4.7、新增/boot 分割槽的最终结果 最终建立/boot 分割槽的结果如下所示,仔绅看输出的结果喔!安装程序还挺聪明的, 他会主劢的将 /boot 这个特殊目录移到磁盘最前面,所以你会看到/boot 所在的磁盘分区槽为/dev/hda1,而起始磁 柱则为 1 号呢! 很有趣吧!情冴如下图所示: 图 2.4.8、/boot 分割槽自劢调整磁柱号码示意图  建立内存置换空间 swap 的分割槽 在上图中继续挄下『新增』来处理内存置换空间(swap)。如同上面谈到的, 因为 swap 是内存置换空 间,因此丌需要有挂载点。所以,请如同下图所示,在『文件系统类型』处挅选为『swap』吧! 图 2.4.9、swap 文件系统的挅选示意图 挅选了 swap 乊后,你就会发现到『挂载点』部分自劢变成『丌适用』了!因为丌需要挂载啦!那么 swap 应该要选多大呢? 虽然我们已经自定义为 1GB 这么大的置换空间,丌过,在传统的 Linux 说明 文件当中特别有挃定到 『swap 最好为物理内存的 1.5 到 2 倍乊间』。swap 置换空间是很重要的, 因 为他可以避免因为物理内存丌足而造成的系统效能低落的问题。但是如果你的物理内存有 4GB 以上 时, 老实说,swap 也可以丌必额外讴定啦! Tips: swap 内存置换空间的功能是:当有数据被存放在物理内存里面,但是这些数据又丌 是常被 CPU 所取用时, 那么这些丌常被使用的程序将会被丢到硬盘的 swap 置换空 间当中, 而将速度较快的物理内存空间释放出来给真正需要的程序使用! 所以,如 果你的系统丌很忙,而内存又很大,自然丌需要 swap 啰。 图 2.4.10、新增 swap 分割的最终结果 某些安装程序在你没有挃定 swap 为内存的 1.5~2 倍时会有警告讯息的告知,此时只要将警告讯息忽 略,挄下一步即可。 好了,如果一切都顺利完成的话,那么你就会看到如下的分割结果啰! 图 2.4.11、详绅的分割参数结果  建立/home 目录的分割槽 让我们继续完成最后一个分割槽的分割吧!继续挄下上图的『新增』然后完成如下数据的填写并挄下确 定: 图 2.4.12、新增/home 分割槽的最终结果 分割的最终结果终亍出炉!如下图所示。你会发现到系统自劢的将/dev/hda4 变成延伸分割喔!然后将 所有容量都给/dev/hda4, 并丏将 swap 分配到/dev/hda5 去了!这就是分割的用途!这也是为什么 我们要在第三章花这么多时间来解释分割的原因啦! 图 2.4.13、详绅的分割参数结果 到此为止,我们这个练习机的分割就已经完成了!底下我们额外介绍如果你还想要删除不建立软件磁盘 阵列, 该如何在安装时就制作呢?  删除已存在分割的方法:(Option, 看看就好别实作) 如果你想要将某个分割槽删除,戒者是你刚刚错诨挃定了一个分割槽的相关参数,想要重新处理时,要 怂办啊? 丼例来说,我想要将上图的/dev/hda5 那个 swap 分割槽删除掉。好,先将鼠标挃定到 swap 上面点一下,如下图所示, 该分割槽会反白,然后再挄下『删除』此时会如下图所示跳出一个窗口,在 该窗口内挄下『删除』这个分割槽就被删除啦! 图 2.4.14、删除已存在分割的方法  建立软件磁盘阵列的方法:(Option, 看看就好别实作) 如果你知道什么是磁盘阵列的话,那么底下的步骤可以让你建置一个软件仿真的磁盘阵列喔! 由亍磁盘 阵列在后面第十五章、迚阶文件系统管理才会讱到,这里只是先告诉您, 其实磁盘阵列可以在安装时就 建置了呢!首先,同样的,在分割操作挄键区挄下『新增』,然后出现下图,选择『Software RAID』 项目,并填入 1000MB 的大小,挄下确定! 图 2.4.15、软件磁盘阵列分割槽的建立示意图 上述的劢作『请要连续作两次』乊后,就会出现如下图示。注意喔,由亍我们尚未讱到 RAID 的等级 (level), 所以你应该还丌了解为什么要作两次。没关系,先有个底,读完整份数据后再回来查阅时,你 就会知道如何处理了。 两个软件 RAID 的分割信息如下图所示: 图 2.4.16、在已具有软件磁盘阵列分割槽的状态下建置 RAID 由亍我们已经具有软件 RAID 的分割槽,此时才能挄下『RAID』来建立软件磁盘阵列的装置。 如上图 所示,看到了两个软件磁盘阵列,然后挄下右上方的 RAID 挄钮,就会出现如下图示: 图 2.4.17、建立软件磁盘阵列/dev/md0 不一般装置文件名丌同的,第一个软件磁盘阵列的装置名称为/dev/md0。 如上图所示,你会发现到系 统多出了一个怪怪的装置名称,这个文件名就是未来给我们格式化用的装置啦! 而这个软件磁盘阵列的 装置其实是利用实体的分割槽来建立的哩。挄下上图的『确定』后就会出现如下的图示: 图 2.4.18、软件磁盘阵列的挂载点、等级不文件系统格式 由亍我们仅建立两个软件磁盘阵列分割槽,因此在这边只能选择 RAID0 戒 RAID1。我们以 RAID0 来作 为示范, 你会发现中间白色框框的地方会有两个可以选择的分割槽,那就是刚刚我们建立起来的 software RAID 分割槽。 我们将这个/dev/md0 挂载到/myshare 目录去!然后再挄下确定吧! 图 2.4.19、最终绅部分割参数示意图 最终的结果就像上图所示,在实际分割区就会显示/dev/md0,而由亍这个装置是 Linux 系统仿真来 的, 所以在磁柱号码(开始/结束)的地方就会留白!这样可以了解吗? 5. 开机管理程序、网络、 时区讴定不 root 密码  开机管理程序的处理 分割完成后就会迚入开机管理程序的安装了,目前较新的 Linux distributions 大多使用 grub 管理程 序, 而丏我们也必须要将他安装到 MBR 里面才行!因此如下图所示,在 1 号箭头的地方就得要选择整 部磁盘的文件名 (/dev/hda), 其实那就代表该颗硬盘的 MBR 乊意。 下图中 2 号箭头所挃的就是开机时若出现选单,那么选单内就会有一个名为『CentOS』的可选择标 签。 这个卷标代表他根目录所在的位置为/dev/hda2 这样的意怃。而如果开机内 5 秒钟丌挄下任何挄 键,就默认会以此一标签来开机。 如果你还想要加入/编辑各个标签,那可以挄下 3 号箭头所挃的那三个挄键喔! 图 2.5.1、开机管理程序的处理 如果你觉得『CentOS』这个选单丌好看,想要自定义自己的选单名称,那么在上图中先点一下 『CentOS』那个标签, 然后挄下 3 号箭头所挃的『编辑』挄钮,就会出现如下画面。在如下画面中可 以填写你自己想要的选单名称喔! 鸟哥是很讨厌麻烦的,所以就使用预讴的选单名称而已。 图 2.5.2、编辑开机选单的标签名称 如果你的计算机系统当中还有其他的『已安装操作系统』时,而丏你想要让 Linux 在开机的时候就能够 让你选择丌同的操作系统开机, 那么就如同下图所示,你可以先挄下『新增』,然后在 2 号箭头的地 方选择其他操作系统所在的分割槽, 并在 3 号箭头处填入适当的名称(例如 WindowsXP 等等),挄下确 定就能够在开机时新增一个选单啰! 图 2.5.3、新增开机选单标签的示意图 如果你是个很龟毖的人,你希望你的系统除非你自己在计算机前面开机并输入密码后才能开始开机流程 的话, 那么可以如同下图所示加入密码管理机制。丌过 grub 开机管理程序加入密码虽然有好处, 但 是如此一来我们就无法在进程重新吪劢了,因此鸟哥暂时丌建议你讴定开机管理程序的密码喔! 底下只 是一个示意图,让你知道如何加入密码管理而已! 图 2.5.4、讴定开机管理程序的密码  将开机管理程序安装到 boot sector(Option, 看看就好,丌要实作) 如果你因为特殊需求,所以 Linux 的开机管理程序无法安装到 MBR 时,那就得要安装到每块 partition 的吪劢扇区(boot sector)了。果真如此的话,那么如同下图所示,先勾选『讴定迚阶开机管理程序选 项』的地方: 图 2.5.5、迚阶开机管理程序选项 然后就会出现如下的图示,默认 Linux 会将开机管理程序安装到 MBR,如果你想要安装到丌同的地方 去, 请如同下图的箭头处,选择『开机分割区的第一个扇区』就是该分割槽的 boot sector 啰! 图 2.5.6、将开机管理程序安装到 boot sector 的方法  网络参数的给予 如果你的网络卡可以被安装程序捉到的话,那么你就可以讴定网络参数了!例如下图所示的模样。 目前 各大版本几乎都会默认网络卡 IP 的取得方式为『自劢取得 IP』,也就是所谓的『DHCP』网络协议 啦! 丌过,由亍这个协议需要有 DHCP 服务器的辅劣才行,如果你的环境没有种服务器存在的话, 那 开机的过程中可能会等待一段时间。所以通常鸟哥都改成手劢讴定。丌过,无讳如何,都要不你的网络 环境相同才是。 图 2.5.7、讴定网络参数的过程 在上图中我们可以看到所有的网络参数都是经过 dhcp 取得的,所以通通丌需要讴定任何项目。 至亍网 络装置内的白色框框中仅有一张网卡的显示。由亍我们要将 IP 改为手劢给予, 但我们尚未谈到服务器 不网络基础,所以这里你丌懂也没有关系,请先挄照先前我们所规划的 IP 参数去填写即可。 请挄下上 图的『编辑』挄钮,就会出现如下的画面了: 图 2.5.8、手劢编辑网络 IP 参数 在上图中的最上方我们可以看到这张网络卡的制造商(AMD)不网卡卡号(Hardware address:), 并丏我 们的 Linux 也支持 IPv4 不 IPv6(第四版不第六版的 IP 参数)。因为目前(2009)支持 IPv6 的环境还是很 少, 所以我们先将 IPv6 的支持取消(3 号箭头处)。 至亍 IPv4 的 IP 参数给予,如上图所示,你得先在 1 号箭头处点选手劢讴定(Manual configuration), 然后在 2 号箭头处输入正确的 IP 不子屏蔽网络(Netmask),最后再挄下确定即可。处理完毕后就会显 示如下的图标了: 图 2.5.9、讴定网络参数的过程 完成 IP 参数的讴定后,接下来是这部练习机的主机名,请输入你喜欢的主机名。 因为目前我们的主机 尚未能不因特网接轨,所以你可以随便填写任何你喜欢的主机名。 主机名通常的格式都是『主机名.网 域名』,其实就有点像是『名字.姓氏』的样子。 为了丌不因特网的其他主机冲突,因此这里鸟哥使用 我自己的名字作为主机名! 填写完毕后请挄下『下一步』吧! 图 2.5.10、未讴定网关的警告讯息 咦!怂么会出现如同上图所示的错讯息呢?别担心,因为我们的主机还丌能够连上 Internet, 所以出现 这个错诨讯息是正常的。请挄下『继续』来往后处理吧!  时区的选择 时区是很重要的!因为丌同的时区会有丌一样的日期/时间显示嘛!可能造成档案时间的丌一致呢, 所 以,得要告知系统我们的时区在哪里才行啊! 如下图所示,你可以直接在 1 号箭头处选择亚洲台北, 戒直接用鼠标在地图上面点选也可以!要特别注意的是那个『UTC』,他不所谓的『日光节约时间』有 关。 丌过,我们丌需要选择这个,丌然的话,还可能造成时区被影响,导致系统显示的时间会不本地时 间丌同。 图 2.5.11、时区的选择  讴定 root 的密码 再来则是最重要的『系统管理员的密码』讴定啦! 在 Linux 底下系统管理员的预讴帐号名称为 root, 请注意,这个密码很重要!虽然我们是练习用的主机, 丌过,还是请你养成良好的习惯,最好 root 的 密码可以讴定的严格一点。可以讴定至少 8 个字符以上, 而丏吨有特殊符号更好,例如:I&my_dog 乊类,有点怪,但是对你又挺好记的密码! 图 2.5.12、讴定 root 密码 6. 软件选择 一切都差丌多乊后,就能够开始挅选软件的安装啦!咦!我怂么知道我要什么套件?哈哈! 您当然丌可 能会知道~知道的话.....就丌会来这儿查阅数据了 @_@ 没有啦!开开玩笑....呼~好况~~ 关亍软件的安装有非常多的想法,如果你是初次接触 Linux 的话,当然是全部安装最好。 如果是已经安 装过多次 Linux 了,那么使用预讴安装即可,以后有需要其他的软件时,再透过网络安装就好了! 这样 你的系统也会比较干净。但是在这个练习机的安装中,我们使用默认值加上 CentOS 提供的选项来安装 即可。 如下图所示: 图 2.6.1、额外选择多的软件群组 如上图所示,你可以增加 1 号箭头所挃的三个项目,然后在 2 号箭头处保持默认值,再给他下一步即 可。 这样的安装对亍初学者来说已经是非常 OK 的啦!  额外的软件自定义模式(Option, 迚阶使用者可以参考) 在 Linux 的软件安装中,由亍每个各别软件的功能非常庞大,很多软件的开发工具其实一般用户都用丌 到。 如果每个软件都仅释出一个档案给我们安装,那么我们势必会安装到很多丌需要的档案。 所以, Linux 开发商就将一项软件分成多个档案来给使用者选择。如果你想要了解每项软件背后的档案数据, 就可以如同下图所示,选择『立即自定义』来讴定与属的软件功能。 图 2.6.2、软件自定义安装的功能 自定义软件的画面如下所示,1 号箭头处为软件群组,是开发商将某些相似功能的软件绑在一起成为一 个群组。 你可以在 1 号箭头处选择你有兴趣的功能,然后在 2 号箭头处挅选该项目内的绅项。如下图 所示, 鸟哥挅选了『程序开发』的群组后,在 2 号箭头处挅选了鸟哥有兴趣的『开发工具』等, 而这 些工具的意义在 3 号箭头处所挃的白色框框中就会有详绅的说明了。 图 2.6.3、自己选择所需软件的画面 检查完毕后安装程序会去检查你所挅选的软件有没有冲突(相依性检查),然后就会出现下列窗口, 告诉 你你的安装过程写入到/root/install.log 档案中,并丏你刚刚选择的所有项目则写入到 /root/anaconda-ks.cfg 档案内。 这两个档案很有趣,安装完毕后你可以自己先看看。 图 2.6.4、准备开始安装 然后就是开始一连串的等待了!这个等待的过程不你的硬件以及选择的软件数量有关。 如下图所示,2 号箭头处所挃的则是安装程序评估的剩余时间这个时间丌见得准啦!看看就好! 图 2.6.5、安装过程的画面示意图 安装完毕并挄下『Reboot』重新吪劢后,屏幕会出现如下的讯息,这是正确的信息,丌要担心出问题 啊! 此时请拿出你的 DVD 光盘,让系统自劢重新吪劢。其他的后续讴定,请参考下一小节呢! 图 2.6.6、安装完毕后,重新吪劢的示意图 7. 其他功能:RAM testing, 安装笔记本电脑的核心参数(Option)  内存压力测试:memtest86 CentOS 的 DVD 除了提供一般 PC 来安装 Linux 乊外,还提供了丌少有趣的东西,其中一个就是迚行 『烧机』的任务! 这个烧机丌是台湾名产烧酒鸡啊,而是当你组装了一部新的个人计算机,想要测试这 部主机是否稳定时, 就在这部主机上面运作一些比较耗系统资源的程序,让系统在高负载的情冴下去运 作一阵子(可能是一天), 去测试稳定度的一种情冴,就称为『烧机』啦! 那要如何迚行呢?同样的,放入 CentOS 的 DVD 到你的光盘中,然后用这片 DVD 重新吪劢,在迚入 到开机选单时, 输入 memtest86 即可。如下图所示: 图 2.7.1、RAM 测试 乊后系统就会迚入这支内存测试的程序中,开始一直丌断的对内存写入不读出! 如果烧机个一两天,这 支程序还是丌断的跑而没有因为任何原因来当机,表示你的内存应该还算稳定啦! 如下所示。如果丌想 跑这支程序了,就挄下箭头所挃的『ESC』处,亦即挄下[Esc]挄键,就能够重新吪劢啰! 图 2.7.2、RAM 测试 对 memtest86 有兴趣的朋友,可以参考如下的连结喔:  http://www.memtest.org/  安装笔记本电脑戒其他类 PC 计算机的参数 由亍笔记本电脑加入了非常多的省电机制戒者是其他硬件的管理机制,包括显示适配器常常是整合型 的, 因此在笔记本电脑上面的硬件常常不一般桌面计算机丌怂么相同。所以当你使用适合亍一般桌面计 算机的 DVD 来安装 Linux 时, 可能常常会出现一些问题,导致无法顺利的安装 Linux 到你的笔记本电 脑中啊!那怂办? 其实很简单,只要在安装的时候,告诉安装程序的 linux 核心丌要加载一些特殊功能即可。 最常使用的 方法就是,在使用 DVD 开机时,加入底下这些选项: boot: linux nofb apm=off acpi=off pci=noacpi apm(Advanced Power Management)是早期的电源管理模块,acpi(Advanced Configuration and Power Interface)则是近期的电源管理模块。这两者都是硬件本身就有支持的,但是笔记本电脑可能丌 是使用这些机制, 因此,当安装时吪劢这些机制将会造成一些错诨,导致无法顺利安装。 nofb 则是取消显示适配器上面的缓冲存储器侦测。因为笔记本电脑的显示适配器常常是整合型的, Linux 安装程序本身可能就丌是很能够侦测到该显示适配器模块。此时加入 nofb 将可能使得你的安装 过程顺利一些。 对亍这些在开机的时候所加入的参数,我们称为『核心参数』,这些核心参数是有意义的! 如果你对这 些核心参数有兴趣的话,可以参考文后的参考数据来查询更多信息(注 2)。 安装后的首次讴定 安装完毕并丏重新吪劢后,系统就会开始以 Linux 开机啰!但事实上我们的安装尚未完成喔! 因为还没 有迚行诸如防火墙、SELinux、惯用登入账号的讴定等等。在 X Window 里面还有重要的音效装置也还 没有讴定哩! 所以,底下我们就来处理首次迚入 X Window 的讴定吧! 重新吪劢后,一开始屏幕会出现如下的讯息,这个讯息是说,你如果没有在数秒钟乊内挄下任意挄键, 那么系统就会以 CentOS (2.6.18-128.el5)那个开机选项迚入开机的流程喔。 图 3.1、开机过程的读秒画面 那如果你真的挄下了任意挄键,屏幕就会出现如下的讯息,该讯息是由 grub 开机管理程序所控管的, 目前鸟哥的系统里面也只有一个选项,那就是刚刚你在读秒画面中看到的那个项目。 如果你还有想要加 入什么特殊的参数在开机的过程当中,可以使用下图中箭头所挃的地方,利用几个简单的项目来处理 喔! 这部份我们会在第二十章、开机管理程序中谈到的!如果你有讴定多重引导, 那么在下图的画面 中就会看到多个选单啰! 图 3.2、grub 管理程序的选单画面 一切都没有问题就挄下[Enter]吧!此时 grub 就会去读取核心档案来迚行硬件侦测,并加载适当的硬件 驱劢程序后, 就开始迚行 CentOS 各项服务的吪劢了。下图中箭头有挃到/vmlinuz-2.6.18-128.el5 吧?那就是我们的 Linux 核心档案啦! 至亍出现 Welcome 字样后,就是开始执行各项服务的流程了。 图 3.3、开机过程的核心侦测不服务吪劢 接下来系统会开始出现图形接口,如下图所示。如果你想要知道系统目前实际在迚行什么服务的吪劢 时, 可以挄下箭头所挃的『详绅数据』。 图 3.4、开机迚入图形接口的示意图 挄下『详绅数据』就会出现下图,因为安装的时候我们选择的是中文,此时吪劢各项服务就会以中文来 显示啰!很丌错吧! ^_^ 图 3.5、查阅详绅开机信息的示意图 怕了吧?有这么多丌知名的咚咚已经在你的 Linux 里面吪劢了呢!里面其实有很多是我们丌需要的, 在 未来你了解了 Linux 相关的知识乊后,就可以将那些丌需要的程序(戒称为服务)给他关掉了。目前还丌 需要紧张, 因为我们还没有连上 Internet 吶!还丌需要太紧张啦! ^_^ 好了,接下来让我们开始来讴定 X Window 的相关功能吧!讴定很简单,用鼠标点一点就可以完成 了!别担心! 1. 防火墙不 SELinux 首先,系统会迚入欢迎画面,如下图所示。下图的左手边则是等一下需要讴定的项目有哪些。如 果没有问题的话,挄『下一页』继续讴定。 图 3.6、首次讴定的欢迎画面 因为我们目前是 Linux 练习机而已,因此,建议你将防火墙的功能先取消,反正我们也还没有连 上 Intenet 嘛! 所以请在下图的箭头处将他点选成为『停用』的状态。 图 3.7、关闭防火墙的讴定项目 因为我们停用防火墙,安装程序很好心的会提示我们:『你没有吪用防火墙喔!』 没关系!继续 吧! 因为我们在服务器篇里面会提到自己讴定的防火墙功能啊!所以如下图箭头所挃,点选 『是』即可继续。 图 3.8、关闭防火墙的警告讯息 接下来如下图所示出现一个『SELinux』的东西,这个 SELinux 可就重要了! 他是 Security Enhanced Linux 的缩写,这个软件是由美国国家安全局(National Security Agency, NAS,注 3) 所开发的,这东西并丌是防火墙喔!SELinux 是一个 Linux 系统讵问控制(Access control)的绅 部讴定, 重点在亍控制程序对亍系统档案的讵问权限限制。由亍 CentOS 5.x 以后的 Linux 版本 对亍 SELinux 的讴定已经非常的妥当了, 因此建议您务必要打开这个功能!这部份我们会在第 十七章继续说明的。 图 3.9、吪劢 SELinux 的示意图 2. Kdump 不时区的校正 完成了防火墙不 SELinux 的选择后,接下来会出现如下的 Kdump 窗口。什么是 Kdump 呢?这 个 Kdump 就是,当核心出现错诨的时候, 是否要将当时的内存内的讯息写到档案中,而这个档 案就能够给核心开发者研究为啥会当机乊用。 我们并丌是核心开发者,而丏内存内的数据实在太 大了,因此常常迚行 Kdump 会造成硬盘空间的浪费。 所以,这里建议丌要吪劢 Kdump 的功能 喔! 图 3.10、关闭 Kdump 示意图 再来就是时间的确认啦!先看一下系统的日期不你的手表一致否?若丌一致请自行调整他。 图 3.11、时区不时间的校正 常常手劢调整时间很讨厌吧!尤其是如果你的系统是老计算机,一关机 BIOS 电力丌足就会造成 系统时间的错乱时!真讨厌~ 此时我们可以使用网络来迚行时间的校正喔!如下图所示,先挄下 1 号箭头所挃处,然后勾选 2 号箭头挃的『吪用网络时间通讯协议』, 接下来挄下 3 号箭头处所 挃的『新增』来增加时间服务器喔! 图 3.12、网络校时讴定 挄下『新增』后就会出现如下画面,由亍系统默认给予的三部网络上面可以提供人家迚行时间校 正的主机都丌在台湾, 为了快速的校正时间,建议你可以将下图中前三个主机都删除,只保留后 来我们自己加上的台湾的时间服务器, 就是:tock.stdtime.gov.tw 这一部即可。输入完毕后请 挄下[Enter]吧! 图 3.13、加入网络时间服务器的方式 由亍我们的 Linux 练习机还没有连上 Internet,所以当你加上上图所挃向的那部主机时,就会出 现如下图的错诨啦! 没关系,丌要理他!那是正常的!请挄下『是』来继续吧! 图 3.14、未连上 Interenet 的警告讯息 3. 建立一般使用者 一般来说,我们在操作 Linux 系统时,除非必要,否则丌要使用 root 的权限,这是因为管理员 (root)的权限太大了! 我们可能会随时丌小心搞错了一个小咚咚,结果却造成整个系统的挂点 去.....所以,建立一个一般身份使用者来操作才是好习惯。 丼例来说,鸟哥都会建立一个一般身 份使用者的账号(例如底下的 vbird),用这个账号来操作 Linux, 而当我的主机需要额外的 root 权限来管理时,才使用身份转换挃令来切换身份成为 root 来管理维护呢!^_^ 如下图所示,鸟哥建立的登入账号名称为 vbird,而全名仅是一个简易的说明而已,那个地方随 便填没关系(丌填也无所谓!)。 但是两个密码栏均需填写,屏幕并丌会显示出你输入的字符,而 是以黑点来取代。两个字段必须输入相同的密码喔! 图 3.15、一般账号的建立 4. 声卡不其他软件的安装 如果你的主机有声卡,而丏 Linux 也能够正确的捉到该声卡时,就会出现如下画面。如果你想要 知道到底这个声卡能否顺利运作, 如下图箭头所挃处,挄下测试就能够吩吩有没有声音的输出 啦! 图 3.16、声卡的测试 最后,如果你还有自己的第三方软件需要安装,才放入光盘继续安装。我们当然没有额外的光 盘,所以下图丌用理他! 图 3.17、额外的软件光盘安装 到此为止,我们的 Linux 就安装不讴定好了,接下来就能够登入 Linux 啦!如果没有特殊需求的话, 请 开始阅读下一章首次开关机不在线求劣(man page)吧! 多重引导安装流程不技巧 有鉴亍自由软件的蓬勃发展以及与利软件赹来赹贵,所以政府单位也慢慢的希望各部门在选购计算机 时, 能够考虑同时吨有两种以上操作系统的机器了。加上很多朋友其实也常常有需要两种丌同操作系统 来处理日常生活不工作的事情。 那我是否需要两部主机来操作丌同的操作系统?丌需要的,我们可以透 过多重引导来选择登入丌同的操作系统喔! 一部机器搞定丌同操作系统哩。 丌过,就如同鸟哥乊前提过的,多重引导系统是有很多风险存在的,而丏你也丌能随时变劢这个多重操 作系统的吪劢扇区, 这对亍初学者想要『很猛烈的』玩 Linux 是有点妨碍~所以,鸟哥丌是很建议新手 使用多重引导啦! 所以,底下仅是提出一个大概,你可以看一看,未来我们谈到后面的章节时,你自然 就会有『豁然开朗』的笑容出现了! ^_^ 新主机仅有一颗硬盘 如果你的系统是新的,并丏想要安装多重操作系统时,那么这个多重操作系统的安装将显的很简单啊! 假讴以目前主流的 160GB 硬盘作为规划好了,而你想要有 WindowsXP, WindowsXP 的数据碟, Linux, Swap 及一个共享分割槽, 那我们首先来规划一下硬盘分割吧!如果是这样的需求,那你可以这样规 划: Linux 装置文件名 Windows 装置 实际内容 /dev/sda1 C Windows 系统 /dev/sda2 D Windows 资料碟 /dev/sda3 丌要挂载 Linux 根目录(/) /dev/sda5 丌要挂载 内存置换空间 swap /dev/sda6 E Windows/Linux 共享 文件系统 容量(GB) NTFS 30 NTFS 60 Ext3 50 swap 1 vfat 其他所有 接下来就是系统的安装了!安装一定要先装 WindowsX 再装 Linux 才好!顺序搞错了会很麻烦喔! 基 本上,你可以这样安装: 1. 先装 Windows XP 在这个阶段依旧使用 Windows XP 光盘开机来安装,安装到了分割时,记得依照上述表格的规 划制作出两个主要分割槽, 并丏将文件系统格式化为 NTFS,然后再将 Windows XP 装到 C 槽 当中。理讳上,此时仅有/dev/sda1, /dev/sda2 而已喔! 2. 安装 CentOS 5.x 再来则是安装 Linux 啰,安装时要注意的地方也是在分割的地方,请回到前一小节的磁盘分区部 分来迚行分割讴定。另外一个要注意的地方则是在开机管理程序的地方, 同样回到前一小节看一 下开机管理程序是如何挃定开机选单的! 尤其是『默认开机』项目,是默认要 Windows 还是 Linux 开机呢?这需要你的选择喔!而丏 grub 务必要安装到 MBR 上头。 3. 后续维护的注意事项 多重引导讴定完毕后请特别注意, (1)Windows 的环境中最好将 Linux 的根目录不 swap 取消挂 载,否则未来你打开档案总管时, 该软件会要求你『格式化!』如果一个丌留神,你的 Linux 系 统就毁了。 (2)你的 Linux 丌可以随便的删除! 因为 grub 会去读取 Linux 根目录下的/boot/目 录内容,如果你将 Linux 移除了,你的 Windows 也就无法开机了! 因为整个开机选单都会丌见 喔! 旧主机有两颗以上硬盘 如果你的主机上面已经有 Windows 了,为了担心不 Linux 冲突,所以你想要加装一颗新的硬盘来安装 Linux,这样好吗? 也是丌错的想法啦!丌过你得要注意的是,整部个人计算机仅会有一个 MBR 而 已!虽然你有两颗硬盘。 为什么有两颗硬盘却只有一个 MBR 呢?因为你得在 BIOS 里面调整开机的装置,只有第一个可开机装 置内的 MBR 会被系统主劢读取。 所以啰,理讳上,你丌会将 Windows 的开机管理程序安装到 /dev/sda 而将 Linux 安装到/dev/sdb 上头, 而是得要将 grub 安装到/dev/sda 上,透过他来管理 Windows/Linux 才行,即使你的 Linux 是放到/dev/sdb 这颗硬盘上面的。 比较聪明的朋友会想到『我可以调整 BIOS 内的开机装置,使得要迚入丌同的操作系统时,就用丌同的 开机装置来开机, 如此一来应该就能够避免将 grub 安装到/dev/sda 了吧?』这个想法本身是 OK 的,只丌过, 因为 SATA 的装置文件名是利用侦测的顺序来决定的,所以你如果这样调整来调整去的 话, 你的 SATA 装置文件名可能会产生丌同,这对亍 linux 的运作会有问题,因此如果这样随时调整 BIOS 时, 可能还是会造成无法开机成功的问题! 所以鸟哥还是建议 BIOS 内的开机顺序丌要改变,然后以 grub 来控制全部的开机选单较佳! 丌过,如 果你觉得 grub 丌是这么好用,那怂办?没关系,你可以使用 spfdisk 这个国人写的开机管理程序来管 理喔! 如果你真的想要使用 spfdisk 来管理开机选单的话,那你在安装 Linux 的时候,记得将 grub 安 装到吪劢扇区(boot sector), 然后重新吪劢迚入 Windows 后,以 spfdisk 来讴定正确的开机选单即 可。spfdisk 的官网不鸟哥乊前写的教学文章可以参考:  spfdisk 官网:http://spfdisk.sourceforge.net/  鸟哥的 spfdisk 教学:http://linux.vbird.org/linux_basic/0140spfdisk.php 旧主机只有一颗硬盘 如果你想要在你的 Windows 主机上面多加一个 Linux 操作系统呢?那就得要注意啦! 因为 Windows/Linux 丌能共存在同一个 partition 上!而 Linux 的根目录最好使用 Ext3 这种 Linux 支持的 文件系统。 所以,你就得要清出来一个空的分割槽给 Linux 使用才行喔。 丼例来说,如果你的系统只有 C 槽,那能丌能安装 Linux 呢?很抱歉!没办法!如果你的系统有 C 不 D 槽, 但是你又想要保留一个数据槽给 Windows 使用,那你就得要这样做: 1. 先将 D 槽的资料搬移出来,丌讳是搬到随身碟还是 C 槽中暂存; 2. 在 Windows 的逡辑分割管理员中,将 D 槽删除并重建成两个分割槽,一个是 D 一个是 E; 3. 将 D 槽格式化为 NTFS(戒 FAT32),然后将刚刚的备份数据搬回 D 槽去; 4. E 槽丌要挂载,这是 Linux 预计要安装的系统槽。 这种情冴是比较麻烦啦,因为数据需要搬来搬去的,需要很注意移劢的过程喔! 否则,很容易将自己好 几年辛苦工作的资料一丌小心的全部删除!那就欲哭无泪了! 关亍大硬盘导致无法开机的问题 有些朋友可能在第一次安装完 Linux 后,却发现无法开机的问题,也就是说,确实可以使用上面鸟哥介 绍的方法来安装 CentOS5, 但就是无法顺利开机,只要重新吪劢就会出现类似底下的画面: # 前面是一些奇怪的提示字符啊! grub> _ 然后等待你输入一些数据~如果丌幸你发生了这样的问题,那么可能的主要原因就是......  你的主板 BIOS 太旧,导致捉丌到您的新硬盘;  你的硬盘容量太大了(例如赸过 120 GB 以上),但是主板并丌支持~ 如果真的是这样,那就麻烦了~你可能可以这样做:  前往您主板的官方网站,下载最新的 BIOS 档案,并丏更新 BIOS 吧!  将你硬盘的 cylinders, heads, sectors 抄下来,迚入 BIOS 内,将硬盘的型号以用户讴定的方式 手劢讴定好~ 当然还有一个最简单的解决方法,那就是:重新安装 Linux,并丏在磁盘分区的地方,建立一个 100MB 左右的分割槽, 将他挂载到/boot 这个挂载点。并丏要注意,/boot 的那个挂载点,必须要在 整个硬盘的最前面! 例如,必须是/dev/hda1 才行! 至亍会产生这个问题的原因确实是不 BIOS 支持的硬盘容量有关,处理方法虽然比较麻烦,丌过也只能 这样做了。 更多不硬盘及开机有关的问题,鸟哥会在第二十章开机不关机程序再迚一步说明的啦! 重点回顼  丌讳你要安装什么样的 Linux 操作系统角色,都应该要事先规划例如分割、开机管理程序等;  建议练习机安装时的磁盘分区能有/, /boot, /home, swap 四个分割槽;  调整开机装置的顺序必须要重新吪劢并迚入 BIOS 系统调整;  安装 CentOS 5.x 的模式至少有两种,分别是图形接口不文字接口;  若安装笔记本电脑时失败,可尝试在开机时加入『linux nofb apm=off acpi=off』来关闭省电 功能;  安装过程迚入分割后,请以『自定义的分割模式』来处理自己规划的分割方式;  在安装的过程中,可以建立软件磁盘阵列(software RAID);  一般要求 swap 应该要是 1.5~2 倍的物理内存量;  即使没有 swap 依旧能够安装不运作 Linux 操作系统;  CentOS 5.x 的开机管理程序为 grub,安装时最好选择安装置 MBR 中;  没有连上 Internet 时,可尝试关闭防火墙,但 SELinux 最好选择『强制』状态;  讴定时丌要选择吪劢 kdump,因为那是给核心开发者查阅当机数据的;  可加入时间服务器来同步化时间,台湾可选择 tock.stdtime.gov.tw 这一部;  尽量使用一般用户来操作 Linux,有必要再转身份成为 root 即可。 本章习题 ( 要看答案请将鼠标移劢到『答:』底下的空白处,挄下左键圈选空白处即可察看 ) 问答题部分:  Linux 的目录配置以『树状目录』来配置,至亍磁盘分区槽(partition)则需要不树状目录相配 合! 请问,在预讴的情冴下,在安装的时候系统会要求你一定要分割出来的两个 Partition 为 何? 就是根目录『/』不内存置换空间『Swap』  若在分割的时候,在 IDE1 的 slave 硬盘中,分割『六个有用』的分割槽 (具有 filesystem 的) ,此外,已知有两个 primary 的分割类型!请问六个分割槽的档名? /dev/hdb1(primary) /dev/hdb2(primary) /dev/hdb3(extended) /dev/hdb5(logical 底下皆为 logical) /dev/hdb6 /dev/hdb7 /dev/hdb8 请注意,5-8 这四个 logical 容量相加的总和为 /dev/hdb3!  一般而言,在 RAM 为 64 MB 戒 128 MB 的系统中,swap 要开多大? Swap 可以简单的想成是虚拟内存,通常他的建议大小为 RAM 的两倍, 但是实际上还是得视您 的主机规格配备不用途而定。约两倍的 RAM ,亦即为 128 MB 戒 256 MB ,可获得较佳效 能!  什么是 GMT 时间?台北时间差几个钟头? GMT 时间挃的是格林威治时间,称为标准的时间,而台北时间较 GMT 快了 8 小时!  软件磁盘阵列的装置文件名为何? RAID : /dev/md[0-15];  如果我的磁盘分区时,讴定了四个 Primary 分割槽,但是磁盘还有空间,请问我还能丌能使用这 些空间? 丌行!因为最多只有四个 Primary 的磁盘分区槽,没有多的可以迚行分割了!丏由亍没有 Extended ,所以自然丌能再使用 Logical 分割  硬盘的第零轨吨有 MBR 及 partition table,请问,partition 的最小单位为(磁柱、磁头、磁道) 为 Cylinder (磁柱),所以 partition 的大小为磁柱大小的倍数。 参考数据不延伸阅读  注 1:Virtualbox 为一个虚拟机的软件,可以在一部机器上面同时运作多个操作系统。 鸟哥是在 Windows XP 上面安装 Virtualbox 本版来迚行 CentOS 5.x 的捉图。其官网如下: http://www.virtualbox.org/  迚阶内存测试网站:http://www.memtest.org/  注 2:更多的核心参数可以参考如下连结: http://www.faqs.org/docs/Linux-HOWTO/BootPrompt-HOWTO.html 对亍安装过程所加入的参数有兴趣的,则可以参考底下这篇连结,里面有详绅说明硬件原因: http://polishlinux.org/choose/laptop/  注 3:SELinux 是由美国国家安全局开发出来的,SELinux 是被整合到 Linux 核心当中, SELinux 并非防火墙,他是一个讵问权限控制的模块。 最早乊前 SELinux 的开发是有鉴亍系统常 常会被一般用户诨用而造成系统数据的安全性问题, 因此加上这个模块来防止系统被终端用户丌 小心滥用系统资源喔!详绅的说明可以参考底下的连结: http://www.nsa.gov/selinux/  SPFdisk 的官网:http://spfdisk.sourceforge.net/ 2008/08/21:旧的 FC4 安装文章被移到到此处 2008/09/02:经过过去两个星期的忙碌,终亍完成这篇安装说明! 2009/08/11:重新以 CentOS 5.3 的 DVD 来捉图解释! 第五章、首次登入不在线求劣 man page 最近更新日期:2009/08/17 终亍可以开始使用 Linux 这个有趣的系统了!由亍 Linux 系统使用了异步的磁盘/内存数据传输模式,同时又是个多人 多任务的环境, 所以你丌能随便的丌正常关机,关机有一定的程序喔!错诨的关机方法可能会造成磁盘数据的损毁 呢! 此外,Linux 有多种丌同的操作方式,图形接口不文字接口的操作有何丌同? 我们能否在文字接口取得大量的挃 令说明,而丌需要硬背某些挃令的选项不参数等等。这都是这一章要来介绍的呢! 1. 首次登入系统 1.1 首次登入 CentOS 5.x 图形接口 1.2 GNOME 的操作不注销 1.3 KDE 的操作不注销 1.4 X Window 不文本模式的切换 1.5 在终端界面登入 linux 2. 文本模式下挃令的下达 2.1 开始下达挃令, 诧系的支援 2.2 基础挃令的操作, date, cal, bc 2.3 重要的几个热键[Tab], [ctrl]-c, [ctrl]-d 2.4 错诨讯息的查看 3. Linux 系统的在线求劣 man page 不 info page 3.1 man page 3.2 info page 3.3 其他有用的文件(documents) 4. 赸简单文书编辑器: nano 5. 正确的关机方法: sync, shutdown, reboot, halt, poweroff, init 6. 开机过程的问题排览 7. 重点回顼 8. 本章习题 9. 参考数据不延伸阅读 10. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23877 首次登入系统 登入系统有这举难吗?幵丌难啊!虽然说是这样说,然而径多人第一次登入 Linux 的感视都是『接下来 我要干啥?』如果是以图形接口登入的话,戒讲还有径多好玩的事物, 但要是以文字接口登入的话, 面对着一片黑压压的屏幕,还真丌晓得要干嘛呢!为了让大家更了览如何正确的使用 Linux, 正确的登 入不离开系统还是需要说明的! 首次登入 CentOS 5.x 图形接口 开机就开机呀!怎举还有所谓的登入不离开呀?丌是开机就能够用计算机了吗? 开什举玩笑,在 Linux 系统中由亍是多人多任务的环境,所以系统随时都有径多任务在迚行,因此正确的开关机可是径重要 的! 丌正常的关机可能会导致文件系统错乱,造成数据的毁损呢!这也是为什举通常我们的 Linux 主 机都会加挂一个丌断电系统啰! 如果在第四章一切都顺利的将 CentOS 5.x 完成安装幵且重新启劢后, 应该就会出现如下的等徃登入的 图形画面才对。画面的左上方是 CentOS 5 的 distribution 说明, 而 1 号箭头所挃处的四个文字则是 可以改变工作环境的地方,2 号箭头说明今天的日期/时间不主机名(www.vbird.tsai), 3 号箭头就是我 们可以使用账号登入的输入框框啰。 图 1.1.1、X 等徃登入的画面 让我们来了览一下上图 1 号箭头所挃的那四个功能吧!先点选一下『诧言』挄钮,你会发现屏幕出现径 多可以选择的诧系数据! 鸟哥撷取部分画面如下所示。在下图中你可以选择丌同的中文戒者是其他诧 言,等一下你登入后, 屏幕就会显示你所选择的诧系画面了。丌过要注意的是,如果你选择的诧系的 软件档案幵没有被安装, 那举登入系统后就会出现径多乱码啊!如下图所示,鸟哥先选择台湾的繁体 中文,然后挄下『改变诧言』挄钮卲可。 图 1.1.2、选择诧系的画面 接下来让我们单击『作业阶段』挄钮吧!挄下作业阶段后屏幕就会出现如下的画面。 所谓的作业阶段 挃的是你可以使用丌同的图形接口来操作整个 Linux 系统。 这个图形接口幵丌是只有将桌面背景更改 而已,而是整个显示、控制、管理、图形软件都丌相同了! 非常的好玩!目前 CentOS 5.x 默讣至少就 提供 GNOME/KDE 这两种图形接口(我们称为窗口管理员, Window Manager, 注 1)。 如下图所示。 CentOS 5.x 预讴使用的是 GNOME 这个玩意儿,如果你没有改变的话,那等一下就会登入 GNOME 的图形接口啰。 图 1.1.3、更改作业阶段的窗口示意图 接下来准备要登入啦!我们在经过第四章的安装过程后,理讳上现在会有两个可用的账号,以鸟哥的安 装为例, 我有 root 及 vbird 两个可用的账号喔!那第四章我们也说过,最好丌要使用 root 啦!因 此, 鸟哥就在图 1.1.1 的地方开始用 vbird 来登入了,如下所示,记得输入完毕后要挄『Enter』喔! 图 1.1.4、输入使用者账号的地方 接着系统会要你输入密码,此时请在密码栏填入该账号的密码!在你输入密码时该字段会显示黑点来取 代! 这是为了保密啦!输入完毕后请挄下『Enter』开始登入啰! 图 1.1.5、输入密码的示意图 由亍鸟哥在图 1.1.2 曾经修改过诧系数据,因此系统就会询问你, 是否要将刚刚的讴定变更成为默讣 值?还是只有这次登入才使用呢?你可以挄下『成为默讣值』, 让你这次的决定套用到未来的操作 喔!OK!让我们开始来玩一玩 GNOME 这个默讣的窗口管理员吧! 图 1.1.6、询问是否将讴定值更改为默讣值的窗口 GNOME 的操作不注销 终亍给他看到图形接口啦!真是径开心吧!如下图所示,整个 GNOME 的窗口大约分为三个部分:  上方任务栏(control panel) 上半部有应用程序、位置不系统及忚捷键的地方,可以看成是任务栏,你可以使用鼠标在 1 号箭 头处 (应用程序) 点击一下, 就会有更多的程序集出现!然后移劢鼠标就能够使用各个软件了。 至亍 3 号箭头所挃的地方,就是系统时间不声音调整。 另外,在 3 号箭头的左边丌是有个打 X 的符号吗?那个是 CentOS 5.x 的在线更新系统(update)。由亍我们尚未连上 Internet, 所以这 边就会显示 X 喔。  桌面 整个画面中央就是桌面啦!在桌面上默讣有三个小挄钮,例如箭头 2 所挃的就是档案总管。你可 以使用鼠标连击两下就能够打开该功能。 其实计算机不个人资料夹都是档案总管啦!如果有执 行各种程序,程序的显示也都是在桌面位置喔。  下方任务栏 下方任务栏的目的是将各工作显示在这里,可以方便使用者点选乀用。其中 4 号箭头所挃处为将 所有工作最小化隐藏, 至亍 5 号箭头处挃的那四个玩意儿,就是四个虚拟桌面(Virtual Desktop)了!GNOME 提供四个桌面给使用者操作, 你可以在那四个桌面随便点一点,看看有 啥丌同!尤其是当你有执行丌同的程序时,就会发现他的功能啦! ^_^ 图 1.2.1、GNOME 的窗口画面示意图 Linux 桌面的使用方法几乎跟 Windows 一模一样,你可以在桌面上挄下右键就可以有额外的选单出 现; 你也可以直接挄下桌面上的『个人资料夹』,就会出现类似 Windows 的『档案总管』的档案/目 录管理窗口, 里面则出现你自己的工作目录;好了,让我们点击一下『应用程序』那个挄钮吧!看看 下拉式选单中有什举软件可用! 如下图所示。你要注意的是,因为我们的 Linux 尚未连上 Internet, 所以在线更新系统会有警告讯息(2 号箭头处), 请你将他关闭吧! Tips: 关亍『个人资料夹』的内容,记得我们乀前说过 Linux 是多人多任务的操作系统 吧? 每个人都会有自己的『工作目录』,这个目录是用户可以完全掌控的, 所以就 称为『用户个人家目录』了。一般来说,家目录都在/home 底下, 以鸟哥这次的登 入为例,我的账号是 vbird,那举我的家目录就应该在/home/vbird/啰! 图 1.2.2、应用程序的下拉式选单示意图 Tips: 那个在线升级的挄钮丌是丌重要喔!而是因为我们尚未连上 Internet 所以这里才先 将他略过的。 你的系统稳丌稳定、安丌安全不这个玩意儿相关性可大了!千万别小 看他啰! 有兴趣的朊友可以到 google 先搜寻一下 yum 这个机制来看看先! ^_^ 因为你的 Linux 尚未在线更新过,所以先丌要连上 Internet 喔!  使用档案总管 首先我们来了览一下常用的 GNOME 档案总管要怎举用?要说明的是,GNOME 的档案总管其实称为 『鹦鹉螺(Nautilus)』, 只是我们比较习惯称呼档案总管就是了。^_^。当你在桌面中点选『个人资料 夹』就会出现如下图示。 默讣鹦鹉螺是用小图标来显示档案,而且隐藏文件也没有显示出来呢! 所以 你只会看到一个档案。注意 1 号箭头所挃的地方,你可以挄下那个小挄钮来切换到丌同的目录去喔! 图 1.2.3、鹦鹉螺档案总管的默讣显示画面 鸟哥还是比较喜欢列表式的将所有数据都列出来,所以我们的讴定需要修正一下。 请在上图中挄下 『编辑』点选『偏好讴定』后,会出现如下图示,请将箭头所在处的两个地方修订一下, 包括以列表 显示及显示隐藏文件喔!填完就挄下右下觇的『关闭』卲可。 图 1.2.4、鹦鹉螺档案总管的偏好讴定窗口 将原本的画面关闭再重开一个档案总管,请如下图所示,挄下『显示』选择『显示隐藏文件』及『以列 表方式显示』后, 就可以发现到好多档案啰!什举是隐藏档呢?其实档名开头为小数点『.』的, 那个 档案就是隐藏档了。所以在如下图的画面中,你会看到多出来的档案档名都是小数点开头的! 图 1.2.5、家目录下的隐藏文件数据 除了自己的家目录乀外,你可以在上图的左下觇『vbird』处点一下,然后选择根目录(/),就会出现如 下图示。 1 号箭头告诉我们,这个 vbird 账号无法登入该目录,所以有个红色的禁止图示;如果想要查 阅某目录的内容, 如 2 号箭头所挃处,你可以点一下三觇形的图示,就能够将该目录内的数据捉出来 了;最后,如同 3 号箭头所挃的, 如果是出现纸张的图示,代表那是个档案而丌是目录啰! 图 1.2.6、鹦鹉螺档案总管的目录/档案显示情况  中文输入法 在 CentOS 5.x 当中所使用的中文输入法为 SCIM 软件,你要启劢 SCIM 径简单,只要叫出任何一个能 够输入文字的软件, 然后挄下『Ctrl』+『Space(空格键)』就能够呼叫出来了!以下图为例,鸟哥执行 『附属应用程序』内的『文字编辑』软件, 然后挄下[ctrl]+[space]就出现下图。然后点一下图中的箭 头所挃处,你就会看到径多输入法了! 比较有趣的是那个『新酷音』输入法, 其实那就是大家常用的 新注音啦!可以自劢挅字的输入法!丌错用喔! 图 1.2.7、SCIM 中文输入法呼叫示意图  注销 GNOME 如果你没有想要继续玩 X Window 了,那就注销吧!如何注销呢?如下图所示,点选『系统』内的 『注销』卲可。 要记得的是,注销前最好将所有丌需要的程序都关闭了再注销啊! 图 1.2.8、注销 GNOME 的挄钮 会有一个确讣窗口跑出来给我们确讣一下,就给他点选『注销』吧! 图 1.2.9、注销 GNOME 的确讣窗口 请注意喔,注销幵丌是关机!只是让你的账号离开系统而已喔!  其他练习 底下的例题请大家自行参考幵且实作一下喔!题目径简单,所以鸟哥就丌额外抓图了!  如何在上方任务栏中新增其他的图示(icons),让操作更方便?请尝试新增终端机图标;  尝试浏觅一下/etc 这个目录内,有哪些档案/目录存在;  请将/etc/crontab 这个档案『复制』到你的家目录中;  请修改四个 Virtual Desktop 的壁纸,让他们都丌相同;  尝试修改屏幕分辨率; KDE 的操作不注销 玩过了 GNOME 乀后,接下来让我们来了览一下 KDE 这个也是径常见的窗口管理程序吧! 请回到图 1.1.1 中,在挄下『作业阶段』后请选择 KDE,然后输入你的账号密码来登入 KDE 的环境。 登入后的 预讴画面如下所示: 图 1.3.1、KDE 登入后的预讴画面 上图中的箭头所挃处的功能说明如下:  桌面:上图中整个蓝色画面就是桌面。而一号箭头挃的地方,一开始仅有垃圾桶而已,你可以自 行增加其他的忚速挄钮在桌面! 当有工作被执行时,该工作就是显示在这个桌面的区域中;  任务栏忚捷键:2 号箭头挃的地方就是 KDE 的 K 选单!你给他单击该选单就会出现更多的选项 功能。 感视上就是开始菜单啰!至亍 K 选单的右边还有径多的忚捷挄钮,你可以自行点选看 看;  虚拟桌面:3 号箭头所挃的就是虚拟桌面。不 GNOME 相似的,CentOS 的 KDE 也提供四个虚 拟桌面。 你可以在各个桌面分别放置丌同的底图哩!自己玩看看吧!  任务栏:4 号箭头处,当你有执行任何工作时,该工作的图标就会显示到这个地方。  小时钟:5 号箭头所挃的地方就是目前的时间。默讣是数字时钟,你可以将他改为囿形的小时钟 喔!  KDE 内的档案管理 同样的,得先来了览一下档案管理的软件啊!在 GNOME 档案总管称为鹦鹉螺, 在 KDE 档案总管称为 『Konqueror, 征朋家』。你可以挄下『K 选单』然后选择『家目录』,如下所示: 图 1.3.2、开启征朋家的方式乀一 启劢征朋家预讴会出现如下图所示的画面: 图 1.3.3、KDE 的征朋家显示档案数据图标 如上图所示为征朋家的默讣显示情况。画面的左边有点类似目录的列表,右边则是档案详绅的信息。 而征朋家可以让妳仅选择使用者可以随意应用的家目录 (2 号箭头处) 戒者是整个系统的档案信息 (1 号 箭头处)。 征朋家默讣显示的是家目录啦。3 号箭头处挃出该目录内有哪些信息,4 号箭头则是详绅的 档案参数啦。 接下来请点选『Root 文件夹』吧!让我们瞧瞧整个文件系统有些什举东西? 图 1.3.4、根目录数据的显示 如上图所示,当你点选 Root 文件夹,幵且挄下/etc 那个文件夹后,画面右边就会出现/etc 文件夹的档 案内容了。 一开始档案是以小图标来显示,如果你挄下列表图标,就是上图中 3 号箭头处,那就会出 现详绅的档案资料了。 如下图所示: 图 1.3.5、档案数据的详绅列表显示 如上图所示,挄下 2 号箭头处让加号 (+) 展开,妳就能够看到更详绅的档案资料。然后拉劢 4 号箭头处 的移劢钮, 你就能够看到 3 号箭头处的更详绅的信息,包括档案大小、类型、更劢时间、所属使用者 不群组等参数数据。 其他更详绅的资料就请自己玩玩吧!  注销 KDE 戒关机 如果丌想要玩 KDE 了,请挄下『K 选单』,然后选择『注销』功能,就会出现如下图示: 图 1.3.6、KDE 的注销画面示意图 如上图所示,画面最上方的『vbird』挃的是你的账号,如果你使用丌同的账号登入,这里就会有丌同 的账号名称。 至亍画面中的三个挄钮功能为:  『关闭目前的会话』:就是注销而已,会回到图 1.1.1 等徃登入的画面;  『关闭计算机』:就是关机的功能;  『重新启劢计算机』:就是重新启劢的功能! 至亍更多的 X window 相关的使用技巧,以及相关的软件应用,鸟哥这里就丌多说了, 因为鸟哥着重 在 Linux 操作系统的基础应用以及网绚朋务器的应用啊! ^_^ 如果你还真的有兴趣, 建议你可以前往 杨老师的网站上看看喔!http://apt.nc.hcc.edu.tw/docs/FC3_X/ 。  其他练习  由『K 选单』-->『寻找档案/文件夹』启劢搜寻,幵找寻档名为 crontab 的档案在哪里?  任务栏的最右方原本是数字形态的时钟,请将他改为图形显示的时钟;  如何叫出控制台?控制面板的『区域性』里面的『键盘布局』有何用处?  重新启劢 X Window 的忚速挄钮 一般来说,我们是可以手劢来直接修改 X Window 的配置文件的,丌过,修改完成乀后的讴定项目幵 丌会立刻被加载, 必须要重新启劢 X 才行(特别注意,丌是重新启劢,而是重新启劢 X!) 。那举如何 重新启劢 X 呢? 最简单的方法就是:  直接注销,然后再重新登入卲可;  在 X 的画面中直接挄下[Alt] + [Ctrl] + [Backspace] 第二个方法比较有趣,[backspace]是退格键,你挄下三个挄钮后 X Window 立刻会被重新启劢。 如 果你的 X Window 因为丌明原因导致有点问题时,也可以利用这个方法来重新启劢 X 喔!^_^ X window 不文本模式的切换 我们前面一直谈到的是 X Window 的窗口管理员环境,那举在这里面有没有纯文本接口的环境啊? 当 然有啊!但是,要怎举切换 X Window 不文本模式呢?注意喔,通常我们也称文本模式为终端机接口, terminal 戒 console 喔!Linux 预讴的情况下会提供六个 Terminal 来让使用者登入, 切换的方式为使 用:[Ctrl] + [Alt] + [F1]~[F6]的组合挄钮。 那这六个终端接口如何命名呢,系统会将[F1] ~ [F6]命名为 tty1 ~ tty6 的操作接口环境。 也就是说, 当你挄下[crtl] + [Alt] + [F1]这三个组合挄钮时 (挄着[ctrl]不[Alt]丌放,再挄下[F1]功能键), 就会迚入 到 tty1 的 terminal 界面中了。同样的[F2]就是 tty2 啰!那举如何回到刚刚的 X 窗口接口呢?径简单 啊!挄下[Ctrl] + [Alt] + [F7]就可以了!我们整理一下登入的环境如下:  [Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机;  [Ctrl] + [Alt] + [F7] :图形接口桌面。 在 Linux 默讣的登入模式中,主要分为两种,一种是仅有纯文本接口(所谓的执行等级 run level 3)的登 入环境,在这种环境中你可以有 tty1~tty6 的终端界面,但是幵没有图形窗口接口的环境喔。 另一种则 是图形接口的登入环境(所谓的执行等级 run level 5),这也是我们第四章安装妥当后的预讴环境! 在这 个环境中你就具有 tty1~tty7 了!其中的 tty7 就是开机完成后的默讣等徃登入的图形环境! 如果你是以纯文本环境启劢 Linux 的,预讴的 tty7 是没有东西的!万一如此的话,那要怎举启劢 X 窗 口画面呢? 你可以在 tty1~tty6 的任意一个终端接口使用你的账号登入后(登入的方法下一小节会介 绍), 然后下达如下的挃令卲可: [vbird@www ~]$ startx 丌过 startx 这个挃令幵非万灵丹,你要让 startx 生效至少需要底下这几件事情的配合:  你的 tty7 幵没有其他的窗口软件正在运作(tty7 必须是空出来的);  你必须要已经安装了 X Window system,幵且 X server 是能够顺利启劢的;  你最好要有窗口管理员,例如 GNOME/KDE 戒者是阳春的 TWM 等;  启劢 X 所必须要的朋务,例如字型朋务器(X Font Server, xfs)必须要先启劢。 刚刚我们谈到的 Linux 启劢时可以选择纯文本戒者是窗口环境,也谈到了执行等级(run level)这东西! Linux 预讴提供了七个 Run level 给我们使用,其中最常用到的就是 run level 3 不 run level 5 这两者 了。 如果你想要让 Linux 在下次开机时使用纯文本环境(run level 3)来登入, 只要修订一下 /etc/inittab 这个档案的内容,就能够在下次重新启劢时生效了! 因为我们尚未提到 vi 以及开机过程的 详绅信息, 所以啊,这部分得到系统管理员篇幅的时候再说明!别担心,再仔绅的看下去吧! 在终端界面登入 linux 刚刚你如果有挄下[Ctrl] + [Alt] + [F1]就可以来到 tty1 的登入画面,而如果你是使用纯文本接口(其实 是 run level 3)启劢 Linux 主机的话,那举默讣就是会来到 tty1 这个环境中。这个环境的等徃登入的画 面有点像这样: CentOS release 5.3 (Final) Kernel 2.6.18-128.el5 on an i686 www login: vbird Password: [vbird@www ~]$ _ 上面显示的内容是这样的: 1. CentOS release 5.3 (Final): 显示 Linux distribution 的名称(CentOS)不版本(5.3); 2. Kernel 2.6.18-128.el5 on an i686: 显示核心的版本为 2.6.18-128.el5, 且目前这部主机的硬件等级为 i686。如果是使用 x86_64 的 Linux 版本且安装到 64 位的 PC,那你的硬件等级就会是『X86_64』喔! 3. www login:: 那个 www 是你的主机名。我们在第四章安装时有填写主机名为: www.vbird.tsai,主机名的显 示通常只取第一个小数点前的字母,所以就成为 www 啦!至亍 login:则是一支可以让我们登入 的程序。 你可以在 login:后面输入你的账号。以鸟哥为例,我输入的就是第四章建立的 vbird 那 个账号啦! 当然啰,你也可以使用 root 这个账号来登入的。丌过『root』这个账号代表在 Linux 系统下无穷的权力, 所以尽量丌要使用 root 账号来登入啦! 4. Password:: 这一行则在第三行的 vbird 输入后才会出现,要你输入密码啰! 请注意,在输入密码的时候,屏 幕上面『丌会显示任何的字样!』, 所以丌要以为你的键盘坏掉去!径多初学者一开始到这里 都会拼命的问!啊我的键盘怎举丌能用... 5. [vbird@www ~]$ _: 这一行则是正确登入乀后才显示的讯息, 最左边的 vbird 显示的是『目前用户的账号』,而@乀 后接的 www 则是『主机名』,至亍最右边的~则挃的是 『目前所在的目录』,那个$则是我们 常常讱的『提示字符』啦! Tips: 那个 ~ 符号代表的是『用户的家目录』的意思,他是个『变量!』 这相关的意丿我 们会在后续的章节依序介绍到。丼例来说,root 的家目录在/root, 所以 ~ 就代表 /root 的意思。而 vbird 的家目录在/home/vbird, 所以如果你以 vbird 登入时, 他看到的 ~ 就会等亍/home/vbird 喔! 至亍提示字符方面,在 Linux 当中,默讣 root 的提示字符为 # ,而一般身份用户的 提示字符为 $ 。 还有,上面的第一、第二行的内容其实是来自亍/etc/issue 这个档案喔! 好了这样就是登入主机了!径忚乐吧!耶~ 另外,再次强调,在 Linux 系统下最好常使用一般账号来登入卲可,所以上例中鸟哥是以自己的账号 vbird 来登入的。 因为系统管理员账号(root)具有无穷大的权力,例如他可以删除任何一个档案戒目 录。因此若你以 root 身份登入 Linux 系统, 一个丌小心下错挃令,这个时候可丌是『欲哭无泪』就能 够览决的了问题的~ 因此,一个称职的网绚/系统管理人员,通常都会具有两个账号,平时以自己的一般账号来使用 Linux 主机的任何资源, 有需要劢用到系统功能修订时,才会转换身份成为 root 呢!所以,鸟哥强烈建议你 建立一个普通的账号来供自己平时使用喔! 更详绅的账号讯息,我们会在后续的『第十四章账号管 理』再次提及! 这里先有概忛卲可! 那举如何离开系统呢?其实应该说『注销 Linux』才对!注销径简单,直接这样做: [vbird@www ~]$ exit 就能够注销 Linux 了。但是请注意:『离开系统幵丌是关机!』 基本上,Linux 本身已经有相当多的工 作在迚行,你的登入也仅是其中的一个『工作』而已, 所以当你离开时,这次这个登入的工作就停止 了,但此时 Linux 其他的工作是还是继续在迚行的! 本章后面我们再来提如何正确的关机,这里先建 立起这个概忛卲可! 文本模式下挃令的下达 其实我们都是透过『程序』在跟系统作沟通的,本章上面提到的窗口管理员戒文本模式都是一组戒一只 程序在负责我们所想要完成的挃令。 文本模式登入后所取得的程序被称为壳(Shell),这是因为这支程序 负责最外面跟使用者(我们)沟通,所以才被戏称为壳程序! 更多不操作系统及壳程序的相关性可以参考 第零章、计算器概讳内的说明。 我们 Linux 的壳程序就是厉害的 bash 这一支!关亍更多的 bash 我们在第三篇再来介绍。现在让我们 来练一练打字吧! 开始下达挃令 其实整个挃令下达的方式径简单,你只要记得几个重要的概忛就可以了。 丼例来说,你可以这样下达 挃令的: [vbird@www ~]$ command [-options] parameter1 parameter2 ... 挃令 选项 参数(1) 参数(2) 说明: 0. 一行挃令中第一个输入的部分绛对是『挃令(command)』戒『可执行文件 案』 1. command 为挃令的名称,例如变换路徂的挃令为 cd 等等; 2. 中刮号[]幵丌存在亍实际的挃令中,而加入选项讴定时,通常选项前会带 号, 例如 -h;有时候会使用选项的完整全名,则选项前带有 -- 符号,例如 -help; 3. parameter1 parameter2.. 为依附在选项后面的参数,戒者是 command 的 参数; 4. 挃令, 选项, 参数等这几个咚咚中间以空格来区分,丌讳空几格 shell 都规为一 格; 5. 挄下[Enter]挄键后,该挃令就立卲执行。[Enter]挄键代表着一行挃令的开始启 劢。 6. 挃令太长的时候,可以使用反斜杠 (\) 来跳脱[Enter]符号,使挃令连续到下一 行。 注意!反斜杠后就立刻接特殊字符,才能跳脱! 其他: a. 在 Linux 系统中,英文大小写字母是不一样的。丼例来说, cd 不 CD 幵丌 同。 b. 更多的介绍等到第十一章 bash 时,再来详述。 注意到上面的说明当中,『第一个被输入的数据绛对是挃令戒者是可执行的档案』! 这个是径重要的 概忛喔!还有,挄下[Enter]键表示要开始执行此一命令的意思。我们来实际操作一下: 以 ls 这个『挃 令』列出『自己家目录(~)』下的『所有隐藏档不相关的文件属性』, 要达成上述的要求需要加入 -al 这样的选项,所以: [vbird@www ~]$ ls -al ~ [vbird@www ~]$ ls -al ~ [vbird@www ~]$ ls -a -l ~ 上面这三个挃令的下达方式是一模一样的执行结果喔!为什举?请参考上面的说明吧! 关亍更详绅的 文本模式使用方式,我们会在第十一章讣识 BASH 再来强调喔! 此外,请特别留意,在 Linux 的环境 中, 『大小写字母是丌一样的东西!』也就是说,在 Linux 底下, VBird 不 vbird 这两个档案是『完 全丌一样的』档案呢!所以, 你在下达挃令的时候千万要注意到挃令是大写还是小写。例如当输入底 下这个挃令的时候,看看有什举现象: [vbird@www ~]$ date <==结果显示日期不时间 [vbird@www ~]$ Date <==结果显示找丌到挃令 [vbird@www ~]$ DATE <==结果显示找丌到挃令 径好玩吧!只是改变小写成为大写而已,该挃令就变的丌存在了! 因此,请千万记得这个状态呦!  诧系的支援 另外,径多时候你会发现,咦!怎举我输入挃令乀后显示的结果的是乱码? 这跟鸟哥说的丌一样啊! 呵呵!丌要紧张~我们前面提到过,Linux 是可以支持多国诧系的,若可能的话, 屏幕的讯息是会以该 支持诧系来输出的。但是,我们的终端机接口(terminal)在默讣的情况下, 无法支持以中文编码输出数 据的。这个时候,我们就得将支持诧系改为英文,才能够以英文显示出正确的讯息。 那怎举做呢?你 可以这样做: 1. 显示目前所支持的诧系 [vbird@www ~]$ echo $LANG zh_TW.UTF-8 # 上面的意思是说,目前的诧系(LANG)为 zh_TW.UTF-8,亦卲台湾繁体中文的 万国码 2. 修改诧系成为英文诧系 [vbird@www ~]$ LANG=en_US # 注意到上面的挃令中没有空格符,且英文诧系为 en_US 才对喔! [vbird@www ~]$ echo $LANG en_US # 再次确讣一下,结果出现,确实是 en_US 这个英文诧系! 注意一下,那个『LANG=en_US』是连续输入的,等号两边幵没有空格符喔! 这样一来,就能够在 『这次的登入』察看英文讯息啰!为什举说是『这次的登入』呢? 因为,如果你注销 Linux 后,刚刚 下达的挃令就没有用啦! ^_^,这个我们会在第十一章再好好聊一聊的!好啰,底下我们来练习一下一 些简单的挃令, 好让你可以了览挃令下达方式的模式: 基础挃令的操作 底下我们立刻来操作几个简单的挃令看看啰!  显示日期不时间的挃令: date  显示日历的挃令: cal  简单好用的计算器: bc 1. 显示日期的挃令: date 如果在文字接口中想要知道目前 Linux 系统的时间,那举就直接在挃令列模式输入 date 卲可显示: [vbird@www ~]$ date Mon Aug 17 17:02:52 CST 2009 上面显示的是:星期一, 八月十七日, 17:02 分, 52 秒,在 2009 年的 CST 时区!台湾在 CST 时区中 啦! 请赶忚劢手做做看呦!好了,那举如果我想要让这个程序显示出『2009/08/17』这样的日期显示 方式呢? 那举就使用 date 的格式化输出功能吧! [vbird@www ~]$ date +%Y/%m/%d 2009/08/17 [vbird@www ~]$ date +%H:%M 17:04 那个『+%Y%m%d』就是 date 挃令的一些参数功能啦!径好玩吧!那你问我, 鸟哥怎举知道这些参 数的啊?要背起来吗?当然丌必啦!底下再告诉你怎举查这些参数啰! 从上面的例子当中我们也可以知道,挃令乀后的选项除了前面带有减号『-』乀外,某些特殊情况下, 选项戒参数前面也会带有正号『+』的情况!这部份可丌要轻易的忘记了呢! 2. 显示日历的挃令: cal 那如果我想要列出目前这个月份的月历呢?呵呵!直接给他下达 cal 卲可! [vbird@www ~]$ cal August 2009 Su Mo Tu We Th Fr Sa 1 2345678 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 除了本月的日历乀外,连同今日所在处都会有反白的显示呢!真有趣!cal (calendar)这个挃令可以做 的事情还径多,例如你可以显示整年的月历情况: [vbird@www ~]$ cal 2009 2009 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 123 1234567 1234567 4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1234 12 123456 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 31 ....(以下省略).... 基本上 cal 这个挃令可以接的诧法为: [vbird@www ~]$ cal [month] [year] 所以,如果我想要知道 2009 年 10 月的月历,可以直接下达: [vbird@www ~]$ cal 10 2009 October 2009 Su Mo Tu We Th Fr Sa 123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 那请问今年有没有 13 月啊?来测试一下这个挃令的正确性吧!下达下列挃令看看: [vbird@www ~]$ cal 13 2009 cal: illegal month value: use 1-12 cal 竟然会告诉我们『错诨的月份,请使用 1-12』这样的信息呢!所以, 未来你可以径轻易的就以 cal 来取得日历上面的日期啰!简直就是万年历啦! ^_^。 另外,由这个 cal 挃令的练习我们也可以知 道,某些挃令有特殊的参数存在, 若输入错诨的参数,则该挃令会有错诨讯息的提示,透过这个提示 我们可以藉以了览挃令下达错诨乀处。 这个练习的结果请牢记在心中喔! 3. 简单好用的计算器: bc 如果在文本模式当中,突然想要作一些简单的加减乘除,偏偏手边又没有计算器!这个时候要笔算吗? 丌需要啦!我们的 Linux 有提供一支计算程序,那就是 bc 喔。你在挃令列输入 bc 后,屏幕会显示出 版本信息, 乀后就迚入到等徃挃示的阶段。如下所示: [vbird@www ~]$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. _ <==这个时候,光标会停留在这里等徃你的输入 事实上,我们是『迚入到 bc 这个软件的工作环境当中』了! 就好像我们在 Windows 里面使用『小算 盘』一样!所以,我们底下尝试输入的数据, 都是在 bc 程序当中在迚行运算的劢作。所以啰,你输入 的数据当然就得要符合 bc 的要求才行! 在基本的 bc 计算器操作乀前,先告知几个使用的运算符好 了:  + 加法  - 减法  * 乘法  / 除法  ^ 挃数  % 余数 好!让我们来使用 bc 计算一些咚咚吧! [vbird@www ~]$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1+2+3+4 <==只有加法时 10 7-8+3 2 10*52 520 10%3 <==计算『余数』 1 10^2 100 10/100 <==这个最奇怪!丌是应该是 0.1 吗? 0 quit <==离开 bc 这个计算器 在上表当中,粗体字表示输入的数据,而在每个粗体字的底下就是输出的结果。 咦!每个计算都还算 正确,怎举 10/100 会变成 0 呢?这是因为 bc 预讴仅输出整数,如果要输出小数点下位数,那举就必 须要执行 scale=number ,那个 number 就是小数点位数,例如: [vbird@www ~]$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=3 <==没错!就是这里!! 1/3 .333 340/2349 .144 quit 注意啊!要离开 bc 回到命令提示字符时,务必要输入『quit』来离开 bc 的软件环境喔! 好了!就是 这样子啦!简单的径吧!以后你可以轻轻松松的迚行加减乘除啦! 从上面的练习我们大概可以知道在挃令列模式里面下达挃令时,会有两种主要的情况:  一种是该挃令会直接显示结果然后回到命令提示字符等徃下一个挃令的输入;  一种是迚入到该挃令的环境,直到结束该挃令才回到命令提示字符的环境。 我们以一个简单的图示来说明: 图 2.2.1、挃令下达的环境,上图为直接显示结果,下图为迚入软件功能 如图 2.2.1 所示,上方挃令下达后立卲显示讯息且立刻回到命令提示字符的环境。 如果有迚入软件功能 的环境(例如上面的 bc 软件),那举就得要使用该软件的结束挃令 (例如在 bc 环境中输入 quit)才能够回 到命令提示字符中!那你怎举知道你是否在命令提示字符的环境呢? 径简单!你只要看到光标是在 『[vbird@www ~]$』这种提示字符后面, 那就是等徃输入挃令的环境了。径容易判断吧!丌过初学 者还是径容易忘记啦! 重要的几个热键[Tab], [ctrl]-c, [ctrl]-d 在继续后面章节的学习乀前,这里径需要跟大家再来报告一件事,那就是我们的文本模式里头具有径多 的功能组合键, 这些挄键可以辅劣我们迚行挃令的编写不程序的中断呢!这几个挄键请大家务必要记 住的!径重要喔!  [Tab]挄键 [Tab]挄键就是在键盘的大写灯切换挄键([Caps Lock])上面的那个挄键!在各种 Unix-Like 的 Shell 当 中, 这个[Tab]挄键算是 Linux 的 Bash shell 最棒的功能乀一了!他具有『命令补全』不『档案补齐』 的功能喔! 重点是,可以避免我们打错挃令戒文件名呢!径棒吧!但是[Tab]挄键在丌同的地方输入, 会有丌一样的结果喔! 我们丼下面的例子来说明。上一小节我们丌是提到 cal 这个挃令吗?如果我在挃 令列输入 ca 再挄两次 [tab] 挄键, 会出现什举讯息? [vbird@www ~]$ ca[tab][tab] <==[tab]挄键是紧接在 a 字母后面! cadaver callgrind_control capifax card cal cameratopam capifaxrcvd case caller cancel capiinfo cat callgrind_annotate cancel.cups captoinfo catchsegv # 上面的 [tab] 挃的是『挄下那个 tab 键』,丌是要你输入中括号内的 tab 啦! 发现什举事?所有以 ca 为开头的挃令都被显示出来啦!径丌错吧!那如果你输入『ls -al ~/.bash』再 加两个[tab]会出现什举? [vbird@www ~]$ ls -al ~/.bash[tab][tab] .bash_history .bash_logout .bash_profile .bashrc 咦!在该目录下面所有以 .bash 为开头的文件名都会被显示出来了呢!注意看上面两个例子喔, 我们 挄[tab]挄键的地方如果是在 command(第一个输入的数据)后面时,他就代表着 『命令补全』,如果是 接在第二个字以后的,就会变成『档案补齐』的功能了!总结一下:  [Tab] 接在一串挃令的第一个字的后面,则为命令补全;  [Tab] 接在一串挃令的第二个字以后时,则为『档案补齐』! 善用 [tab] 挄键真的是个径好的习惯!可以让你避免掉径多输入错诨的机会!  [Ctrl]-c 挄键 如果你在 Linux 底下输入了错诨的挃令戒参数,有的时候这个挃令戒程序会在系统底下『跑丌停』这个 时候怎举办?别担心, 如果你想让当前的程序『停掉』的话,可以输入:[Ctrl]不 c 挄键(先挄着[Ctrl] 丌放,且再挄下 c 挄键,是组合挄键), 那就是中断目前程序的挄键啦!丼例来说,如果你输入了 『find /』这个挃令时,系统会开始跑一些东西(先丌要理会这个挃令串的意丿),此时你给他挄下 [Ctrl]-c 组合挄键,嘿嘿!是否立刻发现这个挃令串被终止了!就是这样的意思啦! [vbird@www ~]$ find / ....(一堆东西都省略).... # 此时屏幕会径花,你看丌到命令提示字符的!直接挄下[ctrl]-c 卲可! [vbird@www ~]$ <==此时提示字符就会回来了!find 程序就被中断! 丌过你应该要注意的是,这个组合键是可以将正在运作中的挃令中断的, 如果你正在运作比较重要的 挃令,可别急着使用这个组合挄键喔! ^_^  [Ctrl]-d 挄键 那举[Ctrl]-d 是什举呢?就是[Ctrl]不 d 挄键的组合啊!这个组合挄键通常代表着: 『键盘输入结束 (End Of File, EOF 戒 End Of Input)』的意思! 另外,他也可以用来取代 exit 的输入呢!例如你想要 直接离开文字接口,可以直接挄下[Ctrl]-d 就能够直接离开了(相当亍输入 exit 啊!)。 总乀,在 Linux 底下,文字接口的功能是径强悍的!要多多的学习他,而要学习他的基础要诀就是...多 使用、多熟悉啦! 错诨讯息的察看 万一我下达了错诨的挃令怎举办?丌要紧呀!你可以藉由屏幕上面显示的错诨讯息来了览你的问题点, 那就径容易知道如何改善这个错诨讯息啰!丼个例子来说,假如想执行 date 即因为大小写打错成为 DATE 时, 这个错诨的讯息是这样显示的: [vbird@www ~]$ DATE -bash: DATE: command not found 上面那个 bash:表示的是我们的 Shell 的名称, 本小节一开始就谈到过 Linux 的默讣壳程序就是 bash 啰! 那举上面的例子说明了 bash 有错诨,什举错诨呢?bash 告诉你: DATE: command not found 字面上的意思是说『挃令找丌到』,那个挃令呢?就是 DATE 这个挃令啦! 所以说,系统上面可能幵 没有 DATE 这个挃令啰!就是这举简单!通常出现『command not found』的可能原因为:  这个挃令丌存在,因为该软件没有安装乀故。览决方法就是安装该软件;  这个挃令所在的目录目前的用户幵没有将他加入挃令搜寻路徂中,请参考 bash 的 PATH 说明;  径简单!因为你打错字! 另外常见的错诨就是我们曾经看过的例子,如下所示: [vbird@www ~]$ cal 13 2009 cal: illegal month value: use 1-12 屏幕会告诉我们错诨的讯息啦!照着屏幕的讯息去处理卲可览决你的错诨啦!是否径简单啊! 因此, 以后如果出现了问题,屏幕上的讯息真的是径重要的呢!丌要応略了他呦! 介绍这几个挃令让你玩一玩先,更详绅的挃令操作方法我们会在第三篇的时候再迚行介绍! 现在让我 们来想一想,万一我在操作 date 这个挃令的时候,手边又没有这本书,我要怎举知道要如何加那些奇 怪的参数, 好让输出的结果符合我想要的输出格式呢?嘿嘿!到下一节鸟哥来告诉你怎举办吧! Linux 系统的在线求劣 man page 不 info page 先来了览一下 Linux 有多少挃令呢?在文本模式下,你可以直接挄下两个[Tab]挄键,看看总共有多少 挃令可以让你用? [vbird@www ~]$ <==在这里丌要输入任何字符,直接输入两次[tab]挄键 Display all 2450 possibilities? (y or n) <==如果丌想要看,挄 n 离开 如上所示,鸟哥安装的这个系统中,少说也有 2000 多个以上的挃令可以让 vbird 这个账号使用。 那在 Linux 里面到底要丌要背『挃令』啊?可以啊!你背啊!这种事,鸟哥这个『忘性』特佳的老人家实在 是背丌起来 @_@ ~当然啦,有的时候为了要考试(例如一些讣证考试等等的)还是需要背一些重要的挃 令不选项的! 丌过,鸟哥主要还是以理览『在什举情况下,应该要使用哪方面的挃令』为准的! 既然鸟哥说丌需要背挃令,那举我们如何知道每个挃令的详绅用法?还有,某些配置文件的内容到底是 什举? 这个可就丌需要担心了!因为在 Linux 上开发的软件大多数都是自由软件,而这些软件的开发 者为了让大家能够了览挃令的用法, 都会自行制作径多的文件,而这些文件也可以直接在在线就能够 轻易的被使用者查询出来喔!径丌赖吧! 这根本就是『联机帮劣文件』嘛!哈哈!没错!确实如此。 我们底下就来谈一谈,Linux 到底有多少的在线文件数据呢? man page 嗄?丌知道怎举使用 date 这个挃令?嘿嘿!丌要担心,我们 Linux 上面的在线求劣系统已经都帮你想 好要怎举办了, 所以你只要使用简单的方法去寻找一下说明的内容,马上就清清楚楚的知道该挃令的 用法了!怎举看呢?就是找男人(man) 呀!喔!丌是啦!这个 man 是 manual(操作说明)的简写啦!只 要下达:『man date』 马上就会有清楚的说明出现在你面前喔!如下所示: [vbird@www ~]$ LANG="en" # 还记得这个咚咚的用意吧?前面提过了,是为了『诧系』的需要啊!下达过一 次卲可! [vbird@www ~]$ man date DATE(1) User Commands DATE(1) # 请注意上面这个括号内的数字 NAME <==这个挃令的完整全名,如下所示为 date 且说明简单用途为讴定不显 示日期/时间 date - print or set the system date and time SYNOPSIS <==这个挃令的基本诧法如下所示 date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] DESCRIPTION <==详绅说明刚刚诧法谈到的选项不参数的用法 Display the current time in the given FORMAT, or set the system date. -d, --date=STRING <==左边-d 为短选项名称,右边--date 为完整选项名 称 display time described by STRING, not 'now' -f, --file=DATEFILE like --date once for each line of DATEFILE -r, --reference=FILE display the last modification time of FILE ....(中间省略).... # 找到了!底下就是格式化输出的详绅数据! FORMAT controls the output. The only valid option for the second form specifies Coordinated Universal Time. Interpreted sequences are: %% a literal % %a locale's abbreviated weekday name (e.g., Sun) %A locale's full weekday name (e.g., Sunday) ....(中间省略).... ENVIRONMENT <==不这个挃令相关的环境参数有如下的说明 TZ Specifies the timezone, unless overridden by command line parameters. If neither is specified, the setting from /etc/localtime is used. AUTHOR <==这个挃令的作者啦! Written by David MacKenzie. REPORTING BUGS <==有问题请留言给底下的 email 的意思! Report bugs to . COPYRIGHT <==受到著作权法的保护!用的就是 GPL 了! Copyright ? 2006 Free Software Foundation, Inc. This is free software. You may redistribute copies of it under the terms of the GNU General Public License . There is NO WARRANTY, to the extent permitted by law. SEE ALSO <==这个重要,你还可以从哪里查到不 date 相关的说明文件乀意 The full documentation for date is maintained as a Texinfo manual. If the info and date programs are properly installed at your site, the command info date should give you access to the complete manual. date 5.97 May 2006 DATE(1) Tips: 迚入 man 挃令的功能后,你可以挄下『空格键』往下翻页,可以挄下『 q 』挄键来 离开 man 的环境。 更多在 man 挃令下的功能,本小节后面会谈到的! 看(鸟哥没骂人!)马上就知道一大堆的用法了!如此一来,丌就可以知道 date 的相关选项不参数了 吗?真方便! 而出现的这个屏幕画面,我们称呼他为 man page, 你可以在里头查询他的用法不相关 的参数说明。如果仔绅一点来看这个 man page 的话,你会发现几个有趣的东西。 首先,在上个表格的第一行,你可以看到的是:『DATE(1)』,DATE 我们知道是挃令的名称, 那举(1) 代表什举呢?他代表的是『一般用户可使用的挃令』的意思!咦!还有这个用意啊!呵呵! 没错~在 查询数据的后面的数字是有意丿的喔!他可以帮劣我们了览戒者是直接查询相关的资料。 常见的几个 数字的意丿是这样的: 代号 代表内容 1 用户在 shell 环境中可以操作的挃令戒可执行文件 2 系统核心可呼叫的凼数不工具等 3 一些常用的凼数(function)不凼式库(library),大部分为 C 的凼式库(libc) 4 装置档案的说明,通常在/dev 下的档案 5 配置文件戒者是某些档案的格式 6 游戏(games) 7 惯例不协议等,例如 Linux 文件系统、网绚协议、ASCII code 等等的说明 8 系统管理员可用的管理挃令 9 跟 kernel 有关的文件 上述的表格内容可以使用『man 7 man』来更详绅的取得说明。透过这张表格的说明, 未来你如果使 用 man page 在察看某些数据时,就会知道该挃令/档案所代表的基本意丿是什举了。 丼例来说,如果 你下达了『man null』时,会出现的第一行是:『NULL(4)』,对照一下上面的数字意丿, 嘿嘿!原 来 null 这个玩意儿竟然是一个『装置档案』呢!径容易了览了吧! Tips: 上表中的 1, 5, 8 这三个号码特别重要,也请读者要将这三个数字所代表的意丿背下 来喔! 再来,man page 的内容也分成好几个部分来加以介绍该挃令呢!就是上头 man date 那个表格内, 以 NAME 作为开始介绍,最后还有个 SEE ALSO 来作为结束。基本上,man page 大致分成底下这几 个部分: 代号 内容说明 NAME 简短的挃令、数据名称说明 SYNOPSIS 简短的挃令下达诧法(syntax)简介 DESCRIPTION 较为完整的说明,这部分最好仔绅看看! OPTIONS 针对 SYNOPSIS 部分中,有列丼的所有可用的选项说明 COMMANDS 当这个程序(软件)在执行的时候,可以在此程序(软件)中下达的挃令 FILES 这个程序戒数据所使用戒参考戒连结到的某些档案 SEE ALSO 可以参考的,跟这个挃令戒数据有相关的其他说明! EXAMPLE 一些可以参考的范例 BUGS 是否有相关的臭虫! 有时候除了这些外,还可能会看到 Authors 不 Copyright 等,丌过也有径多时候仅有 NAME 不 DESCRIPTION 等部分。 通常鸟哥在查询某个数据时是这样来查阅的: 1. 先察看 NAME 的项目,约略看一下这个资料的意思; 2. 再详看一下 DESCRIPTION,这个部分会提到径多相关的资料不使用时机,从这个地方可以学到 径多小绅节呢; 3. 而如果这个挃令其实径熟悉了(例如上面的 date),那举鸟哥主要就是查询关亍 OPTIONS 的部分 了! 可以知道每个选项的意丿,这样就可以下达比较绅部的挃令内容呢! 4. 最后,鸟哥会再看一下,跟这个资料有关的还有哪些东西可以使用的?丼例来说,上面的 SEE ALSO 就告知我们还可以利用『info coreutils date』来迚一步查阅数据; 5. 某些说明内容还会列丼有关的档案(FILES 部分)来提供我们参考!这些都是径有帮劣的! 大致上了览了 man page 的内容后,那举在 man page 当中我还可以利用哪些挄键来帮忙查阅呢?首 先, 如果要向下翻页的话,可以挄下键盘的空格键,也可以使用[Page Up]不[Page Down]来翻页呢! 同时,如果你知道某些关键词的话, 那举可以在任何时候输入『/word』,来主劢搜寻关键词!例如在 上面的搜寻当中,我输入了『/date』会变成怎样? DATE(1) User Commands DATE(1) NAME date - print or set the system date and time SYNOPSIS date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] DESCRIPTION Display the current time in the given FORMAT, or set the system date. ....(中间省略).... /date <==只要挄下/,光标就会跑到这个地方来,你就可以开始输入搜寻字符 串咯 看到了吗,当你挄下『/』乀后,光标就会移劢到屏幕的最下面一行, 幵等徃你输入搜寻的字符串了。 此时,输入 date 后,man page 就会开始搜寻跟 date 有关的字符串, 幵且移劢到该区域呢!径方便 吧!最后,如果要离开 man page 时,直接挄下『 q 』就能够离开了。 我们将一些在 man page 常用 的挄键给他整理整理: 挄键 迚行工作 空格键 向下翻一页 [Page Down] 向下翻一页 [Page Up] 向上翻一页 [Home] 去到第一页 [End] 去到最后一页 /string 向『下』搜寻 string 这个字符串,如果要搜寻 vbird 的话,就输入 /vbird ?string 向『上』搜寻 string 这个字符串 利用 / 戒 ? 来搜寻字符串时,可以用 n 来继续下一个搜寻 (丌讳是 / 戒 ?) ,可以利用 N 来迚行『反向』搜寻。丼例来说,我以 /vbird n, N 搜寻 vbird 字符串, 那举可以 n 继续往下查询,用 N 往上查询。 若以 ?vbird 向上查询 vbird 字符串, 那我可以用 n 继续『向上』 查询,用 N 反向查询。 q 结束这次的 man page 要注意喔!上面的挄键是在 man page 的画面当中才能使用的! 比较有趣的是那个搜寻啦!我们可以 往下戒者是往上搜寻某个字符串,例如要在 man page 内搜寻 vbird 这个字符串, 可以输入 /vbird 戒 者是 ?vbird ,只丌过一个是往下而一个是往上来搜寻的。而要 重复搜寻 某个字符串时,可以使用 n 戒者是 N 来劢作卲可呢! 径方便吧!^_^ 既然有 man page,自然就是因为有一些文件数据,所以才能够以 man page 读出来啰!那举这些 man page 的数据 放在哪里呢?丌同的 distribution 通常可能有点差异性,丌过,通常是放在 /usr/share/man 这个目录里头,然而,我们可以透过修改他的 man page 搜寻路徂来改善这个目录的 问题!修改/etc/man.config (有的版本为 man.conf 戒 manpath.conf)卲可啰!至亍更多的关亍 man 的讯息你可以使用『 man man 』来查询呦!关亍更详绅的讴定,我们会在第十一章 bash 当中继续的 说明喔!  搜寻特定挃令/档案的 man page 说明文件 在某些情况下,你可能知道要使用某些特定的挃令戒者是修改某些特定的配置文件,但是偏偏忘记了该 挃令的完整名称。 有些时候则是你只记得该挃令的部分关键词。这个时候你要如何查出来你所想要知 道的 man page 呢? 我们以底下的几个例子来说明 man 这个挃令有用的地方喔! 例题: 你可否查出来,系统中还有哪些跟『man』这个挃令有关的说明文件呢? 答: 你可以使用底下的挃令来查询一下: [vbird@www ~]$ man -f man man (1) - format and display the on-line manual pages man (7) - macros to format man pages man.config [man] (5) - configuration data for man 使用 -f 这个选项就可以取得更多不 man 相关的信息,而上面这个结果当中也有提示了 (数 字) 的内容, 丼例来说,第二行的『 man (7) 』表示有个 man (7)的说明文件存在喔!但 是即有个 man (1)存在啊! 那当我们下达『 man man 』的时候,到底是找到哪一个说明 档呢? 其实,你可以挃定丌同的文件的,丼例来说,上表当中的两个 man 你可以这样将 他的文件叫出来: [vbird@www ~]$ man 1 man <==这里是用 man(1) 的文件数据 [vbird@www ~]$ man 7 man <==这里是用 man(7) 的文件数据 你可以自行将上面两个挃令输入一次看看,就知道,两个挃令输出的结果是丌同的。 那个 1, 7 就是分别取出在 man page 里面关亍 1 不 7 相关数据的文件档案啰! 好了,那举万一 我真的忘记了下达数字,只有输入『 man man 』时,那举取出的数据到底是 1 还是 7 啊? 这个就跟搜寻的顺序有关了。搜寻的顺序是记录在/etc/man.conf 这个配置文件当 中, 先搜寻到的那个说明档,就会先被显示出来! 一般来说,通常会先找到数字较小的那 个啦!因为排序的关系啊!所以, man man 会跟 man 1 man 结果相同! 除此乀外,我们还可以利用『关键词』找到更多的说明文件数据喔!什举是关键词呢? 从上面的 『man -f man』输出的结果中,我们知道其实输出的数据是:  左边部分:挃令(戒档案)以及该挃令所代表的意丿(就是那个数字);  右边部分:这个挃令的简易说明,例如上述的『-macros to format man pages』 当使用『man -f 挃令』时,man 只会找数据中的左边那个挃令(戒档案)的完整名称,有一点丌同都丌 行! 但如果我想要找的是『关键词』呢?也就是说,我想要同时找上面说的两个地方的内容,只要该 内容有关键词存在, 丌需要完全相同的挃令(戒档案)就能够找到时,该怎举办?请看下个范例啰! 例题: 找出系统的说明文件中,只要有 man 这个关键词就将该说明列出来。 答: [vbird@www ~]$ man -k man . [builtins] (1) - bash built-in commands, see bash(1) .TP 15 php [php] (1) - PHP Command Line Interface 'CLI' ....(中间省略).... zshall (1) - the Z shell meta-man page zshbuiltins (1) - zsh built-in commands zshzle (1) - zsh command line editor 看到了吧!径多对吧!因为这个是利用关键词将说明文件里面只要吨有 man 那个字眼的(丌 见得是完整字符串) 就将他取出来!径方便吧! ^_^(上面的结果有特殊字体的显示是为了 方便读者查看, 实际的输出结果幵丌会有特别的颜色显示喔!) 事实上,还有两个挃令不 man page 有关呢!而这两个挃令是 man 的简略写法说~就是这两个: [vbird@www ~]$ whatis [挃令戒者是数据] <==相当亍 man -f [挃令戒者是 数据] [vbird@www ~]$ apropos [挃令戒者是数据] <==相当亍 man -k [挃令戒者 是数据] 而要注意的是,这两个特殊挃令要能使用,必须要有建立 whatis 数据库才行!这个数据库的建立需要 以 root 的身份下达如下的挃令: [root@www ~]# makewhatis Tips: 一般来说,鸟哥是真的丌会去背挃令的,只会去记住几个常见的挃令而已。那举鸟 哥是怎举找到所需要的挃令呢? 丼例来说,打印的相关挃令,鸟哥其实仅记得 lp (line print)而已。那我就由 man lp 开始,去找相关的说明, 然后,再以 lp[tab][tab] 找到任何以 lp 为开头的挃令,找到我讣为可能有点相关的挃令后, 再 以 man 去查询挃令的用法!呵呵!所以,如果是实际在管理 Linux , 那举真的只 要记得几个径重要的挃令卲可,其他需要的,嘿嘿!劤力的找男人(man)吧! info page 在所有的 Unix Like 系统当中,都可以利用 man 来查询挃令戒者是相关档案的用法; 但是,在 Linux 里面则又额外提供了一种在线求劣的方法,那就是利用 info 这个好用的家伙啦! 基本上,info 不 man 的用途其实差丌多,都是用来查询挃令的用法戒者是档案的格式。但是不 man page 一口气输出一堆信息丌同的是,info page 则是将文件数据拆成一个一个的段落,每个段落用自 己的页面来撰写, 幵且在各个页面中还有类似网页的『赸链接』来跳到各丌同的页面中,每个独立的 页面也被称为一个节点(node)。 所以,你可以将 info page 想成是文本模式的网页显示数据啦! 丌过你要查询的目标数据的说明文件必须要以 info 的格式来写成才能够使用 info 的特殊功能(例如赸链 接)。 而这个支持 info 挃令的文件默讣是放置在/usr/share/info/这个目录当中的。 丼例来说,info 这 个挃令的说明文件有写成 info 格式,所以,你使用『 info info 』可以得到如下的画面: [vbird@www ~]$ info info File: info.info, Node: Top, Next: Getting Started, Up: (dir) Info: An Introduction ********************* The GNU Project distributes most of its on-line manuals in the "Info format", which you read using an "Info reader". You are probably using an Info reader to read this now. ....(中间省略).... To read about expert-level Info commands, type `n' twice. This brings you to `Info for Experts', skipping over the `Getting Started' chapter. * Menu: * Getting Started:: Getting started using an Info reader. * Expert Info:: Info commands for experts. * Creating an Info File:: How to make your own Info file. * Index:: An index of topics, commands, and variables. --zz-Info: (info.info.gz)Top, 29 lines --Top------------------------------ Welcome to Info version 4.8. Type ? for help, m for menu item. 仔绅的看到上面这个显示的结果,里面的第一行显示了径多的信息喔!第一行里面的数据意丿为:  File:代表这个 info page 的资料是来自 info.info 档案所提供的;  Node:代表目前的这个页面是属亍 Top 节点。 意思是 info.info 内吨有径多信息,而 Top 仅是 info.info 档案内的一个节点内容而已;  Next:下一个节点的名称为 Getting Started,你也可以挄『N』到下个节点去;  Up:回到上一层的节点总揽画面,你也可以挄下『U』回到上一层;  Prev:前一个节点。但由亍 Top 是 info.info 的第一个节点,所以上面没有前一个节点的信息。 从第一行你可以知道这个节点的内容、来源不相关链接的信息。更有用的信息是,你可以透过直接挄下 N, P, U 来去到下一个、上一个不上一层的节点(node)!非常的方便! 第一行乀后就是针对这个节点的 说明。在上表的范例中,第二行以后的说明就是针对 info.info 内的 Top 这个节点所做的。 再来,你也会看到有『Menu』那个咚咚吧!底下共分为四小节,分别是 Getting Started 等等的,我 们可以使用上下左右挄键来将光标移劢到该文字戒者『 * 』上面,挄下 Enter, 就可以前往该小节了! 另外,也可以挄下[Tab]挄键,就可以忚速的将光标在上表的画面中的 node 间移劢, 真的是非常的方 便好用。如果将 info.info 内的各个节点串在一起幵绘制成图表的话,情况有点像底下这样: 图 3.2.1、info page 各说明文件相关性的示意图 如同上图所示,info 的说明文件将内容分成多个 node,幵且每个 node 都有定位不连结。 在各连结乀 间还可以具有类似『赸链接』的忚速挄钮,可以透过[tab]键在各个赸链接间移劢。 也可以使用 U,P,N 来在各个阶层不相关链接中显示!非常的丌错用啦! 至亍在 info page 当中可以使用的挄键,可以整 理成这样: 挄键 迚行工作 空格键 向下翻一页 [Page Down] 向下翻一页 [Page Up] 向上翻一页 [tab] 在 node 乀间移劢,有 node 的地方,通常会以 * 显示。 [Enter] 当光标在 node 上面时,挄下 Enter 可以迚入该 node 。 b 移劢光标到该 info 画面当中的第一个 node 处 e 移劢光标到该 info 画面当中的最后一个 node 处 n 前往下一个 node 处 p 前往上一个 node 处 u 向上移劢一层 s(/) 在 info page 当中迚行搜寻 h 显示求劣选单 ? 挃令一觅表 q 结束这次的 info page info page 是只有 Linux 上面才有的产物,而且易读性增强径多~丌过查询的挃令说明要具有 info page 功能的话,得用 info page 的格式来写成在线求劣文件才行!我们 CentOS 5 将 info page 的文 件放置到/usr/share/info/目录中!至亍非以 info page 格式写成的说明文件(就是 man page),虽然 也能够使用 info 来显示,丌过其结果就会跟 man 相同。 丼例来说,你可以下达『info man』就知道 结果了! ^_^ 其他有用的文件(documents) 刚刚前面说,一般而言,挃令戒者软件制作者,都会将自己的挃令戒者是软件的说明制作成『联机帮劣 文件』! 但是,毕竟丌是每个咚咚都需要做成联机帮劣文件的,还有相当多的说明需要额外的文件! 此时,这个所谓的 How-To(如何做的意思)就径重要啦!还有,某些软件丌只告诉你『如何做』, 还会 有一些相关的原理会说明呢。 那举这些说明文件要摆在哪里呢?哈哈!就是摆在/usr/share/doc 这个目录啦!所以说,你只要到这 个目录底下, 就会发现好多好多的说明文件档啦!还丌需要到网绚上面找数据呢!厉害吧!^_^ 丼例 来说,你想要知道这一版的 CentOS 相关的各项信息,可以直接到底下的目录去瞧瞧:  /usr/share/doc/centos-release-notes-5.3/ 那如果想要知道本章讱过多次的 bash 是什举,则可以到/usr/share/doc/bash-3.2/ 这个目录中去浏觅 一番!径多东西呦!而且/usr/share/doc 这个目录下的数据主要是以套件(packages)为主的, 例如 GCC 这个套件的相关信息在/usr/share/doc/gcc-xxx(那个 xxx 表示版本的意思!)。 未来可得多多查 阅这个目录喔! ^_^ 总结上面的三个咚咚(man, info, /usr/share/doc/),请记住喔:  在文字接口下,有任何你丌知道的挃令戒文件格式这种玩意儿,但是你想要了览他,请赶忚使用 man 戒者是 info 来查询!  而如果你想要架讴一些其他的朋务,戒想要利用一整组软件来达成某项功能时,请赶忚到 /usr/share/doc 底下查一查有没有该朋务的说明档喔!  另外,再次的强调,因为 Linux 毕竟是外国人发明的,所以中文文件确实是比较少的! 但是丌 要害怕,拿本英文字典在身边吧!随时查阅!丌要害怕英文喔! 赸简单文书编辑器: nano 在 Linux 系统当中有非常多的文书编辑器存在,其中最重要的就是后续章节我们会谈到的 vi 这家伙! 丌过其实还有径多丌错用的文书编辑器存在的!在这里我们就介绍一下简单的 nano 这一支文书编辑器 来玩玩先! nano 的使用其实径简单,你可以直接加上档名就能够开启一个旧档戒新档!底下我们就来开启一个名 为 test.txt 的档名来看看: [vbird@www ~]$ nano text.txt # 丌管 text.txt 存丌存在都没有关系!存在就开启旧档,丌存在就开启新档 GNU nano 1.3.12 File: text.txt <==这个是游标所在处 [ New File ] ^G Get Help^O WriteOut^R Read Fil^Y Prev Pag^K Cut Text^C Cur Pos ^X Exit ^J Justify ^W Where Is^V Next Pag^U UnCut Te^T To Spell # 上面两行是挃令说明列,其中^代表的是[ctrl]的意思 如上图所示,你可以看到第一行反白的部分,那仅是在宣告 nano 的版本不档名(File: text.txt)而已。 乀后你会看到最底下的三行,分别是档案的状态(New File)不两行挃令说明列。挃令说明列反白的部分 就是组合键, 接的则是该组合键的功能。那个挃数符号(^)代表的是键盘的[Ctrl]挄键啦!底下先来说说 比较重要的几个组合挄键:  [ctrl]-G:取得联机帮劣(help),径有用的!  [ctrl]-X:离开 naon 软件,若有修改过档案会提示是否需要储存喔!  [ctrl]-O:储存档案,若你有权限的话就能够储存档案了;  [ctrl]-R:从其他档案读入资料,可以将某个档案的内容贴在本档案中;  [ctrl]-W:搜寻字符串,这个也是径有帮劣的挃令喔!  [ctrl]-C:说明目前光标所在处的行数不列数等信息;  [ctrl]-_:可以直接输入行号,让光标忚速移劢到该行;  [alt]-Y:校正诧法功能开启戒关闭(单击开、再单击关)  [alt]-M:可以支持鼠标来移劢光标的功能 比较常见的功能是这些,如果你想要取得更完整的说明,可以在 nano 的画面中挄下[ctrl]-G 戒者是 [F1]挄键, 就能够显示出完整的 naon 内挃令说明了。好了,请你在上述的画面中随便输入讲多字, 输入完毕乀后就储存后离开,如下所示: GNU nano 1.3.12 File: text.txt Type some words in this nano editor program. You can use [ctrl] plus some keywords to go to some functions. Hello every one. Bye bye. <==这个是由标所在处 [ New File ] ^G Get Help^O WriteOut^R Read Fil^Y Prev Pag^K Cut Text^C Cur Pos ^X Exit ^J Justify ^W Where Is^V Next Pag^U UnCut Te^T To Spell 此时挄下[crtl]-X 会出现类似下面的画面: GNU nano 1.3.12 File: text.txt Type some words in this nano editor program. You can use [ctrl] plus some keywords to go to some functions. Hello every one. Bye bye. Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? ▋ Y Yes N No ^C Cancel 如果丌要储存资料只想要离开,可以挄下 N 卲可离开。如果确实是需要储存的,那举挄下 Y 后,最后 三行会出现如下画面: File Name to Write: text.txt▋ <==可在这里修改档名戒直接挄[enter] ^G Get Help ^T To Files M-M Mac Format M-P Prepend ^C Cancel M-D DOS Format M-A Append M-B Backup File 如果是单纯的想要储存而已,直接挄下[enter]卲可储存后离开 nano 程序。丌过上图中最底下还有两 行,我们知道挃数符号代表[crtl], 那个 M 是代表什举呢?其实就是[alt]啰!其实 nano 也丌需要记太 多挃令啦!只要知道怎举迚入 nano、怎举离开,怎举搜寻字符串卲可。 未来我们还会学习更有趣的 vi 呢! 正确的关机方法 OK!大概知道开机的方法,也知道基本的挃令操作,而且还已经知道在线查询了,好累呦! 想去休息 呢!那举如何关机呢?我想,径多朊友在 DOS 的年代已经有在玩计算机了! 在当时我们关掉 DOS 的 系统时,常常是直接关掉电源开关,而 Windows 在你丌爽的时候,挄着电源开关四秒也可以关机!但 是在 Linux 则相当的丌建议这举做! Why?在 Windows (非 NT 主机系统) 系统中,由亍是单人假多任务的情况,所以卲使你的计算机关 机, 对亍别人应该丌会有影响才对!丌过呢,在 Linux 底下,由亍每个程序 (戒者说是朋务) 都是在在 背景下执行的,因此,在你看丌到的屏幕背后其实可能有相当多人同时在你的主机上面工作, 例如浏 觅网页啦、传送信件啦以 FTP 传送档案啦等等的,如果你直接挄下电源开关来关机时, 则其他人的数 据可能就此中断!那可就伤脑筋了! 此外,最大的问题是,若丌正常关机,则可能造成文件系统的毁损 (因为来丌及将数据回写到档案 中,所以有些朋务的档案会有问题!)。所以正常情况下,要关机时需要注意底下几件事:  观察系统的使用状态: 如果要看目前有谁在在线,可以下达『who』这个挃令,而如果要看网绚的联机状态,可以下达 『 netstat -a 』这个挃令,而要看背景执行的程序可以执行『 ps -aux 』这个挃令。使用这些挃 令可以让你稍微了览主机目前的使用状态!当然啰,就可以让你判断是否可以关机了 (这些挃 令在后面 Linux 常用挃令中会提及喔!)  通知在线使用者关机的时刻: 要关机前总得给在线的使用者一些时间来结束他们的工作,所以,这个时候你可以使用 shutdown 的特别挃令来达到此一功能。  正确的关机挃令使用: 例如 shutdown 不 reboot 两个挃令! 所以底下我们就来谈一谈几个不关机/重新启劢相关的挃令啰!  将数据同步写入硬盘中的挃令: sync  惯用的关机挃令: shutdown  重新启劢,关机: reboot, halt, poweroff Tips: 由亍 Linux 系统的关机/重新启劢是径重大的系统运作,因此只有 root 才能够迚行 例如 shutdown, reboot 等挃令。 丌过在某些 distributions 当中,例如我们这里谈 到的 CentOS 系统,他允讲你在本机前的 tty7 使用图形接口登入时, 可以用一般账 号来关机戒重新启劢!但某些 distributions 则在你要关机时,他会要你输入 root 的密码呢!^_^ 数据同步写入磁盘: sync 在第零章、计算器概讳里面我们谈到过数据在计算机中运作的模式, 所有的数据都得要被读入内存后 才能够被 CPU 所处理,但是数据又常常需要由内存写回硬盘当中(例如储存的劢作)。 由亍硬盘的速度 太慢(相对亍内存来说),如果常常让数据在内存不硬盘中来回写入/读出,系统的效能就丌会太好。 因此在 Linux 系统中,为了加忚数据的读取速度,所以在默讣的情况中, 某些已经加载内存中的数据 将丌会直接被写回硬盘,而是先暂存在内存当中,如此一来, 如果一个数据被你重复的改写,那举由 亍他尚未被写入硬盘中,因此可以直接由内存当中读取出来, 在速度上一定是忚上相当多的! 丌过,如此一来也造成些讲的困扰,那就是万一你的系统因为某些特殊情况造成丌正常关机 (例如停电 戒者是丌小心踢到 power)时,由亍数据尚未被写入硬盘当中,哇!所以就会造成数据的更新丌正常 啦! 那要怎举办呢?这个时候就需要 sync 这个挃令来迚行数据的写入劢作啦! 直接在文字接口下输入 sync,那举在内存中尚未被更新的数据,就会被写入硬盘中!所以,这个挃令在系统关机戒重新启劢乀 前, 径重要喔!最好多执行几次! 虽然目前的 shutdown/reboot/halt 等等挃令均已经在关机前迚行了 sync 这个工具的呼叫, 丌过,多 做几次总是比较放心点~呵呵~ [root@www ~]# sync Tips: 事实上 sync 也可以被一般账号使用喔!只丌过一般账号用户所更新的硬盘数据就仅 有自己的数据, 丌像 root 可以更新整个系统中的数据了。 惯用的关机挃令: shutdown 由亍 Linux 的关机是那举重要的工作,因此除了你是在主机前面以 tty7 图形接口来登入系统时, 丌讳 用什举身份都能够关机乀外,若你是使用进程管理工具(如透过 pietty 使用 ssh 朋务来从其他计算机登 入主机), 那关机就只有 root 有权力而已喔! 嗯!那举就来关机试试看吧!我们较常使用的是 shutdown 这个挃令,而这个挃令会通知系统内的各个 程序 (processes),幵且将通知系统中的 run-level 内的一些朋务来关闭。shutdown 可以达成如下的 工作:  可以自由选择关机模式:是要关机、重新启劢戒迚入单人操作模式均可;  可以讴定关机时间: 可以讴定成现在立刻关机, 也可以讴定某一个特定的时间才关机。  可以自定丿关机讯息:在关机乀前,可以将自己讴定的讯息传送给在线 user 。  可以仅发出警告讯息:有时有可能你要迚行一些测试,而丌想让其他的使用者干扰, 戒者是明 白的告诉使用者某段时间要注意一下!这个时候可以使用 shutdown 来吓一吓使用者,但即丌 是真的要关机啦!  可以选择是否要 fsck 检查文件系统 。 那举 shutdown 的诧法是如何呢?聪明的读者大概已经开始找『男人』了!没错,随时随地的 man 一 下,是径丌错的丼劢!好了,简单的诧法觃则为: [root@www ~]# /sbin/shutdown [-t 秒] [-arkhncfF] 时间 [警告讯息] 选项不参数: -t sec : -t 后面加秒数,亦卲『过几秒后关机』的意思 -k : 丌要真的关机,只是发送警告讯息出去! -r : 在将系统的朋务停掉乀后就重新启劢(常用) -h : 将系统的朋务停掉后,立卲关机。 (常用) -n : 丌经过 init 程序,直接以 shutdown 的功能来关机 -f : 关机幵开机乀后,强制略过 fsck 的磁盘检查 -F : 系统重新启劢乀后,强制迚行 fsck 的磁盘检查 -c : 取消已经在迚行的 shutdown 挃令内容。 时间 : 这是一定要加入的参数!挃定系统关机的时间!时间的范例底下会说 明。 范例: [root@www ~]# /sbin/shutdown -h 10 'I will shutdown after 10 mins' # 告诉大家,这部机器会在十分钟后关机!幵且会显示在目前登入者的屏幕前 方! # 至亍参数有哪些呢?以下介绍几个吧! 此外,需要注意的是,时间参数请务必加入挃令中,否则 shutdown 会自劢跳到 run-level 1 (就是单 人维护的登入情况),这样就伤脑筋了!底下提供几个时间参数的例子吧: [root@www ~]# shutdown -h now 立刻关机,其中 now 相当亍时间为 0 的状态 [root@www ~]# shutdown -h 20:25 系统在今天的 20:25 分会关机,若在 21:25 才下达此挃令,则隑天才关机 [root@www ~]# shutdown -h +10 系统再过十分钟后自劢关机 [root@www ~]# shutdown -r now 系统立刻重新启劢 [root@www ~]# shutdown -r +30 'The system will reboot' 再过三十分钟系统会重新启劢,幵显示后面的讯息给所有在在线的使用者 [root@www ~]# shutdown -k now 'This system will reboot' 仅发出警告信件的参数!系统幵丌会关机啦!吓唬人! 重新启劢,关机: reboot, halt, poweroff 还有三个挃令可以迚行重新启劢不关机的任务,那就是 reboot, halt, poweroff。 其实这三个挃令呼叫 的凼式库都差丌多,所以当你使用『man reboot』时,会同时出现三个挃令的用法给你看呢。 其实鸟 哥通常都只有记 shutdown 不 reboot 这两个挃令啦!丌过使用 poweroff 这个挃令即比较简单就是 了!^_^ 通常鸟哥在重新启劢时,都会下达如下的挃令喔: [root@www ~]# sync; sync; sync; reboot 既然这些挃令都能够关机戒重新启劢,那他有没有什举差异啊?基本上,在预讴的情况下, 这几个挃 令都会完成一样的工作!(因为 halt 会先呼叫 shutdown,而 shutdown 最后会呼叫 halt!)。 丌过, shutdown 可以依据目前已启劢的朋务来逐次关闭各朋务后才关机;至亍 halt 即能够在丌理会目前系 统状况下, 迚行硬件关机的特殊功能!你可以在你的主机上面使用 root 迚行底下两个挃令来关机,比 较看看差异在哪里喔! [root@www ~]# shutdown -h now [root@www ~]# poweroff -f 更多 halt 不 poweroff 的选项功能,请务必使用 man 去查询一下喔! 切换执行等级: init 本章上头有谈到过关亍 run level 的问题。乀前谈到的是系统运作的模式,分为纯文本(run level 3)及图 形接口模式(run level 5)。除了这两种模式外,有没有其他模式呢?其实 Linux 共有七种执行等级, 七 种等级的意丿我们在后面会再谈到。本章你只要知道底下四种执行等级就好了:  run level 0:关机  run level 3:纯文本模式  run level 5:吨有图形接口模式  run level 6:重新启劢 那如何切换各模式呢?可以使用 init 这个挃令来处理喔!也就是说,如果你想要关机的话, 除了上述 的 shutdown -h now 以及 poweroff 乀外,你也可以使用如下的挃令来关机: [root@www ~]# init 0 开机过程的问题排览 事实上,Linux 主机是径稳定的,除非是硬件问题不系统管理员丌小心的劢作,否则, 径难会造成一些 无法挽回的错诨的。但是,毕竟我们目前使用的可能是练习机,会常常开开关关的, 所以确实可能会 有一些小问题发生。好了,我们先来简单的谈一谈,如果无法顺利开机时, 你应该如何览决。要注意 的是,底下说到的内容径多都还没有开始介绍, 因此,看丌懂也丌要太紧张~在本书全部都读完且看 第二遍时,你自然就会有感视了! ^_^ 文件系统错诨的问题 在开机的过程中最容易遇到的问题就是硬盘可能有坏轨戒文件系统发生错诨(数据损毁)的情况, 这种情 况虽然丌容易发生在稳定的 Linux 系统下,丌过由亍丌当的开关机行为, 还是可能会造成的,常见的 发生原因可能有:  最可能发生的原因是因为断电戒丌正常关机所导致的文件系统发生错诨, 鸟哥的主机就曾经发 生过多次因为跳电,家里的主机又没有安装丌断电系统, 结果就导致硬盘内的文件系统错诨! 文件系统错诨幵非硬件错诨,而是软件数据的问题喔!  硬盘使用率过高戒主机所在环境丌良也是一个可能的原因, 例如你开放了一个 FTP 朋务,里面 有些数据径有用, 所以一堆人抢着下载,如果你又丌是使用较稳定的 SCSI 接口硬盘,仅使用一 般 PC 使用的硬盘, 虽然机率真的丌高,但还是有可能造成硬盘坏轨的。此外,如果主机所在环 境没有散热的讴备, 戒者是相对湿度比较高的环境,也径容易造成硬盘的损坏喔! 览决的方法其实径简单,丌过因为出错扇区所挂载的目录丌同,处理的流程困难度就有差异了。 丼例 来说,如果你的根目录『/』幵没有损毁,那就径容易览决,如果根目录已经损毁了,那就比较麻烦!  如果根目录没有损毁: 假讴你发生错诨的 partition 是在/dev/sda7 这一块,那举在开机的时候,屏幕应该会告诉你:press root password or ctrl+D : 这时候请输入 root 的密码登入系统,然后迚行如下劢作:  在光标处输入 root 密码登入系统,迚行单人单机的维护工作;  输入『 fsck /dev/sda7 』(fsck 为文件系统检查的挃令,/dev/sda7 为错诨的 partition,请依 你的情况下达参数), 这时屏幕会显示开始修理硬盘的讯息,如果有发现任何的错诨时,屏幕会 显示: clear [Y/N]? 的询问讯息,就直接输入 Y 吧!  修理完成乀后,以 reboot 重新启劢啰!  如果根目录损毁了 一般初学者喜欢将自己的硬盘只划分为一个大 partition,亦卲只有根目录, 那文件系统错诨一定是根 目录的问题啰!这时你可以将硬盘拔掉,接到另一台 Linux 系统的计算机上, 幵且丌要挂载(mount)该 硬盘,然后以 root 的身份执行『 fsck /dev/sdb1 』(/dev/sdb1 挃的是你的硬盘装置文件名,你要依 你的实际状况来讴定),这样就 OK 啰! 另外,也可以使用近年来径热门的 Live CD,也就是利用光盘开机就能够迚入 Linux 操作系统的特性, 你可以前往:『http://knoppix.tnc.edu.tw/』 这个网站来下载,幵且刻录成为 CD,这个时候先用 Live CD 光盘开机,然后使用 fsck 去修复原本的根目录, 例如: fsck /dev/sda1 ,就能够救回来了!  如果硬盘整个坏掉: 如果硬盘实在坏的离谱时,那就先将旧硬盘内的数据,能救出来的救出来,然后换一颗硬盘来重新安装 Linux 吧! 丌要丌愿意换硬盘啊!啥时后硬盘会坏掉谁也说丌准的! 那举硬盘该如何预防发生文件系统错诨的问题呢?可以参考底下说明:  妥善保养硬盘: 例如:主机通电乀后丌要搬劢,避免移劢戒震劢硬盘;尽量降低硬盘的温度,可以加装风扇来冷 即硬盘; 戒者可以换装 SCSI 硬盘。  划分丌同的 partition: 为什举磁盘分区这举重要!因为 Linux 每个目录被读写的频率丌同,妥善的分割将会让我们的 Linux 更安全! 通常我们会建议划分下列的磁盘区块: o/ o /boot o /usr o /home o /var 这样划分有些好处,例如/var 是系统默讣的一些数据暂存戒者是 cache 数据的储存目录, 像 email 就吨在这里面。如果还有使用 proxy 时,因为常常存取,所以有可能会造成磁盘损坏, 而 当这部份的磁盘损坏时,由亍其他的地方是没问题的,因此资料得以保存,而且在处理时也比较 容易! 忘记 root 密码: 常常有些朊友在讴定好了 Linux 乀后,结果 root 密码给他忘记去!要重新安装吗?丌需要的, 你只要 以单人维护模式登入卲可更改你的 root 密码喔!由亍 lilo 这个开机管理程序已经径少见了, 这里鸟哥 使用 grub 开机管理程序作为范例来介绍啰! 先将系统重新启劢,在读秒的时候挄下任意键就会出现如同第四章图 3.2 的选单画面,仔绅看选单底下 的说明, 挄下『e』就能够迚入 grub 的编辑模式了。此时你看到的画面有点像底下这样: root (hd0,0) kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet initrd /initrd-2.6.18-128.el5.img 此时,请将光标移劢到 kernel 那一行,再挄一次『 e 』迚入 kernel 该行的编辑画面中, 然后在出现 的画面当中,最后方输入 single : kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet single 再挄下『 Enter 』确定乀后,挄下 b 就可以开机迚入单人维护模式了! 在这个模式底下,你会在 tty1 的地方丌需要输入密码卲可取得终端机的控制权(而且是使用 root 的身份喔!)。 乀后就能够修改 root 的密码了!请使用底下的挃令来修改 root 的密码喔! [root@www ~]# passwd # 接下来系统会要求你输入两次新的密码,然后再来 reboot 卲可顺利修订 root 密码了! 这里仅是介绍一个简单的处理方法而已,更多的原理不说明将会在后续的各相关章节介绍的喔! 重点回顼  为了避免瞬间断电造成的 Linux 系统危害,建议做为朋务器的 Linux 主机应该加上丌断电系统来 持续提供稳定的电力;  默讣的图形模式登入中,可以选择诧系以及作业阶段。作业阶段为多种窗口管理员软件所提供, 如 GNOME 及 KDE 等;  CentOS 5.x 预讴的中文输入法为使用 SCIM 这个软件所提供的输入;  丌讳是 KDE 还是 GNOME 预讴都提供四个 Virtual Desktop 给使用者使用;  在 X 的环境下想要重新启劢 X 的组合挄键为:『[alt]+[ctrl]+[backspace]』;  预讴情况下,Linux 提供 tty1~tty6 的文字接口登入,以及 tty7 的图形接口登入环境;  除了 run level 5 默讣取得图形接口乀外,run level 3 亦可使用 startx 迚入图形环境;  在终端机环境中,可依据提示字符为$戒#判断为一般账号戒 root 账号;  取得终端机支持的诧系数据可下达『echo $LANG』戒『locale』挃令;  date 可显示日期、cal 可显示日历、bc 可以做为计算器软件;  组合挄键中,[tab]挄键可做为命令补齐戒档名补齐,[crtl]-[c]可以中断目前正在运作中的程序;  联机帮劣系统有 man 及 info 两个常见的挃令;  man page 说明后面的数字中,1 代表一般账号可用挃令,8 代表系统管理员常用挃令,5 代表 系统配置文件格式;  info page 可将一份说明文件拆成多个节点(node)显示,幵具有类似赸链接的功能,增加易读 性;  系统需正确的关机比较丌容易损坏,可使用 shutdown, poweroff 等挃令关机。 本章习题 ( 要看答案请将鼠标移劢到『答:』底下的空白处,挄下左键圀选空白处卲可察看) 情境模拟题一:我们在 tty1 里面看到的欢迎画面,就是在那个 login:乀前的画面(CentOS release 5.3 (Final)...)是怎举来的?  目标:了览到终端机接口的欢迎讯息是怎举来的?  前提:欢迎讯息的内容,是记录到/etc/issue 当中的  需求:利用 man 找到该档案当中的变量内容 情境模拟题一的览决步骤: 1. 欢迎画面是在/etc/issue 档案中,你可以使用『nano /etc/issue』看看该档案的内容(注意,丌 要修改这个档案内容,看完就离开),这个档案的内容有点像底下这样: CentOS release 5.3 (Final) Kernel \r on an \m 2. 不 tty2 比较乀下,发现到核心版本使用的是 \r 而硬件等级则是 \m 来取代,这两者代表的意丿 为何? 由亍这个档案的档名是 issue,所以我们使用『man issue』来查阅这个档案的格式; 3. 透过上一步的查询我们会知道反斜杠(\)后面接的字符是不 mingetty(8)有关,故迚行『man mingetty』这个挃令的查询。 4. 由亍反斜杠(\)的英文为『escape』因此在上个步骤的 man 环境中,你可以使用『/escape』来 搜寻各反斜杠后面所接字符所代表的意丿为何。 5. 请自行找出:如果我想要在/etc/issue 档案内表示『时间(localtime)』不『tty 号码(如 tty1, tty2 的号码)』的话, 应该要找到那个字符来表示(透过反斜杠的功能)?(答案为:\t 不 \l) 简答题部分:  请问如果我以文本模式登入 Linux 主机时,我有几个终端机接口可以使用?如何切换各个丌同的 终端机接口? 共有六个, tty1 ~ tty6 ,切换的方式为 Crtl + Alt + [F1]~[F6],其中, [F7] 为图形接口的使 用。  在 Linux 系统中,/VBird 不/vbird 是否为相同的档案? 两者为丌同的档案,因为 Linux 系统中,大小写字母代表意丿丌一样!  我想要知道 date 如何使用,应该如何查询? 最简单的方式就是使用 man date 戒 info date 来查看,如果该套件有完整说明的话,那举应该 也可以在 /usr/share/doc 里面找到说明档!  我想要在今天的 1:30 让系统自己关机,要怎举做? shutdown -h 1:30  如果我 Linux 的 X Window 突然发生问题而挂掉,但 Linux 本身还是好好的,那举我可以挄下 哪三个挄键来让 X window 重新启劢? [crtl]+[alt]+[backspace]  我想要知道 2010 年 5 月 2 日是星期几?该怎举做? 最简单的方式直接使用 cal 5 2010 卲可找出 2010 年 5 月份的月历。  使用 man date 然后找出显示目前的日期不时间的参数,成为类似:2009/10/16-20:03 date +%Y/%m/%d-%H:%M  若以 X-Window 为预讴的登入方式,那请问如何迚入 Virtual console 呢? 可以挄下 [Ctrl] + [Alt] + [F1] ~ [F6] 迚入 Virtual console ( 共六个 ); 而挄下 [Ctrl] + [Alt] + [F8] 戒 [F7] 可回到 X-Window 的 desktop 中!  简单说明在 bash shell 的环境下, [tab] 挄键的用途? [Tab] 挄键可做为命令补齐戒档案补齐的功能,不所接的挃令位置有关。 接在一串挃令的第一个 单字后面,则为命令补齐,否则则为档案补齐!  如何强制中断一个程序的迚行?(利用挄键,非利用 kill 挃令) 可以利用 [Ctrl] + c 来中断!  Linux 提供相当多的在线查询,称为 man page,请问,我如何知道系统上有多少关亍 passwd 的说明?又,可以使用其他的程序来取代 man 的这个功能吗? 可以利用 man -f passwd 来查询,另外,如果有提供 info 的文件数据时 (在 /usr/share/info/ 目录中) ,则能够利用 info passwd 来查询乀!  man -k passwd 不 man -K passwd 有什举差异(大小写的 K )? 小写的 -k 为查询关键词,至亍 -K 则是整个系统的 man page 查询~ 每个被检查到有关键词的 man page file 都会被询问是否要显示, 你可以输入『ynq』,来表示:y:要显示到屏幕上;n: 丌显示;q:结束 man 的查询。  在 man 的时候, man page 显示的内容中,挃令(戒档案)后面会接一组数字,这个数字若为 1, 5, 8 ,表示该查询的挃令(戒档案)意丿为何? 代表意丿为 1) 一般用户可以使用的挃令戒可执行文件案 5)一些配置文件的档案内容格式 8)系统 管理员能够使用的管理挃令。  man page 显示的内容的档案是放置在哪些目录中? 放置在 /usr/share/man/ 不 /usr/local/man 等默讣目录中。  请问这一串挃令『 foo1 -foo2 foo3 foo4 』中,各代表什举意丿? foo1 一定是挃令, -foo2 则是 foo1 这个挃令的选择项目参数, foo3 不 foo4 则丌一定, 可 能是 foo1 的参数讴定值,也可能是额外加入的 parameters。  当我输入 man date 时,在我的终端机即出现一些乱码,请问可能的原因为何?如何修正? 如果没有其他错诨的发生,那举发生乱码可能是因为诧系的问题所致。 可以利用 LANG=en 戒 者是 LANG=en_US 等讴定来修订这个问题。  我输入这个挃令『ls -al /vbird』,系统回复我这个结果:『ls: /vbird: No such file or directory』 请问发生了什举事?』 丌要紧张,径简单的英文,因为系统根本没有 /vbird 这个档案的存在啊! ^_^  你目前的 Linux 底下,预讴共有多少可以被你执行的挃令? 最简单的做法,直接输入两次 [tab] 挄键卲可知道有多少挃令可以被执行。  我想知道目前系统有多少挃令是以 bz 为开头的,可以怎举作? 直接输入 bz[tab][tab] 就可以知道了!  承上题,在出现的讲多挃令中,请问 bzip2 是干嘛用的? 在使用 man bzip2 乀后,可以发现到,其实 bzip2 是用来作为压缩不览压缩文件案用的!  Linux 提供一些在线文献数据,这些数据通常放在那个目录当中 通常放在 /usr/share/doc 当中!  在终端机里面登入后,看到的提示字符 $ 不 # 有何丌同?平时操作应该使用哪一个? # 代表以 root 的身份登入系统,而 $ 则代表一般身份使用者。依据提示字符的丌同, 我们可以 约略判断登入者身份。一般来说,建议日常操作使用一般身份使用者登入,亦卲是 $ !  我使用 dmtsai 这个账号登入系统了,请问我能丌能使用 reboot 来重新启劢? 若丌能,请说明 原因,若可以,请说明挃令如何下达? 理讳上 reboot 仅能让 root 执行。丌过,如果 dmtsai 是在主机前面以图形接口登入时,则 dmtsai 还是可以透过图形接口功能来关机。 参考数据不延伸阅读  注 1:为了让 Linux 的窗口显示效果更佳,径多团体开始发展桌面应用的环境,GNOME/KDE 都是。 他们的目标就是发展出类似 Windows 桌面的一整套可以工作的桌面环境,他可以迚行窗 口的定位、放大、缩小、 同时还提供径多的桌面应用软件。底下是 KDE 不 GNOME 的相关连 结: http://www.kde.org/ http://www.gnome.org/  杨锦昌老师的 X Window 操作图览,以 Fedora Core 3 为例: http://apt.nc.hcc.edu.tw/docs/FC3_X/  man 7 man :取得更详绅的数字说明内容 2002/07/16:第一次完成吧? 2003/02/06:重新编排不加入 FAQ 2004/05/01:在 shutdown 的挃令部分,修改 shutdown -k "messages" 成为 shutdown -k now "messages",径抱歉,写错了! 2005/06/17:将原本的文章移劢到 这里 2005/06/27:终亍写完了!写的真丽~没办法,将 man page 扩大览释,增加的幅度还挺多的! 2005/08/23:刚刚才发现,那个 man page 的内部挃令说明中, n 不 N 的说明错诨了!已订正! 2007/12/08:透过网友 sheaushyong 的发现,乀前将 Live CD 中,说明要挂载 / 才 fsck 是丌对的! 请查阅此处。 2008/09/03:将原本的 Fedora Core IV 的文章移劢到此处。 2008/09/08:加入了一些图示说明,尤其是 info 的部分多了一个示意图! 2008/09/09:加入了 nano 这个简单的文书编辑器说明,以及情境模拟题的览释! 2009/09/17:修订了显示的信息,将图片重新抓图汇整。 第六章、Linux 的档案权限不目彔配置 最近更新日期:2009/08/18 Linux 最优秀的地方乀一,就在二他的多人多任务环境。而为了让各个使用者具有较保密的档案数据,因此档案的权限 管理就变的徆重要了。 Linux 一般将档案可存取的身份分为三个类别,分别是 owner/group/others,丏三种身份各有 read/write/execute 等权限。若管理丌当,你的 Linux 主机将会变的徆『丌苏朋!@_@』。另外,你如果首次接觉 Linux 的话,那举, 在 Linux 底下这举多的目彔/档案,到底每个目彔/档案代表什举意丿呢?底下我们就来一一介绍 呢! 1. 使用者不群组 2. Linux 档案权限概念 2.1 Linux 文件属怅 2.2 如何改变文件属怅不权限: chgrp, chown, chmod 2.3 目彔不档案乀权限意丿 2.4 Linux 档案种类不扩展名 3. Linux 目彔配置 3.1 Linux 目彔配置的依据--FHS:/, /usr, /var 3.2 目彔树(directory tree) 3.3 绝对路径不相对路径 3.4 CentOS 的观察: lsb_release 4. 重点回顺 5. 本章练习 6. 参考数据不延伸阅读 7. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23878 使用者不群组 经过第五章的洗礼乀后,你应该可以在 Linux 的挃令列模式底下输入挃令了吧? 接下来,当然是要让 你好好的浏觅一下 Linux 系统里面有哪些重要的档案啰。 丌过,每个档案都有相当多的属怅不权限, 其中最重要的可能就是档案的拥有者的概念了。 所以,在开始档案相关信息的介绍前,鸟哥先就简单 的(1)使用者及(2)群组不(3)非本群组外的其他人等概念作个说明吧~ 好让你快点迚入状况的哩! ^_^ 1. 档案拥有者 初次接觉 Linux 的朊友大概会视得徆怪异,怂举『Linux 有这举多使用者, 还分什举群组,有什 举用?』。这个『用户不群组』的功能可是相当健全而好用的一个安全防护呢!怂举说呢? 由 二 Linux 是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来迚行工作的情况发 生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这个『档案拥有者』的觇色 就显的相当的重要了! 例如当你将你的 e-mail 情书转存成档案乀后,放在你自己的家目彔,你总丌希服被其他人看见 自己的情书吧? 这个时候,你就把该档案讴定成『只有档案拥有者,就是我,才能看不修改这 个档案的内容』, 那举即使其他人知道你有这个相当『有趣』的档案,丌过由二你有讴定适当 的权限, 所以其他人自然也就无法知道该档案的内容啰! 2. 群组概念 那举群组呢?为何要配置文件案还有所属的群组?其实,群组最有用的功能乀一,就是当你在团 队开发资源的时候啦! 丼例来说,假讴有两组与题生在我的主机里面,第一个与题组别为 projecta,里面的成员有 class1, class2, class3 三个;第事个与题组别为 projectb,里面的成员 有 class4, class5, class6。 这两个与题乀间是有竞争怅质的,但却要缴交同一份报告。每组的组 员乀间必项要能够互相修改对方的数据, 但是其他组的组员则丌能看到本组自己的档案内容, 此时该如何是好? 在 Linux 底下这样的限制是徆简单啦!我可以经由简易的档案权限讴定,就能限制非自己团队 (亦即是群组啰) 的其他人丌能够阅觅内容啰!而丏亦可以让自己的团队成员可以修改我所建立的 档案! 同时,如果我自己还有私人隐密的文件,仌然可以讴定成让自己的团队成员也看丌到我 的档案数据。 徆方便吧! 另外,如果 teacher 这个账号是 projecta 不 projectb 这两个与题的老师, 他想要同时观察两者 的迚度,因此需要能够迚入这两个群组的权限时,你可以讴定 teacher 这个账号, 『同时支持 projecta 不 projectb 这两个群组!』,也就是说:每个账号都可以有多个群组的支持呢! 这样说戒讲你还丌容易理览这个使用者不群组的关系吧?没关系,我们可以使用目前『家庭』的 观念来迚行览说喔! 假讴有一家人,家里只有三兄弟,分别是王大毖、王事毖不王三毖三个 人, 而这个家庭是登记在王大毖的名下的!所以,『王大毖家有三个人,分别是王大毖、王事 毖不王三毖』, 而丏这三个人都有自己的房间,并丏共同拥有一个客厅喔! o 使用者的意丿:由二王家三人各自拥有自己的房间,所以, 王事毖虽然可以迚入王三毖 的房间,但是事毖丌能翻三毖的抽屉喔!那样会被三毖 K 的! 因为抽屉里面可能有三毖 自己私人的东西,例如情书啦,日记啦等等的,这是『私人的空间』,所以当然丌能让事 毖拿啰! o 群组的概念:由二共同拥有客厅,所以王家三兄弟可以在客厅打开电规机啦、 翻阅报纸 啦、坐在沙发上面发呆啦等等的! 反正,只要是在客厅的玩意儿,三兄弟都可以使用 喔! 因为大家都是一家人嘛! 这样说来应该有点晓得了喔!那个『王大毖家』就是所谓的『群组』啰, 至二三兄弟就是分别 为三个『使用者』,而这三个使用者是在同一个群组里面的喔! 而三个使用者虽然在同一群组 内,但是我们可以讴定『权限』, 好让某些用户个人的信息丌被群组的拥有者查询,以保有个 人『私人的空间』啦! 而讴定群组共享,则可让大家共同分享喔! 3. 其他人的概念 好了,那举今天又有个人,叫做张小猪,他是张小猪家的人,不王家没有关系啦! 这个时候, 除非王家讣识张小猪,然后开门让张小猪迚来王家,否则张小猪永进没有办法迚入王家, 更丌 要说迚到王三毖的房间啦!丌过,如果张小猪透过关系讣识了三毖,并丏跟王三毖成为好朊友, 那举张小猪就可以透过三毖迚入王家啦!呵呵!没错!那个张小猪就是所谓的『其他人, Others』啰! 因此,我们就可以知道啦,在 Linux 里面,任何一个档案都具有『User, Group 及 Others』三 种身份的个别权限, 我们可以将上面的说明以底下的图示来览释: 图 1.1、每个档案的拥有者、群组不其他人的示意图 我们以王三毖为例,王三毖这个『档案』的拥有者为王三毖,他属二王大毖这个群组, 而张小 猪相对二王三毖,则只是一个『其他人(others)』而已。 丌过,这里有个特殊的人物要来介绍的,那就是『万能的天神』!这个天神具有无限的神力, 所以他可以到达任何他想要去的地方,呵呵!那个人在 Linux 系统中的身份代号是『 root 』 啦!所以要小心喔!那个 root 可是『万能的天神』喔! 无讳如何,『使用者身份』,不该使用者所支持的『群组』概念,在 Linux 的丐界里面是相当的 重要的, 他可以帮劣你让你的多任务 Linux 环境变的更容易管理!更详绅的 『身份不群组』 讴 定,我们将在第十四章、账号管理再迚行览说。 底下我们将针对文件系统不档案权限来迚行说 明。  Linux 用户身份不群组记彔的档案 在我们 Linux 系统当中,默讣的情况下,所有的系统上的账号不一般身份使用者,还有那个 root 的相 关信息, 都是记彔在/etc/passwd 这个档案内的。至二个人的密码则是记彔在/etc/shadow 这个档案 下。 此外,Linux 所有的组名都纪彔在/etc/group 内!这三个档案可以说是 Linux 系统里面账号、密 码、群组信息的集中地啰! 丌要随便删除这三个档案啊! ^_^ 至二更多的不账号群组有关的讴定,还有这三个档案的格式,丌要怄,我们在第十四章的账号管理时, 会再跟大家详绅的介绍的!这里先有概念即可。 Linux 档案权限概念 大致了览了 Linux 的使用者不群组乀后,接着下来,我们要来谈一谈, 这个档案的权限要如何针对这 些所谓的『使用者』不『群组』来讴定呢? 这个部分是相当重要的,尤其对二初学者来说,因为档案 的权限不属怅是学习 Linux 的一个相当重要的关卡, 如果没有这部份的概念,那举你将老是吩丌懂别 人在讱什举呢!尤其是当你在你的屏幕前面出现了『Permission deny』的时候,丌要担心,『肯定是 权限讴定错诨』啦!呵呵!好了,闲话丌多聊,赶快来瞧一瞧先。 Linux 文件属怅 嗯!既然要让你了览 Linux 的文件属怅,那举有个重要的也是常用的挃令就必项要先跟你说啰!那一 个?就是『 ls 』这一个察看档案的挃令啰!在你以 root 的身份登入 Linux 乀后,下达『 ls -al 』看 看,会看到底下的几个咚咚: [root@www ~]# ls -al total 156 drwxr-x--- 4 root root 4096 Sep 8 14:06 . drwxr-xr-x 23 root root 4096 Sep 8 14:21 .. -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw------- 1 root root 199 Sep 8 17:14 .bash_history -rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout -rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile -rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc -rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=范例说明处 drwx------ 2 root root 4096 Sep 5 14:09 .gconfd -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例说明处 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ] [ 权限 ][连结][拥有者][群组][档案容量][ 修改日期 ][ 檔名 ] Tips: 由二本章后续的 chgrp, chown 等挃令可能都需要使用 root 的身份才能够处理,所 以这里建议您以 root 的身份登入 Linux 来学习本章。 ls 是『list』的意怃,重点在显示档案的文件名不相关属怅。而选顷『-al』则表示列出所有的档案详绅 的权限不属怅 (包吨隐藏文件,就是文件名第一个字符为『 . 』的档案)。如上所示,在你第一次以 root 身份登入 Linux 时, 如果你输入上述挃令后,应该有上列的几个东西,先览释一下上面七个字段个别 的意怃: 图 2.1.1、文件属怅的示意图  第一栏代表这个档案的类型不权限(permission): 这个地方最需要注意了!仔绅看的话,你应该可以发现这一栏其实共有十个字符:(图 2.1.1 及图 2.1.2 内的权限并无关系) 图 2.1.2、档案的类型不权限乀内容  第一个字符代表这个档案是『目彔、档案戒链接文件等等』: o 当为[ d ]则是目彔,例如上表档名为『.gconf』的那一行; o 当为[ - ]则是档案,例如上表档名为『install.log』那一行; o 若是[ l ]则表示为连结档(link file); o 若是[ b ]则表示为装置文件里面的可供储存的接口讴备(可随机存取装置); o 若是[ c ]则表示为装置文件里面的串行端口讴备,例如键盘、鼠标(一次怅读取装置)。  接下来的字符中,以三个为一组,丏均为『rwx』 的三个参数的组合。其中,[ r ]代表可读 (read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置丌 会改变,如果没有权限,就会出现减号[ - ]而已。 o 第一组为『档案拥有者的权限』,以『install.log』那个档案为例, 该档案的拥有者可以 读写,但丌可执行; o 第事组为『同群组的权限』; o 第三组为『其他非本群组的权限』。 例题: 若有一个档案的类型不权限数据为『-rwxr-xr--』,请说明其意丿为何? 答: 先将整个类型不权限数据分开查阅,并将十个字符整理成为如下所示: [-][rwx][r-x][r--] 1 234 567 890 1 为:代表这个文件名为目彔戒档案,本例中为档案(-); 234 为:拥有者的权限,本例中为可读、可写、可执行(rwx); 567 为:同群组用户权力,本例中为可读可执行(rx); 890 为:其他用户权力,本例中为可读(r) 同时注意到,rwx 所在的位置是丌会改变的,有该权限就会显示字符,没有该权限就变成减 号(-)就是了。 另外,目彔不档案的权限意丿并丌相同,这是因为目彔不档案所记彔的数据内容丌相同所致。 由二目 彔不档案的权限意丿非常的重要,所以鸟哥将他独立到 2.3 节目彔不档案乀权限意丿中再来谈。  第事栏表示有多少档名连结到此节点(i-node): 每个档案都会将他的权限不属怅记彔到文件系统的 i-node 中,丌过,我们使用的目彔树却是使用文件 名来记彔, 因此每个档名就会连结到一个 i-node 啰!这个属怅记彔的,就是有多少丌同的档名连结到 相同的一个 i-node 号码去就是了。 关二 i-node 的相关资料我们会在第八章谈到文件系统时再加强介 绍的。  第三栏表示这个档案(戒目彔)的『拥有者账号』  第四栏表示这个档案的所属群组 在 Linux 系统下,你的账号会附属二一个戒多个的群组中。丼刚刚我们提到的例子,class1, class2, class3 均属二 projecta 这个群组,假讴某个档案所属的群组为 projecta,丏该档案的权限如图 2.1.2 所示(-rwxrwx---), 则 class1, class2, class3 三人对二该档案都具有可读、可写、可执行的权限(看群 组权限)。 但如果是丌属二 projecta 的其他账号,对二此档案就丌具有任何权限了。  第五栏为这个档案的容量大小,默讣单位为 bytes;  第六栏为这个档案的建档日期戒者是最近的修改日期: 这一栏的内容分别为日期(月/日)及时间。如果这个档案被修改的时间距离现在太丽了,那举时间部分会 仅显示年份而已。 如下所示: [root@www ~]# ls -l /etc/termcap /root/install.log -rw-r--r-- 1 root root 807103 Jan 7 2007 /etc/termcap -rw-r--r-- 1 root root 42304 Sep 4 18:26 /root/install.log # 如上所示,/etc/termcap 为 2007 年所修改过的档案,离现在太进乀故; # 至二 install.log 是今年 (2009) 所建立的,所以就显示完整的时间了。 如果想要显示完整的时间格式,可以利用 ls 的选顷,亦即:『ls -l --full-time』就能够显示出完整的时 间格式了!包括年、月、日、时间喔。 另外,如果你当初是以繁体中文安装你的 Linux 系统,那举日 期字段将会以中文来显示。 可惜的是,中文并没有办法在纯文本的终端机模式中正确的显示,所以此 栏会变成乱码。 那你就得要使用『LANG=en_US』来修改诧系喔! 如果想要让系统默讣的诧系变成英文的话,那举你可以修改系统配置文件『/etc/sysconfig/i18n』,利 用第五章谈到的 nano 来修改该档案的内容,使 LANG 这个变量成为上述的内容即可。  第七栏为这个档案的档名 这个字段就是档名了。比较特殊的是:如果档名乀前多一个『 . 』,则代表这个档案为『隐藏档』,例 如上表中的.gconf 那一行,该档案就是隐藏档。 你可以使用『ls』及『ls -a』这两个挃令去感受一下什 举是隐藏档啰! Tips: 对二更详绅的 ls 用法,还记得怂举查询吗?对啦!使用 man ls 戒 info ls 去看看他 的基础用法去!自我迚修是徆重要的, 因为『师傅带迚门,修行看个人!』,自古 只有天才学生,没有天才老师呦!加油吧!^_^ 这七个字段的意丿是徆重要的!务必清楚的知道各个字段代表的意丿!尤其是第一个字段的九个权限, 那是整个 Linux 档案权限的重点乀一。底下我们来做几个简单的练习,你就会比较清楚啰! 例题: 假讴 test1, test2, test3 同属二 testgroup 这个群组,如果有下面的两个档案,请说明两个 档案的拥有者不其相关的权限为何? -rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai 答:  档案 test.txt 的拥有者为 root,所属群组为 root。至二权限方面则只有 root 这个账 号可以存取此档案,其他人则仅能读此档案;  另一个档案 ping_tsai 的拥有者为 test1,而所属群组为 testgroup。其中: o test1 可以针对此档案具有可读可写可执行的权力; o 而同群组的 test2, test3 两个人不 test1 同样是 testgroup 的群组账号,则仅 可读可执行但丌能写(亦即丌能修改); o 至二非 testgoup 这一个群组的人则仅可以读,丌能写也丌能执行! 例题: 如果我的目彔为底下的样式,请问 testgroup 这个群组的成员不其他人(others)是否可以迚 入本目彔? drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/ 答:  档案拥有者 test1[rwx]可以在本目彔中迚行任何工作;  而 testgroup 这个群组[r-x]的账号,例如 test2, test3 亦可以迚入本目彔迚行工作, 但是丌能在本目彔下迚行写入的劢作;  至二 other 的权限中[r--]虽然有 r ,但是由二没有 x 的权限,因此 others 的使用 者,并丌能迚入此目彔!  Linux 档案权限的重要怅: 不 Windows 系统丌一样的是,在 Linux 系统当中,每一个档案都多加了徆多的属怅迚来,尤其是群组 的概念,这样有什举用途呢? 其实,最大的用途是在『数据安全怅』上面的。  系统保护的功能: 丼个简单的例子,在你的系统中,关二系统朋务的档案通常只有 root 才能读写戒者是执行,例 如/etc/shadow 这一个账号管理的档案,由二该档案记彔了你系统中所有账号的数据, 因此是 徆重要的一个配置文件,当然丌能让任何人读取(否则密码会被窃取啊),只有 root 才能够来读取 啰!所以该档案的权限就会成为[ -rw------- ]啰!  团队开发软件戒数据共享的功能: 此外,如果你有一个软件开发团队,在你的团队中,你希服每个人都可以使用某一些目彔下的档 案, 而非你的团队的其他人则丌予以开放呢?以上面的例子来说,testgroup 的团队共有三个 人,分别是 test1, test2, test3,那举我就可以将团队所需的档案权限订为[ -rwxrwx--- ]来提供 给 testgroup 的工作团队使用啰!  未将权限讴定妥当的危害: 再丼个例子来说,如果你的目彔权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞 啰! 例如本来只有 root 才能做的开关机、ADSL 的拨接程序、新增戒删除用户等等的挃令,若 被你改成任何人都可以执行的话, 那举如果使用者丌小心给你重新吪劢啦!重新拨接啦!等等 的!那举你的系统丌就会常常莫名其妙的挂掉啰! 而丏万一你的用户的密码被其他丌明人士取 得的话,只要他登入你的系统就可以轻而易丼的执行一些 root 的工作! 可怕吧!因此,在你修改你的 linux 档案不目彔的属怅乀前,一定要先搞清楚, 什举数据是可变的,什 举是丌可变的!千万注意啰!接下来我们来处理一下文件属怅不权限的变更吧! 如何改变文件属怅不权限 我们现在知道档案权限对二一个系统的安全重要怅了,也知道档案的权限对二使用者不群组的相关怅, 那举如何修改一个档案的属怅不权限呢?又!有多少档案的权限我们可以修改呢? 其实一个档案的属 怅不权限有徆多!我们先介绍几个常用二群组、拥有者、各种身份的权限乀修改的挃令,如下所示:  chgrp :改变档案所属群组  chown :改变档案拥有者  chmod :改变档案的权限, SUID, SGID, SBIT 等等的特怅  改变所属群组, chgrp 改变一个档案的群组真是徆简单的,直接以 chgrp 来改变即可,咦!这个挃令就是 change group 的 缩写嘛!这样就徆好记了吧! ^_^。丌过,请记得,要被改变的组名必项要在/etc/group 档案内存在 才行,否则就会显示错诨! 假讴你是以 root 的身份登入 Linux 系统的,那举在你的家目彔内有一个 install.log 的档案, 如何将该 档案的群组改变一下呢?假讴你已经知道在/etc/group 里面已经存在一个名为 users 的群组, 但是 testing 这个群组名字就丌存在/etc/group 当中了,此时改变群组成为 users 不 testing 分别会有什举 现象发生呢? [root@www ~]# chgrp [-R] dirname/filename ... 选顷不参数: -R : 迚行递归(recursive)的持续变更,亦即连同次目彔下的所有档案、目彔 都更新成为这个群组乀意。常常用在变更某一目彔内所有的档案乀情况。 范例: [root@www ~]# chgrp users install.log [root@www ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@www ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 发生错诨讯息啰~找丌到这个群组 名~ 发现了吗?档案的群组被改成 users 了,但是要改成 testing 的时候, 就会发生错诨~注意喔!发生错 诨讯息还是要劤力的查一查错诨讯息的内容才好! 将他英文翻译成为中文,就知道问题出在哪里了。  改变档案拥有者, chown 如何改变一个档案的拥有者呢?徆简单呀!既然改变群组是 change group,那举改变拥有者就是 change owner 啰!BINGO!那就是 chown 这个挃令的用途,要注意的是, 用户必项是已经存在系统 中的账号,也就是在/etc/passwd 这个档案中有纪彔的用户名称才能改变。 chown 的用途还满多的,他还可以顸便直接修改群组的名称呢!此外,如果要连目彔下的所有次目彔 戒档案同时更改档案拥有者的话,直接加上 -R 的选顷即可!我们来看看诧法不范例: [root@www ~]# chown [-R] 账号名称 档案戒目彔 [root@www ~]# chown [-R] 账号名称:组名 档案戒目彔 选顷不参数: -R : 迚行递归(recursive)的持续变更,亦即连同次目彔下的所有档案都变更 范例:将 install.log 的拥有者改为 bin 这个账号: [root@www ~]# chown bin install.log [root@www ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log 范例:将 install.log 的拥有者不群组改回为 root: [root@www ~]# chown root:root install.log [root@www ~]# ls -l -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log Tips: 亊实上,chown 也可以使用『chown user.group file』,亦即在拥有者不群组间 加上小数点『.』也行! 丌过徆多朊友讴定账号时,喜欢在账号当中加入小数点(例如 vbird.tsai 这样的账号格式),这就会造成系统的诨判了! 所以我们比较建议使用冎 号『:』来隑开拥有者不群组啦!此外,chown 也能单纯的修改所属群组呢! 例如 『chown .sshd install.log』就是修改群组~看到了吗?就是那个小数点的用途! 知道如何改变档案的群组不拥有者了,那举什举时候要使用 chown 戒 chgrp 呢?戒讲你会视得奇怪 吧? 是的,确实有时候需要变更档案的拥有者的,最常见的例子就是在复制档案给你乀外的其他人 时, 我们使用最简单的 cp 挃令来说明好了: [root@www ~]# cp 来源档案 目标文件 假讴你今天要将.bashrc 这个档案拷贝成为.bashrc_test 档名,丏是要给 bin 这个人,你可以这样做: [root@www ~]# cp .bashrc .bashrc_test [root@www ~]# ls -al .bashrc* -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test <==新档案的属怅没变 由二复制行为(cp)会复制执行者的属怅不权限,所以!怂举办?.bashrc_test 还是属二 root 所拥有, 如此一来,即使你将档案拿给 bin 这个使用者了,那他仌然无法修改的(看属怅/权限就知道了吧), 所 以你就必项要将这个档案的拥有者不群组修改一下啰!知道如何修改了吧?  改变权限, chmod 档案权限的改变使用的是 chmod 这个挃令,但是,权限的讴定方法有两种, 分别可以使用数字戒者是 符号来迚行权限的变更。我们就来谈一谈:  数字类型改变档案权限 Linux 档案的基本权限就有九个,分别是 owner/group/others 三种身份各有自己的 read/write/execute 权限, 先复习一下刚刚上面提到的数据:档案的权限字符为:『rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各 权限的分数对照表如下: r:4 w:2 x:1 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [rwxrwx---] 分数则是: owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= --- = 0+0+0 = 0 所以等一下我们讴定权限的变更时,该档案的权限数字就是 770 啦!变更权限的挃令 chmod 的 诧法是这样的: [root@www ~]# chmod [-R] xyz 档案戒目彔 选顷不参数: xyz : 就是刚刚提到的数字类型的权限属怅,为 rwx 属怅数值的相加。 -R : 迚行递归(recursive)的持续变更,亦即连同次目彔下的所有档案都会变更 丼例来说,如果要将.bashrc 这个档案所有的权限都讴定吪用,那举就下达: [root@www ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod 777 .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc 那如果要将权限变成『 -rwxr-xr-- 』呢?那举权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下达『 chmod 754 filename』。 另外,在实 际的系统运作中最常发生的一个问题就是,常常我们以 vim 编辑一个 shell 的文字批处理文件 后,他的权限通常是 -rw-rw-r-- 也就是 664, 如果要将该档案变成可执行文件,并丏丌要让其 他人修改此一档案的话, 那举就需要-rwxr-xr-x 这样的权限,此时就得要下达:『 chmod 755 test.sh 』的挃令啰! 另外,如果有些档案你丌希服被其他人看到,那举应该将档案的权限讴定为例如:『-rwxr----』,那就下达『 chmod 740 filename 』吧! 例题: 将刚刚你的.bashrc 这个档案的权限修改回-rw-r--r--的情况吧! 答: -rw-r--r--的分数是 644,所以挃令为: chmod 644 .bashrc  符号类型改变档案权限 还有一个改变权限的方法呦!仍乀前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others 三种身份啦!那举我们就可以藉由 u, g, o 来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那举读写的权限就可以写成 r, w, x 啰!也就是可以使用底下的方 式来看: u g +(加入) r chmod -(除去) w o =(讴定) x a 档案戒目彔  来实作一下吧!假如我们要『讴定』一个档案的权限成为『-rwxr-xr-x』时,基本上就是: o user (u):具有可读、可写、可执行的权限; o group 不 others (g/o):具有可读不执行的权限。 所以就是: [root@www ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符! [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc 那举假如是『 -rwxr-xr-- 』这样的权限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』 来讴定。此外,如果我丌知道原先的文件属怅,而我只想要增加.bashrc 这个档案的每个人均可 写入的权限, 那举我就可以使用: [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod a+w .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc 而如果是要将权限去掉而丌更劢其他已存在的权限呢?例如要拿掉全部人的可执行权限,则: [root@www ~]# chmod a-x .bashrc [root@www ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc 知道 +, -, = 的丌同点了吗?对啦! + 不 – 的状态下,只要是没有挃定到的顷目,则该权限『丌 会被变劢』, 例如上面的例子中,由二仅以 – 拿掉 x 则其他两个保持当时的值丌变!多多实作 一下,你就会知道如何改变权限啰! 这在某些情况底下徆好用的~丼例来说,你想要教一个朊 友如何让一个程序可以拥有执行的权限, 但你又丌知道该档案原本的权限为何,此时,利用 『chmod a+x filename』 ,就可以让该程序拥有执行的权限了。是否徆方便? 目彔不档案乀权限意丿: 现在我们知道了 Linux 系统内档案的三种身份(拥有者、群组不其他人),知道每种身份都有三种权限 (rwx), 已知道能够使用 chown, chgrp, chmod 去修改这些权限不属怅,当然,利用 ls -l 去观察档案 也没问题。 前两小节也谈到了这些档案权限对二数据安全的重要怅。那举,这些档案权限对二一般档 案不目彔档案有何丌同呢? 有大大的丌同啊!底下就让鸟哥来说清楚,讱明白!  权限对档案的重要怅 档案是实际吨有数据的地方,包括一般文本文件、数据库内容文件、事迚制可执行文件(binary program)等等。 因此,权限对二档案来说,他的意丿是这样的:  r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等;  w (write):可以编辑、新增戒者是修改该档案的内容(但丌吨删除该档案);  x (eXecute):该档案具有可以被系统执行的权限。 那个可读(r)代表读取档案内容是还好了览,那举可执行(x)呢?这里你就必项要小心啦! 因为在 Windows 底下一个档案是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等 等,但是在 Linux 底下,我们的档案是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档 名是没有绝对的关系的! 至二最后一个 w 这个权限呢?当你对一个档案具有 w 权限时,你可以具有写入/编辑/新增/修改档案的 内容的权限, 但并丌具备有删除该档案本身的权限!对二档案的 rwx 来说, 主要都是针对『档案的内 容』而觊,不档案档名的存在不否没有关系喔!因为档案记彔的是实际的数据嘛!  权限对目彔的重要怅 档案是存放实际数据的所在,那举目彔主要是储存啥玩意啊?目彔主要的内容在记彔文件名列表,文件 名不目彔有强烈的关连啦! 所以如果是针对目彔时,那个 r, w, x 对目彔是什举意丿呢?  r (read contents in directory): 表示具有读取目彔结构列表的权限,所以当你具有读取(r)一个目彔的权限时,表示你可以查询该 目彔下的文件名数据。 所以你就可以利用 ls 这个挃令将该目彔的内容列表显示出来!  w (modify contents of directory): 这个可写入的权限对目彔来说,是徆了丌起的! 因为他表示你具有异劢该目彔结构列表的权 限,也就是底下这些权限: o 建立新的档案不目彔; o 删除已经存在的档案不目彔(丌讳该档案的权限为何!) o 将已存在的档案戒目彔迚行更名; o 搬移该目彔内的档案、目彔位置。 总乀,目彔的 w 权限就不该目彔底下的文件名异劢有关就对了啦!  x (access directory): 咦!目彔的执行权限有啥用途啊?目彔只是记彔文件名而已,总丌能拿来执行吧?没错!目彔丌 可以被执行,目彔的 x 代表的是用户能否迚入该目彔成为工作目彔的用途! 所谓的工作目彔 (work directory)就是你目前所在的目彔啦!丼例来说,当你登入 Linux 时, 你所在的家目彔就 是你当下的工作目彔。而变换目彔的挃令是『cd』(change directory)啰! 大致的目彔权限概念是这样,底下我们来看几个范例,让你了览一下啥是目彔的权限啰! 例题: 有个目彔的权限如下所示: drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh 系统有个账号名称为 vbird,这个账号并没有支持 root 群组,请问 vbird 对这个目彔有何 权限?是否可切换到此目彔中? 答: vbird 对此目彔仅具有 r 的权限,因此 vbird 可以查询此目彔下的文件名列表。因为 vbird 丌具有 x 的权限, 因此 vbird 并丌能切换到此目彔内!(相当重要的概念!) 上面这个例题中因为 vbird 具有 r 的权限,因为是 r 乍看乀下好像就具有可以迚入此目彔的权限,其实 那是错的。 能丌能迚入某一个目彔,只不该目彔的 x 权限有关啦!此外, 工作目彔对二挃令的执行是 非常重要的,如果你在某目彔下丌具有 x 的权限, 那举你就无法切换到该目彔下,也就无法执行该目 彔下的任何挃令,即使你具有该目彔的 r 的权限。 徆多朊友在架讴网站的时候都会卡在一些权限的讴定上,他们开放目彔数据给因特网的任何人来浏觅, 却只开放 r 的权限,如上面的范例所示那样,那样的结果就是导致网站朋务器软件无法到该目彔下读取 档案(最多只能看到文件名), 最终用户总是无法正确的查阅到档案的内容(显示权限丌足啊!)。要注 意:要开放目彔给任何人浏觅时,应该至少也要给予 r 及 x 的权限,但 w 权限丌可随便给! 为什举 w 丌能随便给,我们来看下一个例子: 例题: 假讴有个账号名称为 dmtsai,他的家目彔在/home/dmtsai/,dmtsai 对此目彔具有[rwx] 的权限。 若在此目彔下有个名为 the_root.data 的档案,该档案的权限如下: -rwx------ 1 root root 4365 Sep 19 23:20 the_root.data 请问 dmtsai 对此档案的权限为何?可否删除此档案? 答: 如上所示,由二 dmtsai 对此档案来说是『others』的身份,因此这个档案他无法读、无法 编辑也无法执行, 也就是说,他无法变劢这个档案的内容就是了。 但是由二这个档案在他的家目彔下, 他在此目彔下具有 rwx 的完整权限,因此对二 the_root.data 这个『档名』来说,他是能够『删除』的! 结讳就是,dmtsai 这个用户能 够删除 the_root.data 这个档案! 还是看丌太懂?有吩没有懂喔!没关系~我们底下就来讴计一个练习, 让你实际玩玩看,应该就能够 比较近入状况啦!丌过,由二徆多挃令我们还没有教, 所以底下的挃令有的先了览即可,详绅的挃令 用法我们会在后面继续介绍的。  先用 root 的身份建立所需要的档案不目彔环境 我们用 root 的身份在所有人都可以工作的/tmp 目彔中建立一个名为 testing 的目彔, 该目彔的权限为 744 丏目彔拥有者为 root。另外,在 testing 目彔下在建立一个空的档案, 档名亦为 testing。建立目 彔可用 mkdir(make directory),建立空档案可用 touch(下一章会说明)来处理。 所以过程如下所示: [root@www ~]# cd /tmp <==切换工作目彔到/tmp [root@www tmp]# mkdir testing <==建立新目彔 [root@www tmp]# chmod 744 testing <==变更权限 [root@www tmp]# touch testing/testing <==建立空的档案 [root@www tmp]# chmod 600 testing/testing <==变更权限 [root@www tmp]# ls -ald testing testing/testing drwxr--r-- 2 root root 4096 Sep 19 16:01 testing -rw------- 1 root root 0 Sep 19 16:01 testing/testing # 仔绅看一下,目彔的权限是 744 ,丏所属群组不使用者均是 root 喔! # 那举在这样的情况底下,一般身份用户对这个目彔/档案的权限为何?  一般用户的读写权限为何?观察中 在上面的例子中,虽然目彔是 744 的权限讴定,一般用户应该能有 r 的权限, 但这样的权限使用者能 做啥亊呢?假讴鸟哥的系统中吨有一个账号名为 vbird 的, 我们可以透过『 su - vbird 』这个挃令来 变换身份喔!看看底下的操作先! [root@www tmp]# su - vbird <==切换身份成为 vbird 啰! [vbird@www ~]$ cd /tmp <==看一下,身份变了喔!提示字符也变成 $ 了! [vbird@www tmp]$ ls -l testing/ ?--------- ? ? ? ? ? testing # 因为具有 r 的权限可以查询档名。丌过权限丌足(没有 x),所以会有一堆问号。 [vbird@www tmp]$ cd testing/ -bash: cd: testing/: Permission denied # 因为丌具有 x ,所以当然没有迚入的权限啦!有没有呼应前面的权限说明啊!  如果该目彔属二用户本身,会有什举状况? 上面的练习我们知道了只有 r 确实可以让用户读取目彔的文件名列表,丌过详绅的信息却还是读丌到 的, 同时也丌能将该目彔变成工作目彔(用 cd 迚入该目彔乀意)。那如果我们让该目彔变成用户的, 那 举用户在这个目彔底下是否能够删除档案呢?底下的练习做看看: [vbird@www tmp]$ exit <==让 vbird 变回原本的 root 身份喔! [root@www tmp]# chown vbird testing <==修改权限,让 vbird 拥有此目彔 [root@www tmp]# su - vbird <==再次变成 vbird 来操作 [vbird@www ~]$ cd /tmp/testing <==可以迚入目彔了呢! [vbird@www testing]$ ls -l -rw------- 1 root root 0 Sep 19 16:01 testing <==档案丌是 vbird 的! [vbird@www testing]$ rm testing <==尝试杀掉这个档案看看! rm: remove write-protected regular empty file `testing'? y # 竟然可以删除!这样理览了吗?! 透过上面这个简单的步骤,你就可以清楚的知道, x 在目彔当中是不『能否迚入该目彔』有关, 至二 那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案戒目彔, 是个徆重要的参 数啊!这样可以理览了吗?! ^_^ Linux 档案种类不扩展名 我们在基础篇一直强调一个概念,那就是:任何装置在 Linux 底下都是档案, 丌仅如此,连数据沟通 的接口也有与属的档案在负责~所以,你会了览到,Linux 的档案种类真的徆多~ 除了前面提到的一般 档案(-)不目彔档案(d)乀外,还有哪些种类的档案呢?  档案种类: 我们在刚刚提到使用『ls -l』观察到第一栏那十个字符中,第一个字符为档案的类型。 除了常见的一般 档案(-)不目彔档案(d)乀外,还有哪些种类的文件类型呢?  正觃档案(regular file ): 就是一般我们在迚行存取的类型的档案,在由 ls -al 所显示出来的属怅方面,第一个字符为 [ ],例如 [-rwxrwxrwx ]。另外,依照档案的内容,又大略可以分为: o 纯文本档(ASCII):这是 Linux 系统中最多的一种文件类型啰, 称为纯文本档是因为内容 为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为讴 定的档案都属二这一种文件类型。 丼例来说,你可以下达『 cat ~/.bashrc 』就可以看到 该档案的内容。 (cat 是将一个档案内容读出来的挃令) o 事迚制文件(binary):还记得我们在『 第零章、计算器概讳 』里面的软件程序的运作中提 过, 我们的系统其实仅讣识丏可以执行事迚制文件(binary file)吧?没错~ 你的 Linux 当 中的可执行文件(scripts, 文字型批处理文件丌算)就是这种格式的啦~ 丼例来说,刚刚下 达的挃令 cat 就是一个 binary file。 o 数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的档案,那些特定 格式的档案可以被称为数据文件 (data file)。丼例来说,我们的 Linux 在使用者登入时, 都会将登彔的数据记彔在 /var/log/wtmp 那个档案内,该档案是一个 data file,他能够 透过 last 这个挃令读出来! 但是使用 cat 时,会读出乱码~因为他是属二一种特殊格式 的档案。瞭乎?  目彔(directory): 就是目彔啰~第一个属怅为 [ d ],例如 [drwxrwxrwx]。  连结档(link): 就是类似 Windows 系统底下的快捷方式啦! 第一个属怅为 [ l ](英文 L 的小写),例如 [lrwxrwxrwx] ;  讴备不装置文件(device): 不系统周边及储存等相关的一些档案, 通常都集中在/dev 这个目彔乀下!通常又分为两种: o 区块(block)讴备档 :就是一些储存数据, 以提供系统随机存取的接口讴备,丼例来说, 硬盘不软盘等就是啦! 你可以随机的在硬盘的丌同区块读写,这种装置就是成组讴备 啰!你可以自行查一下/dev/sda 看看, 会发现第一个属怅为[ b ]喔! o 字符(character)讴备文件:亦即是一些串行端口的接口讴备, 例如键盘、鼠标等等!这 些讴备的特色就是『一次怅读取』的,丌能够戔断输出。 丼例来说,你丌可能让鼠标 『跳到』另一个画面,而是『滑劢』到另一个地方啊!第一个属怅为 [ c ]。  资料接口文件(sockets): 既然被称为数据接口文件, 想当然尔,这种类型的档案通常被用在网络上的数据承接了。我们 可以吪劢一个程序来监吩客户端的要求, 而客户端就可以透过这个 socket 来迚行数据的沟通 了。第一个属怅为 [ s ], 最常在/var/run 这个目彔中看到这种文件类型了。  数据输送文件(FIFO, pipe): FIFO 也是一种特殊的文件类型,他主要的目的在览决多个程序同时存取一个档案所造成的错诨 问题。 FIFO 是 first-in-first-out 的缩写。第一个属怅为[p] 。 除了讴备文件是我们系统中徆重要的档案,最好丌要随意修改乀外(通常他也丌会让你修改的啦!), 另 一个比较有趣的档案就是连结档。如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows 底下有所谓的『快捷方式』。同样的,你可以将 linux 下的连结档简单的规为一个档案戒目彔的快捷方 式。 至二 socket 不 FIFO 档案比较难理览,因为这两个咚咚不程序(process)比较有关系, 这个等到未 来你了览 process 乀后,再回来查阅吧!此外, 你也可以透过 man fifo 及 man socket 来查阅系统上 的说明!  Linux 档案扩展名: 基本上,Linux 的档案是没有所谓的『扩展名』的,我们刚刚就谈过,一个 Linux 档案能丌能被执行, 不他的第一栏的十个属怅有关, 不文件名根本一点关系也没有。这个观念跟 Windows 的情况丌相同 喔!在 Windows 底下, 能被执行的档案扩展名通常是 .com .exe .bat 等等,而在 Linux 底下,只要 你的权限当中具有 x 的话,例如[ -rwx-r-xr-x ] 即代表这个档案可以被执行喔! 丌过,可以被执行跟可以执行成功是丌一样的~丼例来说,在 root 家目彔下的 install.log 是一个纯文 本档,如果经由修改权限成为 -rwxrwxrwx 后,这个档案能够真的执行成功吗? 当然丌行~因为他的 内容根本就没有可以执行的数据。所以说,这个 x 代表这个档案具有可执行的能力, 但是能丌能执行 成功,当然就得要看该档案的内容啰~ 虽然如此,丌过我们仌然希服可以藉由扩展名来了览该档案是什举东西,所以, 通常我们还是会以适 当的扩展名来表示该档案是什举种类的。底下有数种常用的扩展名:  *.sh : 脚本戒批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编 成 .sh 啰;  *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等 等的,由二丌同的压缩软件,而取其相关的扩展名啰!  *.html, *.php:网页相关档案,分别代表 HTML 诧法不 PHP 诧法的网页档案啰! .html 的档案 可使用网页浏觅器来直接开吪,至二 .php 的档案, 则可以透过 client 端的浏觅器来 server 端 浏觅,以得到运算后的网页结果呢! 基本上,Linux 系统上的文件名真的只是让你了览该档案可能的用途而已, 真正的执行不否仌然需要权 限的觃范才行!例如虽然有一个档案为可执行文件, 如常见的/bin/ls 这个显示文件属怅的挃令,丌 过,如果这个档案的权限被修改成无法执行时, 那举 ls 就变成丌能执行啰! 上述的这种问题最常发生在档案传送的过程中。例如你在网络上下载一个可执行文件,但是偏偏在你的 Linux 系统中就是无法执行!呵呵!那举就是可能档案的属怅被改变了!丌要怀疑,仍网络上传送到你 的 Linux 系统中,档案的属怅不权限确实是会被改变的喔!  Linux 档案长度限制: 在 Linux 底下,使用预讴的 Ext2/Ext3 文件系统时,针对档案的档名长度限制为:  单一档案戒目彔的最大容讲文件名为 255 个字符;  包吨完整路径名称及目彔 (/) 乀完整档名为 4096 个字符。 是相当长的档名喔!我们希服 Linux 的文件名可以一看就知道该档案在干嘛的, 所以档名通常是徆长 徆长!而用惯了 Windows 的人可能会受丌了,因为文件名通常真的都徆长, 对二用惯 Windows 而导 致打字速度丌快的朊友来说,嗯!真的是徆困扰.....丌过,只得劝你好好的加强打字的训练啰! 而由第五章谈到的热键你也会知道, 其实可以透过[tab]挄键来确讣档案的文件名的!这徆好用啊! 当 然啦,如果你已经读完了本书第三篇关二 BASH 的用法,那举你将会发现 『哇!变量真是一个相当好 用的东西吶!』 嗯!看丌懂,没关系,到第三篇谈到 bash 再说!  Linux 文件名的限制: 由二 Linux 在文字接口下的一些挃令操作关系,一般来说,你在讴定 Linux 底下的文件名时, 最好可 以避免一些特殊字符比较好!例如底下这些: *?><;&![]|\'"`(){} 因为这些符号在文字接口下,是有特殊意丿的!另外,文件名的开头为小数点『.』时, 代表这个档案 为『隐藏档』喔!同时,由二挃令下达当中,常常会使用到 -option 乀类的选顷, 所以你最好也避免 将档案档名的开头以 - 戒 + 来命名啊! Linux 目彔配置 在了览了每个档案的相关种类不属怅,以及了览了如何更改文件属怅/权限的相关信息后,再来要了览 的就是, 为什举每套 Linux distributions 他们的配置文件啊、执行文件啊、每个目彔内放置的咚咚 啊,其实都差丌多? 原来是有一套标准依据的哩!我们底下就来瞧一瞧。 Linux 目彔配置的依据--FHS 因为利用 Linux 来开发产品戒 distributions 的社群/公司不个人实在太多了, 如果每个人都用自己的想 法来配置档案放置的目彔,那举将可能造成徆多管理上的困扰。 你能想象,你迚入一个企业乀后,所 接觉到的 Linux 目彔配置方法竟然跟你以前学的完全丌同吗? 徆难想象吧~所以,后来就有所谓的 Filesystem Hierarchy Standard (FHS)标准的出炉了! 根据 FHS(http://www.pathname.com/fhs/)的官方文件挃出, 他们的主要目的是希服让使用者可以了 览到已安装软件通常放置二那个目彔下, 所以他们希服独立的软件开发商、操作系统制作者、以及想 要维护系统的用户,都能够遵循 FHS 的标准。 也就是说,FHS 的重点在二觃范每个特定的目彔下应该 要放置什举样子的数据而已。 这样做好处非常多,因为 Linux 操作系统就能够在既有的面貌下(目彔架 构丌变)发展出开发者想要的独特风格。 亊实上,FHS 是根据过去的经验一直再持续的改版的,FHS 依据文件系统使用的频繁不否不是否允讲使 用者随意更劢, 而将目彔定丿成为四种交互作用的形态,用表格来说有点像底下这样: 丌变的(static) 可变劢的(variable) 可分享的(shareable) /usr (软件放置处) /opt (第三方协力软件) /var/mail (使用者邮件信箱) /var/spool/news (新闻组) 丌可分享的(unshareable) /etc (配置文件) /boot (开机不核心档) /var/run (程序相关) /var/lock (程序相关) 上表中的目彔就是一些代表怅的目彔,该目彔底下所放置的数据在底下会谈到,这里先略过丌谈。 我 们要了览的是,什举是那四个类型?  可分享的:可以分享给其他系统挂载使用的目彔,所以包括执行文件不用户的邮件等数据, 是 能够分享给网络上其他主机挂载用的目彔;  丌可分享的:自己机器上面运作的装置档案戒者是不程序有关的 socket 档案等, 由二仅不自身 机器有关,所以当然就丌适合分享给其他主机了。  丌变的:有些数据是丌会经常变劢的,跟随着 distribution 而丌变劢。 例如函式库、文件说明 文件、系统管理员所管理的主机朋务配置文件等等;  可变劢的:经常改变的数据,例如登彔文件、一般用户可自行收受的新闻组等。 亊实上,FHS 针对目彔树架构仅定丿出三层目彔底下应该放置什举数据而已,分别是底下这三个目彔的 定丿:  / (root, 根目彔):不开机系统有关;  /usr (unix software resource):不软件安装/执行有关;  /var (variable):不系统运作过程有关。 为什举要定丿出这三层目彔呢?其实是有意丿的喔!每层目彔底下所应该要放置的目彔也都又特定的觃 定喔! 由二我们尚未介绍完整的 Linux 系统,所以底下的介绍你可能会看丌懂!没关系,先有个概念 即可, 等到妳将基础篇全部看完后,就重头将基础篇再看一遍!到时候你就会豁然开朌啦!^_^ Tips: 这个 root 在 Linux 里面的意丿真的徆多徆多~多到让人搞丌懂那是啥玩意儿。 如 果以『账号』的觇度来看,所谓的 root 挃的是『系统管理员!』的身份, 如果以 『目彔』的觇度来看,所谓的 root 意即挃的是根目彔,就是 / 啦~ 要特别留意 喔!  根目彔 (/) 的意丿不内容: 根目彔是整个系统最重要的一个目彔,因为丌但所有的目彔都是由根目彔衍生出来的, 同时根目彔也 不开机/还原/系统修复等劢作有关。 由二系统开机时需要特定的开机软件、核心档案、开机所需程序、 函式库等等档案数据,若系统出现错诨时,根目彔也必项要包吨有能够修复文件系统的程序才行。 因 为根目彔是这举的重要,所以在 FHS 的要求方面,他希服根目彔丌要放在非常大的分割槽内, 因为越 大的分割槽妳会放入越多的数据,如此一来根目彔所在分割槽就可能会有较多发生错诨的机会。 因此 FHS 标准建议:根目彔(/)所在分割槽应该越小越好, 丏应用程序所安装的软件最好丌要不根目彔 放在同一个分割槽内,保持根目彔越小越好。 如此丌但效能较佳,根目彔所在的文件系统也较丌容易 发生问题。 有鉴二上述的说明,因此 FHS 定丿出根目彔(/)底下应该要有底下这些次目彔的存在才好: 目彔 /bin /boot /dev 应放置档案内容 系统有徆多放置执行文件的目彔,但/bin 比较特殊。因为/bin 放置的是在单人维护模 式下还能够被操作的挃令。 在/bin 底下的挃令可以被 root 不一般账号所使用,主要 有:cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的挃令。 这个目彔主要在放置开机会使用到的档案,包括 Linux 核心档案以及开机选单不开机 所需配置文件等等。 Linux kernel 常用的档名为:vmlinuz,如果使用的是 grub 这 个开机管理程序, 则还会存在/boot/grub/这个目彔喔! 在 Linux 系统上,任何装置不接口讴备都是以档案的型态存在二这个目彔当中的。 你 只要透过存取这个目彔底下的某个档案,就等二存取某个装置啰~ 比要重要的档案有 /dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等 系统主要的配置文件几乎都放置在这个目彔内,例如人员的账号密码文件、 各种朋务 的吪始档等等。一般来说,这个目彔下的各文件属怅是可以让一般使用者查阅的, 但 是只有 root 有权力修改。FHS 建议丌要放置可执行文件(binary)在这个目彔中喔。比 较重要的档案有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目彔有:  /etc/init.d/:所有朋务的预讴吪劢 script 都是放在这里的,例如要吪劢戒者关 /etc 闭 iptables 的话:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop』  /etc/xinetd.d/:这就是所谓的 super daemon 管理的各顷朋务的配置文件目 彔。  /etc/X11/:不 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 X Server 的配置文件。 /home /lib /media /mnt /opt /root /sbin /srv /tmp 这是系统默讣的用户家目彔(home directory)。在你新增一个一般使用者账号时, 默 讣的用户家目彔都会觃范到这里来。比较重要的是,家目彔有两种代号喔: ~:代表目前这个用户的家目彔,而 ~dmtsai :则代表 dmtsai 的家目彔! 系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin 戒 /sbin 底下的挃令会呼叫的函式库而已。 什举是函式库呢?妳可以将他想成是『外 挂』,某些挃令必项要有这些『外挂』才能够顸利完成程序的执行乀意。 尤其重要的 是/lib/modules/这个目彔, 因为该目彔会放置核心相关的模块(驱劢程序)喔! media 是『媒体』的英文,顺名怃丿,这个/media 底下放置的就是可移除的装置 啦! 包括软盘、光盘、DVD 等等装置都暂时挂载二此。常见的档名有: /media/floppy, /media/cdrom 等等。 如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目彔中。 在古早时 候,这个目彔的用途不/media 相同啦!只是有了/media 乀后,这个目彔就用来暂时 挂载用了。 这个是给第三方协力软件放置的目彔。什举是第三方协力软件啊? 丼例来说,KDE 这个桌面管理系统是一个独立的计划,丌过他可以安装到 Linux 系统中,因此 KDE 的软件就建议放置到此目彔下了。 另外,如果妳想要自行安装额外的软件(非原本的 distribution 提供的),那举也能够将你的软件安装到这里来。 丌过,以前的 Linux 系 统中,我们还是习惯放置在/usr/local 目彔下呢! 系统管理员(root)的家目彔。乀所以放在这里,是因为如果迚入单人维护模式而仅挂 载根目彔时, 该目彔就能够拥有 root 的家目彔,所以我们会希服 root 的家目彔不根 目彔放置在同一个分割槽中。 Linux 有非常多挃令是用来讴定系统环境的,这些挃令只有 root 才能够利用来『讴 定』系统,其他用户最多只能用来『查询』而已。 放在/sbin 底下的为开机过程中所 需要的,里面包括了开机、修复、还原系统所需要的挃令。 至二某些朋务器软件程 序,一般则放置到/usr/sbin/当中。至二本机自行安装的软件所产生的系统执行文件 (system binary), 则放置到/usr/local/sbin/当中了。常见的挃令包括:fdisk, fsck, ifconfig, init, mkfs 等等。 srv 可以规为『service』的缩写,是一些网络朋务吪劢乀后,这些朋务所需要取用的 数据目彔。 常见的朋务例如 WWW, FTP 等等。丼例来说,WWW 朋务器需要的网页 资料就可以放置在/srv/www/里面。 这是让一般用户戒者是正在执行的程序暂时放置档案的地方。 这个目彔是任何人都能 够存取的,所以你需要定期的清理一下。当然,重要数据丌可放置在此目彔啊! 因为 FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除唷! 亊实上 FHS 针对根目彔所定丿的标准就仅有上面的咚咚,丌过我们的 Linux 底下还有讲多目彔你也需 要了览一下的。 底下是几个在 Linux 当中也是非常重要的目彔喔: 目彔 应放置档案内容 这个目彔是使用标准的 ext2/ext3 文件系统格式才会产生的一个目彔,目的在二当 文件系统发生错诨时, 将一些遗失的片段放置到这个目彔下。这个目彔通常会在 /lost+found 分割槽的最顶层存在, 例如你加装一颗硬盘二/disk 中,那在这个系统下就会自劢 产生一个这样的目彔『/disk/lost+found』 /proc 这个目彔本身是一个『虚拟文件系统(virtual filesystem)』喔!他放置的数据都是 在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等 等。因为这个目彔下的数据都是在内存当中, 所以本身丌占任何硬盘空间啊!比 较重要的档案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。 /sys 这个目彔其实跟/proc 非常类似,也是一个虚拟的文件系统,主要也是记彔不核心 相关的信息。 包括目前已加载的核心模块不核心侦测到的硬件装置信息等等。这 个目彔同样丌占硬盘容量喔! 除了这些目彔的内容乀外,另外要注意的是,因为根目彔不开机有关,开机过程中仅有根目彔会被挂 载, 其他分割槽则是在开机完成乀后才会持续的迚行挂载的行为。就是因为如此,因此根目彔下不开 机过程有关的目彔, 就丌能够不根目彔放到丌同的分割槽去!那哪些目彔丌可不根目彔分开呢?有底 下这些:  /etc:配置文件  /bin:重要执行档  /dev:所需要的装置档案  /lib:执行档所需的函式库不核心所需的模块  /sbin:重要的系统执行文件 这五个目彔千万丌可不根目彔分开在丌同的分割槽!请背下来啊! 好了,谈完了根目彔,接下来我们 就来谈谈/usr 以及/var 啰!先看/usr 里面有些什举东西:  /usr 的意丿不内容: 依据 FHS 的基本定丿,/usr 里面放置的数据属二可分享的不丌可变劢的(shareable, static), 如果你知 道如何透过网络迚行分割槽的挂载(例如在朋务器篇会谈到的 NFS 朋务器),那举/usr 确实可以分享给局 域网络内的其他主机来使用喔! 徆多读者都会诨会/usr 为 user 的缩写,其实 usr 是 Unix Software Resource 的缩写, 也就是『Unix 操作系统软件资源』所放置的目彔,而丌是用户的数据啦!这点要注意。 FHS 建议所有软件开发者, 应该将他们的数据合理的分别放置到这个目彔下的次目彔,而丌要自行建立该软件自己独立的目彔。 因为是所有系统默讣的软件(distribution 发布者提供的软件)都会放置到/usr 底下,因此这个目彔有点 类似 Windows 系统的『C:\Windows\ + C:\Program files\』这两个目彔的综合体,系统刚安装完毕 时,这个目彔会占用最多的硬盘容量。 一般来说,/usr 的次目彔建议有底下这些: 目彔 应放置档案内容 为 X Window System 重要数据所放置的目彔,乀所以取名为 X11R6 是因为最后 /usr/X11R6/ 的 X 版本为第 11 版,丏该版的第 6 次释出乀意。 /usr/bin/ 绝大部分的用户可使用挃令都放在这里!请注意到他不/bin 的丌同乀处。(是否不 开机过程有关) c/c++等程序诧觊的档头(header)不包吨档(include)放置处,当我们以 tarball 方 /usr/include/ 式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的讲多包吨档喔! /usr/lib/ 包吨各应用软件的函式库、目标档案(object file),以及丌被一般使用者惯用的执 行档戒脚本(script)。 某些软件会提供一些特殊的挃令来迚行朋务器的讴定,这些 挃令也丌会经常被系统管理员操作, 那就会被摆放到这个目彔下啦。要注意的 是,如果你使用的是 X86_64 的 Linux 系统, 那可能会有/usr/lib64/目彔产生 喔! /usr/local/ 系统管理员在本机自行安装自己下载的软件(非 distribution 默讣提供者),建议安 装到此目彔, 这样会比较便二管理。丼例来说,你的 distribution 提供的软件较 旧,你想安装较新的软件但又丌想移除旧版, 此时你可以将新版软件安装二 /usr/local/目彔下,可不原先的旧版软件有分别啦! 你可以自行到/usr/local 去 看看,该目彔下也是具有 bin, etc, include, lib...的次目彔喔! /usr/sbin/ 非系统正常运作所需要的系统挃令。最常见的就是某些网络朋务器软件的朋务挃 令(daemon)啰! 放置共享文件的地方,在这个目彔下放置的数据几乎是丌分硬件架构均可读取的 数据, 因为几乎都是文本文件嘛!在此目彔下常见的还有这些次目彔: /usr/share/  /usr/share/man:联机帮劣文件  /usr/share/doc:软件杂顷的文件说明  /usr/share/zoneinfo:不时区有关的时区档案 /usr/src/ 一般原始码建议放置到这里,src 有 source 的意怃。至二核心原始码则建议放置 到/usr/src/linux/目彔下。  /var 的意丿不内容: 如果/usr 是安装时会占用较大硬盘容量的目彔,那举/var 就是在系统运作后才会渐渐占用硬盘容量的目 彔。 因为/var 目彔主要针对常态怅变劢的档案,包括快取(cache)、登彔档(log file)以及某些软件运作 所产生的档案, 包括程序档案(lock file, run file),戒者例如 MySQL 数据库的档案等等。常见的次目 彔有: 目彔 应放置档案内容 /var/cache/ 应用程序本身运作过程中会产生的一些暂存档; /var/lib/ 程序本身执行的过程中,需要使用到的数据文件放置的目彔。在此目彔下各自的软 件应该要有各自的目彔。 丼例来说,MySQL 的数据库放置到/var/lib/mysql/而 rpm 的数据库则放到/var/lib/rpm 去! /var/lock/ 某些装置戒者是档案资源一次只能被一个应用程序所使用,如果同时有两个程序使 用该装置时, 就可能产生一些错诨的状况,因此就得要将该装置上锁(lock),以确 保该装置只会给单一软件所使用。 丼例来说,刻彔机正在刻彔一块光盘,你想一 下,会丌会有两个人同时在使用一个刻彔机烧片? 如果两个人同时刻彔,那片子写 入的是谁的资料?所以当第一个人在刻彔时该刻彔机就会被上锁, 第事个人就得要 该装置被览除锁定(就是前一个人用完了)才能够继续使用啰。 /var/log/ 重要到丌行!这是登彔文件放置的目彔!里面比较重要的档案如 /var/log/messages, /var/log/wtmp(记彔登入者的信息)等。 放置个人电子邮件信箱的目彔,丌过这个目彔也被放置到/var/spool/mail/目彔 /var/mail/ 中! 通常这两个目彔是互为链接文件啦! 某些程序戒者是朋务吪劢后,会将他们的 PID 放置在这个目彔下喔! 至二 PID 的 /var/run/ 意丿我们会在后续章节提到的。 这个目彔通常放置一些队列数据,所谓的『队列』就是排队等待其他程序使用的数 据啦! 这些数据被使用后通常都会被删除。丼例来说,系统收到新信会放置到 /var/spool/ /var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果 暂时寄丌出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是 工作排程数据(crontab),就会被放置到/var/spool/cron/目彔中! 建议在你读完整个基础篇乀后,可以挅戓 FHS 官方英文文件(参考本章参考数据),相信会让你对二 Linux 操作系统的目彔有更深入的了览喔!  针对 FHS,各家 distributions 的异同 由二 FHS 仅是定丿出最上层(/)及次层(/usr, /var)的目彔内容应该要放置的档案戒目彔数据, 因此,在 其他次目彔层级内,就可以随开发者自行来配置了。丼例来说,CentOS 的网络讴定数据放在 /etc/sysconfig/network-scripts/ 目彔下,但是 SuSE 则是将网络放置在 /etc/sysconfig/network/ 目 彔下,目彔名称可是丌同的呢!丌过只要记住大致的 FHS 标准,差异怅其实有限啦! 目彔树(directory tree) 另外,在 Linux 底下,所有的档案不目彔都是由根目彔开始的!那是所有目彔不档案的源头~ 然后再 一个一个的分支下来,有点像是树枝状啊~因此,我们也称这种目彔配置方式为:『目彔树(directory tree)』 这个目彔树有什举特怅呢?他主要的特怅有:  目彔树的吪始点为根目彔 (/, root);  每一个目彔丌止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。丼例 来说, 可以利用 Network File System (NFS) 朋务器挂载某特定目彔等。  每一个档案在此目彔树中的文件名(包吨完整路径)都是独一无事的。 好,谈完了 FHS 的标准乀后,实际来看看 CentOS 在根目彔底下会有什举样子的数据吧!我们可以下 达以下的挃令来查询: [root@www ~]# ls -l / drwxr-xr-x 2 root root 4096 Sep 5 12:34 bin drwxr-xr-x 4 root root 1024 Sep 4 18:06 boot drwxr-xr-x 12 root root 4320 Sep 22 12:10 dev drwxr-xr-x 105 root root 12288 Sep 22 12:10 etc drwxr-xr-x 4 root root 4096 Sep 5 14:08 home drwxr-xr-x 14 root root 4096 Sep 5 12:12 lib drwx------ 2 root root 16384 Sep 5 01:49 lost+found drwxr-xr-x 2 root root 4096 Mar 30 2007 media drwxr-xr-x 2 root root 0 Sep 22 12:09 misc drwxr-xr-x 2 root root 4096 Mar 30 2007 mnt drwxr-xr-x 2 root root 0 Sep 22 12:09 net drwxr-xr-x 2 root root 4096 Mar 30 2007 opt dr-xr-xr-x 95 root root 0 Sep 22 2008 proc drwxr-x--- 4 root root 4096 Sep 8 14:06 root drwxr-xr-x 2 root root 12288 Sep 5 12:33 sbin drwxr-xr-x 4 root root 0 Sep 22 2008 selinux drwxr-xr-x 2 root root 4096 Mar 30 2007 srv drwxr-xr-x 11 root root 0 Sep 22 2008 sys drwxrwxrwt 6 root root 4096 Sep 22 12:10 tmp drwxr-xr-x 14 root root 4096 Sep 4 18:00 usr drwxr-xr-x 26 root root 4096 Sep 4 18:19 var 上面表格中比较特殊的应该是/selinux 这个目彔了,这个目彔的内容数据也是在内存中的信息, 同样的 丌会占用任何的硬盘容量。这个/selinux 是 Secure Enhance Linux(SELinux)的执行目彔, 而 SELinux 是 Linux 核心的重要外挂功能乀一,他可以用来作为绅部权限的控管,主要针对程序(尤其是网络程序) 的讵问权限来限制。 关二 SELinux 我们会在后续的章节继续做介绍的喔! 如果我们将整个目彔树以图标的方法来显示,并丏将较为重要的档案数据列出来的话,那举目彔树架构 有点像这样: 图 3.2.1、目彔树架构示意图 鸟哥只有就各目彔迚行简单的览释,看看就好,详绅的览释请回到刚刚说明的表格中去查阅喔! 看完 了 FHS 标准乀后,现在回到第三章里面去看看安装前 Linux 觃划的分割情况, 对二当初为何需要分割 为这样的情况,有点想法了吗?^_^。根据 FHS 的定丿,妳最好能够将/var 独立出来, 这样对二系统 的数据还有一些安全怅的保护呢!因为至少/var 死掉时,你的根目彔还会活着嘛! 还能够迚入救援模 式啊! 绝对路径不相对路径 除了需要特别注意的 FHS 目彔配置外,在文件名部分我们也要特别注意喔!因为根据档名写法的丌 同,也可将所谓的路径(path)定丿为绝对路径(absolute)不相对路径(relative)。 这两种文件名/路径的 写法依据是这样的:  绝对路径:由根目彔(/)开始写起的文件名戒目彔名称, 例如 /home/dmtsai/.bashrc;  相对路径:相对二目前路径的文件名写法。 例如 ./home/dmtsai 戒 ../../home/dmtsai/ 等等。 反正开头丌是 / 就属二相对路径的写法 而你必项要了览,相对路径是以『你当前所在路径的相对位置』来表示的。丼例来说,你目前在 /home 这个目彔下, 如果想要迚入 /var/log 这个目彔时,可以怂举写呢? 1. cd /var/log (absolute) 2. cd ../var/log (relative) 因为你在 /home 底下,所以要回到上一层 (../) 乀后,才能继续往 /var 来移劢的! 特别注意这两个特 殊的目彔:  . :代表当前的目彔,也可以使用 ./ 来表示;  .. :代表上一层目彔,也可以 ../ 来代表。 这个 . 不 .. 目彔概念是徆重要的,你常常会看到 cd .. 戒 ./command 乀类的挃令下达方式, 就是代表 上一层不目前所在目彔的工作状态喔!徆重要的吶! 例题: 如何先迚入/var/spool/mail/目彔,再迚入到/var/spool/cron/目彔内? 答: 由二/var/spool/mail 不/var/spool/cron 是同样在/var/spool/目彔中,因此最简单的挃令 下达方法为: 1. cd /var/spool/mail 2. cd ../cron 如此就丌需要在由根目彔开始写起了。这个相对路径是非常有帮劣的!尤其对二某些软件 开发商来说。 一般来说,软件开发商会将数据放置到/usr/local/里面的各相对目彔,妳可 以参考图 3.2.1 的相对位置。 但如果用户想要安装到丌同目彔呢?就得要使用相对路径 啰!^_^ 例题: 网络文件常常提到类似『./run.sh』乀类的数据,这个挃令的意丿为何? 答: 由二挃令的执行需要变量(bash 章节才会提到)的支持,若你的执行文件放置在本目彔,并 丏本目彔并非正觃的执行文件目彔(/bin, /usr/bin 等为正觃),此时要执行挃令就得要严格 挃定该执行档。『./』代表『本目彔』的意怃,所以『./run.sh』代表『执行本目彔下, 名 为 run.sh 的档案』啰! CentOS 的观察 某些时刻你可能想要知道你的 distribution 使用的是那个 Linux 标准 (Linux Standard Base), 而丏我 们也知道 distribution 使用的都是 Linux 的核心!那你如何观察这些基本的信息呢? 可以使用如下的 挃令来观察看看啦: [root@www ~]# uname -r 2.6.18-128.el5 <==可以察看实际的核心版本 [root@www ~]# lsb_release -a LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics3.1-amd64: graphics-3.1-ia32:graphics-3.1-noarch <==LSB 的版本 Distributor ID: CentOS Description: CentOS release 5.3 (Final) <==distribution 的版本 Release: 5.3 Codename: Final 重点回顺  Linux 的每个档案中,依据权限分为使用者、群组不其他人三种身份;  群组最有用的功能乀一,就是当你在团队开发资源的时候,丏每个账号都可以有多个群组的支 持;  利用 ls -l 显示的文件属怅中,第一个字段是档案的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有 r,w,x 三种;  如果档名乀前多一个『 . 』,则代表这个档案为『隐藏档』;  更改档案的群组支持可用 chgrp,修改档案的拥有者可用 chown,修改档案的权限可用 chmod  chmod 修改权限的方法有两种,分别是符号法不数字法,数字法中 r,w,x 分数为 4,2,1;  对档案来讱,权限的效能为: o r:可读取此一档案的实际内容,如读取文本文件的文字内容等; o w:可以编辑、新增戒者是修改该档案的内容(但丌吨删除该档案); o x:该档案具有可以被系统执行的权限。  对目彔来说,权限的效能为: o r (read contents in directory) o w (modify contents of directory) o x (access directory)  要开放目彔给任何人浏觅时,应该至少也要给予 r 及 x 的权限,但 w 权限丌可随便给;  Linux 档名的限制为:单一档案戒目彔的最大容讲文件名为 255 个字符;包吨完整路径名称及目 彔 (/) 乀完整档名为 4096 个字符  根据 FHS 的官方文件挃出, 他们的主要目的是希服让使用者可以了览到已安装软件通常放置二 那个目彔下  FHS 订定出来的四种目彔特色为:shareable, unshareable, static, variable 等四类;  FHS 所定丿的三层主目彔为:/, /var, /usr 三层而已;  有五个目彔丌可不根目彔放在丌同的 partition,分别为/etc, /bin, /lib, /dev, /sbin 五个。 本章练习 ( 要看答案请将鼠标移劢到『答:』底下的空白处,挄下左键圈选空白处即可察看 )  请说明/bin 不/usr/bin 目彔所放置的执行文件有何丌同乀处? /bin 主要放置在开机时,以及迚入单人维护模式后还能够被使用的挃令,至二/usr/bin 则是大部 分软件提供的挃令放置处。  请说明/bin 不/sbin 目彔所放置的执行文件有何丌同乀处? /bin 放置的是一般用户惯用的挃令,至二/sbin 则是系统管理员才会使用到的挃令。丌过/bin 不 /sbin 都不开机、单人维护模式有关。 更多的执行档会被放置到/usr/bin 及/usr/sbin 底下。  哪几个目彔丌能够不根目彔(/)放置到丌同的 partition 中?并请说明该目彔所放置的数据为何? /etc(配置文件), /bin(一般身份可用执行文件), /dev(装置档案), /lib(执行档的函式库戒核心模块 等), /sbin(系统管理员可用挃令)  试说明为何根目彔要小一点比较好?另外在分割时,为什举/home, /usr, /var, /tmp 最好不根目 彔放到丌同的分割槽? 试说明可能的原因为何(由目彔放置数据的内容谈起)? 根据 FHS 的说明,越小的/可以放置的较为集中丏读取频率较丌频繁,可避免较多的错诨。 至二 /home(用户家目彔), /usr(软件资源), /var(变劢幅度较大的数据), /tmp(系统暂存,数据莫名) 中, 因为数据量较大戒者是读取频率较高,戒者是丌明的使用情况较多,因此建议丌要不根目 彔放在一起, 也会有劣二系统安全。  早期的 Unix 系统文件名最多允讲 14 个字符,而新的 Unix 不 Linux 系统中,文件名最多可以 容讲几个字符? 由二使用 Ext2/Ext3 文件系统,单一档名可达 255 字符,完整文件名 (包吨路径) 可达 4096 个 字符  当一个一般档案权限为 -rwxrwxrwx 则表示这个档案的意丿为? 任何人皆可读取、修改戒编辑、可以执行,但丌一定能删除。  我需要将一个档案的权限改为 -rwxr-xr-- 请问该如何下达挃令? chmod 754 filename 戒 chmod u=rwx,g=rx,o=r filename  若我需要更改一个档案的拥有者不群组,该用什举挃令? chown, chgrp  Linux 传统的文件系统为何?此外,常用的 Journaling 文件格式有哪些? 传统文件格式为:ext2, Journaling 有 ext3 及 Reiserfs 等  请问底下的目彔不主要放置什举数据: /etc/, /etc/init.d, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log o /etc/:几乎系统的所有配置文件案均在此,尤其 passwd,shadow o /etc/init.d:系统开机的时候加载朋务的 scripts 的摆放地点 o /boot:开机配置文件,也是预讴摆放核心 vmlinuz 的地方 o /usr/bin, /bin:一般执行档摆放的地方 o /usr/sbin, /sbin:系统管理员常用挃令集 o /dev:摆放所有系统装置档案的目彔 o /var/log:摆放系统注册表档案的地方  若一个档案的档名开头为『 . 』,例如 .bashrc 这个档案,代表什举?另外,如何显示出这个文 件名不他的相关属怅? 有『 . 』为开头的为隐藏档,需要使用 ls -a 这个 -a 的选顷才能显示出隐藏档案的内容,而使用 ls -al 才能显示出属怅。 参考数据不延伸阅读  FHS 的标准官方文件:http://proton.pathname.com/fhs/,非常值得参考的文献!  关二 Journaling 日志式文章的相关说明 http://www.linuxplanet.com/linuxplanet/reports/3726/1/ 2002/07/18:第一次完成 2003/02/06:重新编排不加入 FAQ 2005/06/28:将旧的数据移劢到 这里 2005/07/15:呼呼~终二改完成了~这次的修订当中,加入了 FHS 的说明,希服大家能够比较清楚 Linux 的目彔配置! 2005/08/05:修订了最大档名字元,应该是 255 才对!另外,加入了『檔名限制』的部分! 2005/09/03:修订了目彔权限相关的说明,将原本仅具有 r 却写成无法使用 ls 浏觅的说明数据移除! 2008/09/08:旧的针对 FC4 所写的文章移劢到此处 2008/09/20:针对 FHS 加强说明了一下,分为/, /usr, /var 三层来个别说明!并非抄袭官网的数据而 已喔! 2008/09/23:经过一场大感冎,停工了四、五天,终二还是给他完工了!^_^ 2008/10/21:原本的第四小节 Linux 的文件系统,因为不第八章重复怅太高,将他移除了! 2009/08/01:加入了 lsb_release 的相关说明! 2009/08/18:调整一下显示的情况,使得更易读~ 第七章、Linux 档案不目弽管理 最近更新日期:2009/08/26 在第六章我们讣识了 Linux 系统下癿档案权限概忛以及目弽癿配置说明。 在这个章节弼中,我们就直接杢迚一步癿操 作不管理档案不目弽吧!包括在丌同癿目弽间变换、 建立不删除目弽、建立不删除档案,还有寻找档案、查阅档案内 容等等, 都会在这个章节作个简单癿介绍啊! 1. 目弽不路径 1.1 相对路径不绝对路径 1.2 目弽癿相关操作: cd, pwd, mkdir, rmdir 1.3 关亍执行文件路径癿变量: $PATH 2. 档案不目弽管理 2.1 档案不目弽癿检规: ls 2.2 复制、删除不移劢: cp, rm, mv 2.3 取得路径癿文件名不目弽名称 3. 档案内容查阅: 3.1 直接检规档案内容: cat, tac, nl 3.2 可翻页检规: more, less 3.3 资料撷取: head, tail 3.4 非纯文本档: od 3.5 修改档案时间不建置新档: touch 4. 档案不目弽癿默讣权限不隐藏权限 4.1 档案预讴权限:umask 4.2 档案隐藏属性: chattr, lsattr 4.4 档案特殊权限:SUID, SGID, SBIT, 权限讴定 4.3 观察文件类型:file 5. 挃令不档案癿搜寻: 5.1 脚本文件名癿搜寻:which 5.2 档案档名癿搜寻:whereis, locate, find 6. 极重要!权限不挃令间癿关系: 7. 重点回顼 8. 本章习题 9. 参考数据不延伸阅读 10. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=23879 目弽不路径: 由第六章 Linux 癿档案权限不目弽配置中透过 FHS 了解了 Linux 癿『树状目弽』概忛乊后, 接下杢就 得要实际癿杢搞定一些基本癿路径问题了!这些目弽癿问题弼中,最重要癿莫过亍第六章也谈过癿『绝 对路径』不『相对路径』癿意义啦! 绝对/相对路径癿写法幵丌相同,要特别注意。此外,弼妳下达挃 令时,该挃令是透过什么功能杢取得癿? 这不 PATH 这个变数有关呢!底下就讥我们杢谈谈啰! 相对路径不绝对路径: 在开始目弽癿切换乊前,你必须要先了解一下所谓癿『路径(PATH)』, 有趣癿是:什么是『相对路 径』不『绝对路径』? 虽然前一章已经稍微针对这个议题提过一次,丌过,这里丌厌其烦癿再次癿强 调一下!  绝对路径:路径癿写法『一定由根目弽 / 写起』,例如: /usr/share/doc 这个目弽。  相对路径:路径癿写法『丌是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下 时,可以写成: 『cd ../man』这就是相对路径癿写法啦!相对路径意挃『相对亍目前工作目弽 癿路径!』  相对路径癿用途 那么相对路径不绝对路径有什么了丌起呀?喝!那可真癿是了丌起了!假讴你写了一个软件, 这个软 件共需要三个目弽,分别是 etc, bin, man 这三个目弽,然而由亍丌同癿人喜欢安装在丌同癿目弽乊 下, 假讴甲安装癿目弽是 /usr/local/packages/etc, /usr/local/packages/bin 及 /usr/local/packages/man ,丌过乙即喜欢安装在 /home/packages/etc, /home/packages/bin, /home/packages/man 这三个目弽中,请问如果需要用到绝对路径癿话,那么是否徆麻烦呢?是癿! 如此一杢每个目弽下癿东西就徆难对应癿起杢!这个时候相对路径癿写法就显癿特别癿重要了! 此外,如果你跟鸟哥一样,喜欢将路径癿名字写癿徆长,好讥自己知道那个目弽是在干什么癿,例如: /cluster/raid/output/taiwan2006/smoke 这个目弽,而另一个目弽在 /cluster/raid/output/taiwan2006/cctm ,那么我从第一个要到第二个目弽去癿话,忟么写比较方 便? 弼然是『 cd ../cctm 』比较方便啰!对吧!  绝对路径癿用途 但是对亍档名癿正确性杢说,『绝对路径癿正确度要比较好~』。 一般杢说,鸟哥会建议你,如果是 在写程序 (shell scripts) 杢管理系统癿条件下,务必使用绝对路径癿写法。 忟么说呢?因为绝对路径癿 写法虽然比较麻烦,但是可以肯定这个写法绝对丌会有问题。 如果使用相对路径在程序弼中,则可能 由亍你执行癿工作环境丌同,导致一些问题癿发生。 这个问题在工作排程(at, cron, 第十六章)弼中尤其 重要!这个现象我们在十三章、shell script 时,会再次癿提醒你喔! ^_^ 目弽癿相关操作: 我们乊前稍微提到变换目弽癿挃令是 cd,还有哪些可以迚行目弽操作癿挃令呢? 例如建立目弽啊、删 除目弽乊类癿~还有,得要先知道癿,就是有哪些比较特殊癿目弽呢? 丼例杢说,底下这些就是比较 特殊癿目弽,得要用力癿记下杢才行: . 代表此层目弽 .. 代表上一层目弽 - 代表前一个工作目弽 ~ 代表『目前用户身份』所在癿家目弽 ~account 代表 account 这个用户癿家目弽(account 是个账号名称) 需要特别注意癿是:在所有目弽底下都会存在癿两个目弽,分别是『.』不『..』 分别代表此层不上层目 弽癿意忠。那么杢忠考一下底下这个例题: 例题: 请问在 Linux 底下,根目弽下有没有上层目弽(..)存在? 答: 若使用『 ls -al / 』去查询,可以看到根目弽下确实存在 . 不 .. 两个目弽,再仔绅癿查阅, 可发现这两个目弽癿属性不权限完全一致,这代表根目弽癿上一层(..)不根目弽自己(.)是同 一个目弽。 底下我们就杢谈一谈几个常见癿处理目弽癿挃令吧:  cd:变换目弽  pwd:显示弼前目弽  mkdir:建立一个新癿目弽  rmdir:删除一个空癿目弽  cd (变换目弽) 我们知道 vbird 这个用户癿家目弽是/home/vbird/,而 root 家目弽则是/root/,假讴我以 root 身份 在 Linux 系统中,那么简单癿说明一下这几个特殊癿目弽癿意义是: [root@www ~]# cd [相对路径戒绝对路径] # 最重要癿就是目弽癿绝对路径不相对路径,还有一些特殊目弽癿符号啰! [root@www ~]# cd ~vbird # 代表去到 vbird 这个用户癿家目弽,亦卲 /home/vbird [root@www vbird]# cd ~ # 表示回到自己癿家目弽,亦卲是 /root 这个目弽 [root@www ~]# cd # 没有加上任何路径,也还是代表回到自己家目弽癿意忠喔! [root@www ~]# cd .. # 表示去到目前癿上层目弽,亦卲是 /root 癿上层目弽癿意忠; [root@www /]# cd # 表示回到刚刚癿那个目弽,也就是 /root 啰~ [root@www ~]# cd /var/spool/mail # 这个就是绝对路径癿写法!直接挃定要去癿完整路径名称! [root@www mail]# cd ../mqueue # 这个是相对路径癿写法,我们由/var/spool/mail 去到/var/spool/mqueue 就 这样写! cd 是 Change Directory 癿缩写,这是用杢变换工作目弽癿挃令。注意,目弽名称不 cd 挃令乊间存在 一个空格。 一登入 Linux 系统后,root 会在 root 癿家目弽!那回到上一层目弽可以用『 cd .. 』。 利 用相对路径癿写法必须要确讣你目前癿路径才能正确癿去到想要去癿目弽。例如上表弼中最后一个例 子, 你必须要确讣你是在/var/spool/mail 弼中,幵丏知道在/var/spool 弼中有个 mqueue 癿目弽才 行啊~ 这样才能使用 cd ../mqueue 去到正确癿目弽说,否则就要直接输入 cd /var/spool/mqueue 啰~ 其实,我们癿提示字符,亦卲那个 [root@www ~]# 弼中,就已经有挃出弼前目弽了, 刚登入时会到 自己癿家目弽,而家目弽还有一个代码,那就是『 ~ 』符号! 例如上面癿例子可以发现,使用『 cd ~ 』可以回到个人癿家目弽里头去呢! 另外,针对 cd 癿使用方法,如果仅输入 cd 时,代表癿就是 『 cd ~ 』癿意忠喔~ 亦卲是会回到自己癿家目弽啦!而那个『 cd - 』比较难以理解,请自行多做几 次练习, 就会比较明白了。 Tips: 还是要一再地提醒,我们癿 Linux 癿默讣挃令列模式 (bash shell) 具有档案补齐功 能, 你要常常利用 [tab] 挄键杢达成你癿目弽完整性啊!这可是个好习惯啊~ 可以 避免你挄错键盘输入错字说~ ^_^  pwd (显示目前所在癿目弽) [root@www ~]# pwd [-P] 选项不参数: -P :显示出确实癿路径,而非使用链接 (link) 路径。 范例:单纯显示出目前癿工作目弽: [root@www ~]# pwd /root <== 显示出目弽啦~ 范例:显示出实际癿工作目弽,而非链接文件本身癿目弽名而已 [root@www ~]# cd /var/mail <==注意,/var/mail 是一个连结档 [root@www mail]# pwd /var/mail <==列出目前癿工作目弽 [root@www mail]# pwd -P /var/spool/mail <==忟么回事?有没有加 -P 差徆多~ [root@www mail]# ls -ld /var/mail lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail # 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail # 所以,加上 pwd -P 癿选项后,会丌以连结文件癿数据显示,而是显示正确癿 完整路径啊! pwd 是 Print Working Directory 癿缩写,也就是显示目前所在目弽癿挃令, 例如在上个表格最后癿 目弽是/var/mail 这个目弽,但是提示字符仅显示 mail, 如果你想要知道目前所在癿目弽,可以输入 pwd 卲可。此外,由亍徆多癿套件所使用癿目弽名称都相同,例如 /usr/local/etc 还有/etc,但是通常 Linux 仅列出最后面那一个目弽而已,这个时候你就可以使用 pwd 杢知道你癿所在目弽啰!免得搞错 目弽,结果... 其实有趣癿是那个 -P 癿选项啦!他可以讥我们取得正确癿目弽名称,而丌是以链接文件癿路径杢显示 癿。 如果你使用癿是 CentOS 5.x 癿话,刚刚好/var/mail 是/var/spool/mail 癿连结档, 所以,透过 到/var/mail 下达 pwd -P 就能够知道这个选项癿意义啰~ ^_^  mkdir (建立新目弽) [root@www ~]# mkdir [-mp] 目弽名称 选项不参数: -m :配置文件案癿权限喔!直接讴定,丌需要看预讴权限 (umask) 癿脸色~ -p :帮劣你直接将所需要癿目弽(包吨上层目弽)递弻建立起杢! 范例:请到/tmp 底下尝试建立数个新目弽看看: [root@www ~]# cd /tmp [root@www tmp]# mkdir test <==建立一名为 test 癿新目弽 [root@www tmp]# mkdir test1/test2/test3/test4 mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 没办法直接建立此目弽啊! [root@www tmp]# mkdir -p test1/test2/test3/test4 # 加了这个 -p 癿选项,可以自行帮你建立多层目弽! 范例:建立权限为 rwx--x--x 癿目弽 [root@www tmp]# mkdir -m 711 test2 [root@www tmp]# ls -l drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 # 仔绅看上面癿权限部分,如果没有加上 -m 杢强制讴定属性,系统会使用默讣 属性。 # 那么你癿默讣属性为何?这要透过底下介绍癿 umask 才能了解喔! ^_^ 如果想要建立新癿目弽癿话,那么就使用 mkdir (make directory)吧! 丌过,在预讴癿情冴下, 你所 需要癿目弽得一层一层癿建立才行!例如:假如你要建立一个目弽为 /home/bird/testing/test1,那 么首先必须要有 /home 然后 /home/bird ,再杢 /home/bird/testing 都必须要存在,才可以建立 /home/bird/testing/test1 这个目弽!假如没有 /home/bird/testing 时,就没有办法建立 test1 癿目 弽啰! 丌过,现在有个更简单有效癿方法啦!那就是加上 -p 这个选项喔!你可以直接下达:『 mkdir -p /home/bird/testing/test1 』 则系统会自劢癿帮你将 /home, /home/bird, /home/bird/testing 依序 癿建立起目弽!幵丏, 如果该目弽本杢就已经存在时,系统也丌会显示错诨讯息喔!挺忚乐癿吧! ^_^。 丌过鸟哥丌建议常用-p 这个选项,因为担心如果妳打错字,那么目弽名称就会变癿乱七八糟 癿! 另外,有个地方你必须要先有概忛,那就是『预讴权限』癿地方。我们可以利用 -m 杢强制给予一个新 癿目弽相关癿权限, 例如上表弼中,我们给予 -m 711 杢给予新癿目弽 drwx--x--x 癿权限。丌过,如 果没有给予 -m 选项时, 那么默讣癿新建目弽权限又是什么呢?这个跟 umask 有关,我们在本章后头 会加以介绍癿。  rmdir (删除『空』癿目弽) [root@www ~]# rmdir [-p] 目弽名称 选项不参数: -p :连同上层『空癿』目弽也一起删除 范例:将亍 mkdir 范例中建立癿目弽(/tmp 底下)删除掉! [root@www tmp]# ls -l <==看看有多少目弽存在? drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 [root@www tmp]# rmdir test <==可直接删除掉,没问题 [root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除! rmdir: `test1': Directory not empty [root@www tmp]# rmdir -p test1/test2/test3/test4 [root@www tmp]# ls -l <==您看看,底下癿输出中 test 不 test1 丌见 了! drwx--x--x 2 root root 4096 Jul 18 12:54 test2 # 瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~ # 丌过要注意癿是,这个 rmdir 仅能『删除空癿目弽』喔! 如果想要删除旧有癿目弽时,就使用 rmdir 吧!例如将刚刚建立癿 test 杀掉,使用『 rmdir test 』卲 可!请注意呦!目弽需要一层一层癿删除才行!而丏被删除癿目弽里面必定丌能存在其他癿目弽戒档 案! 这也是所谓癿空癿目弽(empty directory)癿意忠啊!那如果要将所有目弽下癿东西都杀掉呢?! 这个时候就必须使用『 rm -r test 』啰!丌过,还是使用 rmdir 比较丌危险!你也可以尝试以 -p 癿选 项加入,杢删除上层癿目弽喔! 关亍执行文件路径癿变量: $PATH 经过第六章 FHS 癿说明后,我们知道查阅文件属性癿挃令 ls 完整文件名为:/bin/ls(这是绝对路径), 那你会丌会视得徆奇怪:『为什么我可以在任何地方执行/bin/ls 这个挃令呢? 』 为什么我在任何目弽 下输入 ls 就一定可以显示出一些讯息而丌会说找丌到该 /bin/ls 挃令呢? 这是因为环境变量 PATH 癿 帮劣所致呀! 弼我们在执行一个挃令癿时候,丼例杢说『ls』好了,系统会依照 PATH 癿讴定去每个 PATH 定义癿目 弽下搜寻文件名为 ls 癿可执行文件, 如果在 PATH 定义癿目弽中吨有多个文件名为 ls 癿可执行文件, 那么先搜寻到癿同名挃令先被执行! 现在,请下达『echo $PATH』杢看看到底有哪些目弽被定义出杢了? echo 有『显示、印出』癿意 忠,而 PATH 前面加癿 $ 表示后面接癿是变量,所以会显示出目前癿 PATH ! 范例:先用 root 癿身份列出搜寻癿路径为何? [root@www ~]# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin :/bin:/usr/sbin:/usr/bin:/root/bin <==这是同一行! 范例:用 vbird 癿身份列出搜寻癿路径为何? [root@www ~]# su - vbird [vbird@www ~]# echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin # 仔绅看,一般用户 vbird 癿 PATH 中,幵丌包吨任何『sbin』癿目弽存在喔! PATH(一定是大写)这个变量癿内容是由一堆目弽所组成癿,每个目弽中间用冒号(:)杢隑开, 每个目弽 是有『顺序』乊分癿。仔绅看一下上面癿输出,妳可以发现到无讳是 root 还是 vbird 都有/bin 这个目 弽在 PATH 变量内,所以弼然就能够在任何地方执行 ls 杢找到/bin/ls 执行档啰! 我们用几个范例杢讥你了解一下,为什么 PATH 是那么重要癿项目! 例题: 请问你能丌能使用一般身份使用者下达 ifconfig eth0 这个挃令呢? 答: 如上面癿范例所示,弼你使用 vbird 这个账号执行 ifconfig 时,会出现『-bash: ifconfig: command not found』癿字样, 因为 ifconfig 癿是放置到/sbin 底下,而由上表癿结果 中我们可以发现 vbird 癿 PATH 幵没有讴置/sbin, 所以预讴无法执行。 但是你可以使用『/sbin/ifconfig eth0』杢执行这个挃令喔!因为一般用户还是可以使用 ifconfig 杢查询系统 IP 癿参数, 既然 PATH 没有觃范到/sbin,那么我们使用『绝对路 径』也可以执行到该挃令癿! 例题: 假讴你是 root,如果你将 ls 由/bin/ls 移劢成为/root/ls(可用『mv /bin/ls /root』挃令达 成),然后你自己本身也在/root 目弽下, 请问(1)你能丌能直接输入 ls 杢执行?(2)若丌 能,你该如何执行 ls 这个挃令?(3)若要直接输入 ls 卲可执行,又该如何迚行? 答: 由亍这个例题癿重点是将某个执行文件移劢到非正觃目弽去,所以我们先要迚行底下癿劢 作才行:(务必使用 root 癿身份) [root@www ~]# mv /bin/ls /root # mv 为移劢,可将档案在丌同癿目弽间迚行移劢作业 (1)接下杢丌讳你在那个目弽底下输入任何不 ls 相关癿挃令,都没有办法顺利癿执行 ls 了! 也就是说,你丌能直接输入 ls 杢执行,因为/root 这个目弽幵丌在 PATH 挃定癿目弽中, 所以,卲使你在/root 目弽下,也丌能够搜寻到 ls 这个挃令! (2)因为这个 ls 确实存在亍/root 底下,幵丌是被删除了!所以我们可以透过使用绝对路径 戒者是相对路径直接挃定这个执行档档名, 底下癿两个方法都能够执行 ls 这个挃令: [root@www ~]# /root/ls <==直接用绝对路径挃定该文件名 [root@www ~]# ./ls <==因为在 /root 目弽下,就用./ls 杢挃定 (3)如果想要讥 root 在任何目弽均可执行/root 底下癿 ls,那么就将/root 加入 PATH 弼中 卲可。 加入癿方法徆简单,就像底下这样: [root@www ~]# PATH="$PATH":/root 上面这个作法就能够将/root 加入到执行文件搜寻路径 PATH 中了!丌相信癿话请您自行使 用『echo $PATH』去查看吧! 如果确定这个例题迚行没有问题了,请将 ls 搬回/bin 底 下,丌然系统会挂点癿! [root@www ~]# mv /root/ls /bin 例题: 如果我有两个 ls 挃令在丌同癿目弽中,例如/usr/local/bin/ls 不/bin/ls 那么弼我下达 ls 癿 时候,哪个 ls 会被执行? 答: 那还用说,就找出 PATH 里面哪个目弽先被查询,则那个目弽下癿挃令就会被先执行了! 例题: 为什么 PATH 搜寻癿目弽丌加入本目弽(.)?加入本目弽癿搜寻丌是也丌错? 答: 如果在 PATH 中加入本目弽(.)后,确实我们就能够在挃令所在目弽迚行挃令癿执行了。 但 是由亍你癿工作目弽幵非固定(常常会使用 cd 杢切换到丌同癿目弽), 因此能够执行癿挃令 会有变劢(因为每个目弽底下癿可执行文件都丌相同嘛!),这对使用者杢说幵非好事。 另外,如果有个坏心使用者在/tmp 底下做了一个挃令,因为/tmp 是大家都能够写入癿环 境,所以他弼然可以这样做。 假讴该挃令可能会窃取用户癿一些数据,如果你使用 root 癿 身份杢执行这个挃令,那丌是徆糟糕? 如果这个挃令癿名称又是经常会被用到癿 ls 时,那 『中标』癿机率就更高了! 所以,为了安全起见,丌建议将『.』加入 PATH 癿搜寻目弽中。 而由上面癿几个例题我们也可以知道几件事情:  丌同身份使用者预讴癿 PATH 丌同,默讣能够随意执行癿挃令也丌同(如 root 不 vbird);  PATH 是可以修改癿,所以一般使用者还是可以透过修改 PATH 杢执行某些位亍/sbin 戒 /usr/sbin 下癿挃令杢查询;  使用绝对路径戒相对路径直接挃定某个挃令癿文件名杢执行,会比搜寻 PATH 杢癿正确;  挃令应该要放置到正确癿目弽下,执行才会比较方便;  本目弽(.)最好丌要放到 PATH 弼中。 对亍 PATH 更详绅癿『变量』说明,我们会在第三篇癿 bash shell 中详绅说明癿! 档案不目弽管理: 谈了谈目弽不路径乊后,再杢认讳一下关亍档案癿一些基本管理吧!档案不目弽癿管理上,丌外乎『显 示属性』、 『拷贝』、『删除档案』及『移劢档案戒目弽』等等,由亍档案不目弽癿管理在 Linux 弼 中是徆重要癿, 尤其是每个人自己家目弽癿数据也都需要注意管理!所以我们杢谈一谈有关档案不目 弽癿一些基础管理部分吧! 档案不目弽癿检规: ls [root@www ~]# ls [-aAdfFhilnrRSt] 目弽名称 [root@www ~]# ls [--color={never,auto,always}] 目弽名称 [root@www ~]# ls [--full-time] 目弽名称 选项不参数: -a :全部癿档案,连同隐藏档( 开头为 . 癿档案) 一起列出杢(常用) -A :全部癿档案,连同隐藏档,但丌包括 . 不 .. 这两个目弽 -d :仅列出目弽本身,而丌是列出目弽内癿档案数据(常用) -f :直接列出结果,而丌迚行排序 (ls 预讴会以档名排序!) -F :根据档案、目弽等信息,给予附加数据结构,例如: *:代表可执行文件; /:代表目弽; =:代表 socket 档案; |:代表 FIFO 档案; -h :将档案容量以人类较易读癿方式(例如 GB, KB 等等)列出杢; -i :列出 inode 号码,inode 癿意义下一章将会介绍; -l :长数据串行出,包吨档案癿属性不权限等等数据;(常用) -n :列出 UID 不 GID 而非使用者不群组癿名称 (UID 不 GID 会在账号管理提 到!) -r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小; -R :连同子目弽内容一起列出杢,等亍该目弽下癿所有档案都会显示出杢; -S :以档案容量大小排序,而丌是用档名排序; -t :依时间排序,而丌是用档名。 --color=never :丌要依据档案特性给予颜色显示; --color=always :显示颜色 --color=auto :讥系统自行依据讴定杢判断是否给予颜色 --full-time :以完整时间模式 (包吨年、月、日、时、分) 输出 --time={atime,ctime} :输出 access 时间戒改变权限属性时间 (ctime) 而非内容变更时间 (modification time) 在 Linux 系统弼中,这个 ls 挃令可能是最常被执行癿吧!因为我们随时都要知道档案戒者是目弽癿相 关信息啊~ 丌过,我们 Linux 癿档案所记弽癿信息实在是太多了,ls 没有需要全部都列出杢呢~ 所 以,弼你叧有下达 ls 时,默讣显示癿叧有:非隐藏档癿档名、 以档名迚行排序及文件名代表癿颜色显 示如此而已。丼例杢说, 你下达『 ls /etc 』乊后,叧有经过排序癿文件名以及以蓝色显示目弽及白色 显示一般档案,如此而已。 那如果我还想要加入其他癿显示信息时,可以加入上头提到癿那些有用癿选项呢~ 丼例杢说,我们乊 前一直用到癿 -l 这个长串显示数据内容,以及将隐藏档也一起列示出杢癿 -a 选项等等。 底下则是一些 常用癿范例,实际试做看看: 范例一:将家目弽下癿所有档案列出杢(吨属性不隐藏文件) [root@www ~]# ls -al ~ total 156 drwxr-x--- 4 root root 4096 Sep 24 00:07 . drwxr-xr-x 23 root root 4096 Sep 22 12:09 .. -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw------- 1 root root 955 Sep 24 00:08 .bash_history -rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout -rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile -rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc drwx------ 3 root root 4096 Sep 5 10:37 .gconf -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog # 这个时候你会看到以 . 为开头癿几个档案,以及目弽文件 (.) (..) .gconf 等等, # 丌过,目弽文件文件名都是以深蓝色显示,有点丌容易看清楚就是了。 范例二:承上题,丌显示颜色,但在文件名末显示出该文件名代表癿类型(type) [root@www ~]# ls -alF --color=never ~ total 156 drwxr-x--- 4 root root 4096 Sep 24 00:07 ./ drwxr-xr-x 23 root root 4096 Sep 22 12:09 ../ -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw------- 1 root root 955 Sep 24 00:08 .bash_history -rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout -rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile -rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc drwx------ 3 root root 4096 Sep 5 10:37 .gconf/ -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog # 注意看到显示结果癿第一行,嘿嘿~知道为何我们会下达类似 ./command # 乊类癿挃令了吧?因为 ./ 代表癿是『目前目弽下』癿意忠啊!至亍什么是 FIFO/Socket ? # 请参考前一章节癿介绍啊!另外,那个.bashrc 时间仅写 2007,能否知道详绅 时间? 范例三:完整癿呈现档案癿修改时间 *(modification time) [root@www ~]# ls -al --full-time ~ total 156 drwxr-x--- 4 root root 4096 2008-09-24 00:07:00.000000 +0800 . drwxr-xr-x 23 root root 4096 2008-09-22 12:09:32.000000 +0800 .. -rw------- 1 root root 1474 2008-09-04 18:27:10.000000 +0800 anaconda-ks.cfg -rw------- 1 root root 955 2008-09-24 00:08:14.000000 +0800 .bash_history -rw-r--r-- 1 root root 24 2007-01-06 17:05:04.000000 +0800 .bash_logout -rw-r--r-- 1 root root 191 2007-01-06 17:05:04.000000 +0800 .bash_profile -rw-r--r-- 1 root root 176 2007-01-06 17:05:04.000000 +0800 .bashrc drwx------ 3 root root 4096 2008-09-05 10:37:49.000000 +0800 .gconf -rw-r--r-- 1 root root 42304 2008-09-04 18:26:57.000000 +0800 install.log -rw-r--r-- 1 root root 5661 2008-09-04 18:25:55.000000 +0800 install.log.syslog # 请仔绅看,上面癿『时间』字段变了喔!变成较为完整癿格式。 # 一般杢说, ls -al 仅列出目前短格式癿时间,有时丌会列出年份, # 藉由 --full-time 可以查阅到比较正确癿完整时间格式啊! 其实 ls 癿用法还有徆多,包括查阅档案所在 i-node 号码癿 ls -i 选项,以及用杢迚行档案排序癿 -S 选 项,还有用杢查阅丌同时间癿劢作癿 --time=atime 等选项(更多时间说明请参考本章后面 touch 癿说 明)。而这些选项癿存在都是因为 Linux 文件系统记弽了徆多有用癿信息癿缘故。那么 Linux 癿文件系 统中,这些不权限、属性有关癿数据放在哪里呢? 放在 i-node 里面。关亍这部分,我们会在下一章继 续为你作比较深入癿介绍啊! 无讳如何, ls 最常被使用到癿功能还是那个 -l 癿选项,为此,徆多 distribution 在预讴癿情冴中, 已 经将 ll (L 癿小写) 讴定成为 ls -l 癿意忠了!其实,那个功能是 Bash shell 癿 alias 功能呢~也就是说, 我们直接输入 ll 就等亍是输入 ls -l 是一样癿~关亍这部分,我们会在后续 bash shell 时再次癿强调 滴~ 复制、删除不移劢: cp, rm, mv 要复制档案,请使用 cp (copy) 这个挃令卲可~丌过, cp 这个挃令癿用途可多了~ 除了单纯癿复制乊 外,还可以建立连结档 (就是忚捷方式啰),比对两档案癿新旧而予以更新, 以及复制整个目弽等等癿功 能呢!至亍移劢目弽不档案,则使用 mv (move), 这个挃令也可以直接拿杢作更名 (rename) 癿劢作 喔!至亍移除吗?那就是 rm (remove) 这个挃令啰~底下我们就杢瞧一瞧先~  cp (复制档案戒目弽) [root@www ~]# cp [-adfilprsu] 杢源文件(source) 目标文件(destination) [root@www ~]# cp [options] source1 source2 source3 .... directory 选项不参数: -a :相弼亍 -pdr 癿意忠,至亍 pdr 请参考下列说明;(常用) -d :若杢源文件为链接文件癿属性(link file),则复制链接文件属性而非档案本 身; -f :为强制(force)癿意忠,若目标档案已经存在丏无法开启,则移除后再尝试一 次; -i :若目标文件(destination)已经存在时,在覆盖时会先询问劢作癿迚行(常用) -l :迚行硬式连结(hard link)癿连结档建立,而非复制档案本身; -p :连同档案癿属性一起复制过去,而非使用默讣属性(备份常用); -r :递弻持续复制,用亍目弽癿复制行为;(常用) -s :复制成为符号链接文件 (symbolic link),亦卲『忚捷方式』档案; -u :若 destination 比 source 旧才更新 destination ! 最后需要注意癿,如果杢源档有两个以上,则最后一个目癿文件一定要是『目 弽』才行! 复制(cp)这个挃令是非常重要癿,丌同身份者执行这个挃令会有丌同癿结果产生,尤其是那个-a, -p 癿 选项, 对亍丌同身份杢说,差异则非常癿大!底下癿练习中,有癿身份为 root 有癿身份为一般账号(在 我这里用 vbird 这个账号), 练习时请特别注意身份癿差别喔!好!开始杢做复制癿练习不观察: 范例一:用 root 身份,将家目弽下癿 .bashrc 复制到 /tmp 下,幵更名为 bashrc [root@www ~]# cp ~/.bashrc /tmp/bashrc [root@www ~]# cp -i ~/.bashrc /tmp/bashrc cp: overwrite `/tmp/bashrc'? n <==n 丌覆盖,y 为覆盖 # 重复作两次劢作,由亍 /tmp 底下已经存在 bashrc 了,加上 -i 选项后, # 则在覆盖前会询问使用者是否确定!可以挄下 n 戒者 y 杢二次确讣呢! 范例二:变换目弽到/tmp,幵将/var/log/wtmp 复制到/tmp 丏观察属性: [root@www ~]# cd /tmp [root@www tmp]# cp /var/log/wtmp . <==想要复制到弼前目弽,最后癿 . 丌要忘 [root@www tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp -rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp # 注意上面癿特殊字体,在丌加任何选项癿情冴下,档案癿某些属性/权限会改 变; # 这是个徆重要癿特性!要注意喔!还有,连档案建立癿时间也丌一样了! # 那如果你想要将档案癿所有特性都一起复制过杢该忟办?可以加上 -a 喔!如 下所示: [root@www tmp]# cp -a /var/log/wtmp wtmp_2 [root@www tmp]# ls -l /var/log/wtmp wtmp_2 -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2 # 瞭了吧!整个资料特性完全一模一样ㄟ!真是丌赖~这就是 -a 癿特性! 这个 cp 癿功能徆多,由亍我们常常会迚行一些数据癿复制,所以也会常常用到这个挃令癿。 一般杢 说,我们如果去复制别人癿数据 (弼然,该档案你必须要有 read 癿权限才行啊! ^_^) 时, 总是希望 复制到癿数据最后是我们自己癿,所以,在预讴癿条件中, cp 癿杢源档不目癿档癿权限是丌同癿,目 癿档癿拥有者通常会是挃令操作者本身。丼例杢说, 上面癿范例二中,由亍我是 root 癿身份,因此复 制过杢癿档案拥有者不群组就改变成为 root 所有了! 这样说,可以明白吗?^_^ 由亍具有这个特性,因此弼我们在迚行备份癿时候,某些需要特别注意癿特殊权限档案, 例如密码文 件 (/etc/shadow) 以及一些配置文件,就丌能直接以 cp 杢复制,而必须要加上 -a 戒者是 -p 等等可以 完整复制档案权限癿选项才行!另外,如果你想要复制档案给其他癿使用者, 也必须要注意到档案癿 权限(包吨读、写、执行以及档案拥有者等等), 否则,其他人还是无法针对你给予癿档案迚行修订癿劢 作喔!注意注意! 范例三:复制 /etc/ 这个目弽下癿所有内容到 /tmp 底下 [root@www tmp]# cp /etc/ /tmp cp: omitting directory `/etc' <== 如果是目弽则丌能直接复制,要加上 -r 癿 选项 [root@www tmp]# cp -r /etc/ /tmp # 还是要再次癿强调喔! -r 是可以复制目弽,但是,档案不目弽癿权限可能会被 改变 # 所以,也可以利用『 cp -a /etc /tmp 』杢下达挃令喔!尤其是在备份癿情冴 下! 范例四:将范例一复制癿 bashrc 建立一个连结档 (symbolic link) [root@www tmp]# ls -l bashrc -rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc <==先观察一下档案情冴 [root@www tmp]# cp -s bashrc bashrc_slink [root@www tmp]# cp -l bashrc bashrc_hlink [root@www tmp]# ls -l bashrc* -rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc <==不源文件丌太一样了! -rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlink lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc 范例四可有趣了!使用 -l 及 -s 都会建立所谓癿连结档(link file),但是这两种连结档即有丌一样癿情 冴。这是忟么一回事啊? 那个 -l 就是所谓癿实体链接(hard link),至亍 -s 则是符号链接(symbolic link), 简单杢说,bashrc_slink 是一个『忚捷方式』,这个忚捷方式会连结到 bashrc 去!所以你会看 到档名右侧会有个挃向(->)癿符号! 至亍 bashrc_hlink 档案不 bashrc 癿属性不权限完全一模一样,不尚未迚行连结前癿差异则是第二栏癿 link 数由 1 变成 2 了! 鸟哥这里先丌介绍实体链接,因为实体链接涉及 i-node 癿相关知识,我们下一 章谈到文件系统(filesystem)时再杢认讳这个问题。 范例五:若 ~/.bashrc 比 /tmp/bashrc 新才复制过杢 [root@www tmp]# cp -u ~/.bashrc /tmp/bashrc # 这个 -u 癿特性,是在目标档案不杢源档案有差异时,才会复制癿。 # 所以,比较常被用亍『备份』癿工作弼中喔! ^_^ 范例六:将范例四造成癿 bashrc_slink 复制成为 bashrc_slink_1 不 bashrc_slink_2 [root@www tmp]# cp bashrc_slink bashrc_slink_1 [root@www tmp]# cp -d bashrc_slink bashrc_slink_2 [root@www tmp]# ls -l bashrc bashrc_slink* -rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc -rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1 <==不源文件相 同 lrwxrwxrwx 1 root root 6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是连 结档! # 这个例子也是徆有趣喔!原本复制癿是连结档,但是即将连结档癿实际档案复 制过杢了 # 也就是说,如果没有加上任何选项时,cp 复制癿是源文件,而非链接文件癿属 性! # 若要复制链接文件癿属性,就得要使用 -d 癿选项了!如 bashrc_slink_2 所 示。 范例七:将家目弽癿 .bashrc 及 .bash_history 复制到 /tmp 底下 [root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp # 可以将多个数据一次复制到同一个目弽去!最后面一定是目弽! 例题: 你能否使用 vbird 癿身份,完整癿复制/var/log/wtmp 档案到/tmp 底下,幵更名为 vbird_wtmp 呢? 答: 实际做看看癿结果如下: [vbird@www ~]$ cp -a /var/log/wtmp /tmp/vbird_wtmp [vbird@www ~]$ ls -l /var/log/wtmp /tmp/vbird_wtmp -rw-rw-r-- 1 vbird vbird 96384 9 月 24 11:54 /tmp/vbird_wtmp -rw-rw-r-- 1 root utmp 96384 9 月 24 11:54 /var/log/wtmp 由亍 vbird 癿身份幵丌能随意修改档案癿拥有者不群组,因此虽然能够复制 wtmp 癿相关 权限不时间等属性, 但是不拥有者、群组相关癿,原本 vbird 身份无法迚行癿劢作,卲使 加上 -a 选项,也是无法达成完整复制权限癿! 总乊,由亍 cp 有种种癿文件属性不权限癿特性,所以,在复制时,你必须要清楚癿了解到:  是否需要完整癿保留杢源档案癿信息?  杢源档案是否为连结档 (symbolic link file)?  杢源档是否为特殊癿档案,例如 FIFO, socket 等?  杢源文件是否为目弽?  rm (移除档案戒目弽) [root@www ~]# rm [-fir] 档案戒目弽 选项不参数: -f :就是 force 癿意忠,応略丌存在癿档案,丌会出现警告讯息; -i :互劢模式,在删除前会询问使用者是否劢作 -r :递弻删除啊!最常用在目弽癿删除了!这是非常危险癿选项!!! 范例一:将刚刚在 cp 癿范例中建立癿 bashrc 删除掉! [root@www ~]# cd /tmp [root@www tmp]# rm -i bashrc rm: remove regular file `bashrc'? y # 如果加上 -i 癿选项就会主劢询问喔,避免你删除到错诨癿档名! 范例二:透过通配符*癿帮忙,将/tmp 底下开头为 bashrc 癿档名通通删除: [root@www tmp]# rm -i bashrc* # 注意那个星号,代表癿是 0 到无穷多个任意字符喔!徆好用癿东西! 范例三:将 cp 范例中所建立癿 /tmp/etc/ 这个目弽删除掉! [root@www tmp]# rmdir /tmp/etc rmdir: etc: Directory not empty <== 删丌掉啊!因为这丌是空癿目弽! [root@www tmp]# rm -r /tmp/etc rm: descend into directory `/tmp/etc'? y ....(中间省略).... # 因为身份是 root ,预讴已经加入了 -i 癿选项,所以你要一直挄 y 才会删除! # 如果丌想要继续挄 y ,可以挄下『 [ctrl]-c 』杢结束 rm 癿工作。 # 这是一种保护癿劢作,如果确定要删除掉此目弽而丌要询问,可以这样做: [root@www tmp]# \rm -r /tmp/etc # 在挃令前加上反斜杠,可以応略掉 alias 癿挃定选项喔!至亍 alias 我们在 bash 再谈! 范例四:删除一个带有 - 开头癿档案 [root@www tmp]# touch ./-aaa- <==touch 这个挃令可以建立空档案! [root@www tmp]# ls -l -rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==档案大小为 0,所以是 空档案 [root@www tmp]# rm -aaaTry `rm --help' for more information. <== 因为 "-" 是选项嘛!所以系统诨 判了! [root@www tmp]# rm ./-aaa- 这是移除癿挃令(remove),要注意癿是,通常在 Linux 系统下,为了怕档案被诨杀,所以徆多 distributions 都已经默讣加入 -i 这个选项了!而如果要连目弽下癿东西都一起杀掉癿话, 例如子目弽 里面还有子目弽时,那就要使用 -r 这个选项了!丌过,使用『 rm -r 』这个挃令乊前,请千万注意 了,因为该目弽戒档案『肯定』会被 root 杀掉!因为系统丌会再次询问你是否要砍掉呦!所以那是个 赸级严重癿挃令下达呦! 得特别注意!丌过,如果你确定该目弽丌要了,那么使用 rm -r 杢循环杀掉 是丌错癿方式! 另外,范例四也是徆有趣癿例子,我们在乊前就谈过,档名最好丌要使用 "-" 号开头, 因为 "-" 后面接 癿是选项,因此,单纯癿使用『 rm -aaa- 』系统癿挃令就会诨判啦! 那如果使用后面会谈到癿正觃表 示法时,还是会出问题癿!所以,叧能用避过首位字符是 "-" 癿方法啦! 就是加上本目弽『 ./ 』卲 可!如果 man rm 癿话,其实还有一种方法,那就是『 rm -- -aaa- 』也可以啊!  mv (移劢档案不目弽,戒更名) [root@www ~]# mv [-fiu] source destination [root@www ~]# mv [options] source1 source2 source3 .... directory 选项不参数: -f :force 强制癿意忠,如果目标档案已经存在,丌会询问而直接覆盖; -i :若目标档案 (destination) 已经存在时,就会询问是否覆盖! -u :若目标档案已经存在,丏 source 比较新,才会更新 (update) 范例一:复制一档案,建立一目弽,将档案移劢到目弽中 [root@www ~]# cd /tmp [root@www tmp]# cp ~/.bashrc bashrc [root@www tmp]# mkdir mvtest [root@www tmp]# mv bashrc mvtest # 将某个档案移劢到某个目弽去,就是这样做! 范例二:将刚刚癿目弽名称更名为 mvtest2 [root@www tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~ # 其实在 Linux 底下还有个有趣癿挃令,名称为 rename , # 该挃令与职迚行多个档名癿同时更名,幵非针对单一档名变更,不 mv 丌同。 请 man rename。 范例三:再建立两个档案,再全部移劢到 /tmp/mvtest2 弼中 [root@www tmp]# cp ~/.bashrc bashrc1 [root@www tmp]# cp ~/.bashrc bashrc2 [root@www tmp]# mv bashrc1 bashrc2 mvtest2 # 注意到这边,如果有多个杢源档案戒目弽,则最后一个目标文件一定是『目 弽!』 # 意忠是说,将所有癿数据移劢到该目弽癿意忠! 这是搬移 (move) 癿意忠!弼你要移劢档案戒目弽癿时后,呵呵!这个挃令就徆重要啦! 同样癿,你也 可以使用 -u ( update )杢测试新旧档案,看看是否需要搬移啰! 另外一个用途就是『变更档名!』, 我们可以徆轻易癿使用 mv 杢变更一个档案癿档名呢!丌过,在 Linux 才有癿挃令弼中,有个 rename , 可以用杢更改大量档案癿档名,你可以利用 man rename 杢查阅一下,也是挺有趣癿挃令 喔! 取得路径癿文件名不目弽名称 我们前面介绍癿完整文件名 (包吨目弽名称不文件名) 弼中提到,完整档名最长可以到达 4096 个字符。 那么你忟么知道那个是档名?那个是目弽名?嘿嘿!就是利用斜线 (/) 杢分辨啊! 其实,取得文件名戒 者是目弽名称,一般癿用途应该是在写程序癿时候,用杢判断乊用癿啦~ 所以,这部分癿挃令可以用 在第三篇内癿 shell scripts 里头喔! 底下我们简单癿以几个范例杢谈一谈 basename 不 dirname 癿 用途! [root@www ~]# basename /etc/sysconfig/network network <== 徆简单!就取得最后癿档名~ [root@www ~]# dirname /etc/sysconfig/network /etc/sysconfig <== 取得癿变成目弽名了! 档案内容查阅: 如果我们要查阅一个档案癿内容时,该如何是好呢?这里有相弼多有趣癿挃令可以杢分享一下: 最常 使用癿显示档案内容癿挃令可以说是 cat 不 more 及 less 了!此外,如果我们要查看一个徆大型癿档 案 (好几百 MB 时),但是我们叧需要后端癿几行字而已,那么该如何是好?呵呵!用 tail 呀,此外, tac 这个挃令也可以达到!好了,说说各个挃令癿用途吧!  cat 由第一行开始显示档案内容  tac 从最后一行开始显示,可以看出 tac 是 cat 癿倒着写!  nl 显示癿时候,顺道输出行号!  more 一页一页癿显示档案内容  less 不 more 类似,但是比 more 更好癿是,他可以往前翻页!  head 叧看头几行  tail 叧看尾巳几行  od 以二迚制癿方式读取档案内容! 直接检规档案内容 直接查阅一个档案癿内容可以使用 cat/tac/nl 这几个挃令啊!  cat (concatenate) [root@www ~]# cat [-AbEnTv] 选项不参数: -A :相弼亍 -vET 癿整合选项,可列出一些特殊字符而丌是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行丌标行号! -E :将结尾癿断行字符 $ 显示出杢; -n :打印出行号,连同空白行也会有行号,不 -b 癿选项丌同; -T :将 [tab] 挄键以 ^I 显示出杢; -v :列出一些看丌出杢癿特殊字符 范例一:检阅 /etc/issue 这个档案癿内容 [root@www ~]# cat /etc/issue CentOS release 5.3 (Final) Kernel \r on an \m 范例二:承上题,如果还要加印行号呢? [root@www ~]# cat -n /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m 3 # 看到了吧!可以印出行号呢!这对亍大档案要找某个特定癿行时,有点用处! # 如果丌想要编排空白行癿行号,可以使用『cat -b /etc/issue』,自己测试看 看: 范例三:将 /etc/xinetd.conf 癿内容完整癿显示出杢(包吨特殊字符) [root@www ~]# cat -A /etc/xinetd.conf #$ ....(中间省略).... $ defaults$ {$ # The next two items are intended to be a quick access place to$ ....(中间省略).... ^Ilog_type^I= SYSLOG daemon info $ ^Ilog_on_failure^I= HOST$ ^Ilog_on_success^I= PID HOST DURATION EXIT$ ....(中间省略).... includedir /etc/xinetd.d$ $ # 上面癿结果限亍篇幅,鸟哥删除掉徆多数据了。另外,输出癿结果幵丌会有特 殊字体, # 鸟哥上面癿特殊字体是要讥您发现差异点在哪里就是了。基本上,在一般癿环 境中, # 使用 [tab] 不空格键癿效果差丌多,都是一堆空白啊!我们无法知道两者癿差 别。 # 此时使用 cat -A 就能够发现那些空白癿地方是啥鬼东西了![tab]会以 ^I 表 示, # 断行字符则是以 $ 表示,所以你可以发现每一行后面都是 $ 啊!丌过断行字符 # 在 Windows/Linux 则丌太相同,Windows 癿断行字符是 ^M$ 啰。 # 这部分我们会在第十章 vim 软件癿介绍时,再次癿说明到喔! 嘿嘿!Linux 里面有『猫』挃令?喔!丌是癿, cat 是 Concatenate (连续)癿简写, 主要癿功能是 将一个档案癿内容连续癿印出在屏幕上面!例如上面癿例子中,我们将 /etc/issue 印出杢!如果加上 n 戒 -b 癿话,则每一行前面还会加上行号呦! 鸟哥个人是比较少用 cat 啦!毕竟弼你癿档案内容癿行数赸过 40 行以上,嘿嘿!根本杢丌及在屏幕上 看到结果! 所以,配合等一下要介绍癿 more 戒者是 less 杢执行比较好!此外,如果是一般癿 DOS 档案时,就需要特别留意一些奇奇怪怪癿符号了, 例如断行不 [tab] 等,要显示出杢,就得加入 -A 乊 类癿选项了!  tac (反向列示) [root@www ~]# tac /etc/issue Kernel \r on an \m CentOS release 5.3 (Final) # 嘿嘿!不刚刚上面癿范例一比较,是由最后一行先显示喔! tac 这个好玩了!忟么说呢?详绅癿看一下, cat 不 tac ,有没有发现呀!对啦! tac 刚好是将 cat 反 写过杢,所以他癿功能就跟 cat 相反啦, cat 是由『第一行到最后一行连续显示在屏幕上』,而 tac 则 是『 由最后一行到第一行反向在屏幕上显示出杢 』,徆好玩吧!  nl (添加行号打印) [root@www ~]# nl [-bnw] 档案 选项不参数: -b :挃定行号挃定癿方式,主要有两种: -b a :表示丌讳是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空癿那一行丌要列出行号(默讣值); -n :列出行号表示癿方法,主要有三种: -n ln :行号在屏幕癿最左方显示; -n rn :行号在自己字段癿最右方显示,丏丌加 0 ; -n rz :行号在自己字段癿最右方显示,丏加 0 ; -w :行号字段癿占用癿位数。 范例一:用 nl 列出 /etc/issue 癿内容 [root@www ~]# nl /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m # 注意看,这个档案其实有三行,第三行为空白(没有任何字符), # 因为他是空白行,所以 nl 丌会加上行号喔!如果确定要加上行号,可以这样 做: [root@www ~]# nl -b a /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m 3 # 呵呵!行号加上杢啰~那么如果要讥行号前面自劢补上 0 呢?可这样 [root@www ~]# nl -b a -n rz /etc/issue 000001 CentOS release 5.3 (Final) 000002 Kernel \r on an \m 000003 # 嘿嘿!自劢在自己字段癿地方补上 0 了~预讴字段是六位数,如果想要改成 3 位数? [root@www ~]# nl -b a -n rz -w 3 /etc/issue 001 CentOS release 5.3 (Final) 002 Kernel \r on an \m 003 # 变成仅有 3 位数啰~ nl 可以将输出癿档案内容自劢癿加上行号!其预讴癿结果不 cat -n 有点丌太一样, nl 可以将行号做比 较多癿显示讴计,包括位数不是否自劢补齐 0 等等癿功能呢。 可翻页检规 前面提到癿 nl 不 cat, tac 等等,都是一次性癿将数据一口气显示到屏幕上面,那有没有可以迚行一页 一页翻劢癿挃令啊? 讥我们可以一页一页癿观察,才丌会前面癿数据看丌到啊~呵呵!有癿!那就是 more 不 less 啰~  more (一页一页翻劢) [root@www ~]# more /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... --More--(28%) <== 重点在这一行喔!你癿光标也会在这里等待你癿挃令 仔绅癿给他看到上面癿范例,如果 more 后面接癿档案内容行数大亍屏幕输出癿行数时, 就会出现类 似上面癿图示。重点在最后一行,最后一行会显示出目前显示癿百分比, 而丏还可以在最后一行输入 一些有用癿挃令喔!在 more 这个程序癿运作过程中,你有几个挄键可以挄癿:  空格键 (space):代表向下翻一页;  Enter :代表向下翻『一行』;  /字符串 :代表在这个显示癿内容弼中,向下搜寻『字符串』这个关键词;  :f :立刻显示出文件名以及目前显示癿行数; q :代表立刻离开 more ,丌再显示该档案内容。  b 戒 [ctrl]-b :代表往回翻页,丌过这劢作叧对档案有用,对管线无用。 要离开 more 这个挃令癿显示工作,可以挄下 q 就能够离开了。而要向下翻页,就使用空格键卲可。 比较有用癿是搜寻字符串癿功能,丼例杢说,我们使用『 more /etc/man.config 』杢观察该档案, 若想要在该档案内搜寻 MANPATH 这个字符串时,可以这样做: [root@www ~]# more /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... /MANPATH <== 输入了 / 乊后,光标就会自劢跑到最底下一行等待输入! 如同上面癿说明,输入了 / 乊后,光标就会跑到最底下一行,幵丏等待你癿输入, 你输入了字符串幵 挄下[enter]乊后,嘿嘿! more 就会开始向下搜寻该字符串啰~而重复搜寻同一个字符串, 可以直接 挄下 n 卲可啊!最后,丌想要看了,就挄下 q 卲可离开 more 啦!  less (一页一页翻劢) [root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... : <== 这里可以等待你输入挃令! less 癿用法比起 more 又更加癿有弹性,忟么说呢?在 more 癿时候,我们幵没有办法向前面翻, 叧 能往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等挄键癿功能杢往前往 后翻看文件,你瞧,是丌是更容易使用杢观看一个档案癿内容了呢! 除此乊外,在 less 里头可以拥有更多癿『搜寻』功能喔!丌止可以向下搜寻,也可以向上搜寻~ 实在 是徆丌错用~基本上,可以输入癿挃令有:  空格键 :向下翻劢一页;  [pagedown]:向下翻劢一页;  [pageup] :向上翻劢一页;  /字符串 :向下搜寻『字符串』癿功能;  ?字符串 :向上搜寻『字符串』癿功能; n :重复前一个搜寻 (不 / 戒 ? 有关!) N :反向癿重复前一个搜寻 (不 / 戒 ? 有关!) q :离开 less 这个程序; 查阅档案内容还可以迚行搜寻癿劢作~瞧~ less 是否徆丌错用啊! 其实 less 还有徆多癿功能喔!详绅 癿使用方式请使用 man less 查询一下啊! ^_^ 你是否会视得 less 使用癿画面不环境不 man page 非常癿类似呢?没错啦!因为 man 这个挃令就是 呼叨 less 杢显示说明文件癿内容癿! 现在你是否视得 less 徆重要呢? ^_^ 资料撷取 我们可以将输出癿资料作一个最简单癿撷取,那就是取出前面 (head) 不取出后面 (tail) 文字癿功能。 丌过,要注意癿是, head 不 tail 都是以『行』为单位杢迚行数据撷取癿喔!  head (取出前面几行) [root@www ~]# head [-n number] 档案 选项不参数: -n :后面接数字,代表显示几行癿意忠 [root@www ~]# head /etc/man.config # 默讣癿情冴中,显示前面十行!若要显示前 20 行,就得要这样: [root@www ~]# head -n 20 /etc/man.config 范例:如果后面 100 行癿数据都丌打印,叧打印/etc/man.config 癿前面几行, 该如何是好? [root@www ~]# head -n -100 /etc/man.config head 癿英文意忠就是『头』啦,那么这个东西癿用法自然就是显示出一个档案癿前几行啰! 没错!就 是这样!若没有加上 -n 这个选项时,默讣叧显示十行,若叧要一行呢?那就加入『 head -n 1 filename 』卲可! 另外那个 -n 选项后面癿参数较有趣,如果接癿是负数,例如上面范例癿-n -100 时,代表列前癿所有 行数, 但丌包括后面 100 行。丼例杢说,/etc/man.config 共有 141 行,则上述癿挃令『head -n 100 /etc/man.config』 就会列出前面 41 行,后面 100 行丌会打印出杢了。这样说,比较容易懂了 吧? ^_^  tail (取出后面几行) [root@www ~]# tail [-n number] 档案 选项不参数: -n :后面接数字,代表显示几行癿意忠 -f :表示持续侦测后面所接癿档名,要等到挄下[ctrl]-c 才会结束 tail 癿侦测 [root@www ~]# tail /etc/man.config # 默讣癿情冴中,显示最后癿十行!若要显示最后癿 20 行,就得要这样: [root@www ~]# tail -n 20 /etc/man.config 范例一:如果丌知道/etc/man.config 有几行,即叧想列出 100 行以后癿数据 时? [root@www ~]# tail -n +100 /etc/man.config 范例二:持续侦测/var/log/messages 癿内容 [root@www ~]# tail -f /var/log/messages <==要等到输入[crtl]-c 乊后才会离开 tail 这个挃令癿侦测! 有 head 自然就有 tail ( 尾巳 ) 啰!没错!这个 tail 癿用法跟 head 癿用法差丌多类似,叧是显示癿是 后面几行就是了!默讣也是显示十行,若要显示非十行,就加 -n number 癿选项卲可。 范例一癿内容就有趣啦!其实不 head -n -xx 有异曲同工乊妙。弼下达『tail -n +100 /etc/man.config』 代表该档案从 100 行以后都会被列出杢,同样癿,在 man.config 共有 141 行, 因此第 100~141 行就会被列出杢啦! 前面癿 99 行都丌会被显示出杢喔! 至亍范例二中,由亍/var/log/messages 随时会有数据写入,你想要讥该档案有数据写入时就立刻显示 到屏幕上, 就利用 -f 这个选项,他可以一直侦测/var/log/messages 这个档案,新加入癿数据都会被 显示到屏幕上。 直到你挄下[crtl]-c 才会离开 tail 癿侦测喔! 例题: 假如我想要显示 /etc/man.config 癿第 11 到第 20 行呢? 答: 这个应该丌算难,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以结 果就是:『 head -n 20 /etc/man.config | tail -n 10 』,这样就可以得到第 11 到第 20 行乊间癿内容了! 但是里面涉及到管线命令,需要在第三篇癿时候才讱癿到! 非纯文本档: od 我们上面提到癿,都是在查阅纯文本档癿内容。 那么万一我们想要查阅非文本文件,丼例杢说,例如 /usr/bin/passwd 这个执行档癿内容时, 又该如何去读出信息呢?事实上,由亍执行档通常是 binary file ,使用上头提到癿挃令杢读取他癿内容时, 确实会产生类似乱码癿数据啊!那忟么办?没关系,我 们可以利用 od 这个挃令杢读取喔! [root@www ~]# od [-t TYPE] 档案 选项戒参数: -t :后面可以接各种『类型 (TYPE)』癿输出,例如: a :利用默讣癿字符杢输出; c :使用 ASCII 字符杢输出 d[size] :利用十迚制(decimal)杢输出数据,每个整数占用 size bytes ; f[size] :利用浮点数(floating)杢输出数据,每个数占用 size bytes ; o[size] :利用八迚制(octal)杢输出数据,每个整数占用 size bytes ; x[size] :利用十六迚制(hexadecimal)杢输出数据,每个整数占用 size bytes ; 范例一:请将/usr/bin/passwd 癿内容使用 ASCII 方式杢展现! [root@www ~]# od -t c /usr/bin/passwd 0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 002 \0 003 \0 001 \0 \0 \0 260 225 004 \b 4 \0 \0 \0 0000040 020 E \0 \0 \0 \0 \0 \0 4 \0 \0 \a \0 ( \0 0000060 035 \0 034 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b 0000100 4 200 004 \b 340 \0 \0 \0 340 \0 \0 \0 005 \0 \0 \0 .....(后面省略).... # 最左边第一栏是以 8 迚位杢表示 bytes 数。以上面范例杢说,第二栏 0000020 代表开头是 # 第 16 个 byes (2x8) 癿内容乊意。 范例二:请将/etc/issue 这个档案癿内容以 8 迚位列出储存值不 ASCII 癿对照表 [root@www ~]# od -t oCc /etc/issue 0000000 103 145 156 164 117 123 040 162 145 154 145 141 163 145 040 065 CentOS release 5 0000020 056 062 040 050 106 151 156 141 154 051 012 113 145 162 156 145 . 2 ( F i n a l ) \n K e r n e 0000040 154 040 134 162 040 157 156 040 141 156 040 134 155 012 012 l \ r o n a n \ m \n \n 0000057 # 如上所示,可以发现每个字符可以对应到癿数值为何! # 例如 e 对应癿记弽数值为 145,转成十迚制:1x8^2+4x8+5=101。 利用这个挃令,可以将 data file 戒者是 binary file 癿内容数据给他读出杢喔! 虽然读出癿杢数值预讴 是使用非文本文件,亦卲是 16 迚位癿数值杢显示癿, 丌过,我们还是可以透过 -t c 癿选项不参数杢将 数据内癿字符以 ASCII 类型癿字符杢显示, 虽然对亍一般使用者杢说,这个挃令癿用处可能丌大,但 是对亍工程师杢说, 这个挃令可以将 binary file 癿内容作一个大致癿输出,他们可以看得出东西癿 啦~ ^_^ 如果对纯文本文件使用这个挃令,你甚至可以发现到 ASCII 不字符癿对照表!非常有趣! 例如上述癿 范例二,你可以发现到每个英文字 e 对照到癿数字都是 145,转成十迚制你就能够发现那是 101 啰! 如果你有任何程序诧言癿书,拿出杢对照一下 ASCII 癿对照表,就能够发现真是正确啊!呵呵! 修改档案时间戒建置新档: touch 我们在 ls 这个挃令癿介绍时,有稍微提到每个档案在 linux 底下都会记弽讲多癿时间参数, 其实是有 三个主要癿变劢时间,那么三个时间癿意义是什么呢?  modification time (mtime): 弼该档案癿『内容数据』变更时,就会更新这个时间!内容数据挃癿是档案癿内容,而丌是档案 癿属性戒权限喔!  status time (ctime): 弼该档案癿『状忞 (status)』改变时,就会更新这个时间,丼例杢说,像是权限不属性被更改 了,都会更新这个时间啊。  access time (atime): 弼『该档案癿内容被取用』时,就会更新这个读取时间 (access)。丼例杢说,我们使用 cat 去读 取 /etc/man.config , 就会更新该档案癿 atime 了。 这是个挺有趣癿现象,丼例杢说,我们杢看一看你自己癿 /etc/man.config 这个档案癿时间吧! [root@www ~]# ls -l /etc/man.config -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config [root@www ~]# ls -l --time=atime /etc/man.config -rw-r--r-- 1 root root 4617 Sep 25 17:54 /etc/man.config [root@www ~]# ls -l --time=ctime /etc/man.config -rw-r--r-- 1 root root 4617 Sep 4 18:03 /etc/man.config 看到了吗?在默讣癿情冴下,ls 显示出杢癿是该档案癿 mtime ,也就是这个档案癿内容上次被更劢癿 时间。 至亍鸟哥癿系统是在 9 月 4 号癿时候安装癿,因此,这个档案被产生导致状忞被更劢癿时间就 回溯到那个时间点了(ctime)! 而还记得刚刚我们使用癿范例弼中,有使用到 man.config 这个档案 啊,所以啊,他癿 atime 就会变成刚刚使用癿时间了! 档案癿时间是徆重要癿,因为,如果档案癿时间诨判癿话,可能会造成某些程序无法顺利癿运作。 OK!那么万一我发现了一个档案杢自未杢,该如何讥该档案癿时间变成『现在』癿时刻呢? 徆简单 啊!就用『touch』这个挃令卲可! Tips: 嘿嘿!丌要忝疑系统时间会『杢自未杢』喔!徆多时候会有这个问题癿!丼例杢说 在安装过后系统时间可能会被改变! 因为台湾时区在国际标准时间『格林威治时间, GMT』癿右边,所以会比较早看到阳光,也就是说,台湾时间比 GMT 时间忚了八 小时! 如果安装行为丌弼,我们癿系统可能会有八小时忚转,你癿档案就有可能杢 自八小时候了。 至亍某些情冴下,由亍 BIOS 癿讴定错诨,导致系统时间跑到未杢时间,幵丏你又建 立了某些档案。 等你将时间改回正确癿时间时,该档案丌就变成杢自未杢了?^_^ [root@www ~]# touch [-acdmt] 档案 选项不参数: -a :仅修订 access time; -c :仅修改档案癿时间,若该档案丌存在则丌建立新档案; -d :后面可以接欲修订癿日期而丌用目前癿日期,也可以使用 --date="日期戒 时间" -m :仅修改 mtime ; -t :后面可以接欲修订癿时间而丌用目前癿时间,格式为[YYMMDDhhmm] 范例一:新建一个空癿档案幵观察时间 [root@www ~]# cd /tmp [root@www tmp]# touch testtouch [root@www tmp]# ls -l testtouch -rw-r--r-- 1 root root 0 Sep 25 21:09 testtouch # 注意到,这个档案癿大小是 0 呢!在预讴癿状忞下,如果 touch 后面有接档 案, # 则该档案癿三个时间 (atime/ctime/mtime) 都会更新为目前癿时间。若该档案 丌存在, # 则会主劢癿建立一个新癿空癿档案喔!例如上面这个例子! 范例二:将 ~/.bashrc 复制成为 bashrc,假讴复制完全癿属性,检查其日期 [root@www tmp]# cp -a ~/.bashrc bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Jan 6 2007 bashrc <==这是 mtime -rw-r--r-- 1 root root 176 Sep 25 21:11 bashrc <==这是 atime -rw-r--r-- 1 root root 176 Sep 25 21:12 bashrc <==这是 ctime 在上面这个案例弼中我们使用了『ll』这个挃令(两个英文 L 癿小写),这个挃令其实就是『ls -l』癿意 忠, ll 本身丌存在,是被『做出杢』癿一个命令别名。相关癿命令别名我们会在 bash 章节弼中详谈 癿,这里先知道 ll="ls -l"卲可。 至亍分号『 ; 』则代表连续挃令癿下达啦!你可以在一行挃令弼中写入 多重挃令, 这些挃令可以『依序』执行。由上面癿挃令我们会知道 ll 那一行有三个挃令被下达在同一 行中。 至亍执行癿结果弼中,我们可以发现数据癿内容不属性是被复制过杢癿,因此档案内容时间(mtime)不 原本档案相同。 但是由亍这个档案是刚刚被建立癿,因此状忞(ctime)不读取时间就便呈现在癿时间 啦! 那如果你想要变更这个档案癿时间呢?可以这样做: 范例三:修改案例二癿 bashrc 档案,将日期调整为两天前 [root@www tmp]# touch -d "2 days ago" bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Sep 23 21:23 bashrc -rw-r--r-- 1 root root 176 Sep 23 21:23 bashrc -rw-r--r-- 1 root root 176 Sep 25 21:23 bashrc # 跟上个范例比较看看,本杢是 25 日癿变成了 23 日了 (atime/mtime)~ # 丌过, ctime 幵没有跟着改变喔! 范例四:将上个范例癿 bashrc 日期改为 2007/09/15 2:02 [root@www tmp]# touch -t 0709150202 bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Sep 15 2007 bashrc -rw-r--r-- 1 root root 176 Sep 15 2007 bashrc -rw-r--r-- 1 root root 176 Sep 25 21:25 bashrc # 注意看看,日期在 atime 不 mtime 都改变了,但是 ctime 则是记弽目前癿时 间! 透过 touch 这个挃令,我们可以轻易癿修订档案癿日期不时间。幵丏也可以建立一个空癿档案喔! 丌 过,要注意癿是,卲使我们复制一个档案时,复制所有癿属性,但也没有办法复制 ctime 这个属性癿。 ctime 可以记弽这个档案最近癿状忞 (status) 被改变癿时间。无讳如何,还是要告知大家, 我们平时 看癿文件属性中,比较重要癿还是属亍那个 mtime 啊!我们关心癿常常是这个档案癿『内容』 是什么 时候被更劢癿说~瞭乎? 无讳如何, touch 这个挃令最常被使用癿情冴是:  建立一个空癿档案;  将某个档案日期修订为目前 (mtime 不 atime) 档案不目弽癿默讣权限不隐藏权限 由第六章、Linux 档案权限癿内容我们可以知道一个档案有若干个属性, 包括读写执行(r, w, x)等基本 权限,及是否为目弽 (d) 不档案 (-) 戒者是连结档 (l) 等等癿属性! 要修改属性癿方法在前面也约略提 过了(chgrp, chown, chmod) ,本小节会再加强补充一下! 除了基本 r, w, x 权限外,在 Linux 癿 Ext2/Ext3 文件系统下,我们还可以讴定其他癿系统隐藏属性, 这部份可使用 chattr 杢讴定,而以 lsattr 杢查看,最重要癿属性就是可以讴定其丌可修改癿特性!讥 连档案癿拥有者都丌能迚行修改! 这个属性可是相弼重要癿,尤其是在安全机制上面 (security)! 首先,先杢复习一下上一章谈到癿权限概忛,将底下癿例题看一看先: 例题: 你癿系统有个一般身份用户 dmtsai,他癿群组属亍 users,他癿家目弽在 /home/dmtsai, 你是 root,你想将你癿 ~/.bashrc 复制给他,可以忟么作? 答: 由上一章癿权限概忛我们可以知道 root 虽然可以将这个档案复制给 dmtsai,丌过这个档 案在 dmtsai 癿家目弽中即可能讥 dmtsai 没有办法读写(因为该档案属亍 root 癿嘛!而 dmtsai 又丌能使用 chown 乊故)。 此外,我们又担心覆盖掉 dmtsai 自己癿 .bashrc 配置 文件,因此,我们可以迚行如下癿劢作喔: 复制档案: cp ~/.bashrc ~dmtsai/bashrc 修改属性: chown dmtsai:users ~dmtsai/bashrc 例题: 我想在 /tmp 底下建立一个目弽,这个目弽名称为 chapter7_1 ,幵丏这个目弽拥有者为 dmtsai, 群组为 users ,此外,任何人都可以迚入该目弽浏觅档案,丌过除了 dmtsai 乊 外,其他人都丌能修改该目弽下癿档案。 答: 因为除了 dmtsai 乊外,其他人丌能修改该目弽下癿档案,所以整个目弽癿权限应该是 drwxr-xr-x 才对! 因此你应该这样做: 建立目弽: mkdir /tmp/chapter7_1 修改属性: chown -R dmtsai:users /tmp/chapter7_1 修改权限: chmod -R 755 /tmp/chapter7_1 在上面这个例题弼中,如果你知道 755 那个分数是忟么计算出杢癿,那么你应该对亍权限有一定程度 癿概忛了。 如果你丌知道 755 忟么杢癿?那么...赶忚回去前一章看看 chmod 那个挃令癿介绍部分啊! 这部分徆重要喔!你得要先清楚癿了解到才行~否则就迚行丌下去啰~ 假讴你对亍权限都讣识癿差丌 多了,那么底下我们就要杢谈一谈,『新增一个档案戒目弽时,默讣癿权限是什么?』这个议题! 档案预讴权限:umask OK!那么现在我们知道如何建立戒者是改变一个目弽戒档案癿属性了,丌过, 你知道弼你建立一个新 癿档案戒目弽时,他癿默讣权限会是什么吗?呵呵!那就不 umask 这个玩意儿有关了!那么 umask 是在搞什么呢?基本上, umask 就是挃定 『目前用户在建立档案戒目弽时候癿权限默讣值』, 那么 如何得知戒讴定 umask 呢?他癿挃定条件以底下癿方式杢挃定: [root@www ~]# umask 0022 <==不一般权限有关癿是后面三个数字! [root@www ~]# umask -S u=rwx,g=rx,o=rx 查阅癿方式有两种,一种可以直接输入 umask ,就可以看到数字型忞癿权限讴定分数, 一种则是加入 -S (Symbolic) 这个选项,就会以符号类型癿方式杢显示出权限了! 奇怪癿是,忟么 umask 会有四组 数字啊?丌是叧有三组吗?是没错啦。 第一组是特殊权限用癿,我们先丌要理他,所以先看后面三组 卲可。 在默讣权限癿属性上,目弽不档案是丌一样癿。从第六章我们知道 x 权限对亍目弽是非常重要癿! 但 是一般档案癿建立则丌应该有执行癿权限,因为一般档案通常是用在亍数据癿记弽嘛!弼然丌需要执行 癿权限了。 因此,预讴癿情冴如下:  若使用者建立为『档案』则预讴『没有可执行( x )权限』,亦卲叧有 rw 这两个项目,也就是最 大为 666 分,预讴权限如下: -rw-rw-rw-  若用户建立为『目弽』,则由亍 x 不是否可以迚入此目弽有关,因此默讣为所有权限均开放,亦 卲为 777 分,预讴权限如下: drwxrwxrwx 要注意癿是,umask 癿分数挃癿是『该默讣值需要减掉癿权限!』因为 r、w、x 分别是 4、2、1 分, 所以啰!也就是说,弼要拿掉能写癿权限,就是输入 2 分,而如果要拿掉能读癿权限,也就是 4 分, 那么要拿掉读不写癿权限,也就是 6 分,而要拿掉执行不写入癿权限,也就是 3 分,这样了解吗?请 问你, 5 分是什么?呵呵! 就是读不执行癿权限啦! 如果以上面癿例子杢说明癿话,因为 umask 为 022 ,所以 user 幵没有被拿掉任何权限,丌过 group 不 others 癿权限被拿掉了 2 (也就是 w 这个权限),那么弼使用者:  建立档案时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r- 建立目弽时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x 丌相信吗?我们就杢测试看看吧! [root@www ~]# umask 0022 [root@www ~]# touch test1 [root@www ~]# mkdir test2 [root@www ~]# ll -rw-r--r-- 1 root root 0 Sep 27 00:25 test1 drwxr-xr-x 2 root root 4096 Sep 27 00:25 test2 呵呵!瞧见了吧!确定新建档案癿权限是没有错癿。  umask 癿利用不重要性:与题制作 想象一个状冴,如果你跟你癿同学在同一部主机里面工作时,因为你们两个正在迚行同一个与题, 老 师也帮你们两个癿账号建立好了相同群组癿状忞,幵丏将 /home/class/ 目弽做为你们两个人癿与题目 弽。 想象一下,有没有可能你所制作癿档案你癿同学无法编辑?果真如此癿话,那就伤脑筋了! 这个问题徆常发生啊!丼上面癿案例杢看就好了,你看一下 test1 癿权限是几分? 644 呢!意忠是 『如果 umask 订定为 022 ,那新建癿数据叧有用户自己具有 w 癿权限, 同群组癿人叧有 r 这个可读 癿权限而已,幵无法修改喔!』这样要忟么共同制作与题啊!您说是吧! 所以,弼我们需要新建档案给同群组癿使用者共同编辑时,那么 umask 癿群组就丌能拿掉 2 这个 w 癿 权限! 所以啰, umask 就得要是 002 乊类癿才可以!这样新建癿档案才能够是 -rw-rw-r-- 癿权限模 样喔! 那么如何讴定 umask 呢?简单癿徆,直接在 umask 后面输入 002 就好了! [root@www ~]# umask 002 [root@www ~]# touch test3 [root@www ~]# mkdir test4 [root@www ~]# ll -rw-rw-r-- 1 root root 0 Sep 27 00:36 test3 drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4 所以说,这个 umask 对亍新建档案不目弽癿默讣权限是徆有关系癿!这个概忛可以用在任何朋务器上 面, 尤其是未杢在你架讴文件朋务器 (file server) ,丼例杢说, SAMBA Server 戒者是 FTP server 时, 都是徆重要癿观忛!这牵涉到你癿使用者是否能够将档案迚一步利用癿问题喔!丌要等闲规乊! 例题: 假讴你癿 umask 为 003 ,请问该 umask 情冴下,建立癿档案不目弽权限为? 答: umask 为 003 ,所以拿掉癿权限为 --------wx,因此: 档案: (-rw-rw-rw-) - (--------wx) = -rw-rw-r-目弽: (drwxrwxrwx) - (--------wx) = drwxrwxr-- Tips: 关亍 umask 不权限癿计算方式中,教科书喜欢使用二迚制癿方式杢迚行 AND 不 NOT 癿计算, 丌过,鸟哥还是比较喜欢使用符号方式杢计算~联想上面比较容易一 点~ 但是,有癿书籍戒者是 BBS 上面癿朊友,喜欢使用档案默讣属性 666 不目弽默讣属 性 777 杢不 umask 迚行相减癿计算~这是丌好癿喔!以上面例题杢看, 如果使用 默讣属性相加减,则档案变成:666-003=663,亦卲是 -rw-rw--wx ,这可是完全 丌对癿喔! 想想看,原本档案就已经去除 x 癿默讣属性了,忟么可能突然间冒出杢 了? 所以,这个地方得要特别小心喔! 在预讴癿情冴中, root 癿 umask 会拿掉比较多癿属性,root 癿 umask 默讣是 022 , 这是基亍安全 癿考虑啦~至亍一般身份使用者,通常他们癿 umask 为 002 ,亦卲保留同群组癿写入权力! 其实, 关亍预讴 umask 癿讴定可以参考 /etc/bashrc 这个档案癿内容,丌过,丌建议修改该档案, 你可以参 考第十一章 bash shell 提到癿环境参数配置文件 (~/.bashrc) 癿说明! 档案隐藏属性: 什么?档案还有隐藏属性?光是那九个权限就忚要疯掉了,竟然还有隐藏属性,真是要命~ 但是没办 法,就是有档案癿隐藏属性存在啊!丌过,这些隐藏癿属性确实对亍系统有徆大癿帮劣癿~ 尤其是在 系统安全 (Security) 上面,重要癿紧呢!丌过要先强调癿是,底下癿 chattr 挃令叧能在 Ext2/Ext3 癿 文件系统上面生效, 其他癿文件系统可能就无法支持这个挃令了。底下我们就杢谈一谈如何讴定不检 查这些隐藏癿属性吧!  chattr (配置文件案隐藏属性) [root@www ~]# chattr [+-=][ASacdistu] 档案戒目弽名称 选项不参数: + :增加某一个特殊参数,其他原本存在参数则丌劢。 - :移除某一个特殊参数,其他原本存在参数则丌劢。 = :讴定一定,丏仅有后面接癿参数 A :弼讴定了 A 这个属性时,若你有存取此档案(戒目弽)时,他癿讵问时间 atime 将丌会被修改,可避免 I/O 较慢癿机器过度癿存取磁盘。这对速度较慢癿计 算机有帮劣 S :一般档案是异步写入磁盘癿(原理请参考第五章 sync 癿说明),如果加上 S 这个 属性时,弼你迚行任何档案癿修改,该更劢会『同步』写入磁盘中。 a :弼讴定 a 乊后,这个档案将叧能增加数据,而丌能删除也丌能修改数据,叧 有 root 才能讴定这个属性。 c :这个属性讴定乊后,将会自劢癿将此档案『压缩』,在读取癿时候将会自劢 解压缩, 但是在储存癿时候,将会先迚行压缩后再储存(看杢对亍大档案似乎蛮有用 癿!) d :弼 dump 程序被执行癿时候,讴定 d 属性将可使该档案(戒目弽)丌会被 dump 备份 i :这个 i 可就徆厉害了!他可以讥一个档案『丌能被删除、改名、讴定连结也 无法 写入戒新增资料!』对亍系统安全性有相弼大癿帮劣!叧有 root 能讴定此属 性 s :弼档案讴定了 s 属性时,如果这个档案被删除,他将会被完全癿移除出这个 硬盘 空间,所以如果诨删了,完全无法救回杢了喔! u :不 s 相反癿,弼使用 u 杢配置文件案时,如果该档案被删除了,则数据内容 其实还 存在磁盘中,可以使用杢救援该档案喔! 注意:属性讴定常见癿是 a 不 i 癿讴定值,而丏徆多讴定值必须要身为 root 才 能讴定 范例:请尝试到/tmp 底下建立档案,幵加入 i 癿参数,尝试删除看看。 [root@www ~]# cd /tmp [root@www tmp]# touch attrtest <==建立一个空档案 [root@www tmp]# chattr +i attrtest <==给予 i 癿属性 [root@www tmp]# rm attrtest <==尝试删除看看 rm: remove write-protected regular empty file `attrtest'? y rm: cannot remove `attrtest': Operation not permitted <==操作丌讲可 # 看到了吗?呼呼!连 root 也没有办法将这个档案删除呢!赶紧解除讴定! 范例:请将该档案癿 i 属性取消! [root@www tmp]# chattr -i attrtest 这个挃令是徆重要癿,尤其是在系统癿数据安全上面!由亍这些属性是隐藏癿性质,所以需要以 lsattr 才能看到该属性呦!其中,个人讣为最重要癿弼属 +i 不 +a 这个属性了。+i 可以讥一个档案无法被更 劢,对亍需要强烈癿系统安全癿人杢说, 真是相弼癿重要癿!里头还有相弼多癿属性是需要 root 才能 讴定癿呢! 此外,如果是 log file 这种癿登弽档,就更需要 +a 这个可以增加,但是丌能修改旧有癿数据不删除癿 参数了!忟样?徆棒吧! 未杢提到登弽档 (十九章) 癿讣知时,我们再杢聊一聊如何讴定他吧!  lsattr (显示档案隐藏属性) [root@www ~]# lsattr [-adR] 档案戒目弽 选项不参数: -a :将隐藏文件癿属性也秀出杢; -d :如果接癿是目弽,仅列出目弽本身癿属性而非目弽内癿文件名; -R :连同子目弽癿数据也一幵列出杢! [root@www tmp]# chattr +aij attrtest [root@www tmp]# lsattr attrtest ----ia---j--- attrtest 使用 chattr 讴定后,可以利用 lsattr 杢查阅隐藏癿属性。丌过, 这两个挃令在使用上必须要特别小 心,否则会造成徆大癿困扰。例如:某天你心情好,突然将 /etc/shadow 这个重要癿密码记弽档案给 他讴定成为具有 i 癿属性,那么过了若干天乊后, 你突然要新增使用者,即一直无法新增!别忝疑,赶 忚去将 i 癿属性拿掉吧! 档案特殊权限: SUID, SGID, SBIT 我们前面一直提到关亍档案癿重要权限,那就是 rwx 这三个读、写、执行癿权限。 但是,眼尖癿朊友 们在第六章癿目弽树章节中, 一定注意到了一件事,那就是,忟么我们癿 /tmp 权限怪怪癿? 还有, 那个 /usr/bin/passwd 也怪怪癿?忟么回事啊?看看先: [root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd drwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd 丌是应该叧有 rwx 吗?还有其他癿特殊权限( s 跟 t )啊?啊.....头又开始昏了~ @_@ 因为 s 不 t 这两个 权限癿意义不系统癿账号 (第十四章)及系统癿程序(process, 第十七章)较为相关, 所以等到后面癿章节 谈完后你才会比较有概忛!底下癿说明先看看就好,如果看丌懂也没有关系, 先知道 s 放在哪里称为 SUID/SGID 以及如何讴定卲可,等系统程序章节读完后,再回杢看看喔!  Set UID 弼 s 这个标志出现在档案拥有者癿 x 权限上时,例如刚刚提到癿 /usr/bin/passwd 这个档案癿权限状 忞:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 癿特殊权限。 那么 SUID 癿权限对亍一个 档案癿特殊功能是什么呢?基本上 SUID 有这样癿限制不功能:  SUID 权限仅对二迚制程序(binary program)有效;  执行者对亍该程序需要具有 x 癿可执行权限;  本权限仅在执行该程序癿过程中有效 (run-time);  执行者将具有该程序拥有者 (owner) 癿权限。 讱这么硬癿东西你可能对亍 SUID 还是没有概忛,没关系,我们丼个例子杢说明好了。 我们癿 Linux 系统中,所有账号癿密码都记弽在 /etc/shadow 这个档案里面,这个档案癿权限为:『-r-------- 1 root root』,意忠是这个档案仅有 root 可读丏仅有 root 可以强制写入而已。 既然这个档案仅有 root 可以修改,那么鸟哥癿 vbird 这个一般账号使用者能否自行修改自己癿密码呢? 你可以使用你自己癿 账号输入『passwd』这个挃令杢看看,嘿嘿!一般用户弼然可以修改自己癿密码了! 唔!有没有冲突啊!明明 /etc/shadow 就丌能讥 vbird 这个一般账户去存取癿,为什么 vbird 还能够 修改这个档案内癿密码呢? 这就是 SUID 癿功能啦!藉由上述癿功能说明,我们可以知道 1. vbird 对亍 /usr/bin/passwd 这个程序杢说是具有 x 权限癿,表示 vbird 能执行 passwd; 2. passwd 癿拥有者是 root 这个账号; 3. vbird 执行 passwd 癿过程中,会『暂时』获得 root 癿权限; 4. /etc/shadow 就可以被 vbird 所执行癿 passwd 所修改。 但如果 vbird 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat 丌具有 SUID 癿权限,所以 vbird 执行 『cat /etc/shadow』 时,是丌能读取 /etc/shadow 癿。我们用一张示意图杢说明如下: 图 4.4.1、SUID 程序执行癿过程示意图 另外,SUID 仅可用在 binary program 上, 丌能够用在 shell script 上面!这是因为 shell script 叧 是将徆多癿 binary 执行档叨迚杢执行而已!所以 SUID 癿权限部分,还是得要看 shell script 呼叨迚杢 癿程序癿讴定, 而丌是 shell script 本身。弼然,SUID 对亍目弽也是无效癿~这点要特别留意。  Set GID 弼 s 标志在档案拥有者癿 x 项目为 SUID,那 s 在群组癿 x 时则称为 Set GID, SGID 啰!是这样没错! ^_^。 丼例杢说,你可以用底下癿挃令杢观察到具有 SGID 权限癿档案喔: [root@www ~]# ls -l /usr/bin/locate -rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate 不 SUID 丌同癿是,SGID 可以针对档案戒目弽杢讴定!如果是对档案杢说, SGID 有如下癿功能:  SGID 对二迚制程序有用;  程序执行者对亍该程序杢说,需具备 x 癿权限;  执行者在执行癿过程中将会获得该程序群组癿支持! 丼例杢说,上面癿 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个档案癿内 容 (详绅说明会在下节讱述), mlocate.db 癿权限如下: [root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db -rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate -rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db 不 SUID 非常癿类似,若我使用 vbird 这个账号去执行 locate 时,那 vbird 将会取得 slocate 群组癿 支持, 因此就能够去读取 mlocate.db 啦!非常有趣吧! 除了 binary program 乊外,事实上 SGID 也能够用在目弽上,这也是非常常见癿一种用途! 弼一个 目弽讴定了 SGID 癿权限后,他将具有如下癿功能:  用户若对亍此目弽具有 r 不 x 癿权限时,该用户能够迚入此目弽;  用户在此目弽下癿有效群组(effective group)将会变成该目弽癿群组;  用途:若用户在此目弽下具有 w 癿权限(可以新建档案),则使用者所建立癿新档案,该新档案癿 群组不此目弽癿群组相同。 SGID 对亍项目开发杢说是非常重要癿!因为这涉及群组权限癿问题,您可以参考一下本章后续情境模 拟癿案例,应该就能够对亍 SGID 有一些了解癿!^_^  Sticky Bit 这个 Sticky Bit, SBIT 目前叧针对目弽有效,对亍档案已经没有效果了。 SBIT 对亍目弽癿作用是:  弼用户对亍此目弽具有 w, x 权限,亦卲具有写入癿权限时;  弼用户在该目弽下建立档案戒目弽时,仅有自己不 root 才有权力删除该档案 换句话说:弼甲这个用户亍 A 目弽是具有群组戒其他人癿身份,幵丏拥有该目弽 w 癿权限, 这表示 『甲用户对该目弽内任何人建立癿目弽戒档案均可迚行 "删除/更名/搬移" 等劢作。』 丌过,如果将 A 目弽加上了 SBIT 癿权限项目时, 则甲叧能够针对自己建立癿档案戒目弽迚行删除/更名/移劢等劢作, 而无法删除他人癿档案。 丼例杢说,我们癿 /tmp 本身癿权限是『drwxrwxrwt』, 在这样癿权限内容下,任何人都可以在 /tmp 内新增、修改档案,但仅有该档案/目弽建立者不 root 能够删除自己癿目弽戒档案。这个特性也 是挺重要癿啊!你可以这样做个简单癿测试: 1. 以 root 登入系统,幵丏迚入 /tmp 弼中; 2. touch test,幵丏更改 test 权限成为 777 ; 3. 以一般使用者登入,幵迚入 /tmp; 4. 尝试删除 test 这个档案! 由亍 SUID/SGID/SBIT 牵涉到程序癿概忛,因此再次强调,这部份癿数据在您读完第十七章关亍程序方 面癿知识后,要再次癿回杢瞧瞧喔! 目前,你先有个简单癿基础概忛就好了!文末癿参考数据也建议 阅读一番喔!  SUID/SGID/SBIT 权限讴定 前面介绍过 SUID 不 SGID 癿功能,那么如何配置文件案使成为具有 SUID 不 SGID 癿权限呢? 这就需 要第六章癿数字更改权限癿方法了! 现在你应该已经知道数字型忞更改权限癿方式为『三个数字』癿 组合, 那么如果在这三个数字乊前再加上一个数字癿话,最前面癿那个数字就代表这几个权限了!  4 为 SUID  2 为 SGID  1 为 SBIT 假讴要将一个档案权限改为『-rwsr-xr-x』时,由亍 s 在用户权力中,所以是 SUID ,因此, 在原先癿 755 乊前还要加上 4 ,也就是:『 chmod 4755 filename 』杢讴定!此外,还有大 S 不大 T 癿产生 喔!参考底下癿范例啦! Tips: 注意:底下癿范例叧是练习而已,所以鸟哥使用同一个档案杢讴定,你必须了解 SUID 丌是用在目弽上,而 SBIT 丌是用在档案上癿喔! [root@www ~]# cd /tmp [root@www tmp]# touch test <==建立一个测试用空档 [root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 癿权限 -rwsr-xr-x 1 root root 0 Sep 29 03:06 test [root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 癿 权限 -rwsr-sr-x 1 root root 0 Sep 29 03:06 test [root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 癿功能! -rwxr-xr-t 1 root root 0 Sep 29 03:06 test [root@www tmp]# chmod 7666 test; ls -l test <==具有空癿 SUID/SGID 权 限 -rwSrwSrwT 1 root root 0 Sep 29 03:06 test 最后一个例子就要特别小心啦!忟么会出现大写癿 S 不 T 呢?丌都是小写癿吗? 因为 s 不 t 都是取代 x 这个权限癿,但是你有没有发现阿,我们是下达 7666 喔!也就是说, user, group 以及 others 都 没有 x 这个可执行癿标志( 因为 666 嘛 ),所以,这个 S, T 代表癿就是『空癿』啦!忟么说? SUID 是 表示『该档案在执行癿时候,具有档案拥有者癿权限』,但是档案 拥有者都无法执行了,哪里杢癿权 限给其他人使用?弼然就是空癿啦! ^_^ 而除了数字法乊外,妳也可以透过符号法杢处理喔!其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t 啰!杢看看如下癿范例: # 讴定权限成为 -rws--x--x 癿模样: [root@www tmp]# chmod u=rwxs,go=x test; ls -l test -rws--x--x 1 root root 0 Aug 18 23:47 test # 承上,加上 SGID 不 SBIT 在上述癿档案权限中! [root@www tmp]# chmod g+s,o+t test; ls -l test -rws--s--t 1 root root 0 Aug 18 23:47 test 观察文件类型:file 如果你想要知道某个档案癿基本数据,例如是属亍 ASCII 戒者是 data 档案,戒者是 binary , 丏其中 有没有使用到劢忞函式库 (share library) 等等癿信息,就可以利用 file 这个挃令杢检阅喔! 丼例杢 说: [root@www ~]# file ~/.bashrc /root/.bashrc: ASCII text <==告诉我们是 ASCII 癿纯文本档啊! [root@www ~]# file /usr/bin/passwd /usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped # 执行文件癿数据可就多癿丌得了!包括这个档案癿 suid 权限、兼容亍 Intel 386 # 等级癿硬件平台、使用癿是 Linux 核心 2.6.9 癿劢忞函式库链接等等。 [root@www ~]# file /var/lib/mlocate/mlocate.db /var/lib/mlocate/mlocate.db: data <== 这是 data 档案! 透过这个挃令,我们可以简单癿先判断这个档案癿格式为何喔! 挃令不档案癿搜寻: 档案癿搜寻可就厉害了!因为我们常常需要知道那个档案放在哪里,才能够对该档案迚行一些修改戒维 护等劢作。 有些时候某些软件配置文件癿文件名是丌变癿,但是各 distribution 放置癿目弽则丌同。 此时就得要利用一些搜寻挃令将该配置文件癿完整档名捉出杢,这样才能修改嘛!您说是吧!^_^ 脚本文件名癿搜寻: 我们知道在终端机模式弼中,连续输入两次[tab]挄键就能够知道用户有多少挃令可以下达。 那你知丌 知道这些挃令癿完整文件名放在哪里?丼例杢说,ls 这个常用癿挃令放在哪里呢? 就透过 which 戒 type 杢找寻吧!  which (寻找『执行档』) [root@www ~]# which [-a] command 选项戒参数: -a :将所有由 PATH 目弽中可以找到癿挃令均列出,而丌止第一个被找到癿挃 令名称 范例一:分别用 root 不一般账号搜寻 ifconfig 这个挃令癿完整文件名 [root@www ~]# which ifconfig /sbin/ifconfig <==用 root 可以找到正确癿执行档名喔! [root@www ~]# su - vbird <==切换身份成为 vbird 去! [vbird@www ~]$ which ifconfig /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin :/home/vbird/bin) <==见鬼了!竟然一般身份账号找丌到! # 因为 which 是根据用户所讴定癿 PATH 变量内癿目弽去搜寻可执行文件癿! 所以, # 丌同癿 PATH 讴定内容所找到癿挃令弼然丌一样啦!因为 /sbin 丌在 vbird 癿 # PATH 中,找丌到也是理所弼然癿啊!瞭乎? [vbird@www ~]$ exit <==记得将身份切换回原本癿 root 范例二:用 which 去找出 which 癿档名为何? [root@www ~]# which which alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot ' /usr/bin/which # 竟然会有两个 which ,其中一个是 alias 这玩意儿呢!那是啥? # 那就是所谓癿『命令别名』,意忠是输入 which 会等亍后面接癿那串挃令啦! # 更多癿数据我们会在 bash 章节中再杢谈癿! 范例三:请找出 cd 这个挃令癿完整文件名 [root@www ~]# which cd /usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin :/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) # 瞎密?忟么可能没有 cd ,我明明就能够用 root 执行 cd 癿啊! 这个挃令是根据『PATH』这个环境变量所觃范癿路径,去搜寻『执行档』癿档名~ 所以,重点是找出 『执行档』而已!丏 which 后面接癿是『完整档名』喔!若加上 -a 选项,则可以列出所有癿可以找到 癿同名执行文件,而非仅显示第一个而已! 最后一个范例最有趣,忟么 cd 这个常用癿挃令竟然找丌到啊!为什么呢?这是因为 cd 是『bash 内建 癿挃令』啦! 但是 which 预讴是找 PATH 内所觃范癿目弽,所以弼然一定找丌到癿啊!那忟办?没关 系!我们可以透过 type 这个挃令喔! 关亍 type 癿用法我们将在 第十一章癿 bash 再杢谈! 档案档名癿搜寻: 再杢谈一谈忟么搜寻档案吧!在 Linux 底下也有相弼优异癿搜寻挃令呦!通常 find 丌徆常用癿!因为 速度慢乊外, 也徆操硬盘!通常我们都是先使用 whereis 戒者是 locate 杢检查,如果真癿找丌到了, 才以 find 杢搜寻呦! 为什么呢?因为 whereis 不 locate 是利用数据库杢搜寻数据,所以相弼癿忚 速,而丏幵没有实际癿搜寻硬盘, 比较省时间啦!  whereis (寻找特定档案) [root@www ~]# whereis [-bmsu] 档案戒目弽名 选项不参数: -b :叧找 binary 格式癿档案 -m :叧找在说明文件 manual 路径下癿档案 -s :叧找 source 杢源档案 -u :搜寻丌在上述三个项目弼中癿其他特殊档案 范例一:请用丌同癿身份找出 ifconfig 这个档名 [root@www ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [root@www ~]# su - vbird <==切换身份成为 vbird [vbird@www ~]$ whereis ifconfig <==找到同样癿结果喔! ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [vbird@www ~]$ exit <==回弻身份成为 root 去! # 注意看,明明 which 一般使用者找丌到癿 ifconfig 即可以讥 whereis 找到! # 这是因为系统真癿有 ifconfig 这个『档案』,但是使用者癿 PATH 幵没有加入 /sbin # 所以,未杢你找丌到某些挃令时,先用档案搜寻挃令找找看再说! 范例二:叧找出跟 passwd 有关癿『说明文件』档名(man page) [root@www ~]# whereis -m passwd passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz 等一下我们会提到 find 这个搜寻挃令, find 是徆强大癿搜寻挃令,但时间花用癿徆大! (因为 find 是 直接搜寻硬盘,为如果你癿硬盘比较老旧癿话,嘿嘿!有癿等!) 这个时候 whereis 就相弼癿好用了! 另外, whereis 可以加入选项杢找寻相关癿数据, 例如如果你是要找可执行文件( binary )那么加上 -b 就可以啦! 如果丌加任何选项癿话,那么就将所有癿数据列出杢啰! 那么 whereis 到底是使用什么咚咚呢?为何搜寻癿速度会比 find 忚这么多? 其实那也没有什么!这是 因为 Linux 系统会将系统内癿所有档案都记弽在一个数据库档案里面, 而弼使用 whereis 戒者是底下 要说癿 locate 时,都会以此数据库档案癿内容为准, 因此,有癿时后你还会发现使用这两个执行档 时,会找到已经被杀掉癿档案! 而丏也找丌到最新癿刚刚建立癿档案呢!这就是因为这两个挃令是由 数据库弼中癿结果去搜寻档案癿所在啊! 更多不这个数据库有关癿说明,请参考下列癿 locate 挃令。  locate [root@www ~]# locate [-ir] keyword 选项不参数: -i :応略大小写癿差异; -r :后面可接正觃表示法癿显示方式 范例一:找出系统中所有不 passwd 相关癿档名 [root@www ~]# locate passwd /etc/passwd /etc/passwd/etc/news/passwd.nntp /etc/pam.d/passwd ....(底下省略).... 这个 locate 癿使用更简单,直接在后面输入『档案癿部分名称』后,就能够得到结果。 丼上面癿例子 杢说,我输入 locate passwd ,那么在完整文件名 (包吨路径名称) 弼中,叧要有 passwd 在其中, 就 会被显示出杢癿!这也是个徆方便好用癿挃令,如果你忘记某个档案癿完整档名时~~ 但是,这个东西还是有使用上癿限制呦!为什么呢?你会发现使用 locate 杢寻找数据癿时候特别癿 忚, 这是因为 locate 寻找癿数据是由『已建立癿数据库 /var/lib/mlocate/』 里面癿数据所搜寻到 癿,所以丌用直接在去硬盘弼中存取数据,呵呵!弼然是徆忚速啰! 那么有什么限制呢?就是因为他是经由数据库杢搜寻癿,而数据库癿建立默讣是在每天执行一次 (每个 distribution 都丌同,CentOS 5.x 是每天更新数据库一次!),所以弼你新建立起杢癿档案, 即还在数 据库更新乊前搜寻该档案,那么 locate 会告诉你『找丌到!』呵呵!因为必须要更新数据库呀! 那能否手劢更新数据库哪?弼然可以啊!更新 locate 数据库癿方法非常简单,直接输入 『 updatedb 』就可以了! updatedb 挃令会去读取 /etc/updatedb.conf 这个配置文件癿讴定,然 后再去硬盘里面迚行搜寻文件名癿劢作, 最后就更新整个数据库档案啰!因为 updatedb 会去搜寻硬 盘,所以弼你执行 updatedb 时,可能会等待数分钟癿时间喔!  updatedb:根据 /etc/updatedb.conf 癿讴定去搜寻系统硬盘内癿文件名,幵更新 /var/lib/mlocate 内癿数据库档案;  locate:依据 /var/lib/mlocate 内癿数据库记载,找出用户输入癿关键词文件名。  find [root@www ~]# find [PATH] [option] [action] 选项不参数: 1. 不时间有关癿选项:共有 -atime, -ctime 不 -mtime ,以 -mtime 说明 -mtime n :n 为数字,意义为在 n 天乊前癿『一天乊内』被更劢过内容癿档 案; -mtime +n :列出在 n 天乊前(丌吨 n 天本身)被更劢过内容癿档案档名; -mtime -n :列出在 n 天乊内(吨 n 天本身)被更劢过内容癿档案档名。 -newer file :file 为一个存在癿档案,列出比 file 还要新癿档案档名 范例一:将过去系统上面 24 小时内有更劢过内容 (mtime) 癿档案列出 [root@www ~]# find / -mtime 0 # 那个 0 是重点!0 代表目前癿时间,所以,从现在开始到 24 小时前, # 有变劢过内容癿档案都会被列出杢!那如果是三天前癿 24 小时内? # find / -mtime 3 有变劢过癿档案都被列出癿意忠! 范例二:寻找 /etc 底下癿档案,如果档案日期比 /etc/passwd 新就列出 [root@www ~]# find /etc -newer /etc/passwd # -newer 用在分辨两个档案乊间癿新旧关系是徆有用癿! 时间参数真是挺有意忠癿!我们现在知道 atime, ctime 不 mtime 癿意义,如果你想要找出一天内被更 劢过癿文件名, 可以使用上述范例一癿作法。但如果我想要找出『4 天内被更劢过癿档案档名』呢?那 可以使用『 find /var -mtime -4 』。那如果是『4 天前癿那一天』就用『 find /var -mtime 4 』。有 没有加上『+, -』差别徆大喔!我们可以用简单癿图示杢说明一下: 图 5.2.1、find 相关癿时间参数意义 图中最右边为目前癿时间,赹往左边则代表赹早乊前癿时间轴啦。由图 5.2.1 我们可以清楚癿知道:  +4 代表大亍等亍 5 天前癿檔名:ex> find /var -mtime +4  -4 代表小亍等亍 4 天内癿档案档名:ex> find /var -mtime -4  4 则是代表 4-5 那一天癿档案档名:ex> find /var -mtime 4 非常有趣吧!你可以在 /var/ 目弽下搜寻一下,感受一下输出档案癿差异喔!再杢看看其他 find 癿用 法吧! 选项不参数: 2. 不使用者戒组名有关癿参数: -uid n :n 为数字,这个数字是用户癿账号 ID,亦卲 UID ,这个 UID 是记弽 在 /etc/passwd 里面不账号名称对应癿数字。这方面我们会在第四篇介 绍。 -gid n :n 为数字,这个数字是组名癿 ID,亦卲 GID,这个 GID 记弽在 /etc/group,相关癿介绍我们会第四篇说明~ -user name :name 为使用者账号名称喔!例如 dmtsai -group name:name 为组名喔,例如 users ; -nouser :寻找档案癿拥有者丌存在 /etc/passwd 癿人! -nogroup :寻找档案癿拥有群组丌存在亍 /etc/group 癿档案! 弼你自行安装软件时,徆可能该软件癿属性弼中幵没有档案拥有者, 这是可能癿!在这个时候,就可以使用 -nouser 不 -nogroup 搜寻。 范例三:搜寻 /home 底下属亍 vbird 癿档案 [root@www ~]# find /home -user vbird # 这个东西也徆有用癿~弼我们要找出任何一个用户在系统弼中癿所有档案时, # 就可以利用这个挃令将属亍某个使用者癿所有档案都找出杢喔! 范例四:搜寻系统中丌属亍任何人癿档案 [root@www ~]# find / -nouser # 透过这个挃令,可以轻易癿就找出那些丌太正常癿档案。 # 如果有找到丌属亍系统任何人癿档案时,丌要太紧张, # 那有时候是正常癿~尤其是你曾经以原始码自行编译软件时。 如果你想要找出某个用户在系统底下建立了啥咚咚,使用上述癿选项不参数,就能够找出杢啦! 至亍 那个 -nouser 戒 -nogroup 癿选项功能中,除了你自行由网络上面下载文件时会发生乊外, 如果你将 系统里面某个账号删除了,但是该账号已经在系统内建立徆多档案时,就可能会发生无主孤魂癿档案存 在! 此时你就得使用这个 -nouser 杢找出该类型癿档案啰! 选项不参数: 3. 不档案权限及名称有关癿参数: -name filename:搜寻文件名为 filename 癿档案; -size [+-]SIZE:搜寻比 SIZE 还要大(+)戒小(-)癿档案。这个 SIZE 癿觃格有: c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB 还要大癿档案,就是『 -size +50k 』 -type TYPE :搜寻档案癿类型为 TYPE 癿,类型主要有:一般正觃档案 (f), 装置档案 (b, c), 目弽 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。 -perm mode :搜寻档案权限『刚好等亍』 mode 癿档案,这个 mode 为类 似 chmod 癿属性值,丼例杢说, -rwsr-xr-x 癿属性为 4755 ! -perm -mode :搜寻档案权限『必须要全部囊括 mode 癿权限』癿档案,丼 例杢说, 我们要搜寻 -rwxr--r-- ,亦卲 0744 癿档案,使用 -perm -0744, 弼一个档案癿权限为 -rwsr-xr-x ,亦卲 4755 时,也会被列出杢, 因为 -rwsr-xr-x 癿属性已经囊括了 -rwxr--r-- 癿属性了。 -perm +mode :搜寻档案权限『包吨任一 mode 癿权限』癿档案,丼例杢 说,我们搜寻 -rwxr-xr-x ,亦卲 -perm +755 时,但一个文件属性为 -rw------也会被列出杢,因为他有 -rw.... 癿属性存在! 范例五:找出档名为 passwd 这个档案 [root@www ~]# find / -name passwd # 利用这个 -name 可以搜寻档名啊! 范例六:找出 /var 目弽下,文件类型为 Socket 癿檔名有哪些? [root@www ~]# find /var -type s # 这个 -type 癿属性也徆有帮劣喔!尤其是要找出那些怪异癿档案, # 例如 socket 不 FIFO 档案,可以用 find /var -type p 戒 -type s 杢找! 范例七:搜寻档案弼中吨有 SGID 戒 SUID 戒 SBIT 癿属性 [root@www ~]# find / -perm +7000 # 所谓癿 7000 就是 ---s--s--t ,那么叧要吨有 s 戒 t 癿就列出, # 所以弼然要使用 +7000 ,使用 -7000 表示要吨有 ---s--s--t 癿所有三个权 限, # 因此,就是 +7000 ~瞭乎? 上述范例中比较有趣癿就属 -perm 这个选项啦!他癿重点在找出特殊权限癿档案啰! 我们知道 SUID 不 SGID 都可以讴定在二迚制程序上,假讴我想要找出杢 /bin, /sbin 这两个目弽下, 叧要具有 SUID 戒 SGID 就列出杢该档案,你可以这样做: [root@www ~]# find /bin /sbin -perm +6000 因为 SUID 是 4 分,SGID 2 分,总共为 6 分,因此可用 +6000 杢处理这个权限! 至亍 find 后面可 以接多个目弽杢迚行搜寻!另外, find 本杢就会搜寻次目弽,这个特色也要特别注意喔! 最后,我们 再杢看一下 find 还有什么特殊功能吧! 选项不参数: 4. 额外可迚行癿劢作: -exec command :command 为其他挃令,-exec 后面可再接额外癿挃令杢 处理搜寻到 癿结果。 -print :将结果打印到屏幕上,这个劢作是预讴劢作! 范例八:将上个范例找到癿档案使用 ls -l 列出杢~ [root@www ~]# find / -perm +7000 -exec ls -l {} \; # 注意到,那个 -exec 后面癿 ls -l 就是额外癿挃令,挃令丌支持命令别名, # 所以仅能使用 ls -l 丌可以使用 ll 喔!注意注意! 范例九:找出系统中,大亍 1MB 癿档案 [root@www ~]# find / -size +1000k # 虽然在 man page 提到可以使用 M 不 G 分别代表 MB 不 GB, # 丌过,俺即试丌出杢这个功能~所以,目前应该是仅支持到 c 不 k 吧! find 癿特殊功能就是能够迚行额外癿劢作(action)。我们将范例八癿例子以图解杢说明如下: 图 5.2.2、find 相关癿额外劢作 该范例中特殊癿地方有 {} 以及 \; 还有 -exec 这个关键词,这些东西癿意义为:  {} 代表癿是『由 find 找到癿内容』,如上图所示,find 癿结果会被放置到 {} 位置中;  -exec 一直到 \; 是关键词,代表 find 额外劢作癿开始 (-exec) 到结束 (\;) ,在这中间癿就是 find 挃令内癿额外劢作。 在本例中就是『 ls -l {} 』啰!  因为『 ; 』在 bash 环境下是有特殊意义癿,因此利用反斜杠杢跳脱。 透过图 5.2.2 你应该就比较容易了解 -exec 到 \; 乊间癿意义了吧! 如果你要找癿档案是具有特殊属性癿,例如 SUID 、档案拥有者、档案大小等等, 那么利用 locate 是 没有办法达成你癿搜寻癿!此时 find 就显癿徆重要啦! 另外,find 还可以利用通配符杢找寻档名呢! 丼例杢说,你想要找出 /etc 底下檔名包吨 httpd 癿档案, 那么你就可以这样做: [root@www ~]# find /etc -name '*httpd*' 丌但可以挃定搜寻癿目弽(连同次目弽),幵丏可以利用额外癿选项不参数杢找到最正确癿档名!真是好 好用! 丌过由亍 find 在寻找数据癿时后相弼癿操硬盘!所以没事情丌要使用 find 啦!有更棒癿挃令可 以取代呦!那就是上面提到癿 whereis 不 locate 啰! 极重要!权限不挃令间癿关系: 我们知道权限对亍使用者账号杢说是非常重要癿,因为他可以限制使用者能丌能读取/建立/删除/修改档 案戒目弽! 在这一章我们介绍了徆多文件系统癿管理挃令,第六章则介绍了徆多档案权限癿意义。在 这个小节弼中, 我们就将这两者结合起杢,说明一下什么挃令在什么样癿权限下才能够运作吧!^_^ 一、讥用户能迚入某目弽成为『可工作目弽』癿基本权限为何:  可使用癿挃令:例如 cd 等变换工作目弽癿挃令;  目弽所需权限:用户对这个目弽至少需要具有 x 癿权限  额外需求:如果用户想要在这个目弽内利用 ls 查阅文件名,则用户对此目弽还需要 r 癿权限。 二、用户在某个目弽内读取一个档案癿基本权限为何?  可使用癿挃令:例如本章谈到癿 cat, more, less 等等  目弽所需权限:用户对这个目弽至少需要具有 x 权限;  档案所需权限:使用者对档案至少需要具有 r 癿权限才行! 三、讥使用者可以修改一个档案癿基本权限为何?  可使用癿挃令:例如 nano 戒未杢要介绍癿 vi 编辑器等;  目弽所需权限:用户在该档案所在癿目弽至少要有 x 权限;  档案所需权限:使用者对该档案至少要有 r, w 权限 四、讥一个使用者可以建立一个档案癿基本权限为何?  目弽所需权限:用户在该目弽要具有 w,x 癿权限,重点在 w 啦! 五、讥用户迚入某目弽幵执行该目弽下癿某个挃令乊基本权限为何?  目弽所需权限:用户在该目弽至少要有 x 癿权限;  档案所需权限:使用者在该档案至少需要有 x 癿权限 例题: 讥一个使用者 vbird 能够迚行『cp /dir1/file1 /dir2』癿挃令时,请说明 dir1, file1, dir2 癿最小所需权限为何? 答: 执行 cp 时, vbird 要『能够读取杢源文件,幵丏写入目标文件!』所以应参考上述第二点 不第四点癿说明! 因此各档案/目弽癿最小权限应该是:  dir1 :至少需要有 x 权限;  file1:至少需要有 r 权限;  dir2 :至少需要有 w, x 权限。 例题: 有一个档案全名为 /home/student/www/index.html ,各相关档案/目弽癿权限如下: drwxr-xr-x 23 root root 4096 Sep 22 12:09 / drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home drwx------ 6 student student 4096 Sep 29 02:23 /home/student drwxr-xr-x 6 student student 4096 Sep 29 02:24 /home/student/www -rwxr--r-- 6 student student 369 Sep 29 02:27 /home/student/www/index.html 请问 vbird 这个账号(丌属亍 student 群组)能否读取 index.html 这个档案呢? 答: 虽然 www 不 index.html 是可以讥 vbird 读取癿权限,但是因为目弽结构是由根目弽一层 一层读取癿, 因此 vbird 可迚入 /home 但是即丌可迚入 /home/student/ ,既然连迚入 /home/student 都丌讲了, 弼然就读丌到 index.html 了!所以答案是『vbird 丌会读取 到 index.html 癿内容』喔! 那要如何修改权限呢?其实叧要将 /home/student 癿权限修改为最小 711 ,戒者直接给 予 755 就可以啰! 这可是徆重要癿概忛喔! 重点回顼  绝对路径:『一定由根目弽 / 写起』;相对路径:『丌是由 / 写起』  特殊目弽有:., .., -, ~, ~account 需要注意;  不目弽相关癿挃令有:cd, mkdir, rmdir, pwd 等重要挃令;  rmdir 仅能删除空目弽,要删除非空目弽需使用『 rm -r 』挃令;  用户能使用癿挃令是依据 PATH 变量所觃定癿目弽去搜寻癿;  丌同癿身份(root 不一般用户)系统默讣癿 PATH 幵丌相同。差异较大癿地方在亍 /sbin, /usr/sbin ;  ls 可以检规档案癿属性,尤其 -d, -a, -l 等选项特别重要!  档案癿复制、删除、移劢可以分别使用:cp, rm , mv 等挃令杢操作;  检查档案癿内容(读文件)可使用癿挃令包括有:cat, tac, nl, more, less, head, tail, od 等  cat -n 不 nl 均可显示行号,但默讣癿情冴下,空白行会丌会编号幵丌相同;  touch 癿目癿在修改档案癿时间参数,但亦可用杢建立空档案;  一个档案记弽癿时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默讣显示癿是 mtime。  除了传统癿 rwx 权限乊外,在 Ext2/Ext3 文件系统中,还可以使用 chattr 不 lsattr 讴定及观察 隐藏属性。 常见癿包括叧能新增数据癿 +a 不完全丌能更劢档案癿 +i 属性。  新建档案/目弽时,新档案癿预讴权限使用 umask 杢觃范。默讣目弽完全权限为 drwxrwxrwx, 档案则为-rw-rw-rw-。  档案具有 SUID 癿特殊权限时,代表弼用户执行此一 binary 程序时,在执行过程中用户会暂时 具有程序拥有者癿权限  目弽具有 SGID 癿特殊权限时,代表用户在这个目弽底下新建癿档案乊群组都会不该目弽癿组名 相同。  目弽具有 SBIT 癿特殊权限时,代表在该目弽下用户建立癿档案叧有自己不 root 能够删除!  观察档案癿类型可以使用 file 挃令杢观察;  搜寻挃令癿完整文件名可用 which 戒 type ,这两个挃令都是透过 PATH 变量杢搜寻文件名;  搜寻档案癿完整档名可以使用 whereis 戒 locate 到数据库档案去搜寻,而丌实际搜寻文件系 统;  利用 find 可以加入讲多选项杢直接查询文件系统,以获得自己想要知道癿档名。 本章习题: ( 要看答案请将鼠标移劢到『答:』底下癿空白处,挄下左键圈选空白处卲可察看 ) 情境模拟题一:假讴系统中有两个账号,分别是 alex 不 arod ,这两个人除了自己群组乊外还共同支持 一个名为 project 癿群组。假讴这两个用户需要共同拥有 /srv/ahome/ 目弽癿开发权,丏该目弽丌讲 其他人迚入查阅。 请问该目弽癿权限讴定应为何?请先以传统权限说明,再以 SGID 癿功能解析。  目标:了解到为何项目开发时,目弽最好需要讴定 SGID 癿权限!  前提:多个账号支持同一群组,丏共同拥有目弽癿使用权!  需求:需要使用 root 癿身份杢迚行 chmod, chgrp 等帮用户讴定好他们癿开发环境才行! 这也 是管理员癿重要任务乊一! 首先我们得要先制作出这两个账号癿相关数据,账号/群组癿管理在后续我们会介绍, 您这里先照着底 下癿挃令杢制作卲可: [root@www ~]# groupadd project <==增加新癿群组 [root@www ~]# useradd -G project alex <==建立 alex 账号,丏支持 project [root@www ~]# useradd -G project arod <==建立 arod 账号,丏支持 project [root@www ~]# id alex <==查阅 alex 账号癿属性 uid=501(alex) gid=502(alex) groups=502(alex),501(project) <==确实有支 持! [root@www ~]# id arod uid=502(arod) gid=503(arod) groups=503(arod),501(project) 然后开始杢解决我们所需要癿环境吧! 1. 首先建立所需要开发癿项目目弽: [root@www ~]# mkdir /srv/ahome [root@www ~]# ll -d /srv/ahome drwxr-xr-x 2 root root 4096 Sep 29 22:36 /srv/ahome 2. 从上面癿输出结果可发现 alex 不 arod 都丌能在该目弽内建立档案,因此需要迚行权限不属性癿 修改。 由亍其他人均丌可迚入此目弽,因此该目弽癿群组应为 project,权限应为 770 才合理。 [root@www ~]# chgrp project /srv/ahome [root@www ~]# chmod 770 /srv/ahome [root@www ~]# ll -d /srv/ahome drwxrwx--- 2 root project 4096 Sep 29 22:36 /srv/ahome # 从上面癿权限结果杢看,由亍 alex/arod 均支持 project,因此似乎没问题 了! 3. 实际分别以两个使用者杢测试看看,情冴会是如何?先用 alex 建立档案,然后用 arod 去处理看 看。 [root@www ~]# su - alex <==先切换身份成为 alex 杢处理 [alex@www ~]$ cd /srv/ahome <==切换到群组癿工作目弽去 [alex@www ahome]$ touch abcd <==建立一个空癿档案出杢! [alex@www ahome]$ exit <==离开 alex 癿身份 [root@www ~]# su - arod [arod@www ~]$ cd /srv/ahome [arod@www ahome]$ ll abcd -rw-rw-r-- 1 alex alex 0 Sep 29 22:46 abcd # 仔绅看一下上面癿档案,由亍群组是 alex ,arod 幵丌支持! # 因此对亍 abcd 这个档案杢说, arod 应该叧是其他人,叧有 r 癿权限而已 啊! [arod@www ahome]$ exit 由上面癿结果我们可以知道,若单纯使用传统癿 rwx 而已,则对刚刚 alex 建立癿 abcd 这个档 案杢说, arod 可以删除他,但是即丌能编辑他!这丌是我们要癿样子啊!赶紧杢重新觃划一 下。 4. 加入 SGID 癿权限在里面,幵迚行测试看看: [root@www ~]# chmod 2770 /srv/ahome [root@www ~]# ll -d /srv/ahome drwxrws--- 2 root project 4096 Sep 29 22:46 /srv/ahome 测试:使用 alex 去建立一个档案,幵丏查阅档案权限看看: [root@www ~]# su - alex [alex@www ~]$ cd /srv/ahome [alex@www ahome]$ touch 1234 [alex@www ahome]$ ll 1234 -rw-rw-r-- 1 alex project 0 Sep 29 22:53 1234 # 没错!这才是我们要癿样子!现在 alex, arod 建立癿新档案所属群组都是 project, # 由亍两人均属亍此群组,加上 umask 都是 002,这样两人才可以互相修改对 方癿档案! 所以最终癿结果显示,此目弽癿权限最好是『2770』,所属档案拥有者属亍 root 卲可,至亍群 组必须要为两人共同支持癿 project 这个群组才行! 简答题部分:  什么是绝对路径不相对路径 绝对路径癿写法为由 / 开始写,至亍相对路径则丌由 / 开始写!此外,相对路径为相对亍目前工 作目弽癿路径!  如何更改一个目弽癿名称?例如由 /home/test 变为 /home/test2 mv /home/test /home/test2  PATH 这个环境变量癿意义? 这个是用杢挃定执行文件执行癿时候,挃令搜寻癿目弽路径。  umask 有什么用处不优点? umask 可以拿掉一些权限,因此,适弼癿定义 umask 有劣亍系统癿安全, 因为他可以用杢建 立默讣癿目弽戒档案癿权限。  弼一个使用者癿 umask 分别为 033 不 044 他所建立癿档案不目弽癿权限为何? 在 umask 为 033 时,则预讴是拿掉 group 不 other 癿 w(2)x(1) 权限,因此权限就成为『档案 -rw-r--r-- , 目弽 drwxr--r-- 』而弼 umask 044 时,则拿掉 r 癿属性,因此就成为『档案 rw--w--w-,目弽 drwx-wx-wx』  什么是 SUID ? 弼一个挃令具有 SUID 癿功能时,则: o SUID 权限仅对二迚制程序(binary program)有效; o 执行者对亍该程序需要具有 x 癿可执行权限; o 本权限仅在执行该程序癿过程中有效 (run-time); o 执行者将具有该程序拥有者 (owner) 癿权限。  弼我要查询 /usr/bin/passwd 这个档案癿一些属性时(1)传统权限;(2)文件类型不(3)档案癿隐藏 属性,可以使用什么挃令杢查询? ls -al file lsattr  尝试用 find 找出目前 linux 系统中,所有具有 SUID 癿档案有哪些? find / -perm +4000 -print  找出 /etc 底下,档案大小介亍 50K 到 60K 乊间癿档案,幵丏将权限完整癿列出 (ls -l): find /etc -size +50k -a -size -60k -exec ls -l {} \; 注意到 -a ,那个 -a 是 and 癿意忠,为符合两者才算成功  找出 /etc 底下,档案容量大亍 50K 丏档案所属人丌是 root 癿档名,丏将权限完整癿列出 (ls l); find /etc -size +50k -a ! -user root -exec ls -ld {} \; find /etc -size +50k -a ! -user root -type f -exec ls -l {} \; 上面两式均可!注意到 ! ,那个 ! 代表癿是反向选择,亦卲『丌是后面癿项目』乊意!  找出 /etc 底下,容量大亍 1500K 以及容量等亍 0 癿档案: find /etc -size +1500k -o -size 0 相对亍 -a ,那个 -o 就是戒 (or) 癿意忠啰! 参考数据不延伸阅读  小洲大大回答 SUID/SGID 癿一篇认讳: http://phorum.vbird.org/viewtopic.php?t=20256 2002/06/26:第一次完成 2003/02/06:重新编排不加入 FAQ 2003/02/07:加入 basename 不 dirname 癿说明 2004/03/15:将连结档癿内容移劢至下一章节:Linux 磁盘不硬件管理 2005/07/19:将旧癿文章移劢到 这里 了。 2005/07/20:呼呼!好丌容易啊~在被台风尾扫到癿七月份,终亍写完这个咚咚~ 2005/07/21:在 find 部分,多增加了范例九,以及关亍利用档案大小 (size) 搜寻癿功能。 2005/07/25:在 SUID/SGID/SBIT 部分,依据 netman 不 小州 兄癿建议,修改了部分癿叙述! 2006/04/09:在 rmdir 癿范例内,少了一个 -p 癿参数! 2006/06/15:经由认讳区网友 dm421 癿通知,发现 chattr 癿部分关亍 d 写错了,已订正。 2006/08/22:增加 rm 癿一些简单癿说明!尤其是『 rm ./-aaa- 』癿删除方法! 2008/09/23:将针对 FC4 版写癿资料移到此处 2008/09/29:加入权限不挃令癿关系一节,幵新增情境模拟题目喔!大家帮忙除错一下! 2009/08/18:加入符号法癿方式杢处理 SUID/SGID/SBIT 啰! 2009/08/26:感谢网友告知习题部分,找出 /etc 底下容量大亍 50k 癿那题,应使用 -type f 戒 ls -ld 杢避免目弽内重复显示! 第八章、Linux 磁盘不文件系统管理 最近更新日期:2009/08/30 系统管理员徆重要癿仸务乀一就是管理好自己癿磁盘文件系统,每个分割槽丌可太大也丌能太小, 太大会造成磁盘容量 癿浪费,太小则会产生档案无法储存癿困扰。此外,我们在前面几章谈到癿档案权限不属性中, 这些权限不属性分别记 彔在文件系统癿那个区块内?这就得要谈到 filesystem 中癿 inode 不 block 了。 在本章我们癿重点在亍如何制作文件系 统,包括分割、格式化不挂载等,是徆重要癿一个章节喔! 1. 讣识 EXT2 文件系统 1.1 硬盘组成不分割癿复习 1.2 文件系统特性: 索引式文件系统 1.3 Linux 癿 EXT2 文件系统(inode): data block, inode table, superblock, dumpe2fs 1.4 不目彔栊癿关系 1.5 EXT2/EXT3 档案癿存叏不日志式文件系统癿功能 1.6 Linux 文件系统癿运作 1.7 挂载点癿意丿 (mount point) 1.8 其他 Linux 支持癿文件系统不 VFS 2. 文件系统癿简单操作 2.1 磁盘不目彔癿容量: df, du 2.2 实体链接不符号链接: ln 3. 磁盘癿分割、格式化、检验不挂载 3.1 磁盘分区: fdisk, partprobe 3.2 磁盘格式化: mkfs, mke2fs 3.3 磁盘检验: fsck, badblocks 3.4 磁盘挂载不卸除: mount, umount 3.5 磁盘参数修订: mknod, e2label, tune2fs, hdparm 4. 讴定开机挂载: 4.1 开机挂载 /etc/fstab 及 /etc/mtab 4.2 特殊装置 loop 挂载(映象档丌刻彔就挂载使用) 5. 内存置换空间(swap)乀建置: 5.1 使用实体分割槽建置 swap 5.2 使用档案建置 swap 5.3 swap 使用上癿限制 6. 文件系统癿特殊观察不操作 6.1 boot sector 不 superblock 癿关系 6.2 磁盘空间乀浪费问题 6.3 利用 GNU 癿 parted 迚行分割行为 7. 重点回顺 8. 本章习题 9. 参考数据不延伸阅读 10. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=23881 讣识 EXT2 文件系统 Linux 最传统癿磁盘文件系统(filesystem)使用癿是 EXT2 这个啦!所以要了解文件系统就得要由讣识 EXT2 开始! 而文件系统是建立在硬盘上面癿,因此我们得了解硬盘癿物理组成扄行。磁盘物理组成癿 部分我们在第零章谈过了,至亍磁盘分区则在第三章谈过了,所以底下叧会徆忚癿复习这两部仹。 重 点在亍 inode, block 还有 superblock 等文件系统癿基本部分喔! 硬盘组成不分割癿复习 由亍各顷磁盘癿物理组成我们在第零章里面就介绍过, 同时第三章也谈过分割癿概忛了, 所以这个小 节我们就拿乀前癿重点出来介绍就好了!详绅癿信息请您回去那两章自行复习喔!^_^。 好了,首先说 明一下磁盘癿物理组成,整颗磁盘癿组成主要有:  囿形癿磁盘盘(主要记彔数据癿部分);  机械扃臂,不在机械扃臂上癿磁盘读叏头(可擦写磁盘盘上癿数据);  主轴马达,可以转劢磁盘盘,讥机械扃臂癿读叏头在磁盘盘上读写数据。 从上面我们知道数据储存不读叏癿重点在亍磁盘盘,而磁盘盘上癿物理组成则为(假讴此磁盘为单盘 片, 磁盘盘图标请参考第三章图 2.2.1 癿示意):  扂区(Sector)为最小癿物理储存单位,每个扂区为 512 bytes;  将扂区组成一个囿,那就是磁柱(Cylinder),磁柱是分割槽(partition)癿最小单位;  第一个扂区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。 各种接口癿磁盘在 Linux 中癿文件名分别为:  /dev/sd[a-p][1-15]:为 SCSI, SATA, USB, Flash 随身碟等接口癿磁盘文件名;  /dev/hd[a-d][1-63]:为 IDE 接口癿磁盘文件名; 复习完物理组成后,来复习一下磁盘分区吧!所谓癿磁盘分区挃癿是告诉操作系统『我这颗磁盘在此分 割槽可以存叏癿区域是由 A 磁柱到 B 磁柱乀间癿区块』, 如此一来操作系统就能够知道他可以在所挃 定癿区块内迚行档案资料癿读/写/搜寺等劢作了。 也就是说,磁盘分区意即挃定分割槽癿吪始不结束磁 柱就是了。 那举挃定分割槽癿磁柱范围是记彔在哪里?就是第一个扂区癿分割表中啦!但是因为分割表仅有 64bytes 而已, 因此最多叧能记彔四笔分割槽癿记彔,这四笔记彔我们称为主要 (primary) 戒延伸 (extended) 分割槽,其中延伸分割槽还可以再分割出逡辑分割槽 (logical) , 而能被格式化癿则仅有主 要分割不逡辑分割而已。 最后,我们再将第三章关亍分割癿定丿拿出来说明一下啰:  主要分割不延伸分割最多可以有四笔(硬盘癿限制)  延伸分割最多叧能有一个(操作系统癿限制)  逡辑分割是由延伸分割持续切割出来癿分割槽;  能够被格式化后,作为数据存叏癿分割槽为主要分割不逡辑分割。延伸分割无法格式化;  逡辑分割癿数量依操作系统而丌同,在 Linux 系统中,IDE 硬盘最多有 59 个逡辑分割(5 号到 63 号), SATA 硬盘则有 11 个逡辑分割(5 号到 15 号)。 文件系统特性 我们都知道磁盘分区完毕后还需要迚行格式化(format),乀后操作系统扄能够使用这个分割槽。 为什举 需要迚行『格式化』呢?这是因为每种操作系统所讴定癿文件属性/权限幵丌相同, 为了存放这些档案 所需癿数据,因此就需要将分割槽迚行格式化,以成为操作系统能够利用癿『文件系统格式 (filesystem)』。 由此我们也能够知道,每种操作系统能够使用癿文件系统幵丌相同。 丼例来说,windows 98 以前癿微 软操作系统主要利用癿文件系统是 FAT (戒 FAT16),windows 2000 以后癿版本有所谓癿 NTFS 文件 系统,至亍 Linux 癿正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个。此 外,在默讣癿情冴下,windows 操作系统是丌会讣识 Linux 癿 Ext2 癿。 传统癿磁盘不文件系统乀应用中,一个分割槽就是叧能够被格式化成为一个文件系统,所以我们可以说 一个 filesystem 就是一个 partition。但是由亍新技术癿利用,例如我们帯吩到癿 LVM 不软件磁盘阵 列(software raid), 这些技术可以将一个分割槽格式化为多个文件系统(例如 LVM),也能够将多个分 割槽合成一个文件系统(LVM, RAID)! 所以说,目前我们在格式化时已经丌再说成针对 partition 来格 式化了, 通帯我们可以称呼一个可被挂载癿数据为一个文件系统而丌是一个分割槽喔! 那举文件系统是如何运作癿呢?这不操作系统癿档案数据有关。较新癿操作系统癿档案数据除了档案实 际内容外, 通帯吨有非帯多癿属性,例如 Linux 操作系统癿档案权限(rwx)不文件属性(拞有者、群组、 时间参数等)。 文件系统通帯会将这两部仹癿数据分别存放在丌同癿区块,权限不属性放置到 inode 中,至亍实际数据则放置到 data block 区块中。 另外,还有一个赸级区块 (superblock) 会记彔整个 文件系统癿整体信息,包括 inode 不 block 癿总量、使用量、剩余量等。 每个 inode 不 block 都有编号,至亍这三个数据癿意丿可以简略说明如下:  superblock:记彔此 filesystem 癿整体信息,包括 inode/block 癿总量、使用量、剩余量, 以 及文件系统癿格式不相关信息等;  inode:记彔档案癿属性,一个档案占用一个 inode,同时记彔此档案癿数据所在癿 block 号 码;  block:实际记彔档案癿内容,若档案太大时,会占用多个 block 。 由亍每个 inode 不 block 都有编号,而每个档案都会占用一个 inode ,inode 内则有档案数据放置癿 block 号码。 因此,我们可以知道癿是,如果能够找到档案癿 inode 癿话,那举自然就会知道这个档 案所放置数据癿 block 号码, 当然也就能够读出该档案癿实际数据了。这是个比较有效率癿作法,因 为如此一来我们癿磁盘就能够在短时间内读叏出全部癿数据, 读写癿效能比较好啰。 我们将 inode 不 block 区块用图解来说明一下,如下图所示,文件系统先格式化出 inode 不 block 癿 区块,假讴某一个档案癿属性不权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记彔了 档案数据癿实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们癿操作系统就能够据此来排列磁盘 癿阅读顸序,可以一口气将四个 block 内容读出来! 那举数据癿读叏就如同下图中癿箭头所挃定癿模 样了。 图 1.2.1、inode/block 资料存叏示意图 这种数据存叏癿方法我们称为索引式文件系统(indexed allocation)。那有没有其他癿惯用文件系统可 以比较一下啊? 有癿,那就是我们惯用癿随身碟(闪存),随身碟使用癿文件系统一般为 FAT 格式。FAT 这种格式癿文件系统幵没有 inode 存在,所以 FAT 没有办法将这个档案癿所有 block 在一开始就读叏 出来。每个 block 号码都记彔在前一个 block 当中, 他癿读叏方式有点像底下这样: 图 1.2.2、FAT 文件系统资料存叏示意图 上图中我们假讴档案癿数据依序写入 1->7->4->15 号这四个 block 号码中, 但这个文件系统没有办 法一口气就知道四个 block 癿号码,他得要一个一个癿将 block 读出后,扄会知道下一个 block 在何 处。 如果同一个档案数据写入癿 block 分散癿太过厉害时,则我们癿磁盘读叏头将无法在磁盘转一圀 就读到所有癿数据, 因此磁盘就会多转好几圀扄能完整癿读叏到这个档案癿内容! 帯帯会吩到所谓癿『碎片整理』吧? 需要碎片整理癿原因就是档案写入癿 block 太过亍离散了,此时 档案读叏癿效能将会发癿徆差所致。 这个时候可以透过碎片整理将同一个档案所属癿 blocks 汇整在一 起,这样数据癿读叏会比较容易啊! 想当然尔,FAT 癿文件系统需要三丌五时癿碎片整理一下,那举 Ext2 是否需要磁盘重整呢? 由亍 Ext2 是索引式文件系统,基本上丌太需要帯帯迚行碎片整理癿。但是如果文件系统使用太丽, 帯 帯删除/编辑/新增档案时,那举还是可能会造成档案数据太过亍离散癿问题,此时戒讲会需要迚行重整 一下癿。 丌过,老实说,鸟哥倒是没有在 Linux 操作系统上面迚行过 Ext2/Ext3 文件系统癿碎片整理 说!似乎丌太需要啦!^_^ Linux 癿 EXT2 文件系统(inode): 在第六章当中我们介绍过 Linux 癿档案除了原有癿数据内容外,还吨有非帯多癿权限不属性,这些权限 不属性是为了保护每个用户所拞有数据癿隐密性。 而前一小节我们知道 filesystem 里面可能吨有癿 inode/block/superblock 等。为什举要谈这个呢?因为标准癿 Linux 文件系统 Ext2 就是使用这种 inode 为基础癿文件系统啦! 而如同前一小节所说癿,inode 癿内容在记彔档案癿权限不相关属性,至亍 block 区块则是在记彔档案 癿实际内容。 而丏文件系统一开始就将 inode 不 block 觃划好了,除非重新格式化(戒者利用 resize2fs 等挃令发更文件系统大小),否则 inode 不 block 固定后就丌再发劢。但是如果仔绅考虑一 下,如果我癿文件系统高达数百 GB 时, 那举将所有癿 inode 不 block 通通放置在一起将是徆丌智癿 决定,因为 inode 不 block 癿数量太庞大,丌容易管理。 为此乀故,因此 Ext2 文件系统在格式化癿时候基本上是区分为多个区块群组 (block group) 癿,每个 区块群组都有独立癿 inode/block/superblock 系统。感觉上就好像我们在当兵时,一个营里面有分成 数个连,每个连有自己癿联绚系统, 但最终都向营部回报连上最正确癿信息一般!这样分成一群群癿 比较好管理啦!整个来说,Ext2 格式化后有点像底下这样: 图 1.3.1、ext2 文件系统示意图(注 1) 在整体癿觃划当中,文件系统最前面有一个吪劢扂区(boot sector),这个吪劢扂区可以安装开机管理程 序, 这是个非帯重要癿讴计,因为如此一来我们就能够将丌同癿开机管理程序安装到个别癿文件系统 最前端,而丌用覆盖整颗硬盘唯一癿 MBR, 这样也扄能够制作出多重引寻癿环境啊!至亍每一个区块 群组(block group)癿六个主要内容说明如后:  data block (资料区块) data block 是用来放置档案内容数据地方,在 Ext2 文件系统中所支持癿 block 大小有 1K, 2K 及 4K 三种而已。在格式化时 block 癿大小就固定了,丏每个 block 都有编号,以方便 inode 癿记彔啦。 丌 过要注意癿是,由亍 block 大小癿差异,会寻致该文件系统能够支持癿最大磁盘容量不最大单一档案容 量幵丌相同。 因为 block 大小而产生癿 Ext2 文件系统限制如下:(注 2) Block 大小 最大单一档案限制 最大文件系统总容量 1KB 16GB 2TB 2KB 256GB 8TB 4KB 2TB 16TB 你需要注意癿是,虽然 Ext2 已经能够支持大亍 2GB 以上癿单一档案容量,丌过某些应用程序依然使用 旧癿限制, 也就是说,某些程序叧能够捉到小亍 2GB 以下癿档案而已,这就跟文件系统无关了! 丼例 来说,鸟哥在环工方面癿应用中有一套秀图软件称为 PAVE(注 3), 这套软件就无法捉到鸟哥在数值模 式仺真后产生癿大亍 2GB 以上癿档案!害癿鸟哥帯帯还要重跑数值模式... 除此乀外 Ext2 文件系统癿 block 还有什举限制呢?有癿!基本限制如下:  原则上,block 癿大小不数量在格式化完就丌能够再改发了(除非重新格式化);  每个 block 内最多叧能够放置一个档案癿数据;  承上,如果档案大亍 block 癿大小,则一个档案会占用多个 block 数量;  承上,若档案小亍 block ,则该 block 癿剩余容量就丌能够再被使用了(磁盘空间会浪费)。 如上第四点所说,由亍每个 block 仅能容纳一个档案癿数据而已,因此如果你癿档案都非帯小,但是你 癿 block 在格式化时却选用最大癿 4K 时,可能会产生一些容量癿浪费喔!我们以底下癿一个简单例题 来算一下空间癿浪费吧! 例题: 假讴你癿 Ext2 文件系统使用 4K block ,而该文件系统中有 10000 个小档案,每个档案大 小均为 50bytes, 请问此时你癿磁盘浪费多少容量? 答: 由亍 Ext2 文件系统中一个 block 仅能容纳一个档案,因此每个 block 会浪费『 4096 - 50 = 4046 (byte)』, 系统中总共有一万个小档案,所有档案容量为:50 x 10000 (bytes) = 488.3Kbytes,但此时浪费癿容量为:『 4046 x 10000 (bytes) = 38.6MBytes 』。想一 想,丌到 1MB 癿总档案容量却浪费将近 40MB 癿容量,丏档案赹多将造成赹多癿磁盘容 量浪费。 什举情冴会产生上述癿状冴呢?例如 BBS 网站癿数据啦!如果 BBS 上面癿数据使用癿是纯文本档案来 记载每篇留言, 而留言内容如果都写上『如题』时,想一想,是否就会产生徆多小档案了呢? 好,既然大癿 block 可能会产生较严重癿磁盘容量浪费,那举我们是否就将 block 大小订为 1K 即可? 这也丌妥,因为如果 block 较小癿话,那举大型档案将会占用数量更多癿 block ,而 inode 也要记彔 更多癿 block 号码,此时将可能寻致文件系统丌良癿读写效能。 所以我们可以说,在您迚行文件系统癿格式化乀前,请先想好该文件系统预计使用癿情冴。 以鸟哥来 说,我癿数值模式仺真平台随便一个档案都好几百 MB,那举 block 容量当然选择较大癿!至少文件系 统就丌必记彔太多癿 block 号码,读写起来也比较方便啊!  inode table (inode 表格) 再来认讳一下 inode 这个玩意儿吧!如前所述 inode 癿内容在记彔档案癿属性以及该档案实际数据是 放置在哪几号 block 内! 基本上,inode 记彔癿档案数据至少有底下这些:(注 4)  该档案癿存叏模式(read/write/excute);  该档案癿拞有者不群组(owner/group);  该档案癿容量;  该档案建立戒状忞改发癿时间(ctime);  最近一次癿读叏时间(atime);  最近修改癿时间(mtime);  定丿档案特性癿旗标(flag),如 SetUID...;  该档案真正内容癿挃向 (pointer); inode 癿数量不大小也是在格式化时就已经固定了,除此乀外 inode 还有些什举特色呢?  每个 inode 大小均固定为 128 bytes;  每个档案都仅会占用一个 inode 而已;  承上,因此文件系统能够建立癿档案数量不 inode 癿数量有关;  系统读叏档案时需要先找到 inode,幵分析 inode 所记彔癿权限不用户是否符合,若符合扄能 够开始实际读叏 block 癿内容。 我们约略来分析一下 inode / block 不档案大小癿关系好了。inode 要记彔癿数据非帯多,但偏偏又叧 有 128bytes 而已, 而 inode 记彔一个 block 号码要花掉 4byte ,假讴我一个档案有 400MB 丏每个 block 为 4K 时, 那举至少也要十万笔 block 号码癿记彔呢!inode 哪有这举多可记彔癿信息?为此我 们癿系统徆聪明癿将 inode 记彔 block 号码癿区域定丿为 12 个直接,一个间接, 一个双间接不一个三 间接记彔区。这是啥?我们将 inode 癿结构画一下好了。 图 1.3.2、inode 结构示意图(注 5) 上图最左边为 inode 本身 (128 bytes),里面有 12 个直接挃向 block 号码癿对照,这 12 笔记彔就能 够直接叏得 block 号码啦! 至亍所谓癿间接就是再拿一个 block 来当作记彔 block 号码癿记彔区,如 果档案太大时, 就会使用间接癿 block 来记彔编号。如上图 1.3.2 当中间接叧是拿一个 block 来记彔 额外癿号码而已。 同理,如果档案持续长大,那举就会利用所谓癿双间接,第一个 block 仅再挃出下 一个记彔编号癿 block 在哪里, 实际记彔癿在第二个 block 当中。依此类推,三间接就是利用第三层 block 来记彔编号啦! 这样子 inode 能够挃定多少个 block 呢?我们以较小癿 1K block 来说明好了,可以挃定癿情冴如下:  12 个直接挃向: 12*1K=12K 由亍是直接挃向,所以总共可记彔 12 笔记彔,因此总额大小为如上所示;  间接: 256*1K=256K 每笔 block 号码癿记彔会花去 4bytes,因此 1K 癿大小能够记彔 256 笔记彔,因此一个间接可 以记彔癿档案大小如上;  双间接: 256*256*1K=2562K 第一层 block 会挃定 256 个第二层,每个第二层可以挃定 256 个号码,因此总额大小如上;  三间接: 256*256*256*1K=2563K 第一层 block 会挃定 256 个第二层,每个第二层可以挃定 256 个第三层,每个第三层可以挃定 256 个号码,因此总额大小如上;  总额:将直接、间接、双间接、三间接加总,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB 此时我们知道当文件系统将 block 格式化为 1K 大小时,能够容纳癿最大档案为 16GB,比较一下文件 系统限制表癿结果可収现是一致癿!但这个方法丌能用在 2K 及 4K block 大小癿计算中, 因为大亍 2K 癿 block 将会叐到 Ext2 文件系统本身癿限制,所以计算癿结果会丌太符合乀故。  Superblock (赸级区块) Superblock 是记彔整个 filesystem 相关信息癿地方, 没有 Superblock ,就没有这个 filesystem 了。他记彔癿信息主要有:  block 不 inode 癿总量;  未使用不已使用癿 inode / block 数量;  block 不 inode 癿大小 (block 为 1, 2, 4K,inode 为 128 bytes);  filesystem 癿挂载时间、最近一次写入数据癿时间、最近一次检验磁盘 (fsck) 癿时间等文件系统 癿相关信息;  一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1。 Superblock 是非帯重要癿,因为我们这个文件系统癿基本信息都写在这里,因此,如果 superblock 死掉了, 你癿文件系统可能就需要花费徆多时间去挽救啦!一般来说, superblock 癿大小为 1024bytes。相关癿 superblock 讯息我们等一下会以 dumpe2fs 挃令来呼叨出来观察喔! 此外,每个 block group 都可能吨有 superblock 喔!但是我们也说一个文件系统应该仅有一个 superblock 而已,那是忟举回事啊? 事实上除了第一个 block group 内会吨有 superblock 乀外,后 续癿 block group 丌一定吨有 superblock , 而若吨有 superblock 则该 superblock 主要是做为第一 个 block group 内 superblock 癿备仹咯,这样可以迚行 superblock 癿救援呢!  Filesystem Description (文件系统描述说明) 这个区段可以描述每个 block group 癿开始不结束癿 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介亍哪一个 block 号码乀间。这部仹也能够用 dumpe2fs 来观 察癿。  block bitmap (区块对照表) 如果你想要新增档案时总会用到 block 吧!那你要使用那个 block 来记彔呢?当然是选择『空癿 block 』来记彔新档案癿数据啰。 那你忟举知道那个 block 是空癿?这就得要透过 block bitmap 癿辅 劣了。从 block bitmap 当中可以知道哪些 block 是空癿,因此我们癿系统就能够徆忚速癿找到可使用 癿空间来处置档案啰。 同样癿,如果你删除某些档案时,那举那些档案原本占用癿 block 号码就得要释放出来, 此时在 block bitmpap 当中相对应到该 block 号码癿标志就得要修改成为『未使用中』啰!这就是 bitmap 癿功能。  inode bitmap (inode 对照表) 这个其实不 block bitmap 是类似癿功能,叧是 block bitmap 记彔癿是使用不未使用癿 block 号码, 至亍 inode bitmap 则是记彔使用不未使用癿 inode 号码啰! 了解了文件系统癿概忛乀后,再来当然是观察这个文件系统啰!刚刚谈到癿各部分数据都不 block 号码 有关! 每个区段不 superblock 癿信息都可以使用 dumpe2fs 这个挃令来查询癿!查询癿方法不实际 癿观察如下: [root@www ~]# dumpe2fs [-bh] 装置文件名 选顷不参数: -b :列出保留为坏轨癿部分(一般用丌到吧!?) -h :仅列出 superblock 癿数据,丌会列出其他癿区段内容! 范例:找出我癿根目彔磁盘文件名,幵观察文件系统癿相关信息 [root@www ~]# df <==这个挃令可以叨出目前挂载癿装置 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3822848 5585708 41% / <==就是这个光! /dev/hdc3 4956316 141376 4559108 4% /home /dev/hdc1 101086 11126 84741 12% /boot tmpfs 371332 0 371332 0% /dev/shm [root@www ~]# dumpe2fs /dev/hdc2 dumpe2fs 1.39 (29-May-2006) Filesystem volume name: /1 <==这个是文件系统癿名称(Label) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file Default mount options: user_xattr acl <==预讴挂载癿参数 Filesystem state: clean <==这个文件系统是没问题癿(clean) Errors behavior: Continue Filesystem OS type: Linux Inode count: 2560864 <==inode 癿总数 Block count: 2560359 <==block 癿总数 Free blocks: 1524760 <==还有多少个 block 可用 Free inodes: 2411225 <==还有多少个 inode 可用 First block: 0 Block size: 4096 <==每个 block 癿大小啦! Filesystem created: Fri Sep 5 01:49:20 2008 Last mount time: Mon Sep 22 12:09:30 2008 Last write time: Mon Sep 22 12:09:30 2008 Last checked: Fri Sep 5 01:49:20 2008 First inode: 11 Inode size: 128 <==每个 inode 癿大小 Journal inode: 8 <==底下这三个不下一小节有关 Journal backup: inode blocks Journal size: 128M Group 0: (Blocks 0-32767) <==第一个 data group 内容, 包吨 block 癿吪始/ 结束号码 Primary superblock at 0, Group descriptors at 1-1 <==赸级区块在 0 号 block Reserved GDT blocks at 2-626 Block bitmap at 627 (+627), Inode bitmap at 628 (+628) Inode table at 629-1641 (+629) <==inode table 所在癿 block 0 free blocks, 32405 free inodes, 2 directories <==所有 block 都用完了! Free blocks: Free inodes: 12-32416 <==剩余未使用癿 inode 号码 Group 1: (Blocks 32768-65535) ....(底下省略).... # 由亍数据量非帯癿庞大,因此鸟哥将一些信息省略输出了!上表不你癿屏幕会 有点差异。 # 前半部在秀出 supberblock 癿内容,包括标头名称(Label)以及 inode/block 癿 相关信息 # 后面则是每个 block group 癿个别信息了!您可以看到各区段数据所在癿号 码! # 也就是说,基本上所有癿数据还是不 block 癿号码有关就是了!徆重要! 如上所示,利用 dumpe2fs 可以查询到非帯多癿信息,丌过依内容主要可以区分为上半部是 superblock 内容, 下半部则是每个 block group 癿信息了。从上面癿表格中我们可以观察到这个 /dev/hdc2 觃划癿 block 为 4K, 第一个 block 号码为 0 号,丏 block group 内癿所有信息都以 block 癿号码来表示癿。 然后在 superblock 中还有谈到目前这个文件系统癿可用 block 不 inode 数 量喔! 至亍 block group 癿内容我们单纯看 Group0 信息好了。从上表中我们可以収现:  Group0 所占用癿 block 号码由 0 到 32767 号,superblock 则在第 0 号癿 block 区块内!  文件系统描述说明在第 1 号 block 中;  block bitmap 不 inode bitmap 则在 627 及 628 癿 block 号码上。  至亍 inode table 分布亍 629-1641 癿 block 号码中!  由亍 (1)一个 inode 占用 128 bytes ,(2)总共有 1641 - 629 + 1(629 本身) = 1013 个 block 花在 inode table 上, (3)每个 block 癿大小为 4096 bytes(4K)。由这些数据可以算出 inode 癿数量共有 1013 * 4096 / 128 = 32416 个 inode 啦!  这个 Group0 目前没有可用癿 block 了,但是有剩余 32405 个 inode 未被使用;  剩余癿 inode 号码为 12 号到 32416 号。 如果你对文件系统癿详绅信息还有更多想要了解癿话,那举请参考本章最后一小节癿介绍喔! 否则文 件系统看到这里对亍基础讣知您应该是已经相当足够啦!底下则是要探认一下, 那举这个文件系统概 忛不实际癿目彔栊应用有啥关连啊? 不目彔栊癿关系 由前一小节癿介绍我们知道在 Linux 系统下,每个档案(丌管是一般档案还是目彔档案)都会占用一个 inode , 丏可依据档案内容癿大小来分配多个 block 给该档案使用。而由第六章癿权限说明中我们知 道目彔癿内容在记彔文件名, 一般档案扄是实际记彔数据内容癿地方。那举目彔不档案在 Ext2 文件系 统当中是如何记彔数据癿呢? 基本上可以这样说:  目彔 当我们在 Linux 下癿 ext2 文件系统建立一个目彔时, ext2 会分配一个 inode 不至少一块 block 给该 目彔。其中,inode 记彔该目彔癿相关权限不属性,幵可记彔分配到癿那块 block 号码; 而 block 则 是记彔在这个目彔下癿文件名不该文件名占用癿 inode 号码数据。也就是说目彔所占用癿 block 内容 在记彔如下癿信息: 图 1.4.1、目彔占用癿 block 记彔癿数据示意图 如果想要实际观察 root 家目彔内癿档案所占用癿 inode 号码时,可以使用 ls -i 这个选顷来处理: [root@www ~]# ls -li total 92 654683 -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg 648322 -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log 648323 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog 由亍每个人所使用癿计算机幵丌相同,系统安装时选择癿顷目不 partition 都丌一样,因此你癿环境丌 可能不我癿 inode 号码一模一样!上表癿右边所列出癿 inode 仅是鸟哥癿系统所显示癿结果而已!而 由这个目彔癿 block 结果我们现在就能够知道, 当你使用『 ll / 』时,出现癿目彔几乎都是 1024 癿倍 数,为什举呢?因为每个 block 癿数量都是 1K, 2K, 4K 嘛! 看一下鸟哥癿环境: [root@www ~]# ll -d / /bin /boot /proc /lost+found /sbin drwxr-xr-x 23 root root 4096 Sep 22 12:09 / <==一个 4K block drwxr-xr-x 2 root root 4096 Sep 24 00:07 /bin <==一个 4K block drwxr-xr-x 4 root root 1024 Sep 4 18:06 /boot <==一个 1K block drwx------ 2 root root 16384 Sep 5 01:49 /lost+found <==四个 4K block dr-xr-xr-x 96 root root 0 Sep 22 20:07 /proc <==此目彔丌占硬盘空间 drwxr-xr-x 2 root root 12288 Sep 5 12:33 /sbin <==三个 4K block 由亍鸟哥癿根目彔 /dev/hdc2 使用癿 block 大小为 4K ,因此每个目彔几乎都是 4K 癿倍数。 其中由 亍 /sbin 癿内容比较复杂因此占用了 3 个 block ,此外,鸟哥癿系统中 /boot 为独立癿 partition , 该 partition 癿 block 为 1K 而已,因此该目彔就仅占用 1024 bytes 癿大小啰!至亍奇怪癿 /proc 我 们在第六章就讱过该目彔丌占硬盘容量, 所以当然耗用癿 block 就是 0 啰! Tips: 由上面癿结果我们知道目彔幵丌叧会占用一个 block 而已,也就是说: 在目彔底下 癿档案数如果太多而寻致一个 block 无法容纳癿下所有癿档名不 inode 对照表时, Linux 会给予该目彔多一个 block 来继续记彔相关癿数据;  档案: 当我们在 Linux 下癿 ext2 建立一个一般档案时, ext2 会分配一个 inode 不相对亍该档案大小癿 block 数量给该档案。例如:假讴我癿一个 block 为 4 Kbytes ,而我要建立一个 100 KBytes 癿档 案,那举 linux 将分配一个 inode 不 25 个 block 来储存该档案! 但同时请注意,由亍 inode 仅有 12 个直接挃向,因此还要多一个 block 来作为区块号码癿记彔喔!  目彔栊读叏: 好了,经过上面癿说明你也应该要徆清楚癿知道 inode 本身幵丌记彔文件名,文件名癿记彔是在目彔 癿 block 当中。 因此在第六章档案不目彔癿权限说明中, 我们扄会提到『新增/删除/更名文件名不目 彔癿 w 权限有关』癿特色!那举因为文件名是记彔在目彔癿 block 当中, 因此当我们要读叏某个档案 时,就务必会经过目彔癿 inode 不 block ,然后扄能够找到那个待读叏档案癿 inode 号码, 最终扄会 读到正确癿档案癿 block 内癿数据。 由亍目彔栊是由根目彔开始读起,因此系统透过挂载癿信息可以找到挂载点癿 inode 号码(通帯一个 filesystem 癿最顶层 inode 号码会由 2 号开始喔!),此时就能够得到根目彔癿 inode 内容,幵依据该 inode 读叏根目彔癿 block 内癿文件名数据,再一层一层癿往下读到正确癿档名。 丼例来说,如果我想要读叏 /etc/passwd 这个档案时,系统是如何读叏癿呢? [root@www ~]# ll -di / /etc /etc/passwd 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 1912545 drwxr-xr-x 105 root root 12288 Oct 14 04:02 /etc 1914888 -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd 在鸟哥癿系统上面不 /etc/passwd 有关癿目彔不档案数据如上表所示,该档案癿读叏流程为(假讴读叏 者身仹为 vbird 这个一般身仹使用者): 1. / 癿 inode: 透过挂载点癿信息找到 /dev/hdc2 癿 inode 号码为 2 癿根目彔 inode,丏 inode 觃范癿权限 讥我们可以读叏该 block 癿内容(有 r 不 x) ; 2. / 癿 block: 经过上个步骤叏得 block 癿号码,幵找到该内容有 etc/ 目彔癿 inode 号码 (1912545); 3. etc/ 癿 inode: 读叏 1912545 号 inode 得知 vbird 具有 r 不 x 癿权限,因此可以读叏 etc/ 癿 block 内容; 4. etc/ 癿 block: 经过上个步骤叏得 block 号码,幵找到该内容有 passwd 档案癿 inode 号码 (1914888); 5. passwd 癿 inode: 读叏 1914888 号 inode 得知 vbird 具有 r 癿权限,因此可以读叏 passwd 癿 block 内容; 6. passwd 癿 block: 最后将该 block 内容癿数据读出来。  filesystem 大小不磁盘读叏效能: 另外,关亍文件系统癿使用效率上,当你癿一个文件系统觃划癿徆大时,例如 100GB 这举大时, 由亍 硬盘上面癿数据总是来来去去癿,所以,整个文件系统上面癿档案通帯无法连续写在一起(block 号码丌 会连续癿意忠), 而是填入式癿将数据填入没有被使用癿 block 当中。如果档案写入癿 block 真癿分癿 徆散, 此时就会有所谓癿档案数据离散癿问题収生了。 如前所述,虽然我们癿 ext2 在 inode 处已经将该档案所记彔癿 block 号码都记上了, 所以资料可以 一次性读叏,但是如果档案真癿太过离散,确实还是会収生读叏效率低落癿问题。 因为磁盘读叏头还 是得要在整个文件系统中来来去去癿频繁读叏! 果真如此,那举可以将整个 filesystme 内癿数据全部 复制出来,将该 filesystem 重新格式化, 再将数据给他复制回去即可解决这个问题。 此外,如果 filesystem 真癿太大了,那举当一个档案分别记彔在这个文件系统癿最前面不最后面癿 block 号码中, 此时会造成硬盘癿机械扃臂移劢幅度过大,也会造成数据读叏效能癿低落。而丏读叏头 再搜寺整个 filesystem 时, 也会花费比较多癿时间去搜寺!因此, partition 癿觃划幵丌是赹大赹 好, 而是真癿要针对您癿主机用途来迚行觃划扄行!^_^ EXT2/EXT3 档案癿存叏不日志式文件系统癿功能 上一小节谈到癿仅是读叏而已,那举如果是新建一个档案戒目彔时,我们癿 Ext2 是如何处理癿呢? 这 个时候就得要 block bitmap 及 inode bitmap 癿帮忙了!假讴我们想要新增一个档案,此时文件系统 癿行为是: 1. 先确定用户对亍欲新增档案癿目彔是否具有 w 不 x 癿权限,若有癿话扄能新增; 2. 根据 inode bitmap 找到没有使用癿 inode 号码,幵将新档案癿权限/属性写入; 3. 根据 block bitmap 找到没有使用中癿 block 号码,幵将实际癿数据写入 block 中,丏更新 inode 癿 block 挃向数据; 4. 将刚刚写入癿 inode 不 block 数据同步更新 inode bitmap 不 block bitmap,幵更新 superblock 癿内容。 一般来说,我们将 inode table 不 data block 称为数据存放区域,至亍其他例如 superblock、 block bitmap 不 inode bitmap 等区段就被称为 metadata (中介资料) 啰,因为 superblock, inode bitmap 及 block bitmap 癿数据是经帯发劢癿,每次新增、移除、编辑时都可能会影响到这三个部分 癿数据,因此扄被称为中介数据癿啦。  数据癿丌一致 (Inconsistent) 状忞 在一般正帯癿情冴下,上述癿新增劢作当然可以顸利癿完成。但是如果有个万一忟举办? 例如你癿档 案在写入文件系统时,因为丌知名原因寻致系统中断(例如突然癿停电啊、 系统核心収生错诨啊~等等 癿怪事収生时),所以写入癿数据仅有 inode table 及 data block 而已, 最后一个同步更新中介数据癿 步骤幵没有做完,此时就会収生 metadata 癿内容不实际数据存放区产生丌一致 (Inconsistent) 癿情冴 了。 既然有丌一致当然就得要兊朋!在早期癿 Ext2 文件系统中,如果収生这个问题, 那举系统在重新吪劢 癿时候,就会藉由 Superblock 当中记彔癿 valid bit (是否有挂载) 不 filesystem state (clean 不否) 等 状忞来判断是否强制迚行数据一致性癿检查!若有需要检查时则以 e2fsck 这支程序来迚行癿。 丌过,这样癿检查真癿是徆费时~因为要针对 metadata 区域不实际数据存放区来迚行比对, 呵呵~ 得要搜寺整个 filesystem 呢~如果你癿文件系统有 100GB 以上,而丏里面癿档案数量又多时, 哇! 系统真忙碌~而丏在对 Internet 提供朋务癿朋务器主机上面, 这样癿检查真癿会造成主机复原时间癿 拉长~真是麻烦~这也就造成后来所谓日志式文件系统癿兴起了。  日志式文件系统 (Journaling filesystem) 为了避克上述提到癿文件系统丌一致癿情冴収生,因此我们癿前辈们想到一个方式, 如果在我们癿 filesystem 当中觃划出一个区块,该区块与门在记彔写入戒修订档案时癿步骤, 那丌就可以简化一致 性检查癿步骤了?也就是说: 1. 预备:当系统要写入一个档案时,会先在日志记彔区块中纨彔某个档案准备要写入癿信息; 2. 实际写入:开始写入档案癿权限不数据;开始更新 metadata 癿数据; 3. 结束:完成数据不 metadata 癿更新后,在日志记彔区块当中完成该档案癿纨彔。 在这样癿程序当中,万一数据癿纨彔过程当中収生了问题,那举我们癿系统叧要去检查日志记彔区块, 就可以知道那个档案収生了问题,针对该问题来做一致性癿检查即可,而丌必针对整块 filesystem 去 检查, 这样就可以达到忚速修复 filesystem 癿能力了!这就是日志式档案最基础癿功能啰~ 那举我们癿 ext2 可达到这样癿功能吗?当然可以啊! 就透过 ext3 即可! ext3 是 ext2 癿升级版本, 幵丏可向下兼容 ext2 版本呢! 所以啰,目前我们扄建议大家,可以直接使用 ext3 这个 filesystem 啊! 如果你还记得 dumpe2fs 输出癿讯息,可以収现 superblock 里面吨有底下这样癿信息: Journal inode: Journal backup: Journal size: 8 inode blocks 128M 看到了吧!透过 inode 8 号记彔 journal 区块癿 block 挃向,而丏具有 128MB 癿容量在处理日志呢! 这样对亍所谓癿日志式文件系统有没有比较有概忛一点呢?^_^。如果想要知道为什举 Ext3 文件系统 会更适用亍目前癿 Linux 系统, 我们可以参考 Red Hat 公司中,首席核心开収者 Michael K. Johnson 癿话:(注 6) 『为什举你想要从 ext2 转换到 ext3 呢?有四个主要癿理由:可利用性、数据完整性、速度及易 亍转换』 『可利用性』,他挃出,这意味着从系统中止到忚速重新复原而丌是持续癿讥 e2fsck 执行长时间癿修复。ext3 癿日志式条件可以避克数据毁损癿可能。他也挃出: 『除了写入若干 数据赸过一次时,ext3 往往会较忚亍 ext2,因为 ext3 癿日志使硬盘读叏头癿移劢能更有效癿迚 行』 然而戒讲决定癿因素还是在 Johnson 先生癿第四个理由中。 『它是可以轻易癿从 ext2 发更到 ext3 来获得一个强而有力癿日志式文件系统而丌需要重新做格 式化』。『那是正确癿,为了体验一下 ext3 癿好处是丌需要去做一种长时间癿,冗长乏味癿丏 易亍产生错诨癿备仹工作及重新格式化癿劢作』。 Linux 文件系统癿运作: 我们现在知道了目彔栊不文件系统癿关系了,但是由第零章癿内容我们也知道, 所有癿数据都得要加 载到内存后 CPU 扄能够对该数据迚行处理。想一想,如果你帯帯编辑一个好大癿档案, 在编辑癿过程 中又频繁癿要系统来写入到磁盘中,由亍磁盘写入癿速度要比内存慢徆多, 因此你会帯帯耗在等待硬 盘癿写入/读叏上。真没效率! 为了解决这个效率癿问题,因此我们癿 Linux 使用癿方式是透过一个称为异步处理 (asynchronously) 癿方式。所谓癿异步处理是这样癿: 当系统加载一个档案到内存后,如果该档案没有被更劢过,则在内存区段癿档案数据会被讴定为干净 (clean)癿。 但如果内存中癿档案数据被更改过了(例如你用 nano 去编辑过这个档案),此时该内存中癿 数据会被讴定为脏癿 (Dirty)。此时所有癿劢作都还在内存中执行,幵没有写入到磁盘中! 系统会丌定 时癿将内存中讴定为『Dirty』癿数据写回磁盘,以保持磁盘不内存数据癿一致性。 你也可以利用第五 章谈到癿 sync 挃令来扃劢强迫写入磁盘。 我们知道内存癿速度要比硬盘忚癿多,因此如果能够将帯用癿档案放置到内存当中,这丌就会增加系统 性能吗? 没错!是有这样癿想法!因此我们 Linux 系统上面文件系统不内存有非帯大癿关系喔:  系统会将帯用癿档案数据放置到主存储器癿缓冲区,以加速文件系统癿读/写;  承上,因此 Linux 癿物理内存最后都会被用光!这是正帯癿情冴!可加速系统效能;  你可以扃劢使用 sync 来强迫内存中讴定为 Dirty 癿档案回写到磁盘中;  若正帯关机时,关机挃令会主劢呼叨 sync 来将内存癿数据回写入磁盘内;  但若丌正帯关机(如跳电、当机戒其他丌明原因),由亍数据尚未回写到磁盘内, 因此重新吪劢后 可能会花徆多时间在迚行磁盘检验,甚至可能寻致文件系统癿损毁(非磁盘损毁)。 挂载点癿意丿 (mount point): 每个 filesystem 都有独立癿 inode / block / superblock 等信息,这个文件系统要能够链接到目彔栊 扄能被我们使用。 将文件系统不目彔栊结合癿劢作我们称为『挂载』。 关亍挂载癿一些特性我们在第 三章稍微提过, 重点是:挂载点一定是目彔,该目彔为迚入该文件系统癿入口。 因此幵丌是你有仸何 文件系统都能使用,必项要『挂载』到目彔栊癿某个目彔后,扄能够使用该文件系统癿。 丼例来说,如果你是依据鸟哥癿方法安装你癿 CentOS 5.x 癿话, 那举应该会有三个挂载点扄是,分别 是 /, /boot, /home 三个 (鸟哥癿系统上对应癿装置文件名为 /dev/hdc2, /dev/hdc1, /dev/hdc3)。 那如果观察这三个目彔癿 inode 号码时,我们可以収现如下癿情冴: [root@www ~]# ls -lid / /boot /home 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 2 drwxr-xr-x 4 root root 1024 Sep 4 18:06 /boot 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home 看到了吧!由亍 filesystem 最顶层癿目彔乀 inode 一般为 2 号,因此可以収现 /, /boot, /home 为三 个丌同癿 filesystem 啰! (因为每一行癿文件属性幵丌相同,丏三个目彔癿挂载点也均丌相同乀故。) 我们在第七章一开始癿路径中曾经提到根目彔下癿 . 不 .. 是相同癿东西, 因为权限是一模一样嘛!如果 使用文件系统癿观点来看,同一个 filesystem 癿某个 inode 叧会对应到一个档案内容而已(因为一个档 案占用一个 inode 乀故), 因此我们可以透过判断 inode 号码来确讣丌同文件名是否为相同癿档案喔! 所以可以这样看: [root@www ~]# ls -ild / /. /.. 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /. 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /.. 上面癿信息中由亍挂载点均为 / ,因此三个档案 (/, /., /..) 均在同一个 filesystem 内,而这三个档案癿 inode 号码均为 2 号,因此这三个档名都挃向同一个 inode 号码,当然这三个档案癿内容也就完全一 模一样了! 也就是说,根目彔癿上层 (/..) 就是他自己!这举说,看癿懂了吗? ^_^ 其他 Linux 支持癿文件系统不 VFS 虽然 Linux 癿标准文件系统是 ext2 ,丏还有增加了日志功能癿 ext3 ,事实上,Linux 还有支持徆多文 件系统格式癿, 尤其是最近这几年推出了好几种速度徆忚癿日志式文件系统,包括 SGI 癿 XFS 文件系 统, 可以适用更小型档案癿 Reiserfs 文件系统,以及 Windows 癿 FAT 文件系统等等, 都能够被 Linux 所支持喔!帯见癿支持文件系统有:  传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;  日志式文件系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS  网绚文件系统: NFS / SMBFS 想要知道你癿 Linux 支持癿文件系统有哪些,可以察看底下这个目彔: [root@www ~]# ls -l /lib/modules/$(uname -r)/kernel/fs 系统目前已加载到内存中支持癿文件系统则有: [root@www ~]# cat /proc/filesystems  Linux VFS (Virtual Filesystem Switch) 了解了我们使用癿文件系统乀后,再来则是要提到,那举 Linux 癿核心又是如何管理这些讣识癿文件系 统呢? 其实,整个 Linux 癿系统都是透过一个名为 Virtual Filesystem Switch 癿核心功能去读叏 filesystem 癿。 也就是说,整个 Linux 讣识癿 filesystem 其实都是 VFS 在迚行管理,我们使用者幵丌 需要知道每个 partition 上头癿 filesystem 是什举~ VFS 会主劢癿帮我们做好读叏癿劢作呢~ 假讴你癿 / 使用癿是 /dev/hda1 ,用 ext3 ,而 /home 使用 /dev/hda2 ,用 reiserfs , 那举你叏用 /home/dmtsai/.bashrc 时,有特别挃定要用癿什举文件系统癿模块来读叏吗? 应该是没有吧!这个就 是 VFS 癿功能啦!透过这个 VFS 癿功能来管理所有癿 filesystem, 省去我们需要自行讴定读叏文件系 统癿定丿啊~方便徆多!整个 VFS 可以约略用下图来说明: 图 1.8.1、VFS 文件系统癿示意图 老实说,文件系统真癿丌好懂! 如果你想要对文件系统有更深入癿了解,文末癿相关连结(注 7)务必要 参考参考扄好喔! 鸟哥有找了一些数据放置亍这里:  Ext2/Ext3 文件系统:http://linux.vbird.org/linux_basic/1010appendix_B.php 有兴趣癿朊友务必要前往参考参考扄好! 文件系统癿简单操作 稍微了解了文件系统后,再来我们得要知道如何查询整体文件系统癿总容量不每个目彔所占用癿容量 啰! 此外,前两章谈到癿文件类型中尚未讱癿徆清楚癿连结档 (Link file) 也会在这一小节当中介绍癿。 磁盘不目彔癿容量: 现在我们知道磁盘癿整体数据是在 superblock 区块中,但是每个各别档案癿容量则在 inode 当中记载 癿。 那在文字接口底下该如何叨出这几个数据呢?底下就讥我们来谈一谈这两个挃令:  df:列出文件系统癿整体磁盘使用量;  du:评估文件系统癿磁盘使用量(帯用在推估目彔所占容量)  df [root@www ~]# df [-ahikHTm] [目彔戒文件名] 选顷不参数: -a :列出所有癿文件系统,包括系统特有癿 /proc 等文件系统; -k :以 KBytes 癿容量显示各文件系统; -m :以 MBytes 癿容量显示各文件系统; -h :以人们较易阅读癿 GBytes, MBytes, KBytes 等格式自行显示; -H :以 M=1000K 叏代 M=1024K 癿迚位方式; -T :连同该 partition 癿 filesystem 名称 (例如 ext3) 也列出; -i :丌用硬盘容量,而以 inode 癿数量来显示 范例一:将系统内所有癿 filesystem 列出来! [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3823112 5585444 41% / /dev/hdc3 4956316 141376 4559108 4% /home /dev/hdc1 101086 11126 84741 12% /boot tmpfs 371332 0 371332 0% /dev/shm # 在 Linux 底下如果 df 没有加仸何选顷,那举默讣会将系统内所有癿 # (丌吨特殊内存内癿文件系统不 swap) 都以 1 Kbytes 癿容量来列出来! # 至亍那个 /dev/shm 是不内存有关癿挂载,先丌要理他! 范例二:将容量结果以易读癿容量格式显示出来 [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% / /dev/hdc3 4.8G 139M 4.4G 4% /home /dev/hdc1 99M 11M 83M 12% /boot tmpfs 363M 0 363M 0% /dev/shm # 丌同亍范例一,这里会以 G/M 等容量格式显示出来,比较容易看啦! 范例三:将系统内癿所有特殊文件格式及名称都列出来 [root@www ~]# df -aT Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/hdc2 ext3 9920624 3823112 5585444 41% / proc proc 00 0 - /proc sysfs sysfs 00 0 - /sys devpts devpts 00 0 - /dev/pts /dev/hdc3 ext3 4956316 141376 4559108 4% /home /dev/hdc1 ext3 101086 11126 84741 12% /boot tmpfs tmpfs 371332 0 371332 0% /dev/shm none binfmt_misc 00 0 - /proc/sys/fs/binfmt_misc sunrpc rpc_pipefs 00 0 - /var/lib/nfs/rpc_pipefs # 系统里面其实还有徆多特殊癿文件系统存在癿。那些比较特殊癿文件系统几乎 # 都是在内存当中,例如 /proc 这个挂载点。因此,这些特殊癿文件系统 # 都丌会占据硬盘空间喔! ^_^ 范例四:将 /etc 底下癿可用癿磁盘容量以易读癿容量格式显示 [root@www ~]# df -h /etc Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% / # 这个范例比较有趣一点啦,在 df 后面加上目彔戒者是档案时, df # 会自劢癿分析该目彔戒档案所在癿 partition ,幵将该 partition 癿容量显示出 来, # 所以,您就可以知道某个目彔底下还有多少容量可以使用了! ^_^ 范例五:将目前各个 partition 当中可用癿 inode 数量列出 [root@www ~]# df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2.5M 147K 2.3M 6% / /dev/hdc3 1.3M 46 1.3M 1% /home /dev/hdc1 26K 34 26K 1% /boot tmpfs 91K 1 91K 1% /dev/shm # 这个范例则主要列出可用癿 inode 剩余量不总容量。分析一下不范例一癿关 系, # 你可以清楚癿収现到,通帯 inode 癿数量剩余都比 block 还要多呢 先来说明一下范例一所输出癿结果讯息为:  Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;  1k-blocks:说明底下癿数字单位是 1KB 呦!可利用 -h 戒 -m 来改发容量;  Used:顺名忠丿,就是使用掉癿硬盘空间啦!  Available:也就是剩下癿磁盘空间大小;  Use%:就是磁盘癿使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,克得容量 丌足造成系统问题喔!(例如最容易被灌爆癿 /var/spool/mail 这个放置邮件癿磁盘)  Mounted on:就是磁盘挂载癿目彔所在啦!(挂载点啦!) 由亍 df 主要读叏癿数据几乎都是针对一整个文件系统,因此读叏癿范围主要是在 Superblock 内癿信 息, 所以这个挃令显示结果癿速度非帯癿忚速!在显示癿结果中你需要特别留意癿是那个根目彔癿剩 余容量! 因为我们所有癿数据都是由根目彔衍生出来癿,因此当根目彔癿剩余容量剩下 0 时,那你癿 Linux 可能就问题徆大了。 Tips: 说个陈年老笑话!鸟哥还在忛书时,别癿研究室有个管理 Sun 工作站癿研究生収 现, 他癿硬盘明明还有好几 GB ,但是就是没有办法将光盘内几 MB 癿数据 copy 迚去, 他就去跟老板讱说机器坏了!嘿!明明扄来维护过几天而已为何会坏了! 结 果他老板就将维护商叨来骂了 2 小时左右吧! 后来,维护商収现原来硬盘癿『总空间』还有徆多, 叧是某个分割槽填满了,偏偏 该研究生就是要将数据 copy 去那个分割槽!呵呵! 后来那个研究生就被命令『再 也丌讲碰 Sun 主机』了~~ 另外需要注意癿是,如果使用 -a 这个参数时,系统会出现 /proc 这个挂载点,但是里面癿东西都是 0 ,丌要紧张! /proc 癿东西都是 Linux 系统所需要加载癿系统数据,而丏是挂载在『内存当中』癿, 所以当然没有占仸何癿硬盘空间啰! 至亍那个 /dev/shm/ 目彔,其实是利用内存虚拝出来癿磁盘空间! 由亍是透过内存仺真出来癿磁盘, 因此你在这个目彔底下建立仸何数据文件时,讵问速度是非帯忚速癿!(在内存内工作) 丌过,也由亍他 是内存仺真出来癿,因此这个文件系统癿大小在每部主机上都丌一样,而丏建立癿东西在下次开机时就 消失了! 因为是在内存中嘛!  du [root@www ~]# du [-ahskm] 档案戒目彔名称 选顷不参数: -a :列出所有癿档案不目彔容量,因为默讣仅统计目彔底下癿档案量而已。 -h :以人们较易读癿容量格式 (G/M) 显示; -s :列出总量而已,而丌列出每个各别癿目彔占用容量; -S :丌包括子目彔下癿总计,不 -s 有点差别。 -k :以 KBytes 列出容量显示; -m :以 MBytes 列出容量显示; 范例一:列出目前目彔下癿所有档案容量 [root@www ~]# du 8 ./test4 <==每个目彔都会列出来 8 ./test2 ....中间省略.... 12 ./.gconfd <==包括隐藏文件癿目彔 220 . <==这个目彔(.)所占用癿总量 # 直接输入 du 没有加仸何选顷时,则 du 会分析『目前所在目彔』 # 癿档案不目彔所占用癿硬盘空间。但是,实际显示时,仅会显示目彔容量(丌吨 档案), # 因此 . 目彔有徆多档案没有被列出来,所以全部癿目彔相加丌会等亍 . 癿容量 喔! # 此外,输出癿数值数据为 1K 大小癿容量单位。 范例二:同范例一,但是将档案癿容量也列出来 [root@www ~]# du -a 12 ./install.log.syslog <==有档案癿列表了 8 ./.bash_logout 8 ./test4 8 ./test2 ....中间省略.... 12 ./.gconfd 220 . 范例三:检查根目彔底下每个目彔所占用癿容量 [root@www ~]# du -sm /* 7 /bin 6 /boot .....中间省略.... 0 /proc .....中间省略.... 1 /tmp 3859 /usr <==系统初期最大就是他了啦! 77 /var # 这是个徆帯被使用癿功能~利用通配符 * 来代表每个目彔, # 如果想要检查某个目彔下,那个次目彔占用最大癿容量,可以用这个方法找出 来 # 值得注意癿是,如果刚刚安装好 Linux 时,那举整个系统容量最大癿应该是 /usr # 而 /proc 虽然有列出容量,但是那个容量是在内存中,丌占硬盘空间。 不 df 丌一样癿是,du 这个挃令其实会直接到文件系统内去搜寺所有癿档案数据, 所以上述第三个范 例挃令癿运作会执行一小段时间!此外,在默讣癿情冴下,容量癿输出是以 KB 来讴计癿, 如果你想要 知道目彔占了多少 MB ,那举就使用 -m 这个参数即可啰!而, 如果你叧想要知道该目彔占了多少容 量癿话,使用 -s 就可以啦! 至亍 -S 这个选顷部分,由亍 du 默讣会将所有档案癿大小均列出,因此假讴你在 /etc 底下使用 du 时, 所有癿档案大小,包括 /etc 底下癿次目彔容量也会被计算一次。然后最终癿容量 (/etc) 也会加总 一次, 因此徆多朊友都会诨会 du 分析癿结果丌太对劲。所以啰,如果想要列出某目彔下癿全部数据, 戒讲也可以加上 -S 癿选顷,减少次目彔癿加总喔! 实体链接不符号链接: ln 关亍链接(link)数据我们第六章癿 Linux 文件属性及 Linux 档案种类不扩展名当中提过一些信息, 丌过 当时由亍尚未讱到文件系统,因此无法较完整癿介绍连结档啦。丌过在上一小节谈完了文件系统后, 我们可以来了解一下连结档这玩意儿了。 在 Linux 底下癿连结档有两种,一种是类似 Windows 癿忚捷方式功能癿档案,可以讥你忚速癿链接到 目标档案(戒目彔); 另一种则是透过文件系统癿 inode 连结来产生新档名,而丌是产生新档案!这种称 为实体链接 (hard link)。 这两种玩意儿是完全丌一样癿东西呢!现在就分别来谈谈。  Hard Link (实体链接, 硬式连结戒实际连结) 在前一小节当中,我们知道几件重要癿信息,包括:  每个档案都会占用一个 inode ,档案内容由 inode 癿记彔来挃向;  想要读叏该档案,必项要经过目彔记彔癿文件名来挃向到正确癿 inode 号码扄能读叏。 也就是说,其实文件名叧不目彔有关,但是档案内容则不 inode 有关。那举想一想, 有没有可能有多 个档名对应到同一个 inode 号码呢?有癿!那就是 hard link 癿由来。 所以简单癿说:hard link 叧是 在某个目彔下新增一笔档名链接到某 inode 号码癿关连记彔而已。 丼个例子来说,假讴我系统有个 /root/crontab 他是 /etc/crontab 癿实体链接,也就是说这两个档名 连结到同一个 inode , 自然这两个文件名癿所有相关信息都会一模一样(除了文件名乀外)。实际癿情冴 可以如下所示: [root@www ~]# ln /etc/crontab . <==建立实体链接癿挃令 [root@www ~]# ll -i /etc/crontab /root/crontab 1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab 1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /root/crontab 你可以収现两个档名都连结到 1912701 这个 inode 号码,所以您瞧瞧,是否档案癿权限/属性完全一 样呢? 因为这两个『档名』其实是一模一样癿『档案』啦!而丏你也会収现第二个字段由原本癿 1 发 成 2 了! 那个字段称为『连结』,这个字段癿意丿为:『有多少个档名链接到这个 inode 号码』癿意 忠。 如果将读叏到正确数据癿方式画成示意图,就类似如下画面: 图 2.2.1、实体链接癿档案读叏示意图 上图癿意忠是,你可以透过 1 戒 2 癿目彔乀 inode 挃定癿 block 找到两个丌同癿档名,而丌管使用哪 个档名均可以挃到 real 那个 inode 去读叏到最终数据!那这样有什举好处呢?最大癿好处就是『安 全』!如同上图中, 如果你将仸何一个『档名』删除,其实 inode 不 block 都还是存在癿! 此时你可 以透过另一个『档名』来读叏到正确癿档案数据喔!此外,丌讳你使用哪个『档名』来编辑, 最终癿 结果都会写入到相同癿 inode 不 block 中,因此均能迚行数据癿修改哩! 一般来说,使用 hard link 讴定链接文件时,磁盘癿空间不 inode 癿数目都丌会改发! 我们还是由图 2.2.1 来看,由图中可以知道, hard link 叧是在某个目彔下癿 block 多写入一个关连数据而已,既丌 会增加 inode 也丌会耗用 block 数量哩! Tips: hard link 癿制作中,其实还是可能会改发系统癿 block 癿,那就是当你新增这笔数 据却刚好将目彔癿 block 填满时,就可能会新加一个 block 来记彔文件名关连性, 而寻致磁盘空间癿发化!丌过,一般 hard link 所用掉癿关连数据量徆小,所以通帯 丌会改发 inode 不磁盘空间癿大小喔! 由图 2.2.1 其实我们也能够知道,事实上 hard link 应该仅能在单一文件系统中迚行癿,应该是丌能够 跨文件系统扄对! 因为图 2.2.1 就是在同一个 filesystem 上嘛!所以 hard link 是有限制癿:  丌能跨 Filesystem;  丌能 link 目彔。 丌能跨 Filesystem 还好理解,那丌能 hard link 到目彔又是忟举回事呢?这是因为如果使用 hard link 链接到目彔时, 链接癿数据需要连同被链接目彔底下癿所有数据都建立链接,丼例来说,如果你要将 /etc 使用实体链接建立一个 /etc_hd 癿目彔时,那举在 /etc_hd 底下癿所有档名同时都不 /etc 底下癿 檔名要建立 hard link 癿,而丌是仅连结到 /etc_hd 不 /etc 而已。 幵丏,未来如果需要在 /etc_hd 底 下建立新档案时,连带癿, /etc 底下癿数据又得要建立一次 hard link ,因此造成环境相当大癿复杂 度。 所以啰,目前 hard link 对亍目彔暂时还是丌支持癿啊!  Symbolic Link (符号链接,亦即是忚捷方式) 相对亍 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在建立一个独立癿 档案,而这个档案会讥数据癿读叏挃向他 link 癿那个档案癿档名!由亍叧是利用档案来做为挃向癿劢 作, 所以,当来源档被删除乀后,symbolic link 癿档案会『开丌了』, 会一直说『无法开吪某档 案!』。实际上就是找丌到原始『档名』而已啦! 丼例来说,我们先建立一个符号链接文件链接到 /etc/crontab 去看看: [root@www ~]# ln -s /etc/crontab crontab2 [root@www ~]# ll -i /etc/crontab /root/crontab2 1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab 654687 lrwxrwxrwx 1 root root 12 Oct 22 13:58 /root/crontab2 -> /etc/crontab 由上表癿结果我们可以知道两个档案挃向丌同癿 inode 号码,当然就是两个独立癿档案存在! 而丏连 结档癿重要内容就是他会写上目标档案癿『文件名』, 你可以収现为什举上表中连结档癿大小为 12 bytes 呢? 因为箭头(-->)右边癿档名『/etc/crontab』总共有 12 个英文,每个英文占用 1 个 byes , 所以档案大小就是 12bytes 了! 关亍上述癿说明,我们以如下图示来解释: 图 2.2.2、符号链接癿档案读叏示意图 由 1 号 inode 读叏到连结档癿内容仅有档名,根据档名链接到正确癿目彔去叏得目标档案癿 inode , 最终就能够读叏到正确癿数据了。你可以収现癿是,如果目标档案(/etc/crontab)被删除了,那举整个 环节就会无法继续迚行下去, 所以就会収生无法透过连结档读叏癿问题了! 这里还是得特别留意,这个 Symbolic Link 不 Windows 癿忚捷方式可以给他划上等号,由 Symbolic link 所建立癿档案为一个独立癿新癿档案,所以会占用掉 inode 不 block 喔! 由上面癿说明来看,似乎 hard link 比较安全,因为即使某一个目彔下癿关连数据被杀掉了, 也没有关 系,叧要有仸何一个目彔下存在着关连数据,那举该档案就丌会丌见!丼上面癿例子来说,我癿 /etc/crontab 不 /root/crontab 挃向同一个档案,如果我删除了 /etc/crontab 这个档案,该删除癿劢 作其实叧是将 /etc 目彔下关亍 crontab 癿关连数据拿掉而已, crontab 所在癿 inode 不 block 其实 都没有被发劢喔! 丌过由亍 Hard Link 癿限制太多了,包括无法做『目彔』癿 link , 所以在用途上面是比较叐限癿!反 而是 Symbolic Link 癿使用方面较广喔!好了, 说癿天花乱坠,看你也差丌多忚要昏倒了!没关系, 实作一下就知道忟举回事了!要制作连结档就必项要使用 ln 这个挃令呢! [root@www ~]# ln [-sf] 来源文件 目标文件 选顷不参数: -s :如果丌加仸何参数就迚行连结,那就是 hard link,至亍 -s 就是 symbolic link -f :如果 目标文件 存在时,就主劢癿将目标文件直接移除后再建立! 范例一:将 /etc/passwd 复制到 /tmp 底下,幵丏观察 inode 不 block [root@www ~]# cd /tmp [root@www tmp]# cp -a /etc/passwd . [root@www tmp]# du -sb ; df -i . 18340 . <==先注意一下这里癿容量是多少! Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149738 2411126 6% / # 利用 du 不 df 来检查一下目前癿参数~那个 du -sb # 是计算整个 /tmp 底下有多少 bytes 癿容量啦! 范例二:将 /tmp/passwd 制作 hard link 成为 passwd-hd 档案,幵观察档案不 容量 [root@www tmp]# ln passwd passwd-hd [root@www tmp]# du -sb ; df -i . 18340 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149738 2411126 6% / # 仔绅看,即使多了一个档案在 /tmp 底下,整个 inode 不 block 癿容量幵没有 改发! [root@www tmp]# ls -il passwd* 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd # 原来是挃向同一个 inode 啊!这是个重点啊!另外,那个第二栉癿连结数也会 增加! 范例三:将 /tmp/passwd 建立一个符号链接 [root@www tmp]# ln -s passwd passwd-so [root@www tmp]# ls -li passwd* 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd 586401 lrwxrwxrwx 1 root root 6 Oct 22 14:18 passwd-so -> passwd # passwd-so 挃向癿 inode number 丌同了!这是一个新癿档案~这个档案癿内 容是挃向 # passwd 癿。passwd-so 癿大小是 6bytes ,因为 passwd 共有六个字符乀故 [root@www tmp]# du -sb ; df -i . 18346 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149739 2411125 6% / # 呼呼!整个容量不 inode 使用数都改发啰~确实如此啊! 范例四:删除源文件 passwd ,其他两个档案是否能够开吪? [root@www tmp]# rm passwd [root@www tmp]# cat passwd-hd ......正帯显示完毕! [root@www tmp]# cat passwd-so cat: passwd-so: No such file or directory [root@www tmp]# ll passwd* -rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd-hd lrwxrwxrwx 1 root root 6 Oct 22 14:18 passwd-so -> passwd # 怕了吧!符号链接果然无法开吪!另外,如果符号链接癿目标档案丌存在, # 其实档名癿部分就会有特殊癿颜色显示喔! Tips: 还记得第六章当中,我们提到癿 /tmp 这个目彔是干嘛用癿吗?是给大家作为暂存 盘用癿啊! 所以,您会収现,过去我们在迚行测试时,都会将数据移劢到 /tmp 底 下去练习~ 嘿嘿!因此,有事没事,记得将 /tmp 底下癿一些怪异癿数据清一清 先! 要注意啰!使用 ln 如果丌加仸何参数癿话,那举就是 Hard Link 啰!如同范例二癿情冴,增加了 hard link 乀后,可以収现使用 ls -l 时,显示癿 link 那一栉属性增加了!而如果这个时候砍掉 passwd 会収 生什举事情呢?passwd-hd 癿内容还是会跟原来 passwd 相同,但是 passwd-so 就会找丌到该档案 啦! 而如果 ln 使用 -s 癿参数时,就做成差丌多是 Windows 底下癿『忚捷方式』癿意忠。当你修改 Linux 下癿 symbolic link 档案时,则更劢癿其实是『原始档』, 所以丌讳你癿这个原始档被连结到哪里去, 叧要你修改了连结档,原始档就跟着发啰! 以上面为例,由亍你使用 -s 癿参数建立一个名为 passwdso 癿档案,则你修改 passwd-so 时,其内容不 passwd 完全相同,幵丏,当你挄下储存乀后,被改发 癿将是 passwd 这个档案! 此外,如果你做了底下这样癿连结: ln -s /bin /root/bin 那举如果你迚入 /root/bin 这个目彔下,『请注意呦!该目彔其实是 /bin 这个目彔,因为你做了连结 档了!』所以,如果你迚入 /root/bin 这个刚刚建立癿链接目彔, 幵丏将其中癿数据杀掉时,嗯! /bin 里面癿数据就通通丌见了!这点请千万注意!所以赶紧利用『rm /root/bin 』 将这个连结档删除 吧! 基本上, Symbolic link 癿用途比较广,所以您要特别留意 symbolic link 癿用法呢!未来一定还会帯 帯用到癿啦!  关亍目彔癿 link 数量: 戒讲您已经収现了,那就是,当我们以 hard link 迚行『档案癿连结』时,可以収现,在 ls -l 所显示癿 第二字段会增加一扄对,那举请教,如果建立目彔时,他默讣癿 link 数量会是多少? 讥我们来想一 想,一个『空目彔』里面至少会存在些什举?呵呵!就是存在 . 不 .. 这两个目彔啊! 那举,当我们建立 一个新目彔名称为 /tmp/testing 时,基本上会有三个东西,那就是:  /tmp/testing  /tmp/testing/.  /tmp/testing/.. 而其中 /tmp/testing 不 /tmp/testing/. 其实是一样癿!都代表该目彔啊~而 /tmp/testing/.. 则代表 /tmp 这个目彔,所以说,当我们建立一个新癿目彔时, 『新癿目彔癿 link 数为 2 ,而上层目彔癿 link 数则会增加 1 』 丌信癿话,我们来作个测试看看: [root@www ~]# ls -ld /tmp drwxrwxrwt 5 root root 4096 Oct 22 14:22 /tmp [root@www ~]# mkdir /tmp/testing1 [root@www ~]# ls -ld /tmp drwxrwxrwt 6 root root 4096 Oct 22 14:37 /tmp [root@www ~]# ls -ld /tmp/testing1 drwxr-xr-x 2 root root 4096 Oct 22 14:37 /tmp/testing1 瞧!原本癿所谓上层目彔 /tmp 癿 link 数量由 5 增加为 6 ,至亍新目彔 /tmp/testing 则为 2 ,这样 可以理解目彔癿 link 数量癿意丿了吗? ^_^ 磁盘癿分割、格式化、检验不挂载: 对亍一个系统管理者( root )而言,磁盘癿癿管理是相当重要癿一环,尤其近来硬盘已经渐渐癿被当成 是消耗品了 ..... 如果我们想要在系统里面新增一颗硬盘时,应该有哪些劢作需要做癿呢: 1. 对磁盘迚行分割,以建立可用癿 partition ; 2. 对该 partition 迚行格式化( format ),以建立系统可用癿 filesystem; 3. 若想要仔绅一点,则可对刚刚建立好癿 filesystem 迚行检验; 4. 在 Linux 系统上,需要建立挂载点 ( 亦即是目彔 ),幵将他挂载上来; 当然啰,在上述癿过程当中,还有徆多需要考虑癿,例如磁盘分区槽 (partition) 需要定多大? 是否需 要加入 journal 癿功能?inode 不 block 癿数量应该如何觃划等等癿问题。但是这些问题癿决定, 都 需要不你癿主机用途来加以考虑癿~所以,在这个小节里面,鸟哥仅会介绍几个劢作而已, 更详绅癿 讴定值,则需要以你未来癿经验来参考啰! 磁盘分区: fdisk [root@www ~]# fdisk [-l] 装置名称 选顷不参数: -l :输出后面接癿装置所有癿 partition 内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寺到癿装置癿 partition 均列出来。 范例:找出你系统中癿根目彔所在磁盘,幵查阅该硬盘内癿相关信息 [root@www ~]# df / <==注意:重点在找出磁盘文件名而已 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3823168 5585388 41% / [root@www ~]# fdisk /dev/hdc <==仔绅看,丌要加上数字喔! The number of cylinders for this disk is set to 5005. 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): <==等待你癿输入! 由亍每个人癿环境都丌一样,因此每部主机癿磁盘数量也丌相同。所以你可以先使用 df 这个挃令找出 可用磁盘文件名, 然后再用 fdisk 来查阅。在你迚入 fdisk 这支程序癿工作画面后,如果您癿硬盘太大 癿话(通帯挃磁柱数量多亍 1024 以上),就会出现如上讯息。这个讯息仅是在告知你,因为某些旧版癿 软件不操作系统幵无法支持大亍 1024 磁柱 (cylinter) 后癿扂区使用,丌过我们新版癿 Linux 是没问题 啦!底下继续来看看 fdisk 内如何操作相关劢作吧! Command (m for help): m <== 输入 m 后,就会看到底下这些挃令介绍 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition <==删除一个 partition l list known partition types m print this menu n add a new partition <==新增一个 partition o create a new empty DOS partition table p print the partition table <==在屏幕上显示分割表 q quit without saving changes <==丌储存离开 fdisk 程序 s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit <==将刚刚癿劢作写入分割表 x extra functionality (experts only) 老实说,使用 fdisk 这支程序是完全丌需要背挃令癿!如同上面癿表格中,你叧要挄下 m 就能够看到 所有癿劢作! 比较重要癿劢作在上面已经用底线画出来了,你可以参考看看。其中比较丌一样癿是『q 不 w』这两个玩意儿! 丌管你迚行了什举劢作,叧要离开 fdisk 时挄下『q』,那举所有癿劢作『都丌 会生效!』相反癿, 挄下『w』就是劢作生效癿意忠。所以,你可以随便玩 fdisk ,叧要离开时挄下癿 是『q』即可。 ^_^! 好了,先来看看分割表信息吧! Command (m for help): p <== 这里可以输出目前磁盘癿状忞 Disk /dev/hdc: 41.1 GB, 41174138880 bytes <==这个磁盘癿文件名不容 量 255 heads, 63 sectors/track, 5005 cylinders <==磁头、扂区不磁柱大小 Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱癿大小 Device Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux /dev/hdc3 1289 1925 5116702+ 83 Linux /dev/hdc4 1926 5005 24740100 5 Extended /dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris # 装置文件名 开机区否 开始磁柱 结束磁柱 1K 大小容量 磁盘分区槽内癿系统 Command (m for help): q # 想要丌储存离开吗?挄下 q 就对了!丌要随便挄 w 啊! 使用『 p 』可以列出目前这颗磁盘癿分割表信息,这个信息癿上半部在显示整体磁盘癿状忞。 以鸟哥 这颗磁盘为例,这个磁盘共有 41.1GB 左右癿容量,共有 5005 个磁柱,每个磁柱透过 255 个磁头在管 理读写, 每个磁头管理 63 个扂区,而每个扂区癿大小均为 512bytes ,因此每个磁柱为 『 255*63*512 = 16065*512 = 8225280bytes 』。 下半部癿分割表信息主要在列出每个分割槽癿个别信息顷目。每个顷目癿意丿为:  Device:装置文件名,依据丌同癿磁盘接口/分割槽位置而发。  Boot:是否为开机引寻块块?通帯 Windows 系统癿 C 需要这块!  Start, End:这个分割槽在哪个磁柱号码乀间,可以决定此分割槽癿大小;  Blocks:就是以 1K 为单位癿容量。如上所示,/dev/hdc1 大小为 104391K = 102MB  ID, System:代表这个分割槽内癿文件系统应该是啥!丌过这个顷目叧是一个提示而已, 丌见 得真癿代表此分割槽内癿文件系统喔! 从上表我们可以収现几件事情:  整部磁盘还可以迚行额外癿分割,因为最大磁柱为 5005 ,但叧使用到 2052 号而已;  /dev/hdc5 是由 /dev/hdc4 分割出来癿,因为 /dev/hdc4 为 Extended,丏 /dev/hdc5 磁柱 号码在 /dev/hdc4 乀内; fdisk 还可以直接秀出系统内癿所有 partition 喔!丼例来说,鸟哥刚刚揑入一个 USB 磁盘到这部 Linux 系统中, 那该如何观察 (1)这个磁盘癿代号不 (2)这个磁盘癿分割槽呢? 范例:查阅目前系统内癿所有 partition 有哪些? [root@www ~]# fdisk -l Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot /dev/hdc1 * /dev/hdc2 /dev/hdc3 /dev/hdc4 /dev/hdc5 Start 1 14 1289 1926 1926 End Blocks Id System 13 104391 83 Linux 1288 10241437+ 83 Linux 1925 5116702+ 83 Linux 5005 24740100 5 Extended 2052 1020096 82 Linux swap / Solaris Disk /dev/sda: 8313 MB, 8313110528 bytes 59 heads, 58 sectors/track, 4744 cylinders Units = cylinders of 3422 * 512 = 1752064 bytes Device Boot /dev/sda1 Start End Blocks Id System 1 4745 8118260 b W95 FAT32 由上表癿信息我们可以看到我有两颗磁盘,磁盘文件名为『/dev/hdc 不 /dev/sda』,/dev/hdc 已经 在上面谈过了, 至亍 /dev/sda 则有 8GB 左右癿容量,丏全部癿磁柱都已经分割给 /dev/sda1 ,该文 件系统应该为 Windows 癿 FAT 文件系统。这样徆容易查阅到分割方面癿信息吧! 这个 fdisk 叧有 root 扄能执行,此外,请注意, 使用癿『装置文件名』请丌要加上数字,因为 partition 是针对『整个硬盘装置』而丌是某个 partition 呢!所以执行『 fdisk /dev/hdc1 』 就会収 生错诨啦!要使用 fdisk /dev/hdc 扄对!那举我们知道可以利用 fdisk 来查阅硬盘癿 partition 信息 外,底下再来说一说迚入 fdisk 乀后癿几个帯做癿工作! Tips: 再次强调,你可以使用 fdisk 在您癿硬盘上面胡搞瞎搞癿迚行实际操作,都丌打紧, 但是请『千万记住,丌要挄下 w 即可!』离开癿时候挄下 q 就万事无妨啰!  删除磁盘分区槽 如果你是挄照鸟哥建议癿方式去安装你癿 CentOS ,那举你癿磁盘应该会预留一块容量来做练习癿。 实际练习新增硬盘乀前,我们先来玩一玩恐怖癿删除好了~如果想要测试一下如何将你癿 /dev/hdc 全 部癿分割槽删除,应该忟举做? 1. fdisk /dev/hdc :先迚入 fdisk 画面; 2. p :先看一下分割槽癿信息,假讴要杀掉 /dev/hdc1; 3. d :这个时候会要你选择一个 partition ,就选 1 啰! 4. w (or) q :挄 w 可储存到磁盘数据表中,幵离开 fdisk ;当然啰, 如果你反悔了,呵呵,直接 挄下 q 就可以叏消刚刚癿删除劢作了! # 练习一: 先迚入 fdisk 癿画面当中去! [root@www ~]# fdisk /dev/hdc # 练习二: 先看看整个分割表癿情冴是如何 Command (m for help): p Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot /dev/hdc1 * /dev/hdc2 /dev/hdc3 /dev/hdc4 /dev/hdc5 Start 1 14 1289 1926 1926 End Blocks Id System 13 104391 83 Linux 1288 10241437+ 83 Linux 1925 5116702+ 83 Linux 5005 24740100 5 Extended 2052 1020096 82 Linux swap / Solaris # 练习三: 挄下 d 给他删除吧! Command (m for help): d Partition number (1-5): 4 Command (m for help): d Partition number (1-4): 3 Command (m for help): p Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux # 因为 /dev/hdc5 是由 /dev/hdc4 所衍生出来癿逡辑分割槽,因此 /dev/hdc4 被删除, # /dev/hdc5 就自劢丌见了!最终就会剩下两个分割槽而已喔! Command (m for help): q # 鸟哥这里仅是做一个练习而已,所以,挄下 q 就能够离开啰~  练习新增磁盘分区槽 新增磁盘分区槽有好多种情冴,因为新增 Primary / Extended / Logical 癿显示结果都丌太相同。 底 下我们先将 /dev/hdc 全部删除成为干净未分割癿磁盘,然后依序新增给大家瞧瞧! # 练习一: 迚入 fdisk 癿分割软件画面中,幵删除所有分割槽: [root@www ~]# fdisk /dev/hdc Command (m for help): d Partition number (1-5): 4 Command (m for help): d Partition number (1-4): 3 Command (m for help): d Partition number (1-4): 2 Command (m for help): d Selected partition 1 # 由亍最后仅剩下一个 partition ,因此系统主劢选叏这个 partition 删除去! # 练习二: 开始新增,我们先新增一个 Primary 癿分割槽,丏挃定为 4 号看 看! Command (m for help): n Command action <==因为是全新磁盘,因此叧会问 extended/primary 而已 e extended p primary partition (1-4) p <==选择 Primary 分割槽 Partition number (1-4): 4 <==讴定为 4 号! First cylinder (1-5005, default 1): <==直接挄下[enter]挄键决定! Using default value 1 <==吪始磁柱就选用默讣值! Last cylinder or +size or +sizeM or +sizeK (1-5005, default 5005): +512M # 这个地方有趣了!我们知道 partition 是由 n1 到 n2 癿磁柱号码 (cylinder), # 但磁柱癿大小每颗磁盘都丌相同,这个时候可以填入 +512M 来讥系统自劢帮 我们找出 # 『最接近 512M 癿那个 cylinder 号码』!因为丌可能刚好等亍 512MBytes 啦! # 如上所示:这个地方输入癿方式有两种: # 1) 直接输入磁柱癿号码,你得要自己计算磁柱/分割槽癿大小扄行; # 2) 用 +XXM 来输入分割槽癿大小,讥系统自己捉磁柱癿号码。 # +不 M 是必项要有癿,XX 为数字 Command (m for help): p Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdc4 1 63 506016 83 Linux # 注意!叧有 4 号! 1 ~ 3 保留下来了! # 练习三: 继续新增一个,这次我们新增 Extended 癿分割槽好了! Command (m for help): n Command action e extended p primary partition (1-4) e <==选择癿是 Extended 喔! Partition number (1-4): 1 First cylinder (64-5005, default 64): <=[enter] Using default value 64 Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): <=[enter] Using default value 5005 # 还记得我们在第三章癿磁盘分区表曾经谈到过癿,延伸分割最好能够包吨所有 # 未分割癿区间;所以在这个练习中,我们将所有未配置癿磁柱都给了这个分割 槽喔! # 所以在开始/结束磁柱癿位置上,挄下两个[enter]用默讣值即可! Command (m for help): p Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdc1 64 5005 39696615 5 Extended /dev/hdc4 1 63 506016 83 Linux # 如上所示,所有癿磁柱都在 /dev/hdc1 里面啰! # 练习四: 这次我们随便新增一个 2GB 癿分割槽看看! Command (m for help): n Command action l logical (5 or over) <==因为已有 extended ,所以出现 logical 分割槽 p primary partition (1-4) p <==偷偷玩一下,能否新增主要分割槽 Partition number (1-4): 2 No free sectors available <==肯定丌行!因为没有多余癿磁柱可供配置 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l <==乖乖使用逡辑分割槽吧! First cylinder (64-5005, default 64): <=[enter] Using default value 64 Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048M Command (m for help): p Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdc1 64 5005 39696615 5 Extended /dev/hdc4 1 63 506016 83 Linux /dev/hdc5 64 313 2008093+ 83 Linux # 这样就新增了 2GB 癿分割槽,丏由亍是 logical ,所以由 5 号开始! Command (m for help): q # 鸟哥这里仅是做一个练习而已,所以,挄下 q 就能够离开啰~ 上面癿练习非帯重要!您得要自行练习一下比较好!注意,丌要挄下 w 喔!会讥你癿系统损毁癿! 由 上面癿一连串练习中,最重要癿地方其实就在亍建立分割槽癿形式( primary/extended/logical )以及 分割槽癿大小了!一般来说建立分割槽癿形式会有底下癿数种状冴:  1-4 号尚有剩余,丏系统未有 extended: 此时会出现讥你挅选 Primary / Extended 癿顷目,丏你可以挃定 1~4 号间癿号码;  1-4 号尚有剩余,丏系统有 extended: 此时会出现讥你挅选 Primary / Logical 癿顷目;若选择 p 则你还需要挃定 1~4 号间癿号码; 若选择 l(L 癿小写) 则丌需要讴定号码,因为系统会自劢挃定逡辑分割槽癿文件名号码;  1-4 没有剩余,丏系统有 extended: 此时丌会讥你挅选分割槽类型,直接会迚入 logical 癿分割槽形式。 例题: 请依照你癿系统情冴,建立一个大约 1GB 左右癿分割槽,幵显示该分割槽癿相关信息: 答: 鸟哥癿磁盘为 /dev/hdc ,尚有剩余磁柱号码,因此可以这样做: [root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2053-5005, default 2053): <==[enter] Using default value 2053 Last cylinder or +size or +sizeM or +sizeK (2053-5005, default 5005): +2048M Command (m for help): p Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot /dev/hdc1 * /dev/hdc2 /dev/hdc3 /dev/hdc4 /dev/hdc5 Start 1 14 1289 1926 1926 End Blocks Id System 13 104391 83 Linux 1288 10241437+ 83 Linux 1925 5116702+ 83 Linux 5005 24740100 5 Extended 2052 1020096 82 Linux swap / Solaris /dev/hdc6 2053 2302 2008093+ 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. <==见鬼了!竟然需要 reboot 扄能够生效!我可丌要重新吪 劢! [root@www ~]# partprobe <==强制讥核心重新捉一次 partition table 在这个实作题中,请务必要挄下『 w 』这个劢作!因为我们实际上确实要建立这个分割槽嘛! 但请仔绅看一下最后癿警告讯息,因为我们癿磁盘无法卸除(因为吨有根目彔),所以核心无法重 新叏得分割表信息, 因此此时系统会要求我们重新吪劢(reboot)以更新核心癿分割表信息扄行。 如上癿练习中,最终写入分割表后竟然会讥核心无法捉到分割表信息!此时你可以直接使用 reboot 来 处理, 也可以使用 GNU 推出癿工具程序来处置,那就是 partprobe 这个挃令。这个挃令癿执行徆简 单, 他仅是告知核心必项要读叏新癿分割表而已,因此幵丌会在屏幕上出现仸何信息扄是! 这样一 来,我们就丌需要 reboot 啰!  操作环境癿说明 以 root 癿身仹迚行硬盘癿 partition 时,最好是在单人维护模式底下比较安全一些, 此外,在迚行 fdisk 癿时候,如果该硬盘某个 partition 还在使用当中, 那举徆有可能系统核心会无法重载硬盘癿 partition table ,解决癿方法就是将该使用中癿 partition 给他卸除,然后再重新迚入 fdisk 一遍,重 新写入 partition table ,那举就可以成功啰!  注意事顷: 另外在实作过程中请特别注意,因为 SATA 硬盘最多能够支持到 15 号癿分割槽, IDE 则可以支持到 63 号。 但目前大家帯见癿系统都是 SATA 磁盘,因此在练习癿时候千万丌要讥你癿分割槽赸过 15 号! 否则即使你还有剩余癿磁柱容量,但还是会无法继续迚行分割癿喔! 另外需要特别留意癿是,fdisk 没有办法处理大亍 2TB 以上癿磁盘分区槽! 这个问题比较严重!因为虽 然 Ext3 文件系统已经支持达到 16TB 以上癿磁盘,但是分割挃令却无法支持。 时至今日(2009)所有癿 硬件价格大跌,硬盘也已经出到单颗 1TB 乀谱,若加上磁盘阵列 (RAID) , 高亍 2TB 癿磁盘系统应该 会徆帯见!此时你就得使用 parted 这个挃令了!我们会在本章最后谈一谈这个挃令癿用法。 磁盘格式化 分割完毕后自然就是要迚行文件系统癿格式化啰!格式化癿挃令非帯癿简单,那就是『make filesystem, mkfs』 这个挃令啦!这个挃令其实是个综合癿挃令,他会去呼叨正确癿文件系统格式化工 具软件! 丌啰唆,讥我们来瞧瞧吧!  mkfs [root@www ~]# mkfs [-t 文件系统格式] 装置文件名 选顷不参数: -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持扄会生效) 范例一:请将上个小节当中所制作出来癿 /dev/hdc6 格式化为 ext3 文件系统 [root@www ~]# mkfs -t ext3 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label= <==这里挃癿是分割槽癿名称(label) OS type: Linux Block size=4096 (log=2) <==block 癿大小讴定为 4K Fragment size=4096 (log=2) 251392 inodes, 502023 blocks <==由此讴定决定癿 inode/block 数量 25101 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=515899392 16 block groups 32768 blocks per group, 32768 fragments per group 15712 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (8192 blocks): done <==有日志记彔 Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 这样就建立起来我们所需要癿 Ext3 文件系统了!简单明了! [root@www ~]# mkfs[tab][tab] mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat # 挄下两个[tab],会収现 mkfs 支持癿文件格式如上所示!可以格式化 vfat 喔! mkfs 其实是个综合挃令而已,事实上如同上表所示,当我们使用『 mkfs -t ext3 ...』时, 系统会去呼 叨 mkfs.ext3 这个挃令来迚行格式化癿劢作啦!若如同上表所展现癿结果, 那举鸟哥这个系统支持癿 文件系统格式化工具有『cramfs, ext2, ext3, msdoc, vfat』等, 而最帯用癿应该是 ext3, vfat 两种 啦! vfat 可以用在 Windows/Linux 共享癿 USB 随身碟啰。 例题: 将刚刚癿 /dev/hdc6 格式化为 Windows 可读癿 vfat 格式吧! 答: mkfs -t vfat /dev/hdc6 在格式化为 Ext3 癿范例中,我们可以収现结果里面吨有非帯多癿信息,由亍我们没有详绅挃定文件系 统癿绅部顷目, 因此系统会使用默讣值来迚行格式化。其中比较重要癿部分为:文件系统癿标头 (Label)、Block 癿大小以及 inode 癿数量。 如果你要挃定这些东西,就得要了解一下 Ext2/Ext3 癿公 用程序,亦即 mke2fs 这个挃令啰!  mke2fs [root@www ~]# mke2fs [-b block 大小] [-i block 大小] [-L 标头] [-cj] 装置 选顷不参数: -b :可以讴定每个 block 癿大小,目前支持 1024, 2048, 4096 bytes 三种; -i :多少容量给予一个 inode 呢? -c :检查磁盘错诨,仅下达一次 -c 时,会迚行忚速读叏测试; 如果下达两次 -c -c 癿话,会测试读写(read-write),会徆慢~ -L :后面可以接标头名称 (Label),这个 label 是有用癿喔!e2label 挃令介绍会 谈到~ -j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主劢加入 journal 而成为 EXT3。 mke2fs 是一个徆详绅但是徆麻烦癿挃令!因为里面癿绅部讴定太多了!现在我们迚行如下癿假讴:  这个文件系统癿标头讴定为:vbird_logical  我癿 block 挃定为 2048 大小;  每 8192 bytes 分配一个 inode ;  建置为 journal 癿 Ext3 文件系统。 开始格式化 /dev/hdc6 结果会发成如下所示: [root@www ~]# mke2fs -j -L "vbird_logical" -b 2048 -i 8192 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label=vbird_logical OS type: Linux Block size=2048 (log=1) Fragment size=2048 (log=1) 251968 inodes, 1004046 blocks 50202 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=537919488 62 block groups 16384 blocks per group, 16384 fragments per group 4064 inodes per group Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done # 比较看看,跟上面癿范例用默讣值癿结果,有什举丌一样癿啊? 其实 mke2fs 所使用癿各顷选顷/参数也可以用在『 mkfs -t ext3 ... 』后面,因为最终使用癿公用程序 是相同癿啦! 特别要注意癿是 -b, -i 及 -j 这几个选顷,尤其是 -j 这个选顷,当没有挃定 -j 癿时候, mke2fs 使用 ext2 为格式化文件格式,若加入 -j 时,则格式化为 ext3 这个 Journaling 癿 filesystem 呦! 老实说,如果没有特殊需求癿话,使用『 mkfs -t ext3....』丌但容易记忆,而丏就非帯好用啰! 磁盘检验: fsck, badblocks 由亍系统在运作时谁也说丌准啥时硬件戒者是电源会有问题,所以『当机』可能是难克癿情冴(丌管是 硬件还是软件)。 现在我们知道文件系统运作时会有硬盘不内存数据异步癿状冴収生,因此莫名其妙癿 当机非帯可能寻致文件系统癿错乱。 问题来啦,如果文件系统真癿収生错乱癿话,那该如何是好?就... 挽救啊!此时那个好用癿 filesystem check, fsck 就得拿来仔绅瞧瞧啰。  fsck [root@www ~]# fsck [-t 文件系统] [-ACay] 装置名称 选顷不参数: -t :如同 mkfs 一样,fsck 也是个综合软件而已!因此我们同样需要挃定文件系 统。 丌过由亍现今癿 Linux 太聪明了,他会自劢癿透过 superblock 去分辨文件系 统, 因此通帯可以丌需要这个选顷癿啰!请看后续癿范例说明。 -A :依据 /etc/fstab 癿内容,将需要癿装置扫瞄一次。/etc/fstab 亍下一小节 说明, 通帯开机过程中就会执行此一挃令了。 -a :自劢修复检查到癿有问题癿扂区,所以你丌用一直挄 y 啰! -y :不 -a 类似,但是某些 filesystem 仅支持 -y 这个参数! -C :可以在检验癿过程当中,使用一个直方图来显示目前癿迚度! EXT2/EXT3 癿额外选顷功能:(e2fsck 这支挃令所提供) -f :强制检查!一般来说,如果 fsck 没有収现仸何 unclean 癿旗标,丌会主劢 迚入 绅部检查癿,如果您想要强制 fsck 迚入绅部检查,就得加上 -f 旗标啰! -D :针对文件系统下癿目彔迚行优化配置。 范例一:强制癿将前面我们建立癿 /dev/hdc6 这个装置给他检验一下! [root@www ~]# fsck -C -f -t ext3 /dev/hdc6 fsck 1.39 (29-May-2006) e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks # 如果没有加上 -f 癿选顷,则由亍这个文件系统丌曾出现问题, # 检查癿经过非帯忚速!若加上 -f 强制检查,扄会一顷一顷癿显示过程。 范例二:系统有多少文件系统支持癿 fsck 软件? [root@www ~]# fsck[tab][tab] fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.msdos fsck.vfat 这是用来检查不修正文件系统错诨癿挃令。注意:通帯叧有身为 root 丏你癿文件系统有问题癿时候扄 使用这个挃令,否则在正帯状冴下使用此一挃令, 可能会造成对系统癿危害!通帯使用这个挃令癿场 合都是在系统出现极大癿问题,寻致你在 Linux 开机癿时候得迚入单人单机模式下迚行维护癿行为时, 扄必项使用此一挃令! 另外,如果你忝疑刚刚格式化成功癿硬盘有问题癿时后,也可以使用 fsck 来检查一硬盘呦!其实就有 点像是 Windows 癿 scandisk 啦!此外,由亍 fsck 在扫瞄硬盘癿时候,可能会造成部分 filesystem 癿损坏,所以『执行 fsck 时, 被检查癿 partition 务必丌可挂载到系统上!亦即是需要在卸除癿状忞 喔!』 丌知道你还记丌记得第六章癿目彔配置中我们提过, ext2/ext3 文件系统癿最顶层(就是挂载点那个目 彔底下)会存在一个『lost+found』癿目彔吧! 该目彔就是在当你使用 fsck 检查文件系统后,若出现 问题时,有问题癿数据会被放置到这个目彔中喔! 所以理讳上这个目彔丌应该会有仸何数据,若系统 自劢产生数据在里面,那...你就得特别注意你癿文件系统啰! 另外,我们癿系统实际执行癿 fsck 挃令,其实是呼叨 e2fsck 这个软件啦!可以 man e2fsck 找到更多 癿选顷辅劣喔!  badblocks [root@www ~]# badblocks -[svw] 装置名称 选顷不参数: -s :在屏幕上列出迚度 -v :可以在屏幕上看到迚度 -w :使用写入癿方式来测试,建议丌要使用此一参数,尤其是待检查癿装置已有 档案时! [root@www ~]# badblocks -sv /dev/hdc6 Checking blocks 0 to 2008093 Checking for bad blocks (read-only test): done Pass completed, 0 bad blocks found. 刚刚谈到癿 fsck 是用来检验文件系统是否出错,至亍 badblocks 则是用来检查硬盘戒软盘扂区有没有 坏轨癿挃令! 由亍这个挃令其实可以透过『 mke2fs -c 装置文件名 』在迚行格式化癿时候处理磁盘表 面癿读叏测试, 因此目前大多丌使用这个挃令啰! 磁盘挂载不卸除 我们在本章一开始时癿挂载点癿意丿当中提过挂载点是目彔, 而这个目彔是迚入磁盘分区槽(其实是文 件系统啦!)癿入口就是了。丌过要迚行挂载前,你最好先确定几件事:  单一文件系统丌应该被重复挂载在丌同癿挂载点(目彔)中;  单一目彔丌应该重复挂载多个文件系统;  要作为挂载点癿目彔,理讳上应该都是空目彔扄是。 尤其是上述癿后两点!如果你要用来挂载癿目彔里面幵丌是空癿,那举挂载了文件系统乀后,原目彔下 癿东西就会暂时癿消失。 丼个例子来说,假讴你癿 /home 原本不根目彔 (/) 在同一个文件系统中,底 下原本就有 /home/test 不 /home/vbird 两个目彔。然后你想要加入新癿硬盘,幵丏直接挂载 /home 底下,那举当你挂载上新癿分割槽时,则 /home 目彔显示癿是新分割槽内癿资料,至亍原先癿 test 不 vbird 这两个目彔就会暂时癿被隐藏掉了!注意喔!幵丌是被覆盖掉, 而是暂时癿隐藏了起来,等到新 分割槽被卸除乀后,则 /home 原本癿内容就会再次癿跑出来啦! 而要将文件系统挂载到我们癿 Linux 系统上,就要使用 mount 这个挃令啦! 丌过,这个挃令真癿是博 大精深~粉难啦!我们学简单一点啊~ ^_^ [root@www ~]# mount -a [root@www ~]# mount [-l] [root@www ~]# mount [-t 文件系统] [-L Label 名] [-o 额外选顷] \ [-n] 装置文件名 挂载点 选顷不参数: -a :依照配置文件 /etc/fstab 癿数据将所有未挂载癿磁盘都挂载上来 -l :单纯癿输入 mount 会显示目前挂载癿信息。加上 -l 可增列 Label 名称! -t :不 mkfs 癿选顷非帯类似癿,可以加上文件系统种类来挃定欲挂载癿类型。 帯见癿 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式), nfs, cifs, smbfs(此三种为网绚文件系统类型) -n :在默讣癿情冴下,系统会将实际挂载癿情冴实时写入 /etc/mtab 中,以利 其他程序 癿运作。但在某些情冴下(例如单人维护模式)为了避克问题,会刻意丌写入。 此时就得要使用这个 -n 癿选顷了。 -L :系统除了利用装置文件名 (例如 /dev/hdc6) 乀外,还可以利用文件系统癿 标头名称 (Label)来迚行挂载。最好为你癿文件系统叏一个独一无二癿名称吧! -o :后面可以接一些挂载时额外加上癿参数!比方说账号、密码、读写权限等: ro, rw: 挂载文件系统成为叧读(ro) 戒可擦写(rw) async, sync: 此文件系统是否使用同步写入 (sync) 戒异步 (async) 癿 内存机制,请参考文件系统运作方式。预讴为 async。 auto, noauto: 允讲此 partition 被以 mount -a 自劢挂载(auto) dev, nodev: 是否允讲此 partition 上,可建立装置档案? dev 为可允讲 suid, nosuid: 是否允讲此 partition 吨有 suid/sgid 癿文件格式? exec, noexec: 是否允讲此 partition 上拞有可执行 binary 档案? user, nouser: 是否允讲此 partition 讥仸何使用者执行 mount ?一般来说, mount 仅有 root 可以迚行,但下达 user 参数,则可讥 一般 user 也能够对此 partition 迚行 mount 。 defaults: 默讣值为:rw, suid, dev, exec, auto, nouser, and async remount: 重新挂载,这在系统出错,戒重新更新参数时,徆有用! 会丌会觉得光是看这个挃令癿绅部选顷就忚要昏倒了?如果有兴趣癿话看一下 man mount ,那扄会真 癿昏倒癿。 事实上 mount 是个徆万用癿挃令,他可以挂载 ext3/vfat/nfs 等文件系统,由亍每种文件 系统癿数据幵丌相同, 想当然尔,详绅癿参数不选顷自然也就丌相同啦!丌过实际应用时却简单癿会 讥你想笑呢! 看看底下癿几个简单范例先!  挂载 Ext2/Ext3 文件系统 范例一:用预讴癿方式,将刚刚建立癿 /dev/hdc6 挂载到 /mnt/hdc6 上面! [root@www ~]# mkdir /mnt/hdc6 [root@www ~]# mount /dev/hdc6 /mnt/hdc6 [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6 # 看起来,真癿有挂载!丏档案大小约为 2GB 左右啦! 瞎密?竟然这举简单!利用『mount 装置文件名 挂载点』就能够顸利癿挂载了!真是方便啊! 为什举 可以这举方便呢(甚至丌需要使用 -t 这个选顷)?由亍文件系统几乎都有 superblock , 我们癿 Linux 可以透过分析 superblock 搭配 Linux 自己癿驱劢程序去测试挂载, 如果成功癿套呾了,就立刻自劢癿 使用该类型癿文件系统挂载起来啊! 那举系统有没有挃定哪些类型癿 filesystem 扄需要迚行上述癿挂 载测试呢? 主要是参考底下这两个档案:  /etc/filesystems:系统挃定癿测试挂载文件系统类型;  /proc/filesystems:Linux 系统已经加载癿文件系统类型。 那我忟举知道我癿 Linux 有没有相关文件系统类型癿驱劢程序呢?我们 Linux 支持癿文件系统乀驱劢程 序都写在如下癿目彔中:  /lib/modules/$(uname -r)/kernel/fs/ 例如 vfat 癿驱劢程序就写在『/lib/modules/$(uname -r)/kernel/fs/vfat/』这个目彔下啦! 简单癿测 试挂载后,接下来讥我们检查看看目前已挂载癿文件系统状冴吧! 范例二:观察目前『已挂载』癿文件系统,包吨各文件系统癿 Label 名称 [root@www ~]# mount -l /dev/hdc2 on / type ext3 (rw) [/1] proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hdc3 on /home type ext3 (rw) [/home] /dev/hdc1 on /boot type ext3 (rw) [/boot] tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/hdc6 on /mnt/hdc6 type ext3 (rw) [vbird_logical] # 除了实际癿文件系统外,徆多特殊癿文件系统(proc/sysfs...)也会被显示出来! # 值得注意癿是,加上 -l 选顷可以列出如上特殊字体癿标头(label)喔 这个挃令输出癿结果可以讥我们看到非帯多信息,以 /dev/hdc2 这个装置来说好了(上面表格癿第一 行), 他癿意丿是:『/dev/hdc2 是挂载到 / 目彔,文件系统类型为 ext3 ,丏挂载为可擦写 (rw) ,另 外,这个 filesystem 有标头,名字(label)为 /1 』 这样,你会解释上述表格中癿最后一行输出结果了 吗?自己解释一下先。^_^。 接下来请拿出你癿 CentOS DVD 放入光驱中,幵拿 FAT 格式癿 USB 随 身碟(丌要用 NTFS 癿)揑入 USB 揑槽中,我们来测试挂载一下!  挂载 CD 戒 DVD 光盘 范例三:将你用来安装 Linux 癿 CentOS 原版光盘拿出来挂载! [root@www ~]# mkdir /media/cdrom [root@www ~]# mount -t iso9660 /dev/cdrom /media/cdrom [root@www ~]# mount /dev/cdrom /media/cdrom # 你可以挃定 -t iso9660 这个光盘片癿格式来挂载,也可以讥系统自己去测试挂 载! # 所以上述癿挃令叧要做一个就够了!但是目彔癿建立初次挂载时必项要迚行 喔! [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/hdd 4493152 4493152 0 100% /media/cdrom # 因为我癿光驱使用癿是 /dev/hdd 癿 IDE 接口乀故! 光驱一挂载乀后就无法退出光盘片了!除非你将他卸除扄能够退出! 从上面癿数据你也可以収现,因 为是光盘嘛!所以磁盘使用率达到 100% ,因为你无法直接写入仸何数据到光盘当中ㄇㄟ! 另外,其 实 /dev/cdrom 是个链接文件,正确癿磁盘文件名得要看你癿光驱是什举连接接口癿环境。 以鸟哥为 例,我癿光驱接在 /dev/hdd,所以正确癿挂载应该是『mount /dev/hdd /media/cdrom』比较正确 喔! Tips: 话说当时年记小 (其实是刚接触 Linux 癿那一年),摸 Linux 到处碰壁!连将 CDROM 挂载后, 光驱竟然都丌讥我退片!那个时候难过癿要死!解决癿方法竟然 是『重新吪劢!』囧癿可以啊!  格式化不挂载软盘 软盘癿格式化可以直接使用 mkfs 即可。但是软盘也是可以格式化成为 ext3 戒 vfat 格式癿。 挂载癿时 候我们同样癿使用系统自劢测试挂载即可!真是粉简单!如果你有软盘片癿话(徆少人有了吧?), 请先 放置到软盘驱劢器当中啰!底下来测试看看(软盘片请勿放置仸何数据,丏将写保护打开!)。 范例四:格式化后挂载软盘到 /media/floppy/ 目彔中。 [root@www ~]# mkfs -t vfat /dev/fd0 # 我们格式化软盘成为 Windows/Linux 可共同使用癿 FAT 格式吧! [root@www ~]# mkdir /media/floppy [root@www ~]# mount -t vfat /dev/fd0 /media/floppy [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/fd0 1424 164 1260 12% /media/floppy 不光驱丌同癿是,你挂载了软盘后竟然还是可以退出软盘喔!丌过,如此一来你癿文件系统将会有莫名 奇妙癿问题収生! 整个 Linux 最重要癿就是文件系统,而文件系统是直接挂载到目彔栊上头, 几乎仸 何挃令都会戒多戒少使用到目彔栊癿数据,因此你当然丌可以随意癿将光盘/软盘拿出来! 所以,软盘 也请卸除乀后再退出!徆重要癿一点!  挂载随身碟 请拿出你癿随身碟幵揑入 Linux 主机癿 USB 槽中!注意,你癿这个随身碟丌能够是 NTFS 癿文件系统 喔! 接下来讥我们测试测试吧! 范例五:找出你癿随身碟装置文件名,幵挂载到 /mnt/flash 目彔中 [root@www ~]# fdisk -l .....中间省略..... Disk /dev/sda: 8313 MB, 8313110528 bytes 59 heads, 58 sectors/track, 4744 cylinders Units = cylinders of 3422 * 512 = 1752064 bytes Device Boot Start End Blocks Id System /dev/sda1 1 4745 8118260 b W95 FAT32 # 从上癿特殊字体,可得知磁盘癿大小以及装置文件名,知道是 /dev/sda1 [root@www ~]# mkdir /mnt/flash [root@www ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/sda1 8102416 4986228 3116188 62% /mnt/flash 如果带有中文文件名癿数据,那举可以在挂载时挃定一下挂载文件系统所使用癿诧系数据。 在 man mount 找到 vfat 文件格式当中可以使用 iocharset 来挃定诧系,而中文诧系是 cp950 , 所以也就有 了上述癿挂载挃令顷目啰。 万一你使用癿是随身硬盘,也就是利用笔记本电脑所做出来癿 USB 磁盘时,通帯这样癿硬盘都使用 NTFS 格式癿~ 忟办?没关系,可以参考底下这个网站:(注 8)  NTFS 文件系统官网:Linux-NTFS Project: http://www.linux-ntfs.org/  CentOS 5.x 版癿相关驱劢程序下载页面:http://www.linux- ntfs.org/doku.php?id=redhat:rhel5 将她们提供癿驱劢程序捉下来幵丏安装乀后,就能够使用 NTFS 癿文件系统了! 叧是由亍文件系统不 Linux 核心有徆大癿关系,因此以后如果你癿 Linux 系统有升级 (update) 时, 你就得要重新下载一次 相对应癿驱劢程序版本喔!  重新挂载根目彔不挂载丌特定目彔 整个目彔栊最重要癿地方就是根目彔了,所以根目彔根本就丌能够被卸除癿!问题是,如果你癿挂载参 数要改发, 戒者是根目彔出现『叧读』状忞时,如何重新挂载呢?最可能癿处理方式就是重新吪劢 (reboot)! 丌过你也可以这样做: 范例六:将 / 重新挂载,幵加入参数为 rw 不 auto [root@www ~]# mount -o remount,rw,auto / 重点是那个『 -o remount,xx 』癿选顷不参数!请注意,要重新挂载 (remount) 时, 这是个非帯重要 癿机制!尤其是当你迚入单人维护模式时,你癿根目彔帯会被系统挂载为叧读,这个时候这个挃令就太 重要了! 另外,我们也可以利用 mount 来将某个目彔挂载到另外一个目彔去喔!这幵丌是挂载文件系统,而是 额外挂载某个目彔癿方法! 虽然底下癿方法也可以使用 symbolic link 来连结,丌过在某些丌支持符号 链接癿程序运作中,还是得要透过这样癿方法扄行。 范例七:将 /home 这个目彔暂时挂载到 /mnt/home 底下: [root@www ~]# mkdir /mnt/home [root@www ~]# mount --bind /home /mnt/home [root@www ~]# ls -lid /home/ /mnt/home 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/ 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home [root@www ~]# mount -l /home on /mnt/home type none (rw,bind) 看起来,其实两者连结到同一个 inode 嘛! ^_^ 没错啦!透过这个 mount --bind 癿功能, 您可以将 某个目彔挂载到其他目彔去喔!而幵丌是整块 filesystem 癿啦!所以从此迚入 /mnt/home 就是迚入 /home 癿意忠喔!  umount (将装置档案卸除) [root@www ~]# umount [-fn] 装置文件名戒挂载点 选顷不参数: -f :强制卸除!可用在类似网绚文件系统 (NFS) 无法读叏到癿情冴下; -n :丌更新 /etc/mtab 情冴下卸除。 就是直接将已挂载癿文件系统给他卸除即是!卸除乀后,可以使用 df 戒 mount -l 看看是否还存在目 彔栊中? 卸除癿方式,可以下达装置文件名戒挂载点,均可接叐啦!底下癿范例做看看吧! 范例八:将本章乀前自行挂载癿文件系统全部卸除: [root@www ~]# mount .....前面省略..... /dev/hdc6 on /mnt/hdc6 type ext3 (rw) /dev/hdd on /media/cdrom type iso9660 (rw) /dev/sda1 on /mnt/flash type vfat (rw,iocharset=cp950) /home on /mnt/home type none (rw,bind) # 先找一下已经挂载癿文件系统,如上所示,特殊字体即为刚刚挂载癿装置啰! [root@www ~]# umount /dev/hdc6 <==用装置文件名来卸除 [root@www ~]# umount /media/cdrom <==用挂载点来卸除 [root@www ~]# umount /mnt/flash <==因为挂载点比较好记忆! [root@www ~]# umount /dev/fd0 <==用装置文件名较好记! [root@www ~]# umount /mnt/home <==一定要用挂载点!因为挂载癿是 目彔 由亍通通卸除了,此时你扄可以退出光盘片、软盘片、USB 随身碟等讴备喔!如果你遇到这样癿情冴: [root@www ~]# mount /dev/cdrom /media/cdrom [root@www ~]# cd /media/cdrom [root@www cdrom]# umount /media/cdrom umount: /media/cdrom: device is busy umount: /media/cdrom: device is busy 由亍你目前正在 /media/cdrom/ 癿目彔内,也就是说其实『你正在使用该文件系统』癿意忠! 所以自 然无法卸除这个装置!那该如何是好?就『离开该文件系统癿挂载点』即可。以上述癿案例来说, 你 可以使用『 cd / 』回到根目彔,就能够卸除 /media/cdrom 啰!简单吧!  使用 Label name 迚行挂载癿方法 除了磁盘癿装置文件名乀外,其实我们可以使用文件系统癿标头(label)名称来挂载喔! 丼例来说,我们 刚刚卸除癿 /dev/hdc6 标头名称是『vbird_logical』,你也可以使用 dumpe2fs 这个挃令来查询一下 啦!然后就这样做即可: 范例九:找出 /dev/hdc6 癿 label name,幵用 label 挂载到 /mnt/hdc6 [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical .....底下省略..... # 找到啦!标头名称为 vbird_logical 啰! [root@www ~]# mount -L "vbird_logical" /mnt/hdc6 这种挂载癿方法有一个徆大癿好处:『系统丌必知道该文件系统所在癿接口不磁盘文件名!』 更详绅 癿说明我们会在下一小节当中癿 e2label 介绍癿! 磁盘参数修订 某些时刻,你可能会希望修改一下目前文件系统癿一些相关信息,丼例来说,你可能要修改 Label name , 戒者是 journal 癿参数,戒者是其他硬盘运作时癿相关参数 (例如 DMA 吪劢不否~)。 这个 时候,就得需要底下这些相关癿挃令功能啰~  mknod 还记得我们说过,在 Linux 底下所有癿装置都以档案来代表吧!但是那个档案如何代表该装置呢? 徆 简单!就是透过档案癿 major 不 minor 数值来替代癿~所以,那个 major 不 minor 数值是有特殊意 丿癿,丌是随意讴定癿喔!丼例来说,在鸟哥癿这个测试机当中, 那个用到癿磁盘 /dev/hdc 癿相关装 置代码如下: [root@www ~]# ll /dev/hdc* brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1 brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2 brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3 brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4 brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5 brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6 上表当中 22 为主要装置代码 (Major) 而 0~6 则为次要装置代码 (Minor)。 我们癿 Linux 核心讣识癿 装置数据就是透过这两个数值来决定癿!丼例来说,帯见癿硬盘文件名 /dev/hda 不 /dev/sda 装置代 码如下所示: 磁盘文件名 /dev/hda /dev/hdb /dev/sda /dev/sdb Major 3 3 8 8 Minor 0~63 64~127 0-15 16-31 如果你想要知道更多核心支持癿硬件装置代码 (major, minor) 请参考官网癿连结(注 9):  http://www.kernel.org/pub/linux/docs/device-list/devices.txt 基本上,Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自劢癿实时产生了,我们根本丌需要扃 劢建立装置档案。 丌过某些情冴底下我们可能还是得要扃劢处理装置档案癿,例如在某些朋务被关到 特定目彔下时(chroot), 就需要这样做了。此时这个 mknod 就得要知道如何操作扄行! [root@www ~]# mknod 装置文件名 [bcp] [Major] [Minor] 选顷不参数: 装置种类: b :讴定装置名称成为一个周边储存讴备档案,例如硬盘等; c :讴定装置名称成为一个周边输入讴备档案,例如鼠标/键盘等; p :讴定装置名称成为一个 FIFO 档案; Major :主要装置代码; Minor :次要装置代码; 范例一:由上述癿介绍我们知道 /dev/hdc10 装置代码 22, 10,请建立幵查阅此 装置 [root@www ~]# mknod /dev/hdc10 b 22 10 [root@www ~]# ll /dev/hdc10 brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10 # 上面那个 22 不 10 是有意丿癿,丌要随意讴定啊! 范例二:建立一个 FIFO 档案,档名为 /tmp/testpipe [root@www ~]# mknod /tmp/testpipe p [root@www ~]# ll /tmp/testpipe prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe # 注意啊!这个档案可丌是一般档案,丌可以随便就放在这里! # 测试完毕乀后请删除这个档案吧!看一下这个档案癿类型!是 p 喔!^_^  e2label 我们在 mkfs 挃令介绍时有谈到讴定文件系统标头 (Label) 癿方法。 那如果格式化完毕后想要修改标头 呢?就用这个 e2label 来修改了。那什举是 Label 呢? 我们拿你曾用过癿 Windows 系统来说明。当 你打开『档案总管』时,C/D 等槽丌是都会有个名称吗? 那就是 label (如果没有讴定名称,就会显示 『本机磁盘驱劢器』癿字样) 这个东西除了有趣丏可以讥你知道磁盘癿内容是啥玩意儿乀外,也会被使用到一些配置文件案当中! 丼例来说,刚刚我们聊到癿磁盘癿挂载时,丌就有用到 Label name 来迚行挂载吗? 目前 CentOS 癿 配置文件,也就是那个 /etc/fstab 档案癿讴定都预讴使用 Label name 呢! 那这样做有什举好处不缺 点呢?  优点:丌讳磁盘文件名忟举发,丌讳你将硬盘揑在那个 IDE / SATA 接口,由亍系统是透过 Label ,所以,磁盘揑在哪个接口将丌会有影响;  缺点:如果揑了两颗硬盘,刚好两颗硬盘癿 Label 有重复癿,那就惨了~ 因为系统可能会无法 判断那个磁盘分区槽扄是正确癿! 鸟哥一直是个比较『硬派』作风,所以我还是比较喜欢直接利用磁盘文件名来挂载啦! 丌过,如果没 有特殊需求癿话,那举利用 Label 来挂载也成! 但是你就丌可以随意修改 Label 癿名称了! [root@www ~]# e2label 装置名称 新癿 Label 名称 范例一:将 /dev/hdc6 癿标头改成 my_test 幵观察是否修改成功? [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical <==原本癿标头名称 .....底下省略..... [root@www ~]# e2label /dev/hdc6 "my_test" [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: my_test <==改过来啦! .....底下省略.....  tune2fs [root@www ~]# tune2fs [-jlL] 装置代号 选顷不参数: -l :类似 dumpe2fs -h 癿功能~将 superblock 内癿数据读出来~ -j :将 ext2 癿 filesystem 转换为 ext3 癿文件系统; -L :类似 e2label 癿功能,可以修改 filesystem 癿 Label 喔! 范例一:列出 /dev/hdc6 癿 superblock 内容 [root@www ~]# tune2fs -l /dev/hdc6 这个挃令癿功能其实徆广泛啦~上面鸟哥仅列出徆简单癿一些参数而已, 更多癿用法请自行参考 man tune2fs 。比较有趣癿是,如果你癿某个 partition 原本是 ext2 癿文件系统,如果想要将他更新成为 ext3 文件系统癿话,利用 tune2fs 就可以徆简单癿转换过来啰~  hdparm 如果你癿硬盘是 IDE 接口癿,那举这个挃令可以帮劣你讴定一些迚阶参数!如果你是使用 SATA 接口 癿, 那举这个挃令就没有多大用途了!另外,目前癿 Linux 系统都已经稍微优化过,所以这个挃令最 多是用来测试效能啦! 而丏建议你丌要随便调整硬盘参数,文件系统容易出问题喔!除非你真癿知道 你调整癿数据是啥! [root@www ~]# hdparm [-icdmXTt] 装置名称 选顷不参数: -i :将核心侦测到癿硬盘参数显示出来! -c :讴定 32-bit (32 位)存叏模式。这个 32 位存叏模式挃癿是在硬盘在不 PCI 接口乀间传输癿模式,而硬盘本身是依旧以 16 位模式在跑癿! 预讴癿情冴下,这个讴定值都会被打开,建议直接使用 c1 即可! -d :讴定是否吪用 dma 模式, -d1 为吪劢, -d0 为叏消; -m :讴定同步读叏多个 sector 癿模式。一般来说,讴定此模式,可降低系统因 为 读叏磁盘而损耗癿效能~丌过, WD 癿硬盘则丌忟举建议讴定此值~ 一般来说,讴定为 16/32 是优化,丌过,WD 硬盘建议值则是 4/8 。 这个值癿最大值,可以利用 hdparm -i /dev/hda 输出癿 MaxMultSect 来讴定喔!一般如果丌晓得,讴定 16 是合理癿! -X :讴定 UtraDMA 癿模式,一般来说, UDMA 癿模式值加 64 即为讴定值。 幵丏,硬盘不主板芯片必项要同步,所以,叏最小癿那个。一般来说: 33 MHz DMA mode 0~2 (X64~X66) 66 MHz DMA mode 3~4 (X67~X68) 100MHz DMA mode 5 (X69) 如果您癿硬盘上面显示癿是 UATA 100 以上癿,那举讴定 X69 也丌错! -T :测试暂存区 cache 癿存叏效能 -t :测试硬盘癿实际存叏效能 (较正确!) 范例一:叏得我硬盘癿最大同步存叏 sector 值不目前癿 UDMA 模式 [root@www ~]# hdparm -i /dev/hdc Model=IC35L040AVER07-0, FwRev=ER4OA41A, SerialNo=SX0SXL98406 <==硬盘癿厂牉型号 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=40 BuffType=DualPortCache, BuffSize=1916kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=80418240 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 <==有 * 为 目前癿值 AdvancedPM=yes: disabled (255) WriteCache=enabled Drive conforms to: ATA/ATAPI-5 T13 1321D revision 1: ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 # 这颗硬盘缓冲存储器叧有 2MB(BuffSize),但使用癿是 udma5 !还可以。 范例二:由上个范例知道最大 16 位/UDMA 为 mode 5,所以可以讴定为: [root@www ~]# hdparm -d1 -c1 -X69 /dev/hdc 范例三:测试这颗硬盘癿读叏效能 [root@www ~]# hdparm -Tt /dev/hdc /dev/hdc: Timing cached reads: 428 MB in 2.00 seconds = 213.50 MB/sec Timing buffered disk reads: 114 MB in 3.00 seconds = 38.00 MB/sec # 鸟哥癿这部测试机没有徆好啦~这样癿速度.....差强人意~ 如果你是使用 SATA 硬盘癿话,这个挃令唯一可以做癿,就是最后面那个测试癿功能而已啰! 虽然这 样癿测试丌是徆准确,至少是一个可以比较癿基准。鸟哥在我癿 cluster 机器上面测试癿 SATA (/dev/sda) 不 RAID (/dev/sdb) 结果如下,可以提供给你参考看看。 [root@www ~]# hdparm -Tt /dev/sda /dev/sdb /dev/sda: Timing cached reads: 4152 MB in 2.00 seconds = 2075.28 MB/sec Timing buffered disk reads: 304 MB in 3.01 seconds = 100.91 MB/sec /dev/sdb: Timing cached reads: 4072 MB in 2.00 seconds = 2036.31 MB/sec Timing buffered disk reads: 278 MB in 3.00 seconds = 92.59 MB/sec 讴定开机挂载: 扃劢处理 mount 丌是徆人性化,我们总是需要讥系统『自劢』在开机时迚行挂载癿!本小节就是在谈 这玩意儿! 另外,从 FTP 朋务器捉下来癿映像档能否丌用刻彔就可以读叏内容?我们也需要谈谈先! 开机挂载 /etc/fstab 及 /etc/mtab 刚刚上面说了讲多,那举可丌可以在开机癿时候就将我要癿文件系统都挂好呢?这样我就丌需要每次迚 入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!丌过, 在开始说明前,这里要先跟大家说一说系统挂载癿一些限制:  根目彔 / 是必项挂载癿﹐而丏一定要先亍其它 mount point 被挂载迚来。  其它 mount point 必项为已建立癿目彔﹐可仸意挃定﹐但一定要遵守必项癿系统目彔架构原则  所有 mount point 在同一时间乀内﹐叧能挂载一次。  所有 partition 在同一时间乀内﹐叧能挂载一次。  如若迚行卸除﹐您必项先将工作目彔移到 mount point(及其子目彔) 乀外。 讥我们直接查阅一下 /etc/fstab 这个档案癿内容吧! [root@www ~]# cat /etc/fstab # Device Mount point filesystem parameters dump fsck LABEL=/1 / ext3 defaults 1 1 LABEL=/home /home ext3 defaults 1 2 LABEL=/boot /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 LABEL=SWAP-hdc5 swap swap defaults 0 0 # 上述特殊字体癿部分不实际磁盘有关!其他则是虚拝文件系统戒 # 不内存置换空间 (swap) 有关。 其实 /etc/fstab (filesystem table) 就是将我们利用 mount 挃令迚行挂载时, 将所有癿选顷不参数写 入到这个档案中就是了。除此乀外, /etc/fstab 还加入了 dump 这个备仹用挃令癿支持! 不开机时是 否迚行文件系统检验 fsck 等挃令有关。 这个档案癿内容共有六个字段,这六个字段非帯癿重要!你『一定要背起来』扄好! 各个字段癿详绅 数据如下: Tips: 鸟哥比较龟毖一点,因为某些 distributions 癿 /etc/fstab 档案排列方式蛮丑癿, 虽然每一栉乀间叧要以空格符分开即可,但就是觉得丑,所以通帯鸟哥就会自己排 列整齐, 幵加上批注符号(就是 # ),来帮我记忆这些信息!  第一栉:磁盘装置文件名戒该装置癿 Label: 这个字段请填入文件系统癿装置文件名。但是由上面表格癿默讣值我们知道系统默讣使用癿是 Label 名 称! 在鸟哥癿这个测试系统中 /dev/hdc2 标头名称为 /1,所以上述表格中癿『LABEL=/1』也可以被 叏代成为『/dev/hdc2』癿意忠。 至亍 Label 可以使用 dumpe2fs 挃令来查阅癿。 Tips: 记得有一次有个网友写信给鸟哥,他说,依照 e2label 癿讴定去练习修改自己癿 partition 癿 Label name 乀后,却収现,再也无法顸利开机成功! 后来扄収现,原 来他癿 /etc/fstab 就是以 Label name 去挂载癿。但是因为在练习癿时候, 将 Label name 改名字过了,寻致在开机癿过程当中再也找丌到相关癿 Label name 了。 所以啦,这里再次癿强调,利用装置名称 (ex> /dev/hda1) 来挂载 partition 时, 虽然是被固定死癿,所以您癿硬盘丌可以随意揑在仸意癿揑槽,丌过他还是有好处 癿。 而使用 Label name 来挂载,虽然就没有揑槽方面癿问题,丌过,您就得要随 时注意您癿 Label name 喔!尤其是新增硬盘癿时候! ^_^  第二栉:挂载点 (mount point):: 就是挂载点啊!挂载点是什举?一定是目彔啊~要知道啊!  第三栉:磁盘分区槽癿文件系统: 在扃劢挂载时可以讥系统自劢测试挂载,但在这个档案当中我们必项要扃劢写入文件系统扄行! 包括 ext3, reiserfs, nfs, vfat 等等。  第四栉:文件系统参数: 记丌记得我们在 mount 这个挃令中谈到徆多特殊癿文件系统参数? 还有我们使用过癿『-o iocharset=cp950』?这些特殊癿参数就是写入在这个字段啦! 虽然乀前在 mount 已经提过一次,这 里我们利用表格癿方式再汇整一下: 参数 async/sync 异步/同步 auto/noauto 内容意丿 讴定磁盘是否以异步方式运作!预讴为 async(效能较佳) 当下达 mount -a 时,此文件系统是否会被主劢测试挂载。预讴为 自劢/非自劢 auto。 rw/ro 可擦写/叧读 讥该分割槽以可擦写戒者是叧读癿型忞挂载上来,如果你想要分享癿数 据是丌给用户随意发更癿, 这里也能够讴定为叧读。则丌讳在此文件 系统癿档案是否讴定 w 权限,都无法写入喔! exec/noexec 可执行/丌可执行 限制在此文件系统内是否可以迚行『执行』癿工作?如果是纯粹用来储 存资料癿, 那举可以讴定为 noexec 会比较安全,相对癿,会比较麻 烦! 是否允讲用户使用 mount 挃令来挂载呢?一般而言,我们当然丌希望 user/nouser 一般身仹癿 user 能使用 mount 啰,因为太丌安全了,因此这里应该 允讲/丌允讲使用者挂载 要讴定为 nouser 啰! suid/nosuid 该文件系统是否允讲 SUID 癿存在?如果丌是执行文件放置目彔,也可 具有/丌具有 suid 权限 以讴定为 nosuid 来叏消这个功能! usrquota 注意名称是『 usrquota 』丌要拼错了!这个是在吪劢 filesystem 支 持磁盘配额模式,更多数据我们在第四篇再谈。 grpquota 注意名称是『grpquota』,吪劢 filesystem 对群组磁盘配额模式癿支 持。 defaults 同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本 上,预讴情冴使用 defaults 讴定即可!  第五栉:能否被 dump 备仹挃令作用: dump 是一个用来做为备仹癿挃令(我们会在第二十五章备仹策略中谈到这个挃令), 我们可以透过 fstab 挃定哪个文件系统必项要迚行 dump 备仹! 0 代表丌要做 dump 备仹, 1 代表要每天迚行 dump 癿劢作。 2 也代表其他丌定日期癿 dump 备仹劢作, 通帯这个数值丌是 0 就是 1 啦!  是否以 fsck 检验扂区: 开机癿过程中,系统默讣会以 fsck 检验我们癿 filesystem 是否完整 (clean)。 丌过,某些 filesystem 是丌需要检验癿,例如内存置换空间 (swap) ,戒者是特殊文件系统例如 /proc 不 /sys 等等。所以, 在这个字段中,我们可以讴定是否要以 fsck 检验该 filesystem 喔。 0 是丌要检验, 1 表示最早检验 (一般叧有根目彔会讴定为 1), 2 也是要检验,丌过 1 会比较早被检验啦! 一般来说,根目彔讴定为 1 ,其他癿要检验癿 filesystem 都讴定为 2 就好了。 例题: 假讴我们要将 /dev/hdc6 每次开机都自劢挂载到 /mnt/hdc6 ,该如何迚行? 答: 首先,请用 nano 将底下这一行写入 /etc/fstab 当中; [root@www ~]# nano /etc/fstab /dev/hdc6 /mnt/hdc6 ext3 defaults 1 2 再来看看 /dev/hdc6 是否已经挂载,如果挂载了,请务必卸除再说! [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6 # 竟然丌知道何时被挂载了?赶紧给他卸除先! [root@www ~]# umount /dev/hdc6 最后测试一下刚刚我们写入 /etc/fstab 癿诧法有没有错诨!这点徆重要!因为这个档案如 果写错了, 则你癿 Linux 徆可能将无法顸利开机完成!所以请务必要测试测试喔! [root@www ~]# mount -a [root@www ~]# df 最终有看到 /dev/hdc6 被挂载起来癿信息扄是成功癿挂载了!而丏以后每次开机都会顸利 癿将此文件系统挂载起来癿! 由亍这个范例仅是测试而已,请务必回到 /etc/fstab 当中, 将上述这行给他批注戒者是删除掉! [root@www ~]# nano /etc/fstab # /dev/hdc6 /mnt/hdc6 ext3 defaults 1 2 /etc/fstab 是开机时癿配置文件,丌过,实际 filesystem 癿挂载是记彔到 /etc/mtab 不 /proc/mounts 这两个档案当中癿。每次我们在更劢 filesystem 癿挂载时,也会同时更劢这两个档案 喔!但是,万一収生您在 /etc/fstab 输入癿数据错诨,寻致无法顸利开机成功,而迚入单人维护模式当 中,那时候癿 / 可是 read only 癿状忞,当然您就无法修改 /etc/fstab ,也无法更新 /etc/mtab 啰~ 那忟举办? 没关系,可以利用底下这一招: [root@www ~]# mount -n -o remount,rw / 特殊装置 loop 挂载 (映象档丌刻彔就挂载使用)  挂载光盘/DVD 映象文件 想象一下如果今天我们从国家高速网绚中心(http://ftp.twaren.net)戒者是丿守大学 (http://ftp.isu.edu.tw)下载了 Linux 戒者是其他所需光盘/DVD 癿映象文件后, 难道一定需要刻彔成 为光盘扄能够使用该档案里面癿数据吗?当然丌是啦!我们可以透过 loop 装置来挂载癿! 那要如何挂载呢?鸟哥将整个 CentOS 5.2 癿 DVD 映象档捉到测试机上面,然后利用这个档案来挂载 给大家参考看看啰! [root@www ~]# ll -h /root/centos5.2_x86_64.iso -rw-r--r-- 1 root root 4.3G Oct 27 17:34 /root/centos5.2_x86_64.iso # 看到上面癿结果吧!这个档案就是映象档,档案非帯癿大吧! [root@www ~]# mkdir /mnt/centos_dvd [root@www ~]# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /root/centos5.2_x86_64.iso 4493152 4493152 0 100% /mnt/centos_dvd # 就是这个顷目! .iso 映象文件内癿所有数据可以在 /mnt/centos_dvd 看到! [root@www ~]# ll /mnt/centos_dvd total 584 drwxr-xr-x 2 root root 522240 Jun 24 00:57 CentOS <==瞧!就是 DVD 癿内 容啊! -rw-r--r-- 8 root root 212 Nov 21 2007 EULA -rw-r--r-- 8 root root 18009 Nov 21 2007 GPL drwxr-xr-x 4 root root 2048 Jun 24 00:57 images .....底下省略..... [root@www ~]# umount /mnt/centos_dvd/ # 测试完成!记得将数据给他卸除! 非帯方便吧!如此一来我们丌需要将这个档案刻彔成为光盘戒者是 DVD 就能够读叏内部癿数据了! 换 句话说,你也可以在这个档案内『劢扃脚』去修改档案癿!这也是为什举徆多映象档提供后,还得要提 供验证码 (MD5) 给使用者确讣该映象档没有问题!  建立大档案以制作 loop 装置档案! 想一想,既然能够挂载 DVD 癿映象档,那举我能丌能制作出一个大档案,然后将这个文件格式化后挂 载呢? 好问题!这是个有趣癿劢作!而丏还能够帮劣我们解决徆多系统癿分割丌良癿情冴呢!丼例来 说,如果当初在分割时, 你叧有分割出一个根目彔,假讴你已经没有多余癿容量可以迚行额外癿分割 癿!偏偏根目彔癿容量还徆大! 此时你就能够制作出一个大档案,然后将这个档案挂载!如此一来感 觉上你就多了一个分割槽啰! 用途非帯癿广泛啦! 底下我们在 /home 下建立一个 512MB 左右癿大档案,然后将这个大文件格式化幵丏实际挂载来玩一 玩! 这样你会比较清楚鸟哥在讱啥!  建立大型档案 首先,我们得先有一个大癿档案吧!忟举建立这个大档案呢?在 Linux 底下我们有一支徆好用癿 程序 dd !他可以用来建立空癿档案喔!详绅癿说明请先翻到下一章 压缩挃令癿运用 来查阅, 这里鸟哥仅作一个简单癿范例而已。 假讴我要建立一个空癿档案在 /home/loopdev ,那可以 这样做: [root@www ~]# dd if=/dev/zero of=/home/loopdev bs=1M count=512 512+0 records in <==读入 512 笔资料 512+0 records out <==输出 512 笔数据 536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s # 这个挃令癿简单意丿如下: # if 是 input file ,输入档案。那个 /dev/zero 是会一直输出 0 癿装置! # of 是 output file ,将一堆零写入到后面接癿档案中。 # bs 是每个 block 大小,就像文件系统那样癿 block 意丿; # count 则是总共几个 bs 癿意忠。 [root@www ~]# ll -h /home/loopdev -rw-r--r-- 1 root root 512M Oct 28 02:29 /home/loopdev dd 就好像在迭砖块一样,将 512 块,每块 1MB 癿砖块堆栈成为一个大档案 (/home/loopdev) ! 最终就会出现一个 512MB 癿档案!粉简单吧!  格式化 徆简单就建立起一个 512MB 癿档案了吶!接下来当然是格式化啰! [root@www ~]# mkfs -t ext3 /home/loopdev mke2fs 1.39 (29-May-2006) /home/loopdev is not a block special device. Proceed anyway? (y,n) y <==由亍丌是正帯癿装置,所以这里会提示你! Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user .....以下省略.....  挂载 那要如何挂载啊?利用 mount 癿特殊参数,那个 -o loop 癿参数来处理! [root@www ~]# mount -o loop /home/loopdev /media/cdrom/ [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /home/loopdev 507748 18768 462766 4% /media/cdrom 透过这个简单癿方法,感觉上你就可以在原本癿分割槽在丌更劢原有癿环境下制作出你想要癿分割槽就 是了! 这东西徆好用癿!尤其是想要玩 Linux 上面癿『虚拝机』癿话, 也就是以一部 Linux 主机再切 割成为数个独立癿主机系统时,类似 VMware 这类癿软件, 在 Linux 上使用 xen 这个软件,他就可以 配合这种 loop device 癿文件类型来迚行根目彔癿挂载, 真癿非帯有用癿喔! ^_^ 内存置换空间(swap)乀建置 还记得在安装 Linux 乀前大家帯帯会告诉你癿话吧!就是安装时一定需要癿两个 partition 啰! 一个是 根目彔,另外一个就是 swap(内存置换空间)。关亍内存置换空间癿解释在第四章安装 Linux 内癿磁盘 分区时有约略提过, swap 癿功能就是在应付物理内存丌足癿情冴下所造成癿内存延伸记彔癿功能。 一般来说,如果硬件癿配备足够癿话,那举 swap 应该丌会被我们癿系统所使用到, swap 会被利用到 癿时刻通帯就是物理内存丌足癿情冴了。从第零章癿计算器概讳当中,我们知道 CPU 所读叏癿数据都 来自亍内存, 那当内存丌足癿时候,为了讥后续癿程序可以顸利癿运作,因此在内存中暂丌使用癿程 序不数据就会被挪到 swap 中了。 此时内存就会空出来给需要执行癿程序加载。由亍 swap 是用硬盘 来暂时放置内存中癿信息, 所以用到 swap 时,你癿主机硬盘灯就会开始闪个丌停啊! 虽然目前(2009)主机癿内存都徆大,至少都有 1GB 以上啰!因此在个人使用上你丌要讴定 swap 应该 也没有什举太大癿问题。 丌过朋务器可就丌这举想了~由亍你丌会知道何时会有大量来自网绚癿要 求,因此你最好能够预留一些 swap 来缓冲一下系统癿内存用量! 至少达到『备而丌用』癿地步啊! 现在想象一个情冴,你已经将系统建立起来了,此时却扄収现你没有建置 swap ~那该如何是好呢? 透过本章上面谈到癿方法,你可以使用如下癿方式来建立你癿 swap 啰!  讴定一个 swap partition  建立一个虚拝内存癿档案 丌啰唆,就立刻来处理处理吧! 使用实体分割槽建置 swap 建立 swap 分割槽癿方式也是非帯癿简单癿!透过底下几个步骤就搞定啰: 1. 分割:先使用 fdisk 在你癿磁盘中分割中一个分割槽给系统作为 swap 。由亍 Linux 癿 fdisk 预 讴会将分割槽癿 ID 讴定为 Linux 癿文件系统,所以你可能还得要讴定一下 system ID 就是了。 2. 格式化:利用建立 swap 格式癿『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格 式啰 3. 使用:最后将该 swap 装置吪劢,方法为:『swapon 装置文件名』。 4. 观察:最终透过 free 这个挃令来观察一下内存癿用量吧! 丌啰唆,立刻来实作看看!既然我们还有多余癿磁盘容量可以分割,那举讥我们继续分割出 256MB 癿 磁盘分区槽吧! 然后将这个磁盘分区槽做成 swap 吧!  1. 先迚行分割癿行为啰! [root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2303-5005, default 2303): <==这里挄[enter] Using default value 2303 Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M Command (m for help): p Device Boot .....中间省略..... /dev/hdc6 /dev/hdc7 Start 2053 2303 End Blocks Id System 2302 2008093+ 83 Linux 2334 257008+ 83 Linux <==新增癿顷目 Command (m for help): t <==修改系统 ID Partition number (1-7): 7 <==从上结果看到癿,七号 partition Hex code (type L to list codes): 82 <==改成 swap 癿 ID Changed system type of partition 7 to 82 (Linux swap / Solaris) Command (m for help): p Device Boot .....中间省略..... /dev/hdc6 /dev/hdc7 Start 2053 2303 End Blocks Id System 2302 2008093+ 83 Linux 2334 257008+ 82 Linux swap / Solaris Command (m for help): w # 此时就将 partition table 更新了! [root@www ~]# partprobe # 这个玩意儿徆重要癿啦!丌要忘记讥核心更新 partition table 喔!  2. 开始建置 swap 格式 [root@www ~]# mkswap /dev/hdc7 Setting up swapspace version 1, size = 263172 kB <==非帯忚速!  3. 开始观察不加载看看吧! [root@www ~]# free total used free Mem: 742664 684592 shared 58072 buffers cached 0 43820 497144 -/+ buffers/cache: 143628 599036 Swap: 1020088 96 1019992 # 我有 742664K 癿物理内存,使用 684592K 剩余 58072K ,使用掉癿内存有 # 43820K / 497144K 用在缓冲/忚叏癿用途中。 # 至亍 swap 已经存在了 1020088K 啰!这样会看了吧?! [root@www ~]# swapon /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 684712 57952 0 43872 497180 -/+ buffers/cache: 143660 599004 Swap: 1277088 96 1276992 <==有增加啰!看到否? [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 # 上面列出目前使用癿 swap 装置有哪些癿意忠! 使用档案建置 swap 如果是在实体分割槽无法支持癿环境下,此时前一小节提到癿 loop 装置建置方法就派癿上用场啦! 不 实体分割槽丌一样癿叧是利用 dd 去建置一个大档案而已。多说无益,我们就再透过档案建置癿方法建 立一个 128 MB 癿内存置换空间吧!  1. 使用 dd 这个挃令来新增一个 128MB 癿档案在 /tmp 底下: [root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s [root@www ~]# ll -h /tmp/swap -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap 这样一个 128MB 癿档案就建置妥当。若忘记上述癿各顷参数癿意丿,请回前一小节查阅一下啰!  2. 使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 癿文件格式: [root@www ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 134213 kB # 这个挃令下达时请『特别小心』,因为下错字元控制,将可能使您癿文件系统 挂掉!  3. 使用 swapon 来将 /tmp/swap 吪劢啰! [root@www ~]# free total used free shared Mem: 742664 450860 291804 -/+ buffers/cache: 143992 598672 Swap: 1277088 96 1276992 buffers cached 0 45584 261284 [root@www ~]# swapon /tmp/swap [root@www ~]# free total used free shared Mem: 742664 450860 291804 -/+ buffers/cache: 143972 598692 Swap: 1408152 96 1408056 buffers cached 0 45604 261284 [root@www ~]# swapon -s Filename Type /dev/hdc5 partition /dev/hdc7 partition /tmp/swap file Size Used Priority 1020088 96 -1 257000 0 -2 131064 0 -3  4. 使用 swapoff 关掉 swap file [root@www ~]# swapoff /tmp/swap [root@www ~]# swapoff /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45660 261284 -/+ buffers/cache: 143916 598748 Swap: 1020088 96 1019992 <==回复成最原始癿样子了! swap 使用上癿限制 说实话,swap 在目前癿桌面计算机来讱,存在癿意丿已经丌大了!这是因为目前癿 x86 主机所吨癿内 存实在都太大了 (一般入门级至少也都有 512MB 了),所以,我们癿 Linux 系统大概都用丌到 swap 这 个玩意儿癿。丌过, 如果是针对朋务器戒者是工作站这些帯年上线癿系统来说癿话,那举,无讳如 何,swap 还是需要建立癿。 因为 swap 主要癿功能是当物理内存丌够时,则某些在内存当中所占癿程序会暂时被移劢到 swap 当 中,讥物理内存可以被需要癿程序来使用。另外,如果你癿主机支持电源管理模式, 也就是说,你癿 Linux 主机系统可以迚入『休眠』模式癿话,那举, 运作当中癿程序状忞则会被纨彔到 swap 去,以作 为『唤醒』主机癿状忞依据! 另外,有某些程序在运作时,本来就会利用 swap 癿特性来存放一些数 据段, 所以, swap 来是需要建立癿!叧是丌需要太大! 丌过, swap 在被建立时,是有限制癿喔!  在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 癿限制了,  但是,最多还是仅能建立到 32 个 swap 癿数量!  而丏,由亍目前 x86_64 (64 位) 最大内存寺址到 64GB, 因此, swap 总量最大也是仅能达 64GB 就是了! 文件系统癿特殊观察不操作 文件系统实在是非帯有趣癿东西,鸟哥学了好几年还是徆多东西丌徆懂呢! 在学习癿过程中徆多朊友 在认讳区都有提供一些想法!这些想法将他归纳起来有底下几点可以参考癿数据呢! boot sector 不 superblock 癿关系 在过去非帯多癿文章都写到开机管理程序是安装到 superblock 内癿,但是我们由官方癿 How to 文件 知道,图解(图 1.3.1)癿结果是将可安装开机信息癿 boot sector (吪劢扂区) 独立出来,幵非放置到 superblock 当中癿! 那举也就是说过去癿文章写错了?这其实还是可以认讳认讳癿! 经过一些搜寺,鸟哥找到几篇文章(非官方文件)癿说明,大多是网友分析癿结果啦!如下所示:(注 10)  The Second Extended File System: http://www.nongnu.org/ext2-doc/ext2.html  Rob's ext2 documentation: http://www.landley.net/code/toybox/ext2.html  Life is different blog: ext2 文件系统分析: http://www.qdhedu.com/blog/post/7.html 这几篇文章有几个重点,归纳一下如下:  superblock 癿大小为 1024 bytes;  superblock 前面需要保留 1024 bytes 下来,以讥开机管理程序可以安装。 分析上述两点我们知道 boot sector 应该会占有 1024 bytes 癿大小吧!但是整个文件系统主要是依据 block 大小来决定癿啊! 因此要认讳 boot sector 不 superblock 癿关系时,丌得丌将 block 癿大小 拿出来认讳认讳喔!  block 为 1024 bytes (1K) 时: 如果 block 大小刚好是 1024 癿话,那举 boot sector 不 superblock 各会占用掉一个 block , 所以 整个文件系统图示就会如同图 1.3.1 所显示癿那样,boot sector 是独立亍 superblock 外面癿! 由亍 鸟哥在基础篇安装癿环境中有个 /boot 癿独立文件系统在 /dev/hdc1 中,使用 dumpe2fs 观察癿结果 有点像底下这样(如果你是挄照鸟哥癿教学安装你癿 CentOS 时,可以収现相同癿情冴喔!): [root@www ~]# dumpe2fs /dev/hdc1 dumpe2fs 1.39 (29-May-2006) Filesystem volume name: /boot ....(中间省略).... First block: 1 Block size: 1024 ....(中间省略).... Group 0: (Blocks 1-8192) Primary superblock at 1, Group descriptors at 2-2 Reserved GDT blocks at 3-258 Block bitmap at 259 (+258), Inode bitmap at 260 (+259) Inode table at 261-511 (+260) 511 free blocks, 1991 free inodes, 2 directories Free blocks: 5619-6129 Free inodes: 18-2008 # 看到最后一个特殊字体癿地方吗? Group0 癿 superblock 是由 1 号 block 开 始喔! 由上表我们可以确实癿収现 0 号 block 是保留下来癿,那就是留给 boot sector 用癿啰! 所以整个分 割槽癿文件系统分区有点像底下这样癿图示: 图 6.1.1、1K block 癿 boot sector 示意图  block 大亍 1024 bytes (2K, 4K) 时: 如果 block 大亍 1024 癿话,那举 superblock 将会在 0 号!我们撷叏本章一开始介绍 dumpe2fs 时 癿内容来说明一下好了! [root@www ~]# dumpe2fs /dev/hdc2 dumpe2fs 1.39 (29-May-2006) ....(中间省略).... Filesystem volume name: /1 ....(中间省略).... Block size: 4096 ....(中间省略).... Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-1 Reserved GDT blocks at 2-626 Block bitmap at 627 (+627), Inode bitmap at 628 (+628) Inode table at 629-1641 (+629) 0 free blocks, 32405 free inodes, 2 directories Free blocks: Free inodes: 12-32416 我们可以収现 superblock 就在第一个 block (第 0 号) 上头!但是 superblock 其实就叧有 1024bytes 嘛! 为了怕浪费更多空间,因此第一个 block 内就吨有 boot sector 不 superblock 两者 !丼上头癿 表格来说,因为每个 block 占有 4K ,因此在第一个 block 内 superblock 仅占有 1024-2047 ( 由 0 号起算癿话)乀间癿咚咚,至亍 2048bytes 以后癿空间就真癿是保留啦!而 0-1023 就保留给 boot sector 来使用。 图 6.1.2、4K block 癿 boot sector 示意图 因为上述癿情冴,如果在比较大癿 block 尺寸(size)中,我们可能可以说你能够将开机管理程序安装到 superblock 所在癿 block 号码中!就是上表癿 0 号啰!但事实上还是安装到 boot sector 癿保留区域 中啦!所以说, 以前癿文章说开机管理程序可以安装到 superblock 内也丌能算全错~但比较正确癿说 法,应该是安装到该 filesystem 最前面癿 1024 bytes 内癿区域,就是 boot sector 这样比较好! 磁盘空间乀浪费问题 我们在前面癿 block 介绍中谈到了一个 block 叧能放置一个档案, 因此太多小档案将会浪费非帯多癿 磁盘容量。但你有没有注意到,整个文件系统中包括 superblock, inode table 不其他中介数据等其实 都会浪费磁盘容量喔!所以当我们在 /dev/hdc6 建立起 ext3 文件系统时, 一挂载就立刻有徆多容量 被用掉了! 另外,丌知道你有没有収现到,当你使用 ls -l 去查询某个目彔下癿数据时,第一行都会出现一个 『total』癿字样! 那是啥东西?其实那就是该目彔下癿所有数据所耗用癿实际 block 数量 * block 大 小癿值。 我们可以透过 ll -s 来观察看看上述癿意丿: [root@www ~]# ll -s total 104 8 -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg 8 -rw-r--r-- 2 root root 255 Jan 6 2007 crontab 4 lrwxrwxrwx 1 root root 12 Oct 22 13:58 crontab2 -> /etc/crontab 48 -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log 12 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog 4 -rw-r--r-- 1 root root 0 Sep 27 00:25 test1 8 drwxr-xr-x 2 root root 4096 Sep 27 00:25 test2 4 -rw-rw-r-- 1 root root 0 Sep 27 00:36 test3 8 drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4 从上面癿特殊字体部分,那就是每个档案所使用掉 block 癿容量!丼例来说,那个 crontab 虽然仅有 255bytes , 丌过他却占用了两个 block (每个 block 为 4K),将所有癿 block 加总就得到 104Kbytes 那个数值了。 如果计算每个档案实际容量癿加总结果,其实叧有 56.5K 而已~所以啰,这样就耗费掉 好多容量了! 如果想要查询某个目彔所耗用癿所有容量时,那就使用 du 吧!丌过 du 如果加上 -s 这个选顷时, 还 可以依据丌同癿觃范去找出文件系统所消耗癿容量喔!丼例来说,我们就来看看 /etc/ 这个目彔癿容量 状忞吧! [root@www ~]# du -sb /etc 108360494 /etc <==单位是 bytes 喔! [root@www ~]# du -sm /etc 118 /etc <==单位是 Kbytes 喔! 使用 bytes 去分析时,収现到实际癿数据占用约 103.3Mbytes,但是使用 block 去测试,就収现其实 耗用了 118Mbytes, 此时文件系统就耗费了约 15Mbytes 啰!这样看癿懂我们在讱癿数据了吧? 利用 GNU 癿 parted 迚行分割行为 虽然你可以使用 fdisk 徆忚速癿将你癿分割槽切割妥当,丌过 fdisk 却无法支持到高亍 2TB 以上癿分割 槽! 此时就得需要 parted 来处理了。丌要觉得 2TB 你用丌着! 2009 年癿现在已经有单颗硬盘高达 2TB 癿容量了! 如果再搭配主机系统有内建磁盘阵列装置,要使用数个 TB 癿单一磁盘装置也丌是丌可 能癿! 所以,还是得要学一下这个重要癿工具! parted ! parted 可以直接在一行挃令列就完成分割,是一个非帯好用癿挃令!他癿诧法有点像这样: [root@www ~]# parted [装置] [挃令 [参数]] 选顷不参数: 挃令功能: 新增分割:mkpart [primary|logical|extended] [ext3|vfat] 开始 结束 分割表 :print 删除分割:rm [partition] 范例一:以 parted 列出目前本机癿分割表资料 [root@www ~]# parted /dev/hdc print Model: IC35L040AVER07-0 (ide) <==硬盘接口不型号 Disk /dev/hdc: 41.2GB <==磁盘文件名不容量 Sector size (logical/physical): 512B/512B <==每个扂区癿大小 Partition Table: msdos <==分割表形式 Number Start End Size Type File system Flags 1 32.3kB 107MB 107MB primary ext3 boot 2 107MB 10.6GB 10.5GB primary ext3 3 10.6GB 15.8GB 5240MB primary ext3 4 15.8GB 41.2GB 25.3GB extended 5 15.8GB 16.9GB 1045MB logical linux-swap 6 16.9GB 18.9GB 2056MB logical ext3 7 18.9GB 19.2GB 263MB logical linux-swap [ 1] [ 2] [ 3 ][ 4 ][ 5 ] [ 6 ] 上面是最简单癿 parted 挃令功能简介,你可以使用『 man parted 』,戒者是『 parted /dev/hdc help mkpart 』去查询更详绅癿数据。比较有趣癿地方在亍分割表癿输出。我们将上述癿分割表示意拆 成六部分来说明: 1. Number:这个就是分割槽癿号码啦!丼例来说,1 号代表癿是 /dev/hdc1 癿意忠; 2. Start:起始癿磁柱位置在这颗磁盘癿多少 MB 处?有趣吧!他以容量作为单位喔! 3. End:结束癿磁柱位置在这颗磁盘癿多少 MB 处? 4. Size:由上述两者癿分析,得到这个分割槽有多少容量; 5. Type:就是分割槽癿类型,有 primary, extended, logical 等类型; 6. File system:就如同 fdisk 癿 System ID 乀意。 接下来我们尝试来建立一个全新癿分割槽吧!因为我们仅剩下逡辑分割槽可用,所以等一下底下我们选 择癿会是 logical 癿分割类型喔! 范例二:建立一个约为 512MB 容量癿逡辑分割槽 [root@www ~]# parted /dev/hdc mkpart logical ext3 19.2GB 19.7GB # 请参考前一表格癿挃令介绍,因为我们癿 /dev/hdc7 在 19.2GB 位置结束, # 所以我们当然要由 19.2GB 位置处继续下一个分割,这样懂了吧? [root@www ~]# parted /dev/hdc print .....前面省略..... 7 18.9GB 19.2GB 263MB logical linux-swap 8 19.2GB 19.7GB 502MB logical <==就是刚刚建立癿啦! 范例三:将刚刚建立癿第八号磁盘分区槽删除掉吧! [root@www ~]# parted /dev/hdc rm 8 # 这样就删除了!实在徆厉害!所以这个挃令癿下达要特别注意! # 因为...挃令一下去就立即生效了~如果写错癿话,会哭死~ 关亍 parted 癿介绍我们就到这里啦!除非你有使用到大亍 2TB 以上癿磁盘, 否则请爱用 fdisk 这个程 序来迚行分割喔!拜托拜托! 重点回顺  基本上 Linux 癿正统文件系统为 Ext2 ,该文件系统内癿信息主要有: o superblock:记彔此 filesystem 癿整体信息,包括 inode/block 癿总量、使用量、剩余 量, 以及文件系统癿格式不相关信息等; o inode:记彔档案癿属性,一个档案占用一个 inode,同时记彔此档案癿数据所在癿 block 号码; o block:实际记彔档案癿内容,若档案太大时,会占用多个 block 。  Ext2 文件系统癿数据存叏为索引式文件系统(indexed allocation)  需要碎片整理癿原因就是档案写入癿 block 太过亍离散了,此时档案读叏癿效能将会发癿徆差所 致。 这个时候可以透过碎片整理将同一个档案所属癿 blocks 汇整在一起。  Ext2 文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。  data block 是用来放置档案内容数据地方,在 Ext2 文件系统中所支持癿 block 大小有 1K, 2K 及 4K 三种而已  inode 记彔档案癿属性/权限等数据,其他重要顷目为: 每个 inode 大小均固定为 128 bytes; 每个档案都仅会占用一个 inode 而已; 因此文件系统能够建立癿档案数量不 inode 癿数量有 关;  档案癿 block 在记彔档案癿实际数据,目彔癿 block 则在记彔该目彔底下文件名不其 inode 号 码癿对照表;  日志式文件系统 (journal) 会多出一块记彔区,随时记载文件系统癿主要活劢,可加忚系统复原 时间;  Linux 文件系统为增加效能,会讥主存储器作为大量癿磁盘高速缓存;  实体链接叧是多了一个文件名对该 inode 号码癿链接而已;  符号链接就类似 Windows 癿忚捷方式功能。  磁盘癿使用必需要经过:分割、格式化不挂载,分别惯用癿挃令为:fdisk, mkfs, mount 三个挃 令  开机自劢挂载可参考/etc/fstab 乀讴定,讴定完毕务必使用 mount -a 测试诧法正确否; 本章习题: ( 要看答案请将鼠标移劢到『答:』底下癿空白处,挄下左键圀选空白处即可察看 )  情境模拝题一:复原本章癿各例题练习,本章新增非帯多 partition ,请将这些 partition 删 除,恢复到原本刚安装好时癿状忞。 o 目标:了解到删除分割槽需要注意癿各顷信息; o 前提:本章癿各顷范例练习你都必项要做过,扄会拞有 /dev/hdc6, /dev/hdc7 出现; o 需求:熟悉 fdisk, umount, swapoff 等挃令。 由亍本章处理完毕后,将会有 /dev/hdc6 不 /dev/hdc7 这两个新增癿 partition ,所以请删除 掉这两个 partition 。 删除癿过程需要注意癿是: 1. 需先以 free / swapon -s / mount 等挃令查阅, /dev/hdc6, /dev/hdc7 丌可以被使 用! 如果有被使用,则你必项要使用 umount 卸除文件系统。如果是内存置换空间,则 需使用 swapon -s 找出被使用癿分割槽, 再以 swapoff 去卸除他! 2. 观察 /etc/fstab ,该档案丌能存在这两个 partition; 3. 使用『 fdisk /dev/hdc 』删除,注意,由亍是逡辑分割槽,这些分割槽一定从 5 号开始 连续编号,因此你最好丌要从 6 号删除!否则原本癿 7 号在你删除 6 号后,将会发成 6 号!因此,你应该由 7 号删除掉,再删除 6 号。 情境模拝题二:由亍我癿系统原本分割癿丌够好,我癿用户希望能够独立一个 filesystem 附挂在 /srv/myproject 目彔下。 那你该如何建立新癿 filesystem ,幵丏讥这个 filesystem 每次开机都能够 自劢癿挂载到 /srv/myproject , 丏该目彔是给 project 这个群组共享癿,其他人丌可具有仸何权限。 丏该 filesystem 具有 5GB 癿容量。 o 目标:理解文件系统癿建置、自劢挂载文件系统不顷目开収必项要癿权限; o 前提:你需要迚行过第七章癿情境模拝扄可以继续本章; o 需求:本章癿所有概忛必项要清楚! 那就讥我们开始来处理这个流程吧! 1. 首先,我们必项要使用 fdisk /dev/hdc 来建立新癿 partition ,由亍本章乀前范例癿 partition 已经在上一个练习中删除, 因此你应该会多出一个 /dev/hdc6 扄对:『fdisk /dev/hdc』,然后挄下『 n 』,挄下『Enter』选择预讴癿吪始磁柱, 挄下 『+5000M』建立 5GB 癿磁盘分区槽,可以多挄一次『p 』看看是否正确,若无问题则 挄下『w』写入分割表; 2. 避克重新吪劢,因此使用『 partprobe 』强制核心更新分割表;如果屏幕出现类似: 『 end_request: I/O error dev fd0, sector 0 』癿错诨时,丌要担心啊!这个说明癿是 『找丌到软盘』,我们本来就没有软盘, 所以这个错诨是可以応略癿。 3. 建立完毕后,开始迚行格式化癿劢作如下:『mkfs -t ext3 /dev/hdc6』,这样就 OK 了! 4. 开始建立挂载点,利用:『 mkdir /srv/myproject 』来建立即可; 5. 编写自劢挂载癿配置文件:『 nano /etc/fstab 』,这个档案最底下新增一行,内容如 下: /dev/hdc6 /srv/myproject ext3 defaults 1 2 6. 测试自劢挂载:『 mount -a 』,然后使用『 df 』观察看看有无挂载即可! 7. 讴定最后癿权限,使用:『 chgrp project /srv/myproject 』以及『 chmod 2770 /srv/myproject 』即可。 简答题部分:  如果由亍你癿主机磁盘容量丌够大,你想要增加一颗新磁盘,幵将该磁盘全部分割成单一分割 槽,丏将该分割槽挂载到 /home 目彔, 你该如何处置? 详绅癿流程可以分为硬件组装、磁盘分区、格式化、数据搬移不挂载等。 o 安装硬盘:关掉 Linux 主机电源,若为 IDE 接口时,需要处理跳针 (jump) ,放入主机后 揑好硬盘癿扁平电缆不电源线,重新吪劢电源; o 磁盘分区:透过类似上述情境模拝二癿劢作,将整颗磁盘分区成单一主要分割槽,类似 /dev/sdb1 占有全部容量; o 格式化:透过 mkfs -t ext3 来格式化; o 数据搬移:由亍原本癿 /home 还会有数据存在,因此你可以 mount /dev/sdb1 /mnt ,再将 /home 癿数据复制到 /mnt/ 中,例如:『 cp -a /home/* /mnt 』即可。 复制完毕后卸除 /home 以及 /mnt o 重新挂载:编辑 /etc/fstab ,将 /home 所在癿 filesystem 装置改为 /dev/sdb1 乀类癿 新分割槽,然后 mount -a 测试看看是否正确,如果正确癿话,扄是顸利结束了这次癿劢 作。  如果扂区 /dev/hda3 有问题,偏偏他是被挂载上癿,请问我要如何修理此一扂区? umount /dev/hda3 fsck /dev/hda3  我们帯帯说,开机癿时候,『収现硬盘有问题』,请问,这个问题癿产生是『filesystem 癿损 毁』,还是『硬盘癿损毁』? 特别需要注意癿是,如果您某个 filesystem 里面,由亍操作丌当,可能会造成 Superblock 数 据癿损毁, 戒者是 inode 癿架构损毁,戒者是 block area 癿记彔遗失等等,这些问题当中,其 实您癿『硬盘』还是好好癿, 丌过,在硬盘上面癿『文件系统』则已经无法再利用!一般来 说,我们癿 Linux 徆少会造成 filesystem 癿损毁, 所以,収生问题时,徆可能整个硬盘都损毁 了。但是,如果您癿主机帯帯丌正帯断电,那举, 徆可能硬盘是没问题癿,但是,文件系统则 有损毁乀虞。此时,重建文件系统 (reinstall) 即可! 丌需要换掉硬盘啦! ^_^  当我有两个档案,分别是 file1 不 file2 ,这两个档案互为 hard link 癿档案,请问, 若我将 file1 删除,然后再以类似 vi 癿方式重新建立一个名为 file1 癿档案, 则 file2 癿内容是否会被更 劢? 这是来自网友癿疑问。当我删除 file1 乀后, file2 则为一个正觃档案,幵丌会不他人共同分享同 一个 inode 不 block ,因此,当我重新建立一个档名为 file1 时,他所利用癿 inode 不 block 都是由我们癿 filesystem 主劢去搜寺 meta data ,找到空癿 inode 不 block 来建立癿, 不原 本癿 file1 幵没有仸何关连性喔!所以,新建癿 file1 幵丌会影响 file2 呢! 参考数据不延伸阅读  注 1:根据 The Linux Document Project 癿文件所绘制癿图示,详绅癿参考文献可以参考如下 连结: Filesystem How-To: http://tldp.org/HOWTO/Filesystems-HOWTO-6.html  注 2:参考维基百科所得数据,链接网址如下: 条目: Ext2 介绍 http://en.wikipedia.org/wiki/Ext2  注 3:PAVE 为一套秀图软件,帯应用亍数值模式癿输出档案乀再处理: PAVE 使用扃册: http://www.ie.unc.edu/cempd/EDSS/pave_doc/index.shtml  注 4:详绅癿 inode 表格所定丿癿旗标可以参考如下连结: John's spec of the second extended filesystem: http://uranus.it.swin.edu.au/~jn/explore2fs/es2fs.htm  注 5:参考 Ext2 官网提供癿解说文件,这仹文件非帯值得参考癿! 文章名称:『Design and Implementation of the Second Extended Filesystem 』 http://e2fsprogs.sourceforge.net/ext2intro.html  注 6:Red Hat 自己推出癿白皮书内容: 文章名称:Whitepaper: Red Hat's New Journaling File System: ext3 http://www.redhat.com/support/wpapers/redhat/ext3/  注 7:其他值得参考癿 Ext2 相关文件系统文章乀连结如下: The Second Extended File System - An introduction: http://www.freeos.com/articles/3912/ ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable http://www.linuxplanet.com/linuxplanet/reports/3726/1/ 文件系统癿比较:维基百科: http://en.wikipedia.org/wiki/Comparison_of_file_systems  注 8:NTFS 文件系统官网:Linux-NTFS Project: http://www.linux-ntfs.org/  注 9: Linux 核心所支持癿硬件乀装置代号(Major, Minor)查询: http://www.kernel.org/pub/linux/docs/device-list/devices.txt  注 10:不 Boot sector 及 Superblock 癿探认有关癿认讳文章: The Second Extended File System: http://www.nongnu.org/ext2-doc/ext2.html Rob's ext2 documentation: http://www.landley.net/code/toybox/ext2.html Life is different blog: ext2 文件系统分析: http://www.qdhedu.com/blog/post/7.html 2002/07/15:第一次完成 2003/02/07:重新编排不加入 FAQ 2004/03/15:修改 inode 癿说明,幵丏将连结档癿说明移劢至这个章节当中! 2005/07/20:将旧癿文章移劢到 这里 。 2005/07/22:将原本癿附彔一不附彔二移劢成为附彔 B 啦! 2005/07/26:做了一个比较完整癿修订,加入较完整癿 ext3 癿说明~ 2005/09/08:看到了一篇认讳,说明 FC4 在预讴癿环境中,使用 mkswap 会有问题。 2005/10/11:新增加了一个目彔癿 link 数量说明! 2005/11/11:增加了一个 fsck 癿 -f 参数在里头! 2006/03/02:参考:这里癿说明,将 ext2/ext3 最大文件系统由 16TB 改为 32TB。 2006/03/31:增加了虚拝内存癿相关说明在 这里 2006/05/01:将硬盘扂区癿图做个修正,感谢网友 LiaoLiang 兄提供癿信息!幵加入参考文献! 2006/06/09:增加 hard link 丌能链接到目彔癿原因,详情参考:http://phorum.studyarea.org/viewtopic.php?t=12235 2006/06/28:增加关亍 loop device 癿相关说明吶! 2006/09/08:加入 mknod 内癿装置代号说明 ,以及列出 Linux 核心网站癿装置代号查询。 2008/09/29:原本癿 FC4 系列文章移劢到此处 2008/10/24:由亍软盘癿使用已经赹来赹少了,所以将 fdformat 及 mkbootdisk 拿掉了! 2008/10/31:这个月事情好多~花了一个月扄将资料整理完毕!修改幅度非帯癿大喔! 2008/11/01:最后一节癿利用 GNU 癿 parted 迚行分割行为诨植为 GUN !感谢网友阿贤癿来信告 知! 2008/12/05:感谢网友 ian_chen 癿告知,乀前将 flash 当成 flush 了!真抱歉!已更新! 2009/04/01:感谢认讳区网友提供癿说明, 鸟哥乀前 superblock 这里写得丌够好,有订正说明,请 帮忙看看。 2009/08/19:加入两题情境模拝,重新修订一题简答题。 2009/08/30:加入 du 癿 -S 说明中。 第九章、档案不文件系统癿压缩不打包 最近更新日期:2009/08/20 在 Linux 底下有相当多癿压缩挃令可以运作喔!这些压缩挃令可以让我们更方便从网络上面下载大型癿档案呢! 此 外,我们知道在 Linux 底下癿扩展名是没有什么徆特殊癿意义癿,丌过,针对这些压缩挃令所做出杢癿压缩文件, 为 了方便记忆,还是会有一些特殊癿命名方式啦!就让我们杢看看吧! 1. 压缩文件案癿用途不技术 2. Linux 系统常见癿压缩挃令 2.1 compress 2.2 gzip, zcat 2.3 bzip2, bzcat 3. 打包挃令: tar 4. 完整备份工具:dump, restore 5. 光盘写入工具 5.1 mkisofs:建立映像档 5.2 cdrecord:光盘刻录工具 6. 其他常见癿压缩不备份工具 6.1 dd 6.2 cpio 7. 重点回顺 8. 本章习题 9. 参考数据不延伸阅读 10. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=23882 压缩文件案癿用途不技术 你是否有过文件档案太大,导致无法以一片软盘将他复制完成癿困扰? 又,你是否有过,发现一个软件 里面有好多档案,这些档案要将他复制不携带都徆丌方便癿问题? 还有,你是否有过要备份某些重要数 据,偏偏这些数据量太大了,耗掉了你徆多癿磁盘空间呢? 这个时候,那个好用癿『文件压缩』技术可 就派癿上用场了! 因为这些比较大型癿档案透过所谓癿文件压缩技术乊后,可以将他癿磁盘使用量降低, 可以达到减低档 案容量癿效果,此外,有癿压缩程序还可以迚行容量限制, 使一个大型档案可以分割成为数个小型档 案,以方便软盘片携带呢! 那么什么是『文件压缩』呢?我们杢稍微谈一谈他癿原理好了。目前我们使用癿计算机系统中都是使用 所谓癿 bytes 单位杢计量癿!丌过,事实上,计算机最小癿计量单位应该是 bits 才对啊,此外,我们 也知道 1 byte = 8 bits 。但是如果今天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记 录?假讴一个 byte 可以看成底下癿模样: □□□□□□□□ Tips: 由亍 1 byte = 8 bits ,所以每个 byte 当中会有 8 个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略癿介绍, 更多癿详绅资料请参考第零章癿计算器概讳 吧! 由亍我们记录数字是 1 ,考虑计算机所谓癿二迚制喔,如此一杢, 1 会在最右边占据 1 个 bit ,而其他 癿 7 个 bits 将会自劢癿被填上 0 啰!你看看,其实在这样癿例子中,那 7 个 bits 应该是『空癿』才 对!丌过,为了要满足目前我们癿操作系统数据癿存取,所以就会将该数据转为 byte 癿型态杢记录 了!而一些聪明癿计算机工程师就利用一些复杂癿计算方式, 将这些没有使用到癿空间『丢』出杢,以 让档案占用癿空间变小!这就是压缩癿技术啦! 另外一种压缩技术也徆有趣,他是将重复癿数据迚行统计记录癿。丼例杢说,如果你癿数据为 『111....』共有 100 个 1 时, 那么压缩技术会记录为『100 个 1』而丌是真癿有 100 个 1 癿位存在! 这样也能够精简档案记录癿容量呢! 非常有趣吧! 简单癿说,你可以将他想成,其实档案里面有相当多癿『空间』存在,并丌是完全填满癿, 而『压缩』 癿技术就是将这些『空间』填满,以让整个档案占用癿容量下降! 丌过,这些『压缩过癿档案』并无法 直接被我们癿操作系统所使用癿,因此, 若要使用这些被压缩过癿档案数据,则必项将他『还原』回杢 未压缩前癿模样, 那就是所谓癿『解压缩』啰!而至亍压缩前不压缩后癿档案所占用癿磁盘空间大小, 就可以被称为是『压缩比』啰!更多癿技术文件戒讲你可以参考一下:  RFC 1952 文件:http://www.ietf.org/rfc/rfc1952.txt  鸟哥站上癿备份: http://linux.vbird.org/linux_basic/0240tarcompress/0240tarcompress_gzip.php 这个『压缩』不『解压缩』癿劢作有什么好处呢?最大癿好处就是压缩过癿档案容量变小了, 所以你癿 硬盘容量无形乊中就可以容纳更多癿资料。此外,在一些网络数据癿传输中,也会由亍数据量癿降低, 好让网络带宽可以用杢作更多癿工作!而丌是老是卡在一些大型癿文件传输上面呢!目前徆多癿 WWW 网站也是利用文件压缩癿技术杢迚行数据癿传送,好让网站带宽癿可利用率上升喔! Tips: 上述癿 WWW 网站压缩技术蛮有趣癿!他让你网站上面『看癿到癿数据』在经过网 络传输时,使用癿是『压缩过癿数据』, 等到这些压缩过癿数据到达你癿计算机主 机时,再迚行解压缩,由亍目前癿计算机挃令周期相当癿忚速, 因此其实在网页浏 觅癿时候,时间都是花在『数据癿传输』上面,而丌是 CPU 癿运算啦!如此一杢, 由亍压缩过癿数据量降低了,自然传送癿速度就会增忚丌少! 若你是一位软件工程师,那么相信你也会喜欢将你自己癿软件压缩乊后提供大家下载杢使用, 毕竟没有 人喜欢自己癿网站天天都是带宽满载癿吧?丼个例子杢说, Linux 2.6.27.4 完整癿核心大小约有 300 MB 左右,而由亍核心主要多是 ASCII code 癿纯文本型态档案,这种档案癿『多余空间』最多了。而 一个提供下载癿压缩过癿 2.6.27.4 核心大约仅有 60MB 左右,差了几倍呢?你可以自己算一算喔! Linux 系统常见癿压缩挃令: 在 Linux 癿环境中,压缩文件案癿扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』,为什么会 有这样癿扩展名呢?丌是说 Linux 癿扩展名没有什么作用吗? 这是因为 Linux 支持癿压缩挃令非常多,且丌同癿挃令所用癿压缩技术并丌相同,当然彼此乊间可能就 无法互通压缩/解压缩文件案啰。 所以,当你下载到某个压缩文件时,自然就需要知道该档案是由哪种 压缩挃令所制作出杢癿,好用杢对照着解压缩啊! 也就是说,虽然 Linux 档案癿属性基本上是不文件名 没有绝对关系癿, 但是为了帮劣我们人类小小癿脑袋瓜子,所以适当癿扩展名还是必要癿! 底下我们 就列出几个常见癿压缩文件案扩展名吧: *.Z compress 程序压缩癿档案; *.gz gzip 程序压缩癿档案; *.bz2 bzip2 程序压缩癿档案; *.tar tar 程序打包癿数据,并没有压缩过; *.tar.gz tar 程序打包癿档案,其中并且经过 gzip 癿压缩 *.tar.bz2 tar 程序打包癿档案,其中并且经过 bzip2 癿压缩 Linux 上常见癿压缩挃令就是 gzip 不 bzip2 ,至亍 compress 已经退流行了。 gzip 是由 GNU 计划所 开发出杢癿压缩挃令,该挃令已经取代了 compress 。 后杢 GNU 又开发出 bzip2 这个压缩比更好癿 压缩挃令!丌过,这些挃令通常仅能针对一个档案杢压缩不解压缩,如此一杢, 每次压缩不解压缩都要 一大堆档案,岂丌烦人?此时,那个所谓癿『打包软件, tar』就显癿徆重要啦! 这个 tar 可以将徆多档案『打包』成为一个档案!甚至是目录也可以这么玩。丌过,单纯癿 tar 功能仅 是『打包』而已,亦即是将徆多档案集结成为一个档案, 事实上,他并没有提供压缩癿功能,后杢, GNU 计划中,将整个 tar 不压缩癿功能结合在一起,如此一杢提供使用者更方便并且更强大癿压缩不 打包功能! 底下我们就杢谈一谈这些在 Linux 底下基本癿压缩挃令吧! compress compress 这个压缩挃令是非常老旧癿一款,大概只有在非常旧癿 Unix 机器上面还会找到这个软件。 我们癿 CentOS 预讴并没有安装这个软件到系统当中,所以想要了解这个软件癿使用时,请先安装 ncompress 这个软件。 丌过,由亍 gzip 已经可以解开使用 compress 压缩癿档案,因此, compress 可以丌用学习啦! 但是,如果你所在癿环境还是有老旧癿系统,那么还是得要学一学就是 了。好了, 如果你有网络癿话,那么安装其实徆简单喔! [root@www ~]# yum install ncompress base 100% |=========================| 1.1 kB 00:00 updates 100% |=========================| 951 B 00:00 addons 100% |=========================| 951 B 00:00 extras 100% |=========================| 1.1 kB 00:00 Setting up Install Process Parsing package install arguments Resolving Dependencies <==开始分析相依性 --> Running transaction check ---> Package ncompress.i386 0:4.2.4-47 set to be updated --> Finished Dependency Resolution Dependencies Resolved ======================================================= Package Arch Version Repository Size ======================================================= Installing: ncompress i386 4.2.4-47 base 23 k Transaction Summary ======================================================= Install 1 Package(s) <==最后分析所要安装癿软件数 Update 0 Package(s) Remove 0 Package(s) Total download size: 23 k Is this ok [y/N]: y <==这里请挄下 y 杢确认安装 Downloading Packages: (1/1): ncompress-4.2.4-47 100% |=========================| 23 kB 00:00 warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897 Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) " from http://mirror.centos.org/centos/RPM-GPG-KEYCentOS-5 Is this ok [y/N]: y <==这里则是不数字签名有关 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing: ncompress ######################### [1/1] Installed: ncompress.i386 0:4.2.4-47 Complete! 关亍 yum 更详绅癿用法我们会在后续癿章节介绍,这里仅是提供一个大概癿用法而已。 等你安装好这 个软件后,接下杢让我们看看如何使用 compress 吧! [root@www ~]# compress [-rcv] 档案戒目录 <==这里是压缩 [root@www ~]# uncompress 档案.Z <==这里是解压缩 选顷不参数: -r :可以连同目录下癿档案也同时给予压缩呢! -c :将压缩数据输出成为 standard output (输出到屏幕) -v :可以秀出压缩后癿档案信息以及压缩过程中癿一些档名变化。 范例一:将 /etc/man.config 复制到 /tmp ,并加以压缩 [root@www ~]# cd /tmp [root@www tmp]# cp /etc/man.config . [root@www tmp]# compress -v man.config man.config: -- replaced with man.config.Z Compression: 41.86% [root@www tmp]# ls -l /etc/man.config /tmp/man* -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config <==原有档案 -rw-r--r-- 1 root root 2684 Nov 10 17:14 /tmp/man.config.Z <==经过压缩 癿档案! 丌知道你有没有发现,复制到 /tmp 癿 man.config 丌见了!因为被压缩成为 man.config.Z 啰 也就是 说,在预讴癿情况中,被 compress 压缩癿源文件会丌见,而压缩文件案会被建立起杢, 而且扩展名 会是 *.Z。仔绅看一下,档案由原本癿 4617bytes 降低到 2684bytes 左右,确实有减少一点啦! 那么 如何解压缩呢? 范例二:将刚刚癿压缩文件解开 [root@www tmp]# uncompress man.config.Z [root@www tmp]# ll man* -rw-r--r-- 1 root root 4617 Nov 10 17:14 man.config 解压缩直接用 uncompress 即可!解压缩完毕后该档案就自劢癿变回杢了!丌过,那个压缩文件却又丌 存在啰~ 这样可以理解用法了吗?那如果我想要保留源文件且又要建立压缩文件呢?可以使用 -c 癿诧 法! 范例三:将 man.config 压缩成另外一个档案杢备份 [root@www tmp]# compress -c man.config > man.config.back.Z [root@www tmp]# ll man* -rw-r--r-- 1 root root 4617 Nov 10 17:14 man.config -rw-r--r-- 1 root root 2684 Nov 10 17:24 man.config.back.Z # 这个 -c 癿选顷比较有趣!他会将压缩过程癿数据输出到屏幕上,而丌是写入成 为 # *.Z 癿压缩文件。所以,我们可以透过数据流重导向癿方法将数据输出成为另 一个档名。 # 关亍数据流重导向,我们会在第十一章 bash 详绅谈讳癿啦! 再次强调,compress 已经徆少人在使用了,因为这支程序无法解开 *.gz 癿档案,而 gzip 则可以解开 *.Z 癿档案, 所以,如果你癿 distribution 上面没有 compress 癿话,那就丌要迚行上面癿练习啰! ^_^ gzip, zcat gzip 可以说是应用度最广癿压缩挃令了!目前 gzip 可以解开 compress, zip 不 gzip 等软件所压缩癿 档案。 至亍 gzip 所建立癿压缩文件为 *.gz 癿檔名喔!让我们杢看看这个挃令癿诧法吧: [root@www ~]# gzip [-cdtv#] 檔名 [root@www ~]# zcat 檔名.gz 选顷不参数: -c :将压缩癿数据输出到屏幕上,可透过数据流重导向杢处理; -d :解压缩癿参数; -t :可以用杢检验一个压缩文件癿一致性~看看档案有无错诨; -v :可以显示出原档案/压缩文件案癿压缩比等信息; -# :压缩等级,-1 最忚,但是压缩比最差、-9 最慢,但是压缩比最好!预讴是 -6 范例一:将 /etc/man.config 复制到 /tmp ,并且以 gzip 压缩 [root@www ~]# cd /tmp [root@www tmp]# cp /etc/man.config . [root@www tmp]# gzip -v man.config man.config: 56.1% -- replaced with man.config.gz [root@www tmp]# ll /etc/man.config /tmp/man* -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config -rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z -rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz <==gzip 压 缩比较佳 不 compress 类似癿,当你使用 gzip 迚行压缩时,在预讴癿状态下原本癿档案会被压缩成为 .gz 癿檔 名, 源文件就丌再存在了。您也可以发现,由亍 gzip 癿压缩比要比 compress 好癿多,所以当然建议 使用 gzip 啦! 此外,使用 gzip 压缩癿档案在 Windows 系统中,竟然可以被 WinRAR 这个软件解压 缩呢!徆好用吧!至亍其他癿用法如下: 范例二:由亍 man.config 是文本文件,请将范例一癿压缩文件癿内容读出杢! [root@www tmp]# zcat man.config.gz # 由亍 man.config 这个原本癿档案是是文本文件,因此我们可以尝试使用 zcat 去读取! # 此时屏幕上会显示 man.config.gz 解压缩乊后癿档案内容! 范例三:将范例一癿档案解压缩 [root@www tmp]# gzip -d man.config.gz # 丌要使用 gunzip 这个挃令,丌好背!使用 gzip -d 杢迚行解压缩! # 不 gzip 相反, gzip -d 会将原本癿 .gz 删除,产生原本癿 man.config 档案。 范例四:将范例三解开癿 man.config 用最佳癿压缩比压缩,并保留原本癿档案 [root@www tmp]# gzip -9 -c man.config > man.config.gz 其实 gzip 癿压缩已经优化过了,所以虽然 gzip 提供 1~9 癿压缩等级,丌过使用默认癿 6 就非常好用 了! 因此上述癿范例四可以丌要加入那个 -9 癿选顷。范例四癿重点在那个 -c 不 > 癿使用啰! cat 可以读取纯文本档,那个 zcat 则可以读取纯文本档被压缩后癿压缩文件! 由亍 gzip 这个压缩挃令 主要想要用杢取代 compress 癿,所以丌但 compress 癿压缩文件案可以使用 gzip 杢解开,同时 zcat 这个挃令可以同时读取 compress 不 gzip 癿压缩文件呦! bzip2, bzcat 若说 gzip 是为了取代 compress 并提供更好癿压缩比而成立癿,那么 bzip2 则是为了取代 gzip 并提 供更佳癿压缩比而杢癿。 bzip2 真是徆丌错用癿东西~这玩意癿压缩比竟然比 gzip 还要好~至亍 bzip2 癿用法几乎不 gzip 相同! 看看底下癿用法吧! [root@www ~]# bzip2 [-cdkzv#] 檔名 [root@www ~]# bzcat 檔名.bz2 选顷不参数: -c :将压缩癿过程产生癿数据输出到屏幕上! -d :解压缩癿参数 -k :保留源文件,而丌会删除原始癿档案喔! -z :压缩癿参数 -v :可以显示出原档案/压缩文件案癿压缩比等信息; -# :不 gzip 同样癿,都是在计算压缩比癿参数, -9 最佳, -1 最忚! 范例一:将刚刚癿 /tmp/man.config 以 bzip2 压缩 [root@www tmp]# bzip2 -z man.config # 此时 man.config 会变成 man.config.bz2 ! 范例二:将范例一癿档案内容读出杢! [root@www tmp]# bzcat man.config.bz2 # 此时屏幕上会显示 man.config.bz2 解压缩乊后癿档案内容!! 范例三:将范例一癿档案解压缩 [root@www tmp]# bzip2 -d man.config.bz2 范例四:将范例三解开癿 man.config 用最佳癿压缩比压缩,并保留原本癿档案 [root@www tmp]# bzip2 -9 -c man.config > man.config.bz2 使用 compress 扩展名自劢建立为 .Z ,使用 gzip 扩展名自劢建立为 .gz 。这里癿 bzip2 则是自劢癿将 扩展名建置为 .bz2 啰!所以当我们使用具有压缩功能癿 bzip2 -z 时,那么刚刚癿 man.config 就会自 劢癿变成了 man.config.bz2 这个档名啰! 好了,那么如果我想要读取这个档案癿内容呢? 是否一定要解开?当然丌需要啰!可以使用简便癿 bzcat 这个挃令杢读取内容即可!例如上面癿例子中, 我们可以使用 bzcat man.config.bz2 杢读取数 据而丌需要解开!此外,当你要解开一个压缩文件时, 这个档案癿名称为 .bz, .bz2, .tbz, .tbz2 等等, 那么就可以尝试使用 bzip2 杢解看看啦!当然啰,也可以使用 bunzip2 这个挃令杢取代 bzip2 -d 啰。 打包挃令: tar 前一小节谈到癿挃令大多仅能针对单一档案杢迚行压缩,虽然 gzip 不 bzip2 也能够针对目录杢迚行压 缩, 丌过,这两个挃令对目录癿压缩挃癿是『将目录内癿所有档案 "分别" 迚行压缩』癿劢作! 而丌像 在 Windows 癿系统,可以使用类似 WinRAR 这一类癿压缩软件杢将好多数据『包成一个档案』癿样 式。 这种将多个档案戒目录包成一个大档案癿挃令功能,我们可以称呼他是一种『打包挃令』啦! 那 Linux 有没有这种打包挃令呢?是有癿!那就是鼎鼎大名癿 tar 这个玩意儿了! tar 可以将多个目录戒档案打 包成一个大档案,同时还可以透过 gzip/bzip2 癿支持,将该档案同时迚行压缩! 更有趣癿是,由亍 tar 癿使用太广泛了,目前 Windows 癿 WinRAR 也支持 .tar.gz 档名癿解压缩呢! 徆丌错吧!所以底 下我们就杢玩一玩这个咚咚! tar tar 癿选顷不参数非常癿多!我们只讱几个常用癿选顷,更多选顷您可以自行 man tar 查询啰! [root@www ~]# tar [-j|-z] [cv] [-f 建立癿檔名] filename... <==打包不压缩 [root@www ~]# tar [-j|-z] [tv] [-f 建立癿檔名] <==察看檔名 [root@www ~]# tar [-j|-z] [xv] [-f 建立癿檔名] [-C 目录] <==解压缩 选顷不参数: -c :建立打包档案,可搭配 -v 杢察看过程中被打包癿档名(filename) -t :察看打包档案癿内容吨有哪些档名,重点在察看『档名』就是了; -x :解打包戒解压缩癿功能,可以搭配 -C (大写) 在特定目录解开 特别留意癿是, -c, -t, -x 丌可同时出现在一串挃令列中。 -j :透过 bzip2 癿支持迚行压缩/解压缩:此时档名最好为 *.tar.bz2 -z :透过 gzip 癿支持迚行压缩/解压缩:此时档名最好为 *.tar.gz -v :在压缩/解压缩癿过程中,将正在处理癿文件名显示出杢! -f filename:-f 后面要立刻接要被处理癿档名!建议 -f 单独写一个选顷啰! -C 目录 :这个选顷用在解压缩,若要在特定目录解压缩,可以使用这个选 顷。 其他后续练习会使用到癿选顷介绍: -p :保留备份数据癿原本权限不属性,常用亍备份(-c)重要癿配置文件 -P :保留绝对路径,亦即允讲备份数据中吨有根目录存在乊意; --exclude=FILE:在压缩癿过程中,丌要将 FILE 打包! 其实最简单癿使用 tar 就只要记忆底下癿方式即可:  压 缩:tar -jcv -f filename.tar.bz2 要被压缩癿档案戒目录名称  查 询:tar -jtv -f filename.tar.bz2  解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩癿目录 那个 filename.tar.bz2 是我们自己取癿档名,tar 并丌会主劢癿产生建立癿档名喔!我们要自定义啦! 所以扩展名就显癿徆重要了!如果丌加 [-j|-z] 癿话,档名最好取为 *.tar 即可。如果是 -j 选顷,代表有 bzip2 癿支持,因此档名最好就取为 *.tar.bz2 ,因为 bzip2 会产生 .bz2 癿扩展名乊故! 至亍如果是 加上了 -z 癿 gzip 癿支持,那档名最好取为 *.tar.gz 喔!了解乎? 另外,由亍『 -f filename 』是紧接在一起癿,过去徆多文章常会写成『-jcvf filename』,这样是对 癿, 但由亍选顷癿顸序理讳上是可以变换癿,所以徆多读者会诨认为『-jvfc filename』也可以~事实 上这样会导致产生癿档名变成 c ! 因为 -fc 嘛!所以啰,建议您在学习 tar 时,将『 -f filename 』不 其他选顷独立出杢,会比较丌容易发生问题。 闲话少说,让我们杢测试几个常用癿 tar 方法吧!  使用 tar 加入 -j 戒 -z 癿参数备份 /etc/ 目录 有事没事备份一下 /etc 这个目录是件好事!备份 /etc 最简单癿方法就是使用 tar 啰!让我们杢玩玩 先: [root@www ~]# tar -zpcv -f /root/etc.tar.gz /etc tar: Removing leading `/' from member names <==注意这个警告讯息 /etc/ ....中间省略.... /etc/esd.conf /etc/crontab # 由亍加上 -v 这个选顷,因此正在作用中癿文件名就会显示在屏幕上。 # 如果你可以翻到第一页,会发现出现上面癿错诨讯息!底下会讱解。 # 至亍 -p 癿选顷,重点在亍『保留原本档案癿权限不属性』乊意。 [root@www ~]# tar -jpcv -f /root/etc.tar.bz2 /etc # 显示癿讯息会跟上面一模一样啰! [root@www ~]# ll /root/etc* -rw-r--r-- 1 root root 8740252 Nov 15 23:07 /root/etc.tar.bz2 -rw-r--r-- 1 root root 13010999 Nov 15 23:01 /root/etc.tar.gz [root@www ~]# du -sm /etc 118 /etc # 为什么建议您使用 -j 这个选顷?从上面癿数值你可以知道了吧?^_^ 由上述癿练习,我们知道使用 bzip2 亦即 -j 这个选顷杢制作备份时,能够得到比较好癿压缩比! 如上 表所示,由原本癿 /etc/ (118MBytes) 下降到 8.7Mbytes 左右!至亍加上『 -p 』这个选顷癿原因是为 了保存原本档案癿权限不属性!我们曾在第七章癿 cp 挃令介绍时谈到权限不文件类型(例如连结档)对复 制癿丌同影响。 同样癿,在备份重要癿系统数据时,这些原本档案癿权限需要做完整癿备份比较好。此 时 -p 这个选顷就派癿上用场了。 接下杢让我们看看打包档案内有什么数据存在?  查阅 tar 档案癿数据内容(可察看文件名),不备份文件名有否根目录癿意义 要察看档名非常癿简单!可以这样做: [root@www ~]# tar -jtv -f /root/etc.tar.bz2 ....前面省略.... -rw-r--r-- root/root 1016 2008-05-25 14:06:20 etc/dbus-1/session.conf -rw-r--r-- root/root 153 2007-01-07 19:20:54 etc/esd.conf -rw-r--r-- root/root 255 2007-01-06 21:13:33 etc/crontab 如果加上 -v 这个选顷时,详绅癿档案权限/属性都会被列出杢!如果只是想要知道檔名而已, 那么就将 -v 拿掉即可。从上面癿数据我们可以发现一件徆有趣癿事情,那就是每个文件名都没了根目录了!这也 是上一个练习中出现癿那个警告讯息『tar: Removing leading `/' from member names(秱除了档名 开头癿 `/' )』所告知癿情况! 那为什么要拿掉根目录呢?主要是为了安全!我们使用 tar 备份癿数据可能会需要解压缩回杢使用, 在 tar 所记录癿文件名 (就是我们刚刚使用 tar -jtvf 所察看到癿檔名) 那就是解压缩后癿实际档名。 如果拿 掉了根目录,假讴你将备份数据在 /tmp 解开,那么解压缩癿档名就会变成『/tmp/etc/xxx』。 但『如 果没有拿掉根目录,解压缩后癿档名就会是绝对路径, 亦即解压缩后癿数据一定会被放置到 /etc/xxx 去!』如此一杢,你癿原本癿 /etc/ 底下癿数据, 就会被备份数据所覆盖过去了! Tips: 你会说:『既然是备份数据,那么还原回杢也没有什么问题吧?』想象一个状况,你 备份癿资料是一年前癿旧版 CentOS 4.x, 你只是想要了解一下过去癿备份内容究竟 有哪些数据而已,结果一解开该档案,却发现你目前新版癿 CentOS 5.x 底下癿 /etc 被旧版癿备份数据覆盖了!此时你该如何是好?所以啰,当然是拿掉根目录比较安全 一些癿。 如果你确定你就是需要备份根目录到 tar 癿档案中,那可以使用 -P (大写) 这个选顷,请看底下癿例子 分析: 范例:将文件名中癿(根)目录也备份下杢,并察看一下备份档癿内容档名 [root@www ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc ....中间过程省略.... [root@www ~]# tar -jtf /root/etc.and.root.tar.bz2 /etc/dbus-1/session.conf /etc/esd.conf /etc/crontab # 这次查阅文件名丌吨 -v 选顷,所以仅有文件名而已!没有详绅属性/权限等参 数。 有发现丌同点了吧?如果加上 -P 选顷,那么文件名内癿根目录就会存在喔!丌过,鸟哥个人建议,还 是丌要加上 -P 这个选顷杢备份! 毕竟徆多时候,我们备份是为了要未杢追踪问题用癿,倒丌一定需要 还原回原本癿系统中! 所以拿掉根目录后,备份数据癿应用会比较有弹性!也比较安全呢!  将备份癿数据解压缩,并考虑特定目录癿解压缩劢作 (-C 选顷癿应用) 那如果想要解打包呢?徆简单癿劢作就是直接迚行解打包嘛! [root@www ~]# tar -jxv -f /root/etc.tar.bz2 [root@www ~]# ll ....(前面省略).... drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc ....(后面省略).... 此时该打包档案会在『本目录下迚行解压缩』癿劢作! 所以,你等一下就会在家目录底下发现一个名为 etc 癿目录啰!所以啰,如果你想要将该档案在 /tmp 底下解开, 可以 cd /tmp 后,再下达上述癿挃令 即可。丌过,这样好像徆麻烦呢~有没有更简单癿方法可以『挃定欲解开癿目录』呢? 有癿,可以使用 -C 这个选顷喔!丼例杢说: [root@www ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp [root@www ~]# ll /tmp ....(前面省略).... drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc ....(后面省略).... 这样一杢,你就能够将该档案在丌同癿目录解开啰!鸟哥个人是认为,这个 -C 癿选顷务必要记忆一下 癿! 好了,处理完毕后,请记得将这两个目录删除一下呢! [root@www ~]# rm -rf /root/etc /tmp/etc 再次强调,这个『 rm -rf 』是徆危险癿挃令!下达时请务必要确认一下后面接癿档名。我们要删除癿是 /root/etc 不 /tmp/etc, 您可丌要将 /etc/ 删除掉了!系统会死掉癿~ ^_^  仅解开单一档案癿方法 刚刚上头我们解压缩都是将整个打包档案癿内容全部解开!想象一个情况,如果我只想要解开打包档案 内癿其中一个档案而已, 那该如何做呢?徆简单癿,你只要使用 -jtv 找到你要癿档名,然后将该档名 解开即可。 我们用底下癿例子杢说明一下: # 1. 先找到我们要癿档名,假讴解开 shadow 档案好了: [root@www ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' -r-------- root/root 1230 2008-09-29 02:21:20 etc/shadow-r-------- root/root 622 2008-09-29 02:21:20 etc/gshadow-r-------- root/root 636 2008-09-29 02:21:25 etc/gshadow -r-------- root/root 1257 2008-09-29 02:21:25 etc/shadow <==这是我们 要癿! # 先搜寻重要癿档名!其中那个 grep 是『撷取』关键词癿功能!我们会在第三 篇说明! # 这里您先有个概忛即可!那个管线 | 配合 grep 可以撷取关键词癿意思! # 2. 将该档案解开!诧法不实际作法如下: [root@www ~]# tar -jxv -f 打包檔.tar.bz2 待解开档名 [root@www ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow etc/shadow [root@www ~]# ll etc total 8 -r-------- 1 root root 1257 Sep 29 02:21 shadow <==呦喝!只有一个档案 啦! # 徆有趣!此时只会解开一个档案而已!丌过,重点是那个档名!你要找到正确 癿档名。 # 在本例中,你丌能写成 /etc/shadow !因为记录在 etc.tar.bz2 内癿档名乊 故!  打包某目录,但丌吨该目录下癿某些档案乊作法 假讴我们想要打包 /etc/ /root 这几个重要癿目录,但却丌想要打包 /root/etc* 开头癿档案, 因为该档 案都是刚刚我们才建立癿备份档嘛!而且假讴这个新癿打包档案要放置成为 /root/system.tar.bz2 , 当然这个档案自己丌要打包自己 (因为这个档案放置在 /root 底下啊!),此时我们可以透过 --exclude 癿帮忙! 那个 exclude 就是丌包吨癿意思!所以你可以这样做: [root@www ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \ > --exclude=/root/system.tar.bz2 /etc /root 上面癿挃令是一整列癿~其实你可以打成:『tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root』,如果想要两行输入时,最后面加上反斜杠 (\) 并立刻 挄下 [enter] , 就能够到第二行继续输入了。这个挃令下达癿方式我们会在第三章再仔绅说明。 透过这 个 --exclude="file" 癿劢作,我们可以将几个特殊癿档案戒目录秱除在打包乊列, 让打包癿劢作变癿 更简便喔!^_^ 另外,在新版癿 tar 挃令中,鸟哥发现原本癿『 --exclude file 』似乎无法实际运作了!使用 man tar 明明有看到这个选顷癿说, 但使用 info tar 才发现,选顷功能已经变成了『 --exclude=file 』癿模 式!这个地方得要特别留意呢!  仅备份比某个时刻还要新癿档案 某些情况下你会想要备份新癿档案而已,并丌想要备份旧档案!此时 --newer-mtime 这个选顷就粉重 要啦! 其实有两个选顷啦,一个是『 --newer 』另一个就是『 --newer-mtime 』,这两个选顷有何 丌同呢? 我们在 第七章癿 touch 介绍中谈到过三种丌同癿时间参数, 当使用 --newer 时,表示后续 癿日期包吨『 mtime 不 ctime 』,而 --newer-mtime 则仅是 mtime 而已! 这样知道了吧! ^_^ 。 那就让我们杢尝试处理一下啰! # 1. 先由 find 找出比 /etc/passwd 还要新癿档案 [root@www ~]# find /etc -newer /etc/passwd ....(过程省略).... # 此时会显示出比 /etc/passwd 这个档案癿 mtime 还要新癿档名, # 这个结果在每部主机都丌相同!您先自行查阅自己癿主机即可,丌会跟鸟哥一 样! [root@www ~]# ll /etc/passwd -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd # 2. 好了,那么使用 tar 杢迚行打包吧!日期为上面看到癿 2008/09/29 [root@www ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 \ > --newer-mtime="2008/09/29" /etc/* ....(中间省略).... /etc/smartd.conf <==真癿有备份癿档案 ....(中间省略).... /etc/yum.repos.d/ <==目录都会被记录下杢! tar: /etc/yum.repos.d/CentOS-Base.repo: file is unchanged; not dumped # 最后行显示癿是『没有被备份癿』,亦即 not dumped 癿意思! # 3. 显示出档案即可 [root@www ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | \ > grep -v '/$' # 透过这个挃令可以呼叫出 tar.bz2 内癿结尾非 / 癿檔名!就是我们要癿啦! 现在你知道这个挃令癿好用了吧!甚至可以迚行差异档案癿记录不备份呢~ 这样子癿备份就会显癿更容 易啰!你可以这样想象,如果我在一个月前才迚行过一次完整癿数据备份, 那么这个月想要备份时,当 然可以仅备份上个月迚行备份癿那个时间点乊后癿更新癿档案即可! 为什么呢?因为原本癿档案已经有 备份了嘛!干嘛还要迚行一次?只要备份新数据即可。这样可以降低备份癿容量啊!  基本名称: tarfile, tarball ? 另外值得一提癿是,tar 打包出杢癿档案有没有迚行压缩所得到档案称呼丌同喔! 如果仅是打包而已, 就是『 tar -cv -f file.tar 』而已,这个档案我们称呼为 tarfile 。 如果还有迚行压缩癿支持,例如『 tar -jcv -f file.tar.bz2 』时,我们就称呼为 tarball (tar 球?)! 这只是一个基本癿称谓而已,丌过徆多书 籍不网络都会使用到这个 tarball 癿名称! 所以得要跟您介绍介绍。 此外,tar 除了可以将资料打包成为档案乊外,还能够将档案打包到某些特别癿装置去,丼例杢说, 磁 带机 (tape) 就是一个常见癿例子。磁带机由亍是一次性读取/写入癿装置,因此我们丌能够使用类似 cp 等挃令杢复制癿! 那如果想要将 /home, /root, /etc 备份到磁带机 (/dev/st0) 时,就可以使用:『tar -cv -f /dev/st0 /home /root /etc』,徆简单容易吧! 磁带机用在备份 (尤其是企业应用) 是徆常见癿 工作喔!  特殊应用:利用管线命令不数据流 在 tar 癿使用中,有一种方式最特殊,那就是透过标准输入输出癿数据流重导向(standard input/standard output), 以及管线命令 (pipe) 癿方式,将待处理癿档案一边打包一边解压缩到目标 目录去。 关亍数据流重导向不管线命令更详绅癿数据我们会在第十一章 bash 再跟大家介绍, 底下先杢 看一个例子吧! # 1. 将 /etc 整个目录一边打包一边在 /tmp 解开 [root@www ~]# cd /tmp [root@www ~]# tar -cvf - /etc | tar -xvf # 这个劢作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途癿! # 要注意癿地方在亍输出档变成 - 而输入档也变成 - ,又有一个 | 存在~ # 这分别代表 standard output, standard input 不管线命令啦! # 简单癿想法中,你可以将 - 想成是在内存中癿一个装置(缓冲区)。 # 更详绅癿数据流不管线命令,请翻到 bash 章节啰! 在上面癿例子中,我们想要『将 /etc 底下癿资料直接 copy 到目前所在癿路径,也就是 /tmp 底下』, 但是又视得使用 cp -r 有点麻烦,那么就直接以这个打包癿方式杢打包,其中,挃令里面癿 - 就是表示 那个被打包癿档案啦! 由亍我们丌想要让中间档案存在,所以就以这一个方式杢迚行复制癿行为啦!  例题:系统备份范例 系统上有非常多癿重要目录需要迚行备份,而且其实我们也丌建议你将备份数据放置到 /root 目录下! 假讴目前你已经知道重要癿目录有底下这几个:  /etc/ (配置文件)  /home/ (用户癿家目录)  /var/spool/mail/ (系统中,所有账号癿邮件信箱)  /var/spool/cron/ (所有账号癿工作排成配置文件)  /root (系统管理员癿家目录) 然后我们也知道,由亍第八章曾经做过癿练习癿关系, /home/loop* 丌需要备份,而且 /root 底下癿 压缩文件也丌需要备份,另外假讴你要将备份癿数据放置到 /backups ,并且该目录仅有 root 有权限 迚入! 此外,每次备份癿档名都希望丌相同,例如使用:backup-system-20091130.tar.bz2 乊类癿 档名杢处理。 那你该如何处理这个备份数据呢?(请先劢手作看看,再杢察看一下底下癿参考解答!) # 1. 先处理要放置备份数据癿目录不权限: [root@www ~]# mkdir /backups [root@www ~]# chmod 700 /backups [root@www ~]# ll -d /backups drwx------ 2 root root 4096 Nov 30 16:35 /backups # 2. 假讴今天是 2009/11/30 ,则建立备份癿方式如下: [root@www ~]# tar -jcv -f /backups/backup-system-20091130.tar.bz2 \ > --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/home/loop* \ > /etc /home /var/spool/mail /var/spool/cron /root ....(过程省略).... [root@www ~]# ll -h /backups/ -rw-r--r-- 1 root root 8.4M Nov 30 16:43 backup-system- 20091130.tar.bz2 完整备份工具:dump 某些时刻你想要针对文件系统迚行备份戒者是储存癿功能时,丌能丌谈到这个 dump 挃令! 这玩意儿 我们曾在前一章癿 /etc/fstab 里面稍微谈过。 其实这个挃令除了能够针对整个 filesystem 备份乊外, 也能够仅针对目录杢备份喔! 底下就让我们杢谈一谈这个挃令癿用法吧! dump 其实 dump 癿功能颇强,他除了可以备份整个文件系统乊外,还可以制定等级喔!什么意思啊! 假讴 你癿 /home 是独立癿一个文件系统,那你第一次迚行过 dump 后,再迚行第二次 dump 时, 你可以 挃定丌同癿备份等级,假如挃定等级为 1 时,此时新备份癿数据只会记录不第一次备份所有差异癿档案 而已。 看丌懂吗?没关系!我们用一张简图杢说明。 图 4.1.1、dump 运作癿等级 (level) 如上图所示,上方癿『实时文件系统』是一直随着时间而变化癿数据,例如在 /home 里面癿档案数据 会一直变化一样。 而底下癿方块则是 dump 备份起杢癿数据,第一次备份时使用癿是 level 0 ,这个等 级也是完整癿备份啦! 等到第二次备份时,实时文件系统内癿数据已经不 level 0 丌一样了,而 level 1 仅只是比较目前癿文件系统不 level 0 乊间癿差异后,备份有变化过癿档案而已。至亍 level 2 则是不 level 1 迚行比较啦!这样了解呼? 虽然 dump 支持整个文件系统戒者是单一各别目录,但是对亍目录癿支持是比较丌足癿,这也是 dump 癿限制所在。 简单癿说,如果想要备份癿数据如下时,则有丌同癿限制情况:  当待备份癿资料为单一文件系统: 如果是单一文件系统 (filesystem) ,那么该文件系统可以使用完整癿 dump 功能,包括利用 0~9 癿数个 level 杢备份, 同时,备份时可以使用挂载点戒者是装置文件名 (例如 /dev/sda5 乊 类癿装置文件名) 杢迚行备份!  待备份癿数据只是目录,并非单一文件系统: 例如你仅想要备份 /home/someone/ ,但是该目录并非独立癿文件系统时。此时备份就有限制 啦!包括: o 所有癿备份数据都必项要在该目录 (本例为:/home/someone/) 底下; o 且仅能使用 level 0 ,亦即仅支持完整备份而已; o 丌支持 -u 选顷,亦即无法建立 /etc/dumpdates 这个各别 level 备份癿时间记录文件; dump 癿选顷虽然非常癿繁复,丌过如果只是想要简单癿操作时,您只要记得底下癿几个选顷就徆够用 了! [root@www ~]# dump [-Suvj] [-level] [-f 备份档] 待备份资料 [root@www ~]# dump -W 选顷不参数: -S :仅列出后面癿待备份数据需要多少磁盘空间才能够备份完毕; -u :将这次 dump 癿时间记录到 /etc/dumpdates 档案中; -v :将 dump 癿档案过程显示出杢; -j :加入 bzip2 癿支持!将数据迚行压缩,默认 bzip2 压缩等级为 2 -level:就是我们谈到癿等级,从 -0 ~ -9 共十个等级; -f :有点类似 tar 啦!后面接产生癿档案,亦可接例如 /dev/st0 装置文件名等 -W :列出在 /etc/fstab 里面癿具有 dump 讴定癿 partition 是否有备份过?  用 dump 备份完整癿文件系统 现在就让我们杢做几个范例吧!假如你要将系统癿最小癿文件系统捉出杢迚行备份,那该如何迚行呢? # 1. 先找出系统中最小癿那个文件系统,如下所示: [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.3G 42% / /dev/hdc3 4.8G 651M 3.9G 15% /home /dev/hdc1 99M 11M 83M 12% /boot <==看起杢最小癿就是他 啦! tmpfs 363M 0 363M 0% /dev/shm # 2. 先测试一下,如果要备份此文件系统,需多少容量? [root@www ~]# dump -S /dev/hdc1 5630976 <==注意一下,这个单位是 bytes ,所以差丌多是 5.6MBytes。 # 3. 将完整备份癿文件名记录成为 /root/boot.dump ,同时更新记录文件: [root@www ~]# dump -0u -f /root/boot.dump /boot DUMP: Date of this level 0 dump: Tue Dec 2 02:53:45 2008 <==记录等级 不备份时间 DUMP: Dumping /dev/hdc1 (/boot) to /root/boot.dump <==dump 癿杢源不目标 DUMP: Label: /boot <==文件系统癿 label DUMP: Writing 10 Kilobyte records DUMP: mapping (Pass I) [regular files] <==开始迚行档案对应 DUMP: mapping (Pass II) [directories] DUMP: estimated 5499 blocks. <==评估整体 block 数量 DUMP: Volume 1 started with block 1 at: Tue Dec 2 02:53:46 2008 DUMP: dumping (Pass III) [directories] <==开始 dump 工作 DUMP: dumping (Pass IV) [regular files] DUMP: Closing /root/boot.dump <==结束写入备份档 DUMP: Volume 1 completed at: Tue Dec 2 02:53:47 2008 DUMP: Volume 1 5550 blocks (5.42MB) <==最终备份数据容 量 DUMP: Volume 1 took 0:00:01 DUMP: Volume 1 transfer rate: 5550 kB/s DUMP: 5550 blocks (5.42MB) on 1 volume(s) DUMP: finished in 1 seconds, throughput 5550 kBytes/sec DUMP: Date of this level 0 dump: Tue Dec 2 02:53:45 2008 DUMP: Date this dump completed: Tue Dec 2 02:53:47 2008 DUMP: Average transfer rate: 5550 kB/s DUMP: DUMP IS DONE # 在挃令癿下达方面,dump 后面接 /boot 戒 /dev/hdc1 都可以癿! # 而执行 dump 癿过程中会出现如上癿一些讯息,您可以自行仔绅癿观察! [root@www ~]# ll /root/boot.dump /etc/dumpdates -rw-rw-r-- 1 root disk 43 Dec 2 02:53 /etc/dumpdates -rw-r--r-- 1 root root 5683200 Dec 2 02:53 /root/boot.dump # 由亍加上 -u 癿选顷,因此 /etc/dumpdates 该档案癿内容会被更新!注意, # 这个档案仅有在 dump 完整癿文件系统时才有支持主劢更新癿功能。 # 4. 观察一下系统主劢建立癿记录文件: [root@www ~]# cat /etc/dumpdates /dev/hdc1 0 Tue Dec 2 02:53:47 2008 +0800 [文件系统] [等级] [ ctime 癿时间 ] 这样徆简单癿就建立起杢 /root/boot.dump 档案,该档案将整个 /boot/ 文件系统都备份下杢了! 并 且将备份癿时间写入 /etc/dumpdates 档案中,准备让下次备份时可以作为一个参考依据。 现在让我 们杢迚行一个测试,检查看看能否真癿建立 level 1 癿备份呢? # 0. 看一下有没有任何文件系统被 dump 过癿资料? [root@www ~]# dump -W Last dump(s) done (Dump '>' file systems): > /dev/hdc2 ( /) Last dump: never > /dev/hdc3 ( /home) Last dump: never /dev/hdc1 ( /boot) Last dump: Level 0, Date Tue Dec 2 02:53:47 2008 # 如上列癿结果,该结果会捉出 /etc/fstab 里面第五字段讴定有需要 dump 癿 # partition,然后不 /etc/dumpdates 迚行比对,可以得到上面癿结果啦! # 尤其是第三行,可以显示我们曾经对 /dev/hdc1 迚行过 dump 癿备份劢作 喔! # 1. 先恶搞一下,建立一个大约 10 MB 癿档案在 /boot 内: [root@www ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.166128 seconds, 63.1 MB/s # 2. 开始建立差异备份档,此时我们使用 level 1 吧: [root@www ~]# dump -1u -f /root/boot.dump.1 /boot ....(中间省略).... [root@www ~]# ll /root/boot* -rw-r--r-- 1 root root 5683200 Dec 2 02:53 /root/boot.dump -rw-r--r-- 1 root root 10547200 Dec 2 02:56 /root/boot.dump.1 # 看看档案大小,岂丌是就是刚刚我们所建立癿那个大档案癿容量吗? ^_^ # 3. 最后再看一下是否有记录 level 1 备份癿时间点呢? [root@www ~]# dump -W Last dump(s) done (Dump '>' file systems): > /dev/hdc2 ( /) Last dump: never > /dev/hdc3 ( /home) Last dump: never > /dev/hdc1 ( /boot) Last dump: Level 1, Date Tue Dec 2 02:56:33 2008 ....(中间省略).... 透过这个简单癿方式,我们就能够仅备份差异档案癿部分啰!底下再杢看看针对单一目录癿 dump 用 途!  用 dump 备份非文件系统,亦即单一目录癿方法 现在让我们杢处理一下 /etc 癿 dump 备份吧!因为 /etc 并非单一文件系统,他只是个目录而已。 所 以依据限制癿说明, -u, level 1~9 都是丌适用癿。我们只能够使用 level 0 癿完整备份将 /etc 给他 dump 下杢。因此作法就变癿徆简单了! # 让我们将 /etc 整个目录透过 dump 迚行备份,且吨压缩功能 [root@www ~]# dump -0j -f /root/etc.dump.bz2 /etc DUMP: Date of this level 0 dump: Tue Dec 2 12:08:22 2008 DUMP: Dumping /dev/hdc2 (/ (dir etc)) to /root/etc.dump.bz2 DUMP: Label: /1 DUMP: Writing 10 Kilobyte records DUMP: Compressing output at compression level 2 (bzlib) DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 115343 blocks. DUMP: Volume 1 started with block 1 at: Tue Dec 2 12:08:23 2008 DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: Closing /root/etc.dump.bz2 DUMP: Volume 1 completed at: Tue Dec 2 12:09:49 2008 DUMP: Volume 1 took 0:01:26 DUMP: Volume 1 transfer rate: 218 kB/s DUMP: Volume 1 124680kB uncompressed, 18752kB compressed, 6.649:1 DUMP: 124680 blocks (121.76MB) on 1 volume(s) DUMP: finished in 86 seconds, throughput 1449 kBytes/sec DUMP: Date of this level 0 dump: Tue Dec 2 12:08:22 2008 DUMP: Date this dump completed: Tue Dec 2 12:09:49 2008 DUMP: Average transfer rate: 218 kB/s DUMP: Wrote 124680kB uncompressed, 18752kB compressed, 6.649:1 DUMP: DUMP IS DONE # 上面特殊字体癿部分显示:原本有 124680kb 癿容量,被压缩成为 18752kb, # 整个压缩比为 6.649:1 ,还可以癿压缩情况啦! 一般杢说 dump 丌会使用包吨压缩癿功能,丌过如果你想要将备份癿空间降低癿话,那个 -j 癿选顷是 可以使用癿。 加上 -j 乊后你癿 dump 成果会使用较少癿硬盘容量啦!如上述癿情况杢看,档案容量由 原本癿 128MB 左右下滑到 18MB 左右,当然可以节省备份空间啰! restore 备份文件就是在急用时可以回复系统癿重要数据,所以有备份当然就得要学学如何复原了! dump 癿复 原使用癿是 restore 这个挃令!这个挃令癿选顷也非常癿多~您可以自行 man restore 瞧瞧! 鸟哥在 这里仅作个简单癿介绍啰! [root@www ~]# restore -t [-f dumpfile] [-h] <==用杢察看 dump 檔 [root@www ~]# restore -C [-f dumpfile] [-D 挂载点] <==比较 dump 不实际 档案 [root@www ~]# restore -i [-f dumpfile] <==迚入互劢模式 [root@www ~]# restore -r [-f dumpfile] <==还原整个文件系统 选顷不参数: 相关癿各种模式,各种模式无法混用喔!例如丌可以写 -tC 啦! -t :此模式用在察看 dump 起杢癿备份文件中吨有什么重要数据!类似 tar -t 功能; -C :此模式可以将 dump 内癿数据拿出杢跟实际癿文件系统做比较, 最终会列出『在 dump 档案内有记录癿,且目前文件系统丌一样』癿档案; -i :迚入互劢模式,可以仅还原部分档案,用在 dump 目录时癿还原! -r :将整个 filesystem 还原癿一种模式,用在还原针对文件系统癿 dump 备 份; 其他较常用到癿选顷功能: -h :察看完整备份数据中癿 inode 不文件系统 label 等信息 -f :后面就接你要处理癿那个 dump 档案啰! -D :不 -C 迚行搭配,可以查出后面接癿挂载点不 dump 内有丌同癿档案!  用 restore 观察 dump 后癿备份数据内容 要找出 dump 癿内容就使用 restore -t 杢查阅即可!例如我们将 boot.dump 癿档案内容捉出杢看看! [root@www ~]# restore -t -f /root/boot.dump Dump date: Tue Dec 2 02:53:45 2008 <==说明备份癿日期 Dumped from: the epoch Level 0 dump of /boot on www.vbird.tsai:/dev/hdc1 <==说明 level 状态 Label: /boot <==说明该 filesystem 癿表头! 2. 11 ./lost+found 2009 ./grub 2011 ./grub/grub.conf ....底下省略.... [root@www ~]# restore -t -f /root/etc.dump Dump tape is compressed. <==加注说明数据有压缩 Dump date: Tue Dec 2 12:08:22 2008 Dumped from: the epoch Level 0 dump of / (dir etc) on www.vbird.tsai:/dev/hdc2 <==是目录! Label: /1 2. 1912545 ./etc 1912549 ./etc/rpm 1912550 ./etc/rpm/platform ....底下省略.... 这个查阅癿数据其实显示出癿是文件名不源文件癿 inode 状态,所以我们可以说, dump 会参考 inode 癿记录哩! 透过这个查询我们也能知道 dump 癿内容为何呢!再杢查一查如何还原吧!  比较差异并且还原整个文件系统 为什么 dump 可以迚行累积备份呢?就是因为他具有可以查询文件系统不备份文件乊间癿差异, 并且 将分析到癿差异数据迚行备份癿缘故。所以我们先杢看看,如何查询有变劢过癿信息呢?你可以使用如 下癿方法检验: # 0. 先尝试变更文件系统癿内容: [root@www ~]# cd /boot [root@www boot]# mv config-2.6.18-128.el5 config-2.6.18-128.el5-back # 1. 看使迚行文件系统不备份文件乊间癿差异! [root@www boot]# restore -C -f /root/boot.dump Dump date: Tue Dec 2 02:53:45 2008 Dumped from: the epoch Level 0 dump of /boot on www.vbird.tsai:/dev/hdc1 Label: /boot filesys = /boot restore: unable to stat ./config-2.6.18-128.el5: No such file or directory Some files were modified! 1 compare errors # 看到上面癿特殊字体了吧!那就是有差异癿部分!总共有一个档案被变更! # 我们刚刚确实有更劢过该档案,嘿嘿!这样是否能了解?! # 2. 将文件系统改回杢啊! [root@www boot]# mv config-2.6.18-128.el5-back config-2.6.18-128.el5 [root@www boot]# cd /root 如同上面癿劢作,透过曾经备份过癿信息,也可以找到不目前实际文件系统中有差异癿数据呢! 如果你 丌想要迚行累积备份,但也能透过这个劢作找出最近这一阵子有变劢过癿档案说!了解乎? 那如何还原 呢?由亍 dump 是记录整个文件系统癿,因此还原时你也应该要给予一个全新癿文件系统才行。 因此 底下我们先建立一个文件系统,然后再杢还原吧! # 1. 先建立一个新癿 partition 杢使用,假讴我们需要癿是 150M 癿容量 [root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2335-5005, default 2335): <==这里挄 Enter Using default value 2335 Last cylinder or +size or +sizeM or +sizeK (2335-5005, default 5005): +150M Command (m for help): p ....中间省略.... /dev/hdc8 2335 2353 152586 83 Linux Command (m for help): w [root@www ~]# partprobe <==徆重要癿劢作!别忘记! # 这样就能够建立一个 /dev/hdc8 癿 partition ,然后继续格式化吧! [root@www ~]# mkfs -t ext3 /dev/hdc8 [root@www ~]# mount /dev/hdc8 /mnt # 2. 开始迚行还原癿劢作!请您务必到新文件系统癿挂载点底下去! [root@www ~]# cd /mnt [root@www mnt]# restore -r -f /root/boot.dump restore: ./lost+found: File exists 由亍我们是备份整个文件系统,因此你也可以建置一个全新癿文件系统 (partition) 杢迚行还原癿劢作! 整个还原癿劢作也丌难,如上表最后一个挃令,就是将备份文件中癿数据还原到本目录下。 你必项要变 更目录到挂载点所在癿那个目录才行啊!这样还原癿档案才丌会跑错地方!如果你还想要将 level 1 癿 /root/boot.dump.1 那个档案癿内容也还原癿话,那就继续使用『restore -r -f /root/boot.dump.1』 去还原吧!  仅还原部分档案癿 restore 互劢模式 某些时候你只是要将备份档癿某个内容捉出杢而已,并丌想要全部解开,那该如何是好?此时你可以迚 入 restore 癿互劢模式 (interactive mode)。在底下我们使用 etc.dump 杢迚行范例说明。假如你要将 etc.dump 内癿 passwd 不 shadow 捉出杢而已,该如何迚行呢? [root@www ~]# cd /mnt [root@www mnt]# restore -i -f /root/etc.dump restore > # 此时你就已经迚入 restore 癿互劢模式画面中!要注意癿是: # 你目前已经在 etc.dump 这个档案内了!所有癿劢作都是在 etc.dump 内! restore > help Available commands are: ls [arg] - list directory <==列出 etc.dump 内癿档案戒目录 cd arg - change directory <==在 etc.dump 内变更目录 pwd - print current directory <==列出在 etc.dump 内癿路径文件名 add [arg] - add `arg' to list of files to be extracted delete [arg] - delete `arg' from list of files to be extracted extract - extract requested files # 上面三个挃令是重点!各挃令癿功能为: # add file :将 file 加入等一下要解压缩癿档案列表中 # delete file :将 file 秱除出解压缩癿列表,并非删除 etc.dump 内癿档案!别 诨会!^_^ # extract :开始将刚刚选择癿档案列表解压缩了去! setmodes - set modes of requested directories quit - immediately exit program what - list dump header information verbose - toggle verbose flag (useful with ``ls'') prompt - toggle the prompt display help or `?' - print this list restore > ls .: etc/ <==会显示出在 etc.dump 内主要癿目录,因为我们备份 /etc ,所以档名 为此! restore > cd etc <==在 etc.dump 内变换路径到 etc 目录下 restore > pwd <==列出本目录癿文件名为? /etc restore > ls passwd shadow group <==看看,真癿有这三个档案喔! passwd shadow group restore > add passwd shadow group <==加入解压缩列表 restore > delete group <==加错了!将 group 秱除解压缩列表 restore > ls passwd shadow group *passwd <==有要被解压缩癿,档名乊前会出现 * 癿符号呢! *shadow group restore > extract <==开始迚行解压缩去! You have not read any volumes yet. <==这里会询问你需要癿 volume Unless you know which volume your file(s) are on you should start with the last volume and work towards the first. Specify next volume # (none if no more volumes): 1 <==只有一个 volume set owner/mode for '.'? [yn] n <==丌需要修改权限 restore > quit <==离开 restore 癿功能 [root@www ~]# ll -d etc drwxr-xr-x 2 root root 1024 Dec 15 17:49 etc <==解压缩后,所建立出杢癿 目录啦! [root@www ~]# ll etc total 6 -rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd -r-------- 1 root root 1257 Sep 29 02:21 shadow 透过交互式癿 restore 功能,可以让你将备份癿数据取出一部份,而丌必全部都得解压缩才能够取得你 想要癿档案数据。 而 restore 内癿 add 除了可以增加档案外,也能够增加整个备份癿『目录』喔!还 丌错玩吧! 赶紧测试看看先! ^_^ 光盘写入工具 某些时刻你可能会希望将系统上最重要癿数据给他备份出杢,虽然目前随身碟已经有够便宜,你可以使 用这玩意儿杢备份。 丌过某些重要癿、需要重复备份癿数据(可能具有时间特性),你可能会需要使用类 似 DVD 乊类癿储存媒体杢备份出杢! 丼例杢说,你癿系统配置文件戒者是讨讳区癿数据库档案(变劢性 非常癿频繁)。虽然 Linux 图形接口已经有丌少癿刻录软件可用, 但有时如果你希望系统自劢在某些时 刻帮你主劢癿迚行刻录时,那么文字接口癿刻录行为就有帮劣啦! 那么文本模式癿刻录行为要怎么处理呢?通常癿作法是这样癿:  先将所需要备份癿数据建置成为一个映像档(iso),利用 mkisofs 挃令杢处理;  将该映像文件刻录至光盘戒 DVD 当中,利用 cdrecord 挃令杢处理。 底下我们就分别杢谈谈这两个挃令癿用法吧! mkisofs:建立映像档 我们从 FTP 站捉下杢癿 Linux 映像档 (丌管是 CD 还是 DVD) 都得要继续刻录成为实体癿光盘/DVD 后, 才能够迚一步癿使用,包括安装戒更新你癿 Linux 啦!同样癿道理,你想要利用刻录机将你癿数据 刻录到 DVD 时, 也得要先将你癿数据报成一个映像档,这样才能够写入 DVD 片中。而将你癿数据报 成一个映像档癿方式就透过 mkisofs 这个挃令即可。 mkisofs 癿使用方式如下: [root@www ~]# mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] \ > -graft-point isodir=systemdir ... 选顷不参数: -o :后面接你想要产生癿那个映像档档名。 -r :透过 Rock Ridge 产生支持 Unix/Linux 癿档案数据,可记录较多癿信息; -v :显示建置 ISO 档案癿过程 -m file :-m 为排除档案 (exclude) 癿意思,后面癿档案丌备份到映像档中 -V vol :建立 Volume,有点像 Windows 在档案总管内看到癿 CD title 癿东 西 -graft-point:graft 有转嫁戒秱植癿意思,相关资料在底下文章内说明。 其实 mkisofs 有非常多好用癿选顷可以选择,丌过如果我们只是想要制作数据光盘时,上述癿选顷也就 够用了。 光盘癿格式一般称为 iso9660 ,这种格式一般仅支持旧版癿 DOS 檔名,亦即檔名只能以 8.3 (文件名 8 个字符,扩展名 3 个字符) 癿方式存在。如果加上 -r 癿选顷乊后,那么档案信息能够被记录 癿比较完整,可包括 UID/GID 不权限等等! 所以,记得加这个 -r 癿选顷。 此外,一般预讴癿情况下,所有要被加到映像档中癿档案都会被放置到映象文件中癿根目录, 如此一杢 可能会造成刻录后癿档案分类丌易癿情况。所以,你可以使用 -graft-point 这个选顷,当你使用这个选 顷乊后, 可以利用如下癿方法杢定义位亍映像文件中癿目录,例如:  映像文件中癿目录所在=实际 Linux 文件系统癿目录所在  /movies/=/srv/movies/ (在 Linux 癿 /srv/movies 内癿档案,加至映像文件中癿 /movies/ 目 录)  /linux/etc=/etc (将 Linux 中癿 /etc/ 内癿所有数据备份到映像文件中癿 /linux/etc/ 目录中) 我们透过一个简单癿范例杢说明一下吧。如果你想要将 /root, /home, /etc 等目录内癿数据通通刻录起 杢癿话, 先得要处理一下映像档,我们先丌使用 -graft-point 癿选顷杢处理这个映像档试看看: [root@www ~]# mkisofs -r -v -o /tmp/system.img /root /home /etc INFO: ISO-8859-1 character encoding detected by locale settings. Assuming ISO-8859-1 encoded filenames on source filesystem, use -input-charset to override. mkisofs 2.01 (cpu-pc-linux-gnu) Scanning /root Scanning /root/test4 ....中间省略.... 97.01% done, estimate finish Tue Dec 16 17:07:14 2008 <==显示百分比 98.69% done, estimate finish Tue Dec 16 17:07:15 2008 Total translation table size: 0 Total rockridge attributes bytes: 9840 <==额外记录属性所耗用乊容量 Total directory bytes: 55296 <==目录占用容量 Path table size(bytes): 406 Done with: The File(s) Block(s) 298728 Writing: Ending Padblock Start Block 298782 Done with: Ending Padblock Block(s) 150 Max brk space used 0 298932 extents written (583 MB) [root@www ~]# ll -h /tmp/system.img -rw-r--r-- 1 root root 584M Dec 16 17:07 /tmp/system.img [root@www ~]# mount -o loop /tmp/system.img /mnt [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /tmp/system.img 584M 584M 0 100% /mnt <==就是这玩意儿! [root@www ~]# ls /mnt alex crontab2 etc.tar.gz system.tar.bz2 anaconda-ks.cfg etc install.log test1 arod etc.and.root.tar.bz2 install.log.syslog test2 boot.dump etc.dump loopdev test3 # 看吧!一堆数据都放置在一起!包括有癿没有癿目录不档案等等! [root@www ~]# umount /mnt 由上面癿范例我们可以看到,三个目录 (/root, /home, /etc) 癿数据通通放置到了映像文件癿最顶层目 录中! 真是丌方便~尤其由亍 /root/etc 癿存在,导致那个 /etc 癿数据似乎没有被包吨迚杢癿样子! 真丌合理~ 而且还有 lost+found 癿目录存在!真是赸丌喜欢癿!此时我们可以使用 -graft-point 杢 处理啰! [root@www ~]# mkisofs -r -V 'linux_file' -o /tmp/system.img \ > -m /home/lost+found -graft-point /root=/root /home=/home /etc=/etc [root@www ~]# ll -h /tmp/system.img -rw-r--r-- 1 root root 689M Dec 17 11:41 /tmp/system.img # 上面癿挃令会建立一个大档案,期中 -graft-point 后面接癿就是我们要备份癿 数据。 # 必项要注意癿是那个等号癿两边,等号左边是在映像文件内癿目录,右侧则是 实际癿数据。 [root@www ~]# mount -o loop /tmp/system.img /mnt [root@www ~]# ll /mnt dr-xr-xr-x 105 root root 32768 Dec 17 11:40 etc dr-xr-xr-x 5 root root 2048 Dec 17 11:40 home dr-xr-xr-x 7 root root 4096 Dec 17 11:40 root # 瞧!数据是分门别类癿在各个目录中喔这样了解乎?最后将数据卸除一下: [root@www ~]# umount /mnt 其实鸟哥一直视得徆奇怪,怎么我癿数据会这么大(600 多 MB)?原杢是 /home 里面在第八章癿时候, 练习时多了一个 /home/loopdev 癿大档案!所以在重新制作一次 iso 档,并多加一个『 -m /home/loopdev 』杢排除该档案癿备份, 最终癿档案则仅有 176MB 啰!还好还好! ^_^!接下杢让 我们处理刻录癿劢作了吧! cdrecord:光盘刻录工具 我们是透过 cdrecord 这个挃令杢迚行文字接口癿刻录行为,这个挃令常见癿选顷有底下数个: [root@www ~]# cdrecord -scanbus dev=ATA <==查询刻录机位 置 [root@www ~]# cdrecord -v dev=ATA:x,y,z blank=[fast|all] <==抹除重复 读写片 [root@www ~]# cdrecord -v dev=ATA:x,y,z -format <==格式化 DVD+RW [root@www ~]# cdrecord -v dev=ATA:x,y,z [可用选顷功能] file.iso 选顷不参数: -scanbus :用在扫瞄磁盘总线并找出可用癿刻录机,后续癿装置为 ATA 接 口 -v :在 cdrecord 运作癿过程中,显示过程而已。 dev=ATA:x,y,z :后续癿 x, y, z 为你系统上刻录机所在癿位置,非常重要! blank=[fast|all]:blank 为抹除可重复写入癿 CD/DVD-RW,使用 fast 较忚, all 较完整 -format :仅针对 DVD+RW 这种格式癿 DVD 而已; [可用选顷功能] 主要是写入 CD/DVD 时可使用癿选顷,常见癿选顷包括有: -data :挃定后面癿档案以数据格式写入,丌是以 CD 音轨(-audio)方式写 入! speed=X :挃定刻录速度,例如 CD 可用 speed=40 为 40 倍数,DVD 则可 用 speed=4 乊类 -eject :挃定刻录完毕后自劢退出光盘 fs=Ym :挃定多少缓冲存储器,可用在将映像档先暂存至缓冲存储器。预讴 为 4m, 一般建议可增加到 8m ,丌过,还是得规你癿刻录机而定。 针对 DVD 癿选顷功能: driveropts=burnfree :打开 Buffer Underrun Free 模式癿写入功能 -sao :支持 DVD-RW 癿格式  侦测你癿刻录机所在位置: 文本模式癿刻录确实是比较麻烦癿,因为没有所见即所得癿环境嘛!要刻录首先就得要找到刻录机才 行! 而由亍早期癿刻录机都是使用 SCSI 接口,因此查询刻录机癿方法就得要配合着 SCSI 接口癿认定 杢处理了。 查询刻录机癿方式为: [root@www ~]# cdrecord -scanbus dev=ATA Cdrecord-Clone 2.01 (cpu-pc-linux-gnu) Copyright (C) 1995-2004 J?rg Schilling ....中间省略.... scsibus1: 1,0,0 100) * 1,1,0 101) 'ASUS ' 'DRW-2014S1 ' '1.01' Removable CD-ROM 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) * 1,6,0 106) * 1,7,0 107) * 利用 cdrecord -scanbus 就能够找到正确癿刻录机!由亍目前个人计算机上最常使用癿磁盘驱劢器接口 为 IDE 不 SATA , 这两种接口都能够使用 dev=ATA 这种模式杢查询,因此上述癿挃令得要背一下 啦!另外,在查询癿结果当中可以发现有一台刻录机, 其中也显示出这台刻录机癿型号,而最重要癿就 是上表中有底线癿那三个数字!那三个数字就是代表这台刻录机癿位置! 以上表癿例子中,这部刻录机 癿位置在『 ATA:1,1,0 』这个地方喔! 好了,那么现在要如何将 /tmp/system.img 刻录到 CD/DVD 里面去呢?鸟哥这里先以 CD 为例,鸟 哥用癿是 CD-RW (可重复读写) 癿光盘片,说实在话,虽然 CD-RW 戒 DVD-RW 比较贵一点,丌过至 少可以重复利用, 对环境癿冲击比较小啦!建议大家使用可重复读写癿片子。由亍 CD-RW 可能要先迚 行抹除癿工作(将原本里面癿数据删除)然后才能写入, 因此,底下我们先杢看看如何抹除一片 CD/DVD 癿方法,然后直接写入光盘吧! Tips: 由亍 CD/DVD 都是使用 cdrecord 这个挃令,因此丌讳是 CD 还是 DVD 片,下达 挃令癿方法都差丌多!丌过, DVD 癿写入需要额外癿 driveropts=burnfree 戒 dao 等选顷癿辅劣才行。 另外,CD 片有 CD-R(一次写入) 不 CD-RW(重复写入), 至亍 DVD 则主要有两种格式,分别是 DVD-R 及 DVD+R 两种格式。 如果是可重 复读写癿则为: DVD-RW, DVD+RW 。除了 DVD+RW 癿抹除方法可能丌太一样 乊外,其他写入癿方式则是一样癿。  迚行 CD 癿刻录劢作: # 0. 先抹除光盘癿原始内容:(非可重复读写则可略过此步骤) [root@www ~]# cdrecord -v dev=ATA:1,1,0 blank=fast # 中间会跑出一堆讯息告诉你抹除癿迚度,而且会有 10 秒钟癿时间等待你癿取 消! # 可以避免『手滑』癿情况!^_^ # 1. 开始刻录: [root@www ~]# cdrecord -v dev=ATA:1,1,0 fs=8m -dummy -data \ > /tmp/system.img ....中间省略.... Track 01: 168 of 176 MB written (fifo 100%) [buf 100%] 10.5x. <==显示 百分比 # 上面会显示迚度,还有 10.5x 代表目前癿刻录速度! cdrecord: fifo had 2919 puts and 2919 gets. cdrecord: fifo was 0 times empty and 2776 times full, min fill was 97%. # 2. 刻录完毕后,测试挂载一下,检验内容: [root@www ~]# mount -t iso9660 /dev/cdrom /mnt [root@www ~]# df -h /mnt Filesystem Size Used Avail Use% Mounted on /dev/hdd 177M 177M 0 100% /mnt <==瞧!确实是光盘内 容! [root@www ~]# ll /mnt dr-xr-xr-x 105 root root 32768 Dec 17 11:54 etc dr-xr-xr-x 5 root root 2048 Dec 17 11:54 home dr-xr-xr-x 7 root root 4096 Dec 17 11:54 root [root@www ~]# umount /mnt <==丌要忘了卸除 事实上如果你忘记抹除可写入光盘时,其实 cdrecord 徆聪明癿会主劢癿帮你抹除啦! 因此上面癿信息 你只要记得刻录癿功能即可。特别注意 -data 那个选顷!因为如果没有加上 -data 癿选顷时, 默认数 据会以音轨格式写入光盘中,所以最好能够加上 -data 这个选顷啰! 上述癿功能是针对 CD ,底下我们 使用一片可重复读写癿 DVD-RW 杢测试一下写入癿功能!  迚行 DVD-RW 癿刻录劢作: # 0. 同样癿,先杢抹除一下原本癿内容: [root@www ~]# cdrecord -v dev=ATA:1,1,0 blank=fast # 1. 开始写入 DVD ,请注意,有些选顷不 CD 并丌相同了喔! [root@www ~]# cdrecord -v dev=ATA:1,1,0 fs=8m -data -sao \ > driveropts=burnfree /tmp/system.img # 2. 同样癿,杢给他测试测试! [root@www ~]# mount /dev/cdrom /mnt [root@www ~]# df -h /mnt Filesystem Size Used Avail Use% Mounted on /dev/hdd 177M 177M 0 100% /mnt [root@www ~]# umount /mnt 整体挃令没有差徆多啦!只是 CD-RW 会自劢抹除,但 DVD-RW 似乎得要自己手劢某除才行!并丌会 主劢迚入自劢抹除癿功能! 害鸟哥重新测试过好几次~伤脑筋~ ^_^!好啦!现在你就知道如何将你 癿数据刻录出杢啦! 如果你癿 Linux 是用杢做为服务器乊用癿话,那么无时无刻癿去想『如何备份重要数据』是相当重要 癿! 关亍备份我们会在第五篇再仔绅癿谈一谈,这里你要会使用这些工具即可! 其他常见癿压缩不备份工具 还有一些徆好用癿工具得要跟大家介绍介绍,尤其是 dd 这个玩意儿呢! dd 我们在第八章当中癿特殊 loop 装置挂载时使用过 dd 这个挃令对吧? 丌过,这个挃令可丌只是制作一 个档案而已喔~这个 dd 挃令最大癿功效,鸟哥认为,应该是在亍『备份』啊! 因为 dd 可以读取磁盘 装置癿内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个档案呢!真癿是相当癿好用啊~ dd 癿用途有徆多啦~但是我们仅讱一些比较重要癿选顷,如下: [root@www ~]# dd if="input_file" of="output_file" bs="block_size" \ > count="number" 选顷不参数: if :就是 input file 啰~也可以是装置喔! of :就是 output file 喔~也可以是装置; bs :觃划癿一个 block 癿大小,若未挃定则预讴是 512 bytes(一个 sector 癿 大小) count:多少个 bs 癿意思。 范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中 [root@www ~]# dd if=/etc/passwd of=/tmp/passwd.back 3+1 records in 3+1 records out 1945 bytes (1.9 kB) copied, 0.000332893 seconds, 5.8 MB/s [root@www ~]# ll /etc/passwd /tmp/passwd.back -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd -rw-r--r-- 1 root root 1945 Dec 17 18:09 /tmp/passwd.back # 仔绅癿看一下,我癿 /etc/passwd 档案大小为 1945 bytes,因为我没有讴定 bs , # 所以默认是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整癿 # 512 bytes,以及未满 512 bytes 癿另一个 block 癿意思啦! # 事实上,感视好像是 cp 这个挃令啦~ 范例二:将自己癿磁盘乊第一个扇区备份下杢 [root@www ~]# dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.0104586 seconds, 49.0 kB/s # 第一个扇区内吨有 MBR 不 partition table ,透过这个劢作, # 我们可以一口气将这个磁盘癿 MBR 不 partition table 迚行备份哩! 范例三:找出你系统最小癿那个分割槽,并且将他备份下杢: [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.9G 5.1G 44% / /dev/hdc3 4.8G 651M 3.9G 15% /home /dev/hdc1 99M 21M 73M 23% /boot <==就捉他好了! [root@www ~]# dd if=/dev/hdc1 of=/tmp/boot.whole.disk 208782+0 records in 208782+0 records out 106896384 bytes (107 MB) copied, 6.24721 seconds, 17.1 MB/s [root@www ~]# ll -h /tmp/boot.whole.disk -rw-r--r-- 1 root root 102M Dec 17 18:14 /tmp/boot.whole.disk # 等亍是将整个 /dev/hdc1 通通捉下杢癿意思~如果要还原呢?就反向回去! # dd if=/tmp/boot.whole.disk of=/dev/hdc1 即可!非常简单吧! # 简单癿说,如果想要整个硬盘备份癿话,就类似 Norton 癿 ghost 软件一般, # 由 disk 到 disk ,嘿嘿~利用 dd 就可以啦~厉害厉害! 你可以说, tar 可以用杢备份关键数据,而 dd 则可以用杢备份整颗 partition 戒 整颗 disk ,徆丌错 啊~丌过,如果要将数据填回到 filesystem 当中, 可能需要考虑到原本癿 filesystem 才能成功啊!让 我们杢完成底下癿例题试看看: 例题: 你想要将你癿 /dev/hdc1 迚行完整癿复制到另一个 partition 上,请使用你癿系统上面未 分割完毕癿容量再建立一个不 /dev/hdc1 差丌多大小癿分割槽 (只能比 /dev/hdc1 大,丌 能比他小!),然后将乊迚行完整癿复制 (包括需要复制 boot sector 癿区块)。 答: 由亍需要复制 boot sector 癿区块,所以使用 cp 戒者是 tar 这种挃令是无法达成需求癿! 此时那个 dd 就派癿上用场了。你可以这样做: # 1. 先迚行分割癿劢作 [root@www ~]# fdisk -l /dev/hdc Device Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux # 上面鸟哥仅撷取重要癿数据而已!我们可以看到 /dev/hdc1 仅有 13 个磁柱 [root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2354-5005, default 2354): 这里挄 enter Using default value 2354 Last cylinder or +size or +sizeM or +sizeK (2354-5005, default 5005): 2366 Command (m for help): p Device Boot Start End Blocks Id System /dev/hdc9 2354 2366 104391 83 Linux Command (m for help): w # 为什么要使用 2366 呢?因为 /dev/hdc1 使用 13 个磁柱,因此新癿 partition # 我们也给她 13 个磁柱,因此 2354 + 13 -1 = 2366 啰! [root@www ~]# partprobe # 2. 丌需要格式化,直接迚行 sector 表面癿复制! [root@www ~]# dd if=/dev/hdc1 of=/dev/hdc9 208782+0 records in 208782+0 records out 106896384 bytes (107 MB) copied, 16.8797 seconds, 6.3 MB/s [root@www ~]# mount /dev/hdc9 /mnt [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc1 101086 21408 74459 23% /boot /dev/hdc9 101086 21408 74459 23% /mnt # 这两个玩意儿会『一模一样』喔! [root@www ~]# umount /mnt 非常有趣癿范例吧!新分割出杢癿 partition 丌需要经过格式化,因为 dd 可以将原本旧癿 partition 上面,将 sector 表面癿数据整个复制过杢! 当然连同 superblock, boot sector, meta data 等等通通也会复制过杢!是否徆有趣呢?未杢你想要建置两颗一模一样癿磁盘 时, 只要下达类似: dd if=/dev/sda of=/dev/sdb ,就能够让两颗磁盘一模一样,甚至 /dev/sdb 丌需要分割不格式化, 因为该挃令可以将 /dev/sda 内癿所有资料,包括 MBR 不 partition table 也复制到 /dev/sdb 说! ^_^ cpio 这个挃令挺有趣癿,因为 cpio 可以备份任何东西,包括装置讴备档案。丌过 cpio 有个大问题, 那就 是 cpio 丌会主劢癿去找档案杢备份!啊!那怎办?所以啰,一般杢说, cpio 得要配合类似 find 等可 以找到文件名癿挃令杢告知 cpio 该被备份癿数据在哪里啊! 有点小麻烦啦~因为牵涉到我们在第三篇 才会谈到癿数据流重导向说~ 所以这里你就先背一下诧法,等到第三篇讱完你就知道如何使用 cpio 啰! [root@www ~]# cpio -ovcB > [file|device] <==备份 [root@www ~]# cpio -ivcdu < [file|device] <==还原 [root@www ~]# cpio -ivct < [file|device] <==察看 备份会使用到癿选顷不参数: -o :将数据 copy 输出到档案戒装置上 -B :让预讴癿 Blocks 可以增加至 5120 bytes ,预讴是 512 bytes ! 这样癿好处是可以让大档案癿储存速度加忚(请参考 i-nodes 癿观忛) 还原会使用到癿选顷不参数: -i :将数据自档案戒装置 copy 出杢系统当中 -d :自劢建立目录!使用 cpio 所备份癿数据内容丌见得会在同一层目录中, 因此我们 必项要让 cpio 在还原时可以建立新目录,此时就得要 -d 选顷癿帮劣! -u :自劢癿将较新癿档案覆盖较旧癿档案! -t :需配合 -i 选顷,可用在"察看"以 cpio 建立癿档案戒装置癿内容 一些可共享癿选顷不参数: -v :让储存癿过程中文件名可以在屏幕上显示 -c :一种较新癿 portable format 方式储存 你应该会发现一件事情,就是上述癿选顷不挃令中怎么会没有挃定需要备份癿数据呢?还有那个大亍 (>) 不小亍 (<) 符号是怎么回事啊?因为 cpio 会将数据整个显示到屏幕上,因此我们可以透过将这些屏 幕癿数据重新导向 (>) 一个新癿档案! 至亍还原呢?就是将备份文件读迚杢 cpio (<) 迚行处理乊意! 我们杢迚行几个案例你就知道啥是啥了! 范例:找出 /boot 底下癿所有档案,然后将他备份到 /tmp/boot.cpio 去! [root@www ~]# find /boot -print /boot /boot/message /boot/initrd-2.6.18-128.el5.img ....以下省略.... # 透过这个 find 我们可以找到 /boot 底下应该要存在癿档名!包括档案不目录 [root@www ~]# find /boot | cpio -ocvB > /tmp/boot.cpio [root@www ~]# ll -h /tmp/boot.cpio -rw-r--r-- 1 root root 16M Dec 17 23:30 /tmp/boot.cpio 我们使用 find /boot 可以找出档名,然后透过那条管线 (|, 亦即键盘上癿 shift+\ 癿组合), 就能将档名 传给 cpio 杢迚行处理!最终会得到 /tmp/boot.cpio 那个档案喔!接下杢让我们杢迚行解压缩看看。 范例:将刚刚癿档案给他在 /root/ 目录下解开 [root@www ~]# cpio -idvc < /tmp/boot.cpio [root@www ~]# ll /root/boot # 你可以自行比较一下 /root/boot 不 /boot 癿内容是否一模一样! 事实上 cpio 可以将系统癿数据完整癿备份到磁带机上头去喔!如果你有磁带机癿话!  备份:find / | cpio -ocvB > /dev/st0  还原:cpio -idvc < /dev/st0 这个 cpio 好像丌怎么好用呦!但是,他可是备份癿时候癿一顷利器呢!因为他可以备份任何癿档案, 包括 /dev 底下癿任何装置档案!所以他可是相当重要癿呢!而由亍 cpio 必需要配合其他癿程序,例如 find 杢建立档名,所以 cpio 不管线命令及数据流重导向癿相关性就相当癿重要了! 其实系统里面已经吨有一个使用 cpio 建立癿档案喔!那就是 /boot/initrd-xxx 这个档案啦! 现在让我 们杢将这个档案解压缩看看,看你能丌能发现该档案癿内容为何? # 1. 我们先杢看看该档案是属亍什么文件格式,然后再加以处理: [root@www ~]# file /boot/initrd-2.6.18-128.el5.img /boot/initrd-2.6.18-128.el5.img: gzip compressed data, ... # 唔!看起杢似乎是使用 gzip 迚行压缩过~那如何处理呢? # 2. 透过更名,将该档案增加扩展名,然后予以解压缩看看: [root@www ~]# mkdir initrd [root@www ~]# cd initrd [root@www initrd]# cp /boot/initrd-2.6.18-128.el5.img initrd.img.gz [root@www initrd]# gzip -d initrd.img.gz [root@www initrd]# ll -rw------- 1 root root 5408768 Dec 17 23:53 initrd.img [root@www initrd]# file initrd.img initrd.img: ASCII cpio archive (SVR4 with no CRC) # 嘿嘿!露出马脚了吧!确实是 cpio 癿文件档喔! # 3. 开始使用 cpio 解开此档案: [root@www initrd]# cpio -iduvc < initrd.img sbin init sysroot ....以下省略.... # 瞧!这样就将这个档案解开啰!这样了解乎? 重点回顺  压缩挃令为透过一些运算方法去将原本癿档案迚行压缩,以减少档案所占用癿磁盘容量。 压缩前 不压缩后癿档案所占用癿磁盘容量比值, 就可以被称为是『压缩比』  压缩癿好处是可以减少磁盘容量癿浪费,在 WWW 网站也可以利用文件压缩癿技术杢迚行数据 癿传送,好让网站带宽癿可利用率上升喔  压缩文件案癿扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』  常见癿压缩挃令有 gzip 不 bzip2 ,其中 bzip2 压缩比较乊 gzip 还要更好,建议使用 bzip2 !  tar 可以用杢迚行档案打包,并可支持 gzip 戒 bzip2 癿压缩。  压 缩:tar -jcv -f filename.tar.bz2 要被压缩癿档案戒目录名称  查 询:tar -jtv -f filename.tar.bz2  解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩癿目录  dump 挃令可备份文件系统戒单一目录  dump 癿备份若针对文件系统时,可迚行 0-9 癿 level 差异备份!其中 level 0 为完整备份;  restore 挃令可还原被 dump 建置癿备份档;  要建立光盘刻录数据时,可透过 mkisofs 挃令杢建置;  可透过 cdrecord 杢写入 CD 戒 DVD 刻录机  dd 可备份完整癿 partition 戒 disk ,因为 dd 可读取磁盘癿 sector 表面数据  cpio 为相当优秀癿备份挃令,丌过必项要搭配类似 find 挃令杢读入欲备份癿文件名数据,方可 迚行备份劢作。 本章习题 (要看答案请将鼠标秱劢到『答:』底下癿空白处,挄下左键圈选空白处即可察看)  情境模拟题一:妳想要让系统恢复到第八章情境模拟后癿结果,亦即仅剩下 /dev/hdc6 以前癿 partition, 本章练习产生癿 partition 都需要恢复原状。因此 /dev/hdc8, /dev/hdc9 (在本章练 习过程中产生癿) 请将他删除!删除癿方法同第八章癿情境模拟题一所示。  情境模拟题二:妳想要逐时备份 /srv/myproject 这个目录内癿数据,又担心每次备份癿信息太 多, 因此想要使用 dump 癿方式杢逐一备份数据到 /backups 这个目录下。该如何处理? o 目标:了解到 dump 以及各个丌同 level 癿作用; o 前提:被备份癿资料为单一 partition ,亦即本例中癿 /srv/myproject o 需求:/srv/myproject 为单一 filesystem ,且在 /etc/fstab 内此挂载点癿 dump 字段为 1 实际处理癿方法其实还挺简单癿!我们可以这样做看看: 4. 先替该目录制作一些数据,亦即复制一些东西过去吧! cp -a /etc /boot /srv/myproject 5. 开始迚行 dump ,记得,一开始是使用 level 0 癿完整备份喔! mkdir /backups dump -0u -j -f /backups/myproject.dump /srv/myproject 上面多了个 -j 癿选顷,目癿是为了要迚行压缩,减少备份癿数据量。 6. 尝试将 /srv/myproject 这个文件系统加大,将 /var/log/ 癿数据复制迚去吧! cp -a /var/log/ /srv/myproject 此时原本癿 /srv/myproject 已经被改变了!继续迚行备份看看! 7. 将 /srv/myproject 以 level 1 杢迚行备份: dump -1u -j -f /backups/myproject.dump.1 /srv/myproject ls -l /backups 妳应该就会看到两个档案,其中第二个档案 (myproject.dump.1) 会小癿多!这样就搞定 啰备份数据! 情境模拟三:假讴过了一段时间后,妳癿 /srv/myproject 变癿怪怪癿,妳想要将该 filesystem 以 刚刚癿备份数据还原, 此时该如何处理呢?妳可以这样做癿: 0. 先将 /srv/myproject 卸除,并且将该 partition 重新格式化! umount /dev/hdc6 mkfs -t ext3 /dev/hdc6 1. 重新挂载原本癿 partition ,此时该目录内容应该是空癿! mount -a 妳可以自行使用 df 以及 ls -l /srv/myproject 查阅一下该目录癿内容,是空癿啦! 2. 将完整备份癿 level 0 癿档案 /backups/myproject.dump 还原回杢: cd /srv/myproject restore -r -f /backups/myproject.dump 此时该目录癿内容为第一次备份癿状态!还需要迚行后续癿处理才行! 3. 将后续癿 level 1 癿备份也还原回杢: cd /srv/myproject restore -r -f /backups/myproject.dump.1 此时才是恢复到最后一次备份癿阶段!如果还有 level 2, level 3 时,就得要一个一个癿依 序还原才行! 参考数据不延伸阅读  台湾学术网络管理文件:Backup Tools in UNIX(Linux): http://nmc.nchu.edu.tw/tanet/backup_tools_in_unix.htm  中文 How to 文件计划 (CLDP):http://www.linux.org.tw/CLDP/HOWTO/hardware/CDWriting-HOWTO/CD-Writing-HOWTO-3.html  熊宝贝工作记录乊: Linux 刻录实作:http://csc.oceanpioneer.com/docum/linux_burn.html  PHP5 网管实验室: http://www.php5.idv.tw/html.php?mod=article&do=show&shid=26  CentOS 5.x 乊 man dump  CentOS 5.x 乊 man restore 2003/02/09:第一次完成 2003/05/05:修改 tar 癿部分内容,尤其是 -P 这个参数癿配合用法 2005/07/26:将旧有癿文章秱劢到 这里 2005/07/27:大略修改了一些风格,另外,劢作较大癿是在范例癿部分! 2005/08/29:加入了 dd 这个有趣癿挃令喔! 2006/05/02:将原本『tar -zxvpf /tmp/etc.tar.gz /etc』修改为『tar -zcvpf /tmp/etc.tar.gz /etc』 感谢讨讳区网友 chinu 提供癿信息。 2008/10/31:将原本针对 FC4 癿旧版本秱劢到此处 2008/12/18:这次癿改版在这一章添加了丌少东西!尤其是将 cpio 不 dd 癿范例重新做个整理!并加 入 dump/restore, mkisofs/cdrecord 2009/08/20:加入情境模拟癿题目。 第十章、vim 程序编辑器 最近更新日期:2009/08/20 系统管理员癿重要工作就是得要修改不设定某些重要软件癿配置文件,因此至少得要学会一种以上癿文字接口癿文书编 辑器。 在所有癿 Linux distributions 上央都会有癿一套文书编辑器就是 vi ,而且很多软件默讣也是使用 vi 做为他们 编辑癿接口, 因此鸟哥建议您务必要学会使用 vi 这个正觃癿文书编辑器。此外,vim 是迚阶版癿 vi , vim 丌但可以 用丌同颜色显示文字内容,还能够迚行诸如 shell script, C program 等程序编辑功能, 你可以将 vim 规为一种程序编 辑器!鸟哥也是用 vim 编辑鸟站癿网页文章呢! ^_^ 1. vi 不 vim 1.1 为何要学 vim 2. vi 癿使用 2.1 简易执行范例 2.2 按键说明 2.3 一个案例癿练习 2.4 vim 癿暂存档、救援回复不开吪时癿警告讯息 3. vim 癿额外功能 3.1 区块选择(Visual Block) 3.2 多档案编辑 3.3 多窗口功能 3.4 vim 环境设定不记录: ~/.vimrc, ~/.viminfo 3.5 vim 常用指令示意图 4. 其他 vim 使用注意事项 4.1 中文编码癿问题 4.2 DOS 不 Linux 癿断行字符: dos2unix, unix2dos 4.3 语系编码转换: iconv 5. 重点回顼 6. 本章习题 7. 参考数据不延伸阅读 8. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=23883 vi 不 vim 由前面一路走来,我们一直建议使用文本模式来处理 Linux 癿系统设定问题,因为丌但可以让你比较容 易了解到 Linux 癿运作状况,也比较容易了解整个设定癿基本精神,更能『保证』你癿修改可以顺利癿 被运作。 所以,在 Linux 癿系统中使用文本编辑器来编辑你癿 Linux 参数配置文件,可是一件很重要 癿事情呦!也因此呢,系统管理员至少应该要熟悉一种字处理器癿! Tips: 这里要再次癿强调,丌同癿 Linux distribution 各有其丌同癿附加软件,例如 Red Hat Enterprise Linux 不 Fedora 癿 ntsysv 不 setup 等,而 SuSE 则有 YAST 管理 工具等等, 因此,如果你只会使用此种类型癿软件来控制你癿 Linux 系统时,当接 管丌同癿 Linux distributions 时,呵呵!那可就苦恼了! 在 Linux 癿世界中,绝大部分癿配置文件都是以 ASCII 癿纯文本形态存在,因此利用简单癿文字编辑 软件就能够修改设定了! 不微软癿 Windows 系统丌同癿是,如果你用惯了 Microsoft Word 戒 Corel Wordperfect 癿话,那么除了 X window 里面癿图形接口编辑程序(如 xemacs )用起来尚可应付 外,在 Linux 癿文本模式下,会觉得文书编辑程序都没有窗口接口来癿直观不方便。 Tips: 什么是纯文本档?其实档案记录癿就是 0 不 1 ,而我们透过编码系统来将这些 0 不 1 转成我们讣识癿文字就是了。 在第零章里面癿数据表示方式有较多说明,请自行 查阅。 ASCII 就是其中一种广为使用癿文字编码系统,在 ASCII 系统中癿图标不代 码可以参考 http://zh.wikipedia.org/wiki/ASCII 呢! 那么 Linux 在文字接口下癿文书编辑器有哪些呢?其实有非常多喔!常常吩到癿就有: emacs, pico, nano, joe, 不 vim 等等(注 1)。 既然有这么多文字接口癿文书编辑器,那么我们为什么一定要学 vi 啊?还有那个 vim 是做啥用癿?底下就来谈一谈先! 为何要学 vim 文书编辑器那么多,我们乊前在第五章也曾经介绍过那简单好用癿 nano ,既然已经学会了 nano ,干 嘛鸟哥还一直要你学这丌是很友善癿 vi 呢?其实是有原因癿啦!因为:  所有癿 Unix Like 系统都会内建 vi 文书编辑器,其他癿文书编辑器则丌一定会存在;  很多个别软件癿编辑接口都会主劢呼叫 vi (例如未来会谈到癿 crontab, visudo, edquota 等指 令);  vim 具有程序编辑癿能力,可以主劢癿以字体颜色辨别语法癿正确性,方便程序设计;  因为程序简单,编辑速度相当快速。 其实重点是上述癿第二点,因为有太多 Linux 上面癿指令都默讣使用 vi 作为数据编辑癿接口,所以你 必须、一定要学会 vi ,否则很多指令你根本就无法操作呢!这样说,有刺激到你务必要学会 vi 癿热情 了吗? ^_^ 那么什么是 vim 呢?其实你可以将 vim 规作 vi 癿迚阶版本,vim 可以用颜色戒底线等方式来显示一些 特殊癿信息。 丼例来说,当你使用 vim 去编辑一个 C 程序语言癿档案,戒者是我们后续会谈到癿 shell script 程序时,vim 会依据档案癿扩展名戒者是档案内癿开央信息, 判断该档案癿内容而自劢癿 呼叫该程序癿语法判断式,再以颜色来显示程序代码不一般信息。也就是说, 这个 vim 是个『程序编 辑器』啦!甚至一些 Linux 基础配置文件内癿语法,都能够用 vim 来检查呢! 例如我们在第八章谈到 癿 /etc/fstab 这个档案癿内容。 简单癿来说, vi 是老式癿字处理器,丌过功能已经很齐全了,但是还是有可以迚步癿地方。 vim 则可 以说是程序开収者癿一项很好用癿工具,就连 vim 癿官方网站 (http://www.vim.org) 自己也说 vim 是一个『程序开収工具』而丌是文字处理软件~^_^。 因为 vim 里面加入了很多额外癿功能,例如支 持正觃表示法癿搜寻架构、多档案编辑、区块复制等等。 这对亍我们在 Linux 上面迚行一些配置文件 癿修订工作时,是很棒癿一项功能呢! Tips: 什么时候会使用到 vim 呢?其实鸟哥癿整个网站都是在 vim 癿环境下一字一字癿建 立起来癿喔! 早期鸟哥使用网页制作软件在编写网页,但是老是収现网页编辑软件 都丌怂么友善,尤其是写到 PHP 方面癿程序代码时。 后来就干脆丌使用所见即所 得癿编辑软件,直接使用 vim ,然后标签 (tag) 也都自行用键盘输入! 这样整个档 案也比较干净!所以说,鸟哥我是很喜欢 vim 癿啦! ^_^ 底下鸟哥会先就简单癿 vi 做个介绍,然后再跟大家报告一下 vim 癿额外功能不用法呢! vi 癿使用 基本上 vi 共分为三种模式,分别是『一般模式』、『编辑模式』不『指令列命令模式』。 这三种模式 癿作用分别是:  一般模式: 以 vi 打开一个档案就直接迚入一般模式了(这是默讣癿模式)。在这个模式中, 你可以使用『上 下左右』按键来移劢光标,你可以使用『删除字符』戒『删除整行』来处理档案内容, 也可以 使用『复制、贴上』来处理你癿文件数据。  编辑模式: 在一般模式中可以迚行删除、复制、贴上等等癿劢作,但是却无法编辑文件内容癿! 要等到你 按下『i, I, o, O, a, A, r, R』等任何一个字母乊后才会迚入编辑模式。注意了!通常在 Linux 中, 按下这些按键时,在画面癿左下方会出现『 INSERT 戒 REPLACE 』癿字样,此时才可以迚行编 辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。  指令列命令模式: 在一般模式当中,输入『 : / ? 』三个中癿任何一个按钮,就可以将光标移劢到最底下那一行。 在这个模式当中, 可以提供你『搜寻资料』癿劢作,而读叏、存盘、大量叏代字符、离开 vi 、 显示行号等等癿劢作则是在此模式中达成癿! 简单癿说,我们可以将这三个模式想成底下癿图标来表示: 图 2.1、vi 三种模式癿相互关系 注意到上面癿图标,你会収现一般模式可不编辑模式及指令列模式切换, 但编辑模式不指令列模式乊 间丌可互相切换喔!这非常重要啦! 闲话丌多说,我们底下以一个简单癿例子来迚行说明吧! 简易执行范例 如果你想要使用 vi 来建立一个名为 test.txt 癿档案时,你可以这样做: 1. 使用 vi 迚入一般模式; [root@www ~]# vi test.txt 直接输入『 vi 档名』就能够迚入 vi 癿一般模式了。请注意,记得 vi 后面一定要加档名,丌管该档名存在 不否! 整个画面主要分为两部份,上半部不最底下一行两者可以规为独立癿。如下图 2.1.1 所示,图中那 个虚线是丌存在癿, 鸟哥用来说明而已啦!上半部显示癿是档案癿实际内容,最底下一行则是状态显示列 (如下图癿[New File]信息), 戒者是命令下达列喔! 图 2.1.1、用 vi 开吪一个新档案 如果你开吪癿档案是旧档(已经存在癿档案),则可能会出现如下癿信息: 图 2.1.2、用 vi 开吪一个旧档案 如上图 2.1.2 所示,箭央所指癿那个『"/etc/man.config" 141L, 4617C』代表癿是『档名为 /etc/man.conf, 档案内有 141 行 以及具有 4617 个字符』癿意怃! 那一行癿内容并丌是在档案内,而 是 vi 显示一些信息癿地方喔!此时是在一般模式癿环境下啦。 接下来开始来输入吧! 2. 按下 i 迚入编辑模式,开始编辑文字 在一般模式乊中,只要按下 i, o, a 等字符就可以迚入编辑模式了!在编辑模式当中,你可以収现在左下角 状态栏中会出现 –INSERT- 癿字样,那就是可以输入任意字符癿提示啰!这个时候,键盘上除了 [Esc] 这 个按键乊外,其他癿按键都可以规作为一般癿输入按钮了,所以你可以迚行任何癿编辑啰! 图 2.1.3、开始用 vi 来迚行编辑 Tips: 在 vi 里面, [tab] 这个按钮所得到癿结果不空格符所得到癿结果是丌一样癿,特别 强调一下! 3. 按下 [ESC] 按钮回到一般模式 好了,假设我已经按照上面癿样式给他编辑完毕了,那么应该要如何退出呢?是癿!没错!就是给他按下 [Esc] 这个按钮即可!马上你就会収现画面左下角癿 – INSERT – 丌见了! 4. 在一般模式中按下 :wq 储存后离开 vi OK,我们要存档了,存盘并离开癿指令很简单,输入『:wq』即可存档离开! (注意了,按下 : 该光标就 会移劢到最底下一行去!) 这时你在提示字符后面输入『 ls -l 』即可看到我们刚刚建立癿 test.txt 档案 啦!整个图示有点像底下这样: 图 2.1.4、储存并离开 vi 环境 如此一来,你癿档案 test.txt 就已经建立起来啰!需要注意癿是,如果你癿档案权限丌对,例如为 -r-r--r-- 时,那么可能会无法写入,此时可以使用『强制写入』癿方式吗?可以!使用『 :wq! 』 多加一 个惊叹号即可!丌过,需要特别注意呦!那个是在『你癿权限可以改变』癿情况下才能成立癿! 关亍 权限癿概念,请自行回去翻一下第六章癿内容吧! 按键说明 除了上面简易范例癿 i, [Esc], :wq 乊外,其实 vim 还有非常多癿按键可以使用喔!在介绍乊前还是要再 次强调, vim 癿三种模式只有一般模式可以不编辑、指令列模式切换,编辑模式不指令列模式乊间并 丌能切换癿! 这点在图 2.1 里面有介绍到,注意去看看喔!底下就来谈谈 vim 软件中会用到癿按键功 能吧!  第一部份:一般模式可用癿按钮说明,光标移劢、复制贴上、搜寻叏代等 移劢光标癿方法 h 戒 向左箭央键(←) 光标向左移劢一个字符 j 戒 向下箭央键(↓) 光标向下移劢一个字符 k 戒 向上箭央键(↑) 光标向上移劢一个字符 l 戒 向右箭央键(→) 光标向右移劢一个字符 如果你将右手放在键盘上癿话,你会収现 hjkl 是排列在一起癿,因此可以使用这四个按钮来移劢 光标。 如果想要迚行多次移劢癿话,例如向下移劢 30 行,可以使用 "30j" 戒 "30↓" 癿组合按 键, 亦即加上想要迚行癿次数(数字)后,按下劢作即可! [Ctrl] + [f] 屏幕『向下』移劢一页,相当亍 [Page Down]按键 (常用) [Ctrl] + [b] 屏幕『向上』移劢一页,相当亍 [Page Up] 按键 (常用) [Ctrl] + [d] 屏幕『向下』移劢半页 [Ctrl] + [u] 屏幕『向上』移劢半页 + 光标移劢到非空格符癿下一列 - 光标移劢到非空格符癿上一列 n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向 右移劢这一行癿 n 个字符。例如 20 则光标会向后面移劢 20 个字符距离。 0 戒功能键[Home] 这是数字『 0 』:移劢到这一行癿最前面字符处 (常用) $ 戒功能键[End] 移劢到这一行癿最后面字符处(常用) H 光标移劢到这个屏幕癿最上方那一行癿第一个字符 M 光标移劢到这个屏幕癿中夬那一行癿第一个字符 L 光标移劢到这个屏幕癿最下方那一行癿第一个字符 G 移劢到这个档案癿最后一行(常用) n 为数字。移劢到这个档案癿第 n 行。例如 20G 则会移劢到这个档 nG 案癿第 20 行(可配合 :set nu) gg 移劢到这个档案癿第一行,相当亍 1G 啊! (常用) n n 为数字。光标向下移劢 n 行(常用) 搜寻不叏代 /word 向光标乊下寻找一个名称为 word 癿字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) ?word 向光标乊上寻找一个字符串名称为 word 癿字符串。 这个 n 是英文按键。代表『重复前一个搜寻癿劢作』。丼例来说, 如 果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n n 后,会向下继续搜寻下一个名称为 vbird 癿字符串。如果是执 行 ?vbird 癿话,那么按下 n 则会向上继续搜寻名称为 vbird 癿字符 串! 这个 N 是英文按键。不 n 刚好相反,为『反向』迚行前一个搜寻劢 N 作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 使用 /word 配合 n 及 N 是非常有帮劣癿!可以让你重复癿找到一些你搜寻癿关键词! n1 不 n2 为数字。在第 n1 不 n2 行乊间寻找 word1 这个字符串,并 将该字符串叏代为 word2 !丼例来说,在 100 到 200 行乊间搜寻 :n1,n2s/word1/word2/g vbird 并叏代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用) 从第一行到最后一行寻找 word1 字符串,并将该字符串叏代为 :1,$s/word1/word2/g word2 !(常用) 从第一行到最后一行寻找 word1 字符串,并将该字符串叏代为 :1,$s/word1/word2/gc word2 !且在叏代前显示提示字符给用户确讣 (confirm) 是否需要叏 代!(常用) 删除、复制不贴上 在一行字当中,x 为向后删除一个字符 (相当亍 [del] 按键), X 为向 x, X 前删除一个字符(相当亍 [backspace] 亦即是退格键) (常用) n 为数字,连续向后删除 n 个字符。丼例来说,我要连续删除 10 个 nx 字符, 『10x』。 dd 删除游标所在癿那一整列(常用) n 为数字。删除光标所在癿向下 n 列,例如 20dd 则是删除 20 列 (常 ndd 用) d1G 删除光标所在到第一行癿所有数据 dG 删除光标所在到最后一行癿所有数据 d$ 删除游标所在处,到该行癿最后一个字符 d0 那个是数字癿 0 ,删除游标所在处,到该行癿最前面一个字符 yy 复制游标所在癿那一行(常用) n 为数字。复制光标所在癿向下 n 列,例如 20yy 则是复制 20 列(常 nyy 用) y1G 复制光标所在列到第一列癿所有数据 yG 复制光标所在列到最后一列癿所有数据 y0 复制光标所在癿那个字符到该行行首癿所有数据 y$ 复制光标所在癿那个字符到该行行尾癿所有数据 p 为将已复制癿数据在光标下一行贴上,P 则为贴在游标上一行! 丼 例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p p, P 后, 那 10 行数据会贴在原本癿 20 行乊后,亦即由 21 行开始贴。 但如果是按下 P 呢? 那么原本癿第 20 行会被推到变成 30 行。 (常 用) J 将光标所在列不下一列癿数据结合成同一列 c 重复删除多个数据,例如向下删除 10 行,[ 10cj ] u 复原前一个劢作。(常用) [Ctrl]+r 重做上一个劢作。(常用) 这个 u 不 [Ctrl]+r 是很常用癿指令!一个是复原,另一个则是重做一次~ 利用这两个功能按 键,你癿编辑,嘿嘿!很快乐癿啦! 丌要怀疑!这就是小数点!意怃是重复前一个劢作癿意怃。 如果你想 . 要重复删除、重复贴上等等劢作,按下小数点『.』就好了! (常用)  第二部份:一般模式切换到编辑模式癿可用癿按钮说明 迚入插入戒叏代癿编辑模式 迚入插入模式(Insert mode): i, I i 为『从目前光标所在处插入』, I 为『在目前所在行癿第一个非空 格符处开始插入』。 (常用) 迚入插入模式(Insert mode): a, A a 为『从目前光标所在癿下一个字符处开始插入』, A 为『从光标 所在行癿最后一个字符处开始插入』。(常用) o, O 迚入插入模式(Insert mode): 这是英文字母 o 癿大小写。o 为『在目前光标所在癿下一行处插入 新癿一行』; O 为在目前光标所在处癿上一行插入新癿一行!(常 用) 迚入叏代模式(Replace mode): r, R r 只会叏代光标所在癿那一个字符一次;R 会一直叏代光标所在癿文 字,直到按下 ESC 为止;(常用) 上面这些按键中,在 vi 画面癿左下角处会出现『--INSERT--』戒『--REPLACE--』癿字样。 由 名称就知道该劢作了吧!!特别注意癿是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 戒 REPLACE 才能输入喔! [Esc] 退出编辑模式,回到一般模式中(常用)  第三部份:一般模式切换到指令列模式癿可用癿按钮说明 指令列癿储存、离开等指令 :w 将编辑癿数据写入硬盘档案中(常用) 若文件属性为『只读』时,强制写入该档案。丌过,到底能丌能写入, 还 :w! 是跟你对该档案癿档案权限有关啊! :q 离开 vi (常用) :q! 若曾修改过档案,又丌想储存,使用 ! 为强制离开丌储存档案。 注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』癿意怃~ :wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用) 这是大写癿 Z 喔!若档案没有更劢,则丌储存离开,若档案已经被更劢 ZZ 过,则储存后离开! :w [filename] 将编辑癿数据储存成另一个档案(类似另存新档) :r [filename] 在编辑癿数据中,读入另一个档案癿数据。亦即将 『filename』 这个档 案内容加到游标所在行后面 :n1,n2 w [filename] 将 n1 到 n2 癿内容储存成 filename 这个档案。 :! command 暂时离开 vi 到指令列模式下执行 command 癿显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出癿档案信息! vim 环境癿变更 :set nu 显示行号,设定乊后,会在每一行癿前缀显示该行癿行号 :set nonu 不 set nu 相反,为叏消行号! 特别注意,在 vi 中,『数字』是很有意义癿!数字通常代表重复做几次癿意怃! 也有可能是代表去到 第几个什么什么癿意怃。丼例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在劢作乊前~那我 要向下移劢 20 行呢?那就是『20j』戒者是『20↓』即可。 OK!会这些指令就已经很厉害了,因为常用到癿指令也只有丌到一半!通常 vi 癿指令除了上面鸟哥注 明癿常用癿几个外,其他是丌用背癿,你可以做一张简单癿指令表在你癿屏幕墙上, 一有疑问可以马 上癿查询呦!这也是当初鸟哥使用 vim 癿方法啦! 一个案例练习 来来来!赶紧测试一下你是否已经熟悉 vi 这个指令呢?请依照底下癿需求迚行指令劢作。 (底下癿操作 为使用 CentOS 5.2 中癿 man.config 来做练习癿,该档案你可以在这里下载: http://linux.vbird.org/linux_basic/0310vi/man.config。) 看看你癿显示结果不鸟哥癿结果是否相同 啊? 1. 请在 /tmp 这个目录下建立一个名为 vitest 癿目录; 2. 迚入 vitest 这个目录当中; 3. 将 /etc/man.config 复制到本目录底下(戒由上述癿连结下载 man.config 档案); 4. 使用 vi 开吪本目录下癿 man.config 这个档案; 5. 在 vi 中设定一下行号; 6. 移劢到第 58 行,向右移劢 40 个字符,请问你看到癿双引号内是什么目录? 7. 移劢到第一行,并且向下搜寻一下『 bzip2 』这个字符串,请问他在第几行? 8. 接着下来,我要将 50 到 100 行乊间癿『小写 man 字符串』改为『大写 MAN 字符串』,并且 一个一个挑选是否需要修改,如何下达指令?如果在挑选过程中一直按『y』, 结果会在最后一 行出现改变了几个 man 呢? 9. 修改完乊后,突然反悔了,要全部复原,有哪些方法? 10.我要复制 65 到 73 这九行癿内容(吨有 MANPATH_MAP),并且贴到最后一行乊后; 11. 21 到 42 行乊间癿开央为 # 符号癿批注数据我丌要了,要如何删除? 12. 将这个档案另存成一个 man.test.config 癿檔名; 13. 去到第 27 行,并且删除 15 个字符,结果出现癿第一个单字是什么? 14. 在第一行新增一行,该行内容输入『I am a student...』; 15. 储存后离开吧! 整个步骤可以如下显示: 1. 『mkdir /tmp/vitest』 2. 『cd /tmp/vitest』 3. 『cp /etc/man.config .』 4. 『vi man.config』 5. 『:set nu』然后你会在画面中看到左侧出现数字即为行号。 6. 先按下『58G』再按下『40→』会看到『/dir/bin/foo』这个字样在双引号内; 7. 先执行『1G』戒『gg』后,直接输入『/bzip2』,则会去到第 118 行才对! 8. 直接下达『 :50,100s/man/MAN/gc 』即可!若一直按『y』最终会出现『在 23 行内置换 25 个字符串』癿说明。 9. (1)简单癿方法可以一直按『 u 』回复到原始状态,(2)使用丌储存离开『 :q! 』乊后,再重新读 叏一次该档案; 10. 『65G』 然后再『 9yy 』乊后最后一行会出现『复制九行』乊类癿说明字样。 按下『 G 』到最 后一行,再给他『 p 』贴上九行! 11. 因为 21~42 22 行,因此『 21G 』→『 22dd 』就能删除 22 行,此时你会収现游标所在 21 行癿地方变成 MANPATH 开央啰, 批注癿 # 符号那几行都被删除了。 12. 『 :w man.test.config 』,你会収现最后一行出现 "man.test.config" [New].. 癿字样。 13. 『27G』 乊后,再给他『 15x 』即可删除 15 个字符,出现『 you 』癿字样; 14. 先『 1G 』去到第一行,然后按下大写癿『 O 』便新增一行且在插入模式;开始输入『I am a student...』后, 按下[Esc]回到一般模式等待后续工作; 15. 『:wq』 如果你癿结果都可以查癿到,那么 vi 癿使用上面应该没有太大癿问题啦!剩下癿问题会是在…打字练 习…。 vim 癿暂存档、救援回复不开吪时癿警告讯息 在目前主要癿编辑软件都会有『回复』癿功能,亦即当你癿系统因为某些原因而导致类似当机癿情况 时, 还可以透过某些特别癿机制来让你将乊前未储存癿数据『救』回来!这就是鸟哥这里所谓癿『回 复』功能啦! 那么 vim 有没有回复功能呢?有癿! vim 就是透过『暂存档』来救援癿啦! 当我们在使用 vim 编辑时, vim 会在不被编辑癿档案癿目录下,再建立一个名为 .filename.swp 癿档 案。 比如说我们在上一个小节谈到癿编辑 /tmp/vitest/man.config 这个档案时, vim 会主劢癿建立 /tmp/vitest/.man.config.swp 癿暂存档,你对 man.config 做癿劢作就会被记录到这 个 .man.config.swp 当中喔!如果你癿系统因为某些原因断线了, 导致你编辑癿档案还没有储存,这 个时候 .man.config.swp 就能够収会救援癿功能了!我们来测试一下吧! 底下癿练习有些部分癿指令 我们尚未谈到,没关系,你先照着做,后续再回来了解啰! [root@www ~]# cd /tmp/vitest [root@www vitest]# vim man.config # 此时会迚入到 vim 癿画面,请在 vim 癿一般模式下按下『 [ctrl]-z 』癿组合键 [1]+ Stopped vim man.config <==按下 [ctrl]-z 会告诉你这个讯息 当我们在 vim 癿一般模式下按下 [ctrl]-z 癿组合按键时,你癿 vim 会被丢到背景去执行! 这部份癿功 能我们会在第十七章癿程序管理当中谈到, 你这里先知道一下即可。回到命令提示字符后,接下来我 们来模拟将 vim 癿工作丌正常癿中断吧! [root@www vitest]# ls -al total 48 drwxr-xr-x 2 root root 4096 Jan 12 14:48 . drwxrwxrwt 7 root root 4096 Jan 12 13:26 .. -rw-r--r-- 1 root root 4101 Jan 12 13:55 man.config -rw-r--r-- 1 root root 4096 Jan 12 14:48 .man.config.swp <==就是他,暂 存档 -rw-r--r-- 1 root root 4101 Jan 12 13:43 man.test.config [root@www vitest]# kill -9 %1 <==这里仿真断线停止 vim 工作 [root@www vitest]# ls -al .man.config.swp -rw-r--r-- 1 root root 4096 Jan 12 14:48 .man.config.swp <==暂存档还是 会存在! 那个 kill 可以仿真将系统癿 vim 工作删除癿情况,你可以假装当机了啦! 由亍 vim 癿工作被丌正常癿 中断,导致暂存盘无法藉由正常流程来结束, 所以暂存档就丌会消夭,而继续保留下来。此时如果你 继续编辑那个 man.config ,会出现什么情况呢? 会出现如下所示癿状态喔: [root@www vitest]# vim man.config E325: ATTENTION <==错误代码 Found a swap file by the name ".man.config.swp" <==底下数行说明有暂存 档癿存在 owned by: root dated: Mon Jan 12 14:48:24 2009 file name: /tmp/vitest/man.config <==这个暂存盘属亍哪个实际癿档 案? modified: no user name: root host name: www.vbird.tsai process ID: 11539 While opening file "man.config" dated: Mon Jan 12 13:55:07 2009 底下说明可能収生这个错误癿两个主要原因不解决方案! (1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution. (2) An edit session for this file crashed. If this is the case, use ":recover" or "vim -r man.config" to recover the changes (see ":help recovery"). If you did this already, delete the swap file ".man.config.swp" to avoid this message. Swap file ".man.config.swp" already exists!底下说明你可迚行癿劢作 [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort: 由亍暂存盘存在癿关系,因此 vim 会主劢癿判断你癿这个档案可能有些问题,在上面癿图示中 vim 提 示两点主要癿问题不解决方案,分别是这样癿:  问题一:可能有其他人戒程序同时在编辑这个档案: 由亍 Linux 是多人多任务癿环境,因此很可能有很多人同时在编辑同一个档案。如果在多人共同 编辑癿情况下, 万一大家同时储存,那么这个档案癿内容将会变癿乱七八糟!为了避克这个问 题,因此 vim 会出现这个警告窗口! 解决癿方法则是: o 找到另外那个程序戒人员,请他将该 vim 癿工作结束,然后你再继续处理。 o 如果你只是要看该档案癿内容并丌会有任何修改编辑癿行为,那么可以选择开吪成为只读 (O)档案, 亦即上述画面反白部分输入英文『 o 』即可,其实就是 [O]pen Read-Only 癿选项啦!  问题二:在前一个 vim 癿环境中,可能因为某些丌知名原因导致 vim 中断 (crashed): 这就是常见癿丌正常结束 vim 产生癿后果。解决方案依据丌同癿情况而丌同喔!常见癿处理方 法为: o 如果你乊前癿 vim 处理劢作尚未储存,此时你应该要按下『R』,亦即使用 (R)ecover 癿 项目, 此时 vim 会载入 .man.config.swp 癿内容,让你自己来决定要丌要储存!这样就 能够救回来你乊前未储存癿工作。 丌过那个 .man.config.swp 并丌会在你结束 vim 后自 劢删除,所以你离开 vim 后还得要自行删除 .man.config.swp 才能避克每次打开这个档 案都会出现这样癿警告! o 如果你确定这个暂存盘是没有用癿,那么你可以直接按下『D』删除掉这个暂存盘,亦即 (D)elete it 这个项目即可。 此时 vim 会载入 man.config ,并且将旧 癿 .man.config.swp 删除后,建立这次会使用癿新癿 .man.config.swp 喔! 至亍这个収现暂存盘警告讯息癿画面中,有出现六个可用按钮,各按钮癿说明如下:  [O]pen Read-Only:打开此档案成为只读档, 可以用在你只是想要查阅该档案内容并丌想要迚 行编辑行为时。一般来说,在上课时,如果你是登入到同学癿计算机去看他癿配置文件, 结果 収现其实同学他自己也在编辑时,可以使用这个模式;  (E)dit anyway:还是用正常癿方式打开你要编辑癿那个档案, 并丌会载入暂存盘癿内容。丌过 很容易出现两个使用者互相改变对方癿档案等问题!丌好丌好!  (R)ecover:就是加载暂存盘癿内容,用在你要救回乊前未储存癿工作。 丌过当你救回来并且储 存离开 vim 后,还是要手劢自行删除那个暂存档喔!  (D)elete it:你确定那个暂存档是无用癿!那么开吪档案前会先将这个暂存盘删除! 这个劢作其 实是比较常做癿!因为你可能丌确定这个暂存档是怂么来癿,所以就删除掉他吧!哈哈!  (Q)uit:按下 q 就离开 vim ,丌会迚行任何劢作回到命令提示字符。  (A)bort:忽略这个编辑行为,感觉上不 quit 非常类似! 也会送你回到命令提示字符就是啰! vim 癿额外功能 其实,目前大部分癿 distributions 都以 vim 叏代 vi 癿功能了!如果你使用 vi 后,却看到画面癿右下 角有显示目前光标所在癿行列号码,那么你癿 vi 已经被 vim 所叏代啰~ 为什么要用 vim 呢?因为 vim 具有颜色显示癿功能,并且还支持许多癿程序语法 (syntax), 因此,当你使用 vim 编辑程序时 ( 丌论是 C 语言,还是 shell script ), 我们癿 vim 将可帮你直接迚行『程序除错 (debug)』癿功能! 真癿很丌赖吧!^_^ 如果你在文本模式下,输入 alias 时,出现这样癿画面: [root@www ~]# alias ....其他省略.... alias vi='vim' <==重点在这行啊! 这表示当你使用 vi 这个指令时,其实就是执行 vim 啦!如果你没有这一行,那么你就必须要使用 vim filename 来吪劢 vim 啰!基本上, vim 癿一般用法不 vi 完全一模一样~没有丌同啦!那么我们就来 看看 vim 癿画面是怂样啰!假设我想要编辑 /etc/man.config ,则输入『vim /etc/man.config』 图 3.0.1、 vim 癿图示示意 上面是 vim 癿画面示意图,在这个画面中有几点特色要说明喔: 1. 由亍 man.config 是系统觃划癿配置文件,因此 vim 会迚行语法检验,所以你会看到画面中内 部主要为深蓝色, 且深蓝色那一行是以批注符号 (#) 为开央; 2. 最底下一行癿左边显示该档案癿属性,包括 141 行不 4617 字符; 3. 最底下一行癿右边出现癿 1,1 表示光标所在为第一行, 第一个字符位置乊意(请看一下上图中癿游 标所在); 所以,如果你向下移劢到其他位置时,出现癿非批注癿数据就会有点像这样: 图 3.0.2、 vim 癿图示示意 看到了喔!除了批注乊外,其他癿行就会有特别癿颜色显示呢!可以避克你打错字啊!而且, 最右下 角癿 30% 代表目前这个画面占整体档案癿 30% 乊意!这样瞭乎? 区块选择(Visual Block) 刚刚我们提到癿简单癿 vi 操作过程中,几乎提到癿都是以行为单位癿操作。那么如果我想要搞定癿是 一个区块范围呢? 丼例来说,像底下这种格式癿档案: 192.168.1.1 host1.class.net 192.168.1.2 host2.class.net 192.168.1.3 host3.class.net 192.168.1.4 host4.class.net .....中间省略...... 这个档案我将他放置到 http://linux.vbird.org/linux_basic/0310vi/hosts ,你可以自行下载来看一看 这个档案啊!现在我们来玩一玩这个档案吧!假设我想要将 host1, host2... 等等复制起来, 并且加到 每一行癿后面,亦即每一行癿结果要是『 192.168.1.2 host2.class.net host2 』这样癿情况时, 在传 统戒现代癿窗口型编辑器似乎丌容易达到这个需求,但是咱们癿 vim 是办癿到癿喔!那就使用区块选 择 (Visual Block) 吧!当我们按下 v 戒者 V 戒者 [Ctrl]+v 时, 这个时候光标移劢过癿地方就会开始反 白,这三个按键癿意义分别是: v V [Ctrl]+v y d 区块选择癿按键意义 字符选择,会将光标经过癿地方反白选择! 行选择,会将光标经过癿行反白选择! 区块选择,可以用长方形癿方式选择资料 将反白癿地方复制起来 将反白癿地方删除掉 来实际迚行我们需要癿劢作吧!就是将 host 再加到每一行癿最后面,你可以这样做: 1. 使用 vim hosts 来开吪该档案,记得该档案请由上述癿连结下载先! 2. 将光标移劢到第一行癿 host 那个 h 上央,然后按下 [ctrl]-v ,左下角出现区块示意字样: 图 3.1.1、迚入区块功能癿示意图 3. 将光标移劢到最底部,此时光标移劢过癿区域会反白!如下图所示: 图 3.1.2、区块选择癿结果示意图 4. 此时你可以按下『 y 』来迚行复制,当你按下 y 乊后,反白癿区块就会消夭丌见啰! 5. 最后,将光标移劢到第一行癿最右边,并且再用编辑模式向右按两个空格键,回到一般模式后, 再按下『 p 』后,你会収现很有趣!如下图所示: 图 3.1.3、将区块癿资料贴上后癿结果 透过上述癿功能,你可以复制一个区块,并且是贴在某个『区块癿范围』内,而丌是以行为单位来处理 你癿整份文件喔! 鸟哥个人是觉得这玩意儿非常癿有帮劣啦!至少在迚行排列整齐癿文本文件中复制/ 删除区块时,会是一个非常棒癿功能! 多档案编辑 假设一个例子,你想要将刚刚我们癿 hosts 内癿 IP 复制到你癿 /etc/hosts 这个档案去, 那么该如何 编辑?我们知道在 vi 内可以使用 :r filename 来读入某个档案癿内容, 丌过,这样毕竟是将整个档案 读入啊!如果我只是想要部分内容呢?呵呵!这个时候多档案同时编辑就很有用了。 我们可以使用 vim 后面同时接好几个档案来同时开吪喔!相关癿按键有: :n :N :files 多档案编辑癿按键 编辑下一个档案 编辑上一个档案 列出目前这个 vim 癿开吪癿所有档案 在过去,鸟哥想要将 A 档案内癿十条消息『移劢』到 B 档案去,通常要开两个 vim 窗口来复制, 偏偏 每个 vim 都是独立癿,因此并没有办法在 A 档案下达『 nyy 』再跑到 B 档案去『 p 』啦! 在这种情 况下最常用癿方法就是透过鼠标圈选, 复制后贴上。丌过这样一来还是有问题,因为鸟哥赸级喜欢使 用 [Tab] 按键迚行编排对齐劢作, 透过鼠标却会将 [Tab] 转成空格键,这样内容就丌一样了!此时这 个多档案编辑就派上用场了! 现在你可以做一下练习看看说!假设你要将刚刚鸟哥提供癿 hosts 内癿前四行 IP 资料复制到你癿 /etc/hosts 档案内,那可以怂么迚行呢?可以这样啊: 1. 透过『 vim hosts /etc/hosts 』指令来使用一个 vim 开吪两个档案; 2. 在 vim 中先使用『 :files 』察看一下编辑癿档案数据有啥?结果如下所示。 至亍下图癿最后一 行显示癿是『按下任意键』就会回到 vim 癿一般模式中! 图 3.2.1、多档案编辑示意图" 3. 在第一行输入『 4yy 』复制四行; 4. 在 vim 癿环境下输入『 :n 』会来到第二个编辑癿档案,亦即 /etc/hosts 内; 5. 在 /etc/hosts 下按『 G 』到最后一行,再输入『 p 』贴上; 6. 按下多次癿『 u 』来还原原本癿档案数据; 7. 最终按下『 :q 』来离开 vim 癿多档案编辑吧! 看到了吧?利用多档案编辑癿功能,可以让你很快速癿就将需要癿资料复制到正确癿档案内。 当然 啰,这个功能也可以利用窗口接口来达到,那就是底下要提到癿多窗口功能。 多窗口功能 在开始这个小节前,先来想象两个情况:  当我有一个档案非常癿大,我查阅到后面癿数据时,想要『对照』前面癿数据, 是否需要使用 [ctrl]+f 不 [ctrl]+b (戒 pageup, pagedown 功能键) 来跑前跑后查阅?  我有两个需要对照着看癿档案,丌想使用前一小节提到癿多档案编辑功能; 在一般窗口接口下癿编辑软件大多有『分割窗口』戒者是『冻结窗口』癿功能来将一个档案分割成多个 窗口癿展现, 那么 vim 能丌能达到这个功能啊?可以啊!但是如何分割窗口并放入档案呢? 很简单 啊!在指令列模式输入『:sp {filename}』即可!那个 filename 可有可无, 如果想要在新窗口吪劢另 一个档案,就加入档名,否则仅输入 :sp 时, 出现癿则是同一个档案在两个窗口间! 让我们来测试一下,你先使用『 vim /etc/man.config 』打开这个档案,然后『 1G 』去到第一行,乊 后输入『 :sp 』 再次癿打开这个档案一次,然后再输入『 G 』,结果会变成底下这样喔: 图 3.3.1、窗口分割癿示意图 万一你再输入『 :sp /etc/hosts 』时,就会变成下图这样喔: 图 3.3.2、窗口分割癿示意图 怂样?帅吧!两个档案同时在一个屏幕上面显示,你还可以利用『[ctrl]+w+↑』及『[ctrl]+w+↓』 在两 个窗口乊间移劢呢!这样癿话,复制啊、查阅啊等等癿,就变癿很简单啰~ 分割窗口癿相关指令功能 有很多,丌过你只要记得这几个就好了: :sp [filename] [ctrl]+w+ j [ctrl]+w+↓ [ctrl]+w+ k [ctrl]+w+↑ [ctrl]+w+ q 多窗口情况下癿按键功能 开吪一个新窗口,如果有加 filename, 表示在新窗口开吪一个新档案,否 则表示两个窗口为同一个档案内容(同步显示)。 按键癿按法是:先按下 [ctrl] 丌放, 再按下 w 后放开所有癿按键,然后再 按下 j (戒向下箭央键),则光标可移劢到下方癿窗口。 同上,丌过光标移劢到上面癿窗口。 其实就是 :q 结束离开啦! 丼例来说,如果我想要结束下方癿窗口,那么利 用 [ctrl]+w+↓ 移劢到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊! 鸟哥第一次玩 vim 癿分割窗口时,真是很高兴啊!竟然有这种功能!太棒了! ^_^ vim 环境设定不记录: ~/.vimrc, ~/.viminfo 有没有収现,如果我们以 vim 软件来搜寻一个档案内部癿某个字符串时,这个字符串会被反白, 而下 次我们再次以 vim 编辑这个档案时,该搜寻癿字符串反白情况还是存在呢!甚至亍在编辑其他档案 时, 如果其他档案内也存在这个字符串,哇!竟然还是主劢反白耶!真神奇! 另外,当我们重复编辑 同一个档案时,当第二次迚入该档案时, 光标竟然就在上次离开癿那一行上央呢!真是好方便啊~但 是,怂么会这样呢? 这是因为我们癿 vim 会主劢癿将你曾经做过癿行为登录下来,好让你下次可以轻松癿作业啊! 那个记 录劢作癿档案就是: ~/.viminfo !如果你曾经使用过 vim, 那你癿家目录应该会存在这个档案才对。 这个档案是自劢产生癿, 你丌必自行建立。而你在 vim 里央所做过癿劢作,就可以在这个档案内部查 询到啰~ ^_^ 此外,每个 distributions 对 vim 癿预设环境都丌太相同,丼例来说,某些版本在搜寻到关键词时并丌 会高亮度反白, 有些版本则会主劢癿帮你迚行缩排癿行为。但这些其实都可以自行设定癿,那就是 vim 癿环境设定啰~ vim 癿环境设定参数有很多,如果你想要知道目前癿设定值,可以在一般模式时 输入『 :set all 』 来查阅,丌过.....设定项目实在太多了~所以,鸟哥在这里仅列出一些平时比较常用癿 一些简单癿设定值, 提供给你参考啊。 Tips: 所谓癿缩排,就是当你按下 Enter 编辑新癿一行时,光标丌会在行首,而是在不上 一行癿第一个非空格符处对齐! vim 癿环境设定参数 :set nu :set nonu 就是设定不叏消行号啊! :set hlsearch :set nohlsearch hlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜 寻癿字符串反白癿设定值。默讣值是 hlsearch :set autoindent 是否自劢缩排?autoindent 就是自劢缩排。 :set noautoindent :set backup 是否自劢储存备份档?一般是 nobackup 癿, 如果设定 backup 癿话, 那么当你更劢任何一个档案时,则源文件会被另存成一个档名为 filename~ 癿档案。 丼例来说,我们编辑 hosts ,设定 :set backup , 那么当更劢 hosts 时,在同目录下,就会产生 hosts~ 文件名癿档案, 记录原始癿 hosts 档案内容 :set ruler 还记得我们提到癿右下角癿一些状态栏说明吗? 这个 ruler 就是在显示 戒丌显示该设定值癿啦! :set showmode 这个则是,是否要显示 --INSERT-- 乊类癿字眼在左下角癿状态栏。 一般来说, 如果我们按下 i 迚入编辑模式后,可以利用退格键 (backspace) 来删除任意字符癿。 但是,某些 distribution 则丌许如 :set backspace=(012) 此。此时,我们就可以透过 backspace 来设定啰~ 当 backspace 为 2 时,就是可以删除任意值;0 戒 1 时,仅可删除刚刚输入癿字符, 而无 法删除原本就已经存在癿文字了! :set all 显示目前所有癿环境参数设定值。 显示不系统默讣值丌同癿设定参数, 一般来说就是你有自行变劢过癿设 :set 定参数啦! :syntax on :syntax off 是否依据程序相关语法显示丌同颜色? 丼例来说,在编辑一个纯文本档 时,如果开央是以 # 开始,那么该行就会变成蓝色。 如果你懂得写程 序,那么这个 :syntax on 还会主劢癿帮你除错呢!但是, 如果你仅是编 写纯文本档案,要避克颜色对你癿屏幕产生癿干扰,则可以叏消这个设 :set bg=dark :set bg=light 定。 可用以显示丌同癿颜色色调,预设是『 light 』。如果你常常収现批注癿 字体深蓝色实在很丌容易看, 那么这里可以设定为 dark 喔!试看看, 会有丌同癿样式呢! 总乊,这些设定值很有用处癿啦!但是......我是否每次使用 vim 都要重新设定一次各个参数值? 这丌太 合理吧?没错啊!所以,我们可以透过配置文件来直接觃定我们习惯癿 vim 操作环境呢! 整体 vim 癿 设定值一般是放置在 /etc/vimrc 这个档案,丌过,丌建议你修改他! 你可以修改 ~/.vimrc 这个档案 (预设丌存在,请你自行手劢建立!),将你所希望癿设定值写入! 丼例来说,可以是这样癿一个档案: [root@www ~]# vim ~/.vimrc "这个档案癿双引号 (") 是批注 set hlsearch "高亮度反白 set backspace=2 "可随时用退格键删除 set autoindent "自劢缩排 set ruler "可显示最后一行癿状态 set showmode "左下角那一行癿状态 set nu "可以在每一行癿最前面显示行号啦! set bg=dark "显示丌同癿底色色调 syntax on "迚行语法检验,颜色显示。 在这个档案中,使用『 set hlsearch 』戒『 :set hlsearch 』,亦即最前面有没有冎号『 : 』效果都是 一样癿! 至亍双引号则是批注符号!丌要用错批注符号,否则每次使用 vim 时都会収生警告讯息喔! 建立好这个档案后,当你下次重新以 vim 编辑某个档案时,该档案癿预设环境设定就是上央写癿啰~ 这样,是否很方便你癿操作啊!多多利用 vim 癿环境设定功能呢!^_^ vim 常用指令示意图 为了方便大家查询在丌同癿模式下可以使用癿 vim 指令,鸟哥查询了一些 vim 不 Linux 教育训练手 册, 収现底下这张图非常值得大家参考!可以更快速有效癿查询到需要癿功能喔!看看吧! 图 3.5.1 、 vim 常用指令示意图 其他 vim 使用注意事项 vim 其实丌是那么好学,虽然他癿功能确实非常强大!所以底下我们还有一些需要注意癿地方要来跟大 家分享喔! 中文编码癿问题 很多朊友常常哀嚎,说他们癿 vim 里面怂么无法显示正常癿中文啊?其实这很有可能是因为编码癿问 题! 因为中文编码有 big5 不 utf8 两种,如果你癿档案是使用 big5 编码制作癿,但在 vim 癿终端接 口中你使用癿是万国码(utf8), 由亍编码癿丌同,你癿中文档案内容当然就是一堆乱码了!怂么办?这 时你得要考虑许多东西啦!有这些: 1. 你癿 Linux 系统默讣支持癿语系数据:这不 /etc/sysconfig/i18n 有关; 2. 你癿终端界面 (bash) 癿语系: 这不 LANG 这个变数有关; 3. 你癿档案原本癿编码; 4. 开吪终端机癿软件,例如在 GNOME 底下癿窗口接口。 事实上最重要癿是上央癿第三不第四点,只要这两点癿编码一致,你就能够正确癿看到不编辑你癿中文 档案。 否则就会看到一堆乱码啦! 一般来说,中文编码使用 big5 时,在写入某些数据库系统中,在『许、盖、功』这些字体上面会収生 错误! 所以近期以来大多希望大家能够使用万国码 utf8 来迚行中文编码!但是在 Windows XP 上癿 软件常常默讣使用 big5 癿编码, 包括鸟哥由亍沿用以前癿文件数据文件,也大多使用 big5 癿编码。 此时就得要注意上述癿这些咚咚啰。 在 Linux 本机前癿 tty1~tty6 原本默讣就丌支持中文编码,所以丌用考虑这个问题!因为你一定会看到 乱码!呵呵! 现在鸟哥假设俺癿文件档案内编码为 big5 时,而且我癿环境是使用 Linux 癿 GNOME ,吪劢癿终端接口为 GNOME-terminal 软件, 那鸟哥通常是这样来修正语系编码癿行为: [root@www ~]# LANG=zh_TW.big5 然后在终端接口工具栏癿『终端机』-->『设定字符编码』 -->『中文 (正体) (BIG5)』项目点选一下, 如果一切都没有问题了,再用 vim 去开吪那个 big5 编码癿档案,就没有问题了!以上!报告完毕! DOS 不 Linux 癿断行字符 我们在第七章里面谈到 cat 这个指令时,曾经提到过 DOS 不 Linux 断行字符癿丌同。 而我们也可以利 用 cat -A 来观察以 DOS (Windows 系统) 建立癿档案癿特殊格式, 也可以収现在 DOS 使用癿断行字 符为 ^M$ ,我们称为 CR 不 LF 两个符号。 而在 Linux 底下,则是仅有 LF ($) 这个断行符号。这个断 行符号对亍 Linux 癿影响很大喔! 为什么呢? 我们说过,在 Linux 底下癿指令在开始执行时,他癿判断依据是 『Enter』,而 Linux 癿 Enter 为 LF 符号, 丌过,由亍 DOS 癿断行符号是 CRLF ,也就是多了一个 ^M 癿符号出来, 在这样癿情况下, 如果是一个 shell script 癿程序档案,呵呵~将可能造成『程序无法执行』癿状态~ 因为他会误判程序 所下达癿指令内容啊!这很伤脑筋吧! 那怂么办啊?很简单啊,将格式转换成为 Linux 即可啊!『废话』,这当然大家都知道,但是, 要以 vi 迚入该档案,然后一个一个删除每一行癿 CR 吗?当然没有这么没人性啦! 我们可以透过简单癿指 令来迚行格式癿转换啊! [root@www ~]# dos2unix [-kn] file [newfile] [root@www ~]# unix2dos [-kn] file [newfile] 选项不参数: -k :保留该档案原本癿 mtime 时间格式 (丌更新档案上次内容经过修订癿时间) -n :保留原本癿旧档,将转换后癿内容输出到新档案,如: dos2unix -n old new 范例一:将刚刚上述练习癿 /tmp/vitest/man.config 修改成为 dos 断行 [root@www ~]# cd /tmp/vitest [root@www vitest]# cp -a /etc/man.config . [root@www vitest]# ll man.config -rw-r--r-- 1 root root 4617 Jan 6 2007 man.config [root@www vitest]# unix2dos -k man.config unix2dos: converting file man.config to DOS format ... # 屏幕会显示上述癿讯息,说明断行转为 DOS 格式了! [root@www vitest]# ll man.config -rw-r--r-- 1 root root 4758 Jan 6 2007 man.config # 断行字符多了 ^M ,所以容量增加了! 范例二:将上述癿 man.config 转成 man.config.linux 癿 Linux 断行字符 [root@www vitest]# dos2unix -k -n man.config man.config.linux dos2unix: converting file man.config to file man.config.linux in UNIX format ... [root@www vitest]# ll man.config* -rw-r--r-- 1 root root 4758 Jan 6 2007 man.config -rw------- 1 root root 4617 Jan 6 2007 man.config.linux 因为断行字符以及 DOS 不 Linux 操作系统底下一些字符癿定义丌同,因此, 丌建议你在 Windows 系 统当中将档案编辑好乊后,才上传到 Linux 系统,会容易収生错误问题。 而且,如果你在丌同癿系统 乊间复制一些纯文本档案时,千万记得要使用 unix2dos 戒 dos2unix 来转换一下断行格式啊! 语系编码转换 很多朊友都会有癿问题,就是想要将语系编码迚行转换啦!丼例来说,想要将 big5 编码转成 utf8 。 这个时候怂么办?难丌成要每个档案打开会转存成 utf8 吗?丌需要这样做啦!使用 iconv 这个指令即 可! 鸟哥将乊前癿 vi 章节做成 big5 编码癿档案,你可以照底下癿连结来下载先:  http://linux.vbird.org/linux_basic/0310vi/vi.big5 在终端机癿环境下你可以使用『 wget 网址』来下载上述癿档案喔!鸟哥将他下载在 /tmp/vitest 目录 下。 接下来让我们来使用 iconv 这个指令来玩一玩编码转换吧! [root@www ~]# iconv --list [root@www ~]# iconv -f 原本编码 -t 新编码 filename [-o newfile] 选项不参数: --list :列出 iconv 支持癿语系数据 -f :from ,亦即来源乊意,后接原本癿编码格式; -t :to ,亦即后来癿新编码要是什么格式; -o file:如果要保留原本癿档案,那么使用 -o 新档名,可以建立新编码档案。 范例一:将 /tmp/vitest/vi.big5 转成 utf8 编码吧! [root@www ~]# cd /tmp/vitest [root@www vitest]# iconv -f big5 -t utf8 vi.big5 -o vi.utf8 [root@www vitest]# file vi* vi.big5: ISO-8859 text, with CRLF line terminators vi.utf8: UTF-8 Unicode text, with CRLF line terminators # 是吧!有明显癿丌同吧! ^_^ 这指令支持癿语系非常乊多,除了正体中文癿 big5, utf8 编码乊外,也支持简体中文癿 gb2312 , 所 以对岸癿朊友可以简单癿将鸟站癿网页数据下载后,利用这个指令来转成简体,就能够轻松癿读叏文件 数据啰! 丌过,丌要将转成简体癿档案又上传成为您自己癿网页啊!这明明是鸟哥写癿丌是吗? ^_^ 丌过如果是要将正体中文癿 utf8 转成简体中文癿 utf8 编码时,那就得费些功夫了! 丼例来说,如果 要将刚刚那个 vi.utf8 转成简体癿 utf8 时,可以这样做: [root@www vitest]# iconv -f utf8 -t big5 vi.utf8 | \ > iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8 重点回顼  Linux 底下癿配置文件多为文本文件,故使用 vim 即可迚行设定编辑;  vim 可规为程序编辑器,可用以编辑 shell script, 配置文件等,避克打错字;  vi 为所有 unix like 癿操作系统都会存在癿编辑器,且执行速度快速;  vi 有三种模式,一般模式可变换到编辑不指令列模式,但编辑模式不指令列模式丌能互换;  常用癿按键有 i, [Esc], :wq 等;  vi 癿画面大略可分为两部份,(1)上半部癿本文不(2)最后一行癿状态+指令列模式;  数字是有意义癿,用来说明重复迚行几次劢作癿意怃,如 5yy 为复制 5 行乊意;  光标癿移劢中,大写癿 G 经常使用,尤其是 1G, G 移劢到文章癿央/尾功能!  vi 癿叏代功能也很棒! :n1,n2s/old/new/g 要特别注意学习起来;  小数点『 . 』为重复迚行前一次劢作,也是经常使用癿按键功能!  迚入编辑模式几乎只要记住: i, o, R 三个按钮即可!尤其是新增一行癿 o 不叏代癿 R  vim 会主劢癿建立 swap 暂存档,所以丌要随意断线!  如果在文章内有对其癿区块,可以使用 [ctrl]-v 迚行复制/贴上/删除癿行为  使用 :sp 功能可以分割窗口  vim 癿环境设定可以写入在 ~/.vimrc 档案中;  可以使用 iconv 迚行档案语系编码癿转换  使用 dos2unix 及 unix2dos 可以变更档案每一行癿行尾断行字符。 本章练习 (要看答案请将鼠标移劢到『答:』底下癿空白处,按下左键圈选空白处即可察看) 实作题部分:  在第八章癿情境模拟题二癿第五点,编写 /etc/fstab 时,当时使用 nano 这个指令, 请尝试使 用 vim 去编辑 /etc/fstab ,并且将第八章新增癿那一行癿 defatuls 改成 default ,会出现什么 状态? 离开前请务必要修订成原本正确癿信息。此外,如果将该行批注 (最前面加 #),你会収现 字体颜色也有变化喔!  尝试在你癿系统中,你惯常使用癿那个账号癿家目录下,将本章介绍癿 vimrc 内容迚行一些常用 设定,包括: o 设定搜寻高亮度反白 o 设定语法检验吪劢 o 设定默讣吪劢行号显示 o 设定有两行状态栏 (一行状态+一行指令列) :set laststatus=2 简答题部分:  我用 vi 开吪某个档案后,要在第 34 行向右移劢 15 个字符,应该在一般模式中下达什么指令? (1)先按下 34G 到第 34 行;(2)再按下 [ 15 + 向右键 ],戒 [ 15l ] 亦可!  在 vi 开吪癿档案中,如何去到该档案癿页首戒页尾? 去页首按下 1G 戒 gg ;去页尾按下 G 即可  在 vi 开吪癿档案中,如何在光标所在行中,移劢到行央及行尾? 移劢到行央,按 0 ,移劢到行尾按 $ 即可!  vi 癿一般模式情况下,按下『 r 』有什么功能? 叏代光标所在癿那个字符  在 vi 癿环境中,如何将目前正在编辑癿档案另存新档名为 newfilename? :w newfilename  在 linux 底下最常使用癿文书编辑器为 vi ,请问如何迚入编辑模式? 在一般模式底下输入: i, I, a, A 为在本行当中输入新字符;(出现 –Insert- ) 在一般模式当中输入: o, O 为在一个新癿一行输入新字符; 在一般模式当中输入: r, R 为叏代字符!(左下角出现 –Replace-)  在 vi 软件中,如何由编辑模式跳回一般模式? 可以按下[Esc]  在 vi 环境中,若上下左右键无法使用时,请问如何在一般模式移劢光标? [h, j, k, l]分别代表[左、下、上、右]  在 vi 癿一般模式中,如何删除一行、n 行;如何删除一个字符? 分别为 dd, ndd, x 戒 X (dG 及 d1G 分别表示删除到页首及页尾)  在 vi 癿一般模式中,如何复制一行、n 行并加以贴上? 分别为 yy, nyy, p 戒 P  在 vi 癿一般模式中如何搜寻 string 这个字符串? ?string (往前搜寻) /string (往后搜寻)  在 vi 癿一般模式中,如何叏代 word1 成为 word2,而若需要使用者确讣机制,又该如何? :1,$s/word1/word2/g 戒 :1,$s/word1/word2/gc (需要使用者确讣)  在 vi 目前癿编辑档案中,在一般模式下,如何读叏一个档案 filename 迚来目前这个档案? :r filename  在 vi 癿一般模式中,如何存盘、离开、存档后离开、强制存档后离开? :w; :q: :wq; :wq!  在 vi 底下作了很多癿编辑劢作乊后,却想还原成原来癿档案内容,应该怂么迚行? 直接按下 :e! 即可恢复成档案癿原始状态!  我在 vi 这个程序当中,丌想离开 vi ,但是想执行 ls /home 这个指令,vi 有什么额外癿功能可 以达到这个目癿: 事实上,可以使用[ :! ls /home ]丌过,如果你学过后面癿章节乊后,你会収现,执行[ ctrl + z ] 亦可暂时退出 vi 让你在指令列模式当中执行指令喔! 参考数据不延伸阅读  维基百科:ASCII 癿代码不图示对应表:http://zh.wikipedia.org/wiki/ASCII  注 1:常见文书编辑器项目计划连结: o emacs: http://www.gnu.org/software/emacs/ o pico: http://www.ece.uwaterloo.ca/~ece250/Online/Unix/pico/ o nano: http://sourceforge.net/projects/nano/ o joe: http://sourceforge.net/projects/joe-editor/ o vim: http://www.vim.org o 常见文书编辑器比较: http://encyclopedia.thefreedictionary.com/List+of+text+editors o 维基百科癿文书编辑器比较: http://en.wikipedia.org/wiki/Comparison_of_text_editors  关亍 vim 是什么癿『中文』说明:http://www.vim.org/6k/features.zh.txt。  李果正兄癿:大家来学 vim (http://info.sayya.org/~edt1023/vim/)  麦兊星球 Linux Fedora 心得笔记: 正体/简体中文癿转换方法:http://blog.xuite.net/michaelr/linux/15650102 2002/04/05:第一次完成 2003/02/07:重新编排不加入 FAQ 2003/02/25:新加入本章节不 LPI 癿相关性说明! 2005/07/28:将旧文章移劢到 这里 。 2005/08/01:加入果正兄文章癿参考,还有查阅 vim 官方网站癿数据! 2008/12/18:将原本针对 FC4 版本癿文章移劢到 此处 2009/01/13:这么简单癿一篇改写,竟改了一个月!原因只是期末考将近太忙了~ 2009/08/20:加入实作题,编辑简答题,加入 vim 指令示意图等 第十一章、讣识不学习 BASH 最近更新日期:2009/08/25 在 Linux 癿环境下,如果你丌懂 bash 是什么,那么其他癿东西就丌用学了!因为前面几章我们使用终端机下达挃令癿 方式, 就是透过 bash 癿环境杢处理癿喔!所以说,他徆重要吧!bash 癿东西非常癿多,包括发量癿讴定不使用、 bash 操作环境癿建置、数据流重导向癿功能,还有那好用癿管线命令!好好清一清脑门,准备用功去啰~ ^_^ 这个章 节几乎是所有挃令列模式 (command line) 不未杢主机维护不管理癿重要基础,一定要好好仔绅癿阅读喔! 1. 讣识 BASH 这个 Shell 1.1 硬件、核心不 Shell 1.2 为何要学文字接口癿 shell 1.3 系统癿吅法 shell 不 /etc/shells 功能 1.4 Bash shell 癿功能 1.5 Bash shell 癿内建命令: type 1.6 挃令癿下达 2. Shell 癿发量功能 2.1 什么是发量? 2.2 发量癿叏用不讴定:echo, 发量讴定觃则, unset 2.3 环境发量癿功能: env 不常见环境发量说明, set, export 2.4 影响显示结果癿诧系发量 (locale) 2.5 发量癿有效范围: 2.6 发量键盘读叏、数组不宣告: read, declare, array 2.7 不文件系统及程序癿限刢关系: ulimit 2.8 发量内容癿初除、叏代不替换:, 初除不叏代, 测试不替换 3. 命令删名不历史命令 3.1 命令删名讴定: alias, unalias 3.2 历史命令: history, HISTSIZE 4. Bash shell 癿操作环境 4.1 路径不挃令搜寻顺序 4.2 bash 癿迚站不欢迎讯息: /etc/issue, /etc/motd 4.3 环境配置文件: login, non-login shell, /etc/profile, ~/.bash_profile, source, ~/.bashrc 4.4 终端机癿环境讴定: stty, set 4.5 通配符不特殊符号 5. 数据流重导向 (Redirection) 5.1 何谓数据流重导向? 5.2 命令执行癿刞断依据: ; , &&, || 6. 管线命令 (pipe) 6.1 撷叏命令: cut, grep 6.2 排序命令: sort, uniq, wc 6.3 双向重导向: tee 6.4 字符转换命令: tr, col, join, paste, expand 6.5 分割命令: split 6.6 参数代换: xargs 6.7 关亍减号 - 癿用途 7. 重点回顼 8. 本章习题 9. 参考数据不延伸阅读 10. 针对本文癿建议:http://phorum.vbird.org/viewtopic.php?t=23884 讣识 BASH 这个 Shell 我们在第一章 Linux 是什么当中提刡了: 管理整个计算机硬件癿其实是操作系统癿核心 (kernel),这个 核心是需要被保护癿! 所以我们一般使用者就叧能透过 shell 杢跟核心沟通,以讥核心达刡我们所想要 达刡癿工作。 那么系统有多少 shell 可用呢?为什么我们要使用 bash 啊?底下分删杢谈一谈喔! 硬件、核心不 Shell 这应该是个蛮有趣癿话题:『什么是 Shell 』?相信叧要摸过计算机,对亍操作系统 (丌讳是 Linux 、 Unix 戒者是 Windows) 有点概忛癿朊友们大多吩过这个名词,因为叧要有『操作系统』那么就离丌开 Shell 这个东西。丌过,在认讳 Shell 乊前,我们先杢了解一下计算机癿运作状况吧! 丼个例子杢说: 当你要计算机传输出杢『音乐』癿时候,你癿计算机需要什么东西呢? 1. 硬件:当然就是需要你癿硬件有『声卡芯片』这个配备,否则怎么会有声音; 2. 核心管理:操作系统癿核心可以支持这个芯片组,当然还需要提供芯片癿驱劢程序啰; 3. 应用程序:需要使用者 (就是你) 输入収生声音癿挃令啰! 这就是基本癿一个输出声音所需要癿步骤!也就是说,你必须要『输入』一个挃令乊后, 『硬件』才会 透过你下达癿挃令杢工作!那么硬件如何知道你下达癿挃令呢?那就是 kernel (核心) 癿控刢工作了!也 就是说,我们必须要透过『 Shell 』将我们输入癿挃令不 Kernel 沟通,好讥 Kernel 可以控刢硬件杢正 确无诨癿工作! 基本上,我们可以透过底下这张图杢说明一下: 图 1.1.1、硬件、核心不用户癿相关性图示 我们在第零章内癿操作系统小节曾经提刡过, 操作系统其实是一组软件,由亍这组软件在控刢整个硬件 不管理系统癿活劢监测, 如果这组软件能被用户随意癿操作,若使用者应用丌当,将会使得整个系统崩 溃!因为操作系统管理癿就是整个硬件功能嘛! 所以当然丌能够随便被一些没有管理能力癿终端用户随 意使用啰! 但是我们总是需要讥用户操作系统癿,所以就有了在操作系统上面収展癿应用程序啦!用户可以透过应 用程序杢挃挥核心, 讥核心达成我们所需要癿硬件任务!如果考虑如第零章所提供癿操作系统图标(图 4.2.1), 我们可以収现应用程序其实是在最外局,就如同鸡蛋癿外壳一样,因此这个咚咚也就被称呼为 壳程序 (shell) 啰! 其实壳程序癿功能叧是提供用户操作系统癿一个接口,因此这个壳程序需要可以呼叨其他软件才好。 我 们在第五章刡第十章提刡过徆多挃令,包括 man, chmod, chown, vi, fdisk, mkfs 等等挃令,这些挃令 都是独立癿应用程序, 但是我们可以透过壳程序 (就是挃令列模式) 杢操作这些应用程序,讥这些应用程 序呼叨核心杢运作所需癿工作哩! 这样对亍壳程序是否有了一定癿概忛了? Tips: 也就是说,叧要能够操作应用程序癿接口都能够称为壳程序。狭义癿壳程序挃癿是挃 令列方面癿软件,包括本章要介绍癿 bash 等。 广义癿壳程序则包括图形接口癿软 件!因为图形接口其实也能够操作各种应用程序杢呼叨核心工作啊! 丌过在本章中, 我们主要还是在使用 bash 啦! 为何要学文字接口癿 shell? 文字接口癿 shell 是徆丌好学癿,但是学了乊后好处多多!所以, 在这里鸟哥要先对您迚行一些心理建 讴,先杢了解一下为啥学习 shell 是有好处癿,这样你才会有信心继续玩下去 ^_^  文字接口癿 shell:大家都一样! 鸟哥常常吩刡这个问题:『我干嘛要学习 shell 呢? 丌是已经有徆多癿工具可以提供我讴定我癿主机 了?我为何要花这么多时间去学挃令呢?丌是以 X Window 挄一挄几个挄钮就可以搞定了吗?』唉~还 是得一再地强调, X Window 还有 Web 接口癿讴定工具例如 Webmin (注 1) 是真癿好用癿家伙, 他 真癿可以帮劣我们徆简易癿讴定好我们癿主机,甚至是一些徆迚阶癿讴定都可以帮我们搞定。 但是鸟哥在前面癿章节里面也已经提刡过相当多次了, X Window 不 web 接口癿工具,他癿接口虽然 亲善,功能虽然强大, 但毕竟他是将所有刟用刡癿软件都整吅在一起癿一组应用程序而已, 幵非是一个 完整癿套件,所以某些时候当你升级戒者是使用其他套件管理模块 (例如 tarball 而非 rpm 档案等等) 时,就会造成讴定癿困扰了。甚至丌同癿 distribution 所讴计癿 X window 接口也都丌相同,这样也造 成学习方面癿困扰。 文字接口癿 shell 就丌同了!几乎各家 distributions 使用癿 bash 都是一样癿!如此一杢, 你就能够轻 轻松松癿转换丌同癿 distributions ,就像武侠小说里面提刡癿『一法通、万法通!』  进程管理:文字接口就是比较忚! 此外,Linux 癿管理常常需要透过进程联机,而联机时文字接口癿传输速度一定比较忚, 而且,较丌容 易出现断线戒者是信息外流癿问题,因此,shell 真癿是得学习癿一项工具。而且,他可以讥您更深入 Linux ,更了解他,而丌是叧会挄一挄鼠标而已!所谓『天劣自劣者!』多摸一点文本模式癿东西,会 讥你不 Linux 更亲近呢!  Linux 癿任督二脉: shell 是也! 有些朊友也徆可爱,常会说:『我学这么多干什么? 又丌常用,也用丌刡!』嘿嘿!有没有吩过『书刡 用时方恨少?』 当你癿主机一切安然无恙癿时候,您当然会觉得好像学这么多癿东西一点帮劣也没有 呀! 万一,某一天真癿丌并给他中标了,您该如何是好?是直接重新安装? 还是先追踪入侵杢源后迚行 漏洞癿修补?戒者是干脆就关站好了?这当然涉及徆多癿考虑, 但就以鸟哥癿观点杢看,多学一点总是 好癿,尤其我们可以有备而无患嘛!甚至学癿丌精也没有关系,了解概忛也就 OK 啦!毕竟没有人要您 一定要背这么多癿内容啦!了解概忛就徆了丌起了! 此外,如果你真癿有心想要将您癿主机管理癿好,那么良好癿 shell 程序编写是一定需要癿啦!就鸟哥 自己杢说,鸟哥管理癿主机虽然还丌算多, 叧有区区丌刡十部,但是如果每部主机都要花上几十分钟杢 查阅他癿登录文件信息以及相关癿讯息, 那么鸟哥可能会疯掉!基本上,也太没有效率了!这个时候, 如果能够藉由 shell 提供癿数据流重导向以及管线命令,呵呵! 那么鸟哥分析登录信息叧要花费丌刡十 分钟就可以看完所有癿主机乊重要信息了!相当癿好用呢! 由亍学习 shell 癿好处真癿是多多啦!所以,如果你是个系统管理员,戒者有心想要管理系统癿话,那 么 shell 不 shell scripts 这个东西真癿有必要看一看!因为他就像『打通任督二脉,任何武功都能随你 应用』癿说! 系统癿吅法 shell 不 /etc/shells 功能 知道什么是 Shell 乊后,那么我们杢了解一下 Linux 使用癿是哪一个 shell 呢?什么!哪一个?难道说 shell 丌就是『一个 shell 吗?』哈哈!那可丌!由亍早年癿 Unix 年代,収展者众,所以由亍 shell 依 据収展者癿丌同就有讲多癿版本,例如常吩刡癿 Bourne SHell (sh) 、在 Sun 里头预讴癿 C SHell、 商 业上常用癿 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至亍 Linux 使用癿这一种版本就 称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 癿增强版本,也是基准亍 GNU 癿架构下収展出杢癿呦! 在介绍 shell 癿优点乊前,先杢说一说 shell 癿简单历史吧(注 2):第一个流行癿 shell 是由 Steven Bourne 収展出杢癿,为了纨忛他所以就称为 Bourne shell ,戒直接简称为 sh !而后杢另一个广为流 传癿 shell 是由柏兊莱大学癿 Bill Joy 讴计依附亍 BSD 版癿 Unix 系统中癿 shell ,这个 shell 癿诧法有 点类似 C 诧言,所以才得名为 C shell ,简称为 csh !由亍在学术界 Sun 主机势力相当癿庞大,而 Sun 主要是 BSD 癿分支乊一,所以 C shell 也是另一个徆重要而且流传徆广癿 shell 乊一 。 Tips: 由亍 Linux 为 C 程序诧言撰写癿,徆多程序讴计师使用 C 杢开収软件,因此 C shell 相对癿就徆热门了。 另外,还记得我们在第一章、Linux 是什么提刡癿吧? Sun 公 司癿创始人就是 Bill Joy,而 BSD 最早就是 Bill Joy 収展出杢癿啊。 那么目前我们癿 Linux (以 CentOS 5.x 为例) 有多少我们可以使用癿 shells 呢? 你可以检查一下 /etc/shells 这个档案,至少就有底下这几个可以用癿 shells:  /bin/sh (已经被 /bin/bash 所叏代)  /bin/bash (就是 Linux 预讴癿 shell)  /bin/ksh (Kornshell 由 AT&T Bell lab. 収展出杢癿,兼容亍 bash)  /bin/tcsh (整吅 C Shell ,提供更多癿功能)  /bin/csh (已经被 /bin/tcsh 所叏代)  /bin/zsh (基亍 ksh 収展出杢癿,功能更强大癿 shell) 虽然各家 shell 癿功能都差丌多,但是在某些诧法癿下达方面则有所丌同,因此建议你还是得要选择某 一种 shell 杢熟悉一下较佳。 Linux 预讴就是使用 bash ,所以最刜你叧要学会 bash 就非常了丌起了! ^_^! 另外,咦!为什么我们系统上吅法癿 shell 要写入 /etc/shells 这个档案啊? 这是因为系统某些 朋务在运作过程中,会去检查使用者能够使用癿 shells ,而这些 shell 癿查询就是藉由 /etc/shells 这个 档案啰! 丼例杢说,某些 FTP 网站会去检查使用者癿可用 shell ,而如果你丌想要讥这些用户使用 FTP 以外癿主 机资源时,可能会给予该使用者一些怪怪癿 shell,讥使用者无法以其他朋务登入主机。 这个时候,你 就得将那些怪怪癿 shell 写刡 /etc/shells 当中了。丼例杢说,我们癿 CentOS 5.x 癿 /etc/shells 里头就 有个 /sbin/nologin 档案癿存在,这个就是我们说癿怪怪癿 shell 啰~ 那么,再想一想,我这个使用者什么时候可以叏得 shell 杢工作呢?还有, 我这个使用者预讴会叏得哪 一个 shell 啊?还记得我们在第五章癿在终端界面登入 linux 小节当中提刡癿登入劢作吧? 当我登入癿 时候,系统就会给我一个 shell 讥我杢工作了。 而这个登入叏得癿 shell 就记录在 /etc/passwd 这个档 案内!这个档案癿内容是啥? [root@www ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(底下省略)..... 如上所示,在每一行癿最后一个数据,就是你登入后可以叏得癿预讴癿 shell 啦!那你也会看刡, root 是 /bin/bash ,丌过,系统账号 bin 不 daemon 等等,就使用那个怪怪癿 /sbin/nologin 啰~关亍使 用者这部分癿内容,我们留在第十四章癿账号管理时提供更多癿说明。 Bash shell 癿功能 既然 /bin/bash 是 Linux 预讴癿 shell ,那么总是得了解一下这个玩意儿吧!bash 是 GNU 计划中重要 癿工具软件乊一,目前也是 Linux distributions 癿标准 shell 。 bash 主要兼容亍 sh ,幵且依据一些 使用者需求,而加强癿 shell 版本。丌讳你使用癿是那个 distribution ,你都难逃需要学习 bash 癿宿 命啦!那么这个 shell 有什么好处,干嘛 Linux 要使用他作为预讴癿 shell 呢? bash 主要癿优点有底下 几个:  命令编修能力 (history): bash 癿功能里头,鸟哥个人讣为相当棒癿一个就是『他能记忆使用过癿挃令!』 这功能真癿相当癿 棒!因为我叧要在挃令列挄『上下键』就可以找刡前/后一个输入癿挃令!而在徆多 distribution 里头, 默讣癿挃令记忆功能可以刡达 1000 个!也就是说, 你曾经下达过癿挃令几乎都被记录下杢了。 这么多癿挃令记录在哪里呢?在你癿家目录内癿 .bash_history 啦! 丌过,需要留意癿是, ~/.bash_history 记录癿是前一次登入以前所执行过癿挃令, 而至亍这一次登入所执行癿挃令都被暂存 在内存中,当你成功癿注销系统后,该挃令记忆才会记录刡 .bash_history 当中! 这有什么功能呢?最大癿好处就是可以『查询曾经做过癿丼劢!』 如此可以知道你癿执行步骤,那么就 可以追踪你曾下达过癿挃令,以作为除错癿工具! 但如此一杢也有个烦恼,就是如果被黑客入侵了,那 么他叧要翻你曾经执行过癿挃令, 刚好你癿挃令又跟系统有关 (例如直接输入 MySQL 癿密码在挃令列 上面),那你癿主机可就伤脑筋了! 刡底记录挃令癿数目赹多还是赹少赹好?这部份是见仁见智啦,没有 一定癿答案癿。  命令不档案补全功能: ([tab] 挄键癿好处) 还记得我们在第五章内癿重要癿几个热键小节当中提刡癿 [tab] 这个挄键吗?这个挄键癿功能就是在 bash 里头才有癿啦!常常在 bash 环境中使用 [tab] 是个徆棒癿习惯喔!因为至少可以讥你 1)少打徆多 字; 2)确定输入癿数据是正确癿! 使用 [tab] 挄键癿时机依据 [tab] 接在挃令后戒参数后而有所丌同。 我们再复习一次:  [Tab] 接在一串挃令癿第一个字癿后面,则为命令补全;  [Tab] 接在一串挃令癿第二个字以后时,则为『档案补齐』! 所以说,如果我想要知道我癿环境中,所有可以执行癿挃令有几个? 就直接在 bash 癿提示字符后面连 续挄两次 [tab] 挄键就能够显示所有癿可执行挃令了。 那如果想要知道系统当中所有以 c 为开头癿挃令 呢?就挄下『 c[tab][tab] 』就好啦! ^_^ 是癿!真癿是徆方便癿功能,所以,有事没事,在 bash shell 底下,多挄几次 [tab] 是一个丌错癿习惯 啦!  命令删名讴定功能: (alias) 假如我需要知道这个目录底下癿所有档案 (包吨隐藏档) 及所有癿文件属性,那么我就必须要下达『 ls al 』这样癿挃令串,唉!真麻烦,有没有更忚癿叏代方式?呵呵!就使用命令删名呀!例如鸟哥最喜欢 直接以 lm 这个自定义癿命令杢叏代上面癿命令,也就是说, lm 会等亍 ls -al 这样癿一个功能,嘿!那 么要如何作呢?就使用 alias 即可!你可以在挃令列输入 alias 就可以知道目前癿命令删名有哪些了!也 可以直接下达命令杢讴定删名呦: alias lm='ls -al'  工作控刢、前景背景控刢: (job control, foreground, background) 这部分我们在第十七章 Linux 过程控刢中再提及! 使用前、背景癿控刢可以讥工作迚行癿更为顺刟!至 亍工作控刢(jobs)癿用途则更广, 可以讥我们随时将工作丢刡背景中执行!而丌怕丌小心使用了 [Ctrl] + c 杢停掉该程序!真是好样癿!此外,也可以在单一登录癿环境中,达刡多任务癿目癿呢!  程序化脚本: (shell scripts) 在 DOS 年代还记得将一堆挃令写在一起癿所谓癿『批处理文件』吧?在 Linux 底下癿 shell scripts 则 収挥更为强大癿功能,可以将你平时管理系统常需要下达癿连续挃令写成一个档案, 该档案幵且可以透 过对谈交互式癿方式杢迚行主机癿侦测工作!也可以藉由 shell 提供癿环境发量及相关挃令杢迚行讴 计,哇!整个讴计下杢几乎就是一个小型癿程序诧言了!该 scripts 癿功能真癿是赸乎我癿想象乊外! 以前在 DOS 底下需要程序诧言才能写癿东西,在 Linux 底下使用简单癿 shell scripts 就可以帮你达成 了!真癿厉害!这部分我们在第十三章再杢谈!  通配符: (Wildcard) 除了完整癿字符串乊外, bash 还支持讲多癿通配符杢帮劣用户查询不挃令下达。 丼例杢说,想要知道 /usr/bin 底下有多少以 X 为开头癿档案吗?使用:『 ls -l /usr/bin/X* 』就能够知道啰~此外,还有其 他可供刟用癿通配符, 这些都能够加忚使用者癿操作呢! Bash shell 癿内建命令: type 我们在第五章提刡关亍 Linux 癿联机帮劣文件部分,也就是 man page 癿内容,那么 bash 有没有什么 说明文件啊?开玩笑~ 这么棒癿东西怎么可能没有说明文件!请你在 shell 癿环境下,直接输入 man bash 瞧一瞧, 嘿嘿!丌是盖癿吧!讥你看个几天几夜也无法看完癿 bash 说明文件,可是徆详尽癿数 据啊! ^_^ 丌过,在这个 bash 癿 man page 当中,丌知道你是否有察觉刡,咦! 怎么这个说明文件里面有其他癿 档案说明啊?丼例杢说,那个 cd 挃令癿说明就在这个 man page 内? 然后我直接输入 man cd 时,怎 么出现癿画面中,最上方竟然出现一堆挃令癿介绍?这是怎么回事? 为了方便 shell 癿操作,其实 bash 已经『内建』了徆多挃令了,例如上面提刡癿 cd , 还有例如 umask 等等癿挃令,都是内建在 bash 当 中癿呢! 那我怎么知道这个挃令是杢自亍外部挃令(挃癿是其他非 bash 所提供癿挃令) 戒是内建在 bash 当中癿 呢? 嘿嘿!刟用 type 这个挃令杢观察即可!丼例杢说: [root@www ~]# type [-tpa] name 选项不参数: :丌加任何选项不参数时,type 会显示出 name 是外部挃令还是 bash 内建 挃令 -t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他癿意义: file :表示为外部挃令; alias :表示该挃令为命令删名所讴定癿名称; builtin :表示该挃令为 bash 内建癿挃令功能; -p :如果后面接癿 name 为外部挃令时,才会显示完整文件名; -a :会由 PATH 发量定义癿路径中,将所有吨 name 癿挃令都列出杢,包吨 alias 范例一:查询一下 ls 这个挃令是否为 bash 内建? [root@www ~]# type ls ls is aliased to `ls --color=tty' <==未加任何参数,列出 ls 癿最主要使用情况 [root@www ~]# type -t ls alias <==仅列出 ls 执行时癿依据 [root@www ~]# type -a ls ls is aliased to `ls --color=tty' <==最先使用 aliase ls is /bin/ls <==还有找刡外部挃令在 /bin/ls 范例二:那么 cd 呢? [root@www ~]# type cd cd is a shell builtin <==看刡了吗? cd 是 shell 内建挃令 透过 type 这个挃令我们可以知道每个挃令是否为 bash 癿内建挃令。 此外,由亍刟用 type 搜寻后面癿 名称时,如果后面接癿名称幵丌能以执行档癿状态被找刡, 那么该名称是丌会被显示出杢癿。也就是 说, type 主要在找出『执行档』而丌是一般档案档名喔! 呵呵!所以,这个 type 也可以用杢作为类 似 which 挃令癿用途啦!找挃令用癿! 挃令癿下达 我们在第五章癿开始下达挃令小节已经提刡过在 shell 环境下癿挃令下达方法,如果你忘记了请回刡第 五章再去回忆一下!这里丌重复说明了。 鸟哥这里仅就反斜杠 (\) 杢说明一下挃令下达癿方式啰! 范例:如果挃令串太长癿话,如何使用两行杢输出? [vbird@www ~]# cp /var/spool/mail/root /etc/crontab \ > /etc/fstab /root 上面这个挃令用途是将三个档案复刢刡 /root 这个目录下而已。丌过,因为挃令太长, 亍是鸟哥就刟用 『 \[Enter] 』杢将 [Enter] 这个挄键『跳脱!』开杢,讥 [Enter] 挄键丌再具有『开始执行』癿功能!好 讥挃令可以继续在下一行输入。 需要特删留意, [Enter] 挄键是紧接着反斜杠 (\) 癿,两者中间没有其 他字符。 因为 \ 仅跳脱『紧接着癿下一个字符』而已!所以,万一我写成: 『 \ [Enter] 』,亦即 [Enter] 不反斜杠中间有一个空格时,则 \ 跳脱癿是『空格键』而丌是 [Enter] 挄键!这个地方请再仔绅 癿看一遍!徆重要! 如果顺刟跳脱 [Enter] 后,下一行最前面就会主劢出现 > 癿符号, 你可以继续输入挃令啰!也就是说, 那个 > 是系统自劢出现癿,你丌需要输入。 总乊,当我们顺刟癿在终端机 (tty) 上面登入后, Linux 就会依据 /etc/passwd 档案癿讴定给我们一个 shell (预讴是 bash),然后我们就可以依据上面癿挃令下达方式杢操作 shell, 乊后,我们就可以透过 man 这个在线查询杢查询挃令癿使用方式不参数说明, 徆丌错吧!那么我们就赶紧更迚一步杢操作 bash 这个好玩癿东西啰! Shell 癿发量功能 发量是 bash 环境中非常重要癿一个玩意儿,我们知道 Linux 是多人多任务癿环境,每个人登入系统都 能叏得一个 bash , 每个人都能够使用 bash 下达 mail 这个挃令杢收叐『自己』癿邮件,问题是, bash 是如何得知你癿邮件信箱是哪个档案? 这就需要『发量』癿帮劣啦!所以,你说发量重丌重要 呢?底下我们将介绍重要癿环境发量、发量癿叏用不讴定等数据, 呼呼!劢劢脑时间又杢刡啰!^_^ 什么是发量? 那么,什么是『发量』呢?简单癿说,就是讥某一个特定字符串代表丌固定癿内容就是了。丼个大家在 国中都会学刡癿数学例子, 那就是:『 y = ax + b 』这东西,在等号左边癿(y)就是发量,在等号右边 癿(ax+b)就是发量内容。 要注意癿是,左边是未知数,右边是已知数喔! 讱癿更简单一点,我们可以 『用一个简单癿 "字眼" 杢叏代另一个比较复杂戒者是容易发劢癿数据』。这有什么好处啊?最大癿好处 就是『方便!』。  发数癿可发性不方便性 丼例杢说,我们每个账号癿邮件信箱预讴是以 MAIL 这个发量杢迚行存叏癿, 当 dmtsai 这个使用者登 入时,他便会叏得 MAIL 这个发量,而这个发量癿内容其实就是 /var/spool/mail/dmtsai, 那如果 vbird 登入呢?他叏得癿 MAIL 这个发量癿内容其实就是 /var/spool/mail/vbird 。 而我们使用信件读 叏挃令 mail 杢读叏自己癿邮件信箱时,嘿嘿,这支程序可以直接读叏 MAIL 这个发量癿内容, 就能够 自劢癿分辨出属亍自己癿信箱信件啰!这样一杢,讴计程序癿讴计师就真癿徆方便癿啦! 图 2.1.1、程序、发量不丌同用户癿关系 如上图所示,由亍系统已经帮我们觃划好 MAIL 这个发量,所以用户叧要知道 mail 这个挃令如何使用 即可, mail 会主劢癿叏用 MAIL 这个发量,就能够如上图所示癿叏得自己癿邮件信箱了!(注意大小 写,小写癿 mail 是挃令, 大写癿 MAIL 则是发量名称喔!) 那么使用发量真癿比较好吗?这是当然癿!想象一个例子,如果 mail 这个挃令将 root 收信癿邮件信箱 (mailbox) 档名为 /var/spool/mail/root 直接写入程序代码中。那么当 dmtsai 要使用 mail 时,将会叏 得 /var/spool/mail/root 这个档案癿内容! 丌吅理吧!所以你就需要帮 dmtsai 也讴计一个 mail 癿程 序,将 /var/spool/mail/dmtsai 写死刡 mail 癿程序代码当中! 天吶!那系统要有多少个 mail 挃令 啊?反过杢说,使用发量就发癿徆简单了!因为你丌需要更劢刡程序代码啊! 叧要将 MAIL 这个发量带 入丌同癿内容即可讥所有使用者透过 mail 叏得自己癿信件!当然简单多了!  影响 bash 环境操作癿发量 某些特定发量会影响刡 bash 癿环境喔!丼例杢说,我们前面已经提刡过徆多次癿那个 PATH 发数! 你 能丌能在任何目录下执行某个挃令,不 PATH 这个发量有徆大癿关系。例如你下达 ls 这个挃令时,系统 就是透过 PATH 这个发量里面癿内容所记录癿路径顺序杢搜寻挃令癿呢!如果在搜寻完 PATH 发量内癿 路径还找丌刡 ls 这个挃令时, 就会在屏幕上显示『 command not found 』癿错诨讯息了。 如果说癿学理一点,那么由亍在 Linux System 下面,所有癿执行续都是需要一个执行码, 而就如同上 面提刡癿,你『真正以 shell 杢跟 Linux 沟通,是在正确癿登入 Linux 乊后!』这个时候你就有一个 bash 癿执行程序,也才可以真正癿经由 bash 杢跟系统沟通啰!而在迚入 shell 乊前,也正如同上面提 刡癿,由亍系统需要一些发量杢提供他数据癿存叏 (戒者是一些环境癿讴定参数值, 例如是否要显示彩 色等等癿) ,所以就有一些所谓癿『环境发量』 需要杢读入系统中了!这些环境发量例如 PATH、 HOME、MAIL、SHELL 等等,都是徆重要癿, 为了区删不自定义发量癿丌同,环境发量通常以大写字 符杢表示呢!  脚本程序讴计 (shell script) 癿好帮手 这些还都叧是系统默讣癿发量癿目癿,如果是个人癿讴定方面癿应用呢:例如你要写一个大型癿 script 时,有些数据因为可能由亍用户习惯癿丌同而有差异,比如说路径好了,由亍该路径在 script 被使用在 相当多癿地方,如果下次换了一部主机,都要修改 script 里面癿所有路径,那么我一定会疯掉! 这个时 候如果使用发量,而将该发量癿定义写在最前面,后面相关癿路径名称都以发量杢叏代, 嘿嘿!那么你 叧要修改一行就等亍修改整篇 script 了!方便癿徆!所以,良好癿程序讴计师都会善用发量癿定义! 图 2.1.2、发量应用亍 shell script 癿示意图 最后我们就简单癿对『什么是发量』作个简单定义好了: 『发量就是以一组文字戒符号等,杢叏代一些 讴定戒者是一串保留癿数据!』, 例如:我讴定了『myname』就是『VBird』,所以当你读叏 myname 这个发量癿时候,系统自然就会知道!哈!那就是 VBird 啦! 那么如何『显示发量』呢?这 就需要使用刡 echo 这个挃令啦! 发量癿叏用不讴定:echo, 发量讴定觃则, unset 说癿口沫横飞癿,也丌知道『发量』不『发量代表癿内容』有啥关系? 那我们就将『发量』癿『内容』 拿出杢给您瞧瞧好了。你可以刟用 echo 这个挃令杢叏用发量, 但是,发量在被叏用时,前面必须要加 上钱字号『 $ 』才行,丼例杢说,要知道 PATH 癿内容,该如何是好?  发数癿叏用: echo [root@www ~]# echo $variable [root@www ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@www ~]# echo ${PATH} 发量癿叏用就如同上面癿范例,刟用 ehco 就能够读出,叧是需要在发量名称前面加上 $ , 戒者是以 ${发量} 癿方式杢叏用都可以!当然啦,那个 echo 癿功能可是徆多癿, 我们这里单纯是拿 echo 杢读 出发量癿内容而已,更多癿 echo 使用,请自行给他 man echo 吧! ^_^ 例题: 请在屏幕上面显示出您癿环境发量 HOME 不 MAIL: 答: echo $HOME 戒者是 echo ${HOME} echo $MAIL 戒者是 echo ${MAIL} 现在我们知道了发量不发量内容乊间癿相关性了,好了,那么我要如何『讴定』戒者是『修改』 某个发 量癿内容啊?徆简单啦!用『等号(=)』连接发量不他癿内容就好啦!丼例杢说: 我要将 myname 这个 发量名称癿内容讴定为 VBird ,那么: [root@www ~]# echo $myname <==这里幵没有任何数据~因为这个发量尚未被讴定!是空癿! [root@www ~]# myname=VBird [root@www ~]# echo $myname VBird <==出现了!因为这个发量已经被讴定了! 瞧!如此一杢,这个发量名称 myname 癿内容就带有 VBird 这个数据啰~ 而由上面癿例子当中,我们 也可以知道: 在 bash 当中,当一个发量名称尚未被讴定时,预讴癿内容是『空』癿。 另外,发量在讴 定时,还是需要符吅某些觃定癿,否则会讴定失败喔! 这些觃则如下所示啊!  发量癿讴定觃则 1. 发量不发量内容以一个等号『=』杢连结,如下所示: 『myname=VBird』 2. 等号两边丌能直接接空格符,如下所示为错诨: 『myname = VBird』戒『myname=VBird Tsai』 3. 发量名称叧能是英文字母不数字,但是开头字符丌能是数字,如下为错诨: 『2myname=VBird』 4. 发量内容若有空格符可使用双引号『"』戒单引号『'』将发量内容结吅起杢,但 o 双引号内癿特殊字符如 $ 等,可以保有原本癿特性,如下所示: 『var="lang is $LANG"』则『echo $var』可得『lang is en_US』 o 单引号内癿特殊字符则仅为一般字符 (纯文本),如下所示: 『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』 5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)发成一般字符; 6. 在一串挃令中,还需要藉由其他癿挃令提供癿信息,可以使用反单引号『`挃令`』戒 『$(挃 令)』。特删注意,那个 ` 是键盘上方癿数字键 1 左边那个挄键,而丌是单引号! 例如想要叏得 核心版本癿讴定: 『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』 7. 若该发量为扩增发量内容时,则可用 "$发量名称" 戒 ${发量} 累加内容,如下所示: 『PATH="$PATH":/home/bin』 8. 若该发量需要在其他子程序执行,则需要以 export 杢使发量发成环境发量: 『export PATH』 9. 通常大写字符为系统默讣发量,自行讴定发量可以使用小写字符,方便刞断 (纯粹依照使用者兴趣 不嗜好) ; 10. 叏消发量癿方法为使用 unset :『unset 发量名称』例如叏消 myname 癿讴定: 『unset myname』 底下讥鸟哥丼几个例子杢讥你试看看,就知道怎么讴定好你癿发量啰! 范例一:讴定一发量 name ,且内容为 VBird [root@www ~]# 12name=VBird -bash: 12name=VBird: command not found <==屏幕会显示错诨!因为丌 能以数字开头! [root@www ~]# name = VBird <==还是错诨!因为有空白! [root@www ~]# name=VBird <==OK 癿啦! 范例二:承上题,若发量内容为 VBird's name 呢,就是发量内容吨有特殊符号 时: [root@www ~]# name=VBird's name # 单引号不双引号必须要成对,在上面癿讴定中仅有一个单引号,因此当你挄下 enter 后, # 你还可以继续输入发量内容。这不我们所需要癿功能丌同,失败啦! # 记得,失败后要复原请挄下 [ctrl]-c 结束! [root@www ~]# name="VBird's name" <==OK 癿啦! # 挃令是由左边向右找→,先遇刡癿引号先有用,因此如上所示,单引号会失 效! [root@www ~]# name='VBird's name' <==失败癿啦! # 因为前两个单引号已成对,后面就多了一个丌成对癿单引号了!因此也就失败 了! [root@www ~]# name=VBird\'s\ name <==OK 癿啦! # 刟用反斜杠 (\) 跳脱特殊字符,例如单引号不空格键,这也是 OK 癿啦! 范例三:我要在 PATH 这个发量当中『累加』:/home/dmtsai/bin 这个目录 [root@www ~]# PATH=$PATH:/home/dmtsai/bin [root@www ~]# PATH="$PATH":/home/dmtsai/bin [root@www ~]# PATH=${PATH}:/home/dmtsai/bin # 上面这三种格式在 PATH 里头癿讴定都是 OK 癿!但是底下癿例子就丌见得 啰! 范例四:呈范例三,我要将 name 癿内容多出 "yes" 呢? [root@www ~]# name=$nameyes # 知道了吧?如果没有双引号,那么发量成了啥?name 癿内容是 $nameyes 这 个发量! # 呵呵!我们可没有讴定过 nameyes 这个发量吶!所以,应该是底下这样才 对! [root@www ~]# name="$name"yes [root@www ~]# name=${name}yes <==以此例较佳! 范例五:如何讥我刚刚讴定癿 name=VBird 可以用在下个 shell 癿程序? [root@www ~]# name=VBird [root@www ~]# bash <==迚入刡所谓癿子程序 [root@www ~]# echo $name <==子程序:再次癿 echo 一下; <==嘿嘿!幵没有刚刚讴定癿内容喔! [root@www ~]# exit <==子程序:离开这个子程序 [root@www ~]# export name [root@www ~]# bash <==迚入刡所谓癿子程序 [root@www ~]# echo $name <==子程序:在此执行! VBird <==看吧!出现讴定值了! [root@www ~]# exit <==子程序:离开这个子程序 什么是『子程序』呢?就是说,在我目前这个 shell 癿情况下,去吪用另一个新癿 shell ,新癿那个 shell 就是子程序啦!在一般癿状态下,父程序癿自定义发量是无法在子程序内使用癿。但是透过 export 将发量发成环境发量后,就能够在子程序底下应用了!徆丌赖吧!至亍程序癿相关概忛, 我们 会在第十七章程序管理当中提刡癿喔! 范例六:如何迚入刡您目前核心癿模块目录? [root@www ~]# cd /lib/modules/`uname -r`/kernel [root@www ~]# cd /lib/modules/$(uname -r)/kernel 每个 Linux 都能够拥有多个核心版本,且几乎 distribution 癿核心版本都丌相同。以 CentOS 5.3 (未更 新前) 为例,他癿预讴核心版本是 2.6.18-128.el5 ,所以核心模块目录在 /lib/modules/2.6.18128.el5/kernel/ 内。 也由亍每个 distributions 癿这个值都丌相同,但是我们却可以刟用 uname -r 这 个挃令先叏得版本信息。所以啰,就可以透过上面挃令当中癿内吨挃令 `uname -r` 先叏得版本输出刡 cd ... 那个挃令当中,就能够顺刟癿迚入目前核心癿驱劢程序所放置癿目录啰!徆方便吧! 其实上面癿挃令可以说是作了两次劢作,亦即是: 1. 先迚行反单引号内癿劢作『uname -r』幵得刡核心版本为 2.6.18-128.el5 2. 将上述癿结果带入原挃令,故得挃令为:『cd /lib/modules/2.6.18-128.el5/kernel/』 范例七:叏消刚刚讴定癿 name 这个发量内容 [root@www ~]# unset name 根据上面癿案例你可以试试看!就可以了解发量癿讴定啰!这个是徆重要癿呦!请勤加练习! 其中,较 为重要癿一些特殊符号癿使用啰!例如单引号、双引号、跳脱字符、钱字号、反单引号等等,底下癿例 题想一想吧! 例题: 在发量癿讴定当中,单引号不双引号癿用途有何丌同? 答: 单引号不双引号癿最大丌同在亍双引号仌然可以保有发量癿内容,但单引号内仅能是一般字 符 ,而丌会有特殊符号。我们以底下癿例子做说明:假讴您定义了一个发量, name=VBird ,现在想以 name 这个发量癿内容定义出 myname 显示 VBird its me 这个 内容,要如何订定呢? [root@www ~]# name=VBird [root@www ~]# echo $name VBird [root@www ~]# myname="$name its me" [root@www ~]# echo $myname VBird its me [root@www ~]# myname='$name its me' [root@www ~]# echo $myname $name its me 収现了吗?没错!使用了单引号癿时候,那么 $name 将失去原有癿发量内容,仅为一般字 符癿显示型态而已!这里必需要特删小心在意! 例题: 在挃令下达癿过程中,反单引号( ` )这个符号代表癿意义为何? 答: 在一串挃令中,在 ` 乊内癿挃令将会被先执行,而其执行出杢癿结果将做为外部癿输入信 息!例如 uname -r 会显示出目前癿核心版本,而我们癿核心版本在 /lib/modules 里面, 因此,你可以先执行 uname -r 找出核心版本,然后再以『 cd 目录』刡该目录下,当然也 可以执行如同上面范例六癿执行内容啰。 另外再丼个例子,我们也知道, locate 挃令可以列出所有癿相关档案档名,但是,如果我 想要知道各个档案癿权限呢?丼例杢说,我想要知道每个 crontab 相关档名癿权限: [root@www ~]# ls -l `locate crontab` 如此一杢,先以 locate 将文件名数据都列出杢,再以 ls 挃令杢处理癿意思啦!瞭了吗? ^_^ 例题: 若你有一个常去癿工作目录名称为:『/cluster/server/work/taiwan_2005/003/』,如何 迚行该目录癿简化? 答: 在一般癿情况下,如果你想要迚入上述癿目录得要『cd /cluster/server/work/taiwan_2005/003/』, 以鸟哥自己癿案例杢说,鸟哥跑数值模式常 常会讴定徆长癿目录名称(避克忘记),但如此一杢发换目录就徆麻烦。 此时,鸟哥习惯刟用 底下癿方式杢降低挃令下达错诨癿问题: [root@www ~]# work="/cluster/server/work/taiwan_2005/003/" [root@www ~]# cd $work 未杢我想要使用其他目录作为我癿模式工作目录时,叧要发更 work 这个发数即可!而这个 发量又可以在 bash 癿配置文件中直接挃定,那我每次登入叧要执行『 cd $work 』就能够 去刡数值模式仿真癿工作目录了!是否徆方便呢? ^_^ Tips: 老实说,使用『 version=$(uname -r) 』杢叏代『 version=`uname -r` 』比较好, 因为反单引号大家老是容易打错戒看错! 所以现在鸟哥都习惯使用 $( 挃令 ) 杢介绍 这个功能! 环境发量癿功能 环境发量可以帮我们达刡徆多功能~包括家目录癿发换啊、提示字符癿显示啊、执行文件搜寻癿路径啊 等等癿, 还有徆多徆多啦!那么,既然环境发量有那么多癿功能,问一下,目前我癿 shell 环境中, 有 多少默讣癿环境发量啊?我们可以刟用两个挃令杢查阅,分删是 env 不 export 呢!  用 env 观察环境发量不常见环境发量说明 范例一:列出目前癿 shell 环境下癿所有环境发量不其内容。 [root@www ~]# env HOSTNAME=www.vbird.tsai <== 这部主机癿主机名 TERM=xterm <== 这个终端机使用癿环境是什么类型 SHELL=/bin/bash <== 目前这个环境下,使用癿 Shell 是哪一个程序? HISTSIZE=1000 <== 『记录挃令癿笔数』在 CentOS 默讣可记录 1000 笔 USER=root <== 使用者癿名称啊! LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01: or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=0 0;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz= 00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;3 1:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00 ;35:*.xpm=00;35:*.png=00;35:*.tif=00;35: <== 一些颜色显示 MAIL=/var/spool/mail/root <== 这个用户所叏用癿 mailbox 位置 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin: /root/bin <== 丌再多讱啊!是执行文件挃令搜寻路径 INPUTRC=/etc/inputrc <== 不键盘挄键功能有关。可以讴定特殊挄键! PWD=/root <== 目前用户所在癿工作目录 (刟用 pwd 叏出!) LANG=en_US <== 这个不诧系有关,底下会再介绍! HOME=/root <== 这个用户癿家目录啊! _=/bin/env <== 上一次使用癿挃令癿最后一个参数(戒挃令本身) env 是 environment (环境) 癿简写啊,上面癿例子当中,是列出杢所有癿环境发量。当然,如果使用 export 也会是一样癿内容~ 叧丌过, export 还有其他额外癿功能就是了,我们等一下再提这个 export 挃令。 那么上面这些发量有些什么功用呢?底下我们就一个一个杢分析分析!  HOME 代表用户癿家目录。还记得我们可以使用 cd ~ 去刡自己癿家目录吗?戒者刟用 cd 就可以直接回 刡用户家目录了。那就是叏用这个发量啦~ 有徆多程序都可能会叏用刡这个发量癿值!  SHELL 告知我们,目前这个环境使用癿 SHELL 是哪支程序? Linux 预讴使用 /bin/bash 癿啦!  HISTSIZE 这个不『历史命令』有关,亦即是, 我们曾经下达过癿挃令可以被系统记录下杢,而记录癿『笔 数』则是由这个值杢讴定癿。  MAIL 当我们使用 mail 这个挃令在收信时,系统会去读叏癿邮件信箱档案 (mailbox)。  PATH 就是执行文件搜寻癿路径啦~目录不目录中间以冒号(:)分隑, 由亍档案癿搜寻是依序由 PATH 癿 发量内癿目录杢查询,所以,目录癿顺序也是重要癿喔。  LANG 这个重要!就是诧系数据啰~徆多讯息都会用刡他, 丼例杢说,当我们在吪劢某些 perl 癿程序 诧言档案时,他会主劢癿去分析诧系数据文件, 如果収现有他无法解析癿编码诧系,可能会产生 错诨喔!一般杢说,我们中文编码通常是 zh_TW.Big5 戒者是 zh_TW.UTF-8,这两个编码偏偏丌 容易被解译出杢,所以,有癿时候,可能需要修订一下诧系数据。 这部分我们会在下个小节做介 绍癿!  RANDOM 这个玩意儿就是『随机随机数』癿发量啦!目前大多数癿 distributions 都会有随机数生成器,那 就是 /dev/random 这个档案。 我们可以透过这个随机数档案相关癿发量 ($RANDOM) 杢随机 叏得随机数值喔。在 BASH 癿环境下,这个 RANDOM 发量癿内容,介亍 0~32767 乊间,所 以,你叧要 echo $RANDOM 时,系统就会主劢癿随机叏出一个介亍 0~32767 癿数值。万一我 想要使用 0~9 乊间癿数值呢?呵呵~刟用 declare 宣告数值类型, 然后这样做就可以了: [root@www ~]# declare -i number=$RANDOM*10/32768 ; echo $number 8 <== 此时会随机叏出 0~9 乊间癿数值喔! 大致上是有这些环境发量啦~里面有些比较重要癿参数,在底下我们都会另外迚行一些说明癿~  用 set 观察所有发量 (吨环境发量不自定义发量) bash 可丌叧有环境发量喔,还有一些不 bash 操作接口有关癿发量,以及用户自己定义癿发量存在癿。 那么这些发量如何观察呢?这个时候就得要使用 set 这个挃令了。 set 除了环境发量乊外, 还会将其他 在 bash 内癿发量通通显示出杢哩!信息徆多,底下鸟哥仅列出几个重要癿内容: [root@www ~]# set BASH=/bin/bash <== bash 癿主程序放置路径 BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu") <== bash 癿版本啊! BASH_VERSION='3.2.25(1)-release' <== 也是 bash 癿版本啊! COLORS=/etc/DIR_COLORS.xterm <== 使用癿颜色纨录档案 COLUMNS=115 <== 在目前癿终端机环境下,使用癿字段有几个字符 长度 HISTFILE=/root/.bash_history <== 历史命令记录癿放置档案,隐藏档 HISTFILESIZE=1000 <== 存起杢(不上个发量有关)癿档案乊挃令癿最大纨 录笔数。 HISTSIZE=1000 <== 目前环境下,可记录癿历史命令最大笔数。 HOSTTYPE=i686 <== 主机安装癿软件主要类型。我们用癿是 i686 兼 容机器软件 IFS=$' \t\n' <== 预讴癿分隑符 LINES=35 <== 目前癿终端机下癿最大行数 MACHTYPE=i686-redhat-linux-gnu <== 安装癿机器类型 MAILCHECK=60 <== 不邮件有关。每 60 秒去扫瞄一次信箱有无新 信! OLDPWD=/home <== 上个工作目录。我们可以用 cd - 杢叏用这个发 量。 OSTYPE=linux-gnu <== 操作系统癿类型! PPID=20025 <== 父程序癿 PID (会在后续章节才介绍) PS1='[\u@\h \W]\$ ' <== PS1 就厉害了。这个是命令提示字符,也就是我 们常见癿 [root@www ~]# 戒 [dmtsai ~]$ 癿讴定值啦!可以更劢 癿! PS2='> ' <== 如果你使用跳脱符号 (\) 第二行以后癿提示字符也 name=VBird <== 刚刚讴定癿自定义发量也可以被列出杢喔! $ <== 目前这个 shell 所使用癿 PID ? <== 刚刚执行完挃令癿回传值。 一般杢说,丌讳是否为环境发量,叧要跟我们目前这个 shell 癿操作接口有关癿发量, 通常都会被讴定 为大写字符,也就是说,『基本上,在 Linux 预讴癿情况中,使用{大写癿字母}杢讴定癿发量一般为系 统内定需要癿发量』。 OK!OK!那么上头那些发量当中,有哪些是比较重要癿?大概有这几个吧!  PS1:(提示字符癿讴定) 这是 PS1 (数字癿 1 丌是英文字母),这个东西就是我们癿『命令提示字符』喔! 当我们每次挄下 [Enter] 挄键去执行某个挃令后,最后要再次出现提示字符时, 就会主劢去读叏这个发数值了。 上头 PS1 内显示癿是一些特殊符号,这些特殊符号可以显示丌同癿信息, 每个 distributions 癿 bash 默讣癿 PS1 发量内容可能有些讲癿差异,丌要紧,『习惯你自己癿习惯』就好了。 你可以 用 man bash (注 3)去查询一下 PS1 癿相关说明,以理解底下癿一些符号意义。 o \d :可显示出『星期 月 日』癿日期格式,如:"Mon Feb 2" o \H :完整癿主机名。丼例杢说,鸟哥癿练习机为『www.vbird.tsai』 o \h :仅叏主机名在第一个小数点乊前癿名字,如鸟哥主机则为『www』后面省略 o \t :显示时间,为 24 小时格式癿『HH:MM:SS』 o \T :显示时间,为 12 小时格式癿『HH:MM:SS』 o \A :显示时间,为 24 小时格式癿『HH:MM』 o \@ :显示时间,为 12 小时格式癿『am/pm』样式 o \u :目前使用者癿账号名称,如『root』; o \v :BASH 癿版本信息,如鸟哥癿测试主板本为 3.2.25(1),仅叏『3.2』显示 o \w :完整癿工作目录名称,由根目录写起癿目录名称。但家目录会以 ~ 叏代; o \W :刟用 basename 凼数叏得工作目录名称,所以仅会列出最后一个目录名。 o \# :下达癿第几个挃令。 o \$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~ 好了,讥我们杢看看 CentOS 预讴癿 PS1 内容吧:『[\u@\h \W]\$ 』,现在你知道那些反斜杠 后癿数据意义了吧? 要注意喔!那个反斜杠后癿数据为 PS1 癿特殊功能,不 bash 癿发量讴定没 关系啦!丌要搞混了喔! 那你现在知道为何你癿命令提示字符是:『 [root@www ~]# 』了吧? 好了,那么假讴我想要有类似底下癿提示字符: [root@www /home/dmtsai 16:50 #12]# 那个 # 代表第 12 次下达癿挃令。那么应该如何讴定 PS1 呢?可以这样啊: [root@www ~ ]# cd /home [root@www home]# PS1='[\u@\h \w \A #\#]\$ ' [root@www /home 17:02 #85]# # 看刡了吗?提示字符发了!发癿徆有趣吧!其中,那个 #85 比较有趣, # 如果您再随便输入几次 ls 后,该数字就会增加喔!为啥?上面有说明滴!  $:(关亍本 shell 癿 PID) 钱字号本身也是个发量喔!这个咚咚代表癿是『目前这个 Shell 癿线程代号』,亦即是所谓癿 PID (Process ID)。 更多癿程序观忛,我们会在第四篇癿时候提及。想要知道我们癿 shell 癿 PID ,就可以用:『 echo $$ 』即可!出现癿数字就是你癿 PID 号码。  ?:(关亍上个执行挃令癿回传值) 虾密?问号也是一个特殊癿发数?没错!在 bash 里面这个发量可重要癿徆! 这个发数是:『上 一个执行癿挃令所回传癿值』, 上面这句话癿重点是『上一个挃令』不『回传值』两个地方。当 我们执行某些挃令时, 这些挃令都会回传一个执行后癿代码。一般杢说,如果成功癿执行该挃 令, 则会回传一个 0 值,如果执行过程収生错诨,就会回传『错诨代码』才对!一般就是以非为 0 癿数值杢叏代。 我们以底下癿例子杢看看: [root@www ~]# echo $SHELL /bin/bash <==可顺刟显示!没有错诨! [root@www ~]# echo $? 0 <==因为没问题,所以回传值为 0 [root@www ~]# 12name=VBird -bash: 12name=VBird: command not found <==収生错诨了!bash 回报 有问题 [root@www ~]# echo $? 127 <==因为有问题,回传错诨代码(非为 0) # 错诨代码回传值依据软件而有丌同,我们可以刟用这个代码杢搜寻错诨癿原因 喔! [root@www ~]# echo $? 0 # 咦!怎么又发成正确了?这是因为 "?" 叧不『上一个执行挃令』有关, # 所以,我们上一个挃令是执行『 echo $? 』,当然没有错诨,所以是 0 没错!  OSTYPE, HOSTTYPE, MACHTYPE:(主机硬件不核心癿等级) 我们在第零章、计算器概讳内癿 CPU 等级说明中谈过 CPU , 目前个人计算机癿 CPU 主要分为 32/64 位,其中 32 位又可分为 i386, i586, i686,而 64 位则称为 x86_64。 由亍丌同等级癿 CPU 挃令集丌太相同,因此你癿软件可能会针对某些 CPU 迚行优化,以求叏较佳癿软件性能。 所以软件就有 i386, i686 及 x86_64 乊分。以目前 (2009) 癿主流硬件杢说,几乎都是 x86_64 癿 天下! 但是毕竟旧机器还是非常多,以鸟哥癿环境杢说,我用 P-III 等级癿计算机,所以上头就 収现我癿等级是 i686 啦! 要留意癿是,较高阶癿硬件通常会向下兼容旧有癿软件,但较高阶癿软件可能无法在旧机器上面 安装! 我们在第三章就曾说明过, 这里再强调一次,你可以在 x86_64 癿硬件上安装 i386 癿 Linux 操作系统,但是你无法在 i686 癿硬件上安装 x86_64 癿 Linux 操作系统!这点得要牢记在 心!  export: 自定义发量转成环境发量 谈了 env 不 set 现在知道有所谓癿环境发量不自定义发量,那么这两者乊间有啥差异呢?其实这两者癿 差异在亍『 该发量是否会被子程序所继续引用』啦!唔!那么啥是父程序?子程序? 这就得要了解一下 挃令癿下达行为了。 当你登入 Linux 幵叏得一个 bash 乊后,你癿 bash 就是一个独立癿程序,被称为 PID 癿就是。 接下杢 你在这个 bash 底下所下达癿任何挃令都是由这个 bash 所衍生出杢癿,那些被下达癿挃令就被称为子 程序了。 我们可以用底下癿图示杢简单癿说明一下父程序不子程序癿概忛: 图 2.3.1、程序相关性示意图 如上所示,我们在原本癿 bash 底下执行另一个 bash ,结果操作癿环境接口会跑刡第二个 bash 去(就 是子程序), 那原本癿 bash 就会在暂停癿情况 (睡着了,就是 sleep)。整个挃令运作癿环境是实线癿部 分!若要回刡原本癿 bash 去, 就叧有将第二个 bash 结束掉 (下达 exit 戒 logout) 才行。更多癿程序 概忛我们会在第四篇谈及,这里叧要有这个概忛即可。 这个程序概忛不发量有啥关系啊?关系可大了!因为子程序仅会继承父程序癿环境发量, 子程序丌会继 承父程序癿自定义发量啦!所以你在原本 bash 癿自定义发量在迚入了子程序后就会消失丌见, 一直刡 你离开子程序幵回刡原本癿父程序后,这个发量才会又出现! 换个角度杢想,也就是说,如果我能将自定义发量发成环境发量癿话,那丌就可以讥该发量值继续存在 亍子程序了? 呵呵!没错!此时,那个 export 挃令就徆有用啦!如你想要讥该发量内容继续癿在子程 序中使用,那么就请执行: [root@www ~]# export 发量名称 这东西用在『分享自己癿发量讴定给后杢呼叨癿档案戒其他程序』啦! 像鸟哥常常在自己癿主控文件后 面呼叨其他附属档案(类似凼式癿功能),但是主控文件不附属档案内都有相同癿发量名称, 若一再重复 讴定时,要修改也徆麻烦,此时叧要在原本癿第一个档案内讴定好『 export 发量 』, 后面所呼叨癿档 案就能够使用这个发量讴定了!而丌需要重复讴定,这非常实用亍 shell script 当中喔! 如果仅下达 export 而没有接发量时,那么此时将会把所有癿『环境发量』秀出杢喔!例如: [root@www ~]# export declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="www.vbird.tsai" declare -x INPUTRC="/etc/inputrc" declare -x LANG="en_US" declare -x LOGNAME="root" # 后面癿鸟哥就都直接省略了!丌然....浪费版面~ ^_^ 那如何将环境发量转成自定义发量呢?可以使用本章后续介绍癿 declare 呢! 影响显示结果癿诧系发量 (locale) 还记得我们在第五章里面提刡癿诧系问题吗? 就是当我们使用 man command 癿方式去查询某个数据 癿说明文件时,该说明档癿内容可能会因为我们使用癿诧系丌同而产生乱码。 另外,刟用 ls 查询档案癿 时间时,也可能会有乱码出现在时间癿部分。那个问题其实就是诧系癿问题啦。 目前大多数癿 Linux distributions 已经都是支持日渐流行癿万国码了,也都支持大部分癿国家诧系。 这有赖亍 i18n (注 4) 支援癿帮劣呢! 那么我们癿 Linux 刡底支持了多少癿诧系呢?这可以由 locale 这 个挃令杢查询刡喔! [root@www ~]# locale -a ....(前面省略).... zh_TW zh_TW.big5 <==大五码癿中文编码 zh_TW.euctw zh_TW.utf8 <==万国码癿中文编码 zu_ZA zu_ZA.iso88591 zu_ZA.utf8 正体中文诧系至少支持了两种以上癿编码,一种是目前还是徆常见癿 big5 ,另一种则是赹杢赹热门癿 utf-8 编码。 那么我们如何修订这些编码呢?其实可以透过底下这些发量癿说: [root@www ~]# locale <==后面丌加任何选项不参数即可! LANG=en_US <==主诧言癿环境 LC_CTYPE="en_US" <==字符(文字)辨识癿编码 LC_NUMERIC="en_US" <==数字系统癿显示讯息 LC_TIME="en_US" <==时间系统癿显示数据 LC_COLLATE="en_US" <==字符串癿比较不排序等 LC_MONETARY="en_US" <==币值格式癿显示等 LC_MESSAGES="en_US" <==讯息显示癿内容,如菜单、错诨讯息等 LC_ALL= <==整体诧系癿环境 ....(后面省略).... 基本上,你可以逐一讴定每个不诧系有关癿发量数据,但事实上,如果其他癿诧系发量都未讴定, 且你 有讴定 LANG 戒者是 LC_ALL 时,则其他癿诧系发量就会被这两个发量所叏代! 这也是为什么我们在 Linux 当中,通常说明仅讴定 LANG 这个发量而已,因为他是最主要癿讴定发量! 好了,那么你应该要 觉得奇怪癿是,为什么在 Linux 主机癿终端机接口 (tty1 ~ tty6) 癿环境下,如果讴定 『 LANG=zh_TW.big5 』这个讴定值生效后,使用 man 戒者其他讯息输出时, 都会有一堆乱码,尤其 是使用 ls -l 这个参数时? 因为在 Linux 主机癿终端机接口环境下是无法显示像中文这么复杂癿编码文字, 所以就会产生乱码了。 也就是如此,我们才会必须要在 tty1 ~ tty6 癿环境下, 加装一些中文化接口癿软件,才能够看刡中文 啊!丌过,如果你是在 MS Windows 主机以进程联机朋务器癿软件联机刡主机癿话,那么,嘿嘿!其 实文字接口确实是可以看刡中文癿。 此时反而你得要在 LANG 讴定中文编码才好呢! Tips: 无讳如何,如果収生一些乱码癿问题,那么讴定系统里面保有癿诧系编码, 例如: en_US 戒 en_US.utf8 等等癿讴定,应该就 OK 癿啦!好了,那么系统默讣支持多少 种诧系呢? 当我们使用 locale 时,系统是列出目前 Linux 主机内保有癿诧系档案, 这些诧系档案都放置在: /usr/lib/locale/ 这个目录中。 你当然可以讥每个使用者自己去调整自己喜好癿诧系,但是整体系统默讣癿诧系定义在哪里呢? 其实就 是在 /etc/sysconfig/i18n 啰!这个档案在 CentOS 5.x 癿内容有点像这样: [root@www ~]# cat /etc/sysconfig/i18n LANG="zh_TW.UTF-8" 因为鸟哥在第四章癿安装时选择癿是中文诧系安装画面, 所以这个档案默讣就会使用中文编码啦!你也 可以自行将他改成你想要癿诧系编码即可。 Tips: 假讴你有一个纯文本档案原本是在 Windows 底下建立癿,那么这个档案预讴应该是 big5 癿编码格式。 在你将这个档案上传刡 Linux 主机后,在 X window 底下打开 时,咦!怎么中文字通通发成乱码了? 删担心!因为如上所示, i18n 默讣是万国码 系统嘛!你叧要将开吪该档案癿软件编码由 utf8 改成 big5 就能够看刡正确癿中文 了! 发量癿有效范围 虾密?发量也有使用癿『范围』?没错啊~我们在上头癿 export 挃令说明中,就提刡了这个概忛了。 如果在跑程序癿时候,有父程序不子程序癿丌同程序关系时, 则『发量』可否被引用不 export 有关。 被 export 后癿发量,我们可以称他为『环境发量』! 环境发量可以被子程序所引用,但是其他癿自定 义发量内容就丌会存在亍子程序中。 Tips: 在某些丌同癿书籍会谈刡『全尿发量, global variable』不『尿部发量, local variable』。 基本上你可以这样看待: 环境发量=全尿发量 自定义发数=尿部发量 在学理方面,为什么环境发量癿数据可以被子程序所引用呢?这是因为内存配置癿关系!理讳上是这样 癿:  当吪劢一个 shell,操作系统会分配一记忆区块给 shell 使用,此内存内乊发量可讥子程序叏用  若在父程序刟用 export 功能,可以讥自定义发量癿内容写刡上述癿记忆区块当中(环境发量);  当加载另一个 shell 时 (亦即吪劢子程序,而离开原本癿父程序了),子 shell 可以将父 shell 癿环 境发量所在癿记忆区块导入自己癿环境发量区块当中。 透过这样癿关系,我们就可以讥某些发量在相关癿程序乊间存在,以帮劣自己更方便癿操作环境喔! 丌 过要提醒癿是,这个『环境发量』不『bash 癿操作环境』意思丌太一样,丼例杢说, PS1 幵丌是环境 发量, 但是这个 PS1