Lyx OS – Werkzeuge in /bin

Diese Seite beschreibt die mitgelieferten Kommandozeilen-Werkzeuge unter /bin. Sie sind gewöhnliche Ring-3-Programme in Lyx — kein Kernel-Code, kein Sonderweg: dieselben Syscalls, die auch eine eigene Anwendung benutzt.

Lyx OS · Guide: Starten & Platte vorbereiten · Shell · Geräte-Verzeichnis · Anwendungen entwickeln · Disk-Befehle der Shell · Syscall-ABI · Prozesse & Ring-3


1. Wie ein Werkzeug auf die Platte kommt

Alle Werkzeuge liegen als Quelltext in bin/*.lyx und werden beim Bau des Abbilds übersetzt (bootloader/build.sh, Liste BIN_TOOLS). Ausgeliefert werden 42 Werkzeuge, dazu die Unit bsys als Bibliothek.

Schritt Was passiert
Übersetzen lyxc <name>.lyx -I . -o <name>.elf — beziehungsweise --target=lyxos.lbf, wenn die Quelle ein @capabilities-Manifest trägt
Ablegen mcopy in das FAT32-Abbild nach ::/bin/ und zusätzlich in die Initrd unter esp/bin
Starten Das Vega-Terminal sucht bei einem unbekannten Wort /bin/<cmd>.lbf, dann /bin/<cmd>.elf, und startet, was es findet

bsys ist keine Anwendung, sondern die Syscall-Brücke: Jedes Werkzeug importiert sie und bekommt darüber Puts/PutsLn/PutInt, GetArgC/GetArg und die Wrapper um die LyxOS-Syscalls. Der Grund steht im Kopf der Unit — alle Ausgaben laufen über den verzögerten Ring-3-Mechanismus (nr=1), damit kein Werkzeug einen rohen SYSCALL absetzt und dabei den Ring-3-Stapel beschädigt.

Die Regel ist kurz: Ein Werkzeug mit @capabilities-Manifest wird als LBF gebaut, jedes andere als ELF. Sie ist bewusst so herum — LBF trägt sein Rechtemanifest im Abbild, und der Kernel weist jeden Aufruf ab, der darüber hinausgeht. Ein Werkzeug ohne Manifest hat noch nicht gesagt, was es braucht, und liefe unter LBF sofort in ein Verbot; also bleibt es ELF, bis es eins hat.

35 der 42 Werkzeuge tragen inzwischen ein Manifest. Die Verteilung zeigt, wie eng die Rechte gefasst sind:

Manifest Anzahl Beispiele
@capabilities([]) 7 echo — braucht nichts außer der Ausgabe
fs.read 10 cat, grep, sysinfo
fs.read, fs.write 6 cp, mv, iofs
fs.read, fs.write, hardware.block 5 dd, format, mkfs_iofs
hardware.block 3 diskinfo, partinfo, parted
network.raw 3 ping, nslookup, ifconfig
network.raw, fs.write 1 httpget
 
Der Kommentar im Bauskript ist an dieser Stelle veraltet. Dort steht noch, es trage „zurzeit KEIN Werkzeug ein Manifest„, weil _start auf --target=lyxos argc/argv nicht vom Stapel hole und GetArgC() immer 0 sei (#1754) — ein Werkzeug ohne Argumente sei aber keins.

Der Grund ist entfallen (#1754 behoben), und die Umstellung hat längst stattgefunden: im Baum liegen 38 .lbf-Erzeugnisse gegen 9 .elf. Nur der erklärende Absatz darüber ist stehengeblieben.

2. Was es gibt

Dateien und Text

Werkzeug Aufruf Zweck
ls ls [OPTION]… [DATEI]… Verzeichnis auflisten. Schalter: -l lang, -h lesbare Größen, -r umgekehrt, -S nach Größe, -t nach Änderungszeit, -1 eine je Zeile (Vorgabe), -d das Verzeichnis selbst, -p Schrägstrich anhängen, -U unsortiert
cat cat <datei> Datei ausgeben
cp cp [OPTION]… QUELLE ZIEL · cp … QUELLE… VERZEICHNIS Kopieren. Schalter: -r/-R rekursiv, -v gesprächig, -n nicht überschreiben, -u nur wenn neuer, -p Änderungszeit erhalten, -f erzwingen (Vorgabe), -T Ziel ist kein Verzeichnis
mv mv <quelle> <ziel> Verschieben/Umbenennen
rm rm <datei> Löschen
grep grep [-n] <muster> <datei> Zeilen suchen; -n stellt die Zeilennummer voran
wc wc [-l|-w|-c] <datei> Zeilen, Wörter, Bytes zählen
stat stat <datei> Dateizustand ausgeben
echo echo [text] Text ausgeben
history history [-c] [n] Kommando-History des Terminals; -c leert sie, n zeigt nur die letzten n

Datenträger

Werkzeug Aufruf Zweck
diskinfo diskinfo Erkannte Blockgeräte auflisten — Nummer, Bus, Größe, Sektorzahl
partinfo partinfo <platte> GPT lesen und je Partition Typ, LBA-Bereich und Größe zeigen
parted parted Partitionen im Dialog einteilen — Typ und Größe nennen, den Rest rechnet das Programm
partition partition <platte> <typ> <start> <ende> […] GPT in einem Zug schreiben (nicht-interaktiv); Typ esp oder data
format format <platte> <lba-start> <sektoren> Bereich als FAT32 formatieren und als Volume einhängen
mkfs_iofs mkfs_iofs <platte> [part-nr] Platte oder Partition als IOFS formatieren
ramdisk ramdisk create <mb> · ramdisk fmt <id> [fat32|iofs] · ramdisk list RAM-Disk anlegen und formatieren; den gültigen Nummernbereich erfragt es beim Kernel (sys_disk_id_range)
dd dd if=<quelle> of=<ziel> [bs=] [count=] [seek=] [skip=] Rohkopie zwischen Blockgeräten und Dateien; disk0disk12 oder ein Pfad
iofs iofs <befehl> … IOFS bedienen: mount/unmount/info/checkpoint, alloc/read/write/free, Kanten (edge-*), Suche (bfs/dfs/path), Namen (name-*), gc

System und Prozesse

Werkzeug Aufruf Zweck
sysinfo sysinfo Was der Kernel beim Hochfahren über die Hardware herausgefunden hat
top top Speicher und Prozesse — als Momentaufnahme aus /bin, als Live-Anzeige im Terminal
ps ps [-a] [-k <tid>] Was gerade läuft: ohne Schalter nur die benannten Programme, -a auch die namenlosen Kernel- und Dienstfäden, -k beendet einen Faden. Möglich erst seit den Syscalls 206/207 — vorher konnte ein Programm nur die eigene Kennung erfragen
hwreport hwreport [datei] Hardware-Bericht in eine Datei schreiben statt ihn abzufotografieren: Prozessorkennung, Speicherstand, Grafikmaße (inkl. Bochs-VBE, das auf echter Hardware fehlt), Geräte-Verzeichnis und das vollständige Boot-Protokoll (sys_klog_read). Vorgabe /hwreport.txt. Ausgabe geht gleichzeitig auf den Bildschirm; das Boot-Protokoll steht zuletzt und geht nur in die Datei, weil 64 KB über den Bildschirm genau das überschreiben würden, was man sehen will
frametime frametime [-n ANZAHL] [-l] Bildzeiten des Compositors: Bilder, verpasste Fristen, Mittel, längstes
memgraph memgraph [nodes|timeline [N]|addnode …|addedge …] Semantischer Speicher: Knoten, Kanten, Zeitleiste
systest systest Ruft die POSIX-Ergänzungen 300–320 auf und meldet, was sie liefern
beep beep [frequenz] [millisekunden] Ton ausgeben und melden, welcher Regler ihn erzeugt hat
play play <datei.wav> WAV abspielen
mp3 mp3 /music.mp3 abspielen; das Dekodieren läuft auf einem freien Kern

Geräte

Werkzeug Aufruf Zweck
lspci lspci [-v] [-k] Was im Rechner steckt: eine Zeile je PCI-Funktion, Klartext und Anbieter
lsdrv lsdrv Welcher Treiber zu welchem Gerät gehört — IST gegen SOLL
lyxdevd lyxdevd Bindet die Geräte tatsächlich, statt sie nur anzuzeigen
usbhid usbhid USB-HID-Treiber, vollständig in Ring 3 — der erste Tier-1-Treiber
i2chid i2chid Trackpad-Treiber als Tier-1-Programm über sys_i2c_xfer

Netz

Werkzeug Aufruf Zweck
ifconfig ifconfig [<name> [<befehl> …]] Schnittstelle anzeigen und einstellen (eth0, lo)
ping ping [-c n] [-i s] [-W s] [-s größe] [-t ttl] [-q] <ziel> ICMP-Echo mit Laufzeitmessung
nslookup nslookup [-option …] [name | -] [server] Namen beim DNS-Server erfragen
httpget httpget HTTP-Abruf über die DHCP-Lease — Beleg, dass der Netzweg steht

Scheduler-Belegprogramme

Diese fünf sind keine Werkzeuge für den Alltag, sondern Nachweise: jedes belegt eine Eigenschaft des präemptiven Schedulers am laufenden System.

Programm Was es belegt
schedtest Ein lyxc-übersetztes Ring-3-Programm läuft als präemptiver Scheduler-Faden und wird vom Zeitgeber unterbrochen
schedexit sys_exit aus einem Scheduler-Faden trifft den Scheduler (int 0x43), der Faden wird DEAD und der Scheduler schaltet weiter
schedvfs VFS-Syscalls (open/read/close) aus einem Scheduler-Faden über das rohe r3_sc_block-Protokoll
schedkey Ein blockierendes read(0) wartet nicht aktiv — der Kernel legt den Faden schlafen, der Eingabe-Poller weckt ihn
schedspawn sys_spawn_child (nr=91) mit argv; das Kind meldet [ARGV:…] zurück

3. Werkzeug oder Terminal-Befehl?

Einige Namen gibt es zweimal: als eingebauten Befehl des Terminals und als Programm in /bin. Das ist kein Versehen — die eingebaute Fassung kommt ohne Prozesswechsel aus und kann in die Bildschirmdarstellung hineinschreiben.

Name Eingebaut im Terminal In /bin
ls, cat, echo ja — kurzer Weg ohne Prozessstart ja — mit allen Schaltern
top ja — Live-Anzeige, q beendet ja — einzelne Momentaufnahme
pwd, cd, env, export, clear, dmesg, help, exit ja nein
alles Übrige nein ja

Das Terminal sucht ein unbekanntes Wort erst als /bin/<name>.lbf, dann als /bin/<name>.elf. Ein Pfad wird direkt ausgeführt: /apps/lyxc.lbf startet, ohne dass er in /bin liegen muss.

Die Befehle der Wartungs-Shell (diskinfo, partinfo, part, mkfat32, mount, vol, gpt) sind davon getrennt und in Shell beschrieben — sie laufen im Shell-Prozess selbst, damit auch dann noch etwas geht, wenn kein Dateisystem eingehängt ist.


Letzte Aktualisierung: 2026-08-27 — Seite neu angelegt; Bestand (42 Werkzeuge), Aufrufe, Schalter und Manifeste aus lyx-os/bin/*.lyx und bootloader/build.sh erhoben.