it-swarm.dev

bash로 디렉토리가 마운트되었는지 확인하십시오.

나는 사용하고있다

mount -o bind /some/directory/here /foo/bar

Bash 스크립트로 /foo/bar를 확인하고 마운트되었는지 확인하고 싶습니다. 그렇지 않으면 위의 mount 명령을 호출하십시오. 그렇지 않으면 다른 작업을 수행하십시오. 어떻게해야합니까?

CentOS는 운영 체제입니다.

86
Justin

인수없이 mount 명령을 실행하면 현재 마운트를 알려줍니다. 쉘 스크립트에서 grep 및 if 문으로 마운트 포인트를 확인할 수 있습니다.

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

내 예에서 if 문은 종료 코드 grep를 확인하여 일치 여부를 나타냅니다. 일치하는 항목이있을 때 출력이 표시되는 것을 원하지 않기 때문에 /dev/null.

63
Christopher Neylan

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

희망이 도움이됩니다.

164
Mark J. Bobak

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"
30
Sheljohn

내 해결책 :

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/

Mark J. Bobak 's answer 의 경우, 다른 파일 시스템에서 mountpoint 옵션으로 마운트하면 bind가 작동하지 않습니다.

Christopher Neylan 's answer 의 경우 grep의 출력을/dev/null로 리디렉션 할 필요가 없으며 대신 grep -q를 사용하십시오.

가장 중요한 것은 readlink -f $mypath를 사용하여 경로를 정규화하십시오.

  • /path/to/dir/와 같은 경로를 백 슬래시로 끝나는 경우 /proc/mounts 또는 mount 출력의 경로는 /path/to/dir입니다.
  • 대부분의 Linux 릴리스에서 /var/run//run/의 심볼릭 링크이므로 /var/run/mypath에 대해 바인드를 마운트하고 마운트되었는지 확인하면 /run/mypath로 표시됩니다. /proc/mounts.
1
Tanky Woo

또 다른 깨끗한 솔루션은 다음과 같습니다.

$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted

확실히, '에코 무언가'는 각각의 경우에 필요한 모든 것을 대체 할 수 있습니다.

0
Hudson Santos