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


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

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


相关文章
|
8月前
|
存储 Linux
Linux 目录名称
Linux系统目录结构简介:根目录(/)下包含各类功能目录,如/bin存放用户命令,/etc存储配置文件,/home为用户主目录,/var记录日志等可变数据,/usr存放用户工具,/tmp用于临时文件。各目录分工明确,保障系统有序运行。(238字)
342 5
|
11月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
1857 13
|
12月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
417 16
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
351 28
|
12月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
217 4
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
3419 12
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename 's/2023/2024/' *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
Linux 开发工具 git
Linux中用find命令找出隐藏文件和目录
[root@localhost log]# find /t -name ".*" -printffind: missing argument to `-printf'[root@localhost log]# find /t -name ".
1778 0
|
9月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
984 1
二、Linux文本处理与文件操作核心命令
|
9月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
584 137