`

Linux操作系统文件系统基础知识详解

 
阅读更多

一 、Linux文件结构
  文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
  目录提供了管理文件的一个方便而有效的途径。
  Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
                      /根目录
                              ┃
┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓
┃   ┃      ┃     ┃     ┃     ┃      ┃     ┃     ┃
bin  home    dev     etc     lib     sbin    tmp      usr    var
                      ┃                               ┃
                  ┏━┻━┓     ┏━━┳━━┳━━┳━┻━┳━━┓
                  ┃      ┃    ┃   ┃    ┃    ┃     ┃    ┃
                 rc.d   cron.d X11R6  src   lib   local    man  bin
                  ┃                              
┏━━━┳━━┳━┻━┳━━━┓        
┃      ┃    ┃      ┃      ┃
init.d rc0.d  rc1.d  rc2.d …… linux bin lib src
  Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在 DOS和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。但是在linux中,无论操作系统管理几个 磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不一定是并列的。

  如果这样讲不好理解的话,我来举个例子:
  有一块硬盘,分成了4个分区,分别是/;/boot;/usr和windows下的fat
  对于/和/boot或者/和/usr,它们是从属关系;对于/boot和/usr,它们是并列关系。

  如果我把windows下的fat分区挂载到/mnt/winc下,(挂载??哦,别急,呵呵,一会就讲,一会就讲。)那么对于/mnt/winc和/usr或/mnt/winc和/boot来说,它们是从属于目录树上没有任何关系的两个分支。
  因为linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。但就是这一点让很多从windows转到linux的初学者感到头疼。下面列出了linux下一些主要目录的功用。
  /bin 二进制可执行命令
  /dev 设备特殊文件
  /etc 系统管理和配置文件
  /etc/rc.d 启动的配置文件和脚本
  /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
  /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
  /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
  /tmp 公用的临时文件存储点
  /root 系统管理员的主目录(呵呵,特权阶级)
  /mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
  /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
  /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信  息。
  /var 某些大文件的溢出区,比方说各种服务的日志文件
  /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包  含:
  /usr/X11R6 存放X window的目录
  /usr/bin 众多的应用程序
  /usr/sbin 超级用户的一些管理程序
  /usr/doc linux文档
  /usr/include linux下开发和编译应用程序所需要的头文件
  /usr/lib 常用的动态链接库和软件包的配置文件
  /usr/man 帮助文档
  /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
  /usr/local/bin 本地增加的命令
  /usr/local/lib 本地增加的库
  二 、linux文件系统

  文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的 目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作, 因此必然要拥有并维护自己的文件系统。
  Llinux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。
  索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。 一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中 的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。

  对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
  可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
  硬连接:原文件名和连接文件名都指向相同的物理地址。
目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)
文件在磁盘中只有一个拷贝,节省硬盘空间;

  由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
  符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。

  可以删除原有的文件而保存连接文件,没有防止误删除功能。
  这一段的的内容过于抽象,又是节点又是数组的,我已经尽量通俗再通俗了,又不好加例子作演示。大家如果还是云里雾里的话,我也没有什么办法了,只有先记住,日后在实际应用中慢慢体会、理解了。这也是我学习的一个方法吧。
三 、挂载文件系统
  由上一节知道,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。
举个例子吧:
  根分区:
  /根目录

┏━━━━┳━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━┳━━━━━┳━━━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var

┏━┻━┓
┃ ┃
rc.d cron.d

┏━━━┳━━━┳━┻━┳━━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d ……
  /usr分区 :
  usr

┏━━━━┳━━━╋━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃
X11R6 src lib local man bin
┃ ┃
┃ ┏━━━╋━━━┓
┃ ┃ ┃ ┃
linux bin lib src
  挂载之后就形成了文章开始时的那个图。像不像挂上去的?
  注意:1、挂载点必须是一个目录。
  2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一 样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。
  挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]
  其中常用的参数有

  -t 指定设备的文件系统类型,常见的有:
  minix linux最早使用的文件系统
  ext2 linux目前常用的文件系统
  msdos MS-DOS的fat,就是fat16
  vfat windows98常用的fat32
  nfs 网络文件系统
  iso9660 CD-ROM光盘标准文件系统
  ntfs windows NT 2000的文件系统
  hpfs OS/2文件系统
  auto 自动检测文件系统
  -o 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的  有
  codepage=XXX 代码页
  iocharset=XXX 字符集
  ro 以只读方式挂载
  rw 以读写方式挂载
  nouser 使一般用户无法挂载
  user 可以让一般用户挂载设备
  提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?)
  例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。
  # mk /mnt/winc
  # mk /mnt/floppy
  # mk /mnt/cdrom
  # mount -t vfat /dev/hda1 /mnt/winc
  # mount -t msdos /dev/fd0 /mnt/floppy
  # mount -t iso9660 /dev/cdrom /mnt/cdrom
  现在就可以进入/mnt/winc等目录读写这些文件系统了。
  要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时更换的话,我想就不会犯这样的错误了 :-> )
如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或 gb2312。
  当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。
  四 、自动挂载

  每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?
  其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
  这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab文件如下:
  /dev/hda2 / ext3 defaults 1 1
  /dev/hda1 /boot ext3 defaults 1 2
  none /dev/pts devpts gid=5,mode=620 0 0
  none /proc proc defaults 0 0
  none /dev/shm tmpfs defaults 0 0
  /dev/hda3 swap swap defaults 0 0
  /dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
  /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
  /dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
  /dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
  在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。
  在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
  rw 以可读写模式挂载
  suid 开启用户ID和群组ID设置位
  dev 可解读文件系统上的字符或区块设备
  exec 可执行二进制文件
  auto 自动挂载
  nouser 使一般用户无法挂载
  async 以非同步方式执行文件系统的输入输出操作

  大家可以看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为noauto。(如果你非要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。)

 


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21990/showart_267948.html

分享到:
评论

相关推荐

    Linux操作系统文件系统基础知识详解.pdf

    Linux 操作系统文件系统基础知识详解是 Linux 操作系统的核心组件之一,文件系统是操作系统管理文件的方式。Linux 文件系统是树型结构的,每个目录都是从根目录出发的。Linux 使用标准的目录结构,在安装的时候,...

    Linux操作系统文件系统基础知识详解.doc

    Linux操作系统文件系统基础知识详解 在Linux操作系统中,文件系统是管理磁盘和其他存储设备上文件的核心组成部分。它决定了文件和目录的组织方式,为用户提供了一种有效管理文件的方法。Linux采用了标准化的目录...

    Ubuntu-Linux操作系统项目教程3套期末考试卷.doc

    Linux 操作系统基础知识 * 自由软件的概念 * Linux 操作系统的特点和优点 * Linux 操作系统的历史发展 设备命名规则 * 设备文件的保存位置 * 设备命名规则的分类(硬盘、光驱、软驱等) * 设备文件的命名规则(/...

    基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计

    基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计,含有代码注释,满分课程设计资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计,含有代码注释,满分课程设计资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计,含有代码注释,满分课程设计资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。基于opencv实现象棋识别及棋谱定位python源码+数据集

    基于Python实现的Cowrie蜜罐设计源码

    该项目为基于Python实现的Cowrie蜜罐设计源码,共计380个文件,涵盖166个Python源代码文件,以及包括RST、SQL、YAML、Markdown等多种类型的配置和文档文件。Cowrie蜜罐是一款用于记录暴力攻击和攻击者执行的SSH及Telnet交互的中等交互式蜜罐。

    QT 摄像头获取每一帧图像数据以及opencv获取清晰度

    QT 摄像头获取每一帧图像数据以及opencv获取清晰度

    基于asp.net的(CS)地震预测系统设计与实现.docx

    基于asp.net的(CS)地震预测系统设计与实现.docx

    基于Springboot和Mysql的医院药品管理系统代码(程序,中文注释)

    医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统 1、资源说明:医院药品管理系统源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件: ① 系统环境:Windows ② 开发语言:Java ③ 框架:SpringBo

    mqtt单点到点聊天工具

    mqtt单点到点聊天工具

    【图像融合】基于matlab GUI拉普拉斯金字塔+小波变换图像融合【含Matlab源码 857期】.zip

    CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 图像融合:小波变换图像融合、遗传算法图像融合、IHS图像融合、PCA图像融合、curvelet变换图像融合、拉普拉斯金字塔+NSCT图像融合、医学图像图像融合、高分辨全色图像融合 DSIFT多聚焦图像融合、加权平均法图像融合、泊松彩色图像融合、主成分结合小波离散变换PCA-DWT图像融合、矩阵优化图像融合、导向滤波图像融合、拉普拉斯图像融合、系数绝对值最大图像融合

    基于ZCAM E2系列相机的OBS设计源码实现

    该项目为OBS直播软件的扩展设计源码,采用C++语言编写,并包含C、Shell和C等其他语言。源码共99个文件,其中包含16个头文件、11个PowerShell脚本、9个C++源文件、6个ZSH脚本、5个Shell脚本、5个输入文件、4个INI配置文件、3个YAML文件、3个文本文件、2个JSON文件。源码实现将ZCAM E2系列相机直接集成至OBS作为直播源,支持直播功能。

    VLOOKUP函数:在Excel中查找并返回数组特定元素的实用指南

    在Excel中处理数据时,我们经常需要从大量数据中提取特定的信息。VLOOKUP函数(垂直查找函数)是一个非常强大的工具,它可以帮助我们在数据表中查找并返回相应的值。本文将详细探讨如何使用VLOOKUP函数查找并返回数组中的特定元素,包括函数的语法、使用技巧和实际应用中的代码示例。 VLOOKUP函数是Excel中进行数据查找和提取的强大工具。通过使用VLOOKUP进行精确匹配、近似匹配、数组公式和反向查找,可以有效地从数组中查找并返回特定的元素。此外,使用IFERROR和数据类型检查可以提高数据查找的准确性和可靠性。通过这些技巧和方法,可以确保VLOOKUP函数在各种情况下都能准确无误地执行。

    拷贝到Windows 10的C:\Windows\System32或C:\Windows\SysWOW64,之后重启电脑

    拷贝到Windows 10的C:\Windows\System32或C:\Windows\SysWOW64,之后重启电脑

    excel统计分析(3): 一元线性回归分析

    excel统计分析(3): 一元线性回归分析

    基于matlab碳交易机制下考虑需求响应的优化运行【含Matlab源码 期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    精简博客系统 基于Springboot和Mysql的精简博客系统代码(程序,中文注释)

    精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统 1、资源说明:精简博客系统源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件: ① 系统环境:Windows ② 开发语言:Java ③ 框架:SpringBoot ④ 架构:B/S、MVC ⑤ 开发环境:IDE

    基于Scrapy框架的豆瓣电影爬虫系统

    项目介绍使用Scrapy框架爬取豆瓣电影,豆瓣选影视页面分别筛选地区为中国大陆、香港、台湾(可更换为其他地区),构造Ajax请求,获取电影id,再通过id构造电影链接,解析页面后获得电影详细数据,如名称、年份、导演、主演、类型等。 在IT行业中,网络爬虫是获取大量数据的重要手段,尤其在金融数据分析领域,如股票评论数据,能够为投资者提供宝贵的市场情绪参考。本项目聚焦于使用Python的Scrapy框架来批量爬取豆瓣电影网的数据,从而进行数据分析。 Scrapy是一个强大的Python爬虫框架,它提供了一整套解决方案,包括网页抓取、解析、数据存储等。使用Scrapy,我们可以高效地构建起一个完整的爬虫项目,其主要组件包括Spiders、Item、Item Pipeline、Downloader Middleware和Settings等。 1. **Spiders**:是Scrapy的核心,负责定义如何抓取数据以及如何处理抓取到的数据。在这个项目中,我们需要创建一个Spider,设置其起始URL(通常是豆瓣电影网的评论页面),并定义如何解析HTML页面,提取评论内容、用户名、

    基于c语言的配有图片和音乐的打字母游戏.zip

    基于c语言的配有图片和音乐的打字母游戏.zip

    基于asp.net的歌迷购物网设计与实现.docx

    基于asp.net的歌迷购物网设计与实现.docx

Global site tag (gtag.js) - Google Analytics