![sudo 없이 설치 *후*](https://linux55.com/image/131646/sudo%20%EC%97%86%EC%9D%B4%20%EC%84%A4%EC%B9%98%20*%ED%9B%84*.png)
저는 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 파일 시스템 변형은 파일 권한이나 소유자(디스크에 저장됨)를 지원하지 않습니다. 따라서 커널은 이를 설치 사용자(이 경우 루트)로 기본 설정합니다.
uid=
및 옵션을 전달하여 이를 재정의할 수 있습니다 gid=
. 예를 들어, sudo mount -o loop,uid=1000,gid=1000 -t msdos "$DISK" "$MOUNTPOINT"
. (거기에 인용문을 추가했는데 이는 좋은 습관입니다.) uid/gid가 무엇인지 확인하거나 id
1000이 아닐 가능성이 높거나 다음을 수행할 수 있습니다.
UID=`id -u`
GID=`id -g`
sudo mount -o loop,uid=$UID,gid=$GID -t msdos "$DISK" "$MOUNTPOINT"
man 8 mount
이러한 옵션은 최소한 문서화되어 있습니다.
추신: 질문에는 sudo 없이 설치할 수 있는 몇 가지 옵션(예: USB 스틱)이 있다고 언급되어 있습니다.