yokila
yokila
Published on 2024-09-06 / 20 Visits
0
0

Linux 常用命令&脚本

零、前言

命令测试基于环境:

  • 阿里云服务器

  • Ubuntu 22.04.3 LTS

本文将随着日常的 Linux 系统使用而逐步更新补充。

一、查看手册

命令示例(查看 ps 命令的手册文档):

man ps

效果如下:

44aeef32-325d-471c-91d6-2a059c2a1aa4.png

命令解释:

  • man:缩写自英文 manual,为 Linux 系统中用于查看手册页(manual pages)的工具。手册页提供了关于各种命令、配置文件、库函数和其他系统组件的详细文档。

可用以下命令查看更多操作参数:

man -h

二、列出当前文件夹各文件的大小

命令:

du -sh *

效果如下:

09197243-bc72-458e-acd1-09d409a847e6.png

命令解释:

  • du:缩写自英文 disk usage,顾名思义就是磁盘使用情况。所以这个命令专门用于显示目录或文件的大小。

  • -s:仅显示指定目录或文件的总大小,而不显示其子目录的大小。

  • -h:文件大小以K,M,G为单位,提高信息的可读性。

  • *:指定的文件为当前目录所有文件,可以换成文件名、目录名,也可以换成 . 表示查看当前目录大小。

可用以下命令查看更多操作参数:

du --help

三、查看占用内存前10的进程信息

命令:

ps aux --sort=-%mem | head -n 11

效果如下:

命令解释:

  • ps:缩写自英文 process status,顾名思义就是专门用于查看当前进程状态的命令。

  • aux:ps 的选项组合。

    • a:缩写自 all,显示所有用户的进程,包括其他用户的进程。不用这个选项的话,只显示当前用户的进程。

    • u:缩写自 user-oriented format,以用户友好的格式显示进程信息,即提供详细的进程信息,包括用户ID、CPU使用率、内存使用率等。不用这个选项的话,显示的进程信息会少一些。

    • x:显示没有控制终端的进程,确保不仅显示与终端关联的进程,还包括后台进程和其他没有控制终端的进程。不用这个选项的话,只显示 TTY != ? 的进程,即有控制终端的进程。

  • --sort=-%mem:按内存使用率降序排序

  • head -n 11:取前11行,包含表头和前10个进程

结果数据格式说明:

USER        PID    %CPU      %MEM        VSZ              RSS              TTY          STAT     START              TIME           COMMAND
进程拥有者 进程ID CPU使用率 内存使用率 虚拟内存占用大小 物理内存占用大小      进程控制终端    进程状态 进程启动时间   进程CPU占用的时间   进程启动命令和参数
  • USER:进程拥有者的用户名称

  • PID:缩写自 Process Identifier(进程标识符),每个进程在系统中都有一个唯一的 PID,由操作系统在进程启动时自动分配。我们可以利用这个 PID 指定进程进行一些操作,例如执行命令 kill 1 表示杀死 PID = 1 的进程。

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

  • %MEM:进程占用的物理内存使用率百分比。

  • VSZ:缩写自 Virtual Size(虚拟内存大小),表示 进程占用虚拟内存大小,以 KB 为单位。包括进程使用的全部内存,包括已分配但未使用的内存。

  • RSS:缩写自 Resident Set Size(常驻集大小),表示进程占用物理内存大小,以 KB 为单位。

  • TTY:缩写自 TeletypeWriter(电传打字机),属于是远古遗留的用语,现在表示的是进程的控制终端。? 表示没有控制终端,意味着这个进程一般是守护进程或者后台进程,不需要与终端交互。

  • STAT:进程的状态(有可能输出为 Ssstatestat)。状态代码可以组合出现,常见的状态代码包括:

    • R:正在运行中(Runing)或可运行(Runnable)(在运行队列中)。

    • S:可中断的休眠(interruptible sleep)(等待事件完成),此状态的进程不会占用 CPU 时间。

    • D:不可中断的休眠状态(Uninterruptible Sleep)(通常等待 I/O 操作完成)。

    • I:Idel kernel thread,一种特殊的内核线程,用于管理空闲 CPU 核心。每个 CPU 核心都有一个对应的 idle 线程,当该核心没有其他任务可执行时,idle 线程就会运行。它的主要作用是让空闲的 CPU 核心进入低功耗状态,从而节省能源。

    • T:被作业控制信号停止。

    • t:在跟踪期间被调试器停止。

    • W:分页中(自 2.6.xx 内核版本起无效)。

    • X:死亡进程(不应该出现)。

    • Z:僵尸进程(已经结束但父进程尚未回收其资源)。

    • 对于 BSD 格式,当使用 stat 关键字时,可能会显示其他字符:

      • <:高优先级(对其他用户不友好)。

      • N:低优先级(对其他用户友好)。

      • L:有部分页面锁定在内存中(用于实时(real-time)或 自定义IO)。

      • s:进程是会话领导者(session leader)

      • l:进程是多线程的(使用 CLONE_THREAD,就像 NPTL pthread 一样)

      • +:进程是位于前台进程组(foreground process group)中。前台进程组是当前与终端交互的进程组。这个进程组中的进程可以直接接收来自终端的输入,并且终端生成的信号(如 SIGINT、SIGQUIT、SIGTSTP 等)会发送给这个进程组中的所有进程。

  • START:进程启动的时间或日期,若是调用 ps 当天启动的则会直接显示时间(HH:MM,如:10:11),若是在是同一年则显示日期(如:Aug28),若是不在同一年则仅显示年份(如:2021)。

  • TIME:进程已使用的 CPU 时间,格式为 [dd-]hh:mm:ss([dd-] 表示天数部分为可选部分,超过一天才会显示)(实测也有可能显示为 mm:ss)。表示进程从启动到目前为止在 CPU 上执行的时间总和。这个时间不包括进程在等待 I/O 操作完成或其他阻塞状态下的时间,只计算实际占用 CPU 的时间。对于多线程进程,TIME 字段表示的是所有线程的 CPU 时间总和。

  • COMMAND:启动进程的命令及其参数。

