2021-10-22

本文详细解读了Linux系统的文件结构,包括根目录、FHS标准、重要目录如/usr、/var的功能划分,以及绝对路径和相对路径的区别。重点介绍了不可分享、不变和可变动目录的作用,以及如何通过cat打开txt文件和理解目录树结构。
摘要由CSDN通过智能技术生成

linux文件系统学习


linux系统的文件结构

linux的文件系统的结构形象被称为树形结构

文件系统是用来组织和排列文件存取的,所以是可见的(换句话说是linux系统中的开源问题)

linux系统就是一个树形的结构,操作系统安装在一个文件系统中,表现为为由/起始的树形结构,linux文件系统的最顶端就是/,我们称为linux的root,也就是linux操作系统的文件系统,linux的文件系统的入口就是/,所有的文件,目录,设备都是在/之下的。

所以对于每一个linux系统用户都可以使用一系列的命令操作来访问磁盘中的文件。所以整个linux系统都是个人的,个人不能够使用别人的linux,因为你不知道别人的文件配置的位置。但是为了使得文件系统具有通用性,在即使不知道别人的主机的文件具体位置的情况下,实现一些基本的简单的操作,FHS(Filesystem Hierarchy Standard)对linux操作系统做了一些基本的要求。主要目的在于希望让使用者能够了解到已经安装的软件通常放置于某个目录下面,让linux系统能够在既有的面貌下(目录架构不变)发展出开发者想要的独特的风格。

可分享的不可分享的
不变的/usr(软件放置处)/etc(配置文件)
不变的/opt(第三方协力软件)/boot(开机与核心档)
可变动的/var/mail(使用者邮件信箱)/var/run(程序相关)
可变动的/var/spool/news(新闻组)/var/lock(程序相关)

在linux系统中tar压缩文件的一个重要的作用在于备份文件,如果再经过gzip压缩之后得到的文件扩展更改为了.tar.gz相当于是压缩文件

一个文件系统能够处理具有不同数目个数的文件名称,并且能够使用一定的存储空间,对于MINIX来说,使用MINIX只能够处理64MB的磁盘空间

有些文件是socket文件配置,不适用于其他的电脑,因此应该设置为不可分享的

四种类型:

可分享的

可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网路上其他主机挂载用的目录;

不可分享的

自己机器上面运作的装置文件或者是与程序有关的socket文件等,由于仅与自身机器有关,所以不适合分享给其他主机

不变的

有些文件不可改变的,函式库、文件说明文件、系统管理员所管理的主机服务配置文件等

可变动的

经常改变的数据,如登录文件、一般用户可自行收受的新闻组等

/(root) 与开机系统有关

/usr 与软件安装/执行有关

/var(variable) 与系统运作过程有关

根目录的意义和内容,根目录所在的分区越小越好,因为linux系统的根目录与开机/还原/系统修复等动作有关,由于系统开机时需要特定的开机软件、核心文件、开机所需程序、函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序


在linux系统下打开txt文件的方法是通过cat

cat sample.txt

但是这里有一个要求,注意你现在想要打开的文件需要被放置在当前的文件夹中,而不是在下一层的文件夹中进行打开


/root

整个文件系统是ext4文件系统

根目录下有的子目录:

/bin 二进制文件,系统常规的命令 bin放置的是在单人维护模式下还能被操作的指令,在/bin底下的指令可以被root与一般账号所使用

/boot 系统启动分区,系统启动时读取的文件 包含了开机所使用的文档,linux核心档案以及开机选单与开机所需设定档等等。linux kernel常用的档名为: vmlinuz,如果使用的是grub这个开机管理模式,则还会存在/boot/grub这个模式中

/dev 设备文件 只要是通过存取这个目录下的某个档案,就等于存取某个装置;

/etc 系统主要的设定档几乎都是设置在这个目录中的,例如人员的账号密码档、各种服务的启始档等。一般来说,这个目录下的各档案属性是可以查看的,只有root来修改,不可以放置可执行档(binary)

/home 这是系统预设的使用者家目录,在你新增一个一般使用者账号时,预设的使用者家目录都会规范到这里来

家目录有两个代号:表示当前使用者的家目录,guest表示用户名为guest的家目录

/lib 系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin 或者/sbin底下的指令会呼叫的函式库 /lib/modules这个目录会放置核心的相关的模组

/media 放置的是可以移除的装置

/mnt 如果你要暂时挂载额外的装置,可以将装置放置到mnt中

/opt 这个是给第三方协力软件放置的目录。比如可以安装KDE桌面管理系统

/root系统管理员的家目录,如果进入到单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,希望root的家目录与根目录放置在同一个分区中去

/sbin linux有很多指令是用来设定系统的,这些指令只有root才能够利用来设定系统,其他的使用者只能够用来查询。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于本机安装的软件所产生的系统执行档,则放置在了user/local/sbin 中

/srv srv可以视为service的缩写,是一些网络服务启动之后,这些服务所需要取用的资料目录,常见的服务例如WWW,FTP www伺服器需要的网页资料就可以放置在/srv/www/里面,我们平时编写的代码就放在这里

/tmp 一般使用者或者正在执行的程序暂时放置档案的位置,这个目录对任何人来说都是可以存取的,所以需要定期的清理一下

