如何在没有root身份的情况下将文件写入USB?

Eri*_*ric 11 linux usb mount debian-squeeze

我有一个 4GB 的 U 盘,我sudo cfdisk /dev/sdb使用sudo mkfs /dev/sdb1. 当我在 Debian Squeeze 上运行时,它当前设置为 ID 83with System 。Linuxsudo fdisk -l

pmount用来挂载外部 USB 驱动器。所以做一个pmount /dev/sdb1挂载它,/media/usb0因为我有ff。线路输入/etc/fstab

/dev/sdb1    /media/usb0    auto    rw,user,noauto    0    0
Run Code Online (Sandbox Code Playgroud)

发出pmount命令后,USB 被挂载到/media/usb0-- 做一个ls -l /media/usb0给我:

drwx------ 2 root root 16384 Mar   2 20:08 lost+found
Run Code Online (Sandbox Code Playgroud)

所以我开始我的业务并尝试将文件复制到,/media/usb0但我收到以下错误:

$ cp ~/foo.bar /media/usb0
cp: cannot create regular file `/media/usb0/foo.bar': Permission denied
Run Code Online (Sandbox Code Playgroud)

但是当我用 发出相同的cp命令时sudo,我可以复制文件。

为什么会发生这种情况?我尝试了我拥有的其他 USB 驱动器,并且可以在没有此错误的情况下写入它们。我格式化或重新分区 U 盘的方式有问题吗?

use*_*686 7

您使用ext*文件系统(ext2ext3ext4;我不记得默认值)格式化了 sdb1 分区。这是 Linux 系统上的默认文件系统,并使用Unix 文件权限来确定谁可以修改文件或目录。新的文件系统总是以根(/media/usb0在这种情况下)拥有的开始root:root,并且通常具有仅允许所有者修改的权限。

要亲自查看此内容,请挂载文件系统,然后运行ls -ld /media/usb0以查看当前所有权/权限。我的猜测是:

drwx------ 2 root root 16384 Mar   2 20:08 /media/usb0
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方法是 a)chown将挂载的文件系统安装到您自己的 Linux 帐户,或 b) 授予每个人写权限chmod

然而,最终,这不是一个好的解决方案,因为创建的文件将由您的 UID 拥有,而不是用户名;当 USB 驱动器连接到不同的系统时,这将很快导致帐户不匹配。假设您完全可以连接它,也就是说 – Windows 不支持 ext3没有额外的技巧,因此 NTFS ( mkfs.ntfs) 或 FAT32 ( mkfs.vfat) 将是文件系统的更好选择。