可用以下命令查看更多操作参数:

ps --help

为什么执行时使用的命令为 nohup java -Xms256m -Xmx256m -jar halo.jar &,实际 ps 里输出是 java -Xms256m -Xmx256m -jar halo.jar?

答:

因为 nohup 命令用于忽略挂起信号(SIGHUP),不是 jar 包进程的一部分(nohup 自己将作为父进程,设置忽略挂起,调用 fork 创建 jar 包子进程,子进程自动继承了 nohup 父进程的信号处理行为)。nohup 是一个临时的外壳命令,用于设置进程的信号处理和输出重定向,在启动 Java 进程后会立即退出,不再存在于进程树中(启动过程中短暂存在)。

& 符号用于将命令放入后台执行。然而,& 符号并不是进程的一部分,而是 shell 的语法,用于指示命令在后台运行。& 符号在命令执行后会被 shell 解析并处理,然后 shell 会继续执行其他命令。

ps 命令只会显示实际运行的 Java 进程,也就是输出的那块内容。

四、查看系统时间同步情况

命令:

timedatectl status

执行结果示例:

QQ20241203-221008.png

命令解释:

  • timedatectl:缩写自 time date control,用于查询或修改系统时间和日期设置。

  • status:显示当前时间设置。

结果数据说明:

  • Local time:当前系统本地时间。CST 为 China Standard Time 的缩写,表示中国标准时间。

  • Universal time:当前系统的协调世界时间(UT),即世界时,通常指的是0时区的时间,但是某些场景下可能有微小的偏差。

  • RTC time:实时时钟(Real-Time Clock, RTC)的时间,n/a表示没有获取到 RTC 时间。RTC (Real-Time Clock) 是一种用于测量和跟踪时间的电子设备,通常集成在计算机主板或其他电子设备中。RTC 的主要功能是在系统关机或断电的情况下,仍然能够持续提供准确的时间和日期信息。RTC 时间是硬件时钟提供的时间,通常通过 hwclock 命令读取和设置。RTC 时间通常会在系统关机时用系统时间同步校正。

  • Time zone:当前系统设置的时区。

  • System clock synchronized:显示系统时钟是否已与网络时间同步。yes 表示已与网络时间同步,no 表示未同步。

  • NTP service:显示当前 NTP 服务的状态,active 表示正在运行,inactive 表示未运行。NTP 为 Network Time Protocol 的缩写。

  • RTC in local TZ:显示 RTC 是否设置为本地时区。

如何快速获取系统使用的 NTP 服务?

答:经过 tongyilingma + NewBing + 网页人工 的检索,没有发现好思路,基本都是把所有有可能在用的 NTP 服务都检索一遍有无在运行(如用 systemctl 命令看服务状态),然后知道系统用的是哪个 NTP 服务。但是这样如果用的正好是小众的 NTP 服务,就会遗漏掉。不过一般云服务器啥的,用的都是比较常见的服务,如 ntpd、chrony、systemd-timesyncd、OpenNTPD 和 NTPsec。如我的阿里云服务器,用的就是 chrony。