/lost+found这个目录使用标准的ext3/ext2档案系统格式时才会产生的一个目录,目的在于党档案系统发生错误时,将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在,例如你加装一个硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录

/proc 这个目录本身是一个虚拟文件系统,放置的资料都是在内存当中,例如系统核心、形成咨询、周边装置的状态及网络状况等等,因为这个目录下的资料都是在记忆体中,所以本身不占任何的硬盘空间。

/sys 这个目录其实跟/proc非常类似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯,包括目前已载入的核心模组与核心侦测到的硬体装置咨询等。

与开机过程有关的目录不能放置到与根目录不同的分区

**/etc:**配置文件

**/bin:**重要执行档

**/dev:**所需要的设备文件

**/lib:**执行档所需的函式库与核心所需的模块

**/sbin:**重要的系统执行文件

这五个目录不可与根目录分开在不同的分区。


/usr的意义与内容

/依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的,通过 NFS 服务器可以实现在同一个局域网内的分享

/usr 不是user的缩写,而是Unix Software Resource 的缩写,也就是Unix操作系统软件资源所放置的目录。

FHS建议所有的软件开发者,将他们的数据合理的分别放置在这个目录下的次要目录中去,而不是自行建立改软件自己独立的目录。

目录应放置文件内容
/usr/X11R6/为X Window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意。
/usr/bin/绝大部分的用户可使用指令都放在这里。请注意到他与/bin的不同之处。(是否与开机过程有关)
/usr/include/c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档。
/usr/lib/包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。 某些软件会提供一些特殊的指令来进行服务器的设定,这些指令也不会经常被系统管理员操作, 那就会被摆放到这个目录下啦。要注意的是,如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生
/usr/local/统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦。 你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib…的次目录
/usr/sbin/非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)
/usr/share/放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛。在此目录下常见的还有这些次目录:/usr/share/man:联机帮助文件/usr/share/doc:软件杂项的文件说明/usr/share/zoneinfo:与时区有关的时区文件
/usr/src/一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。

/var 的意义与内容

如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:

目录应放置文件内容
/var/cache/应用程序本身运作过程中会产生的一些暂存档
/var/lib/程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去
/var/lock/某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。 举例来说,刻录机正在刻录一块光盘,你想一下,会不会有两个人同时在使用一个刻录机烧片? 如果两个人同时刻录,那片子写入的是谁的数据?所以当第一个人在刻录时该刻录机就会被上锁, 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用
/var/log/非常重要。这是登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。
/var/mail/放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。
/var/run/某些程序或者是服务启动后,会将他们的PID放置在这个目录下
/var/spool/这个目录通常放置一些队列数据,所谓的“队列”就是排队等待其他程序使用的数据。 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中。

由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。

有待细读 按需领取


四. 目录树(directory tree) :

在Linux底下,所有的文件与目录都是由根目录开始的。那是所有目录与文件的源头, 然后再一个一个的分支下来,因此,我们也称这种目录配置方式为:目录树(directory tree), 这个目录树的主要特性有:

  • 目录树的启始点为根目录 (/, root);
  • 每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
  • 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。

如果我们将整个目录树以图的方法来显示,并且将较为重要的文件数据列出来的话,那么目录树架构就如下图所示:


五. 绝对路径与相对路径

除了需要特别注意的FHS目录配置外,在文件名部分我们也要特别注意。因为根据档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。 这两种文件名/路径的写法依据是这样的:

绝对路径:

由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;

相对路径:

相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 http://www.cnblogs.com/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法

而你必须要了解,相对路径是以你当前所在路径的相对位置来表示的。举例来说,你目前在 /home 这个目录下, 如果想要进入 /var/log 这个目录时,可以怎么写呢?

cd /var/log (absolute)

cd …/var/log (relative)

因为你在 /home 底下,所以要回到上一层 (…/) 之后,才能继续往 /var 来移动的,特别注意这两个特殊的目录:

. :代表当前的目录,也可以使用 ./ 来表示;

… :代表上一层目录,也可以 …/ 来代表。

这个 . 与 … 目录概念是很重要的,你常常会看到 cd … 或 ./command 之类的指令下达方式, 就是代表上一层与目前所在目录的工作状态。

实例1:如何先进入/var/spool/mail/目录,再进入到/var/spool/cron/目录内?

命令:

cd /var/spool/mail

cd …/cron

说明:

由于/var/spool/mail与/var/spool/cron是同样在/var/spool/目录中。如此就不需要在由根目录开始写起了。这个相对路径是非常有帮助的,尤其对于某些软件开发商来说。 一般来说,软件开发商会将数据放置到/usr/local/里面的各相对目录。 但如果用户想要安装到不同目录呢?就得要使用相对路径。

实例2:网络文件常常提到类似./run.sh之类的数据,这个指令的意义为何?

说明:

由于指令的执行需要变量的支持,若你的执行文件放置在本目录,并且本目录并非正规的执行文件目录(/bin, /usr/bin等为正规),此时要执行指令就得要严格指定该执行档。./代表本目录的意思,所以./run.sh代表执行本目录下, 名为run.sh的文件

​ 通过**./指明相对路径或者直接使用绝对路径再加上相应的文件的名称即可在linux系统执行可执行文件**

Linux中的文件和目录结构详解 - 记忆流年 - 博客园 (cnblogs.com)摘录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值