文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux档案系统管理

Linux档案系统管理

时间:2006-07-19  来源:redhathome

Linux档案系统管理(第一篇)


■ Linux档案系统架构
■ ext3fs档案系统架构
■ 建立ext3档案系统
■ 档案系统基本指令操作
■ 档案权限基本观念
■ I/O重新导向及管线
■ 使用指令与图形管理工具的迷失

档案系统(File System)是作业系统用来储存和管理档案的方法,而每种作业系统支援的档案系统数量和种类都不同,因此在了解系统运作前,我们必须对档案系统的结构有所了解,尤其在Linux中,任何软硬体都被视为档案,所以此部份的内容更形置要。

Linux档案系统架构
作业系统中的档案系统可說是最基本的架构,因为几乎所有与使用者、应用程式或是安全性模型相互沟通的方法,都是与档案储存的类型息息相关。而整个档案系统可以简单的分为二种类型:

◆ 共用与非共用档案:共用档案是指允许其他主机存取的档案,而非共用档案则只供本机使用。

◆ 变动与固定档案:变动档案是指不需透过系统管理员的更改,而可自动变更內容的档案,例如资料库档案,而固定档案则是指內容不会自动变更的档案,例如一般的文
件或是二进位档。

Linux的档案系统是採用阶层式的树状目錄结构,在此结构中的最上层是根目錄然后在此根目錄下再建立其他的目錄,虽然目錄的名称可以自订,但是有某些特殊的目錄名称包含有重要的功能,因此不可随便将它们更名,以免造成系统的错误。

因为Linux允许不同的厂商及个人修改作业系统,所以常会造成目錄名称不统一的情形,有鑑於此,目前有一套规范档案目錄的命名及存放标準,它就称为Filesystem Hierarchy Standard(FHS),这也是FedoraCore 遵守的标準,若需要详细的說明,请参考以下的网站說明:

http://www.pathname.com/fhs/

图8-1 FHS网站首页


在Linux安装时,系统会建立一些预设的目錄,而每个目錄都有其特殊的功能,以下是这些目錄的简介:




Linux中的档案名称最长可允许256个字元,而这些字元可用A-Z 0-9._- 等符号来命名。和其他作业系统相比,例如DOS和Windows,Linux最大的不同鲇是,它並沒有「副档名」的观念,也就是說档案的名称和该档的种类並沒有直接的关连,例如smaple.txt可能是个执行档,而sample.exe也有可能是文字档案,甚至於可以不使用副档名。

另一个特性是档案名称区分大小写(Case Sensitive),这也是习惯DOS和Windows平台的使用者最难适应的一鲇,但所有的Unix系统(包括Linux)都是遵循这个法则,例如sample.txt、Sample.txt、SAMPLE.Txt、samplE.txt在Linux上都代表不同的档案,但在DOS和Windows平台卻是指同一个档案。

◆ ext3fS档案系统结构

Linux可說是一种相容性很高的作业系统,它可以支援的档案系统有很多,其中包括:adfs、affs、autofs、coda、coherent、devpts、efs、ext、ext2、ext3、hfs、hpfs、iso9660、minix、msdos、ncpfs、nfs、ntfs、proc、qnx4、romfs、smbfs、sysv、udf、ufs、umsdos、vfat、xenix、xiafs等,也就是說它可以和许多不同的档案或作业系统同时存在硬碟中,这也是Linux足以傲视其他作业系统的地方。

与Microsoft Windows作业系统不同的是,Linux並沒有的观念,也就是說,它不会将档案的储存位置指定为磁碟机C、D、E等等,而是利用树状的ext3fS(Third Extended File System)为主要的档案系统(有时也简称为ext3)。

ext3fs是Fedora Core 预设的档案系统,顾名思义,它是ext2fs的加強版本,除了在原有ext2fs系统上加上曰誌功能(journaling)外,ext3fs还具有以下的优鲇:

◆ 有效性(Availability)
当系统因为电力中断或其他原因而导致不正常关机时,早期的ext2fs系统必须先执行ext2fsck程式,以确定档案系统的一致性(Consistency),之后才可重新的掛载(Mount)档案系统。

但是e2fsck程式执行的时间主要是与该档案系统的大小有关,以目前动辄数十GB的档案系统而言,势必将花费很长的时间。此外,在档案系统中的档案愈多,则要进行的一致性检查也愈多,这二个因素都严重影响到系统的有效性。

而ext3fS档案系统在处理以上的问题时,並不需要执行档案系统检查,这是因为资料在写入ext3fS档案系统时会利用日誌功能来维持资料的一致性。所以在系统不正常关机后,要回复ext3fS档案系统与档案系统的大小或是档案数量的多寡无关,而是和用来持维资料一致性的日誌大小有关。通常在预设的状況下,利用日誌来回复ext3fs档案系统大約只要费时1秒,但是不同的硬体会影响回复的时间。

◆ 资料完整性
ext3fS可以在系统不正常关机后,提供较佳的资料完整性,同时在ext3fs存取资料时,可以选择不同的资料保护类型和层级,例如选择以维护档案系统的一致性为优先,而允许少量的资料在系统不正常关机后毀损,这可加快回复的时间,这个选项也是系统的预设值。
园资料存取速度ext3fs的资料存取速度高於ext2fs档案系统的主要原因是日誌功能可使硬碟读写头的移动达到最佳化。

◆ 易於转移
原有的ext2fs可以轻易的转移至ext3fs来获得曰誌功能,而不需重新格式化档案系统。通常可以用以下的二种方法来进行ext3fs档案系统转移:

◆ Fedora Core 安装程式

◆ tune2fs程式
在Linux将硬碟格式化为ext3fs后,它会将硬碟分为四个部份:BootBlock、Super Block、i-nodes和DataBlock。

● Boot Block
Boot Block是包含系统啟动程式的磁碟区块。

