2.从命令行管理文件

Linux 2 从命令行管理文件

关于文件系统基础、文件和目录操作、链接、以及I/O重定向和管道的核心概念。


1. 文件系统 (Filesystem) 基础

什么是文件系统?

  • 文件系统是操作系统用来管理文件和目录的一种机制。
  • 它控制着数据如何被存储和检索,实现对文件和目录的有序化、结构化管理。
  • 常见的类Unix文件系统类型包括:ext3, ext4, xfs

ls -l 输出详解

执行 ls -l 命令可以查看文件和目录的详细属性,输出结果通常包含9列:

VirtualBoxVM_2JATjTiWmo.png

  1. 文件类型和权限: 第一个字符表示类型(- 普通文件, d 目录, l 符号链接),后面9个字符表示权限。
  2. 硬链接数: 指向此文件inode的硬链接数量。
  3. 所有者 (Owner): 文件或目录的拥有者。
  4. 所属组 (Group): 文件或目录所属的用户组。
  5. 大小 (Size): 文件的大小(以字节为单位)。
  6. 最后修改月份: …
  7. 最后修改日期: …
  8. 最后修改时间: …
  9. 名称 (Name): 文件或目录的名称。

举个例子,如果我对-开头的文件使用cd命令,是会被拒绝的,因为这是一个普通文件而不是一个目录。


2. 核心文件/目录操作命令

创建

  • 创建文件:
    • touch <filename>: 创建一个空文件或更新现有文件的时间戳。
      VirtualBoxVM_fbQmsabdCL.png
    • cp <source> <destination>: 复制文件。
      VirtualBoxVM_IsxqxI6uee.png
    • vi <filename>: 使用 vi 编辑器创建并编辑文件。输入:进入命令行模式,wq退出并保存。vi/vim的更多详细操作我们暂且按下不表。
      VirtualBoxVM_lCQqIF4OsD.png
      VirtualBoxVM_rm1HpuZGCu.png
  • 创建目录:
    • mkdir <dirname>: 创建一个新目录。
      VirtualBoxVM_HjFMv0fGgi.png

维护

  • 复制: cp
    VirtualBoxVM_NPQoyFceDj.png
    你可以随时用man命令来查看关于这些命令的文档。
  • 删除: rm (文件), rmdir (空目录), rm -r (递归删除目录及其内容)
    VirtualBoxVM_hielyK9uBK.png
    VirtualBoxVM_yQLvdzhCH3.png
  • 移动/重命名: mv
    重命名也是使用mv命令,mv并不是单纯的移动。而是“修改指针”或者“复制并删除”。
    VirtualBoxVM_RJVHDT0lBs.png
  • 更改属组: chgrp
    VirtualBoxVM_D4Bj8wEr4H.png
  • 更改属主: chown
    VirtualBoxVM_gDnKuWtUBd.png

  • Inode: 可以理解为文件在硬盘上的唯一标识符,存储了文件的元数据(如权限、大小、位置等)。

硬链接 (ln)

  • 创建: ln <original_file> <hard_link_name>
  • 特性:
    • 实质上是给同一个 inode 创建了另一个文件名。
    • 删除、移动或重命名原始文件,不会影响硬链接,因为它直接指向 inode。
    • 不能跨文件系统创建。
    • 不能对目录创建硬链接。

软链接/符号链接 (ln -s)

  • 创建: ln -s <original_file> <soft_link_name>
  • 特性:
    • 相当于一个快捷方式,存储的是原始文件的路径。
    • 如果原始文件被删除、移动或重命名,软链接将失效(dangling link)。
    • 可以跨文件系统创建。
    • 可以对目录创建软链接。

Acrobat_r72maEYC26.png

VirtualBoxVM_270WwlUQZC.png

通过这张图我们可以看到,硬链接的inode号是一样的,而软链接的是不一样的。

VirtualBoxVM_TswrrY0LRT.png

如果我们rm掉~目录下的源文件,你发现那个硬链接的还是会在,硬链接数从2变为了1,而软链接的变成了悬空的指针(变成了红色高亮的断开链接)。


4. I/O 重定向与管道

Linux Shell中有三个标准流:

  • 文件描述符0: stdin (标准输入)
  • 文件描述符1: stdout (标准输出)
  • 文件描述符2: stderr (标准错误)

重定向 (Redirects)

  • 输出重定向:
    • >: 将命令的 标准输出 重定向到一个文件(覆盖文件原有内容)。> 符号默认就是操作 1 (stdout)
      • ls -l > listings.txt
        VirtualBoxVM_f7QGhtEPSz.png
    • >>: 将命令的 标准输出 追加到一个文件的末尾。
      • echo "Hello" >> listings.txt
        VirtualBoxVM_awiNI9DV83.png
  • 错误重定向:
    • 2>: 将命令的 标准错误 重定向到一个文件。
      • ls /nonexistent 2> error.log
        VirtualBoxVM_AXNVY779w6.png
  • 输入重定向:
    • <: 将文件的内容作为命令的 标准输入
      • cat < listings.txt
        VirtualBoxVM_2zVUYsvw02.png

管道 (Pipes)

  • 符号: |
  • 作用: 将一个命令的 stdout 直接连接到另一个命令的 stdin,实现命令的串联处理。
  • 示例:
    1
    2
    # 将 ls -l 的输出通过 more 命令进行分页显示
    ls -l | more
    VirtualBoxVM_wzmqbbh4BI.png