确定文件系统或分区是通过 Bash 脚本挂载 RO 还是 RW?

Jak*_*son 41 linux bash mount

是否有一种简单的方法可以确定已挂载的文件系统是挂载为只读还是读写?我想只是管,mount但我认为可能有更简单的方法。

fli*_*fly 59

如果存在 ro 文件系统,这个小单行会弹出一些东西。

grep "[[:space:]]ro[[:space:],]" /proc/mounts 
Run Code Online (Sandbox Code Playgroud)

假设您的驱动器中通常没有像 CD 这样的 ro 文件系统,这对于一些基本的监视类型的东西就足够了,并且不需要更改文件系统来查找当前状态。它也不假定您的文件系统类型。如果您想将 CD 保留在记录之外,则将其通过管道传输到 grep -v iso9660 中。

  • 这是一个比“尝试创建文件”更好的答案,谢谢。 (4认同)
  • 我今天刚吃了一个。这是 ro 中的根文件系统,但它在启动时是 rw。`$ grep "\sro[\s,]" /proc/mounts` 输出:`/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0` (3认同)
  • 我必须使用 `grep -P "\sro[\s,]" /proc/mounts` 或 `grep " ro[ ,]" /proc/mounts` (2认同)

小智 14

老问题,但我在寻找相同的帮助时遇到了它,似乎找到了更简单的方法而无需创建文件。

    [ -w /root-rw ] && echo "rw" || echo "ro"
    rw
    [ -w /root-ro ] && echo "rw" || echo "ro"
    ro
Run Code Online (Sandbox Code Playgroud)

当然,root-ro 是 ro 挂载的 fs,root-rw 是 rw fs。

  • 这似乎测试文件系统权限,但不是挂载状态。 (3认同)
  • 确实如此,但它非常简单,并且适用于某些情况(例如我的情况)。 (2认同)

Dav*_*ris 7

如果文件系统已挂载,我会 cd 到一个临时目录并尝试创建一个文件。如果文件系统未满,返回码将告诉您文件系统是只读还是读写(感谢 Willem)。

  • 如果您只是检查文件系统的安装方式,从 mount 获取输出就足够了。但我必须同意,这是一种更详尽的检查方法。有时 mount 会报告它以读/写方式挂载,但实际上是只读的。一个常见的例子是设备上存在大量 SCSI 错误,导致设备通过只读状态来保护自身。创建文件将毫无疑问地验证读+写/只读。 (2认同)

小智 5

我刚刚遇到了这个问题,这些都是真正的粘贴...

看看 /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
Run Code Online (Sandbox Code Playgroud)

仅供参考 - 仅使用 mount 命令时,这两个分区显示为正在安装 rw。

  • 如果 'ro' 是唯一的挂载选项,这将不起作用 (2认同)