Altera as datas de acesso, alteração e modificação de um arquivo para a mesma data passada

2

Para um utilitário que estou desenvolvendo, seria útil se eu pudesse definir todas as três datas nomeadas associadas aos arquivos em algum diretório para uma data anterior.

Eu sei que posso usar touch para definir o acesso & modifique as datas, mas preciso que todas as três sejam as mesmas (usadas como ponto de referência / data).

Existe uma maneira de fazer isso (acesso root ok)

Editar:

  1. Eu encontrei isto: link que propõe (para ext2 / 3 / Apenas 4):

em que '200901010101' é uma amostra de data e hora; e este link para encontrar o "arquivador" necessário acima:

df /pathtofile | awk 'NR == 2 {print $1}'

Eu tentei isso em um arquivo de teste, mas o debugfs-call levou muito tempo e eu o Ctrl-C. (Então eu realmente não sei se isso vai funcionar ...)

  1. Outra ideia é possivelmente usar uma VM com a data do sistema definida para a data anterior desejada, mas não sei como configurá-la.

  2. Relaciona-se a (2) mas não usa uma VM, de link :

As a possible workaround you can set the system time to the ctime you want to impose, then touch the file and then restore the system time.

NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"

mas não tenho certeza de quão seguro / arriscado isso seria.

    
por slashmais 28.12.2015 / 07:21

1 resposta

2

Você não pode alterar a hora sem "trapacear", e isso requer raiz. Consulte Como posso alterar a data de 'alteração' de arquivo?

Como você está fazendo testes, eu optaria pela abordagem da VM. Execute seu programa em uma máquina virtual. Você pode definir a data do sistema dentro da máquina virtual para o que quiser (lembre-se de não configurar o NTP).

Como alternativa, se você estiver testando um aplicativo (em oposição a um sistema inteiro), poderá falsificar as leituras de tempo do arquivo por meio de LD_PRELOAD ( exemplo similar ) ou ptrace (mais difícil, mas funciona mesmo contra binários estaticamente vinculados) . Isso não é apropriado para todos os cenários, isso realmente depende do tipo de bugs em potencial com os quais você está testando. libfaketime permite que você execute um programa e faça crer que ele está sendo executado em um horário diferente; ele também pode lembrar-se de registros de data e hora falsificados, para que você possa aproveitá-lo e não ter que escrever nenhum código extra de baixo nível.

    
por 28.12.2015 / 23:56

Tags