五、查看系统重启日志

命令:

last reboot

输出如下:

67957b4f-963e-4837-96fa-d1e9046c1052.png

命令解释:

  • last: Linux 系统中用于显示用户登录和系统重启记录的工具。它从 /var/log/wtmp 文件中读取记录,并显示用户登录、注销、系统重启和关机的时间信息。wtmp 文件由系统自动生成和维护,主要用于系统管理和审计。

  • reboot:系统重启时,系统会使用 reboot 作为用户名在 wtmp 文件中进行记录。这里是作为依据用户名检索的检索条件。

结果数据格式说明:

  • 用户名:用户名

    • 若是普通用户登录,则显示用户的用户名。

    • 若是系统重启,则用户名为 reboot(即便是某个用户操作的)。

    • 若是关机,则用户名为 shutdown(即便是某个用户操作的)。

  • 终端:终端名。

    • 若是用户通过 ssh 之类的伪终端(Pseudo Terminal Slave)登录,则显示为 pts/0 之类。

    • 若是系统重启,则显示 system boot(即便是某个用户操作的)。

    • 若是系统关机,则显示 system down(即便是某个用户操作的)。

  • 来源地址:用户登录的来源地址。

    • 若是普通用户登录,则显示用户来源地址,如:IP地址。

    • 若是系统重启/系统关机,则显示 系统启动时使用的内核版本

  • 登录时间:用户登录的时间 或 系统启动的时间。

  • 注销时间:用户退出登录的时间 或 系统关机的时间。

    • 若是系统正在运行,没有关机,则显示 still running

    • 若是用户还未退出登录,则显示 still logged in

  • 持续时间:用户登录后到退出登录的持续时间 或 系统启动到关机持续的时间。

查看系统关机记录命令:

last shutdown

查看所有记录(包括系统重启、系统关机、用户登录):

last

六、系统启动时自动执行脚本

可以利用 cron 来设置,建议阅读:Linux定时任务(cron)

七、查看内核版本

命令:

uname -a

输出如下:

3c3e2a75-4a43-46de-8e00-5cae5ed57a64.png

命令解释:

  • uname:缩写自英文 unix name,一个常用的 Unix 和类 Unix 操作系统(如 Linux)命令,用于显示系统的相关信息。

  • -a:显示全部的信息

结果数据格式说明:

内核名称   主机名          内核版本            内核编译版本 对称多处理    发行时间                     机器硬件架构 处理器类型 硬件平台 操作系统
Linux     iZ7xxxxxxammstZ 5.15.0-92-generic #102-Ubuntu    SMP      Wed Jan 10 09:33:48 UTC 2024   x86_64      x86_64   x86_64 GNU/Linux
  • kernel name(内核名称):表示当前系统使用的内核名称(如:Linux)。

  • network node hostname(主机名):表示当前主机的名称(如:iZ7xxxxxxammstZ)。主机名通常是系统管理员或云服务提供商设置的。

  • kernel release(内核发布版本):表示当前系统使用的内核版本(如:5.15.0-92-generic)。

    • 5.15.0:主版本号。

    • 92:修订版本号。

    • generic:表示这是一个通用内核,适用于多种硬件配置。

  • kernel version(内核版本信息):(如:#102-Ubuntu SMP Wed Jan 10 09:33:48 UTC 2024)

    • 内核编译版本:表示内核编译的版本号(如:#102-Ubuntu,表示这是 Ubuntu 发行版的第 102 次编译)。

    • 对称多处理:SMP 表示内核支持对称多处理(Symmetric Multi-Processing)。这意味着内核可以在多核处理器上运行。

    • 编译日期和时间:表示内核编译的日期和时间(如:Wed Jan 10 09:33:48 UTC 2024,表示内核编译于 2024 年 1 月 10 日 09:33:48 UTC)。

  • machine hardware name(机器硬件架构):表示系统的硬件架构(如:x86_64,即 64 位 Intel 或 AMD 处理器)。

  • processor type(处理器类型):表示处理器的类型(如:x86_64)。

  • hardware platform(硬件平台):表示硬件平台(如:x86_64)。

  • operating system(操作系统):表示当前系统使用的操作系统(如:GNU/Linux,表示这是一个基于 GNU 工具集的 Linux 系统)。


Comment