linux教程
本文最后更新于:2024年11月21日 晚上
linux教程
正则表达式
- 正则表达式 – 元字符 | 菜鸟教程 (runoob.com)
- 正则表达式在线测试 | 菜鸟工具 (runoob.com)
- 关于正则表达式中的.,.?,.+?的理解
- 正则表达式和扩展正则表达式
- C语言中的正则表达式使用
- Linux0基础入门,教你如何在Shell中使用正则表达式
终端 Terminal
mobxterm
xshell
作业控制
在 Linux 终端中使用作业控制时:
- 使用
ctrl-z
可以将当前正在前台运行的进程暂停(挂起)。 - 使用
fg %1
(或fg 1
)命令可以将编号为1
的作业恢复到前台继续执行。 - 使用
jobs
命令可以列出当前在后台运行的所有作业及其作业号和状态。
script
- 强大的Linux终端行为记录和回放工具:script命令详解
- linux情况屏幕一条命令是,Linux中通过script命令那个记录屏幕的输出
- linux下使用script命令生成^ [和^ M个字符的原因和方法
- 【Linux学习 】Linux使用Script命令来记录并回放终端会话
- 终于知道保存SCP日志了
终端复用tmux
- Linux笔记:终端复用与管理工具screen和tmux
- Tmux 使用教程
- Tmux如何让滚屏起飞
- 在tmux缓冲区中搜索
- tmux常用命令及快捷键
- tmux 解决屏幕比例不协调问题
- 【Tmux】窗口周围出现大量点点导致窗口面积减小
Tmux(Terminal Multiplexer)是一款终端复用软件,可以让你在一个终端窗口中运行多个终端会话。以下是一些常用的 tmux 组合键命令:
会话管理
- 启动 tmux 会话:
tmux
- 新建会话:
tmux new -s <session-name>
- 列出会话:
tmux ls
- 连接到会话:
tmux attach -t <session-name>
- 分离会话:
Ctrl-b d
- 选择会话分离: `Ctrl-b Shift-,可以解决【Tmux】窗口周围出现大量点点导致窗口面积减小的问题
- 杀掉会话:
tmux kill-session -t <session-name>
窗口管理
- 新建窗口:
Ctrl-b c
- 切换窗口:
Ctrl-b n
(下一个窗口),Ctrl-b p
(上一个窗口),Ctrl-b 0
(切换到窗口0),Ctrl-b 1
(切换到窗口1) - 选择窗口:
Ctrl-b <window-number>
- 重命名窗口:
Ctrl-b ,
- 关闭窗口:
Ctrl-b &
- 列出所有窗口:
Ctrl-b w
,使用箭头键选择目标窗口,按回车键切换到选定的窗口。
面板管理
- 水平分割面板:
Ctrl-b "
- 垂直分割面板:
Ctrl-b %
- 切换面板:
Ctrl-b o
- 选择面板:
Ctrl-b q
然后按面板编号 - 面板之间进行切换:
Ctrl-b <方向键>
- 交换面板位置:
Ctrl-b {
(向左),Ctrl-b }
(向右) - 杀掉面板:
Ctrl-b x
- 拆分面板成独立窗口:
Ctrl+b !
- 全屏化当前面板:
Ctrl-b z
- 恢复面板原始大小: 再次按
Ctrl-b z
- 调整面板大小:
Ctrl-b
后加上Alt
键和方向键可以调整面板的大小。 - 自动平衡面板:
Ctrl-b
后加上Space
键自动平衡所有面板大小。
滚动与复制模式
- 进入复制模式:
Ctrl-b [
- 退出复制模式:
q
- 开始选择文本:
Space
- 复制选中文本:
Enter
- 粘贴文本:
Ctrl-b ]
在tmux缓冲区中搜索
复制模式搜索
要在tmux历史记录缓冲区中搜索当前窗口,请按Ctrl- b [
进入copy mode。
如果您正在使用emacs键绑定(默认设置),请按Ctrl- s
然后输入要搜索的字符串,然后按Enter。按n再次搜索相同的字符串。按Shift- n
进行反向搜索。按Escape
两次退出copy mode。您可以使用Ctrl- r
反向搜索。
请注意,由于tmux可以控制键盘copy mode,所以Ctrl- s
不管stty ixon设置如何(我希望stty -ixon在Bash中启用向前搜索)都可以使用-。
如果您使用的是vi键绑定(Ctrl- b:set-window-option -g mode-keys vi
),请按,/
然后键入要搜索的字符串,然后按Enter
。按n再次搜索相同的字符串。与emacs模式一样,按Shift- n
进行反向搜索。按q
两次退出copy mode。您可以使用?反向搜索。
查找窗口
如果要基于其中显示的内容(也包括窗口名称和标题但不包括历史记录)切换到窗口,(从打开多个窗口开始)请按Ctrl- b f
然后键入要搜索的字符串,然后按Enter。如果找到该文本,您将切换到包含该文本的窗口。如果有多个窗口匹配,您将看到一个列表可供选择。
选择会话进行分离
此功能特别适用于当你在多个会话中工作,并且希望快速分离某个特定会话,而不必使用 Ctrl-b d
分离当前会话或手动输入会话名称。
tmux 嵌套使用
当你在本地使用 tmux
登录远程服务器时,如果服务器上也运行了 tmux
,常见的问题是:tmux 的指令会被外层会话窗口(本地的 tmux
)捕获,导致无法控制服务器上运行的 tmux
。比如,当你想通过 Ctrl+b, d
退出服务器上的会话时,结果却退出了本地的 tmux
连接,非常令人沮丧。
解决这个问题的方法其实很简单:按住 Ctrl
键,然后快速按两次 b
键,这样发出的 tmux
指令就会发送到内层会话,也就是服务器上的 tmux
,从而实现你想要的操作。
举例:
- 你在本地机器上运行了一个
tmux
会话,并通过 SSH 登录到远程服务器。 - 在远程服务器上,你启动了另一个
tmux
会话。 - 想要从远程
tmux
会话中退出时,不要直接使用Ctrl+b, d
,而是按住Ctrl
,快速按两次b
键,然后按d
键。 - 这个操作将使你从远程会话中退出,而本地的
tmux
会话不会受到影响。
其他常用命令
- 重新加载 tmux 配置:
Ctrl-b :source-file ~/.tmux.conf
- 显示时间:
Ctrl-b t
- 刷新屏幕:
Ctrl-b r
这些是 tmux 中一些常见的组合键命令,使用这些命令可以大大提高终端操作的效率。你可以通过编辑 ~/.tmux.conf
文件来自定义这些快捷键。
自动退出
- 删除 tmux 中的 TMOUT 变量
检查 tmux 的全局环境中是否存在 TMOUT:
1 |
|
使用以下命令删除该环境变量:
1 |
|
xterm
在 Linux 系统上安装 xterm
终端仿真器,并使用 resize
命令调整 tmux 会话窗口的大小,可以按照以下步骤进行操作:
安装 xterm
打开终端并输入以下命令以使用
dnf
包管理器安装xterm
:1
sudo dnf install xterm
使用
resize
命令调整窗口大小:1
resize
history
shell
- #!/bin/bash 和 #!/usr/bin/env bash 的区别
- 「Linux」shell命令以及运行原理和Linux权限详解
- Linux基础-shell脚本编程
- 一篇教会你写90%的shell脚本 - 知乎 (zhihu.com)
- shell教程(二) 四种工作模式
- linux之登录式shell和非登录式shell
- linux之登录式shell和非登录式shell
父子shell
set
环境变量
-
在 Ubuntu 等使用 PAM(Pluggable Authentication Modules)的系统中,/etc/environment 是在 PAM 模块中读取的,而 /etc/profile 是由 Bourne Shell(例如 Bash)在启动时读取的。
具体来说,在用户登录时,PAM 模块首先读取 /etc/environment 中的环境变量,然后 Bash 或其他 Bourne Shell 在启动时读取 /etc/profile。
所以,/etc/environment 的环境变量会影响整个系统的默认环境,而 /etc/profile 主要影响用户登录 Shell 时的环境。
忽略大小写
-
1
echo "set completion-ignore-case on" >> ~/.inputrc
数组
test
- linux应用之test命令详细解析
- shell 中\(() ` `,\){},$[] $(()),[ ] (( )) [[ ]]作用与区别
- Shell [[]]详解:检测某个条件是否成立
- 使用shell 判断文件夹或文件是否存在
- Shell test命令(Shell [])详解,附带所有选项及说明
- linux shell中的case语句用法
重定向、后台运行
- Shell nohup 命令详解_shadow_zed的博客-CSDN博客
- 你知道2>&1 >/dev/null是什么意思么?
- linux 2>&1和&的意思
- Linux 任务后台运行(总结)
- Linux 编辑启动、停止与重启 jar 包脚本
- stdbuf让nohup实时输出日志
- 命令行实现单个进度条,或者刷新一行的内容
- Linux 标准输入输出、重定向、管道、文件权限、后台启动进程命令
- 深入理解Linux中2>&1的含义
Bash 常用快捷键总结
控制相关命令
Ctrl+L
:清屏。Ctrl+C
:终止前台程序。Ctrl+\
:终止前台程序(与Ctrl+C
类似)。Ctrl+Z
:将当前进程挂起并切换到后台。
编辑相关命令
Tab
:命令补齐。Ctrl+A
:光标移到行首。Ctrl+E
:光标移到行尾。Ctrl+F
:光标前进。Ctrl+B
:光标后退。Ctrl+XX
:光标在当前位置和行首之间切换。Ctrl+U
:删除光标之前的所有内容。Ctrl+K
:删除光标之后的所有内容。Ctrl+H
:删除光标处前一个字符。Ctrl+D
:删除当前光标所在字符。Ctrl+W
:删除光标前的单词。Ctrl+Y
:粘贴Ctrl+K
或Ctrl+W
删除的内容。Alt+.
或Esc+.
:粘贴上一条命令的最后一个参数。
!相关命令
!!
:快速执行上一条命令。!+字符串
:执行最近使用过的以指定字符串开头的命令(如!p
执行ping
命令)。
历史命令
Ctrl+P
:历史中上一条命令(与方向键↑作用一样)。Ctrl+N
:历史中下一条命令(与方向键↓作用一样)。Ctrl+R
:查找历史命令中的关键词。
python
ubuntu16.04中将python3设置为默认
直接执行这两个命令即可:
1 |
|
切换到Python2,执行:
1 |
|
时间
时间协议
登录
日志
- rsyslog服务及Linux系统日志简介
- Enable Rsyslog Logging on Debian 12
- Linux系统中的日志管理——journal、rsyslog、timedatectl、时间同步
- Linux 下使用 Logrotate 旋转和压缩日志文件
随机数
硬件信息
lshw
-
查看硬件信息的 class 分类:
1
lshw -short
查看特定类型的数据:
1
lshw -c multimedia
把硬件信息输出到 html:
1
lshw -html > hw.hhtml
dmidecode
lstopo
-
1
sudo apt install hwloc
图形化展示硬件拓扑结构:
1
lstopo
文字信息输出硬件拓扑结构:
1
lstopo-no-graphics
进程
lsof
使用-c查看指定的命令正在使用的文件和网络连接:
1 |
|
使用-p查看指定进程ID已打开的内容:
1 |
|
-t选项只返回PID:
1 |
|
同时使用-t和-c选项以给进程发送 HUP 信号:
1 |
|
查找进程
进程与信号
杀死进程
lsof
使用-u
显示指定用户打开了什么:
1 |
|
使用-u user
来显示除指定用户以外的其它所有用户所做的事情:
1 |
|
杀死指定用户所做的一切事情:
1 |
|
查看进程启动位置
列出某一CPU上跑的所有进程
-
列出CPU 43 上的所有进程/线程:
1
ps -eLo pid,psr,command | sed -ne '/^\W\+[0-9]\+\W\+43\W\+/p'
系统状态
top
top主要快捷键
- 全局命令:
Z
:切换颜色模式。B
:切换粗体文本。E
/e
:切换内存缩放。
- 摘要切换:
l
:显示负载平均值。t
:显示任务/CPU 统计。m
:显示内存信息。
- 视图切换:
0
:显示零值。1, 2, 3
:切换 CPU/NUMA 节点视图。I
:切换 Irix 模式。
- 字段管理与排序:
M
:按内存使用量排序。P
:按 CPU 使用量排序。T
:按时间/累积时间排序。
PSR
字段查看每个进程当前运行的 CPU 核心:- 按
f
键:进入字段管理模式。 - 使用上下箭头键查找
PSR
字段(表示处理器)。 - 选中
PSR
字段后,按 空格键 或d
将其标记为显示。 - 按
q
或Esc
退出字段管理界面,返回主界面。
PSR
移动到PID
字段前面:- 按下
f
键进入字段管理界面。 - 使用 上下箭头键
↑
和↓
找到PSR
字段(Processor),然后按 空格键 或d
键将其启用。 - 接着按 右箭头键
→
将PSR
选中,这会准备将PSR
字段移动位置。 - 使用 向上箭头键
↑
将PSR
字段移到列表的最上方位置(或其他你想要的位置)。 - 移动完毕后,按 左箭头键
←
或 Enter 键确认位置。 - 最后,按
q
或Esc
键返回top
主界面。
PSR
排序:- 进入
top
后,按下f
键进入字段管理。 - 使用方向键
↓
或↑
移动选择PSR
字段。 - 按下
s
键将PSR
字段设为排序字段。此时,进程会默认按PSR
升序排序。 - 若发现是降序排列,按下
R
(Shift + r)键可以反转排序顺序,使之变为升序。 - 确认后按
q
或Esc
退出设置界面返回top
界面,即可看到进程按PSR
升序排列。
- 定位与排序:
L
/&
:查找/再次查找。<
/>
:移动排序列(左/右)(如按下P
后按cpu
使用率排序,按下>
后可以移动到内存使用率排序)。H
:切换线程显示。J
:数字字段对齐。C
:显示坐标。
- 过滤与操作:
o
:添加过滤条件(如COMMAND=[
可用来过滤内核线程)。- 再次按
o
:添加更多过滤条件(如COMMAND=/
可用来进一步过滤pre cpu
内核线程)。 u
:按用户过滤。=
:清除所有过滤条件。k
:结束任务。r
:调整任务优先级(renice)。
- 显示选项:
c
:显示命令名称/行。i
:显示空闲任务。S
:显示时间。j
:字符串字段对齐。x
:排序字段高亮。y
:运行任务高亮。z
:切换颜色/单色显示。b
:切换粗体/反转文本。
- 视图模式:
V
:切换森林视图,显示树状进程父子关系、线程父子关系,类似pstree
。先按H
显示线程,再按V
切换到森林视图。v
:隐藏/显示森林视图子项。
- 配置与输出:
d
或s
:设置更新间隔(秒)。W
:保存配置。Y
:检查其他输出。
- 退出:
q
:退出top
。
这些操作帮助你高效地使用 top
进行系统监控、排序和进程管理。
根据你提供的 top
命令输出信息,这里是每个部分的解释:
top 命令输出解析
- 任务统计:
Tasks: 767 total
:系统中总共有 767 个任务。1 running
:当前有 1 个任务正在运行。766 sleeping
:当前有 766 个任务在休眠状态。0 stopped
:没有任务被停止。0 zombie
:没有僵尸进程。
- CPU 使用情况:
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
:0.0 us
:用户空间 CPU 使用百分比。0.0 sy
:系统空间 CPU 使用百分比。0.0 ni
:用户空间内的优先级 CPU 使用百分比。100.0 id
:空闲 CPU 百分比。0.0 wa
:等待 I/O 操作的 CPU 百分比。0.0 hi
:硬件中断 CPU 使用百分比。0.0 si
:软件中断 CPU 使用百分比。0.0 st
:虚拟机偷取的 CPU 百分比。
- 内存使用情况:
MiB Mem : 32147.1 total
:总内存 32147.1 MiB。26527.6 free
:可用内存 26527.6 MiB。648.0 used
:已使用内存 648.0 MiB。4971.5 buff/cache
:缓冲区和缓存占用的内存 4971.5 MiB。
- 交换区使用情况:
MiB Swap: 16144.0 total
:总交换区 16144.0 MiB。16144.0 free
:可用交换区 16144.0 MiB。0.0 used
:已使用交换区 0.0 MiB。30980.1 avail Mem
:可用内存 30980.1 MiB。
- 进程列表:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
:进程的详细信息,包括 PID、用户、优先级、虚拟内存、常驻内存、共享内存、状态、CPU 使用百分比、内存使用百分比、运行时间和命令。
275 root rt 0 0 0 0 S 0.0 0.0 0:01.31 migration/53
:- PID:275
- USER:root
- PR:实时优先级(rt)
- NI:优先级(0)
- VIRT:虚拟内存(0 KB)
- RES:常驻内存(0 KB)
- SHR:共享内存(0 KB)
- S:进程状态(S,休眠)
- %CPU:CPU 使用百分比(0.0%)
- %MEM:内存使用百分比(0.0%)
- TIME+:运行时间(0:01.31)
- COMMAND:进程命令(migration/53)
276 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/53
:- PID:276
- USER:root
- PR:普通优先级(20)
- NI:优先级(0)
- VIRT:虚拟内存(0 KB)
- RES:常驻内存(0 KB)
- SHR:共享内存(0 KB)
- S:进程状态(S,休眠)
- %CPU:CPU 使用百分比(0.0%)
- %MEM:内存使用百分比(0.0%)
- TIME+:运行时间(0:00.00)
- COMMAND:进程命令(ksoftirqd/53)
这些信息可以帮助你了解系统的资源使用情况和各个进程的状态。
top 查看某个进程的详细资源使用情况
1 |
|
1 |
|
-H
:显示线程视图,每个线程占用一行。-c
:显示完整的命令行。-p 503
:只显示进程 ID 为503
的信息,包括该进程的所有线程。
此命令用于查看进程 ID 为 503
的进程及其所有线程的详细资源使用情况。
top 查看qemu-kvm进程的详细资源使用情况
以下是 top
命令输出中每个字段的详细解释:
- P (PSR): Processor,表示线程当前在运行的物理 CPU 核心编号。
- NU: NUMA 节点编号,指示线程所关联的 NUMA 节点。
- PID: 进程 ID,标识进程的唯一编号。
- USER: 进程的所属用户,即运行该进程的用户。
- PR: 优先级(Priority),数值越小优先级越高。实时优先级范围通常为 0-99,普通优先级范围为 100-139。
- NI: nice 值,用于调整进程的优先级,范围为 -20(最高优先级)到 19(最低优先级)。
- VIRT: 虚拟内存大小(Virtual Memory Size),即进程使用的虚拟地址空间总量,包括交换分区和物理内存。
- RES: 常驻内存(Resident Memory),即进程实际占用的物理内存大小,不包含交换内存。
- SHR: 共享内存(Shared Memory),即进程与其他进程共享的内存大小。
- S: 进程状态(State),通常包括:
R
: 运行中(Running)S
: 睡眠(Sleeping)D
: 不可中断的睡眠(Uninterruptible Sleep)Z
: 僵尸进程(Zombie)T
: 停止或追踪(Stopped or Traced)
- %CPU: 进程使用的 CPU 百分比,表示进程在最近一段时间内占用的 CPU 资源比例。
- %MEM: 进程使用的物理内存百分比,相对于系统总内存的占用情况。
- TIME+: 进程累计的 CPU 时间,格式为
分钟:秒.百分秒
,表示进程启动以来的总 CPU 占用时间。 - COMMAND: 执行的命令行或进程名称。
关于 跨 NUMA 的情况: 在图中,NU
列显示了多个 QEMU 线程分布在不同的 NUMA 节点上(例如,节点 0 和节点 1),这表明 QEMU-KVM 进程的线程确实存在跨 NUMA 的情况。这种分布可能会导致内存访问延迟的增加,因为不同的 NUMA 节点访问内存时会有不同的延迟。如果性能要求较高,建议对线程的 NUMA 亲和性进行优化,以减少跨 NUMA 访问的影响。
htop
network
端口
nc
nc是网络工具中的瑞士军刀。
补充说明 nc命令 全称netcat,用于TCP、UDP或unix域套接字(uds)的数据流操作,它可以打开TCP连接,发送UDP数据包,监听任意TCP 和UDP端口,同时也可用作做端口扫描,支持IPv4和IPv6,与Telnet的不同在于nc可以编写脚本。
语法
1 |
|
选项
1 |
|
TCP端口扫描:
1 |
|
扫描192.168.0.3 的端口 范围是 1-100 扫描UDP端口:
1 |
|
扫描指定端口,如 80:
1 |
|
端口占用
netstat
netstat 查看22端口是否被占用:
1 |
|
lsof
使用-i:port来显示与指定端口相关的网络信息:
1 |
|
ss
使用 ss 命令查看22端口是否被占用:
1 |
|
这条命令 ss -tulnp | head -n1
输出的是 ss
命令结果的第一行,它显示了 ss
输出的列标题。这些列分别表示:
- Netid: 网络协议类型(如 TCP、UDP 等)。
- State: 套接字状态(如 LISTEN、ESTABLISHED 等)。
- Recv-Q: 接收队列的字节数。
- Send-Q: 发送队列的字节数。
- Local Address:Port: 本地地址和端口。
- Peer Address:Port: 对等地址和端口(在监听状态下为空)。
- Process: 正在使用该套接字的进程及其 PID。
1 |
|
ss
是一个用于查看网络连接、套接字统计和进程信息的工具。常用参数包括:
-t
: 显示 TCP 套接字。-u
: 显示 UDP 套接字。-l
: 仅显示监听状态的套接字。-n
: 以数字形式显示地址和端口。-p
: 显示使用套接字的进程信息。
例如,sudo ss -tulnp
可以显示当前系统中监听的所有网络端口及其对应的进程。
ip
- 通过 12 个样例掌握 Linux IP 命令
- 如何将Linux的NIC 名称更改为 eth0 而不是 enps33 或 enp0s25,只要几秒钟
- linux服务器查看公网IP信息的方法 - 小帅豹 - 博客园 (cnblogs.com)
- IP、域名和端口号之间的联系
- Linux中20个高级命令
- A、B、C、D、E类IP地址划分依据
- IP地址划分、子网掩码的作用、实际中IP地址规划
- 刚插上网线,电脑怎么知道自己的IP是什么?
- ip扫描命令 linux,如何使用Linux扫描网络上的IP地址
/etc/hosts
net-tools iproute2
- Iproute2命令集提供完整的底层网络配置能力。有个从旧的net-tools命令集到新的iproute2命令集的转换表。
- ifconfig命令–显示或设置网络设备参数信息
- ip命令是Linux加强版的的网络配置工具,用于代替ifconfig命令。
- ip命令图文详解- Linux系统和网络管理员必备工具
- ifconfig/docker删除虚拟网卡
brctl
iptables
dns
nslookup
traceroute
traceroute
是一个用于追踪网络数据包从源到目标主机的路径的工具。它显示数据包经过的每一跳(即每一个路由器或网关)以及每一跳的延迟时间。这对于网络故障排查、分析网络路径和了解网络拓扑非常有用。
基本用法
1 |
|
例如:
1 |
|
解释输出
traceroute
的输出会列出数据包从源到目标主机所经过的每一跳。每一行代表一跳,并显示以下信息:
- 跳数: 每一跳的编号,从 1 开始。
- 路由器 IP 地址: 数据包在这一跳所经过的路由器的 IP 地址。
- 主机名: 该路由器的主机名(如果能解析)。
- 延迟时间: 数据包从源到这一跳的往返时间(通常显示三次)。
常用选项
-n
: 只显示 IP 地址,而不尝试解析主机名。-I
: 使用 ICMP 回显请求(类似于 ping)而不是默认的 UDP 数据包。-T
: 使用 TCP SYN 数据包进行追踪。-m <max_hops>
: 设置最大跳数,默认为 30。-q <number_of_queries>
: 每跳发送的探测包数量,默认为 3。
示例
基本使用:
1
traceroute google.com
输出会显示数据包从你的位置到 Google 服务器经过的路径。
使用 ICMP 包进行追踪:
1
traceroute -I www.example.com
这种方式更接近
ping
的工作方式,可能对某些防火墙更友好。只显示 IP 地址:
1
traceroute -n www.example.com
这样可以加快追踪速度,尤其在 DNS 解析慢的情况下。
traceroute
工具在网络诊断、排查网络延迟和确定网络路径时非常有帮助。
traceroute原理
traceroute
的工作原理基于 IP 数据包的 TTL(Time To Live) 字段,以及 ICMP(Internet Control Message Protocol)消息。它利用 TTL 的特性逐跳追踪数据包的路径,最终显示数据包从源到目标主机的路由信息。
- TTL 字段:
- 每个 IP 数据包都有一个 TTL 字段,表示数据包可以经过的最大路由器数量。
- 当数据包经过一个路由器时,TTL 值会减 1。
- 如果 TTL 值变为 0,路由器会丢弃该数据包,并返回一个 ICMP "Time Exceeded" 消息给发送者。
- 逐跳增加 TTL:
traceroute
工具首先发送一个 TTL 为 1 的数据包。- 第一个路由器接收到该数据包后,将 TTL 减 1,TTL 变为 0,于是路由器丢弃该数据包,并返回一个 ICMP "Time Exceeded" 消息。
traceroute
记录下这个 ICMP 消息中的路由器信息(如 IP 地址和延迟时间),并将其作为第一个跳的结果输出。- 接着,
traceroute
发送一个 TTL 为 2 的数据包,这个数据包能到达第二个路由器,再次触发 "Time Exceeded" 消息。 - 这个过程一直重复,直到数据包到达目标主机,或者达到设置的最大跳数(通常为 30)。
- 识别目标主机:
- 当目标主机收到数据包后,会返回一个 "ICMP Port Unreachable" 消息(如果使用默认的 UDP 数据包)或者一个 TCP/ICMP 响应(如果使用
-I
或-T
选项)。 - 当
traceroute
接收到此消息时,停止追踪,并显示完整路径。
- 当目标主机收到数据包后,会返回一个 "ICMP Port Unreachable" 消息(如果使用默认的 UDP 数据包)或者一个 TCP/ICMP 响应(如果使用
- 延迟时间的计算:
traceroute
在每一跳发送三个探测包,并计算从发送数据包到收到 ICMP 响应的时间延迟。这些延迟反映了从源到该跳的往返时间。
其他重要概念
ICMP:默认情况下,
traceroute
使用 UDP 数据包来进行探测,但它依赖于 ICMP "Time Exceeded" 和 "Port Unreachable" 消息来工作。使用-I
选项时,traceroute
会直接使用 ICMP 回显请求(类似于ping
)。端口号:默认情况下,
traceroute
使用 UDP 数据包,目标端口号从一个高的值(通常是33434)开始,并逐跳递增。目标主机通常会返回 "ICMP Port Unreachable" 消息,因为这些高端口号大多数没有实际服务监听。
典型问题
- 防火墙和路由器过滤:某些防火墙和路由器会阻止 ICMP 或高端口的 UDP 数据包,导致
traceroute
无法获取某些跳的路由信息。 - 多路径路由:在有些情况下,路径中的不同跳可能会变化,这导致
traceroute
显示不同的路径,特别是在负载均衡环境中。
traceroute
的原理非常适合用来诊断网络问题,了解数据包在网络中的传输路径,并发现可能的瓶颈或故障点。
代理
正向代理 反向代理
文件系统
rm
trash-cli
Linux 权限
mount
/etc/fstab
1 |
|
软链接和硬链接
- linux里创建快捷方式和查看快捷方式的指向
- 【Linux】:Linux下创建软链接(快捷方式) - Geeksongs - 博客园 (cnblogs.com)
- 「来道题」Linux的软链接
- 5分钟让你明白“软链接”和“硬链接”的区别
- 一文搞懂 Linux 的 inode!
- linux文件-link函数(文件硬链接和软连接)
- Linux中软链接、硬链接以及mount bind的区别
dd
lsof
显示当前打开的 /var/log/messages 文件及相关进程信息:
1 |
|
lsof /var/log/messages
的输出可能会包含以下几列:
- COMMAND: 打开文件的进程名。
- PID: 进程 ID。
- USER: 进程所属用户。
- FD: 文件描述符(例如
cwd
,txt
,mem
,1
,2
等)。 - TYPE: 文件类型(例如
REG
表示常规文件)。 - DEVICE: 设备号。
- SIZE/OFF: 文件大小或偏移量。
- NODE: 节点号。
- NAME: 文件名或路径。
stat
find
- Linux下which、whereis、locate、find命令的区别
- find 命令的 7 种用法
- linux shell find命令 查找多种文件后缀
- Linux copy时排除某文件/目录 - 简书 (jianshu.com)
- linux find grep组合使用
- find命令详解
- Linux 中如何获取文件的绝对路径
xargs
grep sed awk
grep
- 三剑客基础详解(grep、sed、awk)
- Linux中grep详解
- grep -s 去掉 no such file or directory
- grep 只从指定文件中查找,并且排除某些文件夹
- grep 命令(在指定文件的文件类型中查找)
- Linux: grep多个关键字“与”和“或”
- grep中的正则表达式
grep 特殊字符串
使用单引号并不能避免 *
等字符被解释为正则表达式的一部分。为了完全匹配包含这些特殊字符的字符串,以下是两种推荐的方式:
使用转义字符: 需要对特殊字符进行转义,例如
*
和(
等,确保它们不会被解释为正则表达式符号。1
grep -rn "\(struct wait_queue_entry \*wq_entry, unsigned mode, int flags, void \*key\)" /path/to/source/code
使用
-F
选项: 如果想避免手动转义所有特殊字符,可以使用grep -F
或fgrep
,将搜索字符串视为纯文本进行匹配。1
grep -rnF "(struct wait_queue_entry *wq_entry, unsigned mode, int flags, void *key)" /path/to/source/code
这两种方式可以帮助你在代码中准确查找包含特殊字符的字符串。
sed
复制第 1119 行到 1224 行的内容:
1 |
|
- 在Bash脚本中完成变量替换和指定文件内容替换的方法
- sed 模式分隔符
- sed 字符串替换 - Amei1314 - 博客园 (cnblogs.com)
- sed 功能强大的流式文本编辑器
- linux sed查找文件中某个值,linux查找文件中间某几行之sed用法小结
- linux使用sed命令批量替换某个目录下文件的内容
- sed 脚本分隔符引起的问题unknown option to `s'
- SED命令
awk
tail
cat EOF
tee
解压缩
- Linux命令之解压缩:tar、zip、rar 命令_阿飞的博客-CSDN博客_linux解压rar包命令
- Linux zip命令 | 菜鸟教程 (runoob.com)
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结_LINUX_操作系统_脚本之家 (jb51.net)
- Linux下tar命令解压到指定的目录
- 想学Linux中的打包和压缩?看这一篇就够了
分卷压缩
远程命令
上传下载文件
sftp
使用 sftp
连接远程服务器时,可以通过 -oPort
选项指定端口。以下是使用 sftp
指定端口的命令示例:
1 |
|
示例
假设你要通过端口 2222
连接到名为 example.com
的服务器,并且用户名是 user
,可以使用以下命令:
1 |
|
参数说明
-oPort=端口号
:指定连接到服务器的端口号。用户名@主机名
:指定用户名和主机名(或 IP 地址)以进行连接。
这种方式可以让你在连接到非默认端口的 SFTP 服务器时进行指定。
scp
使用 scp 命令时,如果需要指定端口,可以使用 -P 选项:
1 |
|
rsync
rsync
使用 -e
选项来指定通过 SSH 使用特定的端口:
1 |
|
参数说明:
-a
:归档模式,表示递归传输并保持文件属性。-v
:详细模式,显示传输过程中的详细信息。-z
:压缩传输文件,以减少传输的数据量。-P
:显示传输进度,并在传输中断后能够继续传输。-e 'ssh -p 10000'
:使用指定的 SSH 命令和端口(这里是 10000)。linux-y.tar.gz
:要传输的本地文件。root@10.63.8.158:/inf/yql/code
:远程服务器的目标路径。
ssh
Win10怎么配置ssh密钥免密连接Linux服务器_windows10_Windows系列_操作系统_脚本之家 (jb51.net)
VSCode Remote ssh跳板机配置(linux环境)
现有三台机器A、B、C,期望从机器A上通过跳板机B免密远程登录机器C。
在机器A上执行如下命令:
1
2
3
4ssh-keygen
ssh-copy-id uos@10.20.53.160
# 将机器A的公钥复制到机器B
rsync -avzP ~/.ssh/id_rsa.pub uos@10.20.53.160:~在机器B上执行如下命令:
1
2
3
4ssh-keygen
ssh-copy-id uos@192.168.122.76
# 将机器A的公钥复制到机器C
rsync -avzP ~/id_rsa.pub uos@192.168.122.76:~在机器C上执行如下命令:
1
cat id_rsa.pub >> ~/.ssh/authorized_keys
在机器A上的
~/.ssh/config
添加机器A、B、C配置(机器A是本机,可以忽略):1
2
3
4
5
6
7
8
9
10
11
12Host 192.168.122.76-uos20-1060-arm #机器C
HostName 192.168.122.76
User uos
ProxyJump 10.20.53.160-uos20-1060-arm
Host 10.20.53.160-uos20-1060-arm # 机器B
HostName 10.20.53.160
User uos
Host 10.20.53.48-deepin20.9-amd # 机器A
HostName 10.20.53.48
User uos
termux
crontab计划任务
- linux中crontab计划任务怎么删除?_LINUX_操作系统_脚本之家 (jb51.net)
- Linux中的cron计划任务配置详解_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com)
- 在线crontab表达式执行时间计算工具_蛙蛙在线工具 (iamwawa.cn)
- crontab执行时间计算 - 在线工具 (tool.lu)