# GNU Core Utilities

Die GNU Core Utilities (‚Kernprogramme‘), kurz coreutils, sind eine vom GNU-Projekt unter der General Public License veröffentlichte Sammlung von grundlegenden Befehlszeilen-Programmen wie beispielsweise das zum Auflisten von Dateien verwendete ls. Die Sammlung stellt die Funktionalität der üblichen Unix-Kommandos zur Verfügung und ist für viele verschiedene Betriebssysteme verfügbar, insbesondere für GNU/Linux, aber auch für Windows mit dem WSL oder Cygwin. Die Befehlszeilenprogramme orientieren sich am POSIX-Standard, sind aber bewusst nicht vollständig konform. Die Programme beschränken sich, wie bei Unix üblich, auf eine bestimmte Aufgabe. Dadurch können sie einfach in umfangreichere Befehle oder Programme bzw. Skripte eingefügt werden (siehe Unix-Philosophie).
Unterstützt werden viele Hardwareplattformen, beispielsweise x86, SPARC, ARM und PowerPC.
Die Sammlung fasst die ursprünglich einzeln angebotenen Pakete textutils (für Texte), shellutils (für die Shell), und fileutils (für Dateien) in einem zusammen. Sie wird auch in anderen Zusammenstellungen gepflegt, so enthält beispielsweise BusyBox Versionen der meisten der unten gelisteten Programme.

## Enthaltene Programme