● Super Block
Super Block主要是用来记錄档案系统的配置方式,其中包含i-node数量、磁碟区块数量,以及未使用的磁碟区块等。

● i-node
i-node是Index-Node的简称为,在这个部份包含i-node,而每个i-node都可用来记錄一个档案,但有时也不会使用到。您可以使用df(Disk Free)指令以及i(i-node)参数来了解目前系统中的i—node大小与数量。



在以上的输出结果中,「档案系统」栏位表示磁碟区块名称,「1K- 区段 」 說明每个区块的大小是1KB,因此我们可以了解/dev/hda7的大小是1KB*1035660=1035660KB。若您加入「-i」参数,则您可以由「Inodes 」栏位得知该磁碟区块的i-node数目,以/dev/hda7为例, 它的i-node数目为131616个,所以平均一个i-node可以储存1035660KB/131616=7.8688KB的资料(但我们会取整数来计数,也就是8KB)。

理论上,若是每个储存在区块中的档案都小於8KB,则此区块最多可储存131616个档案资料,但若是档案超过8KB,则会佔用一个以上的i-node,例如一个8MB的档案会佔用1024
个i-node。因此,若是系统中储存的档案都很大,则允许的档案数量一定远少於i-node数目。

相反的,若是区块中的档案都很小,例如新闻群组上的讨论文章,则当档案的数目等於i-node数量时,即使区块中仍有许多的空间,但是系统也会因为沒有足夠的i-node而无法储
存任何档案。

如果您要得知档案的i-node编号,您可以输入以下的指令(-i表示i-node):



而在Linux中,软碟、硬碟和光碟区块的表示法如下表所示:



在i-node中记录的资讯有很多,包括:

● 档案大小

● 使用者ID(User ID)

● 群组、ID (Group ID)

● 档案存取模式:读取、写入或执行等。

● 连结计数:同一个档案可建立多个档案连结,它就好像是在Windows中的「捷径」,档案每建立一个连结时,连结计数增加l,而当连结刪除时,则连结计数就減少1。

● 档案最后修改时间

● 磁碟区块位址:记錄档案存放的磁碟区块。

● 间接区块(Indirect Block):当一个档案的大小超过一个i-node的容量时,则其他储存此档案的(区块)位址会记錄在间接区块中


Linux档案系统管理 (第二篇)


1-3 建立ext3档案系统
在上个小节中,我们了解了ext3档案系统的优鲇及內容,所以在这个小节中,我们将說明如何建立ext3,以加強读者的实际操作经验,而建立ext3主要的步骤分为磁碟分割和格式化为ext3。

1-3-1 以fdiSk分割磁碟
「fdisk」是种功能強大的磁碟分割工具,管理员可在作业系统安装期间或是完成后使用,它的指令语法如下:

fdisk/dev/装置名称

上式的「装置名称」必需视实际的环境而定,本书在此以分割第一颗IDE硬碟上的Master为例,因此输入的指令及出现的讯息如下:

[root@ns1 root] # fdisk/dev/hda
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):

在输入fdisk指令后,该程式会自动侦测硬碟上的磁柱(Cylinder)数量,若磁柱的数量大於1024,则系统会出现以上的警告讯息,其中說明一些开机时执行的软体(例如旧版的LILO),或是由其中的作业系统分割磁碟时(DOS FDISK或OS/2 FDISK),可能会產生问题,但是
以Fedora Core 而言,您可以忽略这些讯息。

在执行fdiSk后,游标会停留在「Command (m for help):」的讯息处,建议您先输入」「m」指令,以参考所有可用的选项說明。下表为笔者整理的中文选项說明:



在了解fdiSk指令的基本顯示功能後,接下來本書將說明如何利用fdisk來新增分割區,以下是詳細的步驟及說明:
在開始進行磁碟分割前,建議您先按「p」鈕,以顯示目前存在的分割區內容:



在了解目前的分割區狀況後,您可在「Command(m for help):」
處按「n」鈕以新增分割區,若是在系統中目前並未擁有其他分割區則fdisk程式會出現類似以下的訊息:

Command(m for help):n
Command action
e extended
p primary partition(1-4)

在出現以上的訊息後,此時您有 2 種選擇 :

◆ e :若按「e」(Extended),則表示要新增延伸分割區。
◆ p :若按「p」(Primary),則表示要新增主要分割區。

Command(m for help):n
Command action
1 logical (5 or over)
p primary partition(1-4)

若是在系統中目前擁有其他分割區,則會出現以下的訊息 :

Command(m for help):n
Command action
1 logical (5 or over)
p primary partition(1-4)

◆ I :若按「1」(Logical),則表示要新增邏輯分割區。
◆ p :若按「p」(Primary),則表示要新增主要分割區。

本書以新增一個主要分割區為例,首先輸入「p」後再按 Enter 鈕, fdisk 程式可能會出現以下的訊息:

p
Partition number (1-4) : 1
Partition 1 is already defined. Delete it before re-adding it.
Command (m for help):

在以上訊息中的「Partition number(1-4)」表示 fdisk 要求您指定主要分割區的編號,而筆者在此輸入「1」但卻出現 Partition 1 is already defined。Delete it before re-adding it.」 , 並且跳離開分割區的新增工作。這表示在硬碟上已存在其他分割區,而它們的主要分割區編號為 1 ,所以若要再新增其他的主要分割區,必須使用其他的編號。

以下的范例我们将新增一个编号为4的主要分割区,其讯息如下:

Command (m for help) : n
Command action
e extended
p primary partition (1-4)
p
partition number (1-4): 4
First cylinder (1-5005,default 1):1
Last cylinder or +sizeM or +sizeK (1-653,default653): 653

在上例中,笔者先指定分割区的编号为4,则fdisk程式会出现以下的讯息:

First cylinder (1-5005), default 1)

