当前位置: 首页 > news >正文

Linux系统登录用户查看全解析:从w、who到last命令的运维实战

1. 项目概述:为什么我们需要关注登录用户

在任何一个多用户的Linux服务器或者工作站上,搞清楚“谁正在使用这台机器”是一个系统管理员、运维工程师乃至普通开发者都需要掌握的基础技能。这听起来简单,但背后的场景却非常实际:你可能需要重启一台服务器,但得先确认有没有同事正在上面跑一个耗时很长的编译任务;你可能发现系统负载异常,需要排查是哪个用户进程在“搞事情”;又或者,出于安全审计的要求,你需要定期记录系统的登录情况。我自己在管理几十台线上服务器时,就经常需要快速定位登录用户,以便进行安全的维护操作或响应安全事件。

今天,我们就来深入聊聊在Linux系统中列出登录用户的几种方法。这不仅仅是记住几个命令那么简单,我会结合自己多年的运维经验,为你拆解每个命令的底层原理、适用场景、输出解读,以及那些官方手册里不会写的“坑”和实用技巧。无论你是刚接触Linux的新手,还是想深化理解的资深用户,这篇文章都能让你对“谁在线上”这个问题了如指掌。

2. 核心思路与数据来源解析

在动手敲命令之前,我们先花点时间理解一下核心思路:Linux系统是如何知道谁登录了的?理解了这一点,你就能举一反三,甚至在命令输出异常时自己动手排查。

2.1 用户登录信息的“仓库”:/var/run/utmp, /var/log/wtmp 与 /proc

Linux系统关于用户登录会话的信息,主要存储在几个关键的文件里,而我们所使用的各种命令,本质上都是这些文件的“阅读器”或“解析器”。

第一个核心文件是/var/run/utmp。这个文件记录了当前系统的登录会话信息。它是一个二进制文件,你不能直接用cat命令查看其可读内容。w,who,users命令读取的都是这个文件。当用户登录时,一条记录会被写入utmp;当用户注销时,对应的记录会被删除。所以,utmp可以看作是“当前在线用户名单”的实时数据库。

第二个重要文件是/var/log/wtmp。这个文件是utmp的历史日志,它记录的是所有的登录和注销事件。这是一个不断追加写入的二进制日志文件。last命令的主要数据来源就是它。因为wtmp会一直增长,所以通常需要由logrotate等工具定期进行轮转和清理,以防止磁盘被撑满。

第三个信息来源是/proc文件系统/proc是一个虚拟文件系统,它提供了内核数据结构的一个接口,以文件的形式呈现。许多命令(如w命令显示的进程信息)会结合/proc中进程的状态信息,来丰富输出内容,例如关联用户登录的终端(TTY)和该终端上正在运行的进程。

注意/var/run/utmp在某些发行版中可能是一个指向/run/utmp的符号链接。这是现代Linux系统将易变运行时数据移至/run目录的趋势所致。无论路径如何,其功能是相同的。

2.2 方法选型:从简到繁,各取所需

知道了数据从哪来,我们就能理解为什么会有不同的命令,以及它们各自适合什么场景:

  • 只想看用户名:用users,输出最干净,适合脚本处理。
  • 看基本信息(谁、从哪来、何时登录):用who,格式规整,一目了然。
  • 需要详细信息(在做什么、系统负载):用w,信息最全面,是交互式排查的首选。
  • 查看历史登录记录:用last,用于安全审计或追溯问题。
  • 获取更丰富的用户信息(如全名):用finger,但需要额外安装。

下面,我们就逐一拆解这些命令,看看它们到底怎么用,输出又该怎么看。

3. 核心命令详解与实操指南

3.1w命令:一站式信息面板

w命令是我日常使用频率最高的命令,没有之一。它就像一个系统状态的迷你仪表盘,把用户、负载、进程信息都整合在了一起。

基本使用与输出解读直接输入w即可:

$ w 10:30:15 up 45 days, 20:15, 3 users, load average: 0.08, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.1.100 09:37 5.00s 0.05s 0.00s sshd: root@pts/0 alice pts/1 203.0.113.5 10:15 15:00 0.10s 0.10s -bash bob :0 :0 08:55 ?xdm? 1:45m 0.20s /usr/lib/xorg/Xorg

