ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ubuntu关机失败排查指南:从系统日志到ACPI电源管理全解析

Ubuntu关机失败排查指南:从系统日志到ACPI电源管理全解析 1. 项目概述1.1 核心需求解析Ubuntu使用sudo shutdown -h now 无法关机——这个话题在Linux用户群里几乎天天有人问。我在初学阶段也踩过这个坑明明命令敲对了、权限也给了、系统也响应了结果屏幕一黑又弹回登录界面或者直接卡死在关机动画按什么键都没反应。这个现象的核心矛盾在于sudo shutdown -h now从语法和执行权限上都没有问题但系统就是没办法真正切断电源。命令执行后系统的服务管理机制确实进入了关机流程却在最后一步“掉电”时被卡住或取消了。结合热搜词里大量出现的关键词比如“ubuntu安装教程”、“vmware虚拟机安装ubuntu”、“ubuntu 22.04 LTS”、“ubuntu安装docker”可以推测出这个问题的高发人群主要有三类刚接触Ubuntu不久的新手、在虚拟机上折腾系统的玩家、以及正在给开发板或服务器部署环境的工程师。这三类人有一个共同特点——对systemd时代的关机机制理解不够完整遇到问题后习惯性地把锅甩给“sudo权限不够”或“命令用错了”。实际上shutdown -h now在绝大多数发行版上都能正确触发关机流程你看到的现象背后通常藏着更深层的系统级原因。这篇文章不只是讲怎么解决这一个命令的问题而是要把“关机”这条链路上的所有关键环节拆开讲清楚帮你看懂系统日志、定位真正的故障点并给出针对不同场景的解决方案。1.2 适用场景与读者画像读者类型典型场景遇到的现象Ubuntu新手刚装好系统尝试关机命令执行后卡在黑屏或登录界面重新出现虚拟机用户VMware/VirtualBox里跑Ubuntu虚拟机内关机无效只能强制关闭窗口双系统用户WinUbuntu共存Ubuntu无法关机关机后主板不断电风扇还在转开发板用户RK3588等板子移植Ubuntu执行关机后串口终端失去响应但开发板仍带电服务器运维远程SSH执行关机命令提示已执行但SSH断开后机器仍在线第1.1节和第1.2节说明白了“谁会在什么情况下遇到这个问题”那么接下来就要解决“为什么会这样”。理解关机失败的原理比死记硬背几条修复命令有用得多因为你以后还会遇到重启失败、休眠失败、睡眠唤醒异常等问题排查思路是相通的。2. 关机命令的底层原理与常见误区分析2.1 shutdown、halt、poweroff 三者的区别很多用户只知道shutdown -h now能关机却说不清楚它和后端的halt、poweroff是什么关系。在SysVinit时代Ubuntu 14.04及更早版本shutdown是独立的管理工具它会依序执行/etc/rc0.d/里的脚本最后调用halt或poweroff来完成收尾。到了systemd时代Ubuntu 15.04及之后版本情况发生了根本性变化。shutdown、halt、poweroff、reboot这四个命令只是systemd的符号链接或兼容封装它们最终都会被转发给systemd的对应target来处理。你可以执行which shutdown查看大概率会看到/usr/sbin/shutdown再看文件属性会发现它是指向/bin/systemctl的软链接。从行为差异上看shutdown -h now通知systemd进入poweroff.target这个target会停止所有服务、卸载文件系统最后请求ACPI电源管理执行断电。halt只停止CPU活动通常不会切断电源机器会停在“已关机但还通电”的状态。poweroff行为上最接近shutdown -h now直接触发系统断电流程。理解了这层关系你就能明白一个关键点如果shutdown -h now卡住了问题通常不在命令本身而是systemd在切换target的过程中有某个服务或某个硬件环节掉链子了。不管你怎么组合参数最终都得过systemd这一关。2.2 无法关机现象的五种典型表现根据长期观察用户抱怨“无法关机”时实际上遇到了完全不同的问题。如果把这些现象都笼统地当成“关机失败”排查方向就会跑偏。我归纳下来最常见的表现有五种第一种命令执行后卡在黑屏或启动画面。屏幕上的Ubuntu logo或命令行提示符一直挂着电源灯还亮着等多久都没反应。这种情况多半是某个服务在超时等待或者显卡驱动/固件在掉电前卡死。第二种关机流程走完屏幕黑了但机器电源指示灯依然亮着。这种是最典型的“电源未切断”ACPI的电源管理没有正确执行S5状态软关机断电状态常见于双系统机器、旧主板或某些笔记本。第三种虚拟机里的Ubuntu关不掉。执行命令后系统界面关了但虚拟机进程还占着CPU资源或者VMware/VirtualBox窗口显示“客户机操作系统已关机”但电源按钮还是开着的。第四种ssh远程执行关机命令后机器立即断网但没过多久又恢复。这种情况特别迷惑——你以为只有一个进程被kill了实际上systemd在关机中途被唤醒或某个服务触发了重启行为。第五种关机过程中反复出现某个服务的报错然后系统自动中断关机。比如a stop job is running for User Manager for UID 1000系统在等待某个会话超时默认等90秒甚至更久。每种表现对应的排查路径完全不同。我强烈建议你先确认自己属于哪一种再往下看解决方案盲目复制网上的命令只会让系统更乱。2.3 对 sudo 和 -h 参数的常见认知误区搜索热词里高频出现“sudo”和“shutdown -f -s -t”说明很多用户的认知受Windows习惯影响比较深。这里有几个必须澄清的误区误区一关机失败是因为sudo权限不够。实际上sudo shutdown -h now执行后sudo已经把权限提升到了rootsystemd也响应了请求。绝大多数“无法关机”并不是权限被拒绝而是后续流程出错。你可以观察命令执行后的输出如果没有任何permission denied的提示权限这关就过了。误区二加-f能强制关机。Windows里shutdown -f -s -t 0是“强制关机并立即执行”但Linux的shutdown -f意思完全不同——它是“快速启动”标记在关机时跳过文件系统检查fsck并不是强制断电。如果你在Linux里用shutdown -f -h now并不会让关机过程变得更“强硬”反而可能跳过了必要的文件系统同步。误区三-h等于断电。-h表示halt停止在systemd环境下它只是告诉系统“停下所有活动”至于要不要真正断开电源还得看系统有没有走到ACPI断电那一步。-Ppoweroff才明确表示关闭电源-h在某些老系统或特殊配置下可能只会停CPU不断电。误区四关机命令必须用now。其实你可以用shutdown -h 5延迟5分钟关机或者指定具体时间shutdown -h 23:30。now只是0的简写它让你无法看到关机过程中的中间状态。有时候故意加个延迟反而能观察到更多日志输出便于排查问题。有了这些基础认知下面就可以进入真正的排查环节了。关机失败的根源极大程度藏在日志和硬件/固件的交互细节里。3. 排查步骤与核心环节实操3.1 第一步查看系统日志定位卡住的位置遇到关机失败第一件事不是去改配置而是看日志。systemd把所有关键过程都记录在journal里关机日志也不例外。在另一个终端或重启后再执行journalctl -b -1 -e这条命令的含义是查看上一次启动周期的日志-b -1表示上一次开机-e表示跳到日志末尾正好能看到关机阶段发生的事。如果你刚重启完上一次启动周期的最后几十行就是关机现场。排除日志干扰更直接的方式是临时去掉安静启动参数让关机的详细过程直接打在屏幕上。编辑/etc/default/grub找到这行GRUB_CMDLINE_LINUX_DEFAULTquiet splash把它改成GRUB_CMDLINE_LINUX_DEFAULT然后执行sudo update-grub并重启。这样做的目的是让内核和systemd的所有信息直接打印在终端上不再被开机画面遮住。关机时你就能亲眼看到系统停在哪一步比如卡在Unmounting /home还是卡在Stopping User Manager for UID 1000。如果日志里有类似这样的行A stop job is running for Session c2 of user gdm (1min 30s / 1min 30s)含义是系统在等一个会话或服务结束已经等了90秒。这种“stop job”等待是关机变慢或看似卡死的最常见原因后面我会单独讲怎么处理。3.2 第二步检查ACPI电源管理状态shutdown -h now的最后一步是systemd通知内核调用ACPI来断开电源。如果这个环节出问题就表现为“系统好像关了但电源灯还亮着”。先确认你的Ubuntu是否正确加载了ACPI相关模块ls /sys/power/正常情况下你应该能看到state、disk、mem_sleep等文件。接着查看支持的电源状态cat /sys/power/state如果输出包含freeze、mem、disk甚至s2idle、deep说明ACPI基本正常。如果输出只有freeze而没有disk说明休眠和ACPI电源管理没有完整启用。另外一个需要重点排查的是内核参数里是否强制关闭了ACPI。有些教程尤其是解决黑屏问题的教程会让你在GRUB里加acpioff或noacpi这个参数确实能解决部分硬件兼容性问题但它也会直接废掉ACPI电源管理。用了这个参数后系统根本无法发送断电指令自然会出现“关不掉电源”的现象。你可以用下面的命令检查当前内核是否带了这个参数cat /proc/cmdline如果输出里有acpioff马上把它从GRUB配置里去掉。如果是临时测试时加的重启后会自动恢复。3.3 第三步逐步缩小范围——裸机还是虚拟机这一步至关重要先厘清你的环境。如果你是在VMware、VirtualBox或WSL里跑Ubuntu那“关机失败”大概率跟物理电源管理无关而是虚拟化环境对ACPI/电源指令的模拟不完整。虚拟机里最常见的现象是Ubuntu内部已经完成了关机流程但虚拟机的电源图标没熄灭、必须手动点“关闭客户机”或强制关掉窗口。这里有个重要知识点宿主机对ACPI指令的转发是有差异的。VMware Workstation对ACPI的支持相对完整VirtualBox在某些版本上对poweroff.target的响应存在兼容性Bug。遇到虚拟机无法关机时优先考虑安装增强工具VMware安装open-vm-tools-desktopVirtualBox安装virtualbox-guest-utils增强工具会注册对应的ACPI设备驱动。检查虚拟机设置里的“ACPI关机”选项是否勾选。VMware的虚拟机电源选项里有“客户机关机”功能它依赖的就是客户机里的ACPI驱动。升级虚拟机软件本身VirtualBox对Linux客户机的ACPI模拟在老版本上有已知问题。如果你是在物理机上遇到关机失败再看下面几种硬件层面的原因。3.4 第四步处理服务卡死与stop job超时绝大多数“看似卡死”的关机问题罪魁祸首是某个用户会话或者自定义服务没能在限定时间内停止。systemd默认给每个服务等90秒如果一个服务一直不退出关机流程就卡住90秒多个服务叠加就可能变成“无限等待”的感觉。先查哪些服务可能导致关机阻塞systemd-analyze blame systemctl list-jobslist-jobs在系统处于关机流程中是没法执行的所以更好的方式是提前了解哪些服务被标记为SHUTDOWN或STOP。最直接的排查法还是回到日志搜索关键词stop jobjournalctl -b -1 | grep stop job找到卡住的服务名后手动stop一次看报错sudo systemctl stop 服务名.service sudo systemctl status 服务名.service如果这个服务对你并不重要可以直接禁用sudo systemctl disable 服务名.service sudo systemctl mask 服务名.service这里有个细节mask比disable更彻底。disable只是让服务开机不启动但如果被其他服务依赖关机时仍可能被拉起mask则是彻底锁死任何依赖都无法拉起它适合处理那种“正常运行时有用、关机时必然卡住”的顽固服务。如果你想全局缩短等待时间而不是挨个处理服务可以修改systemd的默认超时。在/etc/systemd/system.conf里找到这几行并取消注释DefaultTimeoutStartSec10s DefaultTimeoutStopSec10s改完后执行sudo systemctl daemon-reload。这个做法能显著加快关机速度但要注意某些服务确实需要较长时间来保存数据短暂超时可能造成数据丢失。生产服务器不建议这么改个人桌面或开发环境可以。3.5 第五步NVIDIA驱动与图形会话的特殊情况热词列表里出现了“ubuntu显卡驱动卸载不掉”这跟关机问题存在交叉。安装了NVIDIA闭源驱动的机器在关机时经常出现黑屏后无法断电、或者卡在logo界面的问题。原因在于NVIDIA驱动在关机阶段需要释放GPU资源如果驱动版本与内核模块不匹配或者Wayland/Xorg会话还有进程占用GPU释放动作就会卡住。排查NVIDIA驱动状态nvidia-smi lsmod | grep nvidia如果确认是NVIDIA驱动导致的关机问题有几个处理方向更新驱动到最新版sudo ubuntu-drivers autoinstall或从“软件与更新”的“附加驱动”标签页手动选版本。检查是不是Wayland会话的兼容问题在登录界面切换回XorgX11试试。Ubuntu 22.04及更高版本默认用WaylandNVIDIA驱动的Wayland支持在部分版本上确实存在关机/挂起问题。修改grub参数在GRUB_CMDLINE_LINUX_DEFAULT里加上nvme.noacpi1仅NVMe SSD适用或acpi_osiLinux后者能改善部分主板对ACPI事件的响应差异。有一点我必须提醒不要因为一次关机失败就反复卸载重装NVIDIA驱动。驱动排查顺序应该是先看日志确认是不是驱动报错再考虑更新版本最后才考虑切换开源/闭源驱动。盲目卸载驱动可能导致黑屏进不了桌面到时候哭都来不及。4. 针对性解决方案与参数调优4.1 通用型修复systemd超时与内核参数调整如果你不想深究具体是哪个服务卡住只想让自己的Ubuntu关机快点、别动不动卡住可以先做一套普适性调整。修改/etc/systemd/system.conf把下面几个参数统一设短DefaultTimeoutStartSec5s DefaultTimeoutStopSec5s DefaultRestartSec100ms这三个参数分别控制服务启动超时、服务停止超时、服务崩溃后的自动重启间隔。设成5秒后绝大多数普通服务都足够完成退出。如果遇到必须要长时间保存数据的服务比如数据库可以在它的service文件里单独覆盖TimeoutStopSec。另外还有一个比较隐蔽的坑NetworkManager或systemd-networkd在关机时尝试向网络发送消息。如果网络不通或者DNS解析卡住这个环节可能拖时间。这个情况多发生在有NFS挂载、网络打印机、或者浏览完共享文件夹后突然关机时。你可以用sudo lsof L1查看是否有已删除但仍被进程占用的文件这种“幽灵文件”会拖慢关机。如果是NFS挂载导致卡住提前umount -f -l强制卸载再关机最稳妥。内核参数层面如果你的机器出现“关了不断电”的情况可以尝试在GRUB里加rebootpci。这个参数的作用是让内核通过PCI总线去复位设备而不是依赖固件或ACPI。不少老主板在ACPI的S5状态断电状态下执行不完整加了这个参数后能提升断电成功率。修改后同样需要sudo update-grub生效。4.2 虚拟机场景专项修复如果你在VMware或VirtualBox里跑Ubuntu先说结论在虚拟机里遇到无法关机别折腾ACPI先装增强工具。VMware Workstation/Playersudo apt install open-vm-tools-desktop -y装完后重启虚拟机VMware的“虚拟机—电源—关闭客户机”就能正常工作了Ubuntu内的shutdown命令也能正确触发虚拟机的断电动作。VirtualBoxsudo apt install virtualbox-guest-utils virtualbox-guest-dkms -y然后在虚拟机的“设置—系统—主板”里确认“启用ACPI”是勾选状态。VirtualBox的ACPI实现有一个特点它不直接响应客户机的S5状态请求而是让客户机发出软关机信号由VirtualBox主程序把虚拟机关掉。如果增强工具没装好信号发不出去就会看到“系统卡死在关机”的假象。还有一个VirtualBox特有的坑显卡控制器选择。默认的VMSVGA在高分辨率下可能触发显卡驱动的问题间接导致关机阶段显卡切换失败。把显卡控制器换成VBoxSVGA或VBoxVGA有时能解决关机黑屏后无法断电的问题。4.3 双系统和键鼠外设在关机引发的问题热词里有“双系统安装ubuntu”所以双系统场景也值得单独说。双系统用户遇到的关机问题很多时候不是Ubuntu自己的锅而是固件或者Windows的影响。比如关机后主板不断电风扇还转、灯还亮这通常是ACPI事件没被正确消费最常见的原因是板载USB设备的唤醒功能没关。检查是否有USB设备在捣乱cat /proc/acpi/wakeup输出里的每一行代表一个可唤醒设备。enabled表示该设备可以唤醒系统也就是关闭后如果有鼠标移动或键盘按键设备会立即把系统状态从S5拉回。如果你发现EHC1、XHC等USB控制器是enabled可以手动禁用echo EHC1 | sudo tee /proc/acpi/wakeup注意这个操作只对当前会话有效。要持久化需要写一个systemd服务在开机阶段自动执行这个echo。网上有现成的脚本核心内容就是在/etc/systemd/system/下建一个.service文件指定ExecStart执行上面的echo命令。另外双系统时间错乱虽然不直接影响关机但会带来非常差的体验——每次进Windows时间都对不上。原因在于Windows默认使用本地时间Ubuntu默认使用UTC。在Ubuntu里执行sudo timedatectl set-local-rtc 1 --adjust-system-clock让Ubuntu也把硬件时钟当成当地时间两块系统就不会再打架了。这个调整和关机问题没有直接关系但很多用户在折腾双系统时会顺带遇到一并解决了省心。4.4 无人值守与远程关机场景方案热词里出现“plink 登陆 ssh sudo”说明不少用户在远程管理Ubuntu机器。远程执行sudo shutdown -h now遇到“关不掉”时问题往往更棘手因为你没有本地的终端输出可以看。我建议远程关机前先执行以下两条命令来确认系统基本状态sudo systemctl status ssh --no-pager uptime然后用带延迟的关机排查法给自己留出观察窗口sudo shutdown -h 1 Server will shutdown in 1 minute这样命令执行后如果有问题你还有时间取消关机sudo shutdown -c远程场景下如果shutdown后机器没关机又因为SSH断开失去了控制就比较被动了。一个稳妥的方案是让机器自动重启并建立一个marker文件来判断到底有没有正常关机。可以在/usr/lib/systemd/system-shutdown/下放一个调试脚本systemd在执行关机动作时会运行这个目录下的所有可执行文件#!/bin/bash echo $(date) - triggered shutdown /var/log/power-debug.log这样做的好处是即使系统最终没有断电你也能在根文件系统里找到关机流程曾被触发的证据。比空口猜“命令到底执行了没有”靠谱得多。另外如果你通过SSH执行shutdown时看到类似“Failed to talk to init daemon”的报错多半是systemd PID 1没有正确运行或者你在一个过时的chroot/容器环境里。这种环境直接改查容器的宿主而不是Ubuntu本身。5. 高频疑难与排查命令速查5.1 典型案例手记与原因对照这里整理几个我实际排查过的高频案例样本来自不同年份和不同硬件平台每一类都给到对应的根因结论。你可以直接对照自己的现象来判断方向。现象真实原因解决方向关机卡在a stop job is running for ...用户服务的TimeoutStopSec默认90秒调短超时或mask掉对应服务关机后电源灯常亮、风扇运转ACPI S5状态未生效检查grub是否带acpioff尝试rebootpci参数VirtualBox内无法关机增强工具未安装或ACPI选项未开启安装virtualbox-guest-utils勾选启用ACPI黑屏卡在Ubuntu logo无法继续关机显卡驱动异常/固件bug关quiet splash看实际卡点更新GPU驱动USB设备导致关机后自动开机wakeup中设备为enabled手动或通过systemd服务禁用对应设备唤醒SSH远程关机没反应systemd关闭流程中网络管理卡住或服务拒绝终止延迟关机留观察窗配合调试脚本抓日志电池笔记本关机后仍然耗电网卡/蓝牙/指纹模块仍通电查看lspci中设备是否支持S5唤醒并禁用案例对照不代表标准答案某些硬件平台上的表现会有偏差。真正要掌握的还是通过日志确认根因的思路。5.2 一条龙排查命令速查表排查关机问题我建议按下面的顺序逐条执行并把输出记录下来。不用一次全执行按实际情况跳到相关步骤即可。# 1. 查看上次系统的完整关机日志 journalctl -b -1 -e # 2. 列出当前系统支持的电源状态 cat /sys/power/state # 3. 查看内核启动参数有没有影响ACPI的设定 cat /proc/cmdline # 4. 查看USB设备的唤醒状态 cat /proc/acpi/wakeup # 5. 查看哪些服务的启动耗时最长间接反映服务健康度 systemd-analyze blame # 6. 手动强制停止某个具体服务 sudo systemctl stop 服务名.service # 7. 测试内存/磁盘状态排除硬件故障 sudo badblocks -v /dev/sda注意第7条badblocks是一个长时任务不要在正常的关机排查里轻易跑除非严重怀疑磁盘坏道导致文件系统挂载卡死。大多数时候执行前六条已经够用。5.3 常见报错信息与排查解读下面是几个关机场景下会高频出现的报错或日志片段我把它们翻译成人话Failed to unmount /oldroot: Device or resource busy内核提示卸载根目录失败说明有进程还占用着被卸载的文件或目录。常见于你曾经用chroot进过根目录或者有容器还在运行。用sudo lsof D /找到占用者或直接检查有没有卡死的容器进程。Timed out waiting for device dev-disk-by\x2duuid-XXXX.devicesystemd在等待某个磁盘设备出现但迟迟等不到。常见于/etc/fstab里配置了一个不存在的分区的UUID。开机阶段这个问题不会立刻暴露关机时反而可能卡住。用sudo blkid核对fstab里的UUID是否匹配。Failed to start Power-Off: Unit poweroff.target not found.这个错误比较致命说明你的/lib/systemd/system/poweroff.target文件可能被误删了。执行sudo apt reinstall systemd可以重新补齐。Cannot find or open /run/systemd/shutdown/scheduled这个报错出现在你试图取消一个不存在的定时关机时属于“虚惊一场”类型。直接忽略即可。5.4 一体化处理建议排查到这一步如果你还没动手改配置我建议按“先看日志、再查ACPI、然后处理服务、最后调参”的顺序来操作。不要一上来就瞎改/etc/default/grub或者大规模mask服务那样只会引入更多变量。实际操作中我自己常用的一条复现/验证路径是这样# 先看当前启动周期用了多久判断系统整体健康度 systemd-analyze # 再看上次关机时是不是有服务超时 journalctl -b -1 | grep -i stop job # 最后用延迟关机观察日志 sudo shutdown -h 1 # 等待一分钟后在另一个终端看是否进入正常流程 ls /run/systemd/shutdown/scheduled5.5 心得补漏别漏掉的三个隐蔽因素在实际排障中有几个容易被忽略的因素。它们不常被论坛帖子提到但我在多台机器上都遇到过写出来给你提个醒。第一笔记本的电池管理固件。部分笔记本尤其双显卡切换的机型关机时独立显卡的供电没被切断导致系统以为还在工作中。这类问题常常表现为关机后电源灯灭、但又自己亮起来。可以试一下在BIOS里关闭“USB充电”或“Always On USB”功能。第二使用了systemctl poweroff时因为Polkit策略导致的静默失败。你在桌面环境里点击“关机”按钮图形界面调用的是logind而非直接调用shutdown如果Polkit规则限制了你的用户组关机权限界面会提示失败但终端里执行sudo shutdown却是成功的。如果你发现“图形界面无法关机终端sudo能关”检查/etc/polkit-1/localauthority/50-local.d/下有没有自定义的权限规则。第三Docker或容器环境里的关机混乱。热词里有“ubuntu安装docker”Docker在关机阶段的常见问题是容器内的进程收到SIGTERM后没退出而是不断保持存活并重试导致系统在等待容器停止时超时。docker ps查看是否有卡在up状态的容器用docker rm -f $(docker ps -aq)清理后再执行关机。6. 结尾折腾了这么多案例后我最深的体会是关机失败这件事九成以上不是“权限不够”或“命令敲错”而是systemd这套关机流程中某个环节没有跑完。你在终端里敲下的那个sudo shutdown -h now真正复杂的地方不在命令本身而在它身后那几十个服务的停止顺序和ACPI最后的断电动作。拿我自己来说有一次排查一台旧ThinkPad的关机问题从用户服务卡死、USB唤醒、到NVIDIA驱动整整试了三天最后发现竟然是BIOS里“Always On USB”选项勾着导致关机后主板持续供电。所以别急着怀疑自己的技术能力先看日志再从硬件到软件逐层排除大多数问题都能找到答案。如果你按照这篇文章的步骤排查完之后还是没能解决最后一个建议是去社区发帖时别只写“关机失败”四个字一定要附上journalctl -b -1的最后几十行日志以及你的硬件型号、Ubuntu版本号。网上愿意帮你分析问题的人很多但谁都没办法从“Ubuntu无法关机”这一句话里猜出你机器卡在哪一步。把日志贴全问题就已经解决一半了。
返回列表