Comando simples que alterna entre dois arquivos host

1

Estou usando o / etc / host para mapear localhost para um domínio da web. Eu gostaria de uma maneira rápida de fazer isso em vez de procurar e substituir todas as vezes. Eu coloquei isso no meu arquivo .bashrc.

alias hostchange='
nowdir=$PWD;
cd /etc;
mv hosts hoststempname;
mv hostssecondary hosts;
mv hoststempname hostssecondary;
cd $nowdir'

Estou recebendo este erro e ele não vai progredir, independentemente de y ou n.

mv: rename hosts to hoststempname: Permission denied
override rw-r--r--  root/wheel for hosts? (y/n [n]) 

Eu consegui trabalhar adicionando sudo.

alias hostchange='
nowdir=$PWD;
cd /etc;
sudo mv hosts hoststempname;
sudo mv hostssecondary hosts;
sudo mv hoststempname hostssecondary;
cd $nowdir'

Isso é legítimo, estou tomando um tiro no escuro aqui?

    
por ThomasReggi 10.10.2011 / 06:40

2 respostas

4

Você está no caminho certo! Um casal comenta sobre isso. Geralmente, é uma prática melhor deixar ações de várias linhas como essa para as funções. Eu provavelmente escreveria assim:

change_etc_hosts_file() {
  set -e # stop running if we encounter an error
  sudo \mv -f /etc/hosts /etc/hoststempname
  sudo \mv -f /etc/hostssecondary /etc/hosts
  sudo \mv -f /etc/hoststempname /etc/hostssecondary
  set +e
}
alias changehosts=change_etc_hosts_file

Você notará que também usei caminhos absolutos em vez de alterar o diretório. Esta é geralmente uma idéia melhor (para usar caminhos absolutos). Se você quiser continuar usando parentes, então é melhor fazer isso em um sub-shell para que você não precise manipular o diretório de mudança de volta para $ PWD (que, se você abortar, deixará você em um estado estranho). Para fazer isso como um sub-shell, ficaria assim:

change_etc_hosts_file() {
  ( # use subshell
    cd /etc
    set -e # stop running if we encounter an error
    sudo \rm -f hoststempname # the \ escapes aliases which might cause prompting
    sudo \cp -f hosts hoststempname
    sudo \cp -f hostssecondary hosts
    sudo \cp -f hoststempname hostssecondary
  )
}

O cd acontece dentro do (), que é um novo processo, portanto, não afetará seu diretório de trabalho atual.

    
por 11.10.2011 / 04:39
0

O fato de você ter dúvidas sobre o comando sudo mostra que de alguma forma você sobreviveu até agora no mundo Unix sem possuir o conhecimento básico sobre o conceito de usuários unix ( root especialmente ). Embora essa situação seja incompreensível para mim, sua pergunta junto com os comentários indica claramente que é o caso.

Sim , o que você conseguiu com sudo é exatamente o esperado. Isso é porque:

  • Em sistemas Unix, existe um número de usuários do sistema - você pode chamá-los de 'virtuais' (estes são não para serem confundidos com usuários de computadores humanos) ).
  • Cada arquivo e diretório tem seu proprietário , que é sempre um dos usuários (virtuais).
  • O usuário root , conhecido como superusuário , é a conta especial do sistema que todo Unix precisa ter. Ele pode fazer tudo - tem poder total sobre o sistema.
  • sudo é um comando usado para aproveitar temporariamente os privilégios do usuário "normal" para root , para que algumas tarefas especiais possam ser executadas.

Faça uma leitura adicional sobre root, sudo e permissões de arquivo nestes sites de exemplo: 1 , 2 , 3 , 4 , 5 , 6

    
por 12.10.2011 / 09:07

Tags