文章详情

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

Linux快速入门之Linux文件系统

时间:2006-08-11  来源:ming_nuaa

1.1文件系统的组织结构

Linux的文件系统组织结构如下:

/ Linux

文件系统的入口,也是处于最高一级的目录;

/bin

基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。

/boot

Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录。一般情况下,GRUB或LILO系统引导管理器也位于这个目录;

/dev

设备文件存储目录,比如声卡、磁盘... ...

/etc

系统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;

/home

普通用户家目录默认存放目录;

/lib

库文件存放目录

/lost+found

在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。

/media

即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,类似cdrom 的目录。这个只有在最新的发行套件上才有,比如Fedora Core 4.0 5.0 等。可以参看/etc/fstab的定义;

/misc

    常用于挂载文件系统,本地或远程。

/mnt

这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看/etc/fstab中怎么定义;比如光驱可以挂载到/mnt/cdrom。

/opt

表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在Fedora Core 5.0中,OpenOffice就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过

./configure --prefix=/opt/ 自定义目录。

/proc

操作系统运行时,进程信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。

/root

Linux超级权限用户root的根目录;

/sbin

大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin, /usr/X11R6/sbin或/usr/local/sbin目录是相似的;

/tmp

临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。

/usr

这个是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多的文件和目录。当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。

/usr目录下包括涉及:

字体目录/usr/share/fonts ,

帮助目录 /usr/share/man或/usr/share/doc,

普通用户可执行文件目录/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,

超级权限用户root的可执行命令存放目录,如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;

还有程序的头文件存放目录/usr/include。

/var

这个目录的内容是经常变动的,看名字就知道。我们可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地;

下面再补充一下一些比较重要的目录的用途;

/etc/init.d

这个目录是用来存放系统或服务器以System V模式启动的脚本,这在以System V模式启动或初始化的系统中常见。比如Fedora/RedHat;
/etc/xinit.d

如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。有些系统没有这个目录,比如Slackware,有些老的版本也没有。在Rehat/Fedora中比较新的版本中存在。

/etc/rc.d

这是Slackware发行版有的一个目录,是BSD方式启动脚本的存放地;比如定义网卡,服务器开启脚本等。

/etc/X11

是X-Windows相关的配置文件存放地;

 

比如下面的例子:

[root@localhost ~]# /etc/init.d/sshd start 注:启动sshd服务器
[root@localhost ~]# /etc/init.d/sshd stop 注:停止sshd服务器
启动 sshd: [确定]

这就是典型的sshd 服务器 System V模式启动脚本,通过这运行这个脚本可以启动sshd服务器了。

/usr/bin

这个目录是可执行程序的目录,普通用户就有权限执行;当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。比如安装gaim软件包时。相似的目录是/usr/local/bin;有时/usr/bin中的文件是/usr/local/bin的链接文件;

/usr/sbin

这个目录也是可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行;相似目录是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;

/usr/local

这个目录一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。这个目录下面有子目录。自己看看吧。

/usr/lib

和/lib 目录相似,是库文件的存储目录;

/usr/share

系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,是用户都共用的吧。/usr/share/doc和/usr/share/man帮助文件,也是共用的吧;

/usr/src

是内核源码存放的目录,下面有内核源码目录,比如 linux 、linux-2.xxx.xx 目录等。有的系统也会把源码软件包安装在这里。比如Fedora/Redhat,当我们安装file.src.rpm的时候,这些软件包会安装在/usr/src/redhat相应的目录中。另外Fedhat 4.0 /5.0的内核源码包的目录位于/usr/src/kernels目录下的某个目录中(只有安装后才会生成相应目录);

/var/adm

软件包安装信息、日志、管理信息等,在Slackware操作系统中是有这个目录的。在Fedora中好象没有。
/var/log

系统日志存放,分析日志要看这个目录的东西;
/var/spool

打印机、邮件、代理服务器等假脱机目录;

1.2 Linux文件系统被破坏时的处理方法

当文件系统被破坏时,如果使用的是ext2fs类型的文件系统,就可从软盘运行e2fsck命令来修正文件系统中被损坏的数据。对于其他类型的文件系统,可以使用相应的fsck命令。当从软盘上检查文件系统时,最好不要mount安装。

注:文件系统被破坏的常见原因是超级块被损坏,超级块是文件系统的“头部”。它包含文件系统的状态、大小和空闲磁盘块等信息。如果损坏了一个文件系统的超级块(例如不小心直接将数据写到了文件系统的超级块分区中),那么系统可能会完全不识别该文件系统,这样也就不能安装它了,即使采用e2fsck命令也不能处理这个问题。