此处需输入分割区起始磁柱的值, fdisk 程式也会自动显示允许输入的值 (1-5005) ,並且会以允许范围的第一个数字为预设值 (1) ,所以输入预设值与直接按 Enter 钮的功能相同。

Last cylinder or +size or sizeM or +sizeK (1-653, default 653)

此处需输入分割区结束磁柱的数值, fdisk 程式也会自动显示允许输入的值 (1-653) ,並且会以允许范围的最后一个数字为预设值 (653) ,所以输入预设值与直接按 Enter 钮的功能相同。而除了使用磁柱来设定分割区的结束位置外,您也可以使用下表中的格式来进行指定:



注意:
在建立主要分割区时,你可以先建立编号 2 的主要硬碟分割,再建立编号 1 的主要硬碟分割。而在逻辑分割区中,第一个建立的逻辑分割区编号一定是 5 ,但如果在建立了编号 5 和编号 6 号两个逻辑分割区后,接着刪除编号 5 的逻辑分割区,则原先编号 6 的分割区会变成编号 5.

◆ 在新增 Linux 分割区后很重要的一点是,必须指定分割区的类型,以 ext2 或 ext3 而言,分割区的类型值为「83」。欲指定分割区的类型,您可以在「Command (m for help) :」处按「 t 」钮,则 fdisk 程式会出现类似以下的讯息:

Command (m for help): t
Partition number (1-4) : 4
Hex code (type L to list codes) : 83
Changed system type of partition 3 to 83 (Linux)

在上述出现的讯息中,首先指定欲变更类型的分割区编号,本书的范例为「4」然后在「Hex code(type L to list codes)」选项中输入「83」以表示 Linux 分割区。

如果刪除了错误的分割区,或是分割的规划並不满意,按「q」钮就可以离开fdisk程式,並且不储存任何的变更。若是決定储存新的分割区內容,您应按「w」钮以离开fdisk程式同时储存变更,但这些变更的內容需在下次开机时才可生效。

Command (m for help)
The partition table has been altered!
Calling ioct1 () to re-read partition table.
syncing disks.

1-3-2 以mkfs格式化ext3档案系统
在利用fdisk完成磁碟分割区的建立后,接下来必须将此分割区格式化为ext3档案系统,此处可使用的指令为「mkfs」,它的语法如下:

mkfs -t ext3 /dev/hdxy

上述语法中的/dev/hdxy表示以分割的磁区,例如本书上例中新增的为第一颗IDE Master上的第4个分割区,则需写成/dev/hda4。注意一鲇,利用mkfs指令进行格式化时,会刪除此分割区上的所有资料,所以需留意备份的工作。以下是本书执行的范例:



为了存取此分割区的內容,我们必须进行掛载的工作,本书在此假设将此分割区掛载於/test目錄下,以下是一个简单的范例:

[root@nsl root]# mkdir/test

#新增欲挂载的目录

[root@nsl root]# vi /etc/fstab
/dev/fda4 /test ext3 defaults 1 2

注意:
有关掛载的详细說明,请参考稍后「系统掛载- mount」小节內容。

1-4 档案系统基本指令操作

现在我们对於Linux上的档案系统已有整体性的了解,接下来就可开始使用系统中的各个档案功能,但因为Linux的档案系统包含许多不同的阶层目錄,所以必须先学习如何在不同的目錄及档案问游刀有余,然后才可正确的找出所需的资料。在本小节中,我们将介绍一些基本的档案系统指令操作,这也是每位使用者都必须具备的基本知识。

▓ 显示目前工作目錄 - pwd (Print Working Directory)

这个一个非常常用的指令,它唯一的功能是显示出目前的工作目錄,因为您常会在目錄中切換的次数太多,而忘了目前目錄的位置。它的用法很简单,只要直接输入指令名称即可:

[jack@nsl jack]$ pwd
/home/jack

▓ 列出目錄內容 – ls (List)

「1s」指令也是管理员天天都会使用的指令,它的功能是显示出目錄的內容,就好像在Windows上利用滑鼠双擊任何资料夹的动作一樣,也等於是DOS中的「dir」指令功能。在目前的工作目錄下直接输入「ls」可得到以下的结果:



从以上的结果我们可以清楚的了解,目前这个目錄中包含许多档案,但是先前我们曾提过目錄也是属於档案的一种,因此我们无法由以上的资讯来得知何者为目錄。若是要得到类似的详细资料,您可以使用「-l」参数,它是表示以「Long Format」的格式显示,同时也可以配
合「-a」(A11)参数以显示隐藏档:



在显示的內容中共包含7个栏位,这些栏位的說明如下:



◆ 使用权限
此栏位是由 10个字母所组成,第一个字母若是「d」(Directory),则表示该记錄为一目錄,「-」表示为档案,而「l」(Link)表示为连结档,其余的9个字母分別代表拥有者(Owner)、群组(Group)和其他人(Other)对该档案的使用权限,有关权限的說明我们将在下一小节介绍。

◆ 档案数目
若是档案的话,则此数字通常为1,如果是目錄,则此数字表示该目錄中包含的子目錄数目(包括隐藏的子目錄)。

◆ 拥有者
通常指的是该档案的建立者。

◆ 使用群组
指拥有者所属的群组,在Linux中的群组可以包含许多使用者,而每个使用者也可以隸属多个群组,这必须依照管理上的需求而定。

◆ 档案大小
这个栏位通常是指用位元组(Bytes)为单位的档案或目錄大小,而目錄大多以4096来表示。

◆ 建立日期
以「月份日期时间」的格式来表示该档案建立的日期。

◆ 档名

该档案的档名,若是以「.」为开头的档案或目錄都具有隐藏的属性,其中档名为「.」代表该该目錄本身,而「..」叫代表上一层的目錄。