我们来逐行、逐列拆解:

  1. 第一行是系统概要

    • 10:30:15:当前系统时间。
    • up 45 days, 20:15:系统已运行时间(uptime),这里是45天20小时15分钟,对判断服务器稳定性很有参考价值。
    • 3 users:当前登录用户总数。
    • load average: 0.08, 0.03, 0.05:系统在过去1分钟、5分钟、15分钟的平均负载。这个值需要结合CPU核心数来看。例如,对于4核CPU,如果1分钟负载长期高于4,就可能存在CPU资源瓶颈。
  2. 从第二行开始是用户详情表

    • USER:登录的用户名。
    • TTY:用户登录的终端设备。
      • pts/0,pts/1:伪终端,通常代表通过SSH或终端模拟器进行的远程登录。
      • :0tty7:通常代表本地图形界面登录(如连接到X服务器的会话)。
      • tty1,tty2:本地文本控制台。
    • FROM:远程登录主机的IP地址或主机名。本地登录显示为:0或空。
    • LOGIN@:用户登录的时间。
    • IDLE:用户空闲时间。5.00s表示空闲5秒,15:00表示空闲15分钟,?xdm?通常表示图形界面会话的空闲时间计算方式特殊。
    • JCPU:附加到该TTY的所有进程使用的总CPU时间。1:45m表示1小时45分钟。
    • PCPU:当前进程(WHAT列显示的进程)使用的CPU时间。
    • WHAT:用户当前正在执行的命令。-bash表示一个登录shell,sshd: root@pts/0是SSH守护进程为该会话派生的进程,从这里你可以看到用户是通过什么方式登录的。

高级用法与实操心得

  • 查看指定用户w <用户名>,例如w alice,只查看alice的信息。
  • 精简输出w -hw --no-header,不显示首行概要信息,这在编写脚本提取数据时非常有用。
  • 隐藏FROM列w -f可以切换是否显示FROM列。在某些安全要求高的环境,可能不希望显示登录来源IP。

踩坑记录IDLE时间的计算方式有时会“骗人”。对于图形界面(如通过GDM、LightDM登录的桌面环境),其IDLE可能一直显示为?xdm?,无法准确反映用户是否在操作。判断图形用户是否活跃,可能需要结合who命令的-u参数查看其进程,或者检查桌面环境特定的锁屏状态。

3.2who命令:清晰规整的登录清单

如果w命令的输出对你来说信息过载,那么who命令提供了更简洁、格式化的视图。

基本使用与输出解读

$ who root pts/0 2024-10-27 09:37 (192.168.1.100) alice pts/1 2024-10-27 10:15 (203.0.113.5) bob :0 2024-10-27 08:55 (:0)

各列含义清晰:

  • 用户名
  • 终端(TTY)
  • 登录日期和时间(格式可能因系统区域设置而异)
  • 来源地址(远程IP或本地显示)

实用参数解析who命令的参数非常实用,能应对特定场景:

  • who -b:显示系统最后一次启动的时间。这在排查“服务器是不是重启过”的问题时立竿见影。
    $ who -b system boot 2024-09-12 14:15
  • who -r:显示当前的运行级别(runlevel)。对于使用Systemd的系统,这会显示目标(target)。
    $ who -r run-level 5 2024-09-12 14:15
  • who -a:显示所有信息,包括utmp中记录的进程ID、退出状态等,信息量巨大,常用于深度调试。
    $ who -a system boot 2024-09-12 14:15 run-level 5 2024-09-12 14:15 LOGIN tty1 2024-09-12 14:15 1070 id=tty1 root + pts/0 2024-10-27 09:37 old 3128 (192.168.1.100)
  • who -uwho --users:在每行末尾额外显示用户的进程ID(PID)和空闲时间,是who命令里信息比较丰富的格式。

whow的选择:如果你只需要知道“谁、从哪里、何时登录”,who的输出更干净利落。如果你还需要知道“他们在干什么”和“系统整体负载”,那么w是更好的选择。

3.3users命令:极简主义的用户名列表

这个命令简单到极致,它只做一件事:输出当前所有登录用户的用户名,用空格分隔。

$ users alice bob root

核心应用场景:脚本处理它的价值就在于其极简的输出格式。当你在写一个Shell脚本,需要获取登录用户列表进行后续处理(比如循环发送通知、检查特定用户是否在线)时,users命令的输出无需复杂的文本解析(如awk,cut),直接配合for循环或grep就能使用。

