`

[转]Linux文件系统介绍

阅读更多

 

 

    文件系统是 linux 的一个十分基础的知识,同时也是学习 linux 的必备知识。

    本文将站在一个较高的视图来了解linux 的文件系统, 主要包括了linux磁盘分区和目录、挂载基本原理、文件存储结构、软链接硬链接、和常见目录的介绍。相信有了这些知识对于深入的学习 linux 会有一定的帮助。 文章例子主要是基于 ubuntu发行版

    如有不对之处请大家多多指出。

1. Linux 磁盘分区和目录

  Linux 发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows 的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如: C D E F 等。

Linux 的文件结构是单个的树状结构 . 可以用 tree 进行展示。 Ubuntu 下安装 tree sudo apt-get install tree , 并可通过命令来查看。

每次安装系统的时候我们都会进行分区, Linux 下磁盘分区和目录的关系如下:

      任何一个分区都必须挂载到某个目录上。

      目录是逻辑上的区分。分区是物理上的区分。

      磁盘 Linux 分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。

      根目录是所有 Linux 的文件和目录所在的地方,需要挂载上一个磁盘分区。

以下是我们可能存在的一种目录和分区关系:



 图1:目录和分区关系

Q: 如何查看分区和目录及使用情况?

      fdisk 查看硬盘分区表

      df :查看分区使用情况

      du: 查看文件占用空间情况

Q:   为什么要分区,如何分区?

      可以把不同资料,分别放入不同分区中管理,降低风险。

      大硬盘搜索范围大,效率低

      磁盘配合只能对分区做设定

      /home /var /usr/local 经常是单独分区,因为经常会操作,容易产生碎片

 

2. Mount 挂载和 NFS 简介

挂载的概念 :当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为 挂载点( mount point ,这样才可以读取这些设备,而这些对应的动作就是 挂载 将物理分区细节屏蔽掉。用户只有统一的逻辑概念。所有的东西都是文件。 Mount 命令可以实现挂载:

mount [-fnrsvw] [-t vfstype] [-o options] device dir

Q :所有的磁盘分区都必须被挂载上才能使用,那么我们机器上的硬盘分区是如何被挂载的?

A :这主要是它利用了 /etc/fstab 文件。每次内核加载它知道从这里开始 mount 文件系统。每次系统启动会根据该文件定义自动挂载。若没有被自动挂载,分区将不能使用。 如下是我的 /etc/fstab 的定义,主要是根据装机的分区来的:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>

proc            /proc           proc    defaults        0       0

#/dev/sda1 被自动挂载到   /

UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 /               ext3    relatime,errors=remount-ro 0       1

# /dev/sda5 被自动挂载到分区 /home

UUID=c40f813b-bb0e-463e-aa85-5092a17c9b94 /home           ext3    relatime        0       2

#/dev/sda7 被自动挂载到 /work

UUID=0f918e7e-721a-41c6-af82-f92352a568af /work           ext3    relatime        0       2

# 分区 /dev/sda6 被自动挂载到 swap

UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none             swap    sw              0       0

 

Q :移动硬盘如何挂载?如何挂载一个新的分区?

移动硬盘有驱动模块会自动挂载,如果有个新硬盘,要先进行分区,并通过 mount 命令挂载到某个文件夹。如果要自动挂载则可以修改 /etc/fstab 文件 .

NFS 简介: NFS 相信在很多地方都有广泛使用,是一个非常好的文件共享方式。我们公司所使用的上传服务就是把文件上传到某台网络服务器上,中间就是通过 NFS 实现。

使用 NFS 客户端可以透明的地访问服务器端的文件。 NFS 也是通过 mount 来实现,底层是通过 NFS 通信协议实现。基本原理:


图2:NFS基本原理

 

Ubuntu 下面 Ubuntu 下的例子

服务端 :

$apt-get install nfs-kernel-server

vi /etc/exports 添加 nfs 目录 : /personal/nfs_share

10.1.60.34(rw,sync,no_root_squash)

$sudo exportfs -r

$sudo /etc/init.d/portmap start

$sudo /etc/init.d/nfs-kernel-server start

客户端 :

$sudo apt-get install nfs-common

$sudo mount 10.19.34.76:/personal/nfs_share ~/nfsshare 例子:

3. 文件类型

Linux 下面的文件类型主要有:

a)          普通文件 C 语言元代码、 SHELL 脚本、二进制的可执行文件等。分为纯文本和二进制。

b)          目录文件 :目录,存储文件的唯一地方。

c)          链接文件 :指向同一个文件或目录的的文件。

d)          特殊文件 :与系统外设相关的,通常在 /dev 下面。分为块设备和字符设备。

可以通过 ls –l, file, stat 几个命令来查看文件的类型等相关信息。

4.文件存储结构

Linux 正统的文件系统 ( ext2 ext3) 一个文件由目录项、 inode 和数据块组成。

目录项 : 包括文件名和 inode 节点号。

Inode :又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。

数据块 :文件的具体内容存放地。

 

 

Linux 正统的文件系统 ( ext2 3 ) 将硬盘分区时会划分出目录块、 inode Table 区块和 data block 数据区域。 一个文件由一个目录项、 inode 和数据区域块组成。 Inode 包含文件的属性 ( 如读写属性、 owner 等,以及指向数据块的指针 ) ,数据区域块则是文件内容。 当查看某个文件时,会先从 inode table 中查出文件属性及数据存放点,再从数据块中读取数据。

 

站在 2w 英尺视图,文件存储结构大概如下:


图3:文件存储结构2w英尺视图

 

其中目录项的结构如下 ( 每个文件的目录项存储在改文件所属目录的文件内容里 )



 图4:目录项结构
 

 

其中文件的 inode 结构如下( inode 里所包含的文件信息可以通过 stat filename 查看得到):

 

 

图5:inode结构

 

以上只反映大体的结构, linux 文件系统本身在不断发展。但是以上概念基本是不变的。且如 ext2 ext3 ext4 文件系统也存在很大差别,如果要了解可以查看专门的文件系统介绍。

5. 软连接、硬链接

软链接和硬链接是我们常见的两种概念:

硬连接 :是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中 [color=red] 任意一个 [/color] 其余的文件将不受影响。

软连接 : 也叫符号连接 , 他只是对源文件在新的位置建立一个“快捷(借用一下 wondows 常用词)”,所以,当源文件删除时,符号连接的文件将成为无源之水 -> 仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。

具体关系可以看下图:

 


图5:软链接和硬链接

 

从图上可以看出硬链接和软链接的区别:

1 :硬链接原文件和新文件的 inode 编号一致。而软链接不一样。

2 :对原文件删除,会导致软链接不可用,而硬链接不受影响。

3 :对原文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。

 

6. 文件目录管理命令

磁盘和文件空间

fdisk df du

文件目录与管理

cd pwd mkdir rmdir ls cp rm mv

查看文件内容

cat:
cat [file]
查看文件的内容。全程式concatenate的意思,将文件内容连续输出到屏幕上。第一行到最后一行显示。
tac:
tac [file]
和cat刚好相反 是从最后一行到第一行的方式查看。

cat有个比较不好的地方时当文件比较大时候没办法看清楚,这个时候可以用more或者Less命令。

more:
more [file]
如果使用grep或者find等命令时,可以配合使用more一页一页的查看。如果看到一半想退出,则敲入’q’即可退出。
less:
less [file]
less比more更有弹性,可以上下翻页。

如果只想读取文件的头几行或者文件的末尾几行,可以用head或tail.
head –n [file]:读取文件的前n行。
tail –n [file]:读取文件末尾n行。

以上命令都是用于查看字符文件,二进制文件出来的都是乱码,要看二进制文件的内容,可以用od命令,如查看一个MP3文件里面的内容:
od shijiemori.mp3

文件目录与权限

chmod chown chgrp umask

文件查找

which:
which [filename]
该命令用于查询通过PATH路径到该路径内查找可执行文件。
如:Which passwd:查找可执行文件passwd
whereis:
whereis [-bmsu] [keyword]
该命令用于把相关字的文件和目录都列出来。(Linux 会将文件都记录在一个文件数据库里面,该命令式从数据库去查询,所以速度比较快,Linux每天会更新该数据库)

locate:
locate [filename]
该命令用于把相关字的文件和目录都列出来。查找数据特别快,也是通过数据库方式来查询。但是数据库一周更新一次,所以可能有些存在数据查不到。可以去修改配置文件。

find:
find [path] [参数] [keyword]
该命令用于在指定路径下查找文件。不是通过数据来查询,所以速度会比较慢。
   

7. 常见目录解释

Linux 各种发行版的目录结构基本一致,各个目录简单介绍如下:

 

目录

描述

/

根目录

/bin

做为基础系统所需要的最基础的命令就是放在这里。

比如 ls cp mkdir 等命令;功能和 /usr/bin 类似,

这个目录中的文件都是可执行的,普通用户都可以使用的命令。

/boot

Linux 的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img 文件

都位于这个目录中。在一般情况下, GRUB LILO 系统引导管理

器也位于这个目录;启动装载文件存放位置,如 kernels,initrd,grub

一般是一个独立的分区

/dev

一些必要的设备 , 声卡、磁盘等。还 有如 /dev/null.

/dev/console /dev/zero /dev/full

/etc

系统的配置文件存放地 . 一些服务器的配置文件也在这里;比

如用户帐号及密码配置文件;

/etc/opt: /opt 对应的配置文件

/etc/X11:Xwindows 系统配置文件

/etc/xml:XML 配置文件

……

/home

用户工作目录,和个人配置文件,如个人环境变量等,所有的

账号分配一个工作目录。一般是一个独立的分区。

/lib

库文件存放地。binsbin 需要的库文件。类似windowsDLL

/media

可拆卸的媒介挂载点,如CD-ROMs 、移动硬盘、U 盘,系统

默认会挂载到这里来。

/mnt

临时挂载文件系统。这个目录一般是用于存放挂载储存设备的

挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab 的定义。

/opt

可选的应用程序包。

/proc

操作系统运行时,进程(正在运行中的程序)信息及内核信

息(比如cpu 、硬盘分区、内存信息等)存放在这里。

/proc 目录伪装的文件系统proc 的挂载目录,proc

不是真正的文件系统,它的定义可以参见 /etc/fstab

/root

Root 用户的工作目录

/sbin

bin 类似,是一些可执行文件,不过不是所有用户都需要

的,一般是系统管理所需要使用得到的。

/tmp

系统的临时文件,一般系统重启不会被保存。

/usr

包含了系统用户工具和程序。

/usr/bin :非必须的普通用户可执行命令

/usr/include :标准头文件

  /usr/lib:/usr/bin/ /usr/sbin/ 的库文件

  /usr/sbin: 非必须的可执行文件

/usr/src: 内核源码

/usr/X11R6:X Window System, Version 11, Release 6.

/srv

该目录存放一些服务启动之后需要提取的数据

  • 大小: 18.1 KB
  • 大小: 23.6 KB
  • 大小: 41.3 KB
  • 大小: 5.8 KB
  • 大小: 49.7 KB
  • 大小: 20.6 KB


转自:
http://www.iteye.com/topic/816268

  • 大小: 18.1 KB
  • 大小: 23.6 KB
  • 大小: 5.8 KB
  • 大小: 49.7 KB
  • 大小: 20.6 KB
  • 大小: 41.3 KB
分享到:
评论

相关推荐

    Linux 文件系统介绍

    ### Linux 文件系统介绍 #### Linux 支持的文件系统类型 Linux 作为一种高度灵活和适应性强的操作系统,能够支持多种类型的文件系统。这些文件系统包括但不限于 ext2、ext3、vfat、ntfs、iso9660、jffs、romfs 和 ...

    模拟LINUX文件系统及终端

    (8)copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝。 (9)del …: 删除文件:删除指定文件,不存在时给出出错信息。 (10)check:检测并恢复文件...

    linux 实验报告 文件系统与文件管理.pdf

    本实验报告对 Linux 文件系统和文件管理进行了详细的介绍,包括文件系统的目录结构、文件管理命令和文件存取权限等内容。通过本实验,我们可以更好地理解 Linux 文件系统和文件管理的原理和应用。

    Linux文件系统及文件管理 上机实验报告

    本次实验是关于Linux文件系统及文件管理的上机操作,旨在让学生深入理解和熟练运用Linux操作系统中的文件系统管理和文件操作。实验涵盖了文件系统的格式化、挂载与卸载,目录和文件的创建、移动、复制、删除,以及...

    Linux文件系统.pdf

    这篇学习资料详细介绍了Linux文件系统的一些关键概念和技术。 1. 文件系统类型 Linux支持多种文件系统类型,如EXT2、EXT3、EXT4、XFS、Btrfs、FAT、NTFS等。EXT4是目前最常用的一种,它在EXT2的基础上进行了优化,...

    C语言模拟实现Linux文件系统

    C语言模拟实现Linux文件系统 1、在内存中开辟一块空间来模拟文件系统的运行,不读写硬盘。 2、面向单用户、单任务,不考虑并发,不考虑文件属主、组等概念。 3、程序开始后,初始化并接收用户输入。若输入”enter”...

    linux文件系统电子书籍

    ### Linux文件系统基础知识...通过以上介绍可以看出,Linux文件系统不仅在技术层面具有高度的灵活性和扩展性,而且在设计思路上也非常注重标准化和兼容性,这些都是Linux操作系统能够在众多领域广泛应用的重要原因。

    linux 文件系统源码

    下面将详细介绍这些文件系统及其在Linux中的实现。 1. **VFS(Virtual File System)**:VFS是Linux内核中的一层抽象,它为各种不同的文件系统提供了一个统一的接口。通过VFS,应用程序可以透明地访问各种类型的...

    linux文件系统.pdf

    Linux文件系统是Linux操作系统的核心组成部分,它负责管理和存储数据,为用户提供访问文件和目录的统一接口。Linux的一大特性是支持多种文件系统,包括但不限于ext、ext2、xia、minix、umsdos、msdos、vfat、proc、...

    Linux下一个简单的文件系统实现

    在Linux操作系统中,文件系统是...通过这个项目,开发者不仅可以深入了解Linux文件系统的运作机制,还能提升C语言编程和系统级编程的能力,对于想要深入学习Linux内核和文件系统的人员来说,这是一个很好的实践机会。

    浅析Linux文件系统管理.pdf

    【Linux 文件系统管理】 Linux 文件系统是Linux操作系统的核心组成...本文以Red Hat 9.0为例,详细介绍了Linux文件系统的基本概念、关键目录以及磁盘管理的命令行工具,为Linux用户和系统管理员提供了实用的操作指南。

    基于C++的命令行linux文件管理系统源码.zip

    基于C++的命令行linux文件管理系统源码基于C++的命令行linux文件管理系统源码基于C++的命令行linux文件管理系统源码基于C++的命令行linux文件管理系统源码基于C++的命令行linux文件管理系统源码基于C++的命令行linux...

    模拟Linux文件系统

    在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。 1. 在现有机器硬盘上开辟100M的硬盘空间,作为设定的硬盘空间。 2. 编写一管理程序simdisk对此空间进行管理,以模拟Linux...

    LINUX常用文件系统

    文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不...

    操作系统课程设计 linux文件系统

    设计一个简单的多用户文件系统。即 ①在系统中用一个文件来模拟一个磁盘; ②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 ③实现这个文件系统。 ④能实际演示这个文件系统。 ...

    Linux 文件系统 介绍

    总的来说,Linux文件系统是一个复杂而高效的设计,它通过VFS实现了对各种文件系统的统一管理,并通过丰富的文件类型和操作满足了各种场景的需求。了解和掌握Linux文件系统对于理解和使用Linux系统至关重要。

    Linux 创建文件系统及挂载文件系统流程详解

    本文将详细介绍 Linux 创建文件系统及挂载文件系统的流程,并提供了实践经验和注意事项。 一、对存储设备的分区 在 Linux 中,硬盘可以被分成多个分区,每个分区可以安装不同的操作系统和文件系统。分区工具包括 ...

Global site tag (gtag.js) - Google Analytics