2つのホストファイルを切り替える簡単なコマンド

2つのホストファイルを切り替える簡単なコマンド

私は/ etc / hostを使用してlocalhostをWebドメインにマップしています。毎回検索して置き換えることなく、これを行う簡単な方法が必要です。私の.bashrcファイルに入れました。

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

このエラーが発生します。 yやnはすべて進行しません。

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

sudoを追加して機能させました。

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

これは合法的ですか?私が暗闇の中で撮影しているのだろうか?

答え1

あなたは正しい道を行っています!これについていくつかのコメントがあります。通常、これらの複数行の操作は関数に委ねることをお勧めします。次のように書くこともできます。

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

また、ディレクトリを変更する代わりに絶対パスを使用したこともわかります。一般的にこれは良い考えです(絶対パスを使用)。親戚を引き続き使用するには、通常はサブシェルでこれを行うのが最善です。これにより、ディレクトリを$ PWDに戻す操作を処理する必要がなくなります(中断すると奇妙な状態になります)。サブシェルとして実行するには:

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
  )
}

CD は新しいプロセス () 内で発生するため、現在の作業ディレクトリには影響しません。

答え2

このコマンドについて質問があるという事実は、sudoUnixユーザーの概念に関する基本的な知識がなくても、Unixの世界で何とか生き残ったことを示唆しています(特に)。私はこのような状況を理解することはできませんが、あなたの質問と意見でこれが本当であることを明らかにすることができます。

はい、あなたが達成した結果はsudoまさにあなたが期待したものと同じです。これが原因です:

  • Unixシステムにはいくつかあります。システムユーザー- 「仮想」と呼ぶことができます。いいえ人間と勘違いするコンピュータユーザー)。
  • すべてのファイルとディレクトリに所有者、常に(仮想)ユーザーの一人です。
  • これユーザー、呼び出されましたすべてのUnixが持っている必要がある特別なシステムアカウントです。彼は何でもできる。システムのすべての力を持っています。
  • sudo「一般」ユーザー権限を一時的に悪用するために使用されるコマンド。だからいくつかの特別な作業を行うことができます。

もっと読むsudo次のサイトのルートとファイルのアクセス許可について:12サム456

関連情報