ubuntuusers.de

gio

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

GIO 🇬🇧 steht für Gnome Input Output und ist die Schnittstelle zum Gnome_Virtual_File_System, kurz GVfs, der GLib von GTK. Mit Hilfe des GVfs lassen sich in GTK-basierte Applikationen, wie z.B. den Dateimananger Nautilus, z.B. auch Ressourcen, die über Netzwerkschnittstellen wie z.B. SFTP, DAV, MTP erreichbar sind, wie Dateien im lokalen Dateisystem einbinden.

Außerdem ist gio der Name des Kommandozeilenprogramms, mit der Nutzer von der Kommandozeile aus mit der gio-Schnittstelle interagieren kann.

gio ist der Nachfolger von einer Reihe von älteren Kommandozeilenprogrammen wie gvfs-mount, mit denen man ebenfalls auf das GVfs zugreifen konnte.

Dieser Artikel beschäftigt sich mit dem Kommandozeilenprogramm gio, nicht mit der Programmierschnittstelle GIO.

Installation

Für das GVfs werden die Pakete gvfs-backends und gvfs-fuse benötigt. Das Kommandozeilenprogramm gio ist im Paket libglib2.0-bin enthalten. Alle drei Pakete sind elementare Bestandteile von Ubuntu und dessen Derivaten, soweit diese GTK einsetzen (z.B. Xubuntu, Ubuntu MATE).

Das Paket gvfs-bin wird normalerweise nicht mehr gebraucht. Es enthält die Weiterleitung der veralteten Befehle wie z.B gvfs-mount auf den Befehl gio.

Benutzung

GVfs – Dienste und Orte

Die Argumente gewöhnlicher Datei-Operationen sind Dateien und Ordner, die durch Namen und Zugriffspfad charakterisiert sind. Die Argumente der gio-Kommandos umfassen diese zwar, sind aber von allgemeinerer Art. So kann hier z.B. eine über USB angeschlossen Digitalkamera als ganze Argument sein. Die im englischen Sprachgebrauch übliche Verallgemeinerung des Zugriffspfades ist location, auf deutsch "Ort".

Daemonen

Die für das Funktionieren des GVFS und damit für die gio-Kommandos nötigen Daemonen befinden sich im Verzeichnis /usr/lib/gvfs. Hauptdaemonen sind unabhängig von den jeweiligen Orten immer aktiv. Neben dem Grund-Daemon gvfsd, der beim Systemstart gestartet wird und über den alle übrigen Daemonen gestartet und angesprochen werden, sind dies die Daemonen gvfsd-fuse und gvfsd-metadata. Diese verwalten den alternativen Mountpunkt für POSIX-Anwendungen und das Serialisieren und Zwischenspeichern von Metadaten zur Sicherung von deren Persistenz. Sie sind für das Funktionieren der gio-Kommandos nicht unbedingt erforderlich (s.u.).

Wie man an den Namen der anderen Daemonen erkennt, sind diese für das Ansprechen spezieller Orte nötig. So können z.B. Server in SMB-Netzwerken ("Windows-Netzwerken") nur angesprochen werden, wenn der Daemon gvfsd-smb aktiv ist, und browsen kann man in ihnen nur mittels gvfsd-smb-browse.

Lokale Dateisysteme

Auf alle Dateisysteme, für die ein Eintrag in der Systemdatei /dev besteht ("devices"), kann über das GVfs zugegriffen werden. Sofern diese nicht bereits über einen systemd-Service, einen Eitrag in fstab über den Standard-Befehl mount ins Dateisystem eingebunden sind, muss dies zuerst ohne Root-Rechte mittels

gio mount -d DEVICE 

geschehen. Siehe hierzu auch gio mount.

Netzwerk-Dienste

Vom GVfs unterstützte Netzwerk-Dienste
Dienst Ort Erklärung
Samba smb://… Netzwerk-Verbindungen mittels SMB/cifs ("Windows-Netzwerke")
FTP ftp://… File Transfer Protocol, Netzwerkprotokoll zur Übertragung von Dateien über IP-Netzwerke
SSH ssh://… Secure Shell, Netzwerkprotokoll für verschlüsselte Verbindungen
SFTP sftp://… Für die Secure Shell (SSH) entworfene Alternative zum File Transfer Protocol (FTP)
WebDav dav://…, davs://… Netzwerkprotokoll zur Bereitstellung von Dateien über das Internet (wahlweise verschlüsselt)
MTP mtp://… Protokoll für über USB angeschlossene Smartphones
OBEX-FTP obex://… Protokoll zum Browsen und Datenaustausch über Bluetooth)

