参考书籍:
《Ubuntu Linux系统管理与运维实战》第一版 张春晓 肖志健 著
一. 了解Ubuntu
1. Linux是什么
Linux 是一个开源的、类 Unix 的操作系统内核。
2. Linux发行版
Linux发行版是为了方便人们管理Linux系统(内核和应用程序)而产生的版本。
①Debian
Debian 是一个自由且开源的操作系统,其核心是 Linux 内核,但它也可以使用其他内核,如 kFreeBSD 和 Hurd。Debian 是由 Debian 项目开发的,这个项目由志愿者组成,致力于创建一个稳定、高质量且完全自由的软件生态系统。
②Ubuntu
Ubuntu 是基于 Debian 的一个开源操作系统,主要由 Canonical Ltd. 和社区开发者共同维护。它旨在为桌面、服务器和云环境提供一个用户友好的、稳定的操作系统。
③Arch Linux
Arch Linux 是一个以简单、灵活和滚动更新为核心理念的 Linux 发行版。它面向高级用户和开发者,提供了一个精简且高度可定制的操作系统环境。
④Fedora
Fedora 是一个由 Fedora 项目开发和维护的开源 Linux 发行版,该项目得到了 Red Hat 的赞助和支持。它旨在为桌面、服务器和云环境提供一个最新、前沿且稳定的操作系统。
⑤openSUSE
openSUSE 是一个由社区驱动的开源 Linux 发行版,由 SUSE 公司和 openSUSE 项目共同维护。它提供了一个稳定、安全且易于使用的操作系统环境,适合桌面、服务器和开发者使用。
⑥CentOS
CentOS(Community ENTerprise Operating System)是一个基于 Red Hat Enterprise Linux (RHEL) 的免费开源 Linux 发行版。它旨在为用户提供一个企业级的、稳定的操作系统,具有与 RHEL 相同的功能和兼容性,但不包含官方的商业支持。
⑦Red Hat Enterprise Linux
Red Hat Enterprise Linux (RHEL) 是由 Red Hat 公司开发和发布的企业级 Linux 发行版。它被广泛应用于商业和企业环境中,提供高稳定性、安全性和长期支持。
3. 了解Ubuntu
Ubuntu桌面版:Ubuntu Desktop 是 Ubuntu 的桌面版,专为个人用户和家庭用户设计,提供了一个用户友好的图形界面,适用于日常计算、办公、浏览网页和多媒体等用途。Ubuntu 22.04LTS默认安装GNOME42。
Ubuntu服务器版:Ubuntu Server 是针对服务器环境设计的 Ubuntu 版本,旨在提供稳定、安全和高性能的操作系统,用于各种服务器场景,包括云服务器、虚拟机和物理服务器。
Ubuntu云版:Ubuntu Cloud 主要指的是用于云计算环境的 Ubuntu 版本,通常包括 Ubuntu Server 和一些特定的云计算工具和服务。
Ubuntu优麒麟版:Ubuntu Kylin 是 Ubuntu 的一个官方衍生版,专为中国用户设计。它以 Ubuntu 为基础,进行了本地化的改进和优化,提供了一些特别的功能和工具,以更好地满足中文用户的需求。
4. GNU GPL和POSIX介绍
GNU GPL:GNU General Public License (GPL) 是一种广泛使用的自由软件许可证,由自由软件基金会(Free Software Foundation, FSF)创建。GPL 旨在保护软件自由和开放性,确保用户可以自由使用、修改和分发软件。
POSIX:POSIX(Portable Operating System Interface)是一个为操作系统提供标准化接口的规范,旨在确保不同操作系统之间的兼容性和可移植性。POSIX 标准定义了操作系统 API、命令行接口、工具和实用程序的行为,以便程序可以在符合 POSIX 的操作系统上编译和运行,而无需修改源代码。
5. 桌面环境
①KDE
KDE 是一个流行的开源桌面环境,主要用于 Linux 和其他类 Unix 操作系统。它提供了一个高度可定制和用户友好的图形用户界面。其将常用的配置、插件等都打包到系统设置里。资源消耗大。
Ubuntu的分支Kubuntu采用KDE作为默认桌面。
②GNOME
完全基于GPL协议的桌面环境。
标准版Ubuntu的默认桌面环境。
③Xfce
轻量级的桌面环境。
6. 无引号、单引号、双引号
单引号 (
'
):用于定义字面量字符串,所有内容(包括特殊字符和变量)都被视为字面量,特殊字符不会被解释或替换。双引号 (
"
):用于定义可以包含变量替换和特殊字符处理的字符串。变量会被替换,转义字符会被处理。不加引号:在 Linux 命令行中,如果不使用引号(单引号或双引号),字符串会被 Shell 处理,这通常涉及到变量替换、通配符扩展和空格的处理。
二. 文件系统
1. 文件系统的层次结构
Linux系统中,最小的数据存储单位为文件,一切皆文件。
①树形层次结构
在windows系统中,存储空间先分为不同硬盘,在各个硬盘上再划分分区,在每个分区上创建文件系统,在文件系统上创建不同的目录,在目录下创建一个或多个子目录。所以,windows的文件组织也是树形层次结构,但是这个树形结构的根不是唯一的,基本上每个分区都是一个相对独立的树形结构,且树与树之间并没有什么必然联系。如下:
在Linux文件系统中,逻辑上只有一个根文件系统(‘/’),它作为整个文件系统树的根节点。所有的文件和目录都从这个根文件系统开始,构成一个统一的树形结构。所有的存储空间和设备共享一个根目录,不同的磁盘块、不同的分区再挂载上称为某个子目录的子目录,甚至设备也挂载成某个子目录下的一个文件。目录时逻辑上的区分,分区存储设备是物理上的区分。
然而,物理上,整个文件系统可以分布在多个存储设备或分区上。每个存储设备或分区可以被格式化成独立的文件系统,并挂载到根文件系统的某个目录下。这样,用户可以在根文件系统下创建和挂载其他文件系统。
根目录是所有文件和目录所在的地方,需要挂载上一个磁盘分区。
如下:
tree
命令,可以查看这种树形的层次结构。tree /home
查看某个文件的结构。
创建不同分区(装不同文件系统)的目的是可以把不同资料放到不同分区中管理,降低风险。此外,大硬盘搜索范围大,效率低,创建分区(文件系统)可以提高效率。
②路径名
绝对路径:文件系统中用来唯一标识文件或目录位置的完整路径。它从文件系统的根目录开始,提供了一个完整的、唯一的路径描述。绝对路径以根目录 / 开始,这表示路径的起点是文件系统的根。绝对路径提供了从根目录到目标文件或目录的完整路径,包括所有中间目录。绝对路径在整个文件系统中是唯一的,可以确保精确地找到文件或目录。可通过
pwd
命令查看当前绝对路径。/home/user/documents/file.txt 是一个绝对路径,它从根目录 / 开始,经过 home、user 和 documents 目录,最终指向 file.txt 文件。相对路径:相对路径是相对于当前工作目录的路径。它不以根目录 / 开始,而是从当前目录开始描述。例如,如果当前目录是 /home/user,那么相对路径 documents/file.txt 指向 /home/user/documents/file.txt 文件。
Linux中,相对路径有4种表示方法,‘.’、'..'、‘~user’、‘~’。.表示当前目录,./lin:当前目录下的lib目录。..表示父目录,../lib表示上级目录下的lin目录。~user表示某个用户的主目录,user是用户账号。~表示当前用户的主目录。
③Linux目录结构
Linux目录组织参考UNIX,其命名有规律可循。
2. 文件类型
①普通文件
在 Linux 文件系统中,普通文件是最常见的一种文件类型,用于存储数据、文本文档、程序、图像等各种内容。
普通文件用于存储实际的数据,可以是文本、二进制数据、图像、音频或其他任何类型的信息。
它的内容是连续的字节流,没有固定的结构,具体内容由文件的类型和用途决定。
ls -l 等价于 ll
:ls列出目录内容, -l表示详细展示。file
可以查看文件具体类型。
ll
-rw-r--r-- 1 user group 1234 Aug 2 12:34 example.txt
第一个字符 - 表示这是一个普通文件,其后跟着的是文件的权限、链接数、所有者、组、文件大小、修改时间和文件名等信息。
②目录文件
目录文件是用于组织和管理其他文件和子目录的特殊文件。目录文件包含了一个文件列表,指向其包含的文件和子目录的名称及其对应的 inode 号码。通过目录文件,用户和系统可以快速查找和访问存储在该目录中的文件和其他目录。在 ls -l 命令的输出中,目录文件的类型标识为 d,例如
drwxr-xr-x
表示一个目录。
③字符设备文件
字符设备文件代表可以进行字符流数据传输的设备,如终端、串口和某些类型的硬件设备。只能按顺序一字节一字节的读取。这些文件通过逐字符的方式与设备进行数据交换,适用于不需要块操作的设备。字符设备文件的类型在 ls -l 命令的输出中以 c 开头,后跟设备的主设备号和从设备号,例如
crw-rw-r-- 1 root dialout 4, 64 Aug 2 12:34 ttyS0
。
④块设备文件
在 Linux 文件系统中,块设备文件代表可以进行块级数据传输的设备,如硬盘、SSD 和光盘驱动器。这些设备通过以固定大小的数据块进行数据交换,适用于需要块级操作的设备。块设备文件允许系统高效地读取和写入大块数据。块设备文件的类型在 ls -l 命令的输出中以 b 开头,后跟设备的主设备号和从设备号,例如
brw-rw---- 1 root disk 8, 0 Aug 2 12:34 /dev/sda
。支持随机读取,通常配备高速缓存。
字符设备和块设备的定义数据OS的设备访问层,与实际物理设备关系无关系。设备访问层下面是驱动程序,所以只要是驱动提供的方式,都可以使用。
⑤管道
管道文件是一种特殊文件,用于在进程之间传递数据。它允许一个进程的输出直接作为另一个进程的输入,实现数据流的传递和处理。管道文件在 ls -l 命令的输出中以 p 开头,表示管道。管道分为无名管道(用于同一进程组的进程间通信)和命名管道(FIFO,用于不同进程间的通信),后者可以在文件系统中创建并具有明确的路径。管道文件在
ls -l
输出中以p
开头。匿名管道:用于临时地连接同一进程组中的进程。创建和使用时,管道的存在仅在进程间有效,例如通过
|
操作符实现的管道。ps -ef | grep mysql
通过|将ps和grep两个命令连接起来,ps -ef
的执行结果会作为grep mysql
命令的输入,经过grep筛选后,才会输出到屏幕上。ls -l /etc | more
。由于没有文件名,匿名管道只能用于具有亲缘关系的进程间通信。命名管道(FIFO):命名管道克服了以上的限制,其以FIFO的形式存储在文件系统中。命名管道是一个设备文件,只要进程可以访问该路径,就可以通过FIFO相互通信。数据按照先进先出原则,且管道中不保存数据。
管道的创建:Linux提供两种方式创建命名管道,一种是在shell下通过命令交互创建管道,另一种是在程序中调用系统函数创建命名管道。
Shell下创建管道:通过
mknod
和mkfifo
两个命令。
VMware-Virtual-Platform:~/demo$ mknod fname p # fname为文件名, p代表文件类型为管道文件
VMware-Virtual-Platform:~/demo$ ls
fname
VMware-Virtual-Platform:~/demo$ mkfifo pname2 # pname2是文件名
VMware-Virtual-Platform:~/demo$ ls
fname pname2
系统函数创建管道:
int mkfifo(const char* pathname, mode_t mode);
pathname是文件名,mode是文件的访问权限,成功返回0,失败返回-1。该函数在<sys/types.h>
和<sys/stat.h>
头文件中声明。命名管道的读写方法:
⑤套接字
套接字是进程间通信的特殊文件,与管道不同的是,套接字能通过网络连接不同计算机的进程之间进行通信。在ls命令中,套接字以字母s标识。
套接字不与任何数据块关联。
⑥文件链接
文件链接(file linking)在计算机系统中指的是创建指向一个文件的引用,而不是直接复制文件内容。
Inode(索引节点、i节点):文件系统中用于存储文件元数据的数据结构。每个文件或目录在文件系统中都有一个唯一的inode号码,通过该号码,系统可以找到文件的元数据。文件名和inode号码是分开的,文件名映射到文件的inode号码,inode号码则存储实际的文件信息。当文件被创建时,文件系统分配一个inode来存储文件的元数据。
符号链接(软链接):
符号链接是一个特殊的文件,它包含一个指向另一个文件或目录的路径。
符号链接与原始文件是不同的文件,具有自己的 inode 号码。
符号链接可以跨文件系统,并且可以链接目录。
如果原始文件被删除,符号链接会变成一个悬挂链接(dangling link),指向一个不存在的路径。
ls命令中以字母l开头。
硬链接:
硬链接是文件系统中的一种链接类型,它允许多个目录项指向同一个文件数据块。在文件系统中,硬链接具有相同的 inode 号码,这意味着它们实际指向同一数据块。
硬链接不能跨文件系统,也不能链接目录。
删除硬链接中的一个(文件名)不会删除实际文件数据,只有当所有硬链接都删除时,文件数据才会被删除。
创建硬链接
ln /path/to/original /path/to/hardlink # original原始文件,hardlink硬链接文件
创建软链接
ln -s /path/to/original /path/to/symlink # original原始文件,符号链接文件
ls -il # -i参数是显式i节点
3. 创建文件
①使用touch命令创建文件
touch主要功能是为了改变时间戳(访问时间和修改时间),但指定的目标文件不存在时,touch会创建一个空白文件。若touch后的文件已经存在,则会修改目标文件的时间戳为当前系统时间。
touch filename
②使用重定向创建文件
Linux系统中每个命令的输出都有默认的目标设备(ls, cat, more默认输出设为屏幕,lp等命令默认输出为打印机)。
但提供了一条特殊操作可以改变默认输出的目标文件,即IO重定向。
重定向分为输入重定向和输出重定向,其中输出重定向可以创建文件。
输出重定向两种操作符:
>和>>
其区别在于,在文件已经存在情况下,>
会覆盖已有文件,>>
会追加内容到文件后面,不会清楚原来内容。ll >> filename
将当前文件ll展示的内容存入filename中。
③使用vi命令创建文件
vi是UNIX命令,是全屏幕纯文本编辑器。
在Linux中,vi编辑器叫vim, 是vi的增强版,与vi完全兼容,且实现了很多增强的功能。
vi编辑器支持两种模式,分别为编辑模式和命令模式,在编辑模式下可以完成文本编辑的功能,在命令模式下可以完成对文件的操作命令。
默认打开vi编辑器后进入命令模式,从命令模式切换到编辑模式使用A、a、O、o、I、i键,从编辑模式切换到命令模式用Esc键。
4. 显示文件列表
ls option file
,option为选项,file是文件
ls
显示非隐藏文件和目录ls -l
ll
列出文件及子目录的详细信息
ls -lh
以易读方式显示文件和目录的大小KB.MB,GB
5. 显示文件内容
①拼接文件内容:cat命令
cat命令基本功能是拼接文本文件内容并输出到屏幕上。但通常用来显示某个文件内容。
cat option file
option是选项,-n和-b(忽略空行)添加行号,-s用来压缩空白行。file为要显示的文件。cat file | more
通过管道实现分屏,cat file的结果作为more的输入,然后通过空格键切换页面。cat file1 file2 > file3
通过cat合并文件,当cat后有多个文件,会将这些文件的内容拼接起来。>重定向到file3创建了文件。
②分屏显示:more命令
more命令以全屏幕方式分页显示文件的内容,一次显示一屏,满屏后暂停,在底部有一个已显示的百分比。
more option file
option选项:-数字用来指定每屏要显示的行数,-c表示不滚动屏幕直接刷新,-s压缩空白行,-d 选项会在尝试滚动到文件末尾时显示一条提示信息,告知用户无法再继续查看 。more -dc -20 file
每屏显示20行,不滚动直接刷新,末尾告知。
③前后翻页分屏显示:less命令
less实现了more的功能,但比more更先进。对于大文件,less性能更优,不用刚开始就把整个文件读入内存。
less命令语法与more相似。less可通过up和page down前后翻页, q退出less命令。
④查看前几行内容:head命令
head命令用来查看文件开头部分。
head option file
option是选项:-n表示要输出的行数,-c表示要显示的字符数,file是文件。head -n 15 file
显示file的前15行。head -c 30 file
显示file前30个字符。
⑤查看最后几行内容:tail命令
tail option file
option是选项:-f使得tail随时检查目标文件是否发生变化,若检查到文件的内容有所增长,则会把增长的部分实时输出到屏幕上。-n指定要输出的行数。在使用含有-f选项的命令时,可按Ctrl+C组合键退出命令。
tail -n 3 -f file
实时显示后3行。
6. 文件的常用操作
①复制文件
复制文件是为现有的文件创建一个副本。
cp option source dest
option为选项,source为源文件或目录,dest问目标文件或目录。原始文件和目标文件都可以通过绝对路径或相对路径来表示。source若是多个文件,文件名用空格隔开。cp ./*.txt backup/
cp支持文件通配符,将当前目录中所有txt文件,复制到backup目录中。可通过cp实现文件重命名。
②移动文件
移动文件只改变源文件在整个目录的位置,不会创建副本。
mv option source dest
option是命令选项,source是源文件,dest是目标文件或目录。source若是多个文件,文件名用空格隔开mv也支持通配符,实现批量转移。
③删除文件
适用通配符进行批量操作。
rm option file
option为选项,file为要删除的文件或目录。file若是多个文件,文件名用空格隔开。
④比较文件
diff option file1 file2
option是命令选项,file是文件或目录。
# diff file1.txt file2.txt
2c2,2
< This is a test
---
> This is an experiment
<
:表示文件1
中的行。>
:表示文件2
中的行。---
和***
:用于分隔不同的文件或版本。2c2,2
是一种差异的表示语法,由3部分组成。第1部分的数字1表示第一个文件中的行号,2c2,2中的第一个2表示第一个文件的第二行。中间字母表示是由什么原因造成不同,c表示修改,a表示增加,d表示删除。最后一组数字表示第2个文件中相应行号,2,2表示2-2行。
⑤重命名文件
通过mv完成。
7. 搜索文件
①快速搜索文件:locate命令
该命令是Linux中搜索最快的命令,因为其不是实时在文件系统中搜索目标文件,而是通过一个数据库索引来搜索的。
与locate命令有关的文件有updatedb、/etc/updatedb.cof、/var/lib/mlocate/mlocate.db。/var/lib/mlocate/mlocate.db是一个文件索引数据库文件,里面包含locate搜索所需要的信息。updatedb是一个命令,用来更新/var/lib/mlocate/mlocate.db的内容,通常updatedb由crontab定期自动执行,也可以手动执行。/etc/updatedb.cof用来配置要查询哪些目录或文件。
locate option pattern
option是命令选项,pattern是匹配模式,可以是文件名一部分,也可以使用通配符,默认模糊匹配只要包含pattern即可。
②按类型搜索文件:whereis命令
whereis主要用来定位可执行文件、源代码文件、帮助文件在文件系统中的位置。与其他搜索命令不同的是,默认下,whereis命令仅搜索特定的位置,这些位置包含PATH和MANPATH系统变量指定的路径等。用户可通过选项来指定其他的路径。
whereis [option] [-BMS dir -f] name
option主要有3个选项,-b指定搜索二进制文件,-m指定搜索命令手册,-s指定搜索源代码文件。-B, -M, -S这三个选项用来指定whereis命令搜索的路径,分别针对二进制、命令手册、源代码文件,搜索路径跟在这三个选项后面,多个路径用空格分开,最后以-f结尾。name为搜索的文件名,可通配符。whereis -bms -B . -f a
三种文件类型,指定当前目录,文件名含a。
③搜索二进制文件:which
which命令依赖于PATH系统变量,只在文件名中搜索,不支持通配符。
which filename
filename为文件名
④全功能搜索文件:find
全磁盘实时搜索。
find [start-point] [expression]
start-point指搜索起始位置,没指定则默认当前工作目录。expression指搜索表达式,主要表达搜索什么样的文件以及如何处理搜索到的文件。支持通配符。
搜索表达式包含以下几个部分:
[1] 匹配条件:匹配条件返回真或假,通常基于文件的某些属性,例如文件名、修改时间等。
[2] 动作:表示对搜索结果的处理方法,例如打印、删除等。
[3] 全局选项:该选项会影响所有的匹配条件和动作。
[4] 局部选项:该类选项只会影响跟在他们后面的匹配条件或动作。
[5] 运算符:主要用来连接搜索表达式中的各个部分。
8. 文本内容筛选
①使用grep命令检索文本内容
grep [option] pattern [file]
option是命令选项,pattern是要匹配的字符串或正则表达式,file是要搜索的文件。
grep "main" file.c hello.c
从后两个字符串搜索字符串"main"grep -e "main" -e "print" . -r
递归搜索当前目录下文件含"main"或"print"字符串的文件。grep "main" . -r | more
将找到符合条件的文件给more输出。
②筛选其他命令输出的结果
ps -ef | grep -i mysql
判断mysql服务进程是否存在
③在grep命令中使用正则表达式
grep "loved\?" demo.txt
9. 文本排序
sort [option] file
option表示命令选项,file是要排序的文件。
sort demo.txt -o sorted.txt
sort -m sorted1.txt sorted2.txt
10. 文件的压缩、解压和打包
注意:除zip外,gzip、compress、bzip2命令都不会将多个文件压缩为单个文件。
①压缩文件
zip命令(.zip)
zip [option] zipfile file
option为常用命令选项,zipfile为压缩后的文件名,file为要压缩的文件,多个文件名用空格隔开(多个压缩在一起),可使用通配符。
zip -d src.zip file.c
从压缩文件src.zip中删除file.c
gzip命令(.gz)
gzip [option] [name..]
option是命令选项,name...可是多个名字或通配符。
gzip *.log
默认gzip将文件逐个压缩(没有压缩在一起),压缩文件以源文件名+.gz,操作完成后源文件被删除。gzip不可将多个文件压缩为一个,但是可结合tar命令实现这个操作。
compress命令(.Z):语法同gzip
bzip2(.bz2)
bzip2 [option] [name...]
option是命令选项,name...可是多个名字或通配符(单独压缩)。压缩名字为原来名字+.bz2,操作完成后源文件被删除。
②解压文件
zip、gzip、cpmpress、bzip2对应解压缩命令为:unzip、gunzip、uncompress、bunzip2。
③打包文件
tar [option]... file...
option为命令选项,file...为多个文件或目录,支持通配符。
tar主要用于将多个文件和目录打包成一个归档文件(.tar),而压缩命令(如 gzip、bzip2、xz)用于将文件或归档文件压缩以减少其大小。tar 不进行压缩,只打包,而压缩命令则专注于压缩。通常,它们结合使用,如 tar 与 gzip 结合创建 .tar.gz 文件,以同时打包和压缩数据。
tar -cf documents.tar /home/user/documents
将/home/user/documents目录打包成documents.tartar -xf documents.tar
解包documents.tartar -czf documents.tar.gz /home/user/documents
压缩打包tar -xzf documents.tar.gz
解包解压缩tar --list -f documents.tar
显示包内容tar -cf documents.tar --exclude='*.txt' /home/user/documents
将/home/user/documents目录打包成documents.tar, 排除.txt文件tar --preserve-permissions -cf documents.tar /home/user/documents
保留权限和所有权的归档文件
11. 目录管理
①显示当前工作目录
pwd
②改变目录
cd [option] path
option为命令选项,path为路径。option:-P若切换到的目标目录是一个符号链接,直接切换到符号链接指向的目标目录;-L若若切换到的目标目录是一个符号链接,直接切换到字符链接代表的目录,而非符号链接指向的目录。
③创建目录
mkdir [option]... directory...
option为命令选项,directory...以空格分开的多个目录。option只有-p:若父目录不存在,先创建父目录。
④移动目录
mv source dest
source是要移动的源目录,dest是目的地目录。
⑤复制目录
cp -r source dest
将source目录复制到dest目录中
⑥删除目录
rm -r name
删除名为name的目录
三. 用户和权限管理
1. 用户和用户组
①用户和用户标识号(UID)
用户登录的时候用的是账号和密码,但Linux并不认识用户账号,在Linux系统中唯一标识用户的是一个整数值,即用户标识号。
其中0为超级用户root。1-499是系统用户,用来保证系统服务正常运行,一般不会登陆Linux系统。500-60000为普通用户,这些用户可以登录系统,并且拥有一定的权限。
当管理员添加用户时,通常Linux系统会为其分配这个范围内的用户标识号。
登录名和用户标识号并不一定一一对应,实际上,Linux允许几个登录名对应同一个用户标识号。
用户账号和UID对应关系在:
/etc/passwd
文件中。
②用户组和组标识号(GID)
所谓用户组,是指一组权限和功能类似的用户的集合。
Linux系统本身预定义了许多与系统功能有关的用户组,例如root、daemon、bin以及sys等。用户也可以根据自己的需求添加用户组。
用户组拥有组名、组标识号及组成员等属性。通过组标识号来标识用户组,组标识号也是一个整数值。
用户组的信息保存在/etc/group文件中。
③/etc/passwd文件
该文件存储了当前系统的用户账户信息,文件所有者为root,所属组为root。对于该文件,只有root用户才有写入权限,其他的用户和组只有读取权限。
该文件中,每一行代表一个用户,7个字段,用冒号 : 分隔。
用户名:密码:用户ID:组ID:注释:家目录:Shell程序
jdoe:x:1001:1001:John Doe:/home/jdoe:/bin/bash
用户名:区分不同用户,用户名唯一。
密码:可选项,为空表示无密码;若该字段为小写x,则表示密码存在/etc/shadow文件中;若为其他的字符串,则视为加密后的密码。
用户ID(标识号):唯一用户标识,区分不同用户,可存在多个用户拥有同一个用户ID,其实都是一个用户。
组ID(标识号):用户的主用户组标识。每个用户可属于多个组。除了passwd文件中指定其归属的基本组外,还可在/etc/group文件中指明一个组所包含的用户。
注释:包含用户的一些信息
家目录:root是/root, 其他是/home/用户名
Shell程序:用户登录后默认启动的Shell程序,需要指定绝对路径。
④/etc/shadow文件
该文件包含当前系统中的用户密码以及密码过期时间等信息。
该文件只对root及同组成员可读(不同于/etc/passwd对于所有用户都可读),只有root可写。
每一行描述一项密码信息,由冒号隔开的9个字段。
用户名:加密密码:最后一次修改日期:最小时间间隔:最大时间间隔:警告时间:密码禁用期:账户失效时间:保留字段
jdoe:$6$abcd1234$...:18567:0:99999:7:14:0:
用户名:同上。
加密密码:为空表示无需密码;含*或!等特殊字符,表示用户无法通过密码认证登录,但可通过其他方式认证登录。*表示账户被锁定,!表示密码被锁定,!后为原有密码。以$数字$开头表示使用了对应加密算法。
最后一次修改日期:以天为单位,从1970年1月1日算起。0表示下次登录需要修改密码,空串表示禁用该功能。
最小时间间隔:表示用户修改密码后,至少多长时间后才允许再次修改。空串或0表示没有限制。
最大时间间隔:表示当前密码有效的最长时间。空字段则表示没有限制。最大时间间隔<最小时间间隔则无法修改。
警告时间:密码过期之前,在登录时发出警告的天数。0或空串表示无警告时间。
密码禁用期:表示密码过期后,仍然接受该密码的最长天数,超过则用户无法登录。空串表示无限制。
账户失效时间:表示账户有效期,从1970年1月1日算起。空串表示永不过期。
保留字段:保留将来使用。
⑤/etc/group文件
保存当前系统用户组信息。
每行描述一个用户组,由4个字段组成,冒号隔开。
该文件所有者为root用户,对于所有用户都可读,只有root可写。
若/etc/passwd中指定的用户组在/etc/group中不存在,则用户无法登录。
组名:密码:组ID:成员列表
admin:x:1001:jdoe,smith
组名:用户组名称。
密码:一般Linux系统用户组无密码,该字段一般为空或小写x。
组ID(GID):整数值。
成员列表:由逗号隔开的组内用户。
2. 用户管理
①添加用户:useradd命令
useradd [option] login
option是命令选项,login是登录用户名(系统中唯一)。
②添加用户:adduser命令
adduser [option] user
option是命令选项,user是用户名。
③修改用户:usermod命令
usermod [option] login
option为命令选项,login为用户名。
④删除用户:userdel命令
userdel [option] login
option是命令选项,login是用户名。
⑤修改用户密码:passwd命令
系统管理员可修改指定用户密码,普通用户只能修改自己的密码。
passwd [option] login
option是命令选项,login是用户名。修改自己密码,可不写login。
⑥显示用户信息:id命令
id [option] [user]
option是常用命令选项,user可为多个用户名。id会显示当前已登录的用户的信息。
⑦用户间切换:su命令
su [option] login
option是常用命令选项,login为用户名。若没提供login,表示切换到root用户。
⑧受限的特权:sudo命令
sudo("superuser do" 的缩写)是一个允许用户以另一个用户身份(通常是超级用户 root)执行命令的工具。它在 Unix 和 Linux 系统中非常常见,提供了一种安全、审计的方式来执行需要管理员权限的操作,而不需要直接切换到超级用户。
sudo [option] command
option是常用命令选项,command是要执行的命令。sudo命令最重要的一个配置文件是/etc/sudoers,其保存了哪些用户可以执行sudo命令,以及该用户可执行哪些特权命令。
sudo su -或sudo su
切换到root用户。
3. 用户组管理
①添加用户组:groupadd命令
groupadd [options] group
options是常用命令选项,group是组名。
②添加用户组:addgroup命令
addgroup实际上是adduser命令的符号链接。
addgroup group
group是组名
③修改用户组:groupmod命令
groupmod [option] group
option是命令选项,group是要修改的组名。
④删除用户组:groupdel命令
在删除用户组时,若该组为某用户的主组,则不能删除,需要先将把该组作为主组的用户从该组移除。附加组不影响。
groupdel group
group为组名
4. 权限管理
①介绍
Linux系统的权限可分为权限组、基本权限类型、特殊权限类型、控制访问列表。
权限组:文件的权限组分为所有者(u)、所属组(g)、其他组(o)3种。
基本权限类型:读、写、执行。
特殊权限类型:setuid、setgid、粘滞位。
访问控制列表:可单独控制具体用户,减小了上面粒度较大的问题。
基本权限:
基本权限分为3个权限组,分别为文件所有者、文件所属组、其他用户。
d rwx rwx r-x
三个位置代表一个权限组的权限。文件所有者(u表示):一般指文件的创建者,谁创建文件,默认称为该文件所有者。通常,文件所有者对该文件拥有全部权限。
文件所属组(g):指某个用户组对该文件的访问权限。
其他用户(o):指除文件所有者和所属组之外的系统中的其他用户对该文件的访问权限。
所有用户用a表示。
对于每个文件或目录,都有3种基本权限类型,分别为读、写、执行。读指读取文件内容,写指写入或修改文件内容,执行指用户能执行该文件或进入某个目录。三个权限类型分别用r、w、x表示。若无这种权限,用连字符-表示。
除了这种字母表示外,还支持另一种二进制数字表示法,即分别用二进制100、010、001表示读、写、执行权限,转换成十进制就是4、2、1。7代表拥有所有权限。777表示三个权限组每个都有读写执行的权限。
-
特殊权限:
3种特殊权限,setuid、setgid、粘滞位。前两者是为了使某个程序在执行时能够得到权限提升而设置的,而后者则是为了保护文件或者目录不被他人删除而设置的。前两者通常设置在可执行文件上,后一个通常设置在目录或非可执行文件上
setuid和setgid分别允许用户以文件所有者和文件所属组的身份执行某个文件。这两种权限适合于某个任务所需的权限高于运行者所拥有的权限,而为了运行这个任务,允许用户暂时提高权限。
setuid:在程序执行时设置其为文件所有者的id,即:只要有执行该程序的权限,那么该程序执行时,就相当于该程序的所有者在执行。
setgid:程序在执行时,执行者拥有文件所属组所拥有的权限。
setuid和setgid用字符s表示,setuid占用所有者权限的第三个字符x所在的位置,setgid占用文件所属组权限的第三个字符x所在的位置。若只有setuid或setgid,而无x权限,则用S表示,都有是小写s。
二进制表示法中,setuid在权限的最高位上用十进制数字4表示,而setgid在权限最高位上用十进制数字2表示。
粘滞位:为/tmp目录设置粘滞位后,只有文件的所有者才可以修改或删除/tmp目录中的文件。
其在文件权限中用字符t表示,占用其他用户权限的第三个字符x所在的位置。若只有粘滞位而无执行权限,用T表示,都有是t。
二进制表示:最高位上用十进制数字1表示。
②显示文件权限
③修改文件权限
chmod option... permission file...
file...多个文件用空格隔开,支持通配符。
option表示命令选项,常用的是-R或-recursive,该选项表示递归修改文件权限。
permission参数表示文件的权限,可用字符也可用数字表示。
所有者、所属组、其他用户,用u、g、o表示。
+表示增加权限,-表示删除权限。
file是目录或文件名。
chmod g+w dir1 # 将dir1的访问权限设置为所在组可写。
chmod g-w dir1 # 将dir1的访问权限设置为所在组不可写。
chmod g+w,o-w dir1 # 设置多个权限组
chmod g+w-r,o-w dir1 # 多个权限组合
chmod a+rwx dir1 #为所有用户都增加rwx
chmod g=rw dir1 #为所属组增加rw
chmod u=rwx,g=rw,o=r hello.sh
chmod 764 hello.sh
通过数值修改:若无特殊权限,文件权限可用3位十进制数字表示,第1位表示所有者,第2位表示所属组,第3位表示其他用户。
每位十进制数字都是3种权限数值的和。例如,7表示可读可写可执行,7=4+2+1;5=4+1,表示可读可执行。
751:所有者可读可写可执行,所属组可读可执行,其他用户可执行。
chmod 751 dir1
④更改文件所有权
默认文件所有者是文件的创建者。
chown [option] [owner][:[group]] file...
option表示命令选项,常用的是-R或-recursive,该选项表示递归修改文件权限。--from表示只更改当前的所有者匹配指定的用户的文件。
owner是文件的新的所有者,必须是有效账号。
group是所属组,通过该命令可修改所属组,若group为空,表示只修改文件所有者,否则都修改
file表示文件, 多个可空格隔开,支持通配符。
sudo chown root: dir1 # dir1所有者更为root,不更改所属组,sudo命令用来以root用户的身份执行某个命令(系统配置方面的任务)
sudo chown :root dir1 # 所属组修改
chgrp group file...
来更改文件或目录的所属组,语法与chown基本相同。group为新组名,file为多个文件空格隔开,支持通配符。
⑤文件的特殊权限
chmod u+s data #为data文件设置setuid权限
chmod g+s data #由于setgid权限也用s表示, 只是位置不同,u改为g即可
chmod o+t data #设置其他用户,粘滞位
# 数值表示, 特殊权限的数值放在最高位即可
chmod 4751 dir1 #为dir1目录设置setuid权限,4是setuid权限,751是普通权限。
⑥访问控制列表(ACL)
[d[efault]] u[ser]:uid:[perms]
[d[efault]] g[roup]:gid:[perms]
[d[efault]] m[ask]:[perms]
[d[efault]] o[ther]:[perms]
最前面的default表示设置默认ACL规则,可选的。默认ACL规则主要针对目录,当某个目录被设置了默认ACL规则后,在该目录中创建的文件都会继承该ACL规则
第1条针对特定用户:u:joe:rwx、user:joe:rwx。用户joe有读写执行权限。uid没指定默认为文件所有者
第2条针对用户组:g:staff:rw-, 组staff有rw权限。gid没指定,默认所属组
第3条设置了有效掩码。有效掩码指定了用户和组对该文件的最大访问权限,除所有者外,有效掩码控制了组和其他用户的权限,确保即使在 ACL 中为某个用户或组设置了更高的权限,实际有效的权限也不会超过掩码设置的限制。例如,如果有效掩码设置为 r-x,那么即使 ACL 中为某个用户或组设置了 rw- 权限,该用户或组实际拥有的权限也只能是 r-x。
第4条针对其他用户:o:r--
getfacl查询文件ACL
getfacl file...
file...多个文件空格隔开,支持通配符。使用ls -l显示文件权限时,若文件被设置了ACL规则,且已经设置了权限掩码,则中间的那组权限代表的不是所属组的权限,而是访问掩码。
# file: hello.sh
# owner: liu
# group: liu
user::rwx # 文件所有者权限
user:joe:rwx #用户joe权限,实际为r-x
group::r-x # 所属组权限
mask::r-x # 有效掩码
other::r-x # 其他用户权限
setfacl设置ACL
setfacl [option] file...
option是常用命令选项,file...多个文件空格隔开,支持通配符。
---srw----+
+表示文件是ACL文件。setfacl -m u:bob:rw- myfile.txt
添加或修改用户 bob 对 myfile.txt 的权限setfacl -d -m u:charlie:rw- mydir
为目录mydir设置默认ACL,以便新创建的文件也具有读写权限
⑦设置权限掩码:umask命令
当用户创建一个新的文件夹或目录时,新文件的访问通常被设置为rw-r--r--(644),新目录的访问权限通常设置为rwxr-xr-x(755)。
这个默认访问权限是由umask命令设置的权限掩码决定的。权限掩码规定了要在原有权限的基础上删除的权限,通常使用十进制数字设置。对于文件,每个数字最大值是6,对于目录,每个数字最大是7。
例如,某个用户的权限掩码为022,当用户创建新文件时,用666依次减去掩码中相对应的权限上的数字,其默认访问权限为644。创建目录时,用777减去,其默认访问权限为755。
umask命令可以设置默认的权限掩码,实际上,在用户登录后,会自动调用umask来设置权限掩码。
umask [-S]
直接调用是显示当前的权限掩码,-S是以字符形式显示。umask 244
设置权限掩码为244。
四. 系统启动和关闭
1. Ubuntu的启动
①BIOS阶段
BIOS(Basic Input/Output System)是计算机系统中的一种固件,负责在计算机启动时进行基本的硬件初始化和操作系统加载。它是计算机硬件和操作系统之间的接口。主要完成下面几个任务:
[1] 开机自检(POST):当计算机开机时,BIOS 执行开机自检(Power-On Self-Test),检查计算机的基本硬件组件(如内存、处理器和存储设备)是否正常工作。如果发现问题,通常会发出警报或显示错误信息。
[2] 初始化:初始化计算机的硬件组件,包括处理器、内存、硬盘、键盘、显示器等。确保所有硬件在操作系统加载之前能够正常工作。从 CMOS(Complementary Metal-Oxide-Semiconductor)电池中读取存储的系统配置设置,如启动顺序、硬件设置和时钟设置。这些设置用于定义计算机的启动和操作模式。
[3] 加载引导程序:BIOS 根据启动顺序设置,查找并加载引导加载程序(如 GRUB)。引导加载程序负责加载操作系统内核并将控制权交给它。
②引导程序阶段
BIOS 将控制权交给引导程序GRUB,引导程序负责从硬盘加载操作系统内核。
GRUB会显示启动菜单(如果配置了多个操作系统或内核版本)。用户可以选择要启动的操作系统或内核版本。
然后内核将创建init进程,其ID为1。由init进程根据用户指定的运行级别,继续进行初始化。
③内核阶段
通过GRUB加载内核,并将控制权给内核。内核创建内存中的数据结构,完成硬件诊断,加载各种硬件设备驱动程序。
④进入系统
2. Ubuntu的关闭
①shutdown命令
shutdown [option] [time] [warning-message]
option是常用命令选项,time是时间,warning-message是警告信息。time指定关闭操作的执行时间。24小时制hh:mm, hh是小时,mm是分钟。也可相对时间+m,+表示以当前时间为基准,延迟指定的时间, m为分钟。now表示当前时刻。
sudo shutdown +1
一分钟后关闭sudo shutdown now
立即关闭sudo shutdown -r +0
立即重启
②其他命令
sudo init 0
快速关闭操作系统。halt、poweroff、reboot
:前两者关闭系统,后者重启系统。
五. 服务和进程管理
1. 初始化程序概述
①初始化程序
Linux内核由GRUB加载,而内核接下来会加载Linux的初始化程序(init),由初始化程序完成后面的过程。初始化程序是Linux启动时的第一个进程,该进程的进程ID为1,是所有其他进程的祖先。
在 Linux 启动过程中,init 程序是第一个用户空间的进程,它负责初始化系统和启动其他必要的服务和进程。init 的主要任务是设置系统环境、启动系统服务,并为用户提供交互界面。不同的 Linux 发行版和系统可能使用不同的初始化系统,但 init 概念是核心的。Linux启动完成后,初始化程序便以守护进程的方式存在,一直到系统关闭。
运行级别:描述系统各种可能的状态。(0-关闭电源,1-单用户模式等等)
②systemd
systemd是现代Linux系统中使用的初始化系统和服务管理器,提供了一种更高效和灵活的方式来管理系统服务和启动过程。
systemd管理着其他所有的守护进程,包括systemd本身,在系统引导过程中, systemd是第一个启动的进程,其进程ID为1(有时为保持兼容,进程ID为1的进程仍名为init);而在系统关闭过程中,systemd是最后停止的进程。
由其架构看出,systemd不仅是初始化程序,还是一套软件包。
③systemd的基本配置文件
systemd的配置文件都位于/etc/systemd目录以及子目录中。如果配置系统级别服务,可修改system.conf文件,如果配置用户级别的服务,可修改user.conf文件。
在Linux初始化过程中,对于系统级别的服务,systemd会读取system.conf以及解释并执行/etc/systemd/system目录中的文件;对于用户级别的服务,则会读取user.conf,解释并执行/etc/system/user目录中的文件。
2. 单元
systemd可以管理所有系统资源,不同的系统资源称为单元。systemd通过单元来管理任务,每个单元都有相应的配置文件和类型。
systemd的单元并不是孤立的,他们之间可以相互依赖。systemd的依赖通过以.wants为扩展名的目录来表示。例如poweroff.target目标依赖于plymouth-poweroff服务,那么poweroff.target。wants目录中就会包含一个指向plymouth-poweroff服务的符号链接。
这些以.wants为扩展名的目录位于两个地方,分别为/etc/systemd/system和/lib/systemd/system(前一个优先级更高)。/lib/systemd/system目录中的.wants由系统维护,用户不可修改。/etc/systemd/system目录中的.wants目录可由用户管理,可把自己依配置放在该目录中。
/etc/systemd/system中的符号链接无需自己创建。在启动某项服务时systemd会自动在特定的.wants目录中创建符号链接,在禁用服务时会删除。这些操作使用systemctl完成。
3. 目标
启动计算机时需要启动大量单元,若每次启动都一一写明启动需要哪些单元,显然是非常麻烦的。目标就是为了解决这个问题的一个方案。
目标是一种特殊的单元,同时包含很多单元,启动目标时,会启动目标中所有的单元。
systemd与传统的init初始化程序区别:
[1] 默认的运行级别被默认的目标取代。默认的运行级别在/etc/inittab文件中设置,而默认的目标在/lib/systemd/system/default.target中设置,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。
[2] 启动脚本位置。以前是/etc/init.d目录,符号链接到不同的运行级别目录,例如/etc/rc3.d、/etc/rc5.d等,现在则存放在/lib/systemd/system和/etc/systemd/system目录中。
[3] 配置文件的位置。以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录。在/etc/systemd目录中的修改可覆盖原始配置。
-
对于目标来说,其所包含的单元就是其对于其他单元的依赖。
目标与传统运行级别不同,他们可以同时并存。利用isolate子命令,可实现与传统级别切换相似的功能。
传统初始化程序有默认级别选项,即系统启动时会自动进入运行级别。systemd也提供了默认目标与之对应。可通过get-default获取当前默认的目标,set-default修改当前默认目标。
4. 常用systemd命令
①systemctl
systemctl [option] command [name...]
该命令检查和控制systemd状态,管理各种systemd服务。option是命令选项,command是子命令,name...是多个单元名称空格隔开。
②systemd-analyze命令分析系统启动时的性能
systemd-analyze [option] [command]
option是常用选项,command是常用命令
③hostnamectl命令
hostnamectl [command]
用来查看或修改主机名。command是常用子命令。单命令是显式当前的。
④localectl命令
localectl命令可以查看或修改当前系统的区域和键盘布局。单命令是显式当前系统的区域信息。
区域一般至少包括语言和地区,此外数据格式、小数点符号等也属于区域。
localectl [command]
command是子命令
⑤timedatectl命令
用来查看或修改当前系统的时区设置。
timedatectl [command]
command是子命令。单命令是显示当前的信息。
⑥loginctl命令
单命令是查看当前登录的用户。仅显示已登录的用户。
loginctl [command]
command是子命令
5. 日志管理
systemd提供了自己的日志系统,称为journal,使用systemd日志时,无需额外安装日志服务。
journalctl [option] [matches...]
option为命令选项,matches为匹配的筛选。若没有给其提供任何选项(
journalctl
),则会显示所有日志。
6. 进程管理
①ps
ps执行结果是当前系统中的进程的一个快照,代表进程在某个时刻的状态,是静态的。
ps [options]
options是命令选项。
②pstree
以树状形式显示进程间的调用关系。
pstree [options] [PID]
。option是常用选项,PID是进程ID。若没有指定进程ID,则从systemd进程开始显示。
③top
top命令可以动态的监控进程以及其他系统资源,直接输入top即可。
上半部分为系统运行状态概况。
第一行:当前系统时间、系统自启动以来的累计运行时间、登录系统的当前用户数、系统3个平均负载值(1分钟、5分钟、15分钟的负载情况)
第二行(进程概况):进程总数、运行态进程数量、休眠态进程数量、暂停运行的进程数量、僵尸进程数量
第三行(CPU工作状态):从左至右依次为CPU处于用户模式、系统模式、空闲状态、等待IO状态、处理硬件中断、处理软件中断所占的百分比。
第四行(内存使用情况):系统配置物理内存数量、空闲内存数量、已用内存数量、用作缓冲区的内存数量
第五行(交换分区使用情况):交换分区大小、空间交换分区大小、已有交换分区大小、用作缓冲区的交换分区大小
-
下半部分为各个进程详细信息。
④kill
kill [option] <pid>
终止某个进程。option为常用选项。实际上kill命令功能是向某个进程发送一个信号。
没有指明option(信号), 默认为15:SIGTERM(默认终止信号)
kill -9 1234
SIGKILL(强制终止)
⑤nice和renic
nice用于以指定的优先级启动程序,renice用于调整已经存在的进程的优先级。
nice [option] [command]
option是选项,command是要启动的程序。选项只有一个:-n,指定进程的优先级,为整数值。通过增加nice值可以降低一个进程的优先级,反之可增加进程优先级。
普通用户只能降低进程优先级,而超级用户可以提高进程优先级。对于超级用户,nice值的取值范围为-20~19,对于普通用户,nice值的取值范围为0~19。如果没有指定nice值,默认为10。
nice -12 tar -cvf doc.tar
降低优先级。-
renice [-n] priority [-g|-p|-u] identifier...
-n指定新的优先级,priority为新nice值,-n可以省略。-g指定进程组ID,-p指定进程ID,-u指定进程的拥有者,identifier...为组ID、进程ID或用户名。sudo renice +1 -p 22856
增加该进程的nice值1,优先级降低。
六. 软件包管理
1. 软件包管理概述
①基本概念
软件包:Linux系统中所有软件和文档都是以软件包的形式提供的,主要有两种形式,分别是二进制软件包和源代码软件包。前者用于封装可执行程序、相关的文档以及配置文件等,后者则是包含软件包的源代码以及生成二进制软件包的方法。
DEB是Debian及其派生出来的Linux发行版主要支持的标准软件包格式,其扩展名为.deb。
软件仓储:通常,软件仓储是一组网站,提供按一定组织形式存储的软件包以及索引文件,供软件包管理工具访问。
软件包之间的相互依赖:尽管软件包是一个相对独立的功能组合,但软件包中的软件却不可避免的依赖于其他软件包的支持,这其中主要是对底层库文件的依赖。
有了软件包管理工具,无需人工处理这些依赖关系。在安装软件包时,软件包管理工具会自动判断要安装的软件包与其他软件包的依赖关系,并且会自动安装或者更新所需的软件包。
②软件包管理工具
apt-get:是较早的工具,提供了更稳定和一致的行为,特别适合于自动化任务和脚本,因为其命令和输出格式长期保持不变,确保了脚本的兼容性和可靠性。
apt:是较新的工具,设计用于提供更简洁和统一的用户体验,整合了apt-get和apt-cache的功能,适合日常使用和交互操作。它提供了更友好的输出格式和命令简化。
2. apt-get
①搜索软件包
在正式安装某个软件包前,可先搜索,以便确认软件仓储中是否包含该软件包。
apt-cache [command]
command为子命令
②apt-get基本语法
apt-get [options] [command]
options是常用命令选项,command是子命令。
3. apt
apt [command] [options]
options是常用命令选项,command是子命令。
七. 磁盘和文件系统管理
磁盘是数据存储的物理再提吧,而文件系统是数据存储的逻辑方式。
1. 磁盘管理基础
①磁头
磁头是硬盘驱动器和磁带驱动器中的关键组件,负责读取和写入数据。它由一个非常小的电磁装置组成,通过改变磁场来读取或记录数据到磁性介质上。硬盘的磁头在磁盘的旋转过程中在磁盘表面上移动,而磁带驱动器的磁头则在磁带上进行操作。磁头的精确度直接影响数据的读写速度和准确性。
②磁道
磁道是硬盘或磁带上用来存储数据的连续磁性轨迹。硬盘上的磁道是圆形的,沿着盘片的同心圆分布,每个磁道上可以存储一定量的数据。在磁带驱动器中,磁道是沿着磁带长度方向的条形区域。数据在这些磁道上以磁信号的形式被记录和读取。磁道的排列和密度直接影响存储设备的容量和性能。
③柱面
柱面是硬盘驱动器中的一个概念,指的是由多个磁盘面上的相同磁道组成的一个虚拟“柱体”。具体来说,硬盘上每个磁盘面都被划分成若干个磁道,柱面则包括所有这些磁盘面上相同位置的磁道。例如,硬盘的第一个磁盘面上的第一个磁道与第二个磁盘面上的第一个磁道组成一个柱面。这样,数据可以在不同磁盘面上的相同磁道位置进行读写,提高了数据存取的效率。
④扇区
扇区是硬盘及其他存储设备中最小的数据存储单位,通常大小为512字节或4096字节。它将磁盘上的数据组织成固定大小的数据块,使得数据读写操作更加高效和一致。每个扇区在磁盘上对应于磁道上的一个特定区域,通过这种结构,存储设备可以有效地管理和访问数据。
磁盘存储容量=存储容量=盘片数量×每盘片的磁道数×每磁道的扇区数×每扇区的字节数
2. 文件系统相关基础知识
①文件系统基础知识
FAT:FAT(File Allocation Table)是一种文件系统,用于管理磁盘上的文件和目录。它通过一个文件分配表来记录文件的存储位置和空间分配情况。FAT有多个版本,包括FAT12、FAT16、FAT32和exFAT,其中FAT32支持较大的磁盘容量和文件大小,exFAT则用于更大容量的闪存驱动器。FAT系统简单且兼容性强,但在处理大容量存储和大量文件时,效率较低。
exFAT:exFAT(Extended File Allocation Table)是一种文件系统,专为闪存驱动器和大容量存储设备设计。它克服了FAT32的一些限制,如文件和分区大小。exFAT支持最大16EB的分区和最大256TB的单个文件,适合用于现代大容量存储设备,如SD卡、USB闪存驱动器和外部硬盘。它还提供了更高效的文件分配表和更强的兼容性,尤其是在各种操作系统和设备之间。exFAT的设计使得它成为大容量存储和移动设备的理想选择。
NTFS:NTFS(New Technology File System)是微软开发的文件系统,用于Windows操作系统。它提供了对大容量存储设备和大文件的支持,具有文件权限管理、数据加密、压缩和磁盘配额等先进功能。此外,NTFS具备日志记录功能,能够在系统故障时帮助恢复数据,是现代Windows系统和许多内部存储设备的默认文件系统。
Ext2/Ext3/Ext4:Ext2、Ext3和Ext4是Linux操作系统中常用的文件系统。Ext2是早期的文件系统,提供基本功能但不具备日志功能。Ext3在Ext2的基础上引入了日志记录,增强了数据完整性和恢复能力。Ext4是最新版本,提供了显著的性能改进和扩展功能,包括支持更大的文件和分区、更高的效率和数据完整性保障。Ext4在处理大容量存储和文件时表现优越,同时兼容之前的Ext2和Ext3文件系统。
Btrfs:Btrfs(B-Tree File System)是一个现代的Linux文件系统,旨在提供高级数据管理功能和高效的存储性能。它支持快照、子卷、压缩、数据校验和动态卷管理等功能,能够自动修复数据错误,增强数据可靠性。Btrfs设计用于满足高容量存储需求,并具备灵活的管理和扩展能力,使其在数据保护和系统恢复方面表现出色。
ZFS:ZFS(Zettabyte File System)是一个先进的文件系统和逻辑卷管理器,最初由Sun Microsystems开发。它提供了数据完整性保护、内置快照、克隆、自动修复和高效的压缩功能。ZFS支持大容量存储,具有极强的扩展性,并通过强大的数据保护机制,确保数据的一致性和恢复能力。其设计旨在处理大规模存储系统的需求,并在数据管理和可靠性方面提供卓越的性能。
UFS:UFS(Unix File System)是一种用于Unix及类Unix操作系统的文件系统。最初设计用于早期的Unix系统,UFS提供了基本的文件管理功能,包括文件、目录、权限和符号链接等。它支持大文件和大容量存储,但相较于现代文件系统,其功能和性能可能较为有限。UFS的多个版本,如UFS1和UFS2,提供了不同的扩展功能,如更大的文件系统支持和改进的元数据管理。
ReiserFS:ReiserFS是一种Linux文件系统,由Hans Reiser开发,旨在提供高性能和高效的存储管理。它特别擅长处理小文件和目录结构,采用了基于B树的数据结构来提高文件访问速度。ReiserFS支持动态文件系统结构、日志功能、以及灵活的空间分配,但在维护和开发方面相对较少更新。尽管曾在早期Linux系统中广泛使用,现代系统中较少采用它,因为许多新文件系统提供了更先进的功能和更好的支持。
②块
在Linux文件系统中,最小的读写单位成为块。在创建文件系统时,需要指定块大小。多个块被组织成块组。
块组0有引导块,其余没有。
③引导块
引导块(Boot Block)是计算机存储设备的关键区域,用于启动系统的引导过程。它位于磁盘的最前面,包含启动加载程序的代码,负责初始化硬件并加载操作系统核心部分。引导块的内容和功能根据不同的系统和设备有所不同,如PC上的主引导记录(MBR)和现代系统中的GUID分区表(GPT)与UEFI。引导块的设计确保了操作系统能够正确地从存储设备启动。
④超级快
在Linux中,超级块(Superblock)是文件系统的重要数据结构,位于磁盘或存储设备的开始部分。它包含了文件系统的元数据,如文件系统的总大小、空闲空间、文件系统类型、创建时间和文件系统状态等信息。超级块对于文件系统的管理和维护至关重要,因为它提供了操作文件系统所需的基本信息和结构。损坏或丢失超级块可能会导致文件系统无法正确识别和访问存储的数据。
⑤索引节点
索引节点(inode)是文件系统中的核心数据结构,存储了文件或目录的元数据,如大小、权限、时间戳和数据块位置。文件系统通常将索引节点组织在块组(block group)中,每个块组包含一定数量的索引节点和数据块。索引节点和数据块的关系通过块组来管理,从而优化数据的存储和访问效率。每个块组都有自己的超级块和索引节点表,这些索引节点表记录了文件和目录的元数据。通过这种结构,文件系统能够高效地访问和管理大量的文件和目录。
索引节点与文件一一对应。
3. 创建文件系统
注意:创建分区会清除磁盘,创建文件系统会清除指定分区中的数据。
①创建分区
创建分区是将一个大的磁盘划分为多个逻辑区域的过程。各个磁盘分区可以相对独立的管理,创建不同的文件系统。
fdisk [option] device
option是常用选项,device是要划分分区的设备,通常是/dev/sda、/dev/sdb
对未分区loop1,进行分区
(1) 进入fdisk
sudo fdisk /dev/loop1
(2) 显示帮助
输入m,然后Enter
(3) 输出当前磁盘分区表:p
磁盘分区会导致磁盘上面的数据全部丢失,因此在进行分区前,可输入p,输出当前的磁盘分区,以确定是否指认了正确的磁盘
(4) 创建分区,指定分区类型:n
输入n后,会要求用户指定分区类型,还会显示主分区和扩展分区的数量。
(5) 指定分区号(1~4)。若没指定,默认用最小值。
输入1,或者直接Enter默认
(6) 指定起始扇区
fdisk会给出当前可用扇区范围,若没指定(Enter)会自动选择当前可用最小值
(7) 指定结束扇区
可用两种方式来指定结束扇区:一是"+扇区数",二是"+字节数"。指定字节数时,需要指定单位,可为K、M、G、T、P。若没指定,则默认当前可用的最大扇区。
若用户只想把当前磁盘划分为一个分区,则可直接Enter。若想创建多个分区,则可输入指定数值。例如,创建一个80M的分区,则输入"+80M"。
p进行查看
(8) 创建其他分区
重复(4)~(7), p查看
(9) 写入磁盘
以上操作都是在内存中进行的,并没有真正写入磁盘,若此时退出fdisk,则磁盘数据不会发生任何变化。
为了将用户分区信息写入磁盘,输入w,然后按Enter。
②创建文件系统
重新创建文件系统,首先必须把它卸载掉,否则会出现设备忙而无法更新分区表。
创建完磁盘分区后,可以在分区中创建文件系统,使用mkfs命令来创建Linux文件系统。
mkfs [option] device [size]
option是命令选项,device为要创建文件系统的目标分区。size参数则可以为当前文件系统指定块的数量。除了基本的mkfs命令之外,Linux还提供了其他的一些相关命令来创建文件系统。
mke2fs
该命令用来创建一个ext2、ext3或者ext4文件系统。
mke2fs [option] device [fs-size]
option是命令选项,device表示要创建文件系统的设备,通常是一个磁盘分区。fs-size参数为要创建的文件系统的大小,若省略该参数,则表示文件系统的大小为磁盘分区的大小。
mke2fs还有一个配置文件,其名称为mke2fs.conf,位于/etc目录中。
mkfs.fat
该命令来创建一个MS-DOS类型的文件系统,即FAT类型的文件系统。
mkfs.fat [option] device [block-count]
mkfs.fat命令的选项option与mke2fs基本相同。device参数为要创建的文件系统的目标分区,block-count参数为要创建的文件系统的块数。若没指定block-count参数,则mkfs.fat命令会自己判断块数。
mkfs.reiser4
该命令用来创建一个reiser4文件系统。
mkfs.reiser4 [option] device [size[k|m|g]]
mkfs.reiser4的选项与前面介绍的mke2fs大致相同,不再详细介绍。device参数为要创建文件系统的目标分区,最后的size参数为文件系统的大小。
mkntfs
该命令用来创建一个NFTS文件系统。
mkntfs [option] device [number-of-sectors]
option参照前面,device为目标分区,number-of-sectors为文件系统的扇区数。
符号链接
除了上面介绍的几个命令,Linux还专门创建了几个符号链接,以便用户使用。其中mkfs.ext2、mkfs.ext3、mkfs.ext4都指向mke2fs,mkfs.ntfs指向mkntfs,mkfs.msdos和mkfs.vfat都指向mkfs.fat。
用户在使用这些符号链接时,意味着用户会创建特定类型的文件系统。例如,调用mkfs.ext4意味着用户会创建ext4文件系统。
NTFS
NTFS是Windows操作系统的标准文件系统,Linux已经支持这类文件系统的读写操作。
Linux创建NTFS文件系统需要使用mkfs.ntfs或者mkntfs。
sudo mkfs.ntfs /dev/sdc2
创建FAT文件系统
本小节介绍,如何在一个U盘上创建FAT文件系统。当把U盘接入计算机后,Linux会识别到该设备,并且自动挂载。为了能在上面重新创建文件系统,首先必须把它卸载掉,否则会出现设备忙而无法更新分区表。
Ubuntu系统中,U盘一般挂载到/media/{userid}目录下面,userid为用户名。可使用mount命令来查看,没有参数的mount命令会把当前系统挂载的文件系统都显示出来。
/media/wcc/5156-62B7
若不能判断该设备是否是U盘,可通过dmesg命令查看Linux系统内核日志来确认。
若U盘已经自动挂载,可以使用umount命令卸载。
umount /media/wcc/5156-62B7
③调整文件系统
当一个文件系统被创建后,大部分参数是固定不变的。Ext文件系统保留了部分可调参数,并且提供了tune2fs命令来进行相关的调整。
tune2fs [option] device
option为常用选项,device参数为要调整的文件系统。
4. 挂载与卸载文件系统
新的文件系统必须被挂载到Linux的目录树中,才可以被其他的应用系统使用。
①挂载点
挂载点实际上是一个普通目录然而当一个目录充当了挂载点的功能角色之后,他就成为了访问被挂载文件系统的入口。
传统UNIX和Linux都有一个/mnt目录, 通常作为临时挂载点使用。
现代Linux通常使用/media作为临时挂载点。
除了这些系统提供的挂载点外,可以自己创建一个目录,充当挂载点的角色。
当一个目录充当挂载点时,该目录中的内容就是被挂载的文件系统的内容,而非该目录自身的内容。
②mount和findmnt命令
mount将某个文件系统挂载到某个挂载点上。
mount [option] device dir
option是常用选项,device为要挂载的文件系统,dir为挂载点。没有任何参数,mount会读取/etc/mtab列出当前挂载的文件系统,目前这种方式不推荐。
手动挂载文件系统:使用上面的命令
自动挂载文件系统:Linux启动时(实际执行了mount -a)以及用户执行mount -a,可在/etc/fstab中配置,实现自动挂载
findmnt命令会读取/etc/fstab和/proc/self/mountinfo文件,列出当前系统挂载的文件系统以及类型。
若没指定设备名称或挂载点,findmnt命令会以树形列出所有的文件系统
findmnt [option] device|mountpoint
option是常用命令选项,device是设备(分区),moutpoint是挂载点
③/etc/fstab文件
该文件为当前Linux系统的静态配置文件,该文件定义了存储设备和分区整合到整个系统的方式。mount命令会读取这个文件,确定设备和分区的挂载选项。这个文件列出了系统在启动时需要自动挂载的文件系统以及它们的相关选项。每一行代表一个文件系统,包括以下字段:
文件系统 - 设备名或 UUID或卷标(例如 /dev/sda1 或 UUID=xxxx)。
挂载点 - 文件系统在根目录下的挂载位置(例如 /、/home)。
文件系统类型 - 文件系统的类型(例如 ext4、swap)。
挂载选项 - 挂载时使用的选项(例如 defaults、ro、noatime)。
转储选项 - 是否在系统备份时转储文件系统,通常是 0 或 1。
文件系统检查顺序 - 系统启动时检查文件系统的顺序,根文件系统通常为 1,其他为 2 或 0(不检查)。
④卸载文件系统
卸载文件系统是将某个文件系统从Linux目录树中移除,移除后进程无法对齐读写。
卸载文件系统通常发生在要对文件系统进行完整备份或者修复检测时,可有效防止其他的进程对文件系统读写而产生干扰。
卸载文件系统前,必须停止对文件系统的读写,当前工作目录也不可以在要卸载的文件系统中。
umount [option] {mountpoint|device}
option是常用选项,device是设备名(分区),moutpoint是挂载点.
5. 检查与修复文件系统
①修复文件系统
电源故障、硬盘故障、强行关机会导致文件系统受损。
fsck和e2fsck都可对文件系统进行检查和修复,前者针对多种文件系统,后者主要针对ext2、ext3、ext4等文件系统。
fsck [option] [filesystem]
option是常用选项,filesystem是文件系统(设备名、挂载点、UUID、卷标)。fsck也提供了许多针对不同文件系统的命令,fsck.ext2、fsck.ext3、fsck.ext4等等。
e2fsck [option] device
option是常用选项,device可以为设备名、卷标、UUID。
②修复超级块
超级块保存了整个文件系统的重要数据,当超级块损坏时,文件系统将无法使用,为保证其正常,文件系统对超级块保留多个副本,当主超级块损坏时可以使用超级块来还原。
先卸载sdc, 再执行
sudo mkfs -t ext4 -n /dev/sdc
还原超级块:sudo fsck -t ext4 -b 32768 /dev/sdc
6. 磁盘阵列
①介绍
磁盘阵列(RAID),是由多个独立的磁盘构成一个容量巨大的磁盘组。
磁盘阵列分为不同级别,RAID0~RAID6。
磁盘阵列使得容量极大提升、数据安全增加、性能得到提升,但是由于需要数据冗余会损失一定比例磁盘容量。
②创建磁盘阵列
根据阵列的实现方式,可以分为软件阵列和硬件阵列。软件阵列是指由软件模式阵列控制器来管理整个阵列,其缺点是需要耗费大量CPU来处理数据。硬件阵列则是由阵列控制器来管理整个阵列,阵列控制器上有独立CPU来处理数据,性能较好。
mdadm是Linux创建和管理(软件)阵列的工具。
由于实际生产硬件阵列最为常用,故此处略。
7. 逻辑卷管理
①介绍
在Linux系统运行过程中,经常遇到磁盘分区不够用了。而逻辑卷就是为了应对这种情况出现的技术。
磁盘->分区->物理卷->卷组->逻辑卷->文件系统。
逻辑卷管理通过在磁盘和分区上建立一个抽象的逻辑层来屏蔽物理分区的大小。用户可以将多个磁盘分区组合成一个存储池(卷组),管理员可以在存储池(卷组)上根据需求来创建逻辑卷,然后创建文件系统,挂载到系统中使用。
物理介质:指物理磁盘,在OS中是/dev目录下的一个个设备文件,如/dev/sda。
物理卷(PV):指物理硬盘上的分区或逻辑上与磁盘分区具有相同功能的设备。物理卷是逻辑卷管理的基本存储单元。
物理块(PE):一个卷组中最小的连续区域(默认为4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。
卷组(VG):卷组由一个或多个物理卷组成。对操作系统来说,卷组类似物理磁盘,卷组上面可以创建虚拟分区,即逻辑卷。
逻辑卷(LV):指卷组上面创建的虚拟分区。对于操作系统来说,逻辑卷类似磁盘分区,在逻辑卷上可以建立文件系统,然后挂载到挂载点上。
②创建物理卷(PV)
假定三块磁盘:/dev/sdf、/dev/sdg、/dev/sdh
(1)创建类型为Linux LVM的分区。创建LVM分区的步骤与前面介绍的创建磁盘分区的步骤相同。但是创建完成后,需要使用t命令将分区类型修改为8e, 即Linux LVM。在w保存前,用t命令。
(2)相同命令在其余两块磁盘创建。最终有三个分区:/dev/sdf1、/dev/sdg1、/dev/sdh1
(3)创建物理卷。
sudo pvcreate /dev/sdf1
sudo pvcreate /dev/sdg1
sudo pvcreate /dev/sdh1
创建完成后可用pvs、pvscan或pvdisplay查看。
pvcreate [option] PhysicalVolume
option常用的为-u,指定设备的UUID, PhysicalVolume为物理分区,多个空格隔开。pvs
显示系统中所有物理卷的简要信息。它提供了一个表格视图,显示每个物理卷的名称、卷组、大小、已用空间、剩余空间等信息。pvscan
来扫描所有的物理卷,-u显示设备的UUID。扫描系统中的所有物理卷,并更新 LVM 的元数据缓存。它通常用于检测新添加的物理卷或更新现有物理卷的状态。pvdisplay
显示物理卷详细信息,没指定设备名,则显示所有物理卷信息。
③创建卷组(VG)
创建卷组过程是把多个物理卷组合起来,形成一个大的存储池。
vgcreate [option] VolumeGroupName PhysicalDevicePath...
option为命令选项,VolumeGroupName为卷组名,PhysicalDevicePath...为要加入卷组的物理卷列表,使用设备名表示,多个空格隔开。例如:
sudo vgcreate vgpool /dev/sdf1 /dev/sdg1 /dev/sdh1
vgs vgscan vgdisplay
去查看,功能类似上面。
④创建逻辑卷(LV)
lvcreate [option] Volumegroup
option是命令选项,Volumegroup是在哪个卷组上创建LV。
创建一个200MB的逻辑卷:
sudo lvcreate -L 200MB vgpool
使用fdisk可以查看这个逻辑卷。lvs、lvscan、lvdisplay
查看逻辑卷设备文件位于/dev目录下面以卷组命名的目录中。
创建文件系统并挂载到挂载点:同之前讲的。
⑤扩展逻辑卷
lvextend [option] LV
option是命令选项,LV是逻辑卷的设备名。
⑥压缩逻辑卷
首先压缩文件系统大小:
resize2fs LV 数值
压缩逻辑卷大小:
lvreduce [option] LV
用法同扩展,数字前有-表示减小多少,否则为减少到指定数量。
八. 网络管理
1. 网络接口
在Linux中,所有网络通信都是通过网络接口完成的。Linux 网络接口是系统中用于连接和管理网络连接的虚拟或物理设备。每个接口都有一个唯一的名称(如 eth0、wlan0),并通过配置 IP 地址、子网掩码和网关等参数与网络进行通信。接口可以是有线的(如以太网接口)或无线的(如 Wi-Fi 接口)。
①查看网络接口
ifconfig [option] [name]
option是命令选项, -a表示列出所有的(包括没上线的),name为要显示的网络接口名字,不填表示显示所有的。非活动状态的网络接口不可以进行网络通信。
lshw -class network
lshw列出当前系统的硬件系统,包含网络接口,-class network表示只列出网络接口硬件。
②网络接口命名
Linux为每个网络接口指定了一个逻辑名称,其遵循一定规则。
最常见的就是ethn,eth表示网络接口为以太网,n表示网络 接口顺序。fc表示光纤网络,ge表示千兆以太网,xe表示万兆以太网。
从16.04版本开始变成了enp0s8,en表示以太网,p表示网卡位置,s表示网卡所处槽位,数字表示序号。
③配置网络接口IP地址
Linux支持临时IP地址配置和静态IP地址配置,前者通过ifconfig命令完成,后者通过修改配置文件完成。
临时IP地址配置:
ifconfig interface ip netmask netmask
interface表示网络接口逻辑名称;ip表示要为该接口配置的ip地址;netmask表示子网掩码。sudo ifcnfig eth1 10.0.0.16 netmask 255.255.255.0
为了使其能够通信,还需为该接口指定默认网关。
sudo route add default gw 10.0.3.1 eth1
大部分网站都是通过域名标识和访问的,所以还需配置DNS服务器地址:/etc/resolv.conf
nameserver为关键字,后面位DNS服务器地址。
通过ifconfig配置的临时IP会立即生效,无需重启该接口。
静态地址配置:
用户需修改/etc/netplan/01-network-manager-all.yaml配置文件
然后使用netplan apply重启生效。
动态分配IP地址(DHCP):
若用户网络中有DHCP服务器,且Linux主机的IP地址允许动态获取,则用户可以为Linux主机的网络接口配置DHCP客户端。同静态地址文件中配置然后删除静态地址然后重启生效。
④域名解析
域名解析是将域名转换为IP地址的过程。Linux主机通过域名访问某项网络服务,需要指定域名服务器为其解析域名。
配置文件同上面静态动态地址配置的文件。
2. 常用的网络配置命令
①ifconfig
ifconfig interface [aftype] option | address
interface表示要配置的网络接口,aftype表示地址类型,option为命令选项,address为指派给网络接口的IP地址。
②ip
ip [option] object {command}
option为命令选项,object为命令操作对象,command为命令。
③route
显式和管理路由表:
route [option]
option为命令选项
④netstat
该命令用来查看各种网络信息
netstat [option]
⑤nslookup
该命令主要用来查询域名信息
nslookup [name | -] [server]
name表示要查询的域名,server指定域名服务器。单nslookup会进入交互模式,出现>, nslookup提供了3个主要命令,分别为set(改变查询记录的类型)、server、lserver(后两个用来指定域名服务器)。
⑥ping
该命令会向某主机发送ICMP数据包,并接受响应。
ping [option] destination
option为命令选项,destination为目标主机。
3. 防火墙
①ufw简介
Linux内核的2.4版本开始,引入了一个名为Netfilter的子系统。通过改系统,可以实现数据包的过滤、网络地址转换等网络功能。
在Netfilter基础上,出现了一些防火墙管理工具,默认Ubuntu采用ufw作为防火墙管理工具。
②ufw配置
ufw [option] command
option为命令选项,command为子命令。
③ufw扩展规则
指定源 IP 和目标端口:
sudo ufw allow from 192.168.1.100 to any port 22
允许特定 IP 地址访问特定端口:这个命令允许 IP 地址 192.168.1.100 访问本机的 SSH 端口 22。指定源 IP 地址范围:
sudo ufw allow from 192.168.1.0/24 to any port 80
允许特定 IP 地址范围访问特定端口:允许子网 192.168.1.0/24 中的所有 IP 地址访问本机的 HTTP 端口 80。指定目标 IP 地址和端口:
sudo ufw allow from 192.168.1.0/24 to 192.168.1.10 port 443
如果你的服务器有多个网络接口,可以针对特定接口设置规则:这个命令允许来自 192.168.1.0/24 子网的流量访问服务器 192.168.1.10 的 HTTPS 端口 443。指定协议:
sudo ufw allow proto tcp from any to any port 25
你可以指定规则只应用于特定协议,如 TCP 或 UDP:这个命令允许所有 IP 地址通过 TCP 协议访问 SMTP 端口 25。指定源和目标端口:
sudo ufw allow from any to any port 80 proto tcp
允许来自特定端口的连接流量:这个命令允许所有 IP 地址通过 TCP 访问 HTTP 端口 80。配置出站规则:
sudo ufw deny out 25
默认情况下,UFW 允许所有出站流量,但你可以配置特定的出站规则:禁止所有出站流量通过端口 25。限制规则:
sudo ufw limit ssh/tcp
使用限制规则可以防止暴力破解攻击,例如限制 SSH 登录尝试:这个命令在某个 IP 地址过于频繁地尝试连接 SSH 时,会自动对该 IP 地址进行速率限制。配置双向规则:
sudo ufw allow in on eth0 to any port 443 proto tcp sudo ufw allow out on eth0 to any port 443 proto tcp
如果你希望同时控制入站和出站流量,可以配置双向规则:这两条规则允许 eth0 接口上通过 TCP 协议的入站和出站 HTTPS 流量。管理多个端口:
sudo ufw allow 80,443/tcp
使用逗号分隔可以在同一条规则中指定多个端口:这条规则允许所有 IP 地址通过 TCP 访问端口 80 和 443。配置 IPv6 规则:
sudo ufw allow from fe80::/64 to any port 22 proto tcp
默认情况下,UFW 支持 IPv6。配置 IPv6 规则的方式与 IPv4 类似:这条规则允许来自 fe80::/64 的 IPv6 流量访问 SSH 端口 22。
九. 网络服务管理
1. SSH服务
①SSH协议
SSH(安全外壳协议)是一种用于通过不安全的网络安全连接远程计算机的协议。它可以在两台计算机之间建立加密通信,通常用于管理任务、文件传输和安全隧道。
SSH协议包括两部分,分别为服务端和客户端,服务端以服务的形式运行在Linux上,监听22端口,等待客户端链接。SSH客户端有多种(Xshell......),shell本身也提供了一个命令行的SSH客户端,即ssh命令。
SSH提供了账号/密码以及密匙两种用户认证方式,两者都是通过密文传输数据的。前者传输账号和密码,即用户在Linux系统中的账号及其密码。后者要求用户必须为自己创建一对密钥,并且把公钥放在需要登录的服务器上。当需要连接SSH服务端的时候,客户端就会向服务器发送请求,服务器收到请求后,先在该用户的主目录下寻找公钥,再把它和发生过来的公钥进行比较。若两个密钥一直,服务端就利用公钥把反馈信息加密后发送给客户端,客户端再利用私钥解密后响应服务端的质询,从而完成密钥认证过程。
密钥认证是一种非常安全的认证方式。如果没有私钥任何人无法登录该账户。
②配置SSH服务
SSH服务的配置文件在/etc/ssh目录中,名称为sshd_config。
修改完配置后,执行
sudo systemctl restart sshd
使得配置生效。
③使用账号密码登录(Xshell软件)
④使用密匙对登录SSH服务
密钥登录方式同最开始介绍的。若将公钥复制到其他账户甚至主机,利用私钥也可以登录。
密钥产生的既可以通过Xshell这种软件,也可以通过ssh命令行客户端产生。
利用Xshell客户端生成密钥
使用
ssh-keygen -t rsa
生成密钥对- t
是指定密匙算法,默认生成密钥长度为2048位,可以通过- b指定不同的位数(如4096位)