GIO - Sistema de Ficheros Virtual

Trucos y Utilidades 7 de ene. de 2023

Libreria de acceso al Sistema de Ficheros Virtual

Gnome (con GIO) y a su vez KDE (con KIO) nos ofrecen unas librerias con un conjunto de funciones y utilidades que permiten a los usuarios del sistema y a los  desarrolladores acceder de un modo sencillo a su sistema de archivo virtual.

En el caso de GIO se trata de una biblioteca de bajo nivel que permite el acceso al software de Gnome, GTK+ y a Gnome Shell.

A todos los efectos se mantiene separada como librería, pero se incluye integrada en GLib.

Una de las herramientas que incluye gvfs (Gnome Virtual File System) es la aplicación gio. Se trata de una pequeña utilidad a nivel de comando para uso por usuarios de nivel medio/avanzado que en algún momento nos puede ser útil.

gio es un herramienta que nos permite desde una consola (shell), acceder a muchas de las funciones y utilidades de la libreria de la que recibe su nombre.

Si accedemos a la consola y la llamamos con el parámetro --help podemos ver todas las opciones y lo que nos permite hacer:

gio --help
Uso:gio COMANDO [ARGS…]

Comandos:
help     Imprimir ayuda
version  Imprimir versión
cat      Concatenar archivos en la salida estándar
copy     Copiar uno o más archivos
info     Mostrar información sobre las ubicaciones
list     Listar el contenido de las ubicaciones
mime     Obtener o establecer el gestor para un tipo MIME
mkdir    Crear carpetas
monitor  Monitorizar cambios en archivos y claves
mount    Montar o desmontar las ubicaciones
move     Mover uno o más archivos
open     Abrir archivos con la aplicación predeterminada
rename   Renombrar un archivo
remove   Eliminar uno o más archivos
save     Leer de la entrada estándar y guardar
set      Establecer el atributo de un archivo
trash    Mover archivos o carpetas a la papelera
tree     Listar el contenido de las ubicaciones en un árbol

Use “gio help COMMAND” para obtener ayuda detallada.

Borrar desde consola hacia la Papelera

Esta es quizás una de las mejores opciones de gio, ya que con un sencillo comando se 'borra' el archivo indicado y se se lo lleva a la Papelera de reciclaje del usuario actual.
El comando para borrar y llevar un fichero a la papelera es:

gio trash fichero

También nos permite borrar un grupo completo de fichero llevándolos directamente a la Papelera.

Supongamos que tenemos varios ficheros:

luisgulo@Debian·SysAdmin:/tmp/Pruebas_Borrado$ ls -l
total 36
-rw-r--r-- 1 luisgulo luisgulo 332 mar 10 22:58 1001.txt
-rw-r--r-- 1 luisgulo luisgulo  30 mar 10 22:58 1002.txt
-rw-r--r-- 1 luisgulo luisgulo  10 mar 10 22:58 1003.txt
-rw-r--r-- 1 luisgulo luisgulo  13 mar 10 22:59 1004.txt
-rw-r--r-- 1 luisgulo luisgulo  20 mar 10 22:59 cuarto-fichero
-rw-r--r-- 1 luisgulo luisgulo  14 mar 10 22:59 fichero
-rw-r--r-- 1 luisgulo luisgulo  11 mar 10 22:59 fichero-dos
-rw-r--r-- 1 luisgulo luisgulo  16 mar 10 22:59 fichero.tres
-rw-r--r-- 1 luisgulo luisgulo   8 mar 10 22:58 fichero_uno

Ahora vamos a borrar (hacia la papelera) los ficheros 1001 al 1004:

gio trash 100*txt

Veremos que tras la ejecución, han sido borrados de la ruta actual.
Si abrimos la Papelera desde nuestro Escritorio, para ver su contenido están magicamente allí, listos para ser recuperados en caso necesario.
Algo que no sucede si realizamos un borrado con el comando rm

Ficheros 'borrados' desde la consola y llevados a la Papelera

Listar Ficheros, Directorios o GVFS

Otro uso de gio es poder ver los ficheros que hay actualmente en una ruta o en un sistema de ficheros virtual.