不过,ext2fs类型的文件系统将超级块的内容进行了备份,并存放于驱动程序的块组(block group)边界。可以用如下的命令通知e2fsck使用超级块的备份:

  # e2fsck -b 8193是指文件系统所在的分区,-b 8193选项用于显示存放在文件系统中的8193块的超级块备份数据。

1.3 Linux文件系统的反删除方法

    作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的。
1.Ext2文件系统结构的简单介绍
在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个文件数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和三级间接块。
2. 恢复被误删文件的方法
大多数Linux发行版都提供一个debugfs工具,可以用来对Ext2文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。
首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)
mount –r –n –o remount /usr
-r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:
fuser –v –m /usr
如果没有什么重要的进程,用以下命令停掉它们:
fuser -k –v –m /usr
然后就可以重新挂载这些文件系统了。
如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:
mount –r –n /dev/hda1 /mnt/had
然后就可以执行debugfs:(假设Linux在 /dev/hda5)
#debugfs /dev/hda5
就会出现debugfs提示符debugfs:
使用lsdel命令可以列出很多被删除的文件的信息:
debugfs:lsdel
debugfs: 2692 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
…………………………………………………………………………………
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001
debugfs:
列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:
可以先看看文件数据状态:
debugfs:stat <196829>
Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 0 Group: 0 Size: 149500
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 38
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 2001
atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001
dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001
BLOCKS:
594810 594811 594814 594815 594816 594817 ………………………………….
TOTAL: 38
然后就可以用dump指令恢复文件:
debugfs:dump <196829> /mnt/hda/01.sav
这样就把文件恢复出来了。退出debugfs:
debugfs:quit
另一种方法是手工编辑inode:
debugfs:mi <196829>
Mode [0100644]
User ID [0]
Group ID [0]
Size [149500]
Creation time [0x31a9a574]
Modification time [0x31a9a574]
Access time [0x31a21dd1]
Deletion time [0x31a9a574] 0
Link count [0] 1
Block count [38]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [594810]
…………………………….
Triple Indirect Block [0]
使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:
debugfs:quit
然后用fsck检查/dev/hda5
fsck /dev/hda5
程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。
Now all O.K. Good Luck.

1.4 Linux分区方案

   硬盘的分区由主分区、扩展分区和逻辑分区组成;所以我们在对硬盘分区时要遵循这个标准;主分区(包括扩展分区)的最大个数是四个,主分区(包含扩展分区)的个数硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(GRUB,LILO,NTLOARDER等)和分区表记录。其中扩展分区也算一个主分区;扩展分区下可以包含更多的逻辑分区;所以主分区(包括扩展分区)范围是从1-4,逻辑分区是从5开始的;

关于一个磁盘的分区,一个磁盘应该有四个主分区,其中扩展也算一个主分区;存在以下分配方案:

    1)分区结构之一:四个主分区,没有扩展分区;

    [主|分区1] [主分|区2] [主|分区3] [主|分区4]

    这种情况,如果您想在一个磁盘上划分五个以上分区,这样是行不通的;

    三个主分区 一个扩展分区;

[主|分区1] [主|分区2] [主|分区3] [扩展分区]
                                 |
           [逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] ... ...

    这种情况行得通,而且分区的自由度比较大;分区也不受约束,能分超过5个分区;这只是举一个例子;

    2)最合理的的分区方式;

    最合理的分区结构:主分区在前,扩展分区在后,然后在扩展分区中划分逻辑分区;主分区的个数+扩展分区个数要控制在四个之内;比如下面的分区是比较好的;

[主|分区1] [主|分区2] [主|分区3] [扩展分区]
                                    |
           [逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] ... ...

[主|分区1] [主|分区2] [扩展分区]
                         |
   [逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] ... ...

[主|分区1] [扩展分区]
              |
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] ... ...

    最不合理的分区结构:主分区包围扩展分区;比如下面的;

[主|分区1] [主|分区2] [扩展分区] [主|分区4] [空白未分区空间]
                         |
    [逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] ... ...

    这样 [主|分区2] 和 [主|分区4] 之间的 [扩展分区] 是有自由度,但[主|分区4]后的[空白未分区空间]怎么办?除非把主分区4完全利用扩展分区后的空间,否则您想在主分区4后再划一个分区是不可能的,划分逻辑分区更不可能; 虽然类似此种办法也符合一个磁盘四个主分区的标准,但这样主分区包围扩展分区的分区方法实在不可取;