例如,检查用户alice是否在线:

if users | grep -q '\<alice\>'; then echo "Alice is logged in." else echo "Alice is not logged in." fi

这里使用\<\>单词边界标记,是为了避免匹配到包含“alice”子串的其他用户名(如“alicebob”)。

3.4finger命令:被遗忘的“瑞士军刀”

finger是一个上古神器,它能显示的用户信息比who更丰富,包括用户的真实姓名、办公室位置、电话等(这些信息来自/etc/passwd/etc/gecos字段)。但由于安全和历史原因,许多现代Linux发行版默认不再安装它。

安装与基本使用在Ubuntu/Debian上安装:sudo apt install finger在CentOS/RHEL上安装:sudo yum install fingersudo dnf install finger

安装后,直接运行finger查看登录用户:

$ finger Login Name Tty Idle Login Time Office Office Phone alice Alice Doe pts/1 15 Oct 27 10:15 (203.0.113.5) bob Bob Smith :0 Oct 27 08:55 (:0) root root pts/0 5 Oct 27 09:37 (192.168.1.100)

可以看到,它比who多了Name(全名)列。你还可以使用finger <用户名>来查询特定用户的详细信息,无论其是否登录,只要用户在系统中有账户即可。

$ finger alice Login: alice Name: Alice Doe Directory: /home/alice Shell: /bin/bash On since Sat Oct 27 10:15 (CST) on pts/1 from 203.0.113.5 15 minutes 25 seconds idle No mail. No Plan.

为什么它不再流行?

  1. 安全风险finger服务(fingerd)在过去曾泄露过多系统信息,成为信息收集和攻击的入口。
  2. 信息过时:现代环境中,/etc/passwd中的GECOS字段(存放姓名、电话等)很少被维护和更新。
  3. 有更好的替代品wwho命令提供了更核心、更安全的信息。需要更多用户信息时,getent passwd <用户名>id <用户名>命令更常用。

因此,虽然finger很有趣,但在生产环境中,我几乎从不主动安装或使用它。了解它的存在,只是为了在阅读老脚本或文档时不至于困惑。

3.5last命令:系统登录的“时光机”

以上命令都只关注“现在时”,而last命令则带你回顾“过去时”。它读取/var/log/wtmp文件,显示自该文件记录开始以来的所有登录历史。

基本使用与输出解读

$ last alice pts/1 203.0.113.5 Sat Oct 27 10:15 still logged in bob :0 :0 Sat Oct 27 08:55 still logged in root pts/0 192.168.1.100 Sat Oct 27 09:37 still logged in reboot system boot 4.18.0-477.13.1 Sat Oct 27 08:54 - 11:30 (02:36) alice pts/2 203.0.113.5 Fri Oct 26 22:10 - 22:45 (00:35) ... wtmp begins Fri Sep 1 09:00:00 2024

