마운트 된 파일 시스템이 읽기 전용 또는 읽기 / 쓰기로 마운트되는지 쉽게 판별 할 수 있습니까? 나는 단지 파이프로 생각하고 mount
있었지만 더 쉬운 방법이있을 것이라고 생각했습니다.
mount
항상 당신이 원하는 걸 말해주지 않습니다 의역에, 그것은에서 읽는 /etc/mtab
데이터의 캐시 된 버전 인, 월 어떤 경우에는 구식입니다. 정보 /proc/mounts
는 당신이 정말로 원하는 것입니다.
마운트 된 파일 시스템이 읽기 전용 또는 읽기 / 쓰기로 마운트되는지 쉽게 판별 할 수 있습니까? 나는 단지 파이프로 생각하고 mount
있었지만 더 쉬운 방법이있을 것이라고 생각했습니다.
mount
항상 당신이 원하는 걸 말해주지 않습니다 의역에, 그것은에서 읽는 /etc/mtab
데이터의 캐시 된 버전 인, 월 어떤 경우에는 구식입니다. 정보 /proc/mounts
는 당신이 정말로 원하는 것입니다.
답변:
이 작은 원 라이너는 ro 파일 시스템이 존재하면 무언가를 튀어 나옵니다.
grep "[[:space:]]ro[[:space:],]" /proc/mounts
일반적으로 드라이브에 CD와 같은 ro 파일 시스템이 없다고 가정하면 기본 모니터링 유형에 충분하며 현재 상태를 찾기 위해 파일 시스템을 변경할 필요가 없습니다. 또한 파일 시스템 유형을 가정하지 않습니다. CD를 레코드에서 보관하려면 grep -v iso9660에 파이프하십시오.
grep -P "\sro[\s,]" /proc/mounts
거나grep " ro[ ,]" /proc/mounts
ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0
이 있는 항목 은 오류 발생시 읽기 전용으로 다시 마운트되도록 설정되어 있으므로 mount
다시 마운트가 발생했는지 여부를 알 수 없으므로 실제로는에 ro
있습니다.
$ grep "\sro[\s,]" /proc/mounts
출력 :/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
오래된 질문이지만 동일한 도움을 찾고 파일을 만들지 않고도 더 쉬운 방법을 찾은 것처럼 보입니다.
[ -w /root-rw ] && echo "rw" || echo "ro"
rw
[ -w /root-ro ] && echo "rw" || echo "ro"
ro
물론 root-ro는 ro 마운트 fs이고 root-rw는 rw fs입니다.
man dash
에 대한 -w
옵션 - '파일이 테스트가 참 일지라도 읽기 전용 파일 시스템에 쓰기 권한이 없습니다.' AFAIK 다른 쉘과 동일합니다.
파일 시스템이 마운트되면 임시 디렉토리로 cd하고 파일을 만들려고합니다. 리턴 코드는 파일 시스템이 가득 차지 않은 경우 (Willem에게 감사) 파일 시스템이 읽기 전용인지 또는 읽기 / 쓰기인지를 알려줍니다.
touch afile && { rm afile; echo "read-write"; } || echo "read-only"
mktemp -p /filesystem/of/interest/
'afile'을 사용하는 대신 FILE = 을 사용하여 파일과 파일 이름을 생성합니다. 최고
방금이 문제가 있었고 이것들은 실제 페이스트입니다 ...
/ 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로 마운트 된 것으로 표시됩니다.
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;
내 해결책은 다음과 같습니다.
if findmnt -n -o OPTIONS ${YOUR_MOUNT_POINT} | egrep "^ro,|,ro,|,ro$"; then
echo "Read only!"
fi
예를 들어 루트 파티션이 읽기 전용 모드인지 확인하려면
if [[ ! -z `mount | grep "on / type ext3 (ro,"` ]]
then
echo "It's in read-only mode"
fi
Antonio와 마찬가지로 / proc / mounts를 사용하여 동일한 작업을 수행 할 수 있습니다. sda4 대신 자신의 드라이브를 사용하십시오.
고양이 / proc / mounts | grep / dev / sda4 | awk '{print substr ($ 4,1,2)}'
statvfs
무엇보다도 읽기 전용 마운트를 나타내는 플래그가있는 플래그 필드를 반환하는 것입니다. 불행히도 나는 이것을 직접 수행하는 쉘 명령을 모른다. 나는을 사용stat -f
했지만 그 명령은 플래그를 제외한 모든 것을 보여줍니다.