[linux] bash로 디렉토리가 마운트되었는지 확인하십시오.
나는 사용하고있다
mount -o bind /some/directory/here /foo/bar
/foo/bar
bash 스크립트 로 확인 하고 마운트 되었는지 확인 하고 싶습니다 . 그렇지 않은 경우 위의 mount 명령을 호출하고 다른 작업을 수행하십시오. 어떻게 할 수 있습니까?
CentOS는 운영 체제입니다.
답변
mount
인수없이 명령을 실행하면 현재 마운트를 알 수 있습니다. 쉘 스크립트에서 grep
및 if 문 을 사용하여 마운트 지점을 확인할 수 있습니다 .
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
내 예에서 if 문은 grep
일치가 있는지 여부를 나타내는 종료 코드를 확인합니다 . 일치하는 항목이있을 때 출력이 표시되는 것을 원하지 않기 때문에 /dev/null
.
답변
O / S를 언급하지 않았습니다.
Ubuntu Linux 11.10 (및 대부분의 최신 Linux 버전)에는 mountpoint
명령이 있습니다.
다음은 내 서버 중 하나의 예입니다.
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
실제로 귀하의 경우 다음 -q
과 같이 옵션 을 사용할 수 있어야합니다 .
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
도움이 되었기를 바랍니다.
답변
의 설명서는 다음과 mountpoint
같이 말합니다.
주어진 디렉토리 나 파일이 / proc / self / mountinfo 파일에 언급되어 있는지 확인합니다.
의 설명서는 다음과 mount
같이 말합니다.
목록 모드는 이전 버전과의 호환성을 위해서만 유지됩니다. 보다 강력하고 사용자 정의 가능한 출력을 위해 특히 스크립트에서 findmnt (8)를 사용하십시오.
따라서 사용할 올바른 명령findmnt
은 util-linux
패키지의 일부이며 설명서에 따라 다음과 같습니다.
/ etc / fstab, / etc / mtab 또는 / proc / self / mountinfo에서 검색 할 수 있습니다.
따라서 실제로 mountpoint
. 또한 편리한 옵션을 제공합니다.
-M, –mountpoint 경로
마운트 지점 파일 또는 디렉토리를 명시 적으로 정의하십시오. –target도 참조하십시오.
요약하면 디렉토리가 bash로 마운트되었는지 확인하려면 다음을 사용할 수 있습니다.
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
예:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
답변
나는 사용하는 대답을 좋아 /proc/mounts
하지만 간단한 grep을하는 것을 좋아하지 않습니다. 그것은 당신에게 오탐을 줄 수 있습니다. 정말로 알고 싶은 것은 “어떤 행에 필드 번호 2에 대한 정확한 문자열이 있는가 “입니다. 그래서 그 질문을하십시오. (이 경우 확인 중입니다 /opt
)
awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts
# and you can use it in and if like so:
if awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts; then
echo "yes"
else
echo "no"
fi
답변
내 솔루션 :
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
예:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
들어 마크 J. Bobak의 대답 , mountpoint
마운트하면 작동하지 bind
다른 파일 시스템에서 옵션을 선택합니다.
Christopher Neylan의 대답에 대해서는 grep의 출력을 / dev / null로 리디렉션 할 필요가 없으며 grep -q
대신 사용하십시오.
가장 중요한 것은readlink -f $mypath
다음 을 사용하여 경로를 정규화하는 것입니다 .
/path/to/dir/
end with backslash와 같은 경로를 확인 하면 경로/proc/mounts
또는mount
출력은/path/to/dir
- 대부분의 리눅스 버전에서
/var/run/
의 심볼릭 링크입니다/run/
당신이 바인드 마운트 그렇다면,/var/run/mypath
그것은 설치하는 경우, 그것은로 표시됩니다 확인/run/mypath
에서/proc/mounts
.
답변
또 다른 깨끗한 솔루션은 다음과 같습니다.
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
확실히, ‘echo something’은 각 경우에 필요한 모든 작업으로 대체 될 수 있습니다.
답변
여기에 대한 대답은 너무 복잡합니다. 다음을 사용하여 마운트가 있는지 확인하십시오.
cat /proc/mounts | tail -n 1
마지막으로 마운트 된 폴더 만 출력합니다. 모든 폴더를 보려면 tail 명령 만 제거하면됩니다.