首页 > 百科 > 正文

命令行怎么查看开机启动项?Windows、macOS、Linux 实操指南

2026-10-24 23:41:38 · 无所不及网 · 综合 · 阅读 886

电脑开机变慢、命令右下角莫名多出常驻图标、行查系统盘被后台程序占用,看开很多时候问题就出在开机启动项上。机启图形界面的动项任务管理器或系统设置虽然能看一部分,但遇到被隐藏的命令计划任务、服务项、行查用户级自启脚本时,看开往往查不全。机启用命令行查看开机启动项的动项好处是覆盖面更广、可复制、命令可留痕,行查排查问题时能把结果一条条对照。看开本文按 Windows、机启macOS、动项Linux 三类系统分别给出可执行命令和解读方法,并说明每类命令的适用边界,具体路径与输出以你当前系统版本和界面为准。

Windows:从任务管理器到命令行逐层排查

先给一个最低成本的入口:按 Ctrl+Shift+Esc 打开任务管理器,切到“启动应用”标签,这里能看到大部分用户级启动项及其启用状态。但命令行能补上它看不到的部分。以管理员身份打开 PowerShell 或命令提示符,逐条执行下面的命令。

  • Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location, User:列出注册表 Run 键和启动文件夹中的自启命令,Location 会标明来源,便于判断是用户级还是机器级。
  • Get-ScheduledTask | Where-Object { $_.State -ne "Disabled"} | Select-Object TaskName, TaskPath:查看计划任务。很多软件把自启藏在“登录时触发”的计划任务里,任务管理器看不到,这一条能补上。
  • Get-CimInstance Win32_Service | Where-Object { $_.StartMode -eq "Auto"} | Select-Object Name, DisplayName, State:列出自动启动的 Windows 服务。注意服务不等于开机启动项,但自动启动的服务确实在开机阶段加载,占用资源时要一并看。
  • reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run 与 reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run:直接读注册表 Run 键,适合核对某个可疑条目到底写在哪一层。
  • 看输出时有几个判断点:Command 里带 --startup、/autostart、updater 字样的多为常驻或更新程序;Location 指向用户目录的通常只影响当前账户,指向系统目录的影响所有用户。发现可疑项不要急着删,先记下完整路径,确认它属于哪个软件。停用优先用软件自身的设置或任务管理器的“禁用”,直接删注册表键容易残留卸载不干净的问题。

    macOS:分登录项、后台项与定时任务三块看

    macOS 近几个版本对后台项的管理改动较大,图形入口在“系统设置—通用—登录项”,但命令行能一次看全。打开“终端”,按下面的顺序查。

  • osascript -e 'tell application "System Events" to get the name of every login item':列出传统登录项,输出简洁,适合快速确认。
  • launchctl list:列出当前用户已加载的 launchd 任务。输出三列分别是 PID、退出状态、标签名,标签里带第三方厂商域名的基本是软件自带的后台服务。
  • ls ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons:查看三个层级的 plist 文件。用户级在 ~/Library,全局代理在 /Library/LaunchAgents,系统级守护进程在 /Library/LaunchDaemons。
  • crontab -l:检查是否有老式定时任务,虽然现在用得少,但排查时别漏。
  • 需要提醒的是,新版 macOS 中 launchctl list 的输出并不等同于“开机就会启动”,部分任务是被按需唤醒的。想确认某个标签对应的程序,可用 launchctl print gui/$(id -u)/标签名 查看详情,其中 program 或 programArguments 字段会给出真实可执行文件路径。卸载第三方后台项时,正规做法是先在软件内关闭其开机启动选项,再删除对应 plist,直接删文件可能导致软件异常。涉及系统目录的改动建议先备份。

    Linux:init 系统不同,命令也不同

    Linux 的排查思路是先确认用的是哪个 init 系统,再选对应命令。执行 ps -p 1 -o comm=,输出 systemd 说明用 systemd,输出 init 则是传统的 SysVinit 或 upstart。

  • systemd 系统:systemctl list-unit-files --type=service --state=enabled 列出所有开机自启的服务;systemctl list-units --type=service --state=running 看当前正在运行的服务,两者对比能找出“已启用但没跑起来”的异常项。
  • 用户级自启:systemctl --user list-unit-files --state=enabled,以及检查 ~/.config/autostart/ 目录下的 .desktop 文件,桌面环境登录时自启的程序多在这里。
  • 传统 init 系统:用 chkconfig --list 或 ls /etc/rc*.d/ 查看各运行级别的启动脚本,不同发行版命令略有差异,以本机手册为准。
  • 补充检查 crontab -l(当前用户)和 sudo crontab -l(root),以及 /etc/cron.d/,定时任务不算严格意义的开机启动,但常在开机后触发,排查卡顿时要看。
  • Linux 下禁用自启通常用 sudo systemctl disable 服务名,改动前先确认该服务不是系统关键组件,拿不准可以先用 systemctl status 服务名 看描述和依赖关系。服务器环境尤其要注意,误禁网络或日志相关服务可能影响远程连接。

    排查时的通用注意点

    第一,先记录再改动。执行查看命令时把输出重定向到文件,例如 命令 > startup.txt,出问题时方便回滚对照。第二,区分“查看”和“禁用”,本文重点在查看,禁用操作涉及系统稳定性,建议在了解条目用途后再动手。第三,命令行结果和图形界面不一致是正常现象,因为两者覆盖范围不同,以更全的一方为准并交叉验证。第四,如果开机慢但启动项列表很干净,问题可能出在磁盘健康、驱动加载或系统更新,此时应转向事件查看器、系统日志等方向排查,而不是继续删启动项。第五,涉及政务、金融类安全软件的自启项,不要随意禁用,以免影响防护或业务系统正常运行,具体以软件官方说明为准。

    可执行的收尾动作是:先按本文对应系统的命令把启动项完整导出留存,再挑出占用高、来源不明的条目逐个核实,确认无用后再通过软件自身设置或系统提供的正规入口关闭。整个过程保留记录,下次排查就能直接对比,省去重复摸索。