Wie viele gleichnamige Verzeichnisse über das LAN auf /Volumes mounten?

In Windows 10 ist es über den Windows Explorer möglich, eine Netzwerkverbindung für ein Remote-Verzeichnis herzustellen, und dank des Ansatzes ist es möglich, diese Verbindung einem LaufwerkMap network drive zugeordnet zu halten . Wenn also drei Computer denselben Verzeichnisnamen haben – betrachten wir Dokumente – ist dies möglich :

M:\documents
N:\documents
W:\documents

In Mac - El Capitan - durch:

  • Finder-> Go->Connect to Server

Möglich ist die Verbindung mitsmb://hostname/documents

Daher documentswird das Remote-Verzeichnis eingehängt/Volumes

/Volumes
 documents

Das Problem ist, was passiert, wenn zwei andere Computer denselben Dokumentenverzeichnisnamen haben ? - Betrachten Sie es als obligatorische Richtlinie des Unternehmens - Wie wird es montiert /Volumes? Wie erkennen Sie jedes gemountete Remote-Verzeichnis auf jeder Maschine im LAN? Ich möchte das gemountete Verzeichnis über den Finder umbenennen, aber das ist nicht möglich.

Ich möchte in MacOS /Volumesfolgende Struktur haben:

/Volumes
 192.168.1.55
    documents
 192.168.1.56
    documents
 192.168.1.57
    documents

Es soll die isolierten Pfade zur Verfügung haben, die für einige Bash-Shell-Skripte verwendet werden können. Wie erreichen Sie dieses Ziel?

Sie hätten einfach zwei davon mounten und sich ansehen können, was das Betriebssystem in /Volumes erstellt hat, wissen Sie. Es hängt eine Zahl an.
@MarcWilson Das hängt jedoch von der Reihenfolge ab, in der Sie sie anhängen, die möglicherweise nicht jedes Mal gleich ist. Es ist eine gute Frage, etwas hinzufügen zu können, das im Pfad gesteuert werden kann (obwohl es nicht gut ist, es zweimal zu fragen).
Ja. Ich möchte nicht davon abhängig sein XXXund XXX-1- da es keine Garantie für die Sortierung gibt und später ein Verbindungsabbruch und -wiederaufbau passieren kann - die automatischen Pfade also nutzlos sind - möchte ich die explizite Kontrolle über die Namen übernehmen. Die andere Frage bezieht sich spezifischer auf Befehle. Hier ist entweder Finder oder Command offen. Oder vielleicht ein gemountetes Verzeichnis umbenennen. Der andere ist durch die Verbindung selbst.

Antworten (2)

Nachfolgend finden Sie ein Beispielskript. Dieses Skript ist den Aktionen nachempfunden, die von der Finder-Anwendung ausgeführt werden. Um diese Antwort zu vereinfachen, findet eine kleine Fehlerprüfung statt.

#!/bin/bash
sudo mkdir -p "/Volumes/${1#*@}"
sudo chown $USER:staff "/Volumes/${1#*@}"
mount -t smbfs -o nodev,nosuid  "$1" "/Volumes/${1#*@}"
mount | grep -q "/Volumes/${1#*@}" && open "/Volumes/${1#*@}"

Hinweis: Da Ordner innerhalb des Ordners erstellt werden müssen /Volumes, kann das Kennwort des Benutzers vom Skript angefordert werden.

Wenn das Skript in der Datei gespeichert wird connect, lautet die Zusammenfassung wie folgt.

connect //user[:password]@server/share

Ein Beispiel ist unten angegeben.

./connect //davidanderson@192.168.1.55/documents

In diesem Beispiel wäre der Einhängepunkt wie folgt.

/Volumes/192.168.1.55/documents

Zum Aushängen wäre die Zusammenfassung wie folgt.

diskutil unmount /Volumes/server/share

Ein Beispiel für den Befehl zum Unmounten ist unten angegeben.

diskutil unmount /Volumes/192.168.1.55/documents

Kommentar

Obwohl die obige Antwort darauf ausgelegt ist, die in der Frage genannten Anforderungen zu erfüllen, ist die Antwort nicht sehr robust. Wenn zwei oder mehr Benutzer versuchen, auf dieselbe Freigabe zuzugreifen, führt die Verwendung der obigen Antwort zu einem Fehler. Im Grunde besteht das Problem eher darin, dass ein Benutzer nicht gleichzeitig denselben Einhängepunkt verwenden kann. Eine Möglichkeit, dieses Problem zu vermeiden, besteht darin, den Bereitstellungspunkt im $HOME/VolumesOrdner statt im /VolumesOrdner zu platzieren. Das unten angegebene neue Skript ist eine modifizierte Version des oben angegebenen ursprünglichen Skripts. Dieses neue Skript platziert den Bereitstellungspunkt im $HOME/VolumesOrdner.

#!/bin/bash
mkdir -p "$HOME/Volumes/${1#*@}"
chmod 700 "$HOME/Volumes"
chmod +a "group:everyone deny delete" "$HOME/Volumes"
mount -t smbfs -o nodev,nosuid "$1" "$HOME/Volumes/${1#*@}"
mount | grep -q "$HOME/Volumes/${1#*@}" && open "$HOME/Volumes/${1#*@}"

