% Debian GNU/Linux tillsammans -- 4. Datorprogram och stil % % Först * Runda med reflektioner Att täcka in * Filosofin bakom Unix-program. * Vanliga format på konfiguration * Vanliga format på data * Skript Material * Utgå från [datafilsexemplen](../#datafilsexempel), ladda ner dem enligt instruktion. Till detta tillfälle inkluderas exempel på skript. * Aoki, Debian Reference, [1.6 "Unix-like text processing"][deb:cons:text] och [12.1. "The shell script"][deb:cons:script] * Garrels, [1.5. Developing good scripts][ldp:bash:01] och [2. Writing and debugging scripts][ldp:bash:02] * Wikipedia, [UNIX-filosofien][wik:fil] (*no*) * [Lista med filformat](../#filformat) [deb:cons:text]: https://www.debian.org/doc/manuals/debian-reference/ch01.en.html#_unix_like_text_processing [deb:cons:script]: https://www.debian.org/doc/manuals/debian-reference/ch12.en.html#_the_shell_script [ldp:bash:01]: https://tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html#sect_01_05 [ldp:bash:02]: https://tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html#chap_02 [wik:fil]: https://no.wikipedia.org/wiki/Unix-filosofien # Anteckningar 2021 vt *Anteckna här.* Kom ihåg att spara :) Unix program är hierarkiska. Det är små program som gör enkla saker bra och kan kommunicera med varandra. T.ex. genom att bygga ihop flera program till något komplext. Windows program är istället stora och komplexa. Det finns flera program som är stora och komplexa till Linux också t.ex. Libre office. Dessa skulle kunna bantas ner. Unix filosofin handlar om hur program byggs upp. De ska vara modulära och inte monolistiska. Monolitiska program skrivs i stora klumpar och filer och svåra och sätta sig in i. De modulära är små funktioner och klasser och klumpar som gör sin sak. Unix filosofin känns igen mellan program också. Skeppsdatorn HAL i odysseus 2001 är nog monolitiskt. En funktionalitet kan vara användbar för många i bibliotek. Pidgin är ett sådant program som kan återanvända många program. Det går också att bygga modulära program i PhP. I trafiken pratas det om modulärt resande. T.ex. olika trafikslag. Monoliten är själva apparaten. Hur kan konfigurationsfiler se ut? Namn värde par under en rubrik. I /etc samlas konfigurationsfiler. Styrning indata utdata så funkar alla datorprogram. Styrningen är typiskt konfigurationsfilen. Grafiska program kan vi styra via menyer. Men i icke grafiska program behöver konfigurationsfiler inkluderas. rc står för run command bash rc är en konfigurationsfil. Den ligger i less. Less är ett program som visar upp text. Less är mer avancerad än moore. Less is more. Bash rc script kommer att matas in och köras i bash. Konfigurationsfiler i allmänhet är säkra. Men rc som generella datorprogam finns stor risk att man kan attackeras av illasinnade personer. Man ska vara försiktig. Var noga med källan till programmen. Undvik proprietära dator program. ./ används för att köra ett kompilerat program. # Anteckningar 2020 ht På rundan pratade vi om vad som hände förra och att vi är nya och att vi är med på alla steg allihop. Reparera obalans går inte att lösa sedan. Inför nästa gång behövs bra utgångsdata för att bygga reguljära uttryck. Textfiler och citat kan vi jobba med. En dikt eller något. Det kan lätta upp lite. En rolig grej kan vara att se hur många konsonanter man kan ha på raken i Svenska. Unix-filosofin sammanfattas med att man gör ett program som gör en sak bra. Och sen gör man ett annat program som gör en annan sak bra. I Unix är allting en fil. Enheten är filer programmen är filer. POSIX och Unix är väldigt filorienterat. Varje program ska göra en sak och varje program ska vara välskrivet. Apple har begränsat Unix men det går inte att följa. Man kommer inte in i Apple-programmen via terminal i Unix för man hindras. I Unix kopplas program ihop på ett effektivt sätt. Man bygger ihop olika kontext och kvalitet själv utan att bygga ihop program. Linux följer samma standard som Unix. Och det är filer som är organiserat på ett partikulärt och avancerat sätt. Den här gången tog vi bort prompten. Då kan det vara svårt att veta var man är, i vilken katalog. *pwd* visar nuvarande katalog och är ett program. Det lärde vi oss av *which*. *man* är systemets sidvisare för manualen. Skriv t.ex. `man pwd`. *q* stänger manualen. *clear* ger en blank manual liksom *ctrl* + *L*. Allt som har snedstreck efter sig är kataloger. De som inte har det är filer. Mycket i root-katalogen, */*, är Unix-arv till exempel */boot*. Det är en egen partition som inte är krypterad. En partition är en fysisk avdelning av hårddisken. Fördelen med partitioner är många en är att vi kan ha linuxkärnan för att avkryptera hårddisken. Om vi stoppar allting i en krypterad fil så är det som att låsa lådan och kasta bort nyckeln. */dev* står för devices. */etc* i den finns konfigurationsfiler. I */usr* finns installerade program. Vissa kataloger känns igen här: */usr/bin*, */usr/lib*, etc. Här finns en kopia till på hela trädet. */usr* delar upp ansvaret vad som är kärnrymden (operativstystemts) och användarrymden (andra program). Under *usr* är det något jag sjäv troligen har valt att installera. Det kan jag också uppdatera på egen hand. Tillexempel ett bibliotek. Systemet uppdaterar det inte. I Unix återanvänds mycket programvara, funktioner, rutiner, etc. Det kan läggas i ett bibliotek (*lib*) och användas från olika program. Det gör att de tar mindre plats på hårddisken. GNU funkar som Unix men är inte Unix. GNU begränsar sig inte av POSIX- och Unix-standarden utan är fritt att plocka in vid behov. Vi tittar på allt som finns i */dev* och pratar om det. Nu har vi kommit fram till vad Unix är. Stjärnan "\*" är en joker. Ett joker tecken som har som effekt att representera alla möjliga saker som kan stå här. Bash känsligt för stora och små bokstäver för variabler. Så är det av konvention. Gemener används för variabler som jag själv definierar. Det är sånt som man måste hålla koll på. Det sista får Gustav berätta bara. Vi vill hinna med ett skript också. Då tar man kommandon som man använder ofta och stoppar in i ett skript. Det är väldigt användbart. Vi lyckades inte riktigt med `echo $VISUAL` och `echo $EDITOR` de flesta fick bara tomma rader. Ingenting med *echo* är att skapa en ny rad så att det syns bättre. Alla lyckades inte göra skriptet. Sensmoralen är att det går att *Anteckna här.* automatisera sådant som man gör ofta. ## Extratillfälle En eventuell gång fem skulle kunna innebära att vi får en läxa och får ta med egna filer och göra egna skript. Vi pratade också om att ha ett fördjupningstillfälle. Vi ses den 16/12 på Forum och försöker göra läxa och göra någonting på egen hand. Ambitionen är att göra någonting. ## Lärdomar inför nästa tillfälle Utgå från tillfällig katalog `/tmp/linux-intro-{01..05}` (tips Guilhem). Sökväg till `$XDG_RUNTIME_DIR` är onödigt komplicerad. Det är praktiskt att, som vi gör, arbeta med tillfälliga kataloger (som *tmp*) i övningssammanhang så länge det upprepas att innehållet inte finns kvar efter omstart. Kör skript med `bash -x` för återkoppling kring exekvering (tips Guilhem). Det är pedagogiskt. Konstruera utgångsdata. Litterära dikter, e.dy. enligt ovan.