解決策 1:
ro ファイルシステムが存在する場合、この小さなワンライナーは何かをポップアウトします。
grep "[[:space:]]ro[[:space:],]" /proc/mounts
通常、ドライブに CD のような ro ファイル システムがない場合、いくつかの基本的な監視タイプのものには十分であり、現在の状態を見つけるためにファイル システムを変更する必要はありません。また、ファイル システムの種類も想定していません。 CD をレコードから除外したい場合は、それを grep -v iso9660 にパイプします。
解決策 2:
古い質問ですが、同じヘルプを探していて、ファイルを作成する必要のないさらに簡単な方法を見つけたようです.
[ -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:
ファイル システムがマウントされている場合は、cd で一時ディレクトリに移動し、ファイルの作成を試みます。リターン コードは、ファイル システムがいっぱいでない場合、ファイル システムが読み取り専用か読み取り/書き込みかを示します (ありがとう、ウィレム)。
解決策 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
参考までに - これらの 2 つのパーティションは、mount コマンドを使用するだけで rw としてマウントされているように表示されます。
解決策 5:
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;