マウントされたファイルシステムが読み取り専用または読み取り/書き込みとしてマウントされているかどうかを判断する簡単な方法はありますか?私はただパイプmount
することを考えていましたが、もっと簡単な方法があるかもしれないと思いました。
mount
言い換えに、それからの読み取り:いつもあなたが望むものを教えてくれていない/etc/mtab
データのキャッシュされたバージョンである、と5月場合によっては時代遅れになります。情報/proc/mounts
はあなたが本当に欲しいものです。
マウントされたファイルシステムが読み取り専用または読み取り/書き込みとしてマウントされているかどうかを判断する簡単な方法はありますか?私はただパイプmount
することを考えていましたが、もっと簡単な方法があるかもしれないと思いました。
mount
言い換えに、それからの読み取り:いつもあなたが望むものを教えてくれていない/etc/mtab
データのキャッシュされたバージョンである、と5月場合によっては時代遅れになります。情報/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
オプション- 「ファイルには、このテストが真を示している場合でも、読み取り専用のファイルシステム上の書き込み可能ではありません。」知る限り、これは他のシェルでも同じです。
ファイルシステムがマウントされている場合、一時ディレクトリに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
参考-これら2つのパーティションは、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の代わりに独自のドライブを使用します。
cat / proc / mounts | grep / dev / sda4 | awk '{print substr($ 4,1,2)}'
statvfs
とりわけ、読み取り専用マウントを示すフラグとともにフラグフィールドを返すものです。残念ながら、これを直接行うためのシェルコマンドは知りません。私はを使用stat -f
していましたが、このコマンドはフラグ以外のすべてを表示します。