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

나는 사용하고있다

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

/foo/barbash 스크립트 로 확인 하고 마운트 되었는지 확인 하고 싶습니다 . 그렇지 않은 경우 위의 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)를 사용하십시오.

따라서 사용할 올바른 명령findmntutil-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 명령 만 제거하면됩니다.