sudoなしでインストール*後*

sudoなしでインストール*後*

私はFAT32の内部を研究しようとしています。これを行うには、FAT32イメージを作成してマウントし、コマンドラインでいくつかのファイル操作を実行しようとします。質問によるとここ、sudoを使用して画像をマウントする方法を知っています。マウントポイント内でファイル操作を実行するためにsudoが必要な理由はまだ疑問に思っています。以下は、動作しているものと動作しないことを示す小さなbashスクリプトです。ルートなしでこれを行う方法を教えてくれる人はいますか?

DISK=/tmp/disk1.raw
MOUNTPOINT=/tmp/mount1
SIZE=512M
rm -f $DISK
rm -rf $MOUNTPOINT

# create disk image
qemu-img create -f raw $DISK $SIZE
# format disk image
mkfs.fat -v -F 32 $DISK
# make mountpoint
mkdir -p $MOUNTPOINT

# can't be helped
sudo mount -o loop -t msdos $DISK $MOUNTPOINT
# should work but doesn't
mkdir -p $MOUNTPOINT/tmp/
# actually works
sudo mkdir -p $MOUNTPOINT/tmp/
# should work but doesn't
dd of=$MOUNTPOINT/tmp/ticket2.txt if=/dev/zero bs=512 count=9
# actually works
sudo dd of=$MOUNTPOINT/tmp/ticket2.txt if=/dev/zero bs=512 count=9

ls -lR $MOUNTPOINT
sudo umount $MOUNTPOINT

答え1

MS-DOSファイルシステムのバリエーションは、ファイル権限または所有者(ディスクに保存されている)をサポートしません。したがって、カーネルはそれをインストールユーザー(この場合はroot)にデフォルト設定します。

uid=そしてオプションを渡すことでそれを上書きできますgid=。たとえば、sudo mount -o loop,uid=1000,gid=1000 -t msdos "$DISK" "$MOUNTPOINT"。 (そこに引用符を追加しましたが、これは良い習慣です。)uid / gidが何であるかを確認するか、id1000ではない可能性が高い、または次のことを実行できます。

UID=`id -u`
GID=`id -g`
sudo mount -o loop,uid=$UID,gid=$GID -t msdos "$DISK" "$MOUNTPOINT"

man 8 mountこれらのオプションは少なくとも文書化されています。

PS:質問にはsudoなしでインストールできるオプション(USBスティックなど)がいくつかあると言われています。

関連情報