内容简介
1、第二部分第三课:文件和目录,组织不会亏待你
2、第二部分第四课预告:文件操纵,鼓掌之中
文件和目录,组织不会亏待你
上一次课我们讲了命令行,这将成为伴随我们接下来整个Linux课程的一个重要部分。
大宝啊明天见,命令行啊天天见~
今天的标题里的那句“组织不会亏待你”,不是说Linux社群是个非*法组织,不*良帮*派。不是的,我们还是很廉洁的啊~
是因为这一课我们要来谈一谈Linux系统的文件和目录是如何组织的。
使用过Windows系统的用户,应该对Windows系统里的C盘,D盘,等等不陌生。那么Linux是否也是类似的呢?是不是也是硬盘分为C盘,什么的;光盘驱动器可能会叫做G盘,H盘,等等呢【云帆学社】每日持续更新海量各大内部创业教程?
其实不然,Linux下和Windows下的组织形式是不一样的。了解这点非常重要。
所以我们才要用一课的篇幅来好好探究一下。
文件的组织
Linux中管理文件的系统初看是令人费解的,特别是对于已经习惯Windows的文件组织方式的朋友。
在Linux中,我们可找不到什么C盘,D盘,E盘,等等。完全不是这样的。
不像Windows分成C盘,D盘,光盘驱动器,内存读卡器,等。Linux是把所有东西都放在一个地方。
那么我们怎么才能区分我们的硬盘的第一张磁盘,第二张磁盘,光盘驱动器等等呢?
两种类型的文件
简单起见,我们把Linux下的文件分为两大类:
普通的文件:这是我们已经熟知的文件类型,这样的文件包括:文本类型【云帆学社】每日持续更新海量各大内部创业教程的文件(.txt,.doc,.odt,等等),声音文件(.wav,.mp3,.ogg),还有程序,等。简单来说,这些文件在Windows下也有。
特殊的文件:其他一些文件是特殊的,因为它们用来表示一些东西。例如,你的光盘驱动器就是这类特殊的文件。Windows把电脑里的东西区分为文件和非文件,但Linux不是这样。对于Linux来说,一切都是文件!甚至目录也是文件。这是很不相同的设计,一开始是有点令人狼狈的。但是不要怕,你慢慢会发现这样设计的精妙。
根目录
在一个文件系统中,我们总有一个被称为根目录的东西,这个根目录里包含了所有其他目录和文件。
在Windows中,可以有好几个根目录,比如说C盘(C:【云帆学社】每日持续更新海量各大内部创业教程\)是你的硬盘的根目录(假如你没有把C盘进行磁盘分区的话。比如不少人喜欢把C盘分成C盘,D盘,E盘,F盘等等,C盘作为系统盘,D盘安装软件,E盘F盘等另作它用),H盘可能是你的光盘驱动器的根目录。
Linux中有且只有一个根目录,就是 / 。是的,就是用一个斜杠表示。没有比根目录再高一阶的目录了,因为没有目录包含根目录,根目录就是Linux最顶层的目录,“万有之源”。
目录的结构
在Windows下,一个目录可以如下:C:\Program Files\Baidu
我们说Baidu这个目录是Program Files这个目录的一个子目录,而Program Files这个目录是C盘这个根目录的一个子目录。【云帆学社】每日持续更新海量各大内部创业教程
我们可以看到Windows中是用反斜杠 \ 来标明目录的层级与包含关系的。
而在Linux中,是用斜杠 / 来表示目录的层级与包含关系。
我们之前说过,Linux中没有类似C盘这种目录,Linux有且只有一个根目录,那就是 / 。
Linux的目录形式是类似这样的:/usr/bin
不难理解,bin这个目录是usr这个目录的一个子目录,usr这个目录是 / 这个根目录的一个子目录。
我们可以看到Windows中的目录名称可以包含空格等符号,Linux下的目录名也可以。不过我们一般在Linux下命名目录时尽量不使用空格或者其他特殊的符号,而是尽量用小写英文字母。这会省去很多不必要的麻烦。
根目录的直属子目录【云帆学社】每日持续更新海量各大内部创业教程
在Windows系统中,我们在C盘这个根目录下一般都会找到一些相同的子目录,例如:Program Files,Windows,Documents and Settings,等等。
我们列出一些在Linux下的根目录的常用直属子目录。对这些直属子目录的描述会比较简洁,主要为了让我们有个初步的印象。
虽然我们只列出主要的Linux的根目录的直属子目录,但是还是有不少的。如果你觉得记不住,那也不用担心。这个列表不需要完全记住,有大致印象就好,随着你深入使用Linux,会慢慢熟悉的。
而且,你会发现,其实这些目录的名字都是有其英语含义的,所以可以顾名思义。
下面我们按这些目录的首字母的顺序来依次列出:
bin:【云帆学社】每日持续更新海量各大内部创业教程是英语binary的缩写,表示“二进制文件”(我们知道可执行文件是二进制的)。包含了会被所有用户使用的可执行程序。
boot:英语boot表示“启动”。包含与Linux启动密切相关的文件。
dev:是英语device的缩写,表示“设备”。包含外设。我们之后会仔细研究这个目录,因为它里面的子目录,每一个对应一个外设。比如代表我们的光盘驱动器的文件就会出现在这个目录下面。
etc:etc有点不能顾名思义了。因为etc是法语et cetera的缩写,翻成英语就是and so on,表示“等等”。包含系统的配置文件。至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(Linux文件结构参考UN【云帆学社】每日持续更新海量各大内部创业教程IX的教学实现MINIX) ,这下面放的都是一堆零零碎碎的东西, 就叫etc好了。哈哈 ,这其实是个历史遗留。
home:英语home表示“家”。用户的私人目录。之前我们提过一些,在这个目录中,我们放置私人的文件,有点类似Windows中的Documents这个文件夹,也叫“我的文档”。Linux中的每个用户(除了大管家用户,也就是超级用户root外,root因为太厉害,拥有所有权限,所以比较任性,跟普通用户不住在一起)都在home目录下有自己的一个私人目录。比如我的用户名是oscar,那么我的私人目录就是/home/oscar;如果另一个用户叫jean,那么他的私人目录就是/home/jean【云帆学社】每日持续更新海量各大内部创业教程。
lib:是英语library的缩写,表示“库”。包含被程序所调用的库文件,例如.so结尾的文件,在Windows下这样的库文件是以.dll结尾的。
media:英语media表示“媒体”。当一个可移动的外设(比如USB盘,SD卡,DVD,光盘等等)插入电脑时,Linux就可以让我们通过media的子目录来访问这些外设中的内容。
mnt:是英语mount的缩写,表示“挂载”。有点类似media,但一般用于临时挂载一些装置。
opt:是英语optional application software package的缩写,表示“可选的应用软件包”。用于安装多数第三方软件和插件。
root:是英语“根”的意【云帆学社】每日持续更新海量各大内部创业教程思。超级用户root的家目录/主目录。一般的用户的家目录是位于/home下,不过root用户是个例外。之前的课程我们也提到过,root是整个系统的超级用户,拥有一切权限,初学者慎用此用户模式。
sbin:是英语system binary的缩写,表示“系统二进制文件”。比起bin目录多了一个前缀system,所以包含的是系统级的重要可执行程序。
srv:是英语service的缩写,表示“服务”。包含一些网络服务启动之后,这些服务所需要取用的数据。
tmp:是英语temporary的缩写,表示“临时的”。普通用户和程序临时存放文件的地方。
usr:是英语Unix Software Resource的缩写,【云帆学社】每日持续更新海量各大内部创业教程表示“Unix操作系统软件资源”。这个目录是最庞大的目录之一。有点类似Windows中的C:\Windows和C:\Program Files这两个文件夹的集合。在这里面安装了大部分用户要调用的程序。
var:是英语variable的缩写,表示“动态的,可变的”。通常包含程序的数据,比如一些log(日志)文件,记录电脑中发生了什么事。
其实以上的这个目录的列表形式,在Unix类型的操作系统里也是类似,并不仅限于Linux系统。
再说一次,初学者绝对不必把这个表中的目录名和其含义背下来,以后会慢慢理解的。上表只是为了给大家一个大致印象,了解Linux的根目录下都包含哪些目录。
英语不错的朋友可以参阅以下【云帆学社】每日持续更新海量各大内部创业教程Linux文件系统结构图,摘录自:
https://linuxtoy.org/archives/linux-file-structure.html
也可以参考《鸟哥的Linux私房菜》的这张图:
http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission_3.php
我们就大体来表示一下我们的Linux的文件系统目录树结构好了(从顶部的根目录/开始,自顶向下。没有列出全部目录):
上图中,在home目录下,假设有oscar和jean两位用户的家目录存在。
我们可以看到,Linux的文件系统的结构很像一棵树,从最顶端的根目录/开始,自顶向下逐级分布,【云帆学社】每日持续更新海量各大内部创业教程层叠包含。
pwd命令和which命令:我在哪呢?
Linux系统安装后,包含了很多的文件和目录(虽然其实都是文件),我们很容易迷失在“茫茫文海”中。
当然我们不可能一下子列出Linux中的所有文件,那不现实。但是我们可以向你展示如何在Linux的目录树中来回穿梭,你可以知道此刻你位于哪个目录下。就好比能看懂Linux这个很大的“地图”。
pwd命令:显示当前目录的路径
如果你刚打开一个终端(Terminal),那么你将位于你的用户家目录,也就是~目录中。
在小编的情况,因为我的用户名是oscar,所以其实~这个目录,又是/home/oscar这个目录。
通常来说,命令行提示符会告诉你目前位于哪个目录下:
o【云帆学社】每日持续更新海量各大内部创业教程scar@oscar-laptop:~$
如果上一课你认真学习的话,你会记得在冒号:和美元符$之间的就是当前目录了,所以我们当前目录是~,也就是当前用户的家目录。当前小编的用户名是oscar,所以,也就是位于/home/oscar中。
看命令行提示符来获知当前目录是一个不错的方法,但是我们还有一个方法:pwd命令。
pwd是英语Print Working Directory的缩写,表示“打印当前工作目录”。使用方法也很简单,直接输入pwd,然后回车,就会执行此命令:
如上图所示,当我们调用pwd这个命令时,就为我们打印出了我们当前所在的工作目录:
/home/oscar
所以,pwd命令和看命令行提示符都【云帆学社】每日持续更新海量各大内部创业教程证明了我目前所在的目录就是 /home/oscar。如下图:
所以不要怕迷失在Linux的茫茫海洋中,我们靠着pwd这张旧船票,随时能够知道我们身处在哪艘破船上。这样,涛声就可以依旧了,毛宁也不会忧伤了。
which命令:获知命令的可执行文件之所在
which命令并不是一个必不可少的命令,我们平时用到它的机会也不多。不过我们还是来介绍一下,以便我们对Linux的文件系统有更好的认识。
那么which命令的作用是什么呢?我们知道which在英语里是“哪一个”的意思。
which命令用于显示一个命令的对应的可执行程序的位置。可能听起来有点拗口。
不要急,我们来解释。
在Linux下,每一条命令其实对应了一个可执【云帆学社】每日持续更新海量各大内部创业教程行程序。我们在终端中输入命令,再按回车的时候,其实就是执行了对应的那个程序。比如说,pwd命令对应的pwd程序就是存在于Linux中的。
一个命令,其实只不过是一个我们随时可以调用的程序罢了。
which命令接受一个参数,也就是你想要知道其可执行程序位于哪里的那个命令。
我们来测试一下,就拿pwd命令来测试好了:
因此,pwd命令对应的pwd这个可执行程序位于/bin目录中。我们也可以注意到Linux中的可执行程序和Windows中不太一样,在Windows中可执行程序一般以.exe结尾,而Linux中一般是没有后缀名的。
Linux中的可执行程序也不是都位于相同目录的。我们可以来测试一下which命令【云帆学社】每日持续更新海量各大内部创业教程本身对应的可执行程序位于哪里:
我们可以看到,which命令对应的可执行程序which并不位于/bin中,而是在/usr/bin中。
ls命令:列出文件和目录
ls命令绝对是最常用的Linux命令之一。之前的课程我们也简单地介绍了ls命令的用法。现在我们比较仔细地来学习一下ls命令的功能和它的众多参数。
ls是list的缩写,在英语中list是“列出”的意思。所以ls命令用于列出文件和目录。
首先,我们在自己的家目录中执行ls命令,不带任何参数:
小编以前自学编程的时候在家目录当中创建了太多文件夹,所以大家可以看到由蓝色字样标明的很多目录,这里截图到的只是一部分目录,下面还有很多。
Ubuntu的终端默认是【云帆学社】每日持续更新海量各大内部创业教程有颜色标注的,一般来说:
蓝色–>目录
绿色–>可执行文件
红色–>压缩文件
浅蓝色–>链接文件
灰色–>其他文件
如果在你的终端里没有标明颜色,那么你可以用 –color=auto 来开启颜色标注。如下:
ls –color=auto
如果你不需要颜色标注,那么可以用 –color=none 来关闭颜色标注。如下:
ls –color=none
当然,为了避免每次都输入这么一串额外的参数,其实我们可以在一个配置文件里修改,使得永久显示颜色或不显示颜色。我们之后的课程再说。
ls命令接受很多参数,如果要把这些参数全部列出来,也没什么意思,毕竟平时常用的参数也就那几个。所以,我们一起来看一下ls常用【云帆学社】每日持续更新海量各大内部创业教程的一些参数的使用方法。
-a :显示所有文件和目录,包括隐藏的
在Linux中,我们可以隐藏一些文件。这并不是一种保护机制,因为我们其实还是可以把这些文件显示出来。平时我们单独使用ls,不带参数时,就没有列出这些隐藏的文件,也是为了简洁起见。
我们的家目录是个很好的演示隐藏文件的目录,因为这个目录里的隐藏文件还不少呢。我们在ls命令后面添加-a参数看看:
可以看到比单独用ls时多了那些个以点开头的文件和目录,现在你知道为什么要隐藏这些以点开头的文件了吧。因为这些文件还真不少,会显得很混乱。
在Linux,以点(.)开头的文件是隐藏文件,不过这里不包括开头的两个 . 和 .. ,这两个的含义如下:
. 表示【云帆学社】每日持续更新海量各大内部创业教程当前目录。在当前情况下,就是 /home/oscar 。
.. 表示上一级目录。因为当前目录是/home/oscar,所以上一级目录就是 /home 。
我们有一个大写的参数 -A,它的作用和小写的-a几乎一样,唯一不同就是-A不列出 . 和 .. 这两个文件。
-l :详细列表
-l这个参数算是ls命令最常用的了。加上-l参数使得ls命令列出一个显示文件和目录的详细信息的列表:
这里的列表显示得不是那么美观,因为有一些文件或目录的名字太长,所以没有办法几种显示在一行里。
不过我们可以看到,每一个文件或目录都有对应的一行信息。在这些信息的最前面,有一个 total xxx 的,是表示当前目录所有文件的总大【云帆学社】每日持续更新海量各大内部创业教程小是total后面的那个数字所表示的字节数。在我们的例子中,是total 123360,所以表示我的家目录中所有文件的总大小加起来是123360个字节。
后面学到du命令的时候,就知道其实这里的total后面的大小并不是统计了当前目录真正的所有文件的大小(包括逐层的文件大小相加)。这里的大小只是统计了当前目录列出的这一层的文件和目录的大小,并没有深入统计总的大小。
一行上的每一列是一个单独的信息,我们从左到右一一说明:
文件权限:也就是那个drwxr-xr-x之类的。暂时不需要理解,我们之后会用单独的一课来学习Linux下的文件权限。
链接的数目:也就是那些个3,8,11之类的。这个我们暂时不感兴趣。【云帆学社】每日持续更新海量各大内部创业教程
文件的所有者的名称:这里是oscar,也就是小编所在的用户。当然,如果此文件是属于另一个用户,比如说jean,那么这里的文件所有者就会显示jean了。
文件所在的群组:这里也是oscar,表示是在oscar这个群组里。关于群组,我们暂时不需要理解,之后在文件权限的那一课会讲解。
文件大小:单位是octet,也就是byte,也就是“字节”。
最近一次修改的时间。
文件或目录的名称。
-h:以Ko,Mo,Go的形式显示文件大小
当我们仅用ls -l时,列出的文件详细信息中,文件的大小是以字节为单位的。有时这不是太直观。
我们可以再加一个参数-h,h是humain readable的缩写,表示“适合人类阅读的”。【云帆学社】每日持续更新海量各大内部创业教程所以我们的命令变成了 ls -lh :
这次的显示就美观多了,可以看到,最开头的total后面的123360,变成了121M,也就是121MB的意思,表示当前目录所有文件的总大小是121MB(MB大家应该不陌生吧,就是Mo,就是兆字节)。同样,121MB绝对不是当前目录真正的所有文件的总大小。
可以看到每个文件的大小信息那一列,都变成了4.0K这样的形式,也就是之前的4096B。用了-h参数,我们的文件信息更便于阅读了。
-t:按文件最近一次修改时间排序
可以看到,这是按照文件或目录最近一次修改时间的降序排列,也就是说排在第一位的是Desktop这个目录,修改时间是最新的(2015年8月8日23:24【云帆学社】每日持续更新海量各大内部创业教程,也就是差不多小编在编辑这篇文章时的时间),其他的依次降序。
当然,我们了解了这些个ls的常用参数后,也可以把这几个参数合并在一起使用,效果是叠加的:
cd命令:切换目录
cd命令也是最常用的Linux命令之一,甚至可以说是最常用的命令。
cd是英语change directory的缩写,表示“切换目录”。所以顾名思义,cd命令就是用于切换目录的命令。
也许你发现了,目前来说,我们还没跳出我们用户的家目录这个小圈子。对于渴望自由,向往探索的我们来说,这简直不能忍,不是吗?
好的,那就使用cd命令,开动起我们的这艘破船吧,骚年!我们得去其他海域逛逛呀。
与ls命令不同,cd命令没有那么多参数,cd命令后面接的【云帆学社】每日持续更新海量各大内部创业教程参数就是一个,你要去的那个目录的路径。
比如我想去根目录/转转,那么我们就可以使用 cd /
可以看到,使用pwd命令,显示当前我们已经位于根目录/中了,我们也可以从命令行提示符中看出来,当前冒号和美元符之间已经从之前的~变成了/。
怎么样,对Linux的狂拽酷炫是不是已经有点感觉了?就是这么轻盈,穿梭在各个目录之间。比起Windows的鼠标点点点,是不是快捷了很多?
我们再去其他地方转转,输入 cd usr,因为我们当前是在根目录/中,所以用cd usr 我们就切换到了/usr这个目录:
然后我们想看看/usr这个目录中有哪些子目录,用ls命令,可以看到有好几个子目录,我们再用cd命令进入其中的gam【云帆学社】每日持续更新海量各大内部创业教程es这个子目录:
刚才的一系列操作,我们可以用以下图示来表示:
好了,现在我们位于/usr/games这个目录下。那么如果我要回到上一级目录(也叫父目录),应该怎么做呢?
可以用
cd ..
就是cd命令后面接两个点。Linux中,一个点表示当前目录,而两个点表示上一级目录:
可以用如下图示表示:
那么,聪明如你,应该不难想见,如何连续后退两个层级。是的,可以用 cd ../..
可以看到,我们用 cd ../.. 连续后退了两个层级回到了根目录 /
实际上,我们在切换目录时,可以有两种路径表示方式,一种是相对路径,一种是绝对路径。
顾名思义,相对路径就是相对于当前目录的一个路径表示法。绝对路径就是绝对的,不因当【云帆学社】每日持续更新海量各大内部创业教程前目录而改变的一个路径表示法。
相对路径
刚才,我们位于/usr 目录时,我们只用了 cd games 就切换到了 /usr/games,这里cd games中的games就是相对路径。因为这个games目录是/usr 目录的子目录,所以是相对当前的/usr目录而言的。
如果我们在根目录里运行命令 cd games,那么会出现错误,因为根目录/ 里并没有games这个子目录,它找不到这个相对路径,会显示 No such file or directory (表示“不存在此文件或目录”):
所以我们只能这样:cd usr/games,才能从根目录用相对路径的方式切换到 /usr/games目录中:
与相对路径不一样,不管我们当前位于哪个目录,绝对路径的使用都是一样的。
绝对路径很好辨认,因为它总是以 / 开头, / 表示根目录。假设,我们目前位于家目录中,那么如果我要用绝对路径来切换到/usr/games中,怎么做呢?很简单,就是使用 cd /usr/games
图示如下:
如果我们要用相对路径达到同样的目的,那么需要这样:cd ../../usr/games
图示如下:
重回家目录
家目录毕竟可以说是用户使用最多的目录,所以我们在用cd命令跳转到其他目录之后,很渴望快速切换到自己的家目录,怎么做呢?如何重返家园呢?
有三种方法:
比较笨的方法:cd /home/oscar 这里的oscar可以替换为【云帆学社】每日持续更新海量各大内部创业教程你自己的用户名。这种方法有点繁琐。
较好的方法:cd ~
最好的方法:cd。就是直接使用cd命令,不加任何参数,就可以切换到用户的家目录了,是不是很帅?
路径自动补全
细心的你可能已经想到了,因为上一课中我们已经提过Tab键可以进行命令的补全(按两下Tab键),也提了一下其实Tab键还可以用于路径的补全。所以,这样用Tab键可以大大提高我们的效率,而且防止我们手动输入路径时将名字写错:
du命令:显示目录包含的文件大小
du命令也是很有用的,因为它可以让我们知道文件和目录所占的空间大小。虽然ls -l命令也可以显示文件和目录的大小,但是du命令统计的才是真正的文件大小。du命令会深入遍历每个目录的子目录,【云帆学社】每日持续更新海量各大内部创业教程把所有文件的大小都做一个统计。
du是英语disk usage的缩写,表示“磁盘占用”。对我们的家目录做一个真正的大小的统计吧:
这里因为运行du命令后的列出的文件大小的列表实在太长,所以只能截图了最后的部分。
可以看到,小编的家目录的总大小是 28324348个字节。是不是觉得换算这么庞大的数字让人抓狂呢?
不要着急,我们的du命令也可以使用参数。
-h:以Ko,Mo,Go的形式显示文件大小
-h参数的用法类似之前在ls命令中的-h参数,所以我们可以运行 du -h 来看一下:
可以看到小编的家目录/home/oscar 的总大小是 28GB。
-a:显示文件和目录的大小
默认情况下,du命令只显示目录的大小【云帆学社】每日持续更新海量各大内部创业教程。如果加上-a参数,则会显示目录和文件的大小。我们使用 du -ah 来看一下:
可以看到总大小还是28GB。因为虽然du命令默认情况下只显示各个目录的大小,但是统计的总大小已经包括了目录中的各个文件了,只不过默认没有把文件列出来罢了。
-s:只显示总计大小
如果我们不想看到各个目录和文件的大小统计,而只想知道当前目录的总大小,可以使用-s参数,我们用 du -sh 来看一下:
总结
在Linux中,一切皆文件!这是与Windows区别很大的一点。
Linux的文件和目录都是由根目录/开始自顶向下呈乔木状分散的。
普通用户存放自己私人文件的地方是在/home目录下,如果你的用户名是oscar,那么你的用户的【云帆学社】每日持续更新海量各大内部创业教程家目录就是/home/oscar。
pwd命令用于显示当前所在目录。
ls命令用于显示当前目录中的文件。
cd命令用于切换目录。
du命令用于统计目录大小。
第二部分第四课预告
今天的课就到这里,一起加油吧!
下一课我们学习:文件操纵,鼓掌之中
*新朋友请关注「程序员联盟」微信搜公众号 ProgrammerLeague
程序员联盟官网:
coderunity点com
小编微信号: frogoscar
小编邮箱: enmingx@gmail.com
推荐阅读
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
暂无评论内容