zoukankan      html  css  js  c++  java
  • 【Linux探索之旅】第二部分第三课:文件和文件夹,组织不会亏待你



    内容简单介绍

    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下的文件分为两大类:


    1. 普通的文件:这是我们已经熟知的文件类型。这种文件包含:文本类型的文件(.txt,.doc,.odt,等等)。声音文件(.wav,.mp3。.ogg)。还有程序,等。简单来说,这些文件在Windows下也有。

    2. 特殊的文件:其它一些文件是特殊的,由于它们用来表示一些东西。比如,你的光盘驱动器就是这类特殊的文件。Windows把电脑里的东西区分为文件和非文件。但Linux不是这样。对于Linux来说,一切都是文件!

      甚至文件夹也是文件。

      这是非常不同样的设计,一開始是有点令人狼狈的。

      可是不要怕,你慢慢会发现这样设计的精妙。


    根文件夹


    在一个文件系统中,我们总有一个被称为根文件夹的东西,这个根文件夹里包括了全部其它文件夹和文件。


    在Windows中。能够有好几个根文件夹,比方说C盘(C:)是你的硬盘的根文件夹(假如你没有把C盘进行磁盘分区的话。比方不少人喜欢把C盘分成C盘。D盘,E盘,F盘等等,C盘作为系统盘。D盘安装软件,E盘F盘等另作它用),H盘可能是你的光盘驱动器的根文件夹。



    Linux中有且仅仅有一个根文件夹,就是 / 。是的。就是用一个斜杠表示。没有比根文件夹再高一阶的文件夹了,由于没有文件夹包括根文件夹,根文件夹就是Linux最顶层的文件夹。“万有之源”。



    文件夹的结构


    在Windows下。一个文件夹能够例如以下:C:Program FilesBaidu




    我们说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文件结构參考UNIX的教学实现MINIX) ,这以下放的都是一堆零零碎碎的东西, 就叫etc好了。哈哈 ,这事实上是个历史遗留。

    • home:英语home表示“家”。

      用户的私人文件夹。之前我们提过一些。在这个文件夹中,我们放置私人的文件。有点类似Windows中的Documents这个文件夹。也叫“我的文档”。Linux中的每一个用户(除了大管家用户,也就是超级用户root外,root由于太厉害。拥有全部权限,所以比較任性,跟普通用户不住在一起)都在home文件夹下有自己的一个私人文件夹。比方我的username是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系统安装后,包括了非常多的文件和文件夹(尽管事实上都是文件),我们非常easy迷失在“茫茫文海”中。



    当然我们不可能一下子列出Linux中的全部文件。那不现实。

    可是我们能够向你展示怎样在Linux的文件夹树中来回穿梭。你能够知道此刻你位于哪个文件夹下。就好比能看懂Linux这个非常大的“地图”。



    pwd命令:显示当前文件夹的路径


    假设你刚打开一个终端(Terminal),那么你将位于你的用户家文件夹,也就是~文件夹中。


    在小编的情况,由于我的username是oscar,所以事实上~这个文件夹。又是/home/oscar这个文件夹。


    通常来说,命令行提示符会告诉你眼下位于哪个文件夹下:


    oscar@oscar-laptop:~$


    假设上一课你认真学习的话,你会记得在冒号:和美元符$之间的就是当前文件夹了,所以我们当前文件夹是~,也就是当前用户的家文件夹。

    当前小编的username是oscar。所以,也就是位于/home/oscar中。


    看命令行提示符来获知当前文件夹是一个不错的方法。可是我们另一个方法:pwd命令。


    pwd是英语Print Working Directory的缩写,表示“打印当前工作文件夹”。

    用法也非常easy。直接输入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的终端默认是有颜色标注的,一般来说:


    1. 蓝色-->文件夹

    2. 绿色-->可运行文件

    3. 红色-->压缩文件

    4. 浅蓝色-->链接文件

    5. 灰色-->其它文件


    假设在你的终端里没有标明颜色。那么你能够用 --color=auto 来开启颜色标注。

    例如以下:


    ls --color=auto


    假设你不须要颜色标注,那么能够用 --color=none 来关闭颜色标注。例如以下:


    ls --color=none


    当然,为了避免每次都输入这么一串额外的參数,事实上我们能够在一个配置文件中改动,使得永久显示颜色或不显示颜色。我们之后的课程再说。


    ls命令接受非常多參数,假设要把这些參数所有列出来,也没什么意思。毕竟平时经常使用的參数也就那几个。

    所以。我们一起来看一下ls经常使用的一些參数的用法。


    -a :显示全部文件和文件夹,包含隐藏的


    在Linux中,我们能够隐藏一些文件。这并非一种保护机制,由于我们事实上还是能够把这些文件显示出来。平时我们单独使用ls,不带參数时,就没有列出这些隐藏的文件,也是为了简洁起见。


    我们的家文件夹是个非常好的演示隐藏文件的文件夹。由于这个文件夹里的隐藏文件还不少呢。

    我们在ls命令后面加入-a參数看看:




    能够看到比单独用ls时多了那些个以点开头的文件和文件夹,如今你知道为什么要隐藏这些以点开头的文件了吧。由于这些文件还真不少。会显得非常混乱。


    在Linux。以点(.)开头的文件是隐藏文件,只是这里不包含开头的两个 . 和 .. ,这两个的含义例如以下:


    1. . 表示当前文件夹。在当前情况下。就是 /home/oscar 。

    2. .. 表示上一级文件夹。由于当前文件夹是/home/oscar,所以上一级文件夹就是 /home 。


    我们有一个大写的參数 -A,它的作用和小写的-a差点儿一样。唯一不同就是-A不列出 . 和 .. 这两个文件。


    -l :具体列表


    -l这个參数算是ls命令最经常使用的了。加上-l參数使得ls命令列出一个显示文件和文件夹的具体信息的列表:




    这里的列表显示得不是那么美观,由于有一些文件或文件夹的名字太长,所以没有办法几种显示在一行里。


    只是我们能够看到,每个文件或文件夹都有相应的一行信息。

    在这些信息的最前面,有一个 total xxx 的,是表示当前文件夹全部文件的总大小是total后面的那个数字所表示的字节数。在我们的样例中,是total 123360。所以表示我的家文件夹中全部文件的总大小加起来是123360个字节。


    后面学到du命令的时候,就知道事实上这里的total后面的大小并非统计了当前文件夹真正的全部文件的大小(包含逐层的文件大小相加)。这里的大小仅仅是统计了当前文件夹列出的这一层的文件和文件夹的大小,并没有深入统计总的大小。


    一行上的每一列是一个单独的信息。我们从左到右一一说明:


    1. 文件权限:也就是那个drwxr-xr-x之类的。临时不须要理解,我们之后会用单独的一课来学习Linux下的文件权限。

    2. 链接的数目:也就是那些个3。8,11之类的。这个我们临时不感兴趣。

    3. 文件的全部者的名称:这里是oscar。也就是小编所在的用户。当然。假设此文件是属于还有一个用户。比方说jean,那么这里的文件全部者就会显示jean了。

    4. 文件所在的群组:这里也是oscar,表示是在oscar这个群组里。

      关于群组,我们临时不须要理解,之后在文件权限的那一课会解说。

    5. 文件大小:单位是octet,也就是byte。也就是“字节”。

    6. 近期一次改动的时间。

    7. 文件或文件夹的名称。


    -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命令进入当中的games这个子文件夹:




    刚才的一系列操作。我们能够用下面图示来表示:




    好了,如今我们位于/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中,怎么做呢?非常easy,就是使用 cd /usr/games




    图演示样例如以下:




    假设我们要用相对路径达到相同的目的。那么须要这样:cd ../../usr/games




    图演示样例如以下:




    重回家文件夹


    家文件夹毕竟能够说是用户使用最多的文件夹。所以我们在用cd命令跳转到其它文件夹之后,非常渴望高速切换到自己的家文件夹,怎么做呢?怎样重返家园呢?


    有三种方法:


    1. 比較笨的方法:cd /home/oscar 这里的oscar能够替换为你自己的username。

      这样的方法有点繁琐。

    2. 较好的方法:cd ~

    3. 最好的方法: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 来看一下:





    总结


    1. 在Linux中,一切皆文件。这是与Windows差别非常大的一点。

    2. Linux的文件和文件夹都是由根文件夹/開始自顶向下呈乔木状分散的。

    3. 普通用户存放自己私人文件的地方是在/home文件夹下,假设你的username是oscar,那么你的用户的家文件夹就是/home/oscar。

    4. pwd命令用于显示当前所在文件夹。

    5. ls命令用于显示当前文件夹中的文件。

    6. cd命令用于切换文件夹。

    7. du命令用于统计文件夹大小。



    第二部分第四课预告


    今天的课就到这里。一起加油吧!

    下一课我们学习:文件操纵,鼓掌之中

  • 相关阅读:
    IPC总结学习
    机器学习中的范数规则
    机器学习的几个误区-转载
    来几道大数据的面试题吧
    海量数据随机抽样问题(蓄水池问题)
    字符串类算法题目总结
    RPC学习
    如何做出健壮的系统设计
    关于bind函数和connect函数的测试结论
    [置顶] Codeforces Round #197 (Div. 2)(完全)
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6994828.html
Copyright © 2011-2022 走看看