每一行代表一次登录会话:

  • 用户名
  • 终端
  • 来源IP(本地为:0
  • 登录时间
  • 如果用户已注销,会显示注销时间及会话持续时间,如Fri Oct 26 22:10 - 22:45 (00:35)
  • 如果用户仍在登录,则显示still logged in
  • reboot行记录了系统的重启事件。
  • 最后一行wtmp begins指明了wtmp日志文件的起始记录时间。

强大的过滤与排查功能last命令的参数让它成为安全审计和问题排查的利器:

  • last <用户名>:只查看特定用户的历史登录。
    $ last alice
  • last -n <数字>last -<数字>:限制显示的行数。last -5显示最近5条记录。
  • last -x:显示系统关机(shutdown)、运行级别改变(runlevel)等特殊事件,结合reboot信息,可以勾勒出系统的生命周期。
  • last -t YYYYMMDDHHMMSS:显示指定时间之前的登录记录。例如,查看2024年10月27日中午12点之前的所有登录:last -t 20241027120000
  • last -i:始终将来源IP显示为数字格式,避免DNS反向解析,输出更快。

实操心得:wtmp日志轮转与清理/var/log/wtmp文件会不断增长。通常,系统的logrotate工具会定期(如每月)对其进行轮转,将其压缩为wtmp.1.gz,wtmp.2.gz等。last命令默认只读取当前的/var/log/wtmp。要查看历史归档的日志,需要指定文件:

$ last -f /var/log/wtmp.1

手动清理wtmp日志(不推荐日常操作,仅用于特殊情况)可以用空文件覆盖它:sudo sh -c '> /var/log/wtmp'。但请注意,这会丢失所有历史登录记录。

4. 进阶技巧与脚本化实战

掌握了单个命令,我们可以玩点更高级的,将它们组合起来,解决实际问题。

4.1 组合命令,精准过滤信息

场景一:找出所有从特定IP段登录的用户假设我们想监控来自203.0.113.0/24网段的登录。

$ who | grep '203\.0\.113' alice pts/1 2024-10-27 10:15 (203.0.113.5)

这里使用grep进行正则匹配,注意对点号.进行转义。

场景二:查看空闲时间超过1小时的用户,并发送警告这对于清理闲置会话、释放资源很有用。

# w命令的IDLE列格式多样(分钟:秒、days+等),解析较复杂。一个更稳健的方法是检查TTY的访问时间。 # 使用`last`命令查看当前登录且空闲的会话(需要结合`-p`和`-t`参数,但并非所有版本支持)。 # 一个更通用的思路是使用`loginctl`(Systemd系统)或检查`/proc/<pid>/`状态,但这更复杂。 # 对于简单的脚本,一个近似的方法是使用`who -u`并解析空闲时间(以`.`表示分钟)。 $ who -u | awk '$5 ~ /^[0-9]+\./ {if ($5+0 > 60) print $1, $2, $5 " minutes idle"}'

这个awk命令查找第五列(空闲时间)以数字和点开头的行(表示分钟),并判断是否大于60分钟。

4.2 编写监控脚本:定期检查并记录异常登录

我们可以写一个简单的Shell脚本,定期运行(比如通过cron),检查是否有非授权用户或从异常地点登录。

#!/bin/bash # 文件名:check_logins.sh LOG_FILE="/var/log/login_monitor.log" AUTHORIZED_USERS=("root" "alice" "bob") # 授权用户列表 ALERT_EMAIL="admin@yourcompany.com" # 获取当前登录用户列表 CURRENT_USERS=$(who | awk '{print $1}' | sort -u) # 检查每个当前登录用户 for USER in $CURRENT_USERS; do # 检查是否为授权用户 if [[ ! " ${AUTHORIZED_USERS[@]} " =~ " ${USER} " ]]; then MSG="[$(date)] 警报:未授权用户 '$USER' 登录系统。详细信息:$(who | grep ^$USER)" echo "$MSG" >> "$LOG_FILE" echo "$MSG" | mail -s "系统登录警报" "$ALERT_EMAIL" fi done # 也可以检查登录来源IP # 例如,拒绝来自某个黑名单IP的登录(这通常在SSH层面配置,此处仅为日志记录) BLACKLIST_IP="10.0.0.100" if who | grep -q "$BLACKLIST_IP"; then MSG="[$(date)] 警告:检测到来自黑名单IP ($BLACKLIST_IP) 的登录尝试。" echo "$MSG" >> "$LOG_FILE" fi

记得给脚本执行权限:chmod +x check_logins.sh,并将其加入crontab。

4.3 深入/proc:手动追踪登录会话

作为终极手段,你可以直接查询/proc文件系统来验证和补充信息。每个用户登录后,会有一个进程(通常是sshdlogin)为其服务。我们可以找到这些进程。

例如,查找所有sshd进程,并查看其网络连接和父进程信息:

$ ps aux | grep sshd root 1234 0.0 0.1 12345 6789 ? Ss Oct26 0:00 /usr/sbin/sshd -D root 5678 0.0 0.2 23456 7890 ? Ss 09:37 0:00 sshd: root@pts/0 alice 9012 0.0 0.2 23456 7891 ? Ss 10:15 0:00 sshd: alice@pts/1

第二行和第三行就是为用户rootalice创建的会话进程。通过进程ID(PID),我们可以查看更详细的信息:

# 查看该进程打开的文件(包括网络连接) $ sudo ls -l /proc/5678/fd # 查看该进程的环境变量,可能包含SSH连接信息 $ sudo cat /proc/5678/environ | tr '\0' '\n' | grep SSH

这种方法非常底层,通常在常规命令输出异常或进行深度安全取证时使用。

5. 常见问题排查与经验实录

即使掌握了命令,在实际操作中还是会遇到各种“怪事”。下面是我总结的一些典型问题和解决方法。

5.1 用户显示已登录,但实际连接已断开

现象:使用wwho命令,看到某个用户(比如从某个IP)仍然在线,TTY显示为pts/1,但你知道那个SSH客户端已经断网或强制关闭了。原因:这是典型的“僵尸终端”或“僵死会话”。SSH连接非正常断开(如网络闪断、客户端崩溃)时,服务器端的sshd子进程和用户的shell进程可能没有收到正确的终止信号,导致会话记录残留在utmp中,但实际已无法交互。排查与解决

  1. 确认状态:尝试向该TTY发送消息(需root权限):sudo echo "Are you there?" > /dev/pts/1。如果用户收不到,基本确认是僵死会话。
  2. 查找并终止进程
    • 首先,找到该TTY对应的进程。ps命令可以按终端过滤:ps -ft pts/1
    • 你会看到类似sshd: user@pts/1-bash的进程。它们的父进程ID(PPID)是连续的。
    • 使用kill命令终止这些进程。通常需要先杀shell进程,再杀sshd进程:sudo kill -9 <bash_pid> <sshd_pid>
  3. 清理utmp记录:进程被杀后,utmp记录有时不会立即消失。可以手动使用pkill -KILL -t pts/1来确保清理,或者等待系统定时任务(如utmp的清理脚本)处理。在某些系统上,loginctl命令可能有助于清理:sudo loginctl terminate-user <用户名>

5.2last命令输出时间混乱或不全

现象last命令显示的时间戳不对,或者历史记录看起来缺失了很长一段时间。原因与解决

  1. 时区问题last命令输出的时间是本地时间,但wtmp文件内部存储的是UTC时间。如果系统时区设置错误或发生变化,last的输出时间就会混乱。确保/etc/localtime链接正确,并且TZ环境变量(如果设置)无误。
  2. 日志轮转与清理wtmp文件被logrotate轮转或管理员手动清理了。使用last -f /var/log/wtmp.1等命令查看历史归档文件。如果轮转太频繁(比如每天),历史记录就会很短。可以调整/etc/logrotate.conf中关于wtmp的配置,延长保留周期。
  3. 文件损坏:极少数情况下,wtmp二进制文件可能损坏。可以尝试用lastb(读取btmp,记录失败登录)命令对比,或者用strings /var/log/wtmp看看是否有可读内容。如果损坏,可能只能重建该文件(清空它)。

5.3 为什么w命令显示的IDLE时间不准确?

现象:对于图形界面登录的用户,IDLE列经常显示为?xdm?或一个非常旧的时间,无法反映用户真实的键盘/鼠标空闲时间。原因w命令的IDLE时间计算依赖于TTY设备的访问时间戳(atime)。对于图形界面(X Server),用户的输入并非直接作用于一个简单的TTY设备,因此传统的检查方法失效。?xdm?中的xdm是一个泛指,代表X Display Manager。替代方案

  • 对于使用GNOME、KDE等主流桌面的系统,可以尝试通过DBus查询屏幕保护器或锁屏状态。例如,在GNOME下:gdbus call -e -d org.gnome.ScreenSaver -o /org/gnome/ScreenSaver -m org.gnome.ScreenSaver.GetActive
  • 更通用的方法是检查用户最近一次输入事件。可以安装并运行xprintidle工具(如果已安装X环境),它返回图形界面空闲的毫秒数。
  • 在脚本中,如果只需要知道图形用户是否“活跃”,一个粗略的方法是检查是否有某些关键的桌面进程(如gnome-shell,plasmashell)在运行,并且结合last命令中该用户登录会话的持续时间进行估算。

5.4 如何审计所有用户的登录行为(包括sudo)?

场景:安全审计要求记录谁、在什么时候、从哪里登录,并且做了什么特权操作。解决方案:这超出了utmp/wtmp的能力范围,需要组合多种日志。

  1. 登录行为:主要看/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS)。这里记录了所有通过sshd,login等服务的成功或失败登录尝试。
    $ sudo grep 'Accepted password' /var/log/auth.log $ sudo grep 'Failed password' /var/log/auth.log
  2. 特权操作(sudo):同样在auth.logsecure中,查找sudo:开头的行。
    $ sudo grep 'sudo:' /var/log/auth.log
  3. 历史命令:每个用户的~/.bash_history文件记录了其执行的命令历史。但请注意,高级用户可能会清空或篡改此文件。更可靠的方法是配置auditd(Linux审计子系统)来记录所有关键的系统调用和文件访问。

