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

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

有没有简单的方法可以确定已安装的文件系统是作为只读还是读写安装的?我原本只想用管道,mount但我想可能有更简单的方法。

答案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 到临时目录并尝试创建一个文件。返回代码将告诉您文件系统是只读还是读写,前提是文件系统未满(感谢 Willem)。

答案4

基于flickerfly 的回答,受到 WhiteKnight 评论的影响

创建一个检测函数。

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

使用它来确定路径是否位于只读文件系统上

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

完成后丢弃

#dump temp function
unset -f is_readonly;

相关内容