Linux:家目录,根目录,隐藏文件,路径

简介: Linux:家目录,根目录,隐藏文件,路径

博客大纲


目录

现实中,为了将某一类文件放在一起,我们会用一个文件夹,然后将对应的文件都放进去。

而在Linux操作系统中,也有类似的结构:目录。直观上来讲,目录就是一个可以存放文件的“文件夹”。

比如这样的结构:

abc
├── 1.txt
├── 2.txt
├── 3.txt
├── 4.txt
└── 5.txt

在这里,abc就是一个目录,在abc目录中,存放了五个文件。

但是目录并不是真的把文件放在里面。目录是一个“特殊的文件”,它知道文件的存储位置。这就说明了为什么它被称为目录而不是文件夹。

在“文件夹”这样的结构中,我们将文件放在里面。而在“目录”这样的结构中,其内容其实只是一个索引。

比如一本书的目录,会向读者标识什么章节在第几页,这就是指明了这个章节的名称以及位置。

而Linux的目录也是一样的,它其实只向用户展示目录内部文件的信息,在访问目标文件时,将目标文件的位置交给操作系统。


根目录

我们在使用Linux时,若多次返回到上级目录,你会发现返回到一个名为/的目录后,就无法再返回了。

/是Linux的根目录,不论你从哪一个目录开始返回,最后都会到达根目录。就好像一只蚂蚁不论在哪一个树枝上,只要它想要返回地面,都会经过树的主干。

而根目录能与树联系起来,就是因为Linux中的文件与目录系统其实就是一个多叉树结构。

上图就是一个从根目录出发的树状图。


家目录

家目录也是一种特殊的目录,比如Linux,windows这样的多用户操作系统,都有家目录的概念。

顾名思义,多用户操作系统就是指可以有多用户使用的操作系统,而用户分为两种:超级管理员和普通用户。超级管理员有所有的计算机权限,而对于普通用户,只能使用部分功能。

那么用户使用操作系统,必然会产生一些文件,这些文件要是都存放在一起,那就分不清楚哪一个文件是谁的了。

于是就为每个用户分配了一个目录,这个目录就叫做家目录。

当一个用户打开操作系统,会默认处于其家目录中。

目录的理念就是,将某一类文件都放在一起统一管理,而家目录就是按照不同用户来分类而产生的目录。

对于超级管理员,默认的家目录为/root

对于普通用户,默认的家目录为/home/xxx 其中xxx是用户名

此处可以理解为,超级管理员一人一间屋子,而普通用户要一起挤在同一间屋子中。

这样区分了不同用户之后,操作系统就可以分清楚一个文件是哪一个用户的了。

比如说,在图形化操作系统中,有着桌面这一概念,比如windows操作系统。

在上图中我们可以发现,桌面的本质是一个文件夹,类似与Linux中的目录。而这个桌面文件夹是存放在用户名这个文件夹中的。

如果把它迁移到Linux中:

可以理解为,由于每个用户的桌面不同,就将不同用户的桌面存放在它们的家目录中,当一个用户打开桌面,操作系统就在这个用户的家目录中查找桌面,就能准确打开属于这个用户的桌面了。


目录中的隐藏文件

当我处在一个目录中,使用ls指令来观察这个目录中的文件:

