eject 是一个在 Linux、Unix 以及其他类 Unix 操作系统(如 macOS)中非常实用的命令行工具,它的核心功能是弹出可移动媒体,最典型的就是光驱(CD/DVD-ROM)中的光盘,以及在某些系统上可以弹出 USB 闪存盘或 SD 读卡器。

基本功能与用途
eject 命令的主要用途包括:
- 弹出光盘:这是最常见的用法,当您在命令行下完成对光盘的读写操作后,可以使用
eject命令安全地弹出光盘,而不需要走到机箱前手动按弹出按钮。 - 关闭光驱托盘:有趣的是,
eject命令不仅可以弹出,也可以在不放入光盘的情况下关闭已经打开的光驱托盘。 - 弹出其他可移动设备:在一些系统配置中,
eject也可以用来弹出连接的 USB 存储设备。 - 脚本自动化:在编写系统管理脚本时,
eject是一个非常有用的工具,可以自动处理媒体的加载和卸载过程。
基本语法
eject [选项] [设备名]
- 设备名:通常是可选的,如果不指定,
eject会尝试默认弹出第一个可弹出的设备(通常是/dev/sr0或/dev/cdrom)。 - 选项:用于控制
eject的行为,例如只弹出、只关闭、显示信息等。
常用选项与示例
下面是一些最常用和实用的 eject 命令示例。
示例 1:弹出默认设备(最常用)
如果您只有一个光驱,直接运行 eject 即可。
eject
这条命令会尝试弹出系统默认的第一个可移动媒体设备(通常是光驱)。

示例 2:指定设备弹出
如果您有多个光驱或其他可移动设备,需要明确指定设备路径。
# 弹出第二个光驱 (/dev/sr1) eject /dev/sr1 # 弹出符号链接指向的光驱 (/dev/cdrom) eject /dev/cdrom
示例 3:只弹出,不关闭托盘(如果已打开)
在某些情况下,光驱托盘是打开的,您只想取出光盘,然后手动关上托盘,可以使用 -t 选项的逆操作,即不执行关闭操作,默认的 eject 命令在弹出后会尝试关闭托盘,但现代系统通常不会,如果您的系统会关闭,可以使用 -v (verbose) 选项来观察行为。
更直接的方法是使用 -d 来模拟,或者直接使用 eject -i 1 (见高级用法)。
一个更常见的需求是只关闭托盘:

eject -t
这个命令会关闭当前打开的光驱托盘。
示例 4:只关闭托盘(不弹出)
如上所述,使用 -t 选项。
eject -t /dev/sr0
示例 5:弹出后强制卸载设备(非常重要!)
在弹出光盘之前,最好先确保系统已经卸载了该设备,以避免数据损坏。eject 命令有一个 -u (unmount) 选项可以做到这一点。
eject -u /dev/sr0
这个命令会先尝试卸载 /dev/sr0,然后再弹出它,这是一个非常安全和推荐的组合操作。
示例 6:以详细模式运行
使用 -v (verbose) 选项,eject 会打印出它正在执行的操作的详细信息,这对于调试非常有用。
eject -v
输出可能类似于:
eject: /dev/sr0: not found or not a block device
eject: default device: `/dev/sr0' not found
或者成功时:
eject: using default name `/dev/sr0'
eject: device name is `/dev/sr0'
eject: unlocking tray
eject: command 'cdrom_id --lock-device /dev/sr0' failed, errno=5
eject: trying to eject `/dev/sr0' using CD-ROM eject command
eject: ejected
示例 7:显示设备信息
使用 -i (slot) 选项可以查询设备的状态。-i 1 表示“锁定”(即弹出后不自动关闭),-i 0 表示“解锁”(即可以弹出),查询时传入一个非 0/1 的值,如 -i 2,可以获取当前状态。
# 查询光驱的锁定状态 eject -i 2 /dev/sr0
输出可能为 1 (已锁定) 或 0 (已解锁)。
高级用法与技巧
检查设备是否可弹出
在执行弹出操作前,可以先检查设备是否可弹出,设备文件位于 /dev/ 目录下,如 /dev/sr0, /dev/sr1 等,符号链接 /dev/cdrom 通常指向主光驱。
# 检查 /dev/sr0 是否存在
if [ -e /dev/sr0 ]; then
echo "光驱存在,正在弹出..."
eject /dev/sr0
else
echo "未检测到光驱。"
fi
结合 umount 使用(更稳妥的方式)
虽然 eject -u 已经很方便,但有时先手动卸载再弹出的方式更可控。
# 1. 先卸载设备 sudo umount /dev/sr0 # 2. 如果卸载失败(可能正在使用),可以尝试强制卸载 # sudo umount -l /dev/sr0 # 3. 卸载成功后,再弹出 eject /dev/sr0
常见问题与解决方法
问题 1:eject: /dev/sr0: not found or not a block device
原因:系统没有检测到该设备,或者设备路径不正确。 解决:
- 检查光驱中是否真的有光盘。
- 使用
lsblk或dmesg | tail命令查看系统是否识别到了光驱,以及它的正确设备名是什么。lsblk # 输出示例: # sr0 11:0 1 1024M 0 rom
从上面的输出可以看到,光驱的设备名是
sr0,路径就是/dev/sr0。
问题 2:eject: unable to find or open device for ...
原因:同上,设备文件不存在或权限不足。 解决:
- 确认设备名正确。
eject通常需要 root 权限才能操作硬件,尝试使用sudo。sudo eject
问题 3:弹出后托盘又自动关上了
原因:这是某些光驱和系统驱动的正常行为。eject 命令可能只是发送了一个“弹出”信号,但硬件控制逻辑在检测到光盘被移除后会自动关闭托盘。
解决:这是正常现象,无需解决,如果希望托盘保持打开状态,可能需要特定的硬件支持或更复杂的工具。
macOS 上的 eject
eject 命令在 macOS 上同样可用,但用法略有不同:
- 弹出光盘:
eject /dev/disk1(disk1 可能是您的光驱) - 弹出 USB 硬盘/闪存盘:
eject /dev/disk2s1(disk2s1 是您的 U 盘分区) - 弹出 Finder 中显示的卷名:这是最方便的方式!
eject "My USB Drive" eject "Macintosh HD"
| 命令 | 功能 |
|---|---|
eject |
弹出默认设备(通常是光驱) |
eject /dev/sr0 |
弹出指定的光驱设备 |
eject -t |
关闭光驱托盘 |
eject -u |
在弹出前先卸载设备 |
eject -v |
显示详细执行过程 |
sudo eject |
如果遇到权限问题,使用 sudo |
eject 是一个命令行下的“优雅”工具,它让用户无需离开键盘就能完成对可移动媒体的管理,尤其适合在服务器环境或追求高效操作的开发者中使用。