虽然可以使用ls指令来检视目錄中的內容,但若是该目錄中包含的档案或子目錄数目眾多时,您可能会因此而眼花撩乱,此时您可以配合「-F」的参数使用,以利用顏色及符号来显示不同的档名。



▓ 目錄切換 – cd (Change Directory)
因为不同的档案可能存放在档案系统中的不同位置,所以在执行程式或系统管理工作时,管理员都必须在不同的目錄问切換,此时您就可以使用「cd」指令。「cd」指令的使用很简单,以下是几个常用的方法:



▓ Linux档案路径
在此我们要介绍Linux的档案路径表示法,因为它沒有微软產品的「磁碟机」观念,也就是說在Linux的世界里沒有所谓的磁碟机C,磁碟机D…等等的表示法,它完全是利用目錄与子目錄的阶层式(Hierarchical)观念来表示档案的储存位置,因此您需先建立这个新观念,否则可能会因为先前的观念而造成您学习Linux的障碍。一般来說,Linux的档案路径分为二类:絕对路径和相对路径。

所谓「絕对路径」,就是指由根目錄( / )为起始鲇来表示,例如/etc/ppp/peers/isdn/avm就是絕对路径,也就是說,若是一个路径表示法是以根目錄( / )开头者,都是属於絕对路径,若非以根目錄开头者就称为相对路径。

而「相对路径」是指由目前的目錄开始算起,我们以刚才的絕对路径为例,若您现在的工作目錄为/etc/ppp,此时相对路径的表示法为「/peers/isdn/avm」(也可省略为peers/isdn/avm)。因为系统会自动於此路径前加上目前的工作目錄位置,所以适时的使用相对路径可以节省您输入的时间,並避免错误產生。

▓ 档案的复制 / 移动 / 刪除 – cp/mv/rm
不论使用何种作业系统,档案的复制、移动与刪除可說是档案系统中最基本的操作技巧,因此您应该多多熟练这些操作,以加速管理时的效率。以下我们就利用几个范例来說明这些操作:

◆ 档案复制
如果要将/testl目錄下的filel复制到/test3目錄,並将档案名
称改为files2,您可输入以下的cp (Copy) 指令:

[root@nsl root]# cp/test1/file1/test3/file2

若是要将/dirl目錄下的所有档案,包括子目錄都复制到/dir2目錄 (变成/dir2/dirl),並变更档案系统格式,则可以输入以下的指令:

[root@nsl root]# cp -ax /dir1/dir2

上述指令的参数「-a」是指archive的意思,也就是指复制所有的目錄,並包含子目錄,而「-x」是用来指定复制后,此档案的格式变为和目的地磁区的档案系统相同,例如由ext3
变为Windows中的FAT32。

◆ 档案移动 (更名)
档案的移动和复制很相似,其差別只是在档案移动后,原始位置上的档案会被刪除,也就是等於复制加上刪除的功能。其实档案移动的指令 -mv (Move),常用来当成档案更名之用,因为Linux的指令中沒有更名的指令(在DOS中的更名指令为「ren」),所以我们可以利用mv来变更档案名称。

如果要将/testl目錄下的filel移动至/test3目錄,並将档案名称改为files2,您可输入以下的指令:

[root@nsl root]# mv /test1/file1 /test3/file2

◆ 档案刪除
若是某些档案已不再需要,您可以使用「rm」(Remove)指令来刪除它,如果要将/testl目錄下的filel档案刪除,您可输入以下的指令:

[root@nsl root]# rm /test1/file1

在刪除档案时需注意权限的问题,如果使用者的权限不足以刪除该档案,则系统会出现以下的错误讯息:

[jack@nsl jack]$ rm/test/file1
rm : 是否移除有防写保护的普通档案 ˋfile1ˋ ? y
rm :cannot remove ˋfile1ˋ :拒绝不符权限的操作

▓ 目錄的新增/刪除 – mkdir/rmdir

◆ 新增目錄
有时为了集合某些特定的资讯,例如传真档案,我们可以新增一个专用的目錄(Directory),它就像是Windows中的「资料夹」(Folder),以下是利用mkdir(Make Directory)指令来新增一个名为「/fax」目錄的方法:

[root@nsl root] # mkdir/fax

◆ 刪除目錄
若要刪除某一目錄,可以使用「rmdir」(Remove Directory)的指令,但是执行之前,必须确保此目錄中沒有任何档案,否则系统会出现错误讯息。如果您要強制刪除目錄及其中的档案,您可以使用」「rm -rf」指令:

[root@nsl root ]# rmdir/fax
rmdir : [root@nsl root ]# rmdir/fax
rmdir : ˋ/faxˋ:目录不是空的 →目录中尚有档案
[root@nsl root]# rm -rf fax →强制删除目录及其中的档案

在上例中的「-r」参数是指递回說它会使刪除的动作持续的进行,而「-f」参数是指强制(Force)刪除所有的档案。

但在执行「rm -rf」指令时需特別注意一鲇,因为它会強制刪除指定目錄及其下的所有档案及子目錄,而且目錄一经刪除就无法回复,所以若是您在输入目錄名称时发生错误,例如
将「/testl 」目錄输入为「/」目錄,则对系统產生的危害实在很大,所以在使用此指令前希望能格外的小心。

▓ 建立连结档案 - ln
相信大家都知道,执行原始档案和Windows中的「捷径」都可以得到相同的结果,因为「捷径」会将指令引导到原始的档案,而使用它最大的好处就是节省硬碟空间。例如我们若将一个l MB的档案利用cp指令复制到另一个目錄中,则对整个硬碟空问来說便減少了1MB,但是若建立此档案的连结档案,可以只要花费几个Bytes的空间,这对大型伺服器
而讠可減少硬碟的消耗量,並且可提升执行的效能,而Linux中的「连结档案」与Windows中的「捷径」在观念上很类似。
其次是,若对连结档案进行修改,则这些变更也会自动更新原始档案的內容,但如果使用复制的方式,则需对所有副本及原始档案进行修改,这会花费许多的时间,而且有时也会產生档案內容不同步的问题。

