eject 命令用于弹出可移动介质,如CD/DVD光盘、USB设备、软盘驱动器等。它不仅可以物理弹出设备,还可以在逻辑上卸载已挂载的设备,是管理可移动存储设备的重要工具。
eject [选项] [设备名]
如果不指定设备名,默认使用/dev/cdrom或第一个可弹出设备。
| 选项 | 说明 |
|---|---|
-h 或 --help |
显示帮助信息 |
-v 或 --verbose |
详细模式,显示更多信息 |
-d 或 --default |
列出默认设备名 |
-a on|off|1|0 |
启用/禁用自动弹出模式 |
-c 编号 |
选择CD-ROM驱动器槽位(如果有多个) |
-t 或 --trayclose |
关闭光盘托盘 |
-T 或 --traytoggle |
切换光盘托盘状态(开/关) |
-x 速度 |
设置CD-ROM的读取速度 |
-n 或 --noop |
不执行操作,只显示将执行的操作 |
-r 或 --cdrom |
以CD-ROM形式弹出 |
-s 或 --scsi |
以SCSI设备形式弹出 |
-f 或 --floppy |
以软盘形式弹出 |
-q 或 --tape |
以磁带设备形式弹出 |
# 查看默认的弹出设备
eject -d
# 查看所有块设备(包括可移动设备)
lsblk
# 查看SCSI设备列表
lsscsi
# 查看系统中的CD/DVD驱动器
ls -l /dev/cdrom*
ls -l /dev/sr*
# 使用udevadm查看设备信息
udevadm info --query=all --name=/dev/sr0
# 弹出默认CD/DVD驱动器(通常是/dev/cdrom)
eject
# 使用完整路径弹出特定CD/DVD驱动器
eject /dev/cdrom
eject /dev/sr0
对于大多数系统,/dev/cdrom是/dev/sr0的符号链接。
# 首先查找USB设备名
lsblk
# 假设USB设备是/dev/sdb1,先卸载它
sudo umount /dev/sdb1
# 然后弹出设备
sudo eject /dev/sdb
# 或者使用设备挂载点
sudo eject /media/usb-drive
lsblk输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
└─sda2 8:2 0 465.3G 0 part /
sdb 8:16 1 14.9G 0 disk
└─sdb1 8:17 1 14.9G 0 part /media/usb-drive
sr0 11:0 1 1024M 0 rom
# 关闭已打开的光盘托盘
eject -t
# 或使用长选项
eject --trayclose
# 切换托盘状态(如果打开则关闭,如果关闭则打开)
eject -T
# 或使用长选项
eject --traytoggle
# 启用自动弹出模式(某些设备支持)
eject -a on
eject -a 1
# 禁用自动弹出模式
eject -a off
eject -a 0
自动弹出模式允许在设备卸载后自动物理弹出介质。
# 如果设备已挂载,可以使用挂载点而不是设备文件
sudo eject /mnt/cdrom
sudo eject /media/username/DRIVE_NAME
# 设置CD-ROM的最大读取速度(以KB/s为单位)
eject -x 52 /dev/cdrom # 52x CD-ROM速度
# 设置较低的读取速度以降低噪音
eject -x 24 /dev/cdrom # 24x CD-ROM速度
# 查看eject命令将执行什么操作,但不实际执行
eject -n /dev/cdrom
eject --noop /dev/sdb1
#!/bin/bash
# safe_eject.sh - 安全移除USB设备
DEVICE=$1
MOUNT_POINT=$(mount | grep "$DEVICE" | awk '{print $3}')
if [ -z "$MOUNT_POINT" ]; then
echo "设备 $DEVICE 未挂载"
sudo eject $DEVICE
else
echo "正在卸载 $MOUNT_POINT ..."
sudo umount $MOUNT_POINT
if [ $? -eq 0 ]; then
echo "卸载成功,正在弹出设备..."
sudo eject $DEVICE
else
echo "卸载失败,设备可能正在使用中"
echo "请关闭使用该设备的程序后重试"
exit 1
fi
fi
#!/bin/bash
# backup_and_eject.sh - 备份光盘内容后弹出
CDROM="/dev/cdrom"
BACKUP_DIR="/backup/cdrom_$(date +%Y%m%d_%H%M%S)"
ISO_FILE="$BACKUP_DIR/disk.iso"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 检查是否有光盘
if [ -b $CDROM ]; then
echo "检测到光盘,正在创建ISO镜像..."
# 创建光盘镜像
dd if=$CDROM of="$ISO_FILE" bs=2048
if [ $? -eq 0 ]; then
echo "备份完成,文件保存在: $ISO_FILE"
# 弹出光盘
eject $CDROM
echo "光盘已弹出"
else
echo "备份失败"
exit 1
fi
else
echo "未检测到光盘"
exit 1
fi
#!/bin/bash
# auto_eject_blank.sh - 检测并弹出空白光盘
CDROM="/dev/cdrom"
CHECK_INTERVAL=30 # 检查间隔(秒)
while true; do
# 尝试挂载光盘
mount $CDROM /mnt/cdrom 2>/dev/null
if [ $? -ne 0 ]; then
echo "$(date): 检测到空白或无法读取的光盘"
eject $CDROM
echo "$(date): 已弹出光盘"
else
# 如果成功挂载,卸载它
umount /mnt/cdrom
fi
sleep $CHECK_INTERVAL
done
大多数Linux桌面环境提供了图形化的设备弹出工具:
在终端中,也可以使用udisksctl命令:udisksctl unmount -b /dev/sdb1 && udisksctl power-off -b /dev/sdb
umount卸载文件系统,再使用eject弹出lsblk确认正确的设备名# 1. "设备忙"错误
# 检查哪些进程正在使用设备
sudo lsof /dev/cdrom
sudo fuser -m /mnt/cdrom
# 结束使用设备的进程
sudo fuser -k /mnt/cdrom
# 2. 权限不足错误
# 使用sudo或以root身份运行
sudo eject /dev/cdrom
# 3. 设备未找到错误
# 确认设备存在
ls -l /dev/cdrom
lsblk
# 4. USB设备无法安全移除
# 先卸载再弹出
sudo umount /dev/sdb1
sudo eject /dev/sdb
# 5. 光盘托盘无法关闭
# 强制关闭(如果有物理按钮,可能需要手动关闭)
eject -t
# 或者尝试多次切换
eject -T && sleep 1 && eject -T
# 6. 吸入式光驱问题
# 某些吸入式光驱需要特殊处理
eject -i on /dev/cdrom # 有些版本支持-i选项
eject命令依赖于硬件的ATAPI/SCSI命令支持。大多数现代设备都能良好工作,但某些旧设备或特殊设备可能需要:
/dev/hdX或/dev/cdrom访问/dev/srX或/dev/scdX访问/dev/sdX访问