programing

디렉토리가 bash로 마운트되었는지 확인합니다.

bestprogram 2023. 4. 17. 22:35

디렉토리가 bash로 마운트되었는지 확인합니다.

사용하고 있다

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

확인하고 싶다/foo/barbash 스크립트를 사용하여 마운트되었는지 확인합니다.그렇지 않으면 위의 mount 명령을 호출하고, 그렇지 않으면 다른 작업을 수행합니다.이거 어떻게 해?

CentOS는 운영체제입니다.

굳이 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

의 실행mount인수를 지정하지 않으면 현재 마운트가 표시됩니다.셸 스크립트에서 마운트 지점을 확인할 수 있습니다.grep및 if 스테이트먼트:

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

이 예에서 if-statement는 다음 명령어의 종료 코드를 확인하는 것입니다.grep일치 여부를 나타냅니다.일치하는 항목이 있을 때 출력이 표시되지 않도록 하기 때문에 로 리다이렉트합니다./dev/null.

의 매뉴얼mountpoint다음과 같이 말합니다.

는 지정된 디렉토리 또는 파일이 /syslog/self/mountinfo 파일에 기재되어 있는지 여부를 확인합니다.

의 매뉴얼mount다음과 같이 말합니다.

목록 모드는 하위 호환성을 위해서만 유지됩니다.보다 견고하고 커스터마이즈 가능한 출력을 얻으려면 특히 스크립트에서 findmnt(8)를 사용합니다.

따라서 올바른 명령어는 이며, 이 명령어 자체는 패키지의 일부이며 매뉴얼에 따라 다음과 같습니다.

/etc/fstab, /etc/mtab 또는 /tc/self/mountinfo에서 검색할 수 있습니다.

그래서 실제로 더 많은 것을 검색합니다.mountpoint또한 다음과 같은 편리한 옵션도 제공합니다.

-M, --마운트포인트 패스

마운트 포인트파일 또는 디렉토리를 명시적으로 정의합니다.'--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"

솔루션:

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. 보박의 답변은mountpoint탑재하면 동작하지 않는다bind옵션을 지정합니다.

Christopher Neylan의 답변에 대해 grep의 출력을 /dev/null로 리다이렉트할 필요는 없습니다.사용하기만 하면 됩니다.grep -q대신.

가장 중요한 것은 다음과 같이 경로를 정규화하는 것입니다.

  • 다음과 같은 경로를 체크하는 경우/path/to/dir/백슬래시로 끝남, 경로/proc/mounts또는mount출력은/path/to/dir
  • 대부분의 Linux 릴리즈에서는/var/run/의 심볼 링크입니다./run/바인드를 마운트하는 경우/var/run/mypath마운트되어 있는지 확인하면 다음과 같이 표시됩니다./run/mypath/proc/mounts.

나는 그 답이 마음에 든다./proc/mounts단순한 GREP는 좋아하지 않습니다.그러면 잘못된 긍정 결과가 나올 수 있습니다. 알아야 할 것은 "do any any rows have this string for field number 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

이 답변은 너무 복잡합니다.마운트가 존재하는지 확인하십시오.

cat /proc/mounts | tail -n 1

마지막으로 마운트된 폴더만 출력합니다.모두 표시하려면 tail 명령을 삭제하십시오.

또 다른 클린 솔루션은 다음과 같습니다.

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

물론, '에코'는 각각의 경우에 필요한 모든 것으로 대체될 수 있습니다.

.bashrc에서 다음과 같은 별칭을 만들었습니다.

alias disk-list="sudo fdisk -l"

언급URL : https://stackoverflow.com/questions/9422461/check-if-directory-mounted-with-bash