Řešení 1:
Pokud existuje souborový systém ro, tato malá jednolinka něco vyskočí.
grep "[[:space:]]ro[[:space:],]" /proc/mounts
Za předpokladu, že obvykle nemáte v mechanice souborový systém ro jako CD, je to dostačující pro některé základní věci typu monitorování a nevyžaduje změnu systému souborů pro zjištění aktuálního stavu. Také nepředpokládá váš typ systému souborů. Pokud chcete, aby se vaše CD nezapisovaly, vložte jej do grep -v iso9660.
Řešení 2:
Stará otázka, ale narazil jsem na ni při hledání stejné pomoci a zdá se, že jsem našel ještě jednodušší způsob bez nutnosti vytvářet soubor.
[ -w /root-rw ] && echo "rw" || echo "ro"
rw
[ -w /root-ro ] && echo "rw" || echo "ro"
ro
Samozřejmě, root-ro je ro připojený fs a root-rw je rw fs.
Řešení 3:
Pokud je souborový systém připojen, přesunul bych se do dočasného adresáře a pokusil se vytvořit soubor. Návratový kód vám řekne, zda je systém souborů pouze pro čtení nebo pro čtení a zápis za předpokladu, že systém souborů není plný (díky Willemu).
Řešení 4:
Právě jsem měl tento problém a toto jsou skutečné pasty ...
Podívejte se na /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
Pro informaci - Tyto dva oddíly se zobrazují jako připojené rw, když používáte pouze příkaz mount.
Řešení 5:
Na základě odpovědi flickerdfly ovlivněné komentářem od WhiteKnight
Vytvořte funkci detektoru jako mouchu.
eval "function is_readonly () {
$( grep -P "\sro[\s,]" /proc/mounts | awk '{print "if echo $1 | grep -q \""$2"\"; then return 0;fi"}' )
return 1;}";
použijte jej k určení, zda je cesta na fs pouze pro čtení
is_readonly /path/to/file/on/read/only/fs && echo "sorry. can't delete that"
A po dokončení jej zlikvidujte
#dump temp function
unset -f is_readonly;