Vom Netzwerk-Dienst NFS unterstützt das GVfs lediglich die (veralteten) Versionen NFSv2 und NFSv3. Das dafür notwendige Backend ist in Ubuntu standardmäßig nicht verfügbar.

Die Unterstützung von Samba wurde zwar für das inzwischen veraltete Protokoll SMBv1 (cifs, NT1) konzipiert, funktioniert aber weitgehend auch mit den modernen Protokollen SMBv2 und SMBv3.

Sonstige Dienste

Ähnlich wie Netzwerk-Dienste behandelt das GVfs auch folgende Orte:

Sonstige vom GVfs unterstützte Dienste und Orte
Dienst Ort Erklärung
Datenträger computer:// Alle auf diesem Computer verfügbaren Dateisysteme
Netzwerkumgebung network:// Alle verfügbaren Netzwerk-Verbindungen (u.U. verschiedene Protokolle)
Papierkorb trash:// Der gesamte, u.U. auf mehrere Datenträger verteilte Papierkorb
Brennprogramme burn://
Digitalkamera gphoto2:// Eine über USB angeschlossene Kamera
Root-Rechte admin://… Lokaler Dateizugriff mit Root-Rechten (ab Ubuntu 17.04)

Die Tabelle zeigt nur Beispiele und erhebt keinen Anspruch auf Vollständigkeit

gio – Befehle und Optionen

Die allgemeine Syntax von gio lautet:

gio BEFEHL [OPTIONEN] [ARGUMENTE] 

Die Optionen und ggf. notwendigen Argumente variieren je nach BEFEHL. Ein Übersicht über alle verfügbaren Befehle erhält man mit

gio help                 # alternativ: gio -h 

Eine detailliertere Hilfe zu einem Befehl und dessen Optionen erhält man mit

gio help BEFEHL          # alternativ: gio BEFEHL --help 

Beispiel:

gio help tree 

liefert:

Aufruf:
  gio tree [OPTION …] [ORT...]

Den Inhalt von Ordnern in einer Baumstruktur auflisten.

Optionen:
  -h, --hidden              Verborgene Dateien zeigen
  -l, --follow-symlinks     Symbolischen Verknüpfungen, Einhängepunkten und Schnellzugriffen folgen

Ein- und Aushängen

Die gio-Befehle können nur dann ausgeführt werden, wenn die angesprochenen Objekte (Dateisysteme usw.) eingehängt sind. Sofern dies nicht vorher schon anderweitig geschehen ist (z.B. durch Eintrag in /etc/fstab), muss das Einhängen zuerst mit dem Befehl gio mount [OPTIONEN] ORT erfolgen.

Dem Befehl gio mount kommt daher eine besondere Bedeutung zu. Deshalb wird auf diesen in dem Artikel gio mount ausführlich eingegangen.

Übersicht der gio-Kommandos

Folgende Tabelle dient zur Übersicht über die gio-Kommandos. Dem jeweiligen Befehl muss noch gio vorangestellt werden.

