Linux - 常用指令
最近更新:2025-10-20   |   字数总计:3.1k   |   阅读估时:13分钟   |   阅读量:
  1. Linux - 常用指令
    1. 查看网络 - netstat
    2. 系统运行状态 - top
      1. 输出解释
        1. 系统信息部分
        2. 任务和 CPU 使用情况
        3. 内存和交换区使用情况
        4. 进程列表部分
      2. 使用技巧
    3. 内存使用 - free
      1. 输出解释
    4. 管理服务 - systemctl
      1. systemctl status [service]
      2. systemctl start [service]
      3. systemctl stop [service]
      4. systemctl restart [service]
      5. systemctl reload [service]
      6. systemctl enable [service]
      7. systemctl disable [service]
    5. 文本编辑器 - vim
      1. 基本模式
      2. 常用命令
        1. 普通模式操作
        2. 插入模式操作
        3. 命令模式操作
    6. Docker
      1. docker ps
      2. docker images
      3. docker network ls
      4. docker logs <container_id> --tail 5
      5. docker-compose up -d
      6. docker-compose down
      7. docker-compose restart
      8. docker volume ls
      9. docker volume inspect my_volume
      10. docker stats

Linux - 常用指令

除了简单的cdcatls等简单的指令,其他的稍微复杂一点的指令几乎我一般是问chatGPT,有一些可能在做实验和项目的时候会经常用到,当时记得挺清楚,但是时间一久还是容易忘记。

所以创建这篇博客,记录一下我所用到的一些比较常用的指令。

(持续更新)

查看网络 - netstat

1
netstat -tuln

-t:显示 TCP 连接。

-u:显示 UDP 连接。

-l:仅显示在监听状态的连接(即正在等待传入连接的端口)。

-n:以数字形式显示地址和端口号,而不是尝试解析为主机名或服务名。


一个可能的输出如下:

1
2
3
4
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
udp 0 0 0.0.0.0:123 0.0.0.0:*

输出字段解释:

Proto: 协议类型(tcpudptcp6udp6 等)。

Recv-Q: 接收队列的字节数。表示当前接收队列中有多少字节数据尚未处理。

Send-Q: 发送队列的字节数。表示当前发送队列中有多少字节数据尚未发送。

Local Address: 本地地址和端口。格式为 [IP地址]:[端口号]。如果是 IPv6 地址,则显示为 [IPv6地址]:[端口号]

Foreign Address: 外部地址和端口。对于监听状态的连接,这一列显示为 *

State: 连接状态(如 LISTENESTABLISHEDCLOSE_WAIT 等)。对于监听端口,状态通常为 LISTEN

系统运行状态 - top

输出解释

一个可能的输出:

1
2
3
4
5
6
7
8
9
10
11
top - 07:55:07 up  4:32,  1 user,  load average: 0.07, 0.04, 0.03
Tasks: 111 total, 2 running, 108 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 96.3 id, 2.7 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 883.6 total, 76.0 free, 444.9 used, 362.8 buff/cache
MiB Swap: 16384.0 total, 15961.9 free, 422.1 used. 288.9 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1307 lxd 20 0 1326048 140896 24064 S 1.0 15.6 1:41.15 mysqld
1188 root 20 0 1597956 3164 2944 S 0.3 0.3 0:02.32 docker-proxy
3763 lxd 20 0 168724 78584 15744 S 0.3 8.7 0:15.36 python3
1 root 20 0 167664 10196 6912 S 0.0 1.1 0:04.10 systemd

系统信息部分

1
top - 07:55:07 up  4:32,  1 user,  load average: 0.07, 0.04, 0.03
  • 07:55:07:当前系统时间。
  • up 4:32:系统已经运行了 4 小时 32 分钟。
  • 1 user:当前有 1 个用户登录。
  • load average: 0.07, 0.04, 0.03:系统的负载平均值,分别表示过去 1 分钟、5 分钟和 15 分钟的平均负载。数值越低,表示系统越空闲。

任务和 CPU 使用情况

1
2
Tasks: 111 total,   2 running, 108 sleeping,   1 stopped,   0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 96.3 id, 2.7 wa, 0.0 hi, 0.0 si, 0.0 st

Tasks

  • 111 total:总共有 111 个任务(进程)。
  • 2 running:有 2 个任务正在运行。
  • 108 sleeping:有 108 个任务处于休眠状态。
  • 1 stopped:有 1 个任务被停止。
  • 0 zombie:没有僵尸进程。

**%Cpu(s)**:

  • 0.7 us:用户态 CPU 使用百分比。
  • 0.3 sy:系统态 CPU 使用百分比。
  • 0.0 ni:改变优先级的进程使用的 CPU 百分比。
  • 96.3 id:空闲 CPU 百分比。
  • 2.7 wa:等待 I/O 操作的 CPU 百分比。
  • 0.0 hi:硬中断的 CPU 百分比。
  • 0.0 si:软件中断的 CPU 百分比。
  • 0.0 st:被虚拟机偷取的 CPU 百分比。