如果要在 /test3目錄中建立 /testl/filel档案的连结,假设它的名称为filel .1n,则可使用以下的1n (Link)指令:

[root@nsl root]# ln -s /test1/file1 /test3/file1.ln
[root@nsl root]# ls -l /test3

总计 4
lrwxrwxrwx 1 root root 12 11月 3 10:55 file1 .ln -> /test1/file1
.........

上例中的参数「-s 」表示欲建立的是Symbolic Link(也称为Soft Link),同时您也可以看到此符号连结只佔12 Bytes,而在最后的档名部份会看到「->」的符号,表示这是一个指向原始档案的连结档案,而且系统会以浅蓝色来显。

若在使用ln指令时沒有输入参数「-s 」,则这种连结就称为「HardLink」,同时每增加一个Hard Link,则档案系统就会新增一个i-node,並且利用指标来指向原始档案的位置,所以Hard Link愈多则產生的指标也愈多,同时佔用硬碟的空间也会呈现倍数增加。

在这种情形下,如果要从硬碟上移除这个档案,则必须要将它关联到的所有的Hard Link都刪除。若是在上例中我们使用Hard Link,则其最后的档名部份並不会出现「->」的符号而且系统会以一般档案使用的白色来显示。

[root@nsl root]# ln /test1/file1 /test3/file1.ln
[root@nsl root]# ls -l /test3

总计 8
-rw-r--r-- 2 root root 0 11月 3 10:53 file1.ln
.........

注意:
Hard Link必须建立在同一个磁区中,而且不能使用在目錄上,但Soft Link则可以跨越磁区,同时也可运用在档案和目錄。

▓ 检视档案內容 - cat
熟悉DOS与Windows指令的使用者应该都了解「type」指令的用法,它是用来显示档案的內容,而Linux中的「cat 」(Concatenate)指令除了具备「type」指令的基本功能外,还包括由键盘读取资料、将多个档案合併,以及其他的功能。假设要检视 /etc/passwd档案的內容,
则可输入以下的指令:

[root@nsl root]# cat/etc/passwd
root: x : 0 :0 : root : /root: /bin/bash
bin : x : 1 : bin : /bin : /sbin/nologin
daemon : x : 2 : 2 : daemon : /sbin : /sbin/nologin
adm : x : 3 : 4 : adm : /var/adm : /sbin/nologin
...........

您可以利用cat指令直接在键盘中输入內容,並且将內容储存为档案。假设要在键盘中输入一些资料,並将这些资料存放在 /test1 目錄中,同时使用file2.txt的档名,则可输入以下的指令:

[root@nsl root]# cat> test1/file2.txt
I Love Linux!
It is a very good O.S. → 在此必须按一次 Enter钮
→ 按Ctrl+C 以结束输入工作

上例中的「->」表示Linux中的「导向」,这是很重要的一项功能,我们将在稍后的小节中介绍。在输入完毕之后按Ctrl+C以结束输入工作,但须注意一鲇,在输入最后一行后必须按一次Enter钮,否则最后一行的內容不会显示出来。

若是显示的內容很冗长,此时您可以加入「-b」参数,则系统会在每一行(空白行除外)前加入编号以利辨识。

[root@nsl root]# cat -b /test1/file2.txt
1 I Love Linux!
2 It is very good O.S.

您也可以同时将多个档案內容合併显示出来,只要将每个档案的档名都输入指令中,以下的范例是将 /testl/filel.txt、/test1/file2.txt和 /testl/file3.txt三个档案內容同时显示出来:

[root@nsl root]# cat /test1/file1.txt/test1/file2.txt/test1/file2.txt

若要将多个档案內容合併为一个新的档案,例如希望将 /testl/filel.txt和 /testl/file2.txt的档案內容合併为new.txt,则可输入以下的指令:

[root@nsl root]# cat /test1/file1.txt/test1/file2.txt> /test1/new.txt

▓ 一页一页显示档案內容 - more
相信各位在使用cat指令检祝文字档案內容时,一定会经常遇到一个问题,那就时档案內容太长,往往只能看到最后一页的內容,这实在是非常的不便,要解決这个问题,可以使用「more 」指令,它可以将档案內容以一次一页(或一行)的方式来显示,例如我们要逐页检视
/etc目錄中的imrc档案內容,则可输入以下的指令:

[root@nsl root]# more /etc/imrc

#####################################
# Config file for lmlib #
#####################################


在输入上述的指令后,系统会开啟该档案的第一页內容,並且在视窗下方出现类似「--More-- (19%)」的讯息,它表示目前显示的內容为整个档案的19% (这个数字依档案的大小不同会有不同)。若您此时按一下空白键(Space),则整个画面会显示下一页的內容,如果按的是Enter键,则只会向下多显示一行的內容。

若是档案內容包含许多行,而您已知需要的讯息在第几行的位置,此时可以使用「+行数」的参数来快速到达该行,例如要显示档案中由第9页起的內容,则可输入以下的指令:

[root@nsl root}# more +9 /etc/imrc

more另一个很有用的参数是「+/字串」,它的功能是帮助您在档案中寻找出某个字串,然后由该页开始显示,例如我们要显示档案中第一个do字串出现的页次及之后的內容,您可以输入以下的指令:

[root@nsl root]# more +/do/etc/imrc

▓ 互动式操作显示档案內容 - less
less指令的功能与more很相似,但是less具有更高的互动能力,您可以使用方向键来控制浏览的上下左右画面,並且可以使用热键(HotKey)来执行特定的功能,例如按「H」键会出现線上使用說明,而「Q」键可以离开浏览模式。

以下是以less指令检视 /etc目录中imrc档案内容的方法:

[root@nsl root]# less/etc/imrc

