文件管理
本篇讲述Linux中的文件操作指令,和Linux文件系统的知识。这部分内容会很多也很杂,但如果想学习或想Linux操作进阶建议还是仔细阅读一下。我写起来也很累的QwQ(虽然我写文档也是为了巩固)
Linux的文件结构
Linux的基本哲学:一切皆文件。
Linux将几乎所有类型的资源都抽象成了文件或文件类型。这使得Linux的访问方式统一、数据处理灵活、以及统一化的权限控制。
同时在Linux中没有盘的概念,所有文件的起始位置都是根目录,如果一颗倒置的树。
文件和目录被组织成一个单根倒置树结构
文件系统从根目录下开始,用“/”表示 \
根文件系统(rootfs):root filesystem
标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
以 . 开头的文件为隐藏文件
路径分隔的 /
文件名最长255个字节
包括路径在内文件名称最长4095个字节
蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容
Linux 常见的目录
/etc 服务的配置文件
/boot 系统启动的文件
/root 超管的家目录
/home/xxx 普通用户的家目录
/dev 设备文件 磁盘 光驱
/tmp 临时目录
/proc 进程相关的文件信息
/mnt 临时挂载点
Linux 文件类型
1 | 一共有七种,分别是: |
- 普通文件
Linux中数量最多的一种文件类型,包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);以及各种压缩文件
d 目录文件
字面意思,就是目录,和Windows的文件夹一样。能使用cd
命令进入。
p 管道文件
管道文件时一种特殊的文件类型,也叫FIFO(命名管道)。它的主要目的是实现进程间通信(IPC),允许不相关的进程通过文件系统进行数据交换。FIFO是first-in-first-out(先进先出)的缩写,指的是数据的处理顺序。
与匿名管道不同,FIFO是一种命名管道,它在文件系统中有一个可见的节点(虽然不存储实际数据)。多个程序可以通过打开/读写这个特殊文件来通信,避免了直接操作同一普通文件可能导致的冲突问题。
s 套接字文件
这类文件是用于网络数据连接。当启动一个服务来监听客户端的请求时,客户端就可以通过套接字来进行数据通信。最常出现的位置在/var/run目录中
c 字符设备
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等
l 链接文件
类似Windows的快捷方式,可以直接通过其跳转到目标目录位置或运行/读取目标文件
b 块设备
块设备文件就是存储数据供系统存取的接口设备。是硬盘的文件映射。
好了,这里开始就是涉及到具体的命令操作了,建议自己装一台虚拟机顺手进行试试
1 查看文件类型
ls -l <目录> 查看目录下所有文件的详细信息。其中第一排就是文件类型
2 文件操作命令
了解如何想Windows一样创建,移动,修改,删除文件
2.1 显示当前工作目录 pwd
每个shell和系统进程都会有一个当前的工作目录(即CWD:current work directory)
显示当前shell CWD的绝对路径即指令**pwd
**
pwd指令的含义是printing working directory
1 | pwd有两个参数: |
2.2 绝对和相对路径
- 绝对路径
以正斜杠/(根目录开始)
完整的文件路径
可以一路沿伸到任何一个文件名
- 相对路径
以.或..开始
一般情况是以当前工作目录往后沿伸(真一路..一级级父目录招商去为什么不用绝对路径)
可以方便快速的找到目标文件/文件夹
1 | 两个关于路径的指令: |
2.3 更改目录 cd
指令cd
:change directory 改变工作目录(当前命令行所在目录)
选项: -P 进入软链接目录时根据软链接的指向跳转至物理路径,而不是在软链接的虚拟路径
参数:可以使用绝对或相对路径
1 | #切换至父目录 |
2.4 列出目录内容 ls
指令ls
:list 列出当前目录的内容或指定目录
常见选项:
1 | -a 让隐藏文件一并显示 |
说明:
1 | ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和 @LS_COLORS变量定义 |
2.5 查看文件状态 stat
文件相关信息:metadata(元数据)、data(文件的内容数据)
每个文件都有三个时间戳:
access time 访问时间,简称atime
。读取文件内容时更新
modify time 修改时间,简称mtime
。修改文件内容时更新(如写入、追加、删除内容)
change time 改变时间,简称ctime
。元数据或内容变化时更新(如权限、所有者、硬链接数、内容修改等)
1 | 拓展: |
2.6 确定文件内容 file
文件可以包含多种类型的数据,可以使用file
命令检查文件的类型,确定该使用什么方式打开或使用
1 | # file [选项] <文件名> |
2.7 文件通配符模式
文件通配符模式:wildcard pattern。用于匹配符合条件的多个文件,方便批量管理文件
通配符使用特定的符号(这被称为元字符)表示特定的匹配规则。
1 | # 常见的通配符: |
1 | # 系统设定好的字符类 |
1 | # 终端测试的输出 |
所以通配符应该是模糊的匹配,使用过程中并没有说的那么精确。精确严格的匹配可能更需要的是正则表达式?
2.8 创建空文件和刷新时间 touch
命令touch
可用于创建空文件或刷新文件的时间
1 | # touch [选项] <文件名> |
这个指令很简单,可以理解成windows的右键创建新文件。但windows会带后缀,Linux不会,完全空白
2.9 复制文件和目录 cp
利用命令cp
可以实现文件或目录的复制
1 | # cp [选项] <目标文件> <目标路径> cp:copy的缩写 |
这个指令参数很多,但不要害怕,大部分时间用到的参数都很少。
——复制文件可以在目标路径上加上文件名,这样也能做到重命名
——同理,复制文件夹也一样
2.10 移动和重命名文件 mv
命令mv
:实现文件或目录的移动和更名
注:
在同一分区移动数据时,速度快:原因是数据存储位置并未发生改变。至改变了对应的路径
在不同分区移动数据时,速度相对慢:原因是数据位置发生变化,从一个分区转移到了另一分区
1 | # mv [选项] <目标文件> <目标路径> |
如同windows中的剪切和重命名一般,mv也是这些作用。很简单,但实用。
2.11 批量修改文件名 rename
命令rename
:批量修改文件名
1 | # rename [选项] <旧字符串> <新字符串> <文件名通配符> |
命令prename
1 | # 在其他一些系统上可能会使用这个第三方的库命令,也可以进行替换操作 |
2.12 删除文件 rm
命令rm
:删除文件
此命令非常危险,谨慎使用。
注:建议先使用mv将需要删除的文件移动到临时目录再删除或先做好备份再删除
1 | # rm [选项] <文件路径> |
同时rm删除文件,如果文件正在被使用还没解除占用,则会进入等待。等待占用释放后就会立刻删除。(执行后就无法挽回了)
命令shred
:删除文件并对文件所在区域进行覆写,杜绝文件恢复的可能
1 | # shred [选项] <文件路径> |
命令unlink
:删除指定的文件(不能用于目录)
1 | # unlink <文件路径> |
命令rmdir
:删除空目录
1 | # rmdir [选项] <文件夹路径> |
注:目录里面就算有一个空文件夹此时也是非空的状态,无法直接删除的
2.13 显示目录树 tree
命令tree
:用于显示较为详尽的路径之间的关联信息,方便查看
1 | # tree [选项] <路径> |
2.14 创建目录 mkdir
命令mkdir
:用于创建目录
1 | # mkdir [选项] <路径> |
2.15 删除空目录 rmdir
命令rmdir
:用于删除空目录
1 | # rmdir [选项] <路径> |