2012-02-01 20 views
216

ディレクトリのシンボリックリンクを作成したディレクトリのシンボリックリンクを作成するための私のコードです:は以下のUbuntu

sudo ln -s /usr/local/nginx/conf/ /etc/nginx 

私はすでにディレクトリ/etc/nginxを作成しました。私は、ソースディレクトリ(/usr/local/nginx/conf/)の内容をターゲットディレクトリの内容(/etc/nginx)にしたいだけです。しかし、コードを実行すると/etc/nginxにはconfの代わりにconfというディレクトリがあります。そのディレクトリには、私が望む内容が含まれていますが、間違った場所にあります。

なぜターゲットフォルダにディレクトリの内容を入れるのではなく、ターゲットフォルダにディレクトリを置いたのですか?

+0

後にシンボリックリンクをループする前にそれが防ぐことができます。リンクするフォルダを右クリックし、[リンクを作成]オプションを選択します。リンクされたフォルダを作成し、必要に応じて移動したり名前を変更したりすることができます。 –

+3

linuxの 'bind mount'機能を使用してください。 [例](http://backdrift.org/how-to-use-bind-mounts-in-linux) – gkiko

答えて

222

第2引数がディレクトリの場合、これはlnの動作です。それは最初のarg へのリンクをの中に置きます。 /etc/nginxをシンボリックリンクにしたい場合は、最初にそのディレクトリを削除し、同じコマンドを実行する必要があります。

+1

関連:http://unix.stackexchange.com/questions/84175/weird-behavior-of-gnu -ln – corazza

+5

Unix.SEのリンクがここに戻ります。私たちは循環依存を持っているようだ。 – kaiser

27

これは、ターゲットが既に存在し、ディレクトリである場合に実行されることを文書化したものです。 /etc/nginxにする場合は、にsymlinkを含めるのではなく、シンボリックリンクをにする必要があります。スクリプトで

+42

あなたの答えは、既に答えを知っている読者の文脈でのみ意味があります。 –

+1

私は実際にマウントされたUSBデバイスのルートへのシンボリックリンクを作成できます(このため、このフォルダを最初に消去することはできません)。 –

+1

@GrigoryKornilovあなたは存在しないものを含め、あなたが望むものにシンボリックリンク*を作成することができます。この質問は、むしろシンボリックリンクが作成される場所(それが指し示す場所ではない)に関するものでした。ファイルシステム内の特定のパス名は、通常のファイルか、ディレクトリかシンボリックリンク(またはソケットまたはパイプまたはデバイス)です。同時に複数のものを* *できません(つまり、同じ名前の複数の別個のファイルを持つことはできません)。 – Celada

8

は、このような便利なものです:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi 

「悪い」再作成します。また、ファイル(デフォルトのファイルブラウザ)を使用することができます再実行スクリプト