Linux系统基础
Linux学习大纲
Linux基础
命令提示符
通常情况下,我们使用Linux系统都是在命令行界面(CLI),所以学习Linux的第一步就需要了解Linux的命令提示符。
默认Linux的命令提示符可能看起来像这样:
username@hostname:~$
其中username
代表当前登录的用户,@
是分隔符,hostname
是当前工作的计算机的主机名,冒号后为当前工作目录的路径,通常用~
来表示用户的家目录,特殊字符$
代表普通用户身份会话,而#
代表超级用户(root)身份会话。
普通用户的家目录: /home/username
root用户的家目录: /root
~ 代表当前用户家目录
查看当前登录用户信息的几个命令:who、whoami、w
命令的格式
命令主要可以分为两大类:
-
内置命令(builtins):由shell程序自带的命令
-
外部命令:有独立的可执行程序文件,文件名即命令名
命令通常具有以下格式:命令 [选项...] [参数...]
-
选项决定命令以怎样的方式执行
-
参数决定命令要操作的对象是谁
-
选项和参数之间没有严格的顺序要求,但通常选项放在参数之前
路径的分类
路径用于指定文件或目录的位置,有两种类型的路径:
-
绝对路径: 是从根目录出发而言,以斜杠
/
开头 -
相对路径:是从当前工作路径出发而言,
.
表示当前目录,..
表示上一级目录
需要注意的是在Linux中,路径分隔符是斜杠
/
,而不是在Windows中使用的反斜杠\
。
文件的分类
在Linux中几乎所有东西都可以被视为文件,包括硬件设备、目录、进程、网络连接等。
文件类型可以通过命令ls -l
查看文件的详细列表,并查看文件类型的第一个字符来确定。
文件类型有:
-
-
:普通文件,包含文本、二进制数据或程序代码等 -
d
:目录文件 -
c
:设备字符文件,例如键盘、鼠标等 -
l
:软链接文件,指向另一个文件或目录的链接文件,类似windows快捷方式 -
s
:套接字文件,用于socket网络通讯 -
b
:块设备文件,供数据存放的文件,如硬盘分区 -
p
:管道文件,也称为FIFO,用于进程间通讯
目录的结构
Linux的目录结构是一个层次化的树状结构:
-
/
Linux文件系统的最上层根目录,其他所有目录均是该目录的子目录 -
/home
保存的是关于普通用户的个人资料 -
/root
保存的超级管理员的的个人资料 -
/etc
存放系统的配置文件 -
/lib
存放系统运行所需要的函数库 -
/lib64
64位的函数库 -
/usr
存放用户安装的应用程序的文件夹 -
/run
存放系统启动以来的系统描述文件 -
/dev
存放关于硬件的设备的文件 -
/opt
供较大的第三方软件存放使用 -
/mnt
和media可以临时将别的文件挂载在目录下 -
/tmp
存放临时文件 -
/boot
启动引导目录 -
/bin
存放所有用户都可使用的可执行文件 -
/sbin
存放超级管理员才可以使用的可执行文件 -
/var
存放变化的文件,系统日志的路径,邮件等 -
/proc
存放内存中又系统产生的信息 -
/srv
存放服务所需要的数据信息 -
/sys
存放系统运行的内存信息
基本快捷键
Ctrl + C :中断当前运行的命令或进程
Ctrl + A : 回到命令的开头位置
Ctrl + E : 去到命令的尾部位置
Ctrl + L : 清屏
Ctrl + U : 光标以前的内容全部清空
Ctrl + K : 光标之后的内容全部清空
Ctrl + W : 删除光标前的单词
Alt + D :删除光标后的单词
Alt + B :向后移动一个单词
Alt + F :向前移动一个单词
Tab :命令或文件名自动补全
Linux基础之文件管理
“Linux下一切皆文件!”
Everything is a file 是一个经典的概念。Linux系统将所有的东西都看作是文件,包括将硬件设备、进程、网络连接等均抽象为文件。
这也就意味着,用户可以使用同样的命令和工具来操作硬件设备,就像操作普通文件一样。比如使用cat命令可以读取一个普通文件,也可以读取键盘上输入的字符。
文件权限
文件权限是通过一系列权限位来管理的,这些权限位决定了文件对用户、组和其他用户的可读、可写和可执行权限。每个文件都有一个所有者和一个所属组。
文件权限包括读、写和执行权限:
-
读权限(r):允许用户读取文件的内容或列出目录的内容
-
写权限(w):允许用户修改文件的内容或在目录中创建、删除和重命名文件
-
执行权限(x):允许用户执行文件,或允许用户进入目录
文件权限共有九个位,分为三组,每组三个位,分别为:
-
所有者权限:指定文件所有者的权限
-
所属组权限:指定文件所属组的权限
-
其他用户权限:指定除所有者和所属组以外的其他用户的权限
举个例子:
drwxr-xr-x. 2 root root 34 Jul 14 20:59 tmp
从左向右依次分析:
-
d
表示文件类型为一个目录,而不是普通文件 -
drwxr-xr-x.
文件权限总共10个字符,r可读,w可写,x可执行,-没有对应权限第一组 rwx 文件拥有者的权限
第二组 r-x 文件所属组的权限
第三组 r-x 以上两者以外的用户或者组的权限
. 文件的扩展权限,可以针对的对某些用户或者用户组设置权限
-
2
表示此目录下的子项数量(包括 ./ 和 ../) -
root
文件的所属用户 -
root
文件所属的用户组 -
34
:文件大小(以字节为单位) -
Jul 14 20:59
文件的最后修改时间 -
tmp
文件名
文件的三个时间戳
在Linux中每个文件都有三个时间戳,用于记录不同的时间:
-
atime(access time):文件最近一次被访问或读取的时间。当使用cat、less 或 more 来读取文件,访问时间会更新。
-
mtime(modification time):文件内容最后一次被修改的时间。当编辑文件并保存时,修改时间会更新。
-
ctime(change time):文件的文件元数据被修改的时间。当文件的所有者、权限或其他元数据发生变化时,文件的更改时间会更新。
stat
命令可以查看文件的详细信息:
创建文件
touch
命令可以用来创建空文件,语法格式为:touch [OPTION]... FILE...
使用 touch 命令创建空文件:
touch filename.txt
如果文件已存在,还可以使用 touch 命令来更新文件的时间戳:
touch -a # 修改文件的访问时间
touch -m # 修改文件的 mtime
创建多个普通文件:
touch file1.txt file2.txt file3.txt
其他命令包括 echo、cat、vim 等都可以创建新文件。
创建目录
mkdir
命令用来创建目录, 语法格式为:[OPTION]... DIRECTORY...
-
-p 可快速创建目录的同时创建必要的父目录,对于已存在的目录不会被覆盖
-
-v 显示创建目录的详细过程
mkdir -v directory
mkdir directory1 directory2 directory3 # 一次创建多个目录
mkdir -p parent/child # 创建多级目录
删除文件
rm
命令用来删除文件或目录,语法格式为:[OPTION]... [FILE]...
删除文件:
rm filename.txt # 删除单个文件
rm file1.txt file2.txt file3.txt # 删除多个文件
删除目录及其内容:
如果要删除一个目录及其所有内容,可以使用 -r 参数来递归删除。
rm -r directoryname
-f 表示强制删除,文件处于锁定状态或者你没有足够的权限也会删除。
文件的移动与复制
mv
命令用来移动或重命名文件,语法格式为:mv [OPTION]... SOURCE... DIRECTORY
移动文件到新位置:
mv sourcefile.txt /path/to/destination/
重命名文件:
当要移动的文件移动路径没有发生变化,只有文件名发生了变化,那就相当于修改文件名。
mv oldfilename.txt newfilename.txt
当oldfilename.txt和newfilename.txt都是普通文件时,并且newfilename.txt存在,那么文件newfilename.txt将会被oldfilename.txt替代。
当mv后面的参数多于2的时候,表示最后一个文件之前的所有文件都会被移动到最后一个文件中,最后最后一个是文件夹那么命令执行成功,如果最后一个文件是普通文件那么失败。
cp
命令,用来复制文件或者目录,语法格式为:cp [OPTION]... SOURCE... DIRECTORY
复制文件到目标位置:
cp sourcefile.txt /path/to/destination/
在同一目录下复制并重命名文件:
cp oldfile.txt newfile.txt
递归复制目录及其内容:
cp -r sourcedirectory/ /path/to/destination/
使用 -r 参数来递归复制整个目录 sourcedirectory 及其内容到 /path/to/destination/
文件查看与编辑
查看文件内容:
-
cat
显示文件的全部内容,适合看相对较短文档 -n 选项可以增添行号 -
tac
它是 cat 逆向显示 -
head
查看文件的开头几行,-n 表示显示多少内容 head n-m 表示区间显示 n-m 行的内容 -
more
以逐页方式查看文件内容,显示读取进度,当文档读取完毕的时候自动退出 -
less
以交互式方式查看文件内容,如果要退出文档需要使用快捷键q -
tail
查看文件的末尾几行,常用于查看更新频繁的日志等,-n 表示读取尾部的行数 -f 表示实时更新 -
hexdump
对二进制文件或非文本文件以十六进制格式查看,hexdump -C filename
编辑文件:
-
echo
将文本重定向到文件中:echo "Hello, world!" > filename.txt -
printf
也可以将文本重定向到文件中:printf "Hello, world!\n" > filename.txt -
vim
一款强大的文本编辑器
VIM
在于 vim 编辑器中设置了三种模式:命令模式、末行模式、编辑模式
命令模式
按键 | 功能 |
---|---|
↑ ↓ ← → | 光标按单个字符上下左右移动 |
w | 光标按照单词向后跳转 |
b | 光标按照单词向前跳转 |
^ | 光标跳转至行首 |
$ | 光标跳转至行尾 |
gg | 文档首行第一个字符 |
G | 文档最后一行第一个字符 |
ngg/nG | 跳转到指定n行 |
yy | 复制光标所在行 |
nyy | 复制从光标处开始的n行 |
p | 将缓冲区的内容粘贴到光标所在行的下一行 |
P | 将缓冲区的内容粘贴到光标所在行的上一行 |
dd | 删除光标所在行 |
ndd | 删除从光标处开始的n行 |
d^ | 删除光标前至行首字符 |
d$ | 删除光标及之后的所有字符 |
u | 撤销操作 |
编辑模式
按键 | 功能 |
---|---|
i | 在光标前插入 |
I | 在光标所在行行首第一个非空字符前插入 |
a | 在光标后插入 |
A | 在光标所在行末尾插入 |
o | 在光标所在行下一行插入 |
O | 在光标所在行上一行插入 |
s | 删除光标所在字符并进入插入模式 |
S | 删除当前行并进入插入模式 |
末行模式
按键 | 功能 |
---|---|
:q | 退出,未对文件做任何编辑操作才可退出 |
:q! | 强制退出,不保存文档内容 |
:w | 保存文件 |
:w /dir/file | 将文件另存为/dir/file |
:wq | 保存文件内容并退出 |
:wq! | 强制保存并退出 |
:/word | 从上而下在文件中查找字符串“word”(可按n键定位到下一个匹配的被查找字符串) |
:r /dir/file | 在当前文件中读入其他文件内容 |
:g/word/d | 查找含有"word"的行并删除 |
:set nu | 显示行号 |
:set nonu | 关闭行号显示 |
:n1,n2 d | 删除n1-n2行内容 |
:n1,n2 co n | 复制n1-n2行到第n行后面 |
重定向
数据流
- 标准输入(standard input 简称stdin):默认情况下,标准输入指从键盘获取的输入,代码为0
- 标准输出(standard output 简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上,代码为1
- 标准错误输出(standard error output stderr):默认情况下,命令执行失败后,所回传的错误信息会输出到屏幕上,代码为2
重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。
-
使用
>
或者1>
可以将标准输出的结果以覆盖的方式写入到指定文件中 -
使用
2>
可以将报错信息输出的结果以覆盖的方式写入到指定文件中 -
使用
2>/dev/null
表示将错误信息抛弃 -
使用
&>
可以将stdin、stderr一起输出的结果以覆盖的方式写入到指定文件中 -
使用
>>
将命令执行后的正确输出信息以追加的方式写入到指定的文件中,不覆盖原文件内容 -
使用
<
使命令从指定的文件中读取数据作为输入 -
使用
<< 结束标识字符串
,在命令行读取数据作为输入,直到遇到指定的结束标识字符串 -
管道符
|
将管道符左侧命令结果以参数的形式给到右侧命令 -
tee
指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时输出到文件。
查看文件详细信息
wc
命令查看普通文件详情信息,包括大小、有多少个单词、有多少行
-
-l 表示查看文件有多少行
-
-w 表示查看文件中有多少个单词
-
-c 表示查看文件有多少个字符
du
命令统计当前文件中的空间占用情况,会列出每一个文件夹中文件/文件夹的占用情况
-
-a 会递归的显示文件夹下所有的文件中占用情况(包括子目录)
-
-s 会将文件的占用情况汇总展示
查找文件
Whereis
命令用于查找特定命令的二进制文件、源代码文件以及 man 手册文件的路径。
which
命令用于确定在系统路径中执行的特定命令的位置。
find
按照指定的条件在指定的路径下递归搜索文件。
搜索特定名称的文件:
find /path/to/search -name filename.txt
搜索特定类型的文件:
find /path/to/search -type f
搜索特定大小的文件:
# find 搜索路径 -size +10k/-10k
find /path/to/search -size +10M
搜索特定权限的文件:
find /path/to/search -perm 644
执行其他操作,如删除或执行命令:
find /path/to/search -name "*.tmp" -exec rm {} \;
根据所有者组属性查找:
#find 搜索路径 -uid -gid -user -group -nouse
find /path/to/search -uid 0
find /home -user smileleooo
文件属性的管理
文件属性修改
chattr (change Attribute),文件属性可以用来增强文件的安全性和稳定性,以防止意外删除或修改文件。
常用的文件属性包括:
-
-a 只允许在文件末尾添加内容,不允许修改或删除已有内容
-
-i 让文件只有可读属性,防止文件被删除、重命名、修改或链接
其中:+ - =
分别表示添加、移除、设置属性。
例如:
chattr +i filename
# 让文件只有可读属性
使用chattr命令需要root权限。若要查看文件的属性,可以使用lsattr命令。
修改文件的用户和组
chown (change owner),改变文件或目录的所有者和用户组。
-
只改用户:chown 新所有者 文件或目录
-
用户和组都改:chown 新所有者:新用户组 文件或目录
例如:
sudo chown smileleooo:users filename
# 将文件的所有者更改为smileleooo,用户组更改为users,
文件的压缩和解压缩
tar
是一个用于创建和提取归档文件的命令行工具,通常用于将多个文件和目录组合成一个单一的归档文件。
参数:
-
-c 创建新的归档文件
-
-x 提取归档文件中的内容
-
-t 查看归档文件中的内容
-
-v 详细模式,显示操作过程中的详细信息
-
-f 指定归档文件的名称
-
-z 使用 gzip 压缩/解压缩归档文件
归档文件
创建 tar 归档文件:
# 将文件 file1、file2 和目录 directory 归档到一个名为 archive.tar 的文件中
tar -cvf archive.tar file1 file2 directory
查看 tar 归档文件中的内容:
# 列出 archive.tar 中的所有文件和目录
tar -tvf archive.tar
提取 tar 归档文件中的内容:
提取 archive.tar 中的所有文件和目录到当前目录
tar -xvf archive.tar
压缩和解压缩
压缩 tar 归档文件为 gzip 格式:
tar -czvf archive.tar.gz file1 file2 directory
解压缩 gzip 格式的 tar 归档文件:
tar -xzvf archive.tar.gz
文件的传输
SCP(Secure Copy Protocol),SCP 是一种基于 SSH 的安全文件传输协议,可以用于在远程主机之间传输文件。
传输文件到远程主机:
# scp 本地文件 用户名@远程主机:远程目录
scp file.txt user@remote_host:/home/user/
从远程主机下载文件:
# scp 用户名@远程主机:远程文件 本地目录
scp user@remote_host:/home/user/file.txt .
包括还有其他的,比如rsync、ftp、sftp等。
Linux基础之权限管理
在Linux中,权限管理是通过文件系统中的权限位来实现的。
通用权限的管理
每个文件或目录都有一个所有者、一个用户组和其他用户的权限设置。主要的权限包括读取、写入和执行。
文件权限包括读、写和执行权限:
-
读权限(r):允许用户读取文件的内容或列出目录的内容
-
写权限(w):允许用户修改文件的内容或在目录中创建、删除和重命名文件
-
执行权限(x):允许用户执行文件,或允许用户进入目录
文件权限共有九个位,分为三组,每组三个位,分别为:
-
所有者权限:指定文件所有者的权限
-
所属组权限:指定文件所属组的权限
-
其他用户权限:指定除所有者和所属组以外的其他用户的权限
数字权限表示法
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
三位二进制所对应的10进制数。
修改权限chmod
- 使用数字权限表示法:
chmod 755 filename
# 将文件的权限设置为755
即所有者具有读、写、执行权限,组用户和其他用户只有读和执行权限。
- 使用符号权限表示法:
使用 u g o a
分别代表 user group other all
使用 + - =
进行权限赋值
比如:
chmod u+x filename
# 将文件的所有者权限设置为可执行
chmod g-r filename
# 将文件的组用户权限设置为不可读
chmod o=rwx filename
# 将文件的其他用户权限设置为读、写、执行
扩展权限的管理
FACL (File Access Control List) 文件访问控制列表,更细粒度地管理文件和目录的权限。
ACL 权限分配:给指定的用户指定目录分配指定的权限
当设置扩展权限之后 .
会变成 +
setfacl 设定ACL权限
-m 添加扩展权限 u:用户名 g:用户组名:权限字(rwx) 文件名
-x 取消扩展权限 u:用户名 g:用户组名 文件名
-b 还原扩展权限
getfacl 获取扩展权限列表
getfacl 文件名
比如:
要为文件example.txt设置用户smileleooo的读取和写入权限
setfacl -m u:smileleooo:rw example.txt
特殊权限的管理
- Setuid(SUID): 当执行文件时,该文件将以所有者的身份而不是执行者的身份运行。
chmod u+s filename
- Setgid(SGID): 当执行文件时,该文件将以组的身份而不是执行者的身份运行。
chmod g+s filename
- Sticky Bit: 当应用于目录时,只有目录的所有者、文件的所有者和root用户才能删除目录中的文件。
chmod +t directory
权限掩码
umask 是一个位掩码,用于确定新建文件的默认权限。它指定了在创建新文件或目录时,系统将从权限中掩码掉的位。
umask 值是一个八进制数,表示为三位数字,每个数字代表了用户、组和其他用户的权限位掩码,其中 1 表示屏蔽,0 表示保留。
例如,如果umask值为022,则新建文件的默认权限为666(rw-rw-rw-)减去022,得到644(rw-r--r--)。
umask的设置会影响新建文件的默认权限,但不会影响现有文件的权限。 umask值越低,新文件的默认权限越高。
Linux基础之用户和组
Linux 是一个多用户多任务的分时操作系统,为了对文件和资源进行更好的权限管理,产生了用户和组。在Linux中,每个用户都有一个唯一的用户标识号UID,每个组也有一个唯一的组标识号GID。用户可以属于一个或多个组。
用户的分类
-
超级用户:也称为 root 用户,是系统的管理员,拥有对系统的完全控制权限。
-
普通用户:大多数的用户都属于此类,使用系统来完成日常任务。
-
服务用户:专门用于运行系统服务的,比如Web服务器、数据库服务器等,通常被用来限制服务的权限。
还有其他的为了系统正常工作所必需的用户,比如虚拟用户、系统用户等。
在Linux中,用户账号、密码、用户组信息和用户组密码均是存放在不同的文件中。
- 用户账号文件
/etc/passwd
,每行定义一个用户账号信息,每行由7个字段组成,字段之间用 : 分隔
账号名称:密码:UID:GID:个人资料:主目录:Shell
第二个字段x
表示该用户密码存放在/etc/shadow文件中,如果密码不用存在/etc/shadow中,可以直接将 x 替换为密码(经过hash算法加密之后的密文字符串)即可。
例如:
rootuser:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
- 用户密码文件
/etc/shadow
,每行定义了一个用户密码信息,行中各字段用 : 隔开
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
早期一些基于Unix的系统,是没有shadow这个文件的,用户密码的哈希就保存在/etc/passwd的第二个字段。但是/etc/passwd是全局可读的文件,用户的哈希可能被其他用户所读取,所以后来衍生出了/etc/shadow文件。
自此之后/etc/passwd的第二列通常设置为x,表示用户密码保存在/etc/shadow中,而/etc/shadow文件只有root用户可以读取和写入,这样就保护了密码哈希不能被第三方爆破。
- 用户组账号文件
/etc/group
,每行定义了一个组信息,行中各字段用 : 隔开
root:x:0:
# 组名:组密码:gid:成员列表
- 用户组密码文件
/etc/gshadow
,每行定义了一个组密码信息,行中各字段用 : 隔开
root:*::
# 组名:组密码:组管理员:组成员
用户组名和组密码同样遵循passwd和shadow的规则。第二列的密码可以是*
或!
,这代表这个用户是无密码的(也就是不允许通过密码登录)。但是无密码不等于空密码,如果想设置一个用户密码是空字符串,那就把第二列留空即可。
关于用户的操作
添加用户useradd
用户组分为两种:
- 基本组:建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。
- 附加组:可以容纳多个用户,组中的用户都具有组所拥有的权利。
创建一个用户:
sudo adduser username
常用选项:
-
-m 创建用户的同时,自动创建用户的主目录
-
-s 用于设置用户的使用的shell,如果设置 -s /bin/nologin 则表示用户不能使用命令行
-
-u 用于设置用户uid,默认是自增的,通过该命令可以自定义,但要注意必须是1000+且不能重复
-
-g 设置用户的基本组,可以是gid也可以是组名称。组必须得存在
-
-G 设置用户的附加组,可以是gid也可以是组名称。组必须得存在
设置用户的属性usermod
常用选项:
-
-L 设置密码锁定,禁止用户登录
-
-U 解锁用户账户,允许用户登录
-
-l new_login 修改用户的登录名
-
-s shell 修改用户的登录shell
比如:
sudo usermod -s /bin/bash smileleooo
# 修改用户smileleooo的登录shell
设置用户的密码passwd
常用选项:
-
-l 锁定用户账户,锁定账户后,用户将无法登录
-
-u 解锁被锁定的用户账户
-
-d 禁用密码,使用户无法使用密码登录,通常与 -l 选项一起使用
-
-e 强制用户在下次登录时更改密码
-
-S 显示用户密码的状态信息
比如:
sudo passwd -S root
# 显示root用户密码的状态信息
删除用户userdel
删除一个用户:
sudo userdel smileleooo
这将会删除名为smileleooo的用户账户。但是默认不会删除与用户相关的文件和目录。
sudo userdel -r smileleooo
这样就会连同用户的主目录一起删除。
用户权限控制sudo
sudo 允许普通用户以超级用户(root)的权限执行命令。/etc/sudoers
文件文件定义了哪些用户可以使用 sudo 命令以及可以执行哪些命令。
sudo文件中对权限的描述,每一行定义了一个用户或用户组的授权信息,包括用户名、主机名(或 ALL 代表所有主机)、以及授权的命令。
比如:
smileleooo ALL = (root) /usr/bin/apt-get
# 允许smileleooo用户以root的身份执行apt-get命令
临时提权:可以在命令前加上 sudo 临时提升权限,而不必切换到超级用户身份,一般需要用户输入密码验证使用者身份。
sudo的常用命令:
-
sudo -l :列出当前用户可以执行的命令
-
sudo -u 用户名 权限命令 :以指定用户的身份执行需要权限的命令
-
sudo -b 命令 :让命令在后台执行
关于用户组的操作
创建用户组 groupadd
-
-r 表示添加系统用户,它的默认id是1-999
-
-g 指定用户组id
修改用户组属性 groupmod
-
-g 修改用户组id
-
-n 修改用户组名称
添加/删除组成员 gpasswd
-
-a 添加单用户
-
-d 删除用户
-
-M 可同时添加多个用户
删除组账户 groupdel
- groupdel 组名称
被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组。
Linux基础之网络管理
Linux 网络管理涉及一系列任务,包括配置网络接口、设置IP地址、管理网络服务和防火墙等。
网络配置
网卡命名
根据网络接口定义设备:
-
ethX 传统的以太网接口命名方式,其中 X 通常是数字,如 eth0 等
-
wlanX 用于无线网卡接口,类似于 wlan0 等
不同的发行版和内核版本网卡命名规则会有所不同,可以使用命令 ls /sys/class/net/
来查看系统中的网卡接口。
其中默认存在的 lo
是指环回(loopback)接口,环回接口的 IP 地址通常是 127.0.0.1,也称为本地回环地址。
网卡配置
ifconfig
命令用于查看和配置网络接口信息。
sudo ifconfig eth0 up # 启用 eth0 接口
sudo ifconfig eth0 down # 禁用 eth0 接口
sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up # 设置IP地址和子网掩码
其他命令包括 ip、nmcli 等都大同小异。
网络配置文件
配置静态IP地址,在 Ubuntu 中配置静态 IP 地址可以通过编辑网络配置文件来完成。
使用 NetworkManager 的方法:
- 编辑网络接口配置文件
sudo vim /etc/network/interfaces
- 编辑静态IP地址、网关和DNS服务器的
auto eth0
iface eth0 inet static
address 192.168.1.100 # 静态 IP 地址
netmask 255.255.255.0 # 掩码
gateway 192.168.1.1 # 网关
dns-nameservers 8.8.8.8 8.8.4.4 # DNS 服务器
- 保存并退出编辑器,重新启动网络服务
sudo systemctl restart NetworkManager
还有通过 netplan 管理网络的方式。
服务管理
systemctl
和 service
都是用于管理系统服务的命令行工具。
systemctl是在较新版本的Linux中引入的系统和服务管理工具,如systemd。service命令是传统 SysVinit系统中用来管理系统服务的工具。
在许多Linux发行版中,service命令实际上是systemctl命令的一个符号链接,以向后兼容。
使用 systemctl 启动、停止和重启网络服务:
sudo systemctl status network.service # 查看服务状态
sudo systemctl start network.service # 启动服务
sudo systemctl stop network.service # 停止服务
sudo systemctl restart network.service # 重启服务
sudo systemctl enable network.service # 设置开机自启动
sudo systemctl disable network.service # 禁用开机自启动
service和systemctl相比除了参数的位置不同,其他一致。
防火墙配置
常用的Linux防火墙工具包括 iptables
和 firewalld
,用于配置和管理Linux的防火墙规则。
Netfilter是Linux内核中用于实现数据包过滤和网络地址转换功能的框架,iptables和firewalld都是基于Netfilter框架实现的工具。iptables是传统的Linux防火墙工具,而firewalld则是较新的动态防火墙管理器。
重点关注firewalld防火墙,它支持动态更新技术并加入了区域的概念。
firewalld中常见的区域名称(默认为public)以及相应的策略规则:
区域 | 默认规则策略 |
---|---|
阻塞区域 (block) | 拒绝流入的流量,除非与流出的流量相关 |
工作区域 (work) | 拒绝流入的流量,除非与流出的流量相关 |
家庭区域 (home) | 拒绝流入的流量,除非与流出的流量相关 |
公共区域 (public) | 不相信网络上的任何计算机,只有选择接受传入的网络连接 |
隔离区域 (DMZ) | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。 |
信任区域 (trusted) | 允许所有的数据包 |
丢弃区域 (drop) | 拒绝流入的流量,除非与流出的流量相关 |
内部区域 (internal) | 等同于home区域 |
外部区域 (external) | 拒绝流入的流量,除非与流出的流量有关;而如果流量与ssh服务相关,则允许 流量 |
firewall-cmd 是用于管理 firewalld 防火墙的命令行工具:
查看防火墙状态:
firewall-cmd --state
启动/停止/重启 firewalld 服务:
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
开启/关闭 firewalld 服务:
systemctl enable firewalld
systemctl disable firewalld
查看所有防火墙规则:
firewall-cmd --list-all
添加/移除端口:
firewall-cmd --add-port=PORT/PROTOCOL
firewall-cmd --remove-port=PORT/PROTOCOL
添加/移除服务:
firewall-cmd --add-service=SERVICE
firewall-cmd --remove-service=SERVICE
重载防火墙规则:
firewall-cmd --reload
如果想让策略一直存在,需要在firewall-cmd命令设置防火墙策略时添加 --permanent
参数。
例如
配置在172.24.8.0 网段的主机访问服务器的5423端口被转发到80端口:
firewall-cmd --zone=public --add-forward-port=port=5423:proto=tcp:toport=80:toaddr=SERVER_IP --source=172.24.8.0/24
文件下载wget和curl
curl
和 wget
都是在命令行下使用的用于下载文件的工具。wget专门用于下载文件,不支持发送请求。curl不仅能下载,还可以发送各种类型的请求,使用代理等。
curl 命令常用的参数:
-
-X, --request 指定 HTTP 请求方法,如 GET、POST、PUT、DELETE 等
-
-d, --data 发送 POST 请求时使用的数据
-
-H, --header 添加额外的请求头信息
-
-i, --include 在输出中包含 HTTP 头信息
-
-o, --output 将响应输出到指定文件
-
-O, --remote-name 将远程文件保存到本地,使用远程文件的文件名
-
-L, --location 遵循重定向
-
-v, --verbose 显示详细的操作信息,包括请求和响应的头信息
-
-A, --user-agent 设置用户代理字符串
wget 命令常用的参数:
-
-O, --output-document 将下载的文件保存为指定的文件名
-
-P, --directory-prefix 将下载的文件保存到指定目录下
-
-r, --recursive 递归下载,下载指定 URL 下的所有链接
-
-t, --tries 设置重试次数
-
-b, --background 后台下载模式
-
-U, --user-agent 设置用户代理字符串
-
--limit-rate= 限制下载速率
网络连接信息netstat和ss
ss
和 netstat
都是用于查看系统网络连接信息的命令行工具。ss是一个更现代的工具,使用更快的内核数据源,并且在处理大量连接时性比netstat更好,能够显示更多的详细信息。netstat 是一个更传统的工具,用于显示网络连接、路由表、接口统计信息等。
ss 命令的一些常用选项:
-
-t 显示TCP套接字
-
-u 显示 UDP 套接字
-
-l 显示监听状态的套接字
-
-a 显示所有连接状态的套接字
-
-p 展示使用socket的进程
-
-n 不解析服务名
-
-i 更多详细信息
netstat 命令的一些常用选项:
-
-a 显示所有连接和监听端口
-
-n 以数字形式显示地址和端口号,而不是尝试反解析主机名和服务名
-
-t 仅显示 TCP 协议相关的连接
-
-u 仅显示 UDP 协议相关的连接
-
-l 仅显示正在监听的套接字
-
-p 显示每个套接字关联的进程 ID 和进程名称
通常ss和netstat会和grep命令结合,快速找到符合条件的网络连接信息。
例如:
netstat -tnulp | grep 80
# 找到端口为80的TCP网络连接信息
若有错误,欢迎指正!o( ̄▽ ̄)ブ