gio Befehle (Übersicht)
Befehl u. Syntax Vergleich Erklärung
help [BEFEHL] - Befehle auflisten bzw. detaillierte Hilfe zu BEFEHL und OPTIONEN 🇩🇪
version - Versionsinformationen ausgeben und beenden.
cat ORT... cat Dateien aneinander hängen und auf der Standardausgabe ausgeben.
copy [OPTION …] QUELLE... ZIEL cp Eine oder mehrere Dateien von QUELLE nach ZIEL kopieren.
info [OPTION …] ORT... ls Informationen zu Orten zeigen.
list [OPTION …] [ORT...] ls Den Inhalt der Orte auflisten
mime MIME-TYP [HANDLER] - Anwendung für MIME-Typ ermitteln oder festlegen
mkdir [OPTION …] ORT... mkdir Ordner erstellen.
monitor [OPTION …] [ORT...] - Dateien und Ordner auf Änderungen überwachen.
mount [OPTION …] [ORT...] mount Die Orte ein- oder aushängen bzw. eingehängte Orte anzeigen. Siehe auch Artikel gio mount.
move [OPTION …] QUELLE... ZIEL mv Eine oder mehrere Dateien von QUELLE nach ZIEL verschieben.
open ORT... - Dateien mit der Vorgabeanwendung ("Handler") öffnen, welche als Programm für diesen Dateityp eingestellt ist.
rename ORT NAME (mv) Eine Datei umbenennen.
remove [OPTION …] ORT... rm Die gegebenen Dateien löschen.
save [OPTION …] ZIEL - Aus der Standardeingabe lesen und in ZIEL speichern.
set [OPTION …] ORT ATTRIBUT WERT... - Ein Dateiattribut von ORT festlegen.
trash [OPTION …] [ORT...] - Dateien oder Ordner in den Papierkorb verschieben.
tree [OPTION …] [ORT...] (tree) Den Inhalt von Ordnern in einer Baumstruktur auflisten.

Hinweise

Shell-Skripte

Die gio-Kommandos können grundsätzlich in Shell-Skripten verwendet werden. Ausgeschlossen sind allerdings Skripte, die beim Systemstart bzw. Einloggen des Benutzers vor dem Start des GVfs-Hauptdaemons gvfsd ausgeführt werden sollen. Dies ist beim Erstellen von systemd-Services zu beachten.

Der Eintrag von Start-Skripten in /etc/rc.local ist deprecated und kann auch mit Skripten, die gio-Kommandos enthalten, nicht funktionieren. Außerdem funktionieren solche Skripte nicht in Cronjobs. Dagegen ist ein Eintrag in "Startprogramme"(Xfce: "Sitzung und Startverhalten > Automatisch gestartete Anwendungen") problemlos möglich.

Alternativer Zugriff

Für Anwendungen, die einen POSIX-konformen Zugriffspfad brauchen, richtet das GVfs über FUSE einen alternativen Mountpunkt ein. Standardmäßig befindet sich dieser im Ordner /run/user/gvfs/BENUTZER-IP/. Für das Funktionieren der Dateimanager und der gio-Kommandos wird dieser nicht gebraucht.

Der alternative Mountpunkt wird nur noch selten gebraucht. Er wird vom Daemon gvfsd-fuse erstellt und verwaltet. Möchte man von ihm zur Erhöhung der Performance und zur Schonung der Ressourcen keinen Gebrauch machen, so kann der Daemon gvfsd mit der Option --no-fuse laufen. Weil aber der Daemon gvfsd beim Systemstart automatisch ohne diese Option gestartet wird, muss man ihn hierfür über die Zeile

`gvfsd -r --no-fuse`  

Dauerhaft lässt sich der Daemon gvfsd-fuse über die Systemvariable GVFS_DISABLE_FUSE deaktivieren. Hierzu trägt man in der Datei in der Datei ~/.profile folgende Zeile ein:

 export GVFS_DISABLE_FUSE=1

Metadaten

Beachtung verdient auch der Dienst gvfsd-metadata. Über diesen werden zur Sicherheit bei allen gio-Operationen (auch den lokalen), die Metadaten verändern (also z.B. Speichern oder Verschieben), diese zur Sicherheit im Ordner ~/.local/share/gvfs-metadata zwischengespeichert und nach erfolgreicher Operation wieder gelöscht, sodass sie bei einem ungewollten Abbruch noch verfügbar bleiben. Unter Umständen kann dies jedoch zu einer erheblichen Verzögerung von Dateioperationen und zu einer großen Belastung von Prozessor, Netzwerk und Festplatte (wichtig z.B. bei SSD) führen. Manchmal kann es deshalb sinnvoll sein, den Daemon gvfsd-metadata zu deaktivieren. Dies kann durch folgende Kommandos geschehen bzw. rückgängig gemacht werden:

systemctl --user mask gvfs-metadata.service
systemctl --user unmask gvfs-metadata.service 

Die Maskierung ist für die betreffende Sitzung wirksam und muss nötigenfalls bei jedem Einloggen wiederholt werden. Möchte man den Daemon mitten in einer Sitzung deaktivieren, so kann zusätzlich noch folgende Zeile nötig sein:

systemctl --user stop gvfs-metadata.service 

Ob der Daemon aktiv ist, überprüft man mit folgendem Befehl:

systemctl --user status gvfs-metadata.service 

gio und GVfs mit Root-Rechten

gio ist für die Verwendung im Userspace ohne Root-Rechte konzipiert. Wie auch die Dateimanager (z.B. Nautilus, Thunar), so sollte auch gio möglichst nicht mit Root-Rechten[2] ausgeführt werden. Ist dies jedoch nicht vermeidbar, so muss der Befehl sudo mit dem Parameter -H verwendet werden.

Früher stand für die Ausführung graphischer Anwendungen mit Root-Rechten der Befehl gksudo aus dem Paket gksu zur Verfügung. Seit Ubuntu 18.04 LTS ist dies aus Gründen der Sicherheit nicht mehr der Fall. Mit dem Ort admin://... bietet das GVfs seit Ubuntu 17.10 nun einen Ersatz.

Beispiele:

nautilus admin:/// 

startet den Dateimanager Nautilus mit Root-Rechten, und mittels

gedit admin:///etc/fstab 

kann man die Systemdatei /etc/fstab mit Root-Rechten bearbeiten. Die Kommandos können im Gegensatz zu sudo -H auch ohne Terminal[1] verwendet werden; die Abfrage des Passworts erfolgt in einem besonderen Fenster.

Achtung!

Graphische Anwendungen mit Root-Rechten auszuführen ist immer ein Sicherheitsrisiko, das man möglichst vermeiden sollte!

Alternativen

Die gio-Kommandos für den Ort smb:// sowie dessen Server und Freigaben funktionieren auch mit dem neueren Protokollen SMBv2 und SMBv3. Allerdings werden bei diesen nicht alle Features unterstützt. Eine Alternative bietet das Tool smbclient aus dem gleichnamigen Paket

  • smbclient

Paketliste zum Kopieren:

sudo apt-get install smbclient 

Oder mit apturl installieren, Link: apt://smbclient

Mittels

smbclient -L SERVER 

