Coreutils-5.2.1

Das Paket Coreutils enthält eine große Anzahl an Shell-Werkzeugen zum Einstellen der grundlegenden Systemeigenschaften.

Approximate build time:  0.9 SBU
Required disk space:     69 MB

Coreutils ist abhängig von: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.

Installieren von Coreutils

Die Funktion von uname ist ein wenig fehlerhaft, weil der Schalter -p immer „unknown“ ausgibt. Der folgende Patch behebt das Problem auf Intel-Architekturen:

patch -Np1 -i ../coreutils-5.2.1-uname-1.patch

Wir möchten nicht, dass Coreutils seine Version von hostname installiert, weil sie schlechter ist als die von Net-tools bereitgestellte. Verhindern Sie die Installation mit dem folgenden Patch:

patch -Np1 -i ../coreutils-5.2.1-hostname-1.patch

Bereiten Sie Coreutils zum Kompilieren vor:

DEFAULT_POSIX2_VERSION=199209 ./configure --prefix=/usr

Kompilieren Sie das Paket:

make

Diese Testsuite trifft einige Annahmen in Hinsicht auf die Existenz von Benutzern und Gruppen, die in in unserem LFS-System noch nicht vorhanden sind. Wir müssen noch einige Dinge einrichten, bevor wir die Tests laufen lassen können. Falls Sie diese Testsuite nicht ausführen möchten, fahren Sie mit „Installieren Sie das Paket“ fort.

Damit die Testsuite vollständig durchlaufen kann, wird das Programm su benötigt. Wir haben uns aber nicht die Mühe gemacht es in Chapter 5 zu installieren, weil es root-Rechte benötigt. Wir holen dies nun nach:

make install-root

Erstellen Sie die „Tabelle der eingebundenen Dateisysteme“ mit:

touch /etc/mtab

Und erstellen Sie zwei Dummy-Gruppen und einen Dummy-Benutzer:

echo "dummy1:x:1000" >> /etc/group
echo "dummy2:x:1001:dummy" >> /etc/group
echo "dummy:x:1000:1000:::/bin/bash" >> /etc/passwd

Wir können die Testsuite nun durchlaufen lassen. Als erstes starten wir einige Tests, die als root laufen müssen:

export NON_ROOT_USERNAME=dummy; make check-root

Die verbleibenden Tests werden als Benutzer dummy ausgeführt:

su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"

Danach entfernen Sie die dummy Gruppen und Benutzer:

sed -i.bak '/dummy/d' /etc/passwd /etc/group

Installieren Sie das Paket:

make install

Und verschieben Sie einige Programme an die richtige Stelle:

mv /usr/bin/{basename,cat,chgrp,chmod,chown,cp,dd,df} /bin
mv /usr/bin/{date,echo,false,head,install,ln,ls} /bin
mv /usr/bin/{mkdir,mknod,mv,pwd,rm,rmdir,sync} /bin
mv /usr/bin/{sleep,stty,su,test,touch,true,uname} /bin
mv /usr/bin/chroot /usr/sbin

Wir benutzen das Programm kill aus dem Procps-Paket (welches unter /bin/kill später in diesem Kapitel installiert wird). Entfernen Sie die installierte Version von Coreutils:

rm /usr/bin/kill

Schliesslich erstellen Sie noch zwei symbolische Links, um FHS-kompatibel zu sein:

ln -s test /bin/[
ln -s ../../bin/install /usr/bin

Inhalt von Coreutils

Installierte Programme: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users, vdir, wc, who, whoami und yes

Kurze Beschreibung

basename entfernt den Pfad und Suffix von einem angegebenen Dateinamen.

cat gibt Dateien an der Standard-Ausgabe aus bzw. fügt sie zusammen.

chgrp ändert die Gruppenzugehörigkeit einer Datei. Die Gruppe kann entweder als Name oder als numerische ID angegeben werden.

chmod ändert die Zugriffsrechte der angegebenen Dateien. Der Modus kann entweder symbolisch, in Form der durchzuführenden Änderungen, oder als Oktalzahl angegeben werden (repräsentiert die absoluten neuen Rechte).

chown ändert Besitzer und/oder Gruppenzugehörigkeit der angegebenen Dateien.

chroot führt ein Kommando mit dem angegebenen Pfad als / Ordner aus. Das Kommando kann eine interaktive Shell sein. Auf den meisten Systemen darf das nur root.

cksum gibt die CRC-Prüfsumme (Cyclic Redundancy Check) und die Anzahl der Bytes für jede angegebene Datei aus.

comm vergleicht zwei sortierte Dateien und gibt in drei Spalten die Zeilen aus, die jeweils einzigartig bzw. gleich sind.

cp kopiert Dateien.

csplit teilt eine Datei in mehrere neue Dateien. Dazu wird ein bestimmtes Muster oder Zeilennummern verwendet. Ausserdem gibt csplit die Anzahl Bytes jeder neuen Datei aus.

cut gibt Ausschnitte von Zeilen aus. Die Ausschnitte werden nach Feldern oder Positionsangaben gewählt.

date zeigt die aktuelle Zeit im angegebenen Format an oder setzt die Systemzeit.

dd kopiert eine Datei mit der angegebenen Blockgröße und -anzahl. Optional kann währenddessen eine Konvertierung durchgeführt werden.

df berichtet über den verfügbaren (und verwendeten) Festplattenspeicher auf allen eingehängten Dateisystemen oder den Dateisystemen, die die angegebenen Dateien enthalten.

dir ist identisch mit ls.

dircolors gibt Kommandos zum Setzen der LS_COLOR Umgebungsvariable aus, um damit das Farbschema von ls zu ändern.

dirname entfernt den nicht-ordnerspezifischen Teil eines Dateinamens.

du gibt den verwendeten Festplattenspeicher aus, der vom aktuellen Ordner, den Unterordnern und Dateien oder einer einzelnen Datei verbraucht wird.

echo gibt die angegebene Zeichenkette aus.

env führt ein Kommando in einer modifizierten Arbeitsumgebung aus.

expand konvertiert Tabulatoren zu Leerzeichen.

expr wertet einen Ausdruck aus.

factor gibt den Primfaktor aller angegebenen Ganzzahlen aus.

false tut gar nichts, ist immer erfolglos. Es beendet sich immer mit einem Abschlusskode, der auf einen Fehler hinweist.

fmt formatiert die Absätze in der übergebenen Datei neu.

fold fügt Zeilenumbrüche in den angegebenen Dateien ein.

groups gibt die Gruppenzugehörigkeit eines Benutzers aus.

head gibt die ersten zehn (oder angegebene Anzahl) von Zeilen einer Datei aus.

hostid gibt die numerische ID (hexadezimal) des Systems aus.

hostname setzt den Hostnamen bzw. zeigt ihn an.

id gibt die effektive Benutzer-ID, Gruppen-ID, und Gruppenzugehörigkeit des aktuellen Benutzers oder eines angegebenen Benutzers aus.

install kopiert Dateien und setzt deren Zugriffsrechte und, falls möglich, Besitzer und Gruppe.

join fügt aus zwei Dateien die Zeilen zusammen, die identische join-Felder haben.

link erzeugt einen harten Link von der angegebenen Datei zu einer Datei.

ln erzeugt einen harten oder weichen Link zwischen Dateien.

logname gibt den Login-Namen des aktuellen Benutzers aus.

ls zeigt den Inhalt der angegebenen Ordner an. In der Voreinstellung werden Dateien und Ordner alphabetisch sortiert.

md5sum erzeugt eine MD5-Prüfsumme (Message Digest 5) bzw. zeigt sie an.

mkdir erzeugt Ordner mit den angegebenen Namen.

mkfifo erzeugt FIFO's (First-In, First-Out, eine sogenannte "named Pipe" im UNIX Sprachgebrauch) mit dem angegebenen Namen.

mknod erzeugt eine Gerätedatei mit dem angegebenen Namen. Eine Gerätedatei ist eine spezielle zeichen- oder blockorientierte Datei oder ein FIFO.

mv verschiebt Dateien und Ordner oder benennt sie um.

nice startet ein Programm mit geänderter Priorität.

nl numeriert die Zeilen der angegebenen Dateien.

nohup führt ein Programm aus, so dass es immun gegen „hangup“s ist, die Ausgaben werden in eine Protokolldatei umgeleitet.

od gibt eine Datei oktal- oder in anderen Formaten aus.

paste fügt angegebene Dateien zusammen. Sequenziell zusammengehörende Zeilen werden Seite an Seite durch Tabulatoren getrennt zusammengefügt.

pathchk prüft, ob Dateinamen gültig und portierbar sind.

pinky ist eine abgespeckte Version von finger. Es gibt ein paar Informationen über den angegebenen Benutzer aus.

pr bereitet Dateien seiten- oder spaltenweise für den Ausdruck vor.

printenv gibt die aktuelle Arbeitsumgebung aus.

printf gibt die angegebenen Argumente in einem bestimmten Format aus -- dies ist der C printf Funktion sehr ähnlich.

ptx erzeugt aus dem Inhalt von Dateien einen vertauschten Index, mit jedem Stichwort im Kontext.

pwd gibt den Namen des aktuellen Ordners aus.

readlink gibt den Wert eines symbolischen Links aus.

rm löscht Dateien oder Ordner.

rmdir löscht leere Ordner.

seq gibt eine Zahlenreihe in einem bestimmten Wertebereich und mit einem bestimmten Inkrement aus.

sha1sum prüft 160-Bit SHA1-Prüfsummen oder gibt sie aus.

shred überschreibt eine Datei mehrfach mit unüblichen Mustern, um das Wiederherstellen der Daten zu erschweren.

sleep pausiert für die angegebene Zeit.

sort sortiert die Zeilen einer Datei.

split teilt eine Datei in Stücke, nach Grösse oder nach Zeilennummern.

stty setzt Terminal-Einstellungen oder zeigt sie an.

su startet eine Shell mit anderer Benutzer- und/oder Gruppen-ID.

sum gibt Prüfsumme und Anzahl der Blöcke einer Datei aus.

sync schreibt den Dateisystempuffer. Geänderte Blöcke werden auf die Festplatte geschrieben und der Superblock wird aktualisiert.

tac fügt Dateien rückwärts zusammen.

tail gibt die letzten zehn (oder die angegebene Anzahl) von Zeilen einer Datei aus.

tee liest von der Standardeingabe während gleichzeitig auf die Standardausgabe und in eine Datei geschrieben wird.

test vergleicht Werte und prüft Dateitypen.

touch ändert Zeitstempel von Dateien, setzt Zugriffs- und Änderungszeit einer Datei auf die aktuelle Zeit. Dateien, die noch nicht existieren, werden mit der Länge 0 angelegt.

tr übersetzt, quetscht oder entfernt Zeichen von der Standardeingabe.

true macht nichts, ist immer erfolgreich. Beendet immer mit einem Statuskode der Erfolg bedeutet.

tsort sortiert topologisch. Schreibt eine vollständig sortierte Liste entsprechend der teilweisen Sortierung in einer Datei.

tty gibt den Dateinamen des Terminals aus, das mit der Standardeingabe verbunden ist.

uname gibt Systeminformationen aus.

unexpand konvertiert Leerzeichen zu Tabulatoren.

uniq entfernt alle identischen Zeilen bis auf eine.

unlink entfernt eine Datei.

uptime gibt aus, wie lange ein System bereits läuft, wieviele Benutzer eingeloggt sind und wie hoch die Systemlast ist.

users gibt die Namen der eingeloggten Benutzer aus.

vdir ist das gleiche wie ls -l.

wc gibt die Anzahl Zeilen, Wörter und Bytes einer Datei aus. Und eine Summe, falls mehrere Dateien angegeben wurden.

who gibt aus, wer gerade eingeloggt ist.

whoami gibt den Benutzernamen aus, der mit der aktuell effektiven Benutzer-ID verknüpft ist.

yes gibt „y“ oder eine andere Zeichenkette solange aus, bis es beendet wird.