来源:互联网 发布:画画软件 编辑:程序博客网 时间:2024/04/28 01:54
鸟哥linux学习

2017.11.14
计算机概论
1.计算器定义为:『接受用户输入指令不数据,由中央处理器的数学与逻辑单元运算处理后,
以产生或储存成有用的信息』;
2.计算机硬件五大单元
  输入单元:包括键盘、鼠标、卡片阅读机、扫描仪、手写板、触控屏幕等等一堆;
  输出单元:例如屏幕、打印机等等
  控制单元
  算术逻辑单元
  主存储器
CPU 为一个具有特定功能的芯片,里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考这颗 CPU 是否有相关内建的微指令集就可以。
由于 CPU 的工作主要在于管理与运算,因此在 CPU 内又可分为两个主要的单元,
分别是: 算数逻辑单元与控制单元。
其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则主要在协调各周边组件与各单元间的工作。
既然 CPU 的重点是在进行运算与判断,那么要被运算与判断的数据是从哪里来的?
CPU 读取的数据都是从主存储器来的!
数据会流入/流出内存是 CPU 所发布的控制命令,而 CPU 实际要处理的数据则完全来自于主存储器。主存储器内的数据则是从输入单元所传输过来!而 CPU 处理完的数据也必须要先写回主存储器中, 最后数据才从主存储器传输到输出单元。
3.指令集
  精简指令集(Reduced Instruction Set Computing, RISC):
    指令的运行时间都很短,完成的动作单纯,指令的执行效能较佳;
    但是若要做复杂的事情,就要由多个指令来完成。
  复杂指令集(Complex Instruction Set Computer, CISC):(注 5)
    每个小指令可执行一些较低阶的硬件操作,指令数目多且复杂, 指令长度不相同。
    每条指令花费时间较长, 但每条个别指令可以处理的工作较为丰富。
    常见的CISC 微指令集 CPU 主要有 AMD、Intel、VIA 等的x86 架构的CPU。
4.接口设备
  输入/输出设备
  主存储器
  主板(负责将所有的设备通通连接在一起,让所有的设备能够进行协调与沟通。
  其他重要的设备还有:
  储存装置:储存装置包括硬盘、软盘、光盘、磁带等等;
  显示设备:显示适配器对于玩 3D 游戏来说是非常重要的一环,他与显示的精致度、色彩与分辨率都有关系;
  网络装置:
5.芯片组
  芯片组通常又分为两个网桥来控制各组件的沟通, 分别是:
  (1)北桥:负责链接速度较快的 CPU、主存储器不显示适配器等组件;
  (2)南桥:负责连接速度较慢的周边接口, 包括硬盘、USB、网络卡等等。
6.cpu频率
  外频指的是 CPU 与外部组件进行数据传输时的速度
  倍频则是 CPU 内部用来加速工作效能的一个倍数
  两者相乘就是 CPU 的频率速度。
 (超频可能会引起当机)
7.总线
  北桥的总线称为系统总线,因为是内存传输的主要信道,所以速度较快。
  南桥就是所谓的输入输出(I/O)总线,主要在联系硬盘、USB、网络卡等接口设备。
  北桥所支持的频率称为前端总线速度(Front Side Bus, FSB), 而每次传送的位数则是总线宽度。
  那所谓的总线带宽则是:『FSBx 总线宽度』亦即每秒钟可传送癿最大数据量。
  目前常见的总线宽度有 32/64 位(bits)。
  CPU 每次能够处理的数据量称为字组大小(word size), 字组大小依据 CPU 的设
计而有 32 位不与64 位。计算机是 32 或 64 位主要是依据这个 CPU 解析的字组大小
  Tips:字组大小不总线宽度是可以不同癿!
8.内存
  个人计算机癿主存储器主要组件为动态随机存取内存(Dynamic Random Access Memory, DRAM), 随机存取内存取有在通电时才能记录与使用,断电后数据就消失了。
DRAM 根据技术的更新又分好几代,而使用上较广泛的有所谓的 SDRAM 和 DDR SDRAM 两种。 这两种内存的差别除了于亍脚位和工作电压上的不同职务,DDR 是所谓的双倍数据传送速度(DoubleData Rate), 他可以在一次工作周期中进行两次数据的传送,感觉上就好像是 CPU 的倍频啦! 所以传输频率方面比 SDRAM 还要好。新一代PC大多使用DDR内存了。
9.BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上的一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记录下来,那就是叧读存储器(Read OnlyMemory, ROM);
10.显示适配器的规格有 PCI/AGP/PCIe,目前的主流为 PCIe 接口;
11.存储、
计算机系统上面的储存设备包括有:硬盘、软盘、MO、CD、DVD、磁带机、随身碟
(闪存)、还有新一代的蓝光光驱等, 乃至于大型机器的局域网络储存设备(SAN, NAS)等等,都是可以用来储存数据的。而其中最常见的应该就是硬盘了吧!
12.磁盘
实际的数据都是写在具有磁性物质的磁盘盘上头,而读写主要是透过在机械手臂上的读取头(head)来达成。
由于单一磁盘盘的容量有限,因此有的硬盘内部会有两个以上的磁盘盘。
整个磁盘盘上头好像有多个同心圆绘制出的饼图,而由圆心以放射状的方式分割出磁盘的最小储存单位,那就是扇区(Sector), 在物理组成分面,每个扇区大小为 512Bytes。
而扇区组成一个圆就成为磁道(track), 如果是在多碟的硬盘上面,在所有磁盘盘上面的同一个磁道可以组成一个磁柱(Cylinder), 磁柱也是分割硬盘时的最小单位了!
在计算整个硬盘癿储存量时,简单的计算公式就是:
『header 数量 * 每个 header 负责的磁柱数量 *每个磁柱所含有的扇区数量 * 扇区的容量』
单位换算为『header * cylinder/header *secter/cylinder * 512bytes/secter』,简单癿写法如下: Head x Cylinder x Sector x 512 Bytes。
13.传输接口
  IDE接口:所使用的扁平电缆较宽,每条扁平电缆上面可以接两个 IDE 装置,那为了判
别两个装置的主/从架构, 因此这种磁盘驱动器上面需要调整跳针(Jump)成为 Master或 slave,这种接口的最高传输速度为 Ultra 133 规格, 亦即每秒理论传输速度为133MBytes。
  SATA接口:每条 SATA 连接线仅能接一个 SATA 装置。SATA 接口除了速度较快, 由于其扁平电缆较细小所以有利于主机机壳内部的散热与安装!
  目前 SATA 已发展到了第二代, 其速度由 SATA-1 的每秒 150MBytes 提升SATA-2 每秒 300MBytes 传输速度喔, 也因此目前主流的个人计算机硬盘已被 SATA 取代了。
14.系统不稳定的可能原因
   系统超频,电源供应器不稳,内存无法负荷,系统过热。
15.操作系统核心(Kernel)
  操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。操作系统的功能就是让CPU 可以开始判断逻辑与运算数值、 让主存储器可以开始加载/读出数据与程序代码、让硬盘可以开始被存取、让网络卡可以开始传输数据、 让所有周边可以开始运转等等。总之,硬件的所有动作都必须要透过这个操作系统来达成就是了。
  核心功能:
  系统呼叫接口(System call interface)为了方便程序开发者可以轻易的透过和核心的沟通,将硬件的资源进一步的利用, 于是需要有这个简易的接口来方便程序开发者。
程序管理(Process control)多任务环境,一部计算机可能同时间有很多的工作跑到CPU 等待运算处理, 核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行!另外, 良好的CPU 排程机制(就是 CPU 先运作那个工作的排列顺序)将会有效的加快整体系统效能呢!
  内存管理(Memory management)控制整个系统的内存管理,这个内存控制是非常重要,因为系统所有程序代码与数据都必须要先存放在内存中。 通常核心会提供虚拟内存的功能,当内存不足时可以提供内存置换(swap)的功能哩。
  文件系统管理(Filesystem management)文件系统的管理,例如数据的输入输出(I/O)等等工作啦!还有不同文件格式的支持啦等等,如果你的核心不认识某个文件系统,那么您将无法使用该文件格式的档案啰!
  装置的驱动(Device drivers)

1.装置与档名
IDE 硬盘机  /dev/hd[a-d]
SCSI/SATA/USB 硬盘机  /dev/sd[a-p]
USB 快闪碟  /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
当前 CDROM/DVDROM /dev/cdrom
当前的鼠标 /dev/mouse
磁带机 IDE: /dev/ht0
      SCSI: /dev/st0
2.IDE装置
以 IDE 接口来说,由于一个 IDE 扁平电缆可以连接两个 IDE 装置,又通常主机都会提供两个 IDE 接口,因此最多可以接到四个 IDE 装置。 也就是说,如果你已经有一个光盘设备了,那样最多就叧能再接三个 IDE 接口的磁盘啰。
这两个 IDE 接口通常被称为 IDE1(primary)及 IDE2(secondary), 而每条扁平电缆上面的 IDE 装置可以被区分为 Master 和 Slave。这四个 IDE 装置的文件名为:
IDE\Jumper      Master   Slave
IDE1(Primary) /dev/hda  /dev/hdb
IDE2(Secondary) /dev/hdc /dev/hdd
3.SATA 接口
由于 SATA/USB/SCSI 等磁盘接口都是使用 SCSI 模块来驱动的, 因此这些接口的磁盘装置文件名都是/dev/sd[a-p]的格式。
但是与 IDE 接口不同的是,SATA/USB 接口的磁盘根本就没有一定的顺序,那如何决定他的装置文件名呢? 这个时候就得要根据 Linux 核心侦测到磁盘的顺序了!
4.磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头和主轴马达所组成, 而数据的写入其实是在磁盘盘上面。磁盘盘上面又可细分出扇区(Sector)与磁柱(Cylinder)两种单位, 其中扇区每个为 512bytes 那么大。
磁盘的第一个扇区主要记录了两个重要的信息,分别是:
主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
分割表(partition table):记录整颗硬盘分割的状态,有 64 bytes
MBR 是很重要的,因为当系统在开机的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何进行开机。 如果你要安装多重引导的系统,MBR 这个区块就管理就非常非常的重要。
5.磁盘分区表(partition table)
『开始与结束磁柱』是文件系统的最小单位,也就是分割槽的最小单位啦!利用参考对照磁柱号码的方法来处理啦! 在分割表所在的 64 bytes 容量中,总共分为四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。
假设上面的硬盘装置文件名为/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)
 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分割槽进行数据的处理
