{"id":20665170,"url":"https://github.com/martan03/ios-project","last_synced_at":"2026-04-24T04:32:55.526Z","repository":{"id":160439288,"uuid":"610496358","full_name":"Martan03/IOS-project","owner":"Martan03","description":"First project for the IOS subject","archived":false,"fork":false,"pushed_at":"2023-03-24T19:13:31.000Z","size":47,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-25T16:18:33.689Z","etag":null,"topics":["school-assignment","school-project"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Martan03.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-06T22:19:00.000Z","updated_at":"2023-03-25T21:30:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"9c6917fa-b823-4074-80cf-26af989d0a65","html_url":"https://github.com/Martan03/IOS-project","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Martan03/IOS-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIOS-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIOS-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIOS-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIOS-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Martan03","download_url":"https://codeload.github.com/Martan03/IOS-project/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martan03%2FIOS-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32209893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["school-assignment","school-project"],"created_at":"2024-11-16T19:28:53.971Z","updated_at":"2026-04-24T04:32:55.494Z","avatar_url":"https://github.com/Martan03.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 class=\"title\"\u003e1. Úloha IOS (2023)\u003c/h1\u003e\n                  \u003cdiv class=\"row\"\u003e\n            \u003cdiv class=\"col-xl-10\"\u003e\u003ch1 id=\"popis-úlohy\"\u003ePopis úlohy\u003c/h1\u003e\n\u003cp\u003eČeská kontrarozvědka FDTO (\u003cstrong\u003eF\u003c/strong\u003eakt\n\u003cstrong\u003eD\u003c/strong\u003eěsně \u003cstrong\u003eT\u003c/strong\u003eajná\n\u003cstrong\u003eO\u003c/strong\u003erganizace) má podezření, že v jejích řadách působí\nkrtek a služba tak byla kompromitována. Obsah některých přísně tajných\ndigitálních dokumentů byl nejenže vyzrazen tajným službám cizích\nmocností, ale zřejmě i modifikován, což způsobilo chaos v organizaci\nněkterých tajných operací a částečně tak paralyzovalo fungování celé\nkontrarozvědky. V zájmu národní bezpečnosti je zapotřebí krtka urychleně\nnajít a polapit. Hledání však musí být maximálně diskrétní, aby krtek\nnetušil, že se okolo něj utahuje smyčka.\u003c/p\u003e\n\u003cp\u003eProtože zavedení nových oficiálních bezpečnostních opatření při práci\ns utajovanými digitálními dokumenty by mohlo být podezřelé a krtka\nvyplašit, rozhodlo se vedení kontrarozvědky, že bude potřeba tato\nbezpečností opatření zavést utajeně. Tedy tak, aby si nikdo (kromě\nnejužšího vedení a Vás) nebyl vědom toho, že nějaká nová opatření vešla\nv platnost.\u003c/p\u003e\n\u003cp\u003eVzhledem k Vaší léty prověřené loajalitě a bezchybné pracovní\nhistorii v IT jednotce kontrarozvědky jste byli pro tuto tajnou misi\nvybráni právě Vy. Vaším úkolem je vytvořit skript, který bude\nprezentován jako nový interní nástroj pro zvýšení efektivity při práci s\nelektronickými dokumenty, zatímco skrytě bude použit pro tajné\nzaznamenávání (tzv. logging) a ohlašování informací o tom, se kterými\ndokumenty (a kdy) daný uživatel pracoval.\u003c/p\u003e\n\u003cp\u003eCitlivé dokumenty jsou v kontrarozvědce zásadně uchovávány na\nserverech a přístup k nim probíhá vzdáleně pomocí příslušných nástrojů.\nSkript \u003ccode\u003emole\u003c/code\u003e (\u003cstrong\u003eM\u003c/strong\u003eakes \u003cstrong\u003eO\u003c/strong\u003ene’s\n\u003cstrong\u003eL\u003c/strong\u003eife \u003cstrong\u003eE\u003c/strong\u003easier) tedy bude fungovat jako\ntzv. wrapper nad textovými editory, což znamená, že textový editor bude\nspouštěn skrze skript \u003ccode\u003emole\u003c/code\u003e. Skript si bude pamatovat, které\nsoubory byly v jakém adresáři prostřednictvím skriptu \u003ccode\u003emole\u003c/code\u003e\neditovány. Jednotlivé soubory je zároveň možné přiřazovat do skupin pro\njednodušší filtrování při práci s velkým množstvím souborů. Pokud bude\nskript spuštěn bez parametrů, vybere skript soubor, který má být\neditován.\u003c/p\u003e\n\u003ch1 id=\"specifikace-chování-skriptu\"\u003eSpecifikace chování skriptu\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eJMÉNO\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emole\u003c/code\u003e – wrapper pro efektivní použití textového editoru\ns možností automatického výběru nejčastěji či posledně modifikovaného\nsouboru.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003ePOUŽITÍ\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003emole -h\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole [-g GROUP] FILE\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole [-m] [FILTERS] [DIRECTORY]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole list [FILTERS] [DIRECTORY]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole secret-log [-b DATE] [-a DATE] [DIRECTORY1 [DIRECTORY2 [...]]]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"popis\"\u003ePopis\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e-h\u003c/code\u003e – Vypíše nápovědu k použití skriptu (volba\n\u003ccode\u003esecret-log\u003c/code\u003e by neměla být v nápovědě uvedena; nechceme krtka\nupozornit, že sbíráme informace).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole [-g GROUP] FILE\u003c/code\u003e – Zadaný soubor bude otevřen.\n\u003cul\u003e\n\u003cli\u003ePokud byl zadán přepínač \u003ccode\u003e-g\u003c/code\u003e, dané otevření souboru bude\nzároveň přiřazeno do skupiny s názvem \u003ccode\u003eGROUP\u003c/code\u003e.\n\u003ccode\u003eGROUP\u003c/code\u003e může být název jak existující, tak nové skupiny.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole [-m] [FILTERS] [DIRECTORY]\u003c/code\u003e – Pokud\n\u003ccode\u003eDIRECTORY\u003c/code\u003e odpovídá existujícímu adresáři, skript z daného\nadresáře vybere soubor, který má být otevřen.\n\u003cul\u003e\n\u003cli\u003ePokud nebyl zadán adresář, předpokládá se aktuální adresář.\u003c/li\u003e\n\u003cli\u003ePokud bylo v daném adresáři editováno skriptem více souborů, vybere\nse soubor, který byl pomocí skriptu otevřen (editován) jako\n\u003cstrong\u003eposlední\u003c/strong\u003e.\u003c/li\u003e\n\u003cli\u003ePokud byl zadán argument \u003ccode\u003e-m\u003c/code\u003e, tak skript vybere soubor,\nkterý byl pomocí skriptu otevřen (editován) \u003cstrong\u003enejčastěji\u003c/strong\u003e.\n\u003cul\u003e\n\u003cli\u003ePokud bude při použití přepínače \u003ccode\u003e-m\u003c/code\u003e nalezeno více\nsouborů se stejným maximálním počtem otevření, může \u003ccode\u003emole\u003c/code\u003e\nvybrat kterýkoliv z nich.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003eVýběr souboru může být dále ovlivněn zadanými filtry\n\u003ccode\u003eFILTERS\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePokud nebyl v daném adresáři otevřen (editován) ještě žádný soubor,\npřípadně žádný soubor nevyhovuje zadaným filtrům, jedná se o chybu.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole list [FILTERS] [DIRECTORY]\u003c/code\u003e – Skript zobrazí seznam\nsouborů, které byly v daném adresáři otevřeny (editovány) pomocí\nskriptu.\n\u003cul\u003e\n\u003cli\u003ePokud nebyl zadán adresář, předpokládá se aktuální adresář.\u003c/li\u003e\n\u003cli\u003eSeznam souborů může být filtrován pomocí \u003ccode\u003eFILTERS\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSeznam souborů bude lexikograficky seřazen a každý soubor bude\nuveden na samostatném řádku.\u003c/li\u003e\n\u003cli\u003eKaždý řádek bude mít formát\n\u003ccode\u003eFILENAME:\u0026lt;INDENT\u0026gt;GROUP_1,GROUP_2,...\u003c/code\u003e, kde\n\u003ccode\u003eFILENAME\u003c/code\u003e je jméno souboru (i s jeho případnými příponami),\n\u003ccode\u003e\u0026lt;INDENT\u0026gt;\u003c/code\u003e je počet mezer potřebných k zarovnání a\n\u003ccode\u003eGROUP_*\u003c/code\u003e jsou názvy skupin, u kterých je soubor evidován.\n\u003cul\u003e\n\u003cli\u003eSeznam skupin bude lexikograficky seřazen.\u003c/li\u003e\n\u003cli\u003ePokud budou skupiny upřesněny pomocí přepínače \u003ccode\u003e-g\u003c/code\u003e (viz\nsekce FILTRY), uvažujte při výpisu souborů a skupin pouze záznamy\npatřící do těchto skupin.\u003c/li\u003e\n\u003cli\u003ePokud soubor nepatří do žádné skupiny, bude namísto seznamu skupin\nvypsán pouze znak \u003ccode\u003e-\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eMinimální počet mezer použitých k zarovnání (\u003ccode\u003eINDENT\u003c/code\u003e) je\njedna. Každý řádek bude zarovnán tak, aby seznam skupin začínal na\nstejné pozici. Tedy např:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre\u003e\u003ccode\u003eFILE1:  grp1,grp2\nFILE10: grp1,grp3\nFILE:   -\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emole secret-log [-b DATE] [-a DATE] [DIRECTORY1 [DIRECTORY2 [...]]]\u003c/code\u003e\n– Skript za účelem dopadení krtka vytvoří tajný komprimovaný log s\ninformacemi o souborech otevřených (editovaných) skrze skript\n\u003ccode\u003emole\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003ePokud byly zadány adresáře, tajný log bude obsahovat záznamy o\notevřených (editovaných) souborech pouze z těchto adresářů. Neexistující\nadresáře nebo adresáře bez záznamů budou ignorovány.\u003c/li\u003e\n\u003cli\u003ePokud nebyl zadán žádný adresář, tajný log bude obsahovat záznamy ze\nvšech evidovaných adresářů.\u003c/li\u003e\n\u003cli\u003eOtevřené (editované) soubory, které mají být v tajném logu\nzaznamenány, je možné dále omezit pomocí filtrů \u003ccode\u003e-a\u003c/code\u003e a\n\u003ccode\u003e-b\u003c/code\u003e (viz níže).\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"filtry\"\u003eFiltry\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eFILTERS\u003c/code\u003e může být kombinace následujících filtrů (každý\nmůže být uveden maximálně jednou):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[-g GROUP1[,GROUP2[,...]]]\u003c/code\u003e – Specifikace skupin. Soubor\nbude uvažován (pro potřeby otevření nebo výpisu) pouze tehdy, pokud jeho\nspuštění spadá alespoň do jedné z těchto skupin.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[-a DATE]\u003c/code\u003e - Záznamy o otevřených (editovaných)\nsouborech před tímto datem \u003cstrong\u003evčetně (volitelně lze implementovat i\njako striktně před uvedeným datem; UPDATED 22.3.)\u003c/strong\u003e nebudou\nuvažovány.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[-b DATE]\u003c/code\u003e - Záznamy o otevřených (editovaných)\nsouborech po tomto datu \u003cstrong\u003evčetně (volitelně lze implementovat i\njako striktně po uvedeném datu; UPDATED 22.3.)\u003c/strong\u003e nebudou\nuvažovány.\u003c/li\u003e\n\u003cli\u003eArgument \u003ccode\u003eDATE\u003c/code\u003e je ve formátu\n\u003ccode\u003eYYYY-MM-DD\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"nastavení-a-konfigurace\"\u003eNastavení a konfigurace\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eSkript si pamatuje informace o svém spouštění v souboru, který je\ndán proměnnou \u003ccode\u003eMOLE_RC\u003c/code\u003e. Formát souboru není specifikován.\n\u003cul\u003e\n\u003cli\u003ePokud není proměnná nastavena, jedná se o chybu.\u003c/li\u003e\n\u003cli\u003ePokud soubor na cestě dané proměnnou \u003ccode\u003eMOLE_RC\u003c/code\u003e\nneexistuje, soubor bude vytvořen včetně cesty k danému souboru (pokud i\nta neexistuje).\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003eSkript spouští editor, který je nastaven v proměnné\n\u003ccode\u003eEDITOR\u003c/code\u003e. Pokud není proměnná \u003ccode\u003eEDITOR\u003c/code\u003e nastavená,\nrespektuje proměnnou \u003ccode\u003eVISUAL\u003c/code\u003e. Pokud ani ta není nastavená,\npoužije se příkaz \u003ccode\u003evi\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"formát-tajného-logu\"\u003eFormát tajného logu\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eTajný log vygenerovaný pomocí příkazu \u003ccode\u003esecret-log\u003c/code\u003e bude\nuložen v adresáři \u003ccode\u003e.mole\u003c/code\u003e umístěném v domovském adresáři\n(tedy např. \u003ccode\u003e/home/$USER/.mole/\u003c/code\u003e). Název souboru bude ve\nformátu \u003ccode\u003elog_USER_DATETIME.bz2\u003c/code\u003e, kde \u003ccode\u003eUSER\u003c/code\u003e\nodpovídá jménu aktuálního uživatele a \u003ccode\u003eDATETIME\u003c/code\u003e odpovídá\ndatu a času vytvoření tajného logu.\n\u003cul\u003e\n\u003cli\u003eTajný log bude obsahovat záznamy o všech známých manipulacích (tedy\notevření skrze skript \u003ccode\u003emole\u003c/code\u003e) s vybranými soubory, případně\ndále omezených na daný časový úsek pomocí přepínačů \u003ccode\u003e-a\u003c/code\u003e,\n\u003ccode\u003e-b\u003c/code\u003e, nebo jejich kombinací.\u003c/li\u003e\n\u003cli\u003eFormát záznamů v logu bude\n\u003ccode\u003eFILEPATH;DATETIME_1;DATETIME_2;...\u003c/code\u003e, kde\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eFILEPATH\u003c/code\u003e je reálná cesta k souboru,\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDATETIME_N\u003c/code\u003e je datum a čas chronologicky\n\u003ccode\u003eN\u003c/code\u003e-tého známého otevření souboru buď napříč celou známou\nhistorií, nebo v daném časovém úseku.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003eZáznamy v tajném logu budou seřazeny lexikograficky podle hodnoty\n\u003ccode\u003eFILEPATH\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003eFormát hodnot \u003ccode\u003eDATETIME\u003c/code\u003e a \u003ccode\u003eDATETIME_N\u003c/code\u003e je\n\u003ccode\u003eYYYY-MM-DD_HH-mm-ss\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eTajný log komprimujte pomocí utility \u003ccode\u003ebzip2\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"poznámky\"\u003ePoznámky\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMůžete předpokládat, že nebude zadána skupina se jménem\n\u003ccode\u003e-\u003c/code\u003e a že názvy skupin nebudou obsahovat znak čárky\u003c/li\u003e\n\u003cli\u003eMůžete předpokládat, že názvy souborů (ani jejich cesty) nebudou\nobsahovat znaky středníku nebo dvojtečky.\u003c/li\u003e\n\u003cli\u003eSkript nebere v potaz otevření nebo editace, které byly provedeny\nmimo skript \u003ccode\u003emole\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eStejně tak pro příkaz \u003ccode\u003emole [-m] [FILTERS] [DIRECTORY]\u003c/code\u003e\nskript nebere v potaz soubory, se kterými dříve počítal a které jsou\nnyní smazané (u ostatních příkazů není potřeba kontrolovat existenci\nsouboru). Například, pokud byl \u003cem\u003eposledně\u003c/em\u003e editovaný soubor\nsmazán, volání \u003ccode\u003emole\u003c/code\u003e otevře \u003cem\u003epředposledně\u003c/em\u003e editovaný\nsoubor, pokud byl i ten smazán, bude otevřen \u003cem\u003epředpředposledně\u003c/em\u003e\neditovaný soubor, atp. \u003cstrong\u003eUPDATED 6.3.\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003ePři rozhodování relativní cesty adresáře je doporučené používat\nreálnou cestu (realpath). Důvod např.:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"sourceCode\" id=\"cb2\"\u003e\u003cpre class=\"sourceCode sh\"\u003e\u003ccode class=\"sourceCode bash\"\u003e\u003cspan id=\"cb2-1\"\u003e\u003ca href=\"file:///Users/ondra/teaching/ios/ios-23-1/zadani_reseni/README.html#cb2-1\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"ex\"\u003e$\u003c/span\u003e mole .\u003c/span\u003e\n\u003cspan id=\"cb2-2\"\u003e\u003ca href=\"file:///Users/ondra/teaching/ios/ios-23-1/zadani_reseni/README.html#cb2-2\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"ex\"\u003e$\u003c/span\u003e mole \u003cspan class=\"kw\"\u003e`\u003c/span\u003e\u003cspan class=\"bu\"\u003epwd\u003c/span\u003e\u003cspan class=\"kw\"\u003e`\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ch1 id=\"návratová-hodnota\"\u003eNávratová hodnota\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eSkript vrací úspěch v případě úspěšné operace nebo v případě úspěšné\neditace. Pokud editor vrátí chybu, skript vrátí stejný chybový návratový\nkód. Interní chyba skriptu bude doprovázena chybovým hlášením.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"implementační-detaily\"\u003eImplementační detaily\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eSkript by měl mít v celém běhu nastaveno\n\u003ccode\u003ePOSIXLY_CORRECT=yes\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSkript by měl běžet na všech běžných shellech (dash, ksh, bash).\nMůžete použít GNU rozšíření pro \u003ccode\u003esed\u003c/code\u003e či \u003ccode\u003eawk\u003c/code\u003e.\nJazyk Perl nebo Python povolen není.\u003c/li\u003e\n\u003cli\u003eSkript by měl ošetřit i chybový případ, že na daném stroji utilita\n\u003ccode\u003erealpath\u003c/code\u003e není dostupná (např. ukončením programu s chybovým\nkódem).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUPOZORNĚNÍ:\u003c/strong\u003e některé servery, např.\n\u003ccode\u003emerlin.fit.vutbr.cz\u003c/code\u003e, mají symlink\n\u003ccode\u003e/bin/sh -\u0026gt; bash\u003c/code\u003e. Ověřte si proto, že skript skutečně\ntestujete daným shellem. Doporučujeme ověřit správnou funkčnost pomocí\nvirtuálního stroje níže.\u003c/li\u003e\n\u003cli\u003eSkript musí běžet na běžně dostupných OS GNU/Linux, BSD a MacOS.\nStudentům je k dispozici virtuální stroj, na kterém lze ověřit správnou\nfunkčnost projektu, s obrazem ke stažení zde: \u003ca href=\"http://www.fit.vutbr.cz/~lengal/public/trusty.ova\"\u003ehttp://www.fit.vutbr.cz/~lengal/public/trusty.ova\u003c/a\u003e\n(pro VirtualBox, login: \u003ccode\u003etrusty\u003c/code\u003e / heslo:\n\u003ccode\u003etrusty\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eSkript nesmí používat dočasné soubory. Povoleny jsou však dočasné\nsoubory nepřímo tvořené jinými příkazy (např. příkazem\n\u003ccode\u003esed -i\u003c/code\u003e). Soubor \u003ccode\u003eMOLE_RC\u003c/code\u003e ani tajné log soubory\nnejsou v tomto případě chápány jako dočasné soubory.\u003c/li\u003e\n\u003cli\u003eNení potřeba řešit možnost souběhu několika instancí skriptu, v\ntakovém případě je chování nedefinované.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"možná-rozšíření\"\u003eMožná rozšíření\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eImplementuje u příkazů \u003ccode\u003emole [-m] [FILTERS] [DIRECTORY]\u003c/code\u003e,\n\u003ccode\u003elist\u003c/code\u003e a \u003ccode\u003esecret-log\u003c/code\u003e nový přepínač\n\u003ccode\u003e-r\u003c/code\u003e (recursive), který způsobí, že \u003ccode\u003emole\u003c/code\u003e bude\nhledat vyhovující záznamy o otevření (editaci) souborů i mezi záznamy,\nkteré se vztahují ke vnořeným adresářům vzhledem k\n\u003ccode\u003eDIRECTORY\u003c/code\u003e (resp. aktuálnímu adresáři, pokud nebyl\n\u003ccode\u003eDIRECTORY\u003c/code\u003e zadán).\n\u003cul\u003e\n\u003cli\u003eTedy například příkaz \u003ccode\u003emole list ~/proj1\u003c/code\u003e by na výstup\nvypsal jak soubor \u003ccode\u003emain.c\u003c/code\u003e, tak soubor\n\u003ccode\u003e.git/config\u003c/code\u003e za předpokladu, že má v logu\n\u003ccode\u003eMOLE_RC\u003c/code\u003e uloženy záznamy o otevření souborů\n\u003ccode\u003e~/proj1/main.c\u003c/code\u003e a \u003ccode\u003e~/proj1/.git/config\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003eImplementujte u příkazů \u003ccode\u003emole [-m] [FILTERS] [DIRECTORY]\u003c/code\u003e\na \u003ccode\u003elist\u003c/code\u003e nový přepínač \u003ccode\u003e-d\u003c/code\u003e (default), který\nzpůsobí, že \u003ccode\u003emole\u003c/code\u003e bude pracovat pouze se záznamy spuštění\n(editace) souborů bez specifikované skupiny.\n\u003cul\u003e\n\u003cli\u003eTedy např. při použití příkazu \u003ccode\u003emole -d ~\u003c/code\u003e bude ignorován\nzáznam o spuštění \u003ccode\u003emole -g bash ~/.bashrc\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePřepínač \u003ccode\u003e-d\u003c/code\u003e bude výlučný s přepínačem \u003ccode\u003e-g\u003c/code\u003e,\ntedy v rámci jednoho spuštění \u003ccode\u003emole\u003c/code\u003e nemohou být zadány oba\npřepínače zároveň.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003eImplementace přepínačů \u003ccode\u003e-d\u003c/code\u003e a \u003ccode\u003e-r\u003c/code\u003e je\nnepovinná; korektní implementace může vynahradit jiné bodové\nztráty.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"odevzdávání\"\u003eOdevzdávání\u003c/h1\u003e\n\u003cp\u003eOdevzdávejte pouze skript \u003ccode\u003emole\u003c/code\u003e (nebalte ho do žádného\narchivu) do IS VUT.\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartan03%2Fios-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartan03%2Fios-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartan03%2Fios-project/lists"}