私は/ 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
このコマンドについて質問があるという事実は、sudo
Unixユーザーの概念に関する基本的な知識がなくても、Unixの世界で何とか生き残ったことを示唆しています(根特に)。私はこのような状況を理解することはできませんが、あなたの質問と意見でこれが本当であることを明らかにすることができます。
はい、あなたが達成した結果はsudo
まさにあなたが期待したものと同じです。これが原因です:
- Unixシステムにはいくつかあります。システムユーザー- 「仮想」と呼ぶことができます。いいえ人間と勘違いするコンピュータユーザー)。
- すべてのファイルとディレクトリに所有者、常に(仮想)ユーザーの一人です。
- これ根ユーザー、呼び出されました根すべてのUnixが持っている必要がある特別なシステムアカウントです。彼は何でもできる。システムのすべての力を持っています。
sudo
「一般」ユーザー権限を一時的に悪用するために使用されるコマンド。根だからいくつかの特別な作業を行うことができます。