内存和交换区使用情况

1
2
MiB Mem :    883.6 total,     76.0 free,    444.9 used,    362.8 buff/cache
MiB Swap: 16384.0 total, 15961.9 free, 422.1 used. 288.9 avail Mem

Mem(内存):

  • 883.6 total:总内存为 883.6 MiB。
  • 76.0 free:空闲内存为 76.0 MiB。
  • 444.9 used:已用内存为 444.9 MiB。
  • 362.8 buff/cache:缓存和缓冲区使用的内存为 362.8 MiB。

Swap(交换区):

  • 16384.0 total:总交换区为 16384.0 MiB。
  • 15961.9 free:空闲交换区为 15961.9 MiB。
  • 422.1 used:已用交换区为 422.1 MiB。
  • 288.9 avail Mem:可用内存为 288.9 MiB。

进程列表部分

1
2
3
4
5
 PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1307 lxd 20 0 1326048 140896 24064 S 1.0 15.6 1:41.15 mysqld
1188 root 20 0 1597956 3164 2944 S 0.3 0.3 0:02.32 docker-proxy
3763 lxd 20 0 168724 78584 15744 S 0.3 8.7 0:15.36 python3
1 root 20 0 167664 10196 6912 S 0.0 1.1 0:04.10 systemd

PID:进程 ID。

USER:启动进程的用户。

PR:进程优先级。

NI:进程的 nice 值。

VIRT:进程使用的虚拟内存量。 (KB)

RES:进程使用的实际物理内存量。 (KB)

SHR:进程共享的内存量。 (KB)

S:进程状态(S=睡眠,R=运行,Z=僵尸,T=停止等)。

%CPU:进程使用的 CPU 百分比。

%MEM:进程使用的内存百分比。

**TIME+**:进程的总 CPU 时间。

COMMAND:进程的命令名。

使用技巧

top 命令的交互操作:

  • q 退出 top
  • P 根据 CPU 使用率排序进程。
  • M 根据内存使用量排序进程。
  • N 根据进程 ID 排序进程。
  • R 反转排序顺序。

定时刷新:

  • 默认情况下,top 每 3 秒刷新一次。可以通过 -d 参数指定自定义刷新间隔。例如,top -d 5 每 5 秒刷新一次。

内存使用 - free

free 命令用于显示系统的内存使用情况,包括物理内存(RAM)和交换内存(swap)。它可以帮助你快速了解系统的内存资源使用情况。

可以有以下选项:

-h:以人类可读的格式显示(例如,GB 和 MB)。

-m:以 MB 为单位显示。

-g:以 GB 为单位显示。

-t:显示总内存和交换内存的统计信息。

输出解释

一个可能的输出如下:

1
2
3
               total        used        free      shared  buff/cache   available
Mem: 883Mi 438Mi 116Mi 3.0Mi 328Mi 295Mi
Swap: 15Gi 426Mi 15Gi

内存使用情况:系统总共有 883 MiB 的物理内存,其中 438 MiB 已被使用,116 MiB 是空闲的,还有 328 MiB 用于缓存和缓冲。可用内存为 295 MiB。

交换空间使用情况:系统总共有 15 GiB 的交换内存,其中 426 MiB 已被使用,剩余的 15 GiB 是空闲的。

可以看出系统的内存使用情况相对较低,缓存的内存也在合理范围内,交换空间使用量不大。这通常意味着系统性能较好,没有特别严重的内存压力。

管理服务 - systemctl

systemctl 是一个用于管理和控制系统和服务的工具,主要用于与 systemd 系统和服务管理器交互。允许启动、停止、重启、查看状态等操作服务和系统单元。

systemctl status [service]

例如,查看apache2服务状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-07-29 03:23:18 UTC; 5h 12min ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 675 (apache2)
Tasks: 55 (limit: 1053)
Memory: 16.5M
CPU: 1.773s
CGroup: /system.slice/apache2.service
├─675 /usr/sbin/apache2 -k start
├─716 /usr/sbin/apache2 -k start
└─717 /usr/sbin/apache2 -k start

Jul 29 03:23:17 Azure-jay1an systemd[1]: Starting The Apache HTTP Server...
Jul 29 03:23:18 Azure-jay1an systemd[1]: Started The Apache HTTP Server.

systemctl start [service]

  • 启动一个服务,例如 systemctl start nginx
  • 启动指定的服务,并使其开始运行。

systemctl stop [service]

  • 停止一个服务,例如 systemctl stop nginx
  • 停止指定的服务,使其不再运行。

systemctl restart [service]

  • 重新启动一个服务,例如 systemctl restart nginx
  • 停止并重新启动指定的服务,这对于应用配置变更时特别有用。

在服务的配置改变之后,应用新配置需要用到该命令。