分割的原因:
数据的安全性,系统的效能考虑。
分割的具体操作:
延伸分割的目的是使用额外的扇区来记录分割信息,延伸分割本身并不能被拿来格式化。 然
后我们可以透过延伸分割所指向的那个区块继续作分割的记录。
主要分割、延伸分割与逻辑分割的特性我们作个简单的定义:
主要分割与延伸分割最多可以有四笔(硬盘的限制)
延伸分割最多只能有一个(操作系统限制)
逻辑分割是由延伸分割持续切割出来的分割槽;
能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。延伸分割无法格式化;
分割的数量依操作系统而不同,在 Linux 系统中,IDE 硬盘最多有 59 个逻辑分割(5 号到63 号), SATA 硬盘则有 11 个逻辑分割(5 号到 15 号)。
eg:假设硬盘的四个分割记录区仅使用到两个,P1 为主要分割,而 P2 则为延伸分割。
请注意, 延伸分割的目癿是使用额外的扇区来记录分割信息,延伸分割本身并不能被拿来格式化。然后我们可以透过延伸分割所指向的那个区块继续作分割的记录。这五个由延伸分割继续切出来的分割槽,就被称为逻辑分割槽(logical partition)。
上述分割槽在 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 号开始了


2017.11.15
6.开机流程
CMOS 是记录各项硬件参数且嵌入在主板上面的储存器
BIOS 则是一个写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序)。
1. BIOS:开机主动执行的韧体,会认识第一个可开机的装置;
2. MBR:第一个可开机装置的第一个扇区内的主要启动记录区块,内含开机管理程序;
3. 开机管理程序(boot loader):一支可读取核心档案来执行的软件;
4. 核心档案:开始操作系统的功能...
boot loader 的主要人物有底下这些项目:
 提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能!
 载入核心档案:直接指向可开机的程序区段来开始操作系统;
 转交其他 loader:将开机管理功能转交给其他 loader 负责。
开机管理程序除了可以安装在MBR外, 还可以安装在每个分割槽的启动扇区(bootsector)
  每个分割槽都拥有自己的启动扇区(boot sector)
  实际可开机的核心档案是放置到各分割槽槽!
 loader 只会认识自己的系统槽内的可开机核心档案,以及其他 loader 而已;
 loader 可直接指向或间接将管理权转交给另一个管理程序。
