Kürzlich trat eine Herausforderung auf, die Standardausgabe (stdout) eines Linux-Befehls in umgekehrter Reihenfolge anzuzeigen.
Für zB; ls -lrt würde die Dateien und Verzeichnisse basierend auf dem Erstellungs-/Aktualisierungsdatum auflisten, möchte aber die Ausgabe in umgekehrter Richtung erhalten.
Lösung: Die Linux-Shell ist reich an Funktionen. Es hat einen eingebauten Befehl namens tac
Teil der von Jay Lepreau und David MacKenzie geschriebenen Coreutils. Es verkettet und druckt Dateien in umgekehrter Reihenfolge.
dh stdout des Befehls wird als Standardeingabe an tac übergeben und es kopiert die Standardeingabe in die Standardausgabe, wobei die Datensätze jede Zeile einzeln umgedreht werden.
Schritt 1:Dateien in der Standardreihenfolge auflisten.
[root@ssl httpd]$ ls -rlt total 12 lrwxrwxrwx 1 root root 29 Sep 8 15:58 modules -> ../../usr/lib64/httpd/modules lrwxrwxrwx 1 root root 19 Sep 8 15:58 logs -> ../../var/log/httpd drwxr-xr-x 2 root root 4096 Sep 8 15:58 conf lrwxrwxrwx 1 root root 10 Sep 8 15:58 run -> /run/httpd drwxr-xr-x 2 root root 4096 Nov 28 16:41 conf.modules.d drwxr-xr-x 2 root root 4096 Nov 28 16:41 conf.d
Schritt 2:Dateien in umgekehrter Reihenfolge ihrer Standardreihenfolge auflisten.
[root@ssl httpd]$ ls -lrt | tac drwxr-xr-x 2 root root 4096 Nov 28 16:41 conf.d drwxr-xr-x 2 root root 4096 Nov 28 16:41 conf.modules.d lrwxrwxrwx 1 root root 10 Sep 8 15:58 run -> /run/httpd drwxr-xr-x 2 root root 4096 Sep 8 15:58 conf lrwxrwxrwx 1 root root 19 Sep 8 15:58 logs -> ../../var/log/httpd lrwxrwxrwx 1 root root 29 Sep 8 15:58 modules -> ../../usr/lib64/httpd/modules
Dieser eingebaute Befehl tac
kann auf jedem Linux-Befehl oder auch auf Ihren eigenen Skripten verwendet werden.