2.从命令行管理文件
Linux 2 从命令行管理文件
关于文件系统基础、文件和目录操作、链接、以及I/O重定向和管道的核心概念。
1. 文件系统 (Filesystem) 基础
什么是文件系统?
- 文件系统是操作系统用来管理文件和目录的一种机制。
- 它控制着数据如何被存储和检索,实现对文件和目录的有序化、结构化管理。
- 常见的类Unix文件系统类型包括:
ext3,ext4,xfs。
ls -l 输出详解
执行 ls -l 命令可以查看文件和目录的详细属性,输出结果通常包含9列:

- 文件类型和权限: 第一个字符表示类型(
-普通文件,d目录,l符号链接),后面9个字符表示权限。 - 硬链接数: 指向此文件inode的硬链接数量。
- 所有者 (Owner): 文件或目录的拥有者。
- 所属组 (Group): 文件或目录所属的用户组。
- 大小 (Size): 文件的大小(以字节为单位)。
- 最后修改月份: …
- 最后修改日期: …
- 最后修改时间: …
- 名称 (Name): 文件或目录的名称。
举个例子,如果我对-开头的文件使用cd命令,是会被拒绝的,因为这是一个普通文件而不是一个目录。
2. 核心文件/目录操作命令
创建
- 创建文件:
touch <filename>: 创建一个空文件或更新现有文件的时间戳。
cp <source> <destination>: 复制文件。
vi <filename>: 使用vi编辑器创建并编辑文件。输入:进入命令行模式,wq退出并保存。vi/vim的更多详细操作我们暂且按下不表。

- 创建目录:
mkdir <dirname>: 创建一个新目录。
维护
- 复制:
cp
你可以随时用man命令来查看关于这些命令的文档。 - 删除:
rm(文件),rmdir(空目录),rm -r(递归删除目录及其内容)

- 移动/重命名:
mv
重命名也是使用mv命令,mv并不是单纯的移动。而是“修改指针”或者“复制并删除”。
- 更改属组:
chgrp
- 更改属主:
chown
3. 硬链接 (Hard Link) vs 软链接 (Soft Link)
- Inode: 可以理解为文件在硬盘上的唯一标识符,存储了文件的元数据(如权限、大小、位置等)。
硬链接 (ln)
- 创建:
ln <original_file> <hard_link_name> - 特性:
- 实质上是给同一个 inode 创建了另一个文件名。
- 删除、移动或重命名原始文件,不会影响硬链接,因为它直接指向 inode。
- 不能跨文件系统创建。
- 不能对目录创建硬链接。
软链接/符号链接 (ln -s)
- 创建:
ln -s <original_file> <soft_link_name> - 特性:
- 相当于一个快捷方式,存储的是原始文件的路径。
- 如果原始文件被删除、移动或重命名,软链接将失效(dangling link)。
- 可以跨文件系统创建。
- 可以对目录创建软链接。


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

如果我们rm掉~目录下的源文件,你发现那个硬链接的还是会在,硬链接数从2变为了1,而软链接的变成了悬空的指针(变成了红色高亮的断开链接)。
4. I/O 重定向与管道
Linux Shell中有三个标准流:
- 文件描述符0:
stdin(标准输入) - 文件描述符1:
stdout(标准输出) - 文件描述符2:
stderr(标准错误)
重定向 (Redirects)
- 输出重定向:
>: 将命令的 标准输出 重定向到一个文件(覆盖文件原有内容)。>符号默认就是操作1 (stdout)。ls -l > listings.txt
>>: 将命令的 标准输出 追加到一个文件的末尾。echo "Hello" >> listings.txt
- 错误重定向:
2>: 将命令的 标准错误 重定向到一个文件。ls /nonexistent 2> error.log
- 输入重定向:
<: 将文件的内容作为命令的 标准输入。cat < listings.txt
管道 (Pipes)
- 符号:
| - 作用: 将一个命令的
stdout直接连接到另一个命令的stdin,实现命令的串联处理。 - 示例:
1
2# 将 ls -l 的输出通过 more 命令进行分页显示
ls -l | more