不常用命令指南
常用命令网上资料很多,讲的也不错。这里记录下日常工作中用到的,但对于新手又不常用的命令
文章目录
- 信息相关
- 进程相关
- `htop`
- `pgrep`(根据指定的条件获取进程id)
- `lsof`
- 网络相关
- `ss`
- `nc`(netcat)
信息相关
进程相关
htop
htop
是一个在 Linux 系统中常用的命令行工具,它用于监控系统资源的使用情况,提供比传统的 top 命令更为丰富和友好的界面。htop 可以显示 CPU、内存、交换空间(swap)、进程信息等实时数据,同时支持对进程进行排序、筛选和交互式操作。
官网地址: https://htop.dev/
主要功能与特点:
实时监控:
显示系统的 CPU、内存、交换空间、进程状态等实时信息。
提供每个核心的 CPU 使用率,可以帮助你查看多核 CPU 的负载情况。
交互式操作:
htop 提供了丰富的交互功能,你可以直接在命令行中使用上下箭头、F键等操作对进程进行管理。
可以对进程进行排序(例如按 CPU 使用率、内存使用率等),通过 F6 可以选择排序方式。
支持杀死进程(通过选择进程后按 F9),方便系统管理员在遇到死锁或高负载时终止进程。
进程树视图:
htop 可以以树状结构显示进程间的父子关系,帮助用户理解进程的层级和依赖。
过滤与搜索:
通过 F3
键可以对进程进行搜索,快速定位你感兴趣的进程。
通过 F4
键进行进程过滤,可以根据进程的名称、PID 等信息筛选进程。
显示定制:
你可以定制显示的字段,包括 CPU、内存、用户、状态等信息。可以通过 F2
键进入设置界面进行定制。
颜色高亮:
htop 使用不同的颜色来高亮显示系统资源的使用情况,帮助用户快速识别瓶颈部分。
pgrep
(根据指定的条件获取进程id)
pgrep
是一个用于查找当前系统中符合特定条件的进程的命令。它的功能是通过进程名、用户、进程ID等条件来匹配进程,并返回匹配进程的进程ID(PID)。pgrep 是一个非常实用的工具,尤其适用于在脚本中自动化处理进程管理。
pgrep [选项] [匹配字符串]
# 根据进程名称查找进程: 最常见的用法是通过进程名来查找进程ID。
# 这也是最常用的方式
pgrep <process_name>
# 例如,查找名为 apache2 的进程:
pgrep apache2#使用正则表达式匹配进程名: pgrep 允许使用正则表达式来匹配进程名称。
# -f 选项会让 pgrep 匹配进程的完整命令行,而不仅仅是进程名称。
pgrep -f <'pattern'>
# 例如,查找命令行中包含 apache 的进程:
pgrep -f apache# 显示进程的详细信息: -a 选项可以列出匹配的进程ID和进程名:
pgrep -a <process_name># 根据用户查找进程: -u 选项允许你根据用户来过滤进程。你可以指定用户名或用户ID(UID):
pgrep -u username
# 例如,查找所有由用户 www-data 启动的进程:
pgrep -u www-data# 查找指定进程的父进程: -P 选项允许你查找某个进程的子进程:
pgrep -P parent_pid
# 例如,查找进程ID为 1234 的所有子进程:
pgrep -P 1234# 查找进程的进程组ID(PGID): -G 选项允许你根据进程组ID来查找进程:
pgrep -G <pgrp_id>
lsof
lsof
(List Open Files)是一个在 Linux 和类 Unix 系统中使用的命令行工具,用于列出当前系统中所有打开的文件及相关的进程信息。它不仅可以显示文件,还能列出与网络连接、设备、管道等相关的打开资源,因此在系统管理和故障排除中非常有用。
在 linux 中,一切皆文件。
# 示例输出
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# nginx 12345 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)# 列出当前系统中所有进程打开的文件(包括设备文件、网络连接、管道等)
lsof# 通过 -p 参数指定进程 ID(PID),查看该进程打开的文件
lsof -p <PID># 指定一个字符串来过滤进程名,显示以该字符串开头的进程所打开的文件
lsof -c <process-name-prefix>
# 会列出所有以ls开头的进程,如:lsmod
lsof -c ls# 使用 -u 参数,可以查看某个用户(或多个用户)打开的所有文件
lsof -u <username># 某个文件(或目录)被哪个进程打开
lsof <filename># 列出所有当前打开的网络连接,包括 TCP 和 UDP 连接
lsof -i
lsof -i tcp
lsof -i udp
lsof -i :80
lsof -i tcp:80# 查看某个进程(例如 PID 1234)占用了哪些网络端口,可以结合使用 -p 和 -i 参数
lsof -p <pid> -i# 查看哪些文件被锁定。使用 -l 参数可以显示锁定文件的信息
lsof -l# 有时文件可能已经被删除,但某个进程仍然保持着该文件的打开句柄。使用 lsof 可以查看这些文件
lsof | grep deleted# 文件描述符(File Descriptors, FD)表示文件在内核中的标识符。lsof 显示的输出中会包括文件描述符的信息(如 cwd、txt、mem 等)。你可以通过这些信息了解进程如何使用文件
# 你可以使用 -t 来过滤文件类型。常见的文件类型包括:
# txt:普通文件
# cwd:当前工作目录
# mem:内存映射文件
# reg:常规文件
# chr:字符设备
# dir:目录
lsof -p <PID> -d <FD>
网络相关
ss
ss
(Socket Statictics)是一个在 Linux 系统中用来查看网络连接状态的命令,通常用于查看系统中打开的套接字(sockets),包括 TCP、UDP 连接、监听的端口、进程 ID 等信息。它比传统的 netstat
命令更加高效且提供了更多的功能和更简洁的输出。
ss -lntup
- -l 查看所有监听(listening)端口
- -u 查看所有 UDP 连接
- -t 查看所有 TCP 连接
- -p 显示每个监听端口对应的进程名称和 PID(进程 ID)
- -n 显示数字形式的端口和 IP 地址(避免 DNS 解析)
nc
(netcat)
功能非常全面,建议自行搜索学习。这里简单介绍下。
nc
(Netcat)是一个非常强大且灵活的命令行工具,用于网络连接、端口扫描、数据传输等操作。它通常被称为“网络工具的瑞士军刀”,因为它的功能十分广泛,可以用来调试和分析网络连接,也可以作为一个简单的客户端或服务器进行数据传输。
nc 默认使用 TCP 协议,如果想使用 UDP 协议,可以使用 -u
显式指定。
# 测试网络连接是否正常
nc <host|ip> <port># 创建一个简单的 TCP 服务器,监听指定的端口,并等待客户端连接
nc -l <port>
# 创建一个简单的 TCP 服务器,并把指定的文件发送给客户端
nc -l <port> < /path/filename# 扫描远程主机的多个端口,以检测哪些端口是开放的
# -z:告诉 nc 不发送任何数据,只测试端口是否开放
# -v:启用详细输出,显示哪些端口是开放的
nc -zv <host|ip> <start-port>-<end-port>
nc -zv <host|ip> <port># 使用 TCP 向目标发送文件
nc <receiver_host> <port> < file.txt
# 服务端接收数据,并保存为文件
nc -l <port> > received_file.txt# 因为默认使用 TCP 协议,因此可以模拟所有其他基于 TCP 的应用层协议。比如:HTTP 协议
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80