/etc/fstab
에 몇 가지 항목을 읽어야하는 스크립트를 작성했습니다. /etc/fstab
에 수동으로 일부 항목을 추가하여 스크립트를 테스트 한 다음 파일을 원래 내용으로 수동으로 복원했습니다. 이제이 테스트를 자동화하고 별도의 스크립트로 실행하고 싶습니다. 그러나 저는 /etc/fstab
을 변경하는 아이디어에 익숙하지 않습니다. /etc/fstab
의 백업 복사본을 만든 다음 테스트를 마친 후 원래 파일을 복원하는 방법을 생각했습니다. 임시로 fstab
의 위치를 변경할 수 있으면 선호합니다./etc/fstab의 위치를 변경하십시오
말에 fstab
의 위치를 변경하는 방법이 있나요, mount -a
스크립트 내에서 실행될 때 /usr/local/etc/fstab
그래서 /usr/local/etc/fstab
의 항목 만 처리됩니다?
업데이트 :
나는 LIBMOUNT_FSTAB=/usr/local/etc/fstab
을 설정하여 bishop's solution을 사용했다. 나는 과거에 여러 번에 걸쳐 mount
의 맨 페이지를 보았지만이 변수를 결코 알지 못했습니다. 나는이 변수가 항상 거기에 있었는지 확실하지 않고 간단히 간과했거나 어떤 시점에서 추가 되었다면 확실하지 않습니다. mount from util-linux 2.27.1
을 사용하고 있으며 최소한이 버전에서는 LIBMOUNT_FSTAB
을 사용할 수 있으며 설명서 페이지에 설명되어 있습니다. 끝 부분의 ENVIRONMENT
섹션에 있습니다. 이렇게하면 내 자동화 된 테스트가 앞으로 훨씬 안전해질 것입니다.
UPDATE2 :
이 적절한 프로그래밍 질문하거나, 내가 LIBMOUNT_FSTAB의 사용을 보여줍니다 작은 스크립트를 작성하기로 결정했습니다 여부 논의가 있었다입니다.
#!/bin/bash
libmount=libmount_fstab
tmpdir="/tmp/test_${libmount}_folder" # temporary test folder
mntdir="$tmpdir/test_${libmount}_mountfolder" # mount folder for loop device
img="$tmpdir/loop.img" # dummy image for loop device
faketab="$tmpdir/alternate_fstab" # temporary, alternative fstab
# get first free loop device
loopdev=$(losetup -f)
# verify there is a free loop device
if [[ -z "$loopdev" ]];then
echo "Error: No free loop device" >&2
exit 1
fi
# check that loop device is not managed by default /etc/fstab
if grep "^$loopdev" /etc/fstab ;then
echo "Error: $loopdev already managed by /etc/fstab" >&2
exit 1
fi
# make temp folders
mkdir -p "$tmpdir"
mkdir -p "$mntdir"
# create temporary, alternative fstab
echo "$loopdev $mntdir ext2 errors=remount-ro 0 1" > "$faketab"
# create dummy image for loop device
dd if=/dev/zero of="$img" bs=1M count=5 &>/dev/null
# setup loop device with dummy image
losetup "$loopdev" "$img" &>/dev/null
# format loop device so it can be mounted
mke2fs "$loopdev" &>/dev/null
# alter location for fstab
export LIBMOUNT_FSTAB="$faketab"
# mount loop device by using alternative fstab
mount "$loopdev" &>/dev/null
# verify loop device was successfully mounted
if mount | grep "^$loopdev" &>/dev/null;then
echo "Successfully used alternative fstab: $faketab"
else
echo "Failed to use alternative fstab: $faketab"
fi
# clean up
umount "$loopdev" &>/dev/null
losetup -d "$loopdev"
rm -rf "$tmpdir"
exit 0
내 스크립트는 주로 첨부되지 않은 외부 장치를 주로 관리합니다. 루프 디바이스를 사용하여 외부 디바이스를 시뮬레이트하여 스크립트의 기능을 테스트합니다. 여러 물리적 장치를 연결하거나 다시 연결할 필요가 없기 때문에 이렇게 많은 시간을 절약 할 수 있습니다. 이것은 fstab
대안을 사용할 수 있다는 것이 매우 유용한 기능이며, 구문 분석/변경이 fstab
일 때마다 안전한 테스트 시나리오를 스크립팅 할 수 있음을 증명합니다. 실제로 스크립트를 부분적으로 다시 작성하여 대체 스크립트 fstab
을 사용할 수 있도록 결정했습니다. 대부분의 외부 장치는 시스템에 거의 연결되지 않으므로 해당 항목은 단지 /etc/fstab
까지 어수선하게 정리됩니다.
그래서 프로그래밍 질문입니다. Unix.SE는 Unix 구성에 관한 질문을하기에 더 좋은 곳입니다. – Barmar
그건 나에게 거꾸로하고있는 것처럼 들린다. 스크립트가 (환경 변수가 설정되어 있지 않으면'/ etc/fstab'를 사용하여) 환경 변수에서 위치를 가져 오게하십시오. –
AFAIK,'mount'에게'fstab'에 대해 대체 위치를 사용하도록 지시 할 방법이 없습니다. – Barmar