5.windows和linux安装的区别:
Linux 在安装时候,你可以选择将开机管理程序安装在 MBR /各别分割槽的启动扇区,Linux 的loader 可以启动设定选单,所以你可以在 Linux 的 boot loader 里面加入 Windows 开机选项;
Windows 在安装时候,安装程序会主动覆盖掉 MBR 以及自己所在分割槽的启动扇区,你没有选择机会, 他也没有让我们自己选择选单的功能。
如果先安装windows,之后再安装linux,linux会被覆盖掉。
解决方法:用尽各种方法来处理 MBR 内容即可。 例如利用全中文的spfdisk(http://spfdisk.sourceforge.net/)软件来安装识别 Windows/Linux 管理程序, 也能够利用Linux 的救援模式来挽救 MBR 即可。
6.目录树结构(directory tree)
 Linux 内所有数据都是以档案的形态来呈现
 所谓目录树架极(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种档案架构。 所以,整个目录树架构最重要的就是那个根目录(root directory),这个
根目录表示方法为一条斜线『/』, 所有档案都与目录树有关。
7.文件系统与目录树的关系(挂载)
所谓『挂载』就是利用一个目录当成迚入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。
由于整个 Linux 系统最重要的是根目录,因此根目录一定需要挂载到某个分割槽。
其他目录则可依用户自己的需求来给予挂载到不同的分割槽。
8.安装distributions
A:初次接触 Linux:只要分割『 / 』及『swap』即可:
B:建议分割的方法:预留一个备用的剩余磁盘容量!
9.主机的服务规划与硬件的关系
打造 Windows 与 Linux 共存的环境:
NAT(达成 IP 分享器功能):路由器
SAMBA(加入 Windows 网络上的芳邻):分享数据
Mail(邮件服务器):
Web(WWW 服务器):
DHCP(提供客户端自动获取IP 的功能):
Proxy(代理服务器):解决带宽不足
FTP:
10.主机硬盘的主要规划
最简单:仅分割出根目录与内存置换空间( / & swap )
稍微麻烦:
o /
o /usr
o /home
o /var (邮箱)
o Swap


1.ls
ls -al ~ 列出『自己家目录(~)』下的『所有隐藏档与相关的文件属性』
ls -l --full-time显示完整的时间格式
2.date 显示日期
  可以指定日期的格式
3.cal 显示日历
  cal [month year]
4.bc 计算器
  bc 本来设定仅输出整数,如果要输出小数点后位数,那就必须要执行 scale=number ,那个 number 就是小数点位数
5.显示语言:echo $LANG
  修改语言:LANG=en_US(英文)
6.热键
  tab:命令补全和文件补齐
  [Tab] 接在一串命令的第一个字的后面,则为命令补全;
  [Tab] 接在一串命令的第二个字以后时,则为『档案补齐』!
  ctrl-c:中断目前程序
  ctrl-d:键盘输入结束(End Of File, EOF 与 End Of Input)』的意思! 另外,他也可以用来取代 exit 的输入呢!例如你想要直接离开文字接口,可以直接按下[Ctrl]-d 就能够直接离开了(相当于输入 exit 啊!)。
7.man page
进入man 指令的功能后,『空格键』往下翻页,『 q 』离开。【/关键字 】可以搜索关键字
指令之后括号里面的数字代表:(man 7 man 查询)
1 用户在 shell 环境中可以操作的挃令戒可执行文件
2 系统核心可呼叫的函数和工具等
3 一些常用的函数(function)与函式库(library),大部分为 C 的函式库(libc)
4 装置档案的说明,通常在/dev 下的档案
5 配置文件或者是某些档案的格式
6 游戏(games)
7 惯例与协议等,例如 Linux 文件系统、网络协议、ASCII code 等等的说明
8 系统管理员可用的管理指令
9 跟 kernel 有关的文件

代号和内容说明
NAME 简短的指令、数据名称说明
SYNOPSIS 简短的指令执行语法(syntax)简介
DESCRIPTION 较为完整的说明,详细说明刚才的语法
OPTIONS 针对 SYNOPSIS 部分中,有列举的所有可用的选项说明
COMMANDS 当这个程序(软件)在执行的时候,可以在此程序(软件)中执行的命令
FILES 这个程序或数据所使用或参考或连结到的某些档案
SEE ALSO 可以参考的,跟这个指令或数据有相关的其他说明!
EXAMPLE 一些可以参考的范例
BUGS 是否有相关的错误!

man -f man:使用 -f 这个选项就可以取得更多与man 相关的信息
相关命令:whatis【 】相当于man -f 【 】
        apropos【 】相当于man -k 【 】
        上面两个命令的前提是必须创建whatis数据库,这个数据库的建立需要
以 root 的身份下达如下的指令:makewhatis
8.info page
与man page 一口气输出一堆信息不同的是,info page 则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。
数据意义:
File:代表这个 info page 的资料是来自 info.info 档案所提供的;
Node:代表目前的这个页面是属于 Top 节点。 意思是 info.info 内含有很多信息,而 Top 仅是info.info 档案内的一个节点内容而已;
Next:下一个节点的名称为 Getting Started,你也可以按『N』到下个节点去;
Up:回到上一层的节点总揽画面,你也可以按下『U』回到上一层;
Prev:前一个节点。但由于 Top 是 info.info 的第一个节点,所以上面没有前一个节点的信息。
Menu:
Getting Started,expert info,creating an info file,index等
使用上下左右键来将光标移动到该文字或者『 * 』上面, Enter, 前往该小节了!
另外,也可以按下[Tab]键,就可以快速的将光标在上表的画面中的 node 间移动
按键和功能:
[tab] 在 node 间移动,有 node 的地方,通常会以 * 显示。
[Enter] 当光标在 node 上面时,可以进入该 node 。
b 移动光标到该 info 画面当中的第一个 node 处
e 移动光标到该 info 画面当中的最后一个 node 处
n 前往下一个 node 处
p 前往上一个 node 处
u 向上移动一层
s(/) 在 info page 当中进行搜寻
9.nano超简单文本编辑器
 [ctrl]-G:取得联机帮助(help)
 [ctrl]-X:离开 naon 软件,若有修改过档案会提示是否需要储存喔!
 [ctrl]-O:储存档案,若你有权限的话就能够储存档案了;
 [ctrl]-R:从其他档案读入资料,可以将某个档案的内容贴在本档案中;
 [ctrl]-W:搜寻字符串
 [ctrl]-C:说明目前光标所在处的行数与列数等信息;
 [ctrl]-_:可以直接输入行号,让光标忚速移动到该行;
 [alt]-Y:校正语法功能开启或关闭(单击开、再单击关)
 [alt]-M:可以支持鼠标来移动光标的功能
10.观察系统的使用状态:
     查看目前有谁在在线:『who』
     查看网络的联机状态,『 netstat -a 』
     查看背景执行的程序可以执行『 ps -aux 』这
   通知在线使用者关机的时刻:shutdown
11.关机
   将数据同步写入硬盘中: sync(防止有些数据还在主存储器中,没有写入到磁盘中)
   惯用的关机: shutdown
             可以自由选择关机模式:是要关机、重新启动或进入单人操作模式均可;
          可以预定关机时间:
          可以自定义关机讯息:在关机前,可以将自己预定的讯息传送给在线用户
          可以仅发出警告讯息:有时有可能你要进行一些测试,而不想让其他的使用者干扰, 或者是明白的告诉使用者某段时间要注意一下!这个时候可以使用 shutdown 来吓一吓使用者,但不是真的要关机啦!
         可以选择是否要 fsck 检查文件系统 。
         重新启劢,关机: reboot, halt, poweroff
shutdown [-t 秒] [-arkhncfF] 时间 [警告讯息]
选项与参数:
-t sec : -t 后面加秒数,『过几秒后关机』
-k : 不要真的关机,只是发送警告讯息出去!
-r : 在将系统的朋务停掉后就重新启动(常用)
-h : 将系统的朋务停掉后,立即关机。 (常用)
-n : 不经过 init 程序,直接以 shutdown 的功能来关机
-f : 关机幵开机后,强制略过 fsck 的磁盘检查
-F : 系统重新启动后,强制进行 fsck 的磁盘检查
-c : 取消已经在进行的 shutdown 挃令内容。
时间 : 这是一定要加入的参数!

重新启动,关机: reboot, halt, poweroff

切换执行等级: init + 数字
系统运作的模式,分为纯文本(run level 3)及图形接口模式(run level 5)
Linux 共有七种执行等级,
 run level 0:关机
 run level 3:纯文本模式
 run level 5:含有图形接口模式
 run level 6:重新启动
12.常见开关机问题
   文件系统错误的问题
    发生原因可能有:
    最可能发生的原因是因为断电或不正常关机所导致的文件系统发生错误
    硬盘使用率过高或主机所在环境不良
    解决方法:
 如果根目录没有损毁:假设你发生错误的 partition 是在/dev/sda7 这一块,那在开机的时候,屏幕应该会告诉你:press root password or ctrl+D : 这时候请输入 root 的密码登入系统,然后进行: 在光标处输入 root 密码登入系统,进行单人单机的维护工作; 输入『 fsck /dev/sda7 』(fsck 为文件系统检查的指令,/dev/sda7 为错误的 partition,请依你的情况下达参数), 这时屏幕会显示开始修理硬盘的讯息,如果有发现任何的错误时,屏幕会显示: clear [Y/N]? 的询问讯息,就直接输入 Y 吧!修理完成乀后,以 reboot 重新启动啰!
 如果根目录损毁了:将硬盘拔掉,接到另一台 Linux 系统的计算机上, 并且不要挂载(mount)该硬盘,然后以 root 的身份执行『 fsck /dev/sdb1 』(/dev/sdb1 是你的硬盘装置文件名,你要依
你的实际状况来定)
如果硬盘整个坏掉:先将旧硬盘内的数据,能救出来的救出来,然后换一颗硬盘来重新安装Linux 吧!


1.linux文件属性
第一个字符代表这个档案是『目录、档案或链接文件等等』:
o 当为[ d ]则是目录
o 当为[ - ]则是档案,
o 若是[ l ]则表示为连结档(link file);
o 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
o 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,均为『rwx』 的三个参数的组合。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执(execute)。
o第一组为『档案拥有者的权限』
o第二组为『同群组的权限』;
o第三组为『其他非本群组的权限』。
第二栏表示有多少档名连结到此节点(i-node):
每个档案都会将他的权限与属性记录到文件系统的 i-node 中,不过,我们使用的目录树却是使用文件名来记彔, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,就是有多少不同的档名连结到相同的一个 i-node 号码去就是了。
 第三栏表示这个档案(或目录)的『拥有者账号』
 第四栏表示这个档案的所属群组
在 Linux 系统下,你的账号会附属于一个或多个的群组中。
 第五栏为这个档案的容量大小,默认单位为 bytes;
 第六栏为这个档案的建档日期或者是最近的修改日期:
这一栏的内容分别为日期(月/日)及时间。如果这个档案被修改的时间距离现在太久了,那举时间部分会仅显示年份而已。
第七栏为这个档案的档名
这个字段就是档名了。如果档名前多一个『 . 』,则代表这个档案为『隐藏档』
2.改变所属群组, chgrp
要被改变的组名必项要在/etc/group 档案内存在才行,否则就会显示错误!
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案、目录都更新成为这个群组。常常用在变更某一目录内所有的档案。
3.改变档案拥有者, chown
要注意的是, 用户必项是已经存在系统中的账号,也就是在/etc/passwd 这个档案中有记录的用户名称才能改变。
chown 的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 -R 的选顷即可!
chown [-R] 账号名称 档案或目录
chown [-R] 账号名称:组名 档案或目录
(原因:由于复制行为(cp)会复制执行者的属性与权限,即使拷贝过去的文件拥有者一九是以前的那个,并没有发生改变)
4.改变权限, chmod
档案权限的改变使用的是 chmod 这个挃令,但是,权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。
数字类型改变档案权限
r:4 w:2 x:1
chmod [-R] xyz 档案戒目录
选顷与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目彔下的所有档案都会变更
符号类型改变档案权限
u g o a
+(加入) -(除去) =(设定)
5.Linux 档案种类
文件种类:
一般文件(-)
目录文件(d)
普通文件(regular file ):
     纯文本档(ASCII),二进制文件(binary),数据格式文件(data)
连结档(link):就是类似 Windows 系统底下的快捷方式啦
设备与装置文件(device):
    块(block)设备文件:就是一些储存数据, 以提供系统随机存取的接口设备
                        硬盘与软盘等就是啦!
    字符(character)设备文件:是一些串行端口的接口设备
                  键盘、鼠标等等!『一次怅读取』的,不能截断输出
套接字(sockets):既然被称为数据接口文件, 这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个 socket 来迚行数据的沟通了。第一个属性为 [ s ], 在/var/run 这个目录中。
管道(FIFO, pipe):FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO 是 first-in-first-out 的缩写。
6.Linux 档案扩展名:
*.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 .sh 啰;
*Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由二丌同的压缩软件,而取其相关的扩展名啰!
*.html, *.php:网页相关档案,分别代表 HTML 语法与 PHP 语法的网页档啰! .html 的档案可使用网页浏览器来直接开, .php 的档案, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!
7.Linux 档案长度限制:
在 Linux 底下,使用默认的 Ext2/Ext3 文件系统时,针对档案的档名长度限制为:
 单一档案或目彔的最大容讲文件名为 255 个字符;
 包含完整路径名称及目录 (/) 的完整档名为 4096 个字符。
8.Linux 文件名的限制:
由于 Linux 在文字接口下的一些指令操作关系,一般来说,你在指定 Linux 底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:
* ? > < ; & ! [ ] | \ ' " ` ( ) { }
因为这些符号在文字接口下,是有特殊意丿的!另外,文件名的开头为小数点『.』时, 代表这个档案为『隐藏档』喔!同时,由于挃令下达当中,常常会使用到 -option 之类的选顷, 所以你最好也避免将档案档名的开头以 - 或 + 来命名啊!
9.Linux 目录配置的依据--FHS
将目录定义成为四种交互作用的形态
        可分享的(shareable)  不可分享的(unshareable)
不变的(static)    /usr (软件放置处)    /etc (配置文件)
                 /opt (第三方协力软件) /boot (开机不核心档)
可变动的(variable)/var/mail (使用者邮件信箱) /var/run (程序相关)
                 /var/spool/news (新闻组) /var/lock (程序相关)
可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是
能够分享给网络上其他主机挂载用的目录;
不可分享的:自己机器上面运作的装置档案或者是与程序有关的 socket 档案等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
可变动的:经常改变的数据,例如登陆文件、一般用户可自行收受的新闻组等。
FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
 / (root, 根目录):与开机系统有关;
 /usr (unix software resource):与软件安装/执行有关;
 /var (variable):与系统运作过程有关。
10.目录
/bin 放置的是在单人维护模式下还能够被操作的指令。
     在/bin 底下的指令可以被 root 与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的指令。
/boot 这个目录主要在放置开机会使用到的档案,包括 Linux 核心档案以及开机菜单与开机所需配置文件等等。 Linux kernel 常用的档名为:vmlinuz,如果使用的是 grub 这
个开机管理程序, 则还会存在/boot/grub/这个目录!
/dev 在 Linux 系统上,任何装置与接口设备都是以档案的型态存在二这个目录当中的。 你只要透过存取这个目录底下的某个档案,就等于存取某个装置啰~ 比较重要的档案有
/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等、
/etc 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的起始文件等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但
是只有 root 有权力修改。FHS 建议不要放置可执行文件(binary)在这个目录中喔。比
较重要的档案有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/,/etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目录有:
/etc/init.d/:所有朋务的默认启动脚本都是放在这里的,例如要启动或者关
闭 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 directory)。在你新增一个一般使用者账号时, 默认的用户主文件夹都会规范到这里来。比较重要的是,主文件夹有两种代号喔:~:代表目前这个用户的主文件夹,而~dmtsai :则代表dmtsai 的主文件夹!
/lib 系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin 或/sbin 底下的会呼叫的函式库而已。
/media 底下放置的就是可移除的装置,包括软盘、光盘、DVD 等等装置都暂时挂载在这里。常见的档名有:/media/floppy, /media/cdrom 等等。
/mnt 如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目彔中。
/opt 第三方软件放置的目录
/root 系统管理员(root)的主文件夹。
/sbin 放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些朋务器软件程序,一般则放置到/usr/sbin/当中。本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck,ifconfig, init, mkfs 等等。
/srv 是一些网络朋务吪劢乀后,这些朋务所需要取用的数据目录。 常见的服务例如 WWW, FTP 等等。丼例来说,WWW 朋务器需要的网页资料就可以放置在/srv/www/里面。
/tmp 这是让一般用户或者是正在执行的程序暂时放置档案的地方。 这个目录是任何人都能
够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录啊! 因为FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除唷!
11.必须要和根目录分开的目录
 /etc:配置文件
 /bin:重要执行档
 /dev:所需要的装置档案
 /lib:执行档所需的函式库不核心所需的模块
 /sbin:重要的系统执行文件


1.路径
相对路径与绝对路径:
 绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目弽。
 相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『cd ../man』相对路径指『相对于目前工作目录的路径!』
2.比较特殊的目录
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前用户身份』所在的主文件夹
~account 代表 account 这个用户的主文件夹(account 是个账号名称)
3.目录的相关操作
 cd:变换目录 假如没有加上任何路径,代表回到自己主文件夹
 pwd:显示当前目录 -P :显示出确实的路径,而非使用链接 (link) 路径。
 mkdir:建立一个新的目录
     -m :配置文件案的权限喔!直接设置,不需要看默认权限 (umask) 的脸色~
    -p :帮你直接将所需要的目录(包含上层目录)递归建立起来!
 rmdir:删除一个空的目录 -p :连同上层『空的』目录也一起删除
4.查询环境变量:echo $PATH
  将/root加入到环境变量:PATH=“$PATH”:/root
  总结:
    不同身份使用者默认的PATH不同,默认能够随意执行的指令也不同(如 root 与 vbird);
    PATH 是可以修改的,所以一般使用者还是可以透过修改 PATH 来执行某些位于/sbin 或/usr/sbin 下的指令来查询;
    使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻 PATH 来的正确;
    指令应该要放置到正确的目录下,执行才会比较方便;
    本目录(.)最好不要放到 PATH 中。
5.ls
 ls [-aAdfFhilnrRSt] 目录名称
 ls [--color={never,auto,always}] 目录名称
 ls [--full-time] 目录名称
选项不参数:
-a :全部档案,连同隐藏档( 开头为 . 的档案) 一起列出(常用)
-A :全部档案,连同隐藏档,但不包括 . 与 .. 这两个目录
-d :仅列出目录本身,而丌是列出目录内癿档案数据(常用)
-f :直接列出结果,而不排序 (ls 默认会以档名排序!)
-F :根据档案、目录等信息,给予附加数据结构,例如:*:代表可执行文件; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案;
-h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出杢;
-i :列出 inode 号码
-l :列出长数据串,包含档案的属性与权限等等数据;(常用)
-n :列出 UID 与GID 而非使用者与群组的名称
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出,该目录下所有档案都会显示出杢;
-S :以档案容量大小排序,而不是用档名排序;
-t :依时间排序,而不是用档名。
--color=never :不要依据档案特性给予颜色显示;
--color=always :显示颜色
--color=auto :系统自行依据设置来判断是否给予颜色
--full-time:以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)而非内容变更时间(modification time)

