TDDI41 Grundläggande systemadministration
Grunderna i UNIX och Linux
Väldigt mycket av världens serverdrift och datoradministration sköts i Linux- och UNIX-system. Linux är rent formellt inte en UNIX, fast ur alla praktiska vinklar är Linux en UNIX. Den här labben går igenom- Grunderna om kommandoraden
- Filer och sökvägar
- Miljövariabler
Första delen (Kort om kommandoraden) är en grundläggande introduktion för de vilka knappt använt UNIX innan. Andra delen (För systemadministratörer) är tyngre, och kommer troligen introducera fler nya koncept.
Kort om kommandoraden
Nedan följer en snabbgenomgång av vanliga kommand och idéer från kommandoraden. Om man är bekväm med dem sen innan finns det inte mycket nytt.- ^C (CTRL och C) dödar nuvarande process. Flera klick i snabb följd kan behövas.
- ^Z "Placerar" nuvarande program i bakgrunden. Kan stoppa program när ^C inte vill fungera
- kommandot
reset
lagar terminalen när den fått udda inställningar
- mycket enklare att berätta hur man gör någonting
- finns tillgängligt på mycket mer (tänk webbservrar, kaffebryggare, ...)
- Mycket större möjlighet att kjedja samman program, t.ex:
shuf --random-source=/dev/urandom /usr/share/dict/words \ # Läs in en ordlista och slumpa ordningen på raderna | head -n6 \ # Ta de sex första raderna | tr '\n' '-' \ # Byt ut radbrotten mellan orden till bindessträck | head -c-1 # Släng bort det sista tecknet, vilket är ett bindessträck vi inte vill ha
Prompten
Ens prompt kan se ut på många sätt. Skapligt vanligt är dock någonting i stil med den nedan.hugho26Användarnamn@thinlincVärdnamn [~/DocumentsSökväg] $
Ert användarnamn är vem ni är inloggad som. På den (fysiska) maskin ni sitter vid just nu är det troligen ert LiU-id eller namn. Värdnamnet är vad maskinen heter. LiU:s maskiner har i regel namn efter vart de är placerade. Sökvägen är vilken mapp som är er nuvarande arbetsmapp. Om ni skriver en fils namn utan att ge dess kompletta sökväg (så som
/usr/bin/cowsay
) så kommer den slås relativt den.
Absoluta grunderna
För att köra ett kommando, skriv dess namn i prompten och tryck enter. T.ex.$ lsKommandot att köra -lFlagga
I exempel skrivs ens prompt ofta inte ut, eller kortas ner till bara ett dollartecken (
$
).
ls
- Listar filer i nuvarande mapp
mkdir
1- skapar en ny mapp (make directory)
cd
- Byter nuvarande mapp (change directory)
pwd
- Skriver ut nuvarande mapp (print working directory
cat
- Skriver ut inehållet i en fil (och konkatenerar ihop flera filer)
less
- Liknande
cat
, men scrollar inte saker av skärmen utan låter en skrolla fritt själv. Har vi-bindingar. Kan även ses som en simpel textredigerare utan redigeringsdelen. Är väldigt bra som mål för ett rör, se nedan.
Kommandoradsflaggor (i det här fallet -l
är hur man i regel
skickar med argument till processer. Jämför med argument till en funktion).
Ett annat exempel är -r
i scp -r
(från QEMU-labben),
där -r
står för rekursivt.
Dokumentation
Att veta var man hittar dokumentation och hur man läser det är extremt viktigt.programnamn --help
- Hjälputskrift inbyggt i själva programmet. Varierar mycket i format och användbarhet, men brukar få fram de vanligaste flaggorna
- man
- Standardmanualen för unix. Kör t.ex.
man ls
för att se manualen förls
. Kommer troligen ha vim bindningar. Det finns 9 olika avsnitt av manualsidor, där t.ex.glob(7)
indikerar avsnitt 7 i glob-manualen. - info
- En del program kommer med en längre manualer. Ofta formaterade som info sidor. Info-sidor är någonstanns mellan en PDF och en webbsida. har i regel Emacs-bindningar. Som standard är i bundet till indexsökning. Använd det!
man man
) och svara på följande:
- Vilka är de 9 avsnitten?
- Vilket avsnitt dokumenterar kommandoradsverktyg så som
cat
ellerls
?
Rör (pipe)
En av de absolut starkaste funktionerna i skalet är möjligheten att kedja samman program genom "rör". Där man låter outputen från et program aggera inputen till nästa. Några vanliga kommandon att "pipea" till är bland annatless
, som ger en scrollbar output, head
och tail
, vilken ger en början respektive slutet av texten, sort
vilket sorterar ens rader, och många fler.
program_med_väldigt_mycket_output.sh | less # Exempel på inmatning till less
journalctl
, och med hjälp av tail
visa bara de sista 5 raderna.
Output redirection
Output kan även skrivas till fil med högerpil (>
). En
enkler högerpil skriver över filen om den redan finns. Dubbel pil
lägger till i slutet. Oavsätt skapas filen.
kommand > fil-som-skrivs-över
kommand >> fil-som-skrivs-till-slutet-av
Globbing och grepping
Ofta vill man söka efter någonting, men vet inte exakt vad. Två primära "språk"
för det är globs (glob(7)
) samt Regex (regex(7)
).
Globs är väldigt simpla, och framförallt användbara för wildcards.
T.ex. ls *.pdf
visar alla filer i nuvarande mapp vars
namn slutar på ".pdf". Globs är inbyggda i ens skal (bash).
Regex är istället ett ytterst kraftfullt språk för att söka i text.
Från skalet används ofta grep
för att hitta saker, samt
sed
för att ersätta text.
cat /etc/passwd | grep -E '(nologin|false)$' Hitta alla lokala vars loginskal är nologin
eller false
2
En bra interaktiv miljö att leka runt i är Regex 101
Sökvägar
Alla filer i Unix världen är placerade någonstans i ens ända
filträd (till skillnad från Windows som kan ha flera (C:\ D:\)).
Trädets rot är /
.
Sökvägar till filer kan antingen anges absolut, där man utgår från roten, t.ex.
/etc/passwd
pekar alltid på samma fil. Bara
passwd
däremot refererar till filen "passwd" relativt den
mappen där man frågade efter den (kör pwd
för att se
nuvarande mapp). Även relativa sökvägar kan ha flera delar,
t.ex. Documents/uppsats.pdf
refererar till den
Documents
-mappen som finns i nuvarande mapp.
Varje mapp har två speciella undermappar, vilka är '.
'
och '..
' (enkle och dubbel punkt). '.
' är
nuvarande mapp, '..
' är mappen ovanför en.
Så passwd
, ./passwd
, och undermapp/../passwd
refererar alla till samma fil.
Ibland skrivs en sökväg ut med ett snedstreck på slutet (/usr/lib/
).
Exakt innebörd beror per program, men som regel innebär det att man
bara vill referera till en mapp och inte en "vanlig" fil (mappar är
också filer).
Filrättigheter
Varje har en ägare och en grupp den tillhör. Utöver det har den rättighetsväxlar för läsning, skrivning, och exekevering för ägaren, gruppen samt allmänheten.ls -l
skriver ut en fil med all den här inforamtionen.
$ ls -l /bin/bash -rwxr-xr-x 1 root root 1113504 Jun 7 2019 /bin/bash |\ /\ /\ / | \ _/ \ _/ \__ __/ \__________/ \_______/ | V V V V V V V Filnamn | | | | Ägare | | Senast ändrad | | | | | Filstorlek | | | | Grupptilhörighet | | | +-- växlar för Övriga | | +-- växlar för Gruppen | +-- växlar för Ägaren +-- FiltypNotera att filrättigheterna i era hemkataloger på LiU:s system (SU-salssystemet) inte fungerar som förväntat. *Mummel* *mummel*, Windows.
- Hur byter man ägare på en fil?
- Hur gör man en fil körbar enbart för dess grupp? [markering tillagd 230918]
Textredigerare
Vad man använder för att redigera råtext spelar i slutändan väldigt liten roll. Det finns dock tre man bör ha lite koll på. Vim och Emacs för att de är absolut störst och mängder av program har bindningar vilka efterliknar dem. Nano för att det nästan alltid finns, och är lättanvänt.Nano
Kör som ett "grafiskt" programm i ens terminal. Ofta satt som default då den är ytterst lättanvänd. Se längst ner på skärmen hur man använder det.Vim
Vim bygger på modbaserad redigering, vilket innebär att man antingen är i redigeringsläget, där man kan flytta runt text, klippa, klistra med mera. Eller så är man i inmatningsläget, där man kan skriva text. (finns även ibland andra lägen). Absoluta grunderna man behöver veta är:- i för att gå in i inmatningsläget
- Esc för att återgå till redigeringsläget
- I redigeringsläget: h, j, k och l för att flytta sig höger, ner, up respektive vänster.
- I rl: :waq! För att spara spara alla ändringar och stänga vim
- I rl: :qa! För att slänga alla ändringar och stänga vim.
vimtutor
går igenom mer.
Emacs
- C-p och C-n för att gå uppåt och neråt (previous respektive next).
- C-x följt av C-c för att spara och stänga
Processer
Signaler & processer
ps aux
kill -signal pid
pkill program name
Jobbkontroll
Ens skal har rudimentära möjligheter för att köra flera program samtidigt.
Ett 'och-tecken', &
, efter ett kommando kör det kommandot i bakgrunden.
Jobb i bakgrunden kan listas med jobs
kommandot. Nuvarande jobb kan tillfällit stoppas med ^Z,
efter vilket det kan köras vidare i för- eller bakgrunden med kommandona fg
och bg
respektive.
Övrigt smått och gått
Multiplexing
Om man tycker det är jobbigt att koppla flera fjärrsessioner till sin VM, eller sitter direkt i terminalen (utan möjlighet att öppna fler fönster), men ändå vill köra flera processer samtidigt är en terminalmultiplexer är bra lösning. En sån är Tmux. Tmux låter en skapa flera "fönster" och flikar i en och samma terminal.Arkiv & komprimering
Att packa många filer i en arkiv-fil, samt att komprimera en fil ses ofta som samma operation, t.ex. med zip. Kutymen i UNIX-världen är istället att man är explicit med att det är två delar. Ofta hittar man.tar.gz
filer. Vilket då ska läsas som att det är en
.tar
fil, man har gzippat (komprimerat med
gzip
).
- Hur packar man upp en
.tar.gz
fil? - Hur packar man ner en mapp i en
.tar.xz
fil?
Miljövariabler
Miljövaribaler är globala variabler vilka tillhör en process, och ärvs av ens barnprocesser. Hur man kommer åt dem beror på språk. För att läsa samt sätta i Bash (Varje variabelreferens i Bash påbörjas med ett dollar-tecken, miljövariabler och "vanliga" variabler finns fritt blandade):echo $PATH export PATH=new-valuerespektive Python:
import os os.getenv("PATH") os.putenv("PATH", "new value")Några spännande miljövaribaler är:
- PATH
- Kolonsepparerad lista över vart körbara program letas efter. Tidigare element i listan kollas först, så ens egna mappar bör läggas till i början.
- LC_ALL
- Vilket språk program ska vara på
- Lägg till
/courses/TDDI41
i erPATH
, pröva körstart_single.sh
utan att ange sökväg. - Gör ändringen permanent
- Sätt LC_ALL till
sv_SE.utf-8
och öppna man(1). Vad händer?
Filhierarki
/
bin
Körbara filer som behövs vid bootboot
Saker som behövs vid bootdev
Device-filer. Access till hårdvaraetc
Konfigurationsfilerhome
Användares hemkatalogerlib
Bibliotek att länka sin kod mottmp
Temorära filer, tas oftast bort vid bootusr
Minikopia av roten, det mesta placeras här.bin
include
lib
local
share
var
Varierande datalib
Programs variabla datalog
Logfiler
För systemadministratörer
Exakt hur en dator bootar är krångligt, och dess helhet utelämnas ur den här kursen. Vi tar istället vid när Linux-kärnan startat. Ett operativsystems kärna är i sig ett program, inte allt för olikt vilket annat program som. Stora skillnaden är att operativsystemet har direkt tillgång till hårdvaran, vilket övriga program inte har utan måste gå genom operativsytemet.
Således kan kommandoradsparametrar ges, vilka i Linux (oftast) kan ses på ett körande system genom filen /proc/cmdline
. Filen kan t.ex. innehålla
BOOT_IMAGE=/boot/vmlinuz-4.15.0-117-genericLinux root=UUID=166b2172-c55c-410d-9f7b-dbc1e4f99db2Tidigare rootfilsystemet roRead Only by default
BOOT_IMAGE
's exakta funktion beror på bootloadern, men är
i regel ens kärna. root
är sedan vilken ens tidiga
root-filsystem är (det som kommer monteras in som /
). I
det här fallet anges ett UUID, vilket unikt pekar ut en disk.
ro
markerar att filsystemet ska monteras för enbart
läsning.
När kärnan väl kommit igång tar en användarymdsprocess över och agerar
init. Om inget annat anges kommer /sbin/init
användas,
vilket på många system är en symlänk till /lib/systemd/systemd
.
init=
flagga skickas till kärnan.
Om man vill kan man läsa mera i Linux-kärnans dokumentation. Dock är den ytterst grötig och teknisk. The Linux/X86 Boot Protocol, 1.7. The Kernel Commmand Line och framåt (kernel.org)
systemd
Till vardags behöver man nästan aldrig tänka på allt det ovan. Istället har man fokus på sitt init-system, vilket håller reda på att sätta igång allting. De flesta Linuxsystem kör numera systemd.
Bra ställen att börja läsa är systemds startsida, samt systemd(1). Om man vill ha mer bakgrund finns en bloggartikelt av skaparen Pottering själv.
- Hur får man en lista över alla systemd-enheter (units)?
- Hur startar man om sin ssh-server?
Andra initsystem
Utöver systemd finns ett antal andra system, där systemv är det klassiska. En lista finns på Wikipedia (Init).Systemloggar
Loggar om vart som händer skrivs till ett antal olika ställen. Systemd tillhandahåller systemloggar genom programmetjournalctl
. Många andra program skriver vanliga textloggar till filer i mappen /var/log
. Även andra ställen kan förekomma.
sshd
(ssh-serverns) logg, och visa
den posten där det står att ni loggade in.
Sidansvarig: Anders Fröberg
Senast uppdaterad: 2023-12-11