Dosya sisteminin veya bölümünün Bash Script üzerinden RO mu yoksa RW mi monte edildiğini belirleyin.


37

Bağlı bir dosya sisteminin Salt Okunur mu yoksa Salt Okunur mu yazıldığını belirlemenin kolay bir yolu var mı? Sadece pipo yapmayı düşünüyordum mountama daha kolay bir yolu olabileceğini düşündüm.


1
Bunun için ideal sistem statvfs, diğerlerinin yanı sıra salt okunur bir montajı gösteren bir bayrakla işaretli bir bayrak alanı döndürür. Maalesef bunu doğrudan yapmak için bir kabuk komutu bilmiyorum. Kullanırdım stat -f, ama bu komut bayraklar dışındaki her şeyi gösteriyor.
kasperd

2
Not: @Travis Campbell yardımsever onun yorumunda açıkladığı gibi serverfault.com/a/277449/236916 , mountzaman istediğini söylemez: paraphrase için, ondan okur /etc/mtabverilerin önbelleğe alınmış sürümü olan ve mayıs bazı durumlarda modası geçmiş olabilir. Buradaki bilgi /proc/mountsgerçekten istediğin şey.
mwfearnley

Yanıtlar:


50

Bir ro dosya sistemi varsa, bu küçük tek gömlek bir şey çıkar.

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

Genelde, sürücüdeki CD gibi bir ro dosya sistemine sahip olmadığınızı varsayarsak, bazı temel izleme türü işleri için yeterlidir ve mevcut durumu bulmak için dosya sisteminin değiştirilmesi gerekmez. Ayrıca dosya sistemi türünüzü de üstlenmez. CD'lerinizi kayıtların dışında tutmak istiyorsanız grep -v iso9660 içine yerleştirin.


1
grep -P "\sro[\s,]" /proc/mountsgrep " ro[ ,]" /proc/mounts
Kullanmak

3
Bu, teşekkür ettiğiniz "bir dosya oluşturmayı dene" den çok daha iyi bir cevap.
Vagnerr

Bu size mevcut durumu değil, sadece montaj için kullanılan seçenekleri anlatmıyor mu? Örneğin, seçeneklerin ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0bulunduğu bir giriş, sadece bir hata durumunda okunacak şekilde yeniden monte edilmek üzere ayarlanmıştır, bu yüzden, bu mountödemenin gerçekleşip gerçekleşmediğini kontrol etmeden , dolayısıyla şu anda içeride olup olmadığını kontrol etmeden ro.
Walf,

Bu benim deneyimim değildi.
flickerfly

3
Bugün bir tane vardı. Bu, ro içindeki kök dosya sistemidir, ancak başlatıldığında rw idi. $ grep "\sro[\s,]" /proc/mountsÇıktı:/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
flickerfly

11

Eski soru, ancak aynı yardımı aradım ve dosya oluşturmaya gerek kalmadan daha kolay bir yol bulmuş gibiyim.

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

Tabii ki, root-ro ro fs ve root-rw rw fs'dir.


3
Bu, dosya sistemi iznini test ediyor gibi görünüyor, ancak bağlama durumu değil.
Robert Calhoun

1
Doğru, ama çok basit ve bazı durumlarda işe yarar (benimki gibi).
Yajo

Gönderen man dashiçin -wseçenek - 'dosyası bu test doğruysa belirtiyor olsa bile salt okunur bir dosya sisteminde yazılabilir değil.' AFAIK bu diğer mermiler için aynıdır.
Graeme

7

Dosya sistemi kurulursa, geçici bir dizine cd atar ve bir dosya oluşturmaya çalışırdım. Dönüş kodu, dosya sisteminin dolu olmaması koşuluyla dosya sisteminin Salt Okunur veya Salt Okunur olduğunu size söyler (teşekkürler Willem).


1
Eğer sadece bir filesytem'in nasıl monte edildiğini kontrol ediyorsanız, çıktıyı mount'dan almak yeterli olacaktır. Ama kabul etmek zorundayım, bu kontrol etmek için daha ayrıntılı bir yoldur. Mount, okuma / yazma monte edildiğini bildirebildiği durumlar vardır ancak gerçekte salt okunurdur. Bunun yaygın bir örneği, bir aygıttaki salt okunur duruma geçerek kendisini korumasına neden olan çok sayıda SCSI hatasıdır. Bir dosya oluşturmak hiç şüphesiz okuma + yazma / salt okunur olduğunu doğrular.
Alex,

1
Bu düzenli olurdu:touch afile && { rm afile; echo "read-write"; } || echo "read-only"
Glenn jackman

Yazılı olarak yazılmış olan scriptlet'in yarış durumu var. mktemp -p /filesystem/of/interest/Dosya ve dosya adını oluşturmak için sadece 'afile' kullanmak yerine FILE = 'i kullanırdım. en iyi
Rik Schneider

1
Bu hatalı bir tam dosya sistemini salt okunur olarak bildirecektir.
Willem

@David, Bu gerçek bir çözüm yerine stopgap kesmek gibi görünüyor.
Pacerier

4

Ben sadece bu sorunu yaşadım ve bunlar gerçek macunlar ...

/ Proc / mounts - bir göz atın

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

FYI - Bu iki bölüm sadece mount komutunu kullanırken rw olarak monte edildiğini gösterir.


2
'Ro' sadece mount seçeneği ise bu işe yaramaz
Willem

3

WhiteKnight'dan bir yorumdan etkilenen flickerdfly'nin cevabına dayanarak

Bir dedektör işlevi sinek oluşturun.

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

Bir yolun salt okunur fs olup olmadığını belirlemek için kullanın

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

Ve bittiğinde elden çıkarın

#dump temp function
unset -f is_readonly;

1

İşte benim çözümüm:

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

0

Örneğin, kök bölümünün Salt Okunur modunda olup olmadığını kontrol etmek için:

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

2
Bu tüm davaları yakalayamıyor. / sbin / mount, şu anda bağlı olan dosya sistemlerinin önbelleğe alınmış sürümü (ve bunların geçerli seçenekleri) için / etc / mtab dosyasına bakacaktır. Eğer / bir nedenden dolayı ro'yu yeniden monte etmeyi başarırsa, mtab doğru şekilde güncellenmeyebilir, bu yüzden / hala durgun görünebilir. / proc / mounts her zaman doğru değeri göstermelidir.
Travis Campbell,

1
/ Proc / mounts kullanma ihtiyacına katılıyorum. Bence bu test, bir kabuğa (OP sorduğundan beri bash) indirgenmesi gereken, başka bir yolun alt dizisi olmadığından emin olan bir işleve indirgenmesi gerektiğini düşünüyorum.
Skaperen

0

Antonio'ya benzer şekilde, aynı işlemi yapmak için / proc / mounts kullanabilirsiniz. Sda4 yerine kendi sürücünüzü kullanın.

kedi / proc / bağlar | grep / dev / sda4 | awk '{print substr (4,1,2)}'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.