파일 시스템 또는 파티션이 Bash Script를 통해 RO 또는 RW로 마운트되는지 확인하십시오.


37

마운트 된 파일 시스템이 읽기 전용 또는 읽기 / 쓰기로 마운트되는지 쉽게 판별 할 수 있습니까? 나는 단지 파이프로 생각하고 mount있었지만 더 쉬운 방법이있을 것이라고 생각했습니다.


1
이에 대한 이상적인 시스템 호출은 statvfs무엇보다도 읽기 전용 마운트를 나타내는 플래그가있는 플래그 필드를 반환하는 것입니다. 불행히도 나는 이것을 직접 수행하는 쉘 명령을 모른다. 나는을 사용 stat -f했지만 그 명령은 플래그를 제외한 모든 것을 보여줍니다.
kasperd

2
참고 : @Travis 캠벨 유용하게 그의 주석에서 설명으로 serverfault.com/a/277449/236916 , mount항상 당신이 원하는 걸 말해주지 않습니다 의역에, 그것은에서 읽는 /etc/mtab데이터의 캐시 된 버전 인, 월 어떤 경우에는 구식입니다. 정보 /proc/mounts는 당신이 정말로 원하는 것입니다.
mwfearnley

답변:


50

이 작은 원 라이너는 ro 파일 시스템이 존재하면 무언가를 튀어 나옵니다.

grep "[[:space:]]ro[[:space:],]" /proc/mounts 

일반적으로 드라이브에 CD와 같은 ro 파일 시스템이 없다고 가정하면 기본 모니터링 유형에 충분하며 현재 상태를 찾기 위해 파일 시스템을 변경할 필요가 없습니다. 또한 파일 시스템 유형을 가정하지 않습니다. CD를 레코드에서 보관하려면 grep -v iso9660에 파이프하십시오.


1
내가 사용했다 grep -P "\sro[\s,]" /proc/mounts거나grep " ro[ ,]" /proc/mounts
WhiteKnight

3
이것은 "파일을 시도하고 작성하십시오"감사합니다.
Vagnerr

현재 상태가 아니라 마운트에 사용 된 옵션 만 알려주지는 않습니까? 예를 들어, 옵션 ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0이 있는 항목 은 오류 발생시 읽기 전용으로 다시 마운트되도록 설정되어 있으므로 mount다시 마운트가 발생했는지 여부를 알 수 없으므로 실제로는에 ro있습니다.
Walf

그것은 내 경험이 아니었다.
플리커 플라이

3
나는 오늘 막 하나를 가졌다. 이것은 ro의 루트 파일 시스템이지만 시작했을 때 rw였습니다. $ grep "\sro[\s,]" /proc/mounts출력 :/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
깜박임

11

오래된 질문이지만 동일한 도움을 찾고 파일을 만들지 않고도 더 쉬운 방법을 찾은 것처럼 보입니다.

    [ -w /root-rw ] && echo "rw" || echo "ro"
    rw
    [ -w /root-ro ] && echo "rw" || echo "ro"
    ro

물론 root-ro는 ro 마운트 fs이고 root-rw는 rw fs입니다.


3
파일 시스템 권한을 테스트하지만 마운트 상태는 테스트하지 않는 것 같습니다.
Robert Calhoun

1
사실이지만 매우 간단하며 (내와 같은) 일부 경우에는 작동 할 수 있습니다.
Yajo

에서 man dash에 대한 -w옵션 - '파일이 테스트가 참 일지라도 읽기 전용 파일 시스템에 쓰기 권한이 없습니다.' AFAIK 다른 쉘과 동일합니다.
Graeme

7

파일 시스템이 마운트되면 임시 디렉토리로 cd하고 파일을 만들려고합니다. 리턴 코드는 파일 시스템이 가득 차지 않은 경우 (Willem에게 감사) 파일 시스템이 읽기 전용인지 또는 읽기 / 쓰기인지를 알려줍니다.


