创建用户
# 新建用户
sudo adduser newuser
# 添加到用户组
sudo usermod -aG sudo newuser
# 这里-aG选项表示将用户添加到指定组中。sudo是Ubuntu中默认的超级用户组。
查看系统信息
查看CPU信息:
lscpu
: 显示CPU架构信息,如型号、核心数、线程数等。top
或htop
(需要安装): 实时显示CPU使用率及其它系统信息。
不得不说htop比top好用太多!
查看GPU信息 (如果安装了NVIDIA GPU):
nvidia-smi
: 显示NVIDIA GPU的状态,包括使用率、温度、显存使用等。
查看内存信息:
free -m
: 显示内存使用情况,包括总量、使用中、空闲等,单位为MB。vmstat
: 显示内存统计信息及系统进程、交换、IO等信息。
查看网络信息:
ifconfig
(在某些系统中可能需要安装net-tools
): 显示网络接口配置信息。ip addr
: 显示网络接口的IP地址。netstat
(可能需要安装): 显示网络连接、路由表、接口统计等信息。nload
或iftop
(需要安装): 实时监控网络流量和带宽使用。
关闭桌面
如果您的Ubuntu服务器当前运行着GNOME或任何其他图形界面,并且您想要关闭这个图形界面(也就是说,让服务器运行在纯命令行模式),您可以按照以下步骤操作:
关闭GNOME或图形界面
停止图形界面服务:
- 对于使用
systemd
的系统(如最新版的Ubuntu),您可以使用以下命令停止gdm
(GNOME Display Manager)或类似的服务:sudo systemctl stop gdm3
- 如果您不确定是哪个显示管理器(比如可能是
lightdm
,sddm
等),可以先检查当前运行的显示管理器:systemctl list-units --type=service | grep -E 'gdm|sddm|lightdm|x11'
- 对于使用
禁用自动启动:
- 如果您不想在每次启动时自动进入图形界面,可以禁用对应的服务:
sudo systemctl disable gdm3
- 如果您不想在每次启动时自动进入图形界面,可以禁用对应的服务:
再次启用GNOME或图形界面
当您需要再次启用GNOME或其他图形界面时,您可以使用以下命令:
启动图形界面服务:
- 使用以下命令启动显示管理器(这里以
gdm3
为例):sudo systemctl start gdm3
- 使用以下命令启动显示管理器(这里以
启用自动启动:
- 如果您希望在下次启动时自动进入图形界面,可以重新启用服务:
sudo systemctl enable gdm3
- 如果您希望在下次启动时自动进入图形界面,可以重新启用服务:
注意事项
- 停止或禁用图形界面会导致系统仅通过命令行界面可用,确保您熟悉命令行操作。
- 根据您的具体系统配置和使用的显示管理器,命令可能略有不同。例如,如果您使用的是LightDM,您应该使用
lightdm
替换命令中的gdm3
。 - 如果您在操作过程中遇到任何问题,请确保能够访问物理服务器或远程管理控制台,以便进行故障排除。
压缩和解压
.tar 文件
# 仅打包,并非压缩
tar -xvf FileName.tar # 解包
tar -cvf FileName.tar DirName # 将DirName和其下所有文件(夹)打包
.gz文件
# .gz
gunzip FileName.gz # 解压1
gzip -d FileName.gz # 解压2
gzip FileName # 压缩,只能压缩文件
.tar.gz文件、 .tgz文件
# .tar.gz 和 .tgz
tar -zxvf FileName.tar.gz # 解压
tar -zcvf FileName.tar.gz DirName # 将DirName和其下所有文件(夹)压缩
tar -C DesDirName -zxvf FileName.tar.gz # 解压到目标路径
.zip文件
# 感觉.zip占用空间比.tar.gz大
unzip FileName.zip # 解压
zip FileName.zip DirName # 将DirName本身压缩
zip -r FileName.zip DirName # 压缩,递归处理,将指定目录下的所有文件和子目录一并压缩
.rar文件
# mac和linux并没有自带rar,需要去下载
rar x FileName.rar # 解压
rar a FileName.rar DirName # 压缩
对Windows的NTFS硬盘进行写入挂载
执行
sudo ntfsfix /dev/nvme1n1p4
重新挂载硬盘 就可以进行写入操作了。
验证:
mount | grep -i "on /media/sirius/File"
是rw就是可以写入,or是只读。
echo
对于echo 单引号变量,就直接进行标准输出;
对于双引号变量,会对其中的变量进行引用,再标准输出。
# 对于单引号变量,不对其中的变量进行解释,直接标准输出
yoho@yoho-Lenovo-XiaoXinPro-16IHU-2021:~$ abc='hello world'
yoho@yoho-Lenovo-XiaoXinPro-16IHU-2021:~$ echo $abc
hello world
yoho@yoho-Lenovo-XiaoXinPro-16IHU-2021:~$ def='hello $abc'
yoho@yoho-Lenovo-XiaoXinPro-16IHU-2021:~$ echo $def
hello $abc
# 对于双引号变量,会对其中的变量进行引用,再标准输出
yoho@yoho-Lenovo-XiaoXinPro-16IHU-2021:~$ def="hello $abc"
yoho@yoho-Lenovo-XiaoXinPro-16IHU-2021:~$ echo $def
hello hello world
dpkg
对于包更新
sudo dpkg -i <package_name>.deb
包卸载
sudo dpkg -r package_name
查询特定包的信息
dpkg -l | grep package_name
grep
grep
是一个用于在文本文件中搜索指定模式(字符串)的命令行工具。它的名称来自于 “Global Regular Expression Print” 的缩写,这是它最初的主要功能之一,即在文本中查找匹配正则表达式的行并打印出来。grep
在 Unix 和类 Unix 操作系统中广泛使用。
grep
的基本用法如下:
grep [选项] 模式 [文件]
[选项]
:用于指定搜索行为的选项,例如-i
(不区分大小写)、-v
(反向匹配)、-r
(递归搜索目录)、-l
(仅显示匹配文件名)等。模式
:要搜索的文本模式或正则表达式。[文件]
:要搜索的文件名列表,如果未提供文件名,则grep
会从标准输入中读取数据。
例如,要在一个文件 example.txt
中查找包含字符串 “apple” 的所有行,你可以使用以下命令:
grep "apple" example.txt
grep
将输出所有包含 “apple” 的行。
以下是一些常见的 grep
选项:
-i
:忽略大小写。-v
:反向匹配,只显示不包含模式的行。
在小红书的笔试题中就有用cat和grep输出不包含空行的文本,用到了正则表达式的’^$‘和grep -v
-r
:递归搜索目录中的文件。-l
:仅显示包含模式的文件名,而不显示匹配的行。
grep
是一个非常强大和灵活的文本搜索工具,可以用于各种情况,包括日志分析、数据提取、代码搜索等。它支持正则表达式,因此可以进行高级的模式匹配和搜索操作。
Vim
☆ 命令模式下我们能做什么 ① 移动光标 ② 复制 粘贴 ③ 剪切 粘贴 删除 ④ 撤销与恢复
命令模式
移动光标到首行或末行(!)
移动光标到首行 => gg
移动光标到末行 => G
☆ 翻屏 向上 翻屏,按键:ctrl + b (before) 或 PgUp
向下 翻屏,按键:ctrl + f (after) 或 PgDn
向上翻半屏,按键:ctrl + u (up)
向下翻半屏,按键:ctrl + d (down)
☆ 快速定位光标到指定行(!) 行号 + G,如150G代表快速移动光标到第150行。
复制/粘贴(!)
① 复制当前行(光标所在那一行)
按键:yy
粘贴:在想要粘贴的地方按下p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键
② 从当前行开始复制指定的行数,如复制5行,5yy
粘贴:在想要粘贴的地方按下p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键
剪切/删除(!)
在VIM编辑器中,剪切与删除都是dd
如果剪切了文件,但是没有使用p进行粘贴,就是删除操作
如果剪切了文件,然后使用p进行粘贴,这就是剪切操作
① 剪切/删除当前光标所在行
按键:dd (删除之后下一行上移)
粘贴:p
注意:dd 严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。
② 剪切/删除多行(从当前光标所在行开始计算)
按键:数字dd
粘贴:p
特殊用法:
③ 剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移
按键:D (删除之后当前行会变成空白行)
撤销/恢复(!)
撤销:u(undo)
恢复:ctrl + r 恢复(取消)之前的撤销操作【重做,redo】
末行模式
☆ 末行模式下我们能做什么
文件保存、退出、查找与替换、显示行号、paste模式等等
保存/退出(!)
:w => 代表对当前文件进行保存操作,但是其保存完成后,并没有退出这个文件
:q => 代表退出当前正在编辑的文件,但是一定要注意,文件必须先保存,然后才能退出
:wq => 代表文件先保存后退出(保存并退出)
如果一个文件在编辑时没有名字,则可以使用:wq 文件名称,代表把当前正在编辑的文件保存到指定的名称中,然后退出
:q! => 代表强制退出但是文件未保存(不建议使用)
查找/搜索(!)
切换到命令模式,然后输入斜杠/(也是进入末行模式的方式之一)
进入到末行模式后,输入要查找或搜索的关键词,然后回车
如果在一个文件中,存在多个满足条件的结果。在搜索结果中切换上/下一个结果:N/n (大写N代表上一个结果,小写n代表next)
如果需要取消高亮,则需要在末行模式中输入:noh【no highlight】
文件内容的替换(!)
第一步:首先要进入末行模式(在命令模式下输入冒号:)
第二步:根据需求替换内容
① 只替换光标所在这一行的第一个满足条件的结果(只能替换1次)
:s/要替换的关键词/替换后的关键词 + 回车
案例:把hello rhel中的 rhel替换为 rhel8
切换光标到hello rhel这一行
:s/rhel/rhel8
② 替换光标所在这一行中的所有满足条件的结果(替换多次,只能替换一行)
:s/要替换的关键词/替换后的关键词/g g=global全局替换
案例:把hello rhel中的所有rhel都替换为rhel8
切换光标到hello rhel这一行
:s/rhel/rhel8/g
③ 针对整个文档中的所有行进行替换,只替换每一行中满足条件的第一个结果
:%s/要替换的关键词/替换后的关键词
案例:把每一行中的第一个hello关键词都替换为hi
:%s/hello/hi
④ 针对整个文档中的所有关键词进行替换(只要满足条件就进行替换操作)
:%s/要替换的关键词/替换后的关键词/g
案例:替换整个文档中的hello关键词为hi
:%s/hello/hi/g
显示行号
基本语法:
:set nu
【nu = number】,行号
可视化模式
1)如何进入到可视化模式
在命令模式中,直接按ctrl + v(可视块)或V(可视行)或v(可视),然后按下↑ ↓ ← →方向键来选中需要复制的区块,按下y 键进行复制(不要按下yy),最后按下p 键粘贴
退出可视模式按下Esc
2)可视化模式复制操作
第一步:在命令模式下,直接按小v,进入可视化模式
第二步:使用方向键↑ ↓ ← →选择要复制的内容,然后按y键
第三步:移动光标,停在需要粘贴的位置,按p键进行粘贴操作
3)为配置文件添加#多行注释(!)
第一步:按Esc退出到命令模式,按gg切换到第1行
第二步:然后按Ctrl+v进入到可视化区块模式(列模式)
第三步:在行首使用上下键选择需要注释的多行
第四步:按下键盘(大写)“I”键,进入插入模式(Shift + i)
第五步:输入#号注释符
第六步:输入完成后,连续按两次Esc即可完成添加多行注释的过程
4)为配置文件去除#多行注释(!)
第一步:按Esc退出到命令模式,按gg切换到第1行
第二步:然后按Ctrl+v进入可视化区块模式(列模式)
第三步:使用键盘上的方向键的上下选中需要移除的#号注释
第四步:直接按Delete键即可完成删除注释的操作
strace
通过strace命令可以看见某条指令发起了哪些系统调用。
strace -o hello.log ./hello
strace -o hello.py.log python3 ./hello.py
strace是一个Linux命令,用于跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
strace命令的语法如下:
strace [选项] 命令 [参数]
选项说明:
- -a:跟踪所有系统调用,包括不常用的系统调用。
- -c:统计每一系统调用的所执行的时间,次数和出错的次数等。
- -d:输出strace关于标准错误的调试信息。
- -e:指定要跟踪的系统调用。
- -f:跟踪由fork调用所产生的子进程。
- -o:将输出保存到指定文件中。
- -p:跟踪指定PID的进程。
- -s:指定输出的行宽。
- -t:输出时间戳。
- -tt:输出毫秒级别的时间戳。
- -T:输出每个系统调用所花费的时间。
- -u:跟踪用户空间的地址空间。
- -v:输出更详细的信息。
示例:
- 跟踪ls命令的系统调用:
strace ls
- 跟踪ls命令的系统调用,包括不常用的系统调用:
strace -a ls
- 跟踪ls命令的系统调用,统计每个系统调用的所执行的时间、次数和出错的次数等:
strace -c ls
- 跟踪ls命令的系统调用,输出到指定文件中:
strace -o trace.log ls
- 跟踪指定PID为100的进程的系统调用:
strace -p 100
- 跟踪用户空间的地址空间:
strace -u
strace是一个非常强大的工具,可以用于诊断、调试和教学。通过使用strace,可以了解进程是如何与内核进行交互的,从而帮助解决各种问题。
man
man指令是Linux和类Unix操作系统中内置的命令,用于显示命令、实用程序和函数的参考页面。它是一个非常有用的工具,可用于学习和使用这些系统上可用的大量工具。
要使用man,只需键入man
后跟您要了解的命令、实用程序或函数的名称。例如,要了解ls
命令,您将键入man ls
。
每个命令的man页面分为几个部分,包括:
- NAME: 命令的名称和简短描述。
- SYNOPSIS: 使用命令的语法。
- DESCRIPTION: 命令的详细描述,包括其选项和参数。
- EXAMPLES: 如何使用命令的示例。
- FILES: 命令使用的文件列表。
- SEE ALSO: 其他相关命令列表。
sar
sar -P all 1
sar是Linux系统上用于收集系统性能数据的命令。它可以收集CPU、内存、磁盘、网络等方面的数据。sar命令的输出可以用于监控系统性能、诊断系统问题、进行性能分析等。
sar命令的语法如下:
sar [选项] [间隔] [持续时间]
选项说明:
- -a: 收集所有可用的数据。
- -b: 收集块设备的数据。
- -c: 收集CPU的数据。
- -d: 收集磁盘设备的数据。
- -e: 收集内存的数据。
- -f: 从指定文件中读取数据。
- -i: 收集网络设备的数据。
- -n: 指定收集的数据项。
- -r: 收集实时数据。
- -u: 收集用户空间的数据。
- -v: 输出更详细的信息。
- -P: 可以加上ALL ,列出各个CPU上的情况
间隔说明:
- 间隔以秒为单位,默认为1秒。
持续时间说明:
- 持续时间以秒为单位,默认为无限长。
示例:
- 收集所有可用的数据,间隔为1秒,持续时间为10秒:
sar -a 1 10
- 收集CPU的数据,间隔为5秒,持续时间为1分钟:
sar -c 5 60
- 收集内存的数据,间隔为1分钟,持续时间为1小时:
sar -e 1 3600
- 收集网络设备的数据,间隔为1小时,持续时间为24小时:
sar -i 1 86400
sar命令的输出格式:
sar命令的输出格式如下:
时间戳 数据项 值
时间戳以秒为单位,数据项表示收集的数据类型,值表示数据的值。
sar命令的常用用法:
- 监控系统性能:使用sar命令可以监控系统的CPU、内存、磁盘、网络等方面的性能。
- 诊断系统问题:使用sar命令可以帮助诊断系统性能问题。
- 进行性能分析:使用sar命令可以进行性能分析,以了解系统的瓶颈。
以下是一些sar命令的常用用法:
- 监控CPU使用率:
sar -c
- 监控内存使用率:
sar -e
- 监控磁盘读写速度:
sar -d
- 监控网络流量:
sar -i
- 监控系统负载:
sar -u
readelf
readelf -h /bin/sleep
readelf命令是Linux系统上用于显示ELF文件信息的命令。它可以显示ELF文件的文件头、程序头、节头、符号表、重定位表等信息。readelf命令可以用于调试程序、学习ELF文件格式等。
readelf命令的语法如下:
readelf [选项] 文件
选项说明:
- -a: 显示所有信息。
- -h: 显示文件头信息。
- -l: 显示程序头信息。
- -S: 显示节头信息。
- -s: 显示符号表信息。
- -r: 显示重定位表信息。
- -d: 显示动态链接信息。
- -e: 显示所有头信息。
- -x: 显示只读数据段。
- -z: 显示字符串表。
示例:
- 显示可执行文件
ls
的所有信息:
readelf -a ls
- 显示可执行文件
ls
的文件头信息:
readelf -h ls
- 显示可执行文件
ls
的程序头信息:
readelf -l ls
- 显示可执行文件
ls
的节头信息:
readelf -S ls
- 显示可执行文件
ls
的符号表信息:
readelf -s ls
- 显示可执行文件
ls
的重定位表信息:
readelf -r ls
- 显示可执行文件
ls
的动态链接信息:
readelf -d ls
readelf命令的输出格式:
readelf命令的输出格式取决于指定的选项。
readelf命令的常用用法:
- 调试程序:使用readelf命令可以查看程序的符号表和重定位表信息,这对于调试程序很有帮助。
- 学习ELF文件格式:使用readelf命令可以查看ELF文件的所有信息,这对于学习ELF文件格式很有帮助。
以下是一些readelf命令的常用用法:
- 查看可执行文件的所有信息:
readelf -a 文件
- 查看可执行文件的文件头信息:
readelf -h 文件
- 查看可执行文件的程序头信息:
readelf -l 文件
- 查看可执行文件的节头信息:
readelf -S 文件
- 查看可执行文件的符号表信息:
readelf -s 文件
- 查看可执行文件的重定位表信息:
readelf -r 文件
- 查看可执行文件的动态链接信息:
readelf -d 文件
ps
ps命令是Linux系统上用于显示当前系统进程信息的命令。它可以显示进程的PID、进程名称、进程状态、用户、CPU使用率、内存使用率等信息。ps命令可以用于监控系统进程、诊断系统问题、进行性能分析等。
ps命令的语法如下:
ps [选项]
选项说明:
- -a: 显示所有进程。
- -u: 显示用户进程。
- -x: 显示所有进程,包括守护进程。
- -l: 显示详细信息。
- -e: 此参数的效果和指定"A"参数相同。
- -f: 显示完整的命令行。
- -o: 指定显示的列。
- -pid: 指定进程的PID。
- -ppid: 指定进程的父进程的PID。
- -sid: 指定进程的会话ID。
- -tty: 指定进程的终端。
示例:
- 显示所有进程:
ps -a
- 显示用户进程:
ps -u
- 显示所有进程,包括守护进程:
ps -x
- 显示详细信息:
ps -l
- 显示完整的命令行:
ps -f
- 指定显示的列:
ps -o pid,ppid,comm,state,pcpu,mem
- 指定进程的PID:
ps -p 1234
- 指定进程的父进程的PID:
ps -ppid 1234
- 指定进程的会话ID:
ps -sid 1234
- 指定进程的终端:
ps -tty /dev/tty1
ps命令的输出格式:
ps命令的输出格式取决于指定的选项。
ps命令的常用用法:
- 监控系统进程:使用ps命令可以监控系统进程的状态,以了解系统的运行情况。
- 诊断系统问题:使用ps命令可以帮助诊断系统问题,例如进程卡死、内存泄漏等。
- 进行性能分析:使用ps命令可以进行性能分析,以了解系统的瓶颈。
以下是一些ps命令的常用用法:
- 查看所有进程:
ps -a
- 查看用户进程:
ps -u
- 查看所有进程,包括守护进程:
ps -x
- 查看详细信息:
ps -l
- 查看完整的命令行:
ps -f
- 查看指定进程的信息:
ps -p 1234
- 查看指定进程的父进程的信息:
ps -ppid 1234
- 查看指定进程的会话ID:
ps -sid 1234
- 查看指定进程的终端:
ps -tty /dev/tty1
taskset
taskset命令是Linux系统上用于设置进程亲和力的命令。亲和力是指进程运行在哪些CPU上。taskset命令可以用于提高进程的性能或稳定性。
taskset命令的语法如下:
taskset [选项] 进程ID [CPU列表]
选项说明:
- -c: 指定CPU列表。
# 查看逻辑cpu个数
grep -c processor /proc/cpuinfo
- -p: 指定进程ID。
- -a: 指定所有进程。
示例:
- 将进程ID为1234的进程绑定到CPU 0:
taskset -c 0 1234
- 将所有进程绑定到CPU 0:
taskset -c 0 -a
- 将进程ID为1234的进程绑定到CPU 0 和 1:
taskset -c 0,1 1234
taskset命令的输出格式:
taskset命令没有输出格式。
taskset命令的常用用法:
- 提高进程的性能:将进程绑定到特定的CPU可以提高进程的性能,因为进程不需要在多个CPU之间切换。
- 提高进程的稳定性:将进程绑定到特定的CPU可以提高进程的稳定性,因为进程不会与其他进程竞争CPU资源。
以下是一些taskset命令的常用用法:
- 将计算密集型进程绑定到特定的CPU:
taskset -c 0,1,2,3 ./my_computation_intensive_program
- 将IO密集型进程绑定到特定的CPU:
taskset -c 4,5,6,7 ./my_io_intensive_program
- 将需要实时响应的进程绑定到特定的CPU:
taskset -c 0 ./my_real_time_program
网络命令
ipconfig, ifconfig, ip
ipconfig是windows中的命令,linux上是ifconfig,但ip命令比ifconfig更强大,旨在取代ifconfig命令。
ping
ping命令是DOS命令,一般用于检测网络是否通畅以及网络连接速度,结果只越大,说明速度越慢。它使用网络层的ICMP协议。
ping [参数选项] [主机名或IP地址]
linux
参数 | 含义 |
---|---|
-c | 设置完成要求回应的次数 |
-i | 指定收发信息的间隔时间 |
-s | 设置数据包的大小 |
-w | 在设定的秒后退出 |
windows
参数 | 含义 |
---|---|
-t | 连续对IP地址执行ping命令,直到用户以<control+c>键强制中断 |
-l | 指定ping命令的数据长度 |
-n | 执行特定次数的ping命令 |
netstat
netstat 用来查看当前操作系统的网络连接状态、路由表、接口统计等信息,来自于 net-tools 工具包,ss 是 netstat 的升级版。
参数 | 含义 |
---|---|
-a | 显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限) |
-l | 显示处于监听 (Listen) 状态的网络连接及端口信息 |
-t | 查看 TCP (Transmission Control Protocol,传输控制协议) 相关的信息 |
-u | 显示 UDP (User Datagram Protocol,用户数据报协议) 协议相关的信息 |
-r | 显示路由表信息 |
-i | 显示网卡列表 |
-g | 显示组播组的关系 |
-s | 显示网络统计信息 |
常用命令选项:
netstat [-anpt] [-anpu] [-anptu] [-anpltu] [-ntlp]
ss
ss 命令来自于 iproute 包,是 netstat 的升级版本。netstat 通过遍历 /proc 来获取 socket 信息,ss 使用 netlink 与内核 tcp_diag 模块通信获取 socket 信息。 格式:
ss [OPTION]... [FILTER]
参数 | 含义 |
---|---|
-a | 显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限) |
-l | 显示处于监听 (Listen) 状态的网络连接及端口信息 |
-t | 查看 TCP (Transmission Control Protocol,传输控制协议) 相关的信息 |
-u | 显示 UDP (User Datagram Protocol,用户数据报协议) 协议相关的信息 |
-x | unix sock 相关 |
-w | 裸套接字相关 |
-e | 扩展的信息 |
-m | 内存用量 |
-o | 计时器信息 |
#显示本地打开的所有端口
ss -l
#列出当前 socket 详细信息
ss -s
#显示每个进程具体打开的 socket
ss -pl
#显示所有 tcp socket
ss -at
#显示所有的 udp socket
ss -au
#显示所有已建立的 ssh 连接
ss -o state established '( dport = :ssh or sport = :ssh )'
#显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
traceroute
traceroute 命令可以用于测试从当前主机到目的主机之间经过了哪些网络结点,并显示各个中间结点的连接状态(响应时间)。对于无法响应的结点,连接状态将显示为 “*”,预设数据包大小是 40Bytes,用户可另行设置。如果没有 traceroute 命令可执行 yum -y install traceroute 安装。
格式:
traceroute [参数] [主机|IP]
参数:
参数 | 含义 |
---|---|
-d | 使用 Socket 层级的排错功能 |
-f | 设置第一个检测数据包的存活数值 TTL 的大小 |
-F | 设置勿离断位 |
-g | 设置来源路由网关,最多可设置 8 个 |
-i | 使用指定的网络界面送出数据包 |
-l | I 使用 ICMP 回应取代 UDP 资料信息 |
-m | 设置检测数据包的最大存活数值 TTL 的大小 |
-n | 直接使用 IP 地址而非主机名称 |
-p | 设置 UDP 传输协议的通信端口 |
-r | 忽略普通的 Routing Table,直接将数据包送到远端主机上 |
-s | 设置本地主机送出数据包的 IP 地址 |
-t | 设置检测数据包的 TOS 数值 |
-v | 详细显示指令的执行过程 |
-w | 设置等待远端主机回报的时间 |
-x | 开启或关闭数据包的正确性检验 |
[root@c7-1 ~]#traceroute 20.0.0.25
traceroute to 20.0.0.25 (20.0.0.25), 30 hops max, 60 byte packets
1 20.0.0.25 (20.0.0.25) 0.942 ms 0.782 ms 0.647 ms
#可以看到这两台机器之间没有经过路由,是直连或连着交换机的状态
[root@c7-1 ~]#traceroute www.baidu.com
traceroute to www.baidu.com (112.80.248.75), 30 hops max, 60 byte packets
1 gateway (20.0.0.2) 5.900 ms 5.817 ms 5.758 ms
2 * * *
3 * * *
4 * * *
......
nslookup
nslookup
是一个用于查询域名系统(DNS)以获取有关域名、IP地址和其他DNS记录信息的网络管理命令行工具。
nslookup 域名
示例:
[root@c7-1 ~]#nslookup www.baidu.com
Server: 20.0.0.2
Address: 20.0.0.2#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 112.80.248.75
Name: www.a.shifen.com
Address: 112.80.248.76
[root@c7-1 ~]#nslookup www.google.com
Server: 20.0.0.2
Address: 20.0.0.2#53
Non-authoritative answer:
Name: www.google.com
Address: 104.244.46.208
Name: www.google.com
Address: 2001::1f0d:5211
[root@c7-1 ~]#cat /etc/resolv.conf #域名解析配置文件
# Generated by NetworkManager
# 一行一个 DNS,最多配置三个 DNS,优先使用第一个 DNS 服务器
nameserver 20.0.0.2
[root@c7-1 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
112.80.248.75 www.baidu.com
#/etc/hosts 文件中记录着一份主机名与 IP 地址的映射关系表,一般用来保存经常需要访问的主机的信息。当访问一个未知的域名时,先查找该文件中是否有相应的映射记录,如果找不到再去向 DNS 服务器查询。
ARP
ARP(Address Resolution Protocol,地址解析协议)缓冲区是在计算机或网络设备上维护的一个表格,用于存储 IP 地址与MAC 地址之间的映射关系。ARP 协议用于将目标主机的 IP 地址解析成其对应的 MAC 地址,从而实现数据在网络上的正确传输。
在一个局域网中,当计算机 A 需要与计算机 B 进行通信时,A 需要知道 B 的 MAC 地址才能正确发送数据包。这时,A 发送一个 ARP 请求广播,询问网络中是否有拥有特定 IP 地址的设备,并且请求对应设备的 MAC 地址。设备 B 收到请求后,会回复一个 ARP 响应,包含其自己的 MAC 地址。一旦 A 收到了 B 的 MAC 地址,它就可以将数据包正确地发送给 B。
ARP 缓冲区(或称为 ARP 表格、ARP 缓存)在这个过程中起到了重要作用。当设备 A 解析了设备 B 的 IP 地址并获取到 B 的 MAC 地址后,它将这个映射关系存储在 ARP 缓冲区中。这样,以后 A 需要与 B 通信时,就无需再次发送 ARP 请求,而是直接从 ARP 缓冲区中获取 B 的 MAC 地址,从而加速通信过程。
arp 命令用于操作主机的 arp 缓冲区,可以用来显示 arp 缓冲区中的所有条目、删除指定的条目或者添加静态的 ip 地址与 MAC 地址对应关系。
格式:
arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP cache
arp [-v] [-i <if>] -d <host> [pub] <-Delete ARP entry
arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from file
arp [-v] [<HW>] [-i <if>] -s <host> <hwaddr> [temp] <-Add entry
arp [-v] [<HW>] [-i <if>] -Ds <host> <if> [netmask <nm>] pub <-''-
参数:
-a<主机>: 显示 arp 缓冲区的所有条目 -H<地址类型>: 指定 arp 指令使用的地址类型 -d<主机>: 从 arp 缓冲区中删除指定主机的 arp 条目 -D: 使用指定接口的硬件地址 -e: 以 Linux 的显示风格显示 arp 缓冲区中的条目 -i<接口>: 指定要操作 arp 缓冲区的网络接口 -s<主机><MAC地址>:设置指定的主机的 IP 地址与 MAC 地址的静态映射 -n: 以数字方式显示 arp 缓冲区中的条目 -v: 显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息 -f<文件>: 设置主机的 IP 地址与 MAC 地址的静态映射
示例:
#显示 ARP 表
arp -n 或 ip neigh
#ARP 静态绑定 MAC 地址可以防止 ARP 欺骗
arp -s 10.0.0.6 00:0c:29:32:80:38
#删除 arp 缓存条目
arp -d 10.0.0.6
#指定回复的 MAC 地址
arp -i eth0 -Ds 10.0.0.2 eth1 pub
FTP
FTP(File Transfer Protocol)是一种用于在网络上传输文件的标准协议。你可以使用命令行界面或者专门的 FTP 客户端来测试和使用 FTP 命令。下面是一些基本的 FTP 命令以及如何进行测试:
连接到 FTP 服务器: 使用以下命令连接到 FTP 服务器,其中
<server_address>
是服务器的地址(域名或 IP 地址):ftp <server_address>
输入该命令后,你将会被要求输入用户名和密码来进行身份验证。
浏览远程目录: 连接成功后,你可以使用
ls
命令列出远程服务器上的文件和目录。切换远程目录: 使用
cd
命令来切换远程服务器上的目录:cd <directory_name>
下载文件: 使用
get
命令来下载远程服务器上的文件到本地:get <remote_file_name>
上传文件: 使用
put
命令来上传本地文件到远程服务器:put <local_file_name>
退出 FTP 会话: 使用
quit
或bye
命令来退出 FTP 会话:quit
请注意,上述命令只是 FTP 命令的一小部分,而实际的 FTP 客户端可能提供更多功能和选项。如果你在终端或命令提示符中直接使用上述命令,确保你已经连接到一个可用的 FTP 服务器,并且你已经登录并有足够的权限进行操作。
lsof
列出所有打开了的网络文件
[root@ecs-centos-7 ~]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 567 ntp 18u IPv4 12657 0t0 UDP localhost:ntp
ntpd 567 ntp 22u IPv6 16095 0t0 UDP ecs-centos-7.4-64bit-20200212:ntp
dhclient 651 root 6u IPv4 14594 0t0 UDP *:bootpc
master 960 root 13u IPv4 15791 0t0 TCP localhost:smtp (LISTEN)
master 960 root 14u IPv6 15792 0t0 TCP localhost:smtp (LISTEN)
mysqld 1053 mysql 13u IPv6 15147 0t0 TCP *:mysql (LISTEN)
sshd 1348 root 3u IPv4 16698 0t0 TCP *:ssh (LISTEN)
列出所有 IPV4/6 网络文件
列出所有已经打开了的 ipv4 网络文件
[root@ecs-centos-7 ~]# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 567 ntp 16u IPv4 12651 0t0 UDP *:ntp
ntpd 567 ntp 18u IPv4 12657 0t0 UDP localhost:ntp
ntpd 567 ntp 21u IPv4 16094 0t0 UDP ecs-centos-7.4-64bit-20200212:ntp
dhclient 651 root 6u IPv4 14594 0t0 UDP *:bootpc
master 960 root 13u IPv4 15791 0t0 TCP localhost:smtp (LISTEN)
sshd 1348 root 3u IPv4 16698 0t0 TCP *:ssh (LISTEN)
所有已经打开了的 ipv6 网络文件
[root@ecs-centos-7 ~]# lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 567 ntp 17u IPv6 12652 0t0 UDP *:ntp
ntpd 567 ntp 19u IPv6 12658 0t0 UDP localhost:ntp
ntpd 567 ntp 22u IPv6 16095 0t0 UDP ecs-centos-7.4-64bit-20200212:ntp
master 960 root 14u IPv6 15792 0t0 TCP localhost:smtp (LISTEN)
mysqld 1053 mysql 13u IPv6 15147 0t0 TCP *:mysql (LISTEN)
sshd 1348 root 4u IPv6 16700 0t0 TCP *:ssh (LISTEN)
列出在指定端口上打开的文件
使用 lsof -i:端口号
可以获得所有在指定端口号上打开的文件
[root@ecs-centos-7 ~]# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1348 root 3u IPv4 16698 0t0 TCP *:ssh (LISTEN)
sshd 1348 root 4u IPv6 16700 0t0 TCP *:ssh (LISTEN)
sshd 27741 root 3u IPv4 458958 0t0 TCP ecs-centos-7.4-64bit-20200212:ssh->113.118.121.220:42395 (ESTABLISHED)
sshd 27819 root 3u IPv4 459250 0t0 TCP ecs-centos-7.4-64bit-20200212:ssh->113.118.121.220:19807 (ESTABLISHED)
sshd 27895 root 3u IPv4 459828 0t0 TCP
上面例子列出了所有在22号端口上打开的文件
在服务器开发中,经常会部署一个网关或者代理程序,用来和客户端通讯,网关或者代理程序需要开放一个固定的端口供客户端连接用
如果客户端连接不上网关或者代理程序,我们可以用上述命令检查网关或代理程序的端口是否开启,来排除因为端口关闭了导致连接不上网关的情况
列出使用了指定协议(TCP/UDP) 的文件
使用 lsof -i TCP/UDP
列出使用了TCP 或 UDP 协议的文件
[root@cghost8 /home/cgyx]# lsof -i TCP | more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1704 root 3u IPv4 13593 0t0 TCP *:ssh (LISTEN)
sshd 1704 root 4u IPv6 13595 0t0 TCP *:ssh (LISTEN)
redis-serer 1725 root 4u IPv4 19773 0t0 TCP localhost:6380 (LISTEN)
nc 2067 cgyx 4u IPv4 39167 0t0 TCP *:60600 (LISTEN)
mysqld 3020 mysql 4u IPv6 5514608 0t0 TCP 192.168.70.10:mysql->192.168.70.10:37084 (ESTABLISHED)
使用 lsof -i TCP:3306
列出使用了TCP 协议并且端口为3306的文件
[root@cghost8 /home/cgyx]# lsof -i TCP:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 3020 mysql 4u IPv6 5514608 0t0 TCP 192.168.70.10:mysql->192.168.70.10:37084 (ESTABLISHED)
使用 lsof -i TCP:1-1024
列出使用了TCP协议并且端口范围为 1 到 1024 的文件
[root@cghost8 /home/cgyx]# lsof -i TCP:1-1024
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1704 root 3u IPv4 13593 0t0 TCP *:ssh (LISTEN)
sshd 1704 root 4u IPv6 13595 0t0 TCP *:ssh (LISTEN)
cupsd 1709 root 12u IPv6 39148 0t0 TCP localhost:ipp (LISTEN)
cupsd 1709 root 13u IPv4 39149 0t0 TCP localhost:ipp (LISTEN)
smbd 1824 root 35u IPv6 17658 0t0 TCP *:microsoft-ds (LISTEN)
smbd 1824 root 36u IPv6 17659 0t0 TCP *:netbios-ssn (LISTEN)
smbd 1824 root 37u IPv4 17660 0t0 TCP *:microsoft-ds (LISTEN)
smbd 1824 root 38u IPv4 17661 0t0 TCP *:netbios-ssn (LISTEN)
列出指定进程ID打开的文件
进程ID是操作系统进程的唯一标识,以下命令列出了进程ID为 1053
相关的文件, 从结果中可以知道这个进程ID对应的进程是MySQL
[root@ecs-centos-7 ~]# lsof -p 1053
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1053 mysql cwd DIR 253,1 4096 1055765 /var/lib/mysql
mysqld 1053 mysql rtd DIR 253,1 4096 2 /
mysqld 1053 mysql txt REG 253,1 251841448 534935 /usr/sbin/mysqld
mysqld 1053 mysql mem REG 253,1 209512 659436 /usr/lib64/mysql/plugin/validate_password.so
mysqld 1053 mysql 1w REG 253,1 206658 924771 /var/log/mysqld.log
mysqld 1053 mysql 2w REG 253,1 206658 924771 /var/log/mysqld.log
上述命令中,-p
选项后面可以指定多个进程ID,每个进程ID之间用逗号分隔,如果想排除掉某个进程打开的文件,可以在该进程ID前面加上 ^
符号
lsof -p 1,2,3,^4
上述命令会列出进程1,进程2,进程3打开的所有文件,同时忽略进程4打开的文件
杀死指定用户的所有进程
前面介绍了列出指定用户所有打开的文件,我们可以组合 kill
命令一起使用,实现杀死指定用户的所有进程的功能,具体的命令如下
kill -9 `lsof -t -u tt`
上述命令中,lsof -u tt
是列出tt
用户所有打开的文件,加上 -t
选项之后表示结果只列出PID列,也就是进程ID列,其他列都忽略,前面的 kill -9
表示强制结束指定的进程ID