我正在尝试编写一个在启动时运行的脚本,该脚本检查启动文件系统是否是只读的,如果是,则运行fsck
以修复权限并重新启动。
第 1 点:我无法弄清楚如何仅从ls
命令中 grep 权限行。
第 2 点:我也无法弄清楚如何检查该命令是否返回一个不包含该字符串的字符串w
。
例如,ls -l 命令返回类似于以下内容的行:
drwx-----+ 5 Admin staff 170 Oct 12 05:41 Documents
我只想获取以下字符串:
drwx-----+
然后检查是否没有写权限。
下面是我到目前为止的脚本。
#!/bin/bash
$DIR='home'
#If $DIR has only read permissions run loop
if [[ #point 1 = #point 2 ]] then
#fix permissions on $DIR
umount ${DIR}
fsck
reboot
fi
答案1
if ! [[ -w "$DIR" ]]; then
# $DIR is not writeable
fi
这将适用对于当前用户尽管。不知道是不是你想要的。
编辑:如果您确实需要提取权限字符串,一个简单的方法是使用 stat:
stat -c %A "$DIR"
返回类似以下内容:
-rwxr-xr-x
答案2
永远不要解析输出LS。脚本编写 101.
man find
man findmnt
如果系统已达到多用户目标或运行级别,则根文件系统永远不会以只读方式挂载。这意味着唯一可以找到以只读方式安装的根文件系统的用户是 root。而且 root 可以在任何地方写入,无论权限如何。因此,要检查根文件系统是否是只读的,您可以简单地尝试触摸文件:
if touch /testfile ; then
# The root filesystem is read-write
rm /testfile
else
# The root filesystem is read-only
# Do something about it
fi
然而,这不是必需的。如果系统无法以读写方式挂载根文件系统,则系统应进入单用户 shell。