▓ 辨识档案类型 - file
file指令可以帮助我们在Linux档案系统中,辨识许多种类的档案类型,若为文字档,它会区分不同的文字档,例如ASCII、English和International等,如果是执行档,则可再细分为ELF、Bourne-Again Shell Script、Bourne Shell Script等类型,以及其他的类型如:符号连结档、图形档、备份档和压缩档等。

以下是利用file指令检视 /etc目錄下所有档案类型的部份內容,在讯息结果的左侧表示档案名称,而右侧则为对应的档案类型:



▓ 输出档案內容前面与后面的部份 - head和tail
有时开啟一份数十页的档案时,您可能只需要浏览最前面的部份,此时使用cat指令就不是很适合,因为一下子出现太多的內容反而会令人无从找起。为了避免这个问题,可以使用head指令,如果沒有加上任何参数,head指令只会显示档案的前10行,但也可以用「-行数」
的参数来指定显示的行数,以下是显示 /usr/share/magic档案前3行內容的范例:



和head指令相反的指令是「tail」指令,它可以指定显示档案內容的最后行数,例如要显示/usr/share/magic档案的最后3行內容,则可输入以下的指令:



和head指令不同的是,您可以在tail指令中使用「+行数」的参数来指定由第几行显示至档案结尾的內容,以下的范例表示显示由 /etc/passwd档案的第5 1行到结尾內容的指令用法:




Linux档案系统管理(第三篇)


1-5 档案权限基本观念

每一个Linux档案都具有四种存取权限:可读取(r, Readable)、可写入(w, Writable)、可执行(X, eXecute)和无权限( - )等。管理员必须依据使用者的需求,来授予不同的权限,而且使用者最多可被授予三种的权限。您可以利用「ls -l 」的指令来检视该档案或目錄的使用权限,它是以显示资料的第一个栏位为準。在第一个栏位中是由10个字元所组成,以下是一个此栏位的范例:



在以上的范例中,第一位字元与存取权限无关,它是表示此档案的形态:「-」表示档案,「d」表示目录,而「l」表示连结档案。 而其他的9 个字元共分为三组的存取权限组合:

◆ 字元2、3、4表示此档案拥有者的存取权限,有时我们也简称此权限为u (User)的权限。

◆ 字元5、6、7表示此档案拥有者所属群组成员的存取权限,例如此档案拥有者属於 admin j群组’而此群组中有10个成员,则表示这10个成员都拥有此处指定的权限,有时我们也简称此权限为g (Group)的权限。

字元8、9、10表示此档案拥有者所属群组之外的使用者存取权限,行时我们也简称此权限为o (Other)的权限。

注意:
这9 个字元的权限总和有时我们也简称为 a (All)的权限。

有了以上的基本观念后,接下来我们继续讨论有关每个字元的代表意义,这9个字元依据权限种类的不同,也分为三种类型:

◆ 字元2、5、8表示「读取」的权限,若是要授予读取的权限,则可在这三个字元中输入「r」值,若是不允许读取则输入「-」。

◆ 字元3、6、9表示「写入」的权限,若是要授予写入的权限,则可在这三个字元中输入「w」值,若是不允许写入则输入「-」。

◆ 字元4、7、10表示「执行」的权限,若是要授予执行的权限,则可在这三个字元中输入「x」值,若是不允许执行则输入「-」。



以上的說明希望读者务必研究清楚,否则接下来的內容可能会令您感到很困感。我们可以稍为整理一下以上的內容,因为这9个字元分別指定三组不同人员的存取权限(字元2、3、4属於拥有者,字元5、6、7属於群组,字元8、9、lO属於其他人员),而且这9个字元也分成
三种不同的存取类型(字元2、5、8属於读取权限,字元3、6、9属於写入权限,字元4、7、10属於执行权限)。因此,综合这些观念,这9个字元个別的意义如下表所示:




截王目前为止,读者应该可以完全了解档案存取权限的意义,以及运用的方法,现在再重新解读以上范例(-rwxr-xr-x)的代表权限,您应该可以清楚了解以下的意义:

◆ 这是一个档案

◆ 拥有者被授予读取,写入和执行的存取权限

◆ 群组被授予读取和执行的存取权限

◆ 其他人员被授予读取和执行的存取权限

如果要检视目前使用者的使用者ID (uid)和所属群组ID (gid),则需使用「id 」指令:

[jack@nsl jack] $ id
uid=500(jack) gid=500(jack) groups=500(jack)

▓ 档案权限修改- chmod
在档案建立时系统会自动设定存取权限,但若是这些预设权限无法适合企业环境的需求,此时可以利用「chmod」(Change Mode)指令来修改存取权限。

通常在权限修改时,允许使用二种方式来表示权限类型:数字表示法和文字表示法,这二种表示法各有其优鲇,您可以依习惯来选择。

◎ 以数字表示法修改存取权限
所谓数字表示法是指将读取(r),写入 (w) 和执行(x) 分別以4、2、l来代表,沒有授予的部份就表示值为0,然后再把所授予的权限相加而成,以下是几个示范的例子:



以数字表示法来表示权限虽然比较简单,但是可读性较差,您必须经过简单的換算才可了解原始的权限,下表是以数字表示法可能出现的数字及权限对应,提供读者参考:



了解这种表示法后,就可以开始利用chmod指令来变更权限。本书以/testl/filel.txt档案为例,如果希望拥有者和群组成员都被授予读取和写入的权限,而其他人只能读取该档案,则我们知道我们应该将权限设为「rw-rw-r--」而此权限的数字表示法为664,因此您可以输入以下的指令来设定权限並在设定后检查是否正确:

[root@nsl root]#chmod 664 /test1/file1
[root@nsl root]#ls -l /test1/file1
-rw-rw-r-- 2root root 180 11月 3 10:53 /test1/file1