[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt  124.txt  a  abc  a.out  code.c

但是其实我们得到的并不是目录中的所有文件,ls -a指令可以观察到目录中的一些隐藏文件,比如:

[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -a
.  ..  123.txt  124.txt  a  abc  a.out  code.c  .hide

可以发现,当前目录下就多出了三个文件. ..以及.hide。它们都有一个特点,就以一个点开头。在Linux中,以点开头的文件就是隐藏文件。我们也可以创建隐藏文件,只需要在创建文件的时候在文件名前加一个点就行了,比如:

[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# touch .test
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt  124.txt  a  abc  a.out  code.c
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -a
.  ..  123.txt  124.txt  a  abc  a.out  code.c  .hide  .test

我们在创建了一个.test文件后,直接用ls观察,并没有显示,只有使用-a选项后这个文件才出现。

一开始的.hide就是用户自己创建的隐藏文件。

那么. ..是什么?

. ..是所有目录中都存在的两个隐藏文件,包括根目录:

[root@iZf8zdrs09p97o9xxgii5hZ /]# ls -a
.   .autorelabel  boot  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
..  bin           dev   home  lib64  media       opt  root  sbin  sys  usr

当我们观察根目录的隐藏文件,也能看到这两个隐藏文件,那么它们有什么作用呢?

. 用于标识当前目录的位置

..用于标识上级目录的位置

我们来证明一下:

[root@iZf8zdrs09p97o9xxgii5hZ csdn]# cd .   
[root@iZf8zdrs09p97o9xxgii5hZ csdn]# cd ..  
[root@iZf8zdrs09p97o9xxgii5hZ ~]#   

当前我们处在root的家目录的csdn目录下,我们用cd指令跳转到. ,会发现我们仍处于当前目录。

当我们用cd指令跳转到.. ,我们就跳转到了~目录下,即root的家目录。

可以发现,. 跳转到了当前目录csdn,而.. 跳转到了上级目录。

在目录中保留一个.. 文件,是为了返回上级目录,这个好理解,但是为什么要保留. 文件呢?

其实当我们处在某个目录时,是无法直接访问这个目录里的内容的,需要通过. 先找到自己,才能继续访问当前目录的内容。

比如说,我们在csdn目录中有一个a.out的可运行文件,只要将其运行,就会输出“Hello Linux”:

[root@iZf8zdrs09p97o9xxgii5hZ csdn]# ls
a.out  lsInstruction

我们尝试直接运行一下它:

[root@iZf8zdrs09p97o9xxgii5hZ csdn]# a.out
-bash: a.out: command not found

我们处于csdn这个目录下,但是操作系统居然找不到这个目录里的文件。

此时就需要用. 来找到“自己”了:

[root@iZf8zdrs09p97o9xxgii5hZ csdn]# ./a.out
Hello Linux

当我们利用. ,来向操作系统反馈当前目录的位置,我们才能正常访问到当前目录里的文件。


路径

用户在寻找文件或子目录时,所历经的线路叫路径。

每个文件的路径都具有唯一性,为什么?我们来推导一下:

对于一个父目录,它会有很多个子文件或子目录。但是对于一个子文件或目录,都只有一个父目录。比如test.c文件就只有一个父目录csdn

这就是路径的唯一性的基础,我们尝试从a.out文件逆推:

a.out的唯一父目录是csdn,而csdn的唯一父目录是homehome的唯一父目录是/。在这个过程中,每个文件的父目录都是唯一的,所以这个路径也就是唯一的。

在路径具有唯一性的前提下,操作系统就可以根据不同的路径访问到不同的文件。

路径分为绝对路径和相对路径。我们一一介绍:

相对路径:

相对路径,就是指两个文件的相对位置。

假设我们有左侧的这样一个目录结构:

注意:~就是root的家目录,使用的时候不能用~,而应该使用root

现在我们处在csdn2这个目录中,要怎样访问到a.out文件?

此时如果使用相对路径,就是通过目录之间的相对位置来找到目标文件:

首先用.来表示从当前目录出发,再使用..跳回到上级目录~,然后在上级目录~中访问csdn目录,最后在csdn目录中访问a.out文件。路径示意图就是右侧图片。

最后得到的相对路径就是:./../csdn/a.out。由于我们当前就处于csdn2,这里的./也可以省略得到:../csdn/a.out

相对路径中..使用极为广泛,因为..标识的是上级目录,一旦目标文件不再当前目录下,就需要用到..

绝对路径:

绝对路径就是从根目录出发的路径,它直接以/开头,表示当前就是从根目录开始的绝对路径。

比如我们任然处于csdn2这个目录中,要怎样用绝对路径访问到a.out文件?

由于绝对路径和处于哪一个目录无关,其实此时不论处在哪一个目录,访问a.out文件的绝对路径都是一样的:

/从根目录出发,跳转到~目录,再跳转到csdn目录,最后直接访问a.out

得到的绝对路径就是:/~/csdn/a.out

但是这样访问是有问题的无法访问到目标文件。~就是root的家目录,使用的时候不能用~,而应该使用root

所以我们的路径应该是:/root/csdn/a.out


博客制作不易,还请留下一个免费的赞!

有问题欢迎指出,博主非常喜欢讨论问题!


相关文章
|
5天前
|
Linux
Linux(1)arm64根目录扩容
Linux(1)arm64根目录扩容
9 0
|
1天前
|
Linux Go 数据安全/隐私保护
Linux 中的文件属性解析
在 Linux 系统中,每个文件和目录有一组属性控制其操作和访问权限。了解这些属性对有效管理文件至关重要。文件属性包括:文件类型(如 `-` 表示普通文件,`d` 表示目录),权限(如 `rwx` 表示所有者权限,`r-x` 表示组和其他用户权限),所有者,组,硬链接数,文件大小和最后修改时间。通过 `chown` 和 `chmod` 命令可更改文件所有者、所属组及权限。此外,还有特殊权限(如 SUID、SGID)和 ACL(访问控制列表)提供更精细的访问控制。
|
2天前
|
人工智能 Linux
Linux查找大文件的方法
Linux查找大文件的方法
|
4天前
|
固态存储 Ubuntu Linux
Linux(29) 多线程快速解压缩|删除|监视大型文件
Linux(29) 多线程快速解压缩|删除|监视大型文件
11 1
|
4天前
|
Ubuntu Linux 数据安全/隐私保护
Linux(24) 如何在Ubuntu中操作rootfs.img文件
Linux(24) 如何在Ubuntu中操作rootfs.img文件
9 0
|
9天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
20 0
|
11天前
|
Linux Shell 开发工具
Linux文件常用操作
Linux文件常用操作(几乎覆盖所有日常使用)
85 0
|
12天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
18天前
|
Linux
linux 超过4个G的文件传不上去的解决办法
linux 超过4个G的文件传不上去的解决办法
9 0
|
18天前
|
Linux 虚拟化
linux 虚拟机扩容--直接扩容到根目录
linux 虚拟机扩容--直接扩容到根目录
27 1