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_startauf--target=lyxosargc/argv nicht vom Stapel hole undGetArgC()immer0sei (#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; disk0…disk12 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.
