前言:
氦!我是斯皮福,上期我们已经成功安装了Ubuntu系统并做了基本配置,本节,让我们开始了解它的目录树以及研究相对路径与绝对路径的问题吧!
一、目录树
1、Linux文件以及目录树
首先引入一句话“Linux万物皆文件”,正同这句话所说,Linux的系统运行和外围硬件控制都是根据文件来进行执行的。同时,与Windows平台最大的不同就是其文件系统没有盘符的区分,所有文件都是处于”/”根目录文件下的。所谓根目录,就是指所有的文件都存放其下,并逐渐根据作用类型分别放置在不同位置。我们可以根据图形界面的如下操作进入根目录:
看到这些文件同学们是否有些眼熟呢?是的,我们上节已经进入并查看了一些内容。Linux系统的根目录下文件命名与其实际用途十分贴近,不同发行版的Linux文件目录命名规则也大同小异,因此了解这些命名规则可以帮助大家更轻松明确自己要找的东西存放在什么位置。下面我列举出了每一个文件对应的作用:
bin | 包含一些基本的系统命令 |
sbin | 超级管理员命令 |
Cdrom | 插入光盘的信息 |
Etc | 系统配置文件 |
Lib: | 库文件 |
Lost + found | 错误关机等情况生成的碎片文件 |
Mnt | 挂载临时文件,其他设备(这就能解释为什么共享文件在这里找了 |
Proc | 系统进程信息 |
Run | 系统运行生成的信息 |
Snap | snap软件包配套管理系统 |
Swap file | 虚拟内存,内存占满后将不常用的写入文件夹存放 |
Tmp | 开机自动清空的文件夹,可以存放临时文件 |
Var | 日志文件 |
Boot | 启动引导程序 |
Dev | 设备文件,包含系统硬件和外围设备 |
Home | 用户的主目录 |
Media | 可移动媒体设备,比如USB接入的各种东西 |
Opt | 可选安装的第三方软件 |
Root | 超级管理员的主目录 |
Srv | 服务器数据目录 |
Sys | 内核参数 |
Sur | 用户文件,应用程序 |
Tips:
[
一眼望过去,第一感受就是臭长,但是好在我们并不需要记忆所有内容,其中只有部分是我们需要掌握的:
(1)bin和sbin(binary):其中存放有关于系统指令的脚本文件(脚本和系统指令的问题我会在后文讲解)
(2)libxxx(library):存放库文件,一般来说引用的各种库函数都存放在这个地方
(3)mnt:外围设备和临时挂载的存放位置,这就能解释为什么我们上节需要在这个位置来寻找来自外部的共享文件夹了
]
2、文件软链接
通过观察,我们不难发现某些文件的外观有些与众不同,例如bin目录:
与旁边的boot不同,bin文件夹的上方存在一个箭头,这个箭头相当于一个链接的标识符,表明点击这个文件可以去到其他的一些位置,我们来验证这个猜想。我们打开bin文件夹截个图,再进usr/bin文件截个图,对比其中的不同,可以看到,里面的内容完全一致。
Tips:
[
截图:Win Shift S
]
下面我给出相对泛用的目录树结构:
二、跳转指令与路径问题
1、常用的跳转、查看指令
ls #显示当前文件位置的所有文件
cd #跳转,使用方法 cd 跳转的位置
#Linux中,".."代表上一级位置,"."代表当前位置
2、使用例
了解了目录结构以后,我们还需要掌握在控制台进入文件夹的方法,我们打开控制台。
根据上方我给出的基本查看跳转指令,快来试试吧。
输入 ls,可以看到我们当前所处文件夹内有些什么内容:
ls
一般用户我们打开控制台默认处于用户文件夹下,我们想要查看更深层的内容,就需要回到树根前往别的分支。因此我们这里输入 以下指令前往上一级菜单
cd ..
输入指令后,我们看到冒号后我们所处的位置发生了变化,ls,查看内容,我们跳转到了别的文件夹内。再次cd ..,我们再往上走一级,ls便可以看到根目录下的所有内容了。
3、相对路径与绝对路径
那么,我们最开始所处的目录就是 /home/spiffo,那么我们能不能直接跳转呢?可以的。我们输入cd home/spiffo,ls,可以看到我们回到了最开始的地方。
这个操作方法对于“..“上级目录同样有效,比如我们输入 cd ../..,代表上级的上级,可以看到我们又处于了根目录。
我们探索一下吧,进入bin目录查看。可以看到一堆绿色的文件,这些绿色的文件是系统可以直接作为程序执行的文件,如果花点时间,我们可以在里面找到我们刚刚执行过的ls命令。
我们换个文件看看吧。如果我们想到隔壁的文件看看,我们必须先回到上级,然后再进入隔壁文件吗?这样也太麻烦了。嗯,这就要引出相对路径的概念了,相比于刚才我们使用的绝对路径,我们可以灵活使用上级文件的代替符号来完成这件事。
这样写的好处在于简化了内容,而且即便是文件整体发生了移动,只要二者相对位置不变,我们依然可以使用同一条指令完成跳转操作。在实际使用中,如果我们需要传入参数的路径,我们也可以使用这种方法,大大提高了可移植性。