.png)
Ich hoffe, dies ist kein Duplikat. Ich habe gesucht, konnte aber keine Antwort finden.
Ich verwende Linux Mint. Ich habe eine Datenpartition, die beim Booten automatisch gemountet wird. Von dieser Partition habe ich symbolische Links zu meinem /home/user
Ordner erstellt.
Das Problem ist, dass ich auf meiner Datenpartition einen Ordner „www“ habe (es handelt sich um eine Sicherungskopie von Websites, die ich wiederherstellen muss) und ich muss einen symbolischen Link davon erstellen /home/user
. Ich muss auch einen symbolischen Link darauf /var/www/html
erstellen, damit ich Änderungen an Dateien/Ordnern auf meinem Server vornehmen kann. Ist das möglich? Was wäre der beste Weg, das zu tun?
Bisher habe ich den Ordner „www“ direkt gespeichert, /home/user
sodass ich nur einen symbolischen Link benötigte. Aber jetzt, wo ich eine separate Datenpartition habe, weiß ich nicht, wie ich das anstellen soll. Ich könnte nur einen symbolischen Link für den Server haben, müsste aber alle neu hinzugefügten Informationen manuell kopieren/sichern, und wenn es eine Möglichkeit gibt, würde ich das lieber automatisch machen.
Antwort1
ja, es ist möglich, einen Ordner mit mehreren Orten zu verknüpfen. Soweit ich Ihre Frage verstehe, möchten Sie zwei symbolische Links:
/home/user/www -> /mnt/partition/www
/var/www/html -> /mnt/partition/www
Ich passe meine Antwort gerne an, falls dies anders sein sollte. Das allgemeine Verfahren sollte jedoch dasselbe sein.
ln -s /mnt/partition/www /home/user/www
ln -s /mnt/partition/www /var/www/html
Wenn Sie die gesamte Verzeichnisstruktur von /mnt/partition/www
unter /var/www/html
und benötigen /home/user
, also zwei identische „Ordner“, die sich gegenseitig synchronisieren, sehen Sie sich Bind-Mounts an.
Antwort2
Wenn ich das richtig verstehe, haben Sie (etwas abstrahiert):
/data/html/xyz.html
Sie haben einen Link in Ihrem Home-Verzeichnis:
/home/user/html -> /data/html
Die Daten werden also tatsächlich auf der separaten Partition gespeichert./data
Jetzt können Sie die Datei xyz.html aus /var/www/html verwenden, indem Sie Folgendes verknüpfen:
/var/www/html -> /data/html
Die Befehle hierfür sind:
cd /home/user
ln -s /data/html .
cd /var/www
ln -s /data/html .
Ich sehe jedoch zwei Probleme bei diesem Setup.
- Ihr Server ist möglicherweise nicht so eingerichtet, dass er einem Link unter folgen kann
/var/www
. Apache muss beispielsweise diese+FollowSymLinks
Option in seiner Konfiguration haben, da dies ein potenzielles Sicherheitsrisiko darstellt. - Jede bearbeitete Änderung wird sofort auf den Webserver „gepusht“. Sie sollten dies wahrscheinlich über ein Revisionskontrollsystem tun, damit nur das festgeschriebene Material auf die Website gelangt.
Es gibt verschiedene Möglichkeiten, die oben genannten Probleme zu lösen. Wenn /
der Grund dafür, dass ich alles auf stelle, der Speicherplatz auf ist, /data
würde ich ein erstellen /data/www
und den Webserver von dort aus betreiben, anstatt auf /var/www
(wodurch die Notwendigkeit entfällt, Symlinks zu folgen). Ich würde auch Mercurial verwenden, um das Material unter Revisionskontrolle zu halten /data/html
und dies an einen Standardspeicherort klonen, /data/www
damit Sie von /data/html
(oder /home/user/html
) committen können, und wenn alles stabil ist, führen Sie ein Commit und Push aus, um das Ding von der Website aus bereitzustellen.
Antwort3
Unter Linux kann jeder physische Speicher beliebig oft jedem Pfad im Dateisystem zugewiesen werden. Dateipfade sind lediglich Inodes (Handles/Zeiger) zum physischen Speicher. Sie können dieselbe physische Datei/denselben physischen Ordner auf mindestens drei Arten verschiedenen Dateisystempfaden zuordnen:
1) Mounten. So wie Sie ein ganzes physisches Laufwerk in ein Verzeichnis mounten können, können Sie auch ein beliebiges vorhandenes Verzeichnis an einen anderen Ort mounten (Bind Mount). Dies ist für jede Anwendung im System völlig transparent, kein Programm wird tatsächlich bemerken, dass der Inhalt des Verzeichnisses von einem anderen Ort gemountet wird. In Ihrem Fall können Sie ganz einfach Folgendes tun:
mount --bind /mnt/partition/www/ /var/www/html/
Dies ist die beste Vorgehensweise, da Webserver es im Allgemeinen nicht mögen, symbolischen Links standardmäßig zu folgen, da diese Zugriff auf Teile des Dateisystems gewähren können, auf die nicht zugegriffen werden sollte.
Sie können jeden Ordner beliebig oft in jeden anderen Ordner einbinden. Das Originalverzeichnis weiß nicht einmal, dass es woanders eingebunden ist, das Betriebssystem kümmert sich darum.
2) Symlinks. Symbolische Links sind bloß Aliase. Dies ist die schwächste Bindung. Im Gegensatz zum Mounten enthalten symbolische Links einfach (im Wesentlichen in Textform) einen Pfad, auf den sie verweisen. Das bedeutet, dass Sie sie nicht bei jedem Systemstart mounten müssen (oder wenn Sie sie brauchen), und der Pfad existiert möglicherweise nicht einmal. Er kann sich auch ändern. Die meisten Anwendungen arbeiten mit ihnen wie mit normalen Dateien, aber es gibt Einschränkungen: Verzeichnis-Symlinks haben einige Probleme, denn wenn Sie hineingehen und wieder zurückkommen, kommen Sie nicht unbedingt an derselben Stelle an. Außerdem wissen Anwendungen, dass die Datei/das Verzeichnis ein Link ist. Um Zyklen zu vermeiden, begrenzt das Betriebssystem die Länge der Kette der zu verfolgenden Links (fast nie ein Problem, es sei denn, Sie missbrauchen sie sehr stark). Natürlich können Sie so viele Links haben, wie Sie möchten, das ursprüngliche Verzeichnis weiß nicht einmal davon.
ln -s /mnt/partition/www/ /var/www/html/
ln -s /mnt/partition/www/ /home/user/www/
3) Hardlinks. Da Dateisysteme unter Unix als eine Reihe von Inodes konzipiert sind, die auf physische Speicherorte auf der Festplatte zeigen, ist jeder Inode nur eine Adresse, die dorthin führt. Sie können also viele Inodes (IMSELBEN DATEISYSTEM) haben, die auf dieselbe Adresse zeigen. Wenn Sie den Befehl -s
switch on nicht verwenden ln
, wird ein Hardlink erstellt (falls möglich). Alle Dateinamen, die auf denselben physischen Speicher zeigen, sind tatsächlich gleichwertig. Es gibt keine „ursprüngliche“ Datei. Alle sind dieselbe Datei, es gibt nur zwei oder mehr Namen für dasselbe. Da beim Löschen eigentlich nur der Inode entfernt wird (und der Speicherplatz nur dann als frei markiert wird, wenn KEINE Inodes darauf zeigen), wird beim Löschen einer Datei nicht die andere entfernt. Es wird nur der Name entfernt. Wenn Sie alle Hardlinks entfernen, gibt es natürlich keine Inodes, die Ihnen sagen, wo Sie den Speicher finden, und er ist schließlich verloren (das Dateisystem kann den Speicherplatz dann für etwas anderes verwenden).
Das hilft dir in diesem Fall nicht weiter. Hardlinks funktionieren nur innerhalb desselben Dateisystems (derselben Partition), da jede Partition ihre eigene physikalische Adressverwaltung hat. Aber ich habe das nur der Vollständigkeit halber mit aufgenommen.
Erstellen Sie also symbolische Links zu allem, Sie können sogar Links zu anderen Links erstellen (so /usr/lib
sind die meisten Bibliotheken verknüpft, sodass der allgemeine Bibliotheksname mit der jeweils installierten Version verknüpft ist). Wenn Sie Root-Zugriff haben, empfehle ich, das Verzeichnis, das vom Webserver verwendet wird, per Bind-Mount zu mounten. Das ist die korrektere Vorgehensweise. Wahrscheinlich werden Sie nie Hardlinks benötigen, aber Sie sollten wissen, dass es sie gibt.