5.5 表格速查:命令对比与选用指南

命令核心功能数据源输出特点典型使用场景安装需求
w显示当前登录用户及详细活动信息(进程、负载)/var/run/utmp,/proc信息最全,包含系统负载、用户进程交互式排查,查看用户正在做什么、系统整体状态核心工具,默认安装
who显示当前登录用户基本信息/var/run/utmp格式简洁规整,列对齐好快速查看谁在线、登录时间和来源核心工具,默认安装
users仅显示当前登录的用户名/var/run/utmp极简,空格分隔的用户名列表Shell脚本中快速获取用户列表核心工具,默认安装
finger显示用户详细信息(包括全名等)/var/run/utmp,/etc/passwd包含GECOS信息(姓名、电话等)查询用户联系方式(已过时)需要手动安装
last显示历史登录记录(含登录/注销)/var/log/wtmp按时间倒序列出所有会话安全审计、排查历史登录问题、查看重启时间核心工具,默认安装

这张表可以帮你根据不同的需求,快速选择最合适的工具。日常运维中,wlast是我的左膀右臂,一个管“现在”,一个管“过去”。而whousers则在写自动化脚本时派上大用场。把这些命令吃透,你就能对Linux系统的用户登录情况建立起全方位的掌控感。

http://www.cnnetsun.cn/news/2452729.html

