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


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

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


相关文章
|
23天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
64 3
|
28天前
|
存储 Linux Windows
linux常用目录
/sbin s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。 /home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一版该目录名是以用户的账号命名的。 /root 该目录为系统管理员,也称为超级权限者的用户主目录。 /lib 系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /etc 所有的系统管理所需要的配置文件和子目录。 /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program fies目录。 /bo
32 2
|
26天前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
40 5
|
26天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
43 6
|
26天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
64 6
|
27天前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下的文件数量是常见的需求。本文介绍了多种方法,包括使用 `ls` 和 `wc` 命令组合、`find` 命令、`tree` 命令以及编程方式(如 Python)。无论你是新手还是有经验的用户,都能找到适合自己的方法。掌握这些技巧将提高你在 Linux 系统中的操作效率。
32 4
|
27天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
41 4
|
1月前
|
缓存 监控 Linux
|
Linux 开发工具 git
Linux中用find命令找出隐藏文件和目录
[root@localhost log]# find /t -name ".*" -printffind: missing argument to `-printf'[root@localhost log]# find /t -name ".
1521 0
|
22天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
131 6