파일 시스템이 스크립트로 마운트되었는지 확인하는 방법


19

나는 스크립팅에 익숙하지 않다 ... 나는 매우 기본적인 것들을 할 수 있지만 이제는 손이 필요하다.

백업이 필요한 경우에만 마운트되는 로컬 파일 시스템이 있습니다.

나는 이것으로 시작합니다.

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

내가 말했듯이, 나는 스크립팅에 매우 기본적입니다. mount리턴 코드를보고 명령 의 상태를 확인할 수 있다고 들었습니다 .

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

나는 그것을 확인하는 방법을 모른다. 어떤 안내?


2
당신은 ; then당신의 스크립트에 재미 매달려 있습니다.
Mat

왜 우리는 MOUNT var를 내보내고 ";"도 제거합니까?
Mike Q

서버 폴트 , 스택 오버 플로우유닉스 및 리눅스 스택 교환 에 대해서도 비슷한 질문이 있습니다.
sasha

답변:


19

mountshell special parameter를 사용하여 가장 잘 작성된 실행 파일 의 상태 코드를 확인할 수 있습니다 ?.

보낸 사람 man bash:

? Expands to the exit status of the most recently executed foreground pipeline.

mount명령 을 실행 한 후 즉시 실행 echo $?하면 이전 명령의 상태 코드가 인쇄됩니다.

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

모든 실행 파일에 잘 정의 된 상태 코드가있는 것은 아닙니다. 최소한 성공 (0) 또는 실패 (1) 코드로 종료해야하지만 항상 그런 것은 아닙니다.

예제 스크립트를 확장하고 수정하기 if위해 명확성을 위해 중첩 구조를 추가했습니다 . 상태 코드를 테스트하고 작업을 수행하는 유일한 방법은 아니지만 학습 할 때 읽는 것이 가장 쉽습니다.

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

"종료 및 종료 상태"에 대한 자세한 정보는 고급 Bash 스크립팅 안내서를 참조하십시오 .


1
내보낼 필요가 없습니다 $MOUNT. 파일 시스템에 단어 분할 (공백 등)이 필요한 문자가 있으면이 스크립트도 중단됩니다. 당신은해야한다 항상 당신의 확장을 인용.
Chris Down

@ChrisDown 당신이 맞아요. 나는 명백한 매달려있는 '; then'만 삭제했습니다. 앞으로 내 답변을보다 정확하게 수정하려면 언제든지 수정하십시오.
George M

어 ... 이것은 여전히 ​​깨질 것이다. 아직 확장을 인용하지 않았습니다. 당신의 조언에 따라 지금 할게요.
Chris Down

또한 악명 높은 "Advanced"Bash 스크립팅 안내서에 링크하지 않는 것이 좋습니다. 오류로 가득 차 있으며 사람들에게 스크립트가 아닌 버그를 작성하도록 지시합니다. BashGuide 가 훨씬 더 나은 대안입니다.
Chris Down

2
@ChrisDown "물건을 제대로 인용하지 않으면 단어를 나누면 아기를 먹을 것입니다." 살아갈 단어.
George M

35

많은 Linux 배포판에 mountpoint명령이 있습니다. 디렉토리가 마운트 포인트인지 여부를 확인하는 데 명시 적으로 사용할 수 있습니다. 이처럼 간단합니다.

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi

1
루트가 아닌 사용자가 실행할 때 권한 거부 오류가 발생하므로 encfs를 확인하려고하면이 방법이 실패합니다.
Denys S.

내 솔루션은 encfs와 함께 작동합니다.
Theodore R. Smith

3

한 가지 더 방법 :

if findmnt ${mount_point}) >/dev/null 2>&1 ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi

안녕하세요 @sungtm; 별도의 새 계정으로 로그인 한 것으로 보입니다. 당신 때문에 "일" 계정이 많은 활동을하지 않고, 당신이 당신의 새로운 계속 사용하는 것이 좋습니다 것 "sungtm" 그것은 간단하다로, 계정을. 그러나 계정을 병합하려면이 의견을 표시하여 알려 주시면 Stack Exchange 팀에 연락하겠습니다. 감사합니다!
Jeff Schaller

encfs의 findmnt경우 매개 변수와 함께 제공되어야합니다 --source encfs. 그렇지 않으면 상위 마운트 로 폴백 되므로 항상 마운트 될 디렉토리를 고려합니다.
Burkart 2016 년

2

루트가 필요하지 않은 가장 쉬운 방법은 다음과 같습니다.

if $(df | grep -q /mnt/ramdisk); then

fi

또는 마운트되어 있지 않은지 확인하십시오.

if ! $(df | grep -q /mnt/ramdisk); then

fi

mount명령은 루트 액세스가 필요하지 않으며 df마운트 지점이 아닌 디스크 공간에 중점을 둡니다 ...
Philippe Gachoud

1

짧은 진술

장착되어 있는지 확인하십시오 .

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

장착되어 있지 않은지 확인하십시오 .

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"

0

나는 아래 스크립트로 시도했다

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

파일 시스템 이름 만 입력하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.