Wie (und warum) funktionieren diese Befehle mit einem Pipe-Zeichen und einem Bindestrich genau?
pacman -Qqdt | sudo pacman -Rns -
Antwort1
Ein einzelner Strich ( -
) ohne Option,bedeutet normalerweise "von der Standardeingabe lesen". Dies ist eine sehr gängige Konvention, die von vielen Programmen verwendet wird. Die Pipe , |
ist eine Möglichkeit, die Standardausgabe eines Programms mit der Standardeingabe eines anderen zu verbinden. Da pacman
standardmäßig nicht von der Standardeingabe liest, verwenden Sie die , wenn Sie dies möchten -
.
Die angezeigten Befehle bewirken also (siehe 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.
Zusammengenommen bedeuten diese Optionen„Fragen Sie die Datenbank nach Paketen ab, die als Abhängigkeiten anderer Pakete installiert sind, zeigen Sie nur die Paketnamen an und beschränken Sie die Ausgabe auf die Pakete, die von keinem aktuell installierten Paket benötigt werden.“. Mit anderen Worten: Zeigen Sie die Pakete an, die installiert wurden, weil sie für etwas anderes benötigt wurden, die aber nicht mehr benötigt werden, weil das andere entfernt wurde.
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.
Und das
-
(Hervorhebung von mir):Beim Aufrufen von Pacman muss eine Operation mit allen möglichen Optionen und Zielen angegeben werden, auf die die Operation angewendet werden soll. Ein Ziel ist normalerweise ein Paketname, ein Dateiname, eine URL oder eine Suchzeichenfolge. Ziele können als Befehlszeilenargumente angegeben werden. Wenn stdin außerdem nicht von einem Terminal stammt und ein einzelner Bindestrich (-) als Argument übergeben wird, werden Ziele von stdin gelesen.
Daher
pacman -Rns -
werden Paketnamen aus der Standardeingabe gelesen und alle diese und ihre Abhängigkeiten entfernt, ohne Sicherungen aufzubewahren.
Der gesamte Befehl findet daher nicht mehr benötigte Pakete auf Ihrem System und entfernt sie. Dies ist eine nützliche Möglichkeit, Ihr System von nicht mehr benötigten Paketen zu bereinigen.