¿Cómo (y por qué) funcionan exactamente estos comandos con una barra vertical y un guión?
pacman -Qqdt | sudo pacman -Rns -
Respuesta1
Un guión solitario ( -
), sin opción,normalmente significa "leer desde la entrada estándar". Esta es una convención muy común utilizada por muchos programas. La tubería, |
es una forma de conectar la salida estándar de un programa a la entrada estándar de otro. Dado que pacman
no lee la entrada estándar de forma predeterminada, si desea que lo haga, utilice el archivo -
.
Entonces, los comandos que muestra hacen (ver man pacman
):
pacman -Qqdt
:-Q, --query Query the package database. This operation allows you to view installed packages and their files, as well as meta-information about individual packages (dependencies, conflicts, install date, build date, size). This can be run against the local package database or can be used on individual package files. In the first case, if no package names are provided in the command line, all installed packages will be queried. Additionally, various filters can be applied on the package list. See Query Options below. -q, --quiet Show less information for certain query operations. This is useful when pacman’s output is processed in a script. Search will only show package names and not version, group, and description information; owns will only show package names instead of "file is owned by pkg" messages; group will only show package names and omit group names; list will only show files and omit package names; check will only show pairs of package names and missing files; a bare query will only show package names rather than names and versions. -d, --deps Restrict or filter output to packages installed as dependencies. This option can be combined with -t for listing real orphans - packages that were installed as dependencies but are no longer required by any installed package. -t, --unrequired Restrict or filter output to print only packages neither required nor optionally required by any currently installed package. Specify this option twice to include packages which are optionally, but not directly, required by another package.
Combinadas, estas opciones significan"consulta en la base de datos los paquetes instalados como dependencias de otros paquetes, mostrando solo los nombres de los paquetes, y restringe la salida a aquellos paquetes que no son necesarios para ningún paquete actualmente instalado". En otras palabras, muestra aquellos paquetes que se instalaron porque algo más los necesitaba pero que ya no son necesarios porque ese algo más se eliminó.
sudo pacman -Rns -
:-R, --remove Remove package(s) from the system. Groups can also be specified to be removed, in which case every package in that group will be removed. Files belonging to the specified package will be deleted, and the database will be updated. Most configuration files will be saved with a .pacsave extension unless the --nosave option is used. See Remove Options below. -n, --nosave Instructs pacman to ignore file backup designations. Normally, when a file is removed from the system, the database is checked to see if the file should be renamed with a .pacsave extension. -s, --recursive Remove each target specified including all of their dependencies, provided that (A) they are not required by other packages; and (B) they were not explicitly installed by the user. This operation is recursive and analogous to a backwards --sync operation, and it helps keep a clean system without orphans. If you want to omit condition (B), pass this option twice.
Y el
-
(el énfasis es mío):Invocar pacman implica especificar una operación con posibles opciones y objetivos sobre los que operar. Un objetivo suele ser un nombre de paquete, un nombre de archivo, una URL o una cadena de búsqueda. Los objetivos se pueden proporcionar como argumentos de línea de comando. Además, si la entrada estándar no proviene de una terminal y se pasa un solo guión (-) como argumento, los destinos se leerán desde la entrada estándar.
Por lo tanto,
pacman -Rns -
leerá los nombres de los paquetes de la entrada estándar y eliminará cualquiera de ellos y sus dependencias, sin guardar copias de seguridad.
Por lo tanto, el comando completo encontrará los paquetes que ya no son necesarios en su sistema y los eliminará. Es una forma útil de limpiar su sistema de paquetes innecesarios.