2013-08-06 7 views
32

Ich versuche, Soft-Links zwischen Config-Dateien mit Server-Blöcken in den Sites-aktiviert und Websites-Verzeichnisse in/etc/nginx /.Nginx-Sites-aktiviert, Sites-verfügbar: Ich kann keine Soft-Link zwischen den Konfigurationsdateien in Ubuntu erstellen 12.04

Der Befehl ich verwende ist:

sudo ln -s sites-available/foo.conf sites-enabled/ 

Als ich dann ausführen:

ls -l 

Das Ergebnis ist:

lrwxrwxrwx 1 parallels parallels 27 Aug 6 20:44 immigrationinformation.conf -> immigrationinformation.conf 

wo der immigrationinformation.conf -> immigrationinformation.conf Teil mit rotem ein Holzkohle hat Schrift.

Wenn ich dann versuche, auf diese Soft-Link zuzugreifen, wird mir gesagt, dass es kaputt ist.

Wenn ich die Soft-Link in der sites-available Verzeichnis erstellen heißt

sudo ln -s sites-available/foo.conf sites-available/foo_link.conf 

es funktioniert wie normal. Wenn ich dies dann jedoch in das Verzeichnis mit aktivierten Sites verschiebe, wird die Verknüpfung erneut unterbrochen.

Ich kann die Soft-Link über den Dateimanager GUI, aber nicht über die Befehlszeile erstellen. Ich kann auch Hard-Links ohne Probleme erstellen.

Ich vermutete, dass es ein Berechtigungsproblem war, also habe ich mit dem Setzen aller Berechtigungen zu 777 beider Verzeichnisse und den Verzeichnissen selbst gespielt und auch die Eigentümer zu etwas anderem als Wurzel geändert, aber immer noch ohne Glück.

Jede Hilfe würde mir sehr gefallen, danke.

+1

Ich weiß, die Frage ist bereits beantwortet, aber ich wollte zeigen, wo Ihr Fehler war, war es eigentlich sehr einfach, müssen Sie den Dateinamen im zweiten Argument nicht die erste 'sudo ln -s Websites-verfügbar/Sites angeben -enabled/foo.conf im Verzeichnis "/ etc/nginx" –

Antwort

68

Zunächst müssen Sie verstehen, dass das Ziel eines Symlinks ein Pfadname ist. Und es kann in das Verzeichnis absolut oder relativ sein, die die Symlink enthält

Sie haben Angenommen foo.conf in sites-available

Versuchen

cd sites-enabled 
sudo ln -s ../sites-available/foo.conf . 
ls -l 

Nun werden Sie einen Symlink in haben sites-enabled genannt foo.conf, die ein Ziel ../sites-available/foo.conf hat

Nur um klar zu sein, die normale Konfiguration für Apache ist, dass die Konfigurationsdateien für potenzielle Websites in Websites-verfügbar und die Symlinks für die aktivierte Websites leben in Sites-enabl ed, zeigt auf Ziele in Websites-verfügbar. Das scheint nicht so zu sein, wie Sie Ihre Einrichtung beschreiben, aber das ist nicht Ihr Hauptproblem.

Wenn Sie möchten, dass ein Symlink IMMER auf die gleiche Datei zeigt, unabhängig davon, wo sich der Symlink befindet, sollte das Ziel der vollständige Pfad sein.

ln -s /etc/apache2/sites-available/foo.conf mysimlink-whatever.conf 

ist hier (Linie 1 von) der Ausgang meines ls -l/etc/apache2/sites-enabled:

lrwxrwxrwx 1 root root 26 Jun 24 21:06 000-default -> ../sites-available/default 

Sehen Sie, wie das Ziel der Symlink in das Verzeichnis relativ ist, dass enthält den Symlink (er beginnt mit "..", was bedeutet, dass man ein Verzeichnis hochgehen muss).

Hardlinks sind völlig unterschiedlich, denn das Ziel eines Hardlinks ist kein Verzeichniseintrag, sondern ein Dateisystem Inode.

+0

Ok, ich sehe mein Problem jetzt, ich dachte, der 'ln'-Befehl würde den Pfad für mich auflösen, aber jetzt sehe ich, dass ich es einfach tun muss Geben Sie den vollständigen Pfad des Ziels oder den relativen Pfad von der Position im Symlink an. – iamyojimbo