美文网首页
Linux(四)目录和文件(一) 文件类型、路径及目录操作

Linux(四)目录和文件(一) 文件类型、路径及目录操作

作者: 石志不渝 | 来源:发表于2023-09-06 22:07 被阅读0次

    一、一切皆文件

    在Linux的设计思想中,很重要的一点,就是“一切皆文件”。外设(键盘、鼠标、屏幕)、磁盘、打印机、甚至\color{red}{目录},都是文件。这是一种基于对计算机的理解,做出的很强的逻辑抽象。以下,我们会简单基于几种文件的分析,去理解和体会这种设计思路。

    1.1 普通文件

    首先来看普通文件,也就是数据文件。我们存放表格、文档、照片、视频等等的文件,是普通文件。普通文件里面,是用户的数据。它存放在硬盘上,具有自己的存放地址(起始扇区和结束扇区)。


    文件在磁盘的存放

    硬盘(磁盘)可以理解为具有一圈一圈磁道的圆盘,数据就是存储在这些磁道上的。数据肯定是有一定大小的,所以会有一个开始存放的位置和结束的位置。普通文件是比较容易理解的。

    1.2 目录文件

    上文中,我们说在Linux中,目录也是一个文件,叫目录文件。听上去感觉有点奇葩,因为可能在更多人的心目中,目录更像是容器,去容纳和承载文件(普通文件)。但其实稍后做了解释,你可能就会觉得“目录理所当然是文件”。
    首先我们来想一下目录的作用:构建一个“树形结构”,一层一层的去存放内容(其他目录、其他文件或程序等)。

    那么我们再想一下1.1中对“普通文件”存放方式的描述,就会有一个问题:“普通文件是放在磁盘的磁道上的,我们所谓的目录树形结构,如何在磁道级别体现呢?”
    实际上,这种树形结构,并非在磁道级别去实现的,而依然是数据级别。我们假设有下面这张表,表的名字叫Home

    序号 子项名称 子项存储起始扇区位置 子项存储结束扇区位置
    1 Desktop 1000 1500
    2 Pictures 8000 8500

    之后有有表Pictures内容如下

    序号 子项名称 子项存储起始扇区位置 子项存储结束扇区位置
    1 OIP-1.jpeg 11000 12000
    2 OIP-2.jpeg 15000 16000
    2 OIP-3.jpeg 18000 19000

    用这两个表中的数据,是不是就可以形成一个简单的树形结构?


    树形结构

    homeDesktopPictures这些表,是不是需要保存在文件里?我们将home保存为一个home文件,将Desktop保存为一个Desktop文件,将Pictures保存为一个Pictures文件。这些文件,就是目录文件。所以,目录文件保存的是一种文件之间的层级关系,当然还有其他信息,不再展开。

    1.3 设备文件

    设备文件是Linux用于对硬件设备进行访问和控制的文件。按照一定的规则向设备文件中写入内容,就可以控制某些设备。从设备文件中读取数据并按照相应规则解析时,就可以读取到设备的输入。
    比如键盘文件,我们使用evtest对键盘文件进行读取,当按下键盘按键时,可以读取到相应的信息。需要说明两点:

    1. 键盘文件是eventXX,具体是哪个文件,需要根据自己电脑情况尝试;
    2. 使用虚拟机时,你需要在虚拟机内敲键盘,才会有数据的读取;在主机进行操作不会有输出。
    # 查看键盘事件
    sudo evtest /dev/input/event2
    
    键盘文件

    二、 目录操作指令

    2.1 目录与路径

    说到目录,我们经常会用到的几个词是:根目录主目录当前目录上级目录。分别是什么意思呢?

    1. 根目录。是系统的最顶级目录,用/表示。

      cd / # 切换到根目录
      
      根目录
    2. 主目录。主目录又叫用户主目录,我们在系统主界面直接打开shell,其实就是在根目录下。用~表示。主目录的最末级,是自己设置的用户名。

      cd ~ # 切换到主目录
      
      主目录
    3. 当前目录。是你的shell指令,当前位于什么目录下。可通过shell:$之间的路径显示判断。用.表示。

      当前目录
    4. 上级目录。是当前目录的上一级,如上图中,当前目录的上一级为/dev,在上一级为/。用..表示。

      cd ../ #切换到上级目录
      
      切换到上级目录

    路径,是与目录紧密关联的另一个概念,是指的要到达你的操作对象,需要经历的目录序列;分为绝对路径相对路径

    1. 绝对路径。是指的从根目录开始,直到你要操作的对象的目录序列。
    2. 相对路径。是指的从当前目录开始,直到你要操作的对象的目录序列。
      两种路径,各有其适用的情况。
    3. 相对路径。当你所操作的文件,位于当前路径的下层,或者位于不远的临近区域,那么适合用相对路径
    4. 绝对路径。当你所操作的文件,位于遥远的另一个分支,那么适合用绝对路径
      依然以我们上面,键盘文件来举例。我当前位于主目录(~),想去监听键盘文件event2。用什么路径更方便呢?肯定是相对路径。我们需要首先来看一下目录到达event2和主目录的树形结构。
      路径

    我们当前所在目录为主目录。可以看到,主目录是从根目录开始/->home->ubuntu下来的。而我们要操作的对象,从根目录向下就和我们当前目录分离了,是/->dev->input->event2。如果我们使用相对路径去操作event2,那么将会经历一个非常长的路径:ubuntu->home->/->dev->input->event2。而且其实是无意义的,因为绝对路径就是从根目录(/)开始的。而我们刚才的相对路径里面,其实就包含了从根目录开始,一直到event2的一段。那么绝对路径就是:/->dev->input->event2

    sudo evtest /dev/input/event2
    
    绝对路径

    如果我们位于~/Documents下,我们要对~/Pictures里面的图像进行操作。那么,使用相对路径就较为简单:

    cd ~/Documents
    ls -lh ../Pictures/OIP-1.jpeg
    

    需要额外提到的一点是,此处的路径使用的..开头,表示上级目录。在我们上面已经提到。

    相对路径

    2.2 目录的操作

    以下指令[]的是可选内容,<>是自定义内容

    2.2.1 创建目录

    指令为:

    mkdir [-p] <目录名>
    

    其中:

    1. mkdir-- make directory,创建目录的意思
    2. -p -- 如果添加,可以一次性创建多级目录
      比如:
    cd 
    mkdir ./mydir  #可以创建一个新的名字为mydir的目录
    ls
    
    创建单级目录
    cd 
    mkdir -p ./mydir2/pic/  #可以创建一个新的名字为 mydir2 的目录,
    #并在 mydir2 下面,再创建一个 pic 目录
    ls && ls ./mydir2
    
    创建多级目录

    2.2.2 删除目录

    指令为:

    rmdir [-p] <目录名>
    

    示例,删除刚才创建的目录。
    rmdir只能删除\color{red}{非空}目录。

    rmdir ./mydir  # 可以删除
    rmdir ./mydir2 # 报错,因为下面还有一个pic目录
    
    单目录删除

    -p 删除。如果删除子目录后,父级目录为空,则把父级目录也会删除。

    rmdir -p mydir2/pic # 删除成功,而且mydir2也没了
    

    在这里,使用./mydir2/picmydir2/pic 是不同的,使用./mydir2/pic ,删除命令会把你当前的目录算作要删除的最顶级目录,会报参数错误。而使用mydir2/pic则会只截至到mydir2

    mkdir -p mydir2/pic/
    rmdir -p ./mydir2/pic
    

    依然需要一个隐含条件:pic目录下没有东西,如果我们把里面放上东西,比如一张图片。再次尝试

    cd && mkdir -p mydir2/pic/ && cp ./Pictures/OIP-1.jpeg ./mydir2/pic/
    rmdir -p ./mydir2/pic
    
    非空报错

    可以使用如下命令,对文件夹及其内的文件进行删除。\color{red}{慎用}!!

    rm -rf mydir2
    
    删除目录及文件

    2.2.3 切换目录

    切换目录的指令是cd(change directory),切换目录。 参考上述相对路径、绝对路径。
    使用pwd(print working directory)指令可以查看当前的路径。

    cd <path>
    pwd
    

    2.2.4 列出目录

    使用ls,可以列出当前目录下的内容。前面已经多次使用过。其有几个参数

    序号 参数 作用
    1 -a 显示所有包含项目,包括隐藏项目
    2 -l 以长格式显示文件属性,大小等详细信息
    3 -d 仅显示目录的详细信息
    4 -R 递归显示出目录及其子目录的内容
    5 -S 以文件大小降序排序显示文件
    6 -t 以文件最近一次的修改时间排序显示文件

    几个之前文档中不常用的指令测试

    ls -lhS
    
    根据文件大小排序
    ls -lhSa
    

    .bash_history 就是隐藏文件。在上面的命令中,并没有显示出来。但在目前的文件中显示出来了。

    显示隐层文件,按照大小排序
    ls -lhSR ./Pictures
    
    递归列出
    ls -lhSRd */
    
    列出当前的所有目录
    ls -lhSR */
    
    去掉d后 文件出来了

    相关文章

      网友评论

          本文标题:Linux(四)目录和文件(一) 文件类型、路径及目录操作

          本文链接:https://www.haomeiwen.com/subject/bqklvdtx.html