Como apagar um arquivo do sistema de arquivos no Linux quando não tenho permissão?

2

Eu re-instalei o ns2, mas não deletei um arquivo do sistema de arquivos com o caminho:

/usr/bin/ns

Então, quando eu digito no meu terminal:

which ns

Eu recebo:

/usr/bin/ns 

Em vez do caminho que defini, que é:

/home/me/ns-allinone-2.35/bin/ns

Isso está no meu diretório pessoal me . Como devo excluir o arquivo no sistema de arquivos com um nome semelhante? As propriedades deste arquivo dizem em permissões que eu não possuo este arquivo, então não posso alterar as permissões.

Não posso executar meus scripts tcl se o caminho não estiver definido corretamente e para defini-lo. Preciso excluir a duplicata ns . Como obter permissão para excluir? E como deletá-lo usando meu terminal?

    
por pythonspark 19.03.2014 / 14:40

3 respostas

7

Não é exigido que você exclua o arquivo /usr/bin/ns para que which e exec executem automaticamente /home/me/ns-allinone-2.35/bin/ns .

Tudo o que você precisa fazer é colocar /home/me/ns-allinone-2.35/bin no seu $PATH antes de /usr/bin .

Aqui está a maneira errada de fazer isso:

export PATH="${PATH}:/home/me/ns-allinone-2.35/bin"

Nesse caso, /usr/bin (por padrão, em $PATH ) será anterior na expansão $PATH do que você deseja, portanto, você executará /usr/bin/ns quando execute ns ou which ns .

Aqui está a maneira correta de fazer isso:

export PATH="/home/me/ns-allinone-2.35/bin:${PATH}"

Agora, apenas digitar ns ou which ns apontará para o que você deseja, sem precisar excluir nada.

Atualização: Se você quiser, para evitar modificar seu $PATH em ~/.bashrc ou similar, você pode criar um wrapper de script bash em torno do seu script tcl que modifica o caminho primeiro. Algo parecido com isto:

#!/bin/bash
export PATH="/home/me/ns-allinone-2.35/bin:${PATH}"
tcl ...

Se você quiser excluir /usr/bin/ns mesmo assim , e não tiver acesso à conta root ou à capacidade de sudo (ou colocar-se no arquivo /etc/sudoers ), e /usr/bin/ns é de propriedade de root e não é gravável pelo mundo, então você está praticamente sem opções para excluir este arquivo, a menos que :

  • Você pode inicializar o computador em outro sistema operacional (live CD, live USB, etc.), obter root no esse sistema operacional e excluir o arquivo;
  • Você executa algum tipo de exploração ( eu não recomendo isso se você não possui a máquina! )

Basicamente, "como faço para excluir um arquivo que não tenho permissão para excluir" é uma pergunta carregada: a pergunta assume que o proprietário da máquina quer que você exclua esse arquivo, e quer para lhe dar permissão. Se o dono da máquina não é você , você não deve nem mesmo fazer esta pergunta, e nós não o ajudaremos a invadir ou invadir a máquina de outra pessoa. Seria como dizer "como dirijo esse carro na rua quando não tenho as chaves?" - sim, boa sorte com isso.

    
por 19.03.2014 / 14:53
1

Uma rápida olhada no meu próprio /usr/bin/ mostra que o diretório é de propriedade do root. Supondo que você possa usar sudo ou su , rm como root ou use chown para alterá-lo para seu nome de usuário ou grupo.

Você pode se tornar usuário root simplesmente emitindo o comando su . Na maioria dos terminais, você verá sua alteração de prompt de $ para # indicando que você está atualmente conectado ao terminal como root. Certifique-se de que quando você terminar como root você exit imediatamente, para não inadvertidamente emitir outros comandos com acesso tão elevado ao sistema de arquivos, o que pode levar a que você cause danos ao seu sistema de arquivos. De lá, você pode usar rm on /usr/bin/ns .

A rota mais segura é usar o comando sudo para permitir que um comando seja executado como root apenas para essa instância, emitindo o comando rm como então:

sudo rm /usr/bin/ns

    
por 19.03.2014 / 14:52
1

@allquixotic está absolutamente certo. Você não pode excluir um arquivo se você não tiver permissões para isso e a única maneira seria obter as permissões por um exploit ou usando algo como sudo se você tiver o direito. Esse é o objetivo das permissões do sistema de arquivos.

Agora, outra abordagem que você pode usar para contornar isso é configurar um alias. Abra o arquivo de inicialização do seu shell ( ~/.bashrc se você estiver usando bash ) e adicione esta linha:

alias ns='/home/me/ns-allinone-2.35/bin/ns'

Aliases de bash são avaliados antes de $PATH ser pesquisado, então, por padrão, isso fará com que o comando ns aponte para sua versão instalada localmente.

    
por 19.03.2014 / 18:49