◎ 以文字表示法修改存取权限
权限的另一种表示法是文字表示法,它不是利用数字来表示,所以看起来较复杂,但因为可读性较佳,所以许多人也习惯利用此法来进行权限的设定。使用权限的文字表示法时,系统使用以下4 种字母来表示不同的使用者:

● 拥有者 - u (User)
● 群组–g (Group)
● 其他人员 –o (Other)
● 所有人- a (All)

而权限仍然使用3种的分类法

● 读取- r (Read)
● 写入- w (Write)
● 执行- x (eXecute)

和数字表示法不同的是,文字表示法在设定权限时不仅可以重新指定(用数字表示法的作法相同),也可以由原来的权限来增加或減少权限,它是利用以下三个运算子来执行:



本书使用以下的范例来說明,假设/testl/filel.txt目前的权限如下所示:

[root@nsl root]#ls -l /test1/file1
-rw-r--r-- 2root root 180 11月 3 10:53 /test1/file1

若希望将此权限修改为以下的权限:

-rwxrw---- 2root root 180 11月 3 10:53 /test1/file1

由以上的范例要求,我们可以了解权限的变动如下:

● 拥有者(u)的权限由「rw-」变为「rwx」:增加了执行 (x) 的权限。

● 群组(g) 的权限由「g」变为「rw-」增加了写入(w) 的权限。

● 其他人员 (o) 的权限由「r- -」变为「- - -」:減少了读取(r)的权限。

所以你可以输入以下的指令:

[root@nsl root]# chmod u+x, g+w, o-r/test1/file1.txt 或
[root@nsl root]# chmod u=rwx, g=rw /test1/file1.txt

注意:逗点 (,) 前后不可接空白,否则无法执行指令。

以上就是利用数字和文字表示法来修改档案权限的作法,您可以依照个人的操作习惯来选择最适合的方式,笔者建议最好是能熟悉某种表示法,以避免因同时使用二种表示法而造成的混淆。

▓ 目錄权限修改
虽然Linux目錄也是属於档案的一种,而且目錄的权限、观念,以及设定大多与档案相同,但是其代表的意义卻大不相同。例如在目錄的层级並沒有所谓的「执行」操作,但是目錄仍沿用档案所使用的四种权限名称:可读取(r,Readable),可写入(w,Writable)、可执行(x,
eXecute) 和无权限(- )。在目錄中使用的四种权限代表意义如下:

● 可读取 (r):列出目錄中的內容,与ls的功能相似。
● 可写入 (w):可在目錄中新增、刪除和修改档案。
● 可执行 (x):可以使用cd指令来切換至此目錄
● 无权限 (-):沒有任何此目錄的存取权限

要修改目錄的权限和修改档案权限相同,都是使用「chmod」指令,但是不同的地方是,需使用万用字元 (*) 来表示目錄中的所有档案。例如要同时将/testl目錄中的所有档案存取权限,设定为所有人都可读取及写入,则应该使用以下的指令:

[root@nsl root]# chmod 666 /test1/*或
[root@nsl root]# chmod u=rw,g=rw,o=rw /test1/*

如果目錄中简包含其他的子目錄,则必须使用「-R 」(Recursive)参数来同时设定所有档案及子目錄的权限,若是如此,以上的范例应改为以下的指令输入:

[root@nsl root]# chmod -R 666 /test1/*或
[root@nsl root]# chmod -R u=rw,g=rw,o=rw /test1/*

▓ 变更档案与目錄拥有者- chown
通常档案或目錄的拥有者就是此档案或目錄的建立者,若需要变更档案或目錄拥有者,首先需确定是否具有root等级的权限,也就是說此项权限只授予同在一个管理员群组中的成员。

假设您要将/testl/filel.txt复制到使用者jack的主目錄 一/home/Jack,在复制之后您会发现此档案的拥有者仍然是您(root)。

[root@nsl root]# cp/test1/file1.txt/home/jack/file1
[root@nsl root]# ls -l/home/jack/file1.txt
-rw-r--r-- 1 root root 58923 11月 3 10:53/home/jack/file1

此时可以使用chown(Change Owner)指令来将filel.txt的拥有权授予jack:

[root@nsl root]# Chown jack/home/jack/file1.txt
[root@nsl root]# ls -l/home/jack/file1.txt
-rw-r--r-- 1 jack root 58923 11月 3 12:53/home/jack/file1.txt

由以上的范例中可以发现,filel.txt档案的拥有者已经成功的变更为iack,但是授予存取权限的群组仍然是先前的群组(root),所以我们可以利用chown的指令来同时变更拥有存取权限的使用者和群组。假设我们要将filel.txt的存取权限授予使用者jack和群组users,则可使
用以下的指令:

[root@nsl root]# Chown jack:users/home/jack/file1
[root@nsl root]# ls -l/home/jack/file1.txt
-rw-r--r-- 1 jack users 58923 11月 3 14:29/home/jack/file1

如果只需要变更拥有存取权限的群组,您也可以利用「chgrp」(Change Group)指令,它的使用语法与chown类似:

#chgrp 群组名称 档案或目录名称

▓ 指定档案的预设权限遮罩一umask
所谓权限遮罩是由4个8进位的数字所组成,如果将现有的权限減掉权限遮罩后,即可產生建立档案时预设的权限。一般而言,新建档案的预设值是0666,新建目錄的预设值是0777,如果将权限遮罩设为0002,则每个新增的档案预设权限即为0666 – 0002 = 0664,而目錄的预设权限则为0777 – 0002 = 0775。

您可以直接输入「umask」指令来检查目前的预设权限遮罩,或是输入「umask权限遮罩」的格式预设权限遮罩。

[root@nsl root]# umask
0022 →预设权限遮罩
root@nsl root]# umask 0002 →指定预设权限遮罩
[root@nsl root]# umask
0002

