====== 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. → [[lyxos:start|Lyx OS]] · [[lyxos:guides:system-vorbereiten|Guide: Starten & Platte vorbereiten]] · [[lyxos:shell|Shell]] · [[lyxos:geraeteverzeichnis|Geräte-Verzeichnis]] · [[lyxos:anwendungen|Anwendungen entwickeln]] · [[lyxos:cmd:diskinfo|Disk-Befehle der Shell]] · [[lyxos:syscalls|Syscall-ABI]] · [[lyxos:prozesse|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 .lyx -I . -o .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 [[lyxos:vega|Vega]]-Terminal sucht bei einem unbekannten Wort ''/bin/.lbf'', dann ''/bin/.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 ([[https://github.com/SEOLizer/LyX-Compiler/issues/1754|#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 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 '' | Verschieben/Umbenennen | | ''rm'' | ''rm '' | Löschen | | ''grep'' | ''grep [-n] '' | Zeilen suchen; ''-n'' stellt die Zeilennummer voran | | ''wc'' | ''wc [-l%%|%%-w%%|%%-c] '' | Zeilen, Wörter, Bytes zählen | | ''stat'' | ''stat '' | 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 ^ | [[lyxos:bin:diskinfo|diskinfo]] | ''diskinfo'' | Erkannte Blockgeräte auflisten — Nummer, Bus, Größe, Sektorzahl | | [[lyxos:bin:partinfo|partinfo]] | ''partinfo '' | GPT lesen und je Partition Typ, LBA-Bereich und Größe zeigen | | [[lyxos:bin:parted|parted]] | ''parted'' | Partitionen im Dialog einteilen — Typ und Größe nennen, den Rest rechnet das Programm | | ''partition'' | ''partition [...]'' | GPT in einem Zug schreiben (nicht-interaktiv); Typ ''esp'' oder ''data'' | | ''format'' | ''format '' | Bereich als FAT32 formatieren und als Volume einhängen | | ''mkfs_iofs'' | ''mkfs_iofs [part-nr]'' | Platte oder Partition als [[lyxos:iofs|IOFS]] formatieren | | ''ramdisk'' | ''ramdisk create '' · ''ramdisk fmt [fat32%%|%%iofs]'' · ''ramdisk list'' | [[lyxos:ramdisk|RAM-Disk]] anlegen und formatieren; den gültigen Nummernbereich erfragt es beim Kernel (''sys_disk_id_range'') | | ''dd'' | ''dd if= of= [bs=] [count=] [seek=] [skip=]'' | Rohkopie zwischen Blockgeräten und Dateien; ''disk0''…''disk12'' oder ein Pfad | | ''iofs'' | ''iofs …'' | 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 ^ | [[lyxos:bin:sysinfo|sysinfo]] | ''sysinfo'' | Was der Kernel beim Hochfahren über die Hardware herausgefunden hat | | [[lyxos:bin:top|top]] | ''top'' | Speicher und Prozesse — als Momentaufnahme aus ''/bin'', als Live-Anzeige im Terminal | | ''ps'' | ''ps [-a] [-k ]'' | 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 '' | WAV abspielen | | ''mp3'' | ''mp3'' | ''/music.mp3'' abspielen; das Dekodieren läuft auf einem freien Kern | ==== Geräte ==== ^ Werkzeug ^ Aufruf ^ Zweck ^ | [[lyxos:bin:lspci|lspci]] | ''lspci [-v] [-k]'' | Was im Rechner steckt: eine Zeile je PCI-Funktion, Klartext und Anbieter | | [[lyxos:bin:lsdrv|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 ^ | [[lyxos:bin:netz|ifconfig]] | ''ifconfig [ [ …]]'' | Schnittstelle anzeigen und einstellen (''eth0'', ''lo'') | | [[lyxos:bin:netz|ping]] | ''ping [-c n] [-i s] [-W s] [-s größe] [-t ttl] [-q] '' | ICMP-Echo mit Laufzeitmessung | | [[lyxos:bin:netz|nslookup]] | ''nslookup [-option …] [name %%|%% -] [server]'' | Namen beim DNS-Server erfragen | | [[lyxos:bin:netz|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/.lbf'', dann als ''/bin/.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 [[lyxos:shell|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.