Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

332
Visualizações
Python obtiene el atributo inmutable del archivo de Linux

Puedo usar os.stat(pathname) para obtener permisos de pathname, mtime, atime.... Sin embargo, tengo un archivo que tiene un atributo '+i', puede verlo en: lsattr /tmp/test.py Is ¿Hay alguna manera de saber si la ruta tiene el atributo '+i' usando python?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No parece haber una función de módulo os para obtener estos atributos de archivo de Linux, pero puede usar el módulo de subprocess para llamar al comando lsattr en Python.

El siguiente código debería funcionar en Python 2 o 3, aunque se puede hacer más compacto en las versiones recientes de Python.

FWIW, tengo el bit i configurado en mi archivo fstab porque me cansé de que se borrara al azar.

 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.split(None, 1)[0] print(is_immutable("/etc/fstab"))

Actualizar

La versión anterior de este código tenía

 return 'i' in data.split

Sin embargo, eso también detectará una 'i' si hay una presente en el nombre del archivo. La nueva versión solo detecta una 'i' en las banderas de atributos. Gracias, sverasch por traer esto a mi atención.

over 4 years ago · Santiago Trujillo Relatório

0

Esta publicación SO relacionada sobre por qué os.chflags no existe en Linux muestra una forma de evitar la ausencia de lsattr en el módulo os usando fcntl . Sin embargo, se basa en copiar definiciones constantes de un archivo de encabezado (ext2fs/ext2_fs.h), por lo que es frágil. Una solución más permanente requeriría escribir algo de C o algo como Cython.

Mientras tanto, la respuesta de PM 2Ring funciona, aunque debe modificarse para que funcione con rutas que contengan la letra "i". ¿Quizás alguien con cierta reputación podría comentar o editar esa respuesta (esta es mi primera publicación)?

 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
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda