[{"data":1,"prerenderedAt":27576},["ShallowReactive",2],{"content-\u002Ffaecher\u002Fbsa\u002Fap-zsmf":3},{"id":4,"title":5,"body":6,"class":27563,"description":909,"extension":27564,"meta":27565,"navigation":27566,"path":27567,"pdfDownload":27568,"scope":27563,"scopeName":27569,"seo":27570,"stem":27571,"subject":27572,"subjectName":27573,"type":27574,"typeName":3196,"year":27569,"__hash__":27575},"faecher\u002Ffaecher\u002Fbsa\u002Fap-zsmf.md","Zusammenfassung – Abschlussprüfung",{"type":7,"value":8,"toc":27300},"minimark",[9,14,252,256,261,398,402,480,484,603,607,718,722,826,830,893,897,903,952,963,983,988,991,1004,1009,1162,1167,1171,1281,1286,1321,1328,1331,1335,1342,1345,1348,1351,1354,1357,1360,1362,1364,1366,1371,1443,1448,1451,1455,1459,1654,1658,1661,1666,1677,1680,1682,1689,1694,1700,1705,1707,1763,1765,1769,2354,2357,2534,2538,2542,2651,2656,2686,2690,2706,2710,2732,2736,2740,2743,2747,2796,2800,2803,2807,2835,2839,2842,2846,2878,2882,2886,2912,2916,2919,2922,2925,2928,2931,2935,2982,2986,2990,2993,2996,3001,3004,3007,3011,3055,3058,3062,3065,3068,3072,3117,3120,3124,3127,3129,3133,3177,3180,3184,3187,3190,3193,3197,3247,3251,3255,3274,3278,3460,3464,3468,3527,3530,3534,3587,3591,3604,3607,3675,3679,3759,3762,3766,3850,3854,3857,3876,3880,3915,3919,4038,4042,4200,4204,4303,4307,4415,4418,4422,5179,5183,5187,5231,5235,5238,5318,5322,5336,5340,5476,5480,5549,5553,5556,5559,5562,5566,5622,5626,5630,5633,5636,5639,5643,5646,5649,5652,5655,5658,5661,5664,5667,5670,5673,5676,5680,6401,6405,6501,6505,6565,6576,6580,6584,6639,6643,6647,6651,6659,6663,6666,6674,6678,6681,6685,6690,6694,6766,6770,6889,6893,6897,6915,6919,6975,6979,6983,7068,7072,7137,7141,7219,7223,7274,7278,7346,7350,7390,7424,7428,7447,7481,7485,7512,7547,7550,7585,7589,7596,7620,7624,7695,7699,7780,7784,7864,7914,7918,7921,7933,7937,8026,8030,8113,8117,8121,8244,8248,8262,8266,8269,8334,8371,8375,8382,8388,8391,8409,8412,8415,8418,8432,8435,8439,8545,8549,8590,8594,8643,8647,8650,8654,8658,8757,8760,8764,8835,8839,8988,8992,9045,9049,9053,9078,9082,9156,9160,9271,9275,9339,9343,9418,9478,9482,9540,9544,9547,9571,9575,9579,9588,9592,9616,9620,9739,9743,9747,9867,9871,9943,9947,9951,9959,9963,9968,10036,10041,10303,10308,10326,10330,10377,10381,10384,10387,10390,10393,10396,10399,10410,10469,10473,10491,10511,10515,10576,10580,10585,10588,10622,10634,10638,10644,10665,10689,10697,10710,10720,10724,10812,10815,10819,10840,10844,10847,10851,10854,10858,10861,10865,10868,10872,10875,10879,10882,10886,10889,10893,10896,10900,10903,10907,10910,10914,10917,10921,10924,10928,10931,10935,10938,10942,10957,10960,10964,10985,11030,11034,11037,11040,11043,11046,11049,11052,11056,11060,11081,11085,11106,11109,11112,11123,11127,11134,11138,11170,11176,11180,11633,11637,11676,11679,11682,11686,12152,12156,12160,12163,12167,12171,12175,12294,12298,12367,12371,12779,12783,12789,12793,12894,12898,12938,12942,12945,12949,12979,12981,13044,13048,13051,13351,13355,13419,13422,13425,13429,13478,13481,13484,13487,13490,13493,13495,13551,13553,13556,13560,13636,13639,13684,13688,13708,13710,13712,13715,13732,13734,13737,13741,13744,13749,13910,13915,13958,13961,13966,14074,14079,14170,14173,14178,14243,14250,14293,14298,14312,14316,14319,14324,14354,14357,14388,14390,14392,14395,14398,14401,14406,14436,14438,14441,14444,14491,14493,14495,14498,14503,14555,14557,14560,14562,14565,14568,14573,14637,14639,14642,14645,14685,14687,14689,14691,14693,14696,14700,14703,14770,14772,14774,14776,14778,14781,14827,14831,14870,14872,14874,14878,14949,14951,14953,14955,14957,14960,14966,14972,14996,14999,15049,15051,15054,15057,15060,15063,15108,15110,15113,15116,15118,15120,15126,15130,15153,15157,15162,15170,15174,15177,15225,15229,15231,15319,15322,15326,15329,15331,15476,15480,15483,15485,15550,15554,15557,15559,15630,15634,15664,15669,15675,15681,15687,15691,15821,15826,15830,15832,15944,15948,15952,15955,15971,15983,15992,15995,15999,16006,16009,16024,16027,16039,16042,16059,16063,16080,16091,16101,16111,16121,16131,16141,16151,16161,16171,16181,16191,16201,16211,16221,16231,16241,16259,16274,16288,16300,16310,16326,16340,16357,16371,16386,16401,16416,16431,16440,16450,16460,16463,16467,16470,16503,16507,16510,16556,16560,16563,16614,16616,16626,16630,16656,16660,16665,16670,16674,16947,16951,16955,17020,17024,17107,17111,17297,17301,17305,17404,17408,17428,17432,17488,17492,17496,17553,17557,17561,17656,17660,17664,17946,17950,18030,18034,18156,18160,18264,18268,18471,18475,18570,18574,18663,18667,18682,18686,18695,18699,18702,18741,18745,18749,18936,18940,19028,19032,19087,19091,19139,19143,19188,19192,19247,19251,20445,20449,20497,20501,20505,20539,20542,20597,20600,20604,21053,21057,21061,21064,21068,21074,21077,21083,21086,21103,21109,21112,21115,21133,21139,21142,21204,21208,21210,21215,21221,21223,21234,21239,21242,21257,21266,21334,21467,21471,21473,21477,21486,21488,21499,21504,21510,21531,21534,21588,21600,21609,21618,21621,21625,21629,21655,21657,21748,21752,21754,21759,21768,21773,21779,21784,21885,21899,21902,22006,22010,22012,22016,22027,22035,22038,22048,22054,22057,22063,22102,22115,22118,22121,22213,22217,22219,22223,22231,22236,22239,22243,22384,22388,22390,22394,22402,22407,22410,22414,22502,22508,22538,22541,22584,22588,22592,22609,22613,22616,22619,22621,22624,22630,22659,22689,22710,22722,22740,22758,22761,22764,22790,22811,22814,22816,22818,22827,22854,22863,22891,22903,22937,22952,22975,22984,22990,23018,23039,23072,23078,23084,23104,23107,23119,23145,23157,23177,23183,23186,23188,23190,23205,23227,23248,23254,23273,23276,23295,23301,23316,23319,23321,23323,23329,23364,23376,23417,23444,23474,23494,23500,23503,23506,23511,23534,23552,23579,23609,23612,23614,23616,23625,23639,23720,23741,23768,23792,23801,23822,23840,23843,23849,23876,23906,23910,23913,23916,23925,23930,23942,23945,23948,23954,23963,23966,23969,23990,23999,24002,24008,24011,24026,24038,24066,24072,24078,24081,24111,24117,24158,24164,24210,24213,24216,24222,24234,24237,24257,24263,24279,24282,24285,24288,24368,24371,24374,24419,24421,24442,24445,24448,24472,24478,24508,24511,24514,24517,24523,24529,24532,24544,24547,24550,24559,24565,24574,24577,24583,24587,24590,24593,24596,24625,24639,24642,24647,24656,24661,24673,24676,24681,24693,24696,24701,24713,24716,24719,24722,24727,24736,24753,24756,24761,24823,24828,24862,24867,24879,24882,24890,24902,24907,24913,24916,24919,24924,24927,24930,24933,24936,24939,24942,25030,25033,25036,25039,25042,25047,25050,25062,25064,25073,25076,25079,25082,25145,25150,25153,25156,25159,25162,25164,25303,25308,25376,25379,25383,25386,25389,25392,25397,25403,25418,25423,25426,25438,25442,25445,25457,25462,25465,25477,25482,25485,25502,25505,25508,25511,25514,25517,25522,25525,25543,25548,25551,25566,25571,25574,25586,25591,25594,25606,25611,25614,25626,25629,25632,25637,25640,25643,25654,25657,25660,25665,25668,25672,25675,25678,25684,25687,25722,25758,25787,25826,25891,25894,25896,25899,25905,25917,25936,25944,25970,26001,26018,26036,26055,26069,26078,26102,26104,26107,26113,26119,26225,26242,26281,26373,26382,26384,26387,26393,26423,26461,26466,26533,26545,26579,26582,26660,26666,26668,26672,26675,26678,26681,26810,26814,26817,26820,26823,26910,26947,26976,26992,27016,27018,27021,27054,27056,27060,27063,27066,27069,27197,27199,27202,27219,27240,27296],[10,11,13],"h1",{"id":12},"buchseiten","Buchseiten",[15,16,17,40],"table",{},[18,19,20],"thead",{},[21,22,23,30,35],"tr",{},[24,25,26],"th",{},[27,28,29],"strong",{},"Seite",[24,31,32],{},[27,33,34],{},"Inhalt",[24,36,37],{},[27,38,39],{},"Beschreibung",[41,42,43,55,66,77,88,99,110,121,132,143,154,165,176,187,198,209,220,231,242],"tbody",{},[21,44,45,49,52],{},[46,47,48],"td",{},"180",[46,50,51],{},"SystemD",[46,53,54],{},"Diensteverwaltung und Init-System.",[21,56,57,60,63],{},[46,58,59],{},"28",[46,61,62],{},"Verzeichnisbaum",[46,64,65],{},"Hierarchische Dateistruktur ab \u002F.",[21,67,68,71,74],{},[46,69,70],{},"161",[46,72,73],{},"Sudo",[46,75,76],{},"Befehle mit Root-Rechten ausführen.",[21,78,79,82,85],{},[46,80,81],{},"63",[46,83,84],{},"Ls-Befehl",[46,86,87],{},"Verzeichnisinhalt auflisten.",[21,89,90,93,96],{},[46,91,92],{},"90",[46,94,95],{},"Touch-Befehl",[46,97,98],{},"Neue, leere Datei erstellen.",[21,100,101,104,107],{},[46,102,103],{},"65",[46,105,106],{},"Cp-Befehl",[46,108,109],{},"Dateien\u002FOrdner kopieren.",[21,111,112,115,118],{},[46,113,114],{},"66",[46,116,117],{},"Mv-Befehl",[46,119,120],{},"Verschieben oder Umbenennen.",[21,122,123,126,129],{},[46,124,125],{},"67",[46,127,128],{},"Rm-Befehl",[46,130,131],{},"Dateien oder Ordner löschen.",[21,133,134,137,140],{},[46,135,136],{},"72",[46,138,139],{},"Mkdir-Befehl",[46,141,142],{},"Neues Verzeichnis erstellen.",[21,144,145,148,151],{},[46,146,147],{},"41",[46,149,150],{},"Umgebungsvariablen",[46,152,153],{},"Werte zur Systemkonfiguration (z. B. $PATH).",[21,155,156,159,162],{},[46,157,158],{},"60",[46,160,161],{},"Man-Befehl",[46,163,164],{},"Handbuch für Befehle anzeigen.",[21,166,167,170,173],{},[46,168,169],{},"109",[46,171,172],{},"Grep-Befehl",[46,174,175],{},"Text nach Mustern durchsuchen.",[21,177,178,181,184],{},[46,179,180],{},"124",[46,182,183],{},"Awk-Befehl",[46,185,186],{},"Text- und Spaltenbearbeitung.",[21,188,189,192,195],{},[46,190,191],{},"125",[46,193,194],{},"Sed-Befehl",[46,196,197],{},"Automatisierte Textveränderung.",[21,199,200,203,206],{},[46,201,202],{},"100",[46,204,205],{},"Find-Befehl",[46,207,208],{},"Dateien im System suchen.",[21,210,211,214,217],{},[46,212,213],{},"76",[46,215,216],{},"Head-Befehl",[46,218,219],{},"Dateianfang anzeigen (Standard: erste 10 Zeilen).",[21,221,222,225,228],{},[46,223,224],{},"77",[46,226,227],{},"Tail-Befehl",[46,229,230],{},"Dateiende anzeigen (Standard: letzte 10 Zeilen).",[21,232,233,236,239],{},[46,234,235],{},"86",[46,237,238],{},"Stat-Befehl",[46,240,241],{},"Zeigt detaillierte Datei-Metadaten an.",[21,243,244,246,249],{},[46,245,180],{},[46,247,248],{},"Tee-Befehl",[46,250,251],{},"Schreibt Ausgabe in Datei und zeigt sie zeitgleich an.",[10,253,255],{"id":254},"grundlegende-linux-kommandos","Grundlegende Linux-Kommandos",[257,258,260],"h2",{"id":259},"navigation-und-dateisystem","Navigation und Dateisystem",[15,262,263,276],{},[18,264,265],{},[21,266,267,272],{},[24,268,269],{},[27,270,271],{},"Befehl",[24,273,274],{},[27,275,39],{},[41,277,278,286,294,302,310,318,326,334,342,350,358,366,374,382,390],{},[21,279,280,283],{},[46,281,282],{},"pwd",[46,284,285],{},"Aktuelles Arbeitsverzeichnis anzeigen",[21,287,288,291],{},[46,289,290],{},"Sudo (-u)",[46,292,293],{},"Programm als root(anderer benutzer)",[21,295,296,299],{},[46,297,298],{},"su",[46,300,301],{},"Benutzer wechseln",[21,303,304,307],{},[46,305,306],{},"cd verzeichnis",[46,308,309],{},"Verzeichnis wechseln",[21,311,312,315],{},[46,313,314],{},"cd ~ oder cd",[46,316,317],{},"Ins Home-Verzeichnis wechseln",[21,319,320,323],{},[46,321,322],{},"cd ..",[46,324,325],{},"Eine Ebene höher",[21,327,328,331],{},[46,329,330],{},"cd -",[46,332,333],{},"Ins vorherige Verzeichnis",[21,335,336,339],{},[46,337,338],{},"ls",[46,340,341],{},"Verzeichnisinhalt anzeigen",[21,343,344,347],{},[46,345,346],{},"ls -l",[46,348,349],{},"Langes Listing (Details)",[21,351,352,355],{},[46,353,354],{},"ls -a",[46,356,357],{},"Alle Dateien inkl. versteckte (mit . beginnend)",[21,359,360,363],{},[46,361,362],{},"ls -lR",[46,364,365],{},"Rekursiv mit Details",[21,367,368,371],{},[46,369,370],{},"ls -li",[46,372,373],{},"Mit Inode-Nummern",[21,375,376,379],{},[46,377,378],{},"ls -lh",[46,380,381],{},"Menschenlesbare Größen",[21,383,384,387],{},[46,385,386],{},"ls -ltr",[46,388,389],{},"Nach Zeit sortiert, älteste zuerst",[21,391,392,395],{},[46,393,394],{},"ls -lSr",[46,396,397],{},"Nach Größe sortiert, kleinste zuerst",[257,399,401],{"id":400},"wildcards-globbing","Wildcards \u002F Globbing",[15,403,404,423],{},[18,405,406],{},[21,407,408,413,418],{},[24,409,410],{},[27,411,412],{},"Muster",[24,414,415],{},[27,416,417],{},"Bedeutung",[24,419,420],{},[27,421,422],{},"Beispiel",[41,424,425,436,447,465],{},[21,426,427,430,433],{},[46,428,429],{},"*",[46,431,432],{},"Beliebig viele beliebige Zeichen",[46,434,435],{},"ls *.txt",[21,437,438,441,444],{},[46,439,440],{},"?",[46,442,443],{},"Genau ein beliebiges Zeichen",[46,445,446],{},"ls prog?.c",[21,448,449,455,458],{},[46,450,451],{},[452,453,454],"span",{},"abc",[46,456,457],{},"Genau ein Zeichen aus der Menge",[46,459,460,461,464],{},"ls p",[452,462,463],{},"12",".*",[21,466,467,472,475],{},[46,468,469],{},[452,470,471],{},"a-z",[46,473,474],{},"Zeichenbereich",[46,476,477,478,429],{},"ls ",[452,479,471],{},[257,481,483],{"id":482},"dateien-erstellen-kopieren-verschieben-löschen","Dateien erstellen, kopieren, verschieben, löschen",[15,485,486,498],{},[18,487,488],{},[21,489,490,494],{},[24,491,492],{},[27,493,271],{},[24,495,496],{},[27,497,39],{},[41,499,500,508,516,524,532,540,548,556,564,572,579,587,595],{},[21,501,502,505],{},[46,503,504],{},"touch datei",[46,506,507],{},"Leere Datei erstellen \u002F Zeitstempel ändern",[21,509,510,513],{},[46,511,512],{},"touch -am datei",[46,514,515],{},"Zugriffs- und Änderungszeit ändern",[21,517,518,521],{},[46,519,520],{},"mkdir verz",[46,522,523],{},"Verzeichnis erstellen",[21,525,526,529],{},[46,527,528],{},"mkdir -p eltern\u002Fkind",[46,530,531],{},"Verschachtelte Verzeichnisse erstellen",[21,533,534,537],{},[46,535,536],{},"cp quelle ziel",[46,538,539],{},"Datei kopieren",[21,541,542,545],{},[46,543,544],{},"cp -r quelle ziel",[46,546,547],{},"Verzeichnis rekursiv kopieren",[21,549,550,553],{},[46,551,552],{},"mv alt neu",[46,554,555],{},"Datei verschieben\u002Fumbenennen",[21,557,558,561],{},[46,559,560],{},"mv -i alt neu",[46,562,563],{},"Mit Nachfrage",[21,565,566,569],{},[46,567,568],{},"rm datei",[46,570,571],{},"Datei löschen",[21,573,574,577],{},[46,575,576],{},"rm -i datei",[46,578,563],{},[21,580,581,584],{},[46,582,583],{},"rm -r verzeichnis",[46,585,586],{},"Verzeichnis rekursiv löschen",[21,588,589,592],{},[46,590,591],{},"rm -rf verzeichnis",[46,593,594],{},"Erzwungen rekursiv löschen (VORSICHT!)",[21,596,597,600],{},[46,598,599],{},"rmdir verz",[46,601,602],{},"Leeres Verzeichnis löschen",[257,604,606],{"id":605},"dateiinhalte-anzeigen","Dateiinhalte anzeigen",[15,608,609,621],{},[18,610,611],{},[21,612,613,617],{},[24,614,615],{},[27,616,271],{},[24,618,619],{},[27,620,39],{},[41,622,623,631,639,647,655,662,670,678,686,694,702,710],{},[21,624,625,628],{},[46,626,627],{},"cat datei",[46,629,630],{},"Gesamte Datei anzeigen",[21,632,633,636],{},[46,634,635],{},"cat > datei",[46,637,638],{},"Von Tastatur in Datei schreiben (Beenden mit STRG+D)",[21,640,641,644],{},[46,642,643],{},"cat >> datei",[46,645,646],{},"An Datei anhängen",[21,648,649,652],{},[46,650,651],{},"less datei",[46,653,654],{},"Seitenweise anzeigen",[21,656,657,660],{},[46,658,659],{},"more datei",[46,661,654],{},[21,663,664,667],{},[46,665,666],{},"head datei",[46,668,669],{},"Erste 10 Zeilen",[21,671,672,675],{},[46,673,674],{},"head -n 20 datei",[46,676,677],{},"Erste 20 Zeilen",[21,679,680,683],{},[46,681,682],{},"tail datei",[46,684,685],{},"Letzte 10 Zeilen",[21,687,688,691],{},[46,689,690],{},"tail -n 20 datei",[46,692,693],{},"Letzte 20 Zeilen",[21,695,696,699],{},[46,697,698],{},"tail -f datei",[46,700,701],{},"Live-Überwachung einer Datei",[21,703,704,707],{},[46,705,706],{},"wc -l datei",[46,708,709],{},"Zeilen zählen",[21,711,712,715],{},[46,713,714],{},"diff datei1 datei2",[46,716,717],{},"Unterschiede zwischen Dateien",[257,719,721],{"id":720},"systeminformationen","Systeminformationen",[15,723,724,736],{},[18,725,726],{},[21,727,728,732],{},[24,729,730],{},[27,731,271],{},[24,733,734],{},[27,735,39],{},[41,737,738,746,754,762,770,778,786,794,802,810,818],{},[21,739,740,743],{},[46,741,742],{},"uname -a",[46,744,745],{},"System-Infos (Kernel, Architektur)",[21,747,748,751],{},[46,749,750],{},"uname -v",[46,752,753],{},"Kernel-Version",[21,755,756,759],{},[46,757,758],{},"uname -i",[46,760,761],{},"Hardware-Plattform",[21,763,764,767],{},[46,765,766],{},"whoami",[46,768,769],{},"Aktueller Benutzername",[21,771,772,775],{},[46,773,774],{},"who",[46,776,777],{},"Eingeloggte Benutzer",[21,779,780,783],{},[46,781,782],{},"id",[46,784,785],{},"Benutzer-\u002FGruppen-ID anzeigen",[21,787,788,791],{},[46,789,790],{},"date",[46,792,793],{},"Datum und Uhrzeit",[21,795,796,799],{},[46,797,798],{},"uptime",[46,800,801],{},"Systemlaufzeit und Auslastung",[21,803,804,807],{},[46,805,806],{},"free -h",[46,808,809],{},"Speicherauslastung",[21,811,812,815],{},[46,813,814],{},"df -h",[46,816,817],{},"Festplattenbelegung",[21,819,820,823],{},[46,821,822],{},"du -sh *",[46,824,825],{},"Verzeichnisgrößen",[257,827,829],{"id":828},"umleitungen-und-pipes","Umleitungen und Pipes",[15,831,832,845],{},[18,833,834],{},[21,835,836,841],{},[24,837,838],{},[27,839,840],{},"Operator",[24,842,843],{},[27,844,39],{},[41,846,847,855,863,871,877,885],{},[21,848,849,852],{},[46,850,851],{},">",[46,853,854],{},"Ausgabe in Datei (überschreiben)",[21,856,857,860],{},[46,858,859],{},">>",[46,861,862],{},"Ausgabe in Datei (anhängen)",[21,864,865,868],{},[46,866,867],{},"\u003C",[46,869,870],{},"Eingabe aus Datei",[21,872,873,875],{},[46,874],{},[46,876],{},[21,878,879,882],{},[46,880,881],{},"2>&1",[46,883,884],{},"Fehlerausgabe zu Standardausgabe umleiten",[21,886,887,890],{},[46,888,889],{},"&>\u002Fdev\u002Fnull",[46,891,892],{},"Alle Ausgaben unterdrücken",[257,894,896],{"id":895},"cp-u","cp -u",[898,899,900],"p",{},[27,901,902],{},"Grundprinzip",[904,905,910],"pre",{"className":906,"code":907,"language":908,"meta":909,"style":909},"language-bash shiki shiki-themes github-light github-dark","cp kopiert Dateien und Verzeichnisse. Die Option -u steht für update und verändert das Kopierverhaltens grundlegend:\n\n","bash","",[911,912,913],"code",{"__ignoreMap":909},[452,914,917,921,925,928,931,934,937,940,943,946,949],{"class":915,"line":916},"line",1,[452,918,920],{"class":919},"sScJk","cp kopiert",[452,922,924],{"class":923},"sZZnC"," Dateien",[452,926,927],{"class":923}," und",[452,929,930],{"class":923}," Verzeichnisse.",[452,932,933],{"class":923}," Die",[452,935,936],{"class":923}," Option -u steht",[452,938,939],{"class":923}," für update und",[452,941,942],{"class":923}," verändert",[452,944,945],{"class":923}," das",[452,947,948],{"class":923}," Kopierverhaltens",[452,950,951],{"class":923}," grundlegend:\n",[898,953,954,955,958,959,962],{},"Datei wird nur kopiert, wenn die ",[27,956,957],{},"Quelldatei neuer"," ist als die Zieldatei – oder wenn die Zieldatei ",[27,960,961],{},"nicht existiert",".",[904,964,966],{"className":906,"code":965,"language":908,"meta":909,"style":909},"cp -u quelle.txt ziel.txt\n\n",[911,967,968],{"__ignoreMap":909},[452,969,970,973,977,980],{"class":915,"line":916},[452,971,972],{"class":919},"cp",[452,974,976],{"class":975},"sj4cs"," -u",[452,978,979],{"class":923}," quelle.txt",[452,981,982],{"class":923}," ziel.txt\n",[898,984,985],{},[27,986,987],{},"Warum ist das nützlich?",[898,989,990],{},"Ohne -u überschreibt cp immer. Mit -u werden nur wirklich geänderte Dateien kopiert. Das ist ideal für:",[992,993,994,998,1001],"ul",{},[995,996,997],"li",{},"Inkrementelle Backups",[995,999,1000],{},"Synchronisation von Verzeichnissen ohne rsync",[995,1002,1003],{},"Skripte, die nur bei Änderungen reagieren sollen",[898,1005,1006],{},[27,1007,1008],{},"Alle relevanten cp-Optionen im Überblick",[15,1010,1011,1029],{},[18,1012,1013],{},[21,1014,1015,1020,1025],{},[24,1016,1017],{},[27,1018,1019],{},"Option",[24,1021,1022],{},[27,1023,1024],{},"Langform",[24,1026,1027],{},[27,1028,417],{},[41,1030,1031,1042,1053,1064,1075,1086,1097,1108,1119,1130,1141,1152],{},[21,1032,1033,1036,1039],{},[46,1034,1035],{},"-u",[46,1037,1038],{},"--update",[46,1040,1041],{},"Nur kopieren wenn Quelle neuer als Ziel (oder Ziel fehlt)",[21,1043,1044,1047,1050],{},[46,1045,1046],{},"-r \u002F -R",[46,1048,1049],{},"--recursive",[46,1051,1052],{},"Verzeichnisse rekursiv kopieren",[21,1054,1055,1058,1061],{},[46,1056,1057],{},"-v",[46,1059,1060],{},"--verbose",[46,1062,1063],{},"Jede Aktion ausgeben",[21,1065,1066,1069,1072],{},[46,1067,1068],{},"-i",[46,1070,1071],{},"--interactive",[46,1073,1074],{},"Vor dem Überschreiben fragen",[21,1076,1077,1080,1083],{},[46,1078,1079],{},"-n",[46,1081,1082],{},"--no-clobber",[46,1084,1085],{},"Existierende Dateien niemals überschreiben",[21,1087,1088,1091,1094],{},[46,1089,1090],{},"-p",[46,1092,1093],{},"--preserve",[46,1095,1096],{},"Metadaten (Zeitstempel, Rechte, Eigentümer) erhalten",[21,1098,1099,1102,1105],{},[46,1100,1101],{},"-a",[46,1103,1104],{},"--archive",[46,1106,1107],{},"Entspricht -dR --preserve=all",[21,1109,1110,1113,1116],{},[46,1111,1112],{},"-l",[46,1114,1115],{},"--link",[46,1117,1118],{},"Hardlinks statt Kopien erstellen",[21,1120,1121,1124,1127],{},[46,1122,1123],{},"-s",[46,1125,1126],{},"--symbolic-link",[46,1128,1129],{},"Symlinks statt Kopien",[21,1131,1132,1135,1138],{},[46,1133,1134],{},"-f",[46,1136,1137],{},"--force",[46,1139,1140],{},"Ziel-Datei entfernen wenn nicht schreibbar",[21,1142,1143,1146,1149],{},[46,1144,1145],{},"-b",[46,1147,1148],{},"--backup",[46,1150,1151],{},"Backup der Zieldatei anlegen",[21,1153,1154,1157,1159],{},[46,1155,1156],{},"--suffix=SUFFIX",[46,1158],{},[46,1160,1161],{},"Backup-Suffix festlegen (Standard: ~)",[898,1163,1164],{},[27,1165,1166],{},"Beispiele",[10,1168,1170],{"id":1169},"nur-neuere-dateien-kopieren","Nur neuere Dateien kopieren",[904,1172,1174],{"className":906,"code":1173,"language":908,"meta":909,"style":909},"cp -u dokument.txt \u002Fbackup\u002Fdokument.txt\n\n# Ganzes Verzeichnis aktualisierend synchronisieren\n\ncp -ru \u002Fhome\u002Fuser\u002Fprojekt\u002F \u002Fbackup\u002Fprojekt\u002F\n\n# Mit Ausgabe, welche Dateien wirklich kopiert wurden\n\ncp -ruv \u002Fhome\u002Fuser\u002Fdaten\u002F \u002Fmnt\u002Fbackup\u002Fdaten\u002F\n\n# Metadaten erhalten und nur Updates kopieren\n\ncp -uap \u002Fvar\u002Fwww\u002F \u002Fbackup\u002Fwww\u002F\n\n",[911,1175,1176,1188,1195,1202,1207,1221,1226,1232,1237,1251,1256,1262,1267],{"__ignoreMap":909},[452,1177,1178,1180,1182,1185],{"class":915,"line":916},[452,1179,972],{"class":919},[452,1181,976],{"class":975},[452,1183,1184],{"class":923}," dokument.txt",[452,1186,1187],{"class":923}," \u002Fbackup\u002Fdokument.txt\n",[452,1189,1191],{"class":915,"line":1190},2,[452,1192,1194],{"emptyLinePlaceholder":1193},true,"\n",[452,1196,1198],{"class":915,"line":1197},3,[452,1199,1201],{"class":1200},"sJ8bj","# Ganzes Verzeichnis aktualisierend synchronisieren\n",[452,1203,1205],{"class":915,"line":1204},4,[452,1206,1194],{"emptyLinePlaceholder":1193},[452,1208,1210,1212,1215,1218],{"class":915,"line":1209},5,[452,1211,972],{"class":919},[452,1213,1214],{"class":975}," -ru",[452,1216,1217],{"class":923}," \u002Fhome\u002Fuser\u002Fprojekt\u002F",[452,1219,1220],{"class":923}," \u002Fbackup\u002Fprojekt\u002F\n",[452,1222,1224],{"class":915,"line":1223},6,[452,1225,1194],{"emptyLinePlaceholder":1193},[452,1227,1229],{"class":915,"line":1228},7,[452,1230,1231],{"class":1200},"# Mit Ausgabe, welche Dateien wirklich kopiert wurden\n",[452,1233,1235],{"class":915,"line":1234},8,[452,1236,1194],{"emptyLinePlaceholder":1193},[452,1238,1240,1242,1245,1248],{"class":915,"line":1239},9,[452,1241,972],{"class":919},[452,1243,1244],{"class":975}," -ruv",[452,1246,1247],{"class":923}," \u002Fhome\u002Fuser\u002Fdaten\u002F",[452,1249,1250],{"class":923}," \u002Fmnt\u002Fbackup\u002Fdaten\u002F\n",[452,1252,1254],{"class":915,"line":1253},10,[452,1255,1194],{"emptyLinePlaceholder":1193},[452,1257,1259],{"class":915,"line":1258},11,[452,1260,1261],{"class":1200},"# Metadaten erhalten und nur Updates kopieren\n",[452,1263,1265],{"class":915,"line":1264},12,[452,1266,1194],{"emptyLinePlaceholder":1193},[452,1268,1270,1272,1275,1278],{"class":915,"line":1269},13,[452,1271,972],{"class":919},[452,1273,1274],{"class":975}," -uap",[452,1276,1277],{"class":923}," \u002Fvar\u002Fwww\u002F",[452,1279,1280],{"class":923}," \u002Fbackup\u002Fwww\u002F\n",[898,1282,1283],{},[27,1284,1285],{},"Wie entscheidet cp -u?",[904,1287,1289],{"className":906,"code":1288,"language":908,"meta":909,"style":909},"cp -u vergleicht mtime (Modification Time) der Dateien:\n\nQuelldatei-mtime > Zieldatei-mtime  →  KOPIEREN\n",[911,1290,1291,1300,1304],{"__ignoreMap":909},[452,1292,1293,1296],{"class":915,"line":916},[452,1294,1295],{"class":919},"cp -u vergleicht mtime (Modification Time",[452,1297,1299],{"class":1298},"sVt8B",") der Dateien:\n",[452,1301,1302],{"class":915,"line":1190},[452,1303,1194],{"emptyLinePlaceholder":1193},[452,1305,1306,1309,1312,1315,1318],{"class":915,"line":1197},[452,1307,1308],{"class":919},"Quelldatei-mtime ",[452,1310,1311],{"class":1298},"> ",[452,1313,1314],{"class":923},"Zieldatei-mtime ",[452,1316,1317],{"class":923}," → ",[452,1319,1320],{"class":923}," KOPIEREN\n",[898,1322,1323,1324,1327],{},"    Quelldatei-mtime ≤ Zieldatei-mtime  →  ÜBERSPRINGEN     ",[1325,1326],"br",{},"\n    Zieldatei existiert nicht           →  KOPIEREN",[257,1329,1330],{"id":1330},"tac",[898,1332,1333],{},[27,1334,902],{},[898,1336,1337,1338,1341],{},"tac ist das Gegenteil von cat und gibt eine Datei ",[27,1339,1340],{},"zeilenweise in umgekehrter Reihenfolge"," aus. Der Name ist cat rückwärts gelesen.",[898,1343,1344],{},"tac datei.txt",[898,1346,1347],{},"Enthält datei.txt:",[898,1349,1350],{},"Zeile 1",[898,1352,1353],{},"Zeile 2",[898,1355,1356],{},"Zeile 3",[898,1358,1359],{},"Gibt tac datei.txt aus:",[898,1361,1356],{},[898,1363,1353],{},[898,1365,1350],{},[898,1367,1368],{},[27,1369,1370],{},"Alle Optionen",[15,1372,1373,1389],{},[18,1374,1375],{},[21,1376,1377,1381,1385],{},[24,1378,1379],{},[27,1380,1019],{},[24,1382,1383],{},[27,1384,1024],{},[24,1386,1387],{},[27,1388,417],{},[41,1390,1391,1401,1412,1423,1433],{},[21,1392,1393,1395,1398],{},[46,1394,1145],{},[46,1396,1397],{},"--before",[46,1399,1400],{},"Trennzeichen vor statt nach dem Datensatz einfügen",[21,1402,1403,1406,1409],{},[46,1404,1405],{},"-r",[46,1407,1408],{},"--regex",[46,1410,1411],{},"Das Trennzeichen als regulären Ausdruck interpretieren",[21,1413,1414,1417,1420],{},[46,1415,1416],{},"-s TRENN",[46,1418,1419],{},"--separator=TRENN",[46,1421,1422],{},"Eigenes Trennzeichen statt Zeilenumbruch verwenden",[21,1424,1425,1428,1430],{},[46,1426,1427],{},"--help",[46,1429],{},[46,1431,1432],{},"Hilfe anzeigen",[21,1434,1435,1438,1440],{},[46,1436,1437],{},"--version",[46,1439],{},[46,1441,1442],{},"Versionsnummer anzeigen",[898,1444,1445],{},[27,1446,1447],{},"Standardverhalten",[898,1449,1450],{},"Ohne Optionen gilt \\n (Zeilenumbruch) als Trenner, und tac gibt die letzte Zeile zuerst aus.",[898,1452,1453],{},[27,1454,1166],{},[10,1456,1458],{"id":1457},"datei-umgekehrt-ausgeben","Datei umgekehrt ausgeben",[904,1460,1462],{"className":906,"code":1461,"language":908,"meta":909,"style":909},"tac \u002Fvar\u002Flog\u002Fsyslog | less\n\n# Letzten Log-Eintrag zuerst sehen\n\ntac \u002Fvar\u002Flog\u002Fauth.log | head -20\n\n# Mit eigenem Trennzeichen (statt Zeilenumbruch)\n\necho \"a:b:c:d\" | tac -s \":\"\n\n# Ausgabe: d:c:b:a:\n\n# Trennzeichen wird VOR dem Datensatz gesetzt (-b)\n\necho -e \"---BLOCK1n---BLOCK2n---BLOCK3\" | tac -b -s \"---\"\n\n# Trennzeichen als Regex (-r), z.B. beliebige Zahl als Trenner\n\necho \"Wort1Wort2Wort3\" | tac -r -s \"[0-9]\"\n\n# Kombiniert mit grep: letzte Fehlerzeile im Log\n\ntac \u002Fvar\u002Flog\u002Fsyslog | grep -m1 \"error\"\n\n",[911,1463,1464,1478,1482,1487,1491,1506,1510,1515,1519,1538,1542,1547,1551,1556,1561,1584,1589,1595,1600,1620,1625,1631,1636],{"__ignoreMap":909},[452,1465,1466,1468,1471,1475],{"class":915,"line":916},[452,1467,1330],{"class":919},[452,1469,1470],{"class":923}," \u002Fvar\u002Flog\u002Fsyslog",[452,1472,1474],{"class":1473},"szBVR"," |",[452,1476,1477],{"class":919}," less\n",[452,1479,1480],{"class":915,"line":1190},[452,1481,1194],{"emptyLinePlaceholder":1193},[452,1483,1484],{"class":915,"line":1197},[452,1485,1486],{"class":1200},"# Letzten Log-Eintrag zuerst sehen\n",[452,1488,1489],{"class":915,"line":1204},[452,1490,1194],{"emptyLinePlaceholder":1193},[452,1492,1493,1495,1498,1500,1503],{"class":915,"line":1209},[452,1494,1330],{"class":919},[452,1496,1497],{"class":923}," \u002Fvar\u002Flog\u002Fauth.log",[452,1499,1474],{"class":1473},[452,1501,1502],{"class":919}," head",[452,1504,1505],{"class":975}," -20\n",[452,1507,1508],{"class":915,"line":1223},[452,1509,1194],{"emptyLinePlaceholder":1193},[452,1511,1512],{"class":915,"line":1228},[452,1513,1514],{"class":1200},"# Mit eigenem Trennzeichen (statt Zeilenumbruch)\n",[452,1516,1517],{"class":915,"line":1234},[452,1518,1194],{"emptyLinePlaceholder":1193},[452,1520,1521,1524,1527,1529,1532,1535],{"class":915,"line":1239},[452,1522,1523],{"class":975},"echo",[452,1525,1526],{"class":923}," \"a:b:c:d\"",[452,1528,1474],{"class":1473},[452,1530,1531],{"class":919}," tac",[452,1533,1534],{"class":975}," -s",[452,1536,1537],{"class":923}," \":\"\n",[452,1539,1540],{"class":915,"line":1253},[452,1541,1194],{"emptyLinePlaceholder":1193},[452,1543,1544],{"class":915,"line":1258},[452,1545,1546],{"class":1200},"# Ausgabe: d:c:b:a:\n",[452,1548,1549],{"class":915,"line":1264},[452,1550,1194],{"emptyLinePlaceholder":1193},[452,1552,1553],{"class":915,"line":1269},[452,1554,1555],{"class":1200},"# Trennzeichen wird VOR dem Datensatz gesetzt (-b)\n",[452,1557,1559],{"class":915,"line":1558},14,[452,1560,1194],{"emptyLinePlaceholder":1193},[452,1562,1564,1566,1569,1572,1574,1576,1579,1581],{"class":915,"line":1563},15,[452,1565,1523],{"class":975},[452,1567,1568],{"class":975}," -e",[452,1570,1571],{"class":923}," \"---BLOCK1n---BLOCK2n---BLOCK3\"",[452,1573,1474],{"class":1473},[452,1575,1531],{"class":919},[452,1577,1578],{"class":975}," -b",[452,1580,1534],{"class":975},[452,1582,1583],{"class":923}," \"---\"\n",[452,1585,1587],{"class":915,"line":1586},16,[452,1588,1194],{"emptyLinePlaceholder":1193},[452,1590,1592],{"class":915,"line":1591},17,[452,1593,1594],{"class":1200},"# Trennzeichen als Regex (-r), z.B. beliebige Zahl als Trenner\n",[452,1596,1598],{"class":915,"line":1597},18,[452,1599,1194],{"emptyLinePlaceholder":1193},[452,1601,1603,1605,1608,1610,1612,1615,1617],{"class":915,"line":1602},19,[452,1604,1523],{"class":975},[452,1606,1607],{"class":923}," \"Wort1Wort2Wort3\"",[452,1609,1474],{"class":1473},[452,1611,1531],{"class":919},[452,1613,1614],{"class":975}," -r",[452,1616,1534],{"class":975},[452,1618,1619],{"class":923}," \"[0-9]\"\n",[452,1621,1623],{"class":915,"line":1622},20,[452,1624,1194],{"emptyLinePlaceholder":1193},[452,1626,1628],{"class":915,"line":1627},21,[452,1629,1630],{"class":1200},"# Kombiniert mit grep: letzte Fehlerzeile im Log\n",[452,1632,1634],{"class":915,"line":1633},22,[452,1635,1194],{"emptyLinePlaceholder":1193},[452,1637,1639,1641,1643,1645,1648,1651],{"class":915,"line":1638},23,[452,1640,1330],{"class":919},[452,1642,1470],{"class":923},[452,1644,1474],{"class":1473},[452,1646,1647],{"class":919}," grep",[452,1649,1650],{"class":975}," -m1",[452,1652,1653],{"class":923}," \"error\"\n",[10,1655,1657],{"id":1656},"skript-rückwärts-lesen-für-debugging","Skript rückwärts \"lesen\" (für Debugging)",[898,1659,1660],{},"tac skript.sh",[898,1662,1663],{},[27,1664,1665],{},"Praktischer Nutzen",[992,1667,1668,1671,1674],{},[995,1669,1670],{},"Logs von hinten lesen (neueste Einträge zuerst)",[995,1672,1673],{},"In Kombination mit head die letzten N Einträge effizient filtern",[995,1675,1676],{},"Alternative zu tail, wenn man mehr Kontrolle braucht",[257,1678,1679],{"id":1679},"basename",[898,1681,902],{},[898,1683,1684,1685,1688],{},"basename entfernt den Verzeichnisteil aus einem Dateipfad und gibt nur den ",[27,1686,1687],{},"Dateinamen"," zurück. Optional kann auch eine Dateiendung entfernt werden.",[898,1690,1691],{},[27,1692,1693],{},"Grundsyntax:",[898,1695,1696,1697],{},"basename PFAD ",[452,1698,1699],{},"SUFFIX",[898,1701,1702,1703],{},"basename OPTION... PFAD... ",[452,1704,1699],{},[898,1706,1370],{},[15,1708,1709,1725],{},[18,1710,1711],{},[21,1712,1713,1717,1721],{},[24,1714,1715],{},[27,1716,1019],{},[24,1718,1719],{},[27,1720,1024],{},[24,1722,1723],{},[27,1724,417],{},[41,1726,1727,1737,1747,1755],{},[21,1728,1729,1731,1734],{},[46,1730,1101],{},[46,1732,1733],{},"--multiple",[46,1735,1736],{},"Mehrere Pfade auf einmal verarbeiten",[21,1738,1739,1742,1744],{},[46,1740,1741],{},"-s SUFFIX",[46,1743,1156],{},[46,1745,1746],{},"Suffix vom Ergebnis entfernen",[21,1748,1749,1751,1753],{},[46,1750,1427],{},[46,1752],{},[46,1754,1432],{},[21,1756,1757,1759,1761],{},[46,1758,1437],{},[46,1760],{},[46,1762,1442],{},[898,1764,1166],{},[10,1766,1768],{"id":1767},"nur-dateiname-aus-pfad","Nur Dateiname aus Pfad",[904,1770,1772],{"className":906,"code":1771,"language":908,"meta":909,"style":909},"basename \u002Fhome\u002Fuser\u002Fdokumente\u002Fbericht.pdf\n\n# → bericht.pdf\n\n# Nur Name ohne Endung (Suffix angeben)\n\nbasename \u002Fhome\u002Fuser\u002Fdokumente\u002Fbericht.pdf .pdf\n\n# → bericht\n\nbasename \u002Fusr\u002Fbin\u002Fpython3\n\n# → python3\n\n# In Skript: aktuellen Skriptnamen\n\nSKRIPTNAME=$(basename \"$0\")\n\necho \"Dieses Skript heißt: $SKRIPTNAME\"\n\n# Dateiendung dynamisch entfernen\n\nDATEI=\"\u002Fpfad\u002Fzur\u002Fdatei.tar.gz\"\n\nbasename \"$DATEI\" .tar.gz\n\n# → datei\n\n# Mehrere Pfade gleichzeitig (-a)\n\nbasename -a \u002Fetc\u002Fhosts \u002Fetc\u002Fpasswd \u002Fetc\u002Fshadow\n\n# → hosts\n\n# passwd\n\n# shadow\n\n# Mehrere Pfade Suffix entfernen (-a -s)\n\nbasename -a -s .txt \u002Fdaten\u002Fa.txt \u002Fdaten\u002Fb.txt \u002Fdaten\u002Fc.txt\n\n# → a\n\n# b\n\n# c\n\n# In Schleife: alle .sh-Dateien ohne Endung\n\nfor f in \u002Fskripte\u002F*.sh; do\n\nname=$(basename \"$f\" .sh)\n\necho \"Verarbeite: $name\"\n\ndone\n\n# Gegenstück: dirname gibt das Verzeichnis zurück\n\ndirname \u002Fhome\u002Fuser\u002Fdokumente\u002Fbericht.pdf\n\n# → \u002Fhome\u002Fuser\u002Fdokumente\n\n# Kombination basename dirname\n\nDATEI=\"\u002Fhome\u002Fuser\u002Fdaten\u002Freport.csv\"\n\nDIR=$(dirname \"$DATEI\")\n\nNAME=$(basename \"$DATEI\" .csv)\n\necho \"Verzeichnis: $DIR\"\n\necho \"Dateiname: $NAME\"\n\n# → Verzeichnis: \u002Fhome\u002Fuser\u002Fdaten\n\n# → Dateiname: report\n\n",[911,1773,1774,1781,1785,1790,1794,1799,1803,1813,1817,1822,1826,1833,1837,1842,1846,1851,1855,1880,1884,1897,1901,1906,1910,1920,1925,1940,1945,1951,1956,1962,1967,1984,1989,1995,2000,2006,2011,2017,2022,2028,2033,2054,2059,2065,2070,2076,2081,2087,2092,2098,2103,2124,2129,2153,2158,2171,2176,2182,2187,2193,2198,2206,2211,2217,2222,2228,2233,2243,2248,2268,2273,2296,2301,2314,2319,2332,2337,2343,2348],{"__ignoreMap":909},[452,1775,1776,1778],{"class":915,"line":916},[452,1777,1679],{"class":919},[452,1779,1780],{"class":923}," \u002Fhome\u002Fuser\u002Fdokumente\u002Fbericht.pdf\n",[452,1782,1783],{"class":915,"line":1190},[452,1784,1194],{"emptyLinePlaceholder":1193},[452,1786,1787],{"class":915,"line":1197},[452,1788,1789],{"class":1200},"# → bericht.pdf\n",[452,1791,1792],{"class":915,"line":1204},[452,1793,1194],{"emptyLinePlaceholder":1193},[452,1795,1796],{"class":915,"line":1209},[452,1797,1798],{"class":1200},"# Nur Name ohne Endung (Suffix angeben)\n",[452,1800,1801],{"class":915,"line":1223},[452,1802,1194],{"emptyLinePlaceholder":1193},[452,1804,1805,1807,1810],{"class":915,"line":1228},[452,1806,1679],{"class":919},[452,1808,1809],{"class":923}," \u002Fhome\u002Fuser\u002Fdokumente\u002Fbericht.pdf",[452,1811,1812],{"class":923}," .pdf\n",[452,1814,1815],{"class":915,"line":1234},[452,1816,1194],{"emptyLinePlaceholder":1193},[452,1818,1819],{"class":915,"line":1239},[452,1820,1821],{"class":1200},"# → bericht\n",[452,1823,1824],{"class":915,"line":1253},[452,1825,1194],{"emptyLinePlaceholder":1193},[452,1827,1828,1830],{"class":915,"line":1258},[452,1829,1679],{"class":919},[452,1831,1832],{"class":923}," \u002Fusr\u002Fbin\u002Fpython3\n",[452,1834,1835],{"class":915,"line":1264},[452,1836,1194],{"emptyLinePlaceholder":1193},[452,1838,1839],{"class":915,"line":1269},[452,1840,1841],{"class":1200},"# → python3\n",[452,1843,1844],{"class":915,"line":1558},[452,1845,1194],{"emptyLinePlaceholder":1193},[452,1847,1848],{"class":915,"line":1563},[452,1849,1850],{"class":1200},"# In Skript: aktuellen Skriptnamen\n",[452,1852,1853],{"class":915,"line":1586},[452,1854,1194],{"emptyLinePlaceholder":1193},[452,1856,1857,1860,1863,1866,1868,1871,1874,1877],{"class":915,"line":1591},[452,1858,1859],{"class":1298},"SKRIPTNAME",[452,1861,1862],{"class":1473},"=",[452,1864,1865],{"class":1298},"$(",[452,1867,1679],{"class":919},[452,1869,1870],{"class":923}," \"",[452,1872,1873],{"class":975},"$0",[452,1875,1876],{"class":923},"\"",[452,1878,1879],{"class":1298},")\n",[452,1881,1882],{"class":915,"line":1597},[452,1883,1194],{"emptyLinePlaceholder":1193},[452,1885,1886,1888,1891,1894],{"class":915,"line":1602},[452,1887,1523],{"class":975},[452,1889,1890],{"class":923}," \"Dieses Skript heißt: ",[452,1892,1893],{"class":1298},"$SKRIPTNAME",[452,1895,1896],{"class":923},"\"\n",[452,1898,1899],{"class":915,"line":1622},[452,1900,1194],{"emptyLinePlaceholder":1193},[452,1902,1903],{"class":915,"line":1627},[452,1904,1905],{"class":1200},"# Dateiendung dynamisch entfernen\n",[452,1907,1908],{"class":915,"line":1633},[452,1909,1194],{"emptyLinePlaceholder":1193},[452,1911,1912,1915,1917],{"class":915,"line":1638},[452,1913,1914],{"class":1298},"DATEI",[452,1916,1862],{"class":1473},[452,1918,1919],{"class":923},"\"\u002Fpfad\u002Fzur\u002Fdatei.tar.gz\"\n",[452,1921,1923],{"class":915,"line":1922},24,[452,1924,1194],{"emptyLinePlaceholder":1193},[452,1926,1928,1930,1932,1935,1937],{"class":915,"line":1927},25,[452,1929,1679],{"class":919},[452,1931,1870],{"class":923},[452,1933,1934],{"class":1298},"$DATEI",[452,1936,1876],{"class":923},[452,1938,1939],{"class":923}," .tar.gz\n",[452,1941,1943],{"class":915,"line":1942},26,[452,1944,1194],{"emptyLinePlaceholder":1193},[452,1946,1948],{"class":915,"line":1947},27,[452,1949,1950],{"class":1200},"# → datei\n",[452,1952,1954],{"class":915,"line":1953},28,[452,1955,1194],{"emptyLinePlaceholder":1193},[452,1957,1959],{"class":915,"line":1958},29,[452,1960,1961],{"class":1200},"# Mehrere Pfade gleichzeitig (-a)\n",[452,1963,1965],{"class":915,"line":1964},30,[452,1966,1194],{"emptyLinePlaceholder":1193},[452,1968,1970,1972,1975,1978,1981],{"class":915,"line":1969},31,[452,1971,1679],{"class":919},[452,1973,1974],{"class":975}," -a",[452,1976,1977],{"class":923}," \u002Fetc\u002Fhosts",[452,1979,1980],{"class":923}," \u002Fetc\u002Fpasswd",[452,1982,1983],{"class":923}," \u002Fetc\u002Fshadow\n",[452,1985,1987],{"class":915,"line":1986},32,[452,1988,1194],{"emptyLinePlaceholder":1193},[452,1990,1992],{"class":915,"line":1991},33,[452,1993,1994],{"class":1200},"# → hosts\n",[452,1996,1998],{"class":915,"line":1997},34,[452,1999,1194],{"emptyLinePlaceholder":1193},[452,2001,2003],{"class":915,"line":2002},35,[452,2004,2005],{"class":1200},"# passwd\n",[452,2007,2009],{"class":915,"line":2008},36,[452,2010,1194],{"emptyLinePlaceholder":1193},[452,2012,2014],{"class":915,"line":2013},37,[452,2015,2016],{"class":1200},"# shadow\n",[452,2018,2020],{"class":915,"line":2019},38,[452,2021,1194],{"emptyLinePlaceholder":1193},[452,2023,2025],{"class":915,"line":2024},39,[452,2026,2027],{"class":1200},"# Mehrere Pfade Suffix entfernen (-a -s)\n",[452,2029,2031],{"class":915,"line":2030},40,[452,2032,1194],{"emptyLinePlaceholder":1193},[452,2034,2036,2038,2040,2042,2045,2048,2051],{"class":915,"line":2035},41,[452,2037,1679],{"class":919},[452,2039,1974],{"class":975},[452,2041,1534],{"class":975},[452,2043,2044],{"class":923}," .txt",[452,2046,2047],{"class":923}," \u002Fdaten\u002Fa.txt",[452,2049,2050],{"class":923}," \u002Fdaten\u002Fb.txt",[452,2052,2053],{"class":923}," \u002Fdaten\u002Fc.txt\n",[452,2055,2057],{"class":915,"line":2056},42,[452,2058,1194],{"emptyLinePlaceholder":1193},[452,2060,2062],{"class":915,"line":2061},43,[452,2063,2064],{"class":1200},"# → a\n",[452,2066,2068],{"class":915,"line":2067},44,[452,2069,1194],{"emptyLinePlaceholder":1193},[452,2071,2073],{"class":915,"line":2072},45,[452,2074,2075],{"class":1200},"# b\n",[452,2077,2079],{"class":915,"line":2078},46,[452,2080,1194],{"emptyLinePlaceholder":1193},[452,2082,2084],{"class":915,"line":2083},47,[452,2085,2086],{"class":1200},"# c\n",[452,2088,2090],{"class":915,"line":2089},48,[452,2091,1194],{"emptyLinePlaceholder":1193},[452,2093,2095],{"class":915,"line":2094},49,[452,2096,2097],{"class":1200},"# In Schleife: alle .sh-Dateien ohne Endung\n",[452,2099,2101],{"class":915,"line":2100},50,[452,2102,1194],{"emptyLinePlaceholder":1193},[452,2104,2106,2109,2112,2115,2118,2121],{"class":915,"line":2105},51,[452,2107,2108],{"class":1473},"for",[452,2110,2111],{"class":1298}," f ",[452,2113,2114],{"class":1473},"in",[452,2116,2117],{"class":923}," \u002Fskripte\u002F*.sh",[452,2119,2120],{"class":1298},"; ",[452,2122,2123],{"class":1473},"do\n",[452,2125,2127],{"class":915,"line":2126},52,[452,2128,1194],{"emptyLinePlaceholder":1193},[452,2130,2132,2135,2137,2139,2141,2143,2146,2148,2151],{"class":915,"line":2131},53,[452,2133,2134],{"class":1298},"name",[452,2136,1862],{"class":1473},[452,2138,1865],{"class":1298},[452,2140,1679],{"class":919},[452,2142,1870],{"class":923},[452,2144,2145],{"class":1298},"$f",[452,2147,1876],{"class":923},[452,2149,2150],{"class":923}," .sh",[452,2152,1879],{"class":1298},[452,2154,2156],{"class":915,"line":2155},54,[452,2157,1194],{"emptyLinePlaceholder":1193},[452,2159,2161,2163,2166,2169],{"class":915,"line":2160},55,[452,2162,1523],{"class":975},[452,2164,2165],{"class":923}," \"Verarbeite: ",[452,2167,2168],{"class":1298},"$name",[452,2170,1896],{"class":923},[452,2172,2174],{"class":915,"line":2173},56,[452,2175,1194],{"emptyLinePlaceholder":1193},[452,2177,2179],{"class":915,"line":2178},57,[452,2180,2181],{"class":1473},"done\n",[452,2183,2185],{"class":915,"line":2184},58,[452,2186,1194],{"emptyLinePlaceholder":1193},[452,2188,2190],{"class":915,"line":2189},59,[452,2191,2192],{"class":1200},"# Gegenstück: dirname gibt das Verzeichnis zurück\n",[452,2194,2196],{"class":915,"line":2195},60,[452,2197,1194],{"emptyLinePlaceholder":1193},[452,2199,2201,2204],{"class":915,"line":2200},61,[452,2202,2203],{"class":919},"dirname",[452,2205,1780],{"class":923},[452,2207,2209],{"class":915,"line":2208},62,[452,2210,1194],{"emptyLinePlaceholder":1193},[452,2212,2214],{"class":915,"line":2213},63,[452,2215,2216],{"class":1200},"# → \u002Fhome\u002Fuser\u002Fdokumente\n",[452,2218,2220],{"class":915,"line":2219},64,[452,2221,1194],{"emptyLinePlaceholder":1193},[452,2223,2225],{"class":915,"line":2224},65,[452,2226,2227],{"class":1200},"# Kombination basename dirname\n",[452,2229,2231],{"class":915,"line":2230},66,[452,2232,1194],{"emptyLinePlaceholder":1193},[452,2234,2236,2238,2240],{"class":915,"line":2235},67,[452,2237,1914],{"class":1298},[452,2239,1862],{"class":1473},[452,2241,2242],{"class":923},"\"\u002Fhome\u002Fuser\u002Fdaten\u002Freport.csv\"\n",[452,2244,2246],{"class":915,"line":2245},68,[452,2247,1194],{"emptyLinePlaceholder":1193},[452,2249,2251,2254,2256,2258,2260,2262,2264,2266],{"class":915,"line":2250},69,[452,2252,2253],{"class":1298},"DIR",[452,2255,1862],{"class":1473},[452,2257,1865],{"class":1298},[452,2259,2203],{"class":919},[452,2261,1870],{"class":923},[452,2263,1934],{"class":1298},[452,2265,1876],{"class":923},[452,2267,1879],{"class":1298},[452,2269,2271],{"class":915,"line":2270},70,[452,2272,1194],{"emptyLinePlaceholder":1193},[452,2274,2276,2279,2281,2283,2285,2287,2289,2291,2294],{"class":915,"line":2275},71,[452,2277,2278],{"class":1298},"NAME",[452,2280,1862],{"class":1473},[452,2282,1865],{"class":1298},[452,2284,1679],{"class":919},[452,2286,1870],{"class":923},[452,2288,1934],{"class":1298},[452,2290,1876],{"class":923},[452,2292,2293],{"class":923}," .csv",[452,2295,1879],{"class":1298},[452,2297,2299],{"class":915,"line":2298},72,[452,2300,1194],{"emptyLinePlaceholder":1193},[452,2302,2304,2306,2309,2312],{"class":915,"line":2303},73,[452,2305,1523],{"class":975},[452,2307,2308],{"class":923}," \"Verzeichnis: ",[452,2310,2311],{"class":1298},"$DIR",[452,2313,1896],{"class":923},[452,2315,2317],{"class":915,"line":2316},74,[452,2318,1194],{"emptyLinePlaceholder":1193},[452,2320,2322,2324,2327,2330],{"class":915,"line":2321},75,[452,2323,1523],{"class":975},[452,2325,2326],{"class":923}," \"Dateiname: ",[452,2328,2329],{"class":1298},"$NAME",[452,2331,1896],{"class":923},[452,2333,2335],{"class":915,"line":2334},76,[452,2336,1194],{"emptyLinePlaceholder":1193},[452,2338,2340],{"class":915,"line":2339},77,[452,2341,2342],{"class":1200},"# → Verzeichnis: \u002Fhome\u002Fuser\u002Fdaten\n",[452,2344,2346],{"class":915,"line":2345},78,[452,2347,1194],{"emptyLinePlaceholder":1193},[452,2349,2351],{"class":915,"line":2350},79,[452,2352,2353],{"class":1200},"# → Dateiname: report\n",[898,2355,2356],{},"Häufiger Einsatz in Skripten",[904,2358,2360],{"className":906,"code":2359,"language":908,"meta":909,"style":909},"#!\u002Fbin\u002Fbash\n\n# Skript, das sich selbst benennt und Locks verwendet\n\nPROG=$(basename \"$0\")\n\nLOCKFILE=\"\u002Ftmp\u002F${PROG}.lock\"\n\nif [ -f \"$LOCKFILE\" ]; then\n\necho \"$PROG läuft bereits!\" >&2\n\nexit 1\n\nfi\n\ntouch \"$LOCKFILE\"\n\ntrap \"rm -f $LOCKFILE\" EXIT\n\necho \"$PROG wird ausgeführt...\"\n\n",[911,2361,2362,2367,2371,2376,2380,2399,2403,2418,2422,2445,2449,2464,2468,2476,2480,2485,2489,2500,2504,2519,2523],{"__ignoreMap":909},[452,2363,2364],{"class":915,"line":916},[452,2365,2366],{"class":1200},"#!\u002Fbin\u002Fbash\n",[452,2368,2369],{"class":915,"line":1190},[452,2370,1194],{"emptyLinePlaceholder":1193},[452,2372,2373],{"class":915,"line":1197},[452,2374,2375],{"class":1200},"# Skript, das sich selbst benennt und Locks verwendet\n",[452,2377,2378],{"class":915,"line":1204},[452,2379,1194],{"emptyLinePlaceholder":1193},[452,2381,2382,2385,2387,2389,2391,2393,2395,2397],{"class":915,"line":1209},[452,2383,2384],{"class":1298},"PROG",[452,2386,1862],{"class":1473},[452,2388,1865],{"class":1298},[452,2390,1679],{"class":919},[452,2392,1870],{"class":923},[452,2394,1873],{"class":975},[452,2396,1876],{"class":923},[452,2398,1879],{"class":1298},[452,2400,2401],{"class":915,"line":1223},[452,2402,1194],{"emptyLinePlaceholder":1193},[452,2404,2405,2408,2410,2413,2415],{"class":915,"line":1228},[452,2406,2407],{"class":1298},"LOCKFILE",[452,2409,1862],{"class":1473},[452,2411,2412],{"class":923},"\"\u002Ftmp\u002F${",[452,2414,2384],{"class":1298},[452,2416,2417],{"class":923},"}.lock\"\n",[452,2419,2420],{"class":915,"line":1234},[452,2421,1194],{"emptyLinePlaceholder":1193},[452,2423,2424,2427,2430,2432,2434,2437,2439,2442],{"class":915,"line":1239},[452,2425,2426],{"class":1473},"if",[452,2428,2429],{"class":1298}," [ ",[452,2431,1134],{"class":1473},[452,2433,1870],{"class":923},[452,2435,2436],{"class":1298},"$LOCKFILE",[452,2438,1876],{"class":923},[452,2440,2441],{"class":1298}," ]; ",[452,2443,2444],{"class":1473},"then\n",[452,2446,2447],{"class":915,"line":1253},[452,2448,1194],{"emptyLinePlaceholder":1193},[452,2450,2451,2453,2455,2458,2461],{"class":915,"line":1258},[452,2452,1523],{"class":975},[452,2454,1870],{"class":923},[452,2456,2457],{"class":1298},"$PROG",[452,2459,2460],{"class":923}," läuft bereits!\"",[452,2462,2463],{"class":1473}," >&2\n",[452,2465,2466],{"class":915,"line":1264},[452,2467,1194],{"emptyLinePlaceholder":1193},[452,2469,2470,2473],{"class":915,"line":1269},[452,2471,2472],{"class":975},"exit",[452,2474,2475],{"class":975}," 1\n",[452,2477,2478],{"class":915,"line":1558},[452,2479,1194],{"emptyLinePlaceholder":1193},[452,2481,2482],{"class":915,"line":1563},[452,2483,2484],{"class":1473},"fi\n",[452,2486,2487],{"class":915,"line":1586},[452,2488,1194],{"emptyLinePlaceholder":1193},[452,2490,2491,2494,2496,2498],{"class":915,"line":1591},[452,2492,2493],{"class":919},"touch",[452,2495,1870],{"class":923},[452,2497,2436],{"class":1298},[452,2499,1896],{"class":923},[452,2501,2502],{"class":915,"line":1597},[452,2503,1194],{"emptyLinePlaceholder":1193},[452,2505,2506,2509,2512,2514,2516],{"class":915,"line":1602},[452,2507,2508],{"class":975},"trap",[452,2510,2511],{"class":923}," \"rm -f ",[452,2513,2436],{"class":1298},[452,2515,1876],{"class":923},[452,2517,2518],{"class":923}," EXIT\n",[452,2520,2521],{"class":915,"line":1622},[452,2522,1194],{"emptyLinePlaceholder":1193},[452,2524,2525,2527,2529,2531],{"class":915,"line":1627},[452,2526,1523],{"class":975},[452,2528,1870],{"class":923},[452,2530,2457],{"class":1298},[452,2532,2533],{"class":923}," wird ausgeführt...\"\n",[10,2535,2537],{"id":2536},"verzeichnisstruktur-fhs","Verzeichnisstruktur (FHS)",[257,2539,2541],{"id":2540},"filesystem-hierarchy-standard","Filesystem Hierarchy Standard",[898,2543,2544,2545,2547,2548,2550,2551,2553,2554,2556,2557,2559,2560,2562,2563,2565,2566,2568,2569,2571,2572,2574,2575,2577,2578,2580,2581,2583,2584,2586,2587,2589,2590,2592,2593,2595,2596,2598,2599,2601,2602,2604,2605,2607,2608,2611,2612,2614,2615,2617,2618,2620,2621,2623,2624,2626,2627,2629,2630,2632,2633,2635,2636,2638,2639,2641,2642,2644,2645,2647,2648,2650],{},"\u002F Wurzelverzeichnis (root)",[1325,2546],{},"\n├── \u002Fbin Essentielle Programme (ls, bash, echo, cp, mv, rm)",[1325,2549],{},"\n├── \u002Fsbin System-Programme (für root: fdisk, mkfs, init)",[1325,2552],{},"\n├── \u002Fboot Bootloader, Kernel (vmlinuz, initramfs, grub\u002F)",[1325,2555],{},"\n├── \u002Fdev Gerätedateien (sda, tty, null, zero)",[1325,2558],{},"\n├── \u002Fetc Globale Konfigurationsdateien",[1325,2561],{},"\n│ ├── fstab Dateisystem-Mountpoints",[1325,2564],{},"\n│ ├── passwd Benutzerdatenbank",[1325,2567],{},"\n│ ├── shadow Passwortdatenbank",[1325,2570],{},"\n│ ├── group Gruppendatenbank",[1325,2573],{},"\n│ ├── hostname Rechnername",[1325,2576],{},"\n│ ├── hosts DNS-Einträge lokal",[1325,2579],{},"\n│ └── sudoers Sudo-Regeln",[1325,2582],{},"\n├── \u002Fhome Benutzer-Homeverzeichnisse (\u002Fhome\u002Fusername)",[1325,2585],{},"\n├── \u002Flib Shared Libraries, Kernelmodule",[1325,2588],{},"\n├── \u002Fmedia Automatische Mountpoints (USB, CD)",[1325,2591],{},"\n├── \u002Fmnt Manuelle Mountpoints",[1325,2594],{},"\n├── \u002Fopt Optionale Software",[1325,2597],{},"\n├── \u002Fproc Virtuelles Dateisystem: Prozesse + Kernel-Info",[1325,2600],{},"\n│ ├── cpuinfo CPU-Informationen",[1325,2603],{},"\n│ ├── meminfo Speicherinformationen",[1325,2606],{},"\n│ └── ",[452,2609,2610],{},"PID","\u002F Verzeichnis pro Prozess",[1325,2613],{},"\n├── \u002Froot Home-Verzeichnis von root",[1325,2616],{},"\n├── \u002Frun Runtime-Daten seit letztem Boot",[1325,2619],{},"\n├── \u002Fsrv Daten für Serverdienste",[1325,2622],{},"\n├── \u002Fsys Virtuelles Dateisystem: Hardware + Kernel",[1325,2625],{},"\n├── \u002Ftmp Temporäre Dateien (nach Neustart gelöscht)",[1325,2628],{},"\n├── \u002Fusr Bibliotheken, Systemtools, installierte Programme",[1325,2631],{},"\n│ ├── \u002Fusr\u002Fbin Benutzer-Programme",[1325,2634],{},"\n│ ├── \u002Fusr\u002Fsbin System-Programme",[1325,2637],{},"\n│ └── \u002Fusr\u002Flib Bibliotheken",[1325,2640],{},"\n└── \u002Fvar Variable Daten",[1325,2643],{},"\n├── \u002Fvar\u002Flog Logdateien (syslog, dmesg, auth.log)",[1325,2646],{},"\n├── \u002Fvar\u002Fspool Warteschlangen (Druckjobs, Cron, Mail)",[1325,2649],{},"\n└── \u002Fvar\u002Ftmp Persistente temporäre Dateien",[2652,2653,2655],"h3",{"id":2654},"wichtige-merkmale","Wichtige Merkmale:",[992,2657,2658,2667,2674,2680,2683],{},[995,2659,2660,2663,2664],{},[27,2661,2662],{},"Keine Laufwerksbuchstaben"," – stattdessen ",[27,2665,2666],{},"Mountpoints",[995,2668,2669,2670,2673],{},"\u002Fproc und \u002Fsys sind ",[27,2671,2672],{},"virtuelle Dateisysteme"," → belegen keinen Speicherplatz",[995,2675,2676,2677],{},"\u002Fproc ändert sich ständig → ",[27,2678,2679],{},"keine Backups davon erstellen!",[995,2681,2682],{},"Logdateien: syslog = allgemein, dmesg = Kernel-Log",[995,2684,2685],{},"Ansehen: cat \u002Fvar\u002Flog\u002Fsyslog oder less \u002Fvar\u002Flog\u002Fsyslog",[10,2687,2689],{"id":2688},"zusammenfassung-die-etcsudoers-datei","Zusammenfassung: Die \u002Fetc\u002Fsudoers Datei",[992,2691,2692,2695,2698],{},[995,2693,2694],{},"Zentrale Konfigurationsdatei für sudo",[995,2696,2697],{},"Legt fest welche Benutzer welche Berechtigungen auf welchen Hosts haben",[995,2699,2700,2701],{},"Darf nicht mit normalem Texteditor geöffnet werden\n",[992,2702,2703],{},[995,2704,2705],{},"Immer visudo: Prüft Syntax auf Fehler",[257,2707,2709],{"id":2708},"struktur","Struktur",[992,2711,2712],{},[995,2713,2714,2715],{},"Festes Muster: User Host=(RunAsUser:RunAsGroup) Commands\n",[992,2716,2717,2720,2723,2726,2729],{},[995,2718,2719],{},"User: Der Benutzer oder die Gruppe (Gruppen werden mit % gekennzeichnet), der die Berechtigung erhält.",[995,2721,2722],{},"Host: Der Hostname, auf dem die Regel gilt (meist ALL für alle Rechner).",[995,2724,2725],{},"RunAsUser: Der Benutzer, als der der Befehl ausgeführt werden soll (meist root oder ALL).",[995,2727,2728],{},"RunAsGroup: Die Gruppe, als die der Befehl ausgeführt werden soll (meist ALL).",[995,2730,2731],{},"Commands: Die Liste der erlaubten Befehle (absolute Pfade verwenden!).",[257,2733,2735],{"id":2734},"praktische-beispiele","Praktische Beispiele",[2652,2737,2739],{"id":2738},"a-vollzugriff-administrator-status","A. Vollzugriff (Administrator-Status)",[898,2741,2742],{},"Erlaubt einem Benutzer alle Befehle mit Root-Rechten (erfordert Passwort).",[10,2744,2746],{"id":2745},"benutzer-max-darf-alles","Benutzer 'max' darf alles",[904,2748,2750],{"className":906,"code":2749,"language":908,"meta":909,"style":909},"max ALL=(ALL:ALL) ALL\n\n# Gruppe 'admin' darf alles (beachte das %)\n%admin ALL=(ALL:ALL) ALL\n\n",[911,2751,2752,2772,2776,2781],{"__ignoreMap":909},[452,2753,2754,2757,2760,2763,2766,2769],{"class":915,"line":916},[452,2755,2756],{"class":919},"max",[452,2758,2759],{"class":923}," ALL=",[452,2761,2762],{"class":1298},"(",[452,2764,2765],{"class":919},"ALL:ALL",[452,2767,2768],{"class":1298},") ",[452,2770,2771],{"class":923},"ALL\n",[452,2773,2774],{"class":915,"line":1190},[452,2775,1194],{"emptyLinePlaceholder":1193},[452,2777,2778],{"class":915,"line":1197},[452,2779,2780],{"class":1200},"# Gruppe 'admin' darf alles (beachte das %)\n",[452,2782,2783,2786,2788,2790,2792,2794],{"class":915,"line":1204},[452,2784,2785],{"class":919},"%admin",[452,2787,2759],{"class":923},[452,2789,2762],{"class":1298},[452,2791,2765],{"class":919},[452,2793,2768],{"class":1298},[452,2795,2771],{"class":923},[2652,2797,2799],{"id":2798},"b-spezifische-befehle-erlauben","B. Spezifische Befehle erlauben",[898,2801,2802],{},"Einschränkung auf nur einen einzigen Befehl (sehr wichtig für Sicherheit!).",[10,2804,2806],{"id":2805},"devuser-darf-nur-den-apache-webserver-neu-starten","'devuser' darf nur den Apache-Webserver neu starten",[904,2808,2810],{"className":906,"code":2809,"language":908,"meta":909,"style":909},"devuser ALL=(ALL) \u002Fusr\u002Fbin\u002Fsystemctl restart apache2\n\n",[911,2811,2812],{"__ignoreMap":909},[452,2813,2814,2817,2819,2821,2824,2826,2829,2832],{"class":915,"line":916},[452,2815,2816],{"class":919},"devuser",[452,2818,2759],{"class":923},[452,2820,2762],{"class":1298},[452,2822,2823],{"class":919},"ALL",[452,2825,2768],{"class":1298},[452,2827,2828],{"class":923},"\u002Fusr\u002Fbin\u002Fsystemctl",[452,2830,2831],{"class":923}," restart",[452,2833,2834],{"class":923}," apache2\n",[2652,2836,2838],{"id":2837},"c-ausführung-ohne-passwort-nopasswd","C. Ausführung ohne Passwort (NOPASSWD)",[898,2840,2841],{},"Nützlich für Skripte oder Automatisierungen, aber ein Sicherheitsrisiko.",[10,2843,2845],{"id":2844},"automation-user-darf-updates-machen-ohne-nach-einem-passwort-gefragt-zu-werden","'automation-user' darf Updates machen, ohne nach einem Passwort gefragt zu werden",[904,2847,2849],{"className":906,"code":2848,"language":908,"meta":909,"style":909},"automation-user ALL=(ALL) NOPASSWD: \u002Fusr\u002Fbin\u002Fapt-get update, \u002Fusr\u002Fbin\u002Fapt-get upgrade\n\n",[911,2850,2851],{"__ignoreMap":909},[452,2852,2853,2856,2858,2860,2862,2864,2867,2870,2873,2875],{"class":915,"line":916},[452,2854,2855],{"class":919},"automation-user",[452,2857,2759],{"class":923},[452,2859,2762],{"class":1298},[452,2861,2823],{"class":919},[452,2863,2768],{"class":1298},[452,2865,2866],{"class":923},"NOPASSWD:",[452,2868,2869],{"class":923}," \u002Fusr\u002Fbin\u002Fapt-get",[452,2871,2872],{"class":923}," update,",[452,2874,2869],{"class":923},[452,2876,2877],{"class":923}," upgrade\n",[2652,2879,2881],{"id":2880},"d-verwendung-von-pfaden-und-wildcards","D. Verwendung von Pfaden und Wildcards",[10,2883,2885],{"id":2884},"erlaubt-das-ausführen-von-backup-skripten-im-verzeichnis-optscripts","Erlaubt das Ausführen von Backup-Skripten im Verzeichnis \u002Fopt\u002Fscripts\u002F",[904,2887,2889],{"className":906,"code":2888,"language":908,"meta":909,"style":909},"backup-user ALL=(ALL) \u002Fopt\u002Fscripts\u002F*.sh\n\n",[911,2890,2891],{"__ignoreMap":909},[452,2892,2893,2896,2898,2900,2902,2904,2907,2909],{"class":915,"line":916},[452,2894,2895],{"class":919},"backup-user",[452,2897,2759],{"class":923},[452,2899,2762],{"class":1298},[452,2901,2823],{"class":919},[452,2903,2768],{"class":1298},[452,2905,2906],{"class":923},"\u002Fopt\u002Fscripts\u002F",[452,2908,429],{"class":975},[452,2910,2911],{"class":923},".sh\n",[257,2913,2915],{"id":2914},"best-practices-sicherheit","Best Practices & Sicherheit",[898,2917,2918],{},"Principle of Least Privilege (Prinzip der geringsten Berechtigung): Erteile nur so viele Rechte, wie absolut notwendig sind. Vermeide ALL=(ALL) ALL für normale Benutzer.",[898,2920,2921],{},"Absolute Pfade nutzen: Gib Befehle immer mit ihrem vollständigen Pfad an (z. B. \u002Fusr\u002Fbin\u002Fapt statt nur apt), um \"Path Injection\" Angriffe zu verhindern.",[898,2923,2924],{},"Modularität nutzen (\u002Fetc\u002Fsudoers.d\u002F): Anstatt die Hauptdatei \u002Fetc\u002Fsudoers zu verändern, erstelle separate Dateien im Verzeichnis \u002Fetc\u002Fsudoers.d\u002F. Das ist sauberer und weniger fehleranfällig bei Systemupdates.",[898,2926,2927],{},"Beispiel: sudo visudo -f \u002Fetc\u002Fsudoers.d\u002Fmein-projekt",[898,2929,2930],{},"Gruppen statt Einzeluser: Nutze Gruppen (%gruppe), um die Verwaltung einfacher zu machen. Wenn ein neuer Admin dazukommt, musst du nur die Gruppe ändern, nicht die sudoers-Datei.",[257,2932,2934],{"id":2933},"kurzübersicht-der-platzhalter","Kurzübersicht der Platzhalter",[15,2936,2937,2950],{},[18,2938,2939],{},[21,2940,2941,2946],{},[24,2942,2943],{},[27,2944,2945],{},"Platzhalter",[24,2947,2948],{},[27,2949,417],{},[41,2951,2952,2959,2967,2975],{},[21,2953,2954,2956],{},[46,2955,2823],{},[46,2957,2958],{},"Gilt für alle Benutzer, alle Hosts oder alle Befehle.",[21,2960,2961,2964],{},[46,2962,2963],{},"%group",[46,2965,2966],{},"Bezieht sich auf eine Benutzergruppe (z. B. %sudo).",[21,2968,2969,2972],{},[46,2970,2971],{},"(ALL:ALL)",[46,2973,2974],{},"Erlaubt das Ausführen als jeder beliebige User und jede beliebige Gruppe.",[21,2976,2977,2979],{},[46,2978,2866],{},[46,2980,2981],{},"Erfordert keine Passworteingabe für die nachfolgenden Befehle.",[257,2983,2985],{"id":2984},"prinizipien","Prinizipien",[2652,2987,2989],{"id":2988},"das-letzte-gewinnt-the-last-match-wins","Das Letzte gewinnt. (The Last Match Wins)",[898,2991,2992],{},"Die sudoers-Datei wird von oben nach unten (sequenziell) eingelesen. Wenn eine Regel auf einen Benutzer zutrifft, werden die Berechtigungen geladen. Wenn eine weitere Regel weiter unten in der Datei ebenfalls auf denselben Benutzer zutrifft, wird diese neue Regel auf die bisherigen Regeln aufgeschlagen oder sie überschreibt spezifische Teile der vorherigen Regeln.",[898,2994,2995],{},"Hier ist die detaillierte Aufschlüsselung, wie sich das in verschiedenen Szenarien verhält:",[2997,2998,3000],"h4",{"id":2999},"_1-das-prinzip-der-addition-kumulativ","1. Das Prinzip der Addition (Kumulativ)",[898,3002,3003],{},"Wenn zwei Regeln unterschiedliche Befehle erlauben, werden sie einfach kombiniert. Der Benutzer erhält die Summe aller erlaubten Befehle.",[898,3005,3006],{},"Beispiel:",[10,3008,3010],{"id":3009},"regel-1-oben","Regel 1 (oben)",[904,3012,3014],{"className":906,"code":3013,"language":908,"meta":909,"style":909},"max ALL=(ALL) \u002Fusr\u002Fbin\u002Fapt-get\n\n# Regel 2 (weiter unten)\nmax ALL=(ALL) \u002Fusr\u002Fbin\u002Fsystemctl\n\n",[911,3015,3016,3031,3035,3040],{"__ignoreMap":909},[452,3017,3018,3020,3022,3024,3026,3028],{"class":915,"line":916},[452,3019,2756],{"class":919},[452,3021,2759],{"class":923},[452,3023,2762],{"class":1298},[452,3025,2823],{"class":919},[452,3027,2768],{"class":1298},[452,3029,3030],{"class":923},"\u002Fusr\u002Fbin\u002Fapt-get\n",[452,3032,3033],{"class":915,"line":1190},[452,3034,1194],{"emptyLinePlaceholder":1193},[452,3036,3037],{"class":915,"line":1197},[452,3038,3039],{"class":1200},"# Regel 2 (weiter unten)\n",[452,3041,3042,3044,3046,3048,3050,3052],{"class":915,"line":1204},[452,3043,2756],{"class":919},[452,3045,2759],{"class":923},[452,3047,2762],{"class":1298},[452,3049,2823],{"class":919},[452,3051,2768],{"class":1298},[452,3053,3054],{"class":923},"\u002Fusr\u002Fbin\u002Fsystemctl\n",[898,3056,3057],{},"Ergebnis: max darf sowohl apt-get als auch systemctl ausführen. Es gibt hier keinen \"Verlust\", sondern eine Erweiterung.",[2997,3059,3061],{"id":3060},"_2-das-prinzip-der-überschreibung-override","2. Das Prinzip der Überschreibung (Override)",[898,3063,3064],{},"Ein Konflikt entsteht wirklich erst, wenn sich die Parameter (wie NOPASSWD oder der RunAsUser) für den gleichen Befehl widersprechen. In diesem Fall überschreibt die letzte gefundene Regel die vorherige.",[898,3066,3067],{},"Beispiel (Das Passwort-Dilemma):",[10,3069,3071],{"id":3070},"regel-1-erlaubt-alles-ohne-passwort","Regel 1: Erlaubt alles ohne Passwort",[904,3073,3075],{"className":906,"code":3074,"language":908,"meta":909,"style":909},"max ALL=(ALL) NOPASSWD: ALL\n\n# Regel 2: Erlaubt spezifisch apt-get, aber ERZWINGT ein Passwort\nmax ALL=(ALL) \u002Fusr\u002Fbin\u002Fapt-get\n\n",[911,3076,3077,3094,3098,3103],{"__ignoreMap":909},[452,3078,3079,3081,3083,3085,3087,3089,3091],{"class":915,"line":916},[452,3080,2756],{"class":919},[452,3082,2759],{"class":923},[452,3084,2762],{"class":1298},[452,3086,2823],{"class":919},[452,3088,2768],{"class":1298},[452,3090,2866],{"class":923},[452,3092,3093],{"class":923}," ALL\n",[452,3095,3096],{"class":915,"line":1190},[452,3097,1194],{"emptyLinePlaceholder":1193},[452,3099,3100],{"class":915,"line":1197},[452,3101,3102],{"class":1200},"# Regel 2: Erlaubt spezifisch apt-get, aber ERZWINGT ein Passwort\n",[452,3104,3105,3107,3109,3111,3113,3115],{"class":915,"line":1204},[452,3106,2756],{"class":919},[452,3108,2759],{"class":923},[452,3110,2762],{"class":1298},[452,3112,2823],{"class":919},[452,3114,2768],{"class":1298},[452,3116,3030],{"class":923},[898,3118,3119],{},"Ergebnis: Wenn max versucht, apt-get auszuführen, wird er nach einem Passwort gefragt. Obwohl Regel 1 \"alles ohne Passwort\" erlaubt hat, hat die spätere Regel 2 die Anweisung für apt-arg mit der Passwort-Pflicht überschrieben.",[2997,3121,3123],{"id":3122},"_3-konflikte-durch-gruppen-vs-benutzer-spezifisch-schlägt-generell","3. Konflikte durch Gruppen vs. Benutzer (Spezifisch schlägt Generell)",[898,3125,3126],{},"Oft ist ein Benutzer Mitglied einer Gruppe (z. B. %admin). Hier greifen zwei Regeln gleichzeitig: die Gruppenregel und die Benutzerregel.",[898,3128,3006],{},[10,3130,3132],{"id":3131},"regel-1-die-gruppe-admin-darf-alles-aber-mit-passwort","Regel 1: Die Gruppe 'admin' darf alles, aber MIT Passwort",[904,3134,3136],{"className":906,"code":3135,"language":908,"meta":909,"style":909},"%admin ALL=(ALL) ALL\n\n# Regel 2: Der Benutzer 'max' (ist Mitglied von admin) darf alles OHNE Passwort\nmax ALL=(ALL) NOPASSWD: ALL\n\n",[911,3137,3138,3152,3156,3161],{"__ignoreMap":909},[452,3139,3140,3142,3144,3146,3148,3150],{"class":915,"line":916},[452,3141,2785],{"class":919},[452,3143,2759],{"class":923},[452,3145,2762],{"class":1298},[452,3147,2823],{"class":919},[452,3149,2768],{"class":1298},[452,3151,2771],{"class":923},[452,3153,3154],{"class":915,"line":1190},[452,3155,1194],{"emptyLinePlaceholder":1193},[452,3157,3158],{"class":915,"line":1197},[452,3159,3160],{"class":1200},"# Regel 2: Der Benutzer 'max' (ist Mitglied von admin) darf alles OHNE Passwort\n",[452,3162,3163,3165,3167,3169,3171,3173,3175],{"class":915,"line":1204},[452,3164,2756],{"class":919},[452,3166,2759],{"class":923},[452,3168,2762],{"class":1298},[452,3170,2823],{"class":919},[452,3172,2768],{"class":1298},[452,3174,2866],{"class":923},[452,3176,3093],{"class":923},[898,3178,3179],{},"Ergebnis: Da die Regel für max spezifischer ist und nach der Gruppenregel kommt, gewinnt die NOPASSWD-Einstellung für ihn. Er kann Befehle ohne Passwort ausführen, während andere Mitglieder der Gruppe admin weiterhin nach einem Passwort gefragt werden.",[2997,3181,3183],{"id":3182},"_4-besonderheit-etcsudoersd","4. Besonderheit: \u002Fetc\u002Fsudoers.d\u002F",[898,3185,3186],{},"Das Verzeichnis \u002Fetc\u002Fsudoers.d\u002F wird am Ende der Haupt-sudoers-Datei per #includedir eingebunden.",[898,3188,3189],{},"Das bedeutet: Alles, was in den Dateien im sudoers.d-Ordner steht, hat Vorrang vor den Einträgen in der Haupt-sudoers-Datei, weil diese Dateien technisch gesehen \"ganz unten\" in der Konfigurationskette gelesen werden.",[898,3191,3192],{},"Pro-Tipp für die Praxis: Wenn du eine Berechtigung für einen Benutzer in der Hauptdatei einschränken willst, musst du diese Einschränkung in einer Datei innerhalb von \u002Fetc\u002Fsudoers.d\u002F platzieren, damit sie die (eventuell mächtigeren) Regeln aus der Hauptdatei überschreibt.",[2652,3194,3196],{"id":3195},"zusammenfassung","Zusammenfassung",[15,3198,3199,3213],{},[18,3200,3201],{},[21,3202,3203,3208],{},[24,3204,3205],{},[27,3206,3207],{},"Szenario",[24,3209,3210],{},[27,3211,3212],{},"Verhalten",[41,3214,3215,3223,3231,3239],{},[21,3216,3217,3220],{},[46,3218,3219],{},"Unterschiedliche Befehle",[46,3221,3222],{},"Befehle werden addiert (User bekommt mehr Rechte).",[21,3224,3225,3228],{},[46,3226,3227],{},"Gleiche Befehle, andere Parameter",[46,3229,3230],{},"Die letzte Regel überschreibt die vorherige.",[21,3232,3233,3236],{},[46,3234,3235],{},"Gruppe vs. Einzelner User",[46,3237,3238],{},"Die letzte zutreffende Regel (meist die spezifischere) gewinnt.",[21,3240,3241,3244],{},[46,3242,3243],{},"Hauptdatei vs. sudoers.d\u002F",[46,3245,3246],{},"Die Dateien in sudoers.d\u002F gewinnen (da sie zuletzt gelesen werden).",[10,3248,3250],{"id":3249},"dateien-suchen-find-grep-sed","Dateien suchen: find, grep, sed",[257,3252,3254],{"id":3253},"find-dateien-und-verzeichnisse-suchen","find – Dateien und Verzeichnisse suchen",[904,3256,3258],{"className":906,"code":3257,"language":908,"meta":909,"style":909},"find START_PFAD OPTIONEN AUSDRUCK\n\n",[911,3259,3260],{"__ignoreMap":909},[452,3261,3262,3265,3268,3271],{"class":915,"line":916},[452,3263,3264],{"class":919},"find",[452,3266,3267],{"class":923}," START_PFAD",[452,3269,3270],{"class":923}," OPTIONEN",[452,3272,3273],{"class":923}," AUSDRUCK\n",[2652,3275,3277],{"id":3276},"wichtige-optionen","Wichtige Optionen:",[15,3279,3280,3296],{},[18,3281,3282],{},[21,3283,3284,3288,3292],{},[24,3285,3286],{},[27,3287,1019],{},[24,3289,3290],{},[27,3291,39],{},[24,3293,3294],{},[27,3295,422],{},[41,3297,3298,3309,3320,3331,3342,3352,3363,3374,3385,3396,3406,3416,3427,3438,3449],{},[21,3299,3300,3303,3306],{},[46,3301,3302],{},"-name",[46,3304,3305],{},"Nach Name suchen",[46,3307,3308],{},"find \u002F -name \"*.txt\"",[21,3310,3311,3314,3317],{},[46,3312,3313],{},"-iname",[46,3315,3316],{},"Name (case-insensitive)",[46,3318,3319],{},"find . -iname \"readme*\"",[21,3321,3322,3325,3328],{},[46,3323,3324],{},"-type f",[46,3326,3327],{},"Nur Dateien",[46,3329,3330],{},"find . -type f",[21,3332,3333,3336,3339],{},[46,3334,3335],{},"-type d",[46,3337,3338],{},"Nur Verzeichnisse",[46,3340,3341],{},"find . -type d",[21,3343,3344,3347,3350],{},[46,3345,3346],{},"-type l",[46,3348,3349],{},"Nur Symlinks",[46,3351],{},[21,3353,3354,3357,3360],{},[46,3355,3356],{},"-user",[46,3358,3359],{},"Nach Besitzer",[46,3361,3362],{},"find \u002F -user root",[21,3364,3365,3368,3371],{},[46,3366,3367],{},"-group",[46,3369,3370],{},"Nach Gruppe",[46,3372,3373],{},"find \u002F -group admin",[21,3375,3376,3379,3382],{},[46,3377,3378],{},"-size +2G",[46,3380,3381],{},"Größer als 2 GB",[46,3383,3384],{},"find \u002F -size +200M",[21,3386,3387,3390,3393],{},[46,3388,3389],{},"-size 0 \u002F -empty",[46,3391,3392],{},"Leere Dateien",[46,3394,3395],{},"find ~ -empty",[21,3397,3398,3401,3404],{},[46,3399,3400],{},"-mtime -7",[46,3402,3403],{},"Geändert in letzten 7 Tagen",[46,3405],{},[21,3407,3408,3411,3414],{},[46,3409,3410],{},"-mtime +30",[46,3412,3413],{},"Älter als 30 Tage",[46,3415],{},[21,3417,3418,3421,3424],{},[46,3419,3420],{},"-maxdepth N",[46,3422,3423],{},"Max. Suchtiefe",[46,3425,3426],{},"find . -maxdepth 2 -name \"*.log\"",[21,3428,3429,3432,3435],{},[46,3430,3431],{},"-not",[46,3433,3434],{},"Negation",[46,3436,3437],{},"find . -not -name \"*.bak\"",[21,3439,3440,3443,3446],{},[46,3441,3442],{},"-exec",[46,3444,3445],{},"Befehl auf Ergebnis ausführen",[46,3447,3448],{},"find . -name \"*.tmp\" -exec rm {} ;",[21,3450,3451,3454,3457],{},[46,3452,3453],{},"-delete",[46,3455,3456],{},"Gefundene Dateien löschen",[46,3458,3459],{},"find . -name \"*.bak\" -delete",[2652,3461,3463],{"id":3462},"beispiele","Beispiele:",[10,3465,3467],{"id":3466},"alle-txt-dateien-im-aktuellen-verzeichnis","Alle .txt Dateien im aktuellen Verzeichnis",[904,3469,3471],{"className":906,"code":3470,"language":908,"meta":909,"style":909},"find . -name \"*.txt\" -type f\n\n# Dateien mit Inhalt durchsuchen\n\nfind . -type f -exec grep \"suchbegriff\" '{}'\n\n",[911,3472,3473,3492,3496,3501,3505],{"__ignoreMap":909},[452,3474,3475,3477,3480,3483,3486,3489],{"class":915,"line":916},[452,3476,3264],{"class":919},[452,3478,3479],{"class":923}," .",[452,3481,3482],{"class":975}," -name",[452,3484,3485],{"class":923}," \"*.txt\"",[452,3487,3488],{"class":975}," -type",[452,3490,3491],{"class":923}," f\n",[452,3493,3494],{"class":915,"line":1190},[452,3495,1194],{"emptyLinePlaceholder":1193},[452,3497,3498],{"class":915,"line":1197},[452,3499,3500],{"class":1200},"# Dateien mit Inhalt durchsuchen\n",[452,3502,3503],{"class":915,"line":1204},[452,3504,1194],{"emptyLinePlaceholder":1193},[452,3506,3507,3509,3511,3513,3516,3519,3521,3524],{"class":915,"line":1209},[452,3508,3264],{"class":919},[452,3510,3479],{"class":923},[452,3512,3488],{"class":975},[452,3514,3515],{"class":923}," f",[452,3517,3518],{"class":975}," -exec",[452,3520,1647],{"class":923},[452,3522,3523],{"class":923}," \"suchbegriff\"",[452,3525,3526],{"class":923}," '{}'\n",[898,3528,3529],{},"-print",[10,3531,3533],{"id":3532},"dateien-älter-als-30-tage-löschen","Dateien älter als 30 Tage löschen",[904,3535,3537],{"className":906,"code":3536,"language":908,"meta":909,"style":909},"find \u002Fhome\u002Fuser\u002Flogs\u002F -type f -mtime 30 -exec rm {}\n\n# Leere Dateien im Home finden\n\nfind ~ -empty\n\n",[911,3538,3539,3564,3568,3573,3577],{"__ignoreMap":909},[452,3540,3541,3543,3546,3548,3550,3553,3556,3558,3561],{"class":915,"line":916},[452,3542,3264],{"class":919},[452,3544,3545],{"class":923}," \u002Fhome\u002Fuser\u002Flogs\u002F",[452,3547,3488],{"class":975},[452,3549,3515],{"class":923},[452,3551,3552],{"class":975}," -mtime",[452,3554,3555],{"class":975}," 30",[452,3557,3518],{"class":975},[452,3559,3560],{"class":923}," rm",[452,3562,3563],{"class":923}," {}\n",[452,3565,3566],{"class":915,"line":1190},[452,3567,1194],{"emptyLinePlaceholder":1193},[452,3569,3570],{"class":915,"line":1197},[452,3571,3572],{"class":1200},"# Leere Dateien im Home finden\n",[452,3574,3575],{"class":915,"line":1204},[452,3576,1194],{"emptyLinePlaceholder":1193},[452,3578,3579,3581,3584],{"class":915,"line":1209},[452,3580,3264],{"class":919},[452,3582,3583],{"class":923}," ~",[452,3585,3586],{"class":975}," -empty\n",[257,3588,3590],{"id":3589},"grep-in-textdateien-suchen","grep – In Textdateien suchen",[904,3592,3594],{"className":906,"code":3593,"language":908,"meta":909,"style":909},"grep [OPTIONEN] ‘MUSTER‘ DATEI\n\n",[911,3595,3596],{"__ignoreMap":909},[452,3597,3598,3601],{"class":915,"line":916},[452,3599,3600],{"class":919},"grep",[452,3602,3603],{"class":1298}," [OPTIONEN] ‘MUSTER‘ DATEI\n",[2652,3605,3277],{"id":3606},"wichtige-optionen-1",[15,3608,3609,3621],{},[18,3610,3611],{},[21,3612,3613,3617],{},[24,3614,3615],{},[27,3616,1019],{},[24,3618,3619],{},[27,3620,39],{},[41,3622,3623,3630,3637,3644,3652,3659,3667],{},[21,3624,3625,3627],{},[46,3626,1068],{},[46,3628,3629],{},"Case-insensitive",[21,3631,3632,3634],{},[46,3633,1079],{},[46,3635,3636],{},"Zeilennummern anzeigen",[21,3638,3639,3641],{},[46,3640,1057],{},[46,3642,3643],{},"Nur Zeilen die NICHT passen",[21,3645,3646,3649],{},[46,3647,3648],{},"-c",[46,3650,3651],{},"Anzahl der Treffer",[21,3653,3654,3656],{},[46,3655,1405],{},[46,3657,3658],{},"Rekursiv in Verzeichnissen",[21,3660,3661,3664],{},[46,3662,3663],{},"-A1",[46,3665,3666],{},"1 Zeile nach dem Treffer anzeigen",[21,3668,3669,3672],{},[46,3670,3671],{},"-B2",[46,3673,3674],{},"2 Zeilen vor dem Treffer anzeigen",[2652,3676,3678],{"id":3677},"reguläre-ausdrücke-für-grep","Reguläre Ausdrücke für grep:",[15,3680,3681,3694],{},[18,3682,3683],{},[21,3684,3685,3690],{},[24,3686,3687],{},[27,3688,3689],{},"Ausdruck",[24,3691,3692],{},[27,3693,417],{},[41,3695,3696,3703,3710,3716,3724,3732,3741,3751],{},[21,3697,3698,3700],{},[46,3699,962],{},[46,3701,3702],{},"Ein beliebiges Zeichen",[21,3704,3705,3707],{},[46,3706,429],{},[46,3708,3709],{},"Vorheriges Zeichen beliebig oft",[21,3711,3712,3714],{},[46,3713,464],{},[46,3715,432],{},[21,3717,3718,3721],{},[46,3719,3720],{},"^text",[46,3722,3723],{},"Zeilenanfang",[21,3725,3726,3729],{},[46,3727,3728],{},"text$",[46,3730,3731],{},"Zeilenende",[21,3733,3734,3738],{},[46,3735,3736],{},[452,3737,454],{},[46,3739,3740],{},"Ein Zeichen aus der Menge",[21,3742,3743,3748],{},[46,3744,3745],{},[452,3746,3747],{},"^abc",[46,3749,3750],{},"Kein Zeichen aus der Menge",[21,3752,3753,3757],{},[46,3754,3755],{},[452,3756,471],{},[46,3758,474],{},[2652,3760,3463],{"id":3761},"beispiele-1",[10,3763,3765],{"id":3764},"zeilen-die-mit-könig-beginnen","Zeilen die mit \"König\" beginnen",[904,3767,3769],{"className":906,"code":3768,"language":908,"meta":909,"style":909},"grep \"^König\" datei.txt\n\n# Zeilen die mit \"zz\" enden\n\ngrep \"zz$\" datei.txt\n\n# Case-insensitive Suche\n\ngrep -i \"suchbegriff\" datei.txt\n\n# In \u002Fetc\u002Fpasswd nach Bash-Benutzern suchen\n\ngrep \"\u002Fbin\u002Fbash\" \u002Fetc\u002Fpasswd\n\n",[911,3770,3771,3781,3785,3790,3794,3803,3807,3812,3816,3827,3831,3836,3840],{"__ignoreMap":909},[452,3772,3773,3775,3778],{"class":915,"line":916},[452,3774,3600],{"class":919},[452,3776,3777],{"class":923}," \"^König\"",[452,3779,3780],{"class":923}," datei.txt\n",[452,3782,3783],{"class":915,"line":1190},[452,3784,1194],{"emptyLinePlaceholder":1193},[452,3786,3787],{"class":915,"line":1197},[452,3788,3789],{"class":1200},"# Zeilen die mit \"zz\" enden\n",[452,3791,3792],{"class":915,"line":1204},[452,3793,1194],{"emptyLinePlaceholder":1193},[452,3795,3796,3798,3801],{"class":915,"line":1209},[452,3797,3600],{"class":919},[452,3799,3800],{"class":923}," \"zz$\"",[452,3802,3780],{"class":923},[452,3804,3805],{"class":915,"line":1223},[452,3806,1194],{"emptyLinePlaceholder":1193},[452,3808,3809],{"class":915,"line":1228},[452,3810,3811],{"class":1200},"# Case-insensitive Suche\n",[452,3813,3814],{"class":915,"line":1234},[452,3815,1194],{"emptyLinePlaceholder":1193},[452,3817,3818,3820,3823,3825],{"class":915,"line":1239},[452,3819,3600],{"class":919},[452,3821,3822],{"class":975}," -i",[452,3824,3523],{"class":923},[452,3826,3780],{"class":923},[452,3828,3829],{"class":915,"line":1253},[452,3830,1194],{"emptyLinePlaceholder":1193},[452,3832,3833],{"class":915,"line":1258},[452,3834,3835],{"class":1200},"# In \u002Fetc\u002Fpasswd nach Bash-Benutzern suchen\n",[452,3837,3838],{"class":915,"line":1264},[452,3839,1194],{"emptyLinePlaceholder":1193},[452,3841,3842,3844,3847],{"class":915,"line":1269},[452,3843,3600],{"class":919},[452,3845,3846],{"class":923}," \"\u002Fbin\u002Fbash\"",[452,3848,3849],{"class":923}," \u002Fetc\u002Fpasswd\n",[257,3851,3853],{"id":3852},"sed-stream-editor","sed – Stream Editor",[2652,3855,902],{"id":3856},"grundprinzip",[904,3858,3860],{"className":906,"code":3859,"language":908,"meta":909,"style":909},"sed (Stream Editor) bearbeitet Text zeilenweise. Es liest stdin oder Dateien, wendet Transformationsregeln an und schreibt das Ergebnis nach stdout.\n\n",[911,3861,3862],{"__ignoreMap":909},[452,3863,3864,3867,3870,3873],{"class":915,"line":916},[452,3865,3866],{"class":919},"sed",[452,3868,3869],{"class":1298}," (Stream ",[452,3871,3872],{"class":923},"Editor",[452,3874,3875],{"class":1298},") bearbeitet Text zeilenweise. Es liest stdin oder Dateien, wendet Transformationsregeln an und schreibt das Ergebnis nach stdout.\n",[898,3877,3878],{},[27,3879,1693],{},[904,3881,3883],{"className":906,"code":3882,"language":908,"meta":909,"style":909},"sed 'BEFEHL' datei\n\nsed -e 'BEFEHL1' -e 'BEFEHL2' datei\n\n",[911,3884,3885,3895,3899],{"__ignoreMap":909},[452,3886,3887,3889,3892],{"class":915,"line":916},[452,3888,3866],{"class":919},[452,3890,3891],{"class":923}," 'BEFEHL'",[452,3893,3894],{"class":923}," datei\n",[452,3896,3897],{"class":915,"line":1190},[452,3898,1194],{"emptyLinePlaceholder":1193},[452,3900,3901,3903,3905,3908,3910,3913],{"class":915,"line":1197},[452,3902,3866],{"class":919},[452,3904,1568],{"class":975},[452,3906,3907],{"class":923}," 'BEFEHL1'",[452,3909,1568],{"class":975},[452,3911,3912],{"class":923}," 'BEFEHL2'",[452,3914,3894],{"class":923},[2652,3916,3918],{"id":3917},"alle-kommandozeilen-optionen","Alle Kommandozeilen-Optionen",[15,3920,3921,3937],{},[18,3922,3923],{},[21,3924,3925,3929,3933],{},[24,3926,3927],{},[27,3928,1019],{},[24,3930,3931],{},[27,3932,1024],{},[24,3934,3935],{},[27,3936,417],{},[41,3938,3939,3949,3960,3971,3986,3997,4007,4018,4028],{},[21,3940,3941,3943,3946],{},[46,3942,1079],{},[46,3944,3945],{},"--quiet \u002F --silent",[46,3947,3948],{},"Keine automatische Ausgabe; p-Befehl nötig",[21,3950,3951,3954,3957],{},[46,3952,3953],{},"-e SKRIPT",[46,3955,3956],{},"--expression=SKRIPT",[46,3958,3959],{},"Skript direkt in der Kommandozeile",[21,3961,3962,3965,3968],{},[46,3963,3964],{},"-f DATEI",[46,3966,3967],{},"--file=DATEI",[46,3969,3970],{},"sed-Skript aus Datei lesen",[21,3972,3973,3977,3983],{},[46,3974,1068,3975],{},[452,3976,1699],{},[46,3978,3979,3980],{},"--in-place",[452,3981,3982],{},"=SUFFIX",[46,3984,3985],{},"Datei direkt bearbeiten (optional Backup)",[21,3987,3988,3991,3994],{},[46,3989,3990],{},"-r \u002F -E",[46,3992,3993],{},"--regexp-extended",[46,3995,3996],{},"Erweiterte reguläre Ausdrücke (ERE)",[21,3998,3999,4001,4004],{},[46,4000,1123],{},[46,4002,4003],{},"--separate",[46,4005,4006],{},"Dateien separat behandeln (NR wird zurückgesetzt)",[21,4008,4009,4012,4015],{},[46,4010,4011],{},"-z",[46,4013,4014],{},"--null-data",[46,4016,4017],{},"NUL (\\0) als Zeilentrenner statt \\n",[21,4019,4020,4023,4025],{},[46,4021,4022],{},"--sandbox",[46,4024],{},[46,4026,4027],{},"Sichere Ausführung (kein e\u002Fr\u002Fw)",[21,4029,4030,4033,4035],{},[46,4031,4032],{},"--posix",[46,4034],{},[46,4036,4037],{},"POSIX-Striktmodus",[2652,4039,4041],{"id":4040},"sed-befehle-innerhalb-des-skripts","sed-Befehle (innerhalb des Skripts)",[15,4043,4044,4056],{},[18,4045,4046],{},[21,4047,4048,4052],{},[24,4049,4050],{},[27,4051,271],{},[24,4053,4054],{},[27,4055,417],{},[41,4057,4058,4066,4074,4082,4090,4098,4106,4113,4121,4129,4137,4145,4153,4161,4168,4176,4184,4192],{},[21,4059,4060,4063],{},[46,4061,4062],{},"s\u002Falt\u002Fneu\u002F",[46,4064,4065],{},"Substituieren (ersetzen), erste Vorkommen",[21,4067,4068,4071],{},[46,4069,4070],{},"s\u002Falt\u002Fneu\u002Fg",[46,4072,4073],{},"Alle Vorkommen ersetzen",[21,4075,4076,4079],{},[46,4077,4078],{},"s\u002Falt\u002Fneu\u002Fi",[46,4080,4081],{},"Groß-\u002FKleinschreibung ignorieren",[21,4083,4084,4087],{},[46,4085,4086],{},"s\u002Falt\u002Fneu\u002F2",[46,4088,4089],{},"Nur das 2. Vorkommen ersetzen",[21,4091,4092,4095],{},[46,4093,4094],{},"s\u002Falt\u002Fneu\u002Fgp",[46,4096,4097],{},"Ersetzen und Zeile ausgeben (mit -n)",[21,4099,4100,4103],{},[46,4101,4102],{},"d",[46,4104,4105],{},"Zeile löschen",[21,4107,4108,4110],{},[46,4109,898],{},[46,4111,4112],{},"Zeile ausgeben (extra)",[21,4114,4115,4118],{},[46,4116,4117],{},"q",[46,4119,4120],{},"Verarbeitung beenden (quit)",[21,4122,4123,4126],{},[46,4124,4125],{},"Q",[46,4127,4128],{},"Sofort beenden ohne Ausgabe",[21,4130,4131,4134],{},[46,4132,4133],{},"i\\TEXT",[46,4135,4136],{},"TEXT vor der Zeile einfügen",[21,4138,4139,4142],{},[46,4140,4141],{},"a\\TEXT",[46,4143,4144],{},"TEXT nach der Zeile anhängen",[21,4146,4147,4150],{},[46,4148,4149],{},"c\\TEXT",[46,4151,4152],{},"Zeile durch TEXT ersetzen",[21,4154,4155,4158],{},[46,4156,4157],{},"y\u002Fabc\u002Fxyz\u002F",[46,4159,4160],{},"Zeichen 1:1 austauschen (transliterate)",[21,4162,4163,4165],{},[46,4164,1862],{},[46,4166,4167],{},"Zeilennummer ausgeben",[21,4169,4170,4173],{},[46,4171,4172],{},"n",[46,4174,4175],{},"Nächste Zeile lesen",[21,4177,4178,4181],{},[46,4179,4180],{},"N",[46,4182,4183],{},"Nächste Zeile an Pattern Space anhängen",[21,4185,4186,4189],{},[46,4187,4188],{},"r DATEI",[46,4190,4191],{},"Inhalt von DATEI nach der Zeile einfügen",[21,4193,4194,4197],{},[46,4195,4196],{},"w DATEI",[46,4198,4199],{},"Matching-Zeilen in DATEI schreiben",[2652,4201,4203],{"id":4202},"adressen-adressierung-von-zeilen","Adressen (Adressierung von Zeilen)",[904,4205,4207],{"className":906,"code":4206,"language":908,"meta":909,"style":909},"sed '3 d' # Nur Zeile 3 löschen\n\nsed '3,7 d' # Zeilen 3-7 löschen\n\nsed '\u002Fmuster\u002F d' # Zeilen löschen, die Muster enthalten\n\nsed '3,\u002Fende\u002F d' # Ab Zeile 3 bis zur Zeile mit \"ende\"\n\nsed '$ d' # Letzte Zeile löschen\n\nsed '1~2 d' # Jede 2. Zeile löschen (ab Zeile 1): 1,3,5,...\n\nsed '0~2 d' # Gerade Zeilen löschen: 2,4,6,...\n\n",[911,4208,4209,4219,4223,4233,4237,4247,4251,4261,4265,4275,4279,4289,4293],{"__ignoreMap":909},[452,4210,4211,4213,4216],{"class":915,"line":916},[452,4212,3866],{"class":919},[452,4214,4215],{"class":923}," '3 d'",[452,4217,4218],{"class":1200}," # Nur Zeile 3 löschen\n",[452,4220,4221],{"class":915,"line":1190},[452,4222,1194],{"emptyLinePlaceholder":1193},[452,4224,4225,4227,4230],{"class":915,"line":1197},[452,4226,3866],{"class":919},[452,4228,4229],{"class":923}," '3,7 d'",[452,4231,4232],{"class":1200}," # Zeilen 3-7 löschen\n",[452,4234,4235],{"class":915,"line":1204},[452,4236,1194],{"emptyLinePlaceholder":1193},[452,4238,4239,4241,4244],{"class":915,"line":1209},[452,4240,3866],{"class":919},[452,4242,4243],{"class":923}," '\u002Fmuster\u002F d'",[452,4245,4246],{"class":1200}," # Zeilen löschen, die Muster enthalten\n",[452,4248,4249],{"class":915,"line":1223},[452,4250,1194],{"emptyLinePlaceholder":1193},[452,4252,4253,4255,4258],{"class":915,"line":1228},[452,4254,3866],{"class":919},[452,4256,4257],{"class":923}," '3,\u002Fende\u002F d'",[452,4259,4260],{"class":1200}," # Ab Zeile 3 bis zur Zeile mit \"ende\"\n",[452,4262,4263],{"class":915,"line":1234},[452,4264,1194],{"emptyLinePlaceholder":1193},[452,4266,4267,4269,4272],{"class":915,"line":1239},[452,4268,3866],{"class":919},[452,4270,4271],{"class":923}," '$ d'",[452,4273,4274],{"class":1200}," # Letzte Zeile löschen\n",[452,4276,4277],{"class":915,"line":1253},[452,4278,1194],{"emptyLinePlaceholder":1193},[452,4280,4281,4283,4286],{"class":915,"line":1258},[452,4282,3866],{"class":919},[452,4284,4285],{"class":923}," '1~2 d'",[452,4287,4288],{"class":1200}," # Jede 2. Zeile löschen (ab Zeile 1): 1,3,5,...\n",[452,4290,4291],{"class":915,"line":1264},[452,4292,1194],{"emptyLinePlaceholder":1193},[452,4294,4295,4297,4300],{"class":915,"line":1269},[452,4296,3866],{"class":919},[452,4298,4299],{"class":923}," '0~2 d'",[452,4301,4302],{"class":1200}," # Gerade Zeilen löschen: 2,4,6,...\n",[2652,4304,4306],{"id":4305},"reguläre-ausdrücke-in-sed","Reguläre Ausdrücke in sed",[15,4308,4309,4321],{},[18,4310,4311],{},[21,4312,4313,4317],{},[24,4314,4315],{},[27,4316,3689],{},[24,4318,4319],{},[27,4320,417],{},[41,4322,4323,4330,4337,4345,4352,4359,4366,4375,4384,4392,4399,4407],{},[21,4324,4325,4327],{},[46,4326,962],{},[46,4328,4329],{},"Beliebiges Zeichen",[21,4331,4332,4334],{},[46,4333,429],{},[46,4335,4336],{},"0 oder mehr des vorherigen",[21,4338,4339,4342],{},[46,4340,4341],{},"+",[46,4343,4344],{},"1 oder mehr (ERE mit -E)",[21,4346,4347,4349],{},[46,4348,440],{},[46,4350,4351],{},"0 oder 1 (ERE mit -E)",[21,4353,4354,4357],{},[46,4355,4356],{},"^",[46,4358,3723],{},[21,4360,4361,4364],{},[46,4362,4363],{},"$",[46,4365,3731],{},[21,4367,4368,4372],{},[46,4369,4370],{},[452,4371,454],{},[46,4373,4374],{},"Zeichenklasse",[21,4376,4377,4381],{},[46,4378,4379],{},[452,4380,3747],{},[46,4382,4383],{},"Negierte Zeichenklasse",[21,4385,4386,4389],{},[46,4387,4388],{},"(…)",[46,4390,4391],{},"Gruppe (BRE)",[21,4393,4394,4396],{},[46,4395,4388],{},[46,4397,4398],{},"Gruppe (ERE mit -E)",[21,4400,4401,4404],{},[46,4402,4403],{},"\\1",[46,4405,4406],{},"Rückreferenz auf Gruppe 1",[21,4408,4409,4412],{},[46,4410,4411],{},"&",[46,4413,4414],{},"Gesamter gefundener Text im Ersatz",[2652,4416,1166],{"id":4417},"beispiele-2",[10,4419,4421],{"id":4420},"einfaches-ersetzen","Einfaches Ersetzen",[904,4423,4425],{"className":906,"code":4424,"language":908,"meta":909,"style":909},"sed 's\u002Falt\u002Fneu\u002F' datei.txt\n\n# Alle Vorkommen ersetzen\n\nsed 's\u002Falt\u002Fneu\u002Fg' datei.txt\n\n# Groß-\u002FKleinschreibung ignorieren\n\nsed 's\u002Ffehler\u002FFEHLER\u002Fgi' datei.txt\n\n# Datei direkt bearbeiten (in-place)\n\nsed -i 's\u002Falt\u002Fneu\u002Fg' datei.txt\n\n# Backup erstellen und in-place bearbeiten\n\nsed -i.bak 's\u002Falt\u002Fneu\u002Fg' datei.txt\n\n# (erstellt datei.txt.bak als Sicherung)\n\n# Zeilen löschen, die \"kommentar\" enthalten\n\nsed '\u002Fkommentar\u002Fd' datei.txt\n\n# Leerzeilen löschen\n\nsed '\u002F^$\u002Fd' datei.txt\n\n# Leerzeilen und Zeilen mit nur Leerzeichen löschen\n\nsed '\u002F^s*$\u002Fd' datei.txt\n\n# Kommentarzeilen (# am Anfang) entfernen\n\nsed '\u002F^#\u002Fd' datei.txt\n\nsed '\u002F^[[:space:]]*#\u002Fd' datei.txt\n\n# Nur Zeilen ausgeben, die \"Muster\" enthalten (-n p)\n\nsed -n '\u002Fmuster\u002Fp' datei.txt\n\n# Leerzeichen am Zeilenende entfernen\n\nsed 's\u002F[[:space:]]*$\u002F\u002F' datei.txt\n\n# Führende Leerzeichen entfernen\n\nsed 's\u002F^[[:space:]]*\u002F\u002F' datei.txt\n\n# Beides (trim)\n\nsed 's\u002F^[[:space:]]\u002F\u002F; s\u002F[[:space:]]$\u002F\u002F' datei.txt\n\n# Zeilen 5-10 ausgeben\n\nsed -n '5,10p' datei.txt\n\n# Erste Zeile löschen (Header entfernen)\n\nsed '1d' datei.txt\n\n# Letzte Zeile löschen\n\nsed '$d' datei.txt\n\n# Zeilenumbruch nach \";\" einfügen (Erweiterter Regex)\n\nsed -E 's\u002F;\u002F;n\u002Fg' datei.txt\n\n# Rückreferenz: Wort in Anführungszeichen einschließen\n\nsed 's\u002F(Wort)\u002F\"1\"\u002F' datei.txt\n\nsed -E 's\u002F(Wort)\u002F\"1\"\u002F' datei.txt # ERE-Variante\n\n# Text nach Zeile 3 einfügen\n\nsed '3aDies ist eine neue Zeile' datei.txt\n\n# Text vor Zeile 3 einfügen\n\nsed '3iDies kommt davor' datei.txt\n\n# Zeile 3 ersetzen\n\nsed '3cDiese Zeile ersetzt die alte' datei.txt\n\n# Mehrere Befehle (mit -e oder Semikolon)\n\nsed -e 's\u002Ffoo\u002Fbar\u002Fg' -e 's\u002Fbaz\u002Fqux\u002Fg' datei.txt\n\nsed 's\u002Ffoo\u002Fbar\u002Fg; s\u002Fbaz\u002Fqux\u002Fg' datei.txt\n\n# Skript aus Datei\n\nsed -f mein_skript.sed datei.txt\n\n# Nur erste Zeile ausgeben (wie head -1)\n\nsed -n '1p' datei.txt\n\n# Zeilenanzahl begrenzen (wie head -5)\n\nsed '5q' datei.txt\n\n# Zeichenersatz (y-Befehl): Kleinbuchstaben → Großbuchstaben\n\nsed 'y\u002Fabcdefghijklmnopqrstuvwxyz\u002FABCDEFGHIJKLMNOPQRSTUVWXYZ\u002F' datei.txt\n\n# Zeilennummern anzeigen (= gibt Nummer aus, p gibt Zeile aus)\n\nsed '=' datei.txt | sed 'N; s\u002Fn\u002Ft\u002F'\n\n# HTML-Tags entfernen\n\nsed 's\u002F\u003C[^>]*>\u002F\u002Fg' seite.html\n\n# DOS-Zeilenenden (rn) in Unix (n) umwandeln\n\nsed 's\u002Fr\u002F\u002F' datei.txt\n\n",[911,4426,4427,4436,4440,4445,4449,4458,4462,4467,4471,4480,4484,4489,4493,4503,4507,4512,4516,4527,4531,4536,4540,4545,4549,4558,4562,4567,4571,4580,4584,4589,4593,4602,4606,4611,4615,4624,4628,4637,4641,4646,4650,4662,4666,4671,4675,4684,4688,4693,4697,4706,4710,4715,4719,4728,4732,4737,4741,4752,4756,4761,4765,4774,4778,4783,4787,4796,4800,4805,4809,4821,4825,4830,4834,4843,4847,4861,4865,4870,4874,4883,4888,4894,4899,4909,4914,4920,4925,4935,4940,4946,4951,4968,4973,4983,4988,4994,4999,5012,5017,5023,5028,5040,5045,5051,5056,5066,5071,5077,5082,5092,5097,5103,5108,5126,5131,5137,5142,5153,5158,5164,5169],{"__ignoreMap":909},[452,4428,4429,4431,4434],{"class":915,"line":916},[452,4430,3866],{"class":919},[452,4432,4433],{"class":923}," 's\u002Falt\u002Fneu\u002F'",[452,4435,3780],{"class":923},[452,4437,4438],{"class":915,"line":1190},[452,4439,1194],{"emptyLinePlaceholder":1193},[452,4441,4442],{"class":915,"line":1197},[452,4443,4444],{"class":1200},"# Alle Vorkommen ersetzen\n",[452,4446,4447],{"class":915,"line":1204},[452,4448,1194],{"emptyLinePlaceholder":1193},[452,4450,4451,4453,4456],{"class":915,"line":1209},[452,4452,3866],{"class":919},[452,4454,4455],{"class":923}," 's\u002Falt\u002Fneu\u002Fg'",[452,4457,3780],{"class":923},[452,4459,4460],{"class":915,"line":1223},[452,4461,1194],{"emptyLinePlaceholder":1193},[452,4463,4464],{"class":915,"line":1228},[452,4465,4466],{"class":1200},"# Groß-\u002FKleinschreibung ignorieren\n",[452,4468,4469],{"class":915,"line":1234},[452,4470,1194],{"emptyLinePlaceholder":1193},[452,4472,4473,4475,4478],{"class":915,"line":1239},[452,4474,3866],{"class":919},[452,4476,4477],{"class":923}," 's\u002Ffehler\u002FFEHLER\u002Fgi'",[452,4479,3780],{"class":923},[452,4481,4482],{"class":915,"line":1253},[452,4483,1194],{"emptyLinePlaceholder":1193},[452,4485,4486],{"class":915,"line":1258},[452,4487,4488],{"class":1200},"# Datei direkt bearbeiten (in-place)\n",[452,4490,4491],{"class":915,"line":1264},[452,4492,1194],{"emptyLinePlaceholder":1193},[452,4494,4495,4497,4499,4501],{"class":915,"line":1269},[452,4496,3866],{"class":919},[452,4498,3822],{"class":975},[452,4500,4455],{"class":923},[452,4502,3780],{"class":923},[452,4504,4505],{"class":915,"line":1558},[452,4506,1194],{"emptyLinePlaceholder":1193},[452,4508,4509],{"class":915,"line":1563},[452,4510,4511],{"class":1200},"# Backup erstellen und in-place bearbeiten\n",[452,4513,4514],{"class":915,"line":1586},[452,4515,1194],{"emptyLinePlaceholder":1193},[452,4517,4518,4520,4523,4525],{"class":915,"line":1591},[452,4519,3866],{"class":919},[452,4521,4522],{"class":975}," -i.bak",[452,4524,4455],{"class":923},[452,4526,3780],{"class":923},[452,4528,4529],{"class":915,"line":1597},[452,4530,1194],{"emptyLinePlaceholder":1193},[452,4532,4533],{"class":915,"line":1602},[452,4534,4535],{"class":1200},"# (erstellt datei.txt.bak als Sicherung)\n",[452,4537,4538],{"class":915,"line":1622},[452,4539,1194],{"emptyLinePlaceholder":1193},[452,4541,4542],{"class":915,"line":1627},[452,4543,4544],{"class":1200},"# Zeilen löschen, die \"kommentar\" enthalten\n",[452,4546,4547],{"class":915,"line":1633},[452,4548,1194],{"emptyLinePlaceholder":1193},[452,4550,4551,4553,4556],{"class":915,"line":1638},[452,4552,3866],{"class":919},[452,4554,4555],{"class":923}," '\u002Fkommentar\u002Fd'",[452,4557,3780],{"class":923},[452,4559,4560],{"class":915,"line":1922},[452,4561,1194],{"emptyLinePlaceholder":1193},[452,4563,4564],{"class":915,"line":1927},[452,4565,4566],{"class":1200},"# Leerzeilen löschen\n",[452,4568,4569],{"class":915,"line":1942},[452,4570,1194],{"emptyLinePlaceholder":1193},[452,4572,4573,4575,4578],{"class":915,"line":1947},[452,4574,3866],{"class":919},[452,4576,4577],{"class":923}," '\u002F^$\u002Fd'",[452,4579,3780],{"class":923},[452,4581,4582],{"class":915,"line":1953},[452,4583,1194],{"emptyLinePlaceholder":1193},[452,4585,4586],{"class":915,"line":1958},[452,4587,4588],{"class":1200},"# Leerzeilen und Zeilen mit nur Leerzeichen löschen\n",[452,4590,4591],{"class":915,"line":1964},[452,4592,1194],{"emptyLinePlaceholder":1193},[452,4594,4595,4597,4600],{"class":915,"line":1969},[452,4596,3866],{"class":919},[452,4598,4599],{"class":923}," '\u002F^s*$\u002Fd'",[452,4601,3780],{"class":923},[452,4603,4604],{"class":915,"line":1986},[452,4605,1194],{"emptyLinePlaceholder":1193},[452,4607,4608],{"class":915,"line":1991},[452,4609,4610],{"class":1200},"# Kommentarzeilen (# am Anfang) entfernen\n",[452,4612,4613],{"class":915,"line":1997},[452,4614,1194],{"emptyLinePlaceholder":1193},[452,4616,4617,4619,4622],{"class":915,"line":2002},[452,4618,3866],{"class":919},[452,4620,4621],{"class":923}," '\u002F^#\u002Fd'",[452,4623,3780],{"class":923},[452,4625,4626],{"class":915,"line":2008},[452,4627,1194],{"emptyLinePlaceholder":1193},[452,4629,4630,4632,4635],{"class":915,"line":2013},[452,4631,3866],{"class":919},[452,4633,4634],{"class":923}," '\u002F^[[:space:]]*#\u002Fd'",[452,4636,3780],{"class":923},[452,4638,4639],{"class":915,"line":2019},[452,4640,1194],{"emptyLinePlaceholder":1193},[452,4642,4643],{"class":915,"line":2024},[452,4644,4645],{"class":1200},"# Nur Zeilen ausgeben, die \"Muster\" enthalten (-n p)\n",[452,4647,4648],{"class":915,"line":2030},[452,4649,1194],{"emptyLinePlaceholder":1193},[452,4651,4652,4654,4657,4660],{"class":915,"line":2035},[452,4653,3866],{"class":919},[452,4655,4656],{"class":975}," -n",[452,4658,4659],{"class":923}," '\u002Fmuster\u002Fp'",[452,4661,3780],{"class":923},[452,4663,4664],{"class":915,"line":2056},[452,4665,1194],{"emptyLinePlaceholder":1193},[452,4667,4668],{"class":915,"line":2061},[452,4669,4670],{"class":1200},"# Leerzeichen am Zeilenende entfernen\n",[452,4672,4673],{"class":915,"line":2067},[452,4674,1194],{"emptyLinePlaceholder":1193},[452,4676,4677,4679,4682],{"class":915,"line":2072},[452,4678,3866],{"class":919},[452,4680,4681],{"class":923}," 's\u002F[[:space:]]*$\u002F\u002F'",[452,4683,3780],{"class":923},[452,4685,4686],{"class":915,"line":2078},[452,4687,1194],{"emptyLinePlaceholder":1193},[452,4689,4690],{"class":915,"line":2083},[452,4691,4692],{"class":1200},"# Führende Leerzeichen entfernen\n",[452,4694,4695],{"class":915,"line":2089},[452,4696,1194],{"emptyLinePlaceholder":1193},[452,4698,4699,4701,4704],{"class":915,"line":2094},[452,4700,3866],{"class":919},[452,4702,4703],{"class":923}," 's\u002F^[[:space:]]*\u002F\u002F'",[452,4705,3780],{"class":923},[452,4707,4708],{"class":915,"line":2100},[452,4709,1194],{"emptyLinePlaceholder":1193},[452,4711,4712],{"class":915,"line":2105},[452,4713,4714],{"class":1200},"# Beides (trim)\n",[452,4716,4717],{"class":915,"line":2126},[452,4718,1194],{"emptyLinePlaceholder":1193},[452,4720,4721,4723,4726],{"class":915,"line":2131},[452,4722,3866],{"class":919},[452,4724,4725],{"class":923}," 's\u002F^[[:space:]]\u002F\u002F; s\u002F[[:space:]]$\u002F\u002F'",[452,4727,3780],{"class":923},[452,4729,4730],{"class":915,"line":2155},[452,4731,1194],{"emptyLinePlaceholder":1193},[452,4733,4734],{"class":915,"line":2160},[452,4735,4736],{"class":1200},"# Zeilen 5-10 ausgeben\n",[452,4738,4739],{"class":915,"line":2173},[452,4740,1194],{"emptyLinePlaceholder":1193},[452,4742,4743,4745,4747,4750],{"class":915,"line":2178},[452,4744,3866],{"class":919},[452,4746,4656],{"class":975},[452,4748,4749],{"class":923}," '5,10p'",[452,4751,3780],{"class":923},[452,4753,4754],{"class":915,"line":2184},[452,4755,1194],{"emptyLinePlaceholder":1193},[452,4757,4758],{"class":915,"line":2189},[452,4759,4760],{"class":1200},"# Erste Zeile löschen (Header entfernen)\n",[452,4762,4763],{"class":915,"line":2195},[452,4764,1194],{"emptyLinePlaceholder":1193},[452,4766,4767,4769,4772],{"class":915,"line":2200},[452,4768,3866],{"class":919},[452,4770,4771],{"class":923}," '1d'",[452,4773,3780],{"class":923},[452,4775,4776],{"class":915,"line":2208},[452,4777,1194],{"emptyLinePlaceholder":1193},[452,4779,4780],{"class":915,"line":2213},[452,4781,4782],{"class":1200},"# Letzte Zeile löschen\n",[452,4784,4785],{"class":915,"line":2219},[452,4786,1194],{"emptyLinePlaceholder":1193},[452,4788,4789,4791,4794],{"class":915,"line":2224},[452,4790,3866],{"class":919},[452,4792,4793],{"class":923}," '$d'",[452,4795,3780],{"class":923},[452,4797,4798],{"class":915,"line":2230},[452,4799,1194],{"emptyLinePlaceholder":1193},[452,4801,4802],{"class":915,"line":2235},[452,4803,4804],{"class":1200},"# Zeilenumbruch nach \";\" einfügen (Erweiterter Regex)\n",[452,4806,4807],{"class":915,"line":2245},[452,4808,1194],{"emptyLinePlaceholder":1193},[452,4810,4811,4813,4816,4819],{"class":915,"line":2250},[452,4812,3866],{"class":919},[452,4814,4815],{"class":975}," -E",[452,4817,4818],{"class":923}," 's\u002F;\u002F;n\u002Fg'",[452,4820,3780],{"class":923},[452,4822,4823],{"class":915,"line":2270},[452,4824,1194],{"emptyLinePlaceholder":1193},[452,4826,4827],{"class":915,"line":2275},[452,4828,4829],{"class":1200},"# Rückreferenz: Wort in Anführungszeichen einschließen\n",[452,4831,4832],{"class":915,"line":2298},[452,4833,1194],{"emptyLinePlaceholder":1193},[452,4835,4836,4838,4841],{"class":915,"line":2303},[452,4837,3866],{"class":919},[452,4839,4840],{"class":923}," 's\u002F(Wort)\u002F\"1\"\u002F'",[452,4842,3780],{"class":923},[452,4844,4845],{"class":915,"line":2316},[452,4846,1194],{"emptyLinePlaceholder":1193},[452,4848,4849,4851,4853,4855,4858],{"class":915,"line":2321},[452,4850,3866],{"class":919},[452,4852,4815],{"class":975},[452,4854,4840],{"class":923},[452,4856,4857],{"class":923}," datei.txt",[452,4859,4860],{"class":1200}," # ERE-Variante\n",[452,4862,4863],{"class":915,"line":2334},[452,4864,1194],{"emptyLinePlaceholder":1193},[452,4866,4867],{"class":915,"line":2339},[452,4868,4869],{"class":1200},"# Text nach Zeile 3 einfügen\n",[452,4871,4872],{"class":915,"line":2345},[452,4873,1194],{"emptyLinePlaceholder":1193},[452,4875,4876,4878,4881],{"class":915,"line":2350},[452,4877,3866],{"class":919},[452,4879,4880],{"class":923}," '3aDies ist eine neue Zeile'",[452,4882,3780],{"class":923},[452,4884,4886],{"class":915,"line":4885},80,[452,4887,1194],{"emptyLinePlaceholder":1193},[452,4889,4891],{"class":915,"line":4890},81,[452,4892,4893],{"class":1200},"# Text vor Zeile 3 einfügen\n",[452,4895,4897],{"class":915,"line":4896},82,[452,4898,1194],{"emptyLinePlaceholder":1193},[452,4900,4902,4904,4907],{"class":915,"line":4901},83,[452,4903,3866],{"class":919},[452,4905,4906],{"class":923}," '3iDies kommt davor'",[452,4908,3780],{"class":923},[452,4910,4912],{"class":915,"line":4911},84,[452,4913,1194],{"emptyLinePlaceholder":1193},[452,4915,4917],{"class":915,"line":4916},85,[452,4918,4919],{"class":1200},"# Zeile 3 ersetzen\n",[452,4921,4923],{"class":915,"line":4922},86,[452,4924,1194],{"emptyLinePlaceholder":1193},[452,4926,4928,4930,4933],{"class":915,"line":4927},87,[452,4929,3866],{"class":919},[452,4931,4932],{"class":923}," '3cDiese Zeile ersetzt die alte'",[452,4934,3780],{"class":923},[452,4936,4938],{"class":915,"line":4937},88,[452,4939,1194],{"emptyLinePlaceholder":1193},[452,4941,4943],{"class":915,"line":4942},89,[452,4944,4945],{"class":1200},"# Mehrere Befehle (mit -e oder Semikolon)\n",[452,4947,4949],{"class":915,"line":4948},90,[452,4950,1194],{"emptyLinePlaceholder":1193},[452,4952,4954,4956,4958,4961,4963,4966],{"class":915,"line":4953},91,[452,4955,3866],{"class":919},[452,4957,1568],{"class":975},[452,4959,4960],{"class":923}," 's\u002Ffoo\u002Fbar\u002Fg'",[452,4962,1568],{"class":975},[452,4964,4965],{"class":923}," 's\u002Fbaz\u002Fqux\u002Fg'",[452,4967,3780],{"class":923},[452,4969,4971],{"class":915,"line":4970},92,[452,4972,1194],{"emptyLinePlaceholder":1193},[452,4974,4976,4978,4981],{"class":915,"line":4975},93,[452,4977,3866],{"class":919},[452,4979,4980],{"class":923}," 's\u002Ffoo\u002Fbar\u002Fg; s\u002Fbaz\u002Fqux\u002Fg'",[452,4982,3780],{"class":923},[452,4984,4986],{"class":915,"line":4985},94,[452,4987,1194],{"emptyLinePlaceholder":1193},[452,4989,4991],{"class":915,"line":4990},95,[452,4992,4993],{"class":1200},"# Skript aus Datei\n",[452,4995,4997],{"class":915,"line":4996},96,[452,4998,1194],{"emptyLinePlaceholder":1193},[452,5000,5002,5004,5007,5010],{"class":915,"line":5001},97,[452,5003,3866],{"class":919},[452,5005,5006],{"class":975}," -f",[452,5008,5009],{"class":923}," mein_skript.sed",[452,5011,3780],{"class":923},[452,5013,5015],{"class":915,"line":5014},98,[452,5016,1194],{"emptyLinePlaceholder":1193},[452,5018,5020],{"class":915,"line":5019},99,[452,5021,5022],{"class":1200},"# Nur erste Zeile ausgeben (wie head -1)\n",[452,5024,5026],{"class":915,"line":5025},100,[452,5027,1194],{"emptyLinePlaceholder":1193},[452,5029,5031,5033,5035,5038],{"class":915,"line":5030},101,[452,5032,3866],{"class":919},[452,5034,4656],{"class":975},[452,5036,5037],{"class":923}," '1p'",[452,5039,3780],{"class":923},[452,5041,5043],{"class":915,"line":5042},102,[452,5044,1194],{"emptyLinePlaceholder":1193},[452,5046,5048],{"class":915,"line":5047},103,[452,5049,5050],{"class":1200},"# Zeilenanzahl begrenzen (wie head -5)\n",[452,5052,5054],{"class":915,"line":5053},104,[452,5055,1194],{"emptyLinePlaceholder":1193},[452,5057,5059,5061,5064],{"class":915,"line":5058},105,[452,5060,3866],{"class":919},[452,5062,5063],{"class":923}," '5q'",[452,5065,3780],{"class":923},[452,5067,5069],{"class":915,"line":5068},106,[452,5070,1194],{"emptyLinePlaceholder":1193},[452,5072,5074],{"class":915,"line":5073},107,[452,5075,5076],{"class":1200},"# Zeichenersatz (y-Befehl): Kleinbuchstaben → Großbuchstaben\n",[452,5078,5080],{"class":915,"line":5079},108,[452,5081,1194],{"emptyLinePlaceholder":1193},[452,5083,5085,5087,5090],{"class":915,"line":5084},109,[452,5086,3866],{"class":919},[452,5088,5089],{"class":923}," 'y\u002Fabcdefghijklmnopqrstuvwxyz\u002FABCDEFGHIJKLMNOPQRSTUVWXYZ\u002F'",[452,5091,3780],{"class":923},[452,5093,5095],{"class":915,"line":5094},110,[452,5096,1194],{"emptyLinePlaceholder":1193},[452,5098,5100],{"class":915,"line":5099},111,[452,5101,5102],{"class":1200},"# Zeilennummern anzeigen (= gibt Nummer aus, p gibt Zeile aus)\n",[452,5104,5106],{"class":915,"line":5105},112,[452,5107,1194],{"emptyLinePlaceholder":1193},[452,5109,5111,5113,5116,5118,5120,5123],{"class":915,"line":5110},113,[452,5112,3866],{"class":919},[452,5114,5115],{"class":923}," '='",[452,5117,4857],{"class":923},[452,5119,1474],{"class":1473},[452,5121,5122],{"class":919}," sed",[452,5124,5125],{"class":923}," 'N; s\u002Fn\u002Ft\u002F'\n",[452,5127,5129],{"class":915,"line":5128},114,[452,5130,1194],{"emptyLinePlaceholder":1193},[452,5132,5134],{"class":915,"line":5133},115,[452,5135,5136],{"class":1200},"# HTML-Tags entfernen\n",[452,5138,5140],{"class":915,"line":5139},116,[452,5141,1194],{"emptyLinePlaceholder":1193},[452,5143,5145,5147,5150],{"class":915,"line":5144},117,[452,5146,3866],{"class":919},[452,5148,5149],{"class":923}," 's\u002F\u003C[^>]*>\u002F\u002Fg'",[452,5151,5152],{"class":923}," seite.html\n",[452,5154,5156],{"class":915,"line":5155},118,[452,5157,1194],{"emptyLinePlaceholder":1193},[452,5159,5161],{"class":915,"line":5160},119,[452,5162,5163],{"class":1200},"# DOS-Zeilenenden (rn) in Unix (n) umwandeln\n",[452,5165,5167],{"class":915,"line":5166},120,[452,5168,1194],{"emptyLinePlaceholder":1193},[452,5170,5172,5174,5177],{"class":915,"line":5171},121,[452,5173,3866],{"class":919},[452,5175,5176],{"class":923}," 's\u002Fr\u002F\u002F'",[452,5178,3780],{"class":923},[257,5180,5182],{"id":5181},"cut-spalten-extrahieren","cut – Spalten extrahieren",[10,5184,5186],{"id":5185},"_5-feld-aus-etcpasswd-delimiter-doppelpunkt","5. Feld aus \u002Fetc\u002Fpasswd (Delimiter: Doppelpunkt)",[904,5188,5190],{"className":906,"code":5189,"language":908,"meta":909,"style":909},"cut -d: -f5 \u002Fetc\u002Fpasswd\n\n# 3. Spalte einer CSV-Datei\n\ncut -d, -f3 datei.csv\n\n",[911,5191,5192,5205,5209,5214,5218],{"__ignoreMap":909},[452,5193,5194,5197,5200,5203],{"class":915,"line":916},[452,5195,5196],{"class":919},"cut",[452,5198,5199],{"class":975}," -d:",[452,5201,5202],{"class":975}," -f5",[452,5204,3849],{"class":923},[452,5206,5207],{"class":915,"line":1190},[452,5208,1194],{"emptyLinePlaceholder":1193},[452,5210,5211],{"class":915,"line":1197},[452,5212,5213],{"class":1200},"# 3. Spalte einer CSV-Datei\n",[452,5215,5216],{"class":915,"line":1204},[452,5217,1194],{"emptyLinePlaceholder":1193},[452,5219,5220,5222,5225,5228],{"class":915,"line":1209},[452,5221,5196],{"class":919},[452,5223,5224],{"class":975}," -d,",[452,5226,5227],{"class":975}," -f3",[452,5229,5230],{"class":923}," datei.csv\n",[257,5232,5234],{"id":5233},"awk-textverarbeitung","awk – Textverarbeitung",[2652,5236,902],{"id":5237},"grundprinzip-1",[904,5239,5241],{"className":906,"code":5240,"language":908,"meta":909,"style":909},"awk ist eine vollständige Programmiersprache für Textverarbeitung. Es liest Dateien oder Streams zeilenweise, teilt jede Zeile in Felder auf und wendet ein Programm darauf an.\n\n",[911,5242,5243],{"__ignoreMap":909},[452,5244,5245,5248,5251,5254,5257,5260,5263,5266,5269,5272,5274,5277,5280,5283,5286,5289,5292,5295,5298,5301,5303,5306,5309,5312,5315],{"class":915,"line":916},[452,5246,5247],{"class":919},"awk",[452,5249,5250],{"class":923}," ist",[452,5252,5253],{"class":923}," eine",[452,5255,5256],{"class":923}," vollständige",[452,5258,5259],{"class":923}," Programmiersprache",[452,5261,5262],{"class":923}," für",[452,5264,5265],{"class":923}," Textverarbeitung.",[452,5267,5268],{"class":923}," Es",[452,5270,5271],{"class":923}," liest",[452,5273,924],{"class":923},[452,5275,5276],{"class":923}," oder",[452,5278,5279],{"class":923}," Streams",[452,5281,5282],{"class":923}," zeilenweise,",[452,5284,5285],{"class":923}," teilt",[452,5287,5288],{"class":923}," jede",[452,5290,5291],{"class":923}," Zeile",[452,5293,5294],{"class":923}," in",[452,5296,5297],{"class":923}," Felder",[452,5299,5300],{"class":923}," auf",[452,5302,927],{"class":923},[452,5304,5305],{"class":923}," wendet",[452,5307,5308],{"class":923}," ein",[452,5310,5311],{"class":923}," Programm",[452,5313,5314],{"class":923}," darauf",[452,5316,5317],{"class":923}," an.\n",[898,5319,5320],{},[27,5321,1693],{},[904,5323,5325],{"className":906,"code":5324,"language":908,"meta":909,"style":909},"awk 'MUSTER { AKTION }' datei\n\n",[911,5326,5327],{"__ignoreMap":909},[452,5328,5329,5331,5334],{"class":915,"line":916},[452,5330,5247],{"class":919},[452,5332,5333],{"class":923}," 'MUSTER { AKTION }'",[452,5335,3894],{"class":923},[2652,5337,5339],{"id":5338},"felder-und-variablen","Felder und Variablen",[15,5341,5342,5355],{},[18,5343,5344],{},[21,5345,5346,5351],{},[24,5347,5348],{},[27,5349,5350],{},"Variable",[24,5352,5353],{},[27,5354,417],{},[41,5356,5357,5364,5372,5380,5388,5396,5404,5412,5420,5428,5436,5444,5452,5460,5468],{},[21,5358,5359,5361],{},[46,5360,1873],{},[46,5362,5363],{},"Die gesamte aktuelle Zeile",[21,5365,5366,5369],{},[46,5367,5368],{},"$1",[46,5370,5371],{},"Erstes Feld",[21,5373,5374,5377],{},[46,5375,5376],{},"$2",[46,5378,5379],{},"Zweites Feld",[21,5381,5382,5385],{},[46,5383,5384],{},"$NF",[46,5386,5387],{},"Letztes Feld (Number of Fields)",[21,5389,5390,5393],{},[46,5391,5392],{},"$(NF-1)",[46,5394,5395],{},"Vorletztes Feld",[21,5397,5398,5401],{},[46,5399,5400],{},"NR",[46,5402,5403],{},"Aktuelle Zeilennummer (Number of Records)",[21,5405,5406,5409],{},[46,5407,5408],{},"NF",[46,5410,5411],{},"Anzahl der Felder in der aktuellen Zeile",[21,5413,5414,5417],{},[46,5415,5416],{},"FS",[46,5418,5419],{},"Feldtrenner (Field Separator, Standard: Leerzeichen\u002FTab)",[21,5421,5422,5425],{},[46,5423,5424],{},"OFS",[46,5426,5427],{},"Ausgabe-Feldtrenner (Output Field Separator)",[21,5429,5430,5433],{},[46,5431,5432],{},"RS",[46,5434,5435],{},"Datensatztrenner (Record Separator, Standard: \\n)",[21,5437,5438,5441],{},[46,5439,5440],{},"ORS",[46,5442,5443],{},"Ausgabe-Datensatztrenner",[21,5445,5446,5449],{},[46,5447,5448],{},"FILENAME",[46,5450,5451],{},"Name der aktuellen Datei",[21,5453,5454,5457],{},[46,5455,5456],{},"FNR",[46,5458,5459],{},"Zeilennummer in der aktuellen Datei (bei mehreren Dateien)",[21,5461,5462,5465],{},[46,5463,5464],{},"ARGC",[46,5466,5467],{},"Anzahl der Argumente",[21,5469,5470,5473],{},[46,5471,5472],{},"ARGV",[46,5474,5475],{},"Array der Argumente",[2652,5477,5479],{"id":5478},"kommandozeilen-optionen","Kommandozeilen-Optionen",[15,5481,5482,5494],{},[18,5483,5484],{},[21,5485,5486,5490],{},[24,5487,5488],{},[27,5489,1019],{},[24,5491,5492],{},[27,5493,417],{},[41,5495,5496,5504,5512,5519,5527,5534,5542],{},[21,5497,5498,5501],{},[46,5499,5500],{},"-F TRENN",[46,5502,5503],{},"Feldtrenner setzen (z.B. -F: für Doppelpunkt)",[21,5505,5506,5509],{},[46,5507,5508],{},"-v VAR=WERT",[46,5510,5511],{},"Variable vor dem Start setzen",[21,5513,5514,5516],{},[46,5515,3964],{},[46,5517,5518],{},"awk-Programm aus Datei lesen",[21,5520,5521,5524],{},[46,5522,5523],{},"-W compat",[46,5525,5526],{},"POSIX-kompatiblen Modus aktivieren (gawk)",[21,5528,5529,5531],{},[46,5530,4032],{},[46,5532,5533],{},"Streng POSIX-konform (gawk)",[21,5535,5536,5539],{},[46,5537,5538],{},"--re-interval",[46,5540,5541],{},"Intervallausdrücke in Regex aktivieren (gawk)",[21,5543,5544,5546],{},[46,5545,4022],{},[46,5547,5548],{},"Sicherheitsmodus (kein system(), getline etc.) (gawk)",[2652,5550,5552],{"id":5551},"besondere-blöcke","Besondere Blöcke",[898,5554,5555],{},"BEGIN { ... } # Wird einmal VOR dem Einlesen ausgeführt",[898,5557,5558],{},"END { ... } # Wird einmal NACH dem letzten Datensatz ausgeführt",[898,5560,5561],{},"\u002FMuster\u002F { ... } # Wird für jede Zeile ausgeführt, die Muster enthält",[2652,5563,5565],{"id":5564},"vergleichsoperatoren","Vergleichsoperatoren",[15,5567,5568,5580],{},[18,5569,5570],{},[21,5571,5572,5576],{},[24,5573,5574],{},[27,5575,840],{},[24,5577,5578],{},[27,5579,417],{},[41,5581,5582,5590,5598,5606,5614],{},[21,5583,5584,5587],{},[46,5585,5586],{},"==",[46,5588,5589],{},"Gleich",[21,5591,5592,5595],{},[46,5593,5594],{},"!=",[46,5596,5597],{},"Ungleich",[21,5599,5600,5603],{},[46,5601,5602],{},"\u003C, >, \u003C=, >=",[46,5604,5605],{},"Vergleich",[21,5607,5608,5611],{},[46,5609,5610],{},"~",[46,5612,5613],{},"Regex-Match",[21,5615,5616,5619],{},[46,5617,5618],{},"!~",[46,5620,5621],{},"Kein Regex-Match",[2652,5623,5625],{"id":5624},"arithmetik-und-strings","Arithmetik und Strings",[10,5627,5629],{"id":5628},"arithmetik","Arithmetik",[898,5631,5632],{},"$3 + $4 # Addition",[898,5634,5635],{},"$3 * 1.19 # Multiplikation",[898,5637,5638],{},"int($1 \u002F 2) # Ganzzahldivision",[10,5640,5642],{"id":5641},"string-funktionen","String-Funktionen",[898,5644,5645],{},"length($0) # Länge der Zeile",[898,5647,5648],{},"substr($1, 2, 4) # Teilstring ab Position 2, Länge 4",[898,5650,5651],{},"split($1, arr, \":\") # Splitten in Array",[898,5653,5654],{},"gsub(\u002Falt\u002F, \"neu\") # Globale Ersetzung in $0",[898,5656,5657],{},"sub(\u002Falt\u002F, \"neu\") # Erste Ersetzung in $0",[898,5659,5660],{},"toupper($1) # Großbuchstaben",[898,5662,5663],{},"tolower($1) # Kleinbuchstaben",[898,5665,5666],{},"index($1, \"suche\") # Position des Teilstrings",[898,5668,5669],{},"match($0, \u002Fregex\u002F) # Regex-Match, setzt RSTART\u002FRLENGTH",[898,5671,5672],{},"sprintf(\"%.2f\", $3) # Formatierte Ausgabe",[2652,5674,1166],{"id":5675},"beispiele-3",[10,5677,5679],{"id":5678},"alle-zeilen-ausgeben-wie-cat","Alle Zeilen ausgeben (wie cat)",[904,5681,5683],{"className":906,"code":5682,"language":908,"meta":909,"style":909},"awk '{ print }' datei.txt\n\nawk '{ print $0 }' datei.txt\n\n# Nur das erste Feld ausgeben\n\nawk '{ print $1 }' datei.txt\n\n# Spalten 1 und 3, durch Tab getrennt\n\nawk '{ print $1, $3 }' datei.txt\n\n# Mit Doppelpunkt als Trennzeichen (\u002Fetc\u002Fpasswd)\n\nawk -F: '{ print $1 }' \u002Fetc\u002Fpasswd\n\n# Benutzernamen und Shell ausgeben\n\nawk -F: '{ print $1, $7 }' \u002Fetc\u002Fpasswd\n\n# Nur Zeilen mit mehr als 3 Feldern\n\nawk 'NF > 3' datei.txt\n\n# Zeilen die \"error\" enthalten\n\nawk '\u002Ferror\u002F { print }' \u002Fvar\u002Flog\u002Fsyslog\n\n# Zeilen die NICHT \"debug\" enthalten\n\nawk '!\u002Fdebug\u002F' \u002Fvar\u002Flog\u002Fsyslog\n\n# Zeilennummer mit ausgeben\n\nawk '{ print NR\": \"$0 }' datei.txt\n\n# Nur Zeile 5 bis 10\n\nawk 'NR>=5 && NR\u003C=10' datei.txt\n\n# Summe der dritten Spalte\n\nawk '{ sum += $3 } END { print \"Summe:\", sum }' zahlen.txt\n\n# Durchschnitt\n\nawk '{ sum += $3 } END { print \"Avg:\", sum\u002FNR }' zahlen.txt\n\n# Anzahl Zeilen zählen (wie wc -l)\n\nawk 'END { print NR }' datei.txt\n\n# Duplikate entfernen (wie uniq, aber nicht sortiert)\n\nawk '!seen[$0]++' datei.txt\n\n# Leerzeilen entfernen\n\nawk 'NF > 0' datei.txt\n\nawk '\u002F^.\u002F' datei.txt\n\n# Felder vertauschen (1. und 2. Spalte tauschen)\n\nawk '{ print $2, $1 }' datei.txt\n\n# Ausgabe-Feldtrenner setzen (Komma)\n\nawk 'BEGIN{OFS=\",\"} { print $1,$2,$3 }' datei.txt\n\n# Variablen von außen übergeben\n\nawk -v grenze=100 '$3 > grenze { print }' datei.txt\n\n# if\u002Felse in awk\n\nawk '{ if ($3 > 50) print \"groß:\", $1; else print \"klein:\", $1 }' datei.txt\n\n# for-Schleife\n\nawk '{ for(i=1; i\u003C=NF; i++) print $i }' datei.txt\n\n# Arrays verwenden\n\nawk '{ count[$1]++ } END { for(k in count) print k, count[k] }' log.txt\n\n# Nur die letzte Zeile\n\nawk 'END { print }' datei.txt\n\n# Mehrzeiliger awk-Code aus Datei ausführen\n\nawk -f programm.awk datei.txt\n\n# CSV-Datei auswerten (Komma als Trenner, Anführungszeichen ignorieren)\n\nawk -F'\",\"' '{ print $2 }' daten.csv\n\n# Zwischen zwei Mustern ausgeben (inkl.)\n\nawk '\u002FSTART\u002F,\u002FSTOP\u002F' datei.txt\n\n# BEGIN und END\n\nawk 'BEGIN { print \"=== Start ===\" } { print } END { print \"=== Ende ===\" }' datei.txt\n\n# Prozesse nach CPU-Nutzung filtern (ps aux)\n\nps aux | awk '$3 > 1.0 { print $1, $2, $3, $11 }'\n\n# IP-Adressen aus Logdatei extrahieren\n\nawk '{ match($0, \u002F[0-9]+.[0-9]+.[0-9]+.[0-9]+\u002F, arr); print arr[0] }' access.log\n\n# \u002Fetc\u002Fpasswd – UIDs über 1000 (normale User)\n\nawk -F: '$3 >= 1000 { print $1, $3 }' \u002Fetc\u002Fpasswd\n\n# Größe einer Datei (du-Ausgabe aufsummieren)\n\ndu -sh * | awk '{ sum += $1 } END { print sum }'\n\n",[911,5684,5685,5694,5698,5707,5711,5716,5720,5729,5733,5738,5742,5751,5755,5760,5764,5775,5779,5784,5788,5799,5803,5808,5812,5821,5825,5830,5834,5844,5848,5853,5857,5866,5870,5875,5879,5888,5892,5897,5901,5910,5914,5919,5923,5933,5937,5942,5946,5955,5959,5964,5968,5977,5981,5986,5990,5999,6003,6008,6012,6021,6025,6034,6038,6043,6047,6056,6060,6065,6069,6078,6082,6087,6091,6108,6112,6117,6121,6130,6134,6139,6143,6152,6156,6161,6165,6175,6179,6184,6188,6197,6201,6206,6210,6221,6225,6230,6234,6250,6254,6259,6263,6272,6276,6281,6285,6294,6298,6303,6307,6323,6327,6332,6336,6346,6350,6355,6359,6370,6374,6379,6383],{"__ignoreMap":909},[452,5686,5687,5689,5692],{"class":915,"line":916},[452,5688,5247],{"class":919},[452,5690,5691],{"class":923}," '{ print }'",[452,5693,3780],{"class":923},[452,5695,5696],{"class":915,"line":1190},[452,5697,1194],{"emptyLinePlaceholder":1193},[452,5699,5700,5702,5705],{"class":915,"line":1197},[452,5701,5247],{"class":919},[452,5703,5704],{"class":923}," '{ print $0 }'",[452,5706,3780],{"class":923},[452,5708,5709],{"class":915,"line":1204},[452,5710,1194],{"emptyLinePlaceholder":1193},[452,5712,5713],{"class":915,"line":1209},[452,5714,5715],{"class":1200},"# Nur das erste Feld ausgeben\n",[452,5717,5718],{"class":915,"line":1223},[452,5719,1194],{"emptyLinePlaceholder":1193},[452,5721,5722,5724,5727],{"class":915,"line":1228},[452,5723,5247],{"class":919},[452,5725,5726],{"class":923}," '{ print $1 }'",[452,5728,3780],{"class":923},[452,5730,5731],{"class":915,"line":1234},[452,5732,1194],{"emptyLinePlaceholder":1193},[452,5734,5735],{"class":915,"line":1239},[452,5736,5737],{"class":1200},"# Spalten 1 und 3, durch Tab getrennt\n",[452,5739,5740],{"class":915,"line":1253},[452,5741,1194],{"emptyLinePlaceholder":1193},[452,5743,5744,5746,5749],{"class":915,"line":1258},[452,5745,5247],{"class":919},[452,5747,5748],{"class":923}," '{ print $1, $3 }'",[452,5750,3780],{"class":923},[452,5752,5753],{"class":915,"line":1264},[452,5754,1194],{"emptyLinePlaceholder":1193},[452,5756,5757],{"class":915,"line":1269},[452,5758,5759],{"class":1200},"# Mit Doppelpunkt als Trennzeichen (\u002Fetc\u002Fpasswd)\n",[452,5761,5762],{"class":915,"line":1558},[452,5763,1194],{"emptyLinePlaceholder":1193},[452,5765,5766,5768,5771,5773],{"class":915,"line":1563},[452,5767,5247],{"class":919},[452,5769,5770],{"class":975}," -F:",[452,5772,5726],{"class":923},[452,5774,3849],{"class":923},[452,5776,5777],{"class":915,"line":1586},[452,5778,1194],{"emptyLinePlaceholder":1193},[452,5780,5781],{"class":915,"line":1591},[452,5782,5783],{"class":1200},"# Benutzernamen und Shell ausgeben\n",[452,5785,5786],{"class":915,"line":1597},[452,5787,1194],{"emptyLinePlaceholder":1193},[452,5789,5790,5792,5794,5797],{"class":915,"line":1602},[452,5791,5247],{"class":919},[452,5793,5770],{"class":975},[452,5795,5796],{"class":923}," '{ print $1, $7 }'",[452,5798,3849],{"class":923},[452,5800,5801],{"class":915,"line":1622},[452,5802,1194],{"emptyLinePlaceholder":1193},[452,5804,5805],{"class":915,"line":1627},[452,5806,5807],{"class":1200},"# Nur Zeilen mit mehr als 3 Feldern\n",[452,5809,5810],{"class":915,"line":1633},[452,5811,1194],{"emptyLinePlaceholder":1193},[452,5813,5814,5816,5819],{"class":915,"line":1638},[452,5815,5247],{"class":919},[452,5817,5818],{"class":923}," 'NF > 3'",[452,5820,3780],{"class":923},[452,5822,5823],{"class":915,"line":1922},[452,5824,1194],{"emptyLinePlaceholder":1193},[452,5826,5827],{"class":915,"line":1927},[452,5828,5829],{"class":1200},"# Zeilen die \"error\" enthalten\n",[452,5831,5832],{"class":915,"line":1942},[452,5833,1194],{"emptyLinePlaceholder":1193},[452,5835,5836,5838,5841],{"class":915,"line":1947},[452,5837,5247],{"class":919},[452,5839,5840],{"class":923}," '\u002Ferror\u002F { print }'",[452,5842,5843],{"class":923}," \u002Fvar\u002Flog\u002Fsyslog\n",[452,5845,5846],{"class":915,"line":1953},[452,5847,1194],{"emptyLinePlaceholder":1193},[452,5849,5850],{"class":915,"line":1958},[452,5851,5852],{"class":1200},"# Zeilen die NICHT \"debug\" enthalten\n",[452,5854,5855],{"class":915,"line":1964},[452,5856,1194],{"emptyLinePlaceholder":1193},[452,5858,5859,5861,5864],{"class":915,"line":1969},[452,5860,5247],{"class":919},[452,5862,5863],{"class":923}," '!\u002Fdebug\u002F'",[452,5865,5843],{"class":923},[452,5867,5868],{"class":915,"line":1986},[452,5869,1194],{"emptyLinePlaceholder":1193},[452,5871,5872],{"class":915,"line":1991},[452,5873,5874],{"class":1200},"# Zeilennummer mit ausgeben\n",[452,5876,5877],{"class":915,"line":1997},[452,5878,1194],{"emptyLinePlaceholder":1193},[452,5880,5881,5883,5886],{"class":915,"line":2002},[452,5882,5247],{"class":919},[452,5884,5885],{"class":923}," '{ print NR\": \"$0 }'",[452,5887,3780],{"class":923},[452,5889,5890],{"class":915,"line":2008},[452,5891,1194],{"emptyLinePlaceholder":1193},[452,5893,5894],{"class":915,"line":2013},[452,5895,5896],{"class":1200},"# Nur Zeile 5 bis 10\n",[452,5898,5899],{"class":915,"line":2019},[452,5900,1194],{"emptyLinePlaceholder":1193},[452,5902,5903,5905,5908],{"class":915,"line":2024},[452,5904,5247],{"class":919},[452,5906,5907],{"class":923}," 'NR>=5 && NR\u003C=10'",[452,5909,3780],{"class":923},[452,5911,5912],{"class":915,"line":2030},[452,5913,1194],{"emptyLinePlaceholder":1193},[452,5915,5916],{"class":915,"line":2035},[452,5917,5918],{"class":1200},"# Summe der dritten Spalte\n",[452,5920,5921],{"class":915,"line":2056},[452,5922,1194],{"emptyLinePlaceholder":1193},[452,5924,5925,5927,5930],{"class":915,"line":2061},[452,5926,5247],{"class":919},[452,5928,5929],{"class":923}," '{ sum += $3 } END { print \"Summe:\", sum }'",[452,5931,5932],{"class":923}," zahlen.txt\n",[452,5934,5935],{"class":915,"line":2067},[452,5936,1194],{"emptyLinePlaceholder":1193},[452,5938,5939],{"class":915,"line":2072},[452,5940,5941],{"class":1200},"# Durchschnitt\n",[452,5943,5944],{"class":915,"line":2078},[452,5945,1194],{"emptyLinePlaceholder":1193},[452,5947,5948,5950,5953],{"class":915,"line":2083},[452,5949,5247],{"class":919},[452,5951,5952],{"class":923}," '{ sum += $3 } END { print \"Avg:\", sum\u002FNR }'",[452,5954,5932],{"class":923},[452,5956,5957],{"class":915,"line":2089},[452,5958,1194],{"emptyLinePlaceholder":1193},[452,5960,5961],{"class":915,"line":2094},[452,5962,5963],{"class":1200},"# Anzahl Zeilen zählen (wie wc -l)\n",[452,5965,5966],{"class":915,"line":2100},[452,5967,1194],{"emptyLinePlaceholder":1193},[452,5969,5970,5972,5975],{"class":915,"line":2105},[452,5971,5247],{"class":919},[452,5973,5974],{"class":923}," 'END { print NR }'",[452,5976,3780],{"class":923},[452,5978,5979],{"class":915,"line":2126},[452,5980,1194],{"emptyLinePlaceholder":1193},[452,5982,5983],{"class":915,"line":2131},[452,5984,5985],{"class":1200},"# Duplikate entfernen (wie uniq, aber nicht sortiert)\n",[452,5987,5988],{"class":915,"line":2155},[452,5989,1194],{"emptyLinePlaceholder":1193},[452,5991,5992,5994,5997],{"class":915,"line":2160},[452,5993,5247],{"class":919},[452,5995,5996],{"class":923}," '!seen[$0]++'",[452,5998,3780],{"class":923},[452,6000,6001],{"class":915,"line":2173},[452,6002,1194],{"emptyLinePlaceholder":1193},[452,6004,6005],{"class":915,"line":2178},[452,6006,6007],{"class":1200},"# Leerzeilen entfernen\n",[452,6009,6010],{"class":915,"line":2184},[452,6011,1194],{"emptyLinePlaceholder":1193},[452,6013,6014,6016,6019],{"class":915,"line":2189},[452,6015,5247],{"class":919},[452,6017,6018],{"class":923}," 'NF > 0'",[452,6020,3780],{"class":923},[452,6022,6023],{"class":915,"line":2195},[452,6024,1194],{"emptyLinePlaceholder":1193},[452,6026,6027,6029,6032],{"class":915,"line":2200},[452,6028,5247],{"class":919},[452,6030,6031],{"class":923}," '\u002F^.\u002F'",[452,6033,3780],{"class":923},[452,6035,6036],{"class":915,"line":2208},[452,6037,1194],{"emptyLinePlaceholder":1193},[452,6039,6040],{"class":915,"line":2213},[452,6041,6042],{"class":1200},"# Felder vertauschen (1. und 2. Spalte tauschen)\n",[452,6044,6045],{"class":915,"line":2219},[452,6046,1194],{"emptyLinePlaceholder":1193},[452,6048,6049,6051,6054],{"class":915,"line":2224},[452,6050,5247],{"class":919},[452,6052,6053],{"class":923}," '{ print $2, $1 }'",[452,6055,3780],{"class":923},[452,6057,6058],{"class":915,"line":2230},[452,6059,1194],{"emptyLinePlaceholder":1193},[452,6061,6062],{"class":915,"line":2235},[452,6063,6064],{"class":1200},"# Ausgabe-Feldtrenner setzen (Komma)\n",[452,6066,6067],{"class":915,"line":2245},[452,6068,1194],{"emptyLinePlaceholder":1193},[452,6070,6071,6073,6076],{"class":915,"line":2250},[452,6072,5247],{"class":919},[452,6074,6075],{"class":923}," 'BEGIN{OFS=\",\"} { print $1,$2,$3 }'",[452,6077,3780],{"class":923},[452,6079,6080],{"class":915,"line":2270},[452,6081,1194],{"emptyLinePlaceholder":1193},[452,6083,6084],{"class":915,"line":2275},[452,6085,6086],{"class":1200},"# Variablen von außen übergeben\n",[452,6088,6089],{"class":915,"line":2298},[452,6090,1194],{"emptyLinePlaceholder":1193},[452,6092,6093,6095,6098,6101,6103,6106],{"class":915,"line":2303},[452,6094,5247],{"class":919},[452,6096,6097],{"class":975}," -v",[452,6099,6100],{"class":923}," grenze=",[452,6102,202],{"class":975},[452,6104,6105],{"class":923}," '$3 > grenze { print }'",[452,6107,3780],{"class":923},[452,6109,6110],{"class":915,"line":2316},[452,6111,1194],{"emptyLinePlaceholder":1193},[452,6113,6114],{"class":915,"line":2321},[452,6115,6116],{"class":1200},"# if\u002Felse in awk\n",[452,6118,6119],{"class":915,"line":2334},[452,6120,1194],{"emptyLinePlaceholder":1193},[452,6122,6123,6125,6128],{"class":915,"line":2339},[452,6124,5247],{"class":919},[452,6126,6127],{"class":923}," '{ if ($3 > 50) print \"groß:\", $1; else print \"klein:\", $1 }'",[452,6129,3780],{"class":923},[452,6131,6132],{"class":915,"line":2345},[452,6133,1194],{"emptyLinePlaceholder":1193},[452,6135,6136],{"class":915,"line":2350},[452,6137,6138],{"class":1200},"# for-Schleife\n",[452,6140,6141],{"class":915,"line":4885},[452,6142,1194],{"emptyLinePlaceholder":1193},[452,6144,6145,6147,6150],{"class":915,"line":4890},[452,6146,5247],{"class":919},[452,6148,6149],{"class":923}," '{ for(i=1; i\u003C=NF; i++) print $i }'",[452,6151,3780],{"class":923},[452,6153,6154],{"class":915,"line":4896},[452,6155,1194],{"emptyLinePlaceholder":1193},[452,6157,6158],{"class":915,"line":4901},[452,6159,6160],{"class":1200},"# Arrays verwenden\n",[452,6162,6163],{"class":915,"line":4911},[452,6164,1194],{"emptyLinePlaceholder":1193},[452,6166,6167,6169,6172],{"class":915,"line":4916},[452,6168,5247],{"class":919},[452,6170,6171],{"class":923}," '{ count[$1]++ } END { for(k in count) print k, count[k] }'",[452,6173,6174],{"class":923}," log.txt\n",[452,6176,6177],{"class":915,"line":4922},[452,6178,1194],{"emptyLinePlaceholder":1193},[452,6180,6181],{"class":915,"line":4927},[452,6182,6183],{"class":1200},"# Nur die letzte Zeile\n",[452,6185,6186],{"class":915,"line":4937},[452,6187,1194],{"emptyLinePlaceholder":1193},[452,6189,6190,6192,6195],{"class":915,"line":4942},[452,6191,5247],{"class":919},[452,6193,6194],{"class":923}," 'END { print }'",[452,6196,3780],{"class":923},[452,6198,6199],{"class":915,"line":4948},[452,6200,1194],{"emptyLinePlaceholder":1193},[452,6202,6203],{"class":915,"line":4953},[452,6204,6205],{"class":1200},"# Mehrzeiliger awk-Code aus Datei ausführen\n",[452,6207,6208],{"class":915,"line":4970},[452,6209,1194],{"emptyLinePlaceholder":1193},[452,6211,6212,6214,6216,6219],{"class":915,"line":4975},[452,6213,5247],{"class":919},[452,6215,5006],{"class":975},[452,6217,6218],{"class":923}," programm.awk",[452,6220,3780],{"class":923},[452,6222,6223],{"class":915,"line":4985},[452,6224,1194],{"emptyLinePlaceholder":1193},[452,6226,6227],{"class":915,"line":4990},[452,6228,6229],{"class":1200},"# CSV-Datei auswerten (Komma als Trenner, Anführungszeichen ignorieren)\n",[452,6231,6232],{"class":915,"line":4996},[452,6233,1194],{"emptyLinePlaceholder":1193},[452,6235,6236,6238,6241,6244,6247],{"class":915,"line":5001},[452,6237,5247],{"class":919},[452,6239,6240],{"class":975}," -F",[452,6242,6243],{"class":923},"'\",\"'",[452,6245,6246],{"class":923}," '{ print $2 }'",[452,6248,6249],{"class":923}," daten.csv\n",[452,6251,6252],{"class":915,"line":5014},[452,6253,1194],{"emptyLinePlaceholder":1193},[452,6255,6256],{"class":915,"line":5019},[452,6257,6258],{"class":1200},"# Zwischen zwei Mustern ausgeben (inkl.)\n",[452,6260,6261],{"class":915,"line":5025},[452,6262,1194],{"emptyLinePlaceholder":1193},[452,6264,6265,6267,6270],{"class":915,"line":5030},[452,6266,5247],{"class":919},[452,6268,6269],{"class":923}," '\u002FSTART\u002F,\u002FSTOP\u002F'",[452,6271,3780],{"class":923},[452,6273,6274],{"class":915,"line":5042},[452,6275,1194],{"emptyLinePlaceholder":1193},[452,6277,6278],{"class":915,"line":5047},[452,6279,6280],{"class":1200},"# BEGIN und END\n",[452,6282,6283],{"class":915,"line":5053},[452,6284,1194],{"emptyLinePlaceholder":1193},[452,6286,6287,6289,6292],{"class":915,"line":5058},[452,6288,5247],{"class":919},[452,6290,6291],{"class":923}," 'BEGIN { print \"=== Start ===\" } { print } END { print \"=== Ende ===\" }'",[452,6293,3780],{"class":923},[452,6295,6296],{"class":915,"line":5068},[452,6297,1194],{"emptyLinePlaceholder":1193},[452,6299,6300],{"class":915,"line":5073},[452,6301,6302],{"class":1200},"# Prozesse nach CPU-Nutzung filtern (ps aux)\n",[452,6304,6305],{"class":915,"line":5079},[452,6306,1194],{"emptyLinePlaceholder":1193},[452,6308,6309,6312,6315,6317,6320],{"class":915,"line":5084},[452,6310,6311],{"class":919},"ps",[452,6313,6314],{"class":923}," aux",[452,6316,1474],{"class":1473},[452,6318,6319],{"class":919}," awk",[452,6321,6322],{"class":923}," '$3 > 1.0 { print $1, $2, $3, $11 }'\n",[452,6324,6325],{"class":915,"line":5094},[452,6326,1194],{"emptyLinePlaceholder":1193},[452,6328,6329],{"class":915,"line":5099},[452,6330,6331],{"class":1200},"# IP-Adressen aus Logdatei extrahieren\n",[452,6333,6334],{"class":915,"line":5105},[452,6335,1194],{"emptyLinePlaceholder":1193},[452,6337,6338,6340,6343],{"class":915,"line":5110},[452,6339,5247],{"class":919},[452,6341,6342],{"class":923}," '{ match($0, \u002F[0-9]+.[0-9]+.[0-9]+.[0-9]+\u002F, arr); print arr[0] }'",[452,6344,6345],{"class":923}," access.log\n",[452,6347,6348],{"class":915,"line":5128},[452,6349,1194],{"emptyLinePlaceholder":1193},[452,6351,6352],{"class":915,"line":5133},[452,6353,6354],{"class":1200},"# \u002Fetc\u002Fpasswd – UIDs über 1000 (normale User)\n",[452,6356,6357],{"class":915,"line":5139},[452,6358,1194],{"emptyLinePlaceholder":1193},[452,6360,6361,6363,6365,6368],{"class":915,"line":5144},[452,6362,5247],{"class":919},[452,6364,5770],{"class":975},[452,6366,6367],{"class":923}," '$3 >= 1000 { print $1, $3 }'",[452,6369,3849],{"class":923},[452,6371,6372],{"class":915,"line":5155},[452,6373,1194],{"emptyLinePlaceholder":1193},[452,6375,6376],{"class":915,"line":5160},[452,6377,6378],{"class":1200},"# Größe einer Datei (du-Ausgabe aufsummieren)\n",[452,6380,6381],{"class":915,"line":5166},[452,6382,1194],{"emptyLinePlaceholder":1193},[452,6384,6385,6388,6391,6394,6396,6398],{"class":915,"line":5171},[452,6386,6387],{"class":919},"du",[452,6389,6390],{"class":975}," -sh",[452,6392,6393],{"class":975}," *",[452,6395,1474],{"class":1473},[452,6397,6319],{"class":919},[452,6399,6400],{"class":923}," '{ sum += $1 } END { print sum }'\n",[257,6402,6404],{"id":6403},"apt-high-level-empfohlen","apt (High-Level – empfohlen!)",[15,6406,6407,6419],{},[18,6408,6409],{},[21,6410,6411,6415],{},[24,6412,6413],{},[27,6414,271],{},[24,6416,6417],{},[27,6418,39],{},[41,6420,6421,6429,6437,6445,6453,6461,6469,6477,6485,6493],{},[21,6422,6423,6426],{},[46,6424,6425],{},"sudo apt update",[46,6427,6428],{},"Paketlisten aktualisieren",[21,6430,6431,6434],{},[46,6432,6433],{},"sudo apt upgrade",[46,6435,6436],{},"Installierte Pakete aktualisieren",[21,6438,6439,6442],{},[46,6440,6441],{},"sudo apt install paket",[46,6443,6444],{},"Paket installieren",[21,6446,6447,6450],{},[46,6448,6449],{},"sudo apt remove paket",[46,6451,6452],{},"Paket deinstallieren (Konfig bleibt)",[21,6454,6455,6458],{},[46,6456,6457],{},"sudo apt purge paket",[46,6459,6460],{},"Paket + Konfig entfernen",[21,6462,6463,6466],{},[46,6464,6465],{},"apt search begriff",[46,6467,6468],{},"Nach Paketen suchen",[21,6470,6471,6474],{},[46,6472,6473],{},"apt list --installed",[46,6475,6476],{},"Installierte Pakete anzeigen",[21,6478,6479,6482],{},[46,6480,6481],{},"sudo apt autoremove",[46,6483,6484],{},"Nicht benötigte Pakete entfernen",[21,6486,6487,6490],{},[46,6488,6489],{},"apt source paket",[46,6491,6492],{},"Quellcode herunterladen",[21,6494,6495,6498],{},[46,6496,6497],{},"apt clean",[46,6499,6500],{},"Apt cache leeren",[257,6502,6504],{"id":6503},"paketquellen-etcaptsourceslist","Paketquellen: \u002Fetc\u002Fapt\u002Fsources.list",[904,6506,6508],{"className":906,"code":6507,"language":908,"meta":909,"style":909},"deb http:\u002F\u002Fserver.example.com\u002Fdebian distribution component1 component2\n\ndeb-src http:\u002F\u002Fserver.example.com\u002Fdebian distribution component1 component2\n\n- deb = vorcompilierte Binary-Pakete\n",[911,6509,6510,6527,6531,6544,6548],{"__ignoreMap":909},[452,6511,6512,6515,6518,6521,6524],{"class":915,"line":916},[452,6513,6514],{"class":919},"deb",[452,6516,6517],{"class":923}," http:\u002F\u002Fserver.example.com\u002Fdebian",[452,6519,6520],{"class":923}," distribution",[452,6522,6523],{"class":923}," component1",[452,6525,6526],{"class":923}," component2\n",[452,6528,6529],{"class":915,"line":1190},[452,6530,1194],{"emptyLinePlaceholder":1193},[452,6532,6533,6536,6538,6540,6542],{"class":915,"line":1197},[452,6534,6535],{"class":919},"deb-src",[452,6537,6517],{"class":923},[452,6539,6520],{"class":923},[452,6541,6523],{"class":923},[452,6543,6526],{"class":923},[452,6545,6546],{"class":915,"line":1204},[452,6547,1194],{"emptyLinePlaceholder":1193},[452,6549,6550,6553,6556,6559,6562],{"class":915,"line":1209},[452,6551,6552],{"class":919},"-",[452,6554,6555],{"class":923}," deb",[452,6557,6558],{"class":923}," =",[452,6560,6561],{"class":923}," vorcompilierte",[452,6563,6564],{"class":923}," Binary-Pakete\n",[992,6566,6567,6570,6573],{},[995,6568,6569],{},"deb = vorcompilierte Binary-Pakete",[995,6571,6572],{},"deb-src = Source-Pakete",[995,6574,6575],{},"Weitere Quellen in: \u002Fetc\u002Fapt\u002Fsources.list.d\u002F*.list",[10,6577,6579],{"id":6578},"benutzer-und-gruppenverwaltung","Benutzer- und Gruppenverwaltung",[257,6581,6583],{"id":6582},"arten-von-benutzern","Arten von Benutzern",[15,6585,6586,6604],{},[18,6587,6588],{},[21,6589,6590,6595,6599],{},[24,6591,6592],{},[27,6593,6594],{},"Typ",[24,6596,6597],{},[27,6598,39],{},[24,6600,6601],{},[27,6602,6603],{},"UID",[41,6605,6606,6617,6628],{},[21,6607,6608,6611,6614],{},[46,6609,6610],{},"Root",[46,6612,6613],{},"Superuser, uneingeschränkter Zugriff",[46,6615,6616],{},"0",[21,6618,6619,6622,6625],{},[46,6620,6621],{},"Normale Benutzer",[46,6623,6624],{},"Begrenzte Rechte",[46,6626,6627],{},"> 1000",[21,6629,6630,6633,6636],{},[46,6631,6632],{},"Systembenutzer",[46,6634,6635],{},"Für Dienste (z.B. www-data)",[46,6637,6638],{},"1-999",[257,6640,6642],{"id":6641},"wichtige-konfigurationsdateien","Wichtige Konfigurationsdateien",[2652,6644,6646],{"id":6645},"etcpasswd-benutzerdatenbank","\u002Fetc\u002Fpasswd – Benutzerdatenbank",[2652,6648,6650],{"id":6649},"usernamepassworduidgidinfohomeshell","Username:Password:UID:GID:Info:Home:Shell",[992,6652,6653,6656],{},[995,6654,6655],{},"Password = x bedeutet: Passwort steht in \u002Fetc\u002Fshadow",[995,6657,6658],{},"Beispiel: bob❌1001:1001:Bob Miller:\u002Fhome\u002Fbob:\u002Fbin\u002Fbash",[2652,6660,6662],{"id":6661},"etcshadow-passwortdatenbank","\u002Fetc\u002Fshadow – Passwortdatenbank",[898,6664,6665],{},"Username:Password:DOC:MinD:MaxD:Warn:Exp:Dis",[992,6667,6668,6671],{},[995,6669,6670],{},"DOC = Tag der letzten Passwortänderung (ab 1.1.1970)",[995,6672,6673],{},"Editieren mit: vipw -s",[2652,6675,6677],{"id":6676},"etcgroup-gruppendatenbank","\u002Fetc\u002Fgroup – Gruppendatenbank",[898,6679,6680],{},"Gruppenname:Passwort:GID:Mitgliederliste",[2652,6682,6684],{"id":6683},"etcskel-vorlage-für-neue-benutzer","\u002Fetc\u002Fskel – Vorlage für neue Benutzer",[992,6686,6687],{},[995,6688,6689],{},"Dateien aus diesem Verzeichnis werden bei useradd -m ins neue Home kopiert",[257,6691,6693],{"id":6692},"befehle-zur-gruppenverwaltung","Befehle zur Gruppenverwaltung",[15,6695,6696,6708],{},[18,6697,6698],{},[21,6699,6700,6704],{},[24,6701,6702],{},[27,6703,271],{},[24,6705,6706],{},[27,6707,39],{},[41,6709,6710,6718,6726,6734,6742,6750,6758],{},[21,6711,6712,6715],{},[46,6713,6714],{},"groupadd gruppenname",[46,6716,6717],{},"Neue Gruppe anlegen",[21,6719,6720,6723],{},[46,6721,6722],{},"groupadd -g 1007 verkauf",[46,6724,6725],{},"Gruppe mit bestimmter GID",[21,6727,6728,6731],{},[46,6729,6730],{},"groupdel gruppenname",[46,6732,6733],{},"Gruppe löschen",[21,6735,6736,6739],{},[46,6737,6738],{},"groupmod -n neuer_name alter_name",[46,6740,6741],{},"Gruppe umbenennen",[21,6743,6744,6747],{},[46,6745,6746],{},"gpasswd -a benutzer gruppe",[46,6748,6749],{},"Mitglied hinzufügen",[21,6751,6752,6755],{},[46,6753,6754],{},"gpasswd -d benutzer gruppe",[46,6756,6757],{},"Mitglied entfernen",[21,6759,6760,6763],{},[46,6761,6762],{},"newgrp gruppenname",[46,6764,6765],{},"Primäre Gruppe wechseln",[257,6767,6769],{"id":6768},"befehle-zur-benutzerverwaltung","Befehle zur Benutzerverwaltung",[15,6771,6772,6784],{},[18,6773,6774],{},[21,6775,6776,6780],{},[24,6777,6778],{},[27,6779,271],{},[24,6781,6782],{},[27,6783,39],{},[41,6785,6786,6794,6802,6810,6818,6826,6834,6842,6850,6858,6866,6874,6881],{},[21,6787,6788,6791],{},[46,6789,6790],{},"useradd benutzername",[46,6792,6793],{},"Neuen Benutzer anlegen",[21,6795,6796,6799],{},[46,6797,6798],{},"useradd -m benutzername",[46,6800,6801],{},"Mit Home-Verzeichnis anlegen",[21,6803,6804,6807],{},[46,6805,6806],{},"useradd -m -u 502 -c \"Info\" name",[46,6808,6809],{},"Mit UID und Kommentar",[21,6811,6812,6815],{},[46,6813,6814],{},"userdel benutzername",[46,6816,6817],{},"Benutzer löschen",[21,6819,6820,6823],{},[46,6821,6822],{},"userdel -r benutzername",[46,6824,6825],{},"Benutzer + Home löschen",[21,6827,6828,6831],{},[46,6829,6830],{},"usermod -aG gruppe benutzer",[46,6832,6833],{},"Benutzer zur Gruppe hinzufügen",[21,6835,6836,6839],{},[46,6837,6838],{},"passwd benutzername",[46,6840,6841],{},"Passwort setzen\u002Fändern",[21,6843,6844,6847],{},[46,6845,6846],{},"passwd -l benutzername",[46,6848,6849],{},"Account sperren",[21,6851,6852,6855],{},[46,6853,6854],{},"passwd -u benutzername",[46,6856,6857],{},"Account freigeben",[21,6859,6860,6863],{},[46,6861,6862],{},"id benutzername",[46,6864,6865],{},"UID, GID und Gruppen anzeigen",[21,6867,6868,6871],{},[46,6869,6870],{},"groups benutzername",[46,6872,6873],{},"Gruppenmitgliedschaften anzeigen",[21,6875,6876,6879],{},[46,6877,6878],{},"su benutzername",[46,6880,301],{},[21,6882,6883,6886],{},[46,6884,6885],{},"su -",[46,6887,6888],{},"Zu root wechseln mit Umgebungswechsel",[10,6890,6892],{"id":6891},"zugriffsrechte-und-dateiberechtigungen","Zugriffsrechte und Dateiberechtigungen",[257,6894,6896],{"id":6895},"aufbau-der-berechtigungen","Aufbau der Berechtigungen",[898,6898,6899,6900,6902,6903,6905,6906,6908,6909,6911,6912,6914],{},"-rwxr-xr-- 1 besitzer gruppe größe datum dateiname",[1325,6901],{},"\n│├─┤├─┤├─┤",[1325,6904],{},"\n│ │ │ └── Andere (Others): r--",[1325,6907],{},"\n│ │ └────── Gruppe (Group): r-x",[1325,6910],{},"\n│ └────────── Besitzer (User): rwx",[1325,6913],{},"\n└──────────── Dateityp: - = Datei, d = Verzeichnis",[257,6916,6918],{"id":6917},"bedeutung-der-rechte","Bedeutung der Rechte",[15,6920,6921,6940],{},[18,6922,6923],{},[21,6924,6925,6930,6935],{},[24,6926,6927],{},[27,6928,6929],{},"Recht",[24,6931,6932],{},[27,6933,6934],{},"Datei",[24,6936,6937],{},[27,6938,6939],{},"Verzeichnis",[41,6941,6942,6953,6964],{},[21,6943,6944,6947,6950],{},[46,6945,6946],{},"r (read=4)",[46,6948,6949],{},"Dateiinhalt lesen",[46,6951,6952],{},"Verzeichnisinhalt auflisten",[21,6954,6955,6958,6961],{},[46,6956,6957],{},"w (write=2)",[46,6959,6960],{},"Dateiinhalt ändern",[46,6962,6963],{},"Dateien erstellen\u002Flöschen\u002Fumbenennen",[21,6965,6966,6969,6972],{},[46,6967,6968],{},"x (execute=1)",[46,6970,6971],{},"Programm\u002FSkript ausführen",[46,6973,6974],{},"Verzeichnis betreten (cd)",[257,6976,6978],{"id":6977},"chmod-rechte-ändern","chmod – Rechte ändern",[2652,6980,6982],{"id":6981},"symbolische-methode","Symbolische Methode:",[904,6984,6986],{"className":906,"code":6985,"language":908,"meta":909,"style":909},"chmod u+x datei.sh # User: Ausführen hinzufügen\n\nchmod g-w datei.txt # Gruppe: Schreiben entfernen\n\nchmod o=r datei.txt # Andere: Nur Lesen\n\nchmod a+x skript.sh # Alle: Ausführen hinzufügen\n\nchmod u=rwx,g=rx,o= datei # Explizit setzen\n\n",[911,6987,6988,7002,7006,7018,7022,7034,7038,7051,7055],{"__ignoreMap":909},[452,6989,6990,6993,6996,6999],{"class":915,"line":916},[452,6991,6992],{"class":919},"chmod",[452,6994,6995],{"class":923}," u+x",[452,6997,6998],{"class":923}," datei.sh",[452,7000,7001],{"class":1200}," # User: Ausführen hinzufügen\n",[452,7003,7004],{"class":915,"line":1190},[452,7005,1194],{"emptyLinePlaceholder":1193},[452,7007,7008,7010,7013,7015],{"class":915,"line":1197},[452,7009,6992],{"class":919},[452,7011,7012],{"class":923}," g-w",[452,7014,4857],{"class":923},[452,7016,7017],{"class":1200}," # Gruppe: Schreiben entfernen\n",[452,7019,7020],{"class":915,"line":1204},[452,7021,1194],{"emptyLinePlaceholder":1193},[452,7023,7024,7026,7029,7031],{"class":915,"line":1209},[452,7025,6992],{"class":919},[452,7027,7028],{"class":923}," o=r",[452,7030,4857],{"class":923},[452,7032,7033],{"class":1200}," # Andere: Nur Lesen\n",[452,7035,7036],{"class":915,"line":1223},[452,7037,1194],{"emptyLinePlaceholder":1193},[452,7039,7040,7042,7045,7048],{"class":915,"line":1228},[452,7041,6992],{"class":919},[452,7043,7044],{"class":923}," a+x",[452,7046,7047],{"class":923}," skript.sh",[452,7049,7050],{"class":1200}," # Alle: Ausführen hinzufügen\n",[452,7052,7053],{"class":915,"line":1234},[452,7054,1194],{"emptyLinePlaceholder":1193},[452,7056,7057,7059,7062,7065],{"class":915,"line":1239},[452,7058,6992],{"class":919},[452,7060,7061],{"class":923}," u=rwx,g=rx,o=",[452,7063,7064],{"class":923}," datei",[452,7066,7067],{"class":1200}," # Explizit setzen\n",[2652,7069,7071],{"id":7070},"oktalnotation","Oktalnotation:",[904,7073,7075],{"className":906,"code":7074,"language":908,"meta":909,"style":909},"chmod 755 datei # rwxr-xr-x\n\nchmod 644 datei # rw-r--r--\n\nchmod 700 datei # rwx------\n\nchmod 000 datei # ---------\n\n",[911,7076,7077,7089,7093,7105,7109,7121,7125],{"__ignoreMap":909},[452,7078,7079,7081,7084,7086],{"class":915,"line":916},[452,7080,6992],{"class":919},[452,7082,7083],{"class":975}," 755",[452,7085,7064],{"class":923},[452,7087,7088],{"class":1200}," # rwxr-xr-x\n",[452,7090,7091],{"class":915,"line":1190},[452,7092,1194],{"emptyLinePlaceholder":1193},[452,7094,7095,7097,7100,7102],{"class":915,"line":1197},[452,7096,6992],{"class":919},[452,7098,7099],{"class":975}," 644",[452,7101,7064],{"class":923},[452,7103,7104],{"class":1200}," # rw-r--r--\n",[452,7106,7107],{"class":915,"line":1204},[452,7108,1194],{"emptyLinePlaceholder":1193},[452,7110,7111,7113,7116,7118],{"class":915,"line":1209},[452,7112,6992],{"class":919},[452,7114,7115],{"class":975}," 700",[452,7117,7064],{"class":923},[452,7119,7120],{"class":1200}," # rwx------\n",[452,7122,7123],{"class":915,"line":1223},[452,7124,1194],{"emptyLinePlaceholder":1193},[452,7126,7127,7129,7132,7134],{"class":915,"line":1228},[452,7128,6992],{"class":919},[452,7130,7131],{"class":975}," 000",[452,7133,7064],{"class":923},[452,7135,7136],{"class":1200}," # ---------\n",[2652,7138,7140],{"id":7139},"häufige-berechtigungssätze","Häufige Berechtigungssätze:",[15,7142,7143,7162],{},[18,7144,7145],{},[21,7146,7147,7152,7157],{},[24,7148,7149],{},[27,7150,7151],{},"Oktal",[24,7153,7154],{},[27,7155,7156],{},"Symbolisch",[24,7158,7159],{},[27,7160,7161],{},"Verwendung",[41,7163,7164,7175,7186,7197,7208],{},[21,7165,7166,7169,7172],{},[46,7167,7168],{},"755",[46,7170,7171],{},"rwxr-xr-x",[46,7173,7174],{},"Programme, Verzeichnisse",[21,7176,7177,7180,7183],{},[46,7178,7179],{},"644",[46,7181,7182],{},"rw-r--r--",[46,7184,7185],{},"Normale Dateien",[21,7187,7188,7191,7194],{},[46,7189,7190],{},"700",[46,7192,7193],{},"rwx------",[46,7195,7196],{},"Private Verzeichnisse, .ssh\u002F",[21,7198,7199,7202,7205],{},[46,7200,7201],{},"600",[46,7203,7204],{},"rw-------",[46,7206,7207],{},"Private Dateien, SSH-Keys",[21,7209,7210,7213,7216],{},[46,7211,7212],{},"777",[46,7214,7215],{},"rwxrwxrwx",[46,7217,7218],{},"Unsicher! Alle Rechte",[257,7220,7222],{"id":7221},"chown-chgrp-besitzergruppe-ändern","chown \u002F chgrp – Besitzer\u002FGruppe ändern",[904,7224,7226],{"className":906,"code":7225,"language":908,"meta":909,"style":909},"chown benutzer:gruppe datei # Besitzer und Gruppe ändern\n\nchown benutzer datei # Nur Besitzer ändern\n\nchgrp gruppe datei # Nur Gruppe ändern\n\n",[911,7227,7228,7241,7245,7257,7261],{"__ignoreMap":909},[452,7229,7230,7233,7236,7238],{"class":915,"line":916},[452,7231,7232],{"class":919},"chown",[452,7234,7235],{"class":923}," benutzer:gruppe",[452,7237,7064],{"class":923},[452,7239,7240],{"class":1200}," # Besitzer und Gruppe ändern\n",[452,7242,7243],{"class":915,"line":1190},[452,7244,1194],{"emptyLinePlaceholder":1193},[452,7246,7247,7249,7252,7254],{"class":915,"line":1197},[452,7248,7232],{"class":919},[452,7250,7251],{"class":923}," benutzer",[452,7253,7064],{"class":923},[452,7255,7256],{"class":1200}," # Nur Besitzer ändern\n",[452,7258,7259],{"class":915,"line":1204},[452,7260,1194],{"emptyLinePlaceholder":1193},[452,7262,7263,7266,7269,7271],{"class":915,"line":1209},[452,7264,7265],{"class":919},"chgrp",[452,7267,7268],{"class":923}," gruppe",[452,7270,7064],{"class":923},[452,7272,7273],{"class":1200}," # Nur Gruppe ändern\n",[257,7275,7277],{"id":7276},"spezialberechtigungen","Spezialberechtigungen",[15,7279,7280,7302],{},[18,7281,7282],{},[21,7283,7284,7289,7293,7298],{},[24,7285,7286],{},[27,7287,7288],{},"Spezialbit",[24,7290,7291],{},[27,7292,7151],{},[24,7294,7295],{},[27,7296,7297],{},"Setzen",[24,7299,7300],{},[27,7301,39],{},[41,7303,7304,7318,7332],{},[21,7305,7306,7309,7312,7315],{},[46,7307,7308],{},"SetUID",[46,7310,7311],{},"4000",[46,7313,7314],{},"chmod u+s datei",[46,7316,7317],{},"Programm läuft mit Rechten des Dateieigentümers (z.B. \u002Fusr\u002Fbin\u002Fpasswd)",[21,7319,7320,7323,7326,7329],{},[46,7321,7322],{},"SetGID",[46,7324,7325],{},"2000",[46,7327,7328],{},"chmod g+s verz",[46,7330,7331],{},"Neue Dateien erben Gruppe des Verzeichnisses",[21,7333,7334,7337,7340,7343],{},[46,7335,7336],{},"Sticky Bit",[46,7338,7339],{},"1000",[46,7341,7342],{},"chmod +t verz",[46,7344,7345],{},"Nur Eigentümer darf eigene Dateien löschen (z.B. \u002Ftmp)",[2652,7347,7349],{"id":7348},"setuid-detailbeschreibung","SetUID – Detailbeschreibung",[992,7351,7352,7363,7374,7384],{},[995,7353,7354,7355,7358,7359,7362],{},"Gesetzt auf eine ",[27,7356,7357],{},"ausführbare Datei",": Programm läuft immer mit der UID des ",[27,7360,7361],{},"Datei-Eigentümers",", egal welcher Benutzer es startet",[995,7364,7365,7366,7369,7370,7373],{},"Klassisches Beispiel: ",[27,7367,7368],{},"\u002Fusr\u002Fbin\u002Fpasswd"," → muss ",[27,7371,7372],{},"\u002Fetc\u002Fshadow"," (Besitzer: root) schreiben, darf aber von jedem Benutzer aufgerufen werden",[995,7375,7376,7377,7380,7381],{},"Auf ",[27,7378,7379],{},"Verzeichnisse",": In den meisten Linux-Distros ",[27,7382,7383],{},"keine Wirkung",[995,7385,7386,7389],{},[27,7387,7388],{},"Sicherheitsrisiko:"," SetUID-root-Programme sind ein beliebtes Angriffsziel (Privilege Escalation)",[904,7391,7393],{"className":906,"code":7392,"language":908,"meta":909,"style":909},"chmod u+s \u002Fusr\u002Fbin\u002Fmeinprog # SetUID setzen\n\nchmod 4755 \u002Fusr\u002Fbin\u002Fmeinprog # Oktal: 4 + 755\n\n",[911,7394,7395,7408,7412],{"__ignoreMap":909},[452,7396,7397,7399,7402,7405],{"class":915,"line":916},[452,7398,6992],{"class":919},[452,7400,7401],{"class":923}," u+s",[452,7403,7404],{"class":923}," \u002Fusr\u002Fbin\u002Fmeinprog",[452,7406,7407],{"class":1200}," # SetUID setzen\n",[452,7409,7410],{"class":915,"line":1190},[452,7411,1194],{"emptyLinePlaceholder":1193},[452,7413,7414,7416,7419,7421],{"class":915,"line":1197},[452,7415,6992],{"class":919},[452,7417,7418],{"class":975}," 4755",[452,7420,7404],{"class":923},[452,7422,7423],{"class":1200}," # Oktal: 4 + 755\n",[2652,7425,7427],{"id":7426},"setgid-detailbeschreibung","SetGID – Detailbeschreibung",[992,7429,7430,7437],{},[995,7431,7354,7432,7434,7435],{},[27,7433,7357],{},": Programm läuft mit der GID des ",[27,7436,7361],{},[995,7438,7439,7440,7442,7443,7446],{},"Gesetzt auf ein ",[27,7441,6939],{},": Alle neu erstellten Dateien und Unterverzeichnisse erben automatisch die ",[27,7444,7445],{},"Gruppe des Verzeichnisses"," (sehr nützlich für Team-Ordner!)",[904,7448,7450],{"className":906,"code":7449,"language":908,"meta":909,"style":909},"chmod g+s \u002Fsrv\u002Fteam\u002F # SetGID auf Verzeichnis\n\nchmod 2755 \u002Fsrv\u002Fteam\u002F # Oktal: 2 + 755\n\n",[911,7451,7452,7465,7469],{"__ignoreMap":909},[452,7453,7454,7456,7459,7462],{"class":915,"line":916},[452,7455,6992],{"class":919},[452,7457,7458],{"class":923}," g+s",[452,7460,7461],{"class":923}," \u002Fsrv\u002Fteam\u002F",[452,7463,7464],{"class":1200}," # SetGID auf Verzeichnis\n",[452,7466,7467],{"class":915,"line":1190},[452,7468,1194],{"emptyLinePlaceholder":1193},[452,7470,7471,7473,7476,7478],{"class":915,"line":1197},[452,7472,6992],{"class":919},[452,7474,7475],{"class":975}," 2755",[452,7477,7461],{"class":923},[452,7479,7480],{"class":1200}," # Oktal: 2 + 755\n",[2652,7482,7484],{"id":7483},"sticky-bit-detailbeschreibung","Sticky Bit – Detailbeschreibung",[992,7486,7487,7496,7503],{},[995,7488,7439,7489,7491,7492,7495],{},[27,7490,6939],{},": Jeder kann Dateien erstellen, aber nur der ",[27,7493,7494],{},"Eigentümer der Datei"," (oder root) darf diese löschen\u002Fumbenennen",[995,7497,7498,7499,7502],{},"Wichtigstes Beispiel: ",[27,7500,7501],{},"\u002Ftmp"," – alle Benutzer können dort Dateien anlegen, aber niemand darf fremde Dateien löschen",[995,7504,7376,7505,7508,7509],{},[27,7506,7507],{},"Dateien",": Historisch bedeutete es „Programm im Swap behalten\" – heute in Linux ",[27,7510,7511],{},"keine Funktion mehr",[904,7513,7515],{"className":906,"code":7514,"language":908,"meta":909,"style":909},"chmod +t \u002Ftmp\u002Fgemeinsam\u002F # Sticky Bit setzen\n\nchmod 1777 \u002Ftmp\u002F # Oktal: 1 + 777 ← Typisch für \u002Ftmp\n\n",[911,7516,7517,7530,7534],{"__ignoreMap":909},[452,7518,7519,7521,7524,7527],{"class":915,"line":916},[452,7520,6992],{"class":919},[452,7522,7523],{"class":923}," +t",[452,7525,7526],{"class":923}," \u002Ftmp\u002Fgemeinsam\u002F",[452,7528,7529],{"class":1200}," # Sticky Bit setzen\n",[452,7531,7532],{"class":915,"line":1190},[452,7533,1194],{"emptyLinePlaceholder":1193},[452,7535,7536,7538,7541,7544],{"class":915,"line":1197},[452,7537,6992],{"class":919},[452,7539,7540],{"class":975}," 1777",[452,7542,7543],{"class":923}," \u002Ftmp\u002F",[452,7545,7546],{"class":1200}," # Oktal: 1 + 777 ← Typisch für \u002Ftmp\n",[898,7548,7549],{},"Verifizieren:",[904,7551,7553],{"className":906,"code":7552,"language":908,"meta":909,"style":909},"ls -ld \u002Ftmp\n\n# drwxrwxrwt → das 't' am Ende = Sticky Bit gesetzt\n\nstat \u002Ftmp\n\n",[911,7554,7555,7565,7569,7574,7578],{"__ignoreMap":909},[452,7556,7557,7559,7562],{"class":915,"line":916},[452,7558,338],{"class":919},[452,7560,7561],{"class":975}," -ld",[452,7563,7564],{"class":923}," \u002Ftmp\n",[452,7566,7567],{"class":915,"line":1190},[452,7568,1194],{"emptyLinePlaceholder":1193},[452,7570,7571],{"class":915,"line":1197},[452,7572,7573],{"class":1200},"# drwxrwxrwt → das 't' am Ende = Sticky Bit gesetzt\n",[452,7575,7576],{"class":915,"line":1204},[452,7577,1194],{"emptyLinePlaceholder":1193},[452,7579,7580,7583],{"class":915,"line":1209},[452,7581,7582],{"class":975},"stat",[452,7584,7564],{"class":923},[257,7586,7588],{"id":7587},"vollständige-übersicht-was-ls-l-bei-berechtigungen-anzeigt","Vollständige Übersicht: Was ls -l bei Berechtigungen anzeigt",[898,7590,7591,7592,7595],{},"Das Berechtigungsfeld hat ",[27,7593,7594],{},"10 Zeichen",": 1 Dateityp + 3×3 Rechte (user\u002Fgroup\u002Fothers)",[898,7597,7598,7599,7601,7602,7604,7605,7607,7608,7610,7611,7613,7614,7616,7617,7619],{},"Position: 1 234 567 890",[1325,7600],{},"\n│ ├─┤ ├─┤ ├─┤",[1325,7603],{},"\nBeispiel: d rwx r-s r-t",[1325,7606],{},"\n│ │ │ │",[1325,7609],{},"\n│ │ │ └── Others",[1325,7612],{},"\n│ │ └──────── Group",[1325,7615],{},"\n│ └────────────── User",[1325,7618],{},"\n└─────────────────── Dateityp",[2652,7621,7623],{"id":7622},"position-1-dateityp","Position 1: Dateityp",[15,7625,7626,7640],{},[18,7627,7628],{},[21,7629,7630,7635],{},[24,7631,7632],{},[27,7633,7634],{},"Zeichen",[24,7636,7637],{},[27,7638,7639],{},"Dateityp",[41,7641,7642,7649,7656,7664,7672,7680,7687],{},[21,7643,7644,7646],{},[46,7645,6552],{},[46,7647,7648],{},"Reguläre Datei",[21,7650,7651,7653],{},[46,7652,4102],{},[46,7654,7655],{},"Verzeichnis (directory)",[21,7657,7658,7661],{},[46,7659,7660],{},"l",[46,7662,7663],{},"Symbolischer Link (symlink)",[21,7665,7666,7669],{},[46,7667,7668],{},"b",[46,7670,7671],{},"Block-Gerätedatei (z.B. Festplatte)",[21,7673,7674,7677],{},[46,7675,7676],{},"c",[46,7678,7679],{},"Zeichen-Gerätedatei (z.B. Terminal)",[21,7681,7682,7684],{},[46,7683,898],{},[46,7685,7686],{},"Named Pipe (FIFO)",[21,7688,7689,7692],{},[46,7690,7691],{},"s",[46,7693,7694],{},"Socket",[2652,7696,7698],{"id":7697},"positionen-24-user-57-group-810-others-basisrechte","Positionen 2–4 (User), 5–7 (Group), 8–10 (Others): Basisrechte",[15,7700,7701,7718],{},[18,7702,7703],{},[21,7704,7705,7709,7714],{},[24,7706,7707],{},[27,7708,7634],{},[24,7710,7711],{},[27,7712,7713],{},"Position",[24,7715,7716],{},[27,7717,417],{},[41,7719,7720,7731,7740,7751,7760,7771],{},[21,7721,7722,7725,7728],{},[46,7723,7724],{},"r",[46,7726,7727],{},"1. Stelle",[46,7729,7730],{},"Lesen erlaubt",[21,7732,7733,7735,7737],{},[46,7734,6552],{},[46,7736,7727],{},[46,7738,7739],{},"Lesen verboten",[21,7741,7742,7745,7748],{},[46,7743,7744],{},"w",[46,7746,7747],{},"2. Stelle",[46,7749,7750],{},"Schreiben erlaubt",[21,7752,7753,7755,7757],{},[46,7754,6552],{},[46,7756,7747],{},[46,7758,7759],{},"Schreiben verboten",[21,7761,7762,7765,7768],{},[46,7763,7764],{},"x",[46,7766,7767],{},"3. Stelle",[46,7769,7770],{},"Ausführen erlaubt",[21,7772,7773,7775,7777],{},[46,7774,6552],{},[46,7776,7767],{},[46,7778,7779],{},"Ausführen verboten",[2652,7781,7783],{"id":7782},"position-4-user-7-group-10-others-spezialbit-überlagerung","Position 4 (User), 7 (Group), 10 (Others): Spezialbit-Überlagerung",[15,7785,7786,7802],{},[18,7787,7788],{},[21,7789,7790,7794,7798],{},[24,7791,7792],{},[27,7793,7634],{},[24,7795,7796],{},[27,7797,7713],{},[24,7799,7800],{},[27,7801,417],{},[41,7803,7804,7814,7824,7834,7843,7854],{},[21,7805,7806,7808,7811],{},[46,7807,7691],{},[46,7809,7810],{},"User (Pos. 4)",[46,7812,7813],{},"SetUID gesetzt und x vorhanden",[21,7815,7816,7819,7821],{},[46,7817,7818],{},"S",[46,7820,7810],{},[46,7822,7823],{},"SetUID gesetzt, aber kein x (unüblich!)",[21,7825,7826,7828,7831],{},[46,7827,7691],{},[46,7829,7830],{},"Group (Pos. 7)",[46,7832,7833],{},"SetGID gesetzt und x vorhanden",[21,7835,7836,7838,7840],{},[46,7837,7818],{},[46,7839,7830],{},[46,7841,7842],{},"SetGID gesetzt, aber kein x",[21,7844,7845,7848,7851],{},[46,7846,7847],{},"t",[46,7849,7850],{},"Others (Pos. 10)",[46,7852,7853],{},"Sticky Bit gesetzt und x vorhanden",[21,7855,7856,7859,7861],{},[46,7857,7858],{},"T",[46,7860,7850],{},[46,7862,7863],{},"Sticky Bit gesetzt, aber kein x (selten)",[898,7865,7866,7872,7873,7872,7881,7885,7886,7891,7872,7900,7885,7904,7909],{},[7867,7868,7869],"em",{},[27,7870,7871],{},"Merkregel:"," ",[7867,7874,7875,7876,7880],{},"Kleinbuchstabe (",[27,7877,7878],{},[27,7879,7691],{},",",[7867,7882,7883],{},[27,7884,7847],{},"*) = Spezialbit* ",[7867,7887,7888],{},[27,7889,7890],{},"UND",[7867,7892,7893,7895,7896,7880],{},[27,7894,7764],{},"**. Großbuchstabe (",[27,7897,7898],{},[27,7899,7818],{},[7867,7901,7902],{},[27,7903,7858],{},[7867,7905,7906],{},[27,7907,7908],{},"OHNE",[7867,7910,7911,7913],{},[27,7912,7764],{},"**.",[2652,7915,7917],{"id":7916},"alle-möglichen-zeichen-auf-einen-blick","Alle möglichen Zeichen auf einen Blick",[898,7919,7920],{},"Dateityp: - d l b c p s",[898,7922,7923,7924,7926,7927,7929,7930,7932],{},"User: r w x s S",[1325,7925],{},"\nGroup: r w x s S",[1325,7928],{},"\nOthers: r w x t T",[1325,7931],{},"\n(- für jeweils \"nicht gesetzt\")",[2652,7934,7936],{"id":7935},"praxisbeispiele-mit-ls-l","Praxisbeispiele mit ls -l",[15,7938,7939,7952],{},[18,7940,7941],{},[21,7942,7943,7948],{},[24,7944,7945],{},[27,7946,7947],{},"Ausgabe von ls -l",[24,7949,7950],{},[27,7951,417],{},[41,7953,7954,7962,7970,7978,7986,7994,8002,8010,8018],{},[21,7955,7956,7959],{},[46,7957,7958],{},"-rw-r--r--",[46,7960,7961],{},"Normale Datei: User lesen+schreiben, Group+Others nur lesen",[21,7963,7964,7967],{},[46,7965,7966],{},"-rwxr-xr-x",[46,7968,7969],{},"Programm: User alle Rechte, Group+Others lesen+ausführen",[21,7971,7972,7975],{},[46,7973,7974],{},"-rwx------",[46,7976,7977],{},"Private Datei: nur Owner alle Rechte",[21,7979,7980,7983],{},[46,7981,7982],{},"drwxr-xr-x",[46,7984,7985],{},"Verzeichnis: Standard (755)",[21,7987,7988,7991],{},[46,7989,7990],{},"drwxrwxrwt",[46,7992,7993],{},"\u002Ftmp: Alle Rechte + Sticky Bit (1777)",[21,7995,7996,7999],{},[46,7997,7998],{},"-rwsr-xr-x",[46,8000,8001],{},"SetUID gesetzt (z.B. \u002Fusr\u002Fbin\u002Fpasswd)",[21,8003,8004,8007],{},[46,8005,8006],{},"drwxr-sr-x",[46,8008,8009],{},"SetGID auf Verzeichnis (Gruppe wird vererbt)",[21,8011,8012,8015],{},[46,8013,8014],{},"-rwSr--r--",[46,8016,8017],{},"SetUID, aber kein execute-Bit → sinnlos\u002FFehler!",[21,8019,8020,8023],{},[46,8021,8022],{},"lrwxrwxrwx",[46,8024,8025],{},"Symbolischer Link (Rechte immer 777)",[2652,8027,8029],{"id":8028},"oktalwerte-der-spezialbits","Oktalwerte der Spezialbits",[15,8031,8032,8048],{},[18,8033,8034],{},[21,8035,8036,8040,8044],{},[24,8037,8038],{},[27,8039,7151],{},[24,8041,8042],{},[27,8043,417],{},[24,8045,8046],{},[27,8047,422],{},[41,8049,8050,8060,8070,8080,8091,8102],{},[21,8051,8052,8055,8057],{},[46,8053,8054],{},"4xxx",[46,8056,7308],{},[46,8058,8059],{},"chmod 4755 datei → -rwsr-xr-x",[21,8061,8062,8065,8067],{},[46,8063,8064],{},"2xxx",[46,8066,7322],{},[46,8068,8069],{},"chmod 2755 verz\u002F → drwxr-sr-x",[21,8071,8072,8075,8077],{},[46,8073,8074],{},"1xxx",[46,8076,7336],{},[46,8078,8079],{},"chmod 1777 \u002Ftmp → drwxrwxrwt",[21,8081,8082,8085,8088],{},[46,8083,8084],{},"6xxx",[46,8086,8087],{},"SetUID + SetGID",[46,8089,8090],{},"chmod 6755 datei",[21,8092,8093,8096,8099],{},[46,8094,8095],{},"7xxx",[46,8097,8098],{},"Alle drei",[46,8100,8101],{},"chmod 7777 datei (sehr selten)",[21,8103,8104,8107,8110],{},[46,8105,8106],{},"0xxx",[46,8108,8109],{},"Keine Spezialbits",[46,8111,8112],{},"chmod 0755 datei (normales 755)",[2652,8114,8116],{"id":8115},"spezialberechtigungen-prüfen","Spezialberechtigungen prüfen:",[10,8118,8120],{"id":8119},"alle-setuid-dateien-auf-dem-system-finden","Alle SetUID-Dateien auf dem System finden:",[904,8122,8124],{"className":906,"code":8123,"language":908,"meta":909,"style":909},"find \u002F -perm -4000 -type f 2>\u002Fdev\u002Fnull\n\n# Alle SetGID-Dateien finden:\n\nfind \u002F -perm -2000 -type f 2>\u002Fdev\u002Fnull\n\n# Alle Verzeichnisse mit Sticky Bit:\n\nfind \u002F -perm -1000 -type d 2>\u002Fdev\u002Fnull\n\n# Detailansicht mit stat:\n\nstat \u002Ftmp\n\nstat \u002Fusr\u002Fbin\u002Fpasswd\n\n",[911,8125,8126,8149,8153,8158,8162,8181,8185,8190,8194,8214,8218,8223,8227,8233,8237],{"__ignoreMap":909},[452,8127,8128,8130,8133,8136,8139,8141,8143,8146],{"class":915,"line":916},[452,8129,3264],{"class":919},[452,8131,8132],{"class":923}," \u002F",[452,8134,8135],{"class":975}," -perm",[452,8137,8138],{"class":975}," -4000",[452,8140,3488],{"class":975},[452,8142,3515],{"class":923},[452,8144,8145],{"class":1473}," 2>",[452,8147,8148],{"class":923},"\u002Fdev\u002Fnull\n",[452,8150,8151],{"class":915,"line":1190},[452,8152,1194],{"emptyLinePlaceholder":1193},[452,8154,8155],{"class":915,"line":1197},[452,8156,8157],{"class":1200},"# Alle SetGID-Dateien finden:\n",[452,8159,8160],{"class":915,"line":1204},[452,8161,1194],{"emptyLinePlaceholder":1193},[452,8163,8164,8166,8168,8170,8173,8175,8177,8179],{"class":915,"line":1209},[452,8165,3264],{"class":919},[452,8167,8132],{"class":923},[452,8169,8135],{"class":975},[452,8171,8172],{"class":975}," -2000",[452,8174,3488],{"class":975},[452,8176,3515],{"class":923},[452,8178,8145],{"class":1473},[452,8180,8148],{"class":923},[452,8182,8183],{"class":915,"line":1223},[452,8184,1194],{"emptyLinePlaceholder":1193},[452,8186,8187],{"class":915,"line":1228},[452,8188,8189],{"class":1200},"# Alle Verzeichnisse mit Sticky Bit:\n",[452,8191,8192],{"class":915,"line":1234},[452,8193,1194],{"emptyLinePlaceholder":1193},[452,8195,8196,8198,8200,8202,8205,8207,8210,8212],{"class":915,"line":1239},[452,8197,3264],{"class":919},[452,8199,8132],{"class":923},[452,8201,8135],{"class":975},[452,8203,8204],{"class":975}," -1000",[452,8206,3488],{"class":975},[452,8208,8209],{"class":923}," d",[452,8211,8145],{"class":1473},[452,8213,8148],{"class":923},[452,8215,8216],{"class":915,"line":1253},[452,8217,1194],{"emptyLinePlaceholder":1193},[452,8219,8220],{"class":915,"line":1258},[452,8221,8222],{"class":1200},"# Detailansicht mit stat:\n",[452,8224,8225],{"class":915,"line":1264},[452,8226,1194],{"emptyLinePlaceholder":1193},[452,8228,8229,8231],{"class":915,"line":1269},[452,8230,7582],{"class":975},[452,8232,7564],{"class":923},[452,8234,8235],{"class":915,"line":1558},[452,8236,1194],{"emptyLinePlaceholder":1193},[452,8238,8239,8241],{"class":915,"line":1563},[452,8240,7582],{"class":975},[452,8242,8243],{"class":923}," \u002Fusr\u002Fbin\u002Fpasswd\n",[257,8245,8247],{"id":8246},"umask-standard-berechtigungen","umask – Standard-Berechtigungen",[898,8249,8250,8253,8254,8257,8258,8261],{},[27,8251,8252],{},"umask"," (user file creation mask) legt fest, welche Rechte beim Erstellen neuer Dateien und Verzeichnisse ",[27,8255,8256],{},"weggenommen"," werden. Es ist eine ",[27,8259,8260],{},"Maske",", keine direkte Rechtevergabe.",[2652,8263,8265],{"id":8264},"berechnung","Berechnung",[898,8267,8268],{},"Neue Rechte = Maximalrechte - umask",[15,8270,8271,8285],{},[18,8272,8273],{},[21,8274,8275,8277,8281],{},[24,8276],{},[24,8278,8279],{},[27,8280,6934],{},[24,8282,8283],{},[27,8284,6939],{},[41,8286,8287,8303,8317],{},[21,8288,8289,8292,8298],{},[46,8290,8291],{},"Maximalrechte",[46,8293,8294,8297],{},[27,8295,8296],{},"666"," (rw-rw-rw-)",[46,8299,8300,8302],{},[27,8301,7212],{}," (rwxrwxrwx)",[21,8304,8305,8308,8313],{},[46,8306,8307],{},"umask (Standard)",[46,8309,8310],{},[27,8311,8312],{},"022",[46,8314,8315],{},[27,8316,8312],{},[21,8318,8319,8324,8329],{},[46,8320,8321],{},[27,8322,8323],{},"Ergebnis",[46,8325,8326,8328],{},[27,8327,7179],{}," (rw-r--r--)",[46,8330,8331,8333],{},[27,8332,7168],{}," (rwxr-xr-x)",[898,8335,8336,8341,8343,7872,8346,7872,8351,7872,8359,7872,8363,7872,8366,8370],{},[7867,8337,8338],{},[27,8339,8340],{},"Warum haben Dateien maximal 666?",[1325,8342],{},[7867,8344,8345],{},"Linux vergibt",[7867,8347,8348],{},[27,8349,8350],{},"niemals",[7867,8352,8353,8354,8358],{},"automatisch das execute-Bit (",[27,8355,8356],{},[27,8357,7764],{},") auf neue Dateien, da eine normale Datei kein Programm ist. Verzeichnisse brauchen",[7867,8360,8361],{},[27,8362,7764],{},[7867,8364,8365],{},"um betreten werden zu können, daher Maximal",[7867,8367,8368],{},[27,8369,7212],{},"*.*",[2652,8372,8374],{"id":8373},"wichtiger-hinweis-zur-berechnung","Wichtiger Hinweis zur Berechnung",[898,8376,8377,8378,8381],{},"Die Subtraktion ist ",[27,8379,8380],{},"bitweise"," (nicht arithmetisch):",[898,8383,8384,8385],{},"Beispiel: ",[27,8386,8387],{},"umask 027",[898,8389,8390],{},"Datei: 666 (rw-rw-rw-)",[904,8392,8394],{"className":906,"code":8393,"language":908,"meta":909,"style":909},"umask: 027 (----w-rwx) → wird weggenommen\n",[911,8395,8396],{"__ignoreMap":909},[452,8397,8398,8400,8403,8406],{"class":915,"line":916},[452,8399,8252],{"class":975},[452,8401,8402],{"class":923},":",[452,8404,8405],{"class":975}," 027",[452,8407,8408],{"class":1298}," (----w-rwx) → wird weggenommen\n",[898,8410,8411],{},"Ergebnis: 640 (rw-r-----)",[898,8413,8414],{},"Verzeichnis:",[898,8416,8417],{},"Verzeichnis: 777 (rwxrwxrwx)",[904,8419,8420],{"className":906,"code":8393,"language":908,"meta":909,"style":909},[911,8421,8422],{"__ignoreMap":909},[452,8423,8424,8426,8428,8430],{"class":915,"line":916},[452,8425,8252],{"class":975},[452,8427,8402],{"class":923},[452,8429,8405],{"class":975},[452,8431,8408],{"class":1298},[898,8433,8434],{},"Ergebnis: 750 (rwxr-x---)",[2652,8436,8438],{"id":8437},"alle-wichtigen-umask-werte","Alle wichtigen umask-Werte",[15,8440,8441,8461],{},[18,8442,8443],{},[21,8444,8445,8449,8453,8457],{},[24,8446,8447],{},[27,8448,8252],{},[24,8450,8451],{},[27,8452,6934],{},[24,8454,8455],{},[27,8456,6939],{},[24,8458,8459],{},[27,8460,7161],{},[41,8462,8463,8477,8491,8504,8518,8532],{},[21,8464,8465,8468,8471,8474],{},[46,8466,8467],{},"000",[46,8469,8470],{},"666 (rw-rw-rw-)",[46,8472,8473],{},"777 (rwxrwxrwx)",[46,8475,8476],{},"Alle Rechte (unsicher!)",[21,8478,8479,8482,8485,8488],{},[46,8480,8481],{},"002",[46,8483,8484],{},"664 (rw-rw-r--)",[46,8486,8487],{},"775 (rwxrwxr-x)",[46,8489,8490],{},"Gruppenarbeit",[21,8492,8493,8495,8498,8501],{},[46,8494,8312],{},[46,8496,8497],{},"644 (rw-r--r--)",[46,8499,8500],{},"755 (rwxr-xr-x)",[46,8502,8503],{},"Standard für normale Benutzer",[21,8505,8506,8509,8512,8515],{},[46,8507,8508],{},"027",[46,8510,8511],{},"640 (rw-r-----)",[46,8513,8514],{},"750 (rwxr-x---)",[46,8516,8517],{},"Erhöhte Sicherheit (Other kein Zugriff)",[21,8519,8520,8523,8526,8529],{},[46,8521,8522],{},"077",[46,8524,8525],{},"600 (rw-------)",[46,8527,8528],{},"700 (rwx------)",[46,8530,8531],{},"Private Dateien (nur Eigentümer)",[21,8533,8534,8537,8540,8542],{},[46,8535,8536],{},"177",[46,8538,8539],{},"400 (r--------)",[46,8541,8525],{},[46,8543,8544],{},"Schreibgeschützte private Dateien",[2652,8546,8548],{"id":8547},"befehle","Befehle",[904,8550,8552],{"className":906,"code":8551,"language":908,"meta":909,"style":909},"umask # Aktuelle umask anzeigen (oktal)\numask -S # Symbolische Anzeige (z.B. u=rwx,g=rx,o=rx)\numask 022 # umask für aktuelle Shell-Sitzung setzen\numask 027 # Strengere umask setzen\n\n",[911,8553,8554,8561,8571,8581],{"__ignoreMap":909},[452,8555,8556,8558],{"class":915,"line":916},[452,8557,8252],{"class":975},[452,8559,8560],{"class":1200}," # Aktuelle umask anzeigen (oktal)\n",[452,8562,8563,8565,8568],{"class":915,"line":1190},[452,8564,8252],{"class":975},[452,8566,8567],{"class":975}," -S",[452,8569,8570],{"class":1200}," # Symbolische Anzeige (z.B. u=rwx,g=rx,o=rx)\n",[452,8572,8573,8575,8578],{"class":915,"line":1197},[452,8574,8252],{"class":975},[452,8576,8577],{"class":975}," 022",[452,8579,8580],{"class":1200}," # umask für aktuelle Shell-Sitzung setzen\n",[452,8582,8583,8585,8587],{"class":915,"line":1204},[452,8584,8252],{"class":975},[452,8586,8405],{"class":975},[452,8588,8589],{"class":1200}," # Strengere umask setzen\n",[2652,8591,8593],{"id":8592},"umask-dauerhaft-setzen","umask dauerhaft setzen",[15,8595,8596,8609],{},[18,8597,8598],{},[21,8599,8600,8604],{},[24,8601,8602],{},[27,8603,6934],{},[24,8605,8606],{},[27,8607,8608],{},"Gültig für",[41,8610,8611,8619,8627,8635],{},[21,8612,8613,8616],{},[46,8614,8615],{},"~\u002F.bashrc",[46,8617,8618],{},"Normaler Benutzer (interaktive Shell)",[21,8620,8621,8624],{},[46,8622,8623],{},"~\u002F.profile",[46,8625,8626],{},"Normaler Benutzer (Login-Shell)",[21,8628,8629,8632],{},[46,8630,8631],{},"\u002Fetc\u002Fprofile",[46,8633,8634],{},"Alle Benutzer (System-weit)",[21,8636,8637,8640],{},[46,8638,8639],{},"\u002Fetc\u002Flogin.defs",[46,8641,8642],{},"System-Standard (UMASK-Eintrag)",[10,8644,8646],{"id":8645},"in-bashrc-eintragen","In ~\u002F.bashrc eintragen:",[898,8648,8649],{},"umask 022",[2652,8651,8653],{"id":8652},"praxisbeispiel-warum-umask-wichtig-ist","Praxisbeispiel: Warum umask wichtig ist",[10,8655,8657],{"id":8656},"ohne-umask-022-standard","Ohne umask 022 (Standard):",[904,8659,8661],{"className":906,"code":8660,"language":908,"meta":909,"style":909},"touch neue_datei.txt → -rw-r--r-- (644)\n\nmkdir neuer_ordner\u002F → drwxr-xr-x (755)\n\n# Mit umask 077 (privat):\n\numask 077\n\ntouch geheime_datei.txt → -rw------- (600)\n\nmkdir privater_ordner\u002F → drwx------ (700)\n\n",[911,8662,8663,8679,8683,8699,8703,8708,8712,8719,8723,8738,8742],{"__ignoreMap":909},[452,8664,8665,8667,8670,8673,8676],{"class":915,"line":916},[452,8666,2493],{"class":919},[452,8668,8669],{"class":923}," neue_datei.txt",[452,8671,8672],{"class":923}," →",[452,8674,8675],{"class":975}," -rw-r--r--",[452,8677,8678],{"class":1298}," (644)\n",[452,8680,8681],{"class":915,"line":1190},[452,8682,1194],{"emptyLinePlaceholder":1193},[452,8684,8685,8688,8691,8693,8696],{"class":915,"line":1197},[452,8686,8687],{"class":919},"mkdir",[452,8689,8690],{"class":923}," neuer_ordner\u002F",[452,8692,8672],{"class":923},[452,8694,8695],{"class":923}," drwxr-xr-x",[452,8697,8698],{"class":1298}," (755)\n",[452,8700,8701],{"class":915,"line":1204},[452,8702,1194],{"emptyLinePlaceholder":1193},[452,8704,8705],{"class":915,"line":1209},[452,8706,8707],{"class":1200},"# Mit umask 077 (privat):\n",[452,8709,8710],{"class":915,"line":1223},[452,8711,1194],{"emptyLinePlaceholder":1193},[452,8713,8714,8716],{"class":915,"line":1228},[452,8715,8252],{"class":975},[452,8717,8718],{"class":975}," 077\n",[452,8720,8721],{"class":915,"line":1234},[452,8722,1194],{"emptyLinePlaceholder":1193},[452,8724,8725,8727,8730,8732,8735],{"class":915,"line":1239},[452,8726,2493],{"class":919},[452,8728,8729],{"class":923}," geheime_datei.txt",[452,8731,8672],{"class":923},[452,8733,8734],{"class":975}," -rw-------",[452,8736,8737],{"class":1298}," (600)\n",[452,8739,8740],{"class":915,"line":1253},[452,8741,1194],{"emptyLinePlaceholder":1193},[452,8743,8744,8746,8749,8751,8754],{"class":915,"line":1258},[452,8745,8687],{"class":919},[452,8747,8748],{"class":923}," privater_ordner\u002F",[452,8750,8672],{"class":923},[452,8752,8753],{"class":923}," drwx------",[452,8755,8756],{"class":1298}," (700)\n",[10,8758,150],{"id":8759},"umgebungsvariablen",[257,8761,8763],{"id":8762},"wichtige-standard-variablen","Wichtige Standard-Variablen",[15,8765,8766,8778],{},[18,8767,8768],{},[21,8769,8770,8774],{},[24,8771,8772],{},[27,8773,5350],{},[24,8775,8776],{},[27,8777,39],{},[41,8779,8780,8788,8796,8803,8811,8819,8827],{},[21,8781,8782,8785],{},[46,8783,8784],{},"$HOME",[46,8786,8787],{},"Home-Verzeichnis",[21,8789,8790,8793],{},[46,8791,8792],{},"$PATH",[46,8794,8795],{},"Suchpfade für Programme",[21,8797,8798,8801],{},[46,8799,8800],{},"$USER",[46,8802,769],{},[21,8804,8805,8808],{},[46,8806,8807],{},"$SHELL",[46,8809,8810],{},"Aktuelle Shell",[21,8812,8813,8816],{},[46,8814,8815],{},"$PWD",[46,8817,8818],{},"Aktuelles Verzeichnis",[21,8820,8821,8824],{},[46,8822,8823],{},"$?",[46,8825,8826],{},"Exit-Code des letzten Befehls",[21,8828,8829,8832],{},[46,8830,8831],{},"$$",[46,8833,8834],{},"PID des aktuellen Prozesses",[257,8836,8838],{"id":8837},"variablen-anzeigensetzen","Variablen anzeigen\u002Fsetzen",[904,8840,8842],{"className":906,"code":8841,"language":908,"meta":909,"style":909},"echo $HOME # Variable ausgeben\n\nenv # Alle Umgebungsvariablen anzeigen\n\nprintenv # Alternative\n\nset # Alle Variablen Funktionen\n\n# Variable setzen (nur lokal\u002Faktuelle Shell)\n\nmyvar=\"Hallo\"\n\n# Variable exportieren (für Kindprozesse)\n\nexport myvar=\"Hallo\"\n\n# Variable löschen\n\nunset myvar\n\n# PATH erweitern\n\nexport PATH=\"\u002Fhome\u002Fuser\u002Fbin:$PATH\"\n\n",[911,8843,8844,8854,8858,8866,8870,8878,8882,8890,8894,8899,8903,8913,8917,8922,8926,8938,8942,8947,8951,8959,8963,8968,8972],{"__ignoreMap":909},[452,8845,8846,8848,8851],{"class":915,"line":916},[452,8847,1523],{"class":975},[452,8849,8850],{"class":1298}," $HOME ",[452,8852,8853],{"class":1200},"# Variable ausgeben\n",[452,8855,8856],{"class":915,"line":1190},[452,8857,1194],{"emptyLinePlaceholder":1193},[452,8859,8860,8863],{"class":915,"line":1197},[452,8861,8862],{"class":919},"env",[452,8864,8865],{"class":1200}," # Alle Umgebungsvariablen anzeigen\n",[452,8867,8868],{"class":915,"line":1204},[452,8869,1194],{"emptyLinePlaceholder":1193},[452,8871,8872,8875],{"class":915,"line":1209},[452,8873,8874],{"class":919},"printenv",[452,8876,8877],{"class":1200}," # Alternative\n",[452,8879,8880],{"class":915,"line":1223},[452,8881,1194],{"emptyLinePlaceholder":1193},[452,8883,8884,8887],{"class":915,"line":1228},[452,8885,8886],{"class":975},"set",[452,8888,8889],{"class":1200}," # Alle Variablen Funktionen\n",[452,8891,8892],{"class":915,"line":1234},[452,8893,1194],{"emptyLinePlaceholder":1193},[452,8895,8896],{"class":915,"line":1239},[452,8897,8898],{"class":1200},"# Variable setzen (nur lokal\u002Faktuelle Shell)\n",[452,8900,8901],{"class":915,"line":1253},[452,8902,1194],{"emptyLinePlaceholder":1193},[452,8904,8905,8908,8910],{"class":915,"line":1258},[452,8906,8907],{"class":1298},"myvar",[452,8909,1862],{"class":1473},[452,8911,8912],{"class":923},"\"Hallo\"\n",[452,8914,8915],{"class":915,"line":1264},[452,8916,1194],{"emptyLinePlaceholder":1193},[452,8918,8919],{"class":915,"line":1269},[452,8920,8921],{"class":1200},"# Variable exportieren (für Kindprozesse)\n",[452,8923,8924],{"class":915,"line":1558},[452,8925,1194],{"emptyLinePlaceholder":1193},[452,8927,8928,8931,8934,8936],{"class":915,"line":1563},[452,8929,8930],{"class":1473},"export",[452,8932,8933],{"class":1298}," myvar",[452,8935,1862],{"class":1473},[452,8937,8912],{"class":923},[452,8939,8940],{"class":915,"line":1586},[452,8941,1194],{"emptyLinePlaceholder":1193},[452,8943,8944],{"class":915,"line":1591},[452,8945,8946],{"class":1200},"# Variable löschen\n",[452,8948,8949],{"class":915,"line":1597},[452,8950,1194],{"emptyLinePlaceholder":1193},[452,8952,8953,8956],{"class":915,"line":1602},[452,8954,8955],{"class":975},"unset",[452,8957,8958],{"class":923}," myvar\n",[452,8960,8961],{"class":915,"line":1622},[452,8962,1194],{"emptyLinePlaceholder":1193},[452,8964,8965],{"class":915,"line":1627},[452,8966,8967],{"class":1200},"# PATH erweitern\n",[452,8969,8970],{"class":915,"line":1633},[452,8971,1194],{"emptyLinePlaceholder":1193},[452,8973,8974,8976,8979,8981,8984,8986],{"class":915,"line":1638},[452,8975,8930],{"class":1473},[452,8977,8978],{"class":1298}," PATH",[452,8980,1862],{"class":1473},[452,8982,8983],{"class":923},"\"\u002Fhome\u002Fuser\u002Fbin:",[452,8985,8792],{"class":1298},[452,8987,1896],{"class":923},[257,8989,8991],{"id":8990},"quoting-regeln","Quoting-Regeln",[15,8993,8994,9010],{},[18,8995,8996],{},[21,8997,8998,9002,9006],{},[24,8999,9000],{},[27,9001,6594],{},[24,9003,9004],{},[27,9005,39],{},[24,9007,9008],{},[27,9009,422],{},[41,9011,9012,9023,9034],{},[21,9013,9014,9017,9020],{},[46,9015,9016],{},"Doppelte Anführungszeichen \"",[46,9018,9019],{},"Variablen werden aufgelöst",[46,9021,9022],{},"echo \"$HOME\" → \u002Fhome\u002Fuser",[21,9024,9025,9028,9031],{},[46,9026,9027],{},"Einfache Anführungszeichen '",[46,9029,9030],{},"Alles wird wörtlich genommen",[46,9032,9033],{},"echo '$HOME' → $HOME",[21,9035,9036,9039,9042],{},[46,9037,9038],{},"Backslash \\",[46,9040,9041],{},"Nächstes Zeichen literal",[46,9043,9044],{},"echo $HOME → $HOME",[10,9046,9048],{"id":9047},"prozessmanagement-und-systemüberwachung","Prozessmanagement und Systemüberwachung",[257,9050,9052],{"id":9051},"prozess-grundlagen","Prozess-Grundlagen",[992,9054,9055,9062,9072],{},[995,9056,9057,9058,9061],{},"Ein ",[27,9059,9060],{},"Prozess"," = ein Programm in Ausführung",[995,9063,9064,9065,9067,9068,9071],{},"Jeder Prozess hat: ",[27,9066,2610],{}," (Prozessnummer), ",[27,9069,9070],{},"PPID"," (Elternprozess-ID), Benutzer",[995,9073,9074,9077],{},[27,9075,9076],{},"PID 1"," = erster Prozess (\u002Fsbin\u002Finit bzw. systemd)",[2652,9079,9081],{"id":9080},"prozesszustände","Prozesszustände",[15,9083,9084,9101],{},[18,9085,9086],{},[21,9087,9088,9093,9097],{},[24,9089,9090],{},[27,9091,9092],{},"Status",[24,9094,9095],{},[27,9096,7634],{},[24,9098,9099],{},[27,9100,39],{},[41,9102,9103,9114,9124,9135,9145],{},[21,9104,9105,9108,9111],{},[46,9106,9107],{},"Running",[46,9109,9110],{},"R",[46,9112,9113],{},"Prozess läuft\u002Fkann Rechenzeit erhalten",[21,9115,9116,9119,9121],{},[46,9117,9118],{},"Sleeping",[46,9120,7818],{},[46,9122,9123],{},"Wartet auf Ereignis",[21,9125,9126,9129,9132],{},[46,9127,9128],{},"Uninterruptible Sleep",[46,9130,9131],{},"D",[46,9133,9134],{},"Wartet, kann nicht gestoppt werden",[21,9136,9137,9140,9142],{},[46,9138,9139],{},"Stopped",[46,9141,7858],{},[46,9143,9144],{},"Angehalten, kann fortgesetzt werden",[21,9146,9147,9150,9153],{},[46,9148,9149],{},"Zombie",[46,9151,9152],{},"Z",[46,9154,9155],{},"Beendet, Rückgabewert nicht abgeholt",[257,9157,9159],{"id":9158},"befehle-zur-prozessverwaltung","Befehle zur Prozessverwaltung",[15,9161,9162,9174],{},[18,9163,9164],{},[21,9165,9166,9170],{},[24,9167,9168],{},[27,9169,271],{},[24,9171,9172],{},[27,9173,39],{},[41,9175,9176,9183,9191,9199,9207,9215,9223,9231,9239,9247,9255,9263],{},[21,9177,9178,9180],{},[46,9179,6311],{},[46,9181,9182],{},"Prozesse des aktuellen Terminals",[21,9184,9185,9188],{},[46,9186,9187],{},"ps aux",[46,9189,9190],{},"Alle Prozesse anzeigen",[21,9192,9193,9196],{},[46,9194,9195],{},"ps -ef",[46,9197,9198],{},"Alle Prozesse mit PPID",[21,9200,9201,9204],{},[46,9202,9203],{},"ps -l",[46,9205,9206],{},"Langes Listing (mit Nice-Wert)",[21,9208,9209,9212],{},[46,9210,9211],{},"pstree",[46,9213,9214],{},"Baumstruktur",[21,9216,9217,9220],{},[46,9218,9219],{},"pstree -p",[46,9221,9222],{},"Baumstruktur mit PIDs",[21,9224,9225,9228],{},[46,9226,9227],{},"top",[46,9229,9230],{},"Dynamische Prozesstabelle",[21,9232,9233,9236],{},[46,9234,9235],{},"htop",[46,9237,9238],{},"Farbige Prozesstabelle",[21,9240,9241,9244],{},[46,9242,9243],{},"kill PID",[46,9245,9246],{},"Prozess beenden (SIGTERM)",[21,9248,9249,9252],{},[46,9250,9251],{},"kill -9 PID",[46,9253,9254],{},"Prozess erzwungen beenden (SIGKILL)",[21,9256,9257,9260],{},[46,9258,9259],{},"kill %jobnr",[46,9261,9262],{},"Job beenden",[21,9264,9265,9268],{},[46,9266,9267],{},"killall programmname",[46,9269,9270],{},"Alle Prozesse mit dem Namen beenden",[257,9272,9274],{"id":9273},"vorder-und-hintergrundprozesse","Vorder- und Hintergrundprozesse",[15,9276,9277,9289],{},[18,9278,9279],{},[21,9280,9281,9285],{},[24,9282,9283],{},[27,9284,271],{},[24,9286,9287],{},[27,9288,39],{},[41,9290,9291,9299,9307,9315,9323,9331],{},[21,9292,9293,9296],{},[46,9294,9295],{},"kommando &",[46,9297,9298],{},"Im Hintergrund ausführen",[21,9300,9301,9304],{},[46,9302,9303],{},"Strg+Z",[46,9305,9306],{},"Aktuellen Prozess in Hintergrund + stoppen",[21,9308,9309,9312],{},[46,9310,9311],{},"bg",[46,9313,9314],{},"Gestoppten Prozess im Hintergrund weiterlaufen lassen",[21,9316,9317,9320],{},[46,9318,9319],{},"fg",[46,9321,9322],{},"Prozess in den Vordergrund holen",[21,9324,9325,9328],{},[46,9326,9327],{},"fg %1",[46,9329,9330],{},"Job 1 in den Vordergrund",[21,9332,9333,9336],{},[46,9334,9335],{},"jobs",[46,9337,9338],{},"Hintergrundjobs anzeigen",[257,9340,9342],{"id":9341},"prozesspriorität-nice-wert","Prozesspriorität (nice-Wert)",[15,9344,9345,9364],{},[18,9346,9347],{},[21,9348,9349,9354,9359],{},[24,9350,9351],{},[27,9352,9353],{},"Wert",[24,9355,9356],{},[27,9357,9358],{},"Priorität",[24,9360,9361],{},[27,9362,9363],{},"Wer darf?",[41,9365,9366,9377,9387,9397,9408],{},[21,9367,9368,9371,9374],{},[46,9369,9370],{},"-20",[46,9372,9373],{},"Höchste Priorität",[46,9375,9376],{},"Nur root",[21,9378,9379,9382,9385],{},[46,9380,9381],{},"-20 bis -1",[46,9383,9384],{},"Hoch",[46,9386,9376],{},[21,9388,9389,9391,9394],{},[46,9390,6616],{},[46,9392,9393],{},"Standard",[46,9395,9396],{},"Alle",[21,9398,9399,9402,9405],{},[46,9400,9401],{},"1 bis 19",[46,9403,9404],{},"Niedrig",[46,9406,9407],{},"Alle Benutzer",[21,9409,9410,9413,9416],{},[46,9411,9412],{},"19",[46,9414,9415],{},"Niedrigste Priorität",[46,9417,9396],{},[904,9419,9421],{"className":906,"code":9420,"language":908,"meta":909,"style":909},"nice -n 10 kommando # Programm mit niedrigerer Priorität starten\n\nnice -n -10 kommando # Höhere Priorität (nur root)\n\nrenice 5 -p PID # Priorität eines laufenden Prozesses ändern\n\n",[911,9422,9423,9439,9443,9457,9461],{"__ignoreMap":909},[452,9424,9425,9428,9430,9433,9436],{"class":915,"line":916},[452,9426,9427],{"class":919},"nice",[452,9429,4656],{"class":975},[452,9431,9432],{"class":975}," 10",[452,9434,9435],{"class":923}," kommando",[452,9437,9438],{"class":1200}," # Programm mit niedrigerer Priorität starten\n",[452,9440,9441],{"class":915,"line":1190},[452,9442,1194],{"emptyLinePlaceholder":1193},[452,9444,9445,9447,9449,9452,9454],{"class":915,"line":1197},[452,9446,9427],{"class":919},[452,9448,4656],{"class":975},[452,9450,9451],{"class":975}," -10",[452,9453,9435],{"class":923},[452,9455,9456],{"class":1200}," # Höhere Priorität (nur root)\n",[452,9458,9459],{"class":915,"line":1204},[452,9460,1194],{"emptyLinePlaceholder":1193},[452,9462,9463,9466,9469,9472,9475],{"class":915,"line":1209},[452,9464,9465],{"class":919},"renice",[452,9467,9468],{"class":975}," 5",[452,9470,9471],{"class":975}," -p",[452,9473,9474],{"class":923}," PID",[452,9476,9477],{"class":1200}," # Priorität eines laufenden Prozesses ändern\n",[257,9479,9481],{"id":9480},"systemüberwachung","Systemüberwachung",[15,9483,9484,9496],{},[18,9485,9486],{},[21,9487,9488,9492],{},[24,9489,9490],{},[27,9491,271],{},[24,9493,9494],{},[27,9495,39],{},[41,9497,9498,9505,9512,9518,9524,9532],{},[21,9499,9500,9502],{},[46,9501,806],{},[46,9503,9504],{},"Arbeitsspeicher-Auslastung",[21,9506,9507,9509],{},[46,9508,798],{},[46,9510,9511],{},"Laufzeit und Lastdurchschnitt",[21,9513,9514,9516],{},[46,9515,814],{},[46,9517,817],{},[21,9519,9520,9522],{},[46,9521,822],{},[46,9523,825],{},[21,9525,9526,9529],{},[46,9527,9528],{},"top \u002F htop",[46,9530,9531],{},"CPU und RAM live",[21,9533,9534,9537],{},[46,9535,9536],{},"docker stats",[46,9538,9539],{},"Docker-Container-Ressourcen",[257,9541,9543],{"id":9542},"das-proc-verzeichnis","Das \u002Fproc-Verzeichnis",[898,9545,9546],{},"Jeder Prozess hat ein Verzeichnis \u002Fproc\u002FPID\u002F:",[898,9548,9549,9550,9552,9553,9555,9556,9558,9559,9561,9562,9564,9565,9567,9568,9570],{},"\u002Fproc\u002F",[1325,9551],{},"\n├── PID\u002F",[1325,9554],{},"\n│ ├── cmdline → Befehl",[1325,9557],{},"\n│ ├── cwd → Link zum Arbeitsverzeichnis",[1325,9560],{},"\n│ ├── exe → Link zum Programm",[1325,9563],{},"\n│ └── status → Statusinformationen",[1325,9566],{},"\n├── meminfo → Speicherinfo",[1325,9569],{},"\n└── cpuinfo → CPU-Info",[10,9572,9574],{"id":9573},"systemstart-init-systeme","Systemstart: Init-Systeme",[257,9576,9578],{"id":9577},"bootvorgang-überblick","Bootvorgang (Überblick)",[898,9580,9581,9582,9584,9585,9587],{},"BIOS\u002FUEFI → GRUB Bootloader → Kernel + initramfs laden",[1325,9583],{},"\n→ Root-Dateisystem mounten → init\u002Fsystemd starten",[1325,9586],{},"\n→ Systemdienste laden → Benutzeranmeldung",[2652,9589,9591],{"id":9590},"ablauf","Ablauf",[9593,9594,9595,9598,9601,9604,9607,9610,9613],"ol",{},[995,9596,9597],{},"Bootloader: Kernel und initramfs in RAM laden",[995,9599,9600],{},"Kernel laden: Hardware wird initialisiert",[995,9602,9603],{},"InitRamFS: Temporäres Root-Dateisystem zum laden von Modulen und Zugriff aufs echte FS",[995,9605,9606],{},"Mount Root FS: Kernel mountet Dateisystem nach \u002Fetc\u002Ffstab",[995,9608,9609],{},"Init starten: Erstes Prozessprogramm wird ausgeführt (init\u002Fsystemd)",[995,9611,9612],{},"Dienste starten",[995,9614,9615],{},"Boot abgeschlossen: Bereit zur Anmeldung",[257,9617,9619],{"id":9618},"sysinit-vs-systemd-vergleich","sysinit vs. systemd – Vergleich",[15,9621,9622,9641],{},[18,9623,9624],{},[21,9625,9626,9631,9636],{},[24,9627,9628],{},[27,9629,9630],{},"Eigenschaft",[24,9632,9633],{},[27,9634,9635],{},"sysvinit",[24,9637,9638],{},[27,9639,9640],{},"systemd",[41,9642,9643,9654,9663,9674,9685,9696,9707,9718,9729],{},[21,9644,9645,9648,9651],{},[46,9646,9647],{},"Konzept",[46,9649,9650],{},"Skriptbasiert, Runlevels",[46,9652,9653],{},"Units (services, sockets, timers, targets)",[21,9655,9656,9658,9661],{},[46,9657,9076],{},[46,9659,9660],{},"\u002Fsbin\u002Finit",[46,9662,9640],{},[21,9664,9665,9668,9671],{},[46,9666,9667],{},"Start",[46,9669,9670],{},"Seriell (nacheinander)",[46,9672,9673],{},"Parallel (schneller!)",[21,9675,9676,9679,9682],{},[46,9677,9678],{},"Konfiguration",[46,9680,9681],{},"\u002Fetc\u002Finit.d\u002F, \u002Fetc\u002Frc*.d\u002F",[46,9683,9684],{},"Unit-Dateien in \u002Fetc\u002Fsystemd\u002Fsystem\u002F",[21,9686,9687,9690,9693],{},[46,9688,9689],{},"Abhängigkeiten",[46,9691,9692],{},"Wenig, manuell",[46,9694,9695],{},"Umfassend (Wants, Requires, After, Before)",[21,9697,9698,9701,9704],{},[46,9699,9700],{},"Logging",[46,9702,9703],{},"Syslog-basiert",[46,9705,9706],{},"journald + journalctl",[21,9708,9709,9712,9715],{},[46,9710,9711],{},"Prozessverwaltung",[46,9713,9714],{},"Skripte nacheinander",[46,9716,9717],{},"Units, Restarts, cgroups",[21,9719,9720,9723,9726],{},[46,9721,9722],{},"Sicherheit",[46,9724,9725],{},"Wenig eingebettet",[46,9727,9728],{},"Sandbox: PrivateTmp, ProtectSystem, NoNewPrivileges",[21,9730,9731,9733,9736],{},[46,9732,9092],{},[46,9734,9735],{},"Veraltet",[46,9737,9738],{},"Standard in modernen Distros",[10,9740,9742],{"id":9741},"systemd-dienstverwaltung","systemd-Dienstverwaltung",[257,9744,9746],{"id":9745},"systemctl-dienste-verwalten","systemctl – Dienste verwalten",[15,9748,9749,9761],{},[18,9750,9751],{},[21,9752,9753,9757],{},[24,9754,9755],{},[27,9756,271],{},[24,9758,9759],{},[27,9760,39],{},[41,9762,9763,9771,9779,9787,9795,9803,9811,9819,9827,9835,9843,9851,9859],{},[21,9764,9765,9768],{},[46,9766,9767],{},"systemctl start dienst",[46,9769,9770],{},"Dienst starten",[21,9772,9773,9776],{},[46,9774,9775],{},"systemctl stop dienst",[46,9777,9778],{},"Dienst stoppen",[21,9780,9781,9784],{},[46,9782,9783],{},"systemctl restart dienst",[46,9785,9786],{},"Dienst neustarten",[21,9788,9789,9792],{},[46,9790,9791],{},"systemctl reload dienst",[46,9793,9794],{},"Konfiguration neu laden (ohne Neustart)",[21,9796,9797,9800],{},[46,9798,9799],{},"systemctl status dienst",[46,9801,9802],{},"Status anzeigen",[21,9804,9805,9808],{},[46,9806,9807],{},"systemctl enable dienst",[46,9809,9810],{},"Beim Boot automatisch starten",[21,9812,9813,9816],{},[46,9814,9815],{},"systemctl disable dienst",[46,9817,9818],{},"Autostart deaktivieren",[21,9820,9821,9824],{},[46,9822,9823],{},"systemctl is-enabled dienst",[46,9825,9826],{},"Prüfen ob Autostart aktiv",[21,9828,9829,9832],{},[46,9830,9831],{},"systemctl is-active dienst",[46,9833,9834],{},"Prüfen ob Dienst läuft",[21,9836,9837,9840],{},[46,9838,9839],{},"systemctl list-units --type service",[46,9841,9842],{},"Alle laufenden Dienste",[21,9844,9845,9848],{},[46,9846,9847],{},"systemctl list-unit-files --type=service",[46,9849,9850],{},"Alle Dienste (auch inaktive)",[21,9852,9853,9856],{},[46,9854,9855],{},"systemctl --failed",[46,9857,9858],{},"Fehlgeschlagene Dienste",[21,9860,9861,9864],{},[46,9862,9863],{},"systemctl daemon-reload",[46,9865,9866],{},"Unit-Dateien neu einlesen",[257,9868,9870],{"id":9869},"journalctl-logging","journalctl – Logging",[15,9872,9873,9885],{},[18,9874,9875],{},[21,9876,9877,9881],{},[24,9878,9879],{},[27,9880,271],{},[24,9882,9883],{},[27,9884,39],{},[41,9886,9887,9895,9903,9911,9919,9927,9935],{},[21,9888,9889,9892],{},[46,9890,9891],{},"journalctl",[46,9893,9894],{},"Alle Logs anzeigen",[21,9896,9897,9900],{},[46,9898,9899],{},"journalctl -u nginx",[46,9901,9902],{},"Logs eines bestimmten Dienstes",[21,9904,9905,9908],{},[46,9906,9907],{},"journalctl -b",[46,9909,9910],{},"Logs seit letztem Boot",[21,9912,9913,9916],{},[46,9914,9915],{},"journalctl -f",[46,9917,9918],{},"Live-Logs (wie tail -f)",[21,9920,9921,9924],{},[46,9922,9923],{},"journalctl -p err",[46,9925,9926],{},"Nur Fehler anzeigen",[21,9928,9929,9932],{},[46,9930,9931],{},"journalctl --since \"1 hour ago\"",[46,9933,9934],{},"Zeitgefiltert",[21,9936,9937,9940],{},[46,9938,9939],{},"journalctl -xe",[46,9941,9942],{},"Letzte Fehler mit Erklärung",[257,9944,9946],{"id":9945},"systemd-unit-dateien","systemd Unit-Dateien",[2652,9948,9950],{"id":9949},"speicherorte","Speicherorte:",[992,9952,9953,9956],{},[995,9954,9955],{},"\u002Fusr\u002Flib\u002Fsystemd\u002Fsystem\u002F – Standard-Units (vom Paketmanager)",[995,9957,9958],{},"\u002Fetc\u002Fsystemd\u002Fsystem\u002F – Eigene\u002Füberschriebene Units (höhere Priorität)",[2652,9960,9962],{"id":9961},"aufbau-einer-service-unit","Aufbau einer Service-Unit:",[898,9964,9965],{},[452,9966,9967],{},"Unit",[904,9969,9971],{"className":906,"code":9970,"language":908,"meta":909,"style":909},"Description=Mein Beispielservice\n\nRequires=network.target # Harte Abhängigkeit\n\nAfter=network.target # Startreihenfolge\n\nWants=redis.service # Weiche Abhängigkeit\n\n",[911,9972,9973,9986,9990,10003,10007,10019,10023],{"__ignoreMap":909},[452,9974,9975,9978,9980,9983],{"class":915,"line":916},[452,9976,9977],{"class":1298},"Description",[452,9979,1862],{"class":1473},[452,9981,9982],{"class":923},"Mein",[452,9984,9985],{"class":919}," Beispielservice\n",[452,9987,9988],{"class":915,"line":1190},[452,9989,1194],{"emptyLinePlaceholder":1193},[452,9991,9992,9995,9997,10000],{"class":915,"line":1197},[452,9993,9994],{"class":1298},"Requires",[452,9996,1862],{"class":1473},[452,9998,9999],{"class":923},"network.target",[452,10001,10002],{"class":1200}," # Harte Abhängigkeit\n",[452,10004,10005],{"class":915,"line":1204},[452,10006,1194],{"emptyLinePlaceholder":1193},[452,10008,10009,10012,10014,10016],{"class":915,"line":1209},[452,10010,10011],{"class":1298},"After",[452,10013,1862],{"class":1473},[452,10015,9999],{"class":923},[452,10017,10018],{"class":1200}," # Startreihenfolge\n",[452,10020,10021],{"class":915,"line":1223},[452,10022,1194],{"emptyLinePlaceholder":1193},[452,10024,10025,10028,10030,10033],{"class":915,"line":1228},[452,10026,10027],{"class":1298},"Wants",[452,10029,1862],{"class":1473},[452,10031,10032],{"class":923},"redis.service",[452,10034,10035],{"class":1200}," # Weiche Abhängigkeit\n",[898,10037,10038],{},[452,10039,10040],{},"Service",[904,10042,10044],{"className":906,"code":10043,"language":908,"meta":909,"style":909},"Type=simple\n\nExecStart=\u002Fusr\u002Fbin\u002Fpython3 \u002Fopt\u002Fapp\u002Fserver.py\n\nExecStop=\u002Fbin\u002Fkill -SIGTERM $MAINPID\n\nUser=nobody\n\nRestart=on-failure\n\nRestartSec=3\n\nStartLimitBurst=4\n\nStartLimitIntervalSec=30\n\nWorkingDirectory=\u002Fopt\u002Fapp\u002F\n\n# Sicherheitshärtung:\n\nPrivateTmp=true # Isoliertes \u002Ftmp\n\nProtectSystem=full # System read-only\n\nProtectHome=true # Kein Zugriff auf \u002Fhome\n\nNoNewPrivileges=true # Keine Privileg-Eskalation\n\n# Ressourcenlimits:\n\nMemoryMax=200M\n\nCPUQuota=20%\n\nTasksMax=100\n\n",[911,10045,10046,10056,10060,10073,10077,10093,10097,10107,10111,10121,10125,10135,10139,10149,10153,10163,10167,10177,10181,10186,10190,10203,10207,10220,10224,10236,10240,10252,10256,10261,10265,10275,10279,10289,10293],{"__ignoreMap":909},[452,10047,10048,10051,10053],{"class":915,"line":916},[452,10049,10050],{"class":1298},"Type",[452,10052,1862],{"class":1473},[452,10054,10055],{"class":923},"simple\n",[452,10057,10058],{"class":915,"line":1190},[452,10059,1194],{"emptyLinePlaceholder":1193},[452,10061,10062,10065,10067,10070],{"class":915,"line":1197},[452,10063,10064],{"class":1298},"ExecStart",[452,10066,1862],{"class":1473},[452,10068,10069],{"class":923},"\u002Fusr\u002Fbin\u002Fpython3",[452,10071,10072],{"class":919}," \u002Fopt\u002Fapp\u002Fserver.py\n",[452,10074,10075],{"class":915,"line":1204},[452,10076,1194],{"emptyLinePlaceholder":1193},[452,10078,10079,10082,10084,10087,10090],{"class":915,"line":1209},[452,10080,10081],{"class":1298},"ExecStop",[452,10083,1862],{"class":1473},[452,10085,10086],{"class":923},"\u002Fbin\u002Fkill",[452,10088,10089],{"class":919}," -SIGTERM",[452,10091,10092],{"class":1298}," $MAINPID\n",[452,10094,10095],{"class":915,"line":1223},[452,10096,1194],{"emptyLinePlaceholder":1193},[452,10098,10099,10102,10104],{"class":915,"line":1228},[452,10100,10101],{"class":1298},"User",[452,10103,1862],{"class":1473},[452,10105,10106],{"class":923},"nobody\n",[452,10108,10109],{"class":915,"line":1234},[452,10110,1194],{"emptyLinePlaceholder":1193},[452,10112,10113,10116,10118],{"class":915,"line":1239},[452,10114,10115],{"class":1298},"Restart",[452,10117,1862],{"class":1473},[452,10119,10120],{"class":923},"on-failure\n",[452,10122,10123],{"class":915,"line":1253},[452,10124,1194],{"emptyLinePlaceholder":1193},[452,10126,10127,10130,10132],{"class":915,"line":1258},[452,10128,10129],{"class":1298},"RestartSec",[452,10131,1862],{"class":1473},[452,10133,10134],{"class":923},"3\n",[452,10136,10137],{"class":915,"line":1264},[452,10138,1194],{"emptyLinePlaceholder":1193},[452,10140,10141,10144,10146],{"class":915,"line":1269},[452,10142,10143],{"class":1298},"StartLimitBurst",[452,10145,1862],{"class":1473},[452,10147,10148],{"class":923},"4\n",[452,10150,10151],{"class":915,"line":1558},[452,10152,1194],{"emptyLinePlaceholder":1193},[452,10154,10155,10158,10160],{"class":915,"line":1563},[452,10156,10157],{"class":1298},"StartLimitIntervalSec",[452,10159,1862],{"class":1473},[452,10161,10162],{"class":923},"30\n",[452,10164,10165],{"class":915,"line":1586},[452,10166,1194],{"emptyLinePlaceholder":1193},[452,10168,10169,10172,10174],{"class":915,"line":1591},[452,10170,10171],{"class":1298},"WorkingDirectory",[452,10173,1862],{"class":1473},[452,10175,10176],{"class":923},"\u002Fopt\u002Fapp\u002F\n",[452,10178,10179],{"class":915,"line":1597},[452,10180,1194],{"emptyLinePlaceholder":1193},[452,10182,10183],{"class":915,"line":1602},[452,10184,10185],{"class":1200},"# Sicherheitshärtung:\n",[452,10187,10188],{"class":915,"line":1622},[452,10189,1194],{"emptyLinePlaceholder":1193},[452,10191,10192,10195,10197,10200],{"class":915,"line":1627},[452,10193,10194],{"class":1298},"PrivateTmp",[452,10196,1862],{"class":1473},[452,10198,10199],{"class":923},"true",[452,10201,10202],{"class":1200}," # Isoliertes \u002Ftmp\n",[452,10204,10205],{"class":915,"line":1633},[452,10206,1194],{"emptyLinePlaceholder":1193},[452,10208,10209,10212,10214,10217],{"class":915,"line":1638},[452,10210,10211],{"class":1298},"ProtectSystem",[452,10213,1862],{"class":1473},[452,10215,10216],{"class":923},"full",[452,10218,10219],{"class":1200}," # System read-only\n",[452,10221,10222],{"class":915,"line":1922},[452,10223,1194],{"emptyLinePlaceholder":1193},[452,10225,10226,10229,10231,10233],{"class":915,"line":1927},[452,10227,10228],{"class":1298},"ProtectHome",[452,10230,1862],{"class":1473},[452,10232,10199],{"class":923},[452,10234,10235],{"class":1200}," # Kein Zugriff auf \u002Fhome\n",[452,10237,10238],{"class":915,"line":1942},[452,10239,1194],{"emptyLinePlaceholder":1193},[452,10241,10242,10245,10247,10249],{"class":915,"line":1947},[452,10243,10244],{"class":1298},"NoNewPrivileges",[452,10246,1862],{"class":1473},[452,10248,10199],{"class":923},[452,10250,10251],{"class":1200}," # Keine Privileg-Eskalation\n",[452,10253,10254],{"class":915,"line":1953},[452,10255,1194],{"emptyLinePlaceholder":1193},[452,10257,10258],{"class":915,"line":1958},[452,10259,10260],{"class":1200},"# Ressourcenlimits:\n",[452,10262,10263],{"class":915,"line":1964},[452,10264,1194],{"emptyLinePlaceholder":1193},[452,10266,10267,10270,10272],{"class":915,"line":1969},[452,10268,10269],{"class":1298},"MemoryMax",[452,10271,1862],{"class":1473},[452,10273,10274],{"class":923},"200M\n",[452,10276,10277],{"class":915,"line":1986},[452,10278,1194],{"emptyLinePlaceholder":1193},[452,10280,10281,10284,10286],{"class":915,"line":1991},[452,10282,10283],{"class":1298},"CPUQuota",[452,10285,1862],{"class":1473},[452,10287,10288],{"class":923},"20%\n",[452,10290,10291],{"class":915,"line":1997},[452,10292,1194],{"emptyLinePlaceholder":1193},[452,10294,10295,10298,10300],{"class":915,"line":2002},[452,10296,10297],{"class":1298},"TasksMax",[452,10299,1862],{"class":1473},[452,10301,10302],{"class":923},"100\n",[898,10304,10305],{},[452,10306,10307],{},"Install",[904,10309,10311],{"className":906,"code":10310,"language":908,"meta":909,"style":909},"WantedBy=multi-user.target # Beim Boot starten\n\n",[911,10312,10313],{"__ignoreMap":909},[452,10314,10315,10318,10320,10323],{"class":915,"line":916},[452,10316,10317],{"class":1298},"WantedBy",[452,10319,1862],{"class":1473},[452,10321,10322],{"class":923},"multi-user.target",[452,10324,10325],{"class":1200}," # Beim Boot starten\n",[2652,10327,10329],{"id":10328},"unit-aktivieren-und-starten","Unit aktivieren und starten:",[904,10331,10333],{"className":906,"code":10332,"language":908,"meta":909,"style":909},"sudo systemctl daemon-reload\n\nsudo systemctl enable mein.service\n\nsudo systemctl start mein.service\n\n",[911,10334,10335,10346,10350,10362,10366],{"__ignoreMap":909},[452,10336,10337,10340,10343],{"class":915,"line":916},[452,10338,10339],{"class":919},"sudo",[452,10341,10342],{"class":923}," systemctl",[452,10344,10345],{"class":923}," daemon-reload\n",[452,10347,10348],{"class":915,"line":1190},[452,10349,1194],{"emptyLinePlaceholder":1193},[452,10351,10352,10354,10356,10359],{"class":915,"line":1197},[452,10353,10339],{"class":919},[452,10355,10342],{"class":923},[452,10357,10358],{"class":923}," enable",[452,10360,10361],{"class":923}," mein.service\n",[452,10363,10364],{"class":915,"line":1204},[452,10365,1194],{"emptyLinePlaceholder":1193},[452,10367,10368,10370,10372,10375],{"class":915,"line":1209},[452,10369,10339],{"class":919},[452,10371,10342],{"class":923},[452,10373,10374],{"class":923}," start",[452,10376,10361],{"class":923},[2652,10378,10380],{"id":10379},"systemanalyse","Systemanalyse",[898,10382,10383],{},"systemd-analyze blame # Bootzeit pro Dienst",[898,10385,10386],{},"systemd-analyze critical-chain # Kritischer Pfad",[898,10388,10389],{},"systemd-analyze plot >boot.svg # Visualisierung",[898,10391,10392],{},"systemd-analyze verify dienst.service # Syntax prüfen",[10,10394,10395],{"id":10395},"cron",[257,10397,902],{"id":10398},"grundprinzip-2",[898,10400,10401,10402,10405,10406,10409],{},"cron ist ein Dienst (Daemon) zum ",[27,10403,10404],{},"zeitgesteuerten Ausführen von Befehlen",". Die Aufgaben werden in der ",[27,10407,10408],{},"crontab"," (cron table) definiert.",[904,10411,10413],{"className":906,"code":10412,"language":908,"meta":909,"style":909},"crontab -e # Eigene crontab bearbeiten\n\ncrontab -l # Eigene crontab anzeigen\n\ncrontab -r # Eigene crontab löschen\n\ncrontab -u user -e # crontab eines bestimmten Benutzers bearbeiten (root)\n\n",[911,10414,10415,10424,10428,10438,10442,10451,10455],{"__ignoreMap":909},[452,10416,10417,10419,10421],{"class":915,"line":916},[452,10418,10408],{"class":919},[452,10420,1568],{"class":975},[452,10422,10423],{"class":1200}," # Eigene crontab bearbeiten\n",[452,10425,10426],{"class":915,"line":1190},[452,10427,1194],{"emptyLinePlaceholder":1193},[452,10429,10430,10432,10435],{"class":915,"line":1197},[452,10431,10408],{"class":919},[452,10433,10434],{"class":975}," -l",[452,10436,10437],{"class":1200}," # Eigene crontab anzeigen\n",[452,10439,10440],{"class":915,"line":1204},[452,10441,1194],{"emptyLinePlaceholder":1193},[452,10443,10444,10446,10448],{"class":915,"line":1209},[452,10445,10408],{"class":919},[452,10447,1614],{"class":975},[452,10449,10450],{"class":1200}," # Eigene crontab löschen\n",[452,10452,10453],{"class":915,"line":1223},[452,10454,1194],{"emptyLinePlaceholder":1193},[452,10456,10457,10459,10461,10464,10466],{"class":915,"line":1228},[452,10458,10408],{"class":919},[452,10460,976],{"class":975},[452,10462,10463],{"class":923}," user",[452,10465,1568],{"class":975},[452,10467,10468],{"class":1200}," # crontab eines bestimmten Benutzers bearbeiten (root)\n",[257,10470,10472],{"id":10471},"das-zeitformat-5-felder-cron","Das Zeitformat (5-Felder-Cron)",[898,10474,10475,10476,10478,10479,10481,10482,10484,10485,10487,10488,10490],{},"┌──────────── Minute (0 - 59)",[1325,10477],{},"\n│ ┌────────── Stunde (0 - 23)",[1325,10480],{},"\n│ │ ┌──────── Tag (Monat) (1 - 31)",[1325,10483],{},"\n│ │ │ ┌────── Monat (1 - 12 oder jan,feb,...)",[1325,10486],{},"\n│ │ │ │ ┌──── Wochentag (0 - 7, 0 und 7 = Sonntag, oder sun,mon,...)",[1325,10489],{},"\n│ │ │ │ │",[992,10492,10493],{},[995,10494,10495],{},[992,10496,10497],{},[995,10498,10499],{},[992,10500,10501],{},[995,10502,10503],{},[992,10504,10505],{},[995,10506,10507],{},[992,10508,10509],{},[995,10510,271],{},[257,10512,10514],{"id":10513},"sonderzeichen-in-cron","Sonderzeichen in cron",[15,10516,10517,10533],{},[18,10518,10519],{},[21,10520,10521,10525,10529],{},[24,10522,10523],{},[27,10524,7634],{},[24,10526,10527],{},[27,10528,417],{},[24,10530,10531],{},[27,10532,422],{},[41,10534,10535,10545,10555,10565],{},[21,10536,10537,10539,10542],{},[46,10538,429],{},[46,10540,10541],{},"Jeden möglichen Wert",[46,10543,10544],{},"* in Stunde = jede Stunde",[21,10546,10547,10549,10552],{},[46,10548,7880],{},[46,10550,10551],{},"Liste von Werten",[46,10553,10554],{},"1,3,5 = Minute 1, 3 und 5",[21,10556,10557,10559,10562],{},[46,10558,6552],{},[46,10560,10561],{},"Bereich",[46,10563,10564],{},"9-17 = von 9 bis 17 Uhr",[21,10566,10567,10570,10573],{},[46,10568,10569],{},"\u002F",[46,10571,10572],{},"Schrittweite (Step)",[46,10574,10575],{},"*\u002F5 = alle 5 Minuten",[257,10577,10579],{"id":10578},"das-slash-schrittweite-ausführlich-erklärt","Das \u002F (Slash \u002F Schrittweite) – ausführlich erklärt",[898,10581,10582],{},[27,10583,10584],{},"Der Slash definiert eine Schrittweite innerhalb eines Wertebereichs.",[898,10586,10587],{},"BEREICH\u002FSCHRITT",[992,10589,10590,10598,10606,10614],{},[995,10591,10592,10597],{},[27,10593,10594],{},[911,10595,10596],{},"*\u002F4"," im Minutenfeld: „Von 0 bis 59, jeden 4. Wert\" → Minute 0, 4, 8, 12, 16, 20, ...56",[995,10599,10600,10605],{},[27,10601,10602],{},[911,10603,10604],{},"0\u002F4"," im Minutenfeld: „Starte bei 0, dann alle 4\" → Minute 0, 4, 8, 12, ...56 (identisch zu *\u002F4)",[995,10607,10608,10613],{},[27,10609,10610],{},[911,10611,10612],{},"2\u002F4"," im Minutenfeld: „Starte bei 2, dann alle 4\" → Minute 2, 6, 10, 14, ...58",[995,10615,10616,10621],{},[27,10617,10618],{},[911,10619,10620],{},"10-30\u002F5"," im Minutenfeld: „Von 10 bis 30, alle 5\" → Minute 10, 15, 20, 25, 30",[898,10623,10624,10633],{},[27,10625,10626,10627,10629,10630,10632],{},"Fazit: ",[911,10628,10604],{}," und ",[911,10631,10596],{}," sind im Minutenfeld identisch",", da * für 0-59 steht und 0\u002F4 explizit bei 0 startet.",[257,10635,10637],{"id":10636},"das-6-felder-format-quartzspring","Das 6-Felder-Format (Quartz\u002FSpring)",[898,10639,10640,10641,8402],{},"Manche Systeme (Java Quartz Scheduler, Spring Boot Cron, manche DevOps-Tools) verwenden ein ",[27,10642,10643],{},"6-Felder-Format mit Sekunden",[898,10645,10646,10647,10649,10650,10652,10653,10655,10656,10658,10659,10661,10662,10664],{},"┌────────────── Sekunde (0 - 59)",[1325,10648],{},"\n│ ┌──────────── Minute (0 - 59)",[1325,10651],{},"\n│ │ ┌────────── Stunde (0 - 23)",[1325,10654],{},"\n│ │ │ ┌──────── Tag (Monat) (1 - 31)",[1325,10657],{},"\n│ │ │ │ ┌────── Monat (1 - 12)",[1325,10660],{},"\n│ │ │ │ │ ┌──── Wochentag (0 - 7)",[1325,10663],{},"\n│ │ │ │ │ │",[992,10666,10667],{},[995,10668,10669],{},[992,10670,10671],{},[995,10672,10673],{},[992,10674,10675],{},[995,10676,10677],{},[992,10678,10679],{},[995,10680,10681],{},[992,10682,10683],{},[995,10684,10685],{},[992,10686,10687],{},[995,10688,271],{},[898,10690,10691,10696],{},[27,10692,10693],{},[911,10694,10695],{},"0\u002F4 * * * * *"," (6 Felder, Quartz-Format):",[992,10698,10699,10702,10705],{},[995,10700,10701],{},"Sekunden-Feld: 0\u002F4 → Starte bei Sekunde 0, alle 4 Sekunden → 0, 4, 8, 12, ...56",[995,10703,10704],{},"Alle anderen Felder: * → immer",[995,10706,10707],{},[27,10708,10709],{},"Bedeutung: Alle 4 Sekunden, jede Minute, jede Stunde, jeden Tag...",[898,10711,10712,10715,10716,10719],{},[27,10713,10714],{},"Wichtig:"," Standard-Linux-cron (Vixie Cron, cronie) verwendet ",[27,10717,10718],{},"5 Felder"," ohne Sekunden. Die 6-Felder-Variante ist bei systemd-Timer oder Spring @Scheduled üblich.",[257,10721,10723],{"id":10722},"vordefinierte-makros-nur-5-felder-cron","Vordefinierte Makros (nur 5-Felder-cron)",[15,10725,10726,10744],{},[18,10727,10728],{},[21,10729,10730,10735,10739],{},[24,10731,10732],{},[27,10733,10734],{},"Makro",[24,10736,10737],{},[27,10738,417],{},[24,10740,10741],{},[27,10742,10743],{},"Äquivalent",[41,10745,10746,10757,10768,10779,10790,10801],{},[21,10747,10748,10751,10754],{},[46,10749,10750],{},"@reboot",[46,10752,10753],{},"Bei jedem Start",[46,10755,10756],{},"—",[21,10758,10759,10762,10765],{},[46,10760,10761],{},"@yearly \u002F @annually",[46,10763,10764],{},"Einmal jährlich",[46,10766,10767],{},"0 0 1 1 *",[21,10769,10770,10773,10776],{},[46,10771,10772],{},"@monthly",[46,10774,10775],{},"Einmal monatlich",[46,10777,10778],{},"0 0 1 * *",[21,10780,10781,10784,10787],{},[46,10782,10783],{},"@weekly",[46,10785,10786],{},"Einmal wöchentlich",[46,10788,10789],{},"0 0 * * 0",[21,10791,10792,10795,10798],{},[46,10793,10794],{},"@daily \u002F @midnight",[46,10796,10797],{},"Täglich um Mitternacht",[46,10799,10800],{},"0 0 * * *",[21,10802,10803,10806,10809],{},[46,10804,10805],{},"@hourly",[46,10807,10808],{},"Jede Stunde",[46,10810,10811],{},"0 * * * *",[257,10813,1166],{"id":10814},"beispiele-4",[10,10816,10818],{"id":10817},"jede-minute","Jede Minute",[992,10820,10821],{},[995,10822,10823],{},[992,10824,10825],{},[995,10826,10827],{},[992,10828,10829],{},[995,10830,10831],{},[992,10832,10833],{},[995,10834,10835],{},[992,10836,10837],{},[995,10838,10839],{},"\u002Fskript.sh",[10,10841,10843],{"id":10842},"alle-5-minuten","Alle 5 Minuten",[898,10845,10846],{},"*\u002F5 * * * * \u002Fskript.sh",[10,10848,10850],{"id":10849},"alle-4-minuten-ab-minute-0","Alle 4 Minuten (ab Minute 0)",[898,10852,10853],{},"0\u002F4 * * * * \u002Fskript.sh",[10,10855,10857],{"id":10856},"oder-äquivalent","oder äquivalent:",[898,10859,10860],{},"*\u002F4 * * * * \u002Fskript.sh",[10,10862,10864],{"id":10863},"alle-4-minuten-aber-startend-bei-minute-2","Alle 4 Minuten, aber STARTEND bei Minute 2",[898,10866,10867],{},"2\u002F4 * * * * \u002Fskript.sh # → 2, 6, 10, 14, ...",[10,10869,10871],{"id":10870},"täglich-um-330-uhr","Täglich um 3:30 Uhr",[898,10873,10874],{},"30 3 * * * \u002Fbackup.sh",[10,10876,10878],{"id":10877},"montag-bis-freitag-um-800-uhr","Montag bis Freitag um 8:00 Uhr",[898,10880,10881],{},"0 8 * * 1-5 \u002Fbenutzer_check.sh",[10,10883,10885],{"id":10884},"jeden-1-des-monats-um-mitternacht","Jeden 1. des Monats um Mitternacht",[898,10887,10888],{},"0 0 1 * * \u002Fmonatsabschluss.sh",[10,10890,10892],{"id":10891},"stündlich-in-der-geschäftszeit-9-17-uhr-mo-fr","Stündlich in der Geschäftszeit (9-17 Uhr, Mo-Fr)",[898,10894,10895],{},"0 9-17 * * 1-5 \u002Fpruefe_server.sh",[10,10897,10899],{"id":10898},"um-600-und-1800-uhr-täglich","Um 6:00 und 18:00 Uhr täglich",[898,10901,10902],{},"0 6,18 * * * \u002Fcheck.sh",[10,10904,10906],{"id":10905},"alle-15-minuten-zwischen-8-und-20-uhr","Alle 15 Minuten zwischen 8 und 20 Uhr",[898,10908,10909],{},"*\u002F15 8-20 * * * \u002Fcheck.sh",[10,10911,10913],{"id":10912},"beim-systemstart","Beim Systemstart",[898,10915,10916],{},"@reboot \u002Fhome\u002Fuser\u002Fstart_dienst.sh",[10,10918,10920],{"id":10919},"wöchentlich-sonntag-000-uhr","Wöchentlich (Sonntag 0:00 Uhr)",[898,10922,10923],{},"@weekly \u002Fbackup_woche.sh",[10,10925,10927],{"id":10926},"ausgabe-in-logdatei-umleiten","Ausgabe in Logdatei umleiten",[898,10929,10930],{},"0 2 * * * \u002Fbackup.sh >>\u002Fvar\u002Flog\u002Fbackup.log 2>&1",[10,10932,10934],{"id":10933},"ausgabe-unterdrücken","Ausgabe unterdrücken",[898,10936,10937],{},"0 * * * * \u002Fcheck.sh >\u002Fdev\u002Fnull 2>&1",[10,10939,10941],{"id":10940},"mit-benutzerumgebung-path-explizit-setzen","Mit Benutzerumgebung (PATH explizit setzen)",[904,10943,10945],{"className":906,"code":10944,"language":908,"meta":909,"style":909},"PATH=\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fsbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin\n\n",[911,10946,10947],{"__ignoreMap":909},[452,10948,10949,10952,10954],{"class":915,"line":916},[452,10950,10951],{"class":1298},"PATH",[452,10953,1862],{"class":1473},[452,10955,10956],{"class":923},"\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fsbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin\n",[898,10958,10959],{},"0 3 * * * \u002Feigenes\u002Fbackup.sh",[257,10961,10963],{"id":10962},"cron-umgebungsvariablen","cron-Umgebungsvariablen",[904,10965,10969],{"className":10966,"code":10967,"language":10968,"meta":909,"style":909},"language-dockerfile shiki shiki-themes github-light github-dark","# Am Anfang der crontab-Datei setzbar:\n\nSHELL=\u002Fbin\u002Fbash\n\n","dockerfile",[911,10970,10971,10976,10980],{"__ignoreMap":909},[452,10972,10973],{"class":915,"line":916},[452,10974,10975],{"class":1200},"# Am Anfang der crontab-Datei setzbar:\n",[452,10977,10978],{"class":915,"line":1190},[452,10979,1194],{"emptyLinePlaceholder":1193},[452,10981,10982],{"class":915,"line":1197},[452,10983,10984],{"class":1298},"SHELL=\u002Fbin\u002Fbash\n",[904,10986,10988],{"className":906,"code":10987,"language":908,"meta":909,"style":909},"PATH=\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin\n\nMAILTO=admin@example.com # Ausgabe per Mail senden (leer = kein Mail)\n\nHOME=\u002Froot\n\n",[911,10989,10990,10999,11003,11016,11020],{"__ignoreMap":909},[452,10991,10992,10994,10996],{"class":915,"line":916},[452,10993,10951],{"class":1298},[452,10995,1862],{"class":1473},[452,10997,10998],{"class":923},"\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin\n",[452,11000,11001],{"class":915,"line":1190},[452,11002,1194],{"emptyLinePlaceholder":1193},[452,11004,11005,11008,11010,11013],{"class":915,"line":1197},[452,11006,11007],{"class":1298},"MAILTO",[452,11009,1862],{"class":1473},[452,11011,11012],{"class":923},"admin@example.com",[452,11014,11015],{"class":1200}," # Ausgabe per Mail senden (leer = kein Mail)\n",[452,11017,11018],{"class":915,"line":1204},[452,11019,1194],{"emptyLinePlaceholder":1193},[452,11021,11022,11025,11027],{"class":915,"line":1209},[452,11023,11024],{"class":1298},"HOME",[452,11026,1862],{"class":1473},[452,11028,11029],{"class":923},"\u002Froot\n",[257,11031,11033],{"id":11032},"systemweite-cron-verzeichnisse","Systemweite cron-Verzeichnisse",[898,11035,11036],{},"\u002Fetc\u002Fcrontab # Systemweite crontab (hat Benutzer-Spalte!)",[898,11038,11039],{},"\u002Fetc\u002Fcron.d\u002F # Weitere systemweite Cron-Dateien",[898,11041,11042],{},"\u002Fetc\u002Fcron.hourly\u002F # Skripte die stündlich laufen",[898,11044,11045],{},"\u002Fetc\u002Fcron.daily\u002F # Skripte die täglich laufen",[898,11047,11048],{},"\u002Fetc\u002Fcron.weekly\u002F # Skripte die wöchentlich laufen",[898,11050,11051],{},"\u002Fetc\u002Fcron.monthly\u002F # Skripte die monatlich laufen",[257,11053,11055],{"id":11054},"ausgabe-umleiten","Ausgabe umleiten:",[10,11057,11059],{"id":11058},"in-datei-umleiten","In Datei umleiten",[992,11061,11062],{},[995,11063,11064],{},[992,11065,11066],{},[995,11067,11068],{},[992,11069,11070],{},[995,11071,11072],{},[992,11073,11074],{},[995,11075,11076],{},[992,11077,11078],{},[995,11079,11080],{},"echo \"test\" >\u002Fhome\u002Fuser\u002Foutput.txt 2>&1",[10,11082,11084],{"id":11083},"an-terminal-senden","An Terminal senden",[992,11086,11087],{},[995,11088,11089],{},[992,11090,11091],{},[995,11092,11093],{},[992,11094,11095],{},[995,11096,11097],{},[992,11098,11099],{},[995,11100,11101],{},[992,11102,11103],{},[995,11104,11105],{},"echo \"test\" >\u002Fdev\u002Fpts\u002F1",[10,11107,11108],{"id":11108},"rsync",[257,11110,902],{"id":11111},"grundprinzip-3",[898,11113,11114,11115,11118,11119,11122],{},"rsync (Remote Sync) ist ein Werkzeug zum ",[27,11116,11117],{},"effizienten Synchronisieren von Dateien und Verzeichnissen",", lokal oder über Netzwerk (SSH). Es überträgt nur geänderte Teile von Dateien (",[27,11120,11121],{},"Delta-Transfer-Algorithmus","), was es sehr schnell macht.",[898,11124,11125],{},[27,11126,1693],{},[898,11128,11129,11130,11133],{},"rsync ",[452,11131,11132],{},"OPTIONEN"," QUELLE ZIEL",[257,11135,11137],{"id":11136},"wie-rsync-intern-funktioniert-delta-algorithmus","Wie rsync intern funktioniert (Delta-Algorithmus)",[9593,11139,11140,11143,11154,11157,11160,11167],{},[995,11141,11142],{},"Zieldatei wird in Blöcke (Chunks) aufgeteilt",[995,11144,11145,11146,11149,11150,11153],{},"Von jedem Block wird eine ",[27,11147,11148],{},"schwache Prüfsumme"," (rolling checksum) und eine ",[27,11151,11152],{},"starke Prüfsumme"," (MD4\u002FMD5) berechnet",[995,11155,11156],{},"Die Prüfsummen werden an den Sender geschickt",[995,11158,11159],{},"Der Sender findet passende Blöcke in der Quelldatei",[995,11161,11162,11163,11166],{},"Nur ",[27,11164,11165],{},"neue\u002Fgeänderte Blöcke"," werden übertragen",[995,11168,11169],{},"Das Ziel wird aus der Kombination alter und neuer Blöcke rekonstruiert",[898,11171,11172,11175],{},[27,11173,11174],{},"Ergebnis:"," Statt einer 100 MB Datei werden vielleicht nur 2 KB Unterschied übertragen.",[257,11177,11179],{"id":11178},"alle-wichtigen-optionen","Alle wichtigen Optionen",[15,11181,11182,11198],{},[18,11183,11184],{},[21,11185,11186,11190,11194],{},[24,11187,11188],{},[27,11189,1019],{},[24,11191,11192],{},[27,11193,1024],{},[24,11195,11196],{},[27,11197,417],{},[41,11199,11200,11209,11218,11228,11238,11249,11260,11271,11281,11290,11300,11311,11321,11331,11341,11351,11361,11372,11382,11392,11402,11412,11422,11432,11442,11451,11461,11470,11479,11489,11500,11511,11522,11532,11542,11552,11562,11572,11582,11592,11603,11613,11623],{},[21,11201,11202,11204,11206],{},[46,11203,1101],{},[46,11205,1104],{},[46,11207,11208],{},"Archivmodus: -rlptgoD zusammengefasst",[21,11210,11211,11213,11215],{},[46,11212,1405],{},[46,11214,1049],{},[46,11216,11217],{},"Verzeichnisse rekursiv übertragen",[21,11219,11220,11222,11225],{},[46,11221,1112],{},[46,11223,11224],{},"--links",[46,11226,11227],{},"Symlinks als Symlinks kopieren",[21,11229,11230,11232,11235],{},[46,11231,1090],{},[46,11233,11234],{},"--perms",[46,11236,11237],{},"Berechtigungen übertragen",[21,11239,11240,11243,11246],{},[46,11241,11242],{},"-t",[46,11244,11245],{},"--times",[46,11247,11248],{},"Zeitstempel übertragen",[21,11250,11251,11254,11257],{},[46,11252,11253],{},"-g",[46,11255,11256],{},"--group",[46,11258,11259],{},"Gruppeninfo übertragen",[21,11261,11262,11265,11268],{},[46,11263,11264],{},"-o",[46,11266,11267],{},"--owner",[46,11269,11270],{},"Eigentümer übertragen (root nötig)",[21,11272,11273,11276,11278],{},[46,11274,11275],{},"-D",[46,11277],{},[46,11279,11280],{},"Gerätedateien + Sonderdateien",[21,11282,11283,11285,11287],{},[46,11284,1057],{},[46,11286,1060],{},[46,11288,11289],{},"Ausführliche Ausgabe",[21,11291,11292,11295,11297],{},[46,11293,11294],{},"-vv",[46,11296],{},[46,11298,11299],{},"Sehr ausführliche Ausgabe",[21,11301,11302,11305,11308],{},[46,11303,11304],{},"-q",[46,11306,11307],{},"--quiet",[46,11309,11310],{},"Keine Ausgabe außer Fehlern",[21,11312,11313,11315,11318],{},[46,11314,1079],{},[46,11316,11317],{},"--dry-run",[46,11319,11320],{},"Simulation: Zeigt was passieren würde, ohne etwas zu tun",[21,11322,11323,11325,11328],{},[46,11324,4011],{},[46,11326,11327],{},"--compress",[46,11329,11330],{},"Daten komprimieren (bei langsamen Verbindungen)",[21,11332,11333,11336,11338],{},[46,11334,11335],{},"-P",[46,11337],{},[46,11339,11340],{},"--partial --progress zusammen: Fortschritt und Wiederaufnahme",[21,11342,11343,11346,11348],{},[46,11344,11345],{},"--progress",[46,11347],{},[46,11349,11350],{},"Fortschrittsanzeige",[21,11352,11353,11356,11358],{},[46,11354,11355],{},"--partial",[46,11357],{},[46,11359,11360],{},"Teilübertragungen behalten (für Wiederaufnahme)",[21,11362,11363,11366,11369],{},[46,11364,11365],{},"-e",[46,11367,11368],{},"--rsh=BEFEHL",[46,11370,11371],{},"Remote Shell angeben (z.B. -e ssh)",[21,11373,11374,11377,11379],{},[46,11375,11376],{},"--delete",[46,11378],{},[46,11380,11381],{},"Dateien im Ziel löschen, die in der Quelle fehlen",[21,11383,11384,11387,11389],{},[46,11385,11386],{},"--delete-before",[46,11388],{},[46,11390,11391],{},"Löschen vor dem Übertragen",[21,11393,11394,11397,11399],{},[46,11395,11396],{},"--delete-after",[46,11398],{},[46,11400,11401],{},"Löschen nach dem Übertragen",[21,11403,11404,11407,11409],{},[46,11405,11406],{},"--exclude=MUSTER",[46,11408],{},[46,11410,11411],{},"Dateien\u002FVerzeichnisse ausschließen",[21,11413,11414,11417,11419],{},[46,11415,11416],{},"--exclude-from=DATEI",[46,11418],{},[46,11420,11421],{},"Ausschlussliste aus Datei",[21,11423,11424,11427,11429],{},[46,11425,11426],{},"--include=MUSTER",[46,11428],{},[46,11430,11431],{},"Ausschluss aufheben",[21,11433,11434,11437,11439],{},[46,11435,11436],{},"--filter=REGEL",[46,11438],{},[46,11440,11441],{},"Flexible Filterregel",[21,11443,11444,11446,11448],{},[46,11445,1148],{},[46,11447],{},[46,11449,11450],{},"Sicherungskopien erstellen",[21,11452,11453,11456,11458],{},[46,11454,11455],{},"--backup-dir=DIR",[46,11457],{},[46,11459,11460],{},"Backup-Verzeichnis für geänderte Dateien",[21,11462,11463,11465,11467],{},[46,11464,1156],{},[46,11466],{},[46,11468,11469],{},"Backup-Suffix (Standard: ~)",[21,11471,11472,11474,11476],{},[46,11473,1035],{},[46,11475,1038],{},[46,11477,11478],{},"Neuere Zieldateien nicht überschreiben",[21,11480,11481,11483,11486],{},[46,11482,3648],{},[46,11484,11485],{},"--checksum",[46,11487,11488],{},"Vergleich per Prüfsumme statt Größe+Zeit",[21,11490,11491,11494,11497],{},[46,11492,11493],{},"-H",[46,11495,11496],{},"--hard-links",[46,11498,11499],{},"Hardlinks erhalten",[21,11501,11502,11505,11508],{},[46,11503,11504],{},"-A",[46,11506,11507],{},"--acls",[46,11509,11510],{},"ACLs übertragen",[21,11512,11513,11516,11519],{},[46,11514,11515],{},"-X",[46,11517,11518],{},"--xattrs",[46,11520,11521],{},"Erweiterte Attribute übertragen",[21,11523,11524,11527,11529],{},[46,11525,11526],{},"--chmod=RECHTE",[46,11528],{},[46,11530,11531],{},"Berechtigungen beim Ziel setzen",[21,11533,11534,11537,11539],{},[46,11535,11536],{},"--chown=USER:GRUPPE",[46,11538],{},[46,11540,11541],{},"Eigentümer beim Ziel setzen",[21,11543,11544,11547,11549],{},[46,11545,11546],{},"--max-size=GRÖSSE",[46,11548],{},[46,11550,11551],{},"Maximale Dateigröße (z.B. --max-size=100M)",[21,11553,11554,11557,11559],{},[46,11555,11556],{},"--min-size=GRÖSSE",[46,11558],{},[46,11560,11561],{},"Mindestdateigröße",[21,11563,11564,11567,11569],{},[46,11565,11566],{},"--bwlimit=KBPS",[46,11568],{},[46,11570,11571],{},"Bandbreite begrenzen (KB\u002Fs)",[21,11573,11574,11577,11579],{},[46,11575,11576],{},"--timeout=SEKS",[46,11578],{},[46,11580,11581],{},"Verbindungs-Timeout setzen",[21,11583,11584,11587,11589],{},[46,11585,11586],{},"--stats",[46,11588],{},[46,11590,11591],{},"Übertragungsstatistik anzeigen",[21,11593,11594,11597,11600],{},[46,11595,11596],{},"-h",[46,11598,11599],{},"--human-readable",[46,11601,11602],{},"Größen leserlich darstellen",[21,11604,11605,11608,11610],{},[46,11606,11607],{},"--log-file=DATEI",[46,11609],{},[46,11611,11612],{},"Log in Datei schreiben",[21,11614,11615,11618,11620],{},[46,11616,11617],{},"--password-file=DATEI",[46,11619],{},[46,11621,11622],{},"Passwort aus Datei lesen",[21,11624,11625,11628,11630],{},[46,11626,11627],{},"--port=PORT",[46,11629],{},[46,11631,11632],{},"Alternativen Port verwenden",[257,11634,11636],{"id":11635},"der-slash-trick-sehr-wichtig","Der Slash-Trick (sehr wichtig!)",[904,11638,11640],{"className":906,"code":11639,"language":908,"meta":909,"style":909},"rsync -av \u002Fquelle \u002Fziel # Kopiert den Ordner \"quelle\" IN \"ziel\" → \u002Fziel\u002Fquelle\u002F...\n\nrsync -av \u002Fquelle\u002F \u002Fziel # Kopiert den INHALT von \"quelle\" → \u002Fziel\u002F...\n\n",[911,11641,11642,11658,11662],{"__ignoreMap":909},[452,11643,11644,11646,11649,11652,11655],{"class":915,"line":916},[452,11645,11108],{"class":919},[452,11647,11648],{"class":975}," -av",[452,11650,11651],{"class":923}," \u002Fquelle",[452,11653,11654],{"class":923}," \u002Fziel",[452,11656,11657],{"class":1200}," # Kopiert den Ordner \"quelle\" IN \"ziel\" → \u002Fziel\u002Fquelle\u002F...\n",[452,11659,11660],{"class":915,"line":1190},[452,11661,1194],{"emptyLinePlaceholder":1193},[452,11663,11664,11666,11668,11671,11673],{"class":915,"line":1197},[452,11665,11108],{"class":919},[452,11667,11648],{"class":975},[452,11669,11670],{"class":923}," \u002Fquelle\u002F",[452,11672,11654],{"class":923},[452,11674,11675],{"class":1200}," # Kopiert den INHALT von \"quelle\" → \u002Fziel\u002F...\n",[898,11677,11678],{},"Der abschließende \u002F an der Quelle macht den Unterschied!",[257,11680,1166],{"id":11681},"beispiele-5",[10,11683,11685],{"id":11684},"lokale-synchronisation-einfach","Lokale Synchronisation (einfach)",[904,11687,11689],{"className":906,"code":11688,"language":908,"meta":909,"style":909},"rsync -av \u002Fhome\u002Fuser\u002Fdaten\u002F \u002Fbackup\u002Fdaten\u002F\n\n# Mit Simulation zuerst überprüfen (-n = dry run)\n\nrsync -avn \u002Fhome\u002Fuser\u002Fdaten\u002F \u002Fbackup\u002Fdaten\u002F\n\n# Remote-Backup über SSH\n\nrsync -avz \u002Fhome\u002Fuser\u002Fdokumente\u002F benutzer@server:\u002Fbackup\u002Fdokumente\u002F\n\n# Remote → Lokal (pull)\n\nrsync -avz benutzer@server:\u002Fvar\u002Fwww\u002Fhtml\u002F \u002Flokal\u002Fwebseite\u002F\n\n# Backup mit --delete (spiegelt exakt)\n\nrsync -av --delete \u002Fhome\u002Fuser\u002F \u002Fbackup\u002Fuser\u002F\n\n# SSH-Port 2222 verwenden\n\nrsync -avz -e \"ssh -p 2222\" \u002Fdaten\u002F user@server:\u002Fbackup\u002F\n\n# SSH-Key angeben\n\nrsync -avz -e \"ssh -i ~\u002F.ssh\u002Fmein_key\" \u002Fdaten\u002F user@server:\u002Fbackup\u002F\n\n# Bestimmte Typen ausschließen\n\nrsync -av --exclude=\".tmp\" --exclude=\".log\" \u002Fdaten\u002F \u002Fbackup\u002Fdaten\u002F\n\n# Ausschlussliste aus Datei (eine Regel pro Zeile)\n\nrsync -av --exclude-from=\u002Fhome\u002Fuser\u002F.rsync-exclude \u002Fdaten\u002F \u002Fbackup\u002F\n\n# Nur .jpg Dateien übertragen\n\nrsync -av --include=\".jpg\" --exclude=\"\" \u002Ffotos\u002F \u002Fbackup\u002Ffotos\u002F\n\n# Bandbreite begrenzen (500 KB\u002Fs)\n\nrsync -avz --bwlimit=500 \u002Fdaten\u002F user@server:\u002Fbackup\u002F\n\n# Große Dateien ausschließen\n\nrsync -av --max-size=50M \u002Fdaten\u002F \u002Fbackup\u002F\n\n# Vollständiges Backup mit Versionierung\n\nrsync -av --backup --backup-dir=\u002Fbackup\u002F$(date %Y-%m-%d) \u002Fhome\u002F \u002Fbackup\u002Faktuell\u002F\n\n# Fortschritt anzeigen\n\nrsync -av --progress \u002Fquelle\u002F \u002Fziel\u002F\n\n# Oder kürzer:\n\nrsync -avP \u002Fquelle\u002F \u002Fziel\u002F\n\n# Übertragungsstatistiken\n\nrsync -av --stats \u002Fquelle\u002F \u002Fziel\u002F\n\n# Dateien nur nach Prüfsumme vergleichen (langsamer aber genauer)\n\nrsync -avc \u002Fquelle\u002F \u002Fziel\u002F\n\n",[911,11690,11691,11702,11706,11711,11715,11726,11730,11735,11739,11752,11756,11761,11765,11777,11781,11786,11790,11805,11809,11814,11818,11835,11839,11844,11848,11863,11867,11872,11876,11897,11901,11906,11910,11924,11928,11933,11937,11960,11964,11969,11973,11986,11990,11995,11999,12012,12016,12021,12025,12051,12055,12060,12064,12078,12082,12087,12091,12102,12106,12111,12115,12128,12132,12137,12141],{"__ignoreMap":909},[452,11692,11693,11695,11697,11699],{"class":915,"line":916},[452,11694,11108],{"class":919},[452,11696,11648],{"class":975},[452,11698,1247],{"class":923},[452,11700,11701],{"class":923}," \u002Fbackup\u002Fdaten\u002F\n",[452,11703,11704],{"class":915,"line":1190},[452,11705,1194],{"emptyLinePlaceholder":1193},[452,11707,11708],{"class":915,"line":1197},[452,11709,11710],{"class":1200},"# Mit Simulation zuerst überprüfen (-n = dry run)\n",[452,11712,11713],{"class":915,"line":1204},[452,11714,1194],{"emptyLinePlaceholder":1193},[452,11716,11717,11719,11722,11724],{"class":915,"line":1209},[452,11718,11108],{"class":919},[452,11720,11721],{"class":975}," -avn",[452,11723,1247],{"class":923},[452,11725,11701],{"class":923},[452,11727,11728],{"class":915,"line":1223},[452,11729,1194],{"emptyLinePlaceholder":1193},[452,11731,11732],{"class":915,"line":1228},[452,11733,11734],{"class":1200},"# Remote-Backup über SSH\n",[452,11736,11737],{"class":915,"line":1234},[452,11738,1194],{"emptyLinePlaceholder":1193},[452,11740,11741,11743,11746,11749],{"class":915,"line":1239},[452,11742,11108],{"class":919},[452,11744,11745],{"class":975}," -avz",[452,11747,11748],{"class":923}," \u002Fhome\u002Fuser\u002Fdokumente\u002F",[452,11750,11751],{"class":923}," benutzer@server:\u002Fbackup\u002Fdokumente\u002F\n",[452,11753,11754],{"class":915,"line":1253},[452,11755,1194],{"emptyLinePlaceholder":1193},[452,11757,11758],{"class":915,"line":1258},[452,11759,11760],{"class":1200},"# Remote → Lokal (pull)\n",[452,11762,11763],{"class":915,"line":1264},[452,11764,1194],{"emptyLinePlaceholder":1193},[452,11766,11767,11769,11771,11774],{"class":915,"line":1269},[452,11768,11108],{"class":919},[452,11770,11745],{"class":975},[452,11772,11773],{"class":923}," benutzer@server:\u002Fvar\u002Fwww\u002Fhtml\u002F",[452,11775,11776],{"class":923}," \u002Flokal\u002Fwebseite\u002F\n",[452,11778,11779],{"class":915,"line":1558},[452,11780,1194],{"emptyLinePlaceholder":1193},[452,11782,11783],{"class":915,"line":1563},[452,11784,11785],{"class":1200},"# Backup mit --delete (spiegelt exakt)\n",[452,11787,11788],{"class":915,"line":1586},[452,11789,1194],{"emptyLinePlaceholder":1193},[452,11791,11792,11794,11796,11799,11802],{"class":915,"line":1591},[452,11793,11108],{"class":919},[452,11795,11648],{"class":975},[452,11797,11798],{"class":975}," --delete",[452,11800,11801],{"class":923}," \u002Fhome\u002Fuser\u002F",[452,11803,11804],{"class":923}," \u002Fbackup\u002Fuser\u002F\n",[452,11806,11807],{"class":915,"line":1597},[452,11808,1194],{"emptyLinePlaceholder":1193},[452,11810,11811],{"class":915,"line":1602},[452,11812,11813],{"class":1200},"# SSH-Port 2222 verwenden\n",[452,11815,11816],{"class":915,"line":1622},[452,11817,1194],{"emptyLinePlaceholder":1193},[452,11819,11820,11822,11824,11826,11829,11832],{"class":915,"line":1627},[452,11821,11108],{"class":919},[452,11823,11745],{"class":975},[452,11825,1568],{"class":975},[452,11827,11828],{"class":923}," \"ssh -p 2222\"",[452,11830,11831],{"class":923}," \u002Fdaten\u002F",[452,11833,11834],{"class":923}," user@server:\u002Fbackup\u002F\n",[452,11836,11837],{"class":915,"line":1633},[452,11838,1194],{"emptyLinePlaceholder":1193},[452,11840,11841],{"class":915,"line":1638},[452,11842,11843],{"class":1200},"# SSH-Key angeben\n",[452,11845,11846],{"class":915,"line":1922},[452,11847,1194],{"emptyLinePlaceholder":1193},[452,11849,11850,11852,11854,11856,11859,11861],{"class":915,"line":1927},[452,11851,11108],{"class":919},[452,11853,11745],{"class":975},[452,11855,1568],{"class":975},[452,11857,11858],{"class":923}," \"ssh -i ~\u002F.ssh\u002Fmein_key\"",[452,11860,11831],{"class":923},[452,11862,11834],{"class":923},[452,11864,11865],{"class":915,"line":1942},[452,11866,1194],{"emptyLinePlaceholder":1193},[452,11868,11869],{"class":915,"line":1947},[452,11870,11871],{"class":1200},"# Bestimmte Typen ausschließen\n",[452,11873,11874],{"class":915,"line":1953},[452,11875,1194],{"emptyLinePlaceholder":1193},[452,11877,11878,11880,11882,11885,11888,11890,11893,11895],{"class":915,"line":1958},[452,11879,11108],{"class":919},[452,11881,11648],{"class":975},[452,11883,11884],{"class":975}," --exclude=",[452,11886,11887],{"class":923},"\".tmp\"",[452,11889,11884],{"class":975},[452,11891,11892],{"class":923},"\".log\"",[452,11894,11831],{"class":923},[452,11896,11701],{"class":923},[452,11898,11899],{"class":915,"line":1964},[452,11900,1194],{"emptyLinePlaceholder":1193},[452,11902,11903],{"class":915,"line":1969},[452,11904,11905],{"class":1200},"# Ausschlussliste aus Datei (eine Regel pro Zeile)\n",[452,11907,11908],{"class":915,"line":1986},[452,11909,1194],{"emptyLinePlaceholder":1193},[452,11911,11912,11914,11916,11919,11921],{"class":915,"line":1991},[452,11913,11108],{"class":919},[452,11915,11648],{"class":975},[452,11917,11918],{"class":975}," --exclude-from=\u002Fhome\u002Fuser\u002F.rsync-exclude",[452,11920,11831],{"class":923},[452,11922,11923],{"class":923}," \u002Fbackup\u002F\n",[452,11925,11926],{"class":915,"line":1997},[452,11927,1194],{"emptyLinePlaceholder":1193},[452,11929,11930],{"class":915,"line":2002},[452,11931,11932],{"class":1200},"# Nur .jpg Dateien übertragen\n",[452,11934,11935],{"class":915,"line":2008},[452,11936,1194],{"emptyLinePlaceholder":1193},[452,11938,11939,11941,11943,11946,11949,11951,11954,11957],{"class":915,"line":2013},[452,11940,11108],{"class":919},[452,11942,11648],{"class":975},[452,11944,11945],{"class":975}," --include=",[452,11947,11948],{"class":923},"\".jpg\"",[452,11950,11884],{"class":975},[452,11952,11953],{"class":923},"\"\"",[452,11955,11956],{"class":923}," \u002Ffotos\u002F",[452,11958,11959],{"class":923}," \u002Fbackup\u002Ffotos\u002F\n",[452,11961,11962],{"class":915,"line":2019},[452,11963,1194],{"emptyLinePlaceholder":1193},[452,11965,11966],{"class":915,"line":2024},[452,11967,11968],{"class":1200},"# Bandbreite begrenzen (500 KB\u002Fs)\n",[452,11970,11971],{"class":915,"line":2030},[452,11972,1194],{"emptyLinePlaceholder":1193},[452,11974,11975,11977,11979,11982,11984],{"class":915,"line":2035},[452,11976,11108],{"class":919},[452,11978,11745],{"class":975},[452,11980,11981],{"class":975}," --bwlimit=500",[452,11983,11831],{"class":923},[452,11985,11834],{"class":923},[452,11987,11988],{"class":915,"line":2056},[452,11989,1194],{"emptyLinePlaceholder":1193},[452,11991,11992],{"class":915,"line":2061},[452,11993,11994],{"class":1200},"# Große Dateien ausschließen\n",[452,11996,11997],{"class":915,"line":2067},[452,11998,1194],{"emptyLinePlaceholder":1193},[452,12000,12001,12003,12005,12008,12010],{"class":915,"line":2072},[452,12002,11108],{"class":919},[452,12004,11648],{"class":975},[452,12006,12007],{"class":975}," --max-size=50M",[452,12009,11831],{"class":923},[452,12011,11923],{"class":923},[452,12013,12014],{"class":915,"line":2078},[452,12015,1194],{"emptyLinePlaceholder":1193},[452,12017,12018],{"class":915,"line":2083},[452,12019,12020],{"class":1200},"# Vollständiges Backup mit Versionierung\n",[452,12022,12023],{"class":915,"line":2089},[452,12024,1194],{"emptyLinePlaceholder":1193},[452,12026,12027,12029,12031,12034,12037,12039,12042,12045,12048],{"class":915,"line":2094},[452,12028,11108],{"class":919},[452,12030,11648],{"class":975},[452,12032,12033],{"class":975}," --backup",[452,12035,12036],{"class":975}," --backup-dir=\u002Fbackup\u002F$(",[452,12038,790],{"class":919},[452,12040,12041],{"class":923}," %Y-%m-%d",[452,12043,12044],{"class":975},")",[452,12046,12047],{"class":923}," \u002Fhome\u002F",[452,12049,12050],{"class":923}," \u002Fbackup\u002Faktuell\u002F\n",[452,12052,12053],{"class":915,"line":2100},[452,12054,1194],{"emptyLinePlaceholder":1193},[452,12056,12057],{"class":915,"line":2105},[452,12058,12059],{"class":1200},"# Fortschritt anzeigen\n",[452,12061,12062],{"class":915,"line":2126},[452,12063,1194],{"emptyLinePlaceholder":1193},[452,12065,12066,12068,12070,12073,12075],{"class":915,"line":2131},[452,12067,11108],{"class":919},[452,12069,11648],{"class":975},[452,12071,12072],{"class":975}," --progress",[452,12074,11670],{"class":923},[452,12076,12077],{"class":923}," \u002Fziel\u002F\n",[452,12079,12080],{"class":915,"line":2155},[452,12081,1194],{"emptyLinePlaceholder":1193},[452,12083,12084],{"class":915,"line":2160},[452,12085,12086],{"class":1200},"# Oder kürzer:\n",[452,12088,12089],{"class":915,"line":2173},[452,12090,1194],{"emptyLinePlaceholder":1193},[452,12092,12093,12095,12098,12100],{"class":915,"line":2178},[452,12094,11108],{"class":919},[452,12096,12097],{"class":975}," -avP",[452,12099,11670],{"class":923},[452,12101,12077],{"class":923},[452,12103,12104],{"class":915,"line":2184},[452,12105,1194],{"emptyLinePlaceholder":1193},[452,12107,12108],{"class":915,"line":2189},[452,12109,12110],{"class":1200},"# Übertragungsstatistiken\n",[452,12112,12113],{"class":915,"line":2195},[452,12114,1194],{"emptyLinePlaceholder":1193},[452,12116,12117,12119,12121,12124,12126],{"class":915,"line":2200},[452,12118,11108],{"class":919},[452,12120,11648],{"class":975},[452,12122,12123],{"class":975}," --stats",[452,12125,11670],{"class":923},[452,12127,12077],{"class":923},[452,12129,12130],{"class":915,"line":2208},[452,12131,1194],{"emptyLinePlaceholder":1193},[452,12133,12134],{"class":915,"line":2213},[452,12135,12136],{"class":1200},"# Dateien nur nach Prüfsumme vergleichen (langsamer aber genauer)\n",[452,12138,12139],{"class":915,"line":2219},[452,12140,1194],{"emptyLinePlaceholder":1193},[452,12142,12143,12145,12148,12150],{"class":915,"line":2224},[452,12144,11108],{"class":919},[452,12146,12147],{"class":975}," -avc",[452,12149,11670],{"class":923},[452,12151,12077],{"class":923},[257,12153,12155],{"id":12154},"rsync-in-cron-jobs","rsync in cron-Jobs",[10,12157,12159],{"id":12158},"tägliches-backup-um-230-uhr","Tägliches Backup um 2:30 Uhr",[898,12161,12162],{},"30 2 * * * rsync -az --delete \u002Fhome\u002F \u002Fbackup\u002Fhome\u002F >>\u002Fvar\u002Flog\u002Fbackup.log 2>&1",[10,12164,12166],{"id":12165},"backup-mit-tar","Backup mit tar",[257,12168,12170],{"id":12169},"tar-archivierung","tar – Archivierung",[10,12172,12174],{"id":12173},"archiv-erstellen","Archiv erstellen",[904,12176,12178],{"className":906,"code":12177,"language":908,"meta":909,"style":909},"tar cvf archiv.tar datei1 datei2 verzeichnis\u002F\n\n# Archiv mit Komprimierung (gzip)\n\ntar czf archiv.tar.gz \u002Fverzeichnis\n\n# Archiv entpacken\n\ntar xvf archiv.tar\n\n# Komprimiertes Archiv entpacken\n\ntar xzf archiv.tar.gz\n\n# Inhalt anzeigen\n\ntar tf archiv.tar\n\n",[911,12179,12180,12200,12204,12209,12213,12226,12230,12235,12239,12249,12253,12258,12262,12272,12276,12281,12285],{"__ignoreMap":909},[452,12181,12182,12185,12188,12191,12194,12197],{"class":915,"line":916},[452,12183,12184],{"class":919},"tar",[452,12186,12187],{"class":923}," cvf",[452,12189,12190],{"class":923}," archiv.tar",[452,12192,12193],{"class":923}," datei1",[452,12195,12196],{"class":923}," datei2",[452,12198,12199],{"class":923}," verzeichnis\u002F\n",[452,12201,12202],{"class":915,"line":1190},[452,12203,1194],{"emptyLinePlaceholder":1193},[452,12205,12206],{"class":915,"line":1197},[452,12207,12208],{"class":1200},"# Archiv mit Komprimierung (gzip)\n",[452,12210,12211],{"class":915,"line":1204},[452,12212,1194],{"emptyLinePlaceholder":1193},[452,12214,12215,12217,12220,12223],{"class":915,"line":1209},[452,12216,12184],{"class":919},[452,12218,12219],{"class":923}," czf",[452,12221,12222],{"class":923}," archiv.tar.gz",[452,12224,12225],{"class":923}," \u002Fverzeichnis\n",[452,12227,12228],{"class":915,"line":1223},[452,12229,1194],{"emptyLinePlaceholder":1193},[452,12231,12232],{"class":915,"line":1228},[452,12233,12234],{"class":1200},"# Archiv entpacken\n",[452,12236,12237],{"class":915,"line":1234},[452,12238,1194],{"emptyLinePlaceholder":1193},[452,12240,12241,12243,12246],{"class":915,"line":1239},[452,12242,12184],{"class":919},[452,12244,12245],{"class":923}," xvf",[452,12247,12248],{"class":923}," archiv.tar\n",[452,12250,12251],{"class":915,"line":1253},[452,12252,1194],{"emptyLinePlaceholder":1193},[452,12254,12255],{"class":915,"line":1258},[452,12256,12257],{"class":1200},"# Komprimiertes Archiv entpacken\n",[452,12259,12260],{"class":915,"line":1264},[452,12261,1194],{"emptyLinePlaceholder":1193},[452,12263,12264,12266,12269],{"class":915,"line":1269},[452,12265,12184],{"class":919},[452,12267,12268],{"class":923}," xzf",[452,12270,12271],{"class":923}," archiv.tar.gz\n",[452,12273,12274],{"class":915,"line":1558},[452,12275,1194],{"emptyLinePlaceholder":1193},[452,12277,12278],{"class":915,"line":1563},[452,12279,12280],{"class":1200},"# Inhalt anzeigen\n",[452,12282,12283],{"class":915,"line":1586},[452,12284,1194],{"emptyLinePlaceholder":1193},[452,12286,12287,12289,12292],{"class":915,"line":1591},[452,12288,12184],{"class":919},[452,12290,12291],{"class":923}," tf",[452,12293,12248],{"class":923},[2652,12295,12297],{"id":12296},"optionen","Optionen:",[15,12299,12300,12312],{},[18,12301,12302],{},[21,12303,12304,12308],{},[24,12305,12306],{},[27,12307,1019],{},[24,12309,12310],{},[27,12311,39],{},[41,12313,12314,12321,12328,12336,12344,12352,12360],{},[21,12315,12316,12318],{},[46,12317,7676],{},[46,12319,12320],{},"Create (Archiv erstellen)",[21,12322,12323,12325],{},[46,12324,7764],{},[46,12326,12327],{},"Extract (Entpacken)",[21,12329,12330,12333],{},[46,12331,12332],{},"v",[46,12334,12335],{},"Verbose (Dateiliste anzeigen)",[21,12337,12338,12341],{},[46,12339,12340],{},"f",[46,12342,12343],{},"File (Archivdatei angeben)",[21,12345,12346,12349],{},[46,12347,12348],{},"z",[46,12350,12351],{},"gzip-Komprimierung",[21,12353,12354,12357],{},[46,12355,12356],{},"j",[46,12358,12359],{},"bzip2-Komprimierung",[21,12361,12362,12364],{},[46,12363,7847],{},[46,12365,12366],{},"Inhalt auflisten",[257,12368,12370],{"id":12369},"backup-skript-beispiel","Backup-Skript (Beispiel):",[904,12372,12374],{"className":906,"code":12373,"language":908,"meta":909,"style":909},"#!\u002Fusr\u002Fbin\u002Fenv bash\n\nset -euo pipefail\n\nBACKUP_SRC=(\"\u002Fetc\" \"\u002Fvar\u002Fwww\")\n\nBACKUP_DEST=\"\u002Fbackup\"\n\nRETENTION_DAYS=7\n\nLOGFILE=\"\u002Fvar\u002Flog\u002Fbackup.log\"\n\nLOCKFILE=\"\u002Ftmp\u002Fbackup.lock\"\n\nlog() {\n\necho \"$(date ' %F %T') $1\" | tee -a \"$LOGFILE\"\n\n}\n\ncleanup() {\n\nrm -f \"$LOCKFILE\"\n\n}\n\ntrap cleanup EXIT\n\n[[ -f \"$LOCKFILE\" ]] && {\n\necho \"Already running\"\n\nexit 1\n\n}\n\ntouch \"$LOCKFILE\"\n\nTIMESTAMP=$(date %F_%H-%M-%S)\n\nTARGET=\"$BACKUP_DEST\u002Fbackup_$TIMESTAMP.tar.gz\"\n\nlog \"Starting backup...\"\n\ntar -czf \"$TARGET\" \"${BACKUP_SRC[@]}\"\n\nlog \"Cleaning old backups...\"\n\nfind \"$BACKUP_DEST\" -type f -mtime $RETENTION_DAYS -name \"*.tar.gz\" -delete\n\nlog \"Backup finished.\"\n\n",[911,12375,12376,12381,12385,12395,12399,12416,12420,12430,12434,12444,12448,12458,12462,12471,12475,12483,12487,12517,12521,12526,12530,12537,12541,12554,12558,12562,12566,12575,12579,12595,12599,12606,12610,12616,12620,12624,12628,12638,12642,12658,12662,12683,12687,12694,12698,12726,12730,12737,12741,12768,12772],{"__ignoreMap":909},[452,12377,12378],{"class":915,"line":916},[452,12379,12380],{"class":1200},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[452,12382,12383],{"class":915,"line":1190},[452,12384,1194],{"emptyLinePlaceholder":1193},[452,12386,12387,12389,12392],{"class":915,"line":1197},[452,12388,8886],{"class":975},[452,12390,12391],{"class":975}," -euo",[452,12393,12394],{"class":923}," pipefail\n",[452,12396,12397],{"class":915,"line":1204},[452,12398,1194],{"emptyLinePlaceholder":1193},[452,12400,12401,12404,12406,12408,12411,12414],{"class":915,"line":1209},[452,12402,12403],{"class":1298},"BACKUP_SRC",[452,12405,1862],{"class":1473},[452,12407,2762],{"class":1298},[452,12409,12410],{"class":923},"\"\u002Fetc\"",[452,12412,12413],{"class":923}," \"\u002Fvar\u002Fwww\"",[452,12415,1879],{"class":1298},[452,12417,12418],{"class":915,"line":1223},[452,12419,1194],{"emptyLinePlaceholder":1193},[452,12421,12422,12425,12427],{"class":915,"line":1228},[452,12423,12424],{"class":1298},"BACKUP_DEST",[452,12426,1862],{"class":1473},[452,12428,12429],{"class":923},"\"\u002Fbackup\"\n",[452,12431,12432],{"class":915,"line":1234},[452,12433,1194],{"emptyLinePlaceholder":1193},[452,12435,12436,12439,12441],{"class":915,"line":1239},[452,12437,12438],{"class":1298},"RETENTION_DAYS",[452,12440,1862],{"class":1473},[452,12442,12443],{"class":923},"7\n",[452,12445,12446],{"class":915,"line":1253},[452,12447,1194],{"emptyLinePlaceholder":1193},[452,12449,12450,12453,12455],{"class":915,"line":1258},[452,12451,12452],{"class":1298},"LOGFILE",[452,12454,1862],{"class":1473},[452,12456,12457],{"class":923},"\"\u002Fvar\u002Flog\u002Fbackup.log\"\n",[452,12459,12460],{"class":915,"line":1264},[452,12461,1194],{"emptyLinePlaceholder":1193},[452,12463,12464,12466,12468],{"class":915,"line":1269},[452,12465,2407],{"class":1298},[452,12467,1862],{"class":1473},[452,12469,12470],{"class":923},"\"\u002Ftmp\u002Fbackup.lock\"\n",[452,12472,12473],{"class":915,"line":1558},[452,12474,1194],{"emptyLinePlaceholder":1193},[452,12476,12477,12480],{"class":915,"line":1563},[452,12478,12479],{"class":919},"log",[452,12481,12482],{"class":1298},"() {\n",[452,12484,12485],{"class":915,"line":1586},[452,12486,1194],{"emptyLinePlaceholder":1193},[452,12488,12489,12491,12494,12496,12499,12501,12503,12505,12508,12510,12512,12515],{"class":915,"line":1591},[452,12490,1523],{"class":975},[452,12492,12493],{"class":923}," \"$(",[452,12495,790],{"class":919},[452,12497,12498],{"class":923}," ' %F %T') ",[452,12500,5368],{"class":975},[452,12502,1876],{"class":923},[452,12504,1474],{"class":1473},[452,12506,12507],{"class":919}," tee",[452,12509,1974],{"class":975},[452,12511,1870],{"class":923},[452,12513,12514],{"class":1298},"$LOGFILE",[452,12516,1896],{"class":923},[452,12518,12519],{"class":915,"line":1597},[452,12520,1194],{"emptyLinePlaceholder":1193},[452,12522,12523],{"class":915,"line":1602},[452,12524,12525],{"class":1298},"}\n",[452,12527,12528],{"class":915,"line":1622},[452,12529,1194],{"emptyLinePlaceholder":1193},[452,12531,12532,12535],{"class":915,"line":1627},[452,12533,12534],{"class":919},"cleanup",[452,12536,12482],{"class":1298},[452,12538,12539],{"class":915,"line":1633},[452,12540,1194],{"emptyLinePlaceholder":1193},[452,12542,12543,12546,12548,12550,12552],{"class":915,"line":1638},[452,12544,12545],{"class":919},"rm",[452,12547,5006],{"class":975},[452,12549,1870],{"class":923},[452,12551,2436],{"class":1298},[452,12553,1896],{"class":923},[452,12555,12556],{"class":915,"line":1922},[452,12557,1194],{"emptyLinePlaceholder":1193},[452,12559,12560],{"class":915,"line":1927},[452,12561,12525],{"class":1298},[452,12563,12564],{"class":915,"line":1942},[452,12565,1194],{"emptyLinePlaceholder":1193},[452,12567,12568,12570,12573],{"class":915,"line":1947},[452,12569,2508],{"class":975},[452,12571,12572],{"class":923}," cleanup",[452,12574,2518],{"class":923},[452,12576,12577],{"class":915,"line":1953},[452,12578,1194],{"emptyLinePlaceholder":1193},[452,12580,12581,12584,12586,12588,12590,12592],{"class":915,"line":1958},[452,12582,12583],{"class":1298},"[[ ",[452,12585,1134],{"class":1473},[452,12587,1870],{"class":923},[452,12589,2436],{"class":1298},[452,12591,1876],{"class":923},[452,12593,12594],{"class":1298}," ]] && {\n",[452,12596,12597],{"class":915,"line":1964},[452,12598,1194],{"emptyLinePlaceholder":1193},[452,12600,12601,12603],{"class":915,"line":1969},[452,12602,1523],{"class":975},[452,12604,12605],{"class":923}," \"Already running\"\n",[452,12607,12608],{"class":915,"line":1986},[452,12609,1194],{"emptyLinePlaceholder":1193},[452,12611,12612,12614],{"class":915,"line":1991},[452,12613,2472],{"class":975},[452,12615,2475],{"class":975},[452,12617,12618],{"class":915,"line":1997},[452,12619,1194],{"emptyLinePlaceholder":1193},[452,12621,12622],{"class":915,"line":2002},[452,12623,12525],{"class":1298},[452,12625,12626],{"class":915,"line":2008},[452,12627,1194],{"emptyLinePlaceholder":1193},[452,12629,12630,12632,12634,12636],{"class":915,"line":2013},[452,12631,2493],{"class":919},[452,12633,1870],{"class":923},[452,12635,2436],{"class":1298},[452,12637,1896],{"class":923},[452,12639,12640],{"class":915,"line":2019},[452,12641,1194],{"emptyLinePlaceholder":1193},[452,12643,12644,12647,12649,12651,12653,12656],{"class":915,"line":2024},[452,12645,12646],{"class":1298},"TIMESTAMP",[452,12648,1862],{"class":1473},[452,12650,1865],{"class":1298},[452,12652,790],{"class":919},[452,12654,12655],{"class":923}," %F_%H-%M-%S",[452,12657,1879],{"class":1298},[452,12659,12660],{"class":915,"line":2030},[452,12661,1194],{"emptyLinePlaceholder":1193},[452,12663,12664,12667,12669,12671,12674,12677,12680],{"class":915,"line":2035},[452,12665,12666],{"class":1298},"TARGET",[452,12668,1862],{"class":1473},[452,12670,1876],{"class":923},[452,12672,12673],{"class":1298},"$BACKUP_DEST",[452,12675,12676],{"class":923},"\u002Fbackup_",[452,12678,12679],{"class":1298},"$TIMESTAMP",[452,12681,12682],{"class":923},".tar.gz\"\n",[452,12684,12685],{"class":915,"line":2056},[452,12686,1194],{"emptyLinePlaceholder":1193},[452,12688,12689,12691],{"class":915,"line":2061},[452,12690,12479],{"class":919},[452,12692,12693],{"class":923}," \"Starting backup...\"\n",[452,12695,12696],{"class":915,"line":2067},[452,12697,1194],{"emptyLinePlaceholder":1193},[452,12699,12700,12702,12705,12707,12710,12712,12715,12717,12720,12723],{"class":915,"line":2072},[452,12701,12184],{"class":919},[452,12703,12704],{"class":975}," -czf",[452,12706,1870],{"class":923},[452,12708,12709],{"class":1298},"$TARGET",[452,12711,1876],{"class":923},[452,12713,12714],{"class":923}," \"${",[452,12716,12403],{"class":1298},[452,12718,12719],{"class":923},"[",[452,12721,12722],{"class":1473},"@",[452,12724,12725],{"class":923},"]}\"\n",[452,12727,12728],{"class":915,"line":2078},[452,12729,1194],{"emptyLinePlaceholder":1193},[452,12731,12732,12734],{"class":915,"line":2083},[452,12733,12479],{"class":919},[452,12735,12736],{"class":923}," \"Cleaning old backups...\"\n",[452,12738,12739],{"class":915,"line":2089},[452,12740,1194],{"emptyLinePlaceholder":1193},[452,12742,12743,12745,12747,12749,12751,12753,12755,12757,12760,12762,12765],{"class":915,"line":2094},[452,12744,3264],{"class":919},[452,12746,1870],{"class":923},[452,12748,12673],{"class":1298},[452,12750,1876],{"class":923},[452,12752,3488],{"class":975},[452,12754,3515],{"class":923},[452,12756,3552],{"class":975},[452,12758,12759],{"class":1298}," $RETENTION_DAYS ",[452,12761,3302],{"class":975},[452,12763,12764],{"class":923}," \"*.tar.gz\"",[452,12766,12767],{"class":975}," -delete\n",[452,12769,12770],{"class":915,"line":2100},[452,12771,1194],{"emptyLinePlaceholder":1193},[452,12773,12774,12776],{"class":915,"line":2105},[452,12775,12479],{"class":919},[452,12777,12778],{"class":923}," \"Backup finished.\"\n",[10,12780,12782],{"id":12781},"bash-skripting","Bash-Skripting",[898,12784,12785],{},[12786,12787],"img",{"alt":909,"src":12788},"\u002Fdownloads\u002FBSA\u002Fimages\u002Fap-zsmf_img_1.png",[257,12790,12792],{"id":12791},"skript-grundlagen-datenfluss","Skript-Grundlagen & Datenfluss",[992,12794,12795,12801,12807,12813,12819,12825,12831,12837,12843,12849,12860,12869],{},[995,12796,12797,12800],{},[27,12798,12799],{},"Shebang:"," Beginne ein Skript immer mit #! (z. B. #!\u002Fbin\u002Fbash), um die Shell festzulegen.",[995,12802,12803,12806],{},[27,12804,12805],{},"Ausführbar machen",": chmod +x \u003Cscriptname>.sh",[995,12808,12809,12812],{},[27,12810,12811],{},"Ausgabe überschreiben:"," > file erstellt oder überschreibt eine Datei.",[995,12814,12815,12818],{},[27,12816,12817],{},"Ausgabe anhängen:"," >> file fügt Text ans Ende einer Datei an.",[995,12820,12821,12824],{},[27,12822,12823],{},"Eingabe lesen:"," \u003C file liest den Inhalt einer Datei ein.",[995,12826,12827,12830],{},[27,12828,12829],{},"Pipe:"," a | b leitet die Ausgabe von Befehl \"a\" als Eingabe an Befehl \"b\" weiter.",[995,12832,12833,12836],{},[27,12834,12835],{},"Kommentare",": # am Beginn der Zeile",[995,12838,12839,12842],{},[27,12840,12841],{},"Variablen-Zuweisung",": variablenname=”\u003Cwert>” (Kein Leerzeichen um das =)",[995,12844,12845,12848],{},[27,12846,12847],{},"Variablen-Aufruf",": $variablenname (Case-Sensitive)",[995,12850,12851,12854,12855],{},[27,12852,12853],{},"Umgebungsvariable",": export global=”\u003Cwert>”\n",[992,12856,12857],{},[995,12858,12859],{},"Für Unterprozesse sichtbar",[995,12861,12862,12865,12866],{},[27,12863,12864],{},"Script-Aufruf",": .\u002Fscriptname.sh ",[452,12867,12868],{},"param1",[995,12870,12871,12874,12875,7872,12877,7872,12879,12882,12883],{},[27,12872,12873],{},"User-Eingabe während des Scripts",": read ",[452,12876,1123],{},[452,12878,1405],{},[452,12880,12881],{},"-p “\u003Cprompt>”"," \u003Cvariablenname>\n",[992,12884,12885,12888,12891],{},[995,12886,12887],{},"-p “\u003Cprompt>”: Prompt vor der Eingabe",[995,12889,12890],{},"-s: verdeckte Eingabe (Passwörter)",[995,12892,12893],{},"-r: verhindert Escape-Sequenzen",[257,12895,12897],{"id":12896},"wichtige-variablen","Wichtige Variablen",[992,12899,12900,12905,12911,12917,12922,12927,12932],{},[995,12901,12902,12904],{},[27,12903,1873],{},": Der Name des aufgerufenen Programms.",[995,12906,12907,12910],{},[27,12908,12909],{},"$1, $2, …",": Das erste und zweite übergebene Argument.",[995,12912,12913,12916],{},[27,12914,12915],{},"$#",": Die Anzahl der übergebenen Argumente.",[995,12918,12919,12921],{},[27,12920,4363],{},"*: Alle übergebenen Argumente auf einmal.",[995,12923,12924,12926],{},[27,12925,8823],{},": Der Rückgabecode des letzten Befehls (0 = Fehlerfrei).",[995,12928,12929,12931],{},[27,12930,8831],{},": Die Prozess-ID (PID) des aktuellen Skripts.",[995,12933,12934,12937],{},[27,12935,12936],{},"${V:-default}",": Gibt den Wert von $V aus, oder \"default\", falls die Variable leer ist.",[257,12939,12941],{"id":12940},"rechnen-mit-variablen","Rechnen mit Variablen",[898,12943,12944],{},"In Bash sind Variablen standardmäßig Text. Wenn mit Zahlen gerechnet werden soll, muss Bash ausdrücklich gesagt werden, dass eine arithmetische Berechnung gemeint ist.",[2652,12946,12948],{"id":12947},"variable-setzen-und-ausgeben","Variable setzen und ausgeben",[904,12950,12952],{"className":906,"code":12951,"language":908,"meta":909,"style":909},"zahl=5\n\necho \"$zahl\"\n\n",[911,12953,12954,12964,12968],{"__ignoreMap":909},[452,12955,12956,12959,12961],{"class":915,"line":916},[452,12957,12958],{"class":1298},"zahl",[452,12960,1862],{"class":1473},[452,12962,12963],{"class":923},"5\n",[452,12965,12966],{"class":915,"line":1190},[452,12967,1194],{"emptyLinePlaceholder":1193},[452,12969,12970,12972,12974,12977],{"class":915,"line":1197},[452,12971,1523],{"class":975},[452,12973,1870],{"class":923},[452,12975,12976],{"class":1298},"$zahl",[452,12978,1896],{"class":923},[898,12980,10714],{},[904,12982,12984],{"className":906,"code":12983,"language":908,"meta":909,"style":909},"zahl=5 # richtig\n\nzahl = 5 # falsch!\n\nBei Variablenzuweisungen dürfen keine Leerzeichen um das = stehen.\n\n",[911,12985,12986,12998,13002,13013,13017],{"__ignoreMap":909},[452,12987,12988,12990,12992,12995],{"class":915,"line":916},[452,12989,12958],{"class":1298},[452,12991,1862],{"class":1473},[452,12993,12994],{"class":923},"5",[452,12996,12997],{"class":1200}," # richtig\n",[452,12999,13000],{"class":915,"line":1190},[452,13001,1194],{"emptyLinePlaceholder":1193},[452,13003,13004,13006,13008,13010],{"class":915,"line":1197},[452,13005,12958],{"class":919},[452,13007,6558],{"class":923},[452,13009,9468],{"class":975},[452,13011,13012],{"class":1200}," # falsch!\n",[452,13014,13015],{"class":915,"line":1204},[452,13016,1194],{"emptyLinePlaceholder":1193},[452,13018,13019,13022,13025,13028,13031,13034,13037,13039,13041],{"class":915,"line":1209},[452,13020,13021],{"class":919},"Bei",[452,13023,13024],{"class":923}," Variablenzuweisungen",[452,13026,13027],{"class":923}," dürfen",[452,13029,13030],{"class":923}," keine",[452,13032,13033],{"class":923}," Leerzeichen",[452,13035,13036],{"class":923}," um",[452,13038,945],{"class":923},[452,13040,6558],{"class":923},[452,13042,13043],{"class":923}," stehen.\n",[2652,13045,13047],{"id":13046},"rechnen-mit","Rechnen mit $(( ... ))",[898,13049,13050],{},"Die empfohlene Schreibweise für Ganzzahlrechnung ist:",[904,13052,13054],{"className":906,"code":13053,"language":908,"meta":909,"style":909},"a=10\n\nb=3\n\necho $((a + b)) # 13\n\necho $((a - b)) # 7\n\necho $((a * b)) # 30\n\necho $((a \u002F b)) # 3\n\necho $((a % b)) # 1\n\n| Operator | Bedeutung | Beispiel |\n| --- | --- | --- |\n| + | Addition | $((a + b)) |\n| - | Subtraktion | $((a - b)) |\n|  | Multiplikation | $((a  b)) |\n| \u002F | Division | $((a \u002F b)) |\n| % | Modulo \u002F Rest | $((a % b)) |\n\n",[911,13055,13056,13066,13070,13078,13082,13103,13107,13125,13129,13146,13150,13167,13171,13189,13193,13214,13231,13256,13279,13300,13323],{"__ignoreMap":909},[452,13057,13058,13061,13063],{"class":915,"line":916},[452,13059,13060],{"class":1298},"a",[452,13062,1862],{"class":1473},[452,13064,13065],{"class":923},"10\n",[452,13067,13068],{"class":915,"line":1190},[452,13069,1194],{"emptyLinePlaceholder":1193},[452,13071,13072,13074,13076],{"class":915,"line":1197},[452,13073,7668],{"class":1298},[452,13075,1862],{"class":1473},[452,13077,10134],{"class":923},[452,13079,13080],{"class":915,"line":1204},[452,13081,1194],{"emptyLinePlaceholder":1193},[452,13083,13084,13086,13089,13091,13094,13097,13100],{"class":915,"line":1209},[452,13085,1523],{"class":975},[452,13087,13088],{"class":1298}," $((",[452,13090,13060],{"class":919},[452,13092,13093],{"class":923}," +",[452,13095,13096],{"class":923}," b",[452,13098,13099],{"class":1298},")) ",[452,13101,13102],{"class":1200},"# 13\n",[452,13104,13105],{"class":915,"line":1223},[452,13106,1194],{"emptyLinePlaceholder":1193},[452,13108,13109,13111,13113,13115,13118,13120,13122],{"class":915,"line":1228},[452,13110,1523],{"class":975},[452,13112,13088],{"class":1298},[452,13114,13060],{"class":919},[452,13116,13117],{"class":923}," -",[452,13119,13096],{"class":923},[452,13121,13099],{"class":1298},[452,13123,13124],{"class":1200},"# 7\n",[452,13126,13127],{"class":915,"line":1234},[452,13128,1194],{"emptyLinePlaceholder":1193},[452,13130,13131,13133,13135,13137,13139,13141,13143],{"class":915,"line":1239},[452,13132,1523],{"class":975},[452,13134,13088],{"class":1298},[452,13136,13060],{"class":919},[452,13138,6393],{"class":975},[452,13140,13096],{"class":923},[452,13142,13099],{"class":1298},[452,13144,13145],{"class":1200},"# 30\n",[452,13147,13148],{"class":915,"line":1253},[452,13149,1194],{"emptyLinePlaceholder":1193},[452,13151,13152,13154,13156,13158,13160,13162,13164],{"class":915,"line":1258},[452,13153,1523],{"class":975},[452,13155,13088],{"class":1298},[452,13157,13060],{"class":919},[452,13159,8132],{"class":923},[452,13161,13096],{"class":923},[452,13163,13099],{"class":1298},[452,13165,13166],{"class":1200},"# 3\n",[452,13168,13169],{"class":915,"line":1264},[452,13170,1194],{"emptyLinePlaceholder":1193},[452,13172,13173,13175,13177,13179,13182,13184,13186],{"class":915,"line":1269},[452,13174,1523],{"class":975},[452,13176,13088],{"class":1298},[452,13178,13060],{"class":919},[452,13180,13181],{"class":923}," %",[452,13183,13096],{"class":923},[452,13185,13099],{"class":1298},[452,13187,13188],{"class":1200},"# 1\n",[452,13190,13191],{"class":915,"line":1558},[452,13192,1194],{"emptyLinePlaceholder":1193},[452,13194,13195,13198,13201,13203,13206,13208,13211],{"class":915,"line":1563},[452,13196,13197],{"class":1473},"|",[452,13199,13200],{"class":919}," Operator",[452,13202,1474],{"class":1473},[452,13204,13205],{"class":919}," Bedeutung",[452,13207,1474],{"class":1473},[452,13209,13210],{"class":919}," Beispiel",[452,13212,13213],{"class":1473}," |\n",[452,13215,13216,13218,13221,13223,13225,13227,13229],{"class":915,"line":1586},[452,13217,13197],{"class":1473},[452,13219,13220],{"class":919}," ---",[452,13222,1474],{"class":1473},[452,13224,13220],{"class":919},[452,13226,1474],{"class":1473},[452,13228,13220],{"class":919},[452,13230,13213],{"class":1473},[452,13232,13233,13235,13237,13239,13242,13244,13247,13249,13251,13253],{"class":915,"line":1591},[452,13234,13197],{"class":1473},[452,13236,13093],{"class":919},[452,13238,1474],{"class":1473},[452,13240,13241],{"class":919}," Addition",[452,13243,1474],{"class":1473},[452,13245,13246],{"class":919}," $((a",[452,13248,13093],{"class":923},[452,13250,13096],{"class":923},[452,13252,13099],{"class":1298},[452,13254,13255],{"class":1473},"|\n",[452,13257,13258,13260,13262,13264,13267,13269,13271,13273,13275,13277],{"class":915,"line":1597},[452,13259,13197],{"class":1473},[452,13261,13117],{"class":919},[452,13263,1474],{"class":1473},[452,13265,13266],{"class":919}," Subtraktion",[452,13268,1474],{"class":1473},[452,13270,13246],{"class":919},[452,13272,13117],{"class":923},[452,13274,13096],{"class":923},[452,13276,13099],{"class":1298},[452,13278,13255],{"class":1473},[452,13280,13281,13283,13286,13289,13291,13293,13296,13298],{"class":915,"line":1602},[452,13282,13197],{"class":1473},[452,13284,13285],{"class":1473},"  |",[452,13287,13288],{"class":919}," Multiplikation",[452,13290,1474],{"class":1473},[452,13292,13246],{"class":919},[452,13294,13295],{"class":923},"  b",[452,13297,13099],{"class":1298},[452,13299,13255],{"class":1473},[452,13301,13302,13304,13306,13308,13311,13313,13315,13317,13319,13321],{"class":915,"line":1622},[452,13303,13197],{"class":1473},[452,13305,8132],{"class":919},[452,13307,1474],{"class":1473},[452,13309,13310],{"class":919}," Division",[452,13312,1474],{"class":1473},[452,13314,13246],{"class":919},[452,13316,8132],{"class":923},[452,13318,13096],{"class":923},[452,13320,13099],{"class":1298},[452,13322,13255],{"class":1473},[452,13324,13325,13327,13329,13331,13334,13336,13339,13341,13343,13345,13347,13349],{"class":915,"line":1627},[452,13326,13197],{"class":1473},[452,13328,13181],{"class":919},[452,13330,1474],{"class":1473},[452,13332,13333],{"class":919}," Modulo",[452,13335,8132],{"class":923},[452,13337,13338],{"class":923}," Rest",[452,13340,1474],{"class":1473},[452,13342,13246],{"class":919},[452,13344,13181],{"class":923},[452,13346,13096],{"class":923},[452,13348,13099],{"class":1298},[452,13350,13255],{"class":1473},[2652,13352,13354],{"id":13353},"ergebnis-in-variable-speichern","Ergebnis in Variable speichern",[904,13356,13358],{"className":906,"code":13357,"language":908,"meta":909,"style":909},"a=7\n\nb=4\n\nergebnis=$((a + b))\n\necho \"Das Ergebnis ist: $ergebnis\"\n\n",[911,13359,13360,13368,13372,13380,13384,13403,13407],{"__ignoreMap":909},[452,13361,13362,13364,13366],{"class":915,"line":916},[452,13363,13060],{"class":1298},[452,13365,1862],{"class":1473},[452,13367,12443],{"class":923},[452,13369,13370],{"class":915,"line":1190},[452,13371,1194],{"emptyLinePlaceholder":1193},[452,13373,13374,13376,13378],{"class":915,"line":1197},[452,13375,7668],{"class":1298},[452,13377,1862],{"class":1473},[452,13379,10148],{"class":923},[452,13381,13382],{"class":915,"line":1204},[452,13383,1194],{"emptyLinePlaceholder":1193},[452,13385,13386,13389,13391,13394,13396,13398,13400],{"class":915,"line":1209},[452,13387,13388],{"class":1298},"ergebnis",[452,13390,1862],{"class":1473},[452,13392,13393],{"class":1298},"$((",[452,13395,13060],{"class":919},[452,13397,13093],{"class":923},[452,13399,13096],{"class":923},[452,13401,13402],{"class":1298},"))\n",[452,13404,13405],{"class":915,"line":1223},[452,13406,1194],{"emptyLinePlaceholder":1193},[452,13408,13409,13411,13414,13417],{"class":915,"line":1228},[452,13410,1523],{"class":975},[452,13412,13413],{"class":923}," \"Das Ergebnis ist: ",[452,13415,13416],{"class":1298},"$ergebnis",[452,13418,1896],{"class":923},[898,13420,13421],{},"Ausgabe:",[898,13423,13424],{},"Das Ergebnis ist: 11",[2652,13426,13428],{"id":13427},"variable-hochzählen","Variable hochzählen",[904,13430,13432],{"className":906,"code":13431,"language":908,"meta":909,"style":909},"zahl=1\n\nzahl=$((zahl + 1))\n\necho \"$zahl\"\n\n",[911,13433,13434,13443,13447,13464,13468],{"__ignoreMap":909},[452,13435,13436,13438,13440],{"class":915,"line":916},[452,13437,12958],{"class":1298},[452,13439,1862],{"class":1473},[452,13441,13442],{"class":923},"1\n",[452,13444,13445],{"class":915,"line":1190},[452,13446,1194],{"emptyLinePlaceholder":1193},[452,13448,13449,13451,13453,13455,13457,13459,13462],{"class":915,"line":1197},[452,13450,12958],{"class":1298},[452,13452,1862],{"class":1473},[452,13454,13393],{"class":1298},[452,13456,12958],{"class":919},[452,13458,13093],{"class":923},[452,13460,13461],{"class":975}," 1",[452,13463,13402],{"class":1298},[452,13465,13466],{"class":915,"line":1204},[452,13467,1194],{"emptyLinePlaceholder":1193},[452,13469,13470,13472,13474,13476],{"class":915,"line":1209},[452,13471,1523],{"class":975},[452,13473,1870],{"class":923},[452,13475,12976],{"class":1298},[452,13477,1896],{"class":923},[898,13479,13480],{},"Kurzformen:",[898,13482,13483],{},"((zahl++)) # um 1 erhöhen",[898,13485,13486],{},"((zahl--)) # um 1 verringern",[898,13488,13489],{},"((zahl += 5)) # 5 addieren",[898,13491,13492],{},"((zahl -= 2)) # 2 abziehen",[898,13494,3006],{},[904,13496,13498],{"className":906,"code":13497,"language":908,"meta":909,"style":909},"counter=0\n\n((counter++))\n\n((counter++))\n\necho \"$counter\"\n\n",[911,13499,13500,13510,13514,13524,13528,13536,13540],{"__ignoreMap":909},[452,13501,13502,13505,13507],{"class":915,"line":916},[452,13503,13504],{"class":1298},"counter",[452,13506,1862],{"class":1473},[452,13508,13509],{"class":923},"0\n",[452,13511,13512],{"class":915,"line":1190},[452,13513,1194],{"emptyLinePlaceholder":1193},[452,13515,13516,13519,13522],{"class":915,"line":1197},[452,13517,13518],{"class":1298},"((counter",[452,13520,13521],{"class":1473},"++",[452,13523,13402],{"class":1298},[452,13525,13526],{"class":915,"line":1204},[452,13527,1194],{"emptyLinePlaceholder":1193},[452,13529,13530,13532,13534],{"class":915,"line":1209},[452,13531,13518],{"class":1298},[452,13533,13521],{"class":1473},[452,13535,13402],{"class":1298},[452,13537,13538],{"class":915,"line":1223},[452,13539,1194],{"emptyLinePlaceholder":1193},[452,13541,13542,13544,13546,13549],{"class":915,"line":1228},[452,13543,1523],{"class":975},[452,13545,1870],{"class":923},[452,13547,13548],{"class":1298},"$counter",[452,13550,1896],{"class":923},[898,13552,13421],{},[898,13554,13555],{},"2",[2652,13557,13559],{"id":13558},"rechnen-in-bedingungen","Rechnen in Bedingungen",[904,13561,13563],{"className":906,"code":13562,"language":908,"meta":909,"style":909},"alter=20\n\nif ((alter >= 18)); then\n\necho \"Volljährig\"\n\nelse\n\necho \"Minderjährig\"\n\nfi\n\n",[911,13564,13565,13575,13579,13597,13601,13608,13612,13617,13621,13628,13632],{"__ignoreMap":909},[452,13566,13567,13570,13572],{"class":915,"line":916},[452,13568,13569],{"class":1298},"alter",[452,13571,1862],{"class":1473},[452,13573,13574],{"class":923},"20\n",[452,13576,13577],{"class":915,"line":1190},[452,13578,1194],{"emptyLinePlaceholder":1193},[452,13580,13581,13583,13586,13589,13592,13595],{"class":915,"line":1197},[452,13582,2426],{"class":1473},[452,13584,13585],{"class":1298}," ((alter ",[452,13587,13588],{"class":1473},">=",[452,13590,13591],{"class":975}," 18",[452,13593,13594],{"class":1298},")); ",[452,13596,2444],{"class":1473},[452,13598,13599],{"class":915,"line":1204},[452,13600,1194],{"emptyLinePlaceholder":1193},[452,13602,13603,13605],{"class":915,"line":1209},[452,13604,1523],{"class":975},[452,13606,13607],{"class":923}," \"Volljährig\"\n",[452,13609,13610],{"class":915,"line":1223},[452,13611,1194],{"emptyLinePlaceholder":1193},[452,13613,13614],{"class":915,"line":1228},[452,13615,13616],{"class":1473},"else\n",[452,13618,13619],{"class":915,"line":1234},[452,13620,1194],{"emptyLinePlaceholder":1193},[452,13622,13623,13625],{"class":915,"line":1239},[452,13624,1523],{"class":975},[452,13626,13627],{"class":923}," \"Minderjährig\"\n",[452,13629,13630],{"class":915,"line":1253},[452,13631,1194],{"emptyLinePlaceholder":1193},[452,13633,13634],{"class":915,"line":1258},[452,13635,2484],{"class":1473},[898,13637,13638],{},"Bei Zahlenvergleichen ist diese Schreibweise oft lesbarer als:",[904,13640,13642],{"className":906,"code":13641,"language":908,"meta":909,"style":909},"if [ \"$alter\" -ge 18 ]; then\n\necho \"Volljährig\"\n\nfi\n\n",[911,13643,13644,13666,13670,13676,13680],{"__ignoreMap":909},[452,13645,13646,13648,13650,13652,13655,13657,13660,13662,13664],{"class":915,"line":916},[452,13647,2426],{"class":1473},[452,13649,2429],{"class":1298},[452,13651,1876],{"class":923},[452,13653,13654],{"class":1298},"$alter",[452,13656,1876],{"class":923},[452,13658,13659],{"class":1473}," -ge",[452,13661,13591],{"class":975},[452,13663,2441],{"class":1298},[452,13665,2444],{"class":1473},[452,13667,13668],{"class":915,"line":1190},[452,13669,1194],{"emptyLinePlaceholder":1193},[452,13671,13672,13674],{"class":915,"line":1197},[452,13673,1523],{"class":975},[452,13675,13607],{"class":923},[452,13677,13678],{"class":915,"line":1204},[452,13679,1194],{"emptyLinePlaceholder":1193},[452,13681,13682],{"class":915,"line":1209},[452,13683,2484],{"class":1473},[2652,13685,13687],{"id":13686},"achtung-bash-rechnet-nur-mit-ganzzahlen","Achtung: Bash rechnet nur mit Ganzzahlen",[904,13689,13691],{"className":906,"code":13690,"language":908,"meta":909,"style":909},"echo $((5 \u002F 2))\n\n",[911,13692,13693],{"__ignoreMap":909},[452,13694,13695,13697,13699,13701,13703,13706],{"class":915,"line":916},[452,13696,1523],{"class":975},[452,13698,13088],{"class":1298},[452,13700,12994],{"class":919},[452,13702,8132],{"class":923},[452,13704,13705],{"class":975}," 2",[452,13707,13402],{"class":1298},[898,13709,13421],{},[898,13711,13555],{},[898,13713,13714],{},"Bash rundet nicht mathematisch, sondern schneidet Nachkommastellen ab. Für Kommazahlen nutzt man z. B. bc:",[904,13716,13718],{"className":906,"code":13717,"language":908,"meta":909,"style":909},"echo \"scale=2; 5 \u002F 2\" | bc\n\n",[911,13719,13720],{"__ignoreMap":909},[452,13721,13722,13724,13727,13729],{"class":915,"line":916},[452,13723,1523],{"class":975},[452,13725,13726],{"class":923}," \"scale=2; 5 \u002F 2\"",[452,13728,1474],{"class":1473},[452,13730,13731],{"class":919}," bc\n",[898,13733,13421],{},[898,13735,13736],{},"2.50",[2652,13738,13740],{"id":13739},"falsch-gesetzte-klammern-beim-rechnen","Falsch gesetzte Klammern beim Rechnen",[898,13742,13743],{},"Beim Rechnen mit Variablen müssen die Klammern exakt zusammenpassen. Bash unterscheidet zwischen arithmetischer Expansion $(( ... )), normaler Kommando-Ersetzung $( ... ) und Bedingungen mit (( ... )). Eine falsch gesetzte oder vergessene Klammer führt meistens zu einem Syntaxfehler oder zu einem ganz anderen Verhalten.",[898,13745,13746],{},[27,13747,13748],{},"Richtig: arithmetische Expansion",[904,13750,13752],{"className":906,"code":13751,"language":908,"meta":909,"style":909},"a=5\n\nb=2\n\necho $((a + b)) # 7\n\necho $((a * (b + 3))) # 25\n\nDie äußeren doppelten Klammern $(( ... )) bedeuten: Bash soll den Inhalt als Rechnung auswerten. Innere Klammern können wie in der Mathematik verwendet werden, um die Reihenfolge festzulegen.\n\n",[911,13753,13754,13762,13766,13775,13779,13795,13799,13823,13827],{"__ignoreMap":909},[452,13755,13756,13758,13760],{"class":915,"line":916},[452,13757,13060],{"class":1298},[452,13759,1862],{"class":1473},[452,13761,12963],{"class":923},[452,13763,13764],{"class":915,"line":1190},[452,13765,1194],{"emptyLinePlaceholder":1193},[452,13767,13768,13770,13772],{"class":915,"line":1197},[452,13769,7668],{"class":1298},[452,13771,1862],{"class":1473},[452,13773,13774],{"class":923},"2\n",[452,13776,13777],{"class":915,"line":1204},[452,13778,1194],{"emptyLinePlaceholder":1193},[452,13780,13781,13783,13785,13787,13789,13791,13793],{"class":915,"line":1209},[452,13782,1523],{"class":975},[452,13784,13088],{"class":1298},[452,13786,13060],{"class":919},[452,13788,13093],{"class":923},[452,13790,13096],{"class":923},[452,13792,13099],{"class":1298},[452,13794,13124],{"class":1200},[452,13796,13797],{"class":915,"line":1223},[452,13798,1194],{"emptyLinePlaceholder":1193},[452,13800,13801,13803,13805,13807,13809,13812,13814,13817,13820],{"class":915,"line":1228},[452,13802,1523],{"class":975},[452,13804,13088],{"class":1298},[452,13806,13060],{"class":919},[452,13808,6393],{"class":975},[452,13810,13811],{"class":1298}," (b ",[452,13813,4341],{"class":923},[452,13815,13816],{"class":975}," 3",[452,13818,13819],{"class":1298},"))) ",[452,13821,13822],{"class":1200},"# 25\n",[452,13824,13825],{"class":915,"line":1234},[452,13826,1194],{"emptyLinePlaceholder":1193},[452,13828,13829,13832,13835,13838,13841,13844,13847,13850,13853,13856,13859,13862,13865,13868,13871,13874,13877,13879,13882,13885,13887,13890,13893,13896,13899,13901,13904,13907],{"class":915,"line":1239},[452,13830,13831],{"class":919},"Die",[452,13833,13834],{"class":923}," äußeren",[452,13836,13837],{"class":923}," doppelten",[452,13839,13840],{"class":923}," Klammern",[452,13842,13843],{"class":1298}," $(( ",[452,13845,13846],{"class":975},"...",[452,13848,13849],{"class":1298}," )) ",[452,13851,13852],{"class":923},"bedeuten:",[452,13854,13855],{"class":923}," Bash",[452,13857,13858],{"class":923}," soll",[452,13860,13861],{"class":923}," den",[452,13863,13864],{"class":923}," Inhalt",[452,13866,13867],{"class":923}," als",[452,13869,13870],{"class":923}," Rechnung",[452,13872,13873],{"class":923}," auswerten.",[452,13875,13876],{"class":923}," Innere",[452,13878,13840],{"class":923},[452,13880,13881],{"class":923}," können",[452,13883,13884],{"class":923}," wie",[452,13886,5294],{"class":923},[452,13888,13889],{"class":923}," der",[452,13891,13892],{"class":923}," Mathematik",[452,13894,13895],{"class":923}," verwendet",[452,13897,13898],{"class":923}," werden,",[452,13900,13036],{"class":923},[452,13902,13903],{"class":923}," die",[452,13905,13906],{"class":923}," Reihenfolge",[452,13908,13909],{"class":923}," festzulegen.\n",[898,13911,13912],{},[27,13913,13914],{},"Falsch: schließende Klammer fehlt",[904,13916,13918],{"className":906,"code":13917,"language":908,"meta":909,"style":909},"a=5\n\nb=2\n\necho $((a + b)\n\n",[911,13919,13920,13928,13932,13940,13944],{"__ignoreMap":909},[452,13921,13922,13924,13926],{"class":915,"line":916},[452,13923,13060],{"class":1298},[452,13925,1862],{"class":1473},[452,13927,12963],{"class":923},[452,13929,13930],{"class":915,"line":1190},[452,13931,1194],{"emptyLinePlaceholder":1193},[452,13933,13934,13936,13938],{"class":915,"line":1197},[452,13935,7668],{"class":1298},[452,13937,1862],{"class":1473},[452,13939,13774],{"class":923},[452,13941,13942],{"class":915,"line":1204},[452,13943,1194],{"emptyLinePlaceholder":1193},[452,13945,13946,13948,13950,13952,13954,13956],{"class":915,"line":1209},[452,13947,1523],{"class":975},[452,13949,13088],{"class":1298},[452,13951,13060],{"class":919},[452,13953,13093],{"class":923},[452,13955,13096],{"class":923},[452,13957,1879],{"class":1298},[898,13959,13960],{},"Typische Folge: Bash meldet einen Syntaxfehler, weil die arithmetische Expansion nicht korrekt abgeschlossen wurde, z. B. \"unexpected EOF\" oder \"syntax error\".",[898,13962,13963],{},[27,13964,13965],{},"Falsch: $() statt $(( )) verwendet",[904,13967,13969],{"className":906,"code":13968,"language":908,"meta":909,"style":909},"a=5\n\nb=2\n\necho $(a + b)\n\nDas ist keine Rechnung. $( ... ) bedeutet Kommando-Ersetzung. Bash versucht also, den Inhalt als Befehl auszuführen. Dadurch entstehen Fehler wie \"command not found\".\n\n",[911,13970,13971,13979,13983,13991,13995,14010,14014],{"__ignoreMap":909},[452,13972,13973,13975,13977],{"class":915,"line":916},[452,13974,13060],{"class":1298},[452,13976,1862],{"class":1473},[452,13978,12963],{"class":923},[452,13980,13981],{"class":915,"line":1190},[452,13982,1194],{"emptyLinePlaceholder":1193},[452,13984,13985,13987,13989],{"class":915,"line":1197},[452,13986,7668],{"class":1298},[452,13988,1862],{"class":1473},[452,13990,13774],{"class":923},[452,13992,13993],{"class":915,"line":1204},[452,13994,1194],{"emptyLinePlaceholder":1193},[452,13996,13997,13999,14002,14004,14006,14008],{"class":915,"line":1209},[452,13998,1523],{"class":975},[452,14000,14001],{"class":1298}," $(",[452,14003,13060],{"class":919},[452,14005,13093],{"class":923},[452,14007,13096],{"class":923},[452,14009,1879],{"class":1298},[452,14011,14012],{"class":915,"line":1223},[452,14013,1194],{"emptyLinePlaceholder":1193},[452,14015,14016,14019,14021,14023,14026,14029,14031,14034,14037,14040,14042,14045,14048,14050,14052,14054,14057,14060,14063,14066,14069,14071],{"class":915,"line":1228},[452,14017,14018],{"class":919},"Das",[452,14020,5250],{"class":923},[452,14022,13030],{"class":923},[452,14024,14025],{"class":923}," Rechnung.",[452,14027,14028],{"class":1298}," $( ",[452,14030,13846],{"class":975},[452,14032,14033],{"class":1298}," ) ",[452,14035,14036],{"class":923},"bedeutet",[452,14038,14039],{"class":923}," Kommando-Ersetzung.",[452,14041,13855],{"class":923},[452,14043,14044],{"class":923}," versucht",[452,14046,14047],{"class":923}," also,",[452,14049,13861],{"class":923},[452,14051,13864],{"class":923},[452,14053,13867],{"class":923},[452,14055,14056],{"class":923}," Befehl",[452,14058,14059],{"class":923}," auszuführen.",[452,14061,14062],{"class":923}," Dadurch",[452,14064,14065],{"class":923}," entstehen",[452,14067,14068],{"class":923}," Fehler",[452,14070,13884],{"class":923},[452,14072,14073],{"class":923}," \"command not found\".\n",[898,14075,14076],{},[27,14077,14078],{},"Falsch: Klammern verändern die Rechenreihenfolge",[904,14080,14082],{"className":906,"code":14081,"language":908,"meta":909,"style":909},"a=10\n\nb=2\n\nc=3\n\necho $((a + b * c)) # 16, weil Multiplikation vor Addition gilt\n\necho $(((a + b) * c)) # 36, weil zuerst a + b gerechnet wird\n\n",[911,14083,14084,14092,14096,14104,14108,14116,14120,14142,14146],{"__ignoreMap":909},[452,14085,14086,14088,14090],{"class":915,"line":916},[452,14087,13060],{"class":1298},[452,14089,1862],{"class":1473},[452,14091,13065],{"class":923},[452,14093,14094],{"class":915,"line":1190},[452,14095,1194],{"emptyLinePlaceholder":1193},[452,14097,14098,14100,14102],{"class":915,"line":1197},[452,14099,7668],{"class":1298},[452,14101,1862],{"class":1473},[452,14103,13774],{"class":923},[452,14105,14106],{"class":915,"line":1204},[452,14107,1194],{"emptyLinePlaceholder":1193},[452,14109,14110,14112,14114],{"class":915,"line":1209},[452,14111,7676],{"class":1298},[452,14113,1862],{"class":1473},[452,14115,10134],{"class":923},[452,14117,14118],{"class":915,"line":1223},[452,14119,1194],{"emptyLinePlaceholder":1193},[452,14121,14122,14124,14126,14128,14130,14132,14134,14137,14139],{"class":915,"line":1228},[452,14123,1523],{"class":975},[452,14125,13088],{"class":1298},[452,14127,13060],{"class":919},[452,14129,13093],{"class":923},[452,14131,13096],{"class":923},[452,14133,6393],{"class":975},[452,14135,14136],{"class":923}," c",[452,14138,13099],{"class":1298},[452,14140,14141],{"class":1200},"# 16, weil Multiplikation vor Addition gilt\n",[452,14143,14144],{"class":915,"line":1234},[452,14145,1194],{"emptyLinePlaceholder":1193},[452,14147,14148,14150,14153,14155,14157,14159,14161,14163,14165,14167],{"class":915,"line":1239},[452,14149,1523],{"class":975},[452,14151,14152],{"class":1298}," $(((",[452,14154,13060],{"class":919},[452,14156,13093],{"class":923},[452,14158,13096],{"class":923},[452,14160,2768],{"class":1298},[452,14162,429],{"class":919},[452,14164,14136],{"class":923},[452,14166,13099],{"class":1298},[452,14168,14169],{"class":1200},"# 36, weil zuerst a + b gerechnet wird\n",[898,14171,14172],{},"Klammern sind also nicht nur für die Syntax wichtig, sondern verändern auch das Ergebnis. Wie in der Mathematik wird das berechnet, was in Klammern steht, zuerst.",[898,14174,14175],{},[27,14176,14177],{},"Falsch: einfache eckige Klammern für Rechnungen erwarten",[904,14179,14181],{"className":906,"code":14180,"language":908,"meta":909,"style":909},"a=5\n\nb=2\n\nif [ a + b -gt 6 ]; then\n\necho \"größer\"\n\nfi\n\n",[911,14182,14183,14191,14195,14203,14207,14224,14228,14235,14239],{"__ignoreMap":909},[452,14184,14185,14187,14189],{"class":915,"line":916},[452,14186,13060],{"class":1298},[452,14188,1862],{"class":1473},[452,14190,12963],{"class":923},[452,14192,14193],{"class":915,"line":1190},[452,14194,1194],{"emptyLinePlaceholder":1193},[452,14196,14197,14199,14201],{"class":915,"line":1197},[452,14198,7668],{"class":1298},[452,14200,1862],{"class":1473},[452,14202,13774],{"class":923},[452,14204,14205],{"class":915,"line":1204},[452,14206,1194],{"emptyLinePlaceholder":1193},[452,14208,14209,14211,14214,14217,14220,14222],{"class":915,"line":1209},[452,14210,2426],{"class":1473},[452,14212,14213],{"class":1298}," [ a + b ",[452,14215,14216],{"class":1473},"-gt",[452,14218,14219],{"class":975}," 6",[452,14221,2441],{"class":1298},[452,14223,2444],{"class":1473},[452,14225,14226],{"class":915,"line":1223},[452,14227,1194],{"emptyLinePlaceholder":1193},[452,14229,14230,14232],{"class":915,"line":1228},[452,14231,1523],{"class":975},[452,14233,14234],{"class":923}," \"größer\"\n",[452,14236,14237],{"class":915,"line":1234},[452,14238,1194],{"emptyLinePlaceholder":1193},[452,14240,14241],{"class":915,"line":1239},[452,14242,2484],{"class":1473},[898,14244,14245,14246,14249],{},"Die einfache eckige Klammer ",[452,14247,14248],{}," ..."," ist ein Test-Befehl, aber keine Rechenumgebung. Für Rechnungen in Bedingungen ist (( ... )) besser geeignet:",[904,14251,14253],{"className":906,"code":14252,"language":908,"meta":909,"style":909},"if ((a + b > 6)); then\n\necho \"größer\"\n\nfi\n\n",[911,14254,14255,14275,14279,14285,14289],{"__ignoreMap":909},[452,14256,14257,14259,14262,14264,14267,14269,14271,14273],{"class":915,"line":916},[452,14258,2426],{"class":1473},[452,14260,14261],{"class":1298}," ((a ",[452,14263,4341],{"class":1473},[452,14265,14266],{"class":1298}," b ",[452,14268,851],{"class":1473},[452,14270,14219],{"class":975},[452,14272,13594],{"class":1298},[452,14274,2444],{"class":1473},[452,14276,14277],{"class":915,"line":1190},[452,14278,1194],{"emptyLinePlaceholder":1193},[452,14280,14281,14283],{"class":915,"line":1197},[452,14282,1523],{"class":975},[452,14284,14234],{"class":923},[452,14286,14287],{"class":915,"line":1204},[452,14288,1194],{"emptyLinePlaceholder":1193},[452,14290,14291],{"class":915,"line":1209},[452,14292,2484],{"class":1473},[898,14294,14295],{},[27,14296,14297],{},"Merksatz zu Klammern beim Rechnen",[898,14299,14300,14301,14303,14304,14306,14307,14309,14311],{},"$(( ... )) = Rechnung ausführen",[1325,14302],{},"\n$( ... ) = Befehl ausführen und Ausgabe einsetzen",[1325,14305],{},"\n(( ... )) = Rechnung\u002FBedingung auswerten, oft bei if oder Schleifen",[1325,14308],{},[452,14310,13846],{}," = Test-Befehl, z. B. für Dateien, Strings oder klassische Zahlenvergleiche",[257,14313,14315],{"id":14314},"listen-strings-und-arrays","Listen, Strings und Arrays",[898,14317,14318],{},"In Bash ist wichtig zu unterscheiden, ob etwas als ein zusammenhängender Text, als mehrere Wörter oder als Array mit mehreren Elementen behandelt wird.",[898,14320,14321],{},[27,14322,14323],{},"\"123\" ist ein String",[904,14325,14327],{"className":906,"code":14326,"language":908,"meta":909,"style":909},"wert=\"123\"\n\necho \"$wert\"\n\n",[911,14328,14329,14339,14343],{"__ignoreMap":909},[452,14330,14331,14334,14336],{"class":915,"line":916},[452,14332,14333],{"class":1298},"wert",[452,14335,1862],{"class":1473},[452,14337,14338],{"class":923},"\"123\"\n",[452,14340,14341],{"class":915,"line":1190},[452,14342,1194],{"emptyLinePlaceholder":1193},[452,14344,14345,14347,14349,14352],{"class":915,"line":1197},[452,14346,1523],{"class":975},[452,14348,1870],{"class":923},[452,14350,14351],{"class":1298},"$wert",[452,14353,1896],{"class":923},[898,14355,14356],{},"Hier ist 123 ein String, also Text. Trotzdem kann Bash damit rechnen, wenn der Inhalt nur aus Zahlen besteht:",[904,14358,14360],{"className":906,"code":14359,"language":908,"meta":909,"style":909},"wert=\"123\"\n\necho $((wert + 1))\n\n",[911,14361,14362,14370,14374],{"__ignoreMap":909},[452,14363,14364,14366,14368],{"class":915,"line":916},[452,14365,14333],{"class":1298},[452,14367,1862],{"class":1473},[452,14369,14338],{"class":923},[452,14371,14372],{"class":915,"line":1190},[452,14373,1194],{"emptyLinePlaceholder":1193},[452,14375,14376,14378,14380,14382,14384,14386],{"class":915,"line":1197},[452,14377,1523],{"class":975},[452,14379,13088],{"class":1298},[452,14381,14333],{"class":919},[452,14383,13093],{"class":923},[452,14385,13461],{"class":975},[452,14387,13402],{"class":1298},[898,14389,13421],{},[898,14391,180],{},[898,14393,14394],{},"Merke:",[898,14396,14397],{},"\"123\" # ein Text\u002FString mit drei Zeichen",[898,14399,14400],{},"123 # kann in Rechnungen als Zahl verwendet werden",[898,14402,14403],{},[27,14404,14405],{},"\"1 2 3\" ist ein String mit Leerzeichen",[904,14407,14409],{"className":906,"code":14408,"language":908,"meta":909,"style":909},"werte=\"1 2 3\"\n\necho \"$werte\"\n\n",[911,14410,14411,14421,14425],{"__ignoreMap":909},[452,14412,14413,14416,14418],{"class":915,"line":916},[452,14414,14415],{"class":1298},"werte",[452,14417,1862],{"class":1473},[452,14419,14420],{"class":923},"\"1 2 3\"\n",[452,14422,14423],{"class":915,"line":1190},[452,14424,1194],{"emptyLinePlaceholder":1193},[452,14426,14427,14429,14431,14434],{"class":915,"line":1197},[452,14428,1523],{"class":975},[452,14430,1870],{"class":923},[452,14432,14433],{"class":1298},"$werte",[452,14435,1896],{"class":923},[898,14437,13421],{},[898,14439,14440],{},"1 2 3",[898,14442,14443],{},"Mit Anführungszeichen bleibt es ein einziger Wert:",[904,14445,14447],{"className":906,"code":14446,"language":908,"meta":909,"style":909},"for x in \"$werte\"; do\n\necho \"$x\"\n\ndone\n\n",[911,14448,14449,14468,14472,14483,14487],{"__ignoreMap":909},[452,14450,14451,14453,14456,14458,14460,14462,14464,14466],{"class":915,"line":916},[452,14452,2108],{"class":1473},[452,14454,14455],{"class":1298}," x ",[452,14457,2114],{"class":1473},[452,14459,1870],{"class":923},[452,14461,14433],{"class":1298},[452,14463,1876],{"class":923},[452,14465,2120],{"class":1298},[452,14467,2123],{"class":1473},[452,14469,14470],{"class":915,"line":1190},[452,14471,1194],{"emptyLinePlaceholder":1193},[452,14473,14474,14476,14478,14481],{"class":915,"line":1197},[452,14475,1523],{"class":975},[452,14477,1870],{"class":923},[452,14479,14480],{"class":1298},"$x",[452,14482,1896],{"class":923},[452,14484,14485],{"class":915,"line":1204},[452,14486,1194],{"emptyLinePlaceholder":1193},[452,14488,14489],{"class":915,"line":1209},[452,14490,2181],{"class":1473},[898,14492,13421],{},[898,14494,14440],{},[898,14496,14497],{},"Die Schleife läuft hier nur einmal, weil \"$werte\" als ein kompletter String behandelt wird.",[898,14499,14500],{},[27,14501,14502],{},"Ohne Anführungszeichen wird daraus eine Liste",[904,14504,14506],{"className":906,"code":14505,"language":908,"meta":909,"style":909},"werte=\"1 2 3\"\n\nfor x in $werte; do\n\necho \"$x\"\n\ndone\n\n",[911,14507,14508,14516,14520,14533,14537,14547,14551],{"__ignoreMap":909},[452,14509,14510,14512,14514],{"class":915,"line":916},[452,14511,14415],{"class":1298},[452,14513,1862],{"class":1473},[452,14515,14420],{"class":923},[452,14517,14518],{"class":915,"line":1190},[452,14519,1194],{"emptyLinePlaceholder":1193},[452,14521,14522,14524,14526,14528,14531],{"class":915,"line":1197},[452,14523,2108],{"class":1473},[452,14525,14455],{"class":1298},[452,14527,2114],{"class":1473},[452,14529,14530],{"class":1298}," $werte; ",[452,14532,2123],{"class":1473},[452,14534,14535],{"class":915,"line":1204},[452,14536,1194],{"emptyLinePlaceholder":1193},[452,14538,14539,14541,14543,14545],{"class":915,"line":1209},[452,14540,1523],{"class":975},[452,14542,1870],{"class":923},[452,14544,14480],{"class":1298},[452,14546,1896],{"class":923},[452,14548,14549],{"class":915,"line":1223},[452,14550,1194],{"emptyLinePlaceholder":1193},[452,14552,14553],{"class":915,"line":1228},[452,14554,2181],{"class":1473},[898,14556,13421],{},[898,14558,14559],{},"1",[898,14561,13555],{},[898,14563,14564],{},"3",[898,14566,14567],{},"Ohne Anführungszeichen wird der Inhalt an Leerzeichen getrennt. Aus \"1 2 3\" werden also drei einzelne Werte.",[898,14569,14570],{},[27,14571,14572],{},"Unterschied: \"123\" und \"1 2 3\"",[904,14574,14576],{"className":906,"code":14575,"language":908,"meta":909,"style":909},"a=\"123\"\n\nb=\"1 2 3\"\n\nfor x in $a; do\n\necho \"$x\"\n\ndone\n\n",[911,14577,14578,14586,14590,14598,14602,14615,14619,14629,14633],{"__ignoreMap":909},[452,14579,14580,14582,14584],{"class":915,"line":916},[452,14581,13060],{"class":1298},[452,14583,1862],{"class":1473},[452,14585,14338],{"class":923},[452,14587,14588],{"class":915,"line":1190},[452,14589,1194],{"emptyLinePlaceholder":1193},[452,14591,14592,14594,14596],{"class":915,"line":1197},[452,14593,7668],{"class":1298},[452,14595,1862],{"class":1473},[452,14597,14420],{"class":923},[452,14599,14600],{"class":915,"line":1204},[452,14601,1194],{"emptyLinePlaceholder":1193},[452,14603,14604,14606,14608,14610,14613],{"class":915,"line":1209},[452,14605,2108],{"class":1473},[452,14607,14455],{"class":1298},[452,14609,2114],{"class":1473},[452,14611,14612],{"class":1298}," $a; ",[452,14614,2123],{"class":1473},[452,14616,14617],{"class":915,"line":1223},[452,14618,1194],{"emptyLinePlaceholder":1193},[452,14620,14621,14623,14625,14627],{"class":915,"line":1228},[452,14622,1523],{"class":975},[452,14624,1870],{"class":923},[452,14626,14480],{"class":1298},[452,14628,1896],{"class":923},[452,14630,14631],{"class":915,"line":1234},[452,14632,1194],{"emptyLinePlaceholder":1193},[452,14634,14635],{"class":915,"line":1239},[452,14636,2181],{"class":1473},[898,14638,13421],{},[898,14640,14641],{},"123",[898,14643,14644],{},"123 enthält keine Leerzeichen, also bleibt es ein Wert.",[904,14646,14648],{"className":906,"code":14647,"language":908,"meta":909,"style":909},"for x in $b; do\n\necho \"$x\"\n\ndone\n\n",[911,14649,14650,14663,14667,14677,14681],{"__ignoreMap":909},[452,14651,14652,14654,14656,14658,14661],{"class":915,"line":916},[452,14653,2108],{"class":1473},[452,14655,14455],{"class":1298},[452,14657,2114],{"class":1473},[452,14659,14660],{"class":1298}," $b; ",[452,14662,2123],{"class":1473},[452,14664,14665],{"class":915,"line":1190},[452,14666,1194],{"emptyLinePlaceholder":1193},[452,14668,14669,14671,14673,14675],{"class":915,"line":1197},[452,14670,1523],{"class":975},[452,14672,1870],{"class":923},[452,14674,14480],{"class":1298},[452,14676,1896],{"class":923},[452,14678,14679],{"class":915,"line":1204},[452,14680,1194],{"emptyLinePlaceholder":1193},[452,14682,14683],{"class":915,"line":1209},[452,14684,2181],{"class":1473},[898,14686,13421],{},[898,14688,14559],{},[898,14690,13555],{},[898,14692,14564],{},[898,14694,14695],{},"1 2 3 enthält Leerzeichen, also wird es in mehrere Werte aufgeteilt.",[257,14697,14699],{"id":14698},"arrays-in-bash","Arrays in Bash",[898,14701,14702],{},"Ein Array ist eine echte Liste mit mehreren Elementen.",[904,14704,14706],{"className":906,"code":14705,"language":908,"meta":909,"style":909},"zahlen=(1 2 3)\n\necho \"${zahlen[0]}\"\n\necho \"${zahlen[1]}\"\n\necho \"${zahlen[2]}\"\n\n",[911,14707,14708,14725,14729,14740,14744,14755,14759],{"__ignoreMap":909},[452,14709,14710,14713,14715,14717,14719,14721,14723],{"class":915,"line":916},[452,14711,14712],{"class":1298},"zahlen",[452,14714,1862],{"class":1473},[452,14716,2762],{"class":1298},[452,14718,14559],{"class":975},[452,14720,13705],{"class":975},[452,14722,13816],{"class":975},[452,14724,1879],{"class":1298},[452,14726,14727],{"class":915,"line":1190},[452,14728,1194],{"emptyLinePlaceholder":1193},[452,14730,14731,14733,14735,14737],{"class":915,"line":1197},[452,14732,1523],{"class":975},[452,14734,12714],{"class":923},[452,14736,14712],{"class":1298},[452,14738,14739],{"class":923},"[0]}\"\n",[452,14741,14742],{"class":915,"line":1204},[452,14743,1194],{"emptyLinePlaceholder":1193},[452,14745,14746,14748,14750,14752],{"class":915,"line":1209},[452,14747,1523],{"class":975},[452,14749,12714],{"class":923},[452,14751,14712],{"class":1298},[452,14753,14754],{"class":923},"[1]}\"\n",[452,14756,14757],{"class":915,"line":1223},[452,14758,1194],{"emptyLinePlaceholder":1193},[452,14760,14761,14763,14765,14767],{"class":915,"line":1228},[452,14762,1523],{"class":975},[452,14764,12714],{"class":923},[452,14766,14712],{"class":1298},[452,14768,14769],{"class":923},"[2]}\"\n",[898,14771,13421],{},[898,14773,14559],{},[898,14775,13555],{},[898,14777,14564],{},[898,14779,14780],{},"Wichtig: Bash-Arrays beginnen bei Index 0.",[15,14782,14783,14796],{},[18,14784,14785],{},[21,14786,14787,14792],{},[24,14788,14789],{},[27,14790,14791],{},"Zugriff",[24,14793,14794],{},[27,14795,9353],{},[41,14797,14798,14809,14818],{},[21,14799,14800,14806],{},[46,14801,14802,14803,14805],{},"${zahlen",[452,14804,6616],{},"}",[46,14807,14808],{},"erstes Element",[21,14810,14811,14815],{},[46,14812,14802,14813,14805],{},[452,14814,14559],{},[46,14816,14817],{},"zweites Element",[21,14819,14820,14824],{},[46,14821,14802,14822,14805],{},[452,14823,13555],{},[46,14825,14826],{},"drittes Element",[2652,14828,14830],{"id":14829},"alle-array-elemente-ausgeben","Alle Array-Elemente ausgeben",[904,14832,14834],{"className":906,"code":14833,"language":908,"meta":909,"style":909},"zahlen=(1 2 3)\n\necho \"${zahlen[@]}\"\n\n",[911,14835,14836,14852,14856],{"__ignoreMap":909},[452,14837,14838,14840,14842,14844,14846,14848,14850],{"class":915,"line":916},[452,14839,14712],{"class":1298},[452,14841,1862],{"class":1473},[452,14843,2762],{"class":1298},[452,14845,14559],{"class":975},[452,14847,13705],{"class":975},[452,14849,13816],{"class":975},[452,14851,1879],{"class":1298},[452,14853,14854],{"class":915,"line":1190},[452,14855,1194],{"emptyLinePlaceholder":1193},[452,14857,14858,14860,14862,14864,14866,14868],{"class":915,"line":1197},[452,14859,1523],{"class":975},[452,14861,12714],{"class":923},[452,14863,14712],{"class":1298},[452,14865,12719],{"class":923},[452,14867,12722],{"class":1473},[452,14869,12725],{"class":923},[898,14871,13421],{},[898,14873,14440],{},[2652,14875,14877],{"id":14876},"über-array-iterieren","Über Array iterieren",[904,14879,14881],{"className":906,"code":14880,"language":908,"meta":909,"style":909},"zahlen=(1 2 3)\n\nfor zahl in \"${zahlen[@]}\"; do\n\necho \"$zahl\"\n\ndone\n\n",[911,14882,14883,14899,14903,14927,14931,14941,14945],{"__ignoreMap":909},[452,14884,14885,14887,14889,14891,14893,14895,14897],{"class":915,"line":916},[452,14886,14712],{"class":1298},[452,14888,1862],{"class":1473},[452,14890,2762],{"class":1298},[452,14892,14559],{"class":975},[452,14894,13705],{"class":975},[452,14896,13816],{"class":975},[452,14898,1879],{"class":1298},[452,14900,14901],{"class":915,"line":1190},[452,14902,1194],{"emptyLinePlaceholder":1193},[452,14904,14905,14907,14910,14912,14914,14916,14918,14920,14923,14925],{"class":915,"line":1197},[452,14906,2108],{"class":1473},[452,14908,14909],{"class":1298}," zahl ",[452,14911,2114],{"class":1473},[452,14913,12714],{"class":923},[452,14915,14712],{"class":1298},[452,14917,12719],{"class":923},[452,14919,12722],{"class":1473},[452,14921,14922],{"class":923},"]}\"",[452,14924,2120],{"class":1298},[452,14926,2123],{"class":1473},[452,14928,14929],{"class":915,"line":1204},[452,14930,1194],{"emptyLinePlaceholder":1193},[452,14932,14933,14935,14937,14939],{"class":915,"line":1209},[452,14934,1523],{"class":975},[452,14936,1870],{"class":923},[452,14938,12976],{"class":1298},[452,14940,1896],{"class":923},[452,14942,14943],{"class":915,"line":1223},[452,14944,1194],{"emptyLinePlaceholder":1193},[452,14946,14947],{"class":915,"line":1228},[452,14948,2181],{"class":1473},[898,14950,13421],{},[898,14952,14559],{},[898,14954,13555],{},[898,14956,14564],{},[898,14958,14959],{},"Diese Schreibweise ist sicher und empfohlen:",[898,14961,14962,14963,14965],{},"\"${array",[452,14964,12722],{},"}\"",[2652,14967,14969,14970,14965],{"id":14968},"unterschied-zwischen-array-und-array","Unterschied zwischen \"$array\" und \"${array",[452,14971,12722],{},[904,14973,14975],{"className":906,"code":14974,"language":908,"meta":909,"style":909},"werte=(\"Apfel Birne\" \"Banane\" \"Kirsche\")\n\n",[911,14976,14977],{"__ignoreMap":909},[452,14978,14979,14981,14983,14985,14988,14991,14994],{"class":915,"line":916},[452,14980,14415],{"class":1298},[452,14982,1862],{"class":1473},[452,14984,2762],{"class":1298},[452,14986,14987],{"class":923},"\"Apfel Birne\"",[452,14989,14990],{"class":923}," \"Banane\"",[452,14992,14993],{"class":923}," \"Kirsche\"",[452,14995,1879],{"class":1298},[898,14997,14998],{},"Richtig:",[904,15000,15002],{"className":906,"code":15001,"language":908,"meta":909,"style":909},"for wert in \"${werte[@]}\"; do\n\necho \"$wert\"\n\ndone\n\n",[911,15003,15004,15027,15031,15041,15045],{"__ignoreMap":909},[452,15005,15006,15008,15011,15013,15015,15017,15019,15021,15023,15025],{"class":915,"line":916},[452,15007,2108],{"class":1473},[452,15009,15010],{"class":1298}," wert ",[452,15012,2114],{"class":1473},[452,15014,12714],{"class":923},[452,15016,14415],{"class":1298},[452,15018,12719],{"class":923},[452,15020,12722],{"class":1473},[452,15022,14922],{"class":923},[452,15024,2120],{"class":1298},[452,15026,2123],{"class":1473},[452,15028,15029],{"class":915,"line":1190},[452,15030,1194],{"emptyLinePlaceholder":1193},[452,15032,15033,15035,15037,15039],{"class":915,"line":1197},[452,15034,1523],{"class":975},[452,15036,1870],{"class":923},[452,15038,14351],{"class":1298},[452,15040,1896],{"class":923},[452,15042,15043],{"class":915,"line":1204},[452,15044,1194],{"emptyLinePlaceholder":1193},[452,15046,15047],{"class":915,"line":1209},[452,15048,2181],{"class":1473},[898,15050,13421],{},[898,15052,15053],{},"Apfel Birne",[898,15055,15056],{},"Banane",[898,15058,15059],{},"Kirsche",[898,15061,15062],{},"Falsch bzw. oft problematisch:",[904,15064,15066],{"className":906,"code":15065,"language":908,"meta":909,"style":909},"for wert in ${werte[@]}; do\n\necho \"$wert\"\n\ndone\n\n",[911,15067,15068,15086,15090,15100,15104],{"__ignoreMap":909},[452,15069,15070,15072,15074,15076,15079,15081,15084],{"class":915,"line":916},[452,15071,2108],{"class":1473},[452,15073,15010],{"class":1298},[452,15075,2114],{"class":1473},[452,15077,15078],{"class":1298}," ${werte[",[452,15080,12722],{"class":1473},[452,15082,15083],{"class":1298},"]}; ",[452,15085,2123],{"class":1473},[452,15087,15088],{"class":915,"line":1190},[452,15089,1194],{"emptyLinePlaceholder":1193},[452,15091,15092,15094,15096,15098],{"class":915,"line":1197},[452,15093,1523],{"class":975},[452,15095,1870],{"class":923},[452,15097,14351],{"class":1298},[452,15099,1896],{"class":923},[452,15101,15102],{"class":915,"line":1204},[452,15103,1194],{"emptyLinePlaceholder":1193},[452,15105,15106],{"class":915,"line":1209},[452,15107,2181],{"class":1473},[898,15109,13421],{},[898,15111,15112],{},"Apfel",[898,15114,15115],{},"Birne",[898,15117,15056],{},[898,15119,15059],{},[898,15121,15122,15123,15125],{},"Ohne Anführungszeichen wird \"Apfel Birne\" in zwei Wörter zerlegt. Deshalb sollten Arrays fast immer mit \"${array",[452,15124,12722],{},"}\" durchlaufen werden.",[2652,15127,15129],{"id":15128},"merksätze","Merksätze",[992,15131,15132,15135,15138,15141,15144,15147],{},[995,15133,15134],{},"\"123\" ist ein String, kann aber als Zahl verwendet werden, wenn nur Ziffern enthalten sind.",[995,15136,15137],{},"\"1 2 3\" ist ein String mit Leerzeichen.",[995,15139,15140],{},"Ohne Anführungszeichen wird an Leerzeichen getrennt.",[995,15142,15143],{},"Mit Anführungszeichen bleibt der Inhalt ein zusammenhängender Wert.",[995,15145,15146],{},"Arrays sind echte Listen und werden mit Klammern geschrieben: array=(wert1 wert2 wert3).",[995,15148,15149,15150,15152],{},"Beim Durchlaufen von Arrays ist \"${array",[452,15151,12722],{},"}\" die sichere Standardform.",[257,15154,15156],{"id":15155},"logik-bedingungen","Logik & Bedingungen",[898,15158,15159],{},[27,15160,15161],{},"Befehle direkt verketten:",[992,15163,15164,15167],{},[995,15165,15166],{},"cmd1 && cmd2: Führe cmd1 aus; wenn er erfolgreich war, führe cmd2 aus.",[995,15168,15169],{},"cmd1 || cmd2: Führe cmd1 aus; wenn er fehlschlägt, führe cmd2 aus.",[257,15171,15173],{"id":15172},"if-abfrage","If-Abfrage:",[898,15175,15176],{},"Bash",[904,15178,15180],{"className":906,"code":15179,"language":908,"meta":909,"style":909},"if [ \"$x\" -lt \"$y\" ]; then\n\n# do something\n\nfi\n\n",[911,15181,15182,15208,15212,15217,15221],{"__ignoreMap":909},[452,15183,15184,15186,15188,15190,15192,15194,15197,15199,15202,15204,15206],{"class":915,"line":916},[452,15185,2426],{"class":1473},[452,15187,2429],{"class":1298},[452,15189,1876],{"class":923},[452,15191,14480],{"class":1298},[452,15193,1876],{"class":923},[452,15195,15196],{"class":1473}," -lt",[452,15198,1870],{"class":923},[452,15200,15201],{"class":1298},"$y",[452,15203,1876],{"class":923},[452,15205,2441],{"class":1298},[452,15207,2444],{"class":1473},[452,15209,15210],{"class":915,"line":1190},[452,15211,1194],{"emptyLinePlaceholder":1193},[452,15213,15214],{"class":915,"line":1197},[452,15215,15216],{"class":1200},"# do something\n",[452,15218,15219],{"class":915,"line":1204},[452,15220,1194],{"emptyLinePlaceholder":1193},[452,15222,15223],{"class":915,"line":1209},[452,15224,2484],{"class":1473},[257,15226,15228],{"id":15227},"die-case-anweisung-mehrfach-auswahl","Die Case-Anweisung (Mehrfach-Auswahl):",[898,15230,15176],{},[904,15232,15234],{"className":906,"code":15233,"language":908,"meta":909,"style":909},"case $foo in\n\na) echo \"foo is A\" ;; #(foo = a)\n\nb) echo \"foo is B\" ;; #(foo = b)\n\n*) echo \"foo is not A or B\" ;; #(alles anderes)\n\nEsac\n\n",[911,15235,15236,15247,15251,15270,15274,15290,15294,15310,15314],{"__ignoreMap":909},[452,15237,15238,15241,15244],{"class":915,"line":916},[452,15239,15240],{"class":1473},"case",[452,15242,15243],{"class":1298}," $foo ",[452,15245,15246],{"class":1473},"in\n",[452,15248,15249],{"class":915,"line":1190},[452,15250,1194],{"emptyLinePlaceholder":1193},[452,15252,15253,15256,15258,15261,15264,15267],{"class":915,"line":1197},[452,15254,13060],{"class":15255},"sA_wV",[452,15257,12044],{"class":1473},[452,15259,15260],{"class":975}," echo",[452,15262,15263],{"class":923}," \"foo is A\"",[452,15265,15266],{"class":1298}," ;; ",[452,15268,15269],{"class":1200},"#(foo = a)\n",[452,15271,15272],{"class":915,"line":1204},[452,15273,1194],{"emptyLinePlaceholder":1193},[452,15275,15276,15278,15280,15282,15285,15287],{"class":915,"line":1209},[452,15277,7668],{"class":919},[452,15279,2768],{"class":1298},[452,15281,1523],{"class":975},[452,15283,15284],{"class":923}," \"foo is B\"",[452,15286,15266],{"class":1298},[452,15288,15289],{"class":1200},"#(foo = b)\n",[452,15291,15292],{"class":915,"line":1223},[452,15293,1194],{"emptyLinePlaceholder":1193},[452,15295,15296,15298,15300,15302,15305,15307],{"class":915,"line":1228},[452,15297,429],{"class":919},[452,15299,2768],{"class":1298},[452,15301,1523],{"class":975},[452,15303,15304],{"class":923}," \"foo is not A or B\"",[452,15306,15266],{"class":1298},[452,15308,15309],{"class":1200},"#(alles anderes)\n",[452,15311,15312],{"class":915,"line":1234},[452,15313,1194],{"emptyLinePlaceholder":1193},[452,15315,15316],{"class":915,"line":1239},[452,15317,15318],{"class":919},"Esac\n",[898,15320,15321],{},"(Wichtig: Das ;; am Ende jedes Blocks ist zwingend erforderlich ).",[257,15323,15325],{"id":15324},"for-loop-beispiel-über-eine-liste-iterieren","for – loop Beispiel: Über eine Liste iterieren",[898,15327,15328],{},"Dies ist der klassische Anwendungsfall: Du gehst eine Liste von Dateien oder Werten nacheinander durch.",[898,15330,15176],{},[904,15332,15334],{"className":906,"code":15333,"language":908,"meta":909,"style":909},"#!\u002Fbin\u002Fbash\n\nMEIN_ARRAY=(\"Apfel Birne\" \"Banane\" \"Kirsche\")\n\nMEINE_LISTE=\"Apfel Birne Banane\"\n\nfor obst in $MEINE_LISTE; do\n\necho \"Ich mag $obst\"\n\ndone\n\n# Liste von Werten durchgehen\n\nfor tier in Hund Katze Maus; do\n\necho \"Das ist ein(e): $tier\"\n\ndone\n\n",[911,15335,15336,15340,15344,15361,15365,15375,15379,15393,15397,15409,15413,15417,15421,15426,15430,15452,15456,15468,15472],{"__ignoreMap":909},[452,15337,15338],{"class":915,"line":916},[452,15339,2366],{"class":1200},[452,15341,15342],{"class":915,"line":1190},[452,15343,1194],{"emptyLinePlaceholder":1193},[452,15345,15346,15349,15351,15353,15355,15357,15359],{"class":915,"line":1197},[452,15347,15348],{"class":1298},"MEIN_ARRAY",[452,15350,1862],{"class":1473},[452,15352,2762],{"class":1298},[452,15354,14987],{"class":923},[452,15356,14990],{"class":923},[452,15358,14993],{"class":923},[452,15360,1879],{"class":1298},[452,15362,15363],{"class":915,"line":1204},[452,15364,1194],{"emptyLinePlaceholder":1193},[452,15366,15367,15370,15372],{"class":915,"line":1209},[452,15368,15369],{"class":1298},"MEINE_LISTE",[452,15371,1862],{"class":1473},[452,15373,15374],{"class":923},"\"Apfel Birne Banane\"\n",[452,15376,15377],{"class":915,"line":1223},[452,15378,1194],{"emptyLinePlaceholder":1193},[452,15380,15381,15383,15386,15388,15391],{"class":915,"line":1228},[452,15382,2108],{"class":1473},[452,15384,15385],{"class":1298}," obst ",[452,15387,2114],{"class":1473},[452,15389,15390],{"class":1298}," $MEINE_LISTE; ",[452,15392,2123],{"class":1473},[452,15394,15395],{"class":915,"line":1234},[452,15396,1194],{"emptyLinePlaceholder":1193},[452,15398,15399,15401,15404,15407],{"class":915,"line":1239},[452,15400,1523],{"class":975},[452,15402,15403],{"class":923}," \"Ich mag ",[452,15405,15406],{"class":1298},"$obst",[452,15408,1896],{"class":923},[452,15410,15411],{"class":915,"line":1253},[452,15412,1194],{"emptyLinePlaceholder":1193},[452,15414,15415],{"class":915,"line":1258},[452,15416,2181],{"class":1473},[452,15418,15419],{"class":915,"line":1264},[452,15420,1194],{"emptyLinePlaceholder":1193},[452,15422,15423],{"class":915,"line":1269},[452,15424,15425],{"class":1200},"# Liste von Werten durchgehen\n",[452,15427,15428],{"class":915,"line":1558},[452,15429,1194],{"emptyLinePlaceholder":1193},[452,15431,15432,15434,15437,15439,15442,15445,15448,15450],{"class":915,"line":1563},[452,15433,2108],{"class":1473},[452,15435,15436],{"class":1298}," tier ",[452,15438,2114],{"class":1473},[452,15440,15441],{"class":923}," Hund",[452,15443,15444],{"class":923}," Katze",[452,15446,15447],{"class":923}," Maus",[452,15449,2120],{"class":1298},[452,15451,2123],{"class":1473},[452,15453,15454],{"class":915,"line":1586},[452,15455,1194],{"emptyLinePlaceholder":1193},[452,15457,15458,15460,15463,15466],{"class":915,"line":1591},[452,15459,1523],{"class":975},[452,15461,15462],{"class":923}," \"Das ist ein(e): ",[452,15464,15465],{"class":1298},"$tier",[452,15467,1896],{"class":923},[452,15469,15470],{"class":915,"line":1597},[452,15471,1194],{"emptyLinePlaceholder":1193},[452,15473,15474],{"class":915,"line":1602},[452,15475,2181],{"class":1473},[2652,15477,15479],{"id":15478},"beispiel-über-einen-zahlenbereich-iterieren","Beispiel: Über einen Zahlenbereich iterieren",[898,15481,15482],{},"Wenn du eine Aktion eine bestimmte Anzahl an Malen wiederholen willst (z. B. 5-mal):",[898,15484,15176],{},[904,15486,15488],{"className":906,"code":15487,"language":908,"meta":909,"style":909},"#!\u002Fbin\u002Fbash\n\n# Zählen von 1 bis 5\n\nfor i in {1..5}; do\n\necho \"Durchlauf Nummer: $i\"\n\ndone\n\n",[911,15489,15490,15494,15498,15503,15507,15526,15530,15542,15546],{"__ignoreMap":909},[452,15491,15492],{"class":915,"line":916},[452,15493,2366],{"class":1200},[452,15495,15496],{"class":915,"line":1190},[452,15497,1194],{"emptyLinePlaceholder":1193},[452,15499,15500],{"class":915,"line":1197},[452,15501,15502],{"class":1200},"# Zählen von 1 bis 5\n",[452,15504,15505],{"class":915,"line":1204},[452,15506,1194],{"emptyLinePlaceholder":1193},[452,15508,15509,15511,15514,15516,15519,15522,15524],{"class":915,"line":1209},[452,15510,2108],{"class":1473},[452,15512,15513],{"class":1298}," i ",[452,15515,2114],{"class":1473},[452,15517,15518],{"class":1298}," {",[452,15520,15521],{"class":919},"1..5}",[452,15523,2120],{"class":1298},[452,15525,2123],{"class":1473},[452,15527,15528],{"class":915,"line":1223},[452,15529,1194],{"emptyLinePlaceholder":1193},[452,15531,15532,15534,15537,15540],{"class":915,"line":1228},[452,15533,1523],{"class":975},[452,15535,15536],{"class":923}," \"Durchlauf Nummer: ",[452,15538,15539],{"class":1298},"$i",[452,15541,1896],{"class":923},[452,15543,15544],{"class":915,"line":1234},[452,15545,1194],{"emptyLinePlaceholder":1193},[452,15547,15548],{"class":915,"line":1239},[452,15549,2181],{"class":1473},[2652,15551,15553],{"id":15552},"profi-tipp-dateien-im-verzeichnis-verarbeiten","Profi-Tipp: Dateien im Verzeichnis verarbeiten",[898,15555,15556],{},"Ein sehr häufiger Anwendungsfall in der Shell ist es, alle Dateien eines bestimmten Typs zu bearbeiten:",[898,15558,15176],{},[904,15560,15562],{"className":906,"code":15561,"language":908,"meta":909,"style":909},"#!\u002Fbin\u002Fbash\n\n# Alle .txt Dateien im aktuellen Verzeichnis finden und ausgeben\n\nfor datei in *.txt; do\n\necho \"Verarbeite Datei: $datei\"\n\n# Hier könnte z.B. ein grep oder cat Befehl folgen\n\ndone\n\n",[911,15563,15564,15568,15572,15577,15581,15597,15601,15613,15617,15622,15626],{"__ignoreMap":909},[452,15565,15566],{"class":915,"line":916},[452,15567,2366],{"class":1200},[452,15569,15570],{"class":915,"line":1190},[452,15571,1194],{"emptyLinePlaceholder":1193},[452,15573,15574],{"class":915,"line":1197},[452,15575,15576],{"class":1200},"# Alle .txt Dateien im aktuellen Verzeichnis finden und ausgeben\n",[452,15578,15579],{"class":915,"line":1204},[452,15580,1194],{"emptyLinePlaceholder":1193},[452,15582,15583,15585,15588,15590,15593,15595],{"class":915,"line":1209},[452,15584,2108],{"class":1473},[452,15586,15587],{"class":1298}," datei ",[452,15589,2114],{"class":1473},[452,15591,15592],{"class":923}," *.txt",[452,15594,2120],{"class":1298},[452,15596,2123],{"class":1473},[452,15598,15599],{"class":915,"line":1223},[452,15600,1194],{"emptyLinePlaceholder":1193},[452,15602,15603,15605,15608,15611],{"class":915,"line":1228},[452,15604,1523],{"class":975},[452,15606,15607],{"class":923}," \"Verarbeite Datei: ",[452,15609,15610],{"class":1298},"$datei",[452,15612,1896],{"class":923},[452,15614,15615],{"class":915,"line":1234},[452,15616,1194],{"emptyLinePlaceholder":1193},[452,15618,15619],{"class":915,"line":1239},[452,15620,15621],{"class":1200},"# Hier könnte z.B. ein grep oder cat Befehl folgen\n",[452,15623,15624],{"class":915,"line":1253},[452,15625,1194],{"emptyLinePlaceholder":1193},[452,15627,15628],{"class":915,"line":1258},[452,15629,2181],{"class":1473},[2652,15631,15633],{"id":15632},"zusammenfassung-der-struktur","Zusammenfassung der Struktur:",[992,15635,15636,15641,15647,15652,15658],{},[995,15637,15638,15640],{},[27,15639,2108],{},": Startet die Schleife.",[995,15642,15643,15646],{},[27,15644,15645],{},"variable",": Ein frei wählbarer Name, der bei jedem Durchlauf den aktuellen Wert annimmt.",[995,15648,15649,15651],{},[27,15650,2114],{},": Definiert die Liste oder den Bereich, der abgearbeitet wird.",[995,15653,15654,15657],{},[27,15655,15656],{},"do",": Leitet den Codeblock ein, der für jedes Element ausgeführt wird.",[995,15659,15660,15663],{},[27,15661,15662],{},"done",": Beendet den Schleifenblock.",[898,15665,15666,15668],{},[27,15667,2108],{}," Wenn die Anzahl der Elemente feststeht.",[898,15670,15671,15674],{},[27,15672,15673],{},"While"," Wenn du auf einen Zustand wartest.",[898,15676,15677,15680],{},[27,15678,15679],{},"Continue"," Wenn ein einzelnes Element ignoriert werden soll.",[898,15682,15683,15686],{},[27,15684,15685],{},"Break"," Wenn die Arbeit vorzeitig erledigt ist.",[257,15688,15690],{"id":15689},"test-operatoren-bedingungen-prüfen","Test-Operatoren (Bedingungen prüfen)",[15,15692,15693,15710],{},[18,15694,15695],{},[21,15696,15697,15701,15706],{},[24,15698,15699],{},[27,15700,6594],{},[24,15702,15703],{},[27,15704,15705],{},"Operatoren",[24,15707,15708],{},[27,15709,417],{},[41,15711,15712,15725,15735,15745,15757,15767,15779,15789,15799,15811],{},[21,15713,15714,15719,15722],{},[46,15715,15716],{},[27,15717,15718],{},"Zahlen",[46,15720,15721],{},"-eq \u002F -ne",[46,15723,15724],{},"Gleich \u002F Ungleich",[21,15726,15727,15729,15732],{},[46,15728],{},[46,15730,15731],{},"-lt \u002F -le",[46,15733,15734],{},"Kleiner als \u002F Kleiner oder gleich",[21,15736,15737,15739,15742],{},[46,15738],{},[46,15740,15741],{},"-gt \u002F -ge",[46,15743,15744],{},"Größer als \u002F Größer oder gleich",[21,15746,15747,15752,15754],{},[46,15748,15749],{},[27,15750,15751],{},"Text",[46,15753,1862],{},[46,15755,15756],{},"Strings sind gleich",[21,15758,15759,15761,15764],{},[46,15760],{},[46,15762,15763],{},"-z \u002F -n",[46,15765,15766],{},"Länge ist Null (leer) \u002F Nicht leer",[21,15768,15769,15773,15776],{},[46,15770,15771],{},[27,15772,7507],{},[46,15774,15775],{},"-d \u002F -x",[46,15777,15778],{},"Ist ein Verzeichnis \u002F Ist ausführbar",[21,15780,15781,15783,15786],{},[46,15782],{},[46,15784,15785],{},"-r \u002F -w",[46,15787,15788],{},"Ist lesbar \u002F Ist schreibbar",[21,15790,15791,15793,15796],{},[46,15792],{},[46,15794,15795],{},"-nt",[46,15797,15798],{},"Ist neuer als (newer than)",[21,15800,15801,15806,15809],{},[46,15802,15803],{},[27,15804,15805],{},"Logik",[46,15807,15808],{},"&& \u002F `",[46,15810],{},[21,15812,15813,15815,15818],{},[46,15814],{},[46,15816,15817],{},"!",[46,15819,15820],{},"Logisches NICHT",[898,15822,15823],{},[27,15824,15825],{},"4. Schleifen, Case & Funktionen",[257,15827,15829],{"id":15828},"while-schleife-datei-zeilenweise-einlesen","While-Schleife (Datei zeilenweise einlesen):",[898,15831,15176],{},[904,15833,15835],{"className":906,"code":15834,"language":908,"meta":909,"style":909},"while read f; do\n\necho \"Line is $f\"\n\ndone \u003Cdateiname.txt\n\nwhile read benutzer; do\n\nmkdir \"\u002Fhome\u002F$benutzer\"\n\necho \"Ordner für $benutzer wurde erstellt.\"\n\ndone \u003Cbenutzerliste.txt #Datei einlesen wird als 1. Ausgeführt\n\n",[911,15836,15837,15851,15855,15866,15870,15880,15884,15896,15900,15912,15916,15928,15932],{"__ignoreMap":909},[452,15838,15839,15842,15845,15847,15849],{"class":915,"line":916},[452,15840,15841],{"class":1473},"while",[452,15843,15844],{"class":975}," read",[452,15846,3515],{"class":923},[452,15848,2120],{"class":1298},[452,15850,2123],{"class":1473},[452,15852,15853],{"class":915,"line":1190},[452,15854,1194],{"emptyLinePlaceholder":1193},[452,15856,15857,15859,15862,15864],{"class":915,"line":1197},[452,15858,1523],{"class":975},[452,15860,15861],{"class":923}," \"Line is ",[452,15863,2145],{"class":1298},[452,15865,1896],{"class":923},[452,15867,15868],{"class":915,"line":1204},[452,15869,1194],{"emptyLinePlaceholder":1193},[452,15871,15872,15874,15877],{"class":915,"line":1209},[452,15873,15662],{"class":1473},[452,15875,15876],{"class":1473}," \u003C",[452,15878,15879],{"class":1298},"dateiname.txt\n",[452,15881,15882],{"class":915,"line":1223},[452,15883,1194],{"emptyLinePlaceholder":1193},[452,15885,15886,15888,15890,15892,15894],{"class":915,"line":1228},[452,15887,15841],{"class":1473},[452,15889,15844],{"class":975},[452,15891,7251],{"class":923},[452,15893,2120],{"class":1298},[452,15895,2123],{"class":1473},[452,15897,15898],{"class":915,"line":1234},[452,15899,1194],{"emptyLinePlaceholder":1193},[452,15901,15902,15904,15907,15910],{"class":915,"line":1239},[452,15903,8687],{"class":919},[452,15905,15906],{"class":923}," \"\u002Fhome\u002F",[452,15908,15909],{"class":1298},"$benutzer",[452,15911,1896],{"class":923},[452,15913,15914],{"class":915,"line":1253},[452,15915,1194],{"emptyLinePlaceholder":1193},[452,15917,15918,15920,15923,15925],{"class":915,"line":1258},[452,15919,1523],{"class":975},[452,15921,15922],{"class":923}," \"Ordner für ",[452,15924,15909],{"class":1298},[452,15926,15927],{"class":923}," wurde erstellt.\"\n",[452,15929,15930],{"class":915,"line":1264},[452,15931,1194],{"emptyLinePlaceholder":1193},[452,15933,15934,15936,15938,15941],{"class":915,"line":1269},[452,15935,15662],{"class":1473},[452,15937,15876],{"class":1473},[452,15939,15940],{"class":1298},"benutzerliste.txt ",[452,15942,15943],{"class":1200},"#Datei einlesen wird als 1. Ausgeführt\n",[257,15945,15947],{"id":15946},"if-abfrage-ausführlich","IF-Abfrage (ausführlich)",[2652,15949,15951],{"id":15950},"die-einfache-if-anweisung","Die einfache if-Anweisung",[898,15953,15954],{},"Grundsätzlich hat die if-Anweisung der Bourne-Shell eine sehr einfache Form. Nach dem if steht ein Befehl, der ausgeführt wird. Gibt dieses Kommando eine 0 als Rückgabewert zurück, so gilt die Bedingung als erfüllt und die Aktionen, die zwischen dem folgenden then und fi stehen werden ausgeführt.",[904,15956,15958],{"className":906,"code":15957,"language":908,"meta":909,"style":909},"if Kommando\nthen\n",[911,15959,15960,15967],{"__ignoreMap":909},[452,15961,15962,15964],{"class":915,"line":916},[452,15963,2426],{"class":1473},[452,15965,15966],{"class":919}," Kommando\n",[452,15968,15969],{"class":915,"line":1190},[452,15970,2444],{"class":1473},[898,15972,15973,15976,15978,15980,15982],{},[7867,15974,15975],{},"Aktion",[1325,15977],{},[7867,15979,15975],{},[1325,15981],{},"\n...",[904,15984,15986],{"className":906,"code":15985,"language":908,"meta":909,"style":909},"fi\n\n",[911,15987,15988],{"__ignoreMap":909},[452,15989,15990],{"class":915,"line":916},[452,15991,2484],{"class":1473},[898,15993,15994],{},"Natürlich sind die Aktionen auch wieder normale Unix-Befehle. Das „fi“, das den Block beendet, der durch „if … then“ begonnen wurde, ist einfach nur das „if“ rückwärts geschrieben.",[2652,15996,15998],{"id":15997},"das-programm-test","Das Programm test",[898,16000,16001,16002,16005],{},"Damit es jetzt sinnvolle Möglichkeiten gibt, Bedingungen zu überprüfen brauchen wir ein Programm, das verschiedene Tests durchführt und jeweils bei gelungenem Test eine 0 als Rückgabewert zurückgibt, bei mislingenem Test eine 1. Dieses Programm heißt ",[7867,16003,16004],{},"test"," und ermöglicht alle wesentlichen Bedingungsüberprüfungen, die für das Shell-Programmieren notwendig sind.",[898,16007,16008],{},"Damit wir nicht jedesmal schreiben müssen",[904,16010,16012],{"className":906,"code":16011,"language":908,"meta":909,"style":909},"if test ...\n\n",[911,16013,16014],{"__ignoreMap":909},[452,16015,16016,16018,16021],{"class":915,"line":916},[452,16017,2426],{"class":1473},[452,16019,16020],{"class":975}," test",[452,16022,16023],{"class":923}," ...\n",[898,16025,16026],{},"gibt es einen symbolischen Link auf das Programm test, der einfach [ heißt. Allerdings verlangt das Programm test, wenn es merkt, dass es als [ aufgerufen wurde, auch als letzten Parameter eine eckige Klammer zu. Damit ist es also möglich zu schreiben:",[904,16028,16030],{"className":906,"code":16029,"language":908,"meta":909,"style":909},"if [ ... ]\n\n",[911,16031,16032],{"__ignoreMap":909},[452,16033,16034,16036],{"class":915,"line":916},[452,16035,2426],{"class":1473},[452,16037,16038],{"class":1298}," [ ... ]\n",[898,16040,16041],{},"Wichtig ist hierbei, dass unbedingt ein Leerzeichen zwischen if und der Klammer und zwischen der Klammer und den eigentlichen Tests stehen muß. Es handelt sich bei der Klammer ja tatsächlich um einen Programmaufruf!",[904,16043,16045],{"className":906,"code":16044,"language":908,"meta":909,"style":909},"DATEI=\"test.txt\" # Prüfen, ob die Datei existiert UND sowohl lesbar als auch beschreibbar ist if [ -f \"$DATEI\" ] && [ -r \"$DATEI\" ] && [ -w \"$DATEI\" ]; then\n\n",[911,16046,16047],{"__ignoreMap":909},[452,16048,16049,16051,16053,16056],{"class":915,"line":916},[452,16050,1914],{"class":1298},[452,16052,1862],{"class":1473},[452,16054,16055],{"class":923},"\"test.txt\"",[452,16057,16058],{"class":1200}," # Prüfen, ob die Datei existiert UND sowohl lesbar als auch beschreibbar ist if [ -f \"$DATEI\" ] && [ -r \"$DATEI\" ] && [ -w \"$DATEI\" ]; then\n",[2652,16060,16062],{"id":16061},"die-verschiedenen-bedingungsüberprüfungen-mit-test-bzw-buch-seite-312","Die verschiedenen Bedingungsüberprüfungen mit test bzw. [ (Buch Seite 312)",[898,16064,16065,16075,16076,16079],{},[27,16066,16067,16068],{},"-r ",[7867,16069,16070,16071,16074],{},"Dateiname: if ",[452,16072,16073],{},"-r file.txt","; then:"," Die Datei ",[7867,16077,16078],{},"Dateiname"," existiert und ist lesbar",[898,16081,16082,16087,16088,16090],{},[27,16083,16084,16085],{},"-w ",[7867,16086,16078],{},": Die Datei ",[7867,16089,16078],{}," existiert und ist beschreibbar",[898,16092,16093,16087,16098,16100],{},[27,16094,16095,16096],{},"-x ",[7867,16097,16078],{},[7867,16099,16078],{}," existiert und ist ausführbar",[898,16102,16103,16087,16108,16110],{},[27,16104,16105,16106],{},"-d ",[7867,16107,16078],{},[7867,16109,16078],{}," existiert und ist ein Verzeichnis",[898,16112,16113,16087,16118,16120],{},[27,16114,16115,16116],{},"-s ",[7867,16117,16078],{},[7867,16119,16078],{}," existiert und ist nicht leer",[898,16122,16123,16087,16128,16130],{},[27,16124,16125,16126],{},"-b ",[7867,16127,16078],{},[7867,16129,16078],{}," existiert und ist ein blockorientiertes Gerät",[898,16132,16133,16087,16138,16140],{},[27,16134,16135,16136],{},"-c ",[7867,16137,16078],{},[7867,16139,16078],{}," existiert und ist ein zeichenorientiertes Gerät",[898,16142,16143,16087,16148,16150],{},[27,16144,16145,16146],{},"-g ",[7867,16147,16078],{},[7867,16149,16078],{}," existiert und das SGID-Bit ist gesetzt",[898,16152,16153,16087,16158,16160],{},[27,16154,16155,16156],{},"-k ",[7867,16157,16078],{},[7867,16159,16078],{}," existiert und das Sticky-Bit ist gesetzt",[898,16162,16163,16087,16168,16170],{},[27,16164,16165,16166],{},"-u ",[7867,16167,16078],{},[7867,16169,16078],{}," existiert und das SUID-Bit ist gesetzt",[898,16172,16173,16087,16178,16180],{},[27,16174,16175,16176],{},"-p ",[7867,16177,16078],{},[7867,16179,16078],{}," existiert und ist ein Named Pipe",[898,16182,16183,16087,16188,16190],{},[27,16184,16185,16186],{},"-e ",[7867,16187,16078],{},[7867,16189,16078],{}," existiert",[898,16192,16193,16087,16198,16200],{},[27,16194,16195,16196],{},"-f ",[7867,16197,16078],{},[7867,16199,16078],{}," existiert und ist eine reguläre Datei",[898,16202,16203,16087,16208,16210],{},[27,16204,16205,16206],{},"-L ",[7867,16207,16078],{},[7867,16209,16078],{}," existiert und ist ein symbolischer Link",[898,16212,16213,16087,16218,16220],{},[27,16214,16215,16216],{},"-S ",[7867,16217,16078],{},[7867,16219,16078],{}," existiert und ist ein Socket",[898,16222,16223,16087,16228,16230],{},[27,16224,16225,16226],{},"-O ",[7867,16227,16078],{},[7867,16229,16078],{}," existiert und ist Eigentum des Anwenders, unter dessen UID das test-Programm gerade läuft",[898,16232,16233,16087,16238,16240],{},[27,16234,16235,16236],{},"-G ",[7867,16237,16078],{},[7867,16239,16078],{}," existiert und gehört zu der Gruppe, zu der der User gehört, unter dessen UID das test-Programm gerade läuft",[898,16242,16243,16252,16253,16255,16256,16258],{},[27,16244,16245,16248,16249],{},[7867,16246,16247],{},"Datei1"," -nt ",[7867,16250,16251],{},"Datei2",": ",[7867,16254,16247],{}," ist neuer als ",[7867,16257,16251],{}," (newer than)",[898,16260,16261,16252,16268,16270,16271,16273],{},[27,16262,16263,16265,16266],{},[7867,16264,16247],{}," -ot ",[7867,16267,16251],{},[7867,16269,16247],{}," ist älter als ",[7867,16272,16251],{}," (older than)",[898,16275,16276,16252,16283,10629,16285,16287],{},[27,16277,16278,16280,16281],{},[7867,16279,16247],{}," -ef ",[7867,16282,16251],{},[7867,16284,16247],{},[7867,16286,16251],{}," benutzen die gleiche I-Node (equal file)",[898,16289,16290,16296,16297,16299],{},[27,16291,16292,16293],{},"-z ",[7867,16294,16295],{},"Zeichenkette",": Wahr wenn ",[7867,16298,16295],{}," eine Länge von Null hat.",[898,16301,16302,16296,16307,16309],{},[27,16303,16304,16305],{},"-n ",[7867,16306,16295],{},[7867,16308,16295],{}," eine Länge von größer als Null hat.",[898,16311,16312,16296,16321,16323,16324],{},[27,16313,16314,16317,16318],{},[7867,16315,16316],{},"Zeichenkette1"," = ",[7867,16319,16320],{},"Zeichenkette2",[7867,16322,16316],{}," gleich ",[7867,16325,16320],{},[898,16327,16328,16296,16335,16337,16338],{},[27,16329,16330,16332,16333],{},[7867,16331,16316],{}," != ",[7867,16334,16320],{},[7867,16336,16316],{}," ungleich ",[7867,16339,16320],{},[898,16341,16342,16351,16352,16323,16354,16356],{},[27,16343,16344,16347,16348],{},[7867,16345,16346],{},"Wert1"," -eq ",[7867,16349,16350],{},"Wert2",": Wahr, wenn ",[7867,16353,16346],{},[7867,16355,16350],{}," (equal)",[898,16358,16359,16351,16366,16337,16368,16370],{},[27,16360,16361,16363,16364],{},[7867,16362,16346],{}," -ne ",[7867,16365,16350],{},[7867,16367,16346],{},[7867,16369,16350],{}," (not equal)",[898,16372,16373,16351,16380,16382,16383,16385],{},[27,16374,16375,16377,16378],{},[7867,16376,16346],{}," -gt ",[7867,16379,16350],{},[7867,16381,16346],{}," größer ",[7867,16384,16350],{}," (greater than)",[898,16387,16388,16351,16395,16397,16398,16400],{},[27,16389,16390,16392,16393],{},[7867,16391,16346],{}," -ge ",[7867,16394,16350],{},[7867,16396,16346],{}," größer oder gleich ",[7867,16399,16350],{}," (greater or equal)",[898,16402,16403,16351,16410,16412,16413,16415],{},[27,16404,16405,16407,16408],{},[7867,16406,16346],{}," -lt ",[7867,16409,16350],{},[7867,16411,16346],{}," kleiner ",[7867,16414,16350],{}," (less than)",[898,16417,16418,16351,16425,16427,16428,16430],{},[27,16419,16420,16422,16423],{},[7867,16421,16346],{}," -le ",[7867,16424,16350],{},[7867,16426,16346],{}," kleiner oder gleich ",[7867,16429,16350],{}," (less or equal)",[898,16432,16433,16437,16438],{},[27,16434,15817,16435],{},[7867,16436,3689],{},": Logische Verneinung von ",[7867,16439,3689],{},[898,16441,16442,16449],{},[27,16443,16444,16446,16447],{},[7867,16445,3689],{}," -a ",[7867,16448,3689],{},": Logisches UND. Wahr, wenn beide Ausdrücke wahr sind",[898,16451,16452,16459],{},[27,16453,16454,16456,16457],{},[7867,16455,3689],{}," -o ",[7867,16458,3689],{},": Logisches ODER. Wahr wenn mindestens einer der beiden Ausdrücke wahr ist",[898,16461,16462],{},"Mit diesen Tests sind so ziemlich alle denkbaren Bedingungsüberprüfungen möglich, die in einem Shellscript notwendig sind.",[2652,16464,16466],{"id":16465},"die-erweiterte-if-else-anweisung","Die erweiterte if-else Anweisung",[898,16468,16469],{},"Natürlich bietet die if-Anweisung auch eine Erweiterung zur normalen Form, die sogenannte if-else Anweisung. Es ist also möglich zu schreiben:",[904,16471,16473],{"className":906,"code":16472,"language":908,"meta":909,"style":909},"if [ Ausdruck ];\nthen\nKommandos\nelse\nKommandos\nfi\n\n",[911,16474,16475,16482,16486,16491,16495,16499],{"__ignoreMap":909},[452,16476,16477,16479],{"class":915,"line":916},[452,16478,2426],{"class":1473},[452,16480,16481],{"class":1298}," [ Ausdruck ];\n",[452,16483,16484],{"class":915,"line":1190},[452,16485,2444],{"class":1473},[452,16487,16488],{"class":915,"line":1197},[452,16489,16490],{"class":919},"Kommandos\n",[452,16492,16493],{"class":915,"line":1204},[452,16494,13616],{"class":1473},[452,16496,16497],{"class":915,"line":1209},[452,16498,16490],{"class":919},[452,16500,16501],{"class":915,"line":1223},[452,16502,2484],{"class":1473},[2652,16504,16506],{"id":16505},"die-if-elif-else-anweisung","Die if-elif-else Anweisung",[898,16508,16509],{},"Um noch einen Schritt weiterzugehen bietet die if-Anweisung sogar ein weiteres if im else, das sogenannte elif, das wieder eine Bedingung überprüft:",[904,16511,16513],{"className":906,"code":16512,"language":908,"meta":909,"style":909},"if [ Ausdruck ];\nthen\nKommandos\nelif [ Ausdruck ];\nthen\nKommandos\nelse\nKommandos\nfi\n\n",[911,16514,16515,16521,16525,16529,16536,16540,16544,16548,16552],{"__ignoreMap":909},[452,16516,16517,16519],{"class":915,"line":916},[452,16518,2426],{"class":1473},[452,16520,16481],{"class":1298},[452,16522,16523],{"class":915,"line":1190},[452,16524,2444],{"class":1473},[452,16526,16527],{"class":915,"line":1197},[452,16528,16490],{"class":919},[452,16530,16531,16534],{"class":915,"line":1204},[452,16532,16533],{"class":1473},"elif",[452,16535,16481],{"class":1298},[452,16537,16538],{"class":915,"line":1209},[452,16539,2444],{"class":1473},[452,16541,16542],{"class":915,"line":1223},[452,16543,16490],{"class":919},[452,16545,16546],{"class":915,"line":1228},[452,16547,13616],{"class":1473},[452,16549,16550],{"class":915,"line":1234},[452,16551,16490],{"class":919},[452,16553,16554],{"class":915,"line":1239},[452,16555,2484],{"class":1473},[257,16557,16559],{"id":16558},"mehrfachauswahl-mit-case","Mehrfachauswahl mit case",[898,16561,16562],{},"Oft kommt es vor, dass eine Variable ausgewertet werden muß und es dabei viele verschiedenen Möglichkeiten gibt, welche Werte diese Variable annehmen kann. Natürlich wäre es mit einer langen if-elif-elif-elif… Anweisung möglich, so etwas zu realisieren, das wäre aber sowohl umständlich, als auch schwer zu lesen. Damit solche Fälle einfacher realisiert werden können, gibt es die Mehrfachauswahl mit case. Der prinzipielle Aufbau einer case-Entscheidung sieht folgendermaßen aus:",[904,16564,16566],{"className":906,"code":16565,"language":908,"meta":909,"style":909},"case Variable in\nMuster1) Kommando1 ;;\nMuster2) Kommando2 ;;\nMuster3) Kommando3 ;;\n",[911,16567,16568,16577,16590,16602],{"__ignoreMap":909},[452,16569,16570,16572,16575],{"class":915,"line":916},[452,16571,15240],{"class":1473},[452,16573,16574],{"class":1298}," Variable ",[452,16576,15246],{"class":1473},[452,16578,16579,16582,16584,16587],{"class":915,"line":1190},[452,16580,16581],{"class":15255},"Muster1",[452,16583,12044],{"class":1473},[452,16585,16586],{"class":919}," Kommando1",[452,16588,16589],{"class":1298}," ;;\n",[452,16591,16592,16595,16597,16600],{"class":915,"line":1197},[452,16593,16594],{"class":15255},"Muster2",[452,16596,12044],{"class":1473},[452,16598,16599],{"class":919}," Kommando2",[452,16601,16589],{"class":1298},[452,16603,16604,16607,16609,16612],{"class":915,"line":1204},[452,16605,16606],{"class":15255},"Muster3",[452,16608,12044],{"class":1473},[452,16610,16611],{"class":919}," Kommando3",[452,16613,16589],{"class":1298},[898,16615,13846],{},[904,16617,16619],{"className":906,"code":16618,"language":908,"meta":909,"style":909},"esac\n\n",[911,16620,16621],{"__ignoreMap":909},[452,16622,16623],{"class":915,"line":916},[452,16624,16625],{"class":1298},"esac\n",[257,16627,16629],{"id":16628},"essenzielle-werkzeuge","Essenzielle Werkzeuge",[992,16631,16632,16638,16644,16650],{},[995,16633,16634,16637],{},[27,16635,16636],{},"Suchen:"," grep foo myfile findet Zeilen mit dem Text \"foo\" in einer Datei.",[995,16639,16640,16643],{},[27,16641,16642],{},"Dateien finden:"," find . -name \"*.txt\" -print sucht nach Textdateien im aktuellen Verzeichnis.",[995,16645,16646,16649],{},[27,16647,16648],{},"Text filtern:"," awk '{print $5}' file gibt nur das 5. Wort jeder Zeile aus.",[995,16651,16652,16655],{},[27,16653,16654],{},"Text ersetzen:"," sed s\u002Ffoo\u002Fbar\u002Fg file ersetzt \"foo\" durch \"bar\".",[257,16657,16659],{"id":16658},"funktionen","Funktionen",[898,16661,16662],{},[12786,16663],{"alt":909,"src":16664},"\u002Fdownloads\u002FBSA\u002Fimages\u002Fap-zsmf_img_2.png",[898,16666,16667],{},[12786,16668],{"alt":909,"src":16669},"\u002Fdownloads\u002FBSA\u002Fimages\u002Fap-zsmf_img_3.png",[10,16671,16673],{"id":16672},"definition","Definition",[904,16675,16677],{"className":906,"code":16676,"language":908,"meta":909,"style":909},"meine_funktion() {\n\necho \"Hallo $1!\"\n\n}\n\n# Aufruf\n\nmeine_funktion \"Welt\"\n\n# Mit Rückgabewert (Exit-Code 0-255)\n\nist_gerade() {\n\nif (($1 % 2 == 0)); then\n\nreturn 0\n\nelse\n\nreturn 1\n\nfi\n\n}\n\n# Werte \"zurückgeben\" über echo\n\nberechne() {\n\necho $(($1 * $1))\n\n}\n\nergebnis=$(berechne 5)\n\n# Lokale Variablen\n\nfunktion() {\n\nlocal zahl=5 # Nur innerhalb der Funktion sichtbar\n\necho $zahl\n\n}\n\n",[911,16678,16679,16686,16690,16702,16706,16710,16714,16719,16723,16730,16734,16739,16743,16750,16754,16778,16782,16790,16794,16798,16802,16808,16812,16816,16820,16824,16828,16833,16837,16844,16848,16863,16867,16871,16875,16889,16893,16898,16902,16909,16913,16928,16932,16939,16943],{"__ignoreMap":909},[452,16680,16681,16684],{"class":915,"line":916},[452,16682,16683],{"class":919},"meine_funktion",[452,16685,12482],{"class":1298},[452,16687,16688],{"class":915,"line":1190},[452,16689,1194],{"emptyLinePlaceholder":1193},[452,16691,16692,16694,16697,16699],{"class":915,"line":1197},[452,16693,1523],{"class":975},[452,16695,16696],{"class":923}," \"Hallo ",[452,16698,5368],{"class":975},[452,16700,16701],{"class":923},"!\"\n",[452,16703,16704],{"class":915,"line":1204},[452,16705,1194],{"emptyLinePlaceholder":1193},[452,16707,16708],{"class":915,"line":1209},[452,16709,12525],{"class":1298},[452,16711,16712],{"class":915,"line":1223},[452,16713,1194],{"emptyLinePlaceholder":1193},[452,16715,16716],{"class":915,"line":1228},[452,16717,16718],{"class":1200},"# Aufruf\n",[452,16720,16721],{"class":915,"line":1234},[452,16722,1194],{"emptyLinePlaceholder":1193},[452,16724,16725,16727],{"class":915,"line":1239},[452,16726,16683],{"class":919},[452,16728,16729],{"class":923}," \"Welt\"\n",[452,16731,16732],{"class":915,"line":1253},[452,16733,1194],{"emptyLinePlaceholder":1193},[452,16735,16736],{"class":915,"line":1258},[452,16737,16738],{"class":1200},"# Mit Rückgabewert (Exit-Code 0-255)\n",[452,16740,16741],{"class":915,"line":1264},[452,16742,1194],{"emptyLinePlaceholder":1193},[452,16744,16745,16748],{"class":915,"line":1269},[452,16746,16747],{"class":919},"ist_gerade",[452,16749,12482],{"class":1298},[452,16751,16752],{"class":915,"line":1558},[452,16753,1194],{"emptyLinePlaceholder":1193},[452,16755,16756,16758,16761,16764,16766,16768,16771,16774,16776],{"class":915,"line":1563},[452,16757,2426],{"class":1473},[452,16759,16760],{"class":1298}," ((",[452,16762,5368],{"class":16763},"s4XuR",[452,16765,13181],{"class":1473},[452,16767,13705],{"class":975},[452,16769,16770],{"class":1473}," ==",[452,16772,16773],{"class":975}," 0",[452,16775,13594],{"class":1298},[452,16777,2444],{"class":1473},[452,16779,16780],{"class":915,"line":1586},[452,16781,1194],{"emptyLinePlaceholder":1193},[452,16783,16784,16787],{"class":915,"line":1591},[452,16785,16786],{"class":1473},"return",[452,16788,16789],{"class":975}," 0\n",[452,16791,16792],{"class":915,"line":1597},[452,16793,1194],{"emptyLinePlaceholder":1193},[452,16795,16796],{"class":915,"line":1602},[452,16797,13616],{"class":1473},[452,16799,16800],{"class":915,"line":1622},[452,16801,1194],{"emptyLinePlaceholder":1193},[452,16803,16804,16806],{"class":915,"line":1627},[452,16805,16786],{"class":1473},[452,16807,2475],{"class":975},[452,16809,16810],{"class":915,"line":1633},[452,16811,1194],{"emptyLinePlaceholder":1193},[452,16813,16814],{"class":915,"line":1638},[452,16815,2484],{"class":1473},[452,16817,16818],{"class":915,"line":1922},[452,16819,1194],{"emptyLinePlaceholder":1193},[452,16821,16822],{"class":915,"line":1927},[452,16823,12525],{"class":1298},[452,16825,16826],{"class":915,"line":1942},[452,16827,1194],{"emptyLinePlaceholder":1193},[452,16829,16830],{"class":915,"line":1947},[452,16831,16832],{"class":1200},"# Werte \"zurückgeben\" über echo\n",[452,16834,16835],{"class":915,"line":1953},[452,16836,1194],{"emptyLinePlaceholder":1193},[452,16838,16839,16842],{"class":915,"line":1958},[452,16840,16841],{"class":919},"berechne",[452,16843,12482],{"class":1298},[452,16845,16846],{"class":915,"line":1964},[452,16847,1194],{"emptyLinePlaceholder":1193},[452,16849,16850,16852,16854,16856,16858,16861],{"class":915,"line":1969},[452,16851,1523],{"class":975},[452,16853,13088],{"class":1298},[452,16855,5368],{"class":16763},[452,16857,6393],{"class":1473},[452,16859,16860],{"class":16763}," $1",[452,16862,13402],{"class":1298},[452,16864,16865],{"class":915,"line":1986},[452,16866,1194],{"emptyLinePlaceholder":1193},[452,16868,16869],{"class":915,"line":1991},[452,16870,12525],{"class":1298},[452,16872,16873],{"class":915,"line":1997},[452,16874,1194],{"emptyLinePlaceholder":1193},[452,16876,16877,16879,16881,16883,16885,16887],{"class":915,"line":2002},[452,16878,13388],{"class":1298},[452,16880,1862],{"class":1473},[452,16882,1865],{"class":1298},[452,16884,16841],{"class":919},[452,16886,9468],{"class":975},[452,16888,1879],{"class":1298},[452,16890,16891],{"class":915,"line":2008},[452,16892,1194],{"emptyLinePlaceholder":1193},[452,16894,16895],{"class":915,"line":2013},[452,16896,16897],{"class":1200},"# Lokale Variablen\n",[452,16899,16900],{"class":915,"line":2019},[452,16901,1194],{"emptyLinePlaceholder":1193},[452,16903,16904,16907],{"class":915,"line":2024},[452,16905,16906],{"class":919},"funktion",[452,16908,12482],{"class":1298},[452,16910,16911],{"class":915,"line":2030},[452,16912,1194],{"emptyLinePlaceholder":1193},[452,16914,16915,16918,16921,16923,16925],{"class":915,"line":2035},[452,16916,16917],{"class":1473},"local",[452,16919,16920],{"class":1298}," zahl",[452,16922,1862],{"class":1473},[452,16924,12994],{"class":975},[452,16926,16927],{"class":1200}," # Nur innerhalb der Funktion sichtbar\n",[452,16929,16930],{"class":915,"line":2056},[452,16931,1194],{"emptyLinePlaceholder":1193},[452,16933,16934,16936],{"class":915,"line":2061},[452,16935,1523],{"class":975},[452,16937,16938],{"class":1298}," $zahl\n",[452,16940,16941],{"class":915,"line":2067},[452,16942,1194],{"emptyLinePlaceholder":1193},[452,16944,16945],{"class":915,"line":2072},[452,16946,12525],{"class":1298},[257,16948,16950],{"id":16949},"best-practices","Best Practices",[2652,16952,16954],{"id":16953},"fehlerbehandlung-mit-trap","Fehlerbehandlung mit trap",[904,16956,16958],{"className":906,"code":16957,"language":908,"meta":909,"style":909},"cleanup() {\n\nrm -f \"$LOCKFILE\"\n\necho \"Aufgeräumt\"\n\n}\n\ntrap cleanup EXIT INT TERM\n\n",[911,16959,16960,16966,16970,16982,16986,16993,16997,17001,17005],{"__ignoreMap":909},[452,16961,16962,16964],{"class":915,"line":916},[452,16963,12534],{"class":919},[452,16965,12482],{"class":1298},[452,16967,16968],{"class":915,"line":1190},[452,16969,1194],{"emptyLinePlaceholder":1193},[452,16971,16972,16974,16976,16978,16980],{"class":915,"line":1197},[452,16973,12545],{"class":919},[452,16975,5006],{"class":975},[452,16977,1870],{"class":923},[452,16979,2436],{"class":1298},[452,16981,1896],{"class":923},[452,16983,16984],{"class":915,"line":1204},[452,16985,1194],{"emptyLinePlaceholder":1193},[452,16987,16988,16990],{"class":915,"line":1209},[452,16989,1523],{"class":975},[452,16991,16992],{"class":923}," \"Aufgeräumt\"\n",[452,16994,16995],{"class":915,"line":1223},[452,16996,1194],{"emptyLinePlaceholder":1193},[452,16998,16999],{"class":915,"line":1228},[452,17000,12525],{"class":1298},[452,17002,17003],{"class":915,"line":1234},[452,17004,1194],{"emptyLinePlaceholder":1193},[452,17006,17007,17009,17011,17014,17017],{"class":915,"line":1239},[452,17008,2508],{"class":975},[452,17010,12572],{"class":923},[452,17012,17013],{"class":923}," EXIT",[452,17015,17016],{"class":923}," INT",[452,17018,17019],{"class":923}," TERM\n",[2652,17021,17023],{"id":17022},"locking-verhindert-doppelte-ausführung","Locking (verhindert doppelte Ausführung)",[904,17025,17027],{"className":906,"code":17026,"language":908,"meta":909,"style":909},"LOCKFILE=\"\u002Ftmp\u002Fmyscript.lock\"\n\nexec 200>\"$LOCKFILE\"\n\nflock -n 200 || {\n\necho \"Already running\"\n\nexit 1\n\n}\n\n",[911,17028,17029,17038,17042,17059,17063,17079,17083,17089,17093,17099,17103],{"__ignoreMap":909},[452,17030,17031,17033,17035],{"class":915,"line":916},[452,17032,2407],{"class":1298},[452,17034,1862],{"class":1473},[452,17036,17037],{"class":923},"\"\u002Ftmp\u002Fmyscript.lock\"\n",[452,17039,17040],{"class":915,"line":1190},[452,17041,1194],{"emptyLinePlaceholder":1193},[452,17043,17044,17047,17050,17053,17055,17057],{"class":915,"line":1197},[452,17045,17046],{"class":975},"exec",[452,17048,17049],{"class":975}," 20",[452,17051,17052],{"class":1473},"0>",[452,17054,1876],{"class":923},[452,17056,2436],{"class":1298},[452,17058,1896],{"class":923},[452,17060,17061],{"class":915,"line":1204},[452,17062,1194],{"emptyLinePlaceholder":1193},[452,17064,17065,17068,17070,17073,17076],{"class":915,"line":1209},[452,17066,17067],{"class":919},"flock",[452,17069,4656],{"class":975},[452,17071,17072],{"class":975}," 200",[452,17074,17075],{"class":1473}," ||",[452,17077,17078],{"class":1298}," {\n",[452,17080,17081],{"class":915,"line":1223},[452,17082,1194],{"emptyLinePlaceholder":1193},[452,17084,17085,17087],{"class":915,"line":1228},[452,17086,1523],{"class":975},[452,17088,12605],{"class":923},[452,17090,17091],{"class":915,"line":1234},[452,17092,1194],{"emptyLinePlaceholder":1193},[452,17094,17095,17097],{"class":915,"line":1239},[452,17096,2472],{"class":975},[452,17098,2475],{"class":975},[452,17100,17101],{"class":915,"line":1253},[452,17102,1194],{"emptyLinePlaceholder":1193},[452,17104,17105],{"class":915,"line":1258},[452,17106,12525],{"class":1298},[2652,17108,17110],{"id":17109},"main-struktur-empfohlen","main()-Struktur (empfohlen)",[904,17112,17114],{"className":906,"code":17113,"language":908,"meta":909,"style":909},"#!\u002Fbin\u002Fbash\n\nset -euo pipefail\n\ncheck_input() {\n\nif [ -z \"$1\" ]; then\n\necho \"Kein Parameter!\"\n\nexit 1\n\nfi\n\n}\n\nverarbeite() {\n\necho \"Verarbeite: $1\"\n\n}\n\nmain() {\n\ncheck_input \"$1\"\n\nverarbeite \"$1\"\n\n}\n\nmain \"$@\"\n\n",[911,17115,17116,17120,17124,17132,17136,17143,17147,17165,17169,17176,17180,17186,17190,17194,17198,17202,17206,17213,17217,17227,17231,17235,17239,17246,17250,17260,17264,17274,17278,17282,17286],{"__ignoreMap":909},[452,17117,17118],{"class":915,"line":916},[452,17119,2366],{"class":1200},[452,17121,17122],{"class":915,"line":1190},[452,17123,1194],{"emptyLinePlaceholder":1193},[452,17125,17126,17128,17130],{"class":915,"line":1197},[452,17127,8886],{"class":975},[452,17129,12391],{"class":975},[452,17131,12394],{"class":923},[452,17133,17134],{"class":915,"line":1204},[452,17135,1194],{"emptyLinePlaceholder":1193},[452,17137,17138,17141],{"class":915,"line":1209},[452,17139,17140],{"class":919},"check_input",[452,17142,12482],{"class":1298},[452,17144,17145],{"class":915,"line":1223},[452,17146,1194],{"emptyLinePlaceholder":1193},[452,17148,17149,17151,17153,17155,17157,17159,17161,17163],{"class":915,"line":1228},[452,17150,2426],{"class":1473},[452,17152,2429],{"class":1298},[452,17154,4011],{"class":1473},[452,17156,1870],{"class":923},[452,17158,5368],{"class":975},[452,17160,1876],{"class":923},[452,17162,2441],{"class":1298},[452,17164,2444],{"class":1473},[452,17166,17167],{"class":915,"line":1234},[452,17168,1194],{"emptyLinePlaceholder":1193},[452,17170,17171,17173],{"class":915,"line":1239},[452,17172,1523],{"class":975},[452,17174,17175],{"class":923}," \"Kein Parameter!\"\n",[452,17177,17178],{"class":915,"line":1253},[452,17179,1194],{"emptyLinePlaceholder":1193},[452,17181,17182,17184],{"class":915,"line":1258},[452,17183,2472],{"class":975},[452,17185,2475],{"class":975},[452,17187,17188],{"class":915,"line":1264},[452,17189,1194],{"emptyLinePlaceholder":1193},[452,17191,17192],{"class":915,"line":1269},[452,17193,2484],{"class":1473},[452,17195,17196],{"class":915,"line":1558},[452,17197,1194],{"emptyLinePlaceholder":1193},[452,17199,17200],{"class":915,"line":1563},[452,17201,12525],{"class":1298},[452,17203,17204],{"class":915,"line":1586},[452,17205,1194],{"emptyLinePlaceholder":1193},[452,17207,17208,17211],{"class":915,"line":1591},[452,17209,17210],{"class":919},"verarbeite",[452,17212,12482],{"class":1298},[452,17214,17215],{"class":915,"line":1597},[452,17216,1194],{"emptyLinePlaceholder":1193},[452,17218,17219,17221,17223,17225],{"class":915,"line":1602},[452,17220,1523],{"class":975},[452,17222,2165],{"class":923},[452,17224,5368],{"class":975},[452,17226,1896],{"class":923},[452,17228,17229],{"class":915,"line":1622},[452,17230,1194],{"emptyLinePlaceholder":1193},[452,17232,17233],{"class":915,"line":1627},[452,17234,12525],{"class":1298},[452,17236,17237],{"class":915,"line":1633},[452,17238,1194],{"emptyLinePlaceholder":1193},[452,17240,17241,17244],{"class":915,"line":1638},[452,17242,17243],{"class":919},"main",[452,17245,12482],{"class":1298},[452,17247,17248],{"class":915,"line":1922},[452,17249,1194],{"emptyLinePlaceholder":1193},[452,17251,17252,17254,17256,17258],{"class":915,"line":1927},[452,17253,17140],{"class":919},[452,17255,1870],{"class":923},[452,17257,5368],{"class":975},[452,17259,1896],{"class":923},[452,17261,17262],{"class":915,"line":1942},[452,17263,1194],{"emptyLinePlaceholder":1193},[452,17265,17266,17268,17270,17272],{"class":915,"line":1947},[452,17267,17210],{"class":919},[452,17269,1870],{"class":923},[452,17271,5368],{"class":975},[452,17273,1896],{"class":923},[452,17275,17276],{"class":915,"line":1953},[452,17277,1194],{"emptyLinePlaceholder":1193},[452,17279,17280],{"class":915,"line":1958},[452,17281,12525],{"class":1298},[452,17283,17284],{"class":915,"line":1964},[452,17285,1194],{"emptyLinePlaceholder":1193},[452,17287,17288,17290,17292,17295],{"class":915,"line":1969},[452,17289,17243],{"class":919},[452,17291,1870],{"class":923},[452,17293,17294],{"class":975},"$@",[452,17296,1896],{"class":923},[10,17298,17300],{"id":17299},"vm-vs-docker","VM vs. Docker",[257,17302,17304],{"id":17303},"virtualisierung","Virtualisierung",[15,17306,17307,17325],{},[18,17308,17309],{},[21,17310,17311,17315,17320],{},[24,17312,17313],{},[27,17314,9630],{},[24,17316,17317],{},[27,17318,17319],{},"Virtuelle Maschine (VM)",[24,17321,17322],{},[27,17323,17324],{},"Docker Container",[41,17326,17327,17338,17349,17360,17371,17382,17393],{},[21,17328,17329,17332,17335],{},[46,17330,17331],{},"Isolation",[46,17333,17334],{},"Vollständig (eigener Kernel)",[46,17336,17337],{},"Prozess-Level (teilt Kernel mit Host)",[21,17339,17340,17343,17346],{},[46,17341,17342],{},"Ressourcen",[46,17344,17345],{},"Braucht viel RAM\u002FCPU (eigenes OS)",[46,17347,17348],{},"Leichtgewichtig",[21,17350,17351,17354,17357],{},[46,17352,17353],{},"Startzeit",[46,17355,17356],{},"Minuten",[46,17358,17359],{},"Sekunden",[21,17361,17362,17365,17368],{},[46,17363,17364],{},"Größe",[46,17366,17367],{},"GB (volles Betriebssystem)",[46,17369,17370],{},"MB (nur App + Dependencies)",[21,17372,17373,17376,17379],{},[46,17374,17375],{},"Portabilität",[46,17377,17378],{},"Image-basiert",[46,17380,17381],{},"Container-Image (Docker Hub)",[21,17383,17384,17387,17390],{},[46,17385,17386],{},"Hypervisor",[46,17388,17389],{},"Ja (VMware, VirtualBox, KVM)",[46,17391,17392],{},"Docker Engine",[21,17394,17395,17398,17401],{},[46,17396,17397],{},"Use Case",[46,17399,17400],{},"Verschiedene OS gleichzeitig",[46,17402,17403],{},"Microservices, CI\u002FCD",[2652,17405,17407],{"id":17406},"begriffe-virtualisierung","Begriffe (Virtualisierung):",[992,17409,17410,17416,17422],{},[995,17411,17412,17415],{},[27,17413,17414],{},"Hostsystem"," = System, auf dem die Virtualisierung läuft",[995,17417,17418,17421],{},[27,17419,17420],{},"Gastsystem"," = System in der VM",[995,17423,17424,17427],{},[27,17425,17426],{},"Hypervisor \u002F VMM"," = Virtualisierungssoftware",[2652,17429,17431],{"id":17430},"virtualbox-netzwerktypen","VirtualBox Netzwerktypen:",[15,17433,17434,17446],{},[18,17435,17436],{},[21,17437,17438,17442],{},[24,17439,17440],{},[27,17441,6594],{},[24,17443,17444],{},[27,17445,39],{},[41,17447,17448,17456,17464,17472,17480],{},[21,17449,17450,17453],{},[46,17451,17452],{},"NAT",[46,17454,17455],{},"Standard, VM nutzt Host als Router",[21,17457,17458,17461],{},[46,17459,17460],{},"NAT-Netzwerk",[46,17462,17463],{},"VMs können untereinander + nach außen kommunizieren",[21,17465,17466,17469],{},[46,17467,17468],{},"Bridged",[46,17470,17471],{},"VM bekommt direkten Netzwerkzugang",[21,17473,17474,17477],{},[46,17475,17476],{},"Internes Netzwerk",[46,17478,17479],{},"Nur VMs untereinander",[21,17481,17482,17485],{},[46,17483,17484],{},"Host-only",[46,17486,17487],{},"VMs + Host können kommunizieren",[257,17489,17491],{"id":17490},"docker","Docker",[2652,17493,17495],{"id":17494},"grundbegriffe","Grundbegriffe",[15,17497,17498,17511],{},[18,17499,17500],{},[21,17501,17502,17507],{},[24,17503,17504],{},[27,17505,17506],{},"Begriff",[24,17508,17509],{},[27,17510,39],{},[41,17512,17513,17521,17529,17537,17545],{},[21,17514,17515,17518],{},[46,17516,17517],{},"Image",[46,17519,17520],{},"Bauplan\u002FVorlage (\"eingepackte Applikation\")",[21,17522,17523,17526],{},[46,17524,17525],{},"Container",[46,17527,17528],{},"Laufende Instanz eines Images",[21,17530,17531,17534],{},[46,17532,17533],{},"Dockerfile",[46,17535,17536],{},"Bauanleitung für ein Image",[21,17538,17539,17542],{},[46,17540,17541],{},"Docker Hub",[46,17543,17544],{},"Zentrale Registry für Images",[21,17546,17547,17550],{},[46,17548,17549],{},"Volume",[46,17551,17552],{},"Persistenter Speicher",[2652,17554,17556],{"id":17555},"wichtige-docker-befehle","Wichtige Docker-Befehle",[2997,17558,17560],{"id":17559},"images-verwalten","Images verwalten",[904,17562,17564],{"className":906,"code":17563,"language":908,"meta":909,"style":909},"docker image pull nginx # Image herunterladen\n\ndocker image build -t myapp:1.0 . # Image aus Dockerfile bauen\n\ndocker image ls # Alle Images anzeigen\n\ndocker image rm nginx # Image löschen\n\ndocker images prune # Ungenutzte Images löschen\n\n",[911,17565,17566,17582,17586,17606,17610,17622,17626,17639,17643],{"__ignoreMap":909},[452,17567,17568,17570,17573,17576,17579],{"class":915,"line":916},[452,17569,17490],{"class":919},[452,17571,17572],{"class":923}," image",[452,17574,17575],{"class":923}," pull",[452,17577,17578],{"class":923}," nginx",[452,17580,17581],{"class":1200}," # Image herunterladen\n",[452,17583,17584],{"class":915,"line":1190},[452,17585,1194],{"emptyLinePlaceholder":1193},[452,17587,17588,17590,17592,17595,17598,17601,17603],{"class":915,"line":1197},[452,17589,17490],{"class":919},[452,17591,17572],{"class":923},[452,17593,17594],{"class":923}," build",[452,17596,17597],{"class":975}," -t",[452,17599,17600],{"class":923}," myapp:1.0",[452,17602,3479],{"class":923},[452,17604,17605],{"class":1200}," # Image aus Dockerfile bauen\n",[452,17607,17608],{"class":915,"line":1204},[452,17609,1194],{"emptyLinePlaceholder":1193},[452,17611,17612,17614,17616,17619],{"class":915,"line":1209},[452,17613,17490],{"class":919},[452,17615,17572],{"class":923},[452,17617,17618],{"class":923}," ls",[452,17620,17621],{"class":1200}," # Alle Images anzeigen\n",[452,17623,17624],{"class":915,"line":1223},[452,17625,1194],{"emptyLinePlaceholder":1193},[452,17627,17628,17630,17632,17634,17636],{"class":915,"line":1228},[452,17629,17490],{"class":919},[452,17631,17572],{"class":923},[452,17633,3560],{"class":923},[452,17635,17578],{"class":923},[452,17637,17638],{"class":1200}," # Image löschen\n",[452,17640,17641],{"class":915,"line":1234},[452,17642,1194],{"emptyLinePlaceholder":1193},[452,17644,17645,17647,17650,17653],{"class":915,"line":1239},[452,17646,17490],{"class":919},[452,17648,17649],{"class":923}," images",[452,17651,17652],{"class":923}," prune",[452,17654,17655],{"class":1200}," # Ungenutzte Images löschen\n",[2997,17657,17659],{"id":17658},"container-verwalten","Container verwalten",[10,17661,17663],{"id":17662},"container-erstellen-und-starten","Container erstellen und starten",[904,17665,17667],{"className":906,"code":17666,"language":908,"meta":909,"style":909},"docker run -d -p 8080:80 --name myweb nginx\n\ndocker run -it ubuntu bash # Interaktiv starten\n\ndocker run --rm alpine echo \"Hello\" # Nach Beenden löschen\n\n# Container verwalten\n\ndocker container ls # Laufende Container\n\ndocker container ls -a # Alle Container\n\ndocker container stop myweb # Stoppen\n\ndocker container start myweb # Starten\n\ndocker container rm myweb # Löschen\n\ndocker container rm -f myweb # Erzwungen löschen\n\ndocker container inspect myweb # Details anzeigen\n\n# Im Container arbeiten\n\ndocker exec -it myweb bash # Shell in laufendem Container\n\ndocker logs myweb # Logs anzeigen\n\ndocker logs -f myweb # Live-Logs\n\ndocker stats # Ressourcen-Monitoring\n\n",[911,17668,17669,17693,17697,17715,17719,17739,17743,17748,17752,17764,17768,17781,17785,17799,17803,17816,17820,17833,17837,17852,17856,17870,17874,17879,17883,17899,17903,17915,17919,17932,17936],{"__ignoreMap":909},[452,17670,17671,17673,17676,17679,17681,17684,17687,17690],{"class":915,"line":916},[452,17672,17490],{"class":919},[452,17674,17675],{"class":923}," run",[452,17677,17678],{"class":975}," -d",[452,17680,9471],{"class":975},[452,17682,17683],{"class":923}," 8080:80",[452,17685,17686],{"class":975}," --name",[452,17688,17689],{"class":923}," myweb",[452,17691,17692],{"class":923}," nginx\n",[452,17694,17695],{"class":915,"line":1190},[452,17696,1194],{"emptyLinePlaceholder":1193},[452,17698,17699,17701,17703,17706,17709,17712],{"class":915,"line":1197},[452,17700,17490],{"class":919},[452,17702,17675],{"class":923},[452,17704,17705],{"class":975}," -it",[452,17707,17708],{"class":923}," ubuntu",[452,17710,17711],{"class":923}," bash",[452,17713,17714],{"class":1200}," # Interaktiv starten\n",[452,17716,17717],{"class":915,"line":1204},[452,17718,1194],{"emptyLinePlaceholder":1193},[452,17720,17721,17723,17725,17728,17731,17733,17736],{"class":915,"line":1209},[452,17722,17490],{"class":919},[452,17724,17675],{"class":923},[452,17726,17727],{"class":975}," --rm",[452,17729,17730],{"class":923}," alpine",[452,17732,15260],{"class":923},[452,17734,17735],{"class":923}," \"Hello\"",[452,17737,17738],{"class":1200}," # Nach Beenden löschen\n",[452,17740,17741],{"class":915,"line":1223},[452,17742,1194],{"emptyLinePlaceholder":1193},[452,17744,17745],{"class":915,"line":1228},[452,17746,17747],{"class":1200},"# Container verwalten\n",[452,17749,17750],{"class":915,"line":1234},[452,17751,1194],{"emptyLinePlaceholder":1193},[452,17753,17754,17756,17759,17761],{"class":915,"line":1239},[452,17755,17490],{"class":919},[452,17757,17758],{"class":923}," container",[452,17760,17618],{"class":923},[452,17762,17763],{"class":1200}," # Laufende Container\n",[452,17765,17766],{"class":915,"line":1253},[452,17767,1194],{"emptyLinePlaceholder":1193},[452,17769,17770,17772,17774,17776,17778],{"class":915,"line":1258},[452,17771,17490],{"class":919},[452,17773,17758],{"class":923},[452,17775,17618],{"class":923},[452,17777,1974],{"class":975},[452,17779,17780],{"class":1200}," # Alle Container\n",[452,17782,17783],{"class":915,"line":1264},[452,17784,1194],{"emptyLinePlaceholder":1193},[452,17786,17787,17789,17791,17794,17796],{"class":915,"line":1269},[452,17788,17490],{"class":919},[452,17790,17758],{"class":923},[452,17792,17793],{"class":923}," stop",[452,17795,17689],{"class":923},[452,17797,17798],{"class":1200}," # Stoppen\n",[452,17800,17801],{"class":915,"line":1558},[452,17802,1194],{"emptyLinePlaceholder":1193},[452,17804,17805,17807,17809,17811,17813],{"class":915,"line":1563},[452,17806,17490],{"class":919},[452,17808,17758],{"class":923},[452,17810,10374],{"class":923},[452,17812,17689],{"class":923},[452,17814,17815],{"class":1200}," # Starten\n",[452,17817,17818],{"class":915,"line":1586},[452,17819,1194],{"emptyLinePlaceholder":1193},[452,17821,17822,17824,17826,17828,17830],{"class":915,"line":1591},[452,17823,17490],{"class":919},[452,17825,17758],{"class":923},[452,17827,3560],{"class":923},[452,17829,17689],{"class":923},[452,17831,17832],{"class":1200}," # Löschen\n",[452,17834,17835],{"class":915,"line":1597},[452,17836,1194],{"emptyLinePlaceholder":1193},[452,17838,17839,17841,17843,17845,17847,17849],{"class":915,"line":1602},[452,17840,17490],{"class":919},[452,17842,17758],{"class":923},[452,17844,3560],{"class":923},[452,17846,5006],{"class":975},[452,17848,17689],{"class":923},[452,17850,17851],{"class":1200}," # Erzwungen löschen\n",[452,17853,17854],{"class":915,"line":1622},[452,17855,1194],{"emptyLinePlaceholder":1193},[452,17857,17858,17860,17862,17865,17867],{"class":915,"line":1627},[452,17859,17490],{"class":919},[452,17861,17758],{"class":923},[452,17863,17864],{"class":923}," inspect",[452,17866,17689],{"class":923},[452,17868,17869],{"class":1200}," # Details anzeigen\n",[452,17871,17872],{"class":915,"line":1633},[452,17873,1194],{"emptyLinePlaceholder":1193},[452,17875,17876],{"class":915,"line":1638},[452,17877,17878],{"class":1200},"# Im Container arbeiten\n",[452,17880,17881],{"class":915,"line":1922},[452,17882,1194],{"emptyLinePlaceholder":1193},[452,17884,17885,17887,17890,17892,17894,17896],{"class":915,"line":1927},[452,17886,17490],{"class":919},[452,17888,17889],{"class":923}," exec",[452,17891,17705],{"class":975},[452,17893,17689],{"class":923},[452,17895,17711],{"class":923},[452,17897,17898],{"class":1200}," # Shell in laufendem Container\n",[452,17900,17901],{"class":915,"line":1942},[452,17902,1194],{"emptyLinePlaceholder":1193},[452,17904,17905,17907,17910,17912],{"class":915,"line":1947},[452,17906,17490],{"class":919},[452,17908,17909],{"class":923}," logs",[452,17911,17689],{"class":923},[452,17913,17914],{"class":1200}," # Logs anzeigen\n",[452,17916,17917],{"class":915,"line":1953},[452,17918,1194],{"emptyLinePlaceholder":1193},[452,17920,17921,17923,17925,17927,17929],{"class":915,"line":1958},[452,17922,17490],{"class":919},[452,17924,17909],{"class":923},[452,17926,5006],{"class":975},[452,17928,17689],{"class":923},[452,17930,17931],{"class":1200}," # Live-Logs\n",[452,17933,17934],{"class":915,"line":1964},[452,17935,1194],{"emptyLinePlaceholder":1193},[452,17937,17938,17940,17943],{"class":915,"line":1969},[452,17939,17490],{"class":919},[452,17941,17942],{"class":923}," stats",[452,17944,17945],{"class":1200}," # Ressourcen-Monitoring\n",[2997,17947,17949],{"id":17948},"docker-run-optionen","docker run Optionen",[15,17951,17952,17964],{},[18,17953,17954],{},[21,17955,17956,17960],{},[24,17957,17958],{},[27,17959,1019],{},[24,17961,17962],{},[27,17963,39],{},[41,17965,17966,17974,17982,17990,17998,18006,18014,18022],{},[21,17967,17968,17971],{},[46,17969,17970],{},"-d systemctl",[46,17972,17973],{},"Detached (Hintergrund)",[21,17975,17976,17979],{},[46,17977,17978],{},"-it",[46,17980,17981],{},"Interaktiv mit Terminal",[21,17983,17984,17987],{},[46,17985,17986],{},"-p host:container",[46,17988,17989],{},"Port-Mapping",[21,17991,17992,17995],{},[46,17993,17994],{},"-v host:container",[46,17996,17997],{},"Volume\u002FBind Mount",[21,17999,18000,18003],{},[46,18001,18002],{},"--name name",[46,18004,18005],{},"Container-Name vergeben",[21,18007,18008,18011],{},[46,18009,18010],{},"--network netz",[46,18012,18013],{},"Mit Netzwerk verbinden",[21,18015,18016,18019],{},[46,18017,18018],{},"--rm",[46,18020,18021],{},"Container nach Beenden löschen",[21,18023,18024,18027],{},[46,18025,18026],{},"-e VAR=WERT",[46,18028,18029],{},"Umgebungsvariable setzen",[2997,18031,18033],{"id":18032},"volumes","Volumes",[904,18035,18037],{"className":906,"code":18036,"language":908,"meta":909,"style":909},"docker volume create myvolume # Volume erstellen\n\ndocker volume ls # Alle Volumes\n\ndocker volume inspect myvolume # Details\n\ndocker volume rm myvolume # Löschen\n\n# Mit Volume starten\n\ndocker run -v myvolume:\u002Fdata ubuntu\n\n# Bind Mount (lokales Verzeichnis)\n\ndocker run -v \u002Fhome\u002Fuser\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml nginx\n\n",[911,18038,18039,18055,18059,18070,18074,18087,18091,18103,18107,18112,18116,18130,18134,18139,18143],{"__ignoreMap":909},[452,18040,18041,18043,18046,18049,18052],{"class":915,"line":916},[452,18042,17490],{"class":919},[452,18044,18045],{"class":923}," volume",[452,18047,18048],{"class":923}," create",[452,18050,18051],{"class":923}," myvolume",[452,18053,18054],{"class":1200}," # Volume erstellen\n",[452,18056,18057],{"class":915,"line":1190},[452,18058,1194],{"emptyLinePlaceholder":1193},[452,18060,18061,18063,18065,18067],{"class":915,"line":1197},[452,18062,17490],{"class":919},[452,18064,18045],{"class":923},[452,18066,17618],{"class":923},[452,18068,18069],{"class":1200}," # Alle Volumes\n",[452,18071,18072],{"class":915,"line":1204},[452,18073,1194],{"emptyLinePlaceholder":1193},[452,18075,18076,18078,18080,18082,18084],{"class":915,"line":1209},[452,18077,17490],{"class":919},[452,18079,18045],{"class":923},[452,18081,17864],{"class":923},[452,18083,18051],{"class":923},[452,18085,18086],{"class":1200}," # Details\n",[452,18088,18089],{"class":915,"line":1223},[452,18090,1194],{"emptyLinePlaceholder":1193},[452,18092,18093,18095,18097,18099,18101],{"class":915,"line":1228},[452,18094,17490],{"class":919},[452,18096,18045],{"class":923},[452,18098,3560],{"class":923},[452,18100,18051],{"class":923},[452,18102,17832],{"class":1200},[452,18104,18105],{"class":915,"line":1234},[452,18106,1194],{"emptyLinePlaceholder":1193},[452,18108,18109],{"class":915,"line":1239},[452,18110,18111],{"class":1200},"# Mit Volume starten\n",[452,18113,18114],{"class":915,"line":1253},[452,18115,1194],{"emptyLinePlaceholder":1193},[452,18117,18118,18120,18122,18124,18127],{"class":915,"line":1258},[452,18119,17490],{"class":919},[452,18121,17675],{"class":923},[452,18123,6097],{"class":975},[452,18125,18126],{"class":923}," myvolume:\u002Fdata",[452,18128,18129],{"class":923}," ubuntu\n",[452,18131,18132],{"class":915,"line":1264},[452,18133,1194],{"emptyLinePlaceholder":1193},[452,18135,18136],{"class":915,"line":1269},[452,18137,18138],{"class":1200},"# Bind Mount (lokales Verzeichnis)\n",[452,18140,18141],{"class":915,"line":1558},[452,18142,1194],{"emptyLinePlaceholder":1193},[452,18144,18145,18147,18149,18151,18154],{"class":915,"line":1563},[452,18146,17490],{"class":919},[452,18148,17675],{"class":923},[452,18150,6097],{"class":975},[452,18152,18153],{"class":923}," \u002Fhome\u002Fuser\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml",[452,18155,17692],{"class":923},[2997,18157,18159],{"id":18158},"netzwerke","Netzwerke",[904,18161,18163],{"className":906,"code":18162,"language":908,"meta":909,"style":909},"docker network create mynetwork # Netzwerk erstellen\n\ndocker network rm mynetwork # Netzwerk löschen\n\n# Container im gleichen Netzwerk können sich über Namen erreichen:\n\ndocker run -d --network mynetwork --name db mongo\n\ndocker run -d --network mynetwork --name app node-app\n\n# → app kann db über \"db\" als Hostname ansprechen\n\n",[911,18164,18165,18180,18184,18197,18201,18206,18210,18231,18235,18255,18259],{"__ignoreMap":909},[452,18166,18167,18169,18172,18174,18177],{"class":915,"line":916},[452,18168,17490],{"class":919},[452,18170,18171],{"class":923}," network",[452,18173,18048],{"class":923},[452,18175,18176],{"class":923}," mynetwork",[452,18178,18179],{"class":1200}," # Netzwerk erstellen\n",[452,18181,18182],{"class":915,"line":1190},[452,18183,1194],{"emptyLinePlaceholder":1193},[452,18185,18186,18188,18190,18192,18194],{"class":915,"line":1197},[452,18187,17490],{"class":919},[452,18189,18171],{"class":923},[452,18191,3560],{"class":923},[452,18193,18176],{"class":923},[452,18195,18196],{"class":1200}," # Netzwerk löschen\n",[452,18198,18199],{"class":915,"line":1204},[452,18200,1194],{"emptyLinePlaceholder":1193},[452,18202,18203],{"class":915,"line":1209},[452,18204,18205],{"class":1200},"# Container im gleichen Netzwerk können sich über Namen erreichen:\n",[452,18207,18208],{"class":915,"line":1223},[452,18209,1194],{"emptyLinePlaceholder":1193},[452,18211,18212,18214,18216,18218,18221,18223,18225,18228],{"class":915,"line":1228},[452,18213,17490],{"class":919},[452,18215,17675],{"class":923},[452,18217,17678],{"class":975},[452,18219,18220],{"class":975}," --network",[452,18222,18176],{"class":923},[452,18224,17686],{"class":975},[452,18226,18227],{"class":923}," db",[452,18229,18230],{"class":923}," mongo\n",[452,18232,18233],{"class":915,"line":1234},[452,18234,1194],{"emptyLinePlaceholder":1193},[452,18236,18237,18239,18241,18243,18245,18247,18249,18252],{"class":915,"line":1239},[452,18238,17490],{"class":919},[452,18240,17675],{"class":923},[452,18242,17678],{"class":975},[452,18244,18220],{"class":975},[452,18246,18176],{"class":923},[452,18248,17686],{"class":975},[452,18250,18251],{"class":923}," app",[452,18253,18254],{"class":923}," node-app\n",[452,18256,18257],{"class":915,"line":1253},[452,18258,1194],{"emptyLinePlaceholder":1193},[452,18260,18261],{"class":915,"line":1258},[452,18262,18263],{"class":1200},"# → app kann db über \"db\" als Hostname ansprechen\n",[2652,18265,18267],{"id":18266},"dockerfile-image-erstellen","Dockerfile – Image erstellen",[904,18269,18271],{"className":10966,"code":18270,"language":10968,"meta":909,"style":909},"# Basis-Image\n\nFROM python:3.10-slim\n\n# Arbeitsverzeichnis setzen\n\nWORKDIR \u002Fapp\n\n# Abhängigkeiten zuerst kopieren (Layer-Cache!)\n\nCOPY requirements.txt .\n\nRUN pip install -r requirements.txt\n\n# Quellcode kopieren\n\nCOPY . .\n\n# Benutzer erstellen (Sicherheit!)\n\nRUN addgroup app && adduser -S -G app app\n\nUSER app\n\n# Port dokumentieren\n\nEXPOSE 5000\n\n# Umgebungsvariable\n\nENV APP_ENV=production\n\n# Startbefehl (Exec-Format bevorzugt!)\n\nCMD [\"python\", \"app.py\"]\n\n",[911,18272,18273,18278,18282,18290,18294,18299,18303,18311,18315,18320,18324,18332,18336,18344,18348,18353,18357,18364,18368,18373,18377,18384,18388,18396,18400,18405,18409,18417,18421,18426,18430,18438,18442,18447,18451],{"__ignoreMap":909},[452,18274,18275],{"class":915,"line":916},[452,18276,18277],{"class":1200},"# Basis-Image\n",[452,18279,18280],{"class":915,"line":1190},[452,18281,1194],{"emptyLinePlaceholder":1193},[452,18283,18284,18287],{"class":915,"line":1197},[452,18285,18286],{"class":1473},"FROM",[452,18288,18289],{"class":1298}," python:3.10-slim\n",[452,18291,18292],{"class":915,"line":1204},[452,18293,1194],{"emptyLinePlaceholder":1193},[452,18295,18296],{"class":915,"line":1209},[452,18297,18298],{"class":1200},"# Arbeitsverzeichnis setzen\n",[452,18300,18301],{"class":915,"line":1223},[452,18302,1194],{"emptyLinePlaceholder":1193},[452,18304,18305,18308],{"class":915,"line":1228},[452,18306,18307],{"class":1473},"WORKDIR",[452,18309,18310],{"class":1298}," \u002Fapp\n",[452,18312,18313],{"class":915,"line":1234},[452,18314,1194],{"emptyLinePlaceholder":1193},[452,18316,18317],{"class":915,"line":1239},[452,18318,18319],{"class":1200},"# Abhängigkeiten zuerst kopieren (Layer-Cache!)\n",[452,18321,18322],{"class":915,"line":1253},[452,18323,1194],{"emptyLinePlaceholder":1193},[452,18325,18326,18329],{"class":915,"line":1258},[452,18327,18328],{"class":1473},"COPY",[452,18330,18331],{"class":1298}," requirements.txt .\n",[452,18333,18334],{"class":915,"line":1264},[452,18335,1194],{"emptyLinePlaceholder":1193},[452,18337,18338,18341],{"class":915,"line":1269},[452,18339,18340],{"class":1473},"RUN",[452,18342,18343],{"class":1298}," pip install -r requirements.txt\n",[452,18345,18346],{"class":915,"line":1558},[452,18347,1194],{"emptyLinePlaceholder":1193},[452,18349,18350],{"class":915,"line":1563},[452,18351,18352],{"class":1200},"# Quellcode kopieren\n",[452,18354,18355],{"class":915,"line":1586},[452,18356,1194],{"emptyLinePlaceholder":1193},[452,18358,18359,18361],{"class":915,"line":1591},[452,18360,18328],{"class":1473},[452,18362,18363],{"class":1298}," . .\n",[452,18365,18366],{"class":915,"line":1597},[452,18367,1194],{"emptyLinePlaceholder":1193},[452,18369,18370],{"class":915,"line":1602},[452,18371,18372],{"class":1200},"# Benutzer erstellen (Sicherheit!)\n",[452,18374,18375],{"class":915,"line":1622},[452,18376,1194],{"emptyLinePlaceholder":1193},[452,18378,18379,18381],{"class":915,"line":1627},[452,18380,18340],{"class":1473},[452,18382,18383],{"class":1298}," addgroup app && adduser -S -G app app\n",[452,18385,18386],{"class":915,"line":1633},[452,18387,1194],{"emptyLinePlaceholder":1193},[452,18389,18390,18393],{"class":915,"line":1638},[452,18391,18392],{"class":1473},"USER",[452,18394,18395],{"class":1298}," app\n",[452,18397,18398],{"class":915,"line":1922},[452,18399,1194],{"emptyLinePlaceholder":1193},[452,18401,18402],{"class":915,"line":1927},[452,18403,18404],{"class":1200},"# Port dokumentieren\n",[452,18406,18407],{"class":915,"line":1942},[452,18408,1194],{"emptyLinePlaceholder":1193},[452,18410,18411,18414],{"class":915,"line":1947},[452,18412,18413],{"class":1473},"EXPOSE",[452,18415,18416],{"class":1298}," 5000\n",[452,18418,18419],{"class":915,"line":1953},[452,18420,1194],{"emptyLinePlaceholder":1193},[452,18422,18423],{"class":915,"line":1958},[452,18424,18425],{"class":1200},"# Umgebungsvariable\n",[452,18427,18428],{"class":915,"line":1964},[452,18429,1194],{"emptyLinePlaceholder":1193},[452,18431,18432,18435],{"class":915,"line":1969},[452,18433,18434],{"class":1473},"ENV",[452,18436,18437],{"class":1298}," APP_ENV=production\n",[452,18439,18440],{"class":915,"line":1986},[452,18441,1194],{"emptyLinePlaceholder":1193},[452,18443,18444],{"class":915,"line":1991},[452,18445,18446],{"class":1200},"# Startbefehl (Exec-Format bevorzugt!)\n",[452,18448,18449],{"class":915,"line":1997},[452,18450,1194],{"emptyLinePlaceholder":1193},[452,18452,18453,18456,18459,18462,18465,18468],{"class":915,"line":2002},[452,18454,18455],{"class":1473},"CMD",[452,18457,18458],{"class":1298}," [",[452,18460,18461],{"class":923},"\"python\"",[452,18463,18464],{"class":1298},", ",[452,18466,18467],{"class":923},"\"app.py\"",[452,18469,18470],{"class":1298},"]\n",[2997,18472,18474],{"id":18473},"wichtige-dockerfile-anweisungen","Wichtige Dockerfile-Anweisungen:",[15,18476,18477,18490],{},[18,18478,18479],{},[21,18480,18481,18486],{},[24,18482,18483],{},[27,18484,18485],{},"Anweisung",[24,18487,18488],{},[27,18489,39],{},[41,18491,18492,18499,18506,18513,18520,18527,18535,18542,18548,18556,18562],{},[21,18493,18494,18496],{},[46,18495,18286],{},[46,18497,18498],{},"Basis-Image",[21,18500,18501,18503],{},[46,18502,18307],{},[46,18504,18505],{},"Arbeitsverzeichnis im Container",[21,18507,18508,18510],{},[46,18509,18328],{},[46,18511,18512],{},"Dateien in Container kopieren",[21,18514,18515,18517],{},[46,18516,18340],{},[46,18518,18519],{},"Befehl beim Image-Build ausführen",[21,18521,18522,18524],{},[46,18523,18455],{},[46,18525,18526],{},"Startbefehl (überschreibbar)",[21,18528,18529,18532],{},[46,18530,18531],{},"ENTRYPOINT",[46,18533,18534],{},"Startbefehl (schwer überschreibbar)",[21,18536,18537,18539],{},[46,18538,18413],{},[46,18540,18541],{},"Port dokumentieren",[21,18543,18544,18546],{},[46,18545,18434],{},[46,18547,12853],{},[21,18549,18550,18553],{},[46,18551,18552],{},"ARG",[46,18554,18555],{},"Build-Argument",[21,18557,18558,18560],{},[46,18559,18392],{},[46,18561,301],{},[21,18563,18564,18567],{},[46,18565,18566],{},".dockerignore",[46,18568,18569],{},"Dateien vom Build ausschließen",[2997,18571,18573],{"id":18572},"multi-stage-build-image-optimierung","Multi-Stage Build (Image-Optimierung):",[904,18575,18577],{"className":10966,"code":18576,"language":10968,"meta":909,"style":909},"# Stage 1: Build\n\nFROM node:14 AS build\n\nWORKDIR \u002Fapp\n\nCOPY . .\n\nRUN npm install && npm run build\n\n# Stage 2: Production (nur fertiges Ergebnis!)\n\nFROM nginx:alpine\n\nCOPY --from=build \u002Fapp\u002Fbuild \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\n\n",[911,18578,18579,18584,18588,18601,18605,18611,18615,18621,18625,18632,18636,18641,18645,18652,18656],{"__ignoreMap":909},[452,18580,18581],{"class":915,"line":916},[452,18582,18583],{"class":1200},"# Stage 1: Build\n",[452,18585,18586],{"class":915,"line":1190},[452,18587,1194],{"emptyLinePlaceholder":1193},[452,18589,18590,18592,18595,18598],{"class":915,"line":1197},[452,18591,18286],{"class":1473},[452,18593,18594],{"class":1298}," node:14 ",[452,18596,18597],{"class":1473},"AS",[452,18599,18600],{"class":1298}," build\n",[452,18602,18603],{"class":915,"line":1204},[452,18604,1194],{"emptyLinePlaceholder":1193},[452,18606,18607,18609],{"class":915,"line":1209},[452,18608,18307],{"class":1473},[452,18610,18310],{"class":1298},[452,18612,18613],{"class":915,"line":1223},[452,18614,1194],{"emptyLinePlaceholder":1193},[452,18616,18617,18619],{"class":915,"line":1228},[452,18618,18328],{"class":1473},[452,18620,18363],{"class":1298},[452,18622,18623],{"class":915,"line":1234},[452,18624,1194],{"emptyLinePlaceholder":1193},[452,18626,18627,18629],{"class":915,"line":1239},[452,18628,18340],{"class":1473},[452,18630,18631],{"class":1298}," npm install && npm run build\n",[452,18633,18634],{"class":915,"line":1253},[452,18635,1194],{"emptyLinePlaceholder":1193},[452,18637,18638],{"class":915,"line":1258},[452,18639,18640],{"class":1200},"# Stage 2: Production (nur fertiges Ergebnis!)\n",[452,18642,18643],{"class":915,"line":1264},[452,18644,1194],{"emptyLinePlaceholder":1193},[452,18646,18647,18649],{"class":915,"line":1269},[452,18648,18286],{"class":1473},[452,18650,18651],{"class":1298}," nginx:alpine\n",[452,18653,18654],{"class":915,"line":1558},[452,18655,1194],{"emptyLinePlaceholder":1193},[452,18657,18658,18660],{"class":915,"line":1563},[452,18659,18328],{"class":1473},[452,18661,18662],{"class":1298}," --from=build \u002Fapp\u002Fbuild \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\n",[2997,18664,18666],{"id":18665},"layer-cache-optimierung","Layer-Cache-Optimierung:",[992,18668,18669,18679],{},[995,18670,18671,18674,18675,18678],{},[27,18672,18673],{},"Stabile Dateien"," (package.json) ",[27,18676,18677],{},"vor"," veränderlichen Dateien (Quellcode) kopieren",[995,18680,18681],{},"So werden Abhängigkeiten nur bei Änderung neu installiert",[2652,18683,18685],{"id":18684},"container-lebenszyklus","Container-Lebenszyklus:",[898,18687,18688,18689,18691,18692,18694],{},"Erstellt → docker run → Running → docker stop → Stopped",[1325,18690],{},"\n→ docker kill → Gelöscht",[1325,18693],{},"\nRunning → docker pause → Paused → docker unpause → Running",[257,18696,18698],{"id":18697},"docker-compose","Docker Compose",[2652,18700,902],{"id":18701},"grundprinzip-4",[904,18703,18705],{"className":906,"code":18704,"language":908,"meta":909,"style":909},"docker compose (früher: docker-compose) ermöglicht die Definition und Verwaltung mehrerer zusammengehöriger Container (Multi-Container-Anwendungen) über eine einzige YAML-Konfigurationsdatei.\n\ndocker compose [OPTIONEN] BEFEHL\n\n",[911,18706,18707,18728,18732],{"__ignoreMap":909},[452,18708,18709,18711,18714,18717,18719,18722,18725],{"class":915,"line":916},[452,18710,17490],{"class":919},[452,18712,18713],{"class":923}," compose",[452,18715,18716],{"class":1298}," (früher: ",[452,18718,18697],{"class":923},[452,18720,18721],{"class":1298},") ermöglicht die Definition und Verwaltung mehrerer zusammengehöriger Container (",[452,18723,18724],{"class":919},"Multi-Container-Anwendungen",[452,18726,18727],{"class":1298},") über eine einzige YAML-Konfigurationsdatei.\n",[452,18729,18730],{"class":915,"line":1190},[452,18731,1194],{"emptyLinePlaceholder":1193},[452,18733,18734,18736,18738],{"class":915,"line":1197},[452,18735,17490],{"class":919},[452,18737,18713],{"class":923},[452,18739,18740],{"class":1298}," [OPTIONEN] BEFEHL\n",[10,18742,18744],{"id":18743},"konfigurationsdatei-docker-composeyml-oder-docker-composeyaml","Konfigurationsdatei: docker-compose.yml (oder docker-compose.yaml)",[2652,18746,18748],{"id":18747},"alle-docker-compose-befehle","Alle docker compose Befehle",[15,18750,18751,18763],{},[18,18752,18753],{},[21,18754,18755,18759],{},[24,18756,18757],{},[27,18758,271],{},[24,18760,18761],{},[27,18762,417],{},[41,18764,18765,18772,18780,18788,18796,18804,18812,18820,18828,18836,18844,18851,18859,18866,18874,18882,18890,18897,18905,18912,18920,18928],{},[21,18766,18767,18770],{},[46,18768,18769],{},"up",[46,18771,17663],{},[21,18773,18774,18777],{},[46,18775,18776],{},"down",[46,18778,18779],{},"Container stoppen und entfernen",[21,18781,18782,18785],{},[46,18783,18784],{},"start",[46,18786,18787],{},"Gestoppte Container starten",[21,18789,18790,18793],{},[46,18791,18792],{},"stop",[46,18794,18795],{},"Container graceful stoppen",[21,18797,18798,18801],{},[46,18799,18800],{},"restart",[46,18802,18803],{},"Container neu starten",[21,18805,18806,18809],{},[46,18807,18808],{},"pause",[46,18810,18811],{},"Container einfrieren (SIGSTOP)",[21,18813,18814,18817],{},[46,18815,18816],{},"unpause",[46,18818,18819],{},"Container fortsetzen",[21,18821,18822,18825],{},[46,18823,18824],{},"build",[46,18826,18827],{},"Images neu bauen",[21,18829,18830,18833],{},[46,18831,18832],{},"pull",[46,18834,18835],{},"Images herunterladen",[21,18837,18838,18841],{},[46,18839,18840],{},"push",[46,18842,18843],{},"Images in Registry hochladen",[21,18845,18846,18848],{},[46,18847,6311],{},[46,18849,18850],{},"Status der Container anzeigen",[21,18852,18853,18856],{},[46,18854,18855],{},"logs",[46,18857,18858],{},"Container-Logs anzeigen",[21,18860,18861,18863],{},[46,18862,17046],{},[46,18864,18865],{},"Befehl in laufendem Container ausführen",[21,18867,18868,18871],{},[46,18869,18870],{},"run",[46,18872,18873],{},"Einmaligen Befehl in neuem Container ausführen",[21,18875,18876,18879],{},[46,18877,18878],{},"config",[46,18880,18881],{},"Konfiguration anzeigen\u002Fvalidieren",[21,18883,18884,18887],{},[46,18885,18886],{},"images",[46,18888,18889],{},"Images der Services auflisten",[21,18891,18892,18894],{},[46,18893,12545],{},[46,18895,18896],{},"Gestoppte Container entfernen",[21,18898,18899,18902],{},[46,18900,18901],{},"kill",[46,18903,18904],{},"Container mit Signal beenden",[21,18906,18907,18909],{},[46,18908,9227],{},[46,18910,18911],{},"Prozesse in Containern anzeigen",[21,18913,18914,18917],{},[46,18915,18916],{},"events",[46,18918,18919],{},"Echtzeit-Ereignisse ausgeben",[21,18921,18922,18925],{},[46,18923,18924],{},"port",[46,18926,18927],{},"Port-Mapping eines Services anzeigen",[21,18929,18930,18933],{},[46,18931,18932],{},"version",[46,18934,18935],{},"Versionsinformationen",[2652,18937,18939],{"id":18938},"optionen-für-docker-compose-up","Optionen für docker compose up",[15,18941,18942,18954],{},[18,18943,18944],{},[21,18945,18946,18950],{},[24,18947,18948],{},[27,18949,1019],{},[24,18951,18952],{},[27,18953,417],{},[41,18955,18956,18964,18972,18980,18988,18996,19004,19012,19020],{},[21,18957,18958,18961],{},[46,18959,18960],{},"-d \u002F --detach",[46,18962,18963],{},"Im Hintergrund starten (detached mode)",[21,18965,18966,18969],{},[46,18967,18968],{},"--build",[46,18970,18971],{},"Images vor dem Start neu bauen",[21,18973,18974,18977],{},[46,18975,18976],{},"--no-build",[46,18978,18979],{},"Images nicht neu bauen",[21,18981,18982,18985],{},[46,18983,18984],{},"--no-recreate",[46,18986,18987],{},"Existierende Container nicht neu erstellen",[21,18989,18990,18993],{},[46,18991,18992],{},"--force-recreate",[46,18994,18995],{},"Container immer neu erstellen",[21,18997,18998,19001],{},[46,18999,19000],{},"--remove-orphans",[46,19002,19003],{},"Container für nicht mehr definierte Services entfernen",[21,19005,19006,19009],{},[46,19007,19008],{},"--scale SERVICE=N",[46,19010,19011],{},"Service auf N Instanzen skalieren",[21,19013,19014,19017],{},[46,19015,19016],{},"--timeout N",[46,19018,19019],{},"Timeout in Sekunden (Standard: 10)",[21,19021,19022,19025],{},[46,19023,19024],{},"--wait",[46,19026,19027],{},"Warten bis alle Container healthy sind",[2652,19029,19031],{"id":19030},"optionen-für-docker-compose-down","Optionen für docker compose down",[15,19033,19034,19046],{},[18,19035,19036],{},[21,19037,19038,19042],{},[24,19039,19040],{},[27,19041,1019],{},[24,19043,19044],{},[27,19045,417],{},[41,19047,19048,19056,19064,19072,19079],{},[21,19049,19050,19053],{},[46,19051,19052],{},"-v \u002F --volumes",[46,19054,19055],{},"Volumes ebenfalls löschen",[21,19057,19058,19061],{},[46,19059,19060],{},"--rmi all",[46,19062,19063],{},"Alle Images entfernen",[21,19065,19066,19069],{},[46,19067,19068],{},"--rmi local",[46,19070,19071],{},"Nur lokal gebaute Images entfernen",[21,19073,19074,19076],{},[46,19075,19000],{},[46,19077,19078],{},"Orphan-Container entfernen",[21,19080,19081,19084],{},[46,19082,19083],{},"-t N \u002F --timeout N",[46,19085,19086],{},"Timeout setzen",[2652,19088,19090],{"id":19089},"optionen-für-docker-compose-logs","Optionen für docker compose logs",[15,19092,19093,19105],{},[18,19094,19095],{},[21,19096,19097,19101],{},[24,19098,19099],{},[27,19100,1019],{},[24,19102,19103],{},[27,19104,417],{},[41,19106,19107,19115,19123,19131],{},[21,19108,19109,19112],{},[46,19110,19111],{},"-f \u002F --follow",[46,19113,19114],{},"Log live verfolgen",[21,19116,19117,19120],{},[46,19118,19119],{},"--tail=N",[46,19121,19122],{},"Nur letzte N Zeilen anzeigen",[21,19124,19125,19128],{},[46,19126,19127],{},"-t \u002F --timestamps",[46,19129,19130],{},"Zeitstempel anzeigen",[21,19132,19133,19136],{},[46,19134,19135],{},"--no-log-prefix",[46,19137,19138],{},"Service-Name nicht voranstellen",[2652,19140,19142],{"id":19141},"optionen-für-docker-compose-exec","Optionen für docker compose exec",[15,19144,19145,19157],{},[18,19146,19147],{},[21,19148,19149,19153],{},[24,19150,19151],{},[27,19152,1019],{},[24,19154,19155],{},[27,19156,417],{},[41,19158,19159,19166,19174,19180],{},[21,19160,19161,19163],{},[46,19162,17978],{},[46,19164,19165],{},"Interaktives Terminal",[21,19167,19168,19171],{},[46,19169,19170],{},"-u USER",[46,19172,19173],{},"Als Benutzer ausführen",[21,19175,19176,19178],{},[46,19177,18026],{},[46,19179,18029],{},[21,19181,19182,19185],{},[46,19183,19184],{},"-w DIR",[46,19186,19187],{},"Arbeitsverzeichnis setzen",[2652,19189,19191],{"id":19190},"allgemeine-optionen-vor-dem-befehl","Allgemeine Optionen (vor dem Befehl)",[15,19193,19194,19206],{},[18,19195,19196],{},[21,19197,19198,19202],{},[24,19199,19200],{},[27,19201,1019],{},[24,19203,19204],{},[27,19205,417],{},[41,19207,19208,19215,19223,19231,19239],{},[21,19209,19210,19212],{},[46,19211,3964],{},[46,19213,19214],{},"Andere Compose-Datei verwenden",[21,19216,19217,19220],{},[46,19218,19219],{},"-p NAME",[46,19221,19222],{},"Projektname setzen (Standard: Verzeichnisname)",[21,19224,19225,19228],{},[46,19226,19227],{},"--profile PROFIL",[46,19229,19230],{},"Service-Profile aktivieren",[21,19232,19233,19236],{},[46,19234,19235],{},"--env-file DATEI",[46,19237,19238],{},"Andere .env-Datei verwenden",[21,19240,19241,19244],{},[46,19242,19243],{},"--progress STRING",[46,19245,19246],{},"Ausgabestil: auto, tty, plain, quiet",[2652,19248,19250],{"id":19249},"aufbau-einer-docker-composeyml","Aufbau einer docker-compose.yml",[904,19252,19256],{"className":19253,"code":19254,"language":19255,"meta":909,"style":909},"language-yaml shiki shiki-themes github-light github-dark","version: '3.9'\n\nservices:\n\nwebserver:\n\nimage: 'nginx:alpine'\n\ncontainer_name: mein-nginx\n\nhostname: webserver\n\nrestart: always\n\nports:\n\n- '80:80'\n\n- '443:443'\n\nvolumes:\n\n- '.\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml'\n\n- 'nginx_conf:\u002Fetc\u002Fnginx'\n\nenvironment:\n\n- NGINX_HOST=example.com\n\nenv_file:\n\n- .env\n\nnetworks:\n\n- frontend\n\ndepends_on:\n\n- app\n\nhealthcheck:\n\ntest:\n\n- CMD\n\n- curl\n\n- '-f'\n\n- 'http:\u002F\u002Flocalhost'\n\ninterval: 30s\n\ntimeout: 10s\n\nretries: 3\n\nstart_period: 40s\n\nlabels:\n\n- traefik.enable=true\n\nlogging:\n\ndriver: json-file\n\noptions:\n\nmax-size: 10m\n\nmax-file: '3'\n\napp:\n\nbuild:\n\ncontext: .\u002Fapp\n\ndockerfile: Dockerfile.prod\n\nargs:\n\n- BUILD_VERSION=1.0\n\nimage: 'meine-app:latest'\n\nrestart: unless-stopped\n\nports:\n\n- '3000:3000'\n\nvolumes:\n\n- 'app_data:\u002Fapp\u002Fdata'\n\nenvironment:\n\nDATABASE_URL: 'postgres:\u002F\u002Fuser:pass@db:5432\u002Fmydb'\n\nNODE_ENV: production\n\nnetworks:\n\n- frontend\n\n- backend\n\ndepends_on:\n\ndb:\n\ncondition: service_healthy\n\ndb:\n\nimage: 'postgres:15'\n\nrestart: always\n\nvolumes:\n\n- 'db_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata'\n\nenvironment:\n\nPOSTGRES_DB: mydb\n\nPOSTGRES_USER: user\n\nPOSTGRES_PASSWORD: pass\n\nnetworks:\n\n- backend\n\nhealthcheck:\n\ntest:\n\n- CMD-SHELL\n\n- pg_isready -U user -d mydb\n\ninterval: 10s\n\ntimeout: 5s\n\nretries: 5\n\nvolumes:\n\nnginx_conf: null\n\napp_data: null\n\ndb_data:\n\ndriver: local\n\ndriver_opts:\n\ntype: none\n\no: bind\n\ndevice: \u002Fmnt\u002Fdata\u002Fpostgres\n\nnetworks:\n\nfrontend:\n\ndriver: bridge\n\nbackend:\n\ndriver: bridge\n\ninternal: true\n\nextern_netz:\n\nexternal: true\n\nname: mein-netz\n\n","yaml",[911,19257,19258,19268,19272,19280,19284,19291,19295,19305,19309,19319,19323,19333,19337,19346,19350,19357,19361,19369,19373,19380,19384,19390,19394,19401,19405,19412,19416,19423,19427,19434,19438,19445,19449,19456,19460,19467,19471,19478,19482,19489,19493,19500,19504,19511,19515,19521,19525,19532,19536,19543,19547,19554,19558,19565,19569,19579,19583,19593,19597,19606,19610,19620,19624,19631,19635,19642,19646,19653,19657,19667,19671,19678,19682,19692,19696,19706,19710,19717,19721,19727,19731,19741,19745,19754,19758,19765,19769,19776,19780,19789,19793,19802,19806,19812,19816,19823,19827,19833,19837,19844,19848,19854,19858,19868,19872,19882,19886,19892,19896,19902,19906,19913,19917,19923,19927,19934,19938,19948,19952,19958,19962,19971,19976,19985,19990,19997,20002,20010,20015,20022,20027,20038,20043,20054,20059,20070,20075,20082,20087,20094,20099,20106,20111,20118,20123,20131,20136,20144,20149,20158,20163,20173,20178,20187,20192,20199,20204,20215,20220,20230,20235,20243,20248,20258,20263,20271,20276,20287,20292,20303,20308,20319,20324,20331,20336,20344,20349,20359,20364,20372,20377,20386,20391,20402,20407,20415,20420,20430,20435],{"__ignoreMap":909},[452,19259,19260,19263,19265],{"class":915,"line":916},[452,19261,18932],{"class":19262},"s9eBZ",[452,19264,16252],{"class":1298},[452,19266,19267],{"class":923},"'3.9'\n",[452,19269,19270],{"class":915,"line":1190},[452,19271,1194],{"emptyLinePlaceholder":1193},[452,19273,19274,19277],{"class":915,"line":1197},[452,19275,19276],{"class":19262},"services",[452,19278,19279],{"class":1298},":\n",[452,19281,19282],{"class":915,"line":1204},[452,19283,1194],{"emptyLinePlaceholder":1193},[452,19285,19286,19289],{"class":915,"line":1209},[452,19287,19288],{"class":19262},"webserver",[452,19290,19279],{"class":1298},[452,19292,19293],{"class":915,"line":1223},[452,19294,1194],{"emptyLinePlaceholder":1193},[452,19296,19297,19300,19302],{"class":915,"line":1228},[452,19298,19299],{"class":19262},"image",[452,19301,16252],{"class":1298},[452,19303,19304],{"class":923},"'nginx:alpine'\n",[452,19306,19307],{"class":915,"line":1234},[452,19308,1194],{"emptyLinePlaceholder":1193},[452,19310,19311,19314,19316],{"class":915,"line":1239},[452,19312,19313],{"class":19262},"container_name",[452,19315,16252],{"class":1298},[452,19317,19318],{"class":923},"mein-nginx\n",[452,19320,19321],{"class":915,"line":1253},[452,19322,1194],{"emptyLinePlaceholder":1193},[452,19324,19325,19328,19330],{"class":915,"line":1258},[452,19326,19327],{"class":19262},"hostname",[452,19329,16252],{"class":1298},[452,19331,19332],{"class":923},"webserver\n",[452,19334,19335],{"class":915,"line":1264},[452,19336,1194],{"emptyLinePlaceholder":1193},[452,19338,19339,19341,19343],{"class":915,"line":1269},[452,19340,18800],{"class":19262},[452,19342,16252],{"class":1298},[452,19344,19345],{"class":923},"always\n",[452,19347,19348],{"class":915,"line":1558},[452,19349,1194],{"emptyLinePlaceholder":1193},[452,19351,19352,19355],{"class":915,"line":1563},[452,19353,19354],{"class":19262},"ports",[452,19356,19279],{"class":1298},[452,19358,19359],{"class":915,"line":1586},[452,19360,1194],{"emptyLinePlaceholder":1193},[452,19362,19363,19366],{"class":915,"line":1591},[452,19364,19365],{"class":1298},"- ",[452,19367,19368],{"class":923},"'80:80'\n",[452,19370,19371],{"class":915,"line":1597},[452,19372,1194],{"emptyLinePlaceholder":1193},[452,19374,19375,19377],{"class":915,"line":1602},[452,19376,19365],{"class":1298},[452,19378,19379],{"class":923},"'443:443'\n",[452,19381,19382],{"class":915,"line":1622},[452,19383,1194],{"emptyLinePlaceholder":1193},[452,19385,19386,19388],{"class":915,"line":1627},[452,19387,18032],{"class":19262},[452,19389,19279],{"class":1298},[452,19391,19392],{"class":915,"line":1633},[452,19393,1194],{"emptyLinePlaceholder":1193},[452,19395,19396,19398],{"class":915,"line":1638},[452,19397,19365],{"class":1298},[452,19399,19400],{"class":923},"'.\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml'\n",[452,19402,19403],{"class":915,"line":1922},[452,19404,1194],{"emptyLinePlaceholder":1193},[452,19406,19407,19409],{"class":915,"line":1927},[452,19408,19365],{"class":1298},[452,19410,19411],{"class":923},"'nginx_conf:\u002Fetc\u002Fnginx'\n",[452,19413,19414],{"class":915,"line":1942},[452,19415,1194],{"emptyLinePlaceholder":1193},[452,19417,19418,19421],{"class":915,"line":1947},[452,19419,19420],{"class":19262},"environment",[452,19422,19279],{"class":1298},[452,19424,19425],{"class":915,"line":1953},[452,19426,1194],{"emptyLinePlaceholder":1193},[452,19428,19429,19431],{"class":915,"line":1958},[452,19430,19365],{"class":1298},[452,19432,19433],{"class":923},"NGINX_HOST=example.com\n",[452,19435,19436],{"class":915,"line":1964},[452,19437,1194],{"emptyLinePlaceholder":1193},[452,19439,19440,19443],{"class":915,"line":1969},[452,19441,19442],{"class":19262},"env_file",[452,19444,19279],{"class":1298},[452,19446,19447],{"class":915,"line":1986},[452,19448,1194],{"emptyLinePlaceholder":1193},[452,19450,19451,19453],{"class":915,"line":1991},[452,19452,19365],{"class":1298},[452,19454,19455],{"class":923},".env\n",[452,19457,19458],{"class":915,"line":1997},[452,19459,1194],{"emptyLinePlaceholder":1193},[452,19461,19462,19465],{"class":915,"line":2002},[452,19463,19464],{"class":19262},"networks",[452,19466,19279],{"class":1298},[452,19468,19469],{"class":915,"line":2008},[452,19470,1194],{"emptyLinePlaceholder":1193},[452,19472,19473,19475],{"class":915,"line":2013},[452,19474,19365],{"class":1298},[452,19476,19477],{"class":923},"frontend\n",[452,19479,19480],{"class":915,"line":2019},[452,19481,1194],{"emptyLinePlaceholder":1193},[452,19483,19484,19487],{"class":915,"line":2024},[452,19485,19486],{"class":19262},"depends_on",[452,19488,19279],{"class":1298},[452,19490,19491],{"class":915,"line":2030},[452,19492,1194],{"emptyLinePlaceholder":1193},[452,19494,19495,19497],{"class":915,"line":2035},[452,19496,19365],{"class":1298},[452,19498,19499],{"class":923},"app\n",[452,19501,19502],{"class":915,"line":2056},[452,19503,1194],{"emptyLinePlaceholder":1193},[452,19505,19506,19509],{"class":915,"line":2061},[452,19507,19508],{"class":19262},"healthcheck",[452,19510,19279],{"class":1298},[452,19512,19513],{"class":915,"line":2067},[452,19514,1194],{"emptyLinePlaceholder":1193},[452,19516,19517,19519],{"class":915,"line":2072},[452,19518,16004],{"class":19262},[452,19520,19279],{"class":1298},[452,19522,19523],{"class":915,"line":2078},[452,19524,1194],{"emptyLinePlaceholder":1193},[452,19526,19527,19529],{"class":915,"line":2083},[452,19528,19365],{"class":1298},[452,19530,19531],{"class":923},"CMD\n",[452,19533,19534],{"class":915,"line":2089},[452,19535,1194],{"emptyLinePlaceholder":1193},[452,19537,19538,19540],{"class":915,"line":2094},[452,19539,19365],{"class":1298},[452,19541,19542],{"class":923},"curl\n",[452,19544,19545],{"class":915,"line":2100},[452,19546,1194],{"emptyLinePlaceholder":1193},[452,19548,19549,19551],{"class":915,"line":2105},[452,19550,19365],{"class":1298},[452,19552,19553],{"class":923},"'-f'\n",[452,19555,19556],{"class":915,"line":2126},[452,19557,1194],{"emptyLinePlaceholder":1193},[452,19559,19560,19562],{"class":915,"line":2131},[452,19561,19365],{"class":1298},[452,19563,19564],{"class":923},"'http:\u002F\u002Flocalhost'\n",[452,19566,19567],{"class":915,"line":2155},[452,19568,1194],{"emptyLinePlaceholder":1193},[452,19570,19571,19574,19576],{"class":915,"line":2160},[452,19572,19573],{"class":19262},"interval",[452,19575,16252],{"class":1298},[452,19577,19578],{"class":923},"30s\n",[452,19580,19581],{"class":915,"line":2173},[452,19582,1194],{"emptyLinePlaceholder":1193},[452,19584,19585,19588,19590],{"class":915,"line":2178},[452,19586,19587],{"class":19262},"timeout",[452,19589,16252],{"class":1298},[452,19591,19592],{"class":923},"10s\n",[452,19594,19595],{"class":915,"line":2184},[452,19596,1194],{"emptyLinePlaceholder":1193},[452,19598,19599,19602,19604],{"class":915,"line":2189},[452,19600,19601],{"class":19262},"retries",[452,19603,16252],{"class":1298},[452,19605,10134],{"class":975},[452,19607,19608],{"class":915,"line":2195},[452,19609,1194],{"emptyLinePlaceholder":1193},[452,19611,19612,19615,19617],{"class":915,"line":2200},[452,19613,19614],{"class":19262},"start_period",[452,19616,16252],{"class":1298},[452,19618,19619],{"class":923},"40s\n",[452,19621,19622],{"class":915,"line":2208},[452,19623,1194],{"emptyLinePlaceholder":1193},[452,19625,19626,19629],{"class":915,"line":2213},[452,19627,19628],{"class":19262},"labels",[452,19630,19279],{"class":1298},[452,19632,19633],{"class":915,"line":2219},[452,19634,1194],{"emptyLinePlaceholder":1193},[452,19636,19637,19639],{"class":915,"line":2224},[452,19638,19365],{"class":1298},[452,19640,19641],{"class":923},"traefik.enable=true\n",[452,19643,19644],{"class":915,"line":2230},[452,19645,1194],{"emptyLinePlaceholder":1193},[452,19647,19648,19651],{"class":915,"line":2235},[452,19649,19650],{"class":19262},"logging",[452,19652,19279],{"class":1298},[452,19654,19655],{"class":915,"line":2245},[452,19656,1194],{"emptyLinePlaceholder":1193},[452,19658,19659,19662,19664],{"class":915,"line":2250},[452,19660,19661],{"class":19262},"driver",[452,19663,16252],{"class":1298},[452,19665,19666],{"class":923},"json-file\n",[452,19668,19669],{"class":915,"line":2270},[452,19670,1194],{"emptyLinePlaceholder":1193},[452,19672,19673,19676],{"class":915,"line":2275},[452,19674,19675],{"class":19262},"options",[452,19677,19279],{"class":1298},[452,19679,19680],{"class":915,"line":2298},[452,19681,1194],{"emptyLinePlaceholder":1193},[452,19683,19684,19687,19689],{"class":915,"line":2303},[452,19685,19686],{"class":19262},"max-size",[452,19688,16252],{"class":1298},[452,19690,19691],{"class":923},"10m\n",[452,19693,19694],{"class":915,"line":2316},[452,19695,1194],{"emptyLinePlaceholder":1193},[452,19697,19698,19701,19703],{"class":915,"line":2321},[452,19699,19700],{"class":19262},"max-file",[452,19702,16252],{"class":1298},[452,19704,19705],{"class":923},"'3'\n",[452,19707,19708],{"class":915,"line":2334},[452,19709,1194],{"emptyLinePlaceholder":1193},[452,19711,19712,19715],{"class":915,"line":2339},[452,19713,19714],{"class":19262},"app",[452,19716,19279],{"class":1298},[452,19718,19719],{"class":915,"line":2345},[452,19720,1194],{"emptyLinePlaceholder":1193},[452,19722,19723,19725],{"class":915,"line":2350},[452,19724,18824],{"class":19262},[452,19726,19279],{"class":1298},[452,19728,19729],{"class":915,"line":4885},[452,19730,1194],{"emptyLinePlaceholder":1193},[452,19732,19733,19736,19738],{"class":915,"line":4890},[452,19734,19735],{"class":19262},"context",[452,19737,16252],{"class":1298},[452,19739,19740],{"class":923},".\u002Fapp\n",[452,19742,19743],{"class":915,"line":4896},[452,19744,1194],{"emptyLinePlaceholder":1193},[452,19746,19747,19749,19751],{"class":915,"line":4901},[452,19748,10968],{"class":19262},[452,19750,16252],{"class":1298},[452,19752,19753],{"class":923},"Dockerfile.prod\n",[452,19755,19756],{"class":915,"line":4911},[452,19757,1194],{"emptyLinePlaceholder":1193},[452,19759,19760,19763],{"class":915,"line":4916},[452,19761,19762],{"class":19262},"args",[452,19764,19279],{"class":1298},[452,19766,19767],{"class":915,"line":4922},[452,19768,1194],{"emptyLinePlaceholder":1193},[452,19770,19771,19773],{"class":915,"line":4927},[452,19772,19365],{"class":1298},[452,19774,19775],{"class":923},"BUILD_VERSION=1.0\n",[452,19777,19778],{"class":915,"line":4937},[452,19779,1194],{"emptyLinePlaceholder":1193},[452,19781,19782,19784,19786],{"class":915,"line":4942},[452,19783,19299],{"class":19262},[452,19785,16252],{"class":1298},[452,19787,19788],{"class":923},"'meine-app:latest'\n",[452,19790,19791],{"class":915,"line":4948},[452,19792,1194],{"emptyLinePlaceholder":1193},[452,19794,19795,19797,19799],{"class":915,"line":4953},[452,19796,18800],{"class":19262},[452,19798,16252],{"class":1298},[452,19800,19801],{"class":923},"unless-stopped\n",[452,19803,19804],{"class":915,"line":4970},[452,19805,1194],{"emptyLinePlaceholder":1193},[452,19807,19808,19810],{"class":915,"line":4975},[452,19809,19354],{"class":19262},[452,19811,19279],{"class":1298},[452,19813,19814],{"class":915,"line":4985},[452,19815,1194],{"emptyLinePlaceholder":1193},[452,19817,19818,19820],{"class":915,"line":4990},[452,19819,19365],{"class":1298},[452,19821,19822],{"class":923},"'3000:3000'\n",[452,19824,19825],{"class":915,"line":4996},[452,19826,1194],{"emptyLinePlaceholder":1193},[452,19828,19829,19831],{"class":915,"line":5001},[452,19830,18032],{"class":19262},[452,19832,19279],{"class":1298},[452,19834,19835],{"class":915,"line":5014},[452,19836,1194],{"emptyLinePlaceholder":1193},[452,19838,19839,19841],{"class":915,"line":5019},[452,19840,19365],{"class":1298},[452,19842,19843],{"class":923},"'app_data:\u002Fapp\u002Fdata'\n",[452,19845,19846],{"class":915,"line":5025},[452,19847,1194],{"emptyLinePlaceholder":1193},[452,19849,19850,19852],{"class":915,"line":5030},[452,19851,19420],{"class":19262},[452,19853,19279],{"class":1298},[452,19855,19856],{"class":915,"line":5042},[452,19857,1194],{"emptyLinePlaceholder":1193},[452,19859,19860,19863,19865],{"class":915,"line":5047},[452,19861,19862],{"class":19262},"DATABASE_URL",[452,19864,16252],{"class":1298},[452,19866,19867],{"class":923},"'postgres:\u002F\u002Fuser:pass@db:5432\u002Fmydb'\n",[452,19869,19870],{"class":915,"line":5053},[452,19871,1194],{"emptyLinePlaceholder":1193},[452,19873,19874,19877,19879],{"class":915,"line":5058},[452,19875,19876],{"class":19262},"NODE_ENV",[452,19878,16252],{"class":1298},[452,19880,19881],{"class":923},"production\n",[452,19883,19884],{"class":915,"line":5068},[452,19885,1194],{"emptyLinePlaceholder":1193},[452,19887,19888,19890],{"class":915,"line":5073},[452,19889,19464],{"class":19262},[452,19891,19279],{"class":1298},[452,19893,19894],{"class":915,"line":5079},[452,19895,1194],{"emptyLinePlaceholder":1193},[452,19897,19898,19900],{"class":915,"line":5084},[452,19899,19365],{"class":1298},[452,19901,19477],{"class":923},[452,19903,19904],{"class":915,"line":5094},[452,19905,1194],{"emptyLinePlaceholder":1193},[452,19907,19908,19910],{"class":915,"line":5099},[452,19909,19365],{"class":1298},[452,19911,19912],{"class":923},"backend\n",[452,19914,19915],{"class":915,"line":5105},[452,19916,1194],{"emptyLinePlaceholder":1193},[452,19918,19919,19921],{"class":915,"line":5110},[452,19920,19486],{"class":19262},[452,19922,19279],{"class":1298},[452,19924,19925],{"class":915,"line":5128},[452,19926,1194],{"emptyLinePlaceholder":1193},[452,19928,19929,19932],{"class":915,"line":5133},[452,19930,19931],{"class":19262},"db",[452,19933,19279],{"class":1298},[452,19935,19936],{"class":915,"line":5139},[452,19937,1194],{"emptyLinePlaceholder":1193},[452,19939,19940,19943,19945],{"class":915,"line":5144},[452,19941,19942],{"class":19262},"condition",[452,19944,16252],{"class":1298},[452,19946,19947],{"class":923},"service_healthy\n",[452,19949,19950],{"class":915,"line":5155},[452,19951,1194],{"emptyLinePlaceholder":1193},[452,19953,19954,19956],{"class":915,"line":5160},[452,19955,19931],{"class":19262},[452,19957,19279],{"class":1298},[452,19959,19960],{"class":915,"line":5166},[452,19961,1194],{"emptyLinePlaceholder":1193},[452,19963,19964,19966,19968],{"class":915,"line":5171},[452,19965,19299],{"class":19262},[452,19967,16252],{"class":1298},[452,19969,19970],{"class":923},"'postgres:15'\n",[452,19972,19974],{"class":915,"line":19973},122,[452,19975,1194],{"emptyLinePlaceholder":1193},[452,19977,19979,19981,19983],{"class":915,"line":19978},123,[452,19980,18800],{"class":19262},[452,19982,16252],{"class":1298},[452,19984,19345],{"class":923},[452,19986,19988],{"class":915,"line":19987},124,[452,19989,1194],{"emptyLinePlaceholder":1193},[452,19991,19993,19995],{"class":915,"line":19992},125,[452,19994,18032],{"class":19262},[452,19996,19279],{"class":1298},[452,19998,20000],{"class":915,"line":19999},126,[452,20001,1194],{"emptyLinePlaceholder":1193},[452,20003,20005,20007],{"class":915,"line":20004},127,[452,20006,19365],{"class":1298},[452,20008,20009],{"class":923},"'db_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata'\n",[452,20011,20013],{"class":915,"line":20012},128,[452,20014,1194],{"emptyLinePlaceholder":1193},[452,20016,20018,20020],{"class":915,"line":20017},129,[452,20019,19420],{"class":19262},[452,20021,19279],{"class":1298},[452,20023,20025],{"class":915,"line":20024},130,[452,20026,1194],{"emptyLinePlaceholder":1193},[452,20028,20030,20033,20035],{"class":915,"line":20029},131,[452,20031,20032],{"class":19262},"POSTGRES_DB",[452,20034,16252],{"class":1298},[452,20036,20037],{"class":923},"mydb\n",[452,20039,20041],{"class":915,"line":20040},132,[452,20042,1194],{"emptyLinePlaceholder":1193},[452,20044,20046,20049,20051],{"class":915,"line":20045},133,[452,20047,20048],{"class":19262},"POSTGRES_USER",[452,20050,16252],{"class":1298},[452,20052,20053],{"class":923},"user\n",[452,20055,20057],{"class":915,"line":20056},134,[452,20058,1194],{"emptyLinePlaceholder":1193},[452,20060,20062,20065,20067],{"class":915,"line":20061},135,[452,20063,20064],{"class":19262},"POSTGRES_PASSWORD",[452,20066,16252],{"class":1298},[452,20068,20069],{"class":923},"pass\n",[452,20071,20073],{"class":915,"line":20072},136,[452,20074,1194],{"emptyLinePlaceholder":1193},[452,20076,20078,20080],{"class":915,"line":20077},137,[452,20079,19464],{"class":19262},[452,20081,19279],{"class":1298},[452,20083,20085],{"class":915,"line":20084},138,[452,20086,1194],{"emptyLinePlaceholder":1193},[452,20088,20090,20092],{"class":915,"line":20089},139,[452,20091,19365],{"class":1298},[452,20093,19912],{"class":923},[452,20095,20097],{"class":915,"line":20096},140,[452,20098,1194],{"emptyLinePlaceholder":1193},[452,20100,20102,20104],{"class":915,"line":20101},141,[452,20103,19508],{"class":19262},[452,20105,19279],{"class":1298},[452,20107,20109],{"class":915,"line":20108},142,[452,20110,1194],{"emptyLinePlaceholder":1193},[452,20112,20114,20116],{"class":915,"line":20113},143,[452,20115,16004],{"class":19262},[452,20117,19279],{"class":1298},[452,20119,20121],{"class":915,"line":20120},144,[452,20122,1194],{"emptyLinePlaceholder":1193},[452,20124,20126,20128],{"class":915,"line":20125},145,[452,20127,19365],{"class":1298},[452,20129,20130],{"class":923},"CMD-SHELL\n",[452,20132,20134],{"class":915,"line":20133},146,[452,20135,1194],{"emptyLinePlaceholder":1193},[452,20137,20139,20141],{"class":915,"line":20138},147,[452,20140,19365],{"class":1298},[452,20142,20143],{"class":923},"pg_isready -U user -d mydb\n",[452,20145,20147],{"class":915,"line":20146},148,[452,20148,1194],{"emptyLinePlaceholder":1193},[452,20150,20152,20154,20156],{"class":915,"line":20151},149,[452,20153,19573],{"class":19262},[452,20155,16252],{"class":1298},[452,20157,19592],{"class":923},[452,20159,20161],{"class":915,"line":20160},150,[452,20162,1194],{"emptyLinePlaceholder":1193},[452,20164,20166,20168,20170],{"class":915,"line":20165},151,[452,20167,19587],{"class":19262},[452,20169,16252],{"class":1298},[452,20171,20172],{"class":923},"5s\n",[452,20174,20176],{"class":915,"line":20175},152,[452,20177,1194],{"emptyLinePlaceholder":1193},[452,20179,20181,20183,20185],{"class":915,"line":20180},153,[452,20182,19601],{"class":19262},[452,20184,16252],{"class":1298},[452,20186,12963],{"class":975},[452,20188,20190],{"class":915,"line":20189},154,[452,20191,1194],{"emptyLinePlaceholder":1193},[452,20193,20195,20197],{"class":915,"line":20194},155,[452,20196,18032],{"class":19262},[452,20198,19279],{"class":1298},[452,20200,20202],{"class":915,"line":20201},156,[452,20203,1194],{"emptyLinePlaceholder":1193},[452,20205,20207,20210,20212],{"class":915,"line":20206},157,[452,20208,20209],{"class":19262},"nginx_conf",[452,20211,16252],{"class":1298},[452,20213,20214],{"class":975},"null\n",[452,20216,20218],{"class":915,"line":20217},158,[452,20219,1194],{"emptyLinePlaceholder":1193},[452,20221,20223,20226,20228],{"class":915,"line":20222},159,[452,20224,20225],{"class":19262},"app_data",[452,20227,16252],{"class":1298},[452,20229,20214],{"class":975},[452,20231,20233],{"class":915,"line":20232},160,[452,20234,1194],{"emptyLinePlaceholder":1193},[452,20236,20238,20241],{"class":915,"line":20237},161,[452,20239,20240],{"class":19262},"db_data",[452,20242,19279],{"class":1298},[452,20244,20246],{"class":915,"line":20245},162,[452,20247,1194],{"emptyLinePlaceholder":1193},[452,20249,20251,20253,20255],{"class":915,"line":20250},163,[452,20252,19661],{"class":19262},[452,20254,16252],{"class":1298},[452,20256,20257],{"class":923},"local\n",[452,20259,20261],{"class":915,"line":20260},164,[452,20262,1194],{"emptyLinePlaceholder":1193},[452,20264,20266,20269],{"class":915,"line":20265},165,[452,20267,20268],{"class":19262},"driver_opts",[452,20270,19279],{"class":1298},[452,20272,20274],{"class":915,"line":20273},166,[452,20275,1194],{"emptyLinePlaceholder":1193},[452,20277,20279,20282,20284],{"class":915,"line":20278},167,[452,20280,20281],{"class":19262},"type",[452,20283,16252],{"class":1298},[452,20285,20286],{"class":923},"none\n",[452,20288,20290],{"class":915,"line":20289},168,[452,20291,1194],{"emptyLinePlaceholder":1193},[452,20293,20295,20298,20300],{"class":915,"line":20294},169,[452,20296,20297],{"class":19262},"o",[452,20299,16252],{"class":1298},[452,20301,20302],{"class":923},"bind\n",[452,20304,20306],{"class":915,"line":20305},170,[452,20307,1194],{"emptyLinePlaceholder":1193},[452,20309,20311,20314,20316],{"class":915,"line":20310},171,[452,20312,20313],{"class":19262},"device",[452,20315,16252],{"class":1298},[452,20317,20318],{"class":923},"\u002Fmnt\u002Fdata\u002Fpostgres\n",[452,20320,20322],{"class":915,"line":20321},172,[452,20323,1194],{"emptyLinePlaceholder":1193},[452,20325,20327,20329],{"class":915,"line":20326},173,[452,20328,19464],{"class":19262},[452,20330,19279],{"class":1298},[452,20332,20334],{"class":915,"line":20333},174,[452,20335,1194],{"emptyLinePlaceholder":1193},[452,20337,20339,20342],{"class":915,"line":20338},175,[452,20340,20341],{"class":19262},"frontend",[452,20343,19279],{"class":1298},[452,20345,20347],{"class":915,"line":20346},176,[452,20348,1194],{"emptyLinePlaceholder":1193},[452,20350,20352,20354,20356],{"class":915,"line":20351},177,[452,20353,19661],{"class":19262},[452,20355,16252],{"class":1298},[452,20357,20358],{"class":923},"bridge\n",[452,20360,20362],{"class":915,"line":20361},178,[452,20363,1194],{"emptyLinePlaceholder":1193},[452,20365,20367,20370],{"class":915,"line":20366},179,[452,20368,20369],{"class":19262},"backend",[452,20371,19279],{"class":1298},[452,20373,20375],{"class":915,"line":20374},180,[452,20376,1194],{"emptyLinePlaceholder":1193},[452,20378,20380,20382,20384],{"class":915,"line":20379},181,[452,20381,19661],{"class":19262},[452,20383,16252],{"class":1298},[452,20385,20358],{"class":923},[452,20387,20389],{"class":915,"line":20388},182,[452,20390,1194],{"emptyLinePlaceholder":1193},[452,20392,20394,20397,20399],{"class":915,"line":20393},183,[452,20395,20396],{"class":19262},"internal",[452,20398,16252],{"class":1298},[452,20400,20401],{"class":975},"true\n",[452,20403,20405],{"class":915,"line":20404},184,[452,20406,1194],{"emptyLinePlaceholder":1193},[452,20408,20410,20413],{"class":915,"line":20409},185,[452,20411,20412],{"class":19262},"extern_netz",[452,20414,19279],{"class":1298},[452,20416,20418],{"class":915,"line":20417},186,[452,20419,1194],{"emptyLinePlaceholder":1193},[452,20421,20423,20426,20428],{"class":915,"line":20422},187,[452,20424,20425],{"class":19262},"external",[452,20427,16252],{"class":1298},[452,20429,20401],{"class":975},[452,20431,20433],{"class":915,"line":20432},188,[452,20434,1194],{"emptyLinePlaceholder":1193},[452,20436,20438,20440,20442],{"class":915,"line":20437},189,[452,20439,2134],{"class":19262},[452,20441,16252],{"class":1298},[452,20443,20444],{"class":923},"mein-netz\n",[2652,20446,20448],{"id":20447},"restart-policies","restart-Policies",[15,20450,20451,20463],{},[18,20452,20453],{},[21,20454,20455,20459],{},[24,20456,20457],{},[27,20458,9353],{},[24,20460,20461],{},[27,20462,417],{},[41,20464,20465,20473,20481,20489],{},[21,20466,20467,20470],{},[46,20468,20469],{},"no",[46,20471,20472],{},"Nie neu starten (Standard)",[21,20474,20475,20478],{},[46,20476,20477],{},"always",[46,20479,20480],{},"Immer neu starten",[21,20482,20483,20486],{},[46,20484,20485],{},"on-failure",[46,20487,20488],{},"Nur bei Fehler (Exit-Code ≠ 0) neu starten",[21,20490,20491,20494],{},[46,20492,20493],{},"unless-stopped",[46,20495,20496],{},"Immer neu starten, außer wenn manuell gestoppt",[2652,20498,20500],{"id":20499},"env-datei",".env-Datei",[10,20502,20504],{"id":20503},"env-im-selben-verzeichnis-wie-docker-composeyml",".env (im selben Verzeichnis wie docker-compose.yml)",[904,20506,20508],{"className":906,"code":20507,"language":908,"meta":909,"style":909},"POSTGRES_PASSWORD=geheim123\nAPP_PORT=3000\nIMAGE_TAG=1.5.2\n\n",[911,20509,20510,20519,20529],{"__ignoreMap":909},[452,20511,20512,20514,20516],{"class":915,"line":916},[452,20513,20064],{"class":1298},[452,20515,1862],{"class":1473},[452,20517,20518],{"class":923},"geheim123\n",[452,20520,20521,20524,20526],{"class":915,"line":1190},[452,20522,20523],{"class":1298},"APP_PORT",[452,20525,1862],{"class":1473},[452,20527,20528],{"class":923},"3000\n",[452,20530,20531,20534,20536],{"class":915,"line":1197},[452,20532,20533],{"class":1298},"IMAGE_TAG",[452,20535,1862],{"class":1473},[452,20537,20538],{"class":923},"1.5.2\n",[898,20540,20541],{},"Im docker-compose.yml verwendbar als:",[904,20543,20545],{"className":19253,"code":20544,"language":19255,"meta":909,"style":909},"services:\n\napp:\n\nimage: 'meineapp:${IMAGE_TAG}'\n\nports:\n\n- '${APP_PORT}:3000'\n\n",[911,20546,20547,20553,20557,20563,20567,20576,20580,20586,20590],{"__ignoreMap":909},[452,20548,20549,20551],{"class":915,"line":916},[452,20550,19276],{"class":19262},[452,20552,19279],{"class":1298},[452,20554,20555],{"class":915,"line":1190},[452,20556,1194],{"emptyLinePlaceholder":1193},[452,20558,20559,20561],{"class":915,"line":1197},[452,20560,19714],{"class":19262},[452,20562,19279],{"class":1298},[452,20564,20565],{"class":915,"line":1204},[452,20566,1194],{"emptyLinePlaceholder":1193},[452,20568,20569,20571,20573],{"class":915,"line":1209},[452,20570,19299],{"class":19262},[452,20572,16252],{"class":1298},[452,20574,20575],{"class":923},"'meineapp:${IMAGE_TAG}'\n",[452,20577,20578],{"class":915,"line":1223},[452,20579,1194],{"emptyLinePlaceholder":1193},[452,20581,20582,20584],{"class":915,"line":1228},[452,20583,19354],{"class":19262},[452,20585,19279],{"class":1298},[452,20587,20588],{"class":915,"line":1234},[452,20589,1194],{"emptyLinePlaceholder":1193},[452,20591,20592,20594],{"class":915,"line":1239},[452,20593,19365],{"class":1298},[452,20595,20596],{"class":923},"'${APP_PORT}:3000'\n",[2652,20598,2735],{"id":20599},"praktische-beispiele-1",[10,20601,20603],{"id":20602},"alle-services-starten-hintergrund","Alle Services starten (Hintergrund)",[904,20605,20607],{"className":906,"code":20606,"language":908,"meta":909,"style":909},"docker compose up -d\n\n# Services starten und Live-Logs beobachten\n\ndocker compose up\n\n# Nur bestimmten Service starten\n\ndocker compose up -d db\n\n# Images neu bauen und starten\n\ndocker compose up -d --build\n\n# Status anzeigen\n\ndocker compose ps\n\n# Logs aller Services\n\ndocker compose logs -f\n\n# Logs nur für \"app\" Service, letzte 50 Zeilen\n\ndocker compose logs --tail=50 -f app\n\n# In Container einloggen\n\ndocker compose exec app bash\n\ndocker compose exec db psql -U user -d mydb\n\n# Einmaligen Befehl ausführen\n\ndocker compose run --rm app npm test\n\n# Alles stoppen und entfernen (inkl. Volumes)\n\ndocker compose down -v\n\n# Bestimmte Services neu starten\n\ndocker compose restart app\n\n# Scale (mehrere Instanzen)\n\ndocker compose up -d --scale app=3\n\n# Mit anderem Dateinamen\n\ndocker compose -f docker-compose.prod.yml up -d\n\n# Projektname setzen\n\ndocker compose -p meinprojekt up -d\n\n# Konfiguration validieren\n\ndocker compose config\n\n# Alle Images bauen ohne zu starten\n\ndocker compose build\n\n# Aktuellen Stand der Container\n\ndocker compose top\n\n",[911,20608,20609,20621,20625,20630,20634,20643,20647,20652,20656,20669,20673,20678,20682,20695,20699,20704,20708,20717,20721,20726,20730,20741,20745,20750,20754,20769,20773,20778,20782,20795,20799,20822,20826,20831,20835,20853,20857,20862,20866,20878,20882,20887,20891,20901,20905,20910,20914,20932,20936,20941,20945,20960,20964,20969,20973,20988,20992,20997,21001,21010,21014,21019,21023,21031,21035,21040,21044],{"__ignoreMap":909},[452,20610,20611,20613,20615,20618],{"class":915,"line":916},[452,20612,17490],{"class":919},[452,20614,18713],{"class":923},[452,20616,20617],{"class":923}," up",[452,20619,20620],{"class":975}," -d\n",[452,20622,20623],{"class":915,"line":1190},[452,20624,1194],{"emptyLinePlaceholder":1193},[452,20626,20627],{"class":915,"line":1197},[452,20628,20629],{"class":1200},"# Services starten und Live-Logs beobachten\n",[452,20631,20632],{"class":915,"line":1204},[452,20633,1194],{"emptyLinePlaceholder":1193},[452,20635,20636,20638,20640],{"class":915,"line":1209},[452,20637,17490],{"class":919},[452,20639,18713],{"class":923},[452,20641,20642],{"class":923}," up\n",[452,20644,20645],{"class":915,"line":1223},[452,20646,1194],{"emptyLinePlaceholder":1193},[452,20648,20649],{"class":915,"line":1228},[452,20650,20651],{"class":1200},"# Nur bestimmten Service starten\n",[452,20653,20654],{"class":915,"line":1234},[452,20655,1194],{"emptyLinePlaceholder":1193},[452,20657,20658,20660,20662,20664,20666],{"class":915,"line":1239},[452,20659,17490],{"class":919},[452,20661,18713],{"class":923},[452,20663,20617],{"class":923},[452,20665,17678],{"class":975},[452,20667,20668],{"class":923}," db\n",[452,20670,20671],{"class":915,"line":1253},[452,20672,1194],{"emptyLinePlaceholder":1193},[452,20674,20675],{"class":915,"line":1258},[452,20676,20677],{"class":1200},"# Images neu bauen und starten\n",[452,20679,20680],{"class":915,"line":1264},[452,20681,1194],{"emptyLinePlaceholder":1193},[452,20683,20684,20686,20688,20690,20692],{"class":915,"line":1269},[452,20685,17490],{"class":919},[452,20687,18713],{"class":923},[452,20689,20617],{"class":923},[452,20691,17678],{"class":975},[452,20693,20694],{"class":975}," --build\n",[452,20696,20697],{"class":915,"line":1558},[452,20698,1194],{"emptyLinePlaceholder":1193},[452,20700,20701],{"class":915,"line":1563},[452,20702,20703],{"class":1200},"# Status anzeigen\n",[452,20705,20706],{"class":915,"line":1586},[452,20707,1194],{"emptyLinePlaceholder":1193},[452,20709,20710,20712,20714],{"class":915,"line":1591},[452,20711,17490],{"class":919},[452,20713,18713],{"class":923},[452,20715,20716],{"class":923}," ps\n",[452,20718,20719],{"class":915,"line":1597},[452,20720,1194],{"emptyLinePlaceholder":1193},[452,20722,20723],{"class":915,"line":1602},[452,20724,20725],{"class":1200},"# Logs aller Services\n",[452,20727,20728],{"class":915,"line":1622},[452,20729,1194],{"emptyLinePlaceholder":1193},[452,20731,20732,20734,20736,20738],{"class":915,"line":1627},[452,20733,17490],{"class":919},[452,20735,18713],{"class":923},[452,20737,17909],{"class":923},[452,20739,20740],{"class":975}," -f\n",[452,20742,20743],{"class":915,"line":1633},[452,20744,1194],{"emptyLinePlaceholder":1193},[452,20746,20747],{"class":915,"line":1638},[452,20748,20749],{"class":1200},"# Logs nur für \"app\" Service, letzte 50 Zeilen\n",[452,20751,20752],{"class":915,"line":1922},[452,20753,1194],{"emptyLinePlaceholder":1193},[452,20755,20756,20758,20760,20762,20765,20767],{"class":915,"line":1927},[452,20757,17490],{"class":919},[452,20759,18713],{"class":923},[452,20761,17909],{"class":923},[452,20763,20764],{"class":975}," --tail=50",[452,20766,5006],{"class":975},[452,20768,18395],{"class":923},[452,20770,20771],{"class":915,"line":1942},[452,20772,1194],{"emptyLinePlaceholder":1193},[452,20774,20775],{"class":915,"line":1947},[452,20776,20777],{"class":1200},"# In Container einloggen\n",[452,20779,20780],{"class":915,"line":1953},[452,20781,1194],{"emptyLinePlaceholder":1193},[452,20783,20784,20786,20788,20790,20792],{"class":915,"line":1958},[452,20785,17490],{"class":919},[452,20787,18713],{"class":923},[452,20789,17889],{"class":923},[452,20791,18251],{"class":923},[452,20793,20794],{"class":923}," bash\n",[452,20796,20797],{"class":915,"line":1964},[452,20798,1194],{"emptyLinePlaceholder":1193},[452,20800,20801,20803,20805,20807,20809,20812,20815,20817,20819],{"class":915,"line":1969},[452,20802,17490],{"class":919},[452,20804,18713],{"class":923},[452,20806,17889],{"class":923},[452,20808,18227],{"class":923},[452,20810,20811],{"class":923}," psql",[452,20813,20814],{"class":975}," -U",[452,20816,10463],{"class":923},[452,20818,17678],{"class":975},[452,20820,20821],{"class":923}," mydb\n",[452,20823,20824],{"class":915,"line":1986},[452,20825,1194],{"emptyLinePlaceholder":1193},[452,20827,20828],{"class":915,"line":1991},[452,20829,20830],{"class":1200},"# Einmaligen Befehl ausführen\n",[452,20832,20833],{"class":915,"line":1997},[452,20834,1194],{"emptyLinePlaceholder":1193},[452,20836,20837,20839,20841,20843,20845,20847,20850],{"class":915,"line":2002},[452,20838,17490],{"class":919},[452,20840,18713],{"class":923},[452,20842,17675],{"class":923},[452,20844,17727],{"class":975},[452,20846,18251],{"class":923},[452,20848,20849],{"class":923}," npm",[452,20851,20852],{"class":923}," test\n",[452,20854,20855],{"class":915,"line":2008},[452,20856,1194],{"emptyLinePlaceholder":1193},[452,20858,20859],{"class":915,"line":2013},[452,20860,20861],{"class":1200},"# Alles stoppen und entfernen (inkl. Volumes)\n",[452,20863,20864],{"class":915,"line":2019},[452,20865,1194],{"emptyLinePlaceholder":1193},[452,20867,20868,20870,20872,20875],{"class":915,"line":2024},[452,20869,17490],{"class":919},[452,20871,18713],{"class":923},[452,20873,20874],{"class":923}," down",[452,20876,20877],{"class":975}," -v\n",[452,20879,20880],{"class":915,"line":2030},[452,20881,1194],{"emptyLinePlaceholder":1193},[452,20883,20884],{"class":915,"line":2035},[452,20885,20886],{"class":1200},"# Bestimmte Services neu starten\n",[452,20888,20889],{"class":915,"line":2056},[452,20890,1194],{"emptyLinePlaceholder":1193},[452,20892,20893,20895,20897,20899],{"class":915,"line":2061},[452,20894,17490],{"class":919},[452,20896,18713],{"class":923},[452,20898,2831],{"class":923},[452,20900,18395],{"class":923},[452,20902,20903],{"class":915,"line":2067},[452,20904,1194],{"emptyLinePlaceholder":1193},[452,20906,20907],{"class":915,"line":2072},[452,20908,20909],{"class":1200},"# Scale (mehrere Instanzen)\n",[452,20911,20912],{"class":915,"line":2078},[452,20913,1194],{"emptyLinePlaceholder":1193},[452,20915,20916,20918,20920,20922,20924,20927,20930],{"class":915,"line":2083},[452,20917,17490],{"class":919},[452,20919,18713],{"class":923},[452,20921,20617],{"class":923},[452,20923,17678],{"class":975},[452,20925,20926],{"class":975}," --scale",[452,20928,20929],{"class":923}," app=",[452,20931,10134],{"class":975},[452,20933,20934],{"class":915,"line":2089},[452,20935,1194],{"emptyLinePlaceholder":1193},[452,20937,20938],{"class":915,"line":2094},[452,20939,20940],{"class":1200},"# Mit anderem Dateinamen\n",[452,20942,20943],{"class":915,"line":2100},[452,20944,1194],{"emptyLinePlaceholder":1193},[452,20946,20947,20949,20951,20953,20956,20958],{"class":915,"line":2105},[452,20948,17490],{"class":919},[452,20950,18713],{"class":923},[452,20952,5006],{"class":975},[452,20954,20955],{"class":923}," docker-compose.prod.yml",[452,20957,20617],{"class":923},[452,20959,20620],{"class":975},[452,20961,20962],{"class":915,"line":2126},[452,20963,1194],{"emptyLinePlaceholder":1193},[452,20965,20966],{"class":915,"line":2131},[452,20967,20968],{"class":1200},"# Projektname setzen\n",[452,20970,20971],{"class":915,"line":2155},[452,20972,1194],{"emptyLinePlaceholder":1193},[452,20974,20975,20977,20979,20981,20984,20986],{"class":915,"line":2160},[452,20976,17490],{"class":919},[452,20978,18713],{"class":923},[452,20980,9471],{"class":975},[452,20982,20983],{"class":923}," meinprojekt",[452,20985,20617],{"class":923},[452,20987,20620],{"class":975},[452,20989,20990],{"class":915,"line":2173},[452,20991,1194],{"emptyLinePlaceholder":1193},[452,20993,20994],{"class":915,"line":2178},[452,20995,20996],{"class":1200},"# Konfiguration validieren\n",[452,20998,20999],{"class":915,"line":2184},[452,21000,1194],{"emptyLinePlaceholder":1193},[452,21002,21003,21005,21007],{"class":915,"line":2189},[452,21004,17490],{"class":919},[452,21006,18713],{"class":923},[452,21008,21009],{"class":923}," config\n",[452,21011,21012],{"class":915,"line":2195},[452,21013,1194],{"emptyLinePlaceholder":1193},[452,21015,21016],{"class":915,"line":2200},[452,21017,21018],{"class":1200},"# Alle Images bauen ohne zu starten\n",[452,21020,21021],{"class":915,"line":2208},[452,21022,1194],{"emptyLinePlaceholder":1193},[452,21024,21025,21027,21029],{"class":915,"line":2213},[452,21026,17490],{"class":919},[452,21028,18713],{"class":923},[452,21030,18600],{"class":923},[452,21032,21033],{"class":915,"line":2219},[452,21034,1194],{"emptyLinePlaceholder":1193},[452,21036,21037],{"class":915,"line":2224},[452,21038,21039],{"class":1200},"# Aktuellen Stand der Container\n",[452,21041,21042],{"class":915,"line":2230},[452,21043,1194],{"emptyLinePlaceholder":1193},[452,21045,21046,21048,21050],{"class":915,"line":2235},[452,21047,17490],{"class":919},[452,21049,18713],{"class":923},[452,21051,21052],{"class":923}," top\n",[10,21054,21056],{"id":21055},"aufgaben-und-lösungen-aus-dem-unterricht","Aufgaben und Lösungen aus dem Unterricht",[257,21058,21060],{"id":21059},"dockercomposezusatzaufgabenpdf","DockerComposeZusatzaufgaben.pdf",[898,21062,21063],{},"Quelle: DockerComposeZusatzaufgaben.pdf - 9 Seite(n)",[2652,21065,21067],{"id":21066},"seite-1","Seite 1",[898,21069,21070,21071,21073],{},"Thema: Linux",[1325,21072],{},"\nTechnikerschule Erlangen",[898,21075,21076],{},"📝 Docker-Compose Übungsblatt",[898,21078,21079,21080,21082],{},"✅ Aufgabe 1: Webserver mit Docker Compose",[1325,21081],{},"\nZiel: Erstelle mit Docker Compose einen Webserver, der über den Browser erreichbar ist.",[898,21084,21085],{},"📋 Aufgabenstellung:",[9593,21087,21088,21091,21094],{},[995,21089,21090],{},"Erstelle ein neues Projektverzeichnis mit einer index.html-Datei.",[995,21092,21093],{},"Setze mit Docker Compose einen Nginx-Container auf.",[995,21095,21096,21097,21102],{},"Der Webserver soll unter ",[13060,21098,21099],{"href":21099,"rel":21100},"http:\u002F\u002Flocalhost:8080",[21101],"nofollow"," erreichbar sein.",[898,21104,21105,21106,21108],{},"💡 Hinweise:",[1325,21107],{},"\n• Verwende das Nginx-Image (nginx:latest).",[898,21110,21111],{},"• Binde das Verzeichnis mit index.html als Volume ein.",[898,21113,21114],{},"• Port 80 im Container soll auf Port 8080 des Hosts weitergeleitet werden.",[898,21116,21117,21118,21120,21121,21123,21124,21126,21127,21129,21130,21132],{},"✅ Lösung:",[1325,21119],{},"\nDateistruktur:",[1325,21122],{},"\nwebserver\u002F",[1325,21125],{},"\n├── docker-compose.yml",[1325,21128],{},"\n└── html\u002F",[1325,21131],{},"\n└── index.html",[898,21134,21135,21136,21138],{},"index.html:",[1325,21137],{},"\n\u003Ch1>Hello from Docker Compose!\u003C\u002Fh1>",[898,21140,21141],{},"docker-compose.yml:",[904,21143,21145],{"className":19253,"code":21144,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\nweb:\nimage: nginx:latest\nports:\n- \"8080:80\"\nvolumes:\n- .\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml:ro\n\n",[911,21146,21147,21156,21162,21169,21178,21184,21191,21197],{"__ignoreMap":909},[452,21148,21149,21151,21153],{"class":915,"line":916},[452,21150,18932],{"class":19262},[452,21152,16252],{"class":1298},[452,21154,21155],{"class":923},"'3.8'\n",[452,21157,21158,21160],{"class":915,"line":1190},[452,21159,19276],{"class":19262},[452,21161,19279],{"class":1298},[452,21163,21164,21167],{"class":915,"line":1197},[452,21165,21166],{"class":19262},"web",[452,21168,19279],{"class":1298},[452,21170,21171,21173,21175],{"class":915,"line":1204},[452,21172,19299],{"class":19262},[452,21174,16252],{"class":1298},[452,21176,21177],{"class":923},"nginx:latest\n",[452,21179,21180,21182],{"class":915,"line":1209},[452,21181,19354],{"class":19262},[452,21183,19279],{"class":1298},[452,21185,21186,21188],{"class":915,"line":1223},[452,21187,19365],{"class":1298},[452,21189,21190],{"class":923},"\"8080:80\"\n",[452,21192,21193,21195],{"class":915,"line":1228},[452,21194,18032],{"class":19262},[452,21196,19279],{"class":1298},[452,21198,21199,21201],{"class":915,"line":1234},[452,21200,19365],{"class":1298},[452,21202,21203],{"class":923},".\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml:ro\n",[2652,21205,21207],{"id":21206},"seite-2","Seite 2",[898,21209,21070],{},[898,21211,21212,21213,21073],{},"✅",[1325,21214],{},[898,21216,21217,21218,21220],{},"Aufgabe 2: PHP + MySQL mit Docker Compose",[1325,21219],{},"\nZiel: Starte eine einfache PHP-Webanwendung, die sich mit einer MySQL-Datenbank verbindet.",[898,21222,21085],{},[9593,21224,21225,21228,21231],{},[995,21226,21227],{},"Erstelle eine PHP-Datei, die sich mit einer MySQL-Datenbank verbindet.",[995,21229,21230],{},"Setze zwei Container auf: einen für PHP (z. B. php:8.2-apache) und einen für MySQL.",[995,21232,21233],{},"Konfiguriere docker-compose.yml so, dass die Dienste korrekt verbunden sind.",[898,21235,21105,21236,21238],{},[1325,21237],{},"\n• In PHP ist der MySQL-Host db (der Name des Services).",[898,21240,21241],{},"• Nutze Umgebungsvariablen für MySQL (Benutzer, Passwort, Datenbank).",[898,21243,21117,21244,21120,21246,21248,21249,21126,21251,21253,21254,21256],{},[1325,21245],{},[1325,21247],{},"\nphp-mysql\u002F",[1325,21250],{},[1325,21252],{},"\n└── src\u002F",[1325,21255],{},"\n└── index.php",[898,21258,21259,21260,21262,21263,21265],{},"index.php:",[1325,21261],{},"\n\u003C?php",[1325,21264],{},"\n$mysqli = new mysqli(\"db\", \"user\", \"password\", \"testdb\");",[904,21267,21269],{"className":906,"code":21268,"language":908,"meta":909,"style":909},"if ($mysqli->connect_error) {\ndie(\"Connection failed: \" . $mysqli->connect_error);\n}\necho \"Connected to MySQL successfully!\";\n?>\n\ndocker-compose.yml:\n\n",[911,21270,21271,21283,21304,21308,21318,21325,21329],{"__ignoreMap":909},[452,21272,21273,21275,21278,21280],{"class":915,"line":916},[452,21274,2426],{"class":1473},[452,21276,21277],{"class":1298}," ($mysqli-",[452,21279,851],{"class":1473},[452,21281,21282],{"class":1298},"connect_error) {\n",[452,21284,21285,21288,21291,21293,21296,21298,21301],{"class":915,"line":1190},[452,21286,21287],{"class":919},"die(",[452,21289,21290],{"class":919},"\"Connection failed: \"",[452,21292,3479],{"class":923},[452,21294,21295],{"class":1298}," $mysqli-",[452,21297,851],{"class":1473},[452,21299,21300],{"class":923},"connect_error",[452,21302,21303],{"class":1298},");\n",[452,21305,21306],{"class":915,"line":1197},[452,21307,12525],{"class":1298},[452,21309,21310,21312,21315],{"class":915,"line":1204},[452,21311,1523],{"class":975},[452,21313,21314],{"class":923}," \"Connected to MySQL successfully!\"",[452,21316,21317],{"class":1298},";\n",[452,21319,21320,21322],{"class":915,"line":1209},[452,21321,440],{"class":919},[452,21323,21324],{"class":1298},">\n",[452,21326,21327],{"class":915,"line":1223},[452,21328,1194],{"emptyLinePlaceholder":1193},[452,21330,21331],{"class":915,"line":1228},[452,21332,21333],{"class":919},"docker-compose.yml:\n",[904,21335,21337],{"className":19253,"code":21336,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\nweb:\nimage: php:8.2-apache\nvolumes:\n- .\u002Fsrc:\u002Fvar\u002Fwww\u002Fhtml\nports:\n- \"8000:80\"\ndepends_on:\n- db\ndb:\nimage: mysql:8.0\nenvironment:\nMYSQL_DATABASE: testdb\nMYSQL_USER: user\nMYSQL_PASSWORD: password\nMYSQL_ROOT_PASSWORD: root\n\n",[911,21338,21339,21347,21353,21359,21368,21374,21381,21387,21394,21400,21407,21413,21422,21428,21438,21447,21457],{"__ignoreMap":909},[452,21340,21341,21343,21345],{"class":915,"line":916},[452,21342,18932],{"class":19262},[452,21344,16252],{"class":1298},[452,21346,21155],{"class":923},[452,21348,21349,21351],{"class":915,"line":1190},[452,21350,19276],{"class":19262},[452,21352,19279],{"class":1298},[452,21354,21355,21357],{"class":915,"line":1197},[452,21356,21166],{"class":19262},[452,21358,19279],{"class":1298},[452,21360,21361,21363,21365],{"class":915,"line":1204},[452,21362,19299],{"class":19262},[452,21364,16252],{"class":1298},[452,21366,21367],{"class":923},"php:8.2-apache\n",[452,21369,21370,21372],{"class":915,"line":1209},[452,21371,18032],{"class":19262},[452,21373,19279],{"class":1298},[452,21375,21376,21378],{"class":915,"line":1223},[452,21377,19365],{"class":1298},[452,21379,21380],{"class":923},".\u002Fsrc:\u002Fvar\u002Fwww\u002Fhtml\n",[452,21382,21383,21385],{"class":915,"line":1228},[452,21384,19354],{"class":19262},[452,21386,19279],{"class":1298},[452,21388,21389,21391],{"class":915,"line":1234},[452,21390,19365],{"class":1298},[452,21392,21393],{"class":923},"\"8000:80\"\n",[452,21395,21396,21398],{"class":915,"line":1239},[452,21397,19486],{"class":19262},[452,21399,19279],{"class":1298},[452,21401,21402,21404],{"class":915,"line":1253},[452,21403,19365],{"class":1298},[452,21405,21406],{"class":923},"db\n",[452,21408,21409,21411],{"class":915,"line":1258},[452,21410,19931],{"class":19262},[452,21412,19279],{"class":1298},[452,21414,21415,21417,21419],{"class":915,"line":1264},[452,21416,19299],{"class":19262},[452,21418,16252],{"class":1298},[452,21420,21421],{"class":923},"mysql:8.0\n",[452,21423,21424,21426],{"class":915,"line":1269},[452,21425,19420],{"class":19262},[452,21427,19279],{"class":1298},[452,21429,21430,21433,21435],{"class":915,"line":1558},[452,21431,21432],{"class":19262},"MYSQL_DATABASE",[452,21434,16252],{"class":1298},[452,21436,21437],{"class":923},"testdb\n",[452,21439,21440,21443,21445],{"class":915,"line":1563},[452,21441,21442],{"class":19262},"MYSQL_USER",[452,21444,16252],{"class":1298},[452,21446,20053],{"class":923},[452,21448,21449,21452,21454],{"class":915,"line":1586},[452,21450,21451],{"class":19262},"MYSQL_PASSWORD",[452,21453,16252],{"class":1298},[452,21455,21456],{"class":923},"password\n",[452,21458,21459,21462,21464],{"class":915,"line":1591},[452,21460,21461],{"class":19262},"MYSQL_ROOT_PASSWORD",[452,21463,16252],{"class":1298},[452,21465,21466],{"class":923},"root\n",[2652,21468,21470],{"id":21469},"seite-3","Seite 3",[898,21472,21070],{},[898,21474,21212,21475,21073],{},[1325,21476],{},[898,21478,21479,21480,21482,21483,21485],{},"Aufgabe 3: Node.js mit MongoDB",[1325,21481],{},"\nZiel: Erstelle eine Node.js-App, die eine Verbindung zu MongoDB aufnimmt und einfache HTTP-",[1325,21484],{},"\nAntworten liefert.",[898,21487,21085],{},[9593,21489,21490,21493,21496],{},[995,21491,21492],{},"Erstelle einen Node.js-Service mit Express.",[995,21494,21495],{},"Verbinde dich mit einer MongoDB-Instanz (in einem eigenen Container).",[995,21497,21498],{},"Zeige über einen HTTP-Endpunkt eine Erfolgsmeldung, wenn MongoDB verbunden ist.",[898,21500,21105,21501,21503],{},[1325,21502],{},"\n• Du brauchst eine Dockerfile, package.json und index.js.",[898,21505,21506,21507,21509],{},"• Verwende Mongoose zur Verbindung mit MongoDB.",[1325,21508],{},"\n• MongoDB läuft unter dem Service-Namen mongo.",[898,21511,21117,21512,21120,21514,21516,21517,21126,21519,21521,21522,21524,21525,21527,21528,21530],{},[1325,21513],{},[1325,21515],{},"\nnode-mongo\u002F",[1325,21518],{},[1325,21520],{},"\n├── app\u002F",[1325,21523],{},"\n│ ├── Dockerfile",[1325,21526],{},"\n│ ├── index.js",[1325,21529],{},"\n│ └── package.json",[898,21532,21533],{},"Dockerfile:",[904,21535,21537],{"className":10966,"code":21536,"language":10968,"meta":909,"style":909},"FROM node:18\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm install\nCOPY . .\nCMD [\"node\", \"index.js\"]\n\n",[911,21538,21539,21546,21552,21559,21566,21572],{"__ignoreMap":909},[452,21540,21541,21543],{"class":915,"line":916},[452,21542,18286],{"class":1473},[452,21544,21545],{"class":1298}," node:18\n",[452,21547,21548,21550],{"class":915,"line":1190},[452,21549,18307],{"class":1473},[452,21551,18310],{"class":1298},[452,21553,21554,21556],{"class":915,"line":1197},[452,21555,18328],{"class":1473},[452,21557,21558],{"class":1298}," package*.json .\u002F\n",[452,21560,21561,21563],{"class":915,"line":1204},[452,21562,18340],{"class":1473},[452,21564,21565],{"class":1298}," npm install\n",[452,21567,21568,21570],{"class":915,"line":1209},[452,21569,18328],{"class":1473},[452,21571,18363],{"class":1298},[452,21573,21574,21576,21578,21581,21583,21586],{"class":915,"line":1223},[452,21575,18455],{"class":1473},[452,21577,18458],{"class":1298},[452,21579,21580],{"class":923},"\"node\"",[452,21582,18464],{"class":1298},[452,21584,21585],{"class":923},"\"index.js\"",[452,21587,18470],{"class":1298},[898,21589,21590,21591,21593,21594,21596,21597,21599],{},"index.js:",[1325,21592],{},"\nconst express = require('express');",[1325,21595],{},"\nconst mongoose = require('mongoose');",[1325,21598],{},"\nconst app = express();",[898,21601,21602,21603,21605,21606,21608],{},"mongoose.connect('mongodb:\u002F\u002Fmongo:27017\u002Ftest')",[1325,21604],{},"\n.then(() => console.log('Connected to MongoDB'))",[1325,21607],{},"\n.catch(err => console.error('MongoDB connection error:', err));",[898,21610,21611,21612,21614,21615,21617],{},"app.get('\u002F', (req, res) => {",[1325,21613],{},"\nres.send('Hello from Node.js and MongoDB!');",[1325,21616],{},"\n});",[898,21619,21620],{},"app.listen(3000, () => console.log('Server running on port 3000'));",[2652,21622,21624],{"id":21623},"seite-4","Seite 4",[898,21626,21070,21627,21073],{},[1325,21628],{},[898,21630,21631,21632,21634,21635,21637,21638,21640,21641,21643,21644,21646,21647,21649,21650,21652,21653,21652],{},"package.json:",[1325,21633],{},"\n{",[1325,21636],{},"\n\"name\": \"node-mongo-app\",",[1325,21639],{},"\n\"version\": \"1.0.0\",",[1325,21642],{},"\n\"dependencies\": {",[1325,21645],{},"\n\"express\": \"^4.18.2\",",[1325,21648],{},"\n\"mongoose\": \"^7.0.0\"",[1325,21651],{},"\n}",[1325,21654],{},[898,21656,21141],{},[904,21658,21660],{"className":19253,"code":21659,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\napp:\nbuild: .\u002Fapp\nports:\n- \"3000:3000\"\ndepends_on:\n- mongo\n\nmongo:\nimage: mongo\nports:\n- \"27017:27017\"\n\n",[911,21661,21662,21670,21676,21682,21690,21696,21703,21709,21716,21720,21727,21735,21741],{"__ignoreMap":909},[452,21663,21664,21666,21668],{"class":915,"line":916},[452,21665,18932],{"class":19262},[452,21667,16252],{"class":1298},[452,21669,21155],{"class":923},[452,21671,21672,21674],{"class":915,"line":1190},[452,21673,19276],{"class":19262},[452,21675,19279],{"class":1298},[452,21677,21678,21680],{"class":915,"line":1197},[452,21679,19714],{"class":19262},[452,21681,19279],{"class":1298},[452,21683,21684,21686,21688],{"class":915,"line":1204},[452,21685,18824],{"class":19262},[452,21687,16252],{"class":1298},[452,21689,19740],{"class":923},[452,21691,21692,21694],{"class":915,"line":1209},[452,21693,19354],{"class":19262},[452,21695,19279],{"class":1298},[452,21697,21698,21700],{"class":915,"line":1223},[452,21699,19365],{"class":1298},[452,21701,21702],{"class":923},"\"3000:3000\"\n",[452,21704,21705,21707],{"class":915,"line":1228},[452,21706,19486],{"class":19262},[452,21708,19279],{"class":1298},[452,21710,21711,21713],{"class":915,"line":1234},[452,21712,19365],{"class":1298},[452,21714,21715],{"class":923},"mongo\n",[452,21717,21718],{"class":915,"line":1239},[452,21719,1194],{"emptyLinePlaceholder":1193},[452,21721,21722,21725],{"class":915,"line":1253},[452,21723,21724],{"class":19262},"mongo",[452,21726,19279],{"class":1298},[452,21728,21729,21731,21733],{"class":915,"line":1258},[452,21730,19299],{"class":19262},[452,21732,16252],{"class":1298},[452,21734,21715],{"class":923},[452,21736,21737,21739],{"class":915,"line":1264},[452,21738,19354],{"class":19262},[452,21740,19279],{"class":1298},[452,21742,21743,21745],{"class":915,"line":1269},[452,21744,19365],{"class":1298},[452,21746,21747],{"class":923},"\"27017:27017\"\n",[2652,21749,21751],{"id":21750},"seite-5","Seite 5",[898,21753,21070],{},[898,21755,21756,21757,21073],{},"🛠️",[1325,21758],{},[898,21760,21761,21762,21764,21765,21767],{},"Aufgabe 4: Laravel + MySQL Umgebung",[1325,21763],{},"\n📋 Aufgabenstellung:",[1325,21766],{},"\nSetze eine vollständige Laravel-Entwicklungsumgebung mit MySQL und Docker Compose auf.",[898,21769,21105,21770,21772],{},[1325,21771],{},"\n• Verwende laravel\u002Flaravel und mysql:8.",[898,21774,21775,21776,21778],{},"• Benutze Volumes für persistente Daten.",[1325,21777],{},"\n• Öffne Laravel auf Port 8000.",[898,21780,21117,21781,21783],{},[1325,21782],{},"\ndocker-compose.yml",[904,21785,21787],{"className":19253,"code":21786,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\napp:\nimage: laravelsail\u002Fphp82-composer\ncontainer_name: laravel_app\nworking_dir: \u002Fvar\u002Fwww\u002Fhtml\nvolumes:\n- .:\u002Fvar\u002Fwww\u002Fhtml\nports:\n- \"8000:8000\"\ndepends_on:\n- db\ncommand: bash -c \"composer install && php artisan serve --host=0.0.0.0 --\n",[911,21788,21789,21797,21803,21809,21818,21827,21837,21843,21850,21856,21863,21869,21875],{"__ignoreMap":909},[452,21790,21791,21793,21795],{"class":915,"line":916},[452,21792,18932],{"class":19262},[452,21794,16252],{"class":1298},[452,21796,21155],{"class":923},[452,21798,21799,21801],{"class":915,"line":1190},[452,21800,19276],{"class":19262},[452,21802,19279],{"class":1298},[452,21804,21805,21807],{"class":915,"line":1197},[452,21806,19714],{"class":19262},[452,21808,19279],{"class":1298},[452,21810,21811,21813,21815],{"class":915,"line":1204},[452,21812,19299],{"class":19262},[452,21814,16252],{"class":1298},[452,21816,21817],{"class":923},"laravelsail\u002Fphp82-composer\n",[452,21819,21820,21822,21824],{"class":915,"line":1209},[452,21821,19313],{"class":19262},[452,21823,16252],{"class":1298},[452,21825,21826],{"class":923},"laravel_app\n",[452,21828,21829,21832,21834],{"class":915,"line":1223},[452,21830,21831],{"class":19262},"working_dir",[452,21833,16252],{"class":1298},[452,21835,21836],{"class":923},"\u002Fvar\u002Fwww\u002Fhtml\n",[452,21838,21839,21841],{"class":915,"line":1228},[452,21840,18032],{"class":19262},[452,21842,19279],{"class":1298},[452,21844,21845,21847],{"class":915,"line":1234},[452,21846,19365],{"class":1298},[452,21848,21849],{"class":923},".:\u002Fvar\u002Fwww\u002Fhtml\n",[452,21851,21852,21854],{"class":915,"line":1239},[452,21853,19354],{"class":19262},[452,21855,19279],{"class":1298},[452,21857,21858,21860],{"class":915,"line":1253},[452,21859,19365],{"class":1298},[452,21861,21862],{"class":923},"\"8000:8000\"\n",[452,21864,21865,21867],{"class":915,"line":1258},[452,21866,19486],{"class":19262},[452,21868,19279],{"class":1298},[452,21870,21871,21873],{"class":915,"line":1264},[452,21872,19365],{"class":1298},[452,21874,21406],{"class":923},[452,21876,21877,21880,21882],{"class":915,"line":1269},[452,21878,21879],{"class":19262},"command",[452,21881,16252],{"class":1298},[452,21883,21884],{"class":923},"bash -c \"composer install && php artisan serve --host=0.0.0.0 --\n",[904,21886,21888],{"className":906,"code":21887,"language":908,"meta":909,"style":909},"port=8000\"\n\n",[911,21889,21890],{"__ignoreMap":909},[452,21891,21892,21894,21896],{"class":915,"line":916},[452,21893,18924],{"class":1298},[452,21895,1862],{"class":1473},[452,21897,21898],{"class":923},"8000\"\n",[898,21900,21901],{},"db:",[904,21903,21905],{"className":19253,"code":21904,"language":19255,"meta":909,"style":909},"image: mysql:8.0\ncontainer_name: mysql_db\nenvironment:\nMYSQL_DATABASE: laravel\nMYSQL_ROOT_PASSWORD: root\nMYSQL_USER: user\nMYSQL_PASSWORD: password\nvolumes:\n- dbdata:\u002Fvar\u002Flib\u002Fmysql\nports:\n- \"3306:3306\"\n\nvolumes:\ndbdata:\n\n",[911,21906,21907,21915,21924,21930,21939,21947,21955,21963,21969,21976,21982,21989,21993,21999],{"__ignoreMap":909},[452,21908,21909,21911,21913],{"class":915,"line":916},[452,21910,19299],{"class":19262},[452,21912,16252],{"class":1298},[452,21914,21421],{"class":923},[452,21916,21917,21919,21921],{"class":915,"line":1190},[452,21918,19313],{"class":19262},[452,21920,16252],{"class":1298},[452,21922,21923],{"class":923},"mysql_db\n",[452,21925,21926,21928],{"class":915,"line":1197},[452,21927,19420],{"class":19262},[452,21929,19279],{"class":1298},[452,21931,21932,21934,21936],{"class":915,"line":1204},[452,21933,21432],{"class":19262},[452,21935,16252],{"class":1298},[452,21937,21938],{"class":923},"laravel\n",[452,21940,21941,21943,21945],{"class":915,"line":1209},[452,21942,21461],{"class":19262},[452,21944,16252],{"class":1298},[452,21946,21466],{"class":923},[452,21948,21949,21951,21953],{"class":915,"line":1223},[452,21950,21442],{"class":19262},[452,21952,16252],{"class":1298},[452,21954,20053],{"class":923},[452,21956,21957,21959,21961],{"class":915,"line":1228},[452,21958,21451],{"class":19262},[452,21960,16252],{"class":1298},[452,21962,21456],{"class":923},[452,21964,21965,21967],{"class":915,"line":1234},[452,21966,18032],{"class":19262},[452,21968,19279],{"class":1298},[452,21970,21971,21973],{"class":915,"line":1239},[452,21972,19365],{"class":1298},[452,21974,21975],{"class":923},"dbdata:\u002Fvar\u002Flib\u002Fmysql\n",[452,21977,21978,21980],{"class":915,"line":1253},[452,21979,19354],{"class":19262},[452,21981,19279],{"class":1298},[452,21983,21984,21986],{"class":915,"line":1258},[452,21985,19365],{"class":1298},[452,21987,21988],{"class":923},"\"3306:3306\"\n",[452,21990,21991],{"class":915,"line":1264},[452,21992,1194],{"emptyLinePlaceholder":1193},[452,21994,21995,21997],{"class":915,"line":1269},[452,21996,18032],{"class":19262},[452,21998,19279],{"class":1298},[452,22000,22001,22004],{"class":915,"line":1558},[452,22002,22003],{"class":19262},"dbdata",[452,22005,19279],{"class":1298},[2652,22007,22009],{"id":22008},"seite-6","Seite 6",[898,22011,21070],{},[898,22013,21756,22014,21073],{},[1325,22015],{},[898,22017,22018,22019,21764,22021,22023,22024,22026],{},"Aufgabe 5: Redis als Cache-Service",[1325,22020],{},[1325,22022],{},"\nErstelle einen Redis-Service mit Docker Compose und verbinde ihn mit einer einfachen Node.js-",[1325,22025],{},"\nApp als Cache Layer.",[898,22028,21105,22029,22031,22032,22034],{},[1325,22030],{},"\n• Verwende das Redis-Image.",[1325,22033],{},"\n• Die App soll bei \u002F prüfen, ob Daten gecached sind.",[898,22036,22037],{},"• Wenn nicht, speichert sie etwas in Redis.",[898,22039,21117,22040,22042,22043,21593,22045,22047],{},[1325,22041],{},"\nindex.js",[1325,22044],{},[1325,22046],{},"\nconst redis = require('redis');",[898,22049,22050,22051,22053],{},"const client = redis.createClient({ url: 'redis:\u002F\u002Fredis:6379' });",[1325,22052],{},"\nclient.connect();",[898,22055,22056],{},"const app = express();",[898,22058,22059,22060,22062],{},"app.get('\u002F', async (req, res) => {",[1325,22061],{},"\nconst value = await client.get('message');",[904,22064,22066],{"className":906,"code":22065,"language":908,"meta":909,"style":909},"if (value) {\nres.send(`Cached: ${value}`);\n",[911,22067,22068,22081],{"__ignoreMap":909},[452,22069,22070,22072,22075,22078],{"class":915,"line":916},[452,22071,2426],{"class":1473},[452,22073,22074],{"class":1298}," (",[452,22076,22077],{"class":919},"value",[452,22079,22080],{"class":1298},") {\n",[452,22082,22083,22086,22089,22092,22095,22097,22100],{"class":915,"line":1190},[452,22084,22085],{"class":919},"res.send(",[452,22087,22088],{"class":923},"`",[452,22090,22091],{"class":919},"Cached:",[452,22093,22094],{"class":923}," ${",[452,22096,22077],{"class":1298},[452,22098,22099],{"class":923},"}`",[452,22101,21303],{"class":1298},[898,22103,22104,22105,22107,22108,22110,22111,21652,22113,21617],{},"} else {",[1325,22106],{},"\nawait client.set('message', 'Hello Redis');",[1325,22109],{},"\nres.send('Set cache: Hello Redis');",[1325,22112],{},[1325,22114],{},[898,22116,22117],{},"app.listen(3000, () => console.log('Server on 3000'));",[898,22119,22120],{},"docker-compose.yml",[904,22122,22124],{"className":19253,"code":22123,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\napp:\nbuild: .\nports:\n- \"3000:3000\"\ndepends_on:\n- redis\n\nredis:\nimage: redis:alpine\nports:\n- \"6379:6379\"\n\n",[911,22125,22126,22134,22140,22146,22155,22161,22167,22173,22180,22184,22191,22200,22206],{"__ignoreMap":909},[452,22127,22128,22130,22132],{"class":915,"line":916},[452,22129,18932],{"class":19262},[452,22131,16252],{"class":1298},[452,22133,21155],{"class":923},[452,22135,22136,22138],{"class":915,"line":1190},[452,22137,19276],{"class":19262},[452,22139,19279],{"class":1298},[452,22141,22142,22144],{"class":915,"line":1197},[452,22143,19714],{"class":19262},[452,22145,19279],{"class":1298},[452,22147,22148,22150,22152],{"class":915,"line":1204},[452,22149,18824],{"class":19262},[452,22151,16252],{"class":1298},[452,22153,22154],{"class":975},".\n",[452,22156,22157,22159],{"class":915,"line":1209},[452,22158,19354],{"class":19262},[452,22160,19279],{"class":1298},[452,22162,22163,22165],{"class":915,"line":1223},[452,22164,19365],{"class":1298},[452,22166,21702],{"class":923},[452,22168,22169,22171],{"class":915,"line":1228},[452,22170,19486],{"class":19262},[452,22172,19279],{"class":1298},[452,22174,22175,22177],{"class":915,"line":1234},[452,22176,19365],{"class":1298},[452,22178,22179],{"class":923},"redis\n",[452,22181,22182],{"class":915,"line":1239},[452,22183,1194],{"emptyLinePlaceholder":1193},[452,22185,22186,22189],{"class":915,"line":1253},[452,22187,22188],{"class":19262},"redis",[452,22190,19279],{"class":1298},[452,22192,22193,22195,22197],{"class":915,"line":1258},[452,22194,19299],{"class":19262},[452,22196,16252],{"class":1298},[452,22198,22199],{"class":923},"redis:alpine\n",[452,22201,22202,22204],{"class":915,"line":1264},[452,22203,19354],{"class":19262},[452,22205,19279],{"class":1298},[452,22207,22208,22210],{"class":915,"line":1269},[452,22209,19365],{"class":1298},[452,22211,22212],{"class":923},"\"6379:6379\"\n",[2652,22214,22216],{"id":22215},"seite-7","Seite 7",[898,22218,21070],{},[898,22220,21756,22221,21073],{},[1325,22222],{},[898,22224,22225,22226,21764,22228,22230],{},"Aufgabe 6: PostgreSQL + Adminer (Datenbank GUI)",[1325,22227],{},[1325,22229],{},"\nStarte eine PostgreSQL-Datenbank mit Adminer zur Verwaltung über den Browser.",[898,22232,21105,22233,22235],{},[1325,22234],{},"\n• PostgreSQL Port: 5432",[898,22237,22238],{},"• Adminer Port: 8080",[898,22240,21117,22241,21783],{},[1325,22242],{},[904,22244,22246],{"className":19253,"code":22245,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\ndb:\nimage: postgres:15\nenvironment:\nPOSTGRES_DB: example\nPOSTGRES_USER: user\nPOSTGRES_PASSWORD: password\nvolumes:\n- pgdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\nports:\n- \"5432:5432\"\n\nadminer:\nimage: adminer\nports:\n- \"8080:8080\"\n\nvolumes:\npgdata:\n\n",[911,22247,22248,22256,22262,22268,22277,22283,22292,22300,22308,22314,22321,22327,22334,22338,22345,22354,22360,22367,22371,22377],{"__ignoreMap":909},[452,22249,22250,22252,22254],{"class":915,"line":916},[452,22251,18932],{"class":19262},[452,22253,16252],{"class":1298},[452,22255,21155],{"class":923},[452,22257,22258,22260],{"class":915,"line":1190},[452,22259,19276],{"class":19262},[452,22261,19279],{"class":1298},[452,22263,22264,22266],{"class":915,"line":1197},[452,22265,19931],{"class":19262},[452,22267,19279],{"class":1298},[452,22269,22270,22272,22274],{"class":915,"line":1204},[452,22271,19299],{"class":19262},[452,22273,16252],{"class":1298},[452,22275,22276],{"class":923},"postgres:15\n",[452,22278,22279,22281],{"class":915,"line":1209},[452,22280,19420],{"class":19262},[452,22282,19279],{"class":1298},[452,22284,22285,22287,22289],{"class":915,"line":1223},[452,22286,20032],{"class":19262},[452,22288,16252],{"class":1298},[452,22290,22291],{"class":923},"example\n",[452,22293,22294,22296,22298],{"class":915,"line":1228},[452,22295,20048],{"class":19262},[452,22297,16252],{"class":1298},[452,22299,20053],{"class":923},[452,22301,22302,22304,22306],{"class":915,"line":1234},[452,22303,20064],{"class":19262},[452,22305,16252],{"class":1298},[452,22307,21456],{"class":923},[452,22309,22310,22312],{"class":915,"line":1239},[452,22311,18032],{"class":19262},[452,22313,19279],{"class":1298},[452,22315,22316,22318],{"class":915,"line":1253},[452,22317,19365],{"class":1298},[452,22319,22320],{"class":923},"pgdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n",[452,22322,22323,22325],{"class":915,"line":1258},[452,22324,19354],{"class":19262},[452,22326,19279],{"class":1298},[452,22328,22329,22331],{"class":915,"line":1264},[452,22330,19365],{"class":1298},[452,22332,22333],{"class":923},"\"5432:5432\"\n",[452,22335,22336],{"class":915,"line":1269},[452,22337,1194],{"emptyLinePlaceholder":1193},[452,22339,22340,22343],{"class":915,"line":1558},[452,22341,22342],{"class":19262},"adminer",[452,22344,19279],{"class":1298},[452,22346,22347,22349,22351],{"class":915,"line":1563},[452,22348,19299],{"class":19262},[452,22350,16252],{"class":1298},[452,22352,22353],{"class":923},"adminer\n",[452,22355,22356,22358],{"class":915,"line":1586},[452,22357,19354],{"class":19262},[452,22359,19279],{"class":1298},[452,22361,22362,22364],{"class":915,"line":1591},[452,22363,19365],{"class":1298},[452,22365,22366],{"class":923},"\"8080:8080\"\n",[452,22368,22369],{"class":915,"line":1597},[452,22370,1194],{"emptyLinePlaceholder":1193},[452,22372,22373,22375],{"class":915,"line":1602},[452,22374,18032],{"class":19262},[452,22376,19279],{"class":1298},[452,22378,22379,22382],{"class":915,"line":1622},[452,22380,22381],{"class":19262},"pgdata",[452,22383,19279],{"class":1298},[2652,22385,22387],{"id":22386},"seite-8","Seite 8",[898,22389,21070],{},[898,22391,21756,22392,21073],{},[1325,22393],{},[898,22395,22396,22397,21764,22399,22401],{},"Aufgabe 7: RabbitMQ Messaging Queue",[1325,22398],{},[1325,22400],{},"\nStarte einen RabbitMQ-Container und sende eine Nachricht von einer Node.js-App.",[898,22403,21105,22404,22406],{},[1325,22405],{},"\n• RabbitMQ läuft auf 5672, Web-UI auf 15672",[898,22408,22409],{},"• Nutze das Paket amqplib",[898,22411,21117,22412,21783],{},[1325,22413],{},[904,22415,22417],{"className":19253,"code":22416,"language":19255,"meta":909,"style":909},"version: '3.8'\nservices:\nrabbitmq:\nimage: rabbitmq:3-management\nports:\n- \"5672:5672\"\n- \"15672:15672\"\n\nsender:\nbuild: .\u002Fsender\ndepends_on:\n- rabbitmq\n\n",[911,22418,22419,22427,22433,22440,22449,22455,22462,22469,22473,22480,22489,22495],{"__ignoreMap":909},[452,22420,22421,22423,22425],{"class":915,"line":916},[452,22422,18932],{"class":19262},[452,22424,16252],{"class":1298},[452,22426,21155],{"class":923},[452,22428,22429,22431],{"class":915,"line":1190},[452,22430,19276],{"class":19262},[452,22432,19279],{"class":1298},[452,22434,22435,22438],{"class":915,"line":1197},[452,22436,22437],{"class":19262},"rabbitmq",[452,22439,19279],{"class":1298},[452,22441,22442,22444,22446],{"class":915,"line":1204},[452,22443,19299],{"class":19262},[452,22445,16252],{"class":1298},[452,22447,22448],{"class":923},"rabbitmq:3-management\n",[452,22450,22451,22453],{"class":915,"line":1209},[452,22452,19354],{"class":19262},[452,22454,19279],{"class":1298},[452,22456,22457,22459],{"class":915,"line":1223},[452,22458,19365],{"class":1298},[452,22460,22461],{"class":923},"\"5672:5672\"\n",[452,22463,22464,22466],{"class":915,"line":1228},[452,22465,19365],{"class":1298},[452,22467,22468],{"class":923},"\"15672:15672\"\n",[452,22470,22471],{"class":915,"line":1234},[452,22472,1194],{"emptyLinePlaceholder":1193},[452,22474,22475,22478],{"class":915,"line":1239},[452,22476,22477],{"class":19262},"sender",[452,22479,19279],{"class":1298},[452,22481,22482,22484,22486],{"class":915,"line":1253},[452,22483,18824],{"class":19262},[452,22485,16252],{"class":1298},[452,22487,22488],{"class":923},".\u002Fsender\n",[452,22490,22491,22493],{"class":915,"line":1258},[452,22492,19486],{"class":19262},[452,22494,19279],{"class":1298},[452,22496,22497,22499],{"class":915,"line":1264},[452,22498,19365],{"class":1298},[452,22500,22501],{"class":923},"rabbitmq\n",[898,22503,22504,22505,22507],{},"sender\u002Findex.js",[1325,22506],{},"\nconst amqp = require('amqplib');",[898,22509,22510,22511,22513,22514,22516,22517,22519,22520,22522,22523,22525,22526,22528,22529,22531,22532,22534,22535,22537],{},"(async () => {",[1325,22512],{},"\nconst conn = await amqp.connect('amqp:\u002F\u002Frabbitmq');",[1325,22515],{},"\nconst ch = await conn.createChannel();",[1325,22518],{},"\nconst q = 'task_queue';",[1325,22521],{},"\nawait ch.assertQueue(q);",[1325,22524],{},"\nch.sendToQueue(q, Buffer.from('Hello RabbitMQ'));",[1325,22527],{},"\nconsole.log('Message sent');",[1325,22530],{},"\nawait ch.close();",[1325,22533],{},"\nawait conn.close();",[1325,22536],{},"\n})();",[898,22539,22540],{},"sender\u002FDockerfile",[904,22542,22544],{"className":10966,"code":22543,"language":10968,"meta":909,"style":909},"FROM node:18\nWORKDIR \u002Fapp\nCOPY . .\nRUN npm install\nCMD [\"node\", \"index.js\"]\n\n",[911,22545,22546,22552,22558,22564,22570],{"__ignoreMap":909},[452,22547,22548,22550],{"class":915,"line":916},[452,22549,18286],{"class":1473},[452,22551,21545],{"class":1298},[452,22553,22554,22556],{"class":915,"line":1190},[452,22555,18307],{"class":1473},[452,22557,18310],{"class":1298},[452,22559,22560,22562],{"class":915,"line":1197},[452,22561,18328],{"class":1473},[452,22563,18363],{"class":1298},[452,22565,22566,22568],{"class":915,"line":1204},[452,22567,18340],{"class":1473},[452,22569,21565],{"class":1298},[452,22571,22572,22574,22576,22578,22580,22582],{"class":915,"line":1209},[452,22573,18455],{"class":1473},[452,22575,18458],{"class":1298},[452,22577,21580],{"class":923},[452,22579,18464],{"class":1298},[452,22581,21585],{"class":923},[452,22583,18470],{"class":1298},[2652,22585,22587],{"id":22586},"seite-9","Seite 9",[898,22589,21070,22590,21073],{},[1325,22591],{},[898,22593,22594,22595,21634,22597,22599,22600,21643,22602,22604,22605,21652,22607,21652],{},"sender\u002Fpackage.json",[1325,22596],{},[1325,22598],{},"\n\"name\": \"rabbit-sender\",",[1325,22601],{},[1325,22603],{},"\n\"amqplib\": \"^0.10.0\"",[1325,22606],{},[1325,22608],{},[257,22610,22612],{"id":22611},"sudoers_antworten_mit_fragenpdf","sudoers_antworten_mit_fragen.pdf",[898,22614,22615],{},"Quelle: sudoers_antworten_mit_fragen.pdf - 9 Seite(n)",[2652,22617,21067],{"id":22618},"seite-1-1",[898,22620,21070],{},[898,22622,22623],{},"Technikerschule Erlangen",[898,22625,22626,22627,22629],{},"Prufungsfragen zur sudoers-Datei - Antworten",[1325,22628],{},"\nGrundlagen",[9593,22631,22632,22641,22650],{},[995,22633,22634,22635,22637,22638,22640],{},"Was ist die Datei \u002Fetc\u002Fsudoers?",[1325,22636],{},"\nAntwort: Die Datei \u002Fetc\u002Fsudoers legt fest, welche Benutzer oder Gruppen sudo benutzen durfen,",[1325,22639],{},"\nals welcher Zielbenutzer Befehle laufen und welche Kommandos erlaubt oder verboten sind.",[995,22642,22643,22644,22646,22647,22649],{},"Warum sollte man die sudoers-Datei nicht direkt mit einem Editor bearbeiten?",[1325,22645],{},"\nAntwort: Weil schon kleine Syntaxfehler sudo unbrauchbar machen konnen. Dann konnen",[1325,22648],{},"\nAdministratoren sich im schlimmsten Fall aussperren oder Rechte falsch vergeben.",[995,22651,22652,22653,22655,22656,22658],{},"Welchen Befehl nutzt man zum sicheren Bearbeiten der sudoers-Datei?",[1325,22654],{},"\nAntwort: Dafur nutzt man visudo. Das Tool sperrt die Datei wahrend der Bearbeitung und pruft",[1325,22657],{},"\ndie Syntax vor dem Speichern.",[898,22660,22661,22662,22664,22665,22667,22668,22670,22671,22673,22674,22676,22677,22679,22680,22682,22683,22685,22686,22688],{},"Syntax & Struktur",[1325,22663],{},"\n4. Wie ist eine typische sudoers-Regel aufgebaut?",[1325,22666],{},"\nAntwort: Typisch ist: Benutzer Host=(Runas) Optionen: Befehl. Beispiel: max ALL=(root)",[1325,22669],{},"\n\u002Fusr\u002Fbin\u002Fsystemctl restart apache2.",[1325,22672],{},"\n5. Was bedeutet ALL in der sudoers-Datei?",[1325,22675],{},"\nAntwort: ALL bedeutet immer eine Freigabe fur alle Werte im jeweiligen Feld. Je nach Position",[1325,22678],{},"\nkann es also alle Hosts, alle Zielbenutzer oder alle Befehle meinen.",[1325,22681],{},"\n6. Was bedeutet (ALL) in einer Regel?",[1325,22684],{},"\nAntwort: Das Runas-Feld (ALL) bedeutet, dass der Befehl als jeder beliebige Zielbenutzer",[1325,22687],{},"\nausgefuhrt werden darf, also nicht nur als root.",[898,22690,22691,22692,22694,22695,22697,22698,22700,22701,22703,22704,22706,22707,22709],{},"Rechte & Sicherheit",[1325,22693],{},"\n7. Was bewirkt die Option NOPASSWD?",[1325,22696],{},"\nAntwort: NOPASSWD erlaubt die Ausfuhrung der angegebenen Befehle ohne Passwortabfrage.",[1325,22699],{},"\nDas ist bequem, sollte aber nur sehr gezielt fur wenige sichere Kommandos eingesetzt werden.",[1325,22702],{},"\n8. Was ist der Unterschied zwischen sudo und su?",[1325,22705],{},"\nAntwort: sudo fuhrt einzelne Befehle mit erhohten Rechten aus und kann fein granular geregelt",[1325,22708],{},"\nwerden. su wechselt direkt in ein anderes Benutzerkonto, oft in eine komplette Root-Shell.",[898,22711,22712,22713,22715,22716,22718,22719,22721],{},"Aliase",[1325,22714],{},"\n9. Welche Alias-Typen gibt es in der sudoers-Datei?",[1325,22717],{},"\nAntwort: Es gibt User_Alias fur Benutzer, Runas_Alias fur Zielbenutzer, Host_Alias fur Rechner",[1325,22720],{},"\nund Cmnd_Alias fur Befehlsgruppen.",[898,22723,22724,22725,22727,22728,22730,22731,22733,22734,22736,22737,22739],{},"Praktische Fragen",[1325,22726],{},"\n10. Wie erlaubst du einem Benutzer nur den Neustart des Systems?",[1325,22729],{},"\nAntwort: Zum Beispiel mit: max ALL=(root) \u002Fusr\u002Fsbin\u002Freboot. Noch besser ist die exakte Freigabe",[1325,22732],{},"\nnur des einen benotigten Befehls statt allgemeiner Systemrechte.",[1325,22735],{},"\n11. Wie erlaubst du einer Gruppe sudo-Zugriff?",[1325,22738],{},"\nAntwort: Gruppen werden mit einem Prozentzeichen geschrieben, zum Beispiel: %sudo",[904,22741,22743],{"className":906,"code":22742,"language":908,"meta":909,"style":909},"ALL=(ALL) ALL. Dann erhalten alle Mitglieder dieser Gruppe die erlaubten Rechte.\n\n",[911,22744,22745],{"__ignoreMap":909},[452,22746,22747,22749,22751,22753,22755],{"class":915,"line":916},[452,22748,2823],{"class":1298},[452,22750,1862],{"class":1473},[452,22752,2762],{"class":1298},[452,22754,2823],{"class":923},[452,22756,22757],{"class":1298},") ALL. Dann erhalten alle Mitglieder dieser Gruppe die erlaubten Rechte.\n",[898,22759,22760],{},"Sicherheit & Best Practices",[2652,22762,21207],{"id":22763},"seite-2-1",[9593,22765,22766,22778],{"start":1264},[995,22767,22768,22769,22771,22772,22774,22775,22777],{},"Warum ist es gefahrlich, ALL=(ALL) ALL zu vergeben?",[1325,22770],{},"\nAntwort: Weil der Benutzer damit praktisch jede Aktion als jeder Benutzer ausfuhren kann. Das",[1325,22773],{},"\nentspricht fast vollem Administrationszugriff und vergroBert das Missbrauchs- und Fehlerrisiko",[1325,22776],{},"\nstark.",[995,22779,22780,22781,22783,22784,22786,22787,22789],{},"Was macht die Direktive Defaults?",[1325,22782],{},"\nAntwort: Defaults setzt Standardoptionen fur sudo, zum Beispiel Umgebungsvariablen,",[1325,22785],{},"\nPasswortverhalten oder TTY-Anforderungen. Solche Vorgaben konnen global oder",[1325,22788],{},"\nbenutzerbezogen gelten.",[898,22791,22792,22793,22795,22796,22798,22799,22801,22802,22804,22805,22807,22808,22810],{},"Erweiterte Fragen",[1325,22794],{},"\n14. Was ist der Unterschied zwischen \u002Fetc\u002Fsudoers und \u002Fetc\u002Fsudoers.d\u002F?",[1325,22797],{},"\nAntwort: \u002Fetc\u002Fsudoers ist die zentrale Hauptdatei. In \u002Fetc\u002Fsudoers.d\u002F liegen zusatzliche",[1325,22800],{},"\nEinzeldateien, mit denen Rechte sauber modular und besser wartbar verteilt werden konnen.",[1325,22803],{},"\n15. Wie uberpruft man die Syntax der sudoers-Datei?",[1325,22806],{},"\nAntwort: Mit visudo -c. Der Befehl pruft die Syntax der Hauptdatei und normalerweise auch die",[1325,22809],{},"\neingebundenen Dateien.",[2652,22812,21470],{"id":22813},"seite-3-1",[898,22815,21070],{},[898,22817,22623],{},[898,22819,22820,22821,22823,22824,22826],{},"Szenario- & Analysefragen - Antworten",[1325,22822],{},"\nSzenario- & Analysefragen",[1325,22825],{},"\n16. Was bewirkt folgende Regel genau?",[904,22828,22830],{"className":906,"code":22829,"language":908,"meta":909,"style":909},"max ALL=(root, www-data) \u002Fusr\u002Fbin\u002Fsystemctl restart apache2\n",[911,22831,22832],{"__ignoreMap":909},[452,22833,22834,22836,22838,22840,22843,22846,22848,22850,22852],{"class":915,"line":916},[452,22835,2756],{"class":919},[452,22837,2759],{"class":923},[452,22839,2762],{"class":1298},[452,22841,22842],{"class":919},"root,",[452,22844,22845],{"class":923}," www-data",[452,22847,2768],{"class":1298},[452,22849,2828],{"class":923},[452,22851,2831],{"class":923},[452,22853,2834],{"class":923},[898,22855,22856,22857,22859,22860,22862],{},"Antwort: Benutzer max darf auf allen Hosts genau den Befehl \u002Fusr\u002Fbin\u002Fsystemctl restart apache2",[1325,22858],{},"\nausfuhren, und zwar als root oder als www-data. Andere Befehle sind dadurch nicht erlaubt.",[1325,22861],{},"\n17. Was ist der Unterschied zwischen diesen beiden Regeln?",[904,22864,22866],{"className":906,"code":22865,"language":908,"meta":909,"style":909},"max ALL=(ALL) ALL\nmax ALL=ALL ALL\n",[911,22867,22868,22882],{"__ignoreMap":909},[452,22869,22870,22872,22874,22876,22878,22880],{"class":915,"line":916},[452,22871,2756],{"class":919},[452,22873,2759],{"class":923},[452,22875,2762],{"class":1298},[452,22877,2823],{"class":919},[452,22879,2768],{"class":1298},[452,22881,2771],{"class":923},[452,22883,22884,22886,22889],{"class":915,"line":1190},[452,22885,2756],{"class":919},[452,22887,22888],{"class":923}," ALL=ALL",[452,22890,3093],{"class":923},[898,22892,22893,22894,22896,22897,22899,22900,22902],{},"Antwort: Inhaltlich fast keiner: beide erlauben max alle Befehle als alle Zielbenutzer. Die",[1325,22895],{},"\nSchreibweise mit Klammern ist die ubliche und klarere Form; ohne Klammern wird historisch ein",[1325,22898],{},"\nStandard-Runas angenommen.",[1325,22901],{},"\n18. Welche Regel hat Prioritat und warum?",[904,22904,22906],{"className":906,"code":22905,"language":908,"meta":909,"style":909},"max ALL=(ALL) ALL\nmax ALL=(ALL) !\u002Fbin\u002Fbash\n",[911,22907,22908,22922],{"__ignoreMap":909},[452,22909,22910,22912,22914,22916,22918,22920],{"class":915,"line":916},[452,22911,2756],{"class":919},[452,22913,2759],{"class":923},[452,22915,2762],{"class":1298},[452,22917,2823],{"class":919},[452,22919,2768],{"class":1298},[452,22921,2771],{"class":923},[452,22923,22924,22926,22928,22930,22932,22934],{"class":915,"line":1190},[452,22925,2756],{"class":919},[452,22927,2759],{"class":923},[452,22929,2762],{"class":1298},[452,22931,2823],{"class":919},[452,22933,2768],{"class":1298},[452,22935,22936],{"class":923},"!\u002Fbin\u002Fbash\n",[898,22938,22939,22940,22942,22943,22945,22946,22948,22949,22951],{},"Antwort: Die einschrankende Regel mit !\u002Fbin\u002Fbash ist wichtiger, weil Negationen verbotene",[1325,22941],{},"\nBefehle explizit ausschlieBen. Trotzdem sind solche Mischregeln heikel, weil man Bash oft uber",[1325,22944],{},"\nandere Programme indirekt wieder erreichen kann.",[1325,22947],{},"\n19. Was passiert bei folgender Konfiguration?",[1325,22950],{},"\nCmnd_Alias DANGER = \u002Fbin\u002Frm, \u002Fbin\u002Fdd",[904,22953,22955],{"className":906,"code":22954,"language":908,"meta":909,"style":909},"max ALL=(ALL) ALL, !DANGER\n",[911,22956,22957],{"__ignoreMap":909},[452,22958,22959,22961,22963,22965,22967,22969,22972],{"class":915,"line":916},[452,22960,2756],{"class":919},[452,22962,2759],{"class":923},[452,22964,2762],{"class":1298},[452,22966,2823],{"class":919},[452,22968,2768],{"class":1298},[452,22970,22971],{"class":923},"ALL,",[452,22973,22974],{"class":923}," !DANGER\n",[898,22976,22977,22978,22980,22981,22983],{},"Antwort: max darf grundsatzlich alle Befehle ausfuhren, auBer \u002Fbin\u002Frm und \u002Fbin\u002Fdd. Sicher ist das",[1325,22979],{},"\ntrotzdem nicht, weil ahnliche Wirkungen oft uber andere Werkzeuge oder Shells erreicht werden",[1325,22982],{},"\nkonnen.",[898,22985,22986,22987,22989],{},"Tiefergehende Syntaxfragen",[1325,22988],{},"\n20. Wie wirken NOPASSWD und PASSWD in Kombination innerhalb einer Regel?",[904,22991,22993],{"className":906,"code":22992,"language":908,"meta":909,"style":909},"max ALL=(ALL) NOPASSWD: \u002Fbin\u002Fls, PASSWD: \u002Fbin\u002Fcat\n",[911,22994,22995],{"__ignoreMap":909},[452,22996,22997,22999,23001,23003,23005,23007,23009,23012,23015],{"class":915,"line":916},[452,22998,2756],{"class":919},[452,23000,2759],{"class":923},[452,23002,2762],{"class":1298},[452,23004,2823],{"class":919},[452,23006,2768],{"class":1298},[452,23008,2866],{"class":923},[452,23010,23011],{"class":923}," \u002Fbin\u002Fls,",[452,23013,23014],{"class":923}," PASSWD:",[452,23016,23017],{"class":923}," \u002Fbin\u002Fcat\n",[898,23019,23020,23021,23023,23024,23026,23027,23029,23030,23032,23033,23035,23036,23038],{},"Antwort: Die Option wirkt nur fur die danach genannten Befehle. \u002Fbin\u002Fls ware ohne Passwort",[1325,23022],{},"\nerlaubt, wahrend fur \u002Fbin\u002Fcat weiterhin eine Passwortabfrage erfolgt.",[1325,23025],{},"\n21. Was bewirkt folgende Defaults-Zeile?",[1325,23028],{},"\nDefaults:max !requiretty",[1325,23031],{},"\nAntwort: Fur den Benutzer max wird die TTY-Pflicht deaktiviert. Er darf sudo also auch ohne",[1325,23034],{},"\ninteraktives Terminal verwenden, etwa in Skripten oder per Fernaufruf.",[1325,23037],{},"\n22. Was ist der Unterschied zwischen folgenden Regeln?",[904,23040,23042],{"className":906,"code":23041,"language":908,"meta":909,"style":909},"max ALL=(ALL:ALL) ALL\nmax ALL=(ALL) ALL\n",[911,23043,23044,23058],{"__ignoreMap":909},[452,23045,23046,23048,23050,23052,23054,23056],{"class":915,"line":916},[452,23047,2756],{"class":919},[452,23049,2759],{"class":923},[452,23051,2762],{"class":1298},[452,23053,2765],{"class":919},[452,23055,2768],{"class":1298},[452,23057,2771],{"class":923},[452,23059,23060,23062,23064,23066,23068,23070],{"class":915,"line":1190},[452,23061,2756],{"class":919},[452,23063,2759],{"class":923},[452,23065,2762],{"class":1298},[452,23067,2823],{"class":919},[452,23069,2768],{"class":1298},[452,23071,2771],{"class":923},[898,23073,23074,23075,23077],{},"Antwort: Mit (ALL:ALL) werden sowohl Zielbenutzer als auch Zielgruppen frei wahlbar. Mit (ALL)",[1325,23076],{},"\nist nur der Zielbenutzer explizit frei; die Gruppenseite bleibt standardmaBig eingeschrankter.",[898,23079,23080,23081,23083],{},"Edge Cases & Fallen",[1325,23082],{},"\n23. Warum kann folgende Regel ein Sicherheitsrisiko darstellen?",[904,23085,23087],{"className":906,"code":23086,"language":908,"meta":909,"style":909},"max ALL=(ALL) \u002Fusr\u002Fbin\u002Fvim\n\n",[911,23088,23089],{"__ignoreMap":909},[452,23090,23091,23093,23095,23097,23099,23101],{"class":915,"line":916},[452,23092,2756],{"class":919},[452,23094,2759],{"class":923},[452,23096,2762],{"class":1298},[452,23098,2823],{"class":919},[452,23100,2768],{"class":1298},[452,23102,23103],{"class":923},"\u002Fusr\u002Fbin\u002Fvim\n",[2652,23105,21624],{"id":23106},"seite-4-1",[898,23108,23109,23110,23112,23113,23115,23116,23118],{},"Antwort: Weil man aus vim heraus Shell-Befehle starten oder Dateien mit hohen Rechten",[1325,23111],{},"\nbearbeiten kann. Dadurch wird aus einem scheinbar harmlosen Editor schnell ein Weg zur",[1325,23114],{},"\nPrivilege Escalation.",[1325,23117],{},"\n24. Was passiert bei dieser Regel und wo liegt ein mogliches Problem?",[904,23120,23122],{"className":906,"code":23121,"language":908,"meta":909,"style":909},"max ALL=(ALL) \u002Fusr\u002Fbin\u002Fless \u002Fvar\u002Flog\u002F*\n",[911,23123,23124],{"__ignoreMap":909},[452,23125,23126,23128,23130,23132,23134,23136,23139,23142],{"class":915,"line":916},[452,23127,2756],{"class":919},[452,23129,2759],{"class":923},[452,23131,2762],{"class":1298},[452,23133,2823],{"class":919},[452,23135,2768],{"class":1298},[452,23137,23138],{"class":923},"\u002Fusr\u002Fbin\u002Fless",[452,23140,23141],{"class":923}," \u002Fvar\u002Flog\u002F",[452,23143,23144],{"class":975},"*\n",[898,23146,23147,23148,23150,23151,23153,23154,23156],{},"Antwort: max darf Logdateien unter \u002Fvar\u002Flog mit less lesen. Problematisch ist, dass less externe",[1325,23149],{},"\nProgramme aufrufen kann und Wildcards zusammen mit Dateilinks oder Sonderfallen unerwartete",[1325,23152],{},"\nZugriffe erlauben konnen.",[1325,23155],{},"\n25. Warum ist folgende Regel problematisch?",[904,23158,23160],{"className":906,"code":23159,"language":908,"meta":909,"style":909},"max ALL=(ALL) \u002Fusr\u002Fbin\u002Fpython3\n",[911,23161,23162],{"__ignoreMap":909},[452,23163,23164,23166,23168,23170,23172,23174],{"class":915,"line":916},[452,23165,2756],{"class":919},[452,23167,2759],{"class":923},[452,23169,2762],{"class":1298},[452,23171,2823],{"class":919},[452,23173,2768],{"class":1298},[452,23175,23176],{"class":923},"\u002Fusr\u002Fbin\u002Fpython3\n",[898,23178,23179,23180,23182],{},"Antwort: Ein Interpreter wie python3 kann beliebige Programme starten, Dateien schreiben oder",[1325,23181],{},"\nShells offnen. Damit entspricht die Freigabe praktisch sehr weitreichendem Vollzugriff.",[2652,23184,21751],{"id":23185},"seite-5-1",[898,23187,21070],{},[898,23189,22623],{},[898,23191,23192,23193,23195,23196,23198,23199,23201,23202,23204],{},"Kombinations- & Logikfragen - Antworten",[1325,23194],{},"\nKombinations- & Logikfragen",[1325,23197],{},"\n26. Welche Berechtigungen ergeben sich aus folgender Konfiguration?",[1325,23200],{},"\nUser_Alias ADMINS = max, anna",[1325,23203],{},"\nCmnd_Alias WEB = \u002Fusr\u002Fbin\u002Fsystemctl restart apache2",[904,23206,23208],{"className":906,"code":23207,"language":908,"meta":909,"style":909},"ADMINS ALL=(root) WEB\n",[911,23209,23210],{"__ignoreMap":909},[452,23211,23212,23215,23217,23219,23222,23224],{"class":915,"line":916},[452,23213,23214],{"class":919},"ADMINS",[452,23216,2759],{"class":923},[452,23218,2762],{"class":1298},[452,23220,23221],{"class":919},"root",[452,23223,2768],{"class":1298},[452,23225,23226],{"class":923},"WEB\n",[898,23228,23229,23230,23232,23233,23235,23236,23238,23239,23241,23242,23244,23245,23247],{},"Antwort: Die Benutzer max und anna durfen auf allen Hosts als root genau den Befehl",[1325,23231],{},"\n\u002Fusr\u002Fbin\u002Fsystemctl restart apache2 ausfuhren. Weitere Kommandos werden dadurch nicht",[1325,23234],{},"\nfreigegeben.",[1325,23237],{},"\n27. Was passiert, wenn mehrere Dateien im Verzeichnis \u002Fetc\u002Fsudoers.d\u002F vorhanden sind?",[1325,23240],{},"\nAntwort: Alle eingebundenen Dateien werden ausgewertet. Deshalb muss man auf Reihenfolge,",[1325,23243],{},"\nNamensgebung und mogliche Regelkonflikte achten, damit keine unbeabsichtigten Rechte",[1325,23246],{},"\nentstehen.",[898,23249,23250,23251,23253],{},"Sicherheitsbewertung",[1325,23252],{},"\n28. Welche der folgenden Regeln ist sicherer und warum?",[904,23255,23257],{"className":906,"code":23256,"language":908,"meta":909,"style":909},"max ALL=(ALL) ALL\n",[911,23258,23259],{"__ignoreMap":909},[452,23260,23261,23263,23265,23267,23269,23271],{"class":915,"line":916},[452,23262,2756],{"class":919},[452,23264,2759],{"class":923},[452,23266,2762],{"class":1298},[452,23268,2823],{"class":919},[452,23270,2768],{"class":1298},[452,23272,2771],{"class":923},[898,23274,23275],{},"vs.",[904,23277,23279],{"className":906,"code":23278,"language":908,"meta":909,"style":909},"max ALL=(root) \u002Fusr\u002Fbin\u002Fsystemctl\n",[911,23280,23281],{"__ignoreMap":909},[452,23282,23283,23285,23287,23289,23291,23293],{"class":915,"line":916},[452,23284,2756],{"class":919},[452,23286,2759],{"class":923},[452,23288,2762],{"class":1298},[452,23290,23221],{"class":919},[452,23292,2768],{"class":1298},[452,23294,3054],{"class":923},[898,23296,23297,23298,23300],{},"Antwort: Die zweite Regel ist deutlich sicherer, weil sie nur einen bestimmten Befehl als root",[1325,23299],{},"\nerlaubt. Das Prinzip der minimalen Rechte wird damit viel besser umgesetzt.",[898,23302,23303,23304,23306,23307,23309,23310,23312,23313,23315],{},"Praxisaufgabe",[1325,23305],{},"\n29. Formuliere eine sudoers-Regel mit folgenden Anforderungen: Benutzer max,",[1325,23308],{},"\nAusfuhrung als root, apt update und apt upgrade, ohne Passwort",[1325,23311],{},"\nAntwort: Eine passende Regel ist: max ALL=(root) NOPASSWD: \u002Fusr\u002Fbin\u002Fapt update, \u002Fusr\u002Fbin\u002Fapt",[1325,23314],{},"\nupgrade. Wichtig ist die exakte Angabe der erlaubten Kommandos.",[2652,23317,22009],{"id":23318},"seite-6-1",[898,23320,21070],{},[898,23322,22623],{},[898,23324,23325,23326,23328],{},"Komplexe Prufungsaufgabe: sudoers Analyse - Antworten",[1325,23327],{},"\nTeil 1: Verstandnisfragen",[9593,23330,23331,23340,23352],{},[995,23332,23333,23334,23336,23337,23339],{},"Welche Rechte haben Benutzer aus der Gruppe ADMINS grundsatzlich?",[1325,23335],{},"\nAntwort: ADMINS umfasst max und anna. Durch die Regel ADMINS ALL=(ALL) ALL durfen",[1325,23338],{},"\nbeide grundsatzlich alle Befehle als alle Zielbenutzer ausfuhren.",[995,23341,23342,23343,23345,23346,23348,23349,23351],{},"Welche Befehle darf tom konkret ausfuhren?",[1325,23344],{},"\nAntwort: tom gehort zu DEV und darf dadurch als root die Befehle aus SYSTEM und EDIT",[1325,23347],{},"\nausfuhren, also systemctl, journalctl, vim und nano. Zusatzlich darf er laut letzter Regel less auf",[1325,23350],{},"\nDateien unter \u002Fvar\u002Flog verwenden.",[995,23353,23354,23355,23357,23358,23360,23361,23363],{},"Darf tom den Befehl \u002Fbin\u002Frm ausfuhren? Begrunde.",[1325,23356],{},"\nAntwort: Nach der DEV-Regel nicht direkt, weil !DANGEROUS den Alias mit \u002Fbin\u002Frm und \u002Fbin\u002Fdd",[1325,23359],{},"\nausschlieBen soll. Praktisch bleibt die Konfiguration aber unsicher, weil erlaubte Editoren oder",[1325,23362],{},"\nandere Programme dennoch Missbrauch ermoglichen konnen.",[898,23365,23366,23367,23369,23370,23372,23373,23375],{},"Teil 2: Prioritat & Regelkonflikte",[1325,23368],{},"\n4. Welche Regel gilt fur max beim Ausfuhren von Befehlen allgemein? Begrunde anhand",[1325,23371],{},"\nder Reihenfolge.",[1325,23374],{},"\nAntwort: Fur max gilt insgesamt die Kombination aller passenden Regeln. Allgemein hat er durch",[904,23377,23379],{"className":906,"code":23378,"language":908,"meta":909,"style":909},"ADMINS ALL=(ALL) ALL Vollzugriff; die spateren PASSWD- und NOPASSWD-Regeln steuern\n",[911,23380,23381],{"__ignoreMap":909},[452,23382,23383,23385,23387,23389,23391,23393,23395,23398,23400,23403,23406,23409,23411,23414],{"class":915,"line":916},[452,23384,23214],{"class":919},[452,23386,2759],{"class":923},[452,23388,2762],{"class":1298},[452,23390,2823],{"class":919},[452,23392,2768],{"class":1298},[452,23394,2823],{"class":923},[452,23396,23397],{"class":923}," Vollzugriff",[452,23399,2120],{"class":1298},[452,23401,23402],{"class":919},"die",[452,23404,23405],{"class":923}," spateren",[452,23407,23408],{"class":923}," PASSWD-",[452,23410,927],{"class":923},[452,23412,23413],{"class":923}," NOPASSWD-Regeln",[452,23415,23416],{"class":923}," steuern\n",[898,23418,23419,23420,23422,23423,23425,23426,23428,23429,23431,23432,23434,23435,23437,23438,23440,23441,23443],{},"vor allem das Passwortverhalten fur bestimmte Befehle nach.",[1325,23421],{},"\n5. Kann max den Apache-Service ohne Passwort neu starten? Warum oder warum nicht?",[1325,23424],{},"\nAntwort: Ja. Fur genau \u002Fusr\u002Fbin\u002Fsystemctl restart apache2 existiert explizit eine NOPASSWD-",[1325,23427],{},"\nRegel, die die Passwortabfrage fur diesen Befehl aufhebt.",[1325,23430],{},"\n6. Welche Auswirkung hat die Kombination aus NOPASSWD: \u002Fusr\u002Fbin\u002Fsystemctl restart",[1325,23433],{},"\napache2 und PASSWD: ALL?",[1325,23436],{},"\nAntwort: Der Apache-Neustart bleibt ohne Passwort erlaubt, alle anderen per sudo erlaubten",[1325,23439],{},"\nBefehle erfordern ein Passwort. Die speziellere Ausnahme greift also nur fur das exakt genannte",[1325,23442],{},"\nKommando.",[898,23445,23446,23447,23449,23450,23452,23453,23455,23456,23458,23459,23461,23462,23464,23465,23467,23468,23470,23471,23473],{},"Teil 3: Sicherheitsanalyse",[1325,23448],{},"\n7. Warum ist die EDIT-Alias-Definition kritisch im Kontext von sudo?",[1325,23451],{},"\nAntwort: Weil Editoren wie vim oder nano nicht nur Text bearbeiten, sondern oft Shell-Aufrufe,",[1325,23454],{},"\nDateizugriffe und Plugins erlauben. Damit lassen sich Beschrankungen leicht umgehen.",[1325,23457],{},"\n8. Welche Sicherheitsprobleme entstehen durch die Regel: anna ALL=(root)",[1325,23460],{},"\n\u002Fusr\u002Fbin\u002Fvim \u002Fetc\u002F*",[1325,23463],{},"\nAntwort: anna darf damit als root beliebige Dateien unter \u002Fetc mit vim offnen und verandern. Aus",[1325,23466],{},"\nvim heraus kann sie zudem unter Umstanden Shell-Kommandos starten und so weit mehr als nur",[1325,23469],{},"\nKonfigurationen bearbeiten.",[1325,23472],{},"\n9. Warum ist folgende Regel potenziell unsicher, obwohl sie eingeschrankt wirkt? tom",[904,23475,23477],{"className":906,"code":23476,"language":908,"meta":909,"style":909},"ALL=(ALL) \u002Fusr\u002Fbin\u002Fless \u002Fvar\u002Flog\u002F*\n",[911,23478,23479],{"__ignoreMap":909},[452,23480,23481,23483,23485,23487,23489,23492],{"class":915,"line":916},[452,23482,2823],{"class":1298},[452,23484,1862],{"class":1473},[452,23486,2762],{"class":1298},[452,23488,2823],{"class":923},[452,23490,23491],{"class":1298},") \u002Fusr\u002Fbin\u002Fless \u002Fvar\u002Flog\u002F",[452,23493,23144],{"class":1473},[898,23495,23496,23497,23499],{},"Antwort: less wirkt wie ein Lesewerkzeug, kann aber externe Programme aufrufen. Auerdem",[1325,23498],{},"\nkonnen Wildcards und besondere Dateien oder Symlinks zu unerwarteten Zugriffen fuhren.",[898,23501,23502],{},"Teil 4: Syntax & Logikfehler",[2652,23504,22216],{"id":23505},"seite-7-1",[9593,23507,23508],{"start":1253},[995,23509,23510],{},"Gibt es einen logischen oder sicherheitstechnischen Fehler in dieser Zeile? DEV",[904,23512,23514],{"className":906,"code":23513,"language":908,"meta":909,"style":909},"ALL=(root) SYSTEM, EDIT, !DANGEROUS\n",[911,23515,23516],{"__ignoreMap":909},[452,23517,23518,23520,23522,23524,23526,23529,23531],{"class":915,"line":916},[452,23519,2823],{"class":1298},[452,23521,1862],{"class":1473},[452,23523,2762],{"class":1298},[452,23525,23221],{"class":923},[452,23527,23528],{"class":1298},") SYSTEM, EDIT, ",[452,23530,15817],{"class":1473},[452,23532,23533],{"class":919},"DANGEROUS\n",[898,23535,23536,23537,23539,23540,23542,23543,23545,23546,23548,23549,23551],{},"Antwort: Ja. Die Regel erlaubt sehr starke Werkzeuge wie Editoren und versucht nur einzelne",[1325,23538],{},"\ngefahrliche Befehle auszuschlieBen. Das ist logisch schwach, weil viele andere erlaubte",[1325,23541],{},"\nProgramme ebenfalls missbraucht werden konnen.",[1325,23544],{},"\n11. Wird !DANGEROUS hier zuverlassig durchgesetzt? Begrunde.",[1325,23547],{},"\nAntwort: Nur fur exakt die dort genannten Pfade. Zuverlassig sicher ist das nicht, weil dieselben",[1325,23550],{},"\nWirkungen uber andere Programme, Shells oder alternative Pfade erreichbar bleiben konnen.",[898,23553,23554,23555,23557,23558,23560,23561,23563,23564,23566,23567,23569,23570,23572,23573,23575,23576,23578],{},"Teil 5: Fehler finden",[1325,23556],{},"\n12. Identifiziere mindestens zwei versteckte Probleme oder Risiken in der gesamten",[1325,23559],{},"\nKonfiguration.",[1325,23562],{},"\nAntwort: Erstens fuhrt ADMINS ALL=(ALL) ALL praktisch zu Vollzugriff. Zweitens sind vim, nano,",[1325,23565],{},"\nless und ahnliche Programme als sudo-Befehle riskant, weil sie Shell-Eskalation oder",[1325,23568],{},"\nDateimanipulation erlauben.",[1325,23571],{},"\n13. Welche Regel(n) konnten unbeabsichtigt zu vollstandigem Root-Zugriff fuhren?",[1325,23574],{},"\nAntwort: Sicher die ADMINS-Regel. Praktisch ebenfalls kritisch sind die Freigaben fur vim, nano",[1325,23577],{},"\noder pythonartige Werkzeuge, weil sie sehr leicht zu einer Root-Shell fuhren konnen.",[898,23580,23581,23582,23584,23585,23587,23588,23590,23591,23593,23594,23596,23597,23599,23600,23602,23603,23605,23606,23608],{},"Teil 6: Transfer \u002F Praxis",[1325,23583],{},"\n14. Formuliere eine sichere Alternative fur die DEV-Regel, sodass nur systemctl restart",[1325,23586],{},"\napache2 erlaubt ist und keine Shell-Eskalation moglich ist.",[1325,23589],{},"\nAntwort: Eine sichere Alternative ware: tom ALL=(root) \u002Fusr\u002Fbin\u002Fsystemctl restart apache2. Damit",[1325,23592],{},"\nwird nur ein exakt benannter Befehl freigegeben und keine Shell oder kein Editor erlaubt.",[1325,23595],{},"\n15. Wie wurdest du verhindern, dass Editoren wie vim zur Privilege Escalation genutzt",[1325,23598],{},"\nwerden?",[1325,23601],{},"\nAntwort: Am besten gar keine allgemeinen Editoren per sudo freigeben. Stattdessen nur",[1325,23604],{},"\neinzelne, exakt definierte Verwaltungsbefehle erlauben oder mit sudoedit arbeiten und Shell-",[1325,23607],{},"\nFunktionen vermeiden.",[2652,23610,22387],{"id":23611},"seite-8-1",[898,23613,21070],{},[898,23615,22623],{},[898,23617,23618,23619,23621,23622,23624],{},"Prufungsaufgabe: sudoers mit Syntaxfehlern & Fallen -",[1325,23620],{},"\nAntworten",[1325,23623],{},"\nTeil 1: Syntaxfehler erkennen",[9593,23626,23627],{},[995,23628,23629,23630,23632,23633,23635,23636,23638],{},"Identifiziere alle Syntaxfehler, die dazu fuhren, dass visudo die Datei ablehnt.",[1325,23631],{},"\nAntwort: Fehlerhaft sind zum Beispiel: User_Alias ADMINS = max, anna, wegen des",[1325,23634],{},"\nabschlieBenden Kommas; Cmnd_Alias EDIT = \u002Fusr\u002Fbin\u002Fvim \u002Fusr\u002Fbin\u002Fnano wegen fehlendem",[1325,23637],{},"\nKomma; Cmnd_Alias DANG = \u002Fbin\u002Frm, \u002Fbin\u002Fdd, wegen des abschlieBenden Kommas; ADMINS",[904,23640,23642],{"className":906,"code":23641,"language":908,"meta":909,"style":909},"ALL=(ALL ALL) ALL wegen falscher Runas-Syntax; DEV ALL=(root) SYS, EDIT !DANG wegen\nfehlendem Komma; max ALL=(ALL) PASSWD ALL wegen fehlendem Doppelpunkt nach\n",[911,23643,23644,23683],{"__ignoreMap":909},[452,23645,23646,23648,23650,23652,23654,23657,23660,23663,23665,23667,23669,23671,23674,23677,23680],{"class":915,"line":916},[452,23647,2823],{"class":1298},[452,23649,1862],{"class":1473},[452,23651,2762],{"class":1298},[452,23653,2823],{"class":923},[452,23655,23656],{"class":923}," ALL",[452,23658,23659],{"class":1298},") ALL wegen falscher Runas-Syntax; ",[452,23661,23662],{"class":919},"DEV",[452,23664,2759],{"class":923},[452,23666,2762],{"class":1298},[452,23668,23221],{"class":919},[452,23670,2768],{"class":1298},[452,23672,23673],{"class":923},"SYS,",[452,23675,23676],{"class":923}," EDIT",[452,23678,23679],{"class":923}," !DANG",[452,23681,23682],{"class":923}," wegen\n",[452,23684,23685,23688,23691,23693,23695,23697,23699,23701,23703,23706,23708,23711,23714,23717],{"class":915,"line":1190},[452,23686,23687],{"class":919},"fehlendem",[452,23689,23690],{"class":923}," Komma",[452,23692,2120],{"class":1298},[452,23694,2756],{"class":919},[452,23696,2759],{"class":923},[452,23698,2762],{"class":1298},[452,23700,2823],{"class":919},[452,23702,2768],{"class":1298},[452,23704,23705],{"class":923},"PASSWD",[452,23707,23656],{"class":923},[452,23709,23710],{"class":923}," wegen",[452,23712,23713],{"class":923}," fehlendem",[452,23715,23716],{"class":923}," Doppelpunkt",[452,23718,23719],{"class":923}," nach\n",[898,23721,23722,23723,23725,23726,23728,23729,23731,23732,23734,23735,23737,23738,23740],{},"PASSWD.",[1325,23724],{},"\n2. Welche Zeilen enthalten unguItige Alias-Definitionen?",[1325,23727],{},"\nAntwort: Unzulassig sind User_Alias ADMINS = max, anna, sowie Cmnd_Alias EDIT =",[1325,23730],{},"\n\u002Fusr\u002Fbin\u002Fvim \u002Fusr\u002Fbin\u002Fnano und Cmnd_Alias DANG = \u002Fbin\u002Frm, \u002Fbin\u002Fdd,.",[1325,23733],{},"\n3. Wo fehlen notwendige Trennzeichen oder Operatoren?",[1325,23736],{},"\nAntwort: Es fehlt ein Komma zwischen vim und nano, ein Komma vor !DANG und ein",[1325,23739],{},"\nDoppelpunkt nach PASSWD. Genau solche kleinen Zeichen sind in sudoers besonders wichtig.",[898,23742,23743,23744,23746,23747,23749,23750,23752,23753,23755,23756,23758,23759,23761,23762,23764,23765,23767],{},"Teil 2: Tricky Syntax",[1325,23745],{},"\n4. Ist folgende Zeile gultig oder fehlerhaft? Begrunde.",[1325,23748],{},"\nDefaults:anna ! requiretty",[1325,23751],{},"\nAntwort: Sie ist fehlerhaft, weil zwischen ! und requiretty kein Leerzeichen stehen darf. Korrekt",[1325,23754],{},"\nware: Defaults:anna !requiretty.",[1325,23757],{},"\n5. Was ist das Problem bei: ADMINS ALL=(ALL ALL) ALL",[1325,23760],{},"\nAntwort: Im Runas-Teil fehlt der korrekte Trenner zwischen Benutzer und Gruppe. Richtig ware",[1325,23763],{},"\nentweder (ALL) oder (ALL:ALL).",[1325,23766],{},"\n6. Warum ist diese Zeile syntaktisch oder logisch problematisch?",[904,23769,23771],{"className":906,"code":23770,"language":908,"meta":909,"style":909},"DEV ALL=(root) SYS, EDIT !DANG\n",[911,23772,23773],{"__ignoreMap":909},[452,23774,23775,23777,23779,23781,23783,23785,23787,23789],{"class":915,"line":916},[452,23776,23662],{"class":919},[452,23778,2759],{"class":923},[452,23780,2762],{"class":1298},[452,23782,23221],{"class":919},[452,23784,2768],{"class":1298},[452,23786,23673],{"class":923},[452,23788,23676],{"class":923},[452,23790,23791],{"class":923}," !DANG\n",[898,23793,23794,23795,23797,23798,23800],{},"Antwort: Syntaktisch fehlt das Komma vor !DANG. Logisch ist die Regel auBerdem",[1325,23796],{},"\nproblematisch, weil sie mit EDIT sehr machtige Programme erlaubt und nur einzelne Gefahren",[1325,23799],{},"\nausschlieBt.",[898,23802,23803,23804,23806,23807,23809,23810,23812,23813,23815,23816,23818,23819,23821],{},"Teil 3: Semantik trotz Syntax",[1325,23805],{},"\n7. Welche effektiven Rechte hatte max am Ende wirklich?",[1325,23808],{},"\nAntwort: Wenn alle Syntaxfehler behoben werden, hatte max durch die ADMINS-Regel im Kern",[1325,23811],{},"\nVollzugriff. Zusatzlich ware der Apache-Neustart ohne Passwort erlaubt.",[1325,23814],{},"\n8. Welche Regel wurde fur Passwortabfragen bei max gelten?",[1325,23817],{},"\nAntwort: Fur \u002Fusr\u002Fbin\u002Fsystemctl restart apache2 galt NOPASSWD, fur alle anderen Befehle",[1325,23820],{},"\nPASSWD. Also genau ein freigestellter Befehl, sonst Passwortpflicht.",[898,23823,23824,23825,23827,23828,23830,23831,23833,23834,23836,23837,23839],{},"Teil 4: Sicherheitsanalyse",[1325,23826],{},"\n9. Welche Regeln ermoglichen trotz Einschrankungen eine Root-Shell?",[1325,23829],{},"\nAntwort: Vor allem Regeln mit vim, nano oder ahnlichen interaktiven Programmen. Auch",[1325,23832],{},"\nInterpreter oder falsch eingeschrankte Werkzeuge konnen trotz scheinbarer Grenzen schnell zu",[1325,23835],{},"\neiner Root-Shell fuhren.",[1325,23838],{},"\n10. Warum ist die Kombination aus EDIT und sudo grundsatzlich kritisch?",[2652,23841,22587],{"id":23842},"seite-9-1",[898,23844,23845,23846,23848],{},"Antwort: Weil Editoren nicht nur Dateien andern, sondern oft Shell-Kommandos, Plugins oder",[1325,23847],{},"\nDateibrowser enthalten. Damit werden sie unter sudo zu sehr machtigen Werkzeugen.",[898,23850,23851,23852,23854,23855,23857,23858,23860,23861,23863,23864,23866,23867,23869,23870,23872,23873,23875],{},"Teil 5: Fehlerbehebung",[1325,23853],{},"\n11. Korrigiere folgende Zeile vollstandig: Cmnd_Alias EDIT = \u002Fusr\u002Fbin\u002Fvim \u002Fusr\u002Fbin\u002Fnano",[1325,23856],{},"\nAntwort: Korrektur: Cmnd_Alias EDIT = \u002Fusr\u002Fbin\u002Fvim, \u002Fusr\u002Fbin\u002Fnano",[1325,23859],{},"\n12. Korrigiere die Alias-Definition mit minimaler Anderung: User_Alias ADMINS = max,",[1325,23862],{},"\nanna,",[1325,23865],{},"\nAntwort: Korrektur: User_Alias ADMINS = max, anna",[1325,23868],{},"\n13. Formuliere die DEV-Regel korrekt und sicher (nur Syntax, keine",[1325,23871],{},"\nSicherheitsoptimierung).",[1325,23874],{},"\nAntwort: Syntaktisch korrekt ware: DEV ALL=(root) SYS, EDIT, !DANG",[898,23877,23878,23879,23881,23882,23884,23885,23887,23888,23890,23891,23893,23894,23896,23897,23899,23900,23902,23903,23905],{},"Teil 6: Transfer",[1325,23880],{},"\n14. Nenne zwei Grunde, warum syntaktisch korrekte sudoers-Dateien trotzdem unsicher",[1325,23883],{},"\nsein konnen.",[1325,23886],{},"\nAntwort: Erstens konnen zu breite Rechte wie ALL=(ALL) ALL vergeben sein. Zweitens konnen",[1325,23889],{},"\nscheinbar harmlose Programme wie Editoren, Pager oder Interpreter indirekt eine",[1325,23892],{},"\nRechteausweitung erlauben.",[1325,23895],{},"\n15. Erklare, warum visudo zwar notwendig, aber nicht ausreichend fur Sicherheit ist.",[1325,23898],{},"\nAntwort: visudo pruft nur die Syntax, nicht die fachliche Sicherheit der Regeln. Eine Datei kann",[1325,23901],{},"\nalso formal korrekt sein und trotzdem gefahrliche oder zu weitreichende Berechtigungen",[1325,23904],{},"\nenthalten.",[257,23907,23909],{"id":23908},"technikervorbereitungpdf","TechnikerVorbereitung.pdf",[898,23911,23912],{},"Quelle: TechnikerVorbereitung.pdf - 5 Seite(n)",[2652,23914,21067],{"id":23915},"seite-1-2",[898,23917,23918,23919,23921,23922,23924],{},"Aufgabe 1: System 11 Punkte",[1325,23920],{},"\nWelcher Verzeichniszweig ist der, bei dem eine Datensicherung am wenigstens Sinn macht? 1P",[1325,23923],{},"\nKreuzen Sie die richtige Antwort an! Begründen Sie Ihre Antwort!",[898,23926,7501,23927,23929],{},[1325,23928],{},"\n\u002Fetc",[904,23931,23933],{"className":906,"code":23932,"language":908,"meta":909,"style":909},"x \u002Fproc\n",[911,23934,23935],{"__ignoreMap":909},[452,23936,23937,23939],{"class":915,"line":916},[452,23938,7764],{"class":919},[452,23940,23941],{"class":923}," \u002Fproc\n",[898,23943,23944],{},"\u002Fvar",[898,23946,23947],{},"Werfen Sie einen Blick auf die folgende Ausgabe von top und beantworten Sie die folgenden Fragen:",[898,23949,23950,23951,23953],{},"Welche Prozesse wurden vom Benutzer carol gestartet? 1P",[1325,23952],{},"\nNur einer: top. (887)",[898,23955,23956,23957,23959,23960,23962],{},"Welches virtuelle Verzeichnis von \u002Fproc sollten Sie aufrufen, um nach Daten des Befehls top zu suchen?",[1325,23958],{},"\n2P",[1325,23961],{},"\n\u002Fproc\u002F887",[898,23964,23965],{},"Welcher Prozess wurde als erstes gestartet? Woher wissen Sie das? 2P",[898,23967,23968],{},"systemd, weil es die PID 1 hat.",[898,23970,23971,23972,23974,23975,23977,23978,23980,23981,23983,23984,23986,23987,23989],{},"Wie könnte der Befehl telinit verwendet werden, um das System neu zu starten? 2P",[1325,23973],{},"\nDer Befehl telinit 6 wechselt zu Runlevel 6, d.h. das System wird neu gestartet.",[1325,23976],{},"\nWas passiert mit den Diensten, die sich auf die Datei \u002Fetc\u002Frc1.d\u002FK90network beziehen, wenn das System",[1325,23979],{},"\nRunlevel 1 aktiviert? 1P",[1325,23982],{},"\nAufgrund des Buchstabens K am Anfang des Dateinamens werden die entsprechenden Dienste beendet.",[1325,23985],{},"\nWie könnte ein Benutzer mit dem Befehl systemctl überprüfen, ob die Unit sshd.service läuft?",[1325,23988],{},"\nMit dem Befehl systemctl status sshd.service oder systemctl is-active sshd.service. 1P",[898,23991,23992,23993,23995,23996,23998],{},"Basierend auf der Nutzung von systemd: Welcher Befehl muss ausgeführt werden, um die Aktivierung von",[1325,23994],{},"\nsshd.service während der Systeminitialisierung zu ermöglichen? 1P",[1325,23997],{},"\nDer Befehl systemctl enable sshd.service wird von root ausgeführt.",[2652,24000,21207],{"id":24001},"seite-2-2",[898,24003,24004,24005,24007],{},"Aufgabe 2: Shell-Umgebung 7 Punkte",[1325,24006],{},"\nGeben Sie im Folgenden die entsprechenden Befehle für die angegebene Aufgabe an.",[898,24009,24010],{},"Erzeugen Sie eine lokale Variable namens mammal und weisen Sie ihr den Wert gnu zu: 1P",[904,24012,24014],{"className":906,"code":24013,"language":908,"meta":909,"style":909},"mammal=\"gnu\"\n\n",[911,24015,24016],{"__ignoreMap":909},[452,24017,24018,24021,24023],{"class":915,"line":916},[452,24019,24020],{"class":1298},"mammal",[452,24022,1862],{"class":1473},[452,24024,24025],{"class":923},"\"gnu\"\n",[898,24027,24028,24029,24031,24032,24034,24035,24037],{},"Die Variable var_sub soll einen String in folgendem Format enthalten: 1P",[1325,24030],{},"\nThe value of mammal is gnu",[1325,24033],{},"\nGeben Sie die Befehlszeile an die, die Variable var_sub auf diesen Wert setzt. Verwenden Sie dabei die",[1325,24036],{},"\nVariable mammal, um den String gnu zu erhalten.",[904,24039,24041],{"className":906,"code":24040,"language":908,"meta":909,"style":909},"var_sub=\"The value of mammal is $mammal\" oder var_sub=\"The value of mammal is “ $mammal\n\n",[911,24042,24043],{"__ignoreMap":909},[452,24044,24045,24048,24050,24053,24056,24058,24060,24063],{"class":915,"line":916},[452,24046,24047],{"class":1298},"var_sub",[452,24049,1862],{"class":1473},[452,24051,24052],{"class":923},"\"The value of mammal is ",[452,24054,24055],{"class":1298},"$mammal",[452,24057,1876],{"class":923},[452,24059,5276],{"class":919},[452,24061,24062],{"class":923}," var_sub=\"The value of mammal is “ ",[452,24064,24065],{"class":1298},"$mammal\n",[898,24067,24068,24069,24071],{},"Machen Sie mammal zu einer Umgebungsvariablen: 1P",[1325,24070],{},"\nexport mammal",[898,24073,24074,24075,24077],{},"Suchen Sie mit grep nach dieser Umgebungsvariable: 1P",[1325,24076],{},"\nset | grep mammal oder env | grep mammal",[898,24079,24080],{},"Sie sind als user2 eingeloggt. Erstellen Sie ein Verzeichnis namens bin in Ihrem Homeverzeichnis. 1P",[904,24082,24084],{"className":906,"code":24083,"language":908,"meta":909,"style":909},"mkdir ~\u002Fbin oder mkdir \u002Fhome\u002Fuser2\u002Fbin oder mkdir $HOME\u002Fbin\n\n",[911,24085,24086],{"__ignoreMap":909},[452,24087,24088,24090,24093,24095,24098,24101,24103,24105,24108],{"class":915,"line":916},[452,24089,8687],{"class":919},[452,24091,24092],{"class":923}," ~\u002Fbin",[452,24094,5276],{"class":923},[452,24096,24097],{"class":923}," mkdir",[452,24099,24100],{"class":923}," \u002Fhome\u002Fuser2\u002Fbin",[452,24102,5276],{"class":923},[452,24104,24097],{"class":923},[452,24106,24107],{"class":1298}," $HOME",[452,24109,24110],{"class":923},"\u002Fbin\n",[898,24112,24113,24114,24116],{},"Das gerade angelegte Verzeichnis soll das Verzeichnis werden, in dem sie als erstes nach ausführbaren",[1325,24115],{},"\nDateien suchen. Geben Sie den Befehl, der die entsprechende Umgebungsvariable anpasst. 1P",[904,24118,24120],{"className":906,"code":24119,"language":908,"meta":909,"style":909},"PATH=\"$HOME\u002Fbin:$PATH\" PATH=~\u002Fbin:$PATH oder PATH=\u002Fhome\u002Fuser2\u002Fbin:$PATH\n\n",[911,24121,24122],{"__ignoreMap":909},[452,24123,24124,24126,24128,24130,24132,24135,24137,24139,24141,24143,24146,24149,24152,24155],{"class":915,"line":916},[452,24125,10951],{"class":1298},[452,24127,1862],{"class":1473},[452,24129,1876],{"class":923},[452,24131,8784],{"class":1298},[452,24133,24134],{"class":923},"\u002Fbin:",[452,24136,8792],{"class":1298},[452,24138,1876],{"class":923},[452,24140,8978],{"class":1298},[452,24142,1862],{"class":1473},[452,24144,24145],{"class":923},"~\u002Fbin:",[452,24147,24148],{"class":1298},"$PATH ",[452,24150,24151],{"class":919},"oder",[452,24153,24154],{"class":923}," PATH=\u002Fhome\u002Fuser2\u002Fbin:",[452,24156,24157],{"class":1298},"$PATH\n",[898,24159,24160,24161,24163],{},"Geben Sie eine if-Anweisung an, die Sie in ~\u002F.profile einfügen, um sicherzustellen, dass der Wert von der",[1325,24162],{},"\ngerade veränderten Umgebungsvariable über Neustarts hinweg unverändert bleibt. 1P",[904,24165,24167],{"className":906,"code":24166,"language":908,"meta":909,"style":909},"if [ -d \"$HOME\u002Fbin\" ] ; then\nPATH=\"$HOME\u002Fbin:$PATH\"\nfi\n\n",[911,24168,24169,24190,24206],{"__ignoreMap":909},[452,24170,24171,24173,24175,24178,24180,24182,24185,24188],{"class":915,"line":916},[452,24172,2426],{"class":1473},[452,24174,2429],{"class":1298},[452,24176,24177],{"class":1473},"-d",[452,24179,1870],{"class":923},[452,24181,8784],{"class":1298},[452,24183,24184],{"class":923},"\u002Fbin\"",[452,24186,24187],{"class":1298}," ] ; ",[452,24189,2444],{"class":1473},[452,24191,24192,24194,24196,24198,24200,24202,24204],{"class":915,"line":1190},[452,24193,10951],{"class":1298},[452,24195,1862],{"class":1473},[452,24197,1876],{"class":923},[452,24199,8784],{"class":1298},[452,24201,24134],{"class":923},[452,24203,8792],{"class":1298},[452,24205,1896],{"class":923},[452,24207,24208],{"class":915,"line":1197},[452,24209,2484],{"class":1473},[2652,24211,21470],{"id":24212},"seite-3-2",[898,24214,24215],{},"Aufgabe 3: Befehle 17 Punkte",[898,24217,24218,24219,24221],{},"Legen Sie mit genau einem Befehlsaufruf 5 nummerierte Dateien mit dem Präfix games an (games1,",[1325,24220],{},"\ngames2,…). 1,5 P",[904,24223,24225],{"className":906,"code":24224,"language":908,"meta":909,"style":909},"touch games{1..5}\n\n",[911,24226,24227],{"__ignoreMap":909},[452,24228,24229,24231],{"class":915,"line":916},[452,24230,2493],{"class":919},[452,24232,24233],{"class":923}," games{1..5}\n",[898,24235,24236],{},"Löschen Sie mit genau einem Befehlsaufruf die gerade erstellten 5 Dateien. 1,5 P",[904,24238,24240],{"className":906,"code":24239,"language":908,"meta":909,"style":909},"rm games? Oder rm games[12345]\n\n",[911,24241,24242],{"__ignoreMap":909},[452,24243,24244,24246,24249,24252,24254],{"class":915,"line":916},[452,24245,12545],{"class":919},[452,24247,24248],{"class":923}," games?",[452,24250,24251],{"class":923}," Oder",[452,24253,3560],{"class":923},[452,24255,24256],{"class":923}," games[12345]\n",[898,24258,24259,24260,24262],{},"Entfernen Sie die gesamten Verzeichnisbäume unterhalb der Verzeichnisse, die mit Test_Verzeichnis begin-",[1325,24261],{},"\nnen (z.B. Test_Verzeichnis1 oder auch Text_Verzeichnis_x uvm.) mit nur einem Befehl. 1P",[904,24264,24266],{"className":906,"code":24265,"language":908,"meta":909,"style":909},"rm -r Test_Verzeichnis*\n\n",[911,24267,24268],{"__ignoreMap":909},[452,24269,24270,24272,24274,24277],{"class":915,"line":916},[452,24271,12545],{"class":919},[452,24273,1614],{"class":975},[452,24275,24276],{"class":923}," Test_Verzeichnis",[452,24278,23144],{"class":975},[898,24280,24281],{},"Piping ist eine Möglichkeit zwei Befehle miteinander interagieren zu lassen. Erklären Sie das Prinzip. 2P",[898,24283,24284],{},"Piping sendet stdout von einem Befehl als stdin des anderen Befehls.",[898,24286,24287],{},"Erklären Sie folgende Befehlszeile möglichst genau: 2P",[904,24289,24291],{"className":906,"code":24290,"language":908,"meta":909,"style":909},"ls -l | head | wc -w\n\nls -l gibt langform des Verzeichnislisting an head weiter, der die ersten 10 Zeilen nimmt und an wc gibt, der\n",[911,24292,24293,24311,24315],{"__ignoreMap":909},[452,24294,24295,24297,24299,24301,24303,24305,24308],{"class":915,"line":916},[452,24296,338],{"class":919},[452,24298,10434],{"class":975},[452,24300,1474],{"class":1473},[452,24302,1502],{"class":919},[452,24304,1474],{"class":1473},[452,24306,24307],{"class":919}," wc",[452,24309,24310],{"class":975}," -w\n",[452,24312,24313],{"class":915,"line":1190},[452,24314,1194],{"emptyLinePlaceholder":1193},[452,24316,24317,24319,24321,24324,24327,24330,24333,24336,24338,24341,24343,24345,24348,24350,24353,24356,24358,24360,24362,24365],{"class":915,"line":1197},[452,24318,338],{"class":919},[452,24320,10434],{"class":975},[452,24322,24323],{"class":923}," gibt",[452,24325,24326],{"class":923}," langform",[452,24328,24329],{"class":923}," des",[452,24331,24332],{"class":923}," Verzeichnislisting",[452,24334,24335],{"class":923}," an",[452,24337,1502],{"class":923},[452,24339,24340],{"class":923}," weiter,",[452,24342,13889],{"class":923},[452,24344,13903],{"class":923},[452,24346,24347],{"class":923}," ersten",[452,24349,9432],{"class":975},[452,24351,24352],{"class":923}," Zeilen",[452,24354,24355],{"class":923}," nimmt",[452,24357,927],{"class":923},[452,24359,24335],{"class":923},[452,24361,24307],{"class":923},[452,24363,24364],{"class":923}," gibt,",[452,24366,24367],{"class":923}," der\n",[898,24369,24370],{},"Wörter zählt.",[898,24372,24373],{},"Suchen Sie im Verzeichnisbaum nach allen Dateien, die mit einer Ziffer enden. 2P",[904,24375,24377],{"className":906,"code":24376,"language":908,"meta":909,"style":909},"find ~ -name “*[0-9]“ -type f\noder ls | find -name “*[0-9]“\n\n",[911,24378,24379,24399],{"__ignoreMap":909},[452,24380,24381,24383,24385,24387,24390,24392,24395,24397],{"class":915,"line":916},[452,24382,3264],{"class":919},[452,24384,3583],{"class":923},[452,24386,3482],{"class":975},[452,24388,24389],{"class":923}," “",[452,24391,429],{"class":975},[452,24393,24394],{"class":923},"[0-9]“",[452,24396,3488],{"class":975},[452,24398,3491],{"class":923},[452,24400,24401,24403,24405,24407,24410,24412,24414,24416],{"class":915,"line":1190},[452,24402,24151],{"class":919},[452,24404,17618],{"class":923},[452,24406,1474],{"class":1473},[452,24408,24409],{"class":919}," find",[452,24411,3482],{"class":975},[452,24413,24389],{"class":923},[452,24415,429],{"class":975},[452,24417,24418],{"class":923},"[0-9]“\n",[898,24420,24287],{},[904,24422,24424],{"className":906,"code":24423,"language":908,"meta":909,"style":909},"sort \u002Fetc 2 > \u002Fdev\u002Fnull\n\n",[911,24425,24426],{"__ignoreMap":909},[452,24427,24428,24431,24434,24436,24439],{"class":915,"line":916},[452,24429,24430],{"class":919},"sort",[452,24432,24433],{"class":923}," \u002Fetc",[452,24435,13705],{"class":975},[452,24437,24438],{"class":1473}," >",[452,24440,24441],{"class":923}," \u002Fdev\u002Fnull\n",[898,24443,24444],{},"Fehlerausgabe (2) wird in die Mülltonne gelenkt",[898,24446,24447],{},"Hängen Sie die letzten 9 Zeilen der Datei contents.txt, an die Datei dump.txt an 2P",[904,24449,24451],{"className":906,"code":24450,"language":908,"meta":909,"style":909},"tail -n 9 contents.txt » dump.txt\n\n",[911,24452,24453],{"__ignoreMap":909},[452,24454,24455,24458,24460,24463,24466,24469],{"class":915,"line":916},[452,24456,24457],{"class":919},"tail",[452,24459,4656],{"class":975},[452,24461,24462],{"class":975}," 9",[452,24464,24465],{"class":923}," contents.txt",[452,24467,24468],{"class":923}," »",[452,24470,24471],{"class":923}," dump.txt\n",[898,24473,24474,24475,24477],{},"Schreiben Sie einen Befehl, der im aktuellen Verzeichnis nach Dateien mit der Endung .c sucht, in denen im",[1325,24476],{},"\nDateiinhalt die Zeichenfolge „apple“ enthalten ist. (Ignorieren Sie dabei Groß- und Kleinschreibung) 3P",[904,24479,24481],{"className":906,"code":24480,"language":908,"meta":909,"style":909},"find .\u002F -name “*.c“ | grep -i “apple“\n\n",[911,24482,24483],{"__ignoreMap":909},[452,24484,24485,24487,24490,24492,24494,24496,24499,24501,24503,24505],{"class":915,"line":916},[452,24486,3264],{"class":919},[452,24488,24489],{"class":923}," .\u002F",[452,24491,3482],{"class":975},[452,24493,24389],{"class":923},[452,24495,429],{"class":975},[452,24497,24498],{"class":923},".c“",[452,24500,1474],{"class":1473},[452,24502,1647],{"class":919},[452,24504,3822],{"class":975},[452,24506,24507],{"class":923}," “apple“\n",[2652,24509,21624],{"id":24510},"seite-4-2",[898,24512,24513],{},"Aufgabe 4: Benutzerverwaltung 8 Punkte",[898,24515,24516],{},"Gegeben ist die folgende Ausgabe. Beantworten Sie folgende Fragen:",[898,24518,24519,24520,24522],{},"Wie lauten die Benutzer-ID (UID) und die Gruppen-ID (GID) von root und catherine? 1P",[1325,24521],{},"\nDie UID und GID von root sind 0 und 0, während die UID und GID von catherine 1030 und 1025 sind.",[898,24524,24525,24526,24528],{},"Wie lautet der Name der primären Gruppe von kevin? Geben Sie weitere Mitglieder der Gruppe an. 1,5 P",[1325,24527],{},"\nDer Gruppenname lautet db-admin. Auch emma und grace sind in dieser Gruppe.",[898,24530,24531],{},"Welche Shell ist für mail eingestellt? Warum ist die Shell für Benutzer mail auf diesen Wert gesetzt? 1,5 P",[898,24533,24534,24535,24537,24538,24540,24541,24543],{},"mail ist ein Systembenutzerkonto und seine Shell ist \u002Fsbin\u002Fnologin. Tatsächlich werden Systembenutzerkon-",[1325,24536],{},"\nten wie mail, ftp, news und daemon für administrative Aufgaben verwendet und daher sollte die normale An-",[1325,24539],{},"\nmeldung für diese Konten verhindert werden. Aus diesem Grund wird die Shell normalerweise auf \u002Fsbin\u002Fnolo-",[1325,24542],{},"\ngin oder \u002Fbin\u002Ffalse gesetzt.",[2652,24545,21751],{"id":24546},"seite-5-2",[898,24548,24549],{},"Fortsetzung Aufgabe 4:",[898,24551,24552,24553,24555,24556,24558],{},"Geben Sie die Mitglieder der Gruppe app-developer an! Welche davon sind Gruppenadministratoren und",[1325,24554],{},"\nwelche sind normale Mitglieder? 1P",[1325,24557],{},"\nDie Mitglieder sind catherine, dave und christian — alle sind ordentliche Mitglieder.",[898,24560,24561,24562,24564],{},"Welche IDs werden per Konvention den Systemkonten und welche den normalen Benutzern zugewiesen?",[1325,24563],{},"\nWelche ID hat root? 2P",[898,24566,24567,24568,24570,24571,24573],{},"Systemkonten haben in der Regel UIDs unter 100 oder zwischen 500 und 1000, während normale Benutzer",[1325,24569],{},"\nUIDs haben, die bei 1000 beginnen, obwohl einige Altsysteme die Nummerierung bei 500 beginnen können.",[1325,24572],{},"\nDer Benutzer root hat die UID 0.",[898,24575,24576],{},"Ihr System verwendet Shadow-Passwörter. Was heisst das? 1P",[898,24578,24579,24580,24582],{},"Wenn Shadow-Passwörter verwendet werden, enthält das zweite Feld in \u002Fetc\u002Fpasswd für jedes Benutzerkon-",[1325,24581],{},"\nto das Zeichen x, da die verschlüsselten Benutzerpasswörter in \u002Fetc\u002Fshadow gespeichert werden.",[257,24584,24586],{"id":24585},"technikervorbereitungawk2lsgpdf","TechnikerVorbereitungawk2Lsg.pdf",[898,24588,24589],{},"Quelle: TechnikerVorbereitungawk2Lsg.pdf - 4 Seite(n)",[2652,24591,21067],{"id":24592},"seite-1-3",[898,24594,24595],{},"Wiederholung awk",[9593,24597,24598,24607,24622],{},[995,24599,24600,24601,24603,24604,24606],{},"Was ist AWK und wofür wird es verwendet?",[1325,24602],{},"\nAWK ist eine Skriptsprache zur Textverarbeitung, die besonders für das Filtern, Analysieren und Formatieren",[1325,24605],{},"\nvon strukturierten Daten (z. B. Tabellen, Logfiles) verwendet wird.",[995,24608,24609,24610,24612,24613,24615,24616,24618,24619,24621],{},"Wie ist ein AWK-Programm grundsätzlich aufgebaut?",[1325,24611],{},"\nSchema:",[1325,24614],{},"\npattern { action }",[1325,24617],{},"\n• pattern: Bedingung (wann wird etwas ausgeführt)",[1325,24620],{},"\n• action: Anweisung (was wird gemacht)",[995,24623,24624],{},"Was bewirkt folgender Befehl?",[904,24626,24628],{"className":906,"code":24627,"language":908,"meta":909,"style":909},"awk '{print $1}' datei.txt\n\n",[911,24629,24630],{"__ignoreMap":909},[452,24631,24632,24634,24637],{"class":915,"line":916},[452,24633,5247],{"class":919},[452,24635,24636],{"class":923}," '{print $1}'",[452,24638,3780],{"class":923},[898,24640,24641],{},"Gibt die erste Spalte jeder Zeile aus.",[9593,24643,24644],{"start":1204},[995,24645,24646],{},"Bedeutung von $0, $1, $NF?",[898,24648,24649,24650,24652,24653,24655],{},"• $0 → ganze Zeile",[1325,24651],{},"\n• $1 → erstes Feld",[1325,24654],{},"\n• $NF → letztes Feld",[9593,24657,24658],{"start":1209},[995,24659,24660],{},"Was macht dieser Ausdruck?",[904,24662,24664],{"className":906,"code":24663,"language":908,"meta":909,"style":909},"awk '$3 > 100'\n\n",[911,24665,24666],{"__ignoreMap":909},[452,24667,24668,24670],{"class":915,"line":916},[452,24669,5247],{"class":919},[452,24671,24672],{"class":923}," '$3 > 100'\n",[898,24674,24675],{},"Gibt alle Zeilen aus, bei denen das 3. Feld größer als 100 ist.",[9593,24677,24678],{"start":1223},[995,24679,24680],{},"Wie filtert man nach einem bestimmten Wort?",[904,24682,24684],{"className":906,"code":24683,"language":908,"meta":909,"style":909},"awk '\u002FFehler\u002F'\n\n",[911,24685,24686],{"__ignoreMap":909},[452,24687,24688,24690],{"class":915,"line":916},[452,24689,5247],{"class":919},[452,24691,24692],{"class":923}," '\u002FFehler\u002F'\n",[898,24694,24695],{},"Zeigt alle Zeilen, die „Fehler“ enthalte",[9593,24697,24698],{"start":1228},[995,24699,24700],{},"Was macht folgendes Skript?",[904,24702,24704],{"className":906,"code":24703,"language":908,"meta":909,"style":909},"awk '{sum += $2} END {print sum}'\n\n",[911,24705,24706],{"__ignoreMap":909},[452,24707,24708,24710],{"class":915,"line":916},[452,24709,5247],{"class":919},[452,24711,24712],{"class":923}," '{sum += $2} END {print sum}'\n",[898,24714,24715],{},"Summiert die zweite Spalte und gibt das Ergebnis am Ende aus.",[898,24717,24718],{},"Seite 1 von 4",[2652,24720,21207],{"id":24721},"seite-2-3",[9593,24723,24724],{"start":1234},[995,24725,24726],{},"Unterschied zwischen BEGIN und END?",[898,24728,24729,24730,24732,24733,24735],{},"• BEGIN → wird vor der Verarbeitung ausgeführt",[1325,24731],{},"\n• END → wird nach der Verarbeitung ausgeführt",[1325,24734],{},"\n9. Wie ändert man das Feldtrennzeichen?",[904,24737,24739],{"className":906,"code":24738,"language":908,"meta":909,"style":909},"awk -F \":\" '{print $1}'\n\n",[911,24740,24741],{"__ignoreMap":909},[452,24742,24743,24745,24747,24750],{"class":915,"line":916},[452,24744,5247],{"class":919},[452,24746,6240],{"class":975},[452,24748,24749],{"class":923}," \":\"",[452,24751,24752],{"class":923}," '{print $1}'\n",[898,24754,24755],{},"Trennt Felder anhand von : statt Leerzeichen.",[9593,24757,24758],{"start":1253},[995,24759,24760],{},"Was macht dieses Beispiel?",[904,24762,24764],{"className":906,"code":24763,"language":908,"meta":909,"style":909},"awk '{if ($2 > 50) print $1, $2}'\n\nGibt nur Zeilen aus, bei denen Spalte 2 > 50 ist, und zeigt Spalte 1 und 2.\n\n",[911,24765,24766,24773,24777],{"__ignoreMap":909},[452,24767,24768,24770],{"class":915,"line":916},[452,24769,5247],{"class":919},[452,24771,24772],{"class":923}," '{if ($2 > 50) print $1, $2}'\n",[452,24774,24775],{"class":915,"line":1190},[452,24776,1194],{"emptyLinePlaceholder":1193},[452,24778,24779,24782,24785,24787,24790,24793,24796,24799,24801,24803,24806,24809,24811,24814,24816,24818,24820],{"class":915,"line":1197},[452,24780,24781],{"class":919},"Gibt",[452,24783,24784],{"class":923}," nur",[452,24786,24352],{"class":923},[452,24788,24789],{"class":923}," aus,",[452,24791,24792],{"class":923}," bei",[452,24794,24795],{"class":923}," denen",[452,24797,24798],{"class":923}," Spalte",[452,24800,13705],{"class":975},[452,24802,24438],{"class":1473},[452,24804,24805],{"class":975}," 50",[452,24807,24808],{"class":923}," ist,",[452,24810,927],{"class":923},[452,24812,24813],{"class":923}," zeigt",[452,24815,24798],{"class":923},[452,24817,13461],{"class":975},[452,24819,927],{"class":923},[452,24821,24822],{"class":923}," 2.\n",[9593,24824,24825],{"start":1258},[995,24826,24827],{},"Wie zählt man die Anzahl der Zeilen?",[904,24829,24831],{"className":906,"code":24830,"language":908,"meta":909,"style":909},"awk 'END {print NR}'\n\nNR = Number of Records (Zeilenanzahl)\n\n",[911,24832,24833,24840,24844],{"__ignoreMap":909},[452,24834,24835,24837],{"class":915,"line":916},[452,24836,5247],{"class":919},[452,24838,24839],{"class":923}," 'END {print NR}'\n",[452,24841,24842],{"class":915,"line":1190},[452,24843,1194],{"emptyLinePlaceholder":1193},[452,24845,24846,24848,24850,24853,24856,24859],{"class":915,"line":1197},[452,24847,5400],{"class":919},[452,24849,6558],{"class":923},[452,24851,24852],{"class":923}," Number",[452,24854,24855],{"class":923}," of",[452,24857,24858],{"class":923}," Records",[452,24860,24861],{"class":1298}," (Zeilenanzahl)\n",[9593,24863,24864],{"start":1264},[995,24865,24866],{},"Wie gibt man nur eindeutige Werte aus?",[904,24868,24870],{"className":906,"code":24869,"language":908,"meta":909,"style":909},"awk '!seen[$1]++'\n\n",[911,24871,24872],{"__ignoreMap":909},[452,24873,24874,24876],{"class":915,"line":916},[452,24875,5247],{"class":919},[452,24877,24878],{"class":923}," '!seen[$1]++'\n",[898,24880,24881],{},"Gibt jede erste Spalte nur einmal aus.",[9593,24883,24884],{"start":1269},[995,24885,24886,24887,24889],{},"Aufgabe:",[1325,24888],{},"\nGegeben ist eine Datei mit Name und Punktzahl. Berechne den Durchschnitt.",[904,24891,24893],{"className":906,"code":24892,"language":908,"meta":909,"style":909},"awk '{sum += $2; count++} END {print sum\u002Fcount}'\n\n",[911,24894,24895],{"__ignoreMap":909},[452,24896,24897,24899],{"class":915,"line":916},[452,24898,5247],{"class":919},[452,24900,24901],{"class":923}," '{sum += $2; count++} END {print sum\u002Fcount}'\n",[9593,24903,24904],{"start":1558},[995,24905,24906],{},"Was ist der Unterschied zwischen AWK und grep?",[898,24908,24909,24910,24912],{},"• grep → nur Suchen",[1325,24911],{},"\n• AWK → Suchen + Verarbeiten + Berechnen",[898,24914,24915],{},"Seite 2 von 4",[2652,24917,21470],{"id":24918},"seite-3-3",[9593,24920,24921],{"start":1563},[995,24922,24923],{},"Logdateien auswerten.",[898,24925,24926],{},"Gegeben: Mehrere Logdateien in \u002Fvar\u002Flog\u002Fapp\u002F",[898,24928,24929],{},"Ziel:",[898,24931,24932],{},"• Nur Dateinamen (ohne Pfad) ausgeben",[898,24934,24935],{},"• Fehlerzeilen (ERROR) filtern",[898,24937,24938],{},"• Anzahl Fehler pro Datei berechnen",[898,24940,24941],{},"• Ergebnis gleichzeitig anzeigen und in report.txt speichern",[904,24943,24945],{"className":906,"code":24944,"language":908,"meta":909,"style":909},"for file in \u002Fvar\u002Flog\u002Fapp\u002F*.log; do\nname=$(basename \"$file\")\ncount=$(awk '\u002FERROR\u002F {c++} END {print c+0}' \"$file\")\necho \"$name: $count\"\ndone | tee report.txt\n\n",[911,24946,24947,24963,24982,25004,25019],{"__ignoreMap":909},[452,24948,24949,24951,24954,24956,24959,24961],{"class":915,"line":916},[452,24950,2108],{"class":1473},[452,24952,24953],{"class":1298}," file ",[452,24955,2114],{"class":1473},[452,24957,24958],{"class":923}," \u002Fvar\u002Flog\u002Fapp\u002F*.log",[452,24960,2120],{"class":1298},[452,24962,2123],{"class":1473},[452,24964,24965,24967,24969,24971,24973,24975,24978,24980],{"class":915,"line":1190},[452,24966,2134],{"class":1298},[452,24968,1862],{"class":1473},[452,24970,1865],{"class":1298},[452,24972,1679],{"class":919},[452,24974,1870],{"class":923},[452,24976,24977],{"class":1298},"$file",[452,24979,1876],{"class":923},[452,24981,1879],{"class":1298},[452,24983,24984,24987,24989,24991,24993,24996,24998,25000,25002],{"class":915,"line":1197},[452,24985,24986],{"class":1298},"count",[452,24988,1862],{"class":1473},[452,24990,1865],{"class":1298},[452,24992,5247],{"class":919},[452,24994,24995],{"class":923}," '\u002FERROR\u002F {c++} END {print c+0}'",[452,24997,1870],{"class":923},[452,24999,24977],{"class":1298},[452,25001,1876],{"class":923},[452,25003,1879],{"class":1298},[452,25005,25006,25008,25010,25012,25014,25017],{"class":915,"line":1204},[452,25007,1523],{"class":975},[452,25009,1870],{"class":923},[452,25011,2168],{"class":1298},[452,25013,16252],{"class":923},[452,25015,25016],{"class":1298},"$count",[452,25018,1896],{"class":923},[452,25020,25021,25023,25025,25027],{"class":915,"line":1209},[452,25022,15662],{"class":1473},[452,25024,1474],{"class":1473},[452,25026,12507],{"class":919},[452,25028,25029],{"class":923}," report.txt\n",[898,25031,25032],{},"Was wird geprüft:",[898,25034,25035],{},"• basename → entfernt Pfad",[898,25037,25038],{},"• awk → zählt Fehler",[898,25040,25041],{},"• tee → Ausgabe + Speicherung gleichzeitig",[9593,25043,25044],{"start":1563},[995,25045,25046],{},"CSV analysieren + bedingte Ausgabe",[898,25048,25049],{},"Gegeben: Datei daten.csv",[898,25051,25052,25053,25055,25056,25058,25059,25061],{},"id,name,punkte",[1325,25054],{},"\n1,Anna,45",[1325,25057],{},"\n2,Bob,78",[1325,25060],{},"\n3,Chris,30",[898,25063,24929],{},[898,25065,25066,25067,25069,25070,25072],{},"• Nur Datensätze mit Punkte > 50",[1325,25068],{},"\n• Ausgabeformat: Dateiname: Name (Punkte)",[1325,25071],{},"\n• Ergebnis in Datei und Konsole",[898,25074,25075],{},"Seite 3 von 4",[2652,25077,21624],{"id":25078},"seite-4-3",[898,25080,25081],{},"Lösung:",[904,25083,25085],{"className":906,"code":25084,"language":908,"meta":909,"style":909},"file=\"daten.csv\"\nawk -F, '$3 > 50 {print $2 \" (\" $3 \")\"}' \"$file\" \\\n| sed \"s\u002F^\u002F$(basename \"$file\"): \u002F\" \\\n| tee output.txt\n\n",[911,25086,25087,25097,25116,25136],{"__ignoreMap":909},[452,25088,25089,25092,25094],{"class":915,"line":916},[452,25090,25091],{"class":1298},"file",[452,25093,1862],{"class":1473},[452,25095,25096],{"class":923},"\"daten.csv\"\n",[452,25098,25099,25101,25104,25107,25109,25111,25113],{"class":915,"line":1190},[452,25100,5247],{"class":919},[452,25102,25103],{"class":975}," -F,",[452,25105,25106],{"class":923}," '$3 > 50 {print $2 \" (\" $3 \")\"}'",[452,25108,1870],{"class":923},[452,25110,24977],{"class":1298},[452,25112,1876],{"class":923},[452,25114,25115],{"class":975}," \\\n",[452,25117,25118,25120,25122,25125,25127,25129,25131,25134],{"class":915,"line":1197},[452,25119,13197],{"class":1473},[452,25121,5122],{"class":919},[452,25123,25124],{"class":923}," \"s\u002F^\u002F$(",[452,25126,1679],{"class":919},[452,25128,1870],{"class":923},[452,25130,24977],{"class":1298},[452,25132,25133],{"class":923},"\"): \u002F\"",[452,25135,25115],{"class":975},[452,25137,25138,25140,25142],{"class":915,"line":1204},[452,25139,13197],{"class":1473},[452,25141,12507],{"class":919},[452,25143,25144],{"class":923}," output.txt\n",[9593,25146,25147],{"start":1586},[995,25148,25149],{},"Mehrere Dateien + Summenbildung",[898,25151,25152],{},"👉 Ziel:",[898,25154,25155],{},"• Für jede Datei die Summe der 2. Spalte",[898,25157,25158],{},"• Nur Dateiname anzeigen",[898,25160,25161],{},"• Gesamtsumme aller Dateien am Ende",[898,25163,25081],{},[904,25165,25167],{"className":906,"code":25166,"language":908,"meta":909,"style":909},"total=0\n\nfor f in *.txt; do\nname=$(basename \"$f\")\nsum=$(awk '{s += $2} END {print s+0}' \"$f\")\necho \"$name: $sum\"\ntotal=$((total + sum))\ndone | tee result.txt\n\necho \"TOTAL: $total\" | tee -a result.txt\n\n",[911,25168,25169,25178,25182,25196,25214,25236,25251,25268,25279,25283],{"__ignoreMap":909},[452,25170,25171,25174,25176],{"class":915,"line":916},[452,25172,25173],{"class":1298},"total",[452,25175,1862],{"class":1473},[452,25177,13509],{"class":923},[452,25179,25180],{"class":915,"line":1190},[452,25181,1194],{"emptyLinePlaceholder":1193},[452,25183,25184,25186,25188,25190,25192,25194],{"class":915,"line":1197},[452,25185,2108],{"class":1473},[452,25187,2111],{"class":1298},[452,25189,2114],{"class":1473},[452,25191,15592],{"class":923},[452,25193,2120],{"class":1298},[452,25195,2123],{"class":1473},[452,25197,25198,25200,25202,25204,25206,25208,25210,25212],{"class":915,"line":1204},[452,25199,2134],{"class":1298},[452,25201,1862],{"class":1473},[452,25203,1865],{"class":1298},[452,25205,1679],{"class":919},[452,25207,1870],{"class":923},[452,25209,2145],{"class":1298},[452,25211,1876],{"class":923},[452,25213,1879],{"class":1298},[452,25215,25216,25219,25221,25223,25225,25228,25230,25232,25234],{"class":915,"line":1209},[452,25217,25218],{"class":1298},"sum",[452,25220,1862],{"class":1473},[452,25222,1865],{"class":1298},[452,25224,5247],{"class":919},[452,25226,25227],{"class":923}," '{s += $2} END {print s+0}'",[452,25229,1870],{"class":923},[452,25231,2145],{"class":1298},[452,25233,1876],{"class":923},[452,25235,1879],{"class":1298},[452,25237,25238,25240,25242,25244,25246,25249],{"class":915,"line":1223},[452,25239,1523],{"class":975},[452,25241,1870],{"class":923},[452,25243,2168],{"class":1298},[452,25245,16252],{"class":923},[452,25247,25248],{"class":1298},"$sum",[452,25250,1896],{"class":923},[452,25252,25253,25255,25257,25259,25261,25263,25266],{"class":915,"line":1228},[452,25254,25173],{"class":1298},[452,25256,1862],{"class":1473},[452,25258,13393],{"class":1298},[452,25260,25173],{"class":919},[452,25262,13093],{"class":923},[452,25264,25265],{"class":923}," sum",[452,25267,13402],{"class":1298},[452,25269,25270,25272,25274,25276],{"class":915,"line":1234},[452,25271,15662],{"class":1473},[452,25273,1474],{"class":1473},[452,25275,12507],{"class":919},[452,25277,25278],{"class":923}," result.txt\n",[452,25280,25281],{"class":915,"line":1239},[452,25282,1194],{"emptyLinePlaceholder":1193},[452,25284,25285,25287,25290,25293,25295,25297,25299,25301],{"class":915,"line":1253},[452,25286,1523],{"class":975},[452,25288,25289],{"class":923}," \"TOTAL: ",[452,25291,25292],{"class":1298},"$total",[452,25294,1876],{"class":923},[452,25296,1474],{"class":1473},[452,25298,12507],{"class":919},[452,25300,1974],{"class":975},[452,25302,25278],{"class":923},[9593,25304,25305],{"start":1591},[995,25306,25307],{},"Analysiere folgendes:",[904,25309,25311],{"className":906,"code":25310,"language":908,"meta":909,"style":909},"for f in *.txt; do\nbase=$(basename \"$f\" .txt)\nawk 'NF \u003C 3' \"$f\" | tee \"${base}_errors.txt\"\ndone\n\n",[911,25312,25313,25327,25348,25372],{"__ignoreMap":909},[452,25314,25315,25317,25319,25321,25323,25325],{"class":915,"line":916},[452,25316,2108],{"class":1473},[452,25318,2111],{"class":1298},[452,25320,2114],{"class":1473},[452,25322,15592],{"class":923},[452,25324,2120],{"class":1298},[452,25326,2123],{"class":1473},[452,25328,25329,25332,25334,25336,25338,25340,25342,25344,25346],{"class":915,"line":1190},[452,25330,25331],{"class":1298},"base",[452,25333,1862],{"class":1473},[452,25335,1865],{"class":1298},[452,25337,1679],{"class":919},[452,25339,1870],{"class":923},[452,25341,2145],{"class":1298},[452,25343,1876],{"class":923},[452,25345,2044],{"class":923},[452,25347,1879],{"class":1298},[452,25349,25350,25352,25355,25357,25359,25361,25363,25365,25367,25369],{"class":915,"line":1197},[452,25351,5247],{"class":919},[452,25353,25354],{"class":923}," 'NF \u003C 3'",[452,25356,1870],{"class":923},[452,25358,2145],{"class":1298},[452,25360,1876],{"class":923},[452,25362,1474],{"class":1473},[452,25364,12507],{"class":919},[452,25366,12714],{"class":923},[452,25368,25331],{"class":1298},[452,25370,25371],{"class":923},"}_errors.txt\"\n",[452,25373,25374],{"class":915,"line":1204},[452,25375,2181],{"class":1473},[898,25377,25378],{},"Seite 4 von 4",[257,25380,25382],{"id":25381},"technikervorbereitungsedlsgpdf","TechnikerVorbereitungsedLsg.pdf",[898,25384,25385],{},"Quelle: TechnikerVorbereitungsedLsg.pdf - 3 Seite(n)",[2652,25387,21067],{"id":25388},"seite-1-4",[898,25390,25391],{},"Wiederholung sed",[9593,25393,25394],{},[995,25395,25396],{},"Nur bestimmte Zeilen ändern",[898,25398,25399,25400,25402],{},"Gegeben: Datei mit Logeinträgen",[1325,25401],{},"\nErsetze „ERROR“ durch „WARNUNG“, aber nur in Zeilen 5–10",[904,25404,25406],{"className":906,"code":25405,"language":908,"meta":909,"style":909},"sed '5,10 s\u002FERROR\u002FWARNUNG\u002F' logfile.txt\n\n",[911,25407,25408],{"__ignoreMap":909},[452,25409,25410,25412,25415],{"class":915,"line":916},[452,25411,3866],{"class":919},[452,25413,25414],{"class":923}," '5,10 s\u002FERROR\u002FWARNUNG\u002F'",[452,25416,25417],{"class":923}," logfile.txt\n",[9593,25419,25420],{"start":1190},[995,25421,25422],{},"Nur erste Übereinstimmung pro Zeile ersetzen",[898,25424,25425],{},"Ersetze nur das erste Vorkommen von „foo“ in jeder Zeile",[904,25427,25429],{"className":906,"code":25428,"language":908,"meta":909,"style":909},"sed 's\u002Ffoo\u002Fbar\u002F'\n\n",[911,25430,25431],{"__ignoreMap":909},[452,25432,25433,25435],{"class":915,"line":916},[452,25434,3866],{"class":919},[452,25436,25437],{"class":923}," 's\u002Ffoo\u002Fbar\u002F'\n",[9593,25439,25440],{"start":1197},[995,25441,4073],{},[898,25443,25444],{},"Jetzt aber alle „foo“ ersetzen",[904,25446,25448],{"className":906,"code":25447,"language":908,"meta":909,"style":909},"sed 's\u002Ffoo\u002Fbar\u002Fg'\n\n",[911,25449,25450],{"__ignoreMap":909},[452,25451,25452,25454],{"class":915,"line":916},[452,25453,3866],{"class":919},[452,25455,25456],{"class":923}," 's\u002Ffoo\u002Fbar\u002Fg'\n",[9593,25458,25459],{"start":1204},[995,25460,25461],{},"Nur Zeilen anzeigen, die NICHT passen",[898,25463,25464],{},"Zeige alle Zeilen, die kein „ERROR“ enthalten",[904,25466,25468],{"className":906,"code":25467,"language":908,"meta":909,"style":909},"sed '\u002FERROR\u002Fd'\n\n",[911,25469,25470],{"__ignoreMap":909},[452,25471,25472,25474],{"class":915,"line":916},[452,25473,3866],{"class":919},[452,25475,25476],{"class":923}," '\u002FERROR\u002Fd'\n",[9593,25478,25479],{"start":1209},[995,25480,25481],{},"Bestimmte Zeilen extrahieren",[898,25483,25484],{},"Nur Zeilen 10–20 anzeigen",[904,25486,25488],{"className":906,"code":25487,"language":908,"meta":909,"style":909},"sed -n '10,20p' file.txt\n\n",[911,25489,25490],{"__ignoreMap":909},[452,25491,25492,25494,25496,25499],{"class":915,"line":916},[452,25493,3866],{"class":919},[452,25495,4656],{"class":975},[452,25497,25498],{"class":923}," '10,20p'",[452,25500,25501],{"class":923}," file.txt\n",[898,25503,25504],{},"• -n unterdrückt Standardausgabe",[898,25506,25507],{},"• p druckt explizit",[898,25509,25510],{},"•",[898,25512,25513],{},"Seite 1 von 3",[2652,25515,21207],{"id":25516},"seite-2-4",[9593,25518,25519],{"start":1223},[995,25520,25521],{},"Mehrere Befehle kombinieren",[898,25523,25524],{},"Ersetze „foo“ durch „bar“ UND lösche leere Zeilen",[904,25526,25528],{"className":906,"code":25527,"language":908,"meta":909,"style":909},"sed -e 's\u002Ffoo\u002Fbar\u002Fg' -e '\u002F^$\u002Fd'\n\n",[911,25529,25530],{"__ignoreMap":909},[452,25531,25532,25534,25536,25538,25540],{"class":915,"line":916},[452,25533,3866],{"class":919},[452,25535,1568],{"class":975},[452,25537,4960],{"class":923},[452,25539,1568],{"class":975},[452,25541,25542],{"class":923}," '\u002F^$\u002Fd'\n",[9593,25544,25545],{"start":1228},[995,25546,25547],{},"In-place bearbeiten",[898,25549,25550],{},"Datei direkt ändern",[904,25552,25554],{"className":906,"code":25553,"language":908,"meta":909,"style":909},"sed -i 's\u002Ffoo\u002Fbar\u002Fg' file.txt\n\n",[911,25555,25556],{"__ignoreMap":909},[452,25557,25558,25560,25562,25564],{"class":915,"line":916},[452,25559,3866],{"class":919},[452,25561,3822],{"class":975},[452,25563,4960],{"class":923},[452,25565,25501],{"class":923},[9593,25567,25568],{"start":1234},[995,25569,25570],{},"Mit Capture Groups arbeiten",[898,25572,25573],{},"Format ändern: Name: Max → Max (Name)",[904,25575,25577],{"className":906,"code":25576,"language":908,"meta":909,"style":909},"sed 's\u002F(.): (.)\u002F\\2 (\\1)\u002F'\n\n",[911,25578,25579],{"__ignoreMap":909},[452,25580,25581,25583],{"class":915,"line":916},[452,25582,3866],{"class":919},[452,25584,25585],{"class":923}," 's\u002F(.): (.)\u002F\\2 (\\1)\u002F'\n",[9593,25587,25588],{"start":1239},[995,25589,25590],{},"Nur bestimmte Spalte ersetzen",[898,25592,25593],{},"Ersetze nur im 2. Feld (durch Leerzeichen getrennt)",[904,25595,25597],{"className":906,"code":25596,"language":908,"meta":909,"style":909},"sed 's\u002F^([^ ]* )foo\u002F\\1bar\u002F'\n\n",[911,25598,25599],{"__ignoreMap":909},[452,25600,25601,25603],{"class":915,"line":916},[452,25602,3866],{"class":919},[452,25604,25605],{"class":923}," 's\u002F^([^ ]* )foo\u002F\\1bar\u002F'\n",[9593,25607,25608],{"start":1253},[995,25609,25610],{},"Zeilen einfügen",[898,25612,25613],{},"Füge nach jeder Zeile mit „START“ eine neue Zeile „---“ ein",[904,25615,25617],{"className":906,"code":25616,"language":908,"meta":909,"style":909},"sed '\u002FSTART\u002Fa ---'\n\n",[911,25618,25619],{"__ignoreMap":909},[452,25620,25621,25623],{"class":915,"line":916},[452,25622,3866],{"class":919},[452,25624,25625],{"class":923}," '\u002FSTART\u002Fa ---'\n",[898,25627,25628],{},"Seite 2 von 3",[2652,25630,21470],{"id":25631},"seite-3-4",[9593,25633,25634],{},[995,25635,25636],{},"Unterschied zwischen sed und AWK?",[898,25638,25639],{},"• sed → Stream Editor (Text ersetzen, löschen)",[898,25641,25642],{},"• AWK → datenorientierte Verarbeitung (Spalten, Berechnungen)",[9593,25644,25645,25651],{"start":1190},[995,25646,25647,25648,25650],{},"Was macht -n?",[1325,25649],{},"\nUnterdrückt automatische Ausgabe",[995,25652,25653],{},"Unterschied p vs. d?",[898,25655,25656],{},"p → drucken",[898,25658,25659],{},"d → löschen + nächste Zeile",[9593,25661,25662],{"start":1204},[995,25663,25664],{},"„Zeilen, die nicht mit # beginnen“ ersetzen.",[898,25666,25667],{},"Seite 3 von 3",[257,25669,25671],{"id":25670},"techniker_vorbereitung2_mit_antwortenpdf","techniker_vorbereitung2_mit_antworten.pdf",[898,25673,25674],{},"Quelle: techniker_vorbereitung2_mit_antworten.pdf - 4 Seite(n)",[2652,25676,21067],{"id":25677},"seite-1-5",[898,25679,25680,25681,25683],{},"Aufgabe 4: crontab",[1325,25682],{},"\n8 Punkte",[898,25685,25686],{},"Folgendes Shellskript clean_backup.sh liegt vor:",[904,25688,25690],{"className":906,"code":25689,"language":908,"meta":909,"style":909},"#!\u002Fbin\u002Fbash\nfind \"\u002Fbackupfolder\" -type f -mtime +5 -exec rm {} \\;\n",[911,25691,25692,25696],{"__ignoreMap":909},[452,25693,25694],{"class":915,"line":916},[452,25695,2366],{"class":1200},[452,25697,25698,25700,25703,25705,25707,25709,25712,25714,25716,25719],{"class":915,"line":1190},[452,25699,3264],{"class":919},[452,25701,25702],{"class":923}," \"\u002Fbackupfolder\"",[452,25704,3488],{"class":975},[452,25706,3515],{"class":923},[452,25708,3552],{"class":975},[452,25710,25711],{"class":923}," +5",[452,25713,3518],{"class":975},[452,25715,3560],{"class":923},[452,25717,25718],{"class":923}," {}",[452,25720,25721],{"class":975}," \\;\n",[898,25723,25724,25725,25727,25728,25730,25731,25733,25734,25736,25737,25739,25740,25742,25743,25745,25746,25748,25749,25751,25752,25754,25755,25757],{},"a) Wozu dient die erste Zeile des Skripts?",[1325,25726],{},"\nAntwort: Die erste Zeile ist der sogenannte Shebang. Sie legt fest, dass das Skript mit \u002Fbin\u002Fbash",[1325,25729],{},"\nausgeführt werden soll. Dadurch wird sichergestellt, dass die Bash als Interpreter verwendet wird und",[1325,25732],{},"\ndie Shell-Befehle korrekt verarbeitet werden.",[1325,25735],{},"\nb) Was sind die Auswirkungen des Skripts?",[1325,25738],{},"\nAntwort: Das Skript durchsucht das Verzeichnis \u002Fbackupfolder nach normalen Dateien. Alle Dateien,",[1325,25741],{},"\nderen Änderungsdatum mehr als 5 Tage zurückliegt, werden mit rm gelöscht. Unterordner selbst",[1325,25744],{},"\nwerden dabei nicht gelöscht, sondern nur passende Dateien.",[1325,25747],{},"\nc) Für die Ausführung des Shellskript clean_backup.sh sind Root-Rechte notwendig. Geben Sie",[1325,25750],{},"\ndie Befehle an, um root zum Besitzer der Datei clean_backup.sh zu machen und die Ausführung",[1325,25753],{},"\nunter root – also unter den Rechten des Besitzers – zu gewährleisten.",[1325,25756],{},"\nAntwort: Möglich wäre:",[904,25759,25761],{"className":906,"code":25760,"language":908,"meta":909,"style":909},"sudo chown root clean_backup.sh\nsudo chmod u+s clean_backup.sh\n",[911,25762,25763,25776],{"__ignoreMap":909},[452,25764,25765,25767,25770,25773],{"class":915,"line":916},[452,25766,10339],{"class":919},[452,25768,25769],{"class":923}," chown",[452,25771,25772],{"class":923}," root",[452,25774,25775],{"class":923}," clean_backup.sh\n",[452,25777,25778,25780,25783,25785],{"class":915,"line":1190},[452,25779,10339],{"class":919},[452,25781,25782],{"class":923}," chmod",[452,25784,7401],{"class":923},[452,25786,25775],{"class":923},[898,25788,25789,25790,25792,25793,25795,25796,25798,25799,25801,25802,25804,25805,25807,25808,25810,25811,25813,25814,25816,25817,25819,25820,25822,25823,25825],{},"Der erste Befehl setzt root als Eigentümer. Der zweite setzt das Setuid-Bit, sodass das Skript mit den",[1325,25791],{},"\nRechten des Besitzers laufen soll. In der Praxis ist Setuid bei Shellskripten jedoch oft aus",[1325,25794],{},"\nSicherheitsgründen deaktiviert; sicherer wäre die Ausführung über sudo oder einen root-Cronjob.",[1325,25797],{},"\nd) Sie wollen das Skript clean_backup.sh automatisch ausführen lassen. Notieren Sie den",[1325,25800],{},"\nnotwendigen Eintrag in der Datei crontab, um das Skript jeden Dienstag und Freitag einmal pro",[1325,25803],{},"\nStunde zwischen 15:00 und 17:00 auszuführen.",[1325,25806],{},"\nAntwort: Ein möglicher Eintrag lautet:",[1325,25809],{},"\n0 15,16,17 * * 2,5 \u002Fpfad\u002Fzu\u002Fclean_backup.sh",[1325,25812],{},"\nDas bedeutet: Minute 0, also jeweils zur vollen Stunde, an den Stunden 15, 16 und 17, an jedem Tag",[1325,25815],{},"\nund Monat, aber nur an den Wochentagen Dienstag (2) und Freitag (5).",[1325,25818],{},"\ne) Mit welchem Befehl geben Sie Ihre aktuelle crontab am Bildschirm aus? Leiten Sie die",[1325,25821],{},"\nAusgabe in die Datei crontab.bak um.",[1325,25824],{},"\nAntwort:",[904,25827,25829],{"className":906,"code":25828,"language":908,"meta":909,"style":909},"crontab -l > crontab.bak\nMit crontab -l wird die aktuelle Crontab angezeigt. Durch die Umleitung mit > wird die Ausgabe in die\n",[911,25830,25831,25842],{"__ignoreMap":909},[452,25832,25833,25835,25837,25839],{"class":915,"line":916},[452,25834,10408],{"class":919},[452,25836,10434],{"class":975},[452,25838,24438],{"class":1473},[452,25840,25841],{"class":923}," crontab.bak\n",[452,25843,25844,25847,25850,25852,25855,25857,25860,25863,25866,25869,25871,25874,25877,25879,25881,25883,25886,25888],{"class":915,"line":1190},[452,25845,25846],{"class":919},"Mit",[452,25848,25849],{"class":923}," crontab",[452,25851,10434],{"class":975},[452,25853,25854],{"class":923}," wird",[452,25856,13903],{"class":923},[452,25858,25859],{"class":923}," aktuelle",[452,25861,25862],{"class":923}," Crontab",[452,25864,25865],{"class":923}," angezeigt.",[452,25867,25868],{"class":923}," Durch",[452,25870,13903],{"class":923},[452,25872,25873],{"class":923}," Umleitung",[452,25875,25876],{"class":923}," mit",[452,25878,24438],{"class":1473},[452,25880,25854],{"class":923},[452,25882,13903],{"class":923},[452,25884,25885],{"class":923}," Ausgabe",[452,25887,5294],{"class":923},[452,25889,25890],{"class":923}," die\n",[898,25892,25893],{},"Datei crontab.bak geschrieben.",[898,25895,24718],{},[2652,25897,21207],{"id":25898},"seite-2-5",[898,25900,25901,25902,25904],{},"Aufgabe 5: Software Installation",[1325,25903],{},"\n14 Punkte",[898,25906,25907,25908,25910,25911,25913,25914,25916],{},"Advanced Package Tool (APT) ist der Paketmanager für Debian- und Ubuntu-Linux-Distributionen.",[1325,25909],{},"\na) Welche Datei regelt dabei, welche Online-Repositories bei der Software-Installation von APT",[1325,25912],{},"\nverwendet werden?",[1325,25915],{},"\nAntwort: Die zentrale Datei ist \u002Fetc\u002Fapt\u002Fsources.list. Zusätzlich können weitere Paketquellen in Dateien",[904,25918,25920],{"className":906,"code":25919,"language":908,"meta":909,"style":909},"unter \u002Fetc\u002Fapt\u002Fsources.list.d\u002F eingetragen sein.\n",[911,25921,25922],{"__ignoreMap":909},[452,25923,25924,25927,25930,25933],{"class":915,"line":916},[452,25925,25926],{"class":919},"unter",[452,25928,25929],{"class":923}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[452,25931,25932],{"class":923}," eingetragen",[452,25934,25935],{"class":923}," sein.\n",[898,25937,25938,25939,25941,25942,25825],{},"b) Wie sollten Sie vorgehen, wenn Sie den Webserver apache2 installieren wollen? Geben Sie die",[1325,25940],{},"\nKommandos an.",[1325,25943],{},[904,25945,25947],{"className":906,"code":25946,"language":908,"meta":909,"style":909},"sudo apt update\nsudo apt install apache2\n",[911,25948,25949,25959],{"__ignoreMap":909},[452,25950,25951,25953,25956],{"class":915,"line":916},[452,25952,10339],{"class":919},[452,25954,25955],{"class":923}," apt",[452,25957,25958],{"class":923}," update\n",[452,25960,25961,25963,25965,25968],{"class":915,"line":1190},[452,25962,10339],{"class":919},[452,25964,25955],{"class":923},[452,25966,25967],{"class":923}," install",[452,25969,2834],{"class":923},[898,25971,25972,25973,25975,25976,25978,25979,25825,25981,25983,25984,25986,25987,25989,25990,25992,25993,25995,25996,25998,25999,25825],{},"Zuerst wird die Paketliste aktualisiert, damit der Paketmanager den aktuellen Stand der Repositories",[1325,25974],{},"\nkennt. Anschließend wird das Paket apache2 installiert.",[1325,25977],{},"\nc) Nennen Sie drei distributionsunabhängige Paketformate und erklären Sie sie stichpunktartig.",[1325,25980],{},[1325,25982],{},"\nAppImage: Eine einzelne ausführbare Datei, die meist ohne klassische Installation gestartet werden",[1325,25985],{},"\nkann.",[1325,25988],{},"\nSnap: Ein von Canonical unterstütztes Paketformat mit Sandbox-Ansatz und zentralem Snap Store.",[1325,25991],{},"\nFlatpak: Ebenfalls ein distributionsübergreifendes Format mit Fokus auf Desktop-Anwendungen und",[1325,25994],{},"\nisolierter Ausführung in einer Sandbox.",[1325,25997],{},"\nd) Wie installieren Sie mit einem Befehl spotify im Snap-Format?",[1325,26000],{},[904,26002,26004],{"className":906,"code":26003,"language":908,"meta":909,"style":909},"sudo snap install spotify\n",[911,26005,26006],{"__ignoreMap":909},[452,26007,26008,26010,26013,26015],{"class":915,"line":916},[452,26009,10339],{"class":919},[452,26011,26012],{"class":923}," snap",[452,26014,25967],{"class":923},[452,26016,26017],{"class":923}," spotify\n",[898,26019,26020,26021,26023,26024,26026,26027,26029,26030,26032,26033,26035],{},"Damit wird das Spotify-Paket aus dem Snap-Store installiert.",[1325,26022],{},"\ne) Welche Aufgabe hat die Datei \u002Fetc\u002Fsudoers?",[1325,26025],{},"\nAntwort: Die Datei \u002Fetc\u002Fsudoers legt fest, welche Benutzer oder Gruppen sudo verwenden dürfen und",[1325,26028],{},"\nwelche Befehle sie mit erhöhten Rechten ausführen dürfen. Sie ist damit ein zentrales Sicherheits-",[1325,26031],{},"\nund Berechtigungskonfigurationsfile.",[1325,26034],{},"\nf) Was bedeutet die folgende Zeile aus der \u002Fetc\u002Fsudoers-Datei?",[904,26037,26039],{"className":906,"code":26038,"language":908,"meta":909,"style":909},"%admin ALL=(ALL) ALL\n",[911,26040,26041],{"__ignoreMap":909},[452,26042,26043,26045,26047,26049,26051,26053],{"class":915,"line":916},[452,26044,2785],{"class":919},[452,26046,2759],{"class":923},[452,26048,2762],{"class":1298},[452,26050,2823],{"class":919},[452,26052,2768],{"class":1298},[452,26054,2771],{"class":923},[898,26056,26057,26058,26060,26061,26063,26064,26066,26067,25825],{},"Antwort: Alle Benutzer, die Mitglied der Gruppe admin sind, dürfen auf allen Hosts bzw. in allen",[1325,26059],{},"\npassenden Kontexten alle Befehle als alle Benutzer ausführen. In der Praxis bedeutet das meist",[1325,26062],{},"\nweitreichende Administratorrechte, typischerweise auch Root-Rechte.",[1325,26065],{},"\ng) Mit welchem Befehl bearbeitet man die \u002Fetc\u002Fsudoers-Datei?",[1325,26068],{},[904,26070,26072],{"className":906,"code":26071,"language":908,"meta":909,"style":909},"visudo\n",[911,26073,26074],{"__ignoreMap":909},[452,26075,26076],{"class":915,"line":916},[452,26077,26071],{"class":919},[898,26079,26080,26081,26083,26084,26086,26087,26089,26090,26092,26093,26095,26096,26098,26099,26101],{},"Dieser Befehl öffnet die sudoers-Datei in einem sicheren Editor und prüft beim Speichern direkt die",[1325,26082],{},"\nSyntax.",[1325,26085],{},"\nh) Was sind die Unterschiede der Befehle su und sudo in der Anwendung?",[1325,26088],{},"\nAntwort: su wechselt in der Regel auf einen anderen Benutzer, meist root, und verlangt normalerweise",[1325,26091],{},"\ndas Passwort des Zielbenutzers. sudo führt dagegen gezielt einen einzelnen Befehl mit erhöhten",[1325,26094],{},"\nRechten aus und verwendet normalerweise das eigene Benutzerpasswort. sudo ist feiner",[1325,26097],{},"\nkonfigurierbar und protokollierbarer, während su eher einen vollständigen Benutzerwechsel bis zum",[1325,26100],{},"\nAbmelden oder bis exit darstellt.",[898,26103,24915],{},[2652,26105,21470],{"id":26106},"seite-3-5",[898,26108,26109,26110,26112],{},"Aufgabe 6: Shellskript",[1325,26111],{},"\n12 Punkte",[898,26114,26115,26116,26118],{},"a) Gegeben sei folgendes Shellskript:",[1325,26117],{},"\n#! \u002Fbin\u002Fsh",[904,26120,26122],{"className":906,"code":26121,"language":908,"meta":909,"style":909},"readcmd() {\necho \"Anzahl der Parameter in der Kommandozeile : $#\"\nfor var in $*\ndo\necho \"$i. Parameter : $var\"\ni=`expr $i + 1`\ndone\n}\necho \"Vor der Funktion ...\"\nreadcmd $*\necho \"... nach der Funktion\"\n",[911,26123,26124,26131,26142,26154,26158,26174,26197,26201,26205,26212,26218],{"__ignoreMap":909},[452,26125,26126,26129],{"class":915,"line":916},[452,26127,26128],{"class":919},"readcmd",[452,26130,12482],{"class":1298},[452,26132,26133,26135,26138,26140],{"class":915,"line":1190},[452,26134,1523],{"class":975},[452,26136,26137],{"class":923}," \"Anzahl der Parameter in der Kommandozeile : ",[452,26139,12915],{"class":975},[452,26141,1896],{"class":923},[452,26143,26144,26146,26149,26151],{"class":915,"line":1197},[452,26145,2108],{"class":1473},[452,26147,26148],{"class":1298}," var ",[452,26150,2114],{"class":1473},[452,26152,26153],{"class":975}," $*\n",[452,26155,26156],{"class":915,"line":1204},[452,26157,2123],{"class":1473},[452,26159,26160,26162,26164,26166,26169,26172],{"class":915,"line":1209},[452,26161,1523],{"class":975},[452,26163,1870],{"class":923},[452,26165,15539],{"class":1298},[452,26167,26168],{"class":923},". Parameter : ",[452,26170,26171],{"class":1298},"$var",[452,26173,1896],{"class":923},[452,26175,26176,26179,26181,26183,26186,26189,26192,26194],{"class":915,"line":1223},[452,26177,26178],{"class":1298},"i",[452,26180,1862],{"class":1473},[452,26182,22088],{"class":923},[452,26184,26185],{"class":919},"expr",[452,26187,26188],{"class":1298}," $i",[452,26190,26191],{"class":923}," + ",[452,26193,14559],{"class":975},[452,26195,26196],{"class":923},"`\n",[452,26198,26199],{"class":915,"line":1228},[452,26200,2181],{"class":1473},[452,26202,26203],{"class":915,"line":1234},[452,26204,12525],{"class":1298},[452,26206,26207,26209],{"class":915,"line":1239},[452,26208,1523],{"class":975},[452,26210,26211],{"class":923}," \"Vor der Funktion ...\"\n",[452,26213,26214,26216],{"class":915,"line":1253},[452,26215,26128],{"class":919},[452,26217,26153],{"class":975},[452,26219,26220,26222],{"class":915,"line":1258},[452,26221,1523],{"class":975},[452,26223,26224],{"class":923}," \"... nach der Funktion\"\n",[898,26226,26227,26228,26230,26231,25825,26233,26235,26236,26238,26239,26241],{},"Geben Sie an, was bei folgender Ausführung ausgegeben wird:",[1325,26229],{},"\nyou@host > .\u002Fafunc7 eins zwei drei vier",[1325,26232],{},[1325,26234],{},"\nVor der Funktion ...",[1325,26237],{},"\nAnzahl der Parameter in der Kommandozeile : 4",[1325,26240],{},"\n. Parameter : eins",[9593,26243,26244,26247,26250],{},[995,26245,26246],{},"Parameter : zwei",[995,26248,26249],{},"Parameter : drei",[995,26251,26252,26253,26255,26256,26258,26259,26261,26262,26264,26265,26267,26268,26270,26271,26273,26274,26276,26277,25825,26279,26118],{},"Parameter : vier",[1325,26254],{},"\n... nach der Funktion",[1325,26257],{},"\nBegründung: Es werden vier Parameter übergeben. Die Variable i ist anfangs leer, daher beginnt die",[1325,26260],{},"\nerste Ausgabe mit einem leeren Zähler vor dem Punkt. Danach wird i schrittweise erhöht.",[1325,26263],{},"\nb) Schreiben Sie ein Shellskript, welches Zeilenduplikate in einer Datei erkennt und löscht. Dabei",[1325,26266],{},"\nwird der Dateiname eingelesen und überprüft, ob die Datei vorhanden ist. Anschließend werden",[1325,26269],{},"\ndie Zeilenduplikate gelöscht, sodass jede Zeile nur einmal vorhanden ist. Dann wird das Ergebnis",[1325,26272],{},"\nin die Datei sorted.txt geschrieben. Die ursprüngliche Datei bleibt unverändert erhalten. (Tipp:",[1325,26275],{},"\nReihenfolge der Zeilen in sorted.txt ist egal)",[1325,26278],{},[1325,26280],{},[904,26282,26284],{"className":906,"code":26283,"language":908,"meta":909,"style":909},"echo -n \"Enter Filename-> \"\nread filename\nif [ -f \"$filename\" ]; then\nsort \"$filename\" | uniq > sorted.txt\nelse\necho \"No $filename in $PWD...try again\"\nfi\nexit 0\n",[911,26285,26286,26295,26303,26322,26342,26346,26363,26367],{"__ignoreMap":909},[452,26287,26288,26290,26292],{"class":915,"line":916},[452,26289,1523],{"class":975},[452,26291,4656],{"class":975},[452,26293,26294],{"class":923}," \"Enter Filename-> \"\n",[452,26296,26297,26300],{"class":915,"line":1190},[452,26298,26299],{"class":975},"read",[452,26301,26302],{"class":923}," filename\n",[452,26304,26305,26307,26309,26311,26313,26316,26318,26320],{"class":915,"line":1197},[452,26306,2426],{"class":1473},[452,26308,2429],{"class":1298},[452,26310,1134],{"class":1473},[452,26312,1870],{"class":923},[452,26314,26315],{"class":1298},"$filename",[452,26317,1876],{"class":923},[452,26319,2441],{"class":1298},[452,26321,2444],{"class":1473},[452,26323,26324,26326,26328,26330,26332,26334,26337,26339],{"class":915,"line":1204},[452,26325,24430],{"class":919},[452,26327,1870],{"class":923},[452,26329,26315],{"class":1298},[452,26331,1876],{"class":923},[452,26333,1474],{"class":1473},[452,26335,26336],{"class":919}," uniq",[452,26338,24438],{"class":1473},[452,26340,26341],{"class":923}," sorted.txt\n",[452,26343,26344],{"class":915,"line":1209},[452,26345,13616],{"class":1473},[452,26347,26348,26350,26353,26355,26358,26360],{"class":915,"line":1223},[452,26349,1523],{"class":975},[452,26351,26352],{"class":923}," \"No ",[452,26354,26315],{"class":1298},[452,26356,26357],{"class":923}," in ",[452,26359,8815],{"class":1298},[452,26361,26362],{"class":923},"...try again\"\n",[452,26364,26365],{"class":915,"line":1228},[452,26366,2484],{"class":1473},[452,26368,26369,26371],{"class":915,"line":1234},[452,26370,2472],{"class":975},[452,26372,16789],{"class":975},[898,26374,26375,26376,26378,26379,26381],{},"Erläuterung: Der Dateiname wird eingelesen. Mit -f wird geprüft, ob eine normale Datei existiert. sort",[1325,26377],{},"\nsortiert die Zeilen, uniq entfernt danach doppelte Zeilen. Das Ergebnis wird in sorted.txt gespeichert,",[1325,26380],{},"\ndie Originaldatei bleibt unverändert.",[898,26383,25075],{},[2652,26385,21624],{"id":26386},"seite-4-4",[898,26388,26389,26390,26392],{},"Aufgabe 7: Docker",[1325,26391],{},"\n18 Punkte",[898,26394,26395,26396,26398,26399,26401,26402,26404,26405,26407,26408,26410,26411,26413,26414,26416,26417,26419,26420,26422],{},"a) Erklären Sie die Unterschiede zwischen virtueller Maschine und Docker-Container bezüglich",[1325,26397],{},"\nRessourcenverteilung.",[1325,26400],{},"\nAntwort: Eine virtuelle Maschine bringt ein komplettes Gastbetriebssystem mit. Dadurch benötigt sie",[1325,26403],{},"\nmehr Arbeitsspeicher, mehr Speicherplatz und meist auch mehr Startzeit. Docker-Container teilen sich",[1325,26406],{},"\ndagegen den Kernel des Host-Systems und kapseln nur die Anwendung samt benötigter Bibliotheken.",[1325,26409],{},"\nDeshalb sind Container leichter, starten schneller und nutzen die vorhandenen Ressourcen in der",[1325,26412],{},"\nRegel effizienter.",[1325,26415],{},"\nb) Schreiben Sie ein Dockerfile für ein Docker-Image für einen Apache-Webserver unter Port 80 in",[1325,26418],{},"\neinem Ubuntu-Docker-Container. Dazu apache2 installieren und folgende Umgebungsvariablen",[1325,26421],{},"\nsetzen: APACHE_RUN_USER=www-data, APACHE_RUN_GROUP=www-data,",[904,26424,26426],{"className":906,"code":26425,"language":908,"meta":909,"style":909},"APACHE_LOG_DIR=\u002Fvar\u002Flog\u002Fapache2. Darin starten Sie beim Erstellen des Containers den\n",[911,26427,26428],{"__ignoreMap":909},[452,26429,26430,26433,26435,26438,26441,26444,26447,26450,26453,26455,26458],{"class":915,"line":916},[452,26431,26432],{"class":1298},"APACHE_LOG_DIR",[452,26434,1862],{"class":1473},[452,26436,26437],{"class":923},"\u002Fvar\u002Flog\u002Fapache2.",[452,26439,26440],{"class":919}," Darin",[452,26442,26443],{"class":923}," starten",[452,26445,26446],{"class":923}," Sie",[452,26448,26449],{"class":923}," beim",[452,26451,26452],{"class":923}," Erstellen",[452,26454,24329],{"class":923},[452,26456,26457],{"class":923}," Containers",[452,26459,26460],{"class":923}," den\n",[898,26462,26463,26464,25825],{},"apache2-Dienst.",[1325,26465],{},[904,26467,26469],{"className":10966,"code":26468,"language":10968,"meta":909,"style":909},"FROM ubuntu\nRUN apt update && apt-get install -y apache2 && apt-get clean\nENV APACHE_RUN_USER=www-data\nENV APACHE_RUN_GROUP=www-data\nENV APACHE_LOG_DIR=\u002Fvar\u002Flog\u002Fapache2\nEXPOSE 80\nCMD [\"apachectl\", \"-D\", \"FOREGROUND\"]\n",[911,26470,26471,26477,26484,26491,26498,26505,26512],{"__ignoreMap":909},[452,26472,26473,26475],{"class":915,"line":916},[452,26474,18286],{"class":1473},[452,26476,18129],{"class":1298},[452,26478,26479,26481],{"class":915,"line":1190},[452,26480,18340],{"class":1473},[452,26482,26483],{"class":1298}," apt update && apt-get install -y apache2 && apt-get clean\n",[452,26485,26486,26488],{"class":915,"line":1197},[452,26487,18434],{"class":1473},[452,26489,26490],{"class":1298}," APACHE_RUN_USER=www-data\n",[452,26492,26493,26495],{"class":915,"line":1204},[452,26494,18434],{"class":1473},[452,26496,26497],{"class":1298}," APACHE_RUN_GROUP=www-data\n",[452,26499,26500,26502],{"class":915,"line":1209},[452,26501,18434],{"class":1473},[452,26503,26504],{"class":1298}," APACHE_LOG_DIR=\u002Fvar\u002Flog\u002Fapache2\n",[452,26506,26507,26509],{"class":915,"line":1223},[452,26508,18413],{"class":1473},[452,26510,26511],{"class":1298}," 80\n",[452,26513,26514,26516,26518,26521,26523,26526,26528,26531],{"class":915,"line":1228},[452,26515,18455],{"class":1473},[452,26517,18458],{"class":1298},[452,26519,26520],{"class":923},"\"apachectl\"",[452,26522,18464],{"class":1298},[452,26524,26525],{"class":923},"\"-D\"",[452,26527,18464],{"class":1298},[452,26529,26530],{"class":923},"\"FOREGROUND\"",[452,26532,18470],{"class":1298},[898,26534,26535,26536,26538,26539,26541,26542,26544],{},"Hinweis: Für Container ist es besser, den Webserver im Vordergrund laufen zu lassen. service",[1325,26537],{},"\napache2 start startet den Dienst nur kurzzeitig und beendet den Container meist wieder.",[1325,26540],{},"\nc) Schreiben Sie folgende Docker-Container-Einstellung als Docker Compose um und verwenden",[1325,26543],{},"\nSie Version 2.",[904,26546,26548],{"className":906,"code":26547,"language":908,"meta":909,"style":909},"docker run --name apache -p 80:8080 -p 443:8443 -v \u002Fpath\u002Fto\u002Fapp:\u002Fapp bitnami\u002Fapache:latest\n",[911,26549,26550],{"__ignoreMap":909},[452,26551,26552,26554,26556,26558,26561,26563,26566,26568,26571,26573,26576],{"class":915,"line":916},[452,26553,17490],{"class":919},[452,26555,17675],{"class":923},[452,26557,17686],{"class":975},[452,26559,26560],{"class":923}," apache",[452,26562,9471],{"class":975},[452,26564,26565],{"class":923}," 80:8080",[452,26567,9471],{"class":975},[452,26569,26570],{"class":923}," 443:8443",[452,26572,6097],{"class":975},[452,26574,26575],{"class":923}," \u002Fpath\u002Fto\u002Fapp:\u002Fapp",[452,26577,26578],{"class":923}," bitnami\u002Fapache:latest\n",[898,26580,26581],{},"Antwort:",[904,26583,26585],{"className":19253,"code":26584,"language":19255,"meta":909,"style":909},"version: \"2\"\nservices:\napache:\nimage: bitnami\u002Fapache:latest\ncontainer_name: apache\nports:\n- \"80:8080\"\n- \"443:8443\"\nvolumes:\n- \u002Fpath\u002Fto\u002Fapp:\u002Fapp\n",[911,26586,26587,26596,26602,26609,26618,26627,26633,26640,26647,26653],{"__ignoreMap":909},[452,26588,26589,26591,26593],{"class":915,"line":916},[452,26590,18932],{"class":19262},[452,26592,16252],{"class":1298},[452,26594,26595],{"class":923},"\"2\"\n",[452,26597,26598,26600],{"class":915,"line":1190},[452,26599,19276],{"class":19262},[452,26601,19279],{"class":1298},[452,26603,26604,26607],{"class":915,"line":1197},[452,26605,26606],{"class":19262},"apache",[452,26608,19279],{"class":1298},[452,26610,26611,26613,26615],{"class":915,"line":1204},[452,26612,19299],{"class":19262},[452,26614,16252],{"class":1298},[452,26616,26617],{"class":923},"bitnami\u002Fapache:latest\n",[452,26619,26620,26622,26624],{"class":915,"line":1209},[452,26621,19313],{"class":19262},[452,26623,16252],{"class":1298},[452,26625,26626],{"class":923},"apache\n",[452,26628,26629,26631],{"class":915,"line":1223},[452,26630,19354],{"class":19262},[452,26632,19279],{"class":1298},[452,26634,26635,26637],{"class":915,"line":1228},[452,26636,19365],{"class":1298},[452,26638,26639],{"class":923},"\"80:8080\"\n",[452,26641,26642,26644],{"class":915,"line":1234},[452,26643,19365],{"class":1298},[452,26645,26646],{"class":923},"\"443:8443\"\n",[452,26648,26649,26651],{"class":915,"line":1239},[452,26650,18032],{"class":19262},[452,26652,19279],{"class":1298},[452,26654,26655,26657],{"class":915,"line":1253},[452,26656,19365],{"class":1298},[452,26658,26659],{"class":923},"\u002Fpath\u002Fto\u002Fapp:\u002Fapp\n",[898,26661,26662,26663,26665],{},"Diese Compose-Datei bildet dieselben Einstellungen wie der docker-run-Befehl ab: Containername,",[1325,26664],{},"\nImage, Portweiterleitungen und Volume-Mount.",[898,26667,25378],{},[257,26669,26671],{"id":26670},"techniker_vorbereitung_find_mit_antwortenpdf","techniker_vorbereitung_find_mit_antworten.pdf",[898,26673,26674],{},"Quelle: techniker_vorbereitung_find_mit_antworten.pdf - 1 Seite(n)",[2652,26676,21067],{"id":26677},"seite-1-6",[898,26679,26680],{},"Wiederholung find",[9593,26682,26683,26695,26711,26720,26729,26741,26750,26759,26768,26777,26786,26798],{},[995,26684,26685,26686,26688,26689,26691,26692,26694],{},"Was ist die Hauptfunktion des Befehls find in Linux?",[1325,26687],{},"\nAntwort: Der Befehl find dient dazu, Dateien und Verzeichnisse rekursiv zu durchsuchen. Dabei kann",[1325,26690],{},"\nnach verschiedenen Kriterien wie Name, Typ, Größe, Änderungszeit, Besitzer oder Rechten gesucht",[1325,26693],{},"\nwerden.",[995,26696,26697,26698,26700,26701,26703,26704,26706,26707,26710],{},"Welche Option wird mit find verwendet, um nach einem Dateinamen zu suchen? A) -user B) -size",[1325,26699],{},"\nC) -name D) -exec",[1325,26702],{},"\nAntwort: Richtig ist C) -name. Mit -name wird nach einem konkreten Dateinamen oder nach Mustern",[1325,26705],{},"\nmit Platzhaltern wie ",[7867,26708,26709],{},".txt oder backup"," gesucht.",[995,26712,26713,26714,26716,26717,26719],{},"Was bewirkt folgender Befehl? find \u002Fhome -type f -name \"*.pdf\"",[1325,26715],{},"\nAntwort: Der Befehl durchsucht \u002Fhome und alle Unterverzeichnisse nach normalen Dateien (-type f),",[1325,26718],{},"\nderen Name auf .pdf endet. Es werden also alle PDF-Dateien unterhalb von \u002Fhome gefunden.",[995,26721,26722,26723,26725,26726,26728],{},"Finde alle Dateien im aktuellen Verzeichnis, die größer als 10 MB sind.",[1325,26724],{},"\nAntwort: Befehl: find . -type f -size +10M. Der Punkt steht für das aktuelle Verzeichnis, -type f",[1325,26727],{},"\nbeschränkt die Suche auf Dateien und +10M bedeutet größer als 10 Megabyte.",[995,26730,26731,26732,26734,26735,26737,26738,26740],{},"Finde alle Dateien mit der Endung .log in \u002Fvar\u002Flog und lösche sie.",[1325,26733],{},"\nAntwort: Befehl: find \u002Fvar\u002Flog -type f -name \"*.log\" -delete. Damit werden alle .log-Dateien in \u002Fvar\u002Flog",[1325,26736],{},"\nund darunter direkt gelöscht. Vorsicht: -delete sollte nur verwendet werden, wenn das Suchmuster",[1325,26739],{},"\nsicher stimmt.",[995,26742,26743,26744,26746,26747,26749],{},"Suche im Verzeichnis \u002Fetc alle Dateien, die in den letzten 7 Tagen geändert wurden.",[1325,26745],{},"\nAntwort: Befehl: find \u002Fetc -type f -mtime -7. Die Option -mtime -7 findet Dateien, deren Änderungszeit",[1325,26748],{},"\nweniger als 7 Tage zurückliegt.",[995,26751,26752,26753,26755,26756,26758],{},"Finde alle Verzeichnisse, deren Name mit „backup“ beginnt.",[1325,26754],{},"\nAntwort: Befehl: find . -type d -name \"backup*\". Mit -type d werden nur Verzeichnisse gesucht und das",[1325,26757],{},"\nMuster backup* findet alle Namen, die mit backup anfangen.",[995,26760,26761,26762,26764,26765,26767],{},"Suche nach Dateien, die genau 100 KB groß sind.",[1325,26763],{},"\nAntwort: Befehl: find . -type f -size 100k. Damit werden Dateien gesucht, deren Größe genau 100",[1325,26766],{},"\nKilobyte beträgt. Das kleine k steht hier für Kilobyte in der find-Syntax.",[995,26769,26770,26771,26773,26774,26776],{},"Finde alle Dateien, die dem Benutzer student gehören.",[1325,26772],{},"\nAntwort: Befehl: find . -type f -user student. Damit werden alle Dateien im aktuellen Verzeichnis und",[1325,26775],{},"\nseinen Unterordnern gesucht, deren Besitzer der Benutzer student ist.",[995,26778,26779,26780,26782,26783,26785],{},"Führe für jede gefundene Datei mit Endung .tmp den Befehl rm aus.",[1325,26781],{},"\nAntwort: Befehl: find . -type f -name \"*.tmp\" -exec rm {} ;. Für jede gefundene .tmp-Datei wird der",[1325,26784],{},"\nBefehl rm einzeln ausgeführt. {} steht dabei für die jeweils gefundene Datei.",[995,26787,26788,26789,26791,26792,26794,26795,26797],{},"Was bedeutet {} ; in folgendem Befehl? find . -name \"*.sh\" -exec chmod +x {} ;",[1325,26790],{},"\nAntwort: Die geschweiften Klammern {} sind ein Platzhalter für jede gefundene Datei. Das",[1325,26793],{},"\nabschließende ; beendet den mit -exec gestarteten Befehl. Dadurch wird chmod +x nacheinander auf",[1325,26796],{},"\njede gefundene .sh-Datei angewendet.",[995,26799,26800,26801,26803,26804,26806,26807,26809],{},"Wie kann man mit find nur in einem bestimmten Verzeichnistiefenbereich suchen? (z. B. nur erste",[1325,26802],{},"\nEbene)",[1325,26805],{},"\nAntwort: Dafür verwendet man zum Beispiel -maxdepth und -mindepth. Mit find . -maxdepth 1 -name",[1325,26808],{},"\n\"*.txt\" wird nur im aktuellen Verzeichnis gesucht, also ohne tiefer in Unterordner zu gehen.",[257,26811,26813],{"id":26812},"techniker_vorbereitung_grep_mit_antwortenpdf","techniker_vorbereitung_grep_mit_antworten.pdf",[898,26815,26816],{},"Quelle: techniker_vorbereitung_grep_mit_antworten.pdf - 2 Seite(n)",[2652,26818,21067],{"id":26819},"seite-1-7",[898,26821,26822],{},"Wiederholung grep",[9593,26824,26825,26837,26852,26861,26870,26882,26901],{},[995,26826,26827,26828,26830,26831,26833,26834,26836],{},"Was ist der Zweck des Befehls grep?",[1325,26829],{},"\nAntwort: grep dient dazu, Textdateien oder Eingaben nach einem bestimmten Suchmuster zu",[1325,26832],{},"\ndurchsuchen. Das Muster kann ein normales Wort, eine Zeichenfolge oder auch ein regulärer Ausdruck",[1325,26835],{},"\nsein. So lassen sich passende Zeilen schnell finden und ausgeben.",[995,26838,26839,26840,26842,26843,26845,26846,26848,26849,26851],{},"Welcher Befehl sucht nach dem Wort \"Fehler\" in der Datei log.txt, ohne auf",[1325,26841],{},"\nGroß-\u002FKleinschreibung zu achten?",[1325,26844],{},"\nAntwort: Richtige Antwort: B) grep -i Fehler log.txt",[1325,26847],{},"\nDie Option -i sorgt dafür, dass grep nicht zwischen Groß- und Kleinschreibung unterscheidet. Dadurch",[1325,26850],{},"\nwerden zum Beispiel sowohl „Fehler“ als auch „fehler“ oder „FEHLER“ gefunden.",[995,26853,26854,26855,26857,26858,26860],{},"Was bewirkt grep -v \"root\" \u002Fetc\u002Fpasswd?",[1325,26856],{},"\nAntwort: Der Befehl gibt alle Zeilen aus der Datei \u002Fetc\u002Fpasswd aus, in denen das Wort root nicht",[1325,26859],{},"\nvorkommt. Die Option -v kehrt die Suche also um und filtert passende Zeilen heraus.",[995,26862,26863,26864,26866,26867,26869],{},"Suchen Sie in der Datei system.log nach allen Zeilen, die den Begriff „error“ enthalten.",[1325,26865],{},"\nAntwort: grep \"error\" system.log",[1325,26868],{},"\nDieser Befehl zeigt alle Zeilen der Datei system.log an, in denen der Text error vorkommt.",[995,26871,26872,26873,26875,26876,26878,26879,26881],{},"Zeigen Sie alle Zeilen in users.txt, die mit dem Buchstaben „A“ beginnen.",[1325,26874],{},"\nAntwort: grep \"^A\" users.txt",[1325,26877],{},"\nDas Zeichen ^ steht für den Zeilenanfang. Deshalb werden nur Zeilen angezeigt, deren erstes Zeichen",[1325,26880],{},"\nein großes A ist.",[995,26883,26884,26885,26887,26888,26891,26892,26894,26895,26897,26898,26900],{},"Suchen Sie in der Datei daten.csv alle Zeilen, die mit einer Zahl beginnen.",[1325,26886],{},"\nAntwort: grep \"^",[452,26889,26890],{},"0-9","\" daten.csv",[1325,26893],{},"\nDer Ausdruck ",[452,26896,26890],{}," steht für eine beliebige Ziffer. Zusammen mit ^ bedeutet das: Zeige alle Zeilen, die",[1325,26899],{},"\ndirekt am Anfang mit einer Zahl starten.",[995,26902,26903,26904,26906,26907,26909],{},"Suchen Sie rekursiv im Verzeichnis \u002Fvar\u002Flog nach dem Begriff „failed“.",[1325,26905],{},"\nAntwort: grep -r \"failed\" \u002Fvar\u002Flog",[1325,26908],{},"\nMit der Option -r werden das angegebene Verzeichnis und alle Unterverzeichnisse rekursiv durchsucht.",[904,26911,26913],{"className":906,"code":26912,"language":908,"meta":909,"style":909},"grep sucht dabei in allen passenden Dateien nach dem Begriff failed.\n",[911,26914,26915],{"__ignoreMap":909},[452,26916,26917,26919,26922,26925,26927,26930,26933,26935,26938,26941,26944],{"class":915,"line":916},[452,26918,3600],{"class":919},[452,26920,26921],{"class":923}," sucht",[452,26923,26924],{"class":923}," dabei",[452,26926,5294],{"class":923},[452,26928,26929],{"class":923}," allen",[452,26931,26932],{"class":923}," passenden",[452,26934,924],{"class":923},[452,26936,26937],{"class":923}," nach",[452,26939,26940],{"class":923}," dem",[452,26942,26943],{"class":923}," Begriff",[452,26945,26946],{"class":923}," failed.\n",[9593,26948,26949,26961,26973],{"start":1234},[995,26950,26951,26952,26954,26955,26957,26958,26960],{},"Zählen Sie, wie oft das Wort „login“ in der Datei auth.log vorkommt.",[1325,26953],{},"\nAntwort: grep -o \"login\" auth.log | wc -l",[1325,26956],{},"\nDie Option -o gibt jeden einzelnen Treffer separat aus. Diese Treffer werden an wc -l weitergegeben,",[1325,26959],{},"\ndas dann die Anzahl der Zeilen und damit die Anzahl der Vorkommen zählt.",[995,26962,26963,26964,26966,26967,26969,26970,26972],{},"Wie würden Sie alle Zeilen mit genau 8 Zeichen anzeigen? (Zeichenanzahl = 8)",[1325,26965],{},"\nAntwort: grep -x \".{8}\" datei.txt",[1325,26968],{},"\nDer Ausdruck .{8} steht für genau acht beliebige Zeichen. Die Option -x sorgt dafür, dass die gesamte",[1325,26971],{},"\nZeile genau diesem Muster entsprechen muss.",[995,26974,26975],{},"Verwenden Sie grep, um in einer Datei users.txt nur Zeilen auszugeben, die NICHT das",[904,26977,26979],{"className":906,"code":26978,"language":908,"meta":909,"style":909},"Wort \"admin\" enthalten.\n",[911,26980,26981],{"__ignoreMap":909},[452,26982,26983,26986,26989],{"class":915,"line":916},[452,26984,26985],{"class":919},"Wort",[452,26987,26988],{"class":923}," \"admin\"",[452,26990,26991],{"class":923}," enthalten.\n",[898,26993,26994,26995,26997,26998,27000,27001,27003,27004,27006,27007,27009,27010,27012,27013,27015],{},"Antwort: grep -v \"admin\" users.txt",[1325,26996],{},"\nAuch hier bedeutet -v, dass alle Zeilen ohne den Suchbegriff ausgegeben werden. Zeilen mit dem Wort",[1325,26999],{},"\nadmin werden also ausgeschlossen.",[1325,27002],{},"\n11. Wozu dient der Befehl grep -l ?",[1325,27005],{},"\nAntwort: Die Option -l gibt nur die Namen der Dateien aus, in denen ein Suchmuster gefunden wurde.",[1325,27008],{},"\nDie eigentlichen Trefferzeilen werden dabei nicht angezeigt. Das ist praktisch, wenn man nur wissen",[1325,27011],{},"\nmöchte, in welchen Dateien ein Begriff vorkommt.",[1325,27014],{},"\n12. Geben Sie ein Beispiel an.",[898,27017,21067],{},[2652,27019,21207],{"id":27020},"seite-2-6",[898,27022,27023,27024,27026,27027,27029,27030,27032,27033,27035,27036,27038,27039,27041,27042,27044,27045,27047,27048,27050,27051,27053],{},"Antwort: grep -l \"Fehler\" *.log",[1325,27025],{},"\nDieser Befehl durchsucht alle Dateien mit der Endung .log im aktuellen Verzeichnis. Anschließend",[1325,27028],{},"\nwerden nur die Dateinamen ausgegeben, in denen das Wort Fehler gefunden wurde.",[1325,27031],{},"\n13. Was macht folgender Befehl? grep -rl \"TODO\" .",[1325,27034],{},"\nAntwort: Der Befehl durchsucht das aktuelle Verzeichnis . und alle Unterordner rekursiv nach dem",[1325,27037],{},"\nBegriff TODO. Durch die Kombination aus -r und -l werden nur die Dateinamen angezeigt, in denen",[1325,27040],{},"\nmindestens ein Treffer vorkommt.",[1325,27043],{},"\n14. Was macht folgender Befehl? grep -li \"warnung\" *.txt",[1325,27046],{},"\nAntwort: Dieser Befehl durchsucht alle .txt-Dateien im aktuellen Verzeichnis nach dem Wort warnung,",[1325,27049],{},"\nohne zwischen Groß- und Kleinschreibung zu unterscheiden. Wegen -l werden nur die Dateinamen",[1325,27052],{},"\nausgegeben, nicht die einzelnen Zeilen mit dem Treffer.",[898,27055,21207],{},[257,27057,27059],{"id":27058},"techniker_vorbereitung_systemd_mit_antwortenpdf","techniker_vorbereitung_systemd_mit_antworten.pdf",[898,27061,27062],{},"Quelle: techniker_vorbereitung_systemd_mit_antworten.pdf - 2 Seite(n)",[2652,27064,21067],{"id":27065},"seite-1-8",[898,27067,27068],{},"Prüfungsfragen zu systemd",[9593,27070,27071,27086,27101,27116,27125,27137,27149,27158,27173,27185],{},[995,27072,27073,27074,27076,27077,27079,27080,27082,27083,27085],{},"Was ist systemd und welche Aufgabe erfüllt es?",[1325,27075],{},"\nAntwort: systemd ist das Init-System und der Service-Manager vieler Linux-Distributionen. Es startet",[1325,27078],{},"\nbeim Booten die notwendigen Dienste, überwacht laufende Prozesse und verwaltet deren Status",[1325,27081],{},"\nwährend des Betriebs. Außerdem stellt es Werkzeuge bereit, um Dienste kontrolliert zu starten, zu",[1325,27084],{},"\nstoppen, neu zu laden oder beim Systemstart automatisch zu aktivieren.",[995,27087,27088,27089,27091,27092,27094,27095,27097,27098,27100],{},"Was ist eine Unit-Datei? Nenne Beispiele.",[1325,27090],{},"\nAntwort: Eine Unit-Datei ist eine Konfigurationsdatei, mit der systemd festlegt, wie eine bestimmte",[1325,27093],{},"\nRessource oder Funktion verwaltet wird. Beispiele sind .service für Dienste, .socket für Socket-",[1325,27096],{},"\nAktivierung, .target für Zielzustände ähnlich den früheren Runleveln, .mount für Einhängepunkte",[1325,27099],{},"\nund .timer für zeitgesteuerte Aufgaben.",[995,27102,27103,27104,27106,27107,27109,27110,27112,27113,27115],{},"Wo befinden sich systemd-Unit-Dateien?",[1325,27105],{},"\nAntwort: Häufig liegen benutzerdefinierte oder lokal angepasste Units unter \u002Fetc\u002Fsystemd\u002Fsystem. Vom",[1325,27108],{},"\nPaketmanager installierte Standard-Units liegen meist unter \u002Fusr\u002Flib\u002Fsystemd\u002Fsystem oder je nach",[1325,27111],{},"\nDistribution unter \u002Flib\u002Fsystemd\u002Fsystem. Änderungen in \u002Fetc haben in der Praxis Vorrang, weil dort lokale",[1325,27114],{},"\nAnpassungen vorgenommen werden.",[995,27117,27118,27119,27121,27122,27124],{},"Wie startest du einen Dienst manuell?",[1325,27120],{},"\nAntwort: Mit einem Befehl wie systemctl start nginx. Dadurch wird der Dienst sofort gestartet, aber noch",[1325,27123],{},"\nnicht automatisch für den nächsten Bootvorgang aktiviert.",[995,27126,27127,27128,27130,27131,27133,27134,27136],{},"Wie aktivierst du einen Dienst beim Booten?",[1325,27129],{},"\nAntwort: Mit systemctl enable nginx. Damit wird der Dienst so eingerichtet, dass er beim Systemstart",[1325,27132],{},"\nautomatisch geladen und gestartet wird. Der Befehl ändert also die Boot-Konfiguration, startet den",[1325,27135],{},"\nDienst aber nicht zwingend sofort.",[995,27138,27139,27140,27142,27143,27145,27146,27148],{},"Unterschied zwischen start und enable?",[1325,27141],{},"\nAntwort: start wirkt sofort und startet den Dienst in der aktuellen Sitzung. enable sorgt dafür, dass der",[1325,27144],{},"\nDienst beim nächsten Systemstart automatisch startet. In der Praxis werden oft beide Befehle",[1325,27147],{},"\nkombiniert, wenn ein Dienst sofort laufen und dauerhaft aktiviert sein soll.",[995,27150,27151,27152,27154,27155,27157],{},"Wie prüfst du den Status eines Dienstes?",[1325,27153],{},"\nAntwort: Mit systemctl status nginx. Der Befehl zeigt unter anderem, ob der Dienst aktiv ist, wann er",[1325,27156],{},"\ngestartet wurde, ob Fehler aufgetreten sind und welche letzten Log-Ausgaben zugeordnet wurden.",[995,27159,27160,27161,27163,27164,27166,27167,27169,27170,27172],{},"Was ist ein Target?",[1325,27162],{},"\nAntwort: Ein Target ist eine Sammlung von Units, die einen bestimmten Systemzustand beschreibt.",[1325,27165],{},"\nBeispiele sind multi-user.target für einen Mehrbenutzerbetrieb ohne grafische Oberfläche oder",[1325,27168],{},"\ngraphical.target für den grafischen Modus. Targets ersetzen damit weitgehend das frühere Runlevel-",[1325,27171],{},"\nKonzept.",[995,27174,27175,27176,27178,27179,27181,27182,27184],{},"Wie wechselst du das Target zur Laufzeit?",[1325,27177],{},"\nAntwort: Mit systemctl isolate multi-user.target. Dadurch versucht systemd, sofort in den angegebenen",[1325,27180],{},"\nZielzustand zu wechseln und nur die dafür benötigten Units aktiv zu lassen. Das kann laufende Dienste",[1325,27183],{},"\nstoppen, die im neuen Target nicht mehr benötigt werden.",[995,27186,27187,27188,27190,27191,27193,27194,27196],{},"Was ist der Unterschied zwischen restart und reload?",[1325,27189],{},"\nAntwort: restart beendet einen Dienst vollständig und startet ihn anschließend neu. reload lädt nur die",[1325,27192],{},"\nKonfiguration neu, ohne den Prozess komplett zu beenden, sofern der Dienst diese Funktion unterstützt.",[1325,27195],{},"\nreload ist daher oft schonender, weil laufende Verbindungen oder Zustände eher erhalten bleiben.",[898,27198,21067],{},[2652,27200,21207],{"id":27201},"seite-2-7",[9593,27203,27204],{"start":1258},[995,27205,27206,27207,27209,27210,27212,27213,27215,27216,27218],{},"Erstelle einen einfachen Service: Datei: \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmeinservice.service",[1325,27208],{},"\nAntwort: Eine einfache Unit-Datei könnte den Dienst mit ExecStart=\u002Fusr\u002Fbin\u002Fsleep 1000 definieren und",[1325,27211],{},"\nmit WantedBy=multi-user.target beim Mehrbenutzerstart einbinden. Nach dem Anlegen oder Ändern der",[1325,27214],{},"\nDatei sollte man systemctl daemon-reload ausführen, damit systemd die neue Unit-Datei einliest.",[1325,27217],{},"\nAnschließend kann man den Dienst mit systemctl enable meinservice dauerhaft aktivieren und mit",[904,27220,27222],{"className":906,"code":27221,"language":908,"meta":909,"style":909},"systemctl start meinservice sofort starten.\n",[911,27223,27224],{"__ignoreMap":909},[452,27225,27226,27229,27231,27234,27237],{"class":915,"line":916},[452,27227,27228],{"class":919},"systemctl",[452,27230,10374],{"class":923},[452,27232,27233],{"class":923}," meinservice",[452,27235,27236],{"class":923}," sofort",[452,27238,27239],{"class":923}," starten.\n",[9593,27241,27242,27257,27269,27281],{"start":1264},[995,27243,27244,27245,27247,27248,27250,27251,27253,27254,27256],{},"Was macht systemctl daemon-reload?",[1325,27246],{},"\nAntwort: Dieser Befehl liest die Unit-Dateien erneut ein, wenn Konfigurationen neu angelegt oder",[1325,27249],{},"\nverändert wurden. Er ist notwendig, damit systemd Änderungen an Service-Dateien, Timern oder",[1325,27252],{},"\nanderen Units überhaupt erkennt. Ohne daemon-reload arbeitet systemd oft noch mit der alten Version",[1325,27255],{},"\nder Datei.",[995,27258,27259,27260,27262,27263,27265,27266,27268],{},"Was ist journalctl?",[1325,27261],{},"\nAntwort: journalctl ist das Werkzeug zum Auslesen des systemd-Journals. Darüber lassen sich zentrale",[1325,27264],{},"\nLogeinträge des Systems und einzelner Dienste anzeigen, filtern und zeitlich eingrenzen. Es ist",[1325,27267],{},"\nbesonders nützlich für die Fehlersuche und die Analyse von Startproblemen.",[995,27270,27271,27272,27274,27275,27277,27278,27280],{},"Beispiel: Logs eines Dienstes anzeigen",[1325,27273],{},"\nAntwort: Mit journalctl -u nginx. Der Parameter -u filtert die Einträge auf eine bestimmte Unit, sodass nur",[1325,27276],{},"\ndie Protokolle des betreffenden Dienstes angezeigt werden. So lassen sich Fehler, Warnungen und",[1325,27279],{},"\nStartmeldungen gezielt untersuchen.",[995,27282,27283,27284,27286,27287,27289,27290,27292,27293,27295],{},"Was sind Timer-Units?",[1325,27285],{},"\nAntwort: Timer-Units sind die systemd-Variante für zeitgesteuerte Aufgaben und damit oft ein Ersatz für",[1325,27288],{},"\nklassische Cronjobs. Ein Timer startet zu bestimmten Zeitpunkten oder nach bestimmten Intervallen eine",[1325,27291],{},"\nzugehörige Service-Unit. Der Vorteil liegt darin, dass Zeitsteuerung und Dienstverwaltung direkt",[1325,27294],{},"\ninnerhalb von systemd zusammenarbeiten.",[27297,27298,27299],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":909,"searchDepth":1190,"depth":1190,"links":27301},[27302,27303,27304,27305,27306,27307,27308,27309,27310,27311,27314,27315,27321,27322,27323,27327,27331,27336,27344,27345,27354,27355,27356,27357,27364,27365,27366,27367,27368,27373,27374,27379,27388,27396,27397,27398,27399,27402,27403,27404,27405,27406,27407,27410,27411,27412,27413,27419,27420,27421,27422,27423,27424,27425,27426,27427,27428,27429,27430,27431,27432,27433,27434,27435,27438,27439,27440,27441,27450,27451,27458,27459,27460,27461,27466,27467,27468,27475,27476,27477,27478,27483,27487,27493,27506,27517,27528,27535,27541,27546,27552,27555,27559],{"id":259,"depth":1190,"text":260},{"id":400,"depth":1190,"text":401},{"id":482,"depth":1190,"text":483},{"id":605,"depth":1190,"text":606},{"id":720,"depth":1190,"text":721},{"id":828,"depth":1190,"text":829},{"id":895,"depth":1190,"text":896},{"id":1330,"depth":1190,"text":1330},{"id":1679,"depth":1190,"text":1679},{"id":2540,"depth":1190,"text":2541,"children":27312},[27313],{"id":2654,"depth":1197,"text":2655},{"id":2708,"depth":1190,"text":2709},{"id":2734,"depth":1190,"text":2735,"children":27316},[27317,27318,27319,27320],{"id":2738,"depth":1197,"text":2739},{"id":2798,"depth":1197,"text":2799},{"id":2837,"depth":1197,"text":2838},{"id":2880,"depth":1197,"text":2881},{"id":2914,"depth":1190,"text":2915},{"id":2933,"depth":1190,"text":2934},{"id":2984,"depth":1190,"text":2985,"children":27324},[27325,27326],{"id":2988,"depth":1197,"text":2989},{"id":3195,"depth":1197,"text":3196},{"id":3253,"depth":1190,"text":3254,"children":27328},[27329,27330],{"id":3276,"depth":1197,"text":3277},{"id":3462,"depth":1197,"text":3463},{"id":3589,"depth":1190,"text":3590,"children":27332},[27333,27334,27335],{"id":3606,"depth":1197,"text":3277},{"id":3677,"depth":1197,"text":3678},{"id":3761,"depth":1197,"text":3463},{"id":3852,"depth":1190,"text":3853,"children":27337},[27338,27339,27340,27341,27342,27343],{"id":3856,"depth":1197,"text":902},{"id":3917,"depth":1197,"text":3918},{"id":4040,"depth":1197,"text":4041},{"id":4202,"depth":1197,"text":4203},{"id":4305,"depth":1197,"text":4306},{"id":4417,"depth":1197,"text":1166},{"id":5181,"depth":1190,"text":5182},{"id":5233,"depth":1190,"text":5234,"children":27346},[27347,27348,27349,27350,27351,27352,27353],{"id":5237,"depth":1197,"text":902},{"id":5338,"depth":1197,"text":5339},{"id":5478,"depth":1197,"text":5479},{"id":5551,"depth":1197,"text":5552},{"id":5564,"depth":1197,"text":5565},{"id":5624,"depth":1197,"text":5625},{"id":5675,"depth":1197,"text":1166},{"id":6403,"depth":1190,"text":6404},{"id":6503,"depth":1190,"text":6504},{"id":6582,"depth":1190,"text":6583},{"id":6641,"depth":1190,"text":6642,"children":27358},[27359,27360,27361,27362,27363],{"id":6645,"depth":1197,"text":6646},{"id":6649,"depth":1197,"text":6650},{"id":6661,"depth":1197,"text":6662},{"id":6676,"depth":1197,"text":6677},{"id":6683,"depth":1197,"text":6684},{"id":6692,"depth":1190,"text":6693},{"id":6768,"depth":1190,"text":6769},{"id":6895,"depth":1190,"text":6896},{"id":6917,"depth":1190,"text":6918},{"id":6977,"depth":1190,"text":6978,"children":27369},[27370,27371,27372],{"id":6981,"depth":1197,"text":6982},{"id":7070,"depth":1197,"text":7071},{"id":7139,"depth":1197,"text":7140},{"id":7221,"depth":1190,"text":7222},{"id":7276,"depth":1190,"text":7277,"children":27375},[27376,27377,27378],{"id":7348,"depth":1197,"text":7349},{"id":7426,"depth":1197,"text":7427},{"id":7483,"depth":1197,"text":7484},{"id":7587,"depth":1190,"text":7588,"children":27380},[27381,27382,27383,27384,27385,27386,27387],{"id":7622,"depth":1197,"text":7623},{"id":7697,"depth":1197,"text":7698},{"id":7782,"depth":1197,"text":7783},{"id":7916,"depth":1197,"text":7917},{"id":7935,"depth":1197,"text":7936},{"id":8028,"depth":1197,"text":8029},{"id":8115,"depth":1197,"text":8116},{"id":8246,"depth":1190,"text":8247,"children":27389},[27390,27391,27392,27393,27394,27395],{"id":8264,"depth":1197,"text":8265},{"id":8373,"depth":1197,"text":8374},{"id":8437,"depth":1197,"text":8438},{"id":8547,"depth":1197,"text":8548},{"id":8592,"depth":1197,"text":8593},{"id":8652,"depth":1197,"text":8653},{"id":8762,"depth":1190,"text":8763},{"id":8837,"depth":1190,"text":8838},{"id":8990,"depth":1190,"text":8991},{"id":9051,"depth":1190,"text":9052,"children":27400},[27401],{"id":9080,"depth":1197,"text":9081},{"id":9158,"depth":1190,"text":9159},{"id":9273,"depth":1190,"text":9274},{"id":9341,"depth":1190,"text":9342},{"id":9480,"depth":1190,"text":9481},{"id":9542,"depth":1190,"text":9543},{"id":9577,"depth":1190,"text":9578,"children":27408},[27409],{"id":9590,"depth":1197,"text":9591},{"id":9618,"depth":1190,"text":9619},{"id":9745,"depth":1190,"text":9746},{"id":9869,"depth":1190,"text":9870},{"id":9945,"depth":1190,"text":9946,"children":27414},[27415,27416,27417,27418],{"id":9949,"depth":1197,"text":9950},{"id":9961,"depth":1197,"text":9962},{"id":10328,"depth":1197,"text":10329},{"id":10379,"depth":1197,"text":10380},{"id":10398,"depth":1190,"text":902},{"id":10471,"depth":1190,"text":10472},{"id":10513,"depth":1190,"text":10514},{"id":10578,"depth":1190,"text":10579},{"id":10636,"depth":1190,"text":10637},{"id":10722,"depth":1190,"text":10723},{"id":10814,"depth":1190,"text":1166},{"id":10962,"depth":1190,"text":10963},{"id":11032,"depth":1190,"text":11033},{"id":11054,"depth":1190,"text":11055},{"id":11111,"depth":1190,"text":902},{"id":11136,"depth":1190,"text":11137},{"id":11178,"depth":1190,"text":11179},{"id":11635,"depth":1190,"text":11636},{"id":11681,"depth":1190,"text":1166},{"id":12154,"depth":1190,"text":12155},{"id":12169,"depth":1190,"text":12170,"children":27436},[27437],{"id":12296,"depth":1197,"text":12297},{"id":12369,"depth":1190,"text":12370},{"id":12791,"depth":1190,"text":12792},{"id":12896,"depth":1190,"text":12897},{"id":12940,"depth":1190,"text":12941,"children":27442},[27443,27444,27445,27446,27447,27448,27449],{"id":12947,"depth":1197,"text":12948},{"id":13046,"depth":1197,"text":13047},{"id":13353,"depth":1197,"text":13354},{"id":13427,"depth":1197,"text":13428},{"id":13558,"depth":1197,"text":13559},{"id":13686,"depth":1197,"text":13687},{"id":13739,"depth":1197,"text":13740},{"id":14314,"depth":1190,"text":14315},{"id":14698,"depth":1190,"text":14699,"children":27452},[27453,27454,27455,27457],{"id":14829,"depth":1197,"text":14830},{"id":14876,"depth":1197,"text":14877},{"id":14968,"depth":1197,"text":27456},"Unterschied zwischen \"$array\" und \"${array@}\"",{"id":15128,"depth":1197,"text":15129},{"id":15155,"depth":1190,"text":15156},{"id":15172,"depth":1190,"text":15173},{"id":15227,"depth":1190,"text":15228},{"id":15324,"depth":1190,"text":15325,"children":27462},[27463,27464,27465],{"id":15478,"depth":1197,"text":15479},{"id":15552,"depth":1197,"text":15553},{"id":15632,"depth":1197,"text":15633},{"id":15689,"depth":1190,"text":15690},{"id":15828,"depth":1190,"text":15829},{"id":15946,"depth":1190,"text":15947,"children":27469},[27470,27471,27472,27473,27474],{"id":15950,"depth":1197,"text":15951},{"id":15997,"depth":1197,"text":15998},{"id":16061,"depth":1197,"text":16062},{"id":16465,"depth":1197,"text":16466},{"id":16505,"depth":1197,"text":16506},{"id":16558,"depth":1190,"text":16559},{"id":16628,"depth":1190,"text":16629},{"id":16658,"depth":1190,"text":16659},{"id":16949,"depth":1190,"text":16950,"children":27479},[27480,27481,27482],{"id":16953,"depth":1197,"text":16954},{"id":17022,"depth":1197,"text":17023},{"id":17109,"depth":1197,"text":17110},{"id":17303,"depth":1190,"text":17304,"children":27484},[27485,27486],{"id":17406,"depth":1197,"text":17407},{"id":17430,"depth":1197,"text":17431},{"id":17490,"depth":1190,"text":17491,"children":27488},[27489,27490,27491,27492],{"id":17494,"depth":1197,"text":17495},{"id":17555,"depth":1197,"text":17556},{"id":18266,"depth":1197,"text":18267},{"id":18684,"depth":1197,"text":18685},{"id":18697,"depth":1190,"text":18698,"children":27494},[27495,27496,27497,27498,27499,27500,27501,27502,27503,27504,27505],{"id":18701,"depth":1197,"text":902},{"id":18747,"depth":1197,"text":18748},{"id":18938,"depth":1197,"text":18939},{"id":19030,"depth":1197,"text":19031},{"id":19089,"depth":1197,"text":19090},{"id":19141,"depth":1197,"text":19142},{"id":19190,"depth":1197,"text":19191},{"id":19249,"depth":1197,"text":19250},{"id":20447,"depth":1197,"text":20448},{"id":20499,"depth":1197,"text":20500},{"id":20599,"depth":1197,"text":2735},{"id":21059,"depth":1190,"text":21060,"children":27507},[27508,27509,27510,27511,27512,27513,27514,27515,27516],{"id":21066,"depth":1197,"text":21067},{"id":21206,"depth":1197,"text":21207},{"id":21469,"depth":1197,"text":21470},{"id":21623,"depth":1197,"text":21624},{"id":21750,"depth":1197,"text":21751},{"id":22008,"depth":1197,"text":22009},{"id":22215,"depth":1197,"text":22216},{"id":22386,"depth":1197,"text":22387},{"id":22586,"depth":1197,"text":22587},{"id":22611,"depth":1190,"text":22612,"children":27518},[27519,27520,27521,27522,27523,27524,27525,27526,27527],{"id":22618,"depth":1197,"text":21067},{"id":22763,"depth":1197,"text":21207},{"id":22813,"depth":1197,"text":21470},{"id":23106,"depth":1197,"text":21624},{"id":23185,"depth":1197,"text":21751},{"id":23318,"depth":1197,"text":22009},{"id":23505,"depth":1197,"text":22216},{"id":23611,"depth":1197,"text":22387},{"id":23842,"depth":1197,"text":22587},{"id":23908,"depth":1190,"text":23909,"children":27529},[27530,27531,27532,27533,27534],{"id":23915,"depth":1197,"text":21067},{"id":24001,"depth":1197,"text":21207},{"id":24212,"depth":1197,"text":21470},{"id":24510,"depth":1197,"text":21624},{"id":24546,"depth":1197,"text":21751},{"id":24585,"depth":1190,"text":24586,"children":27536},[27537,27538,27539,27540],{"id":24592,"depth":1197,"text":21067},{"id":24721,"depth":1197,"text":21207},{"id":24918,"depth":1197,"text":21470},{"id":25078,"depth":1197,"text":21624},{"id":25381,"depth":1190,"text":25382,"children":27542},[27543,27544,27545],{"id":25388,"depth":1197,"text":21067},{"id":25516,"depth":1197,"text":21207},{"id":25631,"depth":1197,"text":21470},{"id":25670,"depth":1190,"text":25671,"children":27547},[27548,27549,27550,27551],{"id":25677,"depth":1197,"text":21067},{"id":25898,"depth":1197,"text":21207},{"id":26106,"depth":1197,"text":21470},{"id":26386,"depth":1197,"text":21624},{"id":26670,"depth":1190,"text":26671,"children":27553},[27554],{"id":26677,"depth":1197,"text":21067},{"id":26812,"depth":1190,"text":26813,"children":27556},[27557,27558],{"id":26819,"depth":1197,"text":21067},{"id":27020,"depth":1197,"text":21207},{"id":27058,"depth":1190,"text":27059,"children":27560},[27561,27562],{"id":27065,"depth":1197,"text":21067},{"id":27201,"depth":1197,"text":21207},"AP","md",{},{"title":5},"\u002Ffaecher\u002Fbsa\u002Fap-zsmf","\u002Fdownloads\u002FBSA\u002FBSA_ZSMF_AP.pdf","Abschlussprüfung",{"title":5,"description":909},"faecher\u002Fbsa\u002Fap-zsmf","BSA","Betriebssysteme und Administration","ZSMF","5EnLwpdNJfUZrGDKUmMLO1A5TlBoDrA1y-3kO_Bs0DM",1778676319975]