python获取linux文件不可变属性

标签 python linux immutability

我可以使用 os.stat(pathname) 获取路径名的 perssmions、mtime、atime.... 但是,我有一个具有“+i”属性的文件,您可以通过以下方式查看它: lsattr/tmp/test.py 有没有办法通过使用 python 知道路径名是否具有 '+i' 属性?

最佳答案

This related SO post关于为什么 os.chflags 在 Linux 上不存在显示了一种使用 解决 os 模块中缺少 lsattr 的方法fcntl.但是,它依赖于从头文件 (ext2fs/ext2_fs.h) 复制常量定义,因此它很脆弱。更永久的解决方案需要编写一些 C 语言或类似 Cython 的东西。

与此同时,PM 2Ring 的答案有效,但应该对其进行修改以使用包含字母“i”的路径。也许有名望的人可以评论或编辑该答案(这是我的第一篇文章)?

import subprocess

def is_immutable(fname):
    p = subprocess.Popen(['lsattr', fname], bufsize=1, stdout=subprocess.PIPE)
    data, _ = p.communicate()
    #print(data)
    return 'i' in data

def is_immutable_safe(file_path):
    """Check if the immutable flag is set on a Linux file path

    Uses the lsattr command, and assumes that the immutable flag
    appears in the first 16 characters of its output.
    """
    return 'i' in subprocess.check_output(['lsattr', file_path])[:16]

# These assertions will pass if the immutable bit is not set on
# /etc/inittab on your system
assert is_immutable('/etc/inittab') is True
assert is_immutable_safe('/etc/inittab') is False

关于python获取linux文件不可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35501249/

相关文章:

java - flyway 3.1 迁移校验和不匹配。校验和的计算取决于平台

c - IPC msgrcv - 只接收两种特定类型的消息

java - 在 Java 中定义我自己的不可变数组

python - 克服字符串不可变性的 "disadvantages"

python - 让基于Django的桌面应用程序连接远程DB安全吗?

Python Mysql 变量与 %

python - PKCS #7 使用 Python 和 PyOpenSSL 分离签名

linux - Linux 上的 NuGet : Error getting response stream

javascript - 如何在 Javascript 中使用共享的、不可变的引用类型跟踪更改

python - 如何计算defaultdict(python)中元组中唯一关键元素的数量?