我正在尝试安装 CD 驱动器(通过 USB)并读取驱动器中 CD 的内容。我可以正常安装驱动器,但无法读取内容。这是我所做的:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 881.6M 0 rom
$ sudo mount -t iso9660 -o ro /dev/sr0 /mnt/cd
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 881.6M 0 rom /mnt/cd
$ ls /mnt/cd/
ls: cannot open directory '/mnt/cd': Permission denied
我也尝试过以root身份,但没有任何运气。dmesg
节目
[1422983.554740] ISO 9660 Extensions: Microsoft Joliet Level 3
[1422983.670987] ISO 9660 Extensions: RRIP_1991A
该 CD 包含一个用于在 Windows 上安装软件程序的程序(如果有的话)。
有没有办法调试这里可能发生的情况?关于为什么这看起来很好,但我无法阅读内容的任何想法?
编辑
的输出ls -l /mnt
是:
drwx------ 7 nobody root 4.0K Jun 22 2016 cd
不过,我也尝试过
$ sudo ls /mnt/cd
ls: cannot open directory '/mnt/cd': Permission denied
答案1
ISO 9660 Extensions: RRIP_1991A
此消息表明 CD 是使用 Rock Ridge 扩展创建的,这意味着其中的文件和目录可以具有 Unix 风格的用户/组 ID 和分配给它们的权限。除非将权限设置为全局可读,否则如果 CD 的 UID/GID 编号恰好与您的系统不匹配,您可能会在读取 CD 时遇到问题。
因此,您需要覆盖 UID/GID 信息。您可以通过添加一些安装选项来做到这一点:
sudo mount -t iso9660 -o ro,uid=$(id -u),gid=$(id -g) /dev/sr0 /mnt/cd
注意:逗号前后不能有空格!
在执行sudo
命令行之前,您的 shell 将$( ... )
通过运行括号内的命令并将表达式替换为这些命令的结果来替换这些部分。只有完成此操作后,sudo mount ...
才会执行。结果将是这些uid=
选项gid=
将由您的常规非 root 用户帐户的实际 UID/GID 值自动填充。
现在,您将被视为 CD 上任何文件的所有者,除非 CD 具有完全疯狂的权限,否则您应该能够在不成为 root 的情况下读取其上的所有内容。
答案2
您需要执行权限才能访问该目录,因此您需要
sudo chmod 775 /mnt/cd
cd /mnt/cd