相关文章:

  • linux下载和VMware Workstation搭建环境
  • New API实战指南:企业级AI模型聚合网关架构设计与实施
  • 如何在浏览器中一键转换图片格式:Save Image as Type完整使用指南
  • 对比自行维护多个API与使用Taotoken聚合平台在运维复杂度上的差异
  • 书匠策AI降重降AIGC:我拿这工具“洗“了一遍论文,查重从48%直接干到6%
  • 不止于电量检测:用HI35XX的LSADC玩点新花样(附按键与传感器读取示例)
  • 用LoRA微调LLaMA2时,你的显存和参数到底省在哪了?一个公式讲明白
  • 3步完成图片转3D模型:ImageToSTL让平面照片变立体雕塑
  • SolidWorks 中使用方程式驱动曲线画齿轮的计算软件
  • 如何在OBS Studio中使用VST插件实现专业级音频处理:免费直播音质提升完整指南
  • 多相机融合算法|跨镜轨迹全域跟踪-透明化-无感定位智慧场景解决方案
  • 免费下载中国大学MOOC视频课程:MoocDownloader完整使用指南
  • 5分钟拯救你的B站缓存视频:m4s-converter终极使用教程
  • 深耕 AI 全域布局,探词科技凭硬核实力领跑 GEO 新赛道
  • FlatLaf:Java Swing现代化设计重构的架构级解决方案
  • XCOM模组管理终极指南:AML启动器完整使用教程
  • 别再手动改hosts了!用Docker Compose一键部署Authelia SSO,顺便搞定Traefik反向代理
  • 番茄小说下载器:5分钟打造个人离线图书馆的终极解决方案
  • Taotoken 的用量看板与账单追溯功能如何帮助开发者优化资源消耗
  • 深度解析unrpa:Ren‘Py游戏资源提取工具的技术架构与实战应用
  • RHCE第四次练习
  • 异构双核与多接口设计:工业网关与边缘计算核心平台实战解析
  • Hitboxer终极指南:免费专业解决游戏按键冲突的SOCD重映射工具
  • C语言学习笔记 - 34.数据类型 - 编程规范与高效学习方法
  • BG3ModManager完整指南:免费管理《博德之门3》模组的终极解决方案
  • Backtrader 终极指南:Python量化交易回测框架完全解析
  • C++ 引用完全指南:别名背后的秘密
  • 终极免费AMD Ryzen硬件调试指南:掌握SMUDebugTool的完整使用技巧
  • Python开发者如何快速接入Taotoken调用多模型API服务
  • 华为2288H V5服务器U盘装CentOS 7.5,手把手解决‘dracut timeout’报错