[{"data":1,"prerenderedAt":6515},["ShallowReactive",2],{"content-\u002Ffaecher\u002Fbsa\u002F7-8-cs-sa2":3},{"id":4,"title":5,"body":6,"class":6498,"description":446,"extension":6499,"meta":6500,"navigation":6501,"path":6503,"pdfDownload":6504,"scope":6505,"scopeName":6506,"seo":6507,"stem":6508,"subject":6509,"subjectName":6510,"type":6511,"typeName":6512,"year":6513,"__hash__":6514},"faecher\u002Ffaecher\u002Fbsa\u002F7-8-cs-sa2.md","Cheat-Sheet – Schulaufgabe 2",{"type":7,"value":8,"toc":6441},"minimark",[9,14,252,256,363,367,411,418,424,432,437,440,512,517,519,619,622,628,631,633,787,793,796,798,851,857,860,862,917,922,952,957,963,969,975,980,1113,1118,1123,1125,1249,1254,1256,1310,1315,1317,1369,1374,1378,1381,1397,1411,1420,1423,1427,1434,1437,1452,1455,1467,1470,1488,1493,1510,1521,1531,1541,1551,1561,1571,1581,1591,1601,1611,1621,1631,1641,1651,1661,1671,1689,1704,1719,1731,1741,1757,1771,1788,1802,1817,1832,1847,1862,1872,1882,1892,1895,1899,1902,1936,1940,1943,1989,1993,1996,2046,2049,2058,2062,2088,2092,2098,2103,2109,2113,2119,2125,2131,2134,2141,2144,2151,2154,2161,2164,2171,2174,2180,2191,2197,2203,2206,2226,2232,2235,2256,2262,2265,2273,2279,2282,2302,2304,2323,2338,2344,2364,2370,2381,2387,2390,2396,2410,2413,2457,2462,2490,2495,2501,2504,2590,2596,2599,2607,2614,2621,2624,2631,2634,2640,2673,2677,2682,2697,2702,2715,2720,2742,2747,2750,2775,2780,2783,2786,2799,2802,2807,2810,2823,2828,2840,2845,2878,2883,2907,2911,2914,2919,2937,2942,2954,2959,2971,2976,2988,2993,3005,3010,3022,3027,3039,3044,3060,3064,3074,3079,3091,3096,3126,3130,3138,3143,3154,3158,3171,3176,3221,3227,3331,3335,3338,3354,3357,3375,3378,3395,3399,3410,3414,3425,3429,3448,3452,3466,3469,3514,3518,3522,3534,3537,3541,3555,3559,3574,3578,3581,3595,3599,3613,3617,3631,3635,3638,3655,3659,3662,3676,3679,3693,3697,3704,3708,3719,3723,3739,3743,3773,3776,3864,3868,3908,3912,3952,3956,3995,3997,4014,4017,4021,4024,4043,4046,4074,4078,4089,4093,4104,4108,4123,4127,4130,4136,4139,4195,4199,4203,4217,4221,4235,4239,4242,4257,4261,4281,4285,4288,4303,4306,4320,4324,4370,4374,4377,4433,4437,4482,4490,4494,4503,4509,4632,4637,4641,4645,4766,4771,5339,5343,5345,5348,5352,5354,5356,5360,5362,5364,5368,5389,5391,5393,5405,5407,5412,5416,5420,5536,5541,5545,5549,5594,5599,6015,6019,6185,6189,6302,6306,6437],[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},"_1-skript-grundlagen-datenfluss","1. Skript-Grundlagen & Datenfluss",[257,258,259,266,272,278,284,290,296,302,308,314,325,335],"ul",{},[260,261,262,265],"li",{},[27,263,264],{},"Shebang:"," Beginne ein Skript immer mit #! (z. B. #!\u002Fbin\u002Fbash), um die Shell festzulegen.",[260,267,268,271],{},[27,269,270],{},"Ausführbar machen",": chmod +x \u003Cscriptname>.sh",[260,273,274,277],{},[27,275,276],{},"Ausgabe überschreiben:"," > file erstellt oder überschreibt eine Datei.",[260,279,280,283],{},[27,281,282],{},"Ausgabe anhängen:"," >> file fügt Text ans Ende einer Datei an.",[260,285,286,289],{},[27,287,288],{},"Eingabe lesen:"," \u003C file liest den Inhalt einer Datei ein.",[260,291,292,295],{},[27,293,294],{},"Pipe:"," a | b leitet die Ausgabe von Befehl \"a\" als Eingabe an Befehl \"b\" weiter.",[260,297,298,301],{},[27,299,300],{},"Kommentare",": # am Beginn der Zeile",[260,303,304,307],{},[27,305,306],{},"Variablen-Zuweisung",": variablenname=”\u003Cwert>” (Kein Leerzeichen um das =)",[260,309,310,313],{},[27,311,312],{},"Variablen-Aufruf",": $variablenname (Case-Sensitive)",[260,315,316,319,320],{},[27,317,318],{},"Umgebungsvariable",": export global=”\u003Cwert>”\n",[257,321,322],{},[260,323,324],{},"Für Unterprozesse sichtbar",[260,326,327,330,331],{},[27,328,329],{},"Script-Aufruf",": .\u002Fscriptname.sh ",[332,333,334],"span",{},"param1",[260,336,337,340,341,344,345,344,348,351,352],{},[27,338,339],{},"User-Eingabe während des Scripts",": read ",[332,342,343],{},"-s"," ",[332,346,347],{},"-r",[332,349,350],{},"-p “\u003Cprompt>”"," \u003Cvariablenname>\n",[257,353,354,357,360],{},[260,355,356],{},"-p “\u003Cprompt>”: Prompt vor der Eingabe",[260,358,359],{},"-s: verdeckte Eingabe (Passwörter)",[260,361,362],{},"-r: verhindert Escape-Sequenzen",[10,364,366],{"id":365},"_2-wichtige-variablen","2. Wichtige Variablen",[257,368,369,375,381,387,393,399,405],{},[260,370,371,374],{},[27,372,373],{},"$0",": Der Name des aufgerufenen Programms.",[260,376,377,380],{},[27,378,379],{},"$1, $2, …",": Das erste und zweite übergebene Argument.",[260,382,383,386],{},[27,384,385],{},"$#",": Die Anzahl der übergebenen Argumente.",[260,388,389,392],{},[27,390,391],{},"$","*: Alle übergebenen Argumente auf einmal.",[260,394,395,398],{},[27,396,397],{},"$?",": Der Rückgabecode des letzten Befehls (0 = Fehlerfrei).",[260,400,401,404],{},[27,402,403],{},"$$",": Die Prozess-ID (PID) des aktuellen Skripts.",[260,406,407,410],{},[27,408,409],{},"${V:-default}",": Gibt den Wert von $V aus, oder \"default\", falls die Variable leer ist.",[412,413,415],"ol",{"start":414},3,[260,416,417],{},"Logik & Bedingungen",[419,420,421],"p",{},[27,422,423],{},"Befehle direkt verketten:",[257,425,426,429],{},[260,427,428],{},"cmd1 && cmd2: Führe cmd1 aus; wenn er erfolgreich war, führe cmd2 aus.",[260,430,431],{},"cmd1 || cmd2: Führe cmd1 aus; wenn er fehlschlägt, führe cmd2 aus.",[433,434,436],"h3",{"id":435},"die-if-abfrage","Die If-Abfrage:",[419,438,439],{},"Bash",[441,442,447],"pre",{"className":443,"code":444,"language":445,"meta":446,"style":446},"language-bash shiki shiki-themes github-light github-dark","if [ \"$x\" -lt \"$y\" ]; then\n\n# do something\n\nfi\n\n","bash","",[448,449,450,488,495,501,506],"code",{"__ignoreMap":446},[332,451,454,458,462,466,469,471,474,477,480,482,485],{"class":452,"line":453},"line",1,[332,455,457],{"class":456},"szBVR","if",[332,459,461],{"class":460},"sVt8B"," [ ",[332,463,465],{"class":464},"sZZnC","\"",[332,467,468],{"class":460},"$x",[332,470,465],{"class":464},[332,472,473],{"class":456}," -lt",[332,475,476],{"class":464}," \"",[332,478,479],{"class":460},"$y",[332,481,465],{"class":464},[332,483,484],{"class":460}," ]; ",[332,486,487],{"class":456},"then\n",[332,489,491],{"class":452,"line":490},2,[332,492,494],{"emptyLinePlaceholder":493},true,"\n",[332,496,497],{"class":452,"line":414},[332,498,500],{"class":499},"sJ8bj","# do something\n",[332,502,504],{"class":452,"line":503},4,[332,505,494],{"emptyLinePlaceholder":493},[332,507,509],{"class":452,"line":508},5,[332,510,511],{"class":456},"fi\n",[419,513,514],{},[27,515,516],{},"Die Case-Anweisung (Mehrfach-Auswahl):",[419,518,439],{},[441,520,522],{"className":443,"code":521,"language":445,"meta":446,"style":446},"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",[448,523,524,535,539,561,565,585,590,608,613],{"__ignoreMap":446},[332,525,526,529,532],{"class":452,"line":453},[332,527,528],{"class":456},"case",[332,530,531],{"class":460}," $foo ",[332,533,534],{"class":456},"in\n",[332,536,537],{"class":452,"line":490},[332,538,494],{"emptyLinePlaceholder":493},[332,540,541,545,548,552,555,558],{"class":452,"line":414},[332,542,544],{"class":543},"sA_wV","a",[332,546,547],{"class":456},")",[332,549,551],{"class":550},"sj4cs"," echo",[332,553,554],{"class":464}," \"foo is A\"",[332,556,557],{"class":460}," ;; ",[332,559,560],{"class":499},"#(foo = a)\n",[332,562,563],{"class":452,"line":503},[332,564,494],{"emptyLinePlaceholder":493},[332,566,567,571,574,577,580,582],{"class":452,"line":508},[332,568,570],{"class":569},"sScJk","b",[332,572,573],{"class":460},") ",[332,575,576],{"class":550},"echo",[332,578,579],{"class":464}," \"foo is B\"",[332,581,557],{"class":460},[332,583,584],{"class":499},"#(foo = b)\n",[332,586,588],{"class":452,"line":587},6,[332,589,494],{"emptyLinePlaceholder":493},[332,591,593,596,598,600,603,605],{"class":452,"line":592},7,[332,594,595],{"class":569},"*",[332,597,573],{"class":460},[332,599,576],{"class":550},[332,601,602],{"class":464}," \"foo is not A or B\"",[332,604,557],{"class":460},[332,606,607],{"class":499},"#(alles anderes)\n",[332,609,611],{"class":452,"line":610},8,[332,612,494],{"emptyLinePlaceholder":493},[332,614,616],{"class":452,"line":615},9,[332,617,618],{"class":456},"esac\n",[419,620,621],{},"(Wichtig: Das ;; am Ende jedes Blocks ist zwingend erforderlich ).",[433,623,625],{"id":624},"_1-for-loop-beispiel-über-eine-liste-iterieren",[27,626,627],{},"1. for – loop Beispiel: Über eine Liste iterieren",[419,629,630],{},"Dies ist der klassische Anwendungsfall: Du gehst eine Liste von Dateien oder Werten nacheinander durch.",[419,632,439],{},[441,634,636],{"className":443,"code":635,"language":445,"meta":446,"style":446},"#!\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\nfor tier in Hund Katze Maus; do\necho \"Das ist ein(e): $tier\"\ndone\n\n",[448,637,638,643,647,670,674,684,688,705,709,722,727,733,738,744,768,781],{"__ignoreMap":446},[332,639,640],{"class":452,"line":453},[332,641,642],{"class":499},"#!\u002Fbin\u002Fbash\n",[332,644,645],{"class":452,"line":490},[332,646,494],{"emptyLinePlaceholder":493},[332,648,649,652,655,658,661,664,667],{"class":452,"line":414},[332,650,651],{"class":460},"MEIN_ARRAY",[332,653,654],{"class":456},"=",[332,656,657],{"class":460},"(",[332,659,660],{"class":464},"\"Apfel Birne\"",[332,662,663],{"class":464}," \"Banane\"",[332,665,666],{"class":464}," \"Kirsche\"",[332,668,669],{"class":460},")\n",[332,671,672],{"class":452,"line":503},[332,673,494],{"emptyLinePlaceholder":493},[332,675,676,679,681],{"class":452,"line":508},[332,677,678],{"class":460},"MEINE_LISTE",[332,680,654],{"class":456},[332,682,683],{"class":464},"\"Apfel Birne Banane\"\n",[332,685,686],{"class":452,"line":587},[332,687,494],{"emptyLinePlaceholder":493},[332,689,690,693,696,699,702],{"class":452,"line":592},[332,691,692],{"class":456},"for",[332,694,695],{"class":460}," obst ",[332,697,698],{"class":456},"in",[332,700,701],{"class":460}," $MEINE_LISTE; ",[332,703,704],{"class":456},"do\n",[332,706,707],{"class":452,"line":610},[332,708,494],{"emptyLinePlaceholder":493},[332,710,711,713,716,719],{"class":452,"line":615},[332,712,576],{"class":550},[332,714,715],{"class":464}," \"Ich mag ",[332,717,718],{"class":460},"$obst",[332,720,721],{"class":464},"\"\n",[332,723,725],{"class":452,"line":724},10,[332,726,494],{"emptyLinePlaceholder":493},[332,728,730],{"class":452,"line":729},11,[332,731,732],{"class":569},"Done\n",[332,734,736],{"class":452,"line":735},12,[332,737,494],{"emptyLinePlaceholder":493},[332,739,741],{"class":452,"line":740},13,[332,742,743],{"class":499},"# Liste von Werten durchgehen\n",[332,745,747,749,752,754,757,760,763,766],{"class":452,"line":746},14,[332,748,692],{"class":456},[332,750,751],{"class":460}," tier ",[332,753,698],{"class":456},[332,755,756],{"class":464}," Hund",[332,758,759],{"class":464}," Katze",[332,761,762],{"class":464}," Maus",[332,764,765],{"class":460},"; ",[332,767,704],{"class":456},[332,769,771,773,776,779],{"class":452,"line":770},15,[332,772,576],{"class":550},[332,774,775],{"class":464}," \"Das ist ein(e): ",[332,777,778],{"class":460},"$tier",[332,780,721],{"class":464},[332,782,784],{"class":452,"line":783},16,[332,785,786],{"class":456},"done\n",[433,788,790],{"id":789},"_2-beispiel-über-einen-zahlenbereich-iterieren",[27,791,792],{},"2. Beispiel: Über einen Zahlenbereich iterieren",[419,794,795],{},"Wenn du eine Aktion eine bestimmte Anzahl an Malen wiederholen willst (z. B. 5-mal):",[419,797,439],{},[441,799,801],{"className":443,"code":800,"language":445,"meta":446,"style":446},"#!\u002Fbin\u002Fbash\n\n# Zählen von 1 bis 5\nfor i in {1..5}; do\necho \"Durchlauf Nummer: $i\"\ndone\n\n",[448,802,803,807,811,816,835,847],{"__ignoreMap":446},[332,804,805],{"class":452,"line":453},[332,806,642],{"class":499},[332,808,809],{"class":452,"line":490},[332,810,494],{"emptyLinePlaceholder":493},[332,812,813],{"class":452,"line":414},[332,814,815],{"class":499},"# Zählen von 1 bis 5\n",[332,817,818,820,823,825,828,831,833],{"class":452,"line":503},[332,819,692],{"class":456},[332,821,822],{"class":460}," i ",[332,824,698],{"class":456},[332,826,827],{"class":460}," {",[332,829,830],{"class":569},"1..5}",[332,832,765],{"class":460},[332,834,704],{"class":456},[332,836,837,839,842,845],{"class":452,"line":508},[332,838,576],{"class":550},[332,840,841],{"class":464}," \"Durchlauf Nummer: ",[332,843,844],{"class":460},"$i",[332,846,721],{"class":464},[332,848,849],{"class":452,"line":587},[332,850,786],{"class":456},[433,852,854],{"id":853},"_3-profi-tipp-dateien-im-verzeichnis-verarbeiten",[27,855,856],{},"3. Profi-Tipp: Dateien im Verzeichnis verarbeiten",[419,858,859],{},"Ein sehr häufiger Anwendungsfall in der Shell ist es, alle Dateien eines bestimmten Typs zu bearbeiten:",[419,861,439],{},[441,863,865],{"className":443,"code":864,"language":445,"meta":446,"style":446},"#!\u002Fbin\u002Fbash\n\n# Alle .txt Dateien im aktuellen Verzeichnis finden und ausgeben\nfor datei in *.txt; do\necho \"Verarbeite Datei: $datei\"\n# Hier könnte z.B. ein grep oder cat Befehl folgen\ndone\n\n",[448,866,867,871,875,880,896,908,913],{"__ignoreMap":446},[332,868,869],{"class":452,"line":453},[332,870,642],{"class":499},[332,872,873],{"class":452,"line":490},[332,874,494],{"emptyLinePlaceholder":493},[332,876,877],{"class":452,"line":414},[332,878,879],{"class":499},"# Alle .txt Dateien im aktuellen Verzeichnis finden und ausgeben\n",[332,881,882,884,887,889,892,894],{"class":452,"line":503},[332,883,692],{"class":456},[332,885,886],{"class":460}," datei ",[332,888,698],{"class":456},[332,890,891],{"class":464}," *.txt",[332,893,765],{"class":460},[332,895,704],{"class":456},[332,897,898,900,903,906],{"class":452,"line":508},[332,899,576],{"class":550},[332,901,902],{"class":464}," \"Verarbeite Datei: ",[332,904,905],{"class":460},"$datei",[332,907,721],{"class":464},[332,909,910],{"class":452,"line":587},[332,911,912],{"class":499},"# Hier könnte z.B. ein grep oder cat Befehl folgen\n",[332,914,915],{"class":452,"line":592},[332,916,786],{"class":456},[419,918,919],{},[27,920,921],{},"Zusammenfassung der Struktur:",[257,923,924,929,935,940,946],{},[260,925,926,928],{},[27,927,692],{},": Startet die Schleife.",[260,930,931,934],{},[27,932,933],{},"variable",": Ein frei wählbarer Name, der bei jedem Durchlauf den aktuellen Wert annimmt.",[260,936,937,939],{},[27,938,698],{},": Definiert die Liste oder den Bereich, der abgearbeitet wird.",[260,941,942,945],{},[27,943,944],{},"do",": Leitet den Codeblock ein, der für jedes Element ausgeführt wird.",[260,947,948,951],{},[27,949,950],{},"done",": Beendet den Schleifenblock.",[419,953,954,956],{},[27,955,692],{}," Wenn die Anzahl der Elemente feststeht.",[419,958,959,962],{},[27,960,961],{},"while"," Wenn du auf einen Zustand wartest.",[419,964,965,968],{},[27,966,967],{},"continue"," Wenn ein einzelnes Element ignoriert werden soll.",[419,970,971,974],{},[27,972,973],{},"break"," Wenn die Arbeit vorzeitig erledigt ist.",[412,976,977],{"start":503},[260,978,979],{},"Test-Operatoren (Bedingungen prüfen)",[15,981,982,1001],{},[18,983,984],{},[21,985,986,991,996],{},[24,987,988],{},[27,989,990],{},"Typ",[24,992,993],{},[27,994,995],{},"Operatoren",[24,997,998],{},[27,999,1000],{},"Bedeutung",[41,1002,1003,1016,1026,1036,1048,1058,1071,1081,1091,1103],{},[21,1004,1005,1010,1013],{},[46,1006,1007],{},[27,1008,1009],{},"Zahlen",[46,1011,1012],{},"-eq \u002F -ne",[46,1014,1015],{},"Gleich \u002F Ungleich",[21,1017,1018,1020,1023],{},[46,1019],{},[46,1021,1022],{},"-lt \u002F -le",[46,1024,1025],{},"Kleiner als \u002F Kleiner oder gleich",[21,1027,1028,1030,1033],{},[46,1029],{},[46,1031,1032],{},"-gt \u002F -ge",[46,1034,1035],{},"Größer als \u002F Größer oder gleich",[21,1037,1038,1043,1045],{},[46,1039,1040],{},[27,1041,1042],{},"Text",[46,1044,654],{},[46,1046,1047],{},"Strings sind gleich",[21,1049,1050,1052,1055],{},[46,1051],{},[46,1053,1054],{},"-z \u002F -n",[46,1056,1057],{},"Länge ist Null (leer) \u002F Nicht leer",[21,1059,1060,1065,1068],{},[46,1061,1062],{},[27,1063,1064],{},"Dateien",[46,1066,1067],{},"-d \u002F -x",[46,1069,1070],{},"Ist ein Verzeichnis \u002F Ist ausführbar",[21,1072,1073,1075,1078],{},[46,1074],{},[46,1076,1077],{},"-r \u002F -w",[46,1079,1080],{},"Ist lesbar \u002F Ist schreibbar",[21,1082,1083,1085,1088],{},[46,1084],{},[46,1086,1087],{},"-nt",[46,1089,1090],{},"Ist neuer als (newer than)",[21,1092,1093,1098,1101],{},[46,1094,1095],{},[27,1096,1097],{},"Logik",[46,1099,1100],{},"&& \u002F `",[46,1102],{},[21,1104,1105,1107,1110],{},[46,1106],{},[46,1108,1109],{},"!",[46,1111,1112],{},"Logisches NICHT",[419,1114,1115],{},[27,1116,1117],{},"4. Schleifen, Case & Funktionen",[419,1119,1120],{},[27,1121,1122],{},"While-Schleife (Datei zeilenweise einlesen):",[419,1124,439],{},[441,1126,1128],{"className":443,"code":1127,"language":445,"meta":446,"style":446},"while read f\n\ndo\n\necho \"Line is $f\"\n\ndone \u003C dateiname.txt\n\nwhile read benutzer\n\ndo\n\nmkdir \"\u002Fhome\u002F$benutzer\"\n\necho \"Ordner für $benutzer wurde erstellt.\"\n\ndone \u003C benutzerliste.txt #Datei einlesen wird als 1. ausgeführt\n\n",[448,1129,1130,1140,1144,1148,1152,1164,1168,1178,1182,1191,1195,1199,1203,1216,1220,1232,1236],{"__ignoreMap":446},[332,1131,1132,1134,1137],{"class":452,"line":453},[332,1133,961],{"class":456},[332,1135,1136],{"class":550}," read",[332,1138,1139],{"class":464}," f\n",[332,1141,1142],{"class":452,"line":490},[332,1143,494],{"emptyLinePlaceholder":493},[332,1145,1146],{"class":452,"line":414},[332,1147,704],{"class":456},[332,1149,1150],{"class":452,"line":503},[332,1151,494],{"emptyLinePlaceholder":493},[332,1153,1154,1156,1159,1162],{"class":452,"line":508},[332,1155,576],{"class":550},[332,1157,1158],{"class":464}," \"Line is ",[332,1160,1161],{"class":460},"$f",[332,1163,721],{"class":464},[332,1165,1166],{"class":452,"line":587},[332,1167,494],{"emptyLinePlaceholder":493},[332,1169,1170,1172,1175],{"class":452,"line":592},[332,1171,950],{"class":456},[332,1173,1174],{"class":456}," \u003C",[332,1176,1177],{"class":460}," dateiname.txt\n",[332,1179,1180],{"class":452,"line":610},[332,1181,494],{"emptyLinePlaceholder":493},[332,1183,1184,1186,1188],{"class":452,"line":615},[332,1185,961],{"class":456},[332,1187,1136],{"class":550},[332,1189,1190],{"class":464}," benutzer\n",[332,1192,1193],{"class":452,"line":724},[332,1194,494],{"emptyLinePlaceholder":493},[332,1196,1197],{"class":452,"line":729},[332,1198,704],{"class":456},[332,1200,1201],{"class":452,"line":735},[332,1202,494],{"emptyLinePlaceholder":493},[332,1204,1205,1208,1211,1214],{"class":452,"line":740},[332,1206,1207],{"class":569},"mkdir",[332,1209,1210],{"class":464}," \"\u002Fhome\u002F",[332,1212,1213],{"class":460},"$benutzer",[332,1215,721],{"class":464},[332,1217,1218],{"class":452,"line":746},[332,1219,494],{"emptyLinePlaceholder":493},[332,1221,1222,1224,1227,1229],{"class":452,"line":770},[332,1223,576],{"class":550},[332,1225,1226],{"class":464}," \"Ordner für ",[332,1228,1213],{"class":460},[332,1230,1231],{"class":464}," wurde erstellt.\"\n",[332,1233,1234],{"class":452,"line":783},[332,1235,494],{"emptyLinePlaceholder":493},[332,1237,1239,1241,1243,1246],{"class":452,"line":1238},17,[332,1240,950],{"class":456},[332,1242,1174],{"class":456},[332,1244,1245],{"class":460}," benutzerliste.txt ",[332,1247,1248],{"class":499},"#Datei einlesen wird als 1. ausgeführt\n",[419,1250,1251],{},[27,1252,1253],{},"Case-Anweisung (Mehrfach-Auswahl):",[419,1255,439],{},[441,1257,1259],{"className":443,"code":1258,"language":445,"meta":446,"style":446},"case $foo in\n\na) echo \"foo is A\" ;;\n\n*) echo \"foo is not A\" ;;\n\nesac\n\n",[448,1260,1261,1269,1273,1286,1290,1302,1306],{"__ignoreMap":446},[332,1262,1263,1265,1267],{"class":452,"line":453},[332,1264,528],{"class":456},[332,1266,531],{"class":460},[332,1268,534],{"class":456},[332,1270,1271],{"class":452,"line":490},[332,1272,494],{"emptyLinePlaceholder":493},[332,1274,1275,1277,1279,1281,1283],{"class":452,"line":414},[332,1276,544],{"class":543},[332,1278,547],{"class":456},[332,1280,551],{"class":550},[332,1282,554],{"class":464},[332,1284,1285],{"class":460}," ;;\n",[332,1287,1288],{"class":452,"line":503},[332,1289,494],{"emptyLinePlaceholder":493},[332,1291,1292,1295,1297,1300],{"class":452,"line":508},[332,1293,1294],{"class":456},"*)",[332,1296,551],{"class":550},[332,1298,1299],{"class":464}," \"foo is not A\"",[332,1301,1285],{"class":460},[332,1303,1304],{"class":452,"line":587},[332,1305,494],{"emptyLinePlaceholder":493},[332,1307,1308],{"class":452,"line":592},[332,1309,618],{"class":456},[419,1311,1312],{},[27,1313,1314],{},"Funktionen definieren und aufrufen:",[419,1316,439],{},[441,1318,1320],{"className":443,"code":1319,"language":445,"meta":446,"style":446},"doubleit() {\n\nexpr $1 * 2\n\n}\n\ndoubleit 3\n\n",[448,1321,1322,1330,1334,1349,1353,1358,1362],{"__ignoreMap":446},[332,1323,1324,1327],{"class":452,"line":453},[332,1325,1326],{"class":569},"doubleit",[332,1328,1329],{"class":460},"() {\n",[332,1331,1332],{"class":452,"line":490},[332,1333,494],{"emptyLinePlaceholder":493},[332,1335,1336,1339,1343,1346],{"class":452,"line":414},[332,1337,1338],{"class":569},"expr",[332,1340,1342],{"class":1341},"s4XuR"," $1",[332,1344,1345],{"class":550}," *",[332,1347,1348],{"class":550}," 2\n",[332,1350,1351],{"class":452,"line":503},[332,1352,494],{"emptyLinePlaceholder":493},[332,1354,1355],{"class":452,"line":508},[332,1356,1357],{"class":460},"}\n",[332,1359,1360],{"class":452,"line":587},[332,1361,494],{"emptyLinePlaceholder":493},[332,1363,1364,1366],{"class":452,"line":592},[332,1365,1326],{"class":569},[332,1367,1368],{"class":550}," 3\n",[1370,1371,1373],"h2",{"id":1372},"_42-if-ausführlich","4.2 If ausführlich",[433,1375,1377],{"id":1376},"_421-die-einfache-if-anweisung","4.2.1 Die einfache if-Anweisung",[419,1379,1380],{},"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.",[441,1382,1384],{"className":443,"code":1383,"language":445,"meta":446,"style":446},"if Kommando\nthen\n",[448,1385,1386,1393],{"__ignoreMap":446},[332,1387,1388,1390],{"class":452,"line":453},[332,1389,457],{"class":456},[332,1391,1392],{"class":569}," Kommando\n",[332,1394,1395],{"class":452,"line":490},[332,1396,487],{"class":456},[419,1398,1399,1403,1406,1408,1410],{},[1400,1401,1402],"em",{},"Aktion",[1404,1405],"br",{},[1400,1407,1402],{},[1404,1409],{},"\n...",[441,1412,1414],{"className":443,"code":1413,"language":445,"meta":446,"style":446},"fi\n\n",[448,1415,1416],{"__ignoreMap":446},[332,1417,1418],{"class":452,"line":453},[332,1419,511],{"class":456},[419,1421,1422],{},"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.",[433,1424,1426],{"id":1425},"_422-das-programm-test","4.2.2 Das Programm test",[419,1428,1429,1430,1433],{},"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 ",[1400,1431,1432],{},"test"," und ermöglicht alle wesentlichen Bedingungsüberprüfungen, die für das Shell-Programmieren notwendig sind.",[419,1435,1436],{},"Damit wir nicht jedesmal schreiben müssen",[441,1438,1440],{"className":443,"code":1439,"language":445,"meta":446,"style":446},"if test ...\n\n",[448,1441,1442],{"__ignoreMap":446},[332,1443,1444,1446,1449],{"class":452,"line":453},[332,1445,457],{"class":456},[332,1447,1448],{"class":550}," test",[332,1450,1451],{"class":464}," ...\n",[419,1453,1454],{},"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:",[441,1456,1458],{"className":443,"code":1457,"language":445,"meta":446,"style":446},"if [ ... ]\n\n",[448,1459,1460],{"__ignoreMap":446},[332,1461,1462,1464],{"class":452,"line":453},[332,1463,457],{"class":456},[332,1465,1466],{"class":460}," [ ... ]\n",[419,1468,1469],{},"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!",[441,1471,1473],{"className":443,"code":1472,"language":445,"meta":446,"style":446},"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",[448,1474,1475],{"__ignoreMap":446},[332,1476,1477,1480,1482,1485],{"class":452,"line":453},[332,1478,1479],{"class":460},"DATEI",[332,1481,654],{"class":456},[332,1483,1484],{"class":464},"\"test.txt\"",[332,1486,1487],{"class":499}," # Prüfen, ob die Datei existiert UND sowohl lesbar als auch beschreibbar ist if [ -f \"$DATEI\" ] && [ -r \"$DATEI\" ] && [ -w \"$DATEI\" ]; then\n",[1489,1490,1492],"h4",{"id":1491},"_4221-die-verschiedenen-bedingungsüberprüfungen-mit-test-bzw-buch-seite-312","4.2.2.1 Die verschiedenen Bedingungsüberprüfungen mit test bzw. [ (Buch Seite 312)",[419,1494,1495,1505,1506,1509],{},[27,1496,1497,1498],{},"-r ",[1400,1499,1500,1501,1504],{},"Dateiname: if ",[332,1502,1503],{},"-r file.txt","; then:"," Die Datei ",[1400,1507,1508],{},"Dateiname"," existiert und ist lesbar",[419,1511,1512,1517,1518,1520],{},[27,1513,1514,1515],{},"-w ",[1400,1516,1508],{},": Die Datei ",[1400,1519,1508],{}," existiert und ist beschreibbar",[419,1522,1523,1517,1528,1530],{},[27,1524,1525,1526],{},"-x ",[1400,1527,1508],{},[1400,1529,1508],{}," existiert und ist ausführbar",[419,1532,1533,1517,1538,1540],{},[27,1534,1535,1536],{},"-d ",[1400,1537,1508],{},[1400,1539,1508],{}," existiert und ist ein Verzeichnis",[419,1542,1543,1517,1548,1550],{},[27,1544,1545,1546],{},"-s ",[1400,1547,1508],{},[1400,1549,1508],{}," existiert und ist nicht leer",[419,1552,1553,1517,1558,1560],{},[27,1554,1555,1556],{},"-b ",[1400,1557,1508],{},[1400,1559,1508],{}," existiert und ist ein blockorientiertes Gerät",[419,1562,1563,1517,1568,1570],{},[27,1564,1565,1566],{},"-c ",[1400,1567,1508],{},[1400,1569,1508],{}," existiert und ist ein zeichenorientiertes Gerät",[419,1572,1573,1517,1578,1580],{},[27,1574,1575,1576],{},"-g ",[1400,1577,1508],{},[1400,1579,1508],{}," existiert und das SGID-Bit ist gesetzt",[419,1582,1583,1517,1588,1590],{},[27,1584,1585,1586],{},"-k ",[1400,1587,1508],{},[1400,1589,1508],{}," existiert und das Sticky-Bit ist gesetzt",[419,1592,1593,1517,1598,1600],{},[27,1594,1595,1596],{},"-u ",[1400,1597,1508],{},[1400,1599,1508],{}," existiert und das SUID-Bit ist gesetzt",[419,1602,1603,1517,1608,1610],{},[27,1604,1605,1606],{},"-p ",[1400,1607,1508],{},[1400,1609,1508],{}," existiert und ist ein Named Pipe",[419,1612,1613,1517,1618,1620],{},[27,1614,1615,1616],{},"-e ",[1400,1617,1508],{},[1400,1619,1508],{}," existiert",[419,1622,1623,1517,1628,1630],{},[27,1624,1625,1626],{},"-f ",[1400,1627,1508],{},[1400,1629,1508],{}," existiert und ist eine reguläre Datei",[419,1632,1633,1517,1638,1640],{},[27,1634,1635,1636],{},"-L ",[1400,1637,1508],{},[1400,1639,1508],{}," existiert und ist ein symbolischer Link",[419,1642,1643,1517,1648,1650],{},[27,1644,1645,1646],{},"-S ",[1400,1647,1508],{},[1400,1649,1508],{}," existiert und ist ein Socket",[419,1652,1653,1517,1658,1660],{},[27,1654,1655,1656],{},"-O ",[1400,1657,1508],{},[1400,1659,1508],{}," existiert und ist Eigentum des Anwenders, unter dessen UID das test-Programm gerade läuft",[419,1662,1663,1517,1668,1670],{},[27,1664,1665,1666],{},"-G ",[1400,1667,1508],{},[1400,1669,1508],{}," existiert und gehört zu der Gruppe, zu der der User gehört, unter dessen UID das test-Programm gerade läuft",[419,1672,1673,1682,1683,1685,1686,1688],{},[27,1674,1675,1678,1679],{},[1400,1676,1677],{},"Datei1"," -nt ",[1400,1680,1681],{},"Datei2",": ",[1400,1684,1677],{}," ist neuer als ",[1400,1687,1681],{}," (newer than)",[419,1690,1691,1682,1698,1700,1701,1703],{},[27,1692,1693,1695,1696],{},[1400,1694,1677],{}," -ot ",[1400,1697,1681],{},[1400,1699,1677],{}," ist älter als ",[1400,1702,1681],{}," (older than)",[419,1705,1706,1682,1713,1715,1716,1718],{},[27,1707,1708,1710,1711],{},[1400,1709,1677],{}," -ef ",[1400,1712,1681],{},[1400,1714,1677],{}," und ",[1400,1717,1681],{}," benutzen die gleiche I-Node (equal file)",[419,1720,1721,1727,1728,1730],{},[27,1722,1723,1724],{},"-z ",[1400,1725,1726],{},"Zeichenkette",": Wahr wenn ",[1400,1729,1726],{}," eine Länge von Null hat.",[419,1732,1733,1727,1738,1740],{},[27,1734,1735,1736],{},"-n ",[1400,1737,1726],{},[1400,1739,1726],{}," eine Länge von größer als Null hat.",[419,1742,1743,1727,1752,1754,1755],{},[27,1744,1745,1748,1749],{},[1400,1746,1747],{},"Zeichenkette1"," = ",[1400,1750,1751],{},"Zeichenkette2",[1400,1753,1747],{}," gleich ",[1400,1756,1751],{},[419,1758,1759,1727,1766,1768,1769],{},[27,1760,1761,1763,1764],{},[1400,1762,1747],{}," != ",[1400,1765,1751],{},[1400,1767,1747],{}," ungleich ",[1400,1770,1751],{},[419,1772,1773,1782,1783,1754,1785,1787],{},[27,1774,1775,1778,1779],{},[1400,1776,1777],{},"Wert1"," -eq ",[1400,1780,1781],{},"Wert2",": Wahr, wenn ",[1400,1784,1777],{},[1400,1786,1781],{}," (equal)",[419,1789,1790,1782,1797,1768,1799,1801],{},[27,1791,1792,1794,1795],{},[1400,1793,1777],{}," -ne ",[1400,1796,1781],{},[1400,1798,1777],{},[1400,1800,1781],{}," (not equal)",[419,1803,1804,1782,1811,1813,1814,1816],{},[27,1805,1806,1808,1809],{},[1400,1807,1777],{}," -gt ",[1400,1810,1781],{},[1400,1812,1777],{}," größer ",[1400,1815,1781],{}," (greater than)",[419,1818,1819,1782,1826,1828,1829,1831],{},[27,1820,1821,1823,1824],{},[1400,1822,1777],{}," -ge ",[1400,1825,1781],{},[1400,1827,1777],{}," größer oder gleich ",[1400,1830,1781],{}," (greater or equal)",[419,1833,1834,1782,1841,1843,1844,1846],{},[27,1835,1836,1838,1839],{},[1400,1837,1777],{}," -lt ",[1400,1840,1781],{},[1400,1842,1777],{}," kleiner ",[1400,1845,1781],{}," (less than)",[419,1848,1849,1782,1856,1858,1859,1861],{},[27,1850,1851,1853,1854],{},[1400,1852,1777],{}," -le ",[1400,1855,1781],{},[1400,1857,1777],{}," kleiner oder gleich ",[1400,1860,1781],{}," (less or equal)",[419,1863,1864,1869,1870],{},[27,1865,1109,1866],{},[1400,1867,1868],{},"Ausdruck",": Logische Verneinung von ",[1400,1871,1868],{},[419,1873,1874,1881],{},[27,1875,1876,1878,1879],{},[1400,1877,1868],{}," -a ",[1400,1880,1868],{},": Logisches UND. Wahr, wenn beide Ausdrücke wahr sind",[419,1883,1884,1891],{},[27,1885,1886,1888,1889],{},[1400,1887,1868],{}," -o ",[1400,1890,1868],{},": Logisches ODER. Wahr wenn mindestens einer der beiden Ausdrücke wahr ist",[419,1893,1894],{},"Mit diesen Tests sind so ziemlich alle denkbaren Bedingungsüberprüfungen möglich, die in einem Shellscript notwendig sind.",[1489,1896,1898],{"id":1897},"_4222-die-erweiterte-if-else-anweisung","4.2.2.2 Die erweiterte if-else Anweisung",[419,1900,1901],{},"Natürlich bietet die if-Anweisung auch eine Erweiterung zur normalen Form, die sogenannte if-else Anweisung. Es ist also möglich zu schreiben:",[441,1903,1905],{"className":443,"code":1904,"language":445,"meta":446,"style":446},"if [ Ausdruck ];\nthen\nKommandos\nelse\nKommandos\nfi\n\n",[448,1906,1907,1914,1918,1923,1928,1932],{"__ignoreMap":446},[332,1908,1909,1911],{"class":452,"line":453},[332,1910,457],{"class":456},[332,1912,1913],{"class":460}," [ Ausdruck ];\n",[332,1915,1916],{"class":452,"line":490},[332,1917,487],{"class":456},[332,1919,1920],{"class":452,"line":414},[332,1921,1922],{"class":569},"Kommandos\n",[332,1924,1925],{"class":452,"line":503},[332,1926,1927],{"class":456},"else\n",[332,1929,1930],{"class":452,"line":508},[332,1931,1922],{"class":569},[332,1933,1934],{"class":452,"line":587},[332,1935,511],{"class":456},[1489,1937,1939],{"id":1938},"_4223-die-if-elif-else-anweisung","4.2.2.3 Die if-elif-else Anweisung",[419,1941,1942],{},"Um noch einen Schritt weiterzugehen bietet die if-Anweisung sogar ein weiteres if im else, das sogenannte elif, das wieder eine Bedingung überprüft:",[441,1944,1946],{"className":443,"code":1945,"language":445,"meta":446,"style":446},"if [ Ausdruck ];\nthen\nKommandos\nelif [ Ausdruck ];\nthen\nKommandos\nelse\nKommandos\nfi\n\n",[448,1947,1948,1954,1958,1962,1969,1973,1977,1981,1985],{"__ignoreMap":446},[332,1949,1950,1952],{"class":452,"line":453},[332,1951,457],{"class":456},[332,1953,1913],{"class":460},[332,1955,1956],{"class":452,"line":490},[332,1957,487],{"class":456},[332,1959,1960],{"class":452,"line":414},[332,1961,1922],{"class":569},[332,1963,1964,1967],{"class":452,"line":503},[332,1965,1966],{"class":456},"elif",[332,1968,1913],{"class":460},[332,1970,1971],{"class":452,"line":508},[332,1972,487],{"class":456},[332,1974,1975],{"class":452,"line":587},[332,1976,1922],{"class":569},[332,1978,1979],{"class":452,"line":592},[332,1980,1927],{"class":456},[332,1982,1983],{"class":452,"line":610},[332,1984,1922],{"class":569},[332,1986,1987],{"class":452,"line":615},[332,1988,511],{"class":456},[1489,1990,1992],{"id":1991},"_423-mehrfachauswahl-mit-case","4.2.3. Mehrfachauswahl mit case",[419,1994,1995],{},"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:",[441,1997,1999],{"className":443,"code":1998,"language":445,"meta":446,"style":446},"case Variable in\nMuster1) Kommando1 ;;\nMuster2) Kommando2 ;;\nMuster3) Kommando3 ;;\n",[448,2000,2001,2010,2022,2034],{"__ignoreMap":446},[332,2002,2003,2005,2008],{"class":452,"line":453},[332,2004,528],{"class":456},[332,2006,2007],{"class":460}," Variable ",[332,2009,534],{"class":456},[332,2011,2012,2015,2017,2020],{"class":452,"line":490},[332,2013,2014],{"class":543},"Muster1",[332,2016,547],{"class":456},[332,2018,2019],{"class":569}," Kommando1",[332,2021,1285],{"class":460},[332,2023,2024,2027,2029,2032],{"class":452,"line":414},[332,2025,2026],{"class":543},"Muster2",[332,2028,547],{"class":456},[332,2030,2031],{"class":569}," Kommando2",[332,2033,1285],{"class":460},[332,2035,2036,2039,2041,2044],{"class":452,"line":503},[332,2037,2038],{"class":543},"Muster3",[332,2040,547],{"class":456},[332,2042,2043],{"class":569}," Kommando3",[332,2045,1285],{"class":460},[419,2047,2048],{},"...",[441,2050,2052],{"className":443,"code":2051,"language":445,"meta":446,"style":446},"esac\n\n",[448,2053,2054],{"__ignoreMap":446},[332,2055,2056],{"class":452,"line":453},[332,2057,618],{"class":460},[1370,2059,2061],{"id":2060},"_5-essenzielle-werkzeuge","5. Essenzielle Werkzeuge",[257,2063,2064,2070,2076,2082],{},[260,2065,2066,2069],{},[27,2067,2068],{},"Suchen:"," grep foo myfile findet Zeilen mit dem Text \"foo\" in einer Datei.",[260,2071,2072,2075],{},[27,2073,2074],{},"Dateien finden:"," find . -name \"*.txt\" -print sucht nach Textdateien im aktuellen Verzeichnis.",[260,2077,2078,2081],{},[27,2079,2080],{},"Text filtern:"," awk '{print $5}' file gibt nur das 5. Wort jeder Zeile aus.",[260,2083,2084,2087],{},[27,2085,2086],{},"Text ersetzen:"," sed s\u002Ffoo\u002Fbar\u002Fg file ersetzt \"foo\" durch \"bar\".",[10,2089,2091],{"id":2090},"_6-funktionen","6. Funktionen",[419,2093,2094],{},[2095,2096],"img",{"alt":446,"src":2097},"\u002Fdownloads\u002FBSA\u002Fimages\u002F7-8-cs-sa2_img_1.png",[419,2099,2100],{},[2095,2101],{"alt":446,"src":2102},"\u002Fdownloads\u002FBSA\u002Fimages\u002F7-8-cs-sa2_img_2.png",[419,2104,2105,2106],{},".",[2095,2107],{"alt":446,"src":2108},"\u002Fdownloads\u002FBSA\u002Fimages\u002F7-8-cs-sa2_img_3.png",[10,2110,2112],{"id":2111},"_7-docker","7. Docker",[1370,2114,2116],{"id":2115},"_1-der-workflow-vom-code-zum-container",[27,2117,2118],{},"1. Der Workflow: Vom Code zum Container",[419,2120,2121,2122],{},"Dieser Prozess lässt sich in drei Schritten zusammenfassen: ",[27,2123,2124],{},"Build, Pull, Run.",[433,2126,2128],{"id":2127},"images-verwalten-die-vorbereitungen",[27,2129,2130],{},"Images verwalten (Die Vorbereitungen)",[419,2132,2133],{},"Bevor etwas läuft, muss das Image existieren – entweder selbst gebaut oder heruntergeladen.",[257,2135,2136],{},[260,2137,2138],{},[27,2139,2140],{},"docker build -t name:tag .",[419,2142,2143],{},"Baut ein Image aus dem Dockerfile im aktuellen Verzeichnis (.). Das -t (Tag) gibt dem Kind einen Namen.",[257,2145,2146],{},[260,2147,2148],{},[27,2149,2150],{},"docker pull image_name",[419,2152,2153],{},"Lädt ein fertiges Image vom Docker Hub herunter (z. B. docker pull nginx).",[257,2155,2156],{},[260,2157,2158],{},[27,2159,2160],{},"docker images",[419,2162,2163],{},"Listet alle Images auf, die aktuell auf deinem Rechner gespeichert sind.",[257,2165,2166],{},[260,2167,2168],{},[27,2169,2170],{},"docker rmi image_id",[419,2172,2173],{},"Löscht ein Image (Remove Image).",[1370,2175,2177],{"id":2176},"_2-docker-volumes-das-langzeitgedächtnis",[27,2178,2179],{},"2. Docker Volumes: Das Langzeitgedächtnis",[419,2181,2182,2183,2186,2187,2190],{},"Container sind ",[27,2184,2185],{},"ephemer",". Das ist ein schickes Wort für: Wenn du den Container löschst, sind alle Daten darin (Datenbanken, Uploads, Logs) ",[27,2188,2189],{},"weg",". Volumes sind die Lösung, um Daten \"auszulagern\".",[433,2192,2194],{"id":2193},"die-drei-arten-der-speicherung",[27,2195,2196],{},"Die drei Arten der Speicherung",[1489,2198,2200],{"id":2199},"a-named-volumes-der-docker-standard",[27,2201,2202],{},"A. Named Volumes (Der Docker-Standard)",[419,2204,2205],{},"Docker verwaltet den Speicherort selbst (meist irgendwo tief in \u002Fvar\u002Flib\u002Fdocker\u002F).",[257,2207,2208,2214,2220],{},[260,2209,2210,2213],{},[27,2211,2212],{},"Syntax:"," -v mein_goldfisch_glas:\u002Fapp\u002Fdata",[260,2215,2216,2219],{},[27,2217,2218],{},"Vorteil:"," Performant, sicher und Docker kümmert sich um Backups und Verwaltung.",[260,2221,2222,2225],{},[27,2223,2224],{},"Einsatz:"," Datenbanken (PostgreSQL, MySQL).",[1489,2227,2229],{"id":2228},"b-bind-mounts-der-entwickler-liebling",[27,2230,2231],{},"B. Bind Mounts (Der Entwickler-Liebling)",[419,2233,2234],{},"Du verbindest einen ganz konkreten Ordner von deiner Festplatte mit dem Container.",[257,2236,2237,2242,2251],{},[260,2238,2239,2241],{},[27,2240,2212],{}," -v \u002FUsers\u002Fname\u002Fprojekte\u002Fapp:\u002Fapp",[260,2243,2244,2246,2247,2250],{},[27,2245,2218],{}," Änderungen an deinem Code auf dem Host sind ",[27,2248,2249],{},"sofort"," im Container aktiv (Live-Reload).",[260,2252,2253,2255],{},[27,2254,2224],{}," Quellcode während der Entwicklung.",[1489,2257,2259],{"id":2258},"c-anonymous-volumes",[27,2260,2261],{},"C. Anonymous Volumes",[419,2263,2264],{},"Werden erstellt, wenn du nur den Zielpfad angibst (-v \u002Fapp\u002Ftemp).",[257,2266,2267],{},[260,2268,2269,2272],{},[27,2270,2271],{},"Nachteil:"," Schwer wiederzufinden, wenn der Container weg ist.",[1370,2274,2276],{"id":2275},"_3-die-ultimative-kombination-beispiel",[27,2277,2278],{},"3. Die ultimative Kombination (Beispiel)",[419,2280,2281],{},"Nehmen wir an, du willst eine Website entwickeln. Du brauchst:",[412,2283,2284,2290,2296],{},[260,2285,2286,2289],{},[27,2287,2288],{},"Port Mapping",", um die Seite im Browser zu sehen.",[260,2291,2292,2295],{},[27,2293,2294],{},"Bind Mount",", damit dein Code-Update sofort sichtbar ist.",[260,2297,2298,2301],{},[27,2299,2300],{},"Named Volume",", damit die User-Daten erhalten bleiben.",[419,2303,439],{},[441,2305,2307],{"className":443,"code":2306,"language":445,"meta":446,"style":446},"docker run -d \\\n",[448,2308,2309],{"__ignoreMap":446},[332,2310,2311,2314,2317,2320],{"class":452,"line":453},[332,2312,2313],{"class":569},"docker",[332,2315,2316],{"class":464}," run",[332,2318,2319],{"class":550}," -d",[332,2321,2322],{"class":550}," \\\n",[419,2324,2325,2326,2328,2329,2331,2332,2334,2335,2337],{},"--name meine_super_app \\",[1404,2327],{},"\n-p 3000:3000 \\",[1404,2330],{},"\n-v $(pwd):\u002Fapp \\",[1404,2333],{},"\n-v app_db_data:\u002Fvar\u002Flib\u002Fmysql \\",[1404,2336],{},"\nmeine_app_image",[433,2339,2341],{"id":2340},"kurze-checkliste-für-den-befehl-oben",[27,2342,2343],{},"Kurze Checkliste für den Befehl oben:",[257,2345,2346,2352,2358],{},[260,2347,2348,2351],{},[27,2349,2350],{},"-p 3000:3000",": \"Browser-Port 3000 funkt an App-Port 3000.\"",[260,2353,2354,2357],{},[27,2355,2356],{},"-v $(pwd):\u002Fapp",": \"Spiegle mein aktuelles Verzeichnis in den Container-Ordner \u002Fapp.\"",[260,2359,2360,2363],{},[27,2361,2362],{},"-v app_db_data:...",": \"Speichere die Datenbank-Daten sicher in einem Volume namens app_db_data.\"",[1370,2365,2367],{"id":2366},"nützliche-volume-commands",[27,2368,2369],{},"Nützliche Volume-Commands",[257,2371,2372,2375,2378],{},[260,2373,2374],{},"docker volume ls: Zeigt alle \"Festplatten\" an, die Docker gerade verwaltet.",[260,2376,2377],{},"docker volume inspect \u003Cname>: Verrät dir, wo genau auf deiner echten Festplatte die Daten liegen.",[260,2379,2380],{},"docker volume prune: Löscht alle Volumes, die gerade von keinem Container benutzt",[1370,2382,2384],{"id":2383},"_2-container-steuern-die-action",[27,2385,2386],{},"2. Container steuern (Die Action)",[419,2388,2389],{},"Hier erwachen deine Anwendungen zum Leben. Der Befehl docker run ist dabei das Schweizer Taschenmesser.",[433,2391,2393],{"id":2392},"der-docker-run-befehl",[27,2394,2395],{},"Der docker run Befehl",[441,2397,2399],{"className":443,"code":2398,"language":445,"meta":446,"style":446},"docker run [FLAGS] IMAGE [COMMAND]\n\n",[448,2400,2401],{"__ignoreMap":446},[332,2402,2403,2405,2407],{"class":452,"line":453},[332,2404,2313],{"class":569},[332,2406,2316],{"class":464},[332,2408,2409],{"class":460}," [FLAGS] IMAGE [COMMAND]\n",[419,2411,2412],{},"Die wichtigsten Flags für run:",[257,2414,2415,2421,2435,2445,2451],{},[260,2416,2417,2420],{},[27,2418,2419],{},"-d (detached):"," Der Container läuft im Hintergrund. Dein Terminal bleibt frei.",[260,2422,2423,2434],{},[27,2424,2425,2426,2429,2430,2433],{},"-p 8080:80 (-p ",[332,2427,2428],{},"HOST_PORT",":",[332,2431,2432],{},"CONTAINER_PORT","):"," Mapping. Leitet Port 8080 deines Rechners auf Port 80 des Containers um.",[260,2436,2437,2440,2441,2444],{},[27,2438,2439],{},"--name mein_server:"," Gibt dem Container einen festen Namen statt eines zufälligen (wie ",[1400,2442,2443],{},"focused_curie",").",[260,2446,2447,2450],{},[27,2448,2449],{},"-v \u002Fhost:\u002Fcontainer (volume):"," Verbindet einen Ordner auf deinem Rechner mit einem Ordner im Container (wichtig für Datenbank-Daten).",[260,2452,2453,2456],{},[27,2454,2455],{},"-it (interactive + tty):"," Brauchst du, wenn du interaktiv mit dem Container arbeiten willst (z.B. eine Shell öffnen).",[419,2458,2459],{},[27,2460,2461],{},"Beispiel:",[441,2463,2465],{"className":443,"code":2464,"language":445,"meta":446,"style":446},"docker run -d -p 8080:80 --name web-server nginx\n\n",[448,2466,2467],{"__ignoreMap":446},[332,2468,2469,2471,2473,2475,2478,2481,2484,2487],{"class":452,"line":453},[332,2470,2313],{"class":569},[332,2472,2316],{"class":464},[332,2474,2319],{"class":550},[332,2476,2477],{"class":550}," -p",[332,2479,2480],{"class":464}," 8080:80",[332,2482,2483],{"class":550}," --name",[332,2485,2486],{"class":464}," web-server",[332,2488,2489],{"class":464}," nginx\n",[419,2491,2492],{},[1400,2493,2494],{},"(Startet einen Nginx-Webserver im Hintergrund, erreichbar unter localhost:8080)",[1370,2496,2498],{"id":2497},"_3-laufende-container-verwalten-das-management",[27,2499,2500],{},"3. Laufende Container verwalten (Das Management)",[419,2502,2503],{},"Wenn die Container erst einmal laufen, musst du sie überwachen und kontrollieren.",[15,2505,2506,2520],{},[18,2507,2508],{},[21,2509,2510,2515],{},[24,2511,2512],{},[27,2513,2514],{},"Befehl",[24,2516,2517],{},[27,2518,2519],{},"Zweck",[41,2521,2522,2536,2550,2560,2570,2580],{},[21,2523,2524,2529],{},[46,2525,2526],{},[27,2527,2528],{},"docker ps",[46,2530,2531,2532,2535],{},"Zeigt alle ",[27,2533,2534],{},"laufenden"," Container an.",[21,2537,2538,2543],{},[46,2539,2540],{},[27,2541,2542],{},"docker ps -a",[46,2544,2545,2546,2549],{},"Zeigt ",[27,2547,2548],{},"alle"," Container an (auch die gestoppten).",[21,2551,2552,2557],{},[46,2553,2554],{},[27,2555,2556],{},"docker stop \u003CID\u002FName>",[46,2558,2559],{},"Hält einen laufenden Container sanft an.",[21,2561,2562,2567],{},[46,2563,2564],{},[27,2565,2566],{},"docker start \u003CID\u002FName>",[46,2568,2569],{},"Startet einen gestoppten Container wieder.",[21,2571,2572,2577],{},[46,2573,2574],{},[27,2575,2576],{},"docker rm \u003CID\u002FName>",[46,2578,2579],{},"Löscht einen (gestoppten) Container endgültig.",[21,2581,2582,2587],{},[46,2583,2584],{},[27,2585,2586],{},"docker logs -f \u003CID\u002FName>",[46,2588,2589],{},"Zeigt die Konsolen-Ausgabe des Containers live an (super zum Debuggen!).",[1370,2591,2593],{"id":2592},"_4-insider-befehle-für-profis",[27,2594,2595],{},"4. Insider-Befehle (Für Profis)",[419,2597,2598],{},"Manchmal musst du „in“ den Container hineinschauen oder aufräumen:",[257,2600,2601],{},[260,2602,2603,2606],{},[27,2604,2605],{},"docker exec -it \u003Ccontainername> bash"," (oder sh)",[419,2608,2609,2610,2613],{},"Damit öffnest du ein Terminal ",[27,2611,2612],{},"innerhalb"," eines bereits laufenden Containers. Es ist, als würdest du dich per SSH einloggen.",[257,2615,2616],{},[260,2617,2618],{},[27,2619,2620],{},"docker inspect \u003Ccontainername>",[419,2622,2623],{},"Gibt dir alle technischen Details (IP-Adresse, Mounts, Konfiguration) im JSON-Format aus.",[257,2625,2626],{},[260,2627,2628],{},[27,2629,2630],{},"docker system prune",[419,2632,2633],{},"Der „Frühlingsputz“. Löscht alle gestoppten Container, ungenutzten Netzwerke und verwaisten Images auf einmal.",[433,2635,2637],{"id":2636},"ein-typischer-workflow-in-der-praxis",[27,2638,2639],{},"Ein typischer Workflow in der Praxis:",[412,2641,2642,2648,2654,2660,2666],{},[260,2643,2644,2647],{},[27,2645,2646],{},"Code schreiben"," und Dockerfile erstellen.",[260,2649,2650,2653],{},[27,2651,2652],{},"docker build -t meine-app ."," (Image bauen)",[260,2655,2656,2659],{},[27,2657,2658],{},"docker run -d -p 3000:3000 meine-app"," (Container starten)",[260,2661,2662,2665],{},[27,2663,2664],{},"docker logs -f meine-app"," (Prüfen, ob alles okay ist)",[260,2667,2668,2669,2672],{},"Fehler gefunden? ",[27,2670,2671],{},"docker stop meine-app"," -> Code ändern -> Zurück zu Schritt 2.",[10,2674,2676],{"id":2675},"_8-docker-file","8. Docker File",[412,2678,2679],{},[260,2680,2681],{},"Build-Argumente (Optional beim Bauen übergeben)",[441,2683,2687],{"className":2684,"code":2685,"language":2686,"meta":446,"style":446},"language-dockerfile shiki shiki-themes github-light github-dark","ARG PYTHON_VERSION=3.9-slim\n\n","dockerfile",[448,2688,2689],{"__ignoreMap":446},[332,2690,2691,2694],{"class":452,"line":453},[332,2692,2693],{"class":456},"ARG",[332,2695,2696],{"class":460}," PYTHON_VERSION=3.9-slim\n",[412,2698,2699],{"start":490},[260,2700,2701],{},"Basis-Image mit Variable",[441,2703,2705],{"className":2684,"code":2704,"language":2686,"meta":446,"style":446},"FROM python:${PYTHON_VERSION}\n\n",[448,2706,2707],{"__ignoreMap":446},[332,2708,2709,2712],{"class":452,"line":453},[332,2710,2711],{"class":456},"FROM",[332,2713,2714],{"class":460}," python:${PYTHON_VERSION}\n",[412,2716,2717],{"start":414},[260,2718,2719],{},"Metadaten (Gut für die Organisation)",[441,2721,2723],{"className":2684,"code":2722,"language":2686,"meta":446,"style":446},"LABEL maintainer=\"dein-name@example.com\" LABEL description=\"Produktions-Image für meine Python Web-App\"\n\n",[448,2724,2725],{"__ignoreMap":446},[332,2726,2727,2730,2733,2736,2739],{"class":452,"line":453},[332,2728,2729],{"class":456},"LABEL",[332,2731,2732],{"class":460}," maintainer=",[332,2734,2735],{"class":464},"\"dein-name@example.com\"",[332,2737,2738],{"class":460}," LABEL description=",[332,2740,2741],{"class":464},"\"Produktions-Image für meine Python Web-App\"\n",[412,2743,2744],{"start":503},[260,2745,2746],{},"Umgebungsvariablen setzen",[419,2748,2749],{},"Verhindert, dass Python .pyc Dateien schreibt und puffert die Ausgabe (loggt sofort)",[441,2751,2753],{"className":2684,"code":2752,"language":2686,"meta":446,"style":446},"ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV APP_HOME=\u002Fapp\n\nWORKDIR $APP_HOME\n\n",[448,2754,2755,2763,2767],{"__ignoreMap":446},[332,2756,2757,2760],{"class":452,"line":453},[332,2758,2759],{"class":456},"ENV",[332,2761,2762],{"class":460}," PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV APP_HOME=\u002Fapp\n",[332,2764,2765],{"class":452,"line":490},[332,2766,494],{"emptyLinePlaceholder":493},[332,2768,2769,2772],{"class":452,"line":414},[332,2770,2771],{"class":456},"WORKDIR",[332,2773,2774],{"class":460}," $APP_HOME\n",[412,2776,2777],{"start":508},[260,2778,2779],{},"Abhängigkeiten (Caching-Optimierung)",[419,2781,2782],{},"Wir kopieren NUR die requirements zuerst, damit der 'pip install' Layer",[419,2784,2785],{},"nur neu gebaut wird, wenn sich die Abhängigkeiten ändern.",[441,2787,2789],{"className":2684,"code":2788,"language":2686,"meta":446,"style":446},"COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip\n",[448,2790,2791],{"__ignoreMap":446},[332,2792,2793,2796],{"class":452,"line":453},[332,2794,2795],{"class":456},"COPY",[332,2797,2798],{"class":460}," requirements.txt . RUN pip install --no-cache-dir --upgrade pip\n",[419,2800,2801],{},"&& pip install --no-cache-dir -r requirements.txt",[412,2803,2804],{"start":587},[260,2805,2806],{},"Sicherheits-Check: Einen Non-Root User anlegen",[419,2808,2809],{},"Standardmäßig läuft Docker als 'root'. Das ist ein Sicherheitsrisiko.",[441,2811,2813],{"className":2684,"code":2812,"language":2686,"meta":446,"style":446},"RUN useradd -m myuser USER myuser\n\n",[448,2814,2815],{"__ignoreMap":446},[332,2816,2817,2820],{"class":452,"line":453},[332,2818,2819],{"class":456},"RUN",[332,2821,2822],{"class":460}," useradd -m myuser USER myuser\n",[412,2824,2825],{"start":592},[260,2826,2827],{},"App-Code kopieren (als der neue User)",[441,2829,2831],{"className":2684,"code":2830,"language":2686,"meta":446,"style":446},"COPY --chown=myuser:myuser . .\n\n",[448,2832,2833],{"__ignoreMap":446},[332,2834,2835,2837],{"class":452,"line":453},[332,2836,2795],{"class":456},[332,2838,2839],{"class":460}," --chown=myuser:myuser . .\n",[412,2841,2842],{"start":610},[260,2843,2844],{},"Healthcheck (Sagt Docker, ob die App wirklich \"lebt\")",[441,2846,2848],{"className":2684,"code":2847,"language":2686,"meta":446,"style":446},"HEALTHCHECK --interval=30s --timeout=3s\nCMD curl -f http:\u002F\u002Flocalhost:8080\u002Fhealth || exit 1\n\nEXPOSE 8080 #Port\n\n",[448,2849,2850,2858,2866,2870],{"__ignoreMap":446},[332,2851,2852,2855],{"class":452,"line":453},[332,2853,2854],{"class":456},"HEALTHCHECK",[332,2856,2857],{"class":460}," --interval=30s --timeout=3s\n",[332,2859,2860,2863],{"class":452,"line":490},[332,2861,2862],{"class":456},"CMD",[332,2864,2865],{"class":460}," curl -f http:\u002F\u002Flocalhost:8080\u002Fhealth || exit 1\n",[332,2867,2868],{"class":452,"line":414},[332,2869,494],{"emptyLinePlaceholder":493},[332,2871,2872,2875],{"class":452,"line":503},[332,2873,2874],{"class":456},"EXPOSE",[332,2876,2877],{"class":460}," 8080 #Port\n",[412,2879,2880],{"start":615},[260,2881,2882],{},"Startbefehl",[441,2884,2886],{"className":2684,"code":2885,"language":2686,"meta":446,"style":446},"CMD [\"python\", \"app.py\"]\n\n",[448,2887,2888],{"__ignoreMap":446},[332,2889,2890,2892,2895,2898,2901,2904],{"class":452,"line":453},[332,2891,2862],{"class":456},[332,2893,2894],{"class":460}," [",[332,2896,2897],{"class":464},"\"python\"",[332,2899,2900],{"class":460},", ",[332,2902,2903],{"class":464},"\"app.py\"",[332,2905,2906],{"class":460},"]\n",[1370,2908,2910],{"id":2909},"beispiel","Beispiel",[419,2912,2913],{},"Docker-File Beispiel zum Bauen einer Node.js Applikation innerhalb eines Docker-Containers",[419,2915,2916],{},[1400,2917,2918],{},"# Stage 1: Build the application",[441,2920,2922],{"className":2684,"code":2921,"language":2686,"meta":446,"style":446},"FROM node:18-alpine as build-stage\n\n",[448,2923,2924],{"__ignoreMap":446},[332,2925,2926,2928,2931,2934],{"class":452,"line":453},[332,2927,2711],{"class":456},[332,2929,2930],{"class":460}," node:18-alpine ",[332,2932,2933],{"class":456},"as",[332,2935,2936],{"class":460}," build-stage\n",[419,2938,2939],{},[1400,2940,2941],{},"# Install pnpm",[441,2943,2945],{"className":2684,"code":2944,"language":2686,"meta":446,"style":446},"RUN npm install -g pnpm\n\n",[448,2946,2947],{"__ignoreMap":446},[332,2948,2949,2951],{"class":452,"line":453},[332,2950,2819],{"class":456},[332,2952,2953],{"class":460}," npm install -g pnpm\n",[419,2955,2956],{},[1400,2957,2958],{},"# Set the working directory",[441,2960,2962],{"className":2684,"code":2961,"language":2686,"meta":446,"style":446},"WORKDIR \u002Fapp\n\n",[448,2963,2964],{"__ignoreMap":446},[332,2965,2966,2968],{"class":452,"line":453},[332,2967,2771],{"class":456},[332,2969,2970],{"class":460}," \u002Fapp\n",[419,2972,2973],{},[1400,2974,2975],{},"# Copy the package.json and pnpm-lock.yaml files",[441,2977,2979],{"className":2684,"code":2978,"language":2686,"meta":446,"style":446},"COPY source\u002Fpackage.json source\u002Fpnpm-lock.yaml .\u002F\n\n",[448,2980,2981],{"__ignoreMap":446},[332,2982,2983,2985],{"class":452,"line":453},[332,2984,2795],{"class":456},[332,2986,2987],{"class":460}," source\u002Fpackage.json source\u002Fpnpm-lock.yaml .\u002F\n",[419,2989,2990],{},[1400,2991,2992],{},"# Install dependencies",[441,2994,2996],{"className":2684,"code":2995,"language":2686,"meta":446,"style":446},"RUN pnpm install\n\n",[448,2997,2998],{"__ignoreMap":446},[332,2999,3000,3002],{"class":452,"line":453},[332,3001,2819],{"class":456},[332,3003,3004],{"class":460}," pnpm install\n",[419,3006,3007],{},[1400,3008,3009],{},"# Copy the rest of the application code",[441,3011,3013],{"className":2684,"code":3012,"language":2686,"meta":446,"style":446},"COPY source\u002F .\u002F\n\n",[448,3014,3015],{"__ignoreMap":446},[332,3016,3017,3019],{"class":452,"line":453},[332,3018,2795],{"class":456},[332,3020,3021],{"class":460}," source\u002F .\u002F\n",[419,3023,3024],{},[1400,3025,3026],{},"# Build the application",[441,3028,3030],{"className":2684,"code":3029,"language":2686,"meta":446,"style":446},"RUN pnpm build\n\n",[448,3031,3032],{"__ignoreMap":446},[332,3033,3034,3036],{"class":452,"line":453},[332,3035,2819],{"class":456},[332,3037,3038],{"class":460}," pnpm build\n",[419,3040,3041],{},[1400,3042,3043],{},"# Stage 2: Serve the application",[441,3045,3047],{"className":2684,"code":3046,"language":2686,"meta":446,"style":446},"FROM node:18-alpine as production-stage\n\n",[448,3048,3049],{"__ignoreMap":446},[332,3050,3051,3053,3055,3057],{"class":452,"line":453},[332,3052,2711],{"class":456},[332,3054,2930],{"class":460},[332,3056,2933],{"class":456},[332,3058,3059],{"class":460}," production-stage\n",[419,3061,3062],{},[1400,3063,2958],{},[441,3065,3066],{"className":2684,"code":2961,"language":2686,"meta":446,"style":446},[448,3067,3068],{"__ignoreMap":446},[332,3069,3070,3072],{"class":452,"line":453},[332,3071,2771],{"class":456},[332,3073,2970],{"class":460},[419,3075,3076],{},[1400,3077,3078],{},"# Copy the built application from the build stage",[441,3080,3082],{"className":2684,"code":3081,"language":2686,"meta":446,"style":446},"COPY --from=build-stage \u002Fapp\u002F.output .\u002F\n\n",[448,3083,3084],{"__ignoreMap":446},[332,3085,3086,3088],{"class":452,"line":453},[332,3087,2795],{"class":456},[332,3089,3090],{"class":460}," --from=build-stage \u002Fapp\u002F.output .\u002F\n",[419,3092,3093],{},[1400,3094,3095],{},"# Start the application",[441,3097,3099],{"className":2684,"code":3098,"language":2686,"meta":446,"style":446},"CMD [\"node\", \"server\u002Findex.mjs\"]\n\n# 9. Wichtige andere Befehle\n\n",[448,3100,3101,3117,3121],{"__ignoreMap":446},[332,3102,3103,3105,3107,3110,3112,3115],{"class":452,"line":453},[332,3104,2862],{"class":456},[332,3106,2894],{"class":460},[332,3108,3109],{"class":464},"\"node\"",[332,3111,2900],{"class":460},[332,3113,3114],{"class":464},"\"server\u002Findex.mjs\"",[332,3116,2906],{"class":460},[332,3118,3119],{"class":452,"line":490},[332,3120,494],{"emptyLinePlaceholder":493},[332,3122,3123],{"class":452,"line":414},[332,3124,3125],{"class":499},"# 9. Wichtige andere Befehle\n",[1370,3127,3129],{"id":3128},"_91-grep","9.1. grep",[419,3131,3132,3135,3137],{},[27,3133,3134],{},"Zweck:",[1404,3136],{},"\nSucht nach Textmustern (Patterns) in Dateien oder Ausgaben von Programmen.",[419,3139,3140],{},[27,3141,3142],{},"Typische Verwendung:",[257,3144,3145,3148,3151],{},[260,3146,3147],{},"Text in Dateien suchen",[260,3149,3150],{},"Logs durchsuchen",[260,3152,3153],{},"Ausgabe von Befehlen filtern",[419,3155,3156],{},[27,3157,2212],{},[441,3159,3161],{"className":443,"code":3160,"language":445,"meta":446,"style":446},"grep [OPTIONEN] PATTERN DATEI\n\n",[448,3162,3163],{"__ignoreMap":446},[332,3164,3165,3168],{"class":452,"line":453},[332,3166,3167],{"class":569},"grep",[332,3169,3170],{"class":460}," [OPTIONEN] PATTERN DATEI\n",[419,3172,3173],{},[27,3174,3175],{},"Beispiele:",[441,3177,3179],{"className":443,"code":3178,"language":445,"meta":446,"style":446},"grep \"error\" logfile.txt\nps aux | grep firefox\ngrep -i \"test\" datei.txt\n\n",[448,3180,3181,3191,3208],{"__ignoreMap":446},[332,3182,3183,3185,3188],{"class":452,"line":453},[332,3184,3167],{"class":569},[332,3186,3187],{"class":464}," \"error\"",[332,3189,3190],{"class":464}," logfile.txt\n",[332,3192,3193,3196,3199,3202,3205],{"class":452,"line":490},[332,3194,3195],{"class":569},"ps",[332,3197,3198],{"class":464}," aux",[332,3200,3201],{"class":456}," |",[332,3203,3204],{"class":569}," grep",[332,3206,3207],{"class":464}," firefox\n",[332,3209,3210,3212,3215,3218],{"class":452,"line":414},[332,3211,3167],{"class":569},[332,3213,3214],{"class":550}," -i",[332,3216,3217],{"class":464}," \"test\"",[332,3219,3220],{"class":464}," datei.txt\n",[1370,3222,3224],{"id":3223},"wichtige-optionen",[27,3225,3226],{},"Wichtige Optionen",[15,3228,3229,3242],{},[18,3230,3231],{},[21,3232,3233,3238],{},[24,3234,3235],{},[27,3236,3237],{},"Option",[24,3239,3240],{},[27,3241,1000],{},[41,3243,3244,3252,3260,3268,3275,3283,3291,3299,3307,3315,3323],{},[21,3245,3246,3249],{},[46,3247,3248],{},"-i",[46,3250,3251],{},"ignoriert Groß-\u002FKleinschreibung",[21,3253,3254,3257],{},[46,3255,3256],{},"-v",[46,3258,3259],{},"zeigt Zeilen ohne Treffer",[21,3261,3262,3265],{},[46,3263,3264],{},"-n",[46,3266,3267],{},"zeigt Zeilennummer",[21,3269,3270,3272],{},[46,3271,347],{},[46,3273,3274],{},"rekursive Suche in Verzeichnissen",[21,3276,3277,3280],{},[46,3278,3279],{},"-l",[46,3281,3282],{},"zeigt nur Dateinamen mit Treffer",[21,3284,3285,3288],{},[46,3286,3287],{},"-c",[46,3289,3290],{},"zählt Treffer",[21,3292,3293,3296],{},[46,3294,3295],{},"-w",[46,3297,3298],{},"sucht nur ganze Wörter",[21,3300,3301,3304],{},[46,3302,3303],{},"-E",[46,3305,3306],{},"erweitert Regex (egrep)",[21,3308,3309,3312],{},[46,3310,3311],{},"-F",[46,3313,3314],{},"feste Strings (kein Regex)",[21,3316,3317,3320],{},[46,3318,3319],{},"-o",[46,3321,3322],{},"zeigt nur den Treffer",[21,3324,3325,3328],{},[46,3326,3327],{},"--color=auto",[46,3329,3330],{},"markiert Treffer",[419,3332,3333],{},[27,3334,3175],{},[419,3336,3337],{},"Suche ohne Groß-\u002FKleinschreibung",[441,3339,3341],{"className":443,"code":3340,"language":445,"meta":446,"style":446},"grep -i \"linux\" datei.txt\n\n",[448,3342,3343],{"__ignoreMap":446},[332,3344,3345,3347,3349,3352],{"class":452,"line":453},[332,3346,3167],{"class":569},[332,3348,3214],{"class":550},[332,3350,3351],{"class":464}," \"linux\"",[332,3353,3220],{"class":464},[419,3355,3356],{},"Rekursive Suche",[441,3358,3360],{"className":443,"code":3359,"language":445,"meta":446,"style":446},"grep -r \"main\" .\n\n",[448,3361,3362],{"__ignoreMap":446},[332,3363,3364,3366,3369,3372],{"class":452,"line":453},[332,3365,3167],{"class":569},[332,3367,3368],{"class":550}," -r",[332,3370,3371],{"class":464}," \"main\"",[332,3373,3374],{"class":464}," .\n",[419,3376,3377],{},"Nur Dateinamen anzeigen",[441,3379,3381],{"className":443,"code":3380,"language":445,"meta":446,"style":446},"grep -rl \"TODO\" .\n\n",[448,3382,3383],{"__ignoreMap":446},[332,3384,3385,3387,3390,3393],{"class":452,"line":453},[332,3386,3167],{"class":569},[332,3388,3389],{"class":550}," -rl",[332,3391,3392],{"class":464}," \"TODO\"",[332,3394,3374],{"class":464},[1370,3396,3398],{"id":3397},"_92-sed","9.2. sed",[419,3400,3401,3403,3405,3406,3409],{},[27,3402,3134],{},[1404,3404],{},"\nStream Editor zum ",[27,3407,3408],{},"Bearbeiten von Textströmen"," (Ersetzen, Löschen, Einfügen).",[419,3411,3412],{},[27,3413,3142],{},[257,3415,3416,3419,3422],{},[260,3417,3418],{},"Text ersetzen",[260,3420,3421],{},"bestimmte Zeilen löschen",[260,3423,3424],{},"Dateien automatisch bearbeiten",[419,3426,3427],{},[27,3428,2212],{},[441,3430,3432],{"className":443,"code":3431,"language":445,"meta":446,"style":446},"sed [OPTIONEN] 'BEFEHL' DATEI\n\n",[448,3433,3434],{"__ignoreMap":446},[332,3435,3436,3439,3442,3445],{"class":452,"line":453},[332,3437,3438],{"class":569},"sed",[332,3440,3441],{"class":460}," [OPTIONEN] ",[332,3443,3444],{"class":464},"'BEFEHL'",[332,3446,3447],{"class":460}," DATEI\n",[419,3449,3450],{},[27,3451,3175],{},[441,3453,3455],{"className":443,"code":3454,"language":445,"meta":446,"style":446},"sed 's\u002Falt\u002Fneu\u002F' datei.txt\n\n",[448,3456,3457],{"__ignoreMap":446},[332,3458,3459,3461,3464],{"class":452,"line":453},[332,3460,3438],{"class":569},[332,3462,3463],{"class":464}," 's\u002Falt\u002Fneu\u002F'",[332,3465,3220],{"class":464},[433,3467,3226],{"id":3468},"wichtige-optionen-1",[15,3470,3471,3483],{},[18,3472,3473],{},[21,3474,3475,3479],{},[24,3476,3477],{},[27,3478,3237],{},[24,3480,3481],{},[27,3482,1000],{},[41,3484,3485,3493,3500,3507],{},[21,3486,3487,3490],{},[46,3488,3489],{},"-e",[46,3491,3492],{},"mehrere Befehle",[21,3494,3495,3497],{},[46,3496,3264],{},[46,3498,3499],{},"keine automatische Ausgabe",[21,3501,3502,3504],{},[46,3503,3248],{},[46,3505,3506],{},"Datei direkt ändern (in-place)",[21,3508,3509,3511],{},[46,3510,347],{},[46,3512,3513],{},"erweitertes Regex",[433,3515,3517],{"id":3516},"häufige-befehle","Häufige Befehle",[1489,3519,3521],{"id":3520},"ersetzen","Ersetzen",[441,3523,3524],{"className":443,"code":3454,"language":445,"meta":446,"style":446},[448,3525,3526],{"__ignoreMap":446},[332,3527,3528,3530,3532],{"class":452,"line":453},[332,3529,3438],{"class":569},[332,3531,3463],{"class":464},[332,3533,3220],{"class":464},[419,3535,3536],{},"Nur erstes Vorkommen pro Zeile.",[1489,3538,3540],{"id":3539},"alle-vorkommen-ersetzen","Alle Vorkommen ersetzen",[441,3542,3544],{"className":443,"code":3543,"language":445,"meta":446,"style":446},"sed 's\u002Falt\u002Fneu\u002Fg' datei.txt\n\n",[448,3545,3546],{"__ignoreMap":446},[332,3547,3548,3550,3553],{"class":452,"line":453},[332,3549,3438],{"class":569},[332,3551,3552],{"class":464}," 's\u002Falt\u002Fneu\u002Fg'",[332,3554,3220],{"class":464},[1489,3556,3558],{"id":3557},"direkt-datei-ändern","Direkt Datei ändern",[441,3560,3562],{"className":443,"code":3561,"language":445,"meta":446,"style":446},"sed -i 's\u002Falt\u002Fneu\u002Fg' datei.txt\n\n",[448,3563,3564],{"__ignoreMap":446},[332,3565,3566,3568,3570,3572],{"class":452,"line":453},[332,3567,3438],{"class":569},[332,3569,3214],{"class":550},[332,3571,3552],{"class":464},[332,3573,3220],{"class":464},[1489,3575,3577],{"id":3576},"zeilen-löschen","Zeilen löschen",[419,3579,3580],{},"Zeile löschen",[441,3582,3584],{"className":443,"code":3583,"language":445,"meta":446,"style":446},"sed '3d' datei.txt\n\n",[448,3585,3586],{"__ignoreMap":446},[332,3587,3588,3590,3593],{"class":452,"line":453},[332,3589,3438],{"class":569},[332,3591,3592],{"class":464}," '3d'",[332,3594,3220],{"class":464},[1489,3596,3598],{"id":3597},"zeilenbereich-löschen","Zeilenbereich löschen",[441,3600,3602],{"className":443,"code":3601,"language":445,"meta":446,"style":446},"sed '3,5d' datei.txt\n\n",[448,3603,3604],{"__ignoreMap":446},[332,3605,3606,3608,3611],{"class":452,"line":453},[332,3607,3438],{"class":569},[332,3609,3610],{"class":464}," '3,5d'",[332,3612,3220],{"class":464},[1489,3614,3616],{"id":3615},"zeilen-mit-pattern-löschen","Zeilen mit Pattern löschen",[441,3618,3620],{"className":443,"code":3619,"language":445,"meta":446,"style":446},"sed '\u002Ferror\u002Fd' datei.txt\n\n",[448,3621,3622],{"__ignoreMap":446},[332,3623,3624,3626,3629],{"class":452,"line":453},[332,3625,3438],{"class":569},[332,3627,3628],{"class":464}," '\u002Ferror\u002Fd'",[332,3630,3220],{"class":464},[1489,3632,3634],{"id":3633},"zeilen-anzeigen","Zeilen anzeigen",[419,3636,3637],{},"Nur bestimmte Zeile",[441,3639,3641],{"className":443,"code":3640,"language":445,"meta":446,"style":446},"sed -n '5p' datei.txt\n\n",[448,3642,3643],{"__ignoreMap":446},[332,3644,3645,3647,3650,3653],{"class":452,"line":453},[332,3646,3438],{"class":569},[332,3648,3649],{"class":550}," -n",[332,3651,3652],{"class":464}," '5p'",[332,3654,3220],{"class":464},[1489,3656,3658],{"id":3657},"text-einfügen","Text einfügen",[419,3660,3661],{},"Vor Zeile einfügen",[441,3663,3665],{"className":443,"code":3664,"language":445,"meta":446,"style":446},"sed '3i TEXT' datei.txt\n\n",[448,3666,3667],{"__ignoreMap":446},[332,3668,3669,3671,3674],{"class":452,"line":453},[332,3670,3438],{"class":569},[332,3672,3673],{"class":464}," '3i TEXT'",[332,3675,3220],{"class":464},[419,3677,3678],{},"Nach Zeile einfügen",[441,3680,3682],{"className":443,"code":3681,"language":445,"meta":446,"style":446},"sed '3a TEXT' datei.txt\n\n",[448,3683,3684],{"__ignoreMap":446},[332,3685,3686,3688,3691],{"class":452,"line":453},[332,3687,3438],{"class":569},[332,3689,3690],{"class":464}," '3a TEXT'",[332,3692,3220],{"class":464},[1370,3694,3696],{"id":3695},"_93-find","9.3. find",[419,3698,3699,3701,3703],{},[27,3700,3134],{},[1404,3702],{},"\nDateien und Verzeichnisse im Dateisystem suchen.",[419,3705,3706],{},[27,3707,3142],{},[257,3709,3710,3713,3716],{},[260,3711,3712],{},"Dateien nach Namen finden",[260,3714,3715],{},"Dateien nach Größe oder Datum suchen",[260,3717,3718],{},"Aktionen auf Dateien ausführen",[419,3720,3721],{},[27,3722,2212],{},[441,3724,3726],{"className":443,"code":3725,"language":445,"meta":446,"style":446},"find PFAD [OPTIONEN] [AKTION]\n\n",[448,3727,3728],{"__ignoreMap":446},[332,3729,3730,3733,3736],{"class":452,"line":453},[332,3731,3732],{"class":569},"find",[332,3734,3735],{"class":464}," PFAD",[332,3737,3738],{"class":460}," [OPTIONEN] [AKTION]\n",[419,3740,3741],{},[27,3742,3175],{},[441,3744,3746],{"className":443,"code":3745,"language":445,"meta":446,"style":446},"find . -name \"test.txt\"\nfind \u002Fhome -type f\n\n",[448,3747,3748,3761],{"__ignoreMap":446},[332,3749,3750,3752,3755,3758],{"class":452,"line":453},[332,3751,3732],{"class":569},[332,3753,3754],{"class":464}," .",[332,3756,3757],{"class":550}," -name",[332,3759,3760],{"class":464}," \"test.txt\"\n",[332,3762,3763,3765,3768,3771],{"class":452,"line":490},[332,3764,3732],{"class":569},[332,3766,3767],{"class":464}," \u002Fhome",[332,3769,3770],{"class":550}," -type",[332,3772,1139],{"class":464},[433,3774,3226],{"id":3775},"wichtige-optionen-2",[15,3777,3778,3790],{},[18,3779,3780],{},[21,3781,3782,3786],{},[24,3783,3784],{},[27,3785,3237],{},[24,3787,3788],{},[27,3789,1000],{},[41,3791,3792,3800,3808,3816,3824,3832,3840,3848,3856],{},[21,3793,3794,3797],{},[46,3795,3796],{},"-name",[46,3798,3799],{},"Name der Datei",[21,3801,3802,3805],{},[46,3803,3804],{},"-iname",[46,3806,3807],{},"Name ohne Groß-\u002FKleinschreibung",[21,3809,3810,3813],{},[46,3811,3812],{},"-type",[46,3814,3815],{},"Dateityp",[21,3817,3818,3821],{},[46,3819,3820],{},"-size",[46,3822,3823],{},"Dateigröße",[21,3825,3826,3829],{},[46,3827,3828],{},"-mtime",[46,3830,3831],{},"Änderungszeit",[21,3833,3834,3837],{},[46,3835,3836],{},"-user",[46,3838,3839],{},"Besitzer",[21,3841,3842,3845],{},[46,3843,3844],{},"-perm",[46,3846,3847],{},"Rechte",[21,3849,3850,3853],{},[46,3851,3852],{},"-maxdepth",[46,3854,3855],{},"maximale Tiefe",[21,3857,3858,3861],{},[46,3859,3860],{},"-mindepth",[46,3862,3863],{},"minimale Tiefe",[433,3865,3867],{"id":3866},"dateitypen","Dateitypen",[15,3869,3870,3882],{},[18,3871,3872],{},[21,3873,3874,3878],{},[24,3875,3876],{},[27,3877,990],{},[24,3879,3880],{},[27,3881,1000],{},[41,3883,3884,3892,3900],{},[21,3885,3886,3889],{},[46,3887,3888],{},"-type f",[46,3890,3891],{},"normale Datei",[21,3893,3894,3897],{},[46,3895,3896],{},"-type d",[46,3898,3899],{},"Verzeichnis",[21,3901,3902,3905],{},[46,3903,3904],{},"-type l",[46,3906,3907],{},"symbolischer Link",[433,3909,3911],{"id":3910},"größe","Größe",[15,3913,3914,3926],{},[18,3915,3916],{},[21,3917,3918,3922],{},[24,3919,3920],{},[27,3921,2910],{},[24,3923,3924],{},[27,3925,1000],{},[41,3927,3928,3936,3944],{},[21,3929,3930,3933],{},[46,3931,3932],{},"-size +10M",[46,3934,3935],{},"größer als 10 MB",[21,3937,3938,3941],{},[46,3939,3940],{},"-size -1M",[46,3942,3943],{},"kleiner als 1 MB",[21,3945,3946,3949],{},[46,3947,3948],{},"-size 100k",[46,3950,3951],{},"genau 100 KB",[433,3953,3955],{"id":3954},"zeit","Zeit",[15,3957,3958,3970],{},[18,3959,3960],{},[21,3961,3962,3966],{},[24,3963,3964],{},[27,3965,3237],{},[24,3967,3968],{},[27,3969,1000],{},[41,3971,3972,3979,3987],{},[21,3973,3974,3976],{},[46,3975,3828],{},[46,3977,3978],{},"Tage seit Änderung",[21,3980,3981,3984],{},[46,3982,3983],{},"-atime",[46,3985,3986],{},"letzter Zugriff",[21,3988,3989,3992],{},[46,3990,3991],{},"-ctime",[46,3993,3994],{},"Statusänderung",[419,3996,2461],{},[441,3998,4000],{"className":443,"code":3999,"language":445,"meta":446,"style":446},"find . -mtime -7\n\n",[448,4001,4002],{"__ignoreMap":446},[332,4003,4004,4006,4008,4011],{"class":452,"line":453},[332,4005,3732],{"class":569},[332,4007,3754],{"class":464},[332,4009,4010],{"class":550}," -mtime",[332,4012,4013],{"class":550}," -7\n",[419,4015,4016],{},"Dateien der letzten 7 Tage.",[433,4018,4020],{"id":4019},"aktionen","Aktionen",[419,4022,4023],{},"Dateien löschen",[441,4025,4027],{"className":443,"code":4026,"language":445,"meta":446,"style":446},"find . -name \"*.tmp\" -delete\n\n",[448,4028,4029],{"__ignoreMap":446},[332,4030,4031,4033,4035,4037,4040],{"class":452,"line":453},[332,4032,3732],{"class":569},[332,4034,3754],{"class":464},[332,4036,3757],{"class":550},[332,4038,4039],{"class":464}," \"*.tmp\"",[332,4041,4042],{"class":550}," -delete\n",[419,4044,4045],{},"Befehl ausführen",[441,4047,4049],{"className":443,"code":4048,"language":445,"meta":446,"style":446},"find . -name \"*.log\" -exec rm {} \\;\n\n",[448,4050,4051],{"__ignoreMap":446},[332,4052,4053,4055,4057,4059,4062,4065,4068,4071],{"class":452,"line":453},[332,4054,3732],{"class":569},[332,4056,3754],{"class":464},[332,4058,3757],{"class":550},[332,4060,4061],{"class":464}," \"*.log\"",[332,4063,4064],{"class":550}," -exec",[332,4066,4067],{"class":464}," rm",[332,4069,4070],{"class":464}," {}",[332,4072,4073],{"class":550}," \\;\n",[1370,4075,4077],{"id":4076},"_94-awk","9.4. awk",[419,4079,4080,4082,4084,4085,4088],{},[27,4081,3134],{},[1404,4083],{},"\nWerkzeug zur ",[27,4086,4087],{},"Textanalyse und Datenverarbeitung"," (besonders Tabellen).",[419,4090,4091],{},[27,4092,3142],{},[257,4094,4095,4098,4101],{},[260,4096,4097],{},"Spalten ausgeben",[260,4099,4100],{},"Daten filtern",[260,4102,4103],{},"Berechnungen durchführen",[419,4105,4106],{},[27,4107,2212],{},[441,4109,4111],{"className":443,"code":4110,"language":445,"meta":446,"style":446},"awk 'BEDINGUNG {AKTION}' DATEI\n\n",[448,4112,4113],{"__ignoreMap":446},[332,4114,4115,4118,4121],{"class":452,"line":453},[332,4116,4117],{"class":569},"awk",[332,4119,4120],{"class":464}," 'BEDINGUNG {AKTION}'",[332,4122,3447],{"class":464},[433,4124,4126],{"id":4125},"grundprinzip","Grundprinzip",[419,4128,4129],{},"Jede Zeile wird automatisch verarbeitet.",[419,4131,4132,4133],{},"Standard-Trennzeichen: ",[27,4134,4135],{},"Whitespace",[419,4137,4138],{},"Spalten:",[15,4140,4141,4154],{},[18,4142,4143],{},[21,4144,4145,4150],{},[24,4146,4147],{},[27,4148,4149],{},"Variable",[24,4151,4152],{},[27,4153,1000],{},[41,4155,4156,4164,4172,4179,4187],{},[21,4157,4158,4161],{},[46,4159,4160],{},"$1",[46,4162,4163],{},"erste Spalte",[21,4165,4166,4169],{},[46,4167,4168],{},"$2",[46,4170,4171],{},"zweite Spalte",[21,4173,4174,4176],{},[46,4175,373],{},[46,4177,4178],{},"ganze Zeile",[21,4180,4181,4184],{},[46,4182,4183],{},"NF",[46,4185,4186],{},"Anzahl Felder",[21,4188,4189,4192],{},[46,4190,4191],{},"NR",[46,4193,4194],{},"Zeilennummer",[433,4196,4198],{"id":4197},"beispiele","Beispiele",[1489,4200,4202],{"id":4201},"erste-spalte-anzeigen","Erste Spalte anzeigen",[441,4204,4206],{"className":443,"code":4205,"language":445,"meta":446,"style":446},"awk '{print $1}' datei.txt\n\n",[448,4207,4208],{"__ignoreMap":446},[332,4209,4210,4212,4215],{"class":452,"line":453},[332,4211,4117],{"class":569},[332,4213,4214],{"class":464}," '{print $1}'",[332,4216,3220],{"class":464},[1489,4218,4220],{"id":4219},"mehrere-spalten","Mehrere Spalten",[441,4222,4224],{"className":443,"code":4223,"language":445,"meta":446,"style":446},"awk '{print $1, $3}' datei.txt\n\n",[448,4225,4226],{"__ignoreMap":446},[332,4227,4228,4230,4233],{"class":452,"line":453},[332,4229,4117],{"class":569},[332,4231,4232],{"class":464}," '{print $1, $3}'",[332,4234,3220],{"class":464},[433,4236,4238],{"id":4237},"bedingungen","Bedingungen",[419,4240,4241],{},"Nur Zeilen mit Bedingung",[441,4243,4245],{"className":443,"code":4244,"language":445,"meta":446,"style":446},"awk '$3 > 100 {print $1}' daten.txt\n\n",[448,4246,4247],{"__ignoreMap":446},[332,4248,4249,4251,4254],{"class":452,"line":453},[332,4250,4117],{"class":569},[332,4252,4253],{"class":464}," '$3 > 100 {print $1}'",[332,4255,4256],{"class":464}," daten.txt\n",[433,4258,4260],{"id":4259},"trennzeichen-ändern","Trennzeichen ändern",[441,4262,4264],{"className":443,"code":4263,"language":445,"meta":446,"style":446},"awk -F \":\" '{print $1}' \u002Fetc\u002Fpasswd\n\n",[448,4265,4266],{"__ignoreMap":446},[332,4267,4268,4270,4273,4276,4278],{"class":452,"line":453},[332,4269,4117],{"class":569},[332,4271,4272],{"class":550}," -F",[332,4274,4275],{"class":464}," \":\"",[332,4277,4214],{"class":464},[332,4279,4280],{"class":464}," \u002Fetc\u002Fpasswd\n",[433,4282,4284],{"id":4283},"berechnungen","Berechnungen",[419,4286,4287],{},"Summe berechnen",[441,4289,4291],{"className":443,"code":4290,"language":445,"meta":446,"style":446},"awk '{sum += $1} END {print sum}' zahlen.txt\n\n",[448,4292,4293],{"__ignoreMap":446},[332,4294,4295,4297,4300],{"class":452,"line":453},[332,4296,4117],{"class":569},[332,4298,4299],{"class":464}," '{sum += $1} END {print sum}'",[332,4301,4302],{"class":464}," zahlen.txt\n",[419,4304,4305],{},"Durchschnitt",[441,4307,4309],{"className":443,"code":4308,"language":445,"meta":446,"style":446},"awk '{sum += $1} END {print sum\u002FNR}' zahlen.txt\n\n",[448,4310,4311],{"__ignoreMap":446},[332,4312,4313,4315,4318],{"class":452,"line":453},[332,4314,4117],{"class":569},[332,4316,4317],{"class":464}," '{sum += $1} END {print sum\u002FNR}'",[332,4319,4302],{"class":464},[1370,4321,4323],{"id":4322},"wann-benutzt-man-welches-tool","Wann benutzt man welches Tool?",[15,4325,4326,4340],{},[18,4327,4328],{},[21,4329,4330,4335],{},[24,4331,4332],{},[27,4333,4334],{},"Tool",[24,4336,4337],{},[27,4338,4339],{},"Verwendung",[41,4341,4342,4349,4356,4363],{},[21,4343,4344,4346],{},[46,4345,3167],{},[46,4347,4348],{},"Text suchen",[21,4350,4351,4353],{},[46,4352,3438],{},[46,4354,4355],{},"Text automatisch bearbeiten",[21,4357,4358,4360],{},[46,4359,3732],{},[46,4361,4362],{},"Dateien im Dateisystem suchen",[21,4364,4365,4367],{},[46,4366,4117],{},[46,4368,4369],{},"Daten analysieren und Spalten verarbeiten",[1370,4371,4373],{"id":4372},"typische-kombinationen","Typische Kombinationen",[419,4375,4376],{},"Mit Pipe:",[441,4378,4380],{"className":443,"code":4379,"language":445,"meta":446,"style":446},"cat logfile | grep error\n\nps aux | grep firefox\n\nfind . -name \"*.log\" | grep error\n\n",[448,4381,4382,4397,4401,4413,4417],{"__ignoreMap":446},[332,4383,4384,4387,4390,4392,4394],{"class":452,"line":453},[332,4385,4386],{"class":569},"cat",[332,4388,4389],{"class":464}," logfile",[332,4391,3201],{"class":456},[332,4393,3204],{"class":569},[332,4395,4396],{"class":464}," error\n",[332,4398,4399],{"class":452,"line":490},[332,4400,494],{"emptyLinePlaceholder":493},[332,4402,4403,4405,4407,4409,4411],{"class":452,"line":414},[332,4404,3195],{"class":569},[332,4406,3198],{"class":464},[332,4408,3201],{"class":456},[332,4410,3204],{"class":569},[332,4412,3207],{"class":464},[332,4414,4415],{"class":452,"line":503},[332,4416,494],{"emptyLinePlaceholder":493},[332,4418,4419,4421,4423,4425,4427,4429,4431],{"class":452,"line":508},[332,4420,3732],{"class":569},[332,4422,3754],{"class":464},[332,4424,3757],{"class":550},[332,4426,4061],{"class":464},[332,4428,3201],{"class":456},[332,4430,3204],{"class":569},[332,4432,4396],{"class":464},[1370,4434,4436],{"id":4435},"kurzvergleich","Kurzvergleich",[15,4438,4439,4452],{},[18,4440,4441],{},[21,4442,4443,4447],{},[24,4444,4445],{},[27,4446,4334],{},[24,4448,4449],{},[27,4450,4451],{},"Stärke",[41,4453,4454,4461,4468,4475],{},[21,4455,4456,4458],{},[46,4457,3167],{},[46,4459,4460],{},"schnelles Suchen",[21,4462,4463,4465],{},[46,4464,3438],{},[46,4466,4467],{},"automatisches Bearbeiten",[21,4469,4470,4472],{},[46,4471,3732],{},[46,4473,4474],{},"Dateisystem durchsuchen",[21,4476,4477,4479],{},[46,4478,4117],{},[46,4480,4481],{},"strukturierte Daten analysieren",[10,4483,4485,4486,4489],{"id":4484},"anhang-juli-nützlich","Anhang “",[27,4487,4488],{},"Juli"," Nützlich”",[1370,4491,4493],{"id":4492},"analysesh","Analyse.sh",[441,4495,4497],{"className":443,"code":4496,"language":445,"meta":446,"style":446},"#!\u002Fbin\u002Fbash\n\n",[448,4498,4499],{"__ignoreMap":446},[332,4500,4501],{"class":452,"line":453},[332,4502,642],{"class":499},[419,4504,4505,4508],{},[27,4506,4507],{},"anzahl","() {",[441,4510,4512],{"className":443,"code":4511,"language":445,"meta":446,"style":446},"dateien=$(find \"$pfad\" -maxdepth 1 -type f | wc -l)\n\nverzeichnisse=$(find \"$pfad\" -maxdepth 1 -type d | wc -l)\n\necho \"Anzahl Verzeichnisse: $verzeichnisse\"\n\necho \"Anzahl Dateien: $dateien\"\n\n}\n\n",[448,4513,4514,4554,4558,4592,4596,4608,4612,4624,4628],{"__ignoreMap":446},[332,4515,4516,4519,4521,4524,4526,4528,4531,4533,4536,4539,4541,4544,4546,4549,4552],{"class":452,"line":453},[332,4517,4518],{"class":460},"dateien",[332,4520,654],{"class":456},[332,4522,4523],{"class":460},"$(",[332,4525,3732],{"class":569},[332,4527,476],{"class":464},[332,4529,4530],{"class":460},"$pfad",[332,4532,465],{"class":464},[332,4534,4535],{"class":550}," -maxdepth",[332,4537,4538],{"class":550}," 1",[332,4540,3770],{"class":550},[332,4542,4543],{"class":464}," f",[332,4545,3201],{"class":456},[332,4547,4548],{"class":569}," wc",[332,4550,4551],{"class":550}," -l",[332,4553,669],{"class":460},[332,4555,4556],{"class":452,"line":490},[332,4557,494],{"emptyLinePlaceholder":493},[332,4559,4560,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4584,4586,4588,4590],{"class":452,"line":414},[332,4561,4562],{"class":460},"verzeichnisse",[332,4564,654],{"class":456},[332,4566,4523],{"class":460},[332,4568,3732],{"class":569},[332,4570,476],{"class":464},[332,4572,4530],{"class":460},[332,4574,465],{"class":464},[332,4576,4535],{"class":550},[332,4578,4538],{"class":550},[332,4580,3770],{"class":550},[332,4582,4583],{"class":464}," d",[332,4585,3201],{"class":456},[332,4587,4548],{"class":569},[332,4589,4551],{"class":550},[332,4591,669],{"class":460},[332,4593,4594],{"class":452,"line":503},[332,4595,494],{"emptyLinePlaceholder":493},[332,4597,4598,4600,4603,4606],{"class":452,"line":508},[332,4599,576],{"class":550},[332,4601,4602],{"class":464}," \"Anzahl Verzeichnisse: ",[332,4604,4605],{"class":460},"$verzeichnisse",[332,4607,721],{"class":464},[332,4609,4610],{"class":452,"line":587},[332,4611,494],{"emptyLinePlaceholder":493},[332,4613,4614,4616,4619,4622],{"class":452,"line":592},[332,4615,576],{"class":550},[332,4617,4618],{"class":464}," \"Anzahl Dateien: ",[332,4620,4621],{"class":460},"$dateien",[332,4623,721],{"class":464},[332,4625,4626],{"class":452,"line":610},[332,4627,494],{"emptyLinePlaceholder":493},[332,4629,4630],{"class":452,"line":615},[332,4631,1357],{"class":460},[419,4633,4634,4508],{},[27,4635,4636],{},"groesse",[10,4638,4640],{"id":4639},"stat-c-zeigt-dateiinformationen-an","stat -c zeigt Dateiinformationen an,",[10,4642,4644],{"id":4643},"s-gibt-die-dateigröße-in-bytes-zurück-n-den-dateinamen","%s gibt die Dateigröße in Bytes zurück, %n den Dateinamen",[441,4646,4648],{"className":443,"code":4647,"language":445,"meta":446,"style":446},"biggest=$(stat -c \"%s %n\" * | sort -n | tail -n 1)\n\nsmallest=$(stat -c \"%s %n\" * | sort -n | head -n 1)\n\necho \"Kleinste Datei: $smallest\"\n\necho \"Größte Datei: $biggest\"\n\n}\n\n",[448,4649,4650,4688,4692,4726,4730,4742,4746,4758,4762],{"__ignoreMap":446},[332,4651,4652,4655,4657,4659,4662,4665,4668,4670,4672,4675,4677,4679,4682,4684,4686],{"class":452,"line":453},[332,4653,4654],{"class":460},"biggest",[332,4656,654],{"class":456},[332,4658,4523],{"class":460},[332,4660,4661],{"class":550},"stat",[332,4663,4664],{"class":550}," -c",[332,4666,4667],{"class":464}," \"%s %n\"",[332,4669,1345],{"class":550},[332,4671,3201],{"class":456},[332,4673,4674],{"class":569}," sort",[332,4676,3649],{"class":550},[332,4678,3201],{"class":456},[332,4680,4681],{"class":569}," tail",[332,4683,3649],{"class":550},[332,4685,4538],{"class":550},[332,4687,669],{"class":460},[332,4689,4690],{"class":452,"line":490},[332,4691,494],{"emptyLinePlaceholder":493},[332,4693,4694,4697,4699,4701,4703,4705,4707,4709,4711,4713,4715,4717,4720,4722,4724],{"class":452,"line":414},[332,4695,4696],{"class":460},"smallest",[332,4698,654],{"class":456},[332,4700,4523],{"class":460},[332,4702,4661],{"class":550},[332,4704,4664],{"class":550},[332,4706,4667],{"class":464},[332,4708,1345],{"class":550},[332,4710,3201],{"class":456},[332,4712,4674],{"class":569},[332,4714,3649],{"class":550},[332,4716,3201],{"class":456},[332,4718,4719],{"class":569}," head",[332,4721,3649],{"class":550},[332,4723,4538],{"class":550},[332,4725,669],{"class":460},[332,4727,4728],{"class":452,"line":503},[332,4729,494],{"emptyLinePlaceholder":493},[332,4731,4732,4734,4737,4740],{"class":452,"line":508},[332,4733,576],{"class":550},[332,4735,4736],{"class":464}," \"Kleinste Datei: ",[332,4738,4739],{"class":460},"$smallest",[332,4741,721],{"class":464},[332,4743,4744],{"class":452,"line":587},[332,4745,494],{"emptyLinePlaceholder":493},[332,4747,4748,4750,4753,4756],{"class":452,"line":592},[332,4749,576],{"class":550},[332,4751,4752],{"class":464}," \"Größte Datei: ",[332,4754,4755],{"class":460},"$biggest",[332,4757,721],{"class":464},[332,4759,4760],{"class":452,"line":610},[332,4761,494],{"emptyLinePlaceholder":493},[332,4763,4764],{"class":452,"line":615},[332,4765,1357],{"class":460},[419,4767,4768,4508],{},[27,4769,4770],{},"kategorie",[441,4772,4774],{"className":443,"code":4773,"language":445,"meta":446,"style":446},"klein=0\n\nmittel=0\n\ngross=0\n\nfor datei in \"$pfad\"\u002F*\n\ndo\n\nif [ -f \"$datei\" ]\n\nthen\n\nsize=$(stat -c %s \"$datei\")\n\nif [ \"$size\" -lt 102400 ]\n\nthen\n\n((klein++))\n\nelif [ \"$size\" -le 1048576 ]\n\nthen\n\n((mittel++))\n\nelse\n\n((gross++))\n\nfi\n\nfi\n\ndone\n\necho \"kleine Dateien \u003C 100KB: $klein\"\n\necho \"mittlere Dateien \u003C 1MB: $mittel\"\n\necho \"grosse Dateien > 1MB: $gross\"\n\n}\n\nif [ $# != 1 ]\n\nthen\n\necho \"Keine Paramenter übergeben\"\n\nexit 1\n\nfi\n\npfad=\"$1\"\n\nwhile [ \"$auswahl\" != 4 ]\n\ndo\n\necho \" bitte wählen:\"\n\necho \"1) Anzahl der Dateien und Unterverzeichnisse\"\n\necho \"2) Größte und kleinste Datei finden\"\n\necho \"3) Dateien nach größe klassifizieren\"\n\necho \"4) Beenden\"\n\nread auswahl\n\ncase \"$auswahl\" in\n\n",[448,4775,4776,4786,4790,4799,4803,4812,4816,4831,4835,4839,4843,4861,4865,4869,4873,4897,4901,4921,4926,4931,4936,4948,4953,4974,4979,4984,4989,4999,5004,5009,5014,5024,5029,5034,5039,5044,5049,5054,5059,5072,5077,5090,5095,5108,5113,5118,5123,5139,5144,5149,5154,5162,5167,5176,5181,5186,5191,5205,5210,5231,5236,5241,5246,5254,5259,5267,5272,5280,5285,5293,5298,5306,5311,5320,5325],{"__ignoreMap":446},[332,4777,4778,4781,4783],{"class":452,"line":453},[332,4779,4780],{"class":460},"klein",[332,4782,654],{"class":456},[332,4784,4785],{"class":464},"0\n",[332,4787,4788],{"class":452,"line":490},[332,4789,494],{"emptyLinePlaceholder":493},[332,4791,4792,4795,4797],{"class":452,"line":414},[332,4793,4794],{"class":460},"mittel",[332,4796,654],{"class":456},[332,4798,4785],{"class":464},[332,4800,4801],{"class":452,"line":503},[332,4802,494],{"emptyLinePlaceholder":493},[332,4804,4805,4808,4810],{"class":452,"line":508},[332,4806,4807],{"class":460},"gross",[332,4809,654],{"class":456},[332,4811,4785],{"class":464},[332,4813,4814],{"class":452,"line":587},[332,4815,494],{"emptyLinePlaceholder":493},[332,4817,4818,4820,4822,4824,4826,4828],{"class":452,"line":592},[332,4819,692],{"class":456},[332,4821,886],{"class":460},[332,4823,698],{"class":456},[332,4825,476],{"class":464},[332,4827,4530],{"class":460},[332,4829,4830],{"class":464},"\"\u002F*\n",[332,4832,4833],{"class":452,"line":610},[332,4834,494],{"emptyLinePlaceholder":493},[332,4836,4837],{"class":452,"line":615},[332,4838,704],{"class":456},[332,4840,4841],{"class":452,"line":724},[332,4842,494],{"emptyLinePlaceholder":493},[332,4844,4845,4847,4849,4852,4854,4856,4858],{"class":452,"line":729},[332,4846,457],{"class":456},[332,4848,461],{"class":460},[332,4850,4851],{"class":456},"-f",[332,4853,476],{"class":464},[332,4855,905],{"class":460},[332,4857,465],{"class":464},[332,4859,4860],{"class":460}," ]\n",[332,4862,4863],{"class":452,"line":735},[332,4864,494],{"emptyLinePlaceholder":493},[332,4866,4867],{"class":452,"line":740},[332,4868,487],{"class":456},[332,4870,4871],{"class":452,"line":746},[332,4872,494],{"emptyLinePlaceholder":493},[332,4874,4875,4878,4880,4882,4884,4886,4889,4891,4893,4895],{"class":452,"line":770},[332,4876,4877],{"class":460},"size",[332,4879,654],{"class":456},[332,4881,4523],{"class":460},[332,4883,4661],{"class":550},[332,4885,4664],{"class":550},[332,4887,4888],{"class":464}," %s",[332,4890,476],{"class":464},[332,4892,905],{"class":460},[332,4894,465],{"class":464},[332,4896,669],{"class":460},[332,4898,4899],{"class":452,"line":783},[332,4900,494],{"emptyLinePlaceholder":493},[332,4902,4903,4905,4907,4909,4912,4914,4916,4919],{"class":452,"line":1238},[332,4904,457],{"class":456},[332,4906,461],{"class":460},[332,4908,465],{"class":464},[332,4910,4911],{"class":460},"$size",[332,4913,465],{"class":464},[332,4915,473],{"class":456},[332,4917,4918],{"class":550}," 102400",[332,4920,4860],{"class":460},[332,4922,4924],{"class":452,"line":4923},18,[332,4925,494],{"emptyLinePlaceholder":493},[332,4927,4929],{"class":452,"line":4928},19,[332,4930,487],{"class":456},[332,4932,4934],{"class":452,"line":4933},20,[332,4935,494],{"emptyLinePlaceholder":493},[332,4937,4939,4942,4945],{"class":452,"line":4938},21,[332,4940,4941],{"class":460},"((klein",[332,4943,4944],{"class":456},"++",[332,4946,4947],{"class":460},"))\n",[332,4949,4951],{"class":452,"line":4950},22,[332,4952,494],{"emptyLinePlaceholder":493},[332,4954,4956,4958,4960,4962,4964,4966,4969,4972],{"class":452,"line":4955},23,[332,4957,1966],{"class":456},[332,4959,461],{"class":460},[332,4961,465],{"class":464},[332,4963,4911],{"class":460},[332,4965,465],{"class":464},[332,4967,4968],{"class":456}," -le",[332,4970,4971],{"class":550}," 1048576",[332,4973,4860],{"class":460},[332,4975,4977],{"class":452,"line":4976},24,[332,4978,494],{"emptyLinePlaceholder":493},[332,4980,4982],{"class":452,"line":4981},25,[332,4983,487],{"class":456},[332,4985,4987],{"class":452,"line":4986},26,[332,4988,494],{"emptyLinePlaceholder":493},[332,4990,4992,4995,4997],{"class":452,"line":4991},27,[332,4993,4994],{"class":460},"((mittel",[332,4996,4944],{"class":456},[332,4998,4947],{"class":460},[332,5000,5002],{"class":452,"line":5001},28,[332,5003,494],{"emptyLinePlaceholder":493},[332,5005,5007],{"class":452,"line":5006},29,[332,5008,1927],{"class":456},[332,5010,5012],{"class":452,"line":5011},30,[332,5013,494],{"emptyLinePlaceholder":493},[332,5015,5017,5020,5022],{"class":452,"line":5016},31,[332,5018,5019],{"class":460},"((gross",[332,5021,4944],{"class":456},[332,5023,4947],{"class":460},[332,5025,5027],{"class":452,"line":5026},32,[332,5028,494],{"emptyLinePlaceholder":493},[332,5030,5032],{"class":452,"line":5031},33,[332,5033,511],{"class":456},[332,5035,5037],{"class":452,"line":5036},34,[332,5038,494],{"emptyLinePlaceholder":493},[332,5040,5042],{"class":452,"line":5041},35,[332,5043,511],{"class":456},[332,5045,5047],{"class":452,"line":5046},36,[332,5048,494],{"emptyLinePlaceholder":493},[332,5050,5052],{"class":452,"line":5051},37,[332,5053,786],{"class":456},[332,5055,5057],{"class":452,"line":5056},38,[332,5058,494],{"emptyLinePlaceholder":493},[332,5060,5062,5064,5067,5070],{"class":452,"line":5061},39,[332,5063,576],{"class":550},[332,5065,5066],{"class":464}," \"kleine Dateien \u003C 100KB: ",[332,5068,5069],{"class":460},"$klein",[332,5071,721],{"class":464},[332,5073,5075],{"class":452,"line":5074},40,[332,5076,494],{"emptyLinePlaceholder":493},[332,5078,5080,5082,5085,5088],{"class":452,"line":5079},41,[332,5081,576],{"class":550},[332,5083,5084],{"class":464}," \"mittlere Dateien \u003C 1MB: ",[332,5086,5087],{"class":460},"$mittel",[332,5089,721],{"class":464},[332,5091,5093],{"class":452,"line":5092},42,[332,5094,494],{"emptyLinePlaceholder":493},[332,5096,5098,5100,5103,5106],{"class":452,"line":5097},43,[332,5099,576],{"class":550},[332,5101,5102],{"class":464}," \"grosse Dateien > 1MB: ",[332,5104,5105],{"class":460},"$gross",[332,5107,721],{"class":464},[332,5109,5111],{"class":452,"line":5110},44,[332,5112,494],{"emptyLinePlaceholder":493},[332,5114,5116],{"class":452,"line":5115},45,[332,5117,1357],{"class":460},[332,5119,5121],{"class":452,"line":5120},46,[332,5122,494],{"emptyLinePlaceholder":493},[332,5124,5126,5128,5130,5132,5135,5137],{"class":452,"line":5125},47,[332,5127,457],{"class":456},[332,5129,461],{"class":460},[332,5131,385],{"class":550},[332,5133,5134],{"class":456}," !=",[332,5136,4538],{"class":550},[332,5138,4860],{"class":460},[332,5140,5142],{"class":452,"line":5141},48,[332,5143,494],{"emptyLinePlaceholder":493},[332,5145,5147],{"class":452,"line":5146},49,[332,5148,487],{"class":456},[332,5150,5152],{"class":452,"line":5151},50,[332,5153,494],{"emptyLinePlaceholder":493},[332,5155,5157,5159],{"class":452,"line":5156},51,[332,5158,576],{"class":550},[332,5160,5161],{"class":464}," \"Keine Paramenter übergeben\"\n",[332,5163,5165],{"class":452,"line":5164},52,[332,5166,494],{"emptyLinePlaceholder":493},[332,5168,5170,5173],{"class":452,"line":5169},53,[332,5171,5172],{"class":550},"exit",[332,5174,5175],{"class":550}," 1\n",[332,5177,5179],{"class":452,"line":5178},54,[332,5180,494],{"emptyLinePlaceholder":493},[332,5182,5184],{"class":452,"line":5183},55,[332,5185,511],{"class":456},[332,5187,5189],{"class":452,"line":5188},56,[332,5190,494],{"emptyLinePlaceholder":493},[332,5192,5194,5197,5199,5201,5203],{"class":452,"line":5193},57,[332,5195,5196],{"class":460},"pfad",[332,5198,654],{"class":456},[332,5200,465],{"class":464},[332,5202,4160],{"class":550},[332,5204,721],{"class":464},[332,5206,5208],{"class":452,"line":5207},58,[332,5209,494],{"emptyLinePlaceholder":493},[332,5211,5213,5215,5217,5219,5222,5224,5226,5229],{"class":452,"line":5212},59,[332,5214,961],{"class":456},[332,5216,461],{"class":460},[332,5218,465],{"class":464},[332,5220,5221],{"class":460},"$auswahl",[332,5223,465],{"class":464},[332,5225,5134],{"class":456},[332,5227,5228],{"class":550}," 4",[332,5230,4860],{"class":460},[332,5232,5234],{"class":452,"line":5233},60,[332,5235,494],{"emptyLinePlaceholder":493},[332,5237,5239],{"class":452,"line":5238},61,[332,5240,704],{"class":456},[332,5242,5244],{"class":452,"line":5243},62,[332,5245,494],{"emptyLinePlaceholder":493},[332,5247,5249,5251],{"class":452,"line":5248},63,[332,5250,576],{"class":550},[332,5252,5253],{"class":464}," \" bitte wählen:\"\n",[332,5255,5257],{"class":452,"line":5256},64,[332,5258,494],{"emptyLinePlaceholder":493},[332,5260,5262,5264],{"class":452,"line":5261},65,[332,5263,576],{"class":550},[332,5265,5266],{"class":464}," \"1) Anzahl der Dateien und Unterverzeichnisse\"\n",[332,5268,5270],{"class":452,"line":5269},66,[332,5271,494],{"emptyLinePlaceholder":493},[332,5273,5275,5277],{"class":452,"line":5274},67,[332,5276,576],{"class":550},[332,5278,5279],{"class":464}," \"2) Größte und kleinste Datei finden\"\n",[332,5281,5283],{"class":452,"line":5282},68,[332,5284,494],{"emptyLinePlaceholder":493},[332,5286,5288,5290],{"class":452,"line":5287},69,[332,5289,576],{"class":550},[332,5291,5292],{"class":464}," \"3) Dateien nach größe klassifizieren\"\n",[332,5294,5296],{"class":452,"line":5295},70,[332,5297,494],{"emptyLinePlaceholder":493},[332,5299,5301,5303],{"class":452,"line":5300},71,[332,5302,576],{"class":550},[332,5304,5305],{"class":464}," \"4) Beenden\"\n",[332,5307,5309],{"class":452,"line":5308},72,[332,5310,494],{"emptyLinePlaceholder":493},[332,5312,5314,5317],{"class":452,"line":5313},73,[332,5315,5316],{"class":550},"read",[332,5318,5319],{"class":464}," auswahl\n",[332,5321,5323],{"class":452,"line":5322},74,[332,5324,494],{"emptyLinePlaceholder":493},[332,5326,5328,5330,5332,5334,5336],{"class":452,"line":5327},75,[332,5329,528],{"class":456},[332,5331,476],{"class":464},[332,5333,5221],{"class":460},[332,5335,465],{"class":464},[332,5337,5338],{"class":456}," in\n",[412,5340,5341],{},[260,5342],{},[419,5344,4507],{},[419,5346,5347],{},";;",[412,5349,5350],{"start":490},[260,5351],{},[419,5353,4636],{},[419,5355,5347],{},[412,5357,5358],{"start":414},[260,5359],{},[419,5361,4770],{},[419,5363,5347],{},[412,5365,5366],{"start":503},[260,5367],{},[441,5369,5371],{"className":443,"code":5370,"language":445,"meta":446,"style":446},"echo \"Programm wird beendet\"\n\nbreak\n\n",[448,5372,5373,5380,5384],{"__ignoreMap":446},[332,5374,5375,5377],{"class":452,"line":453},[332,5376,576],{"class":550},[332,5378,5379],{"class":464}," \"Programm wird beendet\"\n",[332,5381,5382],{"class":452,"line":490},[332,5383,494],{"emptyLinePlaceholder":493},[332,5385,5386],{"class":452,"line":414},[332,5387,5388],{"class":456},"break\n",[419,5390,5347],{},[419,5392,1294],{},[441,5394,5396],{"className":443,"code":5395,"language":445,"meta":446,"style":446},"echo \"ungueltige Auswahl!\"\n\n",[448,5397,5398],{"__ignoreMap":446},[332,5399,5400,5402],{"class":452,"line":453},[332,5401,576],{"class":550},[332,5403,5404],{"class":464}," \"ungueltige Auswahl!\"\n",[419,5406,5347],{},[419,5408,5409],{},[27,5410,5411],{},"esac",[419,5413,5414],{},[27,5415,950],{},[1370,5417,5419],{"id":5418},"backupsh","Backup.sh",[441,5421,5423],{"className":443,"code":5422,"language":445,"meta":446,"style":446},"#!\u002Fusr\u002Fbin\u002Fenv bash\n\nset -euo pipefail\n\nBACKUP_SRC=(\"$1\")\n\nBACKUP_DEST=\"\u002Fhome\u002Fjuli\u002FSchreibtisch\u002Fbackup\"\n\nRETENTION_DAYS=7\n\nLOGFILE=\"\u002Fhome\u002Fjuli\u002FSchreibtisch\u002Fbackup.log\"\n\nLOCKFILE=\"\u002Ftmp\u002Fbackup.lock\"\n\nDRY_RUN=false\n\n",[448,5424,5425,5430,5434,5445,5449,5466,5470,5480,5484,5494,5498,5508,5512,5522,5526],{"__ignoreMap":446},[332,5426,5427],{"class":452,"line":453},[332,5428,5429],{"class":499},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[332,5431,5432],{"class":452,"line":490},[332,5433,494],{"emptyLinePlaceholder":493},[332,5435,5436,5439,5442],{"class":452,"line":414},[332,5437,5438],{"class":550},"set",[332,5440,5441],{"class":550}," -euo",[332,5443,5444],{"class":464}," pipefail\n",[332,5446,5447],{"class":452,"line":503},[332,5448,494],{"emptyLinePlaceholder":493},[332,5450,5451,5454,5456,5458,5460,5462,5464],{"class":452,"line":508},[332,5452,5453],{"class":460},"BACKUP_SRC",[332,5455,654],{"class":456},[332,5457,657],{"class":460},[332,5459,465],{"class":464},[332,5461,4160],{"class":550},[332,5463,465],{"class":464},[332,5465,669],{"class":460},[332,5467,5468],{"class":452,"line":587},[332,5469,494],{"emptyLinePlaceholder":493},[332,5471,5472,5475,5477],{"class":452,"line":592},[332,5473,5474],{"class":460},"BACKUP_DEST",[332,5476,654],{"class":456},[332,5478,5479],{"class":464},"\"\u002Fhome\u002Fjuli\u002FSchreibtisch\u002Fbackup\"\n",[332,5481,5482],{"class":452,"line":610},[332,5483,494],{"emptyLinePlaceholder":493},[332,5485,5486,5489,5491],{"class":452,"line":615},[332,5487,5488],{"class":460},"RETENTION_DAYS",[332,5490,654],{"class":456},[332,5492,5493],{"class":464},"7\n",[332,5495,5496],{"class":452,"line":724},[332,5497,494],{"emptyLinePlaceholder":493},[332,5499,5500,5503,5505],{"class":452,"line":729},[332,5501,5502],{"class":460},"LOGFILE",[332,5504,654],{"class":456},[332,5506,5507],{"class":464},"\"\u002Fhome\u002Fjuli\u002FSchreibtisch\u002Fbackup.log\"\n",[332,5509,5510],{"class":452,"line":735},[332,5511,494],{"emptyLinePlaceholder":493},[332,5513,5514,5517,5519],{"class":452,"line":740},[332,5515,5516],{"class":460},"LOCKFILE",[332,5518,654],{"class":456},[332,5520,5521],{"class":464},"\"\u002Ftmp\u002Fbackup.lock\"\n",[332,5523,5524],{"class":452,"line":746},[332,5525,494],{"emptyLinePlaceholder":493},[332,5527,5528,5531,5533],{"class":452,"line":770},[332,5529,5530],{"class":460},"DRY_RUN",[332,5532,654],{"class":456},[332,5534,5535],{"class":464},"false\n",[419,5537,5538,4508],{},[27,5539,5540],{},"log",[10,5542,5544],{"id":5543},"tee-macht-es-möglich-die-ausgabe-sowohl-auf-der-konsole","Tee macht es möglich, die Ausgabe sowohl auf der Konsole",[10,5546,5548],{"id":5547},"als-auch-in-einer-logdatei-zu-speichern","als auch in einer Logdatei zu speichern",[441,5550,5552],{"className":443,"code":5551,"language":445,"meta":446,"style":446},"echo \"$(date '+%F %T') $1\" | tee -a \"$LOGFILE\"\n\n}\n\n",[448,5553,5554,5586,5590],{"__ignoreMap":446},[332,5555,5556,5558,5561,5564,5567,5569,5571,5573,5576,5579,5581,5584],{"class":452,"line":453},[332,5557,576],{"class":550},[332,5559,5560],{"class":464}," \"$(",[332,5562,5563],{"class":569},"date",[332,5565,5566],{"class":464}," '+%F %T') ",[332,5568,4160],{"class":550},[332,5570,465],{"class":464},[332,5572,3201],{"class":456},[332,5574,5575],{"class":569}," tee",[332,5577,5578],{"class":550}," -a",[332,5580,476],{"class":464},[332,5582,5583],{"class":460},"$LOGFILE",[332,5585,721],{"class":464},[332,5587,5588],{"class":452,"line":490},[332,5589,494],{"emptyLinePlaceholder":493},[332,5591,5592],{"class":452,"line":414},[332,5593,1357],{"class":460},[419,5595,5596,4508],{},[27,5597,5598],{},"cleanup",[441,5600,5602],{"className":443,"code":5601,"language":445,"meta":446,"style":446},"rm -f \"$LOCKFILE\"\n\n}\n\n# trap fängt Signale ab, in diesem Fall EXIT, und führt die Funktion cleanup aus,\n\n# um sicherzustellen, dass die Lockdatei entfernt wird, wenn das Skript beendet wird,\n\n# egal ob es erfolgreich war oder durch einen Fehler unterbrochen wurde.\n\ntrap cleanup EXIT\n\n[[ -f \"$LOCKFILE\" ]] && { echo \"Already running\"; exit 1; }\n\ntouch \"$LOCKFILE\"\n\n# $@ enthält alle Argumente, die an das Skript übergeben wurden.\n\nfor arg in \"$@\"; do\n\n[[ \"$arg\" == \"--dry-run\" ]] && DRY_RUN=true\n\ndone\n\nTIMESTAMP=$(date +%F_%H-%M-%S)\n\nTARGET=\"$BACKUP_DEST\u002Fbackup_$TIMESTAMP.tar.gz\"\n\nlog \"Starting backup...\"\n\nif ! $DRY_RUN; then\n\ntar -czf \"$TARGET\" \"${BACKUP_SRC[@]}\"\n\nelse\n\nlog \"Dry run: tar -czf $TARGET ${BACKUP_SRC[*]}\"\n\nfi\n\nlog \"Cleaning old backups...\"\n\n# find sucht nach Dateien im Backup-Verzeichnis,\n\n# die älter als die angegebene Anzahl von Tagen sind und löscht sie,\n\n# um Speicherplatz freizugeben und die Anzahl der Backups zu begrenzen.\n\nfind \"$BACKUP_DEST\" -type f -mtime +$RETENTION_DAYS -name \"*.tar.gz\" -delete\n\nlog \"Backup finished.\"\n\n",[448,5603,5604,5619,5623,5627,5631,5636,5640,5645,5649,5654,5658,5669,5673,5703,5707,5718,5722,5727,5731,5751,5755,5780,5784,5788,5792,5808,5812,5833,5837,5844,5848,5860,5864,5893,5897,5901,5905,5925,5929,5933,5937,5944,5948,5953,5957,5962,5966,5971,5975,6004,6008],{"__ignoreMap":446},[332,5605,5606,5609,5612,5614,5617],{"class":452,"line":453},[332,5607,5608],{"class":569},"rm",[332,5610,5611],{"class":550}," -f",[332,5613,476],{"class":464},[332,5615,5616],{"class":460},"$LOCKFILE",[332,5618,721],{"class":464},[332,5620,5621],{"class":452,"line":490},[332,5622,494],{"emptyLinePlaceholder":493},[332,5624,5625],{"class":452,"line":414},[332,5626,1357],{"class":460},[332,5628,5629],{"class":452,"line":503},[332,5630,494],{"emptyLinePlaceholder":493},[332,5632,5633],{"class":452,"line":508},[332,5634,5635],{"class":499},"# trap fängt Signale ab, in diesem Fall EXIT, und führt die Funktion cleanup aus,\n",[332,5637,5638],{"class":452,"line":587},[332,5639,494],{"emptyLinePlaceholder":493},[332,5641,5642],{"class":452,"line":592},[332,5643,5644],{"class":499},"# um sicherzustellen, dass die Lockdatei entfernt wird, wenn das Skript beendet wird,\n",[332,5646,5647],{"class":452,"line":610},[332,5648,494],{"emptyLinePlaceholder":493},[332,5650,5651],{"class":452,"line":615},[332,5652,5653],{"class":499},"# egal ob es erfolgreich war oder durch einen Fehler unterbrochen wurde.\n",[332,5655,5656],{"class":452,"line":724},[332,5657,494],{"emptyLinePlaceholder":493},[332,5659,5660,5663,5666],{"class":452,"line":729},[332,5661,5662],{"class":550},"trap",[332,5664,5665],{"class":464}," cleanup",[332,5667,5668],{"class":464}," EXIT\n",[332,5670,5671],{"class":452,"line":735},[332,5672,494],{"emptyLinePlaceholder":493},[332,5674,5675,5678,5680,5682,5684,5686,5689,5691,5694,5696,5698,5700],{"class":452,"line":740},[332,5676,5677],{"class":460},"[[ ",[332,5679,4851],{"class":456},[332,5681,476],{"class":464},[332,5683,5616],{"class":460},[332,5685,465],{"class":464},[332,5687,5688],{"class":460}," ]] && { ",[332,5690,576],{"class":550},[332,5692,5693],{"class":464}," \"Already running\"",[332,5695,765],{"class":460},[332,5697,5172],{"class":550},[332,5699,4538],{"class":550},[332,5701,5702],{"class":460},"; }\n",[332,5704,5705],{"class":452,"line":746},[332,5706,494],{"emptyLinePlaceholder":493},[332,5708,5709,5712,5714,5716],{"class":452,"line":770},[332,5710,5711],{"class":569},"touch",[332,5713,476],{"class":464},[332,5715,5616],{"class":460},[332,5717,721],{"class":464},[332,5719,5720],{"class":452,"line":783},[332,5721,494],{"emptyLinePlaceholder":493},[332,5723,5724],{"class":452,"line":1238},[332,5725,5726],{"class":499},"# $@ enthält alle Argumente, die an das Skript übergeben wurden.\n",[332,5728,5729],{"class":452,"line":4923},[332,5730,494],{"emptyLinePlaceholder":493},[332,5732,5733,5735,5738,5740,5742,5745,5747,5749],{"class":452,"line":4928},[332,5734,692],{"class":456},[332,5736,5737],{"class":460}," arg ",[332,5739,698],{"class":456},[332,5741,476],{"class":464},[332,5743,5744],{"class":550},"$@",[332,5746,465],{"class":464},[332,5748,765],{"class":460},[332,5750,704],{"class":456},[332,5752,5753],{"class":452,"line":4933},[332,5754,494],{"emptyLinePlaceholder":493},[332,5756,5757,5759,5761,5764,5766,5769,5772,5775,5777],{"class":452,"line":4938},[332,5758,5677],{"class":460},[332,5760,465],{"class":464},[332,5762,5763],{"class":460},"$arg",[332,5765,465],{"class":464},[332,5767,5768],{"class":456}," ==",[332,5770,5771],{"class":464}," \"--dry-run\"",[332,5773,5774],{"class":460}," ]] && DRY_RUN",[332,5776,654],{"class":456},[332,5778,5779],{"class":464},"true\n",[332,5781,5782],{"class":452,"line":4950},[332,5783,494],{"emptyLinePlaceholder":493},[332,5785,5786],{"class":452,"line":4955},[332,5787,786],{"class":456},[332,5789,5790],{"class":452,"line":4976},[332,5791,494],{"emptyLinePlaceholder":493},[332,5793,5794,5797,5799,5801,5803,5806],{"class":452,"line":4981},[332,5795,5796],{"class":460},"TIMESTAMP",[332,5798,654],{"class":456},[332,5800,4523],{"class":460},[332,5802,5563],{"class":569},[332,5804,5805],{"class":464}," +%F_%H-%M-%S",[332,5807,669],{"class":460},[332,5809,5810],{"class":452,"line":4986},[332,5811,494],{"emptyLinePlaceholder":493},[332,5813,5814,5817,5819,5821,5824,5827,5830],{"class":452,"line":4991},[332,5815,5816],{"class":460},"TARGET",[332,5818,654],{"class":456},[332,5820,465],{"class":464},[332,5822,5823],{"class":460},"$BACKUP_DEST",[332,5825,5826],{"class":464},"\u002Fbackup_",[332,5828,5829],{"class":460},"$TIMESTAMP",[332,5831,5832],{"class":464},".tar.gz\"\n",[332,5834,5835],{"class":452,"line":5001},[332,5836,494],{"emptyLinePlaceholder":493},[332,5838,5839,5841],{"class":452,"line":5006},[332,5840,5540],{"class":569},[332,5842,5843],{"class":464}," \"Starting backup...\"\n",[332,5845,5846],{"class":452,"line":5011},[332,5847,494],{"emptyLinePlaceholder":493},[332,5849,5850,5852,5855,5858],{"class":452,"line":5016},[332,5851,457],{"class":456},[332,5853,5854],{"class":456}," !",[332,5856,5857],{"class":460}," $DRY_RUN; ",[332,5859,487],{"class":456},[332,5861,5862],{"class":452,"line":5026},[332,5863,494],{"emptyLinePlaceholder":493},[332,5865,5866,5869,5872,5874,5877,5879,5882,5884,5887,5890],{"class":452,"line":5031},[332,5867,5868],{"class":569},"tar",[332,5870,5871],{"class":550}," -czf",[332,5873,476],{"class":464},[332,5875,5876],{"class":460},"$TARGET",[332,5878,465],{"class":464},[332,5880,5881],{"class":464}," \"${",[332,5883,5453],{"class":460},[332,5885,5886],{"class":464},"[",[332,5888,5889],{"class":456},"@",[332,5891,5892],{"class":464},"]}\"\n",[332,5894,5895],{"class":452,"line":5036},[332,5896,494],{"emptyLinePlaceholder":493},[332,5898,5899],{"class":452,"line":5041},[332,5900,1927],{"class":456},[332,5902,5903],{"class":452,"line":5046},[332,5904,494],{"emptyLinePlaceholder":493},[332,5906,5907,5909,5912,5914,5917,5919,5921,5923],{"class":452,"line":5051},[332,5908,5540],{"class":569},[332,5910,5911],{"class":464}," \"Dry run: tar -czf ",[332,5913,5876],{"class":460},[332,5915,5916],{"class":464}," ${",[332,5918,5453],{"class":460},[332,5920,5886],{"class":464},[332,5922,595],{"class":456},[332,5924,5892],{"class":464},[332,5926,5927],{"class":452,"line":5056},[332,5928,494],{"emptyLinePlaceholder":493},[332,5930,5931],{"class":452,"line":5061},[332,5932,511],{"class":456},[332,5934,5935],{"class":452,"line":5074},[332,5936,494],{"emptyLinePlaceholder":493},[332,5938,5939,5941],{"class":452,"line":5079},[332,5940,5540],{"class":569},[332,5942,5943],{"class":464}," \"Cleaning old backups...\"\n",[332,5945,5946],{"class":452,"line":5092},[332,5947,494],{"emptyLinePlaceholder":493},[332,5949,5950],{"class":452,"line":5097},[332,5951,5952],{"class":499},"# find sucht nach Dateien im Backup-Verzeichnis,\n",[332,5954,5955],{"class":452,"line":5110},[332,5956,494],{"emptyLinePlaceholder":493},[332,5958,5959],{"class":452,"line":5115},[332,5960,5961],{"class":499},"# die älter als die angegebene Anzahl von Tagen sind und löscht sie,\n",[332,5963,5964],{"class":452,"line":5120},[332,5965,494],{"emptyLinePlaceholder":493},[332,5967,5968],{"class":452,"line":5125},[332,5969,5970],{"class":499},"# um Speicherplatz freizugeben und die Anzahl der Backups zu begrenzen.\n",[332,5972,5973],{"class":452,"line":5141},[332,5974,494],{"emptyLinePlaceholder":493},[332,5976,5977,5979,5981,5983,5985,5987,5989,5991,5994,5997,5999,6002],{"class":452,"line":5146},[332,5978,3732],{"class":569},[332,5980,476],{"class":464},[332,5982,5823],{"class":460},[332,5984,465],{"class":464},[332,5986,3770],{"class":550},[332,5988,4543],{"class":464},[332,5990,4010],{"class":550},[332,5992,5993],{"class":464}," +",[332,5995,5996],{"class":460},"$RETENTION_DAYS ",[332,5998,3796],{"class":550},[332,6000,6001],{"class":464}," \"*.tar.gz\"",[332,6003,4042],{"class":550},[332,6005,6006],{"class":452,"line":5151},[332,6007,494],{"emptyLinePlaceholder":493},[332,6009,6010,6012],{"class":452,"line":5156},[332,6011,5540],{"class":569},[332,6013,6014],{"class":464}," \"Backup finished.\"\n",[1370,6016,6018],{"id":6017},"countsh","Count.sh",[441,6020,6022],{"className":443,"code":6021,"language":445,"meta":446,"style":446},"#!\u002Fbin\u002Fbash\n\nif [ $# != 1 ]\n\nthen\n\necho \"Kein Argument übergeben\"\n\nexit 1\n\nfi\n\nDATEI=\"$1\"\n\n# überprüfen, ob die angegebene Datei existiert\n\nif [ -e \"$DATEI\" ];\n\nthen\n\necho \"Die Datei $DATEI wurde gefunden\"\n\nelse\n\necho \"Die Datei $DATEI wurde nicht gefunden\"\n\nfi\n\n",[448,6023,6024,6028,6032,6046,6050,6054,6058,6065,6069,6075,6079,6083,6087,6099,6103,6108,6112,6130,6134,6138,6142,6154,6158,6162,6166,6177,6181],{"__ignoreMap":446},[332,6025,6026],{"class":452,"line":453},[332,6027,642],{"class":499},[332,6029,6030],{"class":452,"line":490},[332,6031,494],{"emptyLinePlaceholder":493},[332,6033,6034,6036,6038,6040,6042,6044],{"class":452,"line":414},[332,6035,457],{"class":456},[332,6037,461],{"class":460},[332,6039,385],{"class":550},[332,6041,5134],{"class":456},[332,6043,4538],{"class":550},[332,6045,4860],{"class":460},[332,6047,6048],{"class":452,"line":503},[332,6049,494],{"emptyLinePlaceholder":493},[332,6051,6052],{"class":452,"line":508},[332,6053,487],{"class":456},[332,6055,6056],{"class":452,"line":587},[332,6057,494],{"emptyLinePlaceholder":493},[332,6059,6060,6062],{"class":452,"line":592},[332,6061,576],{"class":550},[332,6063,6064],{"class":464}," \"Kein Argument übergeben\"\n",[332,6066,6067],{"class":452,"line":610},[332,6068,494],{"emptyLinePlaceholder":493},[332,6070,6071,6073],{"class":452,"line":615},[332,6072,5172],{"class":550},[332,6074,5175],{"class":550},[332,6076,6077],{"class":452,"line":724},[332,6078,494],{"emptyLinePlaceholder":493},[332,6080,6081],{"class":452,"line":729},[332,6082,511],{"class":456},[332,6084,6085],{"class":452,"line":735},[332,6086,494],{"emptyLinePlaceholder":493},[332,6088,6089,6091,6093,6095,6097],{"class":452,"line":740},[332,6090,1479],{"class":460},[332,6092,654],{"class":456},[332,6094,465],{"class":464},[332,6096,4160],{"class":550},[332,6098,721],{"class":464},[332,6100,6101],{"class":452,"line":746},[332,6102,494],{"emptyLinePlaceholder":493},[332,6104,6105],{"class":452,"line":770},[332,6106,6107],{"class":499},"# überprüfen, ob die angegebene Datei existiert\n",[332,6109,6110],{"class":452,"line":783},[332,6111,494],{"emptyLinePlaceholder":493},[332,6113,6114,6116,6118,6120,6122,6125,6127],{"class":452,"line":1238},[332,6115,457],{"class":456},[332,6117,461],{"class":460},[332,6119,3489],{"class":456},[332,6121,476],{"class":464},[332,6123,6124],{"class":460},"$DATEI",[332,6126,465],{"class":464},[332,6128,6129],{"class":460}," ];\n",[332,6131,6132],{"class":452,"line":4923},[332,6133,494],{"emptyLinePlaceholder":493},[332,6135,6136],{"class":452,"line":4928},[332,6137,487],{"class":456},[332,6139,6140],{"class":452,"line":4933},[332,6141,494],{"emptyLinePlaceholder":493},[332,6143,6144,6146,6149,6151],{"class":452,"line":4938},[332,6145,576],{"class":550},[332,6147,6148],{"class":464}," \"Die Datei ",[332,6150,6124],{"class":460},[332,6152,6153],{"class":464}," wurde gefunden\"\n",[332,6155,6156],{"class":452,"line":4950},[332,6157,494],{"emptyLinePlaceholder":493},[332,6159,6160],{"class":452,"line":4955},[332,6161,1927],{"class":456},[332,6163,6164],{"class":452,"line":4976},[332,6165,494],{"emptyLinePlaceholder":493},[332,6167,6168,6170,6172,6174],{"class":452,"line":4981},[332,6169,576],{"class":550},[332,6171,6148],{"class":464},[332,6173,6124],{"class":460},[332,6175,6176],{"class":464}," wurde nicht gefunden\"\n",[332,6178,6179],{"class":452,"line":4986},[332,6180,494],{"emptyLinePlaceholder":493},[332,6182,6183],{"class":452,"line":4991},[332,6184,511],{"class":456},[1370,6186,6188],{"id":6187},"envinfosh","Envinfo.sh",[441,6190,6192],{"className":443,"code":6191,"language":445,"meta":446,"style":446},"#!\u002Fbin\u002Fbash\n\n# Umgebungsvariablen\n\necho \"User: $USER\"\n\necho \"Homeverzeichnis: $HOME\"\n\necho \"Skript: $0\"\n\necho \"Datum: $(date)\"\n\necho \"PC Name: $(hostname)\"\n\necho \"Aktuelles Verzeichnis: $(pwd)\"\n\n",[448,6193,6194,6198,6202,6207,6211,6223,6227,6239,6243,6254,6258,6270,6274,6286,6290],{"__ignoreMap":446},[332,6195,6196],{"class":452,"line":453},[332,6197,642],{"class":499},[332,6199,6200],{"class":452,"line":490},[332,6201,494],{"emptyLinePlaceholder":493},[332,6203,6204],{"class":452,"line":414},[332,6205,6206],{"class":499},"# Umgebungsvariablen\n",[332,6208,6209],{"class":452,"line":503},[332,6210,494],{"emptyLinePlaceholder":493},[332,6212,6213,6215,6218,6221],{"class":452,"line":508},[332,6214,576],{"class":550},[332,6216,6217],{"class":464}," \"User: ",[332,6219,6220],{"class":460},"$USER",[332,6222,721],{"class":464},[332,6224,6225],{"class":452,"line":587},[332,6226,494],{"emptyLinePlaceholder":493},[332,6228,6229,6231,6234,6237],{"class":452,"line":592},[332,6230,576],{"class":550},[332,6232,6233],{"class":464}," \"Homeverzeichnis: ",[332,6235,6236],{"class":460},"$HOME",[332,6238,721],{"class":464},[332,6240,6241],{"class":452,"line":610},[332,6242,494],{"emptyLinePlaceholder":493},[332,6244,6245,6247,6250,6252],{"class":452,"line":615},[332,6246,576],{"class":550},[332,6248,6249],{"class":464}," \"Skript: ",[332,6251,373],{"class":550},[332,6253,721],{"class":464},[332,6255,6256],{"class":452,"line":724},[332,6257,494],{"emptyLinePlaceholder":493},[332,6259,6260,6262,6265,6267],{"class":452,"line":729},[332,6261,576],{"class":550},[332,6263,6264],{"class":464}," \"Datum: $(",[332,6266,5563],{"class":569},[332,6268,6269],{"class":464},")\"\n",[332,6271,6272],{"class":452,"line":735},[332,6273,494],{"emptyLinePlaceholder":493},[332,6275,6276,6278,6281,6284],{"class":452,"line":740},[332,6277,576],{"class":550},[332,6279,6280],{"class":464}," \"PC Name: $(",[332,6282,6283],{"class":569},"hostname",[332,6285,6269],{"class":464},[332,6287,6288],{"class":452,"line":746},[332,6289,494],{"emptyLinePlaceholder":493},[332,6291,6292,6294,6297,6300],{"class":452,"line":770},[332,6293,576],{"class":550},[332,6295,6296],{"class":464}," \"Aktuelles Verzeichnis: $(",[332,6298,6299],{"class":550},"pwd",[332,6301,6269],{"class":464},[1370,6303,6305],{"id":6304},"list_infosh","List_info.sh",[441,6307,6309],{"className":443,"code":6308,"language":445,"meta":446,"style":446},"#!\u002Fbin\u002Fbash\n\n# Dateien eines bestimmten Typs auflisten, hier: alle .sh\n\nfor file in \"$1\"\u002F*.sh\n\ndo\n\n[ -e \"$file\" ] || continue\n\nif [ -s \"$file\" ]\n\nthen\n\necho \"$file\"\n\nfi\n\ndone\n",[448,6310,6311,6315,6319,6324,6328,6344,6348,6352,6356,6379,6383,6399,6403,6407,6411,6421,6425,6429,6433],{"__ignoreMap":446},[332,6312,6313],{"class":452,"line":453},[332,6314,642],{"class":499},[332,6316,6317],{"class":452,"line":490},[332,6318,494],{"emptyLinePlaceholder":493},[332,6320,6321],{"class":452,"line":414},[332,6322,6323],{"class":499},"# Dateien eines bestimmten Typs auflisten, hier: alle .sh\n",[332,6325,6326],{"class":452,"line":503},[332,6327,494],{"emptyLinePlaceholder":493},[332,6329,6330,6332,6335,6337,6339,6341],{"class":452,"line":508},[332,6331,692],{"class":456},[332,6333,6334],{"class":460}," file ",[332,6336,698],{"class":456},[332,6338,476],{"class":464},[332,6340,4160],{"class":550},[332,6342,6343],{"class":464},"\"\u002F*.sh\n",[332,6345,6346],{"class":452,"line":587},[332,6347,494],{"emptyLinePlaceholder":493},[332,6349,6350],{"class":452,"line":592},[332,6351,704],{"class":456},[332,6353,6354],{"class":452,"line":610},[332,6355,494],{"emptyLinePlaceholder":493},[332,6357,6358,6361,6363,6365,6368,6370,6373,6376],{"class":452,"line":615},[332,6359,6360],{"class":460},"[ ",[332,6362,3489],{"class":456},[332,6364,476],{"class":464},[332,6366,6367],{"class":460},"$file",[332,6369,465],{"class":464},[332,6371,6372],{"class":460}," ] ",[332,6374,6375],{"class":456},"||",[332,6377,6378],{"class":456}," continue\n",[332,6380,6381],{"class":452,"line":724},[332,6382,494],{"emptyLinePlaceholder":493},[332,6384,6385,6387,6389,6391,6393,6395,6397],{"class":452,"line":729},[332,6386,457],{"class":456},[332,6388,461],{"class":460},[332,6390,343],{"class":456},[332,6392,476],{"class":464},[332,6394,6367],{"class":460},[332,6396,465],{"class":464},[332,6398,4860],{"class":460},[332,6400,6401],{"class":452,"line":735},[332,6402,494],{"emptyLinePlaceholder":493},[332,6404,6405],{"class":452,"line":740},[332,6406,487],{"class":456},[332,6408,6409],{"class":452,"line":746},[332,6410,494],{"emptyLinePlaceholder":493},[332,6412,6413,6415,6417,6419],{"class":452,"line":770},[332,6414,576],{"class":550},[332,6416,476],{"class":464},[332,6418,6367],{"class":460},[332,6420,721],{"class":464},[332,6422,6423],{"class":452,"line":783},[332,6424,494],{"emptyLinePlaceholder":493},[332,6426,6427],{"class":452,"line":1238},[332,6428,511],{"class":456},[332,6430,6431],{"class":452,"line":4923},[332,6432,494],{"emptyLinePlaceholder":493},[332,6434,6435],{"class":452,"line":4928},[332,6436,786],{"class":456},[6438,6439,6440],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":446,"searchDepth":490,"depth":490,"links":6442},[6443,6444,6445,6446,6447,6451,6452,6455,6458,6461,6462,6465,6466,6469,6470,6471,6472,6476,6483,6490,6491,6492,6493,6494,6495,6496,6497],{"id":435,"depth":414,"text":436},{"id":624,"depth":414,"text":627},{"id":789,"depth":414,"text":792},{"id":853,"depth":414,"text":856},{"id":1372,"depth":490,"text":1373,"children":6448},[6449,6450],{"id":1376,"depth":414,"text":1377},{"id":1425,"depth":414,"text":1426},{"id":2060,"depth":490,"text":2061},{"id":2115,"depth":490,"text":2118,"children":6453},[6454],{"id":2127,"depth":414,"text":2130},{"id":2176,"depth":490,"text":2179,"children":6456},[6457],{"id":2193,"depth":414,"text":2196},{"id":2275,"depth":490,"text":2278,"children":6459},[6460],{"id":2340,"depth":414,"text":2343},{"id":2366,"depth":490,"text":2369},{"id":2383,"depth":490,"text":2386,"children":6463},[6464],{"id":2392,"depth":414,"text":2395},{"id":2497,"depth":490,"text":2500},{"id":2592,"depth":490,"text":2595,"children":6467},[6468],{"id":2636,"depth":414,"text":2639},{"id":2909,"depth":490,"text":2910},{"id":3128,"depth":490,"text":3129},{"id":3223,"depth":490,"text":3226},{"id":3397,"depth":490,"text":3398,"children":6473},[6474,6475],{"id":3468,"depth":414,"text":3226},{"id":3516,"depth":414,"text":3517},{"id":3695,"depth":490,"text":3696,"children":6477},[6478,6479,6480,6481,6482],{"id":3775,"depth":414,"text":3226},{"id":3866,"depth":414,"text":3867},{"id":3910,"depth":414,"text":3911},{"id":3954,"depth":414,"text":3955},{"id":4019,"depth":414,"text":4020},{"id":4076,"depth":490,"text":4077,"children":6484},[6485,6486,6487,6488,6489],{"id":4125,"depth":414,"text":4126},{"id":4197,"depth":414,"text":4198},{"id":4237,"depth":414,"text":4238},{"id":4259,"depth":414,"text":4260},{"id":4283,"depth":414,"text":4284},{"id":4322,"depth":490,"text":4323},{"id":4372,"depth":490,"text":4373},{"id":4435,"depth":490,"text":4436},{"id":4492,"depth":490,"text":4493},{"id":5418,"depth":490,"text":5419},{"id":6017,"depth":490,"text":6018},{"id":6187,"depth":490,"text":6188},{"id":6304,"depth":490,"text":6305},"7-8","md",{},{"title":6502},"Cheat-Sheet – Schulaufgabe 2 (2025\u002F2026)","\u002Ffaecher\u002Fbsa\u002F7-8-cs-sa2","\u002Fdownloads\u002FBSA\u002FBSA_7-8_CS_SA2.pdf","SA2","Schulaufgabe 2",{"title":5,"description":446},"faecher\u002Fbsa\u002F7-8-cs-sa2","BSA","Betriebssysteme und Administration","CS","Cheat-Sheet","2025\u002F2026","hH_MKbPbyjUiRdVPc7ChbawdUF9ObLtKROjOcLshg5o",1778676320582]