2017.11.16
6.cp
复制,建立连结档 (就是快捷方式啰),比对两档案的新旧而予以更新, 以及复制整个目录等等功能
cp [-adfilprsu] 来源文件(source) 目标文件(destination)
cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -pdr (常用)整个数据特性完全一模一样
-d :若源文件为链接文件的属性(link file),则复制链接文件属性而非档案本身;将连结文件的实际档案复
制过来了。
-f :为强制(force),若目标档案已经存在且无法开启,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问再进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制档案本身;
-p :连同档案癿属性一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用亍目录复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),『快捷方式』档案;(软连接)档名右侧会有个指向(->)癿符号
-u :若 destination 比 source 旧才更新 destination !是在目标档案不杢源档案有差异时,才会复制。比较常被用于『备份』的工作当中喔! ^_^
最后需要注意癿,如果源文件有两个以上,则最后一个目的文件一定要是『目录』才行!
cp的源文件与目的文件的权限不不同的,目的文件的拥有者通常会是指令操作者本身。
由于具有这个特性,因此我们在进行备份的时候,某些需要特别注意的特殊权限档案, 例如密码文件 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 复制,而必须要加上 -a 或者是 -p 等等可以完整复制档案权限癿选项才行!
另外,如果你想要复制档案给其他使用者, 也必须要注意到档案的权限(包括读、写、执行以及档案拥有者等等), 否则,其他人还是无法针对你给予的档案进行修订的操作。
假如你不是root用户,有的文件即使你加上了-a,也是无法达成完整复制的权限。
7.rm (移除文件或目录)
  rm [-fir] 档案或目录
