
02_Linux-文件管理
本文最后更新于 2025-02-26,学习久了要注意休息哟
第一章 Linux文件系统
1.1 Linux文件类型
1.1.1文件的分类
我们的Windows中,我们通过文件的扩展名可以知晓文件的类型,但是在Linux中不用后缀名来进行区分,因为在Linux中一切皆为文件,你既可以使用vim打开一个txt的文件,也可以打开一个目录文件。
在前面我们学过一个 ls - l
的命令,通过这个命令我们可以看到文件的类型。
在Linux系统中的每种文件的类型都用一个字符进行标识,主要是有7种类型并用字符进行标识,每个字符的标识如图所示。
| 文件类型 | 类型符号 | 描述 |
| ———— | ——– | ———————————————————— |
| 普通文件 | - | 指ASCII 的文本文件、二进制可执行文件,以及硬链接文件 |
| 块设备文件 | b | 块 的 输入/输出 设备文件 |
| 字符设备文件 | c | 原始输入/输出设备文件,每次I/O仅一个字符 |
| 目录文件 | d | 包含若干文件或子目录 |
| 套接字设备 | s | 套接字是方便进程之间通讯的特殊文件。与管道文件不同的是,套接字能通过网络链接使不同计算机的进程之间进行通讯 |
| 符号链接文件 | l | 只保留了所指向文件的地址,而不是文件本身 |
| 管道文件 | p | 用于进程间的管道文件 |
1.1.2 普通文件
普通文件(Regular File)是 Linux 系统中最常见的文件类型。它可以包含任何类型的数据。例如,它可能包含文本、程序或二进制数据等。普通文件还可以进一步被分类为文本文件和二进制文件。
文本文件:这些文件包含人类可读的字符,并且可以使用文本编辑器(如 vim、nano 或 gedit 等)进行查看和编辑。
二进制文件:这些文件包含编译过的程序,或者其他非文本格式的数据。尝试用文本编辑器查看这些文件,你会看到一堆看起来无意义的字符。
在使用 ls -l
命令查看文件详细信息时,普通文件会被标记为 -
,例如:
-rw-r--r-- 1 user group 123 Jan 1 00:00 example.txt
-rw-r--r-- 1 student student 8980 3月 24 2020 examples.desktop
- rw- r-- r--
文件类型 用户主 用户组 其他人
7 4 4
r 写入
w 读取
x 执行
- 无权限
在这个例子中,第一个字符 -
表示 example.txt
是一个普通文件。其他字符表示文件的权限、所有者、大小和修改时间等信息。
1.1.3 目录文件
目录文件(Directory File)在 Linux 中是一种特殊的文件,它实际上是一个文件的索引,该文件包含了其他文件和目录的列表。当我们创建一个目录时,系统会自动创建一个目录文件来存储该目录的相关信息。
目录文件包含了目录下所有文件和子目录的名字,以及指向这些文件和子目录 i-node 的指针。但请注意,目录文件并不包含这些文件和子目录的实际内容,也不包含这些文件和子目录的具体位置,这些信息是被存储在各自的 i-node 中的。
在使用 ls -l
命令查看文件详细信息时,目录文件会被标记为 d
,例如:
drwxr-xr-x 2 user group 4096 Jan 1 00:00 example_directory
在这个例子中,第一个字符 d
表示 example_directory
是一个目录文件。其他字符表示目录的权限、所有者、大小和修改时间等信息。
1.1.4 链接文件
链接文件是一种特殊的文件,它是对另一个文件的引用。Linux中有两种链接文件:硬链接和符号链接(也被称为软链接)。
硬链接:硬链接文件与它所链接的原文件共享相同的i-node和存储空间,换句话说,硬链接文件和原文件是完全相同的文件,只是名字不同。请注意,硬链接文件不能跨越不同的文件系统,并且不能链接目录。
符号链接:符号链接,或者说软链接,相当于Windows系统中的快捷方式。它是一个独立的文件,有自己的i-node,但它的内容是所链接文件的路径。符号链接可以链接任何类型的文件,并且可以跨越不同的文件系统。
在使用 ls -l
命令查看文件详细信息时,链接文件会被标记为 l
,例如:
lrwxrwxrwx 1 user group 7 Jan 1 00:00 example_link -> example_file
在这个例子中,第一个字符 l
表示 example_link
是一个链接文件,箭头后面的 example_file
是它所链接的文件。其他字符表示链接文件的权限、所有者、大小和修改时间等信息。
1.1.5 设备文件
设备文件是一种特殊的文件,它用于表示系统中的设备,包括块设备和字符设备。
块设备:这种设备在处理数据时以较大的固定大小(称为块)为单位进行处理。硬盘、光驱等存储设备就属于块设备。
字符设备:这种设备在处理数据时以字符为单位进行处理,如键盘、鼠标等输入设备和打印机等输出设备。
在使用 ls -l
命令查看文件详细信息时,块设备文件会被标记为 b
,字符设备文件会被标记为 c
。例如:
brw-rw---- 1 root disk 8, 0 Jan 1 00:00 example_block_device
crw-rw---- 1 root dialout 4, 64 Jan 1 00:00 example_character_device
在这个例子中,第一个字符 b
或 c
表示 example_block_device
或 example_character_device
是一个块设备或字符设备文件。其他字符表示设备文件的权限、所有者、设备号和修改时间等信息。
套接字设备:这一类设备经常用于网络数据的链接,可以启动一个程序来监听用户 的要求
常见的字符设备文件:
- /dev/console 控制终端
- /dev/input/event0 ~ event4 键盘
- /dev/input/mouse0 ~ mouse2 鼠标
- /dev/ttyS0 : 串口设备 ,和我们Windows中的 COM口是一样的
- /dev/null/ 空设备 当我们需要屏蔽一个设备的时候,我们可以重定向到 空设备
常见的块设备文件:
- /dev/sda : 硬盘设备
- /dev/sda1 : 硬盘的第一个主分区
- 硬盘类型 :
- scsi : sd开头
- ide : hd 开头
- 硬盘设备编号
- a:表示第一主盘
- b:表示第一从盘
- c:代表第二从盘
- 分区编号
- 1:表示第一分区
字符设备和块设备的区别 : 1)操作设备的基本单位,字符设备一次只能读取1个字符, 块设备可以一次性读取一块数据
sdc4 第二从盘 第4分区
1.1.6 管道和套接字文件
管道文件使用 p 开头,我们的管道文件是用于进程间通讯所使用的,比较类似于我们的套接字文件,我们的套接字文件是用在我们不同主机之间的通讯,而我们的管道文件是 用于程序与程序之间相互通讯所使用。
可以通过命令 mkfifo
来创建一个一个管道文件
3.2 Linux文件属性
3.2.1 文件权限信息
-rw-r--r-- 1 student student 8980 3月 24 2020 examples.desktop
权限信息 文件属主 文件属组 大小 文件最后修改时间 文件名
权限信息
- | rm- | r-- | r--
文件类型 文件属主 同组用户 其他用户
r:read 读取
w:write 写入
x:excute 执行
-: 表示没有权限
权限表示方法
字符表示权限
字符权限:rwx | r-x |rw-
111 101 110
绝对权限:7 5 6
当我们在进行查看文件属性时,我们使用字符权限表示法,当我们在程序中对文件进行权限规范时我们使用绝对权限
u:user 文件属主
g:group 同组用户
o:other 其他用户
a:all 所有用户
3.2.2 Linux目录结构
| 目录名称 | 功能 |
| ———– | —————————————————- |
| /etc | 存放系统配置文件 |
| /bin | 常用命令存放目录 |
| /sbin | 存放root的指令文件 |
| /lib | 存放库文件 |
| /home | 用户主目录 |
| /boot | 包含内核和启动文件 |
| /dev | 设备文件存放目录(用于和底层驱动管理) |
| /usr | 应用程序存放目录 |
| /mnt | 挂载目录,我们的共享文件夹就是挂载在这个目录下面 |
| /root | root用户主目录 |
| /proc | process 的缩写,主要描述系统进程 |
| /lost+found | 在该目录中可以找到一些误删除或丢失的文件,并恢复他们 |
Linux 的目录结构采用的是树状结构,这种结构以一个根(/)作为开始。这种方式和 Windows 的森林结构(多个独立的树形结构,如 C:, D:\ 等)有所不同。
以下是 Linux 文件系统的一些重要目录:
bin :存放常用的命令 例如 rm、ls 、cat 、cp
etc :存放系统配置文件 例如 密码 /ect/passwd
lib : 存放程序常用的库文件 例如 : 动态库.so 文件(相当于是Windows中的. dll) 静态库 .a
lost+found : 回收站
mnt : 共享文件夹
usr : 用户安装的应用
boot : 内核启动文件 分配内存 分配中断(CPU核心)
dev : 设备
dev/tty 串口设备 字符设备
dev/sda 存储设备 块设备
dev/input 标准外部输入 字符设备 鼠标 键盘
==dev/stdin 标准输入 从键盘==
==dev/stdout 标准输出 到终端==
==dev/stderr 标准错误 错误码==
home: 普通用户家目录
root : 超级用户
根目录、树型结
一级子目录/bin、/boot、/etc、/home、/usr、/root、/dev、/lib、/mnt、/tmp、
/var 目录介绍及其中常用文件介绍
用户主目录~,工作目录.,父目录..的介绍及使用
3.2.3 绝对路径和相对路径
在 Linux 系统中,路径是用来定位文件或目录的重要工具。路径的种类主要有两种:绝对路径和相对路径。
绝对路径:==路径从文件系统的根目录 /
开始==,给出了从根目录到目标文件或目录的完整路径。例如,/usr/share/doc
就是一个绝对路径,它代表的是文件系统中的 /usr/share/doc
这个目录。
相对路径:==相对路径是以当前目录为参照点的路径==,它并不从 /
开始。举个例子,假设当前目录是 /usr
,那么 share/doc
就是一个相对路径,它指向的是当前目录 /usr
下的 share/doc
这个目录,其实际位置是 /usr/share/doc
。
绝对路径和相对路径在实际使用中各有优势。如果我们知道文件或目录的完整位置,就可以使用绝对路径来直接访问。然而,如果我们正在操作的文件或目录就在当前工作目录或其附近,使用相对路径可以更为便捷。
在使用相对路径时,还有两个特别的符号可以帮助我们快速定位:
.
:代表当前目录..
:代表父目录
举例来说,假设当前目录是 /usr/share
,那么 .
就代表 /usr/share
,..
就代表 /usr
。这两个符号在实际操作中经常用到,能够极大提高工作效率。
第二章 磁盘管理
NTFS (New Technology File System):
- 特点: 强大的文件系统,支持大文件和大容量分区。具有许多高级功能,如权限控制、日志记录和压缩。
- 优点: 适用于Windows系统,对大容量存储和大文件支持良好。
- 缺点: 在某些非Windows环境下可能支持不够好,不是所有设备都能够正常读写NTFS格式的磁盘。
exFAT (Extended File Allocation Table):
- 特点: 是FAT32的升级版本,支持更大的文件和分区。设计用于移动设备和闪存存储。
- 优点: 兼容性较好,支持大文件,适用于跨平台使用。
- 缺点: 不如NTFS在大容量存储和高级功能方面强大,可能在某些非Windows环境下的兼容性存在问题。
FAT32 (File Allocation Table 32-bit):
- 特点: 旧的文件系统,支持最大文件大小为4GB,最大分区容量为2TB。
- 优点: 兼容性较好,适用于较小容量的设备和不需要高级功能的场景。
- 缺点: 由于文件和分区大小的限制,不适合大容量存储和大文件的需求。
ext4 (Fourth Extended File System):
- 特点: 是Linux系统上常用的文件系统,支持大文件和大容量分区,具有较好的性能和稳定性。
- 优点: 适用于Linux系统,支持大容量和大文件,有较好的性能。
- 缺点: 在Windows和macOS上的兼容性相对较差。
vfat文件系统
vfat是Linux对DOS,Windows系统下的FAT(包括fat16和Fat32)文件系统的一个统称。
VFAT主要用于处理长文件的一种文件名系统,它运行在保护模式下并使用VCACHE进行缓存,并具有和Windows系列文件系统和Linux文件系统兼容的特性。因此VFAT可以作为Windows和Linux交换文件的分区
2.1 查询命令
2.1.1 df查询磁盘设备名
让ubantu识别U盘,插入U盘,选择连接到虚拟机—虚拟机选项—可移动设备—U盘名(disk2)—连接—桌面左侧可看到U盘
虚拟机如果识别到U盘,在/dev目录下多了一个设备/dev/sdb1
2.1.2 fdisk查询磁盘
-l 设备名(查看设备的文件系统类型)
sudo fdisk -l 或者 sudo fdisk -l /dev/sdb1 —–>==可知道sdb1文件类型是FAT32,属于vfat类型==
2.2 磁盘操作命令
2.2.1 mount 挂载命令
挂载U盘、移动硬盘、光盘、网络文件系统(NFS)、windows的C、D分区
mount -t 目标文件系统类型 源设备名(df) 目标子目录(mkdir)
2.2.2umount卸载命令
umount 目标设备名/目标子目录
2.3 操作实例
2.3.1挂载U盘
我们将U盘插入到Linux系统中,然后进行下面的步骤
步骤:
使用情况 如果 出现了 /dev中可以读取到硬盘 但是 无法对设备进行读取 这种情况 则需要 进行下面的挂载
1、使用df命令查询源设备名称,(查看设备文件系统类型sudo fdisk -l)
2、使用mkdir创建目标子目录/mnt/usbs
3、使用mount命令挂载 sudo mount -t vfat /dev/sdb1 /mnt/usb
4、使用文件或目录操作,cp / mv
5、使用umount命令取消挂载/卸载设备
第三章 文件权限
3.1 chown 改变文件的属主或属组
chown 新属主 目标文件
chown 新属主: 目标文件
chown 新属主:新属组 目标文件
-R 递归修改
sudo chown root main.c # 修改文件属主
sudo chown -R linux_2:student hqyj/ # 修改文件夹以及文件夹内部的所有文件 的用户 和用户组
# 属主:属组
sudo chown -R linux_2 hqyj/ # 修改文件夹以及文件夹内部的所有文件
3.2 umask 改变系统权限掩码
umask:直接查看默认掩码,一般是002,这是由系统配置文件设置的,可以在/etc/profile中去修改
umask 003 :设置掩码为003
创建文件的权限 = 666 - 掩码
创建目录的权限 = 777 - 掩码
777
111 111 111
rwx rwx rwx
3.3 chmod 文件权限
分为三类权限
修改权限的两种方式:
chmod 777 文件名
chmod u/g/o/a +-r/w/x 文件名
chmod u/g/o/a +-r/w/x 文件名
sudo chmod -u+r/w/x 文件名
chmod u 文件属主
chmod g 文件属组
chmod o 其他用户
chmod a 所有用户
+r/w/x 增加权限
-r/w/x 降低权限
chmod u+x new.sh === chmod 766 new.sh
为 new.sh 增加可执行权限 为文件属主
1、用 vim filename.sh 创建一个shell 脚本
2、在里面写一些命令
3、改权限 运行
```shell
umask 0777 # 设置权限掩码
touch test.c # 创建新文件
ls -l # 查看新文件的权限
ls -l | grep "test.c"
# 通过数值设置
sudo chmod 111 test.c
sudo chmod 222 test.c
sudo chmod 444 test.c
sudo chmod 555 test.c
sudo chmod 666 test.c
sudo chmod 333 test.c
sudo chmod 777 test.c
# 通过字符指定设置
sudo chmod 000 test.c #先初始化设置成000 方便后续的操作
sudo chmod u+r test.c
sudo chmod g+r test.c
sudo chmod o+r test.c
sudo chmod a+r test.c
第四章 文件压缩与归档
4.1 文件压缩与解压缩
==文件的压缩的操作对象是单个文件==,==不能对文件夹进行操作==,在操作的完成后,文件大小会变小
4.1.1 压缩文件格式
下面是命令对应的文件格式
gzip —-> .gz
bzip2 —> .bz2
xz —–> .xz
上述压缩方式
压缩率:从上到下是依次递增
压缩速率:从上到下依次递减
==简而言是:空间优秀和时间优秀不能同时存在==
==时间复杂度 空间复杂度==
==时间换空间 空间换时间==
4.1.2 gzip压缩
==gzip== 文件名 将文件按照gzip 格式压缩
压缩后,源文件就不存在的,会生成 文件名.gz 的压缩后的文件
解压命令 ==gunzip== 文件名.gz
gzip 文件名 用于压缩文件
gunzip 文件名.gz 用于解压文件
4.1.3 bzip2压缩
==bzip2== 文件名 将文件按照bzip2 格式压缩
压缩后,源文件就不存在的,会生成 文件名.bzip2 的压缩后的文件
解压命令 ==bunzip2 文件名.bz2==
bzip2 文件名 用于压缩文件
bunzip2 文件名.bz2 用于解压文件
4.1.4 xz压缩
==xz==文件名 将文件按照xz 格式压缩
压缩后,源文件就不存在的,会生成 文件名.xz 的压缩后的文件
解压命令 ==unxz 文件名.xz==
xz 文件名 用于压缩文件
unxz 文件名.xz 用于解压文件
4.2 归档和解归档—tar
又称之为 打包和解包
操作对象是多个文件,一般多用于操作目录文件
会将目录文件自身以及子目录下所有文件都归档程一个文件
==归档默认是不压缩==
4.2.1 归档的命令
归档的命令 tar
tar 参数
-c 归档
-x 解归档
-v 显示详细信息
-f 必须写再选项最后,后面就接文件名
tar -cvf dar.tar dar1 归档命令
tar -xvf dar.tar 解归档
dar.tar 命名无所谓 .tar 只是为了方便标识
改归档文件名,不会对源文件有影响
附加选项:
-z 归档的同时,将归档后的文件按gzip格式压缩
-j 归档的同时,将归档后的文件按bzip2格式压缩
-J 归档的同时,将归档后的文件按xz 格式压缩
```
归档同时压缩命令
tar -zcvf dar.tar.gz dar1
tar -jcvf dar.tar.bz2 dar1
tar -Jcvf dar.tar.xz dar1
解归档同时解压缩命令
tar -zxvf dar.tar.gz
tar -ixvf dar.tar.bz2
tar -Jxvf dar.tar.xz
通用解压命令
tar -xvf dar.tar.gz
tar -xvf dar.tar.bz2
tar -xvf dar.tar.xz
- 感谢你赐予我前进的力量