systemctl reload [service]

  • 重新加载一个服务的配置,例如 systemctl reload nginx
  • 使服务重新加载其配置文件,而无需完全重启。

systemctl enable [service]

  • 设置服务开机启动,例如 systemctl enable nginx
  • 配置服务在系统启动时自动启动。

systemctl disable [service]

  • 禁用服务开机启动,例如 systemctl disable nginx
  • 配置服务在系统启动时不自动启动。

文本编辑器 - vim

是 vi 的升级版

基本模式

vim 有三种基本模式:

  1. 普通模式(Normal Mode):这是 vim 的默认模式,在这个模式下,你可以进行文本导航、删除、复制等操作。按 Esc 键可以进入普通模式。
  2. 插入模式(Insert Mode):在这个模式下,你可以插入和编辑文本。按 i(在光标前插入)、I(在行首插入)、a(在光标后插入)、A(在行尾插入)进入插入模式。按 Esc 返回普通模式。
  3. 命令模式(Command Mode):在这个模式下,你可以输入命令来执行特定操作,比如保存文件、退出等。按 : 进入命令模式,输入命令后按 Enter 执行。

常用命令

普通模式操作

  • 移动光标
    • h:左移
    • j:下移
    • k:上移
    • l:右移
    • 0:跳到行首
    • $:跳到行尾
    • gg:跳到文件开头
    • G:跳到文件末尾
  • 删除文本
    • x:删除光标处的字符
    • dd:删除当前行
    • d$:删除光标到行尾的内容
    • d0:删除光标到行首的内容
  • 复制和粘贴
    • yy:复制当前行
    • p(小写p):将复制的内容粘贴到当前行的下一行
    • P(大写P):粘贴到当前行的上一行
  • 撤销和重做
    • u:撤销上一个操作
  • 查找和替换
    • /pattern:查找 pattern,按 n 跳到下一个匹配,按 N 跳到上一个匹配
    • :s/old/new/:在当前行替换 oldnew
    • :%s/old/new/g:在整个文件中替换 oldnew

插入模式操作

  • 在插入模式下,直接编辑即可。

命令模式操作

  • 保存和退出
    • :w:保存文件
    • :q:退出 vim
    • :wq:x:保存文件并退出 vim
    • :q!:强制退出而不保存更改
  • 其他命令
    • :e filename:编辑指定的文件
    • :r filename:将指定文件的内容插入到当前文件中
    • :!command:在 vim 中执行外部命令

清空文件就是ggdGgg将光标移动到文件的第一行,dvim 中的删除命令的前缀,G 表示文件的最后一行。因此,dG 意味着从当前光标位置(文件的第一行)删除到文件的最后一行的所有内容。所以合起来就是清空文件。

Docker

docker ps

列出所有正在运行的容器。

-a 选项列出所有容器。

相关指令:

docker start <container_id>

docker stop <container_id>

docker rm <container_id>

docker rm -f <container_id> 强制删除一个运行中的容器

docker images

列出所有镜像

相关指令:

docker pull <image_name> 从 Docker 仓库拉取一个镜像。

docker rmi <image_id>

docker inspect <image_id>

docker network ls

列出所有Docker网络。

docker logs <container_id> --tail 5

查看某个Docker容器日志的最后50行。

docker-compose up -d

以分离模式(在后台运行)启动docker-compose.yml文件中定义的Docker服务。

docker-compose down

停止并移除docker-compose.yml文件中定义的Docker服务。

docker-compose restart

docker-compose restart 命令用于重新启动已经运行的容器。它不会重新创建容器,也不会重新加载任何配置文件的变化

docker-compose downdocker-compose up

docker-compose down 命令会停止并移除容器、网络、卷和镜像(停止和删除所有相关资源)。docker-compose up 命令会创建并启动所有服务。

会重新加载配置文件的变化,容器会被重新创建,之前的容器中的数据和状态会丢失(除非使用卷来持久化数据)

docker volume ls

列出所有Docker卷。

docker volume inspect my_volume

显示名为 my_volume 的卷的详细信息。

docker stats

docker stats 命令用于显示正在运行的容器的实时资源使用统计信息,包括 CPU 使用率、内存使用情况、网络 I/O 和磁盘 I/O 等。

--no-stream 只显示一次统计信息

1
2
3
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
83388cf01d3b cowrie_cowrie_1 0.00% 60.11MiB / 883.6MiB 6.80% 4.81MB / 5.34MB 6.39MB / 14.9MB 2
dfb2032ec83c mysql_container 0.55% 137.5MiB / 883.6MiB 15.56% 3.14MB / 2.95MB 162MB / 1.02GB 48

MEM USAGE / LIMIT: 内存使用量与内存限制。

MEM %: 内存使用百分比。

NET I/O: 网络输入/输出数据量。

BLOCK I/O: 磁盘输入/输出数据量。