kann man die Freigaben auf dem Server anzeigen (ähnlich gio list smb://SERVER), und mit

smbclient //SERVER/FREIGABE 

öffnet man dort eine Shell für viele Kommandos, die dort zum Teil ähnliche Funktionen ausführen wie gio-Kommandos, ohne dass dafür der Server bzw. die Freigabe eingehängt (gemounted) werden müsste.

Beispiele

Viele der gio-Kommandos stimmen weitgehend mit den entsprechenden Kernel-Kommandos überein, allerdings mit auf GVfs-Orte erweitertem Argument-Bereich (z.B. gio copy [OPTION …] QUELLE... ZIEL mit cp [OPTION …] QUELLE... ZIEL). Außerdem können bei vielen gio-Kommandos entsprechende Operationen über den Dateimanager mit Mausklick ausgeführt werden, wenn auch mit einer wesentlich geringeren Auswahl an Optionen. Deshalb finden gio-Kommandos vor allem in Skripten und weniger im Terminal[1] Verwendung.

gio mount und gio open

Die Kommandozeile

gio mount smb://diskstation/public; gio open $_ 

hängt die Freigabe public auf dem Server diskstation ein und öffnet zu ihr ein Fenster. Gleiches lässt sich auch für das Windows-Netzwerk als Ganzes durchführen:

gio mount smb://; gio open $_ 

gio tree

Das Kommando gio tree [OPTION] ORT ersetzt das Kommando tree, ohne dass dafür das Paket tree zusätzlich installiert werden müsste. Verbunden mit grep eignet es sich als Suchfunktion:

gio tree smb://Heimserver/Bilder | grep Aachen 

sucht in dem auf Heimserver freigegebenen und mittels gio mount auf dem Client eingehängten Ordner Bilder und dessen Unterordnern alle Dateien, in deren Namen "Aachen" enthalten ist. Vorsicht: Bei extrem vielen Dateien kann dies zum Abbruch mit der Fehlermeldung "zu viele offene Dateien" führen!

gio info und gio set

Dateiattribute auslesen: Das Kommando gio info [OPTION] ORT liefert wesentlich mehr Informationen als ein Klick mit der rechten Maßtaste rechte Maustaste und dann "Eigenschaften" im Dateimanager. Die sehr umfangreiche Ausgabe kann man mit Optionen einschränken. So erhält man z.B. mit

gio info -a time ORT
gio info -a metadata ORT 

den Zeitstempel und die metadata-Informationen.

Attribut "trusted" setzen: Ein Benutzer hat nun z.B. einige Skripte erstellt, für diese im Ordner ~/.Desktop Programmstarter erstellt und diese ausführbar gemacht. Doch beim Aufruf bekommt er die Meldung, diese seien nicht vertrauenswürdig. Nötig ist noch das Dateiattribut metadata::trustet true. Mit folgendenm kleinen Skript trust-desktop.sh kann er dieses für alle Programmstarter in ~/.Desktop setzen:

#!/bin/bash
# trust-desktop.sh
# alle Programmstarter in .Desktop auf "vertrauenswürdig" setzen:
#
for i in ~/.Desktop/*.desktop; do
  [ -f "${i}" ] || continue
  gio set "${i}" "metadata::trusted" true
done

Dieses muss nur noch mit

sudo chmod +x trust-desktop.sh 

ausführbar gemacht werden

Ikon für Ordnersymbol: Der Benutzer Tim möchte den Ordner /home/Tim/Photos/Eva, der Bilder von seiner Freundin enthält, mit einem netten Icon verzieren. Ein solches ist z.B. /home/Tim/Icons/Eva.png. Dies geschieht nun so:

gio set -t 'string' /home/Tim/Photos/Eva 'metadata::custom-icon' 'file:///home/Tim/Icons/Eva.png' 

Probleme und Lösungen

gio list smb://SERVER funktioniert nicht

Mittels gio list smb://SERVER erhält man eine Liste aller auf dem mittels gio mount smb://SERVER eingehängten Server vorhandenen Freigaben. Dies funktioniert allerdings nur dann, wenn auf dem Server das Protokoll SMBv1 verfügbar ist. Bei neueren Servern (Windows 10, Ubuntu ab Version 20.04 LTS) ist aber SMBv1 standardmäßig deaktiviert. Man kann dies auf dem Server wieder aktivieren – in Ubuntu z.B. durch den Eintrag der Zeile

server min protocol = NT1

im Abschnitt [global] der Datei /etc/samba/smb.conf, muss sich aber dabei bewusst sein, dass dies die Sicherheit des Netzwerks beeinträchtigen kann.

Kann oder möchte man den Eintrag auf dem Server nicht vornehmen, so kann man auf dem Client statt gio list auch das Kommandozeilen-Tool smbclient verwenden (s.o.). Mit diesem erhält man auch ohne SMBv1 eine Freigaben-Liste des Servers. Hierzu braucht dieser nicht einmal eingehängt zu sein.

gvfs-metadata braucht zu viel Ressourcen

In seltenen Fällen kommt es vor, dass der Service gvfs-metadata ungewöhnlich viel Prozessorleistung und Speicherplatz beansprucht. Dann kann es sein, dass sich ein fehlerhafter Prozess in einer Dauerschleife verfangen hat und dass sich dabei bis zum Timeout (oder Absturz) erhebliche Mengen von Datenschrott im Ordner ~/.local/share/gvfs-metadata angesammelt haben, die diesen unbrauchbar machen und so die weitere Ausführung von GVfs/GIO behindern.

Da der Inhalt dieses Ordners nur sehr selten wirklich gebraucht wird, kann man in einem solchen Fall den Ordner – nötigenfalls von der Konsole aus – mit folgender Befehlszeile einfach löschen:

rm -rf ~/.local/share/gvfs-metadata 

Bei Bedarf wird dann automatisch ein neuer, leerer Ordner angelegt.

Intern

  • mount: Systemweites Einbinden von Dateisystemen

  • gio mount: Einbinden mittels gio/GVfs im Benutzerbereich ("Userspace")

  • Dateimanager: Eine Übersicht über die wichtigsten Dateimanager und ihre Funktionen

Extern

Diese Revision wurde am 16. Juni 2020 12:19 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: GVfs, Netzwerk, Shell, System