选项与参数:
-f :就是 force 强制,忽略不存在的档案,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否操作
-r :递归删除啊!最常用在目录的删除了!
8.mv (移动文件与目录,或更名)
 mv [-fiu] source destination
 mv [options] source1 source2 source3 .... directory
选项与参数:
-f :force 强制,如果目标档案已经存在,不会询问而直接覆盖;
-i :若目标档案 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在,且 source 比较新,才会更新 (update)
(改名也可以用rename,更改大量文件的文件名)
9.cat (concatenate)
  cat [-AbEnTv]
-A :相当于-vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出杢;
-n :打印出行号,连同空白行也会有行号
-T :将 [tab] 以 ^I 显示出;
-v :列出一些看不出的特殊字符
10.tac (反向列示)
11.nl (添加行号打印)
  nl [-bnw] 档案
-b :指定行号指定癿方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
        -n ln :行号在屏幕的最左方显示;
    -n rn :行号在自己字段的最右方显示,且不加 0 ;
    -n rz :行号在自己字段的最右方显示,加 0 ;
-w :行号字段的占用的位数。
12.more (一页一页翻)
如果 more 后面接的档案内容行数大于屏幕输出的行数时,最后一行会显示出目前显示的百分比, 而且还可以在最后一行输入一些有用的指令!
 空格键 (space):代表向下翻一页;
 Enter:代表向下翻『一行』;
 /字符串:代表在这个显示的内容中,向下搜寻『字符串』这个关键词;
 :f:立刻显示出文件名以及目前显示的行数;
 q:代表立刻离开 more ,不再显示该档案内容。
 b / [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管道无用。
13.less (一页一页翻)
 空格键:向下翻一页;
 [pagedown]:向下翻一页;
 [pageup] :向上翻一页;
 /字符串 :向下搜寻『字符串』;
 ?字符串:向上搜寻『字符串』;
 n :重复前一个搜寻 (与/或 ? 有关!)
 N :反向癿重复前一个搜寻 (与/或 ? 有关!)
 q :离开 less 这个程序;
14.head (取出前面几行)
 head [-n number] 档案
-n :后面接数字,代表显示几行
加入后面的数字是负数,表示代表列出前面所有的行数,但是不包括最后的n行
15.tail (取出后面几行)
 tail [-n number] 档案
-n :后面接数字,代表显示几行
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c 才会结束 tail 癿侦测
加入n后面的数字是带+号的,表示在第n行之后,后面的所有都会被列出来。
16.非纯文本档: od
 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 ;
12.文件时间
modification time (mtime):
该档案『内容数据』变更时,就会更新这个时间!
内容数据指的是档案的内容,而不是档案的属性或权限喔!
status time (ctime):
该档案的『状态 (status)』改变时,就会更新这个时间
举例来说,像是权限与属性被更改了,都会更新这个时间啊。
access time (atime):
『该档案的内容被取用』时,就会更新这个读取时间 (access)。
举例来说,我们使用 cat 去读取 /etc/man.config , 就会更新该档案的 atime 了。
13.touch 修改文件时间或创建新文件
touch [-acdmt] 档案
-a :仅修订 access time;
-c :仅修改档案的时间,若该档案不存在则不建立新档案;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订癿时间而不用目前癿时间,格式为[YYMMDDhhmm]
14.umask 文件默认权限
直接输入 umask ,就可以看到数字形态的权限设置分数
umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,
要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,
是加入-S (Symbolic) 这个选项,就会以符号类型的方式显示出权限了!
如何设置mask,直接在后面输入新的权限设置分数
15.chattr (配置文件的隐藏属性)
只能在 Ext2/Ext3 的文件系统上面生效, 其他的文件系统可能就无法支持这个指令了
 chattr [+-=][ASacdistu] 文件或目录名称
+ :增加某一个特殊参数,其他原本存在参数则丌劢。
- :移除某一个特殊参数,其他原本存在参数则丌劢。
= :讴定一定,丏仅有后面接癿参数
A :当设置了 A 这个属性时,若你有存取此档案(戒目弽)时,他的访问时间atime将不会被修改,可避免 I/O 较慢癿机器过度存取磁盘。这对速度较慢的计算机有帮助
S :一般档案是异步写入磁盘,如果加上 S这个属性时,当你进行任何档案的修改,该改动会『同步』写入磁中。
a :当设定a后,这个档案将只能增加数据,而不能删除也不能修改数据,只有 root才能设定这个属性。
c :这个属性设定后,将会自动将此档案『压缩』,在读取时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(对于大档案似乎蛮有用)
d :当 dump 程序被执行时,设定 d 属性将可使该档案(或目录)不会被dump 备份
i :可以让一个档案『不能被删除、改名、设定连结也无法写入或新增资料!』对于系统安全性有相当大的帮助!只有 root才能设定这个属性。
s :如果这个档案被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回。
u :与 s 相反,如果该档案被删除了,则数据内容其实还存在磁盘中,可以使用救援该档案喔!
注意:属性设定常见的是 a 与 i 的设定值,而且很多设定值必须要身为 root 才能设定
16.lsattr (显示档案隐藏属性)
lsattr [-adR] 档案或目录
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也列出!
17.档案特殊权限: SUID, SGID, SBIT
Set UID
s 这个标志出现在档案拥有者的 x 权限上
 SUID 权限仅对二进制程序(binary program)有效;
 执行者对于该程序需要具有 x 可执行权限;
 本权限仅在执行该程序过程中有效 (run-time);
 执行者将具有该程序拥有者 (owner) 权限。
Set GID
s 标志在档案拥有者的 x 项目为 SUID
 SGID 对二进制程序有用;
 程序执行者对于该程序来说,需具备 x 癿权限;
 执行者在执行的过程中将会获得该程序群组的支持!
除了 binary program 乊外,事实上 SGID 也能够用在目弽上,这也是非常常见癿一种用途! 弼一个
目弽讴定了 SGID 癿权限后,他将具有如下癿功能:
 用户若对亍此目弽具有 r 不 x 癿权限时,该用户能够迚入此目弽;
 用户在此目弽下癿有效群组(effective group)将会变成该目弽癿群组;
 用途:若用户在此目弽下具有 w 癿权限(可以新建档案),则使用者所建立癿新档案,该新档案癿
群组不此目弽癿群组相同。


Sticky Bit
这个 Sticky Bit, SBIT 目前叧针对目弽有效,对亍档案已经没有效果了。 SBIT 对亍目弽癿作用是:
 弼用户对亍此目弽具有 w, x 权限,亦卲具有写入癿权限时;
 弼用户在该目弽下建立档案戒目弽时,仅有自己不 root 才有权力删除该档案

18.观察文件类型:file
如果你想要知道某个档案的基本数据,例如是属于 ASCII 或者是 data 档案,或者是 binary , 且其中
有没有使用到动态函式库 (share library) 等等信息,就可以利用 file 这个指令来查阅!
19.which (寻找『执行文件』)
 which [-a] command
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
(因为 which 是根据用户所设定的 PATH 变量内的目录去搜寻可执行文件!所以,不同的PATH 设定内容所找到的指令必然不一样啦!用root于一般账号查询同一个命令可能会出现不同的结果)
20.文件名的查询
find不常用,因为速度慢。通常我们都是先使用 whereis 或者是 locate 检查,如果真的找不到了,
才以 find 搜寻呦!
 whereis 和 locate 是利用数据库搜寻数据,所以相当快速,而且并没有实际搜寻硬盘, 比较省时间啦!
whereis (寻找特定档案)
 whereis [-bmsu] 档案或目录
-b :只找 binary 二进制格式的档案
-m :只找在说明文件 manual 路径下的档案
-s :只找 source 源档案
-u :搜寻不在上述三个项目中的其他特殊档案
locate [-ir] keyword
-i :忽略大小写的差异;
-r :后面可接正则表达式的显示方式
(由于locate是从数据库里面查询,而数据库一般是一天更新一次,所以需要提前更新下数据库)
updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,来更新/var/lib/mlocate 内的数据库档案;
 locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。
21. 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 还要新的档案档名
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 搜寻。
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 的权限』的档案,但是权限比mode大的也会列举出来
-perm +mode :搜寻档案权限『包含任一 mode 的权限』的档案,但是权限比mode小的也会列举出来
4. 额外可进行的操作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print:将结果打印到屏幕上,这个操作是默认操作!
eg:ind / -perm +7000 -exec ls -l {} \;
注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,
{} 代表的是『由 find 找到的内容』,
-exec 一直到 \; 是关键词,代表 find 额外操作的开始 (-exec) 到结束 (\;)
因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜杠来跳脱。
eg:你想要找出 /etc 底下檔名包含 httpd 的文件, 那么你就可以这样做:
[root@www ~]# find /etc -name '*httpd*'
不但可以指定搜寻的目录(连同次目录),并且可以利用额外的选项和参数来找到最正确的档名。

1.文件系统
superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
inode:记彔档案的属性,一个档案占用一个 inode,同时记彔此档案的数据所在癿的block 号码;
block:实际记彔档案的内容,若档案太大时,会占用多个 block 。
文件系统会将一个文件分配一个node,而文件里面的数据则分配在不同的block里面。通过node找寻到block,这种方式称之为索引式文件系统。
Ext2就是这种文件系统。
u盘-FAT FAT 这种格式的文件系统并没有 inode 存在,所以 FAT 没有办法将这个档案的所有 block 在一开始就读出来。每个 block 号码都记彔在前一个 block 当中。
FAT需要碎片整理的原因就是档案写入的 block 太过离散了,此时档案读取的性能将会变得很差所致。 这个时候可以透过碎片整理将同一个档案所属的 blocks 汇整在一起,这样数据的读取会比较容易啊!
2.文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用resize2fs 等指令更改文件系统大小),否则 inode 与 block 固定后就不再改变。如果文件系统很大的时候,将inode和block放在一起,不方便管理。因此,Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) ,每个
区块群组都有独立的 inode/block/superblock 系统。
在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序
3.data block (资料区块)
data block 是用来放置档案内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K
三种而已。在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode 的记彔啦。 不过要注意的是,由于 block 大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一档案容量并不同。 因为 block 大小而产生癿 Ext2 文件系统限制如下
Block 大小 1KB 2KB 4KB
最大单一档案限制 16GB 256GB 2TB
最大文件系统总容量 2TB 8TB 16TB
虽然 Ext2 已经能够支持大于 2GB 以上的单一档案容量,不过某些应用程序依然使用旧的限制, 也就是说,某些程序只能够捉到小于 2GB 以下的档案而已,这就跟文件系统无关了!
 原则上,block 的大小与数量在格式化完就不能够再改发了(除非重新格式化);
 每个 block 内最多只能够放置一个档案的数据;
 承上,如果档案大于 block 的大小,则一个档案会占用多个 block 数量;
 承上,若档案小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。
