Evitar que eu acidentalmente apague um arquivo

2

Sou usuário (não raiz) em um servidor RHEL. Quero continuar editando um arquivo em meu diretório pessoal, mas defina uma permissão para não excluí-lo acidentalmente. Isso é possível? Posso fazer isso, então eu preciso ser secundariamente solicitado antes de excluí-lo (por exemplo, "Você tem certeza? / N")?

    
por Angus 04.08.2016 / 15:18

5 respostas

3

Você remove um arquivo desvinculando-o para o diretório em que ele é referenciado (um arquivo também pode ser referenciado em mais de um diretório ou várias vezes (com nomes diferentes) em um diretório nós geralmente chamamos hard links).

As permissões importantes não são do arquivo, mas do diretório ao qual ele está vinculado.

Então, se você colocá-lo em um diretório, não terá acesso de gravação a:

mkdir important-files
echo test > important-files/myfile
chmod a-w important-files # make the directory not writable

Então, você não poderá excluir myfile , mas ainda poderá modificar o arquivo, desde que seja gravável.

    
por 04.08.2016 / 16:06
2

Se você criar um subdiretório e remover o acesso de gravação de si mesmo, não poderá remover nenhum arquivo do diretório, mas ainda poderá modificá-los.

$ mkdir dir ; echo something > dir/foo ; chmod a-w dir
$ $EDITOR dir/foo
$ rm -rf dir/
rm: cannot remove 'dir/foo': Permission denied

Embora você ainda possa destruir ou truncar o conteúdo durante a edição, a melhor opção seria ter backups. O administrador do sistema pode (deve?) Fazer backups em um diretório que você não pode excluir, mas uma simulação barata pode ser feita basicamente com a mesma idéia acima: Crie um diretório e crie um script que restaure temporariamente a permissão de gravação, faça cópias de backup no diretório e limpa a permissão de gravação novamente.

    
por 04.08.2016 / 16:01
2

I want to be able to continue editing a file in my home directory, but set a permission so I don't accidentally delete it. Is this possible?

Em suma, não por arquivo com as habituais permissões do Unix. Talvez as ACLs possam fornecer um controle tão refinado?

Can I make it so I need to be secondarily prompted before deleting it (eg. "Are you sure? y/n")?

Uma solução comum para isso é definir um alias para rm to rm -i , e. g. em ~/.bash_aliases (se suportado pela sua distribuição), ~/.bashrc ou até mesmo globalmente em /etc/bashrc (que pode ser substituído pelas atualizações do pacote bash , então é melhor não usar essa opção):

$ cat .bash_aliases 
alias rm='rm -i'
...
    
por 04.08.2016 / 15:28
1

Eu usaria hardlinks com uma pasta de backup, onde eu manteria um link físico para cada arquivo que eu quero ficar desabilitado, caso a exclusão ocorra. No caso de você excluir o arquivo, você pode criar um link físico a partir do diretório de backup para sua pasta pessoal. Esta não é uma solução perfeita, mas relativamente segura.

$ mkdir filebak
$ echo content >file
$ ln file filebak/file
$ rm file
$ ln filebak/file file
$ cat file
content
    
por 04.08.2016 / 16:59
1

Isso funciona apenas para um arquivo especificado na variável myFile.

#
# Wrapper around /bin/rm to prevent accidental 'rm myFile'
#
rm (){
local rm=$(which rm)

myFile="important.txt"

if [ -f "$myFile" ]; then
  $rm -iv "$myFile"
else
  $rm "$@"
fi

}

Lembre-se de adicionar isso ao / etc / profile e depois ./etc/profile .

    
por 05.08.2016 / 01:43