{ "$schema": "../../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1", "card": {"id": "mpabi-inf-console-bash-01-busybox", "series": "console-bash", "series_title": "Bash · Console Tools", "number": "01", "count": "08", "slug": "busybox", "title": "L01 · BusyBox — the Swiss Army Knife", "topic": "Multicall, applety, pliki, tekst i proces", "project": "Warsztat terminalowy", "subject": "Informatyka", "level": "Rok 1 · Console", "revision_date": "2026-07-21T00:00:00+02:00", "status": "Gotowa do wykonania", "version": "v00.01", "uuid": "2fc78af3-5711-5e91-a282-acf442d46139", "author": "M. Pabiszczak", "year": "2026"}, "generated": {"tex": "doc/generated/main.tex", "html": "web/index.html", "html_css": "web/style.css", "react_app": true, "html_tree_inspector": false}, "template": "templates/karta-klasyczna.json", "title_block": {"category": "KARTA PRACY · INFORMATYKA · CONSOLE", "standard": "ISO 7200", "prepared_by": "M. Pabiszczak", "prepared_on": "21.07.2026", "checked_by": "testy automatyczne", "approved_by": "—", "url": "http://localhost:8080", "repository_url": "https://gitea.local/edu-inf/lab-console-busybox", "revision": "1", "issued_on": "21.07.2026", "series": "CONSOLE-BASH-01", "document_type": "karta pracy", "tool": "card-layouts", "sheet": "1 / 1", "show_qr": false, "show_repository_qr": false, "height_cm": 3, "repeat_on_every_page": true, "replace_front_matter": true}, "front_page_scope": {"title": "Cel karty", "content_tex": "Uczeń rozpoznaje mechanizm multicall, wykonuje operacje na plikach i tekście oraz odróżnia fixture od rzeczywistego BusyBoxa.", "scope_title": "Zakres tasków", "scope_table": {"headers": ["Krok", "Numer tasku", "Najważniejsza idea", "Priorytet", "Status", "Version"], "rows": [{"chapter": "1", "task": "Task01", "idea_tex": "dispatch multicall", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "1", "task": "Task02", "idea_tex": "pliki i tekst", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "1", "task": "Task03", "idea_tex": "proces i hostname", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}]}}, "learning_effects": {"CB01.EN01": {"text": "Uczeń wyjaśnia mechanizm programu multicall i rolę argv.", "label": "Multicall", "bloom_level": "Analiza", "assessment_criteria": ["CB01.KW01"]}, "CB01.EK01": {"text": "Uczeń wykonuje mierzalne operacje appletów na kontrolowanych danych.", "label": "Applety", "bloom_level": "Zastosowanie", "assessment_criteria": ["CB01.KW01"]}}, "assessment_criteria": {"CB01.KW01": {"text": "Trzy taski potwierdzają dispatch, przetwarzanie pliku oraz identyfikację procesu i hosta.", "learning_effects": ["CB01.EN01", "CB01.EK01"]}}, "educational_requirements": {"CB01.WE01": {"text": "Bezpieczna praca z narzędziem multicall w izolowanym profilu.", "label": "BusyBox i multicall", "learning_effects": ["CB01.EN01", "CB01.EK01"], "learning_tree": {"schema": "we-learning-tree.v1", "policy": "Fixture jest jawnie oznaczony i nie może być przedstawiany jako pełny BusyBox.", "ogolne": [{"tree_id": "CB01.WE01.OG.IP.01", "effect_ref": "CB01.EN01", "display": "EN IP CB01.01", "text": "Uczeń analizuje wybór appletu.", "kw": [{"criterion_ref": "CB01.KW01", "display": "KW IP CB01.01", "text": "Wyjaśnia argv[0] i argv[1]."}]}], "zawodowe": [{"tree_id": "CB01.WE01.TECH.I4.01", "effect_ref": "CB01.EK01", "display": "EK INF04 CB01.01", "text": "Uczeń uruchamia i weryfikuje applety.", "kw": [{"criterion_ref": "CB01.KW01", "display": "KW INF04 CB01.01", "text": "Uzyskuje komplet trzech komunikatów PASS."}]}]}}}, "sections": [ {"title": "Task01 · Jedna binarka, wiele appletów", "content_kind": "prose", "content_tex": "Najpierw przewidź sposób wyboru appletu. Fixture jest małym programem C do obserwacji dispatch; jeśli profil zawiera BusyBox, test wykrywa go osobno.", "educational_requirement_refs": ["CB01.WE01"], "learning_effect_refs": ["CB01.EN01", "CB01.EK01"], "assessment_criterion_refs": ["CB01.KW01"], "area_tree_refs": ["CB01.WE01.OG.IP.01", "CB01.WE01.TECH.I4.01"], "steps": [{"id": "T01-PREDICT", "title": "Przewidź różnicę między argumentem i symlinkiem.", "tree_refs": ["CB01.WE01.OG.IP.01"]}, {"id": "T01-MEASURE", "title": "Zmierz liczbę appletów i oba sposoby dispatch.", "tree_refs": ["CB01.WE01.TECH.I4.01"]}], "assets": [{"path": "assets/busybox-multicall.png", "html_path": "assets/busybox-multicall.svg", "caption": "Jedna binarka wybiera applet przez argument lub nazwę wywołania.", "label": "fig:busybox-multicall", "alt": "Diagram wywołanie, dispatch i applet.", "kind": "diagram", "width": 0.9}]}, {"title": "Task02 · Pliki i tekst", "content_kind": "prose", "content_tex": "Utwórz kontrolowany plik, odczytaj go, znajdź wzorzec i policz linie oraz bajty. Rozróżnij stdout od kodu zakończenia.", "educational_requirement_refs": ["CB01.WE01"], "learning_effect_refs": ["CB01.EN01", "CB01.EK01"], "assessment_criterion_refs": ["CB01.KW01"], "area_tree_refs": ["CB01.WE01.OG.IP.01", "CB01.WE01.TECH.I4.01"], "steps": [{"id": "T02-FILE", "title": "Potwierdź 3 linie, 22 bajty i match tool.", "tree_refs": ["CB01.WE01.TECH.I4.01"]}]}, {"title": "Task03 · Proces i host", "content_kind": "prose", "content_tex": "Odczytaj hostname oraz PID. Debug zapisuje pełny ślad poleceń do artefaktu trace.log.", "educational_requirement_refs": ["CB01.WE01"], "learning_effect_refs": ["CB01.EN01", "CB01.EK01"], "assessment_criterion_refs": ["CB01.KW01"], "area_tree_refs": ["CB01.WE01.OG.IP.01", "CB01.WE01.TECH.I4.01"], "steps": [{"id": "T03-TRACE", "title": "Potwierdź niepusty host, dodatni PID i ślad debug.", "tree_refs": ["CB01.WE01.TECH.I4.01"]}]} ], "tasks": {"task01": {"prompt_tex": "Sprawdź dispatch multicall przez argument i symlink.", "criterion": "applets=6 argument_dispatch=1 symlink_dispatch=1", "assessment_criterion_ref": "CB01.KW01"}, "task02": {"prompt_tex": "Wykonaj operacje cat, contains i count.", "criterion": "lines=3 bytes=22 match=tool cat_exact=1", "assessment_criterion_ref": "CB01.KW01"}, "task03": {"prompt_tex": "Zbierz identyfikatory procesu i hosta.", "criterion": "hostname_nonempty=1 pid_positive=1", "assessment_criterion_ref": "CB01.KW01"}}, "tasks_order": ["task01", "task02", "task03"], "mission": "Zrozumieć multicall i zebrać powtarzalny dowód działania podstawowych appletów.", "objectives": ["Wyjaśnisz dispatch multicall.", "Przetworzysz plik i tekst.", "Odczytasz tożsamość procesu i hosta."], "agenda": [{"time": "0--20 min", "work": "Dispatch i symlinki."}, {"time": "20--45 min", "work": "Pliki i tekst."}, {"time": "45--60 min", "work": "Proces, host i trace."}], "tech_stack": {"software": [{"name": "POSIX shell", "use": "sterowanie testami"}, {"name": "C fixture", "use": "jawny mechanizm multicall"}, {"name": "stemctl", "use": "izolowany profil native-amd64"}], "hardware": [{"name": "Brak", "use": "laboratorium kontenerowe"}]}, "container_test": {"title": "Test w profilu native-amd64", "commands": ["stemctl test native-amd64 console-bash L01 1", "stemctl test native-amd64 console-bash L01 2", "stemctl debug native-amd64 console-bash L01 3"], "pass_condition": "Trzy komunikaty PASS i niepusty trace.log."}, "safety_rules": [{"title": "Izolowane dane", "body": "Taski używają wyłącznie katalogów mktemp."}, {"title": "Bez fałszywej zgodności", "body": "Fixture demonstruje dispatch, nie pełne zachowanie BusyBox."}], "hardware_procedure": [{"step": "1", "action": "Uruchom dispatch.", "condition": "Sześć appletów i dwa sposoby wywołania."}, {"step": "2", "action": "Przetwórz plik.", "condition": "3 linie, 22 bajty, match tool."}, {"step": "3", "action": "Zapisz trace.", "condition": "Host i PID potwierdzone."}], "references": [] }