(在进行文件系统的格式化之前,要想好文件系统的于集使用情况来设置你的block容量,减少不必要的浪费)
4.inode table (inode 表格)
存放的数据:
 该档案的访问模式(read/write/excute);
 该档案的拥有者与群组(owner/group);
 该档案的容量;
 该档案建立或状忞改变的时间(ctime);
 最近一次的读取时间(atime);
 最近修改的时间(mtime);
 定义文件特性的标志(flag),如 SetUID...;
 该档案真正内容的指向 (pointer);
inode 的数量与大小也是在格式化时就已经固定了,每个 inode 大小均固定为 128 bytes;每个档案都仅会占用一个 inode 而已;因此文件系统能够建立的档案数量与 inode 的数量有关;
 系统读取档案时需要先找到 inode,幵分析 inode 所记彔的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。
因为加入要记录的东西很大时,inode很可能不够存放那些记录,所以,我们将将 inode 记彔 block 号码的区域定义为 12 个直接,一个间接, 一个双间接与一个三间接记彔区。
5.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 。
(每个 block group 都可能有 superblock 喔!但是我们也说一个文件系统应该仅有一个superblock 而已,那是怎么回事啊? 事实上除了第一个 block group 内会有 superblock 外,后续的 block group 不一定有 superblock , 而若有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份咯,这样可以进行 superblock 的救援呢!)
6.Filesystem Description (文件系统描述说明)
这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock,
bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。这部份也能够用 dumpe2fs 来观
察的。
7.block bitmap (区块对照表)
如果你想要新增档案时总会用到 block 吧!那你要使用那个 block 来记彔呢?当然是选择『空的block 』来记彔新档案数据啰。 那你如何知道那个 block 是空的?这就得要透过 block bitmap 的辅助了。从 block bitmap 当中可以知道哪些 block 是空的,因此我们的系统就能够很快速的找到可使用的空间来处置档案啰。同样,如果你删除某些档案时,那些档案原本占用的 block 号码就得要释放出来, 此时在block bitmpap 当中相对应到该 block 号码的标志就得要修改成为『未使用中』啰!这就是 bitmap的功能。
8.inode bitmap (inode 对照表)
这个其实与 block bitmap 是类似的功能,只是 block bitmap 记彔的是使用与未使用的 block 号码,
至于 inode bitmap 则是记彔使用于未使用的 inode 号码啰!
9.dumpe2fs [-bh] 装置文件名
-b :列出保留为坏轨的部分(一般用不到吧!?)
-h :仅列出 superblock 的数据,不会列出其他的区段内容!
df <==这个指令可以叫出目前挂载的装置
10.目彔
当我们在 Linux 下的 ext2 文件系统建立一个目彔时, ext2 会分配一个 inode 与至少一块 block 给该
目彔。其中,inode 记彔该目彔的相关权限与属性,并可记彔分配到的那块 block 号码; 而 block 则是记彔在这个目彔下的文件名与该文件名占用的 inode 号码数据。
如果想要实际观察 root 家目彔内的档案所占用的 inode 号码时,可以使用 ls -i 来处理。
目彔并不只会占用一个 block 而已,也就是说: 在目彔底下的档案数如果太多而导致一个 block 无法容纳的下所有的档名与 inode 对照表时,Linux 会给予该目彔多一个 block 来继续记彔相关的数据;
11.档案:
当我们在 Linux 下的 ext2 建立一个一般档案时, ext2 会分配一个 inode 与相对于该档案大小的block 数量给该档案。例如:假讴我癿一个 block 为 4 Kbytes ,而我要建立一个 100 KBytes 癿档
案,那举 linux 将分配一个 inode 不 25 个 block 来储存该档案! 但同时请注意,由亍 inode 仅有 12
个直接挃向,因此还要多一个 block 来作为区块号码癿记彔喔!
12.目彔树的读取:
由于目彔栊是由根目彔开始读起,因此系统透过挂载的信息可以找到挂载点的inode 号码(通常一个filesystem 的最顶层 inode 号码会由 2 号开始喔!),此时就能够得到根目彔的inode 内容,并依据该
inode 读取根目彔的 block 内的文件名数据,再一层一层的往下读到正确的档名。
13.filesystem 大小与磁盘读取效能:
关于文件系统的使用效率上,当你的一个文件系统规划的很大时,例如 100GB 这么大时, 由于硬盘上面的数据总是来来去去的,所以,整个文件系统上面的档案通帯无法连续写在一起(block 号码不会连续的), 而是填入式的将数据填入没有被使用的 block 当中。如果档案写入的 block 真的十分分散, 此时就会有所谓的档案数据离散的问题发生了。虽然我们的 ext2 在 inode 处已经将该档案所记彔的 block 号码都记上了, 所以资料可以一次性读取,但是如果档案真的太过离散,确实还是会发生读取效率低落的问题。 因为磁盘读取头还
是得要在整个文件系统中来来去去的频繁读取! 果真如此,那么可以将整个 filesystme 内的数据全部复制出来,将该 filesystem 重新格式化, 再将数据给他复制回去即可解决这个问题。
此外,如果 filesystem 真的太大了,那么当一个档案分别记彔在这个文件系统的最前面与最后面的block 号码中, 此时会造成硬盘的机械手臂移动幅度过大,也会造成数据读取效能的低落。而且读取头再搜寻整个 filesystem 时, 也会花费比较多的时间!因此, partition的规划并不是越大越好, 而是真的要针对您的主机用途来进行规划才行。
14.EXT2/EXT3 档案的存取与日志式文件系统的功能
新增一个档案
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 的数据是经常变动的 ,每次新增、移除、编辑时都可能会影响到这三个部分
的数据,因此称为中介数据。
15.数据的不一致 (Inconsistent) 状态
假如你的档案在写入文件系统时,因为不知名原因导致系统中断(例如突然的停电啊、 系统核心发生错误啊~等等
),所以写入的数据仅有 inode table 及 data block 而已, 最后一个同步更新中介数据的步骤没有做完,此时就会产生 metadata 的内容和实际数据存放区产生不一致 (Inconsistent) 的情况了。
既然有不一致当然就得要克服!
在早期 Ext2 文件系统中,如果发生这个问题, 那么系统在重新启动的时候,就会藉由 Superblock 当中记彔的valid bit (是否有挂载) 与 filesystem state (clean 与否) 等状态来判断是否强制进行数据一致性的检查!若有需要检查时则以 e2fsck 这支程序来进行的。不过,这样的检查十分消耗时间。因为要针对 metadata 区域与实际数据存放区来进行比对, 呵呵~得要搜寻整个 filesystem 呢~如果你的文件系统有 100GB 以上,而且里面的档案数量又多时, 哇!系统真忙碌~而且在对 Internet 提供服务的服务器主机上面, 这样的检查真的会造成主机复原时间的拉长~真是麻烦~这也就造成后来所谓日志式文件系统的兴起了。
16.日志式文件系统 (Journaling filesystem)
为了避克上述提到的文件系统不一致的强狂诞生,因此我们的前辈们想到一个方式, 如果在我们的filesystem 当中规划出一个区块,该区块与门在记彔写入或修订档案时的步骤, 那不就可以简化一致性检查的步骤了?也就是说:
1. 预备:当系统要写入一个档案时,会先在日志记彔区块中记录某个档案准备要写入的信息;
2. 实际写入:开始写入档案的权限与数据;开始更新 metadata 的数据;
3. 结束:完成数据与 metadata 的更新后,在日志记彔区块当中完成该档案的记录。
在这样的程序当中,万一数据的记录过程当中发生了问题,那么我们的系统只要去检查日志记彔区块,
就可以知道那个档案发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem 去
检查, 这样就可以达到快速修复 filesystem 的能力了!这就是日志式档案最基础的功能啰~
那我们的 ext2 可达到这样的功能吗?
当然可以啊! 就透过 ext3 即可! ext3 是 ext2 癿升级版本,并且可向下兼容 ext2 版本呢! 可以直接使用 ext3 这个 filesystem。
『为什么你想要从 ext2 转换到 ext3 呢?有四个主要的理由:可利用性、数据完整性、速度及易于转换