推荐的分区方案

尽管可以将Red Hat Linux装在一个单一的大分区中,但更好的主意是将它分开. 综合了单一分区的简单性和多分区的灵活性,推荐以下配置:

注意: 如果想安装Red Hat Linux的所有软件包, 必须使用较大的分区尺寸。

一个交换分区 -- 交换分区用来支持虚拟内存。交换分区一般是内存的两倍大小。

一个根分区 -- 根分区是/(根目录)所在地. 它只需要启动系统所须的文件和系统配置文件. 对于大多数系统50MB到100MB的根分区可以工作的很好.

一个 /usr 分区 -- /usr 是Red Hat Linux系统的许多软件的所在的地方. 根据您交换安装的包的数量, 这个分区应该在300MB到700MB之间. 如果可能, 将最大 的空间用于/usr分区. 任何您以后将要安装的基于RPM的包都会使用比其他 分区更多的/usr空间.

一个 /home 分区 -- 这是用户的home目录所在地; 它的大小取决于您的Red Hat Linux 系统有多少用户, 以及这些用户将存放多少数据.

[下面这个分区只适用于Red Hat Linux/Alpha的安装.]

一个MILO分区 -- 使用MILO启动系统的Alpha用户需要创建一个1.5MB的DOS分区, 在安装结束时MILO可以拷贝到这个分区.。

另外, 用户环境可能会要求创建一个和多个以下的分区:

一个 /usr/local 分区 -- 一般, /usr/local用来存放与其余Red Hat Linux系统 不同的软件, 如不是RPM包的软件. 它的大小取决于准备存放的这些软件的数量.

一个 /usr/src 分区 --  Red Hat Linux系统中, /usr/src通常存放两样东西:

Linux内核源程序 -- Linux内核的所有源程序都放在这, 新的内核也在这创建. 目前, 内核源程序大概30MB。注意:可能需要更多的空间来创建内核, 或保存几个不同版本的内核.

RPM包的源程序 -- 如果安装了包的源程序, 文件将存放在这. 注意:除非特别指定, 创建包也将使用在这的一个'创建目录'. here.

同样, 这个分区的尺寸也取决于将在这安装的软件的数量。

一个 /tmp 分区 -- 就象它的名字, /tmp分区用来存放临时文件。对于一个大型的, 多用户的系统或者网络服务器, 专门创建一个/tmp分区是一个好主意. 对于一个单用户的工作站, 就不必专门创建一个/tmp分区了。

一个 /var 分区 -- Red Hat Linux系统将把日志写在/var/log。 打印 队列的文件通常写在/var/spool。 这只是两个写在/var的例子。 除非特别配置, /var将是根文件系统的一部分, 通常不占很多空间。 如果系统有很多打印, 邮件, 或者日志, 可以考虑专门创建一个/var分区。 一般来讲, 只有多用户或者服务器才需要专门的/var分区。

一个 /boot 分区 -- 这里提到的分区多数是针对大的系统,这个分区则对空间很少的小的系统很有用。所有LILO启动需要的文件都在/boot目录。因为/boot中的这些文件(包括Linux内核)占 1M空间, 如果很难为LILO要用的根分区安排100MB空间, 可以只用5-10MB (通常不用那么多)的分区来存放/boot。 虽然仍需要创建一个根分区, 但这时它可以在系统的任何地方 -- BIOS的限制仅适用含有/boot的分区。

1.5 Linux下加挂文件系统

在使用Linux的过程,常常使用虚拟文件系统VFS,通过VFS可以直接存取其它已被内核支持的各种文件系统,用起来就像是在普通的 Linux的ext系列文件系统一样。只是有一些如NTFS需要重新编译内核才能支持。

Linux下加挂一个文件系统使用的是mount命令,用man mount命令可以得到命令参数的详细解释。下面就来介绍一下在几种情况下以命令行方式加挂文件系统的具体方法:

1.加挂FAT32文件系统

最简单的用法:    mount /dev/hda6 /mnt/d   

其中,/dev/hda6是笔者Windows的D盘,/mnt/d是目录加挂点。Linux会识别到/dev/hda6分区的文件系统类型是什么,然后加挂。当然也可以指定分区的文件系统类型,命令如下:

mount -t vfat /dev/hda6 /mnt/d

在实际中操作中,直接加挂一个windows的分区,中文的文件名和目录名会出现乱码,为了避免这种情况可以指定字符集,命令如下:

mount /dev/hda6 /mnt/d -o codepage=936,iocharset=cp936

