我需要以更加人类可读的格式获取文件或文件夹的访问权限,使用symbolic表示法,例如u = rwx,g = srwx,o-rwx(可能是粘性位)
>使用stat –format’%a’,我获得格式为2770,八进制格式的结果
>使用stat –format’%A’,我获得格式为drwxrws的结果—,人类可读
我需要一个命令来获得像u = rwx,g = srwx,o-rwx这样的格式(与chmod符号模式兼容)
> [u | g | o]:用户/组/其他或全部用户
> [=]:授予权利
> [rwxst]:未授予订单重要性的权利列表
> [-rwx]:对于右撤销(如果没有授予权利)
我试过这个(但它没有处理所有情况,特别是粘性位):
stat --format '%A' temp |
sed -E 's/^.(...)(...)(...)/u=\1,g=\2,o=\3/g' | # split by triplet
sed 's/=---/-rwx/g' | # revoker grants
sed 's/rws/srwx/g' | # setgid with x ...
sed 's/--S/s/g' | # setgid without x ...
sed ... nead more transormation... # manage sticky bit setuid setgid
我搜索更优雅的方式.
示例输入==>产量
> drwxrws — ==> u = rwx,g = srwx,o-rwx(以d ==>目录开头)
> drwxrwxrwx ==> u = rwx,g = rwx,o = rwx或ugo = rwx或a = rwx
> -r-xrw-r– ==> u = rx,g = rw,o = r(以 – ==>常规文件开头)
> -rwx – S — ==> u = rwx,g = s,o-rwx(S大写)
> —— s – t ==> u = -srwx,g = sx,o = xt(Stickybit)
输入格式==>比如命令stat或ls -al
输出格式==>必须与chmod兼容
这个完整的版本似乎有效,但我确信我们可以简化它,(即没有多个sed)
stat --format '%A' a |
sed -E 's/^.(...)(...)(...)/u=\1,g=\2,o=\3/g' | # split by triplet
sed -E 's/s/xs/g' | # setgid ou setuid with x ...
sed -E 's/t/xt/g' | # sticky bit with x ...
sed -E 's/S/s/g' | # setgid ou setuid without x ...
sed -E 's/T/t/g' | # sticky bit alone
sed -E 's/-//g' | # remove -
sed -E 's/=(,|$)/-rwx\1/g' # revoker grants
解决方法:
sed命令采用多个-e’sed-command’选项,因此修复代码以便它使用sed的一次调用是微不足道的:
stat --format '%A' a |
sed -E -e 's/^.(...)(...)(...)/u=\1,g=\2,o=\3/g' \
-e 's/s/xs/g' \
-e 's/t/xt/g' \
-e 's/S/s/g' \
-e 's/T/t/g' \
-e 's/-//g' \
-e 's/=(,|$)/-rwx\1/g'
您不能使用尾随注释,但这与您显示的相同.您的s / s / xs / g操作与您所描述的输出不匹配(对于具有组执行权限的sgiD,您显示sx而不是xs).有些人将所有这些选项都刷成单个-e选项,用分号分隔表达式.我更喜欢使用-e来分隔单独的选项.有时,-f script.sed选项从文件中读取脚本是明智的.我不认为这个脚本已达到该阈值,但不要忘记该选项存在.
美在旁观者的眼中.我不相信权限的替代表示比正常表示要好得多,但也许我只是使用Unix太长时间了.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。