Das Debian-Paket coreutils 5.2.1-2 enthält die folgenden Programme: :
| File Utilities |||
| chgrp | Ändert die Gruppe von Dateien oder Verzeichnissen | change group |
| chown | Ändert den Besitzer von Dateien oder Verzeichnissen | change owner |
| chmod | Ändert die Berechtigungen von Dateien oder Verzeichnissen | change mode |
| cp | Kopiert Dateien oder Verzeichnisse | copy |
| dd | Konvertiert und kopiert Dateien | dump data |
| df | Zeigt den freien Speicherplatz eines Dateisystems an | disk space free |
| dir | Wie ls | directory |
| dircolors | Definiert Farben für ls | directory entry colors |
| install | Kopiert Dateien und Verzeichnisse und setzt Attribute | install |
| ln | Erstellt Verknüpfungen mit Dateien oder Verzeichnissen | link node |
| ls | Listet Dateien oder Verzeichnisse auf | list directory |
| mkdir | Erstellt Verzeichnisse | make directory |
| mkfifo | Erstellt Pipes (FIFOs) | make ‘first in first out’ |
| mknod | Erstellt Gerätedateien | make node |
| mv | Verschiebt Dateien oder Verzeichnisse bzw. benennt sie um | move |
| rm | Löscht Dateien | remove |
| rmdir | Löscht Verzeichnisse (auch rekursiv) | remove directory |
| shred | Löscht Dateien unwiederbringlich durch Überschreiben | shred file |
| sync | Schreibt Dateisystempuffer auf die Festplatte | synchronize data |
| touch | Ändert Zeitstempel von Dateien und Verzeichnissen | touch file attributes |
| vdir | Variante von dir | variant of dir |
| Text utilities |||
| awk | Programmiersprache | Alfred V. Aho, Peter J. Weinberger und Brian W. Kernighan |
| cat | Hängt Dateien aneinander | concatenate files |
| cksum | Berechnet Prüfsummen und die Anzahl der Bytes von Dateien | checksum |
| comm | Vergleicht zwei sortierte Dateien zeilenweise | compare & merge (?) |
| csplit | Teilt Dateien abhängig vom Inhalt in mehrere Teile | split via context line |
| cut | Entfernt Abschnitte aus jeder Zeile einer Datei | cut parts of a file |
| expand | Konvertiert Tabulatorzeichen in Leerzeichen | expand white space |
| fmt | Einfacher Textformatierer | format text |
| fold | Bricht Zeilen auf eine bestimmte Länge um. Keine UTF-8-Unterstützung | – |
| head | Zeigt nur den Anfang einer Datei an | show head |
| join | Vereinigt Zeilen aus zwei Dateien mit einem gemeinsamen Feld | join lines of two files |
| md5sum | Berechnet und vergleicht MD5-Prüfsummen | print or check MD5 checksums |
| nl | Fügt einer Datei Zeilennummern hinzu | add number lines |
| od | Listet den Inhalt von Dateien in verschiedenen Formaten auf, z. B. hexadezimal | octal dump |
| paste | Vereinigt Zeilen von Dateien | paste lines of files |
| ptx | Erstellt einen permutierten Index von Dateiinhalten | build permuted index |
| pr | Formatiert Dateien zum Drucken | convert text files for printing |
| sed | Bearbeitet Text-Datenströme | stream editor |
| sha1sum | Berechnet und vergleicht SHA1-Prüfsummen | print or check SHA1 checksums |
| sort | Sortiert Zeilen einer oder mehrerer Datei(en) | sort lines of a file |
| split | Teilt eine Datei in Stücke auf | split file content |
| sum | Zeigt Prüfsummen und Anzahl der Blöcke einer Datei an | checksum |
| tac | Hängt Dateien in umgekehrter Richtung aneinander (letzte Zeile zuerst) | reverse cat |
| tail | Zeigt nur das Ende einer Datei an | show tail |
| tr | Ersetzt oder löscht Zeichen in einer Datei. Keine UTF-8-Unterstützung | translate characters |
| tsort | Führt eine topologische Sortierung aus | topologic sort |
| unexpand | Konvertiert Leerzeichen in Tabulatorzeichen | unexpand white space |
| uniq | Löscht mehrfache gleiche Zeilen aus einer sortierten Datei | show unique lines |
| wc | Berechnet die Anzahl von Bytes, Wörtern und Zeilen einer Datei | word count |
| Shell Utilities |||
| basename | Entfernt Pfad und optional ein Suffix aus einem vollständigen Dateinamen | base part of pathname |
| chroot | Führt einen Befehl mit einem bestimmten Stammverzeichnis aus | change root directory |
| date | Zeigt oder setzt die Systemzeit | system date time |
| dirname | Zeigt nur den Pfad eines vollständigen Dateinamens an | directory part of pathname |
| du | Zeigt die Speicherplatzbelegung in einem Dateisystem | disk usage |
| echo | Gibt einen Text aus | echo stdin |
| env | Setzt Umgebungsvariablen und führt Programme aus | environment settings |
| expr | Wertet Ausdrücke aus | evaluate expression |
| factor | Berechnet Primfaktoren | evaluate prime factor |
| false | Tut nichts, liefert aber einen fehlerhaften Endestatus zurück | false |
| groups | Zeigt die Gruppen an, denen ein Benutzer angehört | groups of a user |
| hostid | Zeigt eine Nummer zur Identifizierung des Rechners an | host identifier |
| id | Zeigt Namen und Gruppenzugehörigkeit eines Benutzers an. | user's identity |
| link | Erstellt einen harten Link auf eine Datei | link to a file |
| logname | Zeigt den Namen des Nutzerkontos an | login name |
| nice | Ändert die Priorität eines Prozesses | be nice |
| nohup | Führt einen Befehl aus, der auch nach dem Abmelden weiterläuft | no hang up |
| pathchk | Prüft Dateinamen auf Portabilität | path check |
| pinky | Zeigt Informationen zu einem Benutzer an | – |
| printenv | Zeigt Umgebungsvariablen an | print environment settings |
| printf | Gibt Daten formatiert aus | print format |
| pwd | Zeigt das aktuelle Arbeitsverzeichnis an | print working directory |
| readlink | Zeigt Informationen zu einer symbolischen Verknüpfung an | read link |
| seq | Gibt eine Folge von Zahlen aus | sequence |
| sleep | Wartet eine bestimmte Zeit | – |
| stat | Gibt Dateisystem-Informationen zu einer Datei aus | state of corresponding inode |
| stty | Setzt Terminal-Einstellungen | set teletype |
| tee | Zweigt Datenstrom in eine Datei ab | tee connector (T-Stück) |
| test | Prüft Dateitypen und wertet Ausdrücke aus | – |
| true | Tut nichts, liefert aber einen erfolgreichen Endestatus zurück | true |
| tty | Zeigt den Namen des Terminals an | teletype |
| uname | Zeigt Informationen zum Betriebssystem an | unix name |
| unlink | Löscht eine Datei mit der unlink-Funktion | – |
| users | Zeigt die aktuell am Rechner angemeldeten Benutzer gemäß einer bestimmten Datei an | – |
| who | Zeigt die aktuell am Rechner angemeldeten Benutzer an | – |
| whoami | Zeigt die effektive Benutzeridentität an, wird durch id erweitert | who am i |
| yes | Gibt wiederholt einen Text aus | (für Ja-Antwort genutzt) |
| Andere Utilities |||
| [ ... ] | Syntax-Alternative zu test |

## Kritik

Häufiger wird kritisiert, dass GNU-Programme Bloatware seien, dies wird unter anderem daran festgemacht, dass die GNU-Version von true aus 80 Zeilen Code besteht, wobei nach etablierten C-Standards drei Zeilen Code ausreichen würden. Andere Unix-ähnliche Systeme wie zum Beispiel OpenBSD nutzen solche „3-Zeiler“. Des Weiteren erweitern GNU-Versionen oft die Funktionalität von Unix-Programmen, wodurch die Unix-Programme mit den GNU-Programmen inkompatibel werden.