本文最后更新于 2025-02-26,学习久了要注意休息哟

第一章 Linux文件系统

1.1 Linux文件类型

1.1.1文件的分类

我们的Windows中,我们通过文件的扩展名可以知晓文件的类型,但是在Linux中不用后缀名来进行区分,因为在Linux中一切皆为文件,你既可以使用vim打开一个txt的文件,也可以打开一个目录文件。

在前面我们学过一个 ls - l 的命令,通过这个命令我们可以看到文件的类型。

image-20240110141758721

在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

在这个例子中,第一个字符 bc 表示 example_block_deviceexample_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