1
파일 시스템이 마운트되는 방법을 확인하고 있다면 마운트에서 출력을 얻는 것으로 충분합니다. 그러나 나는 이것이 더 철저한 점검 방법이라는 것에 동의해야합니다. mount가 읽기 / 쓰기로 마운트되었다고보고 할 수 있지만 실제로는 읽기 전용입니다. 일반적인 예로는 장치의 많은 SCSI 오류로 인해 읽기 전용으로 이동하여 장치 자체를 보호 할 수 있습니다. 파일을 작성하면 의심없이 읽기 + 쓰기 / 읽기 전용을 확인할 수 있습니다.
Alex

1
touch afile && { rm afile; echo "read-write"; } || echo "read-only"
잭맨

작성된 스크립틀릿에는 경쟁 조건이 있습니다. mktemp -p /filesystem/of/interest/'afile'을 사용하는 대신 FILE = 을 사용하여 파일과 파일 이름을 생성합니다. 최고
Rik Schneider 2016

1
전체 파일 시스템을 읽기 전용으로 잘못보고합니다.
Willem

@David, 이것은 진정한 해결책이 아닌 스탑 갭 해킹처럼 보입니다.
Pacerier

4

방금이 문제가 있었고 이것들은 실제 페이스트입니다 ...

/ proc / mounts를 살펴보십시오-

egrep " ro,|,ro " /proc/mounts 
/dev/sda3 / ext4 ro,seclabel,relatime,barrier=1,data=ordered 0 0    
/dev/sda5 /var ext4 ro,seclabel,relatime,barrier=1,data=ordered 0 0

참고-이 두 파티션은 mount 명령을 사용할 때 rw로 마운트 된 것으로 표시됩니다.


2
'ro'가 유일한 마운트 옵션 인 경우에는 작동하지 않습니다
Willem

3

WhiteKnight의 의견에 영향을받는 flickerdfly의 답변을 바탕으로

감지기 기능을 즉석에서 만듭니다.

eval "function is_readonly () {
          $( grep -P "\sro[\s,]" /proc/mounts | awk '{print "if echo $1 | grep -q \""$2"\"; then return 0;fi"}' )
      return 1;}";    

경로가 읽기 전용 fs인지 여부를 판별하는 데 사용하십시오.

is_readonly /path/to/file/on/read/only/fs && echo "sorry. can't delete that"

완료되면 폐기하십시오

#dump temp function
unset -f is_readonly;

1

내 해결책은 다음과 같습니다.

if findmnt -n -o OPTIONS ${YOUR_MOUNT_POINT} | egrep "^ro,|,ro,|,ro$"; then
  echo "Read only!"
fi

0

예를 들어 루트 파티션이 읽기 전용 모드인지 확인하려면

if [[ ! -z `mount | grep "on / type ext3 (ro,"` ]]
then
   echo "It's in read-only mode"
fi

2
모든 경우를 파악할 수는 없습니다. / sbin / mount는 / etc / mtab에서 현재 마운트 된 파일 시스템의 캐시 된 버전 및 현재 옵션을 찾습니다. /가 어떤 이유로 ro를 다시 마운트하면 mtab이 올바르게 업데이트되지 않아 /가 여전히 rw로 나타날 수 있습니다. / proc / mounts는 항상 올바른 값을 보여 주어야합니다.
트래비스 캠벨

1
/ proc / mounts를 사용해야한다는 데 동의합니다. 이 테스트는 참조되는 문자열이 다른 경로의 하위 문자열이 아닌지 확인하는 쉘 (OP가 요청하기 때문에 bash) 기능으로 축소되어야한다고 생각합니다.
Skaperen

0

Antonio와 마찬가지로 / proc / mounts를 사용하여 동일한 작업을 수행 할 수 있습니다. sda4 대신 자신의 드라이브를 사용하십시오.

고양이 / proc / mounts | grep / dev / sda4 | awk '{print substr ($ 4,1,2)}'

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