Hinweis: Da /Volumesder Ordner nicht verwendet wird, wird das Kennwort des Benutzers nicht vom Skript angefordert.

Wenn das Skript in der Datei gespeichert wird connect, lautet die Zusammenfassung wie folgt.

connect //user[:password]@server/share

Ein Beispiel ist unten angegeben.

./connect //davidanderson@192.168.1.55/documents

In diesem Beispiel wäre der Einhängepunkt wie folgt.

"$HOME/Volumes/192.168.1.55/documents"

Zum Aushängen wäre die Zusammenfassung wie folgt.

diskutil unmount "$HOME/Volumes/server/share"

Ein Beispiel für den Befehl zum Unmounten ist unten angegeben.

diskutil unmount "$HOME/Volumes/192.168.1.55/documents"
Funktioniert -pmzusammen? es ist nicht korrekt, es wirkt sich nur auf das neueste Verzeichnis aus. In diesem Fall durch$3
Nun, -pm700ist kurz für -p -m 700. Wenn dies ein Problem für Sie ist, werde ich einfach meine Antwort ändern. Ich beabsichtige, dass der Befehl nur das neueste (letzte) Verzeichnis ändert. Ich bin mir nicht sicher, ob das -m 700überhaupt benötigt wird. Ich habe dies nur hinzugefügt, weil anscheinend der Finder und dies diskutil mounttun.
Über das pmEs funktioniert nicht wie erwartet - bitte sehen Sie sich diesen Beitrag und die beiden Antworten und die Kommentare von ihnen an - stackoverflow.com/questions/5786326/… - Also habe ich sudo mkdir -p -m 700 "/Volumes/$2/$3"durch sudo mkdir -p "/Volumes/$2/$3"und ersetztsudo chmod -R 700 "/Volumes/$2/$3"
Nach weiteren Untersuchungen habe ich festgestellt, dass die Standarddateimodi verwendet werden sollten. Daher werden der chmodBefehl und die -mOption für den mkdirBefehl nicht benötigt. Ich habe meine Antwort entsprechend aktualisiert. Dies würde auch die obigen Kommentare in Bezug auf diese Antwort irrelevant machen.
Vielen Dank für das wertvolle Update - nur neugierig, warum diskutil unmountund nicht nur umount? wie andere Unix/Linux- Distributionen wie Ubuntu. Übrigens über die Freigabe /Volumes/something, die von vielen Benutzern geteilt werden soll - für jeden Benutzer habe ich eine neue gemeinsame Gruppe erstellt - developer- und mit chgrphabe ich die primäre Gruppe geändert/Volumes/something
Fragt sich nur, warum hast du von mount_smbfszu geändert mount -t smbfs? Sind sie gleichwertig oder gibt es einen wichtigen Unterschied?
Ich habe die Manpage für gelesen mount_smbfs, in der Folgendes steht: " Hinweis: Sie sollten immer den Befehl system mount verwenden und niemals mount_smbfs direkt aufrufen." Umgekehrt habe ich auch die Manpage für gelesen umount, in der Folgendes steht: HINWEISE Aufgrund der komplexen und verwobenen Natur von Mac OS X kann umount häufig fehlschlagen. Es wird empfohlen, diskutil(1) (wie in „diskutil unmount /mnt'') stattdessen verwendet werden."

Mit dem mountBefehl können Sie einen mount_point angeben:

sudo mount -t smbfs smb://hostname/documents /Volumes/documents-foo

Wechseln Sie einfach documents-foozu dem gewünschten Namen und beachten Sie, dass dieses Verzeichnis bereits vorhanden sein muss (erstellen Sie es mit, sudo mkdir /Volumes/documents-foowenn dies nicht der Fall ist).

Ich habe diese Antwort mit El Capitan getestet und die Antwort hat nicht funktioniert. Mit welchem ​​Betriebssystem hast du getestet. Oder hast du getestet?
Es funktioniert nicht - es entsteht mount_nfs: can't resolve host: smbundmount_nfs: no usable addresses for host: smb
Ich glaube, mounthätte mount -t smbfsoder einfach sein sollen mount_smbfs, aber das ist wahrscheinlich nicht das einzige Problem.
Der sudo mount -t smbfs smb://hostname/documents /Volumes/documents-fooBefehl wird bereitgestellt, aber der Benutzer kann nicht auf die Freigabe zugreifen, ohne sudo. Durch Entfernen des sudound Eingabe des mount -t smbfs smb://hostname/documents /Volumes/documents-fooBefehls wird die Freigabe bereitgestellt, ermöglicht aber auch den Benutzerzugriff ohne die Verwendung von sudo.
Du hast Recht, ich habe es ausgelassen -t smbfs. Ich wollte den Benutzernamen und das Passwort aus dem Befehl, mit dem ich getestet habe, herausarbeiten und zu viel entfernen. Ich werde das bearbeiten.