⭐表示重要。
第一章:背景知识
1.1 Linux 系统中一切皆文件
- 在 Linux 系统中任何东西都是以文件的形式来存储的,这其中不仅包括我们熟悉的文本文件、可执行文件等,还包括硬件设备、虚拟设备、网络连接等等,甚至连目录其实都是一种特殊的文件。
1.2 Linux 的文件系统
- Linux 系统环境下的文件系统和 Windows 有很大区别。
- 在 Windows 中,每一个盘符下是一个独立的文件系统,硬盘有多少个分区就有多少个文件系统。
- 在 Linux 系统中不管创建了多少个硬盘分区都只有一个文件系统,整个文件系统的根目录是
/
,从/
出发可以找到 Linux 系统中的所有目录和文件。
1.3 Linux 系统中的路径
- 绝对路径:以
/
根目录开始逐层查找文件和目录。
/etc/sysconfig/network-scripts
/tmp/vmware-root/vmware-db.pl.2267
- 相对路径:以当前目录或上一级目录为基准逐层查找文件和目录。
./ # 当前目录
../ # 当前目录的上一级目录
./
如果省略不写,也表示当前目录。
/
表示的是最顶层、最上面的那个根目录,不是当前目录
。
- 除非你现在所在的位置就是根目录那里,否则
/
和./
完全是两码事。
1.4 用户的家目录
- Linux 是一个多用户系统,每个登录到系统的用户都需要有一个自己专属的目录保存自己私有的文件。
- 系统看到了这个需求,所以每创建一个用户,系统就会在
/home
目录下创建一个和用户同名的目录作为这个用户的家目录,比如:创建一个名为tom
的用户,它的家目录就是/home/tom
。 - 可以使用
~
代表用户的家目录。 - 如果是系统的超级管理员
root
,root
用户的家目录是/root
目录。
1.5 文件扩展名不敏感
- 在 windows 系统中,操作系统会负责根据文件扩展名识别文件类型,然后再根据文件类型匹配打开这种文件的应用程序,让用户不必记住大量的对应关系,用哪个直接打开就可以了。
- 但是,Linux 是一个命令行操作系统,虽然现在也有了图形化界面,但是还是以命令行为主。
- Linux 系统中通常使用命令去打开文件,而这个命令是否和文件匹配,就需要运行命令的人自己注意。
1.6 一级目录简介
目录名 | 是否重要 | 作用 |
/bin | bin是binary的缩写,这个目录存放着最经常使用的命令。 | |
/boot | 这里存放的是启动Linux时用到的引导程序文件。 | |
/dev | device(设备)的缩写,该目录下存放的是Linux的外部设备。 | |
/etc | ⭐ | 存放系统和第三方应用程序的配置文件。 |
/home | ⭐ | 存放普通用户家目录。 |
/lib 和 /lib64 | 系统开机所需要最基本的动态连接共享库。 | |
/media | 挂载Linux系统会自动识别的设备,例如U盘、光驱等。 | |
/mnt | 专门用于挂载操作的目录。 | |
/opt | ⭐ | 存放安装第三方应用程序时使用的压缩包文件。 |
/proc | 这个目录是一个虚拟的目录,它是系统内存的映射。 | |
/root | ⭐ | 超级管理员root用户的家目录。 |
/run | 存放进程产生的临时文件,关机重启后会消失。 | |
/sbin | s是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 | |
/srv | service缩写,该目录存放一些服务启动之后需要提取的数据。 | |
/sys | 该目录下安装了2.6内核中新出现的一个文件系统sysfs。 | |
/tmp | 存放临时文件。 | |
/usr | ⭐ | 应用程序的默认安装目录,类似于Windows下的program files目录。 |
/var | ⭐ | 存放经常变化的内容,例如日志文件。 |
第二章:文件和目录相关命令(⭐)
2.1 快捷键
- 命令行环境下快捷键:
按键 | 作用 |
Ctrl + l | 清屏 |
Ctrl + c | 强制终止程序 |
Ctrl + Insert | 复制 |
Shift + Insert | 粘贴 |
Ctrl + s | 锁屏 |
Ctrl + q | 解除锁屏 |
tab | 自动补全 |
- 清屏:
Ctrl + l
- 强制终止程序:
Ctrl + c
- 复制:
Ctrl + Insert
- 粘贴:
Shift + Insert
- 锁屏:
Ctrl + s
- 解除锁屏:
Ctrl + q
- 自动补全:
tab
2.2 mkdir
- 命令:
mkdir [-pv] 新目录的路径
- 参数
-pv
表示创建多层目录。 - 作用:创建目录。
- 示例:创建单层目录
mkdir aaa
- 示例:创建多层目录
mkdir -pv bbb/ccc
2.3 cd
- 命令:
cd 目标目录路径
- 作用:切换目录。
- 示例:使用绝对路径
cd /etc/sysconfig
- 示例:使用相对路径
cd aaa
- 示例:切换到家目录
cd ~
cd
2.4 ls
- 命令:
ls [-l][-A][-R] 文件或目录的路径
- 参数
-l
以详细信息形式显示资源。 - 参数
-A
显示目录内容时把隐藏资源也显示出来。 - 参数
-R
递归查看目录内容。 - 命令的参数既可以单独使用也可以组合使用。同时
ls -l
可以简写为ll
。 - 作用:列出目录中的内容,这里所说的目录可以是当前目录也可以是其他目录(需要指定路径)。
- 示例:
ll
- 示例:
ls -A
ll -A
- 示例:
ll -R aaa
2.5 pwd
- 命令:
pwd
- 作用:打印当前所在的目录。
- 示例:
pwd
2.6 touch
- 命令:
touch 新建文件的路径
- 作用:创建空文件。
- 示例:
touch hello.java
2.7 cp
- 复制文件命令:
cp 被复制的文件的路径 目标目录的路径
- 复制目录命令:
cp -r 被复制的目录的路径 目标目录的路径
- 参数
-r
等同于-R
。
- 示例:
cp hello.java aaa
- 示例:
cp -R aaa bbb
2.8 mv
- 命令:
mv 被移动的文件或目录的路径 目标目录
- 将目录或文件在当前位置移动可以起到重命名的作用。
- 示例:
mv aaa bbb
2.9 rm
- 删除文件命令:
rm 被删除文件的路径
- 强制删除文件命令:
rm -f 被删除文件的路径
- 递归删除目录:
rm -r 被删除的目录的路径
- 强制删除目录:
rm -rf 被删除的目录的路径
- 示例:
rm hello.java
- 示例:
rm -f hello.java
- 示例:
rm -f aaa
- 示例:
rm -rf aaa
2.10 vim
2.10.1 简介
- 命令:
vim
- 作用:在命令行环境下编辑文本文件。
注意:在命令行模式下没有鼠标,所以刚开始会觉得非常不习惯,但是慢慢熟练之后会发现,不用鼠标全部用键盘的操作效率也很高。
2.10.2 三种模式
- 一般模式:通过按键控制 vim 工作。
- 编辑模式:可以自由输入。
- 指令模式:通过执行指令完成一些特殊的操作。
2.10.3 基本操作
- ① 打开一个文件(即使文本不存在,也没关系,vim知道我们打算新建一个文件):
vim content.txt
- ② 进入编辑模式(方式很多种,现在先使用一种方法,按一下 i 键):
i
注意:按键的时候,屏幕上是不显示 i 的,但是左下角会显示插入(中文环境)或 Insert(英文环境)。
- 随意输入一些内容:
PHP 是世界上最好的语言
- 按 Esc 键回到一般模式:
Esc
- ③ 显示行号:在一般模式,输入英文冒号(:),然后输入 set nu 就可以显示行号了。
:set nu
- ④ 保存已修改的内容(执行完 :set nu 指令后,vim 又回到一般模式,使用 :w 指令可以保存文件):
:w
- ⑤ 退出(使用 :q 指令就可以退出 vim 了):
:q
- ⑥ 保存退出:
:wq
- ⑦ 不保存退出:
:q!
2.10.4 看
- ① 上下左右移动光标。
- 方法一:很容易上手的操作方式,但是距离基准键位较远,熟练使用之后敲击键盘的速度大幅度提升。
- 方法二:就在基准键上。
- ② 前往指定行:
- 第一行:
gg
1 + shift + g
- 最后一行:
shift + g
- 指定行号(n 表示行号):
n + shift + g
2.10.5 改
- 这里我们说的是在一般模式下通过按键来编辑文件,并不是进入编辑模式。
按键 | 效果 |
dd | 删除光标所在的行 |
d5d | 从光标所在行开始,向下连续删除5行(包括光标所在行) |
u | 撤销刚才的操作 |
Ctrl + r | 重做刚才撤销的操作 |
yy | 复制光标所在的行 |
p | 将当前复制的行粘贴到光标所在位置的下一行 |
y5y | 从光标所在行开始,向下连续复制5行(包括光标所在行) |
r | 替换光标所在位置的一个字符。第一步:按一下 r 键 第二步:输入新的字符 |
2.10.6 编
- 这里我们要看看有哪些方法可以进入编辑模式。
按键 | 大小写说明 | 光标动作 |
i | 小写 | 不动,就在 ,开始输入 |
I | 大写 | 移动到 ,开始输入 |
a | 小写 | 光标 ,然后开始输入 |
A | 大写 | 光标移动到 ,然后开始输入 |
o | 小写 | 先在光标所在行的 ,然后把光标移动到空行的开头,再开始输入 |
2.10.7 搜
- ① 初始状态:
- ② 进入指令模式(专门用于搜索关键词的指令模式):
/
- ③ 输入关键词:
java
- ④ 回车执行搜索(关键词匹配到的内容会高亮显示):
- ⑤ 遍历匹配内容(在匹配到搜索结果后,可以逐个遍历各个匹配内容):
# 向下找
n
# 向上找
shift + n
- ⑥ 取消高亮显示:
:noh
2.10.8 替
- ① 准备文件内容:
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
Oh,hello tom!Do you think this is a good time for me to say hello to Lily?
- ② 执行替换:
:%s/hello/hi
- 命令解释:
注意:这时我们看到每一行只有第一个匹配的内容被替换了,后面的没有被替换。这是因为对正则表达式来说,它是以行为单位查找匹配的内容。每一行只要找到第一个匹配那么就可以判断这一行就是匹配的,没有必要继续向后查找了。如果我们需要将一行中的每一个匹配都替换,可以在指令后加 /g
。
- ③ 全部替换:
:%s/hello/hi/g
2.11 cat
- 命令:
cat 文件的路径
- 作用:显示文件全部内容。
- 适用场景:较短小的文件。
- 示例:
2.12 less
- 命令:
less 文件路径
- 作用:分屏查看文件内容。
按键 | 效果 |
空格 | 向下滚动一屏 |
b | 向上滚动一屏 |
回车 | 向下滚动一行 |
q | 退出 |
/关键词 | 搜索 n向下找 N向上找 |
= | 显示详细的文件信息 |
- 示例:
less content.txt
2.13 tail
- 命令:
tail -n 5 文件的路径
- 作用:显示文件末尾的5行。
- 命令:
tail -F 文件的路径
- 作用:实时查看文件末尾新增的内容。
- 示例:
tail -n 5 content.txt
- 示例:
tail -F content.txt
2.14 find
- 命令:
find 查找范围 参数 表达式
- 示例:
find /root -name "*.txt"
2.15 locate
2.15.1 简介
- locate(中文翻译为:定位) 命令同样用来查询文件或目录,但是它是基于索引查询,速度快很多。
2.15.2 索引
- 建立索引可以极大的提高查询的速度,为什么会有这么显著的效果呢?
- 字典举例。
-
- 没有索引:从正文第一页开始翻,在每一页中检查有没有自己想要找的字。在最差的情况下需要逐页翻到字典的最后一页,这样做速度非常慢。
- 基于索引:字典正文前的检字表就是正文内容的索引。先从检字表里快速的找到那个字,虽然没有这个字的详细信息,但是有这个字所在的页码,我们可以根据这个页码就可以直接到正文中直接翻到那一页,这样速度就非常快。
- 去一幢大楼找房间举例:肯定是先在一楼看看楼层介绍信息,找到房间号直接去,而不是一个房间一个房间的去找。
2.15.3 locate 命令的原理
- 系统启动的时候会将每一个目录、每一个文件的完整路径保存到索引库中,使用 locate 命令搜索关键词时,就使用关键词查询索引库,将匹配的路径字符串返回。
- 但是,新建的文件或目录不会被系统将路径存入索引库中,那么使用 locate 命令就搜索不到,此时使用 updatedb 命令更新一下索引库即可。
2.15.4 操作演示
- 示例:使用 locate 命令搜索文件
locate boot.log
- 示例:新建文件后,使用 locate 命令搜索
touch hello.java
locate hello.java
- 示例:更新索引库后,使用 locate 命令搜索
updatedb
locate hello.java
2.16 grep
- 命令:
grep 参数 查找内容 文件路径
- 参数
-v
表示返回不匹配的行。 - 参数
-n
表示显示行号。 - 查找内容可以是正则表达式。
- 作用:将文件内容中匹配的行返回。
- 示例:
grep Java content.txt
grep 命令的关键词匹配和 vim 中的关键词搜索的区别:
- ① vim 需要打开文件进入到 vim 自己的界面中,而 grep 不需要。
- ② grep 命令显示搜索结果时可以将匹配行抽取出来显示,而 vim 是在全部文件中将关键词高亮显示。
- ③ grep 命令可以同时搜索多个文件。
- ④ grep 命令还有其它更加丰富的用法。
- 示例:返回匹配的行并显示行号。
grep -n Java content.txt
- 示例:显示不匹配的行并显示行号
grep -nv Java content.txt
2.17 pipe(管道,不是命令)
2.17.1 简介
- 管道不是命令,而是一个符号
|
。 - 用法:
命令 A | 命令 B
- 作用:将命令 A 的输出作为命令 B 的输入。
2.17.2 操作演示
- ① 需求:列出当前目录下的所有文件。
- ② 如果使用 ll 命令,会将文件和目录都显示出来
ll
- ③ 文件的目录的特征是,文件以
-
开头,目录以d
开头,那么可以安装特征编写正则表达式
# 匹配以 - 开头的行
^-
- ④ 使用管道列出当前目录下的所有文件
ll | grep ^-
- ⑤ 统计当前目录下的文件的数量(wc -l 命令可以统计文本数据的行数)
ll | grep ^- | wc -l
2.18 tar
2.18.1 简介
- 在 Linux 系统中,很多程序的安装包都是以 tar 包的形式提供下载的,比如:Tomcat
2.18.2 tar 解压命令
- 命令:
tar -zxvf tar包的路径 -C 需要解压的目录路径
- 参数作用说明:
参数名称 | 作用 |
-z | 用 gzip 对存档压缩或解压 |
-x | 解压 |
-v | 详细显示处理的文件 |
-f | 指定存档或设备 (缺省为 /dev/rmt0) |
注意:默认解压到当前目录下,如果当前目录中有同名目录或文件会直接覆盖,没有任何提示。
- 示例:
tar -zxvf apache-tomcat-8.5.73.tar.gz
第三章:进程相关命令(⭐)
3.1 ps
3.1.1 简介
- 命令:
ps [-ef]
- 参数
-e
(entire,表示全部)指显示系统中全部的进程信息。 - 参数 -f (full-formate)表示完整格式。
- 作用:查看系统中运行的进程。
- 示例:
ps -ef
3.1.2 进程信息中各列数据说明
列名 | 含义 |
UID | 进程的用户信息 |
| 进程id。由系统分配,不会重复。 |
| 父进程的id。父进程和子进程的关系是:父进程启动了子进程。 |
| 当前进程所对应的程序。 |
C | 用整数表示的CPU使用率 |
STIME | 进程启动时间 |
TTY | 进程所在终端。所谓终端就是用户输入命令的操作界面。 |
TIME | 进程所占用的CPU时间 |
3.1.3 父进程和子进程之间的关系
- 简单来说,父进程和子进程的关系是:父进程启动了子进程,可以使用 pstree 命令查看整个进程数。
- 示例:
pstree
3.1.4 和其它命令配合使用
- ① 分屏查看进程信息:全部进程的信息太多了,一屏无法全部显示,所以我们希望可以分屏显示并由我们来控制翻页。为了达到这个目标,我们可以使用管道符号将 ps -ef 命令的输出数据传送给 less 命令。
- 示例:
ps -ef | less
- ② 精确查询一个具体进程信息:我们通过 Xshell 远程连接 Linux 系统,靠的是 sshd 这个服务。这个服务如果正在运行中,那么一定会有这个服务对应的进程。所以下面我们来查询一下 sshd 这个命令的进程。
- 示例:
ps -ef | grep -i sshd | grep -v grep
3.2 kill
3.2.1 简介
- 命令:
kill -9 进程id
- 作用:杀死进程。
- 说明:kill 命令本质上是给进程发送信号。
3.2.2 操作演示
- ① 打开火狐浏览器。
- ② 查看火狐浏览器的进程 id :
ps -ef | grep -i firefox | grep -v grep
- ③ 使用kill命令结束火狐浏览器进程:
kill -9 5059
3.3 top
top:是一个基于终端的实时进程查看器命令,可以用来查看系统进程的信息,包括进程的PID、CPU使用率、内存使用情况等,还可以进行一些操作,如发送信号、调整优先级等。
05:49:19:表示当前系统时间,格式为hh:mm:ss。
up 1:35:表示系统已经运行了1小时35分钟,即系统的运行时间。
3 users:表示当前登录系统的用户数量。
load average: 0.10, 0.06, 0.06:分别表示系统的平均负载,过去1分钟、5分钟、15分钟内的平均负载。
Tasks: 222 total, 1 running, 221 sleeping, 0 stopped, 0 zombie:表示当前系统中所有进程的情况,其中:
total:所有进程的数量。running:正在运行的进程数量。sleeping:休眠状态的进程数量。stopped:已停止的进程数量。zombie:僵尸进程的数量。
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st:表示CPU的使用情况,其中:
us:用户态CPU时间占用百分比。sy:内核态CPU时间占用百分比。ni:优先级较高的进程CPU时间占用百分比。id:CPU空闲时间占用百分比。wa:等待I/O数据的CPU时间占用百分比。hi:硬件中断时间占用百分比。si:软件中断CPU时间占用百分比。st:使用虚拟化技术的情况下,用于处理其他虚拟机需要的CPU时间占用百分比。
KiB Mem : 1863252 total, 98244 free, 1133500 used, 631508 buff/cache:表示内存使用情况,其中:
total:内存总量。free:空闲内存量。used:已使用内存量。buff/cache:Buffer和Cache占用的内存量
KiB Swap: 2097148 total, 2094836 free, 2312 used. 438260 avail Mem:表示交换空间使用情况,其中:
total:交换空间总量。free:空闲交换空间大小。used:已使用交换空间大小。avail Mem:可用内存大小
让我们逐个解释每个字段:
PID(进程ID): 每个正在运行的进程都有一个唯一的进程ID,用来标识进程。可以通过该ID来查找和操作进程。
USER(用户): 运行该进程的用户。
PR(优先级): 进程的优先级。可以是一个静态值(3-20)或一个动态值(即一个负数)。
NI(Nice值): 进程的Nice值,用于调整进程调度的优先级。较高的Nice值表示较低的优先级。
VIRT(虚拟内存): 进程使用的虚拟内存大小,包括所有分配给进程的虚拟内存区域的大小。
RES(常驻内存): 进程使用的物理内存大小,即常驻内存区域的大小。
SHR(共享内存): 进程使用的共享内存大小,即多个进程共享的内存区域的大小。
S(状态): 进程的状态。常见的状态包括:R(运行)、S(睡眠)、Z(僵尸)、D(不可中断的睡眠)等。
%CPU%MEM: 进程的CPU和内存使用率。
TIME+(运行时间): 进程已经运行的时间。
COMMAND(命令): 运行的命令或脚本的名称。
- 命令:
top
- 作用:实时查看系统运行情况和健康状态。
- 命令与参数:
命令名 | 更新时间间隔(秒) | 不显示任何闲置或者僵死进程 | 通过进程id监控单一进程 |
top | -d 间隔秒数 | -i | -p 进程id |
- 操作控制:
按键 | 功能 |
P | 默认值,根据CPU使用率排序 |
M | 以内存的使用率排序 |
N | 以PID排序 |
d | 设置数据刷新的时间间隔,单位是秒 |
q | 退出 |
- 示例:指定间隔秒数,默认为 3 秒
top -d 2
- 示例:不显示僵尸进程
top -i
- 示例:监控单一线程
top -p 1189
- 示例:操作控制
- 示例:查询结果字段解释
- 第一行信息为任务队列信息:
内容举例 | 说明 |
14:12:01 | 系统当前时间 |
up 6:04 | 系统的运行时间,前面例子表示本机已经运行6小时4分钟 |
2 users | 当前登录了2个用户 |
load average:0.00, 0.02, 0.05 | 系统在之前1分钟,5分钟,15分钟的平均负载。 一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。 |
- 第二行为进程信息:
内容举例 | 说明 |
Tasks: 210 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
209 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是0,需要手工检查僵尸进程 |
- 第三行为 CPU 信息:
内容举例 | 说明 |
Cpu(s):3.0%us | 用户空间占用的CPU百分比,us对应user |
3.0%sy | 内核空间占用的CPU百分比,sy对应system |
0.0%ni | 改变过优先级的进程占用的CPU百分比,ni对应niced |
93.9%id | 空闲CPU的CPU百分比 |
0.1%wa | 等待输入/输出的进程的占用CPU百分比,wa对应IO wait |
0.0%hi | 硬中断请求服务占用的CPU百分比,hi对应hardware IRQ |
0.0%si | 软中断请求服务占用的CPU百分比,si对应software IRQ |
0.0%st | st(Steal time)虚拟时间百分比,也叫被hypervisor偷走的时间。 就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。 |
- 第四行为物理内存信息:
内容举例 | 说明 |
3861295 total | 物理内存的总量,单位KB |
1037800 free | 空闲的物理内存数量 |
943564 used | 已经使用的物理内存数量 |
1879928 buff/cache | 作为缓冲的内存数量 |
- 使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是还未纳入内核管控范围的数量。
- 纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存还给 free ,因此 Linux 系统运行过程中 free 内存会越来越少,但不影响系统运行。因为这表示更多的空闲内存被内核管理了。
- 第五行为交换分区(swap)信息:
内容举例 | 说明 |
3145724 total | 交换分区(虚拟内存)的总大小 |
3145724 free | 空闲交换分区的大小 |
0 used | 已经使用的交互分区的大小 |
2649008 avail Mem | 在不交换的情况下,对启动新应用程序可用内存的估计 |
交换分区是一个非常值得关注的地方,如果 swap 区的 used 数值持续发生变化那么说明在内核和交换分区之间正在持续发生数据交换,这表示内存不够用了——必须不断把内存中的数据保存到硬盘上。
3.4 netstat
3.4.1 简介
- 命令:
netstat -anp
- 作用:查看网络状态。
参数名 | 作用 |
-a | 显示所有正在或不在侦听的套接字。 |
-n | 显示数字形式地址而不是去解析主机、端口或用户名。 |
-p | 显示套接字所属进程的 PID 和名称。 |
3.4.2 说明
- netstat 命令显示的网络状态信息包含两部分内容:
- ① 本机和外部的连接状态信息。
- ② 本机系统内部进程间通信信息。
3.4.3 和其它命令配合使用
- ① 分屏查看:
netstat -anp | less
- ② 根据进程名查看网络状态:
netstat -anp | grep sshd
- ③ 根据端口号查看网络状态:
netstat -anp | grep :22
第四章:辅助命令(⭐)
4.1 history
- 命令:
history
- 作用:查看命令历史。
- 示例:
history
技巧:将命令运行的结果写入文件
- 覆盖写:命令 > 文件路径。
- 追加写:命令 >> 文件路径。
注意:/dev/null,被称为 Linux 的黑洞,因为不管写入多少数据到这个文件,数据都会被销毁。
4.2 echo
4.2.1 简介
- 命令:
echo xxx
- 作用:将数据输出到 standard output(标准输出),echo 主要用来打印环境变量的值。
4.2.2 关于standard output
- 如果说将一条数据打印到标准输出,那么就可以说:打印到命令行窗口。
- 对于 Java 代码:
System.out.println("Hello World!");
- 上面这行 Java 代码将字符串打印到了控制台,而如果我们我们把这段 Java 程序拿到 Linux 系统来执行,那么它就打印到 standard output 了。
4.2.3 输出环境变量
- ① Linux 中引用环境变量:在 Linux 中通过 $ 来引用环境变量
$PATH
- ② 使用 echo 输出环境变量:
echo $PATH
4.3 help(不是命令,是一系列命令的集合)
4.3.1 简介
- 在我们学习一个新的命令时,Linux 系统自带的
官方命令手册
就是非常权威的参考文档。 - man 命令和 info 命令都可以调出一个命令对应的文档。区别在于 man 命令阅读体验略好,info 命令文档内容更完整。
4.3.2 man
- 命令:
man 要查询的命令
- 控制方式:
按键 | 说明 |
空格 | 向下滚动一屏 |
回车 | 向下滚动一行 |
b | 向上滚动一屏 |
q | 退出 |
/关键词 | 搜索关键词 n向下找 N向上找 |
- 示例:
man date
4.3.3 info
- 命令:
info 要查询的命令
- 控制方式:
按键 | 说明 |
Up | Move up one line |
Down | Move down one line |
DEL | Scroll backward one screenful |
SPC | Scroll forward one screenful |
PgUp | Scroll backward in this window |
PgDn | Scroll forward in this window |
- 示例:
info ls
4.3.4 补充
- 大部分命令都有 --help 参数,也起到参考文档作用。
- 示例:
ls --help
4.4 关机重启
4.4.1 意识
- 服务器
不要轻易关机!
执行关机或重启操作前一定要问自己下面的问题:
-
- 我现在操作的具体是哪一台服务器?
- 这台服务器是否是生产服务器?
- 这台服务器可能有哪些人登录?
- 我关机或重启后对其他人是否有影响?
- 这台服务器关机或重启是否会导致其他服务器无法正常工作?
- 我现在的操作是否必须通过关机或重启来实现?
- ……
- 一旦错误的关闭或重启了服务器,有可能会给公司造成无法弥补的损失。如果后果严重是有可能承担
法律责任
的。
4.4.2 相关命令
命令 | 作用 |
sync | 将内存数据保存到硬盘上 |
poweroff | 关机 |
reboot | 重启 |
4.5 backslash(\,不是命令)
- 符号:
\
- 作用:如果一个命令特别长,那么可以使用反斜杠表示到下一行继续输入。
- 示例:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
4.6 curl
- 命令:
curl [-X] [GET|POST...] 资源的URL地址
- 作用:通过命令给服务器发送请求。
- 官方文档:curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER,
HTTP
, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction. - 从文档中我们可以看到 curl 命令支持的通信协议非常丰富,其中我们最常用的还是 HTTP 协议。如果有需要 curl 可以通过参数详细设置请求消息头。
- 示例:
curl www.baidu.com
- 示例:
curl -X GET www.baidu.com
4.7 nohup
4.7.1 提出问题
- 我们将一个 SpringBoot 工程导出为 jar 包,jar 包上传到阿里云 ECS 服务器上,使用 java -jar xxx-xxx-xxx.jar 命令启动这个 SpringBoot 程序,此时我们本地的 Xshell 客户端必须一直开着,一旦 Xshell 客户端关闭,java -jar xxx-xxx-xxx.jar 进程就会结束,SpringBoot 程序也就访问不了。
- 所以,我们希望启动 SpringBoot 的 jar 包之后,对应的进程可以一直运行,不会因为 Xshell 客户端关闭而被结束。
4.7.2 解决方案之前台、后台运行
- 默认情况下,Linux 命令都是前台执行的,前台运行的特点就是前面命令不执行完,命令行就一直被前面的命令占用,不能再输入、执行新的命令。
#!/bin/bash
echo "hello before sleep"
sleep 20
echo "hello after sleep"
- 前台(默认情况)运行上面脚本的效果是:
sh demo.sh
- 后台运行上面的脚本的效果是:
sh demo.sh &
- 但是以后台方式运行并不能解决前面提出的问题:我们的 shell 客户端(例如:xshell)和服务器断开连接后,SpringBoot 进程会随之结束,这显然不满足我们部署运行项目的初衷。
4.7.3 解决方案后台运行+ nohup
- nohup 命令就是
no hang up
的缩写,中文翻译为不挂断
,指客户端断开连接后,命令启动的进程仍然运行。 - 使用 nohup 命令启动 SpringBoot 微服务工程的完整写法是:
nohup java -jar spring-boot-demo.jar > springboot.log 2 > &1 &
4.8 wget
- 命令:
wget [-P 指定目标目录] 目标文件的在 web 上的地址
- 示例:
wget -P /opt https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.73/bin/apache-tomcat-8.5.73.tar.gz --no-check-certificate
第五章:字符串处理命令(⭐)
5.1 正则表达式常用符号
符号 | 含义 |
^ | 匹配字符串开始位置的字符 |
$ | 匹配字符串结束位置的字符 |
. | 匹配任何一个字符 |
* | 匹配前面的字符出现 0 ~ n 次 |
[a,m,u] | 匹配字符 a 或 m 或 u |
[a-z] | 匹配所有小写字母 |
[A-Z] | 匹配所有大写字母 |
[a-zA-Z] | 匹配所有字母 |
[0-9] | 匹配所有数字 |
\ | 特殊符号转义 |
5.2 basename
- 返回路径字符串中的资源(文件或目录本身)部分:
basename /aa/bb/cc/dd
- 示例:
basename /aa/bb/cc/dd
- 如果指定了后缀,basename会帮我们把后缀部分也去掉。
basename /aa/bb/cc/dd.txt .txt
- 示例:
basename /aa/bb/cc/dd.txt .txt
5.3 dirname
- 返回路径字符串中的目录部分:
dirname /aa/bb/cc/dd
- 示例:
dirname /aa/bb/cc/dd
- 示例:
dirname /aa/bb/cc/dd.txt
5.4 cut
5.4.1 简介
- 命令:
cut -d xxx -f n 字符串
- 参数
-d
指定拆分依据的字符。 - 参数
-f
指定要提取的列。 - 作用:根据指定符号拆分字符串并提取,默认根据
\t
拆分。
5.4.2 操作演示
- ① 准备测试数据:
touch cut.txt
vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
- ② 切割提取第一列:
cut -d " " -f 1 cut.txt
- ③ 切割提取第二列:
cut -d " " -f 2 cut.txt
- ④ 切割提取第二列和第三列:
cut -d " " -f 2,3 cut.txt
- ⑤ 在 cut.txt 中切出 guan :
cut -d " " -f 1 cut.txt | grep -i guan
cat cut.txt | grep -i guan | cut -d " " -f 1
- ⑥ 选取系统 PATH 变量值,第 2 个
:
开始后的所有路径:
echo $PATH | cut -d : -f 2-
- ⑦ 切割 ifconfig 后打印的 IP 地址:
ifconfig | grep netmask | cut -d i -f 2 | cut -d " " -f 2
5.5 awk
5.5.1 简介
- 一个强大的文本分析工具,将文本逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
5.5.2 基本用法
- 命令:
awk [选项参数] 'pattern{action1} patter2{action2} ...' filename
- pattern:表示 awk 在数据中查找的内容,就是匹配模式。
- action:在找到匹配内容时所执行的一系列命令。
-F
参数:执行分隔符。- awk 命令的内置变量包括:
变量名 | 说明 |
FILENAME | 文件名 |
NR | 已读取的记录(行号) |
NF | 浏览记录的域的个数(切割后,列的个数) |
5.5.3 操作演示
- ① 准备数据:
cp /etc/passwd ./
- ② 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 7 列:
awk -F : '/^root/{print $7}' passwd
- ③ 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列,中间以 ,号隔开:
awk -F : '/^root/{print $1 "," $7}' passwd
- ④ 只显示 passwd 的第 1 列和第 7 列,以逗号分割,且在所有行前面添加列名
user,shell
在最后一行添加heheda,/bin/nidaye
。
awk -F : 'BEGIN{print "user,shell"}{print $1 "," $7}END{print "heheda,/bin/nidaye"}' passwd
- ⑤ 将 passwd 文件中的用户 id 增加数值 1 并输出:
awk -F : '{print $3+1}' passwd
- ⑥ 统计 passwd 文件名,每行的行号,每列的列数
awk -F : '{print "文件名:" FILENAME ", 行号:" NR ", 列数:" NF }' passwd
- ⑦ 切割 IP :
ifconfig | awk -F ' ' '/netmask/{print $2}'
- ⑧ 查询 ifconfig 中空行所在的行号:
ifconfig | awk '/^$/{print NR}'
5.6 sort
5.6.1 简介
- 命令:
sort [参数] [文件路径]
- 参数:
参数名 | 作用 |
-n | 依照数值大小排序 |
-r | 相反顺序排序 |
-t | 设置排序时使用的分隔字符 |
-k | 指定需要排序的列 |
- 作用:将文件或内容进行排序,并将排序结果标准输出。
5.6.3 操作演示
- ① 准备数据:
touch sort.sh
vim sort.sh
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
- ② 根据第 3 列数据进行排序:
sort -t : -nrk 3 sort.sh
5.7 xargs
5.7.1 情景距离
- ① 初始化状态:
mkdir test
cd test
touch happy happy01 happy02 happy03 sad01 sad02 sad03
- ② 需求:将所有名称中包含
sad
的资源删除,但是保留sad02
。 - ③ 分步实现:
-
- 列出全部资源:
ls
-
- 列出名称中包含
sad
的资源:
- 列出名称中包含
ls | grep sad
-
- 进一步排除
sad02
:
- 进一步排除
ls | grep sad | grep -v sad02
-
- 此时最终筛选的结果打印到了标准输出:standard output。通过管道符号可以将标准输出转换为标准输入:standard input。但是删除命令 rm
不接受标准输入作为参数,只接受命令行参数
。
- 此时最终筛选的结果打印到了标准输出:standard output。通过管道符号可以将标准输出转换为标准输入:standard input。但是删除命令 rm
ls | grep sad | grep -v sad02 | rm
-
- rm 命令前面的管道符号把前面的 stdout 转换为了 stdin 再传输给 rm 命令,这种方式对于有些命令可以,但是有些命令不行。例如:mkdir、ls、rm 等命令都是。
- 使用 xargs 命令将 stdin 转换为命令行参数:
ls | grep sad | grep -v sad02 | xargs rm
5.7.2 结论
- xargs 命令的作用:将管道符号提供的 stdin 数据转换为后面命令的命令行参数。
第六章:企业面试真题
6.1 京东
6.1.1 面试题1
- 问:使用 Linux 命令查询 ifconfig 中空行的行号?
- 答:
ifconfig | awk '/^$/{print NR}'
命令 ifconfig | awk '/^$/{print NR}' 的作用是在Unix/Linux系统中查找ifconfig命令输出的空行,并打印其行号(NR是awk内置变量,表示当前处理的记录数,即行号)。
具体解释:
- ifconfig:显示或配置网络接口信息。它的输出通常包含网络接口名称、IP地址、子网掩码等详细信息。
- |:管道符号,将ifconfig命令的输出作为awk命令的输入。
- awk '/^$/{print NR}':awk是一个强大的文本分析工具,这里的正则表达式/^$/匹配空行(以换行符开始并结束的行)。当匹配到空行时,awk会执行大括号内的命令 {print NR},即打印该空行的行号。
因此,这个命令组合的作用是找出ifconfig命令输出中的所有空行,并打印这些空行在输出中的位置(行号)。但在实际使用中,由于ifconfig命令的输出通常不会有空行,这条命令可能并不会得到任何输出。
6.1.2 面试题2
- 问:
- 有文件 chengji.txt 内容如下:
张三 40
李四 50
王五 60
- 使用 Linux 命令计算第二列的和并输出。
awk -F " " '{sum+=$2} END{print sum}' chengji.txt
- 答: 这个命令是用来统计文本文件chengji.txt中以空格分隔的各列数据,并计算第二列数值总和的。具体解释如下:
- awk:是一个强大的文本处理工具,支持模式匹配、处理和格式化文本。
- -F " ":指定输入字段的分隔符为一个空格。这意味着在处理每一行时,awk会根据空格来划分各个字段(列)。
- '{$2}':这里的$2表示每行的第二个字段(列)。在awk中, $1 表示第一个字段,以此类推。
- {sum+=$2}:当遇到每一行时,将该行的第二个字段值累加到变量sum上。
- END{print sum}:在处理完所有行后,打印变量sum的值,即所有行第二个字段值的总和。
所以整个命令的作用就是读取chengji.txt文件中的内容,计算其中每行第二个字段(以空格分隔)的数据之和,并最后输出这个总和。
6.2 新浪
- 问:对文本中无需的一列数字排序?
9
8
7
6
5
4
3
2
10
1
- 示例:
sort -n content.txt
man是最重要的命令,没有之一,因为使用它可以学习其它任何命令。
man cmd1 # 查看命令的联机手册
man cmd1 cmd2 ...# 逐个查看各命令的联机手册联机手册多屏时会自动分页显示
man Is | less # 指定分屏工具
journalctl是Linux上的Systemd日志系统的命令行工具,用于查看和管理系统日志。
它也是systemd-journald服务的一部分,该服务负责收集、存储和检索系统日志。
linux备份和恢复命令dump和restore命令
dump $备份后文件名 $原文件名或者路径
1,dump命令
[root@localhost~]#dump[选项】备份之后的文件名原文件或目录
选项:
-level: 就是我们说的0-9十个备份级别
-f 文件名: 指定备份之后的文件名
-u: 备份成功之后,把备份时间记录在/etc/dumpdates文件
-v: 显示备份过程中更多的输出信息
j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩
为。bz2格式
w: 显示允许被dump的分区的备份等级及备份时间
备份分区
dump-ouj-f /root/boot.bak.bz2 /boot/
#备份命令。先执行一次完全备份,并压缩和更新备份时间
cat/etc/dumpdates
#查看备份时间文件
cp install.log /boot/
#复制日志文件到/boot分区
dump-luj-f/root/boot.bak1.bz2 /boot/
#增量备份/boot分区,并压缩
dump-w
#查询分区的备份时间及备份级别的
查找dump
rpm -qa |grep dump
tcpdump 是一个用于抓取并分析网络数据包的命令行工具。
这个工具在网络调试、性能分析、安全监测等方面有着广泛的用途。
基本用法:
抓取所有接口上的数据包:
sudo tcpdump -i any
抓取指定接口上的数据包:
sudo tcpdump -i eth0
抓取指定主机与其他主机通信的数据包:
sudo tcpdump host
抓取指定端口的数据包:
sudo tcpdump port 80
使用逻辑操作符组合多个条件:
sudo tcpdump 'port 80 or port 443'
保存抓包结果到文件:
sudo tcpdump -w output.pcap
从文件读取数据包:
sudo tcpdump -r output.pcap
输出解释:
假设输出了这样一行数据:
IP 192.168.1.2.22 > 192.168.1.3.49152: Flags [P.], seq 2956702369:2956702417, ack 4208475575, win 501, options [nop,nop,TS val 431523 ecr 17638], length 48
IP:表示这是一个 IP 数据包。
192.168.1.2.22:源 IP 地址和源端口。
192.168.1.3.49152:目标 IP 地址和目标端口。
Flags [P.]:TCP 标志位。P 表示 PUSH,. 表示没有更多的标志。
seq 和 ack:分别表示 TCP 序列号和确认号。
win 501:表示 TCP 窗口大小。
options:TCP 选项。
length 48:数据包长度。
这只是一个非常简单的入门级解释和用法,tcpdump 的功能非常丰富,具体可以通过 man tcpdump 来查看更多详细的信息。
ss 是 Socket Statistics 的缩写,这个命令用于查看系统的 Socket 统计信息。
在 Linux 系统上,ss -s 会输出一个简要的 socket 统计报告。
一个典型的 ss -s 输出可能类似下面这样:
Total: 500 (kernel 600)
TCP: 30 (estab 20, closed 7, orphaned 0, synrecv 0, timewait 7/0), ports 0
Transport Total IP IPv6
RAW 0 0 0
UDP 10 8 2
TCP 20 16 4
INET 30 24 6
FRAG 0 0 0
- Total: 总的 socket 数量。这里的“kernel”通常表示内核为 socket 分配的数量。
- TCP: TCP 连接相关的统计数据。
-
- estab: 已经建立的 TCP 连接数量。
- closed: 已经关闭的 TCP 连接数量。
- orphaned: 无主(通常是关闭状态但未完全关闭)的 TCP 连接数量。
- synrecv: 处于 SYN 接收状态的 TCP 连接数量。
- timewait: 处于 TIME_WAIT 状态的 TCP 连接数量。
- Transport: 该字段下列出了不同类型的传输层协议(如 RAW, UDP, TCP)和它们的数量。
-
- Total: 每种协议的总 socket 数量。
- IP: 使用 IPv4 的 socket 数量。
- IPv6: 使用 IPv6 的 socket 数量。
- FRAG: 片段(Fragmented)数据包的数量。
请注意,这里的数值只是一个示例,并不能代表实际系统中的数值。而且不同的系统版本可能会有不同的输出格式。
在 Vim 中删除全部内容有几种方式:
- 使用普通模式(Normal Mode)命令:
-
- 输入 gg 将光标移动到第一行。
- 输入 G 将光标移动到最后一行。
- 输入 ggD 删除从光标位置到该行末尾的内容。
- 输入 G 再次移动到最后一行。
- 输入 ggdG 删除从光标位置到文件末尾的所有内容。
- 使用可视模式(Visual Mode):
-
- 输入 gg 将光标移动到第一行。
- 按下 V 进入可视模式。
- 输入 G 以选择到文件末尾的所有内容。
- 输入 d 删除选中的内容。
- 使用 Ex 命令(Command Mode):
-
- 按下 : 进入命令模式。
- 输入 1,$d 或者 %d,然后按回车。
以上方法都可以用于删除 Vim 编辑器中的全部内容。根据自己的喜好选择其中一个方法即可。
uptime 是一个用于显示系统运行时间和当前系统负载的命令。
当你在命令行界面中执行 uptime 命令时,你将会看到一个类似如下的输出:
02:43 up 10 days, 4:23, 4 users, load averages: 1.06 0.90 0.87
输出中的各个部分含义如下:
- 02:43:当前的系统时间。
- up 10 days, 4:23:系统已经连续运行的时间,其中 10 days 表示系统运行了 10 天,4:23 表示除去整天之外剩余的小时和分钟。
- 4 users:当前登录系统的用户数量。
- load averages: 1.06 0.90 0.87:系统负载平均值。三个数值分别代表了系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载情况。较高的负载值可能表示系统资源紧张或过载。
通过查看 uptime 输出,你可以了解系统的运行时间以及当前的负载情况。这对于监控系统性能和判断系统是否正常运行非常有用。
jstat -gcutil $pid 3000 20 #检查FUllGC
jstat -gcutil是Java HotSpot虚拟机提供的一个命令行工具,用于监控Java应用程序的垃圾回收情况。下面是jstat -gcutil输出的解释:
- S0:Survivor 0区的使用比例,表示Eden区当前已使用空间的百分比。
- S1:Survivor 1区的使用比例,表示Survivor 1区当前已使用空间的百分比。
- E:Eden区的使用比例,表示Eden区当前已使用空间的百分比。
- O:Old区的使用比例,表示Old区当前已使用空间的百分比。
- M:元空间(Metaspace)的使用比例,表示元空间当前已使用空间的百分比。
- CCS:压缩类空间(Compressed Class Space)的使用比例,表示压缩类空间当前已使用空间的百分比。
- YGC:Young Generation(新生代)的垃圾回收次数。
- YGCT:Young Generation(新生代)的垃圾回收总时间。
- FGC:Full GC(全局垃圾回收)的次数。
- FGCT:Full GC(全局垃圾回收)的总时间。
- GCT:垃圾回收总时间。
以上指标可用于分析Java应用程序的内存使用和垃圾回收性能。常见的策略是通过监控这些指标来调整垃圾回收器的参数,以优化应用程序的性能和内存利用率。
在jstat -gcutil输出中,重点关注的值通常是以下几个:
- S0:Survivor 0区的使用比例:该值反映了新生代中的Eden区的使用情况。如果Eden区的使用比例持续增长,可能表示内存分配太频繁或者新生代的大小不合适,可能需要调整相应的参数以减少垃圾回收的频率并优化内存利用率。
- E:Eden区的使用比例:Eden区是新生代中的初始内存分配区域,如果Eden区的使用比例持续增长,可能表示对象在新生代存活时间较长,可能出现内存泄漏或者生命周期较长的对象需要进入老年代,可以考虑调整新生代和老年代的比例。
- O:Old区的使用比例:Old区是老年代的存储区域,如果Old区的使用比例持续增长,可能表示长时间存活的对象过多,导致老年代的内存占用过大,可能需要调整相关参数或者分析是否存在内存泄漏。
- YGC:Young Generation(新生代)的垃圾回收次数:该值表示新生代的垃圾回收次数,如果垃圾回收频率过高,可能表示内存分配过于频繁,可以考虑调整相应的参数以减少垃圾回收次数。
- YGCT:Young Generation(新生代)的垃圾回收总时间:该值表示新生代的垃圾回收总时间,如果垃圾回收时间过长,可能会导致应用程序的停顿,影响用户的体验,可以考虑调整垃圾回收器的参数以减少回收时间或者改进垃圾回收算法。
这些值的关注点是为了确定应用程序的内存使用情况、垃圾回收频率和效率,以便进行性能调优和内存管理的决策。但具体关注哪个值还需要根据具体的应用场景和需求来决定。如果希望减少停顿时间,可能更关注YGCT;如果想优化内存利用率,可以关注Eden和Old区的使用比例等等。
防火墙 systemctl是Centos7的服务管理主要工具
启动;systemctl start firewalld
查看状态;systemctl status fiewalld
停止;systemctl disable firewalld
禁止;systemctl stop firewalld
网络hostname -i 查看机器iP
命令 “hostname -i” 用于获取主机的IP地址。通过运行这个命令,系统会返回主机的IP地址,它可以是IPv4地址或IPv6地址。这个命令对于网络配置和故障排除非常有用,因为它可以帮助你确定主机当前使用的IP地址。
命令 “trace” 通常指的是 “traceroute” 或 “tracert” 命令,这是一个网络工具,用于跟踪数据包从一个源地址到目标地址的路径。
“traceroute” 命令用于 Unix/Linux 系统,而 “tracert” 命令用于 Windows 系统。它们的功能相似,都可以帮助用户确定数据包在网络中经过的路由路径和传输延迟。
当你在命令行中运行 “trace” 命令,它会向目标地址发送一系列的数据包,每个数据包在网络中传输时都会经过一系列的路由器。每个路由器都会将数据包传递给下一个跳点,直到它到达目标地址。
“trace” 命令会显示每个跳点的IP地址和传输时间,以及中间经过的网络节点。通过这些信息,你可以确定数据包的路径,并检查是否存在网络延迟或数据包丢失的问题。
使用 “trace” 命令可以帮助网络管理员诊断网络连接问题、优化网络路由或查找网络故障的原因。
ifconfig 查看网络ip地址
ping 查看是否可以连接某个IP
查找find / -name mysql
find . -name "*.c"
将系统中所有名为mysql的文件列出来
将当前目录及其子目录下所有后缀名是c的文件列出来
#系统管理
ps 进程号
ps -ef 进程号
ps -ef 命令用于列出系统上运行的所有进程的详细信息。它会显示每个进程的进程号(PID)、用户、CPU 使用情况、内存使用情况等等。但是,ps -ef 命令通常不需要指定特定的进程号作为参数。
如果您想查看特定进程的详细信息,可以使用以下方式:
perlCopy code
ps -ef | grep 进程名
将 "进程名" 替换为您想要查找的进程的名称或关键词。这将筛选出包含指定关键词的进程,并显示它们的详细信息。
如果您已经知道要查找的进程的确切进程号,可以直接使用以下命令:
cssCopy code
ps -p 进程号
将 "进程号" 替换为您要查看的进程的实际进程号。这将显示特定进程的详细信息。
ps -ef | grep java 命令用于查找系统上所有包含 "java" 字符串的进程,并显示它们的详细信息。以下是命令输出的解释:
每行输出表示一个包含 "java" 字符串的进程,列出的信息包括:
- UID:进程所属的用户标识符(User ID)。
- PID:进程的唯一进程号(Process ID)。这是进程的标识符。
- PPID:父进程的进程号(Parent Process ID)。表示启动该进程的父进程。
- C:CPU 使用百分比。它表示进程在CPU上的占用情况。
- STIME:进程的启动时间。显示进程启动的日期和时间。
- TTY:终端类型。通常显示 "?",表示进程未绑定到特定的终端。
- TIME:进程的累计 CPU 使用时间。以小时:分钟:秒的格式显示。
- CMD:命令行参数。显示启动进程时使用的命令。
在输出中,您将看到所有包含 "java" 字符串的进程,包括 Java 应用程序和可能与 Java 相关的其他进程。这对于查找正在运行的 Java 进程以及它们的详细信息非常有用。
arms_pop_xms="6G":这表示设置Java虚拟机(JVM)的初始堆大小为6GB。初始堆大小是JVM启动时为应用程序分配的内存大小。
arms_pop_xmx="6G":这表示设置JVM的最大堆大小为6GB。最大堆大小确定了JVM可以动态分配的最大内存量。
arms_pop_perm_size="512m":这表示设置JVM的永久代(permgen)大小为512MB。永久代主要用于存储类的元数据。
arms_pop_max_perm_size="512m":这表示设置JVM的最大永久代大小为512MB。指定最大永久代大小可以避免永久代过大导致的内存溢出问题。
arms_pop_xmn="2G":这表示设置JVM的年轻代(Young Generation)的初始大小为2GB。年轻代是JVM中用于存放新创建对象的区域
kill 杀掉进程
kill - 9 PID 强制杀掉
tsar 阿里云性能检测工具
[kongjian@tsar]$ tsar -l -i 1
Time ---cpu-- ---mem-- ---tcp-- -----traffic---- --xvda-- -xvda1-- -xvda2-- -xvda3-- -xvda4-- -xvda5-- ---load-
Time util util retran pktin pktout util util util util util util load1
11/04/13-14:09:10 0.20 11.57 0.00 9.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11/04/13-14:09:11 0.20 11.57 0.00 4.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
这是一个 tsar 命令的输出结果,用于监控系统性能指标。
Time---cpu-----mem-----tcp-------traffic---- --sda--- --sdb--- --sdc--- --sdd--- --sde--- --sdf--- --sdg--- -- sdh-----sdi----sdj--- --sdk--- --sdl--_---loa ad
Time:时间戳
cpu:CPU 使用率
mem:内存使用率
tcp:TCP 连接的各种统计信息,如重传次数等
traffic:网络流量统计信息,如数据包的接收和发送量等
sda:磁盘 sda 的使用率
sdb:磁盘 sdb 的使用率
sdc:磁盘 sdc 的使用率
sdd:磁盘 sdd 的使用率
sde:磁盘 sde 的使用率
sdf:磁盘 sdf 的使用率
sdg:磁盘 sdg 的使用率
sdh:磁盘 sdh 的使用率
sdi:磁盘 sdi 的使用率
sdj:磁盘 sdj 的使用率
sdk:磁盘 sdk 的使用率
sdl:磁盘 sdl 的使用率
load:系统平均负载
以第二行数据为例,解释如下:
这是一个 tsar 命令的输出结果,用于监控系统性能指标。
时间:Time
CPU 使用率:cpu
内存使用率:mem
TCP 连接信息:tcp
网络流量信息:traffic
磁盘 sda 的使用率:sda
磁盘 sdb 的使用率:sdb
磁盘 sdc 的使用率:sdc
磁盘 sdd 的使用率:sdd
磁盘 sde 的使用率:sde
磁盘 sdf 的使用率:sdf
磁盘 sdg 的使用率:sdg
磁盘 sdh 的使用率:sdh
磁盘 sdi 的使用率:sdi
磁盘 sdj 的使用率:sdj
磁盘 sdk 的使用率:sdk
磁盘 sdl 的使用率:sdl
系统平均负载:load
Time:时间戳
cpu util:CPU 使用率
mem util:内存使用率
tcp retran:TCP 重传次数
traffic pktin:网络接收数据包量
traffic pktout:网络发送数据包量
xvda util:磁盘 xvda 的使用率
xvda1 util:磁盘 xvda1 的使用率
xvda2 util:磁盘 xvda2 的使用率
xvda3 util:磁盘 xvda3 的使用率
xvda4 util:磁盘 xvda4 的使用率
xvda5 util:磁盘 xvda5 的使用率
load1:系统平均负载
以第二行数据为例,解释如下:
时间:11/04/13-14:09:11
CPU 使用率:0.20(即 20%)
内存使用率:11.57(即 11.57%)
TCP 重传次数:0.00
网络接收数据包量:4.00
网络发送数据包量:2.00
磁盘 xvda 的使用率:0.00
磁盘 xvda1 的使用率:0.00
磁盘 xvda2 的使用率:0.00
磁盘 xvda3 的使用率:0.00
磁盘 xvda4 的使用率:0.00
磁盘 xvda5 的使用率:0.00
系统平均负载:0.00
高危命令shutdown重启
shutdown -r now 立刻
shutdown -r 10 过10分钟自动重启
shutdown -r 20:35在时间为20:35时候重自
shutdown -c取消重启
poweroff 立刻关机
shutdown -h now 立刻关机
shutdown-h 10 分钟后自动关机
Linux 系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题、解决问题,降低损失,常用的巡检命令如下:
#ls -l 显示含义
pwdx 用于显示指定进程的当前工作目录。
它接受一个或多个进程 ID 作为参数,并输出这些进程的当前工作目录路径。
#用户管理
useradd 新增用户(普通在/hom)
useradd新增用户
格式:useradd [参数]用户名称
常用参数:
-c comment指定一段注释性描述。
-d目录 指定用户主目录,如果此目录不存在,则同时使用一m选项,可以创建主自录。
-g用户组 指定用户所属的用户组。
-G用户组,用户组指定用户所属的附加组。
-s she11文件指定用户的登录shell。
-u 用户号指定用户的用户号,如果同时有-0选项,则可以重复使用其他用户的标识号。
命令
useradd stu 新增用户stu
useradd -g root zhangsan 添加用户zhangsan到root组
useradd-d/home/wangwu 1isi 添加用户lisi指定的目录为wangwu(不指定则款认的名录各和用户名相同)
passwd给指定的用户设置密码
用户管理的一项重要内容是用户口令的管理。用户账号刚创反建时没有口令,但是被系统锁定,无法使用。必须为其指定。
口令后才可以使用,即使是指定空口令。指定和修改用户口令的shell命令是passwd,超级用户可以为自己和其他用
户指定口令,普通用户只能用它修改自己的口令
格式:passwd [参数]用户名
常用参数:
-1 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令,比如centos 默认的root账号没有密码,就可以直接使用passwd修改密码即可。
命令:
passwd stu 按下enter键输入2次密码即可
#userdel 删除用户
#usermod 修改用户信息
#head -n 10 查看前10行
head -n 10 命令用于显示文本文件的前10行内容。如果您想要在终端中查看一个文本文件的前10行,并且希望以中文输出,可以按照以下方式执行:
head -n 10 文件名
将 "文件名" 替换为您想要查看前10行内容的文本文件的名称,该命令将以中文输出这些行。如果文件包含中文字符,它们也将被正确显示。
#tail -n 10 查看最后10行
#tail -n +10 从10行开始显示,显示10行之后的
#head -n 10 /etc/yum.conf 显示前面10行
#tail -f $文件名 实时监控日志信息,可以不断刷新的信息,可以用ctrl+c 退出命令行
#cd .. 退到上一级目录
在命令行中,使用cd ..可以退到上一级目录。这个命令会让你从当前目录切换到父目录(上一级目录)。
例如,如果你当前位于目录/home/user/documents,运行cd ..后,你将进入目录/home/user,也就是上一级目录。
请注意,命令行中的..表示父目录,.表示当前目录。
#ls -a 列出隐藏目录
ls -a 是一个在 Unix-like 操作系统中用于列出文件和目录的命令,包括隐藏文件和隐藏目录。隐藏文件和目录以点(.)开头,通常用于存储配置文件和其他系统文件。您可以在终端中执行以下命令来列出所有文件和目录,包括隐藏的:
ls -a
这将显示当前目录中的所有文件和目录,包括以点开头的隐藏文件和目录。
#| 管道 允许你把一个命令的输出结果转到另外一个命令
#grep 查找符合条件的字符串。
grep 是一个在 Unix-like 操作系统中用于搜索文本的命令,它可以查找并显示符合指定模式的字符串。以下是一些常用的 grep 参数:
- -i:忽略大小写,使搜索不区分大小写。
- -r 或 -R:递归搜索目录中的文件。
- -l:仅列出包含匹配字符串的文件名,而不显示匹配的具体行。
- -c:仅显示匹配字符串的数量,而不显示匹配的具体行。
- -n:显示匹配字符串的行号。
- -v:反向搜索,显示不匹配指定模式的行。
- -e:允许多次指定搜索模式。
- -A:显示匹配行后面的若干行。
- -B:显示匹配行前面的若干行。
- -C:显示匹配行前后的若干行。
示例用法:
- 搜索包含字符串 "pattern" 的文件:grep "pattern" filename
- 忽略大小写搜索字符串 "pattern":grep -i "pattern" filename
- 递归搜索目录中的文件:grep -r "pattern" directory
- 仅列出包含匹配字符串的文件名:grep -l "pattern" directory
- 显示匹配字符串的数量:grep -c "pattern" filename
- 显示匹配字符串的行号:grep -n "pattern" filename
- 反向搜索,显示不匹配 "pattern" 的行:grep -v "pattern" filename
- 显示匹配行后面的2行:grep -A 2 "pattern" filename
- 显示匹配行前面的1行:grep -B 1 "pattern" filename
- 显示匹配行前后的1行:grep -C 1 "pattern" filename
这些参数可以根据您的具体需求来组合使用,以便高效地查找和处理文本数据。
#rmdir 删除目录
#touch linux创建文件
#pwd 打印当前目录
#mv 移动或者重命名
#cp 复制文件
#vi 创建一个文件并编辑
快捷键
#yum/apt/yast 三种安装文件linux;
yum安装 使用联网
优点:安装方便,稳定性高,与系统兼容性好
缺点:需要联网,有的软件没有老旧版本
rpm安装,是指已经编译好的文件,并打包。
优点:安装方便
缺点:兼容性没有yum方式好
tar.gz安装 源码安装,解压命令:tar -zxvf 包名
您提到了通过 tar -zxvf 命令来解压 tar.gz 文件,这是正确的。以下是这个命令的详细说明:
- tar:这是用于处理 tar 归档文件的命令。
- -z:表示使用 gzip 压缩。
- -x:表示提取(解压缩)文件。
- -v:表示详细模式,它会显示解压的过程。
- -f:表示后面跟随的是文件名。
要解压一个名为 package.tar.gz 的 tar.gz 文件,您可以使用以下命令:
tar -zxvf package.tar.gz
这将解压文件并将其内容提取到当前目录。如果您希望将文件提取到特定目录,可以在命令中指定目标目录,例如:
tar -zxvf package.tar.gz -C /path/to/target/directory
这将把文件提取到 /path/to/target/directory 目录中。
#rpm -ql 包名 #查看安装包路径
rpm -ql 命令用于查看已安装的 RPM 包中的文件列表和安装路径。您可以使用以下方式来查看特定包的安装路径:
rpm -ql 包名
将 "包名" 替换为您要查询的 RPM 包的名称,然后执行命令。这将列出该包中安装的文件及其对应的路径。这对于查找特定软件包的安装位置非常有用。
#rpm -qa |grep 软件名 #查找安装包,包名
#ethtool #是用于查询及设置网卡参数的命令
ethtool 是一个用于配置和显示以太网接口的工具,它通常在 Linux 系统上使用。它允许您查看和修改以太网接口的参数和状态,包括速度、双工模式、MAC 地址等。
以下是一些常见的 ethtool 命令和用法示例:
- 显示以太网接口的状态和配置信息:
Copy code
ethtool eth0
这将显示名为 eth0 的以太网接口的详细信息,包括速度、双工模式、MAC 地址等。
- 查看以太网接口支持的速度和双工模式:
cssCopy code
ethtool -a eth0
这将列出 eth0 接口支持的各种速度和双工模式。
- 修改以太网接口的速度和双工模式:
sqlCopy code
ethtool -s eth0 speed 100 duplex full
这将将 eth0 接口的速度设置为 100 Mbps,并设置为全双工模式。
- 显示以太网接口的统计信息(收发数据包、错误等):
Copy code
ethtool -S eth0
这将显示 eth0 接口的详细统计信息。
- 启用或禁用以太网接口的 Wake-on-LAN 功能:
Copy code
ethtool -s eth0 wol g
这将启用 eth0 接口的 Wake-on-LAN 功能。
请注意,使用 ethtool 命令需要管理员权限,通常需要在 sudo 命令前缀下执行。这些命令可以根据您的具体网络配置和需求进行调整。
#mkdir #创建目录,或者多个目录
#touch #创建一个或者多个文件
#telnet (ip加端口) #查看远方服务器ssh端口是否开放
#curl #经常用于测试一台服务器是否可以到达一个网站
curl 是一个命令行工具和库,用于在各种操作系统上进行网络数据传输。它支持多种协议,包括 HTTP、HTTPS、FTP、SCP、SFTP 等,使您能够从命令行或脚本中执行各种网络请求和操作。以下是一些常见的 curl 命令和用法示例:
- 发送 HTTP GET 请求并获取响应:
curl http://example.com
这将向 http://example.com 发送一个简单的 GET 请求并将响应显示在终端上。
- 发送 HTTP POST 请求:
curl -X POST -d "param1=value1¶m2=value2" http://example.com/api
这将向 http://example.com/api 发送一个 POST 请求,包含指定的参数。
- 下载文件:
curl -O https://example.com/file.txt
这将下载 https://example.com/file.txt 并将其保存到当前工作目录中。
- 上传文件:
curl -F "file=@localfile.txt" http://example.com/upload
这将上传本地文件 localfile.txt 到 http://example.com/upload。
- 使用基本身份验证发送请求:
curl -u username:password http://example.com/api
这将使用用户名和密码进行基本身份验证,并发送请求到 http://example.com/api。
- 显示详细的请求和响应头信息:
curl -v http://example.com
这将显示请求和响应的详细头部信息。
- 跟随重定向:
curl -L http://example.com/redirect
这将跟随重定向并获取最终的目标 URL 的内容。
curl 是一个非常强大的网络工具,可以用于许多网络任务,包括获取和发送数据、测试 API、下载文件等等。您可以根据具体的需求和场景来使用 curl 命令。
curl 是一个用于在命令行下执行 HTTP 请求的工具,它支持多种协议,包括 HTTP、HTTPS、FTP、SCP、SFTP 等。以下是 curl 命令的常见参数和介绍:
cssCopy code
curl [OPTIONS] [URL]
- [OPTIONS]:curl 命令的选项,可以是零个或多个选项,用于配置请求和控制输出。
- [URL]:要请求的 URL 地址。
以下是常见的 curl 命令参数及其介绍:
- 基本选项:
-
- -X, --request <METHOD>:指定 HTTP 请求方法(GET、POST、PUT、DELETE 等)。
- -H, --header <HEADER>:指定请求头,可以多次使用以设置多个头部。
- -d, --data <DATA>:发送 POST 请求时的数据。
- -i, --include:在输出中包含响应头。
- -I, --head:仅显示响应头信息。
- -o, --output <FILE>:将响应保存到文件。
- 连接选项:
-
- --connect-timeout <SECONDS>:设置连接超时时间。
- --max-time <SECONDS>:设置请求的最大执行时间。
- -L, --location:跟随重定向。
- --cookie <COOKIE>:发送 HTTP Cookie。
- --cookie-jar <FILE>:将服务器返回的 Cookie 保存到文件中。
- 认证选项:
-
- -u, --user <USER:PASSWORD>:使用基本认证发送用户名和密码。
- 代理选项:
-
- --proxy <PROXY>:指定代理服务器。
- --proxy-user <USER:PASSWORD>:使用代理服务器时的认证信息。
- SSL/TLS 选项:
-
- --insecure:禁用 SSL/TLS 证书验证。
- --cert <CERT[:PASS]>:设置客户端证书文件及可选的密码。
- --key <KEY>:设置客户端私钥文件。
- 输出控制选项:
-
- -s, --silent:静默模式,不显示进度信息。
- -S, --show-error:显示错误信息。
- --progress-bar:显示下载进度条。
- 其他选项:
-
- -A, --user-agent <STRING>:设置用户代理字符串。
- --data-raw <DATA>:以原始数据形式发送 POST 请求数据。
- --data-binary <DATA>:以二进制数据形式发送 POST 请求数据。
- --url <URL>:指定请求的 URL。
这只是 curl 命令的一部分选项,curl 支持的选项非常丰富,可以根据需要进行组合和使用,以执行各种类型的 HTTP 请求。可以运行 curl --help 命令查看完整的选项列表和说明。
#host #查看主机ip地址
host 命令用于查询域名系统 (DNS) 中的主机名或 IP 地址信息。它可以通过域名查找相应的 IP 地址,或者通过 IP 地址查找相应的域名。以下是一些常见的 host 命令用法示例:
- 查找域名对应的 IP 地址:
Copy code
host example.com
这将查询域名 example.com 对应的 IP 地址,并显示结果。
- 查找 IP 地址对应的域名:
Copy code
host 8.8.8.8
这将查询 IP 地址 8.8.8.8 对应的域名,并显示结果。
- 查找多个域名的 IP 地址:
Copy code
host google.com yahoo.com
这将查询多个域名对应的 IP 地址,并显示结果。
- 使用特定的 DNS 服务器进行查询:
Copy code
host example.com dns.server.ip.address
这将使用指定的 DNS 服务器 IP 地址来查询域名 example.com 对应的 IP 地址。
host 命令是一个用于进行基本 DNS 查询的实用工具,可以用于检查域名解析是否正常工作,以及查找特定主机名或 IP 地址的信息。请注意,host 命令在不同的操作系统中可能具有不同的选项和用法。
#ifconfig #查看网卡及IP
[root@iZuf64qftl2ndlio79y2v2Z /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.22.3.73 netmask 255.255.255.0 broadcast 172.22.3.255
inet6 fe80::216:3eff:fe00:523e prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:00:52:3e txqueuelen 1000 (Ethernet)
RX packets 96659 bytes 134803914 (128.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23217 bytes 3592545 (3.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这是一个网络接口的配置和状态信息,通常在Linux系统中通过ifconfig或ip addr命令查看。下面是这段信息的详细解释:
- eth0:
-
- flags=4163<UP,BROADCAST,RUNNING,MULTICAST>: 这是eth0的网络接口状态。
-
-
- UP: 接口已启动。
- BROADCAST: 支持广播。
- RUNNING: 接口正在运行。
- MULTICAST: 支持多播。
-
-
- mtu 1500: 最大传输单元(MTU)是1500字节,这是以太网的标准大小。
- inet 172.22.3.73 netmask 255.255.255.0 broadcast 172.22.3.255: 这是IPv4的配置。
-
-
- IP地址是172.22.3.73。
- 子网掩码是255.255.255.0。
- 广播地址是172.22.3.255。
-
-
- inet6 fe80::216:3eff:fe00:523e prefixlen 64 scopeid 0x20<link>: 这是IPv6的配置。
-
-
- IP地址是fe80::216:3eff:fe00:523e。
- 前缀长度是64。
- 作用域ID是0x20,表示这个地址是链路本地地址。
-
-
- ether 00:16:3e:00:52:3e txqueuelen 1000 (Ethernet): 这是物理地址(也称为MAC地址)和传输队列长度。
- RX packets 96659 bytes 134803914 (128.5 MiB): 接收的数据包数量和字节数。
- RX errors 0 dropped 0 overruns 0 frame 0: 接收错误、丢弃的数据包、溢出和帧错误数都是0。
- TX packets 23217 bytes 3592545 (3.4 MiB): 发送的数据包数量和字节数。
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0: 发送错误、丢弃的数据包、溢出、无载波和碰撞都是0。
- lo:
-
- flags=73<UP,LOOPBACK,RUNNING>: lo接口的状态信息。
-
-
- UP: 接口已启动。
- LOOPBACK: 这是一个回环接口,通常用于本地通信。
- RUNNING: 接口正在运行。
-
-
- mtu 65536: MTU是65536字节,这是回环接口的标准大小。
- inet 127.0.0.1 netmask 255.0.0.0: IPv4的配置,IP地址是127.0.0.1,子网掩码是255.0.0.0,这是一个回环地址。
- inet6 ::1 prefixlen 128 scopeid 0x10<host>: IPv6的配置,这是一个链路本地地址。
- loop txqueuelen 1000 (Local Loopback): 这表示数据包在这个接口上循环,不会发送到网络上。
- RX packets 0 bytes 0 (0.0 B): 从该接口接收的数据包和字节数都是0。
- TX packets 0 bytes 0 (0.0 B): 从该接口发送的数据包和字节数都是0。其他与错误相关的字段都是0,因为这是一个回环接口,所以不会出现错误。
# history #查看历史命令
# uname -a # 查看内核 / 操作系统 / CPU 信息
uname -a 命令用于显示系统的内核版本、操作系统类型以及 CPU 信息。执行该命令将输出包括这些信息的一行文本。以下是 uname -a 命令的示例输出:
graphqlCopy code
Linux myhostname 4.15.0-70-generic #79-Ubuntu SMP Tue Nov 12 10:36:11 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
解释这个输出:
- Linux:操作系统类型,这是一个运行 Linux 内核的系统。
- myhostname:主机名。
- 4.15.0-70-generic:内核版本号。
- #79-Ubuntu SMP Tue Nov 12 10:36:11 UTC 2019:内核编译信息,包括构建日期和时间。
- x86_64:CPU 架构,这是一个 64 位系统。
- x86_64:处理器类型,通常与 CPU 架构相同。
- x86_64:硬件平台,通常也与 CPU 架构相同。
- GNU/Linux:操作系统名称。
uname -a 命令可以用于查看系统的基本信息,包括操作系统和硬件相关的信息。这对于确定正在运行的系统的配置非常有用。
# head -n 1 /etc/issue # 查看操作系统版本
head -n 1 /etc/issue 命令用于查看操作系统版本信息。执行该命令将显示操作系统版本的第一行文本。以下是示例输出:
Ubuntu 20.04.1 LTS \n \l
这个输出告诉您正在运行的操作系统版本是 Ubuntu 20.04.1 LTS。操作系统版本信息通常包括发行版名称和版本号。
请注意,/etc/issue 文件通常包含了登录时显示的操作系统版本信息。然而,这个文件的内容可能因不同的 Linux 发行版而异。在某些情况下,您可能需要使用其他命令或文件来查看操作系统版本。
# cat /proc/cpuinfo # 查看 CPU 信息
cat /proc/cpuinfo 命令用于查看关于 CPU(中央处理器)的详细信息。执行该命令将显示有关系统中每个 CPU 核心的信息。以下是示例输出的一部分:
yamlCopy code
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping : 10
microcode : 0xde
cpu MHz : 1800.000
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
...
这个输出提供了关于 CPU 的各种信息,包括制造商、型号、核心数、线程数、时钟频率等等。
cat /proc/cpuinfo 是一个用于查看 CPU 信息的常用命令,它可以用于了解系统上的 CPU 配置和性能特征。如果您想获取更详细的 CPU 信息,可以使用工具如 lscpu 或 lshw(可能需要安装)来获取更友好和易读的输出。
cat /proc/cpuinfo 命令用于查看有关 CPU(中央处理器)的详细信息。以下是输出的解释,其中包括了一些常见的字段和信息:
- processor:这是每个 CPU 核心的编号。例如,processor 0 表示第一个核心。
- vendor_id:CPU 制造商的标识符。在示例中,制造商是 Intel。
- cpu family:CPU 家族号,用于标识 CPU 的架构。
- model:CPU 的型号。在示例中,型号为 142。
- model name:CPU 的具体型号名称。在示例中,型号名称是 "Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz"。
- stepping:CPU 的步进值,表示 CPU 制造过程中的一步。
- microcode:CPU 微码的版本信息。
- cpu MHz:CPU 的时钟频率,以兆赫兹(MHz)为单位。在示例中,频率为 1800.000 MHz。
- cache size:CPU 缓存大小,以千字节(KB)为单位。在示例中,缓存大小为 8192 KB,即 8 MB。
- physical id:物理 CPU 的编号。如果系统有多个物理 CPU,则每个物理 CPU 都有唯一的编号。
- siblings:每个 CPU 核心能够同时处理的线程数。在示例中,有 8 个线程。
- core id:CPU 核心的编号。在多核 CPU 中,每个核心都有一个唯一的编号。
- cpu cores:每个物理 CPU 包含的核心数。在示例中,每个物理 CPU 包含 4 个核心。
- apicid:高级可编程中断控制器 (APIC) 的标识符。
- initial apicid:初始的 APIC 标识符。
- fpu:浮点处理单元(FPU)的支持情况。"yes" 表示支持。
- fpu_exception:浮点异常的支持情况。"yes" 表示支持。
这些字段提供了有关系统中每个 CPU 核心的详细信息,包括制造商、型号、频率、缓存大小等等。这些信息对于了解系统的 CPU 配置和性能非常有用。
# hostname # 查看计算机名
# lspci -tv # 列出所有 PCI (Peripheral Component Interconnect 外围组件互联)设备
[root@localhost ~]# lsusb -tv
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M
|__ Port 1: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 1: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
[root@localhost ~]# lspci -tv
-[0000:00]-+-00.0 Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge
+-01.0-[01]--
+-07.0 Intel Corporation 82371AB/EB/MB PIIX4 ISA
+-07.1 Intel Corporation 82371AB/EB/MB PIIX4 IDE
+-07.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI
+-07.7 VMware Virtual Machine Communication Interface
+-0f.0 VMware SVGA II Adapter
+-10.0 Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
+-11.0-[02]--+-00.0 VMware USB1.1 UHCI Controller
| +-01.0 Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
| +-02.0 Ensoniq ES1371/ES1373 / Creative Labs CT2518
| \-03.0 VMware USB2 EHCI Controller
+-15.0-[03]--
+-15.1-[04]--
+-15.2-[05]--
+-15.3-[06]--
+-15.4-[07]--
+-15.5-[08]--
+-15.6-[09]--
+-15.7-[0a]--
+-16.0-[0b]--
+-16.1-[0c]--
+-16.2-[0d]--
+-16.3-[0e]--
+-16.4-[0f]--
+-16.5-[10]--
+-16.6-[11]--
+-16.7-[12]--
+-17.0-[13]--
+-17.1-[14]--
+-17.2-[15]--
+-17.3-[16]--
+-17.4-[17]--
+-17.5-[18]--
+-17.6-[19]--
+-17.7-[1a]--
+-18.0-[1b]--
+-18.1-[1c]--
+-18.2-[1d]--
+-18.3-[1e]--
+-18.4-[1f]--
+-18.5-[20]--
+-18.6-[21]--
\-18.7-[22]--
lspci -tv 命令用于显示 PCI 设备的树形视图,以查看设备之间的层次关系和驱动程序。
解释每行的含义如下:
- -[0000:00]- 表示根节点,编号为 0000:00。
接下来的每行表示一个设备及其子设备,以及它们之间的层次关系。
- +-01.0-[01]-- 表示设备编号为 01,类别为 PCI 桥接器(bridge)。
- +-07.0 表示设备编号为 07,类别为 ISA 桥接器(bridge)。
- +-07.1 表示设备编号为 07,类别为 IDE 接口(IDE)。
- +-07.3 表示设备编号为 07,类别为 ACPI(Advanced Configuration and Power Interface)。
- +-07.7 表示设备编号为 07,类别为虚拟机通信接口(Virtual Machine Communication Interface)。
- +-0f.0 表示设备编号为 0f,类别为虚拟机显示适配器(Virtual Machine Display Adapter)。
- +-10.0 表示设备编号为 10,类别为 SCSI 控制器(SCSI Controller)。
- +-11.0-[02]-- 表示设备编号为 02,类别为 USB 控制器(USB Controller)。
- | +-00.0 表示设备编号为 00,类别为 UHCI 控制器(Universal Host Controller Interface)。
- | +-01.0 表示设备编号为 01,类别为网卡(Ethernet Controller)。
- | \-02.0 表示设备编号为 02,类别为音频设备(Audio Device)。
- \-03.0 表示设备编号为 03。
以下还有更多设备,具体根据设备的类别编号和描述进行解释。
通过 lspci -tv 命令的输出,可以查看 PCI 设备之间的连接关系,并获取有关设备的详细信息,如设备类别和驱动程序。
# lsusb -tv # 列出所有 USB 设备
[root@localhost ~]# lsusb -tv
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M
|__ Port 1: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 1: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
lsusb -tv 命令用于显示 USB 设备的树形视图,以查看设备的层次关系和驱动程序。
解释每行的含义如下:
- /: 表示总线,每个总线都有一个唯一的编号。
- Bus 02. 表示总线编号为 02。
- Port 1: 表示总线上的端口编号为 1。
- Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M 表示设备编号为 1,类别为根集线器(root hub),驱动程序为 uhci_hcd/2p,传输速度为 12M。
- |__ Port 1: 表示在上级设备(Dev 1)上的端口编号为 1。
- Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M 表示设备编号为 2,接口编号为 0,类别为人机接口设备(Human Interface Device),驱动程序为 usbhid,传输速度为 12M。
- |__ Port 2: 表示在上级设备(Dev 1)上的端口编号为 2。
- Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M 表示设备编号为 3,接口编号为 0,类别为集线器(Hub),驱动程序为 hub/7p,传输速度为 12M。
- |__ Port 1: 表示在上级设备(Dev 3)上的端口编号为 1。
- Dev 4, If 0, Class=Wireless, Driver=btusb, 12M 表示设备编号为 4,接口编号为 0,类别为无线设备(Wireless),驱动程序为 btusb,传输速度为 12M。
- |__ Port 1: 表示在上级设备(Dev 4)上的端口编号为 1。
- Dev 4, If 1, Class=Wireless, Driver=btusb, 12M 表示设备编号为 4,接口编号为 1,类别为无线设备(Wireless),驱动程序为 btusb,传输速度为 12M。
- /: Bus 01. 表示总线编号为 01。
- Port 1: 表示总线上的端口编号为 1。
- Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M 表示设备编号为 1,类别为根集线器(root hub),驱动程序为 ehci-pci/6p,传输速度为 480M。
通过 lsusb -tv 命令的输出,可以查看 USB 设备之间的连接关系,并获取有关设备的信息,如设备类别和驱动程序。
# lsmod # 列出加载的内核模块
[root@localhost ~]# lsmod
Module Size Used by
nf_conntrack_netlink 40492 0
xt_addrtype 12676 2
br_netfilter 22256 0
xt_CHECKSUM 12549 1
ipt_MASQUERADE 12678 4
nf_nat_masquerade_ipv4 13463 1 ipt_MASQUERADE
tun 40260 1
devlink 60067 0
overlay 91659 0
ip6t_rpfilter 12595 1
ip6t_REJECT 12625 2
nf_reject_ipv6 13717 1 ip6t_REJECT
ipt_REJECT 12541 4
nf_reject_ipv4 13373 1 ipt_REJECT
xt_conntrack 12760 13
ebtable_nat 12807 1
ebtable_broute 12731 1
bridge 155432 2 br_netfilter,ebtable_broute
stp 12976 1 bridge
llc 14552 2 stp,bridge
ip6table_nat 12864 1
nf_conntrack_ipv6 18935 7
nf_defrag_ipv6 35104 1 nf_conntrack_ipv6
nf_nat_ipv6 14131 1 ip6table_nat
ip6table_mangle 12700 1
ip6table_security 12710 1
ip6table_raw 12683 1
iptable_nat 12875 1
nf_conntrack_ipv4 19149 8
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26583 3 nf_nat_ipv4,nf_nat_ipv6,nf_nat_masquerade_ipv4
iptable_mangle 12695 1
iptable_security 12705 1
iptable_raw 12678 1
nf_conntrack 143360 8 nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
ip_set 45799 0
ebtable_filter 12827 1
ebtables 35009 3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_filter 12815 1
ip6_tables 26912 5 ip6table_filter,ip6table_mangle,ip6table_security,ip6table_nat,ip6table_raw
iptable_filter 12810 1
vmw_vsock_vmci_transport 30620 1
vsock 40463 2 vmw_vsock_vmci_transport
bnep 23721 2
sunrpc 366617 1
dm_mirror 22326 0
dm_region_hash 20813 1 dm_mirror
dm_log 18411 2 dm_region_hash,dm_mirror
dm_mod 128595 2 dm_log,dm_mirror
snd_seq_midi 13565 0
snd_seq_midi_event 14597 1 snd_seq_midi
crc32_pclmul 13133 0
ppdev 17671 0
ghash_clmulni_intel 13273 0
snd_ens1371 25076 3
aesni_intel 189456 0
vmw_balloon 18094 0
snd_rawmidi 31553 2 snd_ens1371,snd_seq_midi
lrw 13286 1 aesni_intel
gf128mul 15139 1 lrw
glue_helper 13990 1 aesni_intel
ablk_helper 13597 1 aesni_intel
cryptd 21190 3 ghash_clmulni_intel,aesni_intel,ablk_helper
snd_ac97_codec 134575 1 snd_ens1371
ac97_bus 12730 1 snd_ac97_codec
snd_seq 62774 2 snd_seq_midi_event,snd_seq_midi
snd_seq_device 14356 3 snd_seq,snd_rawmidi,snd_seq_midi
btusb 45616 0
btrtl 12945 1 btusb
btbcm 14040 1 btusb
btintel 15709 1 btusb
pcspkr 12718 0
joydev 17389 0
snd_pcm 109531 2 snd_ac97_codec,snd_ens1371
bluetooth 556979 26 bnep,btbcm,btrtl,btusb,btintel
snd_timer 34110 2 snd_pcm,snd_seq
rfkill 26487 2 bluetooth
sg 40719 0
snd 83987 13 snd_ac97_codec,snd_timer,snd_pcm,snd_seq,snd_rawmidi,snd_ens1371,snd_seq_device
soundcore 15047 1 snd
i2c_piix4 22401 0
vmw_vmci 67168 1 vmw_vsock_vmci_transport
parport_pc 28205 0
parport 46395 2 ppdev,parport_pc
ip_tables 27126 5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
xfs 1014152 2
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
sr_mod 22416 0
cdrom 46696 1 sr_mod
sd_mod 46281 4
crc_t10dif 12912 1 sd_mod
crct10dif_generic 12647 0
ata_generic 12923 0
pata_acpi 13053 0
vmwgfx 296089 3
nfit 59735 0
drm_kms_helper 186531 1 vmwgfx
ata_piix 35052 0
libnvdimm 163620 1 nfit
syscopyarea 12529 1 drm_kms_helper
sysfillrect 12701 1 drm_kms_helper
sysimgblt 12640 1 drm_kms_helper
fb_sys_fops 12703 1 drm_kms_helper
mptspi 22673 3
ttm 100769 1 vmwgfx
crct10dif_pclmul 14307 1
crct10dif_common 12595 3 crct10dif_pclmul,crct10dif_generic,crc_t10dif
libata 247190 3 pata_acpi,ata_generic,ata_piix
scsi_transport_spi 30732 1 mptspi
crc32c_intel 22094 1
mptscsih 40150 1 mptspi
drm 468454 6 ttm,drm_kms_helper,vmwgfx
mptbase 106036 2 mptspi,mptscsih
e1000 137624 0
serio_raw 13434 0
drm_panel_orientation_quirks 17180 1 drm
fuse 100393 1
lsmod命令列出内核中当前加载的所有模块。下面是对输出中列出的一些模块的解释:
nf_conntrack_netlink:用于跟踪网络连接的Netfilter模块。
xt_addrtype: Netfilter模块,根据数据包的源地址或目标地址类型匹配数据包。
br_netfilter:网桥netfilter模块。
ipt_MASQUERADE:一个Netfilter模块,用于伪装IP地址,用于NAT。
nf_nat_masquerade_ipv4:用于在IPv4中伪装NAT的Netfilter模块。
tun: tun /TAP网络设备的模块,为用户空间程序提供数据包接收和传输。
devlink:提供统一一致的内核API,用于配置和管理网络设备。
overlay:实现一个覆盖文件系统,用于在其他目录之上挂载目录。
e1000: Intel e1000以太网卡的网络驱动程序。
snd_ens1371: Ensoniq AudioPCI ES1371声卡的声音模块。
snd_ac97_codec:用于AC’97编解码器芯片的声音模块,用于各种声卡。
snd_seq:高级Linux声音架构(ALSA)音序器模块。
蓝牙:核心蓝牙模块。
btusb:蓝牙USB驱动。
bnep:蓝牙网络封装协议(bnep)模块,用于蓝牙组网。
vmwgfx: VMware虚拟GPU的图形驱动程序。
drm:直接渲染管理器,Linux内核的一个子系统,负责与现代视频卡的gpu接口。
xfs: xfs文件系统模块。
libcrc32c: CRC32c (Castagnoli)内核的不同部分使用的CRC模块。
sd_mod: SCSI磁盘驱动程序。
libata: ATA设备的库模块。
fuse:用户空间(fuse)模块中的文件系统。
请注意,模块的特定用途可能取决于其配置和系统状态。有关特定模块的更详细说明,读者可以参考内核文档或源代码。
- nf_conntrack_netlink:此模块支持基于netlink的用户空间连接跟踪接口2。
- xt_addrtype:此模块在netfilter框架中提供“addrtype”地址类型匹配支持4。
- br_netfilter:此模块用于启用透明伪装并支持Kubernetes集群中跨节点通信的虚拟可扩展局域网(VxLAN)流量5。
- xt_CHECKSUM:此模块用于netfilter框架中的校验和匹配。
- ipt_MASQUERADE:此模块用于netfilter框架中的IP伪装。
- nf_nat_masquerade_ipv4:此模块用于netfilter框架中的IPv4伪装。
- tun:此模块用于创建TUN/TAP设备,这些设备是用于隧道和VPN的虚拟网络接口。
# env # 查看环境变量
# free -m # 查看内存使用量和交换区使用量
free -m
total used free shared buff/cache available
Mem: 7597 190 6611 0 794 7158
Swap: 0 0 0
这是一个使用 free 命令在 Linux 中查看内存使用情况的输出。-m 选项使输出的数据以兆字节为单位。
让我们逐行解释这些数据:
- Mem::这部分显示的是物理内存的情况。
-
- total: 总的物理内存大小,这里是 7597 MB。
- used: 已使用的内存大小,这里是 190 MB。
- free: 未使用的内存大小,这里是 6611 MB。
- shared: 当前被多个进程共享使用的内存大小,这里是 0 MB。
- buff/cache: 被缓冲和缓存使用的内存大小,这里是 794 MB。这部分内存通常可以被回收,所以它不算是真的被使用。
- available: 估计可用的内存大小,不包括被缓冲和缓存的内存,这里是 7158 MB。
- Swap::这部分显示的是交换空间(Swap Space)的情况。
-
- total: 交换空间的总大小,这里是 0 MB。这里的大小为0,可能是因为没有配置交换空间或者没有为系统分配交换空间。
- used: 已使用的交换空间大小,这里是 0 MB。
- free: 未使用的交换空间大小,这里是 0 MB。
- available: 可用的交换空间大小,这里也是 0 MB。
总体上,从这些数据中可以看出你的系统有7597MB的物理内存,其中大部分(6611MB)是未使用的。但是请注意,由于缓冲和缓存的大小是794MB,这意味着这些内存是可以被回收并供其他进程使用的。另外,你的系统没有配置交换空间,所以没有相关的交换空间数据。
# df -h # 查看各分区使用情况
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 4.1G 14G 24% /
devtmpfs 471M 0 471M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.5M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 297M 147M 151M 50% /boot
tmpfs 98M 24K 98M 1% /run/user/0
Linux系统中使用df -h命令来查看磁盘空间使用情况的结果。以下是详细解释:
- Filesystem: 显示文件系统的挂载点,即存储设备在系统中的名称或者路径。
- Size: 表示每个文件系统的总大小,单位为人类可读格式(在这里是G和M,分别代表吉字节和兆字节)。
- Used: 已使用的磁盘空间大小。
- Avail: 可用的磁盘空间大小。
- Use%: 文件系统已使用的百分比。
- Mounted on: 指定文件系统被挂载到哪个目录下。
针对您给出的具体输出:
- /dev/sda3 是一个大小为18GB的分区,当前使用了4.1GB,还剩下大约14GB可用,使用率为24%,并且它是根目录/的挂载点。
- devtmpfs 和 tmpfs 是Linux下的临时文件系统,通常用于存储临时文件,如内核、设备文件或进程间通信的数据。它们显示的大小分别为471MB和487MB,由于其特性,一般情况下使用量很小或为空。
- /dev/sda1 是一个大小为297MB的分区,已使用了147MB,剩余151MB,使用率为50%,它被挂载到了/boot目录下,用于存放启动相关的文件。
- 最后一行的 tmpfs 也是临时文件系统,大小为98MB,仅使用了24K,几乎没怎么使用,它被挂载到了/run/user/0,通常用来保存特定用户会话的临时数据。
#df -Th -T 选项用于显示文件系统类型。
是一个在 Unix 和 Linux 系统中常用的命令,用于显示文件系统的磁盘空间使用情况。这个命令的输出会以人类可读的格式(例如,以 M、G 为单位)显示每个挂载点的总空间、已使用的空间、可用的空间以及文件系统的类型。
其中:
- df 是 "disk filesystem" 的缩写,表示查看文件系统的磁盘空间使用情况。
- -T 选项用于显示文件系统类型。
- -h 选项用于以人类可读的格式显示信息,例如 KB、MB、GB 等。
输出的文件系统类型 (Type) 通常包括以下几种:
- ext4:Linux 下的一个常见文件系统类型,通常用于硬盘驱动器。
- tmpfs:一个在内存中的临时文件系统,用于存放临时文件。
- vfat:一个在 FAT32 文件系统上的 Windows-style 文件系统。
- xfs:Linux 下的一个现代、高性能的日志文件系统。
- ntfs:Windows NT 的文件系统。
- iso9660:CD-ROMs 的标准文件系统。
- ext3:ext4 的前一个版本。
- btrfs:一个现代的、支持快照功能的文件系统。
- swap:交换空间,通常用于当物理内存不足时,临时存放内存中的数据。
这些文件系统类型决定了如何组织和存储数据在磁盘上。不同的文件系统有不同的性能特点、功能和限制,因此选择合适的文件系统对于系统的性能和数据管理至关重要。
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
#lsblk | grep /boot #如果非单独挂载,执行以下命令没有输出
lsblk 命令用于列出所有可用块设备的信息。它不仅会显示硬盘、闪存盘、CD-ROM等块设备的信息,还会显示它们之间的依赖关系。这个命令在Linux系统中非常有用,可以帮助用户快速了解磁盘的布局、分区的大小和挂载情况等。
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
Disk /dev/vda: 80 GiB, 85899345920 bytes, 167772160 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xfc78a3ee Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 167772126 167770079 80G 83 Linux
这是一个Linux系统中的磁盘设备(/dev/vda)的分区信息。下面是对这个信息的解释:
- Disk /dev/vda: 80 GiB, 85899345920 bytes, 167772160 sectors
-
- /dev/vda:这是磁盘设备的名称。
- 80 GiB:磁盘的总容量,单位是Gibibytes(GiB)。
- 85899345920 bytes:磁盘的总字节数。
- 167772160 sectors:磁盘的扇区总数。
- Units: sectors of 1 * 512 = 512 bytes
-
- 每个扇区的大小是512字节。
- Sector size (logical/physical): 512 bytes / 512 bytes
-
- 逻辑扇区大小和物理扇区大小都是512字节。
- I/O size (minimum/optimal): 512 bytes / 512 bytes
-
- 最小I/O大小和最优I/O大小都是512字节。
- Disklabel type: dos
-
- 磁盘标签类型是DOS。
- Disk identifier: 0xfc78a3ee
-
- 磁盘的标识符。
- Device Boot Start End Sectors Size Id Type
-
- /dev/vda1 * 2048 167772126 167770079 80G 83 Linux 这表示 /dev/vda 上有一个名为 /dev/vda1 的分区。这个分区从第2048个扇区开始,结束于第167772126个扇区,总共有167770079个扇区。这个分区的容量是80Gibibytes(GiB),并且它的类型是Linux。
简而言之,这个信息描述了一个名为 /dev/vda 的磁盘设备,它有一个名为 /dev/vda1 的Linux分区,这个分区的容量是80GiB。
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数 (仅适用于 IDE 设备)
# dmesg | grep IDE # 查看启动时 IDE 设备检测状况
# ifconfig # 查看所有网络接口的属性
这是一个网络接口信息的输出,通常使用命令如ifconfig或ip addr来获取。以下是对这些信息的解释:
- ens33: 这是一个以太网接口的名称,通常是物理网络接口,例如以太网卡。
-
- flags=4163<UP,BROADCAST,RUNNING,MULTICAST>: 这些是接口的标志。UP 表示接口已启用,BROADCAST 表示可以进行广播通信,RUNNING 表示接口正在运行,MULTICAST 表示支持多播通信。
- mtu 1500: MTU(最大传输单元)是以太网接口支持的最大数据包大小,通常为1500字节。
- inet 192.168.191.153: 这是接口的IPv4地址,此处为192.168.191.153。
- netmask 255.255.255.0: 子网掩码,用于确定网络中的主机和网络地址。
- broadcast 192.168.191.255: 广播地址,用于向网络中的所有主机发送广播消息。
- inet6 fe80::3380:e493:9aac:93f2: 这是接口的IPv6地址。
- ether 00:0c:29:5e:28:55: 以太网接口的物理地址(MAC地址)。
- RX packets 69421: 接收到的数据包数量。
- bytes 86727082: 接收到的字节数。
- RX errors 0: 接收错误的数量。
- TX packets 16784: 发送的数据包数量。
- bytes 7014750: 发送的字节数。
- TX errors 0: 发送错误的数量。
- dropped 0: 丢弃的数据包数量。
- overruns 0: 超出容量的数据包数量。
- frame 0: 帧错误的数量。
- lo: 这是回环(loopback)接口的信息。回环接口是本地主机用于与自身通信的特殊接口。
-
- flags=73<UP,LOOPBACK,RUNNING>: UP 表示接口已启用,LOOPBACK 表示是回环接口,RUNNING 表示接口正在运行。
- mtu 65536: 回环接口的MTU通常较大。
- inet 127.0.0.1: 回环接口的IPv4地址,通常为127.0.0.1,表示本地主机。
- netmask 255.0.0.0: 回环接口的子网掩码,通常为255.0.0.0。
- inet6 ::1: 回环接口的IPv6地址。
- RX packets 68: 接收到的数据包数量。
- bytes 5920: 接收到的字节数。
- TX packets 68: 发送的数据包数量。
- bytes 5920: 发送的字节数。
- virbr0: 这是虚拟网桥接口的信息,通常用于虚拟化和容器网络。
-
- flags=4099<UP,BROADCAST,MULTICAST>: UP 表示接口已启用,BROADCAST 表示可以进行广播通信,MULTICAST 表示支持多播通信。
- mtu 1500: MTU(最大传输单元)是虚拟网桥接口支持的最大数据包大小,通常为1500字节。
- inet 192.168.122.1: 虚拟网桥接口的IPv4地址。
- netmask 255.255.255.0: 虚拟网桥接口的子网掩码。
- ether 52:54:00:39:2d:13: 以太网接口的物理地址(MAC地址)。
- RX packets 0: 接收到的数据包数量。
- bytes 0: 接收到的字节数。
- TX packets 0: 发送的数据包数量。
- bytes 0: 发送的字节数。
这些信息提供了关于不同网络接口的配置和状态的详细信息,有助于了解主机的网络配置。
# iptables -L # 查看防火墙设置
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
FORWARD_direct all -- anywhere anywhere
FORWARD_IN_ZONES_SOURCE all -- anywhere anywhere
FORWARD_IN_ZONES all -- anywhere anywhere
FORWARD_OUT_ZONES_SOURCE all -- anywhere anywhere
FORWARD_OUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc
ACCEPT all -- anywhere anywhere
OUTPUT_direct all -- anywhere anywhere
Chain DOCKER (1 references)
target prot opt source destination
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain FORWARD_IN_ZONES (1 references)
target prot opt source destination
FWDI_docker all -- anywhere anywhere [goto]
FWDI_public all -- anywhere anywhere [goto]
FWDI_public all -- anywhere anywhere [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_OUT_ZONES (1 references)
target prot opt source destination
FWDO_docker all -- anywhere anywhere [goto]
FWDO_public all -- anywhere anywhere [goto]
FWDO_public all -- anywhere anywhere [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_direct (1 references)
target prot opt source destination
Chain FWDI_docker (1 references)
target prot opt source destination
FWDI_docker_log all -- anywhere anywhere
FWDI_docker_deny all -- anywhere anywhere
FWDI_docker_allow all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain FWDI_docker_allow (1 references)
target prot opt source destination
Chain FWDI_docker_deny (1 references)
target prot opt source destination
Chain FWDI_docker_log (1 references)
target prot opt source destination
Chain FWDI_public (2 references)
target prot opt source destination
FWDI_public_log all -- anywhere anywhere
FWDI_public_deny all -- anywhere anywhere
FWDI_public_allow all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
Chain FWDI_public_allow (1 references)
target prot opt source destination
Chain FWDI_public_deny (1 references)
target prot opt source destination
Chain FWDI_public_log (1 references)
target prot opt source destination
Chain FWDO_docker (1 references)
target prot opt source destination
FWDO_docker_log all -- anywhere anywhere
FWDO_docker_deny all -- anywhere anywhere
FWDO_docker_allow all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain FWDO_docker_allow (1 references)
target prot opt source destination
Chain FWDO_docker_deny (1 references)
target prot opt source destination
Chain FWDO_docker_log (1 references)
target prot opt source destination
Chain FWDO_public (2 references)
target prot opt source destination
FWDO_public_log all -- anywhere anywhere
FWDO_public_deny all -- anywhere anywhere
FWDO_public_allow all -- anywhere anywhere
Chain FWDO_public_allow (1 references)
target prot opt source destination
Chain FWDO_public_deny (1 references)
target prot opt source destination
Chain FWDO_public_log (1 references)
target prot opt source destination
Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_docker all -- anywhere anywhere [goto]
IN_public all -- anywhere anywhere [goto]
IN_public all -- anywhere anywhere [goto]
Chain INPUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain INPUT_direct (1 references)
target prot opt source destination
Chain IN_docker (1 references)
target prot opt source destination
IN_docker_log all -- anywhere anywhere
IN_docker_deny all -- anywhere anywhere
IN_docker_allow all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain IN_docker_allow (1 references)
target prot opt source destination
Chain IN_docker_deny (1 references)
target prot opt source destination
Chain IN_docker_log (1 references)
target prot opt source destination
Chain IN_public (2 references)
target prot opt source destination
IN_public_log all -- anywhere anywhere
IN_public_deny all -- anywhere anywhere
IN_public_allow all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,UNTRACKED
Chain IN_public_deny (1 references)
target prot opt source destination
Chain IN_public_log (1 references)
target prot opt source destination
Chain OUTPUT_direct (1 references)
target prot opt source destination
iptables 是一个用于配置 Linux 内核防火墙规则的命令工具。通过执行 iptables -L 命令,可以列出当前系统上的防火墙规则。
解释每个匹配规则的意思如下:
Chain INPUT:输入链,指定对进入本机的数据包进行处理。
ACCEPT:接受所有来源于任意地址的目标端口为 domain(53)和 bootps(67)的 UDP 和 TCP 数据包。
INPUT_direct:直接处理的数据包。
INPUT_ZONES_SOURCE:输入链的来源。
INPUT_ZONES:输入链处理结果。
DROP:丢弃无效(INVALID)状态的数据包。
REJECT:拒绝发送 ICMP 拒绝消息的数据包。
Chain FORWARD:转发链,指定对通过本机进行转发的数据包进行处理。
FORWARD_direct:直接处理的数据包。
FORWARD_IN_ZONES_SOURCE:转发链的输入来源。
FORWARD_IN_ZONES:转发链的输入。
FORWARD_OUT_ZONES_SOURCE:转发链的输出来源。
FORWARD_OUT_ZONES:转发链的输出。
DROP:丢弃无效(INVALID)状态的数据包。
REJECT:拒绝发送 ICMP 端口不可达消息的数据包。
Chain OUTPUT:输出链,指定对从本机发出的数据包进行处理。
ACCEPT:接受所有源端口为 bootpc(68)的 UDP 数据包,以及所有数据包。
OUTPUT_direct:直接处理的数据包。
Chain DOCKER:Docker 链,用于处理 Docker 相关的数据包。
Chain DOCKER-ISOLATION-STAGE-1:Docker 隔离阶段1链,用于处理 Docker 的隔离。
Chain DOCKER-ISOLATION-STAGE-2:Docker 隔离阶段2链,用于处理 Docker 的隔离。
Chain DOCKER-USER:Docker 用户链,用于处理 Docker 用户相关的数据包。
Chain INPUT_ZONES:输入区域链,用于处理输入区域相关的数据包。
IN_docker:Docker 内部输入链。
IN_public:公共输入链。
Chain INPUT_ZONES_SOURCE:输入区域源链。
Chain INPUT_direct:输入链的直接处理。
Chain IN_docker:Docker 内部输入链。
IN_docker_log:Docker 内部输入链的日志记录。
IN_docker_deny:拒绝 Docker 内部输入链的数据包。
IN_docker_allow:允许 Docker 内部输入链的数据包。
ACCEPT:接受所有数据包。
Chain IN_public:公共输入链。
IN_public_log:公共输入链的日志记录。
IN_public_deny:拒绝公共输入链的数据包。
IN_public_allow:允许公共输入链的数据包。
ACCEPT:接受 ICMP 数据包和源端口为 SSH(22)的 TCP 数据包。
Chain OUTPUT_direct:输出链的直接处理。
以上是 iptables -L 命令输出的主要内容,它显示了当前防火墙链的规则和策略
# route -n # 查看路由表
这是Linux系统中的一个路由表,通过route -n命令可以查看。这个路由表描述了数据包在网络中的转发路径。下面我会逐行解释这个路由表:
- Kernel IP routing table:这是内核的IP路由表。
- Destination:目标网络或主机的IP地址。
- Gateway:用于到达目标网络或主机的下一跳网关的IP地址。如果这一列为0.0.0.0,那么数据包将直接发送到目标,不需要经过任何网关。
- Genmask:目标网络的子网掩码。
- Flags:路由标志。常见的有:
-
- U:路由是up的,即有效。
- G:使用网关。
- R:重定向,数据包被重定向到另一个路由。
- C:数据包已经通过此路由被计数。
- U:此路由是最佳的,用于回环。
- Metric:路由的度量值,用于选择最佳路由。数值越小,路由越优先。
- Ref:该路由的引用计数,通常表示有多少数据流使用此路由。
- Use:该路由被查找的次数。
- Iface:用于发送数据包的网络接口,如这里的eth0。
根据你提供的路由表:
- 默认路由(目标为0.0.0.0,网关为172.22.3.253):这意味着所有不明确指定目标的其他数据包都会通过网关172.22.3.253发送。
- 特定于子网的路由(目标为172.22.3.0,网关为0.0.0.0):这意味着所有目标IP在172.22.3.0子网的数据包不会经过任何网关,而是直接从接口eth0发送。
这个路由表告诉系统如何根据目标IP地址选择最佳路径来发送数据包。
# netstat -lntp # 查看所有监听端口
这个命令 netstat -lntp 用于显示在 Linux 系统上当前的网络连接、监听的端口以及与这些端口相关的进程。
下面是每一行的解释:
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
-
- Proto: 协议,这里是 TCP。
- Recv-Q: 接收队列,通常为0。
- Send-Q: 发送队列,通常为0。
- Local Address: 本地地址,即服务监听的地址。
- Foreign Address: 外部地址,即客户端或外部设备的地址。
- State: 连接状态,这里是 LISTEN,表示该端口正在等待进入的连接。
- PID/Program name: 与该连接或监听端口相关的进程 ID 和程序名称。
- tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
-
- 这表示有一个进程(PID为1,即 systemd)正在监听 TCP 协议的 111 端口。0.0.0.0:* 表示该端口在所有可用的网络接口上监听,并且接受来自任何外部地址的连接。
- tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1438/sshd
-
- 这表示有一个进程(PID为1438,即 sshd,即 SSH 服务器)正在监听 TCP 协议的 22 端口。同样,该端口在所有可用的网络接口上监听,并且接受来自任何外部地址的连接。
- tcp6 0 0 :::111 :::* LISTEN 1/systemd
-
- 这表示有一个进程(PID为1,即 systemd)正在监听 TCPv6 协议的 111 端口。:::* 表示该端口在所有可用的 IPv6 网络接口上监听,并且接受来自任何外部地址的连接。
总的来说,这些数据告诉你哪些服务正在监听哪些端口,以及与这些端口相关的进程。
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
netstat -s 命令用于查看网络统计信息,它会显示有关网络活动和连接的详细统计数据。这些统计数据包括接收和发送的数据包数量、错误数、丢弃数等等。以下是一些常见的统计信息示例:
yamlCopy code
Ip:
2175 total packets received
0 forwarded
0 incoming packets discarded
2154 incoming packets delivered
2156 requests sent out
Icmp:
30 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
destination unreachable: 29
echo requests: 1
41 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 41
IcmpMsg:
InType0: 1
InType3: 29
OutType3: 41
上面的示例显示了一些 IP 和 ICMP(Internet 控制消息协议)统计信息,包括接收和发送的数据包数量、错误消息等等。
请注意,netstat -s 命令的输出可能会很长,具体的统计信息会根据系统的网络活动而变化。这个命令通常用于分析网络问题和监视网络性能。如果需要特定类型的网络统计信息,可以根据需要使用不同的参数来过滤和查询。
上面的输出是通过 netstat -s 命令查看的网络统计信息,其中包含了关于 IP 和 ICMP 的统计数据。以下是对输出的解释:
IP 统计信息:
- 2175 total packets received:总共接收的 IP 数据包数量。
- 0 forwarded:未转发的数据包数量。这表示没有数据包被路由器或网络设备转发。
- 0 incoming packets discarded:丢弃的传入数据包数量。这表示没有数据包被丢弃。
- 2154 incoming packets delivered:传递的传入数据包数量。这表示成功传递给本地应用程序或系统。
- 2156 requests sent out:发送的请求数量。
ICMP 统计信息:
- 30 ICMP messages received:接收的 ICMP 消息数量。
- 0 input ICMP message failed:接收的 ICMP 消息处理失败的数量。
- ICMP input histogram:ICMP 输入消息的直方图。
-
- destination unreachable: 29:收到的 ICMP 目标不可达消息数量。
- echo requests: 1:收到的 ICMP 回显请求(Ping 请求)消息数量。
- 41 ICMP messages sent:发送的 ICMP 消息数量。
- 0 ICMP messages failed:发送的 ICMP 消息发送失败的数量。
- ICMP output histogram:ICMP 输出消息的直方图。
-
- destination unreachable: 41:发送的 ICMP 目标不可达消息数量。
IcmpMsg 统计信息:
- InType0: 1:接收到的 ICMP 类型 0 消息数量。
- InType3: 29:接收到的 ICMP 类型 3 消息数量。
- OutType3: 41:发送的 ICMP 类型 3 消息数量。
这些统计数据用于了解网络活动的情况,包括接收的数据包数量、传递的数据包数量、 ICMP 消息数量等。根据这些统计信息,可以分析网络的性能和问题。在上面的示例中,可以看到有一些 ICMP 目标不可达消息以及少量的 ICMP 回显请求(Ping 请求)消息。
# ps -ef # 查看所有进程
# top # 实时显示进程状态
top 是一个 Linux 和 Unix 系统上的命令行实用程序,用于实时显示进程状态。它可以显示系统中当前运行的进程的列表,以及这些进程的详细信息,例如 CPU 使用率、内存使用率、运行时间等。
下面是一些 top 命令输出中常见的字段和它们的含义:
- PID:进程 ID,是每个进程的唯一标识符。
- USER:进程所属的用户。
- PR:进程优先级,值越小优先级越高。
- NI:nice值,用于调整进程优先级。
- VIRT:进程使用的虚拟内存量。
- RES:进程使用的物理内存量。
- SHR:进程共享的内存量。
- S:进程状态,其中 'S' 表示睡眠状态,'R' 表示运行状态,'Z' 表示僵尸状态,等等。
- %CPU:进程使用的 CPU 占用率。
- %MEM:进程使用的内存占用率。
- TIME+:进程累计运行时间。
- COMMAND:进程名称或命令。
在 top 的输出中,你可以看到这些信息,并且 top 会根据 CPU 使用率和内存使用率对进程进行排序,这样你可以很容易地找到最占用资源的进程。你可以使用 top 命令的各种选项来定制显示的信息和排序方式。
#linux下如何显示CPU的温度
在 Linux 上查看 CPU 温度通常需要使用特定的命令行工具或监控程序,具体的工具和方法可能因您的硬件和操作系统发行版而异。以下是一些常见的方法和工具:
- lm-sensors 和 sensors 命令:使用 lm-sensors 软件包可以监测和显示系统硬件传感器信息,包括 CPU 温度。首先,您需要安装 lm-sensors 软件包(具体命令可能因发行版而异),然后运行以下命令:
-
- 安装 lm-sensors:
- 配置传感器:运行 sensors-detect 命令,按照提示配置传感器。通常,直接按 Enter 键以接受默认选项即可。
- 显示 CPU 温度:运行 sensors 命令来查看 CPU 温度和其他传感器信息。
sudo apt install lm-sensors # Ubuntu/Debian
sudo yum install lm_sensors # CentOS/RHEL
- /sys 文件系统:在 /sys/class/thermal/ 目录下,您可以找到与 CPU 温度相关的信息。通常,每个核心都会有一个子目录,其中包含温度信息。例如:
cat /sys/class/thermal/thermal_zone*/temp
这将显示每个核心的温度(以毫摄氏度为单位)。
- 使用第三方工具:一些第三方工具,如 hddtemp 或 psensor,提供了更直观和易用的图形界面来查看温度和传感器信息。您可以根据自己的偏好选择并安装这些工具。
请注意,确保使用合适的权限来运行上述命令,通常需要以管理员或超级用户权限运行某些命令。此外,硬件和操作系统的差异可能导致上述方法的可用性和工作方式有所不同,因此最好根据您的具体情况查找相关的文档和资源。
#enthtool bond0
ethtool bond0 命令用于查看和配置 Linux 中的网络绑定(bonding)接口的参数和状态。网络绑定允许多个物理网络接口(网卡)合并成一个虚拟接口,以提供冗余性和带宽聚合。
当您运行 ethtool bond0 命令时,它将显示与名为 bond0 的网络绑定接口相关的详细信息,包括接口状态、速度、双工模式等等。以下是可能在输出中看到的一些信息:
- Speed:接口的速度,通常以 Mbps(兆位每秒)或 Gbps(千兆位每秒)为单位。
- Duplex:接口的双工模式,通常为全双工(Full Duplex)或半双工(Half Duplex)。
- Link detected:指示接口是否检测到了连接,通常为 "yes" 或 "no"。
- Mode:绑定模式,可以是 Round Robin、Active-Backup、Balance XOR 等不同的模式。
- MAC Address:虚拟接口的 MAC 地址。
- Transmit Hash Policy:传输哈希策略,用于决定如何分布流量到不同的物理接口。
这些信息有助于您了解网络绑定接口的配置和状态。请注意,要使用 ethtool 命令查看或配置网络绑定接口的参数,通常需要以管理员或超级用户权限运行命令。此外,确保已正确配置和激活了网络绑定接口,以便 ethtool 命令能够正常工作。