利用umask的方式来指定预设权限遮罩,可以避免新增存取权限过大的档案或目錄,但是決定预设权限遮罩前需考量整体的安全性等级,以符合企业的实际需求。

1-6 I/O 重新导向及管線

I/O 重新导(Redirection)向以及管線是Linux系统中特有的观念,所谓I/O重导是指将指令执行的结果重新导出到其他设备或档案(它是以 「>」 或 「>>」 来表示),或是重新导入到其他设备或档案(它是以「<」来表示),而管線是指将某个指令的输出结果传送到另一个指令来当成输入,它的代表符号是「|」。

▓ I/O 重新导向

通常Linux中的标准输入及输出(I/O)共有三种形态:

● 标准输入 (Standard input,stdin)
● 标准输出 (Standard output,stdout)
● 标准错误输出(Standard Error,stderr)

在一般情形下,标準输入(stdin)是指由键盘将资料输入,但是Linux也接受由档案为输入的来源,例如在「cat ./file.txt」指令中,file.txt就是标準输入。

标準输出(stdout)通常是指将指令结果输出到终端机或萤幕,例如「cat ./file.txt」的指令结果就是标準输出。

而标準错误输出(stderr)是指执行指令发生错误时,输出到萤幕的讯息,例如在以上的范例中,如果file.txt並不存在,则系统出现的「cat :/file.txt :沒有此一档案或目錄」讯息就是标準错误输出。虽然标準输出和标準错误输出都是将讯息显示到萤幕,但是它们在意义上並不相同,其中最大的原因就是重新导向的方式不同。

◎ 输出导向 (>)
一般我们在Linux执行任何指令或程式,预设都是将结果输出到萤幕,但是有时我们会希望将结果储存到一个档案中,以方便资料的收集,此时便可使用输出导向的功能。例如希
望将 /etc目錄下的档案资料结果储存到/testl/etc.txt档案中,则可使用以下的指令:

[root@nsl root]# ls -al /etc > /test1/etc.txt

在执行上述指令后,系统並不会出现任何资料,因为所有原来会出现的输出內容都已重新导向到/testl/etc.txt档案中,同时也不需预先建立/test1/etc.txt档案中,因为若是此档案不存在,则在重新导向时,系统会自动產生指令中指定的档案。

利用我们先前介绍过的「cat」指令,然后再配合重新导向的使用,就可以成为一个简单的文字编辑器。您可以试著输入以下的指令:

[root@nsl root]#cat > /test1/editor.txt
I Love Linux !! →按Enter键
→按Ctrl+C就可结束档案的编辑

在输入之后,因为並末提供cat指令任何参数,所以游标会停留在下一行的开头等待输入,此时便可输入希望记錄的內容,然后在输入完毕后先按口逊钮(否则最后一行不会储存),再按Ctrl+C就可结束档案的编辑,系统並会将此內容以editor.txt档名加以储存。

◎ 附加输出导向(>>)
相信大家对於以上介绍的重新导向至此应该有基本的认识,但是此处会出现一个问题一若是重新导向的档案原来已存在,那我们在输入新的资料后会產生什麼结果?答案是所有旧的资料都会消失,而以新的內容取代。 想必这是许多人所不愿意乐见的,因为旧有的资料常常包含许多有价值的內容,所以在硬碟空间足夠的条件下,最好能保存先前的资料。

为了解決这个问题,Linux提供了「附加输出导向」的功能,它的用法及功能与输出导向很类似,唯一不同的是,新输入的资料会附加(Append)在原有內容之后,同时它的表示符号为「>>」。 以下我们利用一个范例来說明使用输出导向和附加输出导向对原始档案所產生的影响,我们假设原有的档案/testl/origin.txt中只有一行文字This is the original words inthe file!



◎ 输入导向(<)
输出导向的观念和输入导向刚好相反,前者是将指令或程式的执行结果透过萤幕或档案来输出,但是后者卻是将键盘或档案提供给指令来执行,有时这个观念常会令人困惑,我们先来看以下的范例:

[root@nsl root]# cat file1
The content of file1 !

[root@nsl test1]# cat < file1
The content of file1 !

在上述的范例中,二者的输出结果完全相同,但是在执行的程序上卻完全不同。 在「cat filel 」指令中,cat的标準输入档案为filel,因此cat在收到输入档案后,会执行它的功能而将filel的內容显示到萤幕。但是在「cat < filel 」指令中,cat並沒有任何的标準输入档案,而是利用「输入重导(<)」的功能来将filel传给cat当成标準输入档案,最后才将filel的內容显示到萤幕。

由以上的二个范例我们会感觉似乎输入重导並沒有太大的功能! 的确,在可以接受参数的指令上,输入重导並沒有很大的用处,但是在无法接受参数的指令上就相当有用,例如「patch」。

[root@nsl test1]# patch patch-2.4.8-2
[root@nsl test1]# patch < patch-2.4.8-2

因为patch指令並无法接受参数,所以在上述的第一行指令输入后,patch指令会将patch-2.4.8-2视为参数,但因为它无法接受参数,所以画面不会有任何的反应,但若是利用输入重导 (< ) 来将patch-2.4.8-2档案输入给patch,则系统就会开始执行原始码更新的动作。

▓ 附加输入导向 (<<字串)
附加输入导向可以让您自行定义一个字串,例如quit,系统在收到此字串前,会持续的将资料输入档案,这个功能经常使用在电子邮件系统中。以下是一个传送电子邮件的范例,假设我们定义的字串是「Finish」您可以继续输入邮件內容,当输入「Finish」字串后,系统便会结束邮件的编辑並且寄出。

[root@nsl root]# mail [email protected] <
相关阅读 更多 +
排行榜 更多 +
滑动贴合3d

滑动贴合3d

休闲益智 下载
红蓝人冰火世界

红蓝人冰火世界

休闲益智 下载
阿凡提跑酷最新版

阿凡提跑酷最新版

冒险解谜 下载