luisgulo@Debian·SysAdmin:/tmp/Pruebas_Borrado$ gio list

fichero_uno
fichero-dos
fichero.tres
cuarto-fichero
fichero

En este caso hemos usado el parametro list, que hace que gio se comporte como si ejecutasemos el comando ls -1 directorio

Listar contenido de la papelera desde la linea de comando

Si caambiamos un poco la sistaxis  anterior, podemos incluso ver el contenido de la papelera sin tener que abrirla desde el entorno gráfico:

gio list trash://

1001.txt
1004.txt
1003.txt
1002.txt

En este caso hemos usado el nombre de la Papelera, definida como trash:// en el GVFS (Gnome Virtual File System).

Otros parámetros que admite list son:

  • -l, --long  Muestra información extendida
  • -u, --print-uris  Muestra las URIs completas del fichero
  • -a, --atributtes=...  Atributos que podemos obtener del objeto

Si jugamos un poco con estos parámetros veremos que podemos extraer mucha información de cualquier fichero, incluso si se ha llevado a la papelera:

luisgulo@Debian·SysAdmin:/tmp/Pruebas_Borrado$ gio list -l trash:// -u

trash:///1001.txt    332    (regular)
trash:///1004.txt    13     (regular)
trash:///1003.txt    10     (regular)
trash:///1002.txt    30     (regular)

Hemos obtenido el tamaño y URI exacta de cada uno de los ficheros que están en la Papelera. Veremos ahora como extraer más detalles de los ficheros con el parametro info.

Obtener Información de los Ficheros desde el GVFS

Con nuestros ficheros anteriores, de la carpeta Pruebas_Borrado y de la Papelera (trash), vamos a obtener información relevante a los ficheros:

$ gio info fichero_uno

nombre que mostrar: fichero_uno
nombre editado: fichero_uno
nombre: fichero_uno
tipo: regular
tamaño:  8
URI: file:///tmp/Pruebas_Borrado/fichero_uno
atributos:
	standard::type: 1
    standard::name: fichero_uno
    standard::display-name: fichero_uno
    standard::edit-name: fichero_uno
    standard::copy-name: fichero_uno
    standard::icon: application-octet-stream, application-x-generic, application-octet-stream-symbolic, application-x-generic-symbolic
    standard::content-type: application/octet-stream
    standard::fast-content-type: application/octet-stream
    standard::size: 8
    standard::allocated-size: 4096
    standard::symbolic-icon: application-octet-stream-symbolic, application-x-generic-symbolic, application-octet-stream, application-x-generic
    etag::value: 1583877535:621683
    id::file: l2049:2359522
    id::filesystem: l2049
    access::can-read: TRUE
    access::can-write: TRUE
    access::can-execute: FALSE
    access::can-delete: TRUE
    access::can-trash: TRUE
    access::can-rename: TRUE
    time::modified: 1583877535
    time::modified-usec: 621683
    time::access: 1583877292
    time::access-usec: 104130
    time::changed: 1583877535
    time::changed-usec: 621683
    unix::device: 2049
    unix::inode: 2359522
    unix::mode: 33188
    unix::nlink: 1
    unix::uid: 1000
    unix::gid: 1000
    unix::rdev: 0
    unix::block-size: 4096
    unix::blocks: 8
    owner::user: luisgulo
    owner::user-real: LUIS GUTIERREZ LOPEZ
    owner::group: luisgulo
info de un fichero en un directorio cualquiera

Ahora veamos la información que podemos obtener de un fichero que está en la Papelera, recordad que hay que indicar la URI completa del fichero:

$ gio info trash:///1001.txt