mount -t vfat /dev/hda6 /mnt/d -o codepage=936,iocharset=cp936   
2.加挂NTFS文件系统

在目前多数的Linux版本上,需要重编译Linux核心才能,加挂NTFS分区(参阅http://www.linux-ntfs.org/)。核心支持NTFS后,可以用以下命令加挂:

mount -t /dev/hda2 /mnt/c

同样对于中文的文件名和目录名会出现乱码的问题可以指定字符集,不过和加挂vfat分区不同,实际中用以下命令是可行的:

mount -t ntfs -o iocharset=cp936 /dev/hda2 /mnt/c -r

mount -t ntfs -o iocharset=cp936,rw /dev/hda2 /mnt/c

3.加挂U盘/移动硬盘上的文件系统

现在使用U盘的人越来越多了,其实在Linux下使用U盘也非常简单,Linux对USB设备有很好的支持,在插入U盘后,U盘被识别为一个SCSI盘,通常您用以下命令就能加挂U盘上的文件系统

mount /dev/sda1 /usb

同样对于中文的文件名和目录名会出现乱码的问题可以指定字符集,命令类似于上面对FAT32介绍的:

mount /dev/sda1 /usb -o pagecode=936,iocharset=cp936

4.加挂Linux系统通过samba共享出来的目录

利用samba共享出来的目录其实很难说其原来是哪种文件系统,不过这一点不重要,只要它对用户是透明的就好啦。加挂时,我们指定类型为smbfs,在加挂samba共享的分区时,也会出现中文的文件名和目录名乱码情况,可以用以下命令加挂:

mount -t smbfs -o

username=terry,password=terry,codepage=936,iocharset=cp936

//terry-linux/terry /mp3/

mount -t smbfs -o

username=terry,password=terry,codepage=936,iocharset=cp936

//192.168.100.228/terry /mp3/

注意:可以不直接写password=terry这个参数,系统界时会要你输入密码,这样就可以防止有人直接看到你的密码。视具体情况而定,-o后面的参数可以对应增减。

5.加挂Window系统共享出来的目录

在局域网中,常常需要去访问其它Windows系统共享出来的目录。在Linux下,安装了samba后就可以使用samba中带的命令来访问Windows机器的共享资源。

用smbclient来列出Windows机器的共享资源

smbclient -L 192.168.100.111

根据上面所列出Windows的共享资源后,可以选择需要加挂到本地Linux中去的Windows的共享资源,然后使用smbmount或mount来加挂,请参照下面几条命令:

smbmount //192.168.100.111/public /public/

mount //192.168.100.111/d /mnt/cdrom -o username=terry (这样要在命令行输入密码的)

mount //192.168.100.111/d /mnt/cdrom -o username=terry$1234 (这样则不必在命令行输入密码)

注:除了上面介绍的命令行方法,最好的方法就是使用其它的客户端,如LinNeighborhood、networkneighbours、ksmbshare等,请参考其它文章。

以上介绍的都是命令行的方式,每次使用时都要输入一次,如果你常常要加挂一些文件系统,想在启动时自动加挂应该怎样做呢?下面介绍两种方法:

方法1.

把加挂的命令放在/etc/rc.d/rc.local中。

方法2.

修改分区配置文件/etc/fstab,在启动时加挂文件系统,下面是我的/etc/fstab文件:

LABEL=/  /    ext3  defaults                  1 1

none    /dev/pts   devpts   gid=5,mode=620    0 0

LABEL=/home  /home    ext3    defaults      1 2

none      /proc    proc    defaults      0 0

none      /dev/shm   tmpfs    defaults      0 0

/dev/hda4   swap     swap    defaults      0 0

/dev/cdrom   /mnt/cdrom        iso9660

noauto,owner,kudzu,ro 0 0

/dev/hda2  /ntfs ntfs defaults,iocharset=cp936  0 0

/dev/hda6  /win  vfat  defaults,codepage=936,iocharset=cp936 0 0

//192.168.100.228/terry /mp3  smbfs  username=terry,password=terry,codepage=cp936,iocharset=cp936 0 0

注意最后三行:

倒数第四行,加挂我的C盘,NTFS格式的

倒数第三行,加挂我的D盘,FAT32格式的

倒数第二行,加挂的是我的局域网中另一台安装samba的Linux文件服务器上的一个目录。
相关阅读 更多 +
排行榜 更多 +
直升机射击

直升机射击

飞行射击 下载
空中王牌战斗最新版

空中王牌战斗最新版

飞行射击 下载
未来飞行汽车

未来飞行汽车

飞行射击 下载