nombre que mostrar: 1001.txt
nombre editado: 1001.txt
nombre: 1001.txt
tipo: regular
tamaño:  332
URI: trash:///1001.txt
atributos:
  standard::type: 1
  standard::name: 1001.txt
  standard::display-name: 1001.txt
  standard::edit-name: 1001.txt
  standard::copy-name: 1001.txt
  standard::icon: text-plain, text-x-generic, text-plain-symbolic, text-x-generic-symbolic
  standard::content-type: text/plain
  standard::fast-content-type: text/plain
  standard::size: 332
  standard::allocated-size: 4096
  standard::target-uri: file:///home/luisgulo/.local/share/Trash/files/1001.txt
  standard::symbolic-icon: text-plain-symbolic, text-x-generic-symbolic, text-plain, text-x-generic
  etag::value: 1583877491:913411
  id::file: l2049:2360738
  id::filesystem: trash:
  access::can-read: TRUE
  access::can-write: FALSE
  access::can-execute: FALSE
  access::can-delete: TRUE
  access::can-trash: FALSE
  access::can-rename: FALSE
  time::modified: 1583877491
  time::modified-usec: 913411
  time::access: 1583877498
  time::access-usec: 149450
  time::changed: 1583878065
  time::changed-usec: 300828
  unix::device: 2049
  unix::inode: 2360738
  unix::mode: 33188
  unix::nlink: 1
  unix::uid: 1000
  unix::gid: 1000
  unix::rdev: 0
  unix::block-size: 4096
  unix::blocks: 8
  owner::user: luisgulo
  owner::user-real: LUIS GUTIERREZ LOPEZ
  owner::group: luisgulo
  trash::orig-path: /tmp/Pruebas_Borrado/1001.txt
  
  trash::deletion-date: 2020-03-10T23:07:45
info de un fichero en la Papelera (trash://)

Una de las propiedades mas interesantes, al obtener la información del fichero, es que nos muestra la ruta original de donde estaba ubicado el fichero antes de ser borrado (trash::orig-path), lo cual nos ofrece nuevas posibilidades desde la consula.

Restaurar la Papelera desde la Consola

Dado que gio, como tal no dispone de una opción 'Restaurar', podemos realizar ese procedimiento nosotros mismos gracias a que conocemos la ruta original del fichero y de que gio dispone del parametro move.

Lo primero que haremos será obtener mediante el parámetro info, indicando que sólo queremos saber la ruta original del fichero a restaurar:

$ gio info -a trash::orig-path trash:///1001.txt
URI: trash:///1001.txt
atributos:
    trash::orig-path: /tmp/Pruebas_Borrado/1001.txt

Ahora sólo tenemos que usar el parámetro move, para mover/restaurar el fichero de la Papelera a su ubicación original:

$ gio move trash:///1001.txt /tmp/Pruebas_Borrado/1001.txt
Movemos (restauramos) desde la Papelera a su ubicación original

¡ Genial, hemos recuperado el fichero de la Papelera, desde la consola !

Borrando Directorios a la Papelera desde la Consola

Al igual que podemos 'borrar' un directorio llevandolo a la Papelera con gio, también podemos borrar un directorio completo:

$ gio trash Pruebas_Borrado
Borrando directorio completo a la Papelera
Directorio borrado con gio aparece correctamente en la Papelera

Y podemos realizar con esa carpeta las mismas acciones que hicimos con los ficheros, por ejemplo podemos ver información de esa carpeta en la Papelera:

$ gio info trash:///Pruebas_Borrado

nombre que mostrar: Pruebas_Borrado
...
tipo: directory
tamaño:  4096
URI: trash:///Pruebas_Borrado
atributos:
  standard::type: 2
  standard::name: Pruebas_Borrado
  ...
  standard::copy-name: Pruebas_Borrado
  standard::icon: inode-directory, folder, inode-directory-symbolic, folder-symbolic
  standard::content-type: inode/directory
  ...
  access::can-rename: FALSE
  time::modified: 1583881836
  ...
  owner::group: luisgulo
  trash::orig-path: /tmp/Pruebas_Borrado

  trash::deletion-date: 2020-03-11T00:12:45

Como hicimos con el fichero, podemos también restaurar ese directorio de la Papelera en un único paso:

$ gio move trash:///Pruebas_Borrado /tmp/Pruebas_Borrado
Restaurando un directorio completo de la papelera desde la Consola

Vaciar la Papelera desde la Consola

Tambien desde consola podemos vaciar la papelera sin parpadear:

$ gio trash --empty
Vaciando la papelera desde la consola

Con esto hemos arañado unas pocas opciones y que nos ofrece el comando gio para la gestión del sistema de ficheros virtual.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux