Debian Reference

                             Osamu Aoki

Copyright © 2013-2024 Osamu Aoki

    Denna Debian Reference (version 2.147) (2026-08-18 03:37:20 UTC)
    är avsedd att ge en bred överblick över Debian-systemet som en
    användarhandbok efter installationen. Det täcker många aspekter
    av systemadministration genom exempel på skalkommandon för
    icke-utvecklare.

Sammanfattning

Den här boken är fri; Du kan omfördela den och/eller modifiera den
enligt villkoren i GNU General Public License för alla versioner som
uppfyller Debians riktlinjer för fri programvara (DFSG).

---------------------------------------------------------------------

Innehållsförteckning

Förord
    1. Ansvarsfriskrivning
    2. Vad är Debian
    3. Om det här dokumentet
        3.1. Vägledande regler
        3.2. Förutsättningar
        3.3. Konventioner
        3.4. Popcon
        3.5. Förpackningens storlek
        3.6. Buggrapporter om detta dokument
    4. Påminnelser för nya användare
    5. Några citat för nya användare
1. GNU/Linux handledning
    1.1. Grunderna i konsolen
        1.1.1. Shell-prompten
        1.1.2. Shell-prompten under GUI
        1.1.3. Rotkontot
        1.1.4. Prompten för root-gränssnittet
        1.1.5. GUI-verktyg för systemadministration
        1.1.6. Virtuella konsoler
        1.1.7. Så här lämnar du kommandotolken
        1.1.8. Så här stänger du av systemet
        1.1.9. Återskapa en sund konsol
        1.1.10. Ytterligare paketförslag för nybörjaren
        1.1.11. Ett extra användarkonto
        1.1.12. sudo konfiguration
        1.1.13. Speltid
    1.2. Unix-liknande filsystem
        1.2.1. Grunderna för Unix-filer
        1.2.2. Internt i filsystemet
        1.2.3. Behörigheter i filsystemet
        1.2.4. Kontroll av behörigheter för nyskapade filer: umask
        1.2.5. Behörigheter för grupper av användare (group)
        1.2.6. Tidsstämplar
        1.2.7. Länkar
        1.2.8. Namngivna pipes (FIFO)
        1.2.9. Uttag
        1.2.10. Enhetsfiler
        1.2.11. Särskilda enhetsfiler
        1.2.12. procfs och sysfs
        1.2.13. tmpfs
    1.3. Midnight Commander (MC)
        1.3.1. Anpassning av MC
        1.3.2. Starta MC
        1.3.3. Filhanterare i MC
        1.3.4. Trix på kommandoraden i MC
        1.3.5. Den interna redaktören i MC
        1.3.6. Den interna tittaren i MC
        1.3.7. Funktioner för automatisk start av MC
        1.3.8. Virtuellt filsystem för MC
    1.4. Den grundläggande Unix-liknande arbetsmiljön
        1.4.1. Inloggningsskal
        1.4.2. Anpassa bash
        1.4.3. Särskilda tangenttryckningar
        1.4.4. Operationer med musen
        1.4.5. Personsökaren
        1.4.6. Textredigeraren
        1.4.7. Ange en standardtextredigerare
        1.4.8. Använda vim
        1.4.9. Registrering av skalets aktiviteter
        1.4.10. Grundläggande Unix-kommandon
    1.5. Det enkla shell-kommandot
        1.5.1. Kommandokörning och miljövariabler
        1.5.2. Variabeln "$LANG"
        1.5.3. Variabeln "$PATH"
        1.5.4. Variabeln "$HOME"
        1.5.5. Alternativ för kommandoraden
        1.5.6. Skal glob
        1.5.7. Returvärde för kommandot
        1.5.8. Typiska kommandosekvenser och omdirigering av skal
        1.5.9. Kommando alias
    1.6. Unix-liknande textbehandling
        1.6.1. Unix textverktyg
        1.6.2. Vanliga uttryck
        1.6.3. Ersättningsuttryck
        1.6.4. Global substitution med reguljära uttryck
        1.6.5. Extrahera data från textfilstabell
        1.6.6. Skriptavsnitt för piping-kommandon
2. Debians pakethantering
    2.1. Förutsättningar för Debians pakethantering
        2.1.1. Debians system för pakethantering
        2.1.2. Konfiguration av paket
        2.1.3. Grundläggande försiktighetsåtgärder
        2.1.4. Liv med eviga uppgraderingar
        2.1.5. Grunderna i Debian-arkivet
        2.1.6. Debian är 100% fri programvara
        2.1.7. Beroenden av paket
        2.1.8. Händelseflödet för pakethanteringen
        2.1.9. Första svaret på problem med pakethantering
        2.1.10. Hur man väljer Debian-paket
        2.1.11. Hur man hanterar motstridiga krav
    2.2. Grundläggande funktioner för pakethantering
        2.2.1. apt mot apt-get / apt-cache mot aptitude
        2.2.2. Grundläggande pakethanteringsoperationer med
        kommandoraden
        2.2.3. Interaktiv användning av begåvning
        2.2.4. Viktiga bindningar för lämplighet
        2.2.5. Paketera visningar under aptitude
        2.2.6. Sök metodalternativ med aptitude
        2.2.7. Formeln för regex för lämplighet
        2.2.8. Beroendeupplösning av lämplighet
        2.2.9. Loggar över paketaktiviteter
    2.3. Exempel på lämplighetsoperationer
        2.3.1. Söker intressanta paket
        2.3.2. Lista paket med regex-matchning på paketnamn
        2.3.3. Bläddra med regex-matchning
        2.3.4. Utrensning av borttagna paket för gott
        2.3.5. Städning av status för automatisk/manuell installation
        2.3.6. Systemomfattande uppgradering
    2.4. Avancerade åtgärder för pakethantering
        2.4.1. Avancerad pakethantering med kommandoraden
        2.4.2. Verifiering av installerade paketfiler
        2.4.3. Skydd för paketproblem
        2.4.4. Sökning på paketets metadata
    2.5. Interna funktioner för Debians pakethantering
        2.5.1. Metadata för arkiv
        2.5.2. "Release"-fil på högsta nivå och äkthet
        2.5.3. "Release"-filer på arkivnivå
        2.5.4. Hämtning av metadata för paketet
        2.5.5. Paketstatus för APT
        2.5.6. Paketstatus för aptitude
        2.5.7. Lokala kopior av de hämtade paketen
        2.5.8. Debian paket filnamn
        2.5.9. Kommandot dpkg
        2.5.10. Kommandot update-alternatives
        2.5.11. Kommandot dpkg-statoverride
        2.5.12. Kommandot dpkg-divert
    2.6. Återhämtning från ett trasigt system
        2.6.1. Inkompatibilitet med gammal användarkonfiguration
        2.6.2. Cachelagring av fel i paketdata
        2.6.3. Räddning med kommandot dpkg
        2.6.4. Misslyckad installation på grund av att beroenden
        saknas
        2.6.5. Olika paket med överlappande filer
        2.6.6. Åtgärdar trasigt paketskript
        2.6.7. Återställning av data för paketval
    2.7. Tips för pakethantering
        2.7.1. Vem laddade upp paketet?
        2.7.2. Begränsning av nedladdningsbandbredd för APT
        2.7.3. Automatisk nedladdning och uppgradering av paket
        2.7.4. Uppdateringar och baksidor
        2.7.5. Externa paketarkiv
        2.7.6. Paket från blandade arkivkällor utan apt-pinning
        2.7.7. Justera kandidatversionen med apt-pinning
        2.7.8. Blockeringspaket installerade av "Recommends"
        2.7.9. Spåra testing med vissa paket från unstable
        2.7.10. Spårning unstable med vissa paket från experimental
        2.7.11. Akut nedgradering
        2.7.12. Equivs-paketet
        2.7.13. Portering av ett paket till det stabila systemet
        2.7.14. Proxyserver för APT
        2.7.15. Mer läsning för pakethanteringen
3. Initialisering av systemet
    3.1. En översikt av boot strap-processen
        3.1.1. Steg 1: UEFI
        3.1.2. Steg 2: startladdaren
        3.1.3. Steg 3: mini-Debian-systemet
        3.1.4. Steg 4: det normala Debian-systemet
    3.2. Rescue system
        3.2.1. GRUB UEFI rescue system on USB
        3.2.2. Linux live rescue system on USB
        3.2.3. Linux live rescue system from GRUB
    3.3. Systemd
        3.3.1. Systemd startas
        3.3.2. Systemd-inloggning
    3.4. Kärnans meddelande
    3.5. Systemets meddelande
    3.6. Systemhantering
    3.7. Andra systemövervakare
    3.8. Systemkonfiguration
        3.8.1. Värdnamnet
        3.8.2. Filsystemet
        3.8.3. Initialisering av nätverksgränssnitt
        3.8.4. Initialisering av molnsystem
        3.8.5. Anpassningsexempel för att justera sshd-tjänsten
    3.9. Udev-systemet
    3.10. Initialisering av kärnmodulen
4. Autentisering och åtkomstkontroll
    4.1. Normal Unix-autentisering
    4.2. Hantering av konto- och lösenordsinformation
    4.3. Bra lösenord
    4.4. Skapa krypterat lösenord
    4.5. PAM och NSS
        4.5.1. Konfigurationsfiler som nås av PAM och NSS
        4.5.2. Den moderna centraliserade systemhanteringen
        4.5.3. "Varför GNU su inte stöder hjulgruppen"
        4.5.4. Strängare regler för lösenord
    4.6. Säkerhet vid autentisering
        4.6.1. Säkert lösenord på Internet
        4.6.2. Secure Shell
        4.6.3. Extra säkerhetsåtgärder för Internet
        4.6.4. Säkra lösenordet för root
    4.7. Andra åtkomstkontroller
        4.7.1. Listor för åtkomstkontroll (ACL)
        4.7.2. sudo
        4.7.3. PolicyKit
        4.7.4. Begränsning av åtkomst till vissa servertjänster
        4.7.5. Säkerhetsfunktioner i Linux
5. Nätverkskonfiguration
    5.1. Den grundläggande nätverksinfrastrukturen
        5.1.1. Upplösning av värdnamn
        5.1.2. Namnet på nätverksgränssnittet
        5.1.3. Nätverksadressområde för LAN
        5.1.4. Stöd för nätverksenhet
    5.2. Den moderna nätverkskonfigurationen för stationära datorer
        5.2.1. GUI-verktyg för nätverkskonfiguration
    5.3. Den moderna nätverkskonfigurationen utan GUI
    5.4. Den moderna nätverkskonfigurationen för moln
        5.4.1. Den moderna nätverkskonfigurationen för moln med DHCP
        5.4.2. Den moderna nätverkskonfigurationen för moln med
        statisk IP
        5.4.3. Den moderna nätverkskonfigurationen för molnet med
        Network Manager
    5.5. Nätverkskonfiguration på låg nivå
        5.5.1. Iproute2 kommandon
        5.5.2. Säker nätverksdrift på låg nivå
    5.6. Optimering av nätverk
        5.6.1. Hitta optimal MTU
        5.6.2. WAN TCP-optimering
    5.7. Netfilters infrastruktur
6. Nätverkstillämpningar
    6.1. Webbläsare
        6.1.1. Förfalskning av User-Agent-strängen
        6.1.2. Tillägg till webbläsare
    6.2. E-postsystemet
        6.2.1. Grunderna i e-post
        6.2.2. Begränsning av modern postservice
        6.2.3. Historisk förväntan på postservice
        6.2.4. Transportagent för post (MTA)
    6.3. Server och verktyg för fjärråtkomst (SSH)
        6.3.1. Grunderna i SSH
        6.3.2. Användarnamn på fjärrvärden
        6.3.3. Anslutning utan fjärrlösenord
        6.3.4. Hantering av främmande SSH-klienter
        6.3.5. Konfigurera ssh-agent
        6.3.6. Skicka ett e-postmeddelande från en fjärrvärd
        6.3.7. Portvidarebefordran för SMTP/POP3-tunnel
        6.3.8. Hur man stänger av fjärrsystemet på SSH
        6.3.9. Felsökning av SSH
    6.4. Skrivarserver och verktyg
    6.5. Andra nätverksapplikationsservrar
    6.6. Andra klienter för nätverksapplikationer
    6.7. Diagnos av systemets daemons
7. GUI-system
    7.1. GUI-skrivbordsmiljö
    7.2. GUI-kommunikationsprotokoll
    7.3. GUI-infrastruktur
    7.4. GUI-applikationer
    7.5. Användarkataloger
    7.6. Typsnitt
        7.6.1. Grundläggande teckensnitt
        7.6.2. Rasterisering av teckensnitt
    7.7. Sandlåda
    7.8. Fjärrskrivbord
    7.9. Anslutning till X-server
        7.9.1. Lokal anslutning till X-server
        7.9.2. Fjärranslutning till X-server
        7.9.3. X-server chroot-anslutning
    7.10. Urklipp
8. I18N och L10N
    8.1. Lokalen
        8.1.1. Motivering för UTF-8-lokal
        8.1.2. Omkonfigurering av lokal
        8.1.3. Kodning av filnamn
        8.1.4. Lokaliserade meddelanden och översatt dokumentation
        8.1.5. Effekter av lokal
    8.2. Inmatning med tangentbordet
        8.2.1. Tangentbordsinmatning för Linux-konsolen och X Window
        8.2.2. Tangentbordsinmatning för Wayland
        8.2.3. Stöd för inmatningsmetod med IBus
        8.2.4. The input method support with Fcitx
        8.2.5. Ett exempel för japanska
    8.3. Displayens utgång
        8.3.1. Terminalens konfiguration
        8.3.2. Östasiatiska tvetydiga tecken bredd tecken
9. Tips för systemet
    9.1. Tips för konsolen
        9.1.1. Spela in skalaktiviteterna på ett rent sätt
        9.1.2. Skärmprogrammet
        9.1.3. Navigera runt i kataloger
        9.1.4. Omslag för läslinje
        9.1.5. Skanna källkodsträdet
    9.2. Anpassa vim
        9.2.1. Anpassa vim med interna funktioner
        9.2.2. Anpassa vim med externa paket
    9.3. Registrering och presentation av data
        9.3.1. Loggdaemon
        9.3.2. Logganalysator
        9.3.3. Anpassad visning av textdata
        9.3.4. Anpassad visning av tid och datum
        9.3.5. Färgat skal eko
        9.3.6. Färgade kommandon
        9.3.7. Registrering av redaktörsaktiviteter för komplexa
        upprepningar
        9.3.8. Inspelning av grafikbilden för en X-applikation
        9.3.9. Registrering av ändringar i konfigurationsfiler
    9.4. Övervakning, kontroll och start av programaktiviteter
        9.4.1. Tidsinställning av en process
        9.4.2. Prioritet för schemaläggning
        9.4.3. Kommandot ps
        9.4.4. Det högsta kommandot
        9.4.5. Listning av filer som öppnats av en process
        9.4.6. Spårning av programaktiviteter
        9.4.7. Identifiering av processer som använder filer eller
        uttag
        9.4.8. Upprepa ett kommando med ett konstant intervall
        9.4.9. Upprepa ett kommando loopa över filer
        9.4.10. Starta ett program från GUI
        9.4.11. Anpassning av program som ska startas
        9.4.12. Döda en process
        9.4.13. Schemaläggning av uppgifter en gång
        9.4.14. Regelbunden schemaläggning av arbetsuppgifter
        9.4.15. Schemaläggning av uppgifter på evenemang
        9.4.16. Alt-SysRq-tangenten
    9.5. Tips för underhåll av systemet
        9.5.1. Vem är med i systemet?
        9.5.2. Varning för alla
        9.5.3. Identifiering av hårdvara
        9.5.4. Konfiguration av hårdvara
        9.5.5. System- och hårdvarutid
        9.5.6. Den sunda infrastrukturen
        9.5.7. Inaktivera skärmsläckaren
        9.5.8. Avaktivera ljudsignaler
        9.5.9. Använt minne
        9.5.10. Kontroll av systemsäkerhet och -integritet
    9.6. Tips om datalagring
        9.6.1. Användning av diskutrymme
        9.6.2. Konfiguration av diskpartitioner
        9.6.3. Åtkomst till partition med hjälp av UUID
        9.6.4. LVM2
        9.6.5. Konfiguration av filsystem
        9.6.6. Skapande av filsystem och kontroll av dess integritet
        9.6.7. Optimering av filsystem med hjälp av mount-alternativ
        9.6.8. Optimering av filsystemet via superblock
        9.6.9. Optimering av hårddisken
        9.6.10. Optimering av solid state-enhet
        9.6.11. Använda SMART för att förutsäga hårddiskfel
        9.6.12. Ange katalog för temporär lagring via $TMPDIR
        9.6.13. Utökning av användbart lagringsutrymme via LVM
        9.6.14. Utökning av användbart lagringsutrymme genom
        montering av ytterligare en partition
        9.6.15. Utökning av användbart lagringsutrymme genom
        bind-mounting av en annan katalog
        9.6.16. Utökning av användbart lagringsutrymme genom
        overlay-mounting av en annan katalog
        9.6.17. Utökning av användbart lagringsutrymme med hjälp av
        symlänk
    9.7. Diskavbildningen
        9.7.1. Skapa en diskavbildningsfil
        9.7.2. Skriva direkt till hårddisken
        9.7.3. Montering av diskavbildningsfilen
        9.7.4. Rengöring av en diskavbildningsfil
        9.7.5. Skapa en tom diskavbildningsfil
        9.7.6. Skapa ISO9660-bildfilen
        9.7.7. Skriva direkt till CD/DVD-R/RW
        9.7.8. Montering av ISO9660-bildfilen
    9.8. De binära uppgifterna
        9.8.1. Visa och redigera binära data
        9.8.2. Manipulera filer utan att montera disk
        9.8.3. Redundans av data
        9.8.4. Återställning av datafiler och kriminalteknisk analys
        9.8.5. Dela upp en stor fil i små filer
        9.8.6. Rensning av filinnehåll
        9.8.7. Dummy-filer
        9.8.8. Radering av en hel hårddisk
        9.8.9. Radera oanvänt område på en hårddisk
        9.8.10. Återskapa raderade men fortfarande öppna filer
        9.8.11. Söker alla hårda länkar
        9.8.12. Osynlig förbrukning av diskutrymme
    9.9. Tips om datakryptering
        9.9.1. Kryptering av flyttbara diskar med dm-crypt/LUKS
        9.9.2. Montering av krypterad disk med dm-crypt/LUKS
    9.10. Kärnan
        9.10.1. Kernel-parametrar
        9.10.2. Kernel-rubriker
        9.10.3. Kompilering av kärnan och relaterade moduler
        9.10.4. Kompilering av kärnkällan: Rekommendation från Debian
        Kernel Team
        9.10.5. Drivrutiner för hårdvara och firmware
    9.11. Virtualiserat system
        9.11.1. Virtualiserings- och emuleringsverktyg
        9.11.2. Arbetsflöde för virtualisering
        9.11.3. Montering av avbildningsfilen för den virtuella
        disken
        9.11.4. Chroot-system
        9.11.5. Flera skrivbordssystem
10. Datahantering
    10.1. Delning, kopiering och arkivering
        10.1.1. Verktyg för arkivering och komprimering
        10.1.2. Verktyg för kopiering och synkronisering
        10.1.3. Idiom för arkivet
        10.1.4. Idiom för kopian
        10.1.5. Idiom för urval av filer
        10.1.6. Arkivmedia
        10.1.7. Flyttbar lagringsenhet
        10.1.8. Val av filsystem för delning av data
        10.1.9. Delning av data via nätverk
    10.2. Backup och återställning
        10.2.1. Policy för säkerhetskopiering och återställning
        10.2.2. Verktygssviter för säkerhetskopiering
        10.2.3. Tips för säkerhetskopiering
    10.3. Infrastruktur för datasäkerhet
        10.3.1. Nyckelhantering för GnuPG
        10.3.2. Använda GnuPG på filer
        10.3.3. Använda GnuPG med Mutt
        10.3.4. Använda GnuPG med Vim
        10.3.5. MD5-summan
        10.3.6. Nyckelring för lösenord
    10.4. Verktyg för sammanfogning av källkod
        10.4.1. Extrahera skillnader för källfiler
        10.4.2. Sammanslagning av uppdateringar för källfiler
        10.4.3. Interaktiv sammanslagning
    10.5. Git
        10.5.1. Konfiguration av Git-klient
        10.5.2. Grundläggande Git-kommandon
        10.5.3. Git-tips
        10.5.4. Git-referenser
        10.5.5. Andra system för versionshantering
11. Konvertering av data
    11.1. Verktyg för konvertering av textdata
        11.1.1. Konvertera en textfil med iconv
        11.1.2. Kontrollerar att filen är UTF-8 med iconv
        11.1.3. Konvertera filnamn med iconv
        11.1.4. EOL-konvertering
        11.1.5. TAB-konvertering
        11.1.6. Redaktörer med automatisk konvertering
        11.1.7. Extrahering av vanlig text
        11.1.8. Markera och formatera data i klartext
    11.2. XML-data
        11.2.1. Grundläggande tips för XML
        11.2.2. XML-bearbetning
        11.2.3. Extrahering av XML-data
        11.2.4. XML-data lint
    11.3. Inställning av typ
        11.3.1. roff sättning
        11.3.2. TeX/LaTeX
        11.3.3. Skriv ut en manuell sida
        11.3.4. Skapa en manuell sida
    11.4. Utskrivbara data
        11.4.1. Ghostscript
        11.4.2. Slå samman två PS- eller PDF-filer
        11.4.3. Verktyg för utskrivbara data
        11.4.4. Skriva ut med CUPS
    11.5. Konvertering av postdata
        11.5.1. Grunderna för e-postdata
    11.6. Grafiska dataverktyg
        11.6.1. Grafiska dataverktyg (metapaket)
        11.6.2. Grafiska dataverktyg (GUI)
        11.6.3. Grafiska dataverktyg (CLI)
    11.7. Diverse datakonvertering
12. Programmering
    12.1. Shell-skriptet
        12.1.1. POSIX shell-kompatibilitet
        12.1.2. Parametrar för skal
        12.1.3. Villkor för skal
        12.1.4. Öglor i skalet
        12.1.5. Shell-miljövariabler
        12.1.6. Bearbetningssekvensen för kommandoraden i Shell
        12.1.7. Verktygsprogram för shell-skript
    12.2. Skriptning i tolkade språk
        12.2.1. Felsökning av tolkade språkkoder
        12.2.2. GUI-program med shell-skript
        12.2.3. Anpassade åtgärder för GUI-fil
        12.2.4. Perl kortskript galenskap
    12.3. Kodning i kompilerade språk
        12.3.1. C
        12.3.2. Enkelt C-program (gcc)
        12.3.3. Flex - en bättre Lex
        12.3.4. Bison - en bättre Yacc
    12.4. Verktyg för statisk kodanalys
    12.5. Debugg
        12.5.1. Grundläggande gdb-körning
        12.5.2. Felsökning av Debian-paketet
        12.5.3. Hämta bakspårning
        12.5.4. Avancerade gdb-kommandon
        12.5.5. Kontrollera beroendet av bibliotek
        12.5.6. Dynamiska verktyg för samtalsspårning
        12.5.7. Felsökning av X-fel
        12.5.8. Verktyg för detektering av minnesläckor
        12.5.9. Demontera binär
    12.6. Bygg verktyg
        12.6.1. Märke
        12.6.2. Autotools
        12.6.3. Meson
    12.7. Webb
    12.8. Översättning av källkoden
    12.9. Skapa Debian-paket
A. Appendix
    A.1. Debians labyrint
    A.2. Upphovsrättshistoria
    A.3. Dokumentets format

Tabellförteckning

1.1. Lista över intressanta programpaket i textläge
1.2. Förteckning över informativa dokumentationspaket
1.3. Lista över användning av nyckelkataloger
1.4. Lista över det första tecknet i "ls -l"-utdata
1.5. Det numeriska läget för filbehörigheter i chmod(1)-kommandon
1.6. Exempel på umask-värde
1.7. Lista över viktiga systemtillgängliga grupper för filåtkomst
1.8. Lista över anmärkningsvärda systemlevererade grupper för
särskilda kommandoexekveringar
1.9. Lista över olika typer av tidsstämplar
1.10. Lista över speciella enhetsfiler
1.11. De viktigaste bindningarna för MC
1.12. Reaktionen på enter-tangenten i MC
1.13. Lista över skalprogram
1.14. Lista över tangentbindningar för bash
1.15. Lista över musoperationer och relaterade nyckelåtgärder på
Debian
1.16. Lista över grundläggande tangenttryckningar i Vim
1.17. Lista över grundläggande Unix-kommandon
1.18. De 3 delarna av locale-värdet
1.19. Lista över lokala rekommendationer
1.20. Lista över "$HOME"-värden
1.21. Mönster för skalglob
1.22. Kommandots utgångskoder
1.23. Idiom för Shell-kommandon
1.24. Fördefinierade filbeskrivare
1.25. Metatecken för BRE och ERE
1.26. Ersättningsuttrycket
1.27. Lista över skriptutdrag för piping-kommandon
2.1. Lista över Debians verktyg för pakethantering
2.2. Lista över Debians arkivplatser
2.3. Lista över Debians arkivområde
2.4. Förhållandet mellan svit och kodnamn
2.5. Lista över viktiga webbplatser för att lösa problem med ett
specifikt paket
2.6. Grundläggande pakethantering med kommandoraden med apt(8),
aptitude(8) och apt-get(8) /apt-cache(8)
2.7. Anmärkningsvärda kommandoalternativ för aptitude(8)
2.8. Lista över nyckelbindningar för aptitude
2.9. Lista över vyer för lämplighet
2.10. Kategoriseringen av standardpaketets vyer
2.11. Lista över regexformeln för lämplighet
2.12. Loggfiler för paketaktiviteter
2.13. Lista över avancerade åtgärder för pakethantering
2.14. Innehållet i Debian-arkivets metadata
2.15. Namnstrukturen för Debian-paket
2.16. De användbara tecknen för varje komponent i Debian-paketets
namn
2.17. De anmärkningsvärda filer som skapats av dpkg
2.18. Lista över anmärkningsvärda Pin-Priority-värden för 
apt-pinning-teknik.
2.19. Lista över proxyverktyg speciellt för Debian-arkiv
3.1. Lista över startladdare
3.2. Betydelsen av menyalternativet i ovanstående del av /boot/grub/
grub.cfg
3.3. Lista över uppstartsverktyg för Debian-systemet
3.4. Lista över felnivåer i kärnan
3.5. Lista över typiska journalctl-kommandoutdrag
3.6. Lista över typiska kommandoutdrag för systemctl
3.7. Lista över andra kommandosnuttar för övervakning under systemd
4.1. 3 viktiga konfigurationsfiler för pam_unix(8)
4.2. Den andra postens innehåll i "/etc/passwd"
4.3. Lista över kommandon för att hantera kontoinformation
4.4. Lista över verktyg för att generera lösenord
4.5. Lista över anmärkningsvärda PAM- och NSS-system
4.6. Lista över konfigurationsfiler som PAM och NSS har åtkomst till
4.7. Lista över osäkra och säkra tjänster och portar
4.8. Lista över verktyg för extra säkerhetsåtgärder
5.1. Lista över verktyg för nätverkskonfiguration
5.2. Lista över adressintervall för nätverk
5.3. Översättningstabell från föråldrade net-tools-kommandon till nya
iproute2-kommandon
5.4. Lista över nätverkskommandon på låg nivå
5.5. Lista över verktyg för nätverksoptimering
5.6. Grundläggande riktlinjer för det optimala MTU-värdet
5.7. Lista över brandväggsverktyg
6.1. Lista över webbläsare
6.2. Lista över användaragenter för e-post (MUA)
6.3. Lista över relaterade paket för transportagent för grundläggande
post
6.4. Lista över viktiga sidor i postfix-manualen
6.5. Lista över konfigurationsfiler relaterade till e-postadresser
6.6. Lista över grundläggande MTA-funktioner
6.7. Lista över server och verktyg för fjärråtkomst
6.8. Lista över SSH-konfigurationsfiler
6.9. Lista över exempel på uppstart av SSH-klient
6.10. Lista över gratis SSH-klienter för andra plattformar
6.11. Lista över skrivarservrar och verktyg
6.12. Lista över andra nätverksapplikationsservrar
6.13. Lista över klienter för nätverksapplikationer
6.14. Lista över populära RFC:er
7.1. Lista över skrivbordsmiljöer
7.2. Lista över anmärkningsvärda GUI-infrastrukturpaket
7.3. Lista över anmärkningsvärda GUI-applikationer
7.4. Lista över anmärkningsvärda TrueType- och OpenType-teckensnitt
7.5. Lista över viktiga teckensnittsmiljöer och relaterade paket
7.6. Lista över viktiga sandlådemiljöer och relaterade paket
7.7. Lista över anmärkningsvärda fjärråtkomstservrar
7.8. Lista över anslutningsmetoder till X-servern
7.9. Lista över program relaterade till manipulering av tecken
urklipp
8.1. List of IBus and its plugin packages
8.2. List of Fcitx5 and its plugin packages
9.1. Lista över program för att stödja konsolaktiviteter
9.2. Lista över tangentbindningar för skärm
9.3. Information om initialiseringen av vim
9.4. Lista över systemlogganalysatorer
9.5. Visa exempel på tid och datum för kommandot "ls -l" med värdet
för tidstyp
9.6. Lista över grafiska bildmanipuleringsverktyg
9.7. Lista över paket som kan registrera konfigurationshistorik
9.8. Förteckning över verktyg för övervakning och kontroll av
programaktiviteter
9.9. Lista med bra värden för schemaläggningsprioritet
9.10. Lista över stilar för kommandot ps
9.11. Lista över ofta använda signaler för kill-kommando
9.12. Lista över anmärkningsvärda SAK-kommandotangenter
9.13. Lista över verktyg för identifiering av hårdvara
9.14. Lista över verktyg för hårdvarukonfiguration
9.15. Lista över ljudpaket
9.16. Lista över kommandon för att inaktivera skärmsläckaren
9.17. Lista över rapporterade minnesstorlekar
9.18. Förteckning över verktyg för kontroll av systemsäkerhet och
systemintegritet
9.19. Lista över paket för hantering av diskpartitioner
9.20. Lista över paket för hantering av filsystem
9.21. Lista över paket som visar och redigerar binära data
9.22. Lista över paket för att manipulera filer utan att montera disk
9.23. Lista över verktyg för att lägga till dataredundans i filer
9.24. Lista över paket för återställning av datafiler och
kriminalteknisk analys
9.25. Lista över verktyg för datakryptering
9.26. Lista över viktiga paket som ska installeras för omkompilering
av kärnan på Debian-systemet
9.27. Lista över virtualiseringsverktyg
10.1. Lista över arkiv- och komprimeringsverktyg
10.2. Lista över kopierings- och synkroniseringsverktyg
10.3. Lista över filsystemval för flyttbara lagringsenheter med
typiska användningsscenarier
10.4. Lista över de nätverkstjänster som ska väljas med det typiska
användningsscenariot
10.5. Lista över verktyg för säkerhetskopiering
10.6. Lista över infrastrukturverktyg för datasäkerhet
10.7. Lista över GNU Privacy Guard-kommandon för nyckelhantering
10.8. Förteckning över innebörden av förtroendekoden
10.9. Lista över GNU Privacy Guard-kommandon på filer
10.10. Lista över verktyg för sammanfogning av källkod
10.11. Lista över git-relaterade paket och kommandon
10.12. Huvudsakliga Git-kommandon
10.13. Git-tips
10.14. Lista över andra verktyg för versionskontrollsystem
11.1. Lista över verktyg för konvertering av textdata
11.2. Lista över kodningsvärden och deras användning
11.3. Lista över EOL-stilar för olika plattformar
11.4. Lista över TAB-konverteringskommandon från paketen bsdmainutils
och coreutils
11.5. Lista över verktyg för att extrahera data i klartext
11.6. Lista över verktyg för att markera data i klartext
11.7. Lista över fördefinierade enheter för XML
11.8. Lista över XML-verktyg
11.9. Lista över DSSSL-verktyg
11.10. Lista över verktyg för extrahering av XML-data
11.11. Lista över XML Pretty Print-verktyg
11.12. Lista över typinställningsverktyg
11.13. Lista över paket som hjälper till att skapa manpage
11.14. Lista över Ghostscript PostScript-tolkar
11.15. Lista över utskrivbara dataprogram
11.16. Lista över paket som hjälper till med konvertering av
e-postdata
11.17. Lista över verktyg för grafikdata (metapaket)
11.18. Lista över verktyg för grafikdata (GUI)
11.19. Lista över verktyg för grafikdata (CLI)
11.20. Lista över diverse verktyg för datakonvertering
12.1. Lista över typiska bashismer
12.2. Lista över skalparametrar
12.3. Lista över expansioner av skalparametrar
12.4. Lista över ersättningar för viktiga skalparametrar
12.5. Lista över operatorer för filjämförelse i det villkorliga
uttrycket
12.6. Lista över operatorer för strängjämförelse i det villkorliga
uttrycket
12.7. Lista över paket som innehåller små verktygsprogram för
skalskript
12.8. Lista över tolkrelaterade paket
12.9. Lista över dialogprogram
12.10. Lista över kompilatorrelaterade paket
12.11. Lista över Yacc-kompatibla LALR-parser-generatorer
12.12. Lista över verktyg för statisk kodanalys
12.13. Lista över felsökningspaket
12.14. Lista över avancerade gdb-kommandon
12.15. Lista över verktyg för detektering av minnesläckage
12.16. Lista över byggverktygspaket
12.17. Lista över make automatic-variabler
12.18. Lista över utvidgningar av märkesvariabler
12.19. Lista över verktyg för översättning av källkod

Förord

Innehållsförteckning

1. Ansvarsfriskrivning
2. Vad är Debian
3. Om det här dokumentet
    3.1. Vägledande regler
    3.2. Förutsättningar
    3.3. Konventioner
    3.4. Popcon
    3.5. Förpackningens storlek
    3.6. Buggrapporter om detta dokument
4. Påminnelser för nya användare
5. Några citat för nya användare

Denna Debian Reference (version 2.147) (2026-08-18 03:37:20 UTC) är
avsedd att ge en bred överblick över Debian-systemadministrationen
som en användarhandbok efter installationen.

Målläsaren är någon som är villig att lära sig skalskript men som
inte är redo att läsa alla C-källor för att ta reda på hur GNU/
Linux-system fungerar.

För installationsinstruktioner, se:

  * Debian GNU/Linux installationsguide för nuvarande stabila system

  * Debian GNU/Linux installationsguide för nuvarande testsystem

1. Ansvarsfriskrivning

    Alla garantier friskrivs. Alla varumärken tillhör respektive
    varumärkesägare.

    Debiansystemet i sig är ett rörligt mål. Detta gör det svårt att
    hålla dokumentationen aktuell och korrekt. Även om den aktuella
    testing av Debian-systemet användes som grund för att skriva
    detta, kan en del innehåll redan vara föråldrat när du läser det
    här.

    Vänligen behandla detta dokument som den sekundära referensen.
    Detta dokument ersätter inga auktoritativa guider. Författaren
    och bidragsgivarna tar inte ansvar för konsekvenserna av fel,
    utelämnanden eller oklarheter i detta dokument.

2. Vad är Debian

    Debian-projektet är en sammanslutning av individer som har gjort
    gemensam sak att skapa ett fritt operativsystem. Distributionen
    kännetecknas av följande.

      * Åtagande till mjukvarufriheten: Debians sociala kontrakt och
        riktlinjer för Debian Free Software (DFSG)

      * Internetbaserad distribuerad obetald volontärinsats: https://
        www.debian.org

      * Stort antal förkompilerade programvarupaket av hög kvalitet
   
      * Fokus på stabilitet och säkerhet med enkel åtkomst till
        säkerhetsuppdateringarna

      * Fokus på smidig uppgradering till de senaste
        programvarupaketen i testarkiven

      * Stort antal maskinvaruarkitekturer som stöds

    Fri programvara i Debian kommer från GNU, Linux, BSD, X, ISC,
    Apache, Ghostscript, Common Unix Printing System , Samba, GNOME,
    KDE, Mozilla, LibreOffice, Vim, TeX, LaTeX, DocBook, Perl,
    Python, Tcl, Java, Ruby, PHP, Berkeley DB, MariaDB, PostgreSQL,
    SQLite, Exim, Postfix, Mutt, FreeBSD, OpenBSD, Plan 9 och många
    fler oberoende fri programvaruprojekt. Debian integrerar denna
    mångfald av fri programvara i ett system.

3. Om det här dokumentet

3.1. Vägledande regler

    Följande vägledande regler följs vid sammanställning av detta
    dokument.

      * Ge översikt och hoppa över hörnfall. (Stor bild)

      * Håll det kort och enkelt. (KISS)

      * Uppfinn inte hjulet på nytt. (Använd pekare till befintliga
        referenser)

      * Fokusera på icke-GUI-verktyg och-konsoler. (Använd 
        skalexempel)

      * Vara objektiva. (Använd popcon m.m.)

    Tips
   
    Jag försökte belysa hierarkiska aspekter och lägre nivåer i
    systemet.

3.2. Förutsättningar

    Varning

    Du förväntas göra goda ansträngningar för att söka svar själv
    bortom denna dokumentation. Detta dokument ger bara effektiva
    utgångspunkter.

    Du måste söka lösning själv från primära källor.

      * Debians webbplats på https://www.debian.org för allmän
        information

      * Dokumentationen i katalogen "/usr/share/doc/package_name"

      * En manpage i Unix-stil: "dpkg -L paketnamn |grep '/man/man.*/
        '"

      * Informationssidan för GNU-stil: "dpkg -L paketnamn |grep '/
        info/'"

      * Felrapporten: https://bugs.debian.org/package_name
   
      * Debians wiki på https://wiki.debian.org/ för rörliga och
        specifika ämnen

      * Den enda UNIX-specifikationen från Open Groups hemsida för
        UNIX-systemet

      * Den fria encyklopedin från Wikipedia på https://
        www.wikipedia.org/

      * Debians Administratörshandbok

      * HOWTO:s från The Linux Documentation Project (TLDP)

    Notera
   
    Om du vill ha detaljerad dokumentation kan du behöva installera
    motsvarande dokumentationspaket som har "-doc" som suffix.

3.3. Konventioner

    Detta dokument ger information genom följande förenklade
    presentationsstil med exempel på bash(1)-skalkommandon.

    # command-in-root-account
    $ command-in-user-account

    Dessa skalmeddelanden skiljer på vilket konto som används och
    motsvarar inställda miljövariabler som: "PS1='\$'" och "PS2=' '".
    Dessa värden har valts för att göra det här dokumentet mer
    lättläst och är inte typiska för ett faktiskt installerat system.

    Alla kommandoexempel körs under den engelska språkdräkten "LANG=
    en_US.UTF8". Förvänta dig inte att platshållarsträngar som 
    kommando-in-root-konto och kommando-in-användarkonto ska
    översättas i kommandoexempel. Detta är ett avsiktligt val för att
    alla översatta exempel ska vara uppdaterade.

    Notera
   
    Se betydelsen av miljövariablerna "$PS1" och "$PS2" i bash(1).

    Den åtgärd som krävs av systemadministratören skrivs i den
    tvingande meningen, t.ex. "Tryck på Enter-tangenten efter att ha
    skrivit varje kommandosträng till skalet."

    Kolumnen "Description" och liknande kolumner i tabellen kan
    innehålla en substantivfras som följer paketets konvention för
    kort beskrivning och som utelämnar ledande artiklar som "a" och
    "the". De kan alternativt innehålla en infinitivfras som en 
    substantivfras utan inledande "to" enligt konventionen för kort
    kommandobeskrivning i manpages. Det här kan se konstigt ut för
    vissa, men är mina avsiktliga val av stil för att hålla
    dokumentationen så enkel som möjligt. Dessa substantivfraser
    börjar inte med stor bokstav och slutar inte heller med punkt
    enligt denna konvention för korta beskrivningar.

    Notera
   
    Rätt substantiv, inklusive kommandonamn, behåller sin fråga
    oavsett var de befinner sig.

    En kommandosnutt som citeras i ett textavsnitt refereras med
    skrivmaskinstypsnittet mellan dubbla citattecken, t.ex. "aptitude
    safe-upgrade".

    En textuppgift från en konfigurationsfil som citeras i ett
    textavsnitt refereras med skrivmaskinstypsnitt mellan dubbla
    citattecken, t.ex. "deb-src".

    Ett kommando refereras till med sitt namn i skrivmaskinstypsnitt,
    eventuellt följt av manpage-avsnittsnumret inom parentes, t.ex.
    bash(1). Du uppmuntras att skaffa information genom att skriva
    följande.

    $ man 1 bash

    En manpage refereras till med sitt namn i skrivmaskinsfonten
    följt av manpage-avsnittsnumret inom parentes, t.ex. sources.list
    (5). Du uppmuntras att skaffa information genom att skriva
    följande.

    $ man 5 sources.list

    En informationssida refereras till av dess kommandosnutt i
    skrivmaskinstypsnittet mellan dubbla citattecken, t.ex. "info
    make". Du uppmanas att skaffa information genom att skriva
    följande.

    $ info make

    Ett filnamn anges med skrivmaskinstypsnittet mellan dubbla
    citattecken, t.ex. "/etc/passwd". För konfigurationsfiler
    uppmanas du att hämta information genom att skriva följande.

    $ sensible-pager "/etc/passwd"

    Ett katalognamn anges med skrivmaskinsfonten mellan dubbla
    citattecken, t.ex. "/etc/apt/". Du uppmanas att utforska dess
    innehåll genom att skriva följande.

    $ mc "/etc/apt/"

    Ett paketnamn refereras till genom dess namn i
    skrivmaskinstypsnittet, till exempel vim. Du uppmanas att skaffa
    information genom att skriva följande.

    $ dpkg -L vim
    $ apt-cache show vim
    $ aptitude show vim

    En dokumentation kan ange sin plats genom filnamnet i
    skrivmaskinstypsnitt mellan dubbla citattecken, t.ex. "/usr/share
    /doc/base-passwd/users-and-groups.txt.gz" och "/usr/share/doc/
    base-passwd/users-and-groups.html"; eller genom dess URL, t.ex.
    https://www.debian.org. Du uppmuntras att läsa dokumentationen
    genom att skriva följande.

    $ zcat "/usr/share/doc/base-passwd/users-and-groups.txt.gz" | sensible-pager
    $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html"
    $ sensible-browser "https://www.debian.org"

    En miljövariabel refereras till genom sitt namn med inledande "$"
    i skrivmaskinstypsnitt mellan dubbla citattecken, t.ex. "$TERM".
    Du uppmanas att ta reda på dess aktuella värde genom att skriva
    följande.

    $ echo "$TERM"

3.4. Popcon

    Data i popcon presenteras som det objektiva måttet på varje
    pakets popularitet. Den hämtades på 2026-08-16 07:24:01 UTC och
    innehåller den totala inlämningen av 282116 rapporter över 221471
    binära paket och 27 arkitekturer.

    Notera

    Observera att det amd64-arkivet för unstable för närvarande
    endast innehåller paketen 78093. Popcon-data innehåller rapporter
    från många gamla systeminstallationer.

    Popcon-numret föregånget av "V:" för "votes" beräknas genom "1000
    * (popcon-insändningarna för det paket som nyligen utförts på PC)
    /(de totala popcon-insändningarna)".

    Popcon-numret som föregås av "I:" för "installs" beräknas med
    "1000 * (popcon-insändningarna för det paket som installerats på
    datorn)/(de totala popcon-insändningarna)".

    Notera

    Popcon-siffrorna ska inte ses som absoluta mått på paketens
    betydelse. Det finns många faktorer som kan snedvrida
    statistiken. Till exempel kan vissa system som deltar i popcon ha
    monterat kataloger som "/usr/bin" med alternativet "noatime" för
    att förbättra systemets prestanda och därmed effektivt
    inaktiverat "vote" från sådana system.

3.5. Förpackningens storlek

    Uppgifterna om paketstorlek presenteras också som ett objektivt
    mått för varje paket. Det är baserat på "Installed-Size:" som
    rapporteras av kommandot "apt-cache show" eller "aptitude show"
    (för närvarande på amd64 arkitektur för den unstable utgåvan).
    Den rapporterade storleken är i KiB(Kibibyte = enhet för 1024
    byte).

    Notera

    Ett paket med en liten numerisk paketstorlek kan tyda på att
    paketet i den unstable utgåvan är ett dummy-paket som installerar
    andra paket med betydande innehåll genom beroendet. Dummy-paketet
    möjliggör en smidig övergång eller uppdelning av paketet.

    Notera

    En paketstorlek följd av "(*)" anger att paketet i den unstable
    utgåvan saknas och att paketstorleken för den experimentella
    utgåvan används i stället.

3.6. Buggrapporter om detta dokument

    Skicka felrapporter till paketet debian-reference med reportbug
    (1) om du hittar några problem i detta dokument. Inkludera
    korrigeringsförslag genom att "diff -u" till klartextversionen
    eller till källan.

4. Påminnelser för nya användare

    Här är några påminnelser för nya användare:

      * Säkerhetskopiera dina data

          + Se Avsnitt 10.2, ”Backup och återställning”.

      * Säkra ditt lösenord och dina säkerhetsnycklar

      * KISS (keep it simple stupid)

          + Överkonstruera inte ditt system

      * Läs dina loggfiler

          + Det FÖRSTA felet är det som räknas

      * RTFM (läs den fina bruksanvisningen)
   
      * Sök på Internet innan du ställer frågor

      * Var inte rotlös när du inte behöver vara det

      * Bråka inte med pakethanteringssystemet

      * Skriv inte något som du inte förstår

      * Ändra inte filbehörigheterna (innan en fullständig
        säkerhetsgranskning har genomförts)

      * Lämna inte ditt root-skal förrän du har TESTAT dina ändringar

      * Always have an alternative boot media (USB flash drive,
        CD-ROM, …)

5. Några citat för nya användare

    Här är några intressanta citat från Debians sändlista som kan
    hjälpa till att upplysa nya användare.

      * "Det här är Unix. Det ger dig tillräckligt med rep för att
        hänga dig själv." --- Miquel van Smoorenburg <miquels at
        cistron.nl>
   
      * "Unix ÄR användarvänligt ... Det är bara selektivt när det
        gäller vilka dess vänner är." --- Tollef Fog Heen <tollef at
        add.no>

    Wikipedia har artikeln"Unix philosophy" som listar intressanta
    citat.

Kapitel 1. GNU/Linux handledning

    Jag tycker att lära sig ett datorsystem är som att lära sig ett
    nytt främmande språk. Även om handledningsböcker och
    dokumentation är till stor hjälp, måste du öva själv. För att
    hjälpa dig att komma igång på ett smidigt sätt tar jag upp några
    grundläggande punkter.

    Den kraftfulla utformningen av Debian GNU/Linux kommer från
    operativsystemet Unix, dvs. ett operativsystem för flera
    användare och flera arbetsuppgifter. Du måste lära dig att dra
    nytta av kraften i dessa funktioner och likheter mellan Unix och
    GNU/Linux.

    Var inte rädd för Unix-orienterade texter och förlita dig inte
    enbart på GNU/Linux-texter, eftersom du då går miste om mycket
    användbar information.

    Notera

    Om du har använt något Unix-liknande system ett tag med
    kommandoradsverktyg känner du förmodligen till allt jag förklarar
    här. Använd det här som en verklighetskontroll och uppfräschning.

1.1. Grunderna i konsolen

1.1.1. Shell-prompten

    När du startar systemet visas en teckenbaserad inloggningsskärm
    om du inte har installerat någon GUI-miljö som t.ex.
    skrivbordssystemet GNOME eller KDE. Anta att ditt värdnamn är
    foo, så ser inloggningsprompten ut på följande sätt.

    Om du har installerat en GUI-miljö kan du fortfarande komma till
    den teckenbaserade inloggningsprompten med Ctrl-Alt-F3, och du
    kan återgå till GUI-miljön med Ctrl-Alt-F2 (se Avsnitt 1.1.6,
    ”Virtuella konsoler” nedan för mer information).

    foo login:

    Vid inloggningsprompten skriver du ditt användarnamn, t.ex.
    pingvin, och trycker på Enter-tangenten, sedan skriver du ditt
    lösenord och trycker på Enter-tangenten igen.

    Notera

    Enligt Unix-traditionen är användarnamn och lösenord för
    Debian-systemet skiftlägeskänsliga. Användarnamnet väljs
    vanligtvis endast från gemener. Det första användarkontot skapas
    vanligtvis under installationen. Ytterligare användarkonton kan
    skapas med adduser(8) av root.

    Systemet startar med det hälsningsmeddelande som finns lagrat i "
    /etc/motd" (Message Of The Day) och visar en kommandotolk.

    Debian GNU/Linux 12 foo tty3

    foo login: penguin
    Password:

    Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64

    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.

    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.

    Last login: Wed Dec 20 09:39:00 JST 2023 on tty3
    foo:~$

    Nu befinner du dig i skalet. Skalet tolkar dina kommandon.

1.1.2. Shell-prompten under GUI

    Om du installerade en GUI-miljö under installationen visas den
    grafiska inloggningsskärmen när du startar systemet. Du skriver
    in ditt användarnamn och ditt lösenord för att logga in på det
    icke-privilegierade användarkontot. Använd fliken för att
    navigera mellan användarnamn och lösenord, eller använd musens
    primära klick.

    Du kan få skalprompten under GUI-miljö genom att starta ett
    x-terminal-emulatorprogram som gnome-terminal(1), rxvt(1) eller
    xterm(1). Under GNOME-skrivbordsmiljön trycker du på
    SUPER-tangenten (Windows-tangenten) och skriver in "terminal" i
    sökprompten.

    Under vissa andra skrivbordssystem (som fluxbox) kanske det inte
    finns någon uppenbar startpunkt för menyn. Om detta händer kan du
    prova att (höger)klicka på bakgrunden på skrivbordsskärmen och
    hoppas att en meny dyker upp.

1.1.3. Rotkontot

    Kontot root kallas även superuser eller privilegierad användare.
    Från det här kontot kan du utföra följande systemadministrativa
    uppgifter.

      * Läsa, skriva och ta bort alla filer på systemet oavsett deras
        filbehörigheter

      * Ange filägarskap och behörigheter för alla filer på systemet
   
      * Ange lösenordet för alla icke-privilegierade användare i
        systemet

      * Logga in på alla konton utan deras lösenord

    Den här obegränsade kraften i root-kontot kräver att du är
    hänsynsfull och ansvarsfull när du använder det.

    Varning
   
    Dela aldrig med dig av root-lösenordet till andra.

    Notera

    Filrättigheterna för en fil (inklusive maskinvaruenheter som
    CD-ROM etc. som bara är en annan fil för Debiansystemet) kan göra
    den oanvändbar eller otillgänglig för användare som inte är root.
    Även om användningen av root-kontot är ett snabbt sätt att testa
    den här typen av situation, bör den lösas genom korrekt
    inställning av filbehörigheter och användarens gruppmedlemskap
    (se Avsnitt 1.2.3, ”Behörigheter i filsystemet”).

1.1.4. Prompten för root-gränssnittet

    Här följer några grundläggande metoder för att få root
    shell-prompten genom att använda root-lösenordet.

      * Skriv root i den teckenbaserade inloggningsprompten.

      * Skriv "su -l" från valfri användarprompt.

          + Detta bevarar inte den aktuella användarens miljö.

      * Skriv "su" från vilken användarprompt som helst.

          + Detta bevarar en del av den aktuella användarens miljö.

1.1.5. GUI-verktyg för systemadministration

    Om skrivbordsmenyn inte startar GUI-verktyg för
    systemadministration automatiskt med rätt behörighet kan du
    starta dem från root shell-prompten i en terminalemulator, t.ex.
    gnome-terminal(1), rxvt(1) eller xterm(1). Se Avsnitt 1.1.4,
    ”Prompten för root-gränssnittet” och Avsnitt 7.9, ”Anslutning
    till X-server”.

    Varning

    Starta aldrig GUI-display/sessionshanteraren under root-kontot
    genom att skriva root i displayhanterarens prompt, t.ex. gdm3(1).

    Kör aldrig ett opålitligt GUI-program under X-fönstret när
    kritisk information visas, eftersom det kan avlyssna din X-skärm.

1.1.6. Virtuella konsoler

    I Debians standardsystem finns det sex omkopplingsbara
    VT100-liknande teckenkonsoler tillgängliga för att starta
    kommandoraden direkt på Linux-värden. Om du inte befinner dig i
    en GUI-miljö kan du växla mellan de virtuella konsolerna genom
    att trycka på vänster-Alt-tangenten och en av tangenterna F1 — F6
    samtidigt. Varje teckenkonsol tillåter oberoende inloggning till
    kontot och erbjuder fleranvändarmiljön. Den här
    fleranvändarmiljön är en fantastisk Unix-funktion och mycket
    beroendeframkallande.

    Om du befinner dig i GUI-miljön får du tillgång till
    teckenkonsolen 3 genom att trycka på Ctrl-Alt-F3, dvs. vänster
    Ctrl-tangent, vänster Alt-tangent och F3-tangenten trycks in
    samtidigt. Du kan komma tillbaka till GUI-miljön, som normalt
    körs på den virtuella konsolen 2, genom att trycka på Alt-F2.

    Alternativt kan du byta till en annan virtuell konsol, t.ex.
    konsol 3, från kommandoraden.

    # chvt 3

1.1.7. Så här lämnar du kommandotolken

    Du skriver Ctrl-D, dvs. vänster Ctrl-tangent och d-tangenten
    trycks ihop, vid kommandotolken för att stänga skalaktiviteten.
    Om du befinner dig på teckenkonsolen återgår du till
    inloggningsprompten med detta. Även om dessa kontrolltecken
    kallas "kontroll D" med versaler, behöver du inte trycka på
    Shift-tangenten. Kortkommandot ^D används också för Ctrl-D.
    Alternativt kan du skriva "exit".

    Om du befinner dig på x-terminal-emulator(1) kan du stänga
    x-terminal-emulatorfönstret med detta.

1.1.8. Så här stänger du av systemet

    Precis som alla andra moderna operativsystem där filoperationen
    innebär att data cachas i minnet för förbättrad prestanda,
    behöver Debiansystemet en korrekt avstängningsprocedur innan
    strömmen kan stängas av på ett säkert sätt. Detta för att
    bibehålla filernas integritet genom att tvinga alla ändringar i
    minnet att skrivas till disken. Om programvarans strömkontroll är
    tillgänglig, stänger avstängningsproceduren automatiskt av
    strömmen till systemet. (I annat fall kan du behöva trycka på
    strömbrytaren i några sekunder efter avstängningsproceduren)

    Du kan stänga av systemet i det normala fleranvändarläget från
    kommandoraden.

    # shutdown -h now

    Du kan stänga av systemet i enanvändarläge från kommandoraden.

    # poweroff -i -f

    Se Avsnitt 6.3.8, ”Hur man stänger av fjärrsystemet på SSH”.

1.1.9. Återskapa en sund konsol

    När skärmen går bärsärk efter att ha gjort några roliga saker som
    "cat some-binary-file", skriv "reset" i kommandotolken. Det är
    inte säkert att du ser kommandot ekas medan du skriver. Du kan
    också skriva "clear" för att städa upp på skärmen.

1.1.10. Ytterligare paketförslag för nybörjaren

    Även om även den minimala installationen av Debian-systemet utan
    några skrivbordsmiljöuppgifter ger de grundläggande
    Unix-funktionerna, är det en bra idé att installera några
    ytterligare kommandorads- och curses-baserade teckenterminalpaket
    som mc och vim med apt-get(8) för nybörjare för att komma igång
    med följande.

    # apt-get update
     ...
    # apt-get install mc vim sudo aptitude
     ...

    Om du redan har dessa paket installerade installeras inga nya
    paket.

    Tabell 1.1. Lista över intressanta programpaket i textläge

    +---------------------------------------------------------------+
    |  paket  |popcon|storlek|             beskrivning              |
    |---------+------+-------+--------------------------------------|
    |mc       |V:39, |1590   |En filhanterare i textläge med        |
    |         |I:179 |       |fullskärm                             |
    |---------+------+-------+--------------------------------------|
    |sudo     |V:756,|6774   |Ett program för att ge användare      |
    |         |I:867 |       |begränsade root-rättigheter           |
    |---------+------+-------+--------------------------------------|
    |         |V:81, |       |Unix textredigerare Vi IMproved, en   |
    |vim      |I:342 |4164   |textredigerare för programmerare      |
    |         |      |       |(standardversion)                     |
    |---------+------+-------+--------------------------------------|
    |         |V:57, |       |Unix textredigerare Vi IMproved, en   |
    |vim-tiny |I:979 |1867   |textredigerare för programmerare      |
    |         |      |       |(kompakt version)                     |
    |---------+------+-------+--------------------------------------|
    |emacs-nox|V:3,  |46564  |GNU-projektet Emacs, den Lisp-baserade|
    |         |I:12  |       |extensibla textredigeraren            |
    |---------+------+-------+--------------------------------------|
    |w3m      |V:10, |2853   |Webbläsare i textläge                 |
    |         |I:134 |       |                                      |
    |---------+------+-------+--------------------------------------|
    |gpm      |V:8.2,|524    |Klipp-och-klistra i Unix-stil på      |
    |         |I:9.1 |       |textkonsolen (daemon)                 |
    +---------------------------------------------------------------+


    Det kan vara en bra idé att läsa några informativa
    dokumentationer.

    Tabell 1.2. Förteckning över informativa dokumentationspaket

    +---------------------------------------------------------------+
    |       paket        |popcon|storlek|        beskrivning        |
    |--------------------+------+-------+---------------------------|
    |                    |      |       |Dokumentation för          |
    |doc-debian          |I:884 |185    |Debian-projektet, (Debian  |
    |                    |      |       |FAQ) och andra dokument    |
    |--------------------+------+-------+---------------------------|
    |debian-policy       |I:7.3 |5147   |Debians policyhandbok och  |
    |                    |      |       |relaterade dokument        |
    |--------------------+------+-------+---------------------------|
    |developers-reference|V:0.2,|2647   |Riktlinjer och information |
    |                    |I:2.4 |       |för Debian-utvecklare      |
    |--------------------+------+-------+---------------------------|
    |debmake-doc         |I:0.37|11803  |Guide för Debians          |
    |                    |      |       |underhållsansvariga        |
    |--------------------+------+-------+---------------------------|
    |debian-history      |I:0.56|6513   |Debian-projektets historia |
    |--------------------+------+-------+---------------------------|
    |debian-faq          |I:882 |791    |Debian FAQ                 |
    +---------------------------------------------------------------+


    Du kan installera några av dessa paket på följande sätt.

    # apt-get install package_name

1.1.11. Ett extra användarkonto

    Om du inte vill använda ditt huvudanvändarkonto för följande
    utbildningsaktiviteter kan du skapa ett utbildningsanvändarkonto,
    t.ex. fisk enligt följande.

    # adduser fish

    Svara på alla frågor.

    Detta skapar ett nytt konto med namnet fish. Efter din övning kan
    du ta bort detta användarkonto och dess hemkatalog genom att göra
    följande.

    # deluser --remove-home fish

    På icke-Debian-system och specialiserade Debian-system måste
    ovanstående aktiviteter i stället använda verktygen useradd(8)
    och userdel(8) på lägre nivå.

1.1.12. sudo konfiguration

    För den typiska arbetsstationen för en användare, t.ex.
    Debian-systemet på den bärbara datorn, är det vanligt att använda
    en enkel konfiguration av sudo(8) enligt följande för att låta en
    icke-privilegierad användare, t.ex. pingvinen, få administrativa
    rättigheter bara med sitt användarlösenord men utan
    root-lösenordet.

    # echo "penguin  ALL=(ALL) ALL" >> /etc/sudoers

    Alternativt är det också vanligt att göra på följande sätt för
    att låta en icke-privilegierad användare, t.ex. pingvinen, få
    administrativa rättigheter utan lösenord.

    # echo "penguin  ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

    Detta trick bör endast användas för den arbetsstation som du
    administrerar och där du är den enda användaren.

    Varning

    Skapa inte konton för vanliga användare på en arbetsstation med
    flera användare på det här sättet eftersom det skulle vara mycket
    dåligt för systemsäkerheten.

    Observera

    Lösenordet och kontot för pingvinen i exemplet ovan kräver lika
    mycket skydd som root-lösenordet och root-kontot.
   
    Administrationsbehörighet i det här sammanhanget tillhör någon
    som är behörig att utföra systemadministrationsuppgifter på
    arbetsstationen. Ge aldrig någon chef på företagets
    administrativa avdelning eller din chef sådana rättigheter om de
    inte är behöriga och kompetenta.

    Notera

    För att ge åtkomstbehörighet till begränsade enheter och
    begränsade filer bör du överväga att använda grupp för att ge
    begränsad åtkomst i stället för att använda root-behörighet via
    sudo(8).
   
    Med en mer genomtänkt och noggrann konfiguration kan sudo(8) ge
    begränsade administrativa behörigheter till andra användare på
    ett delat system utan att dela root-lösenordet. Detta kan hjälpa
    till med ansvarsskyldigheten för värdar med flera administratörer
    så att du kan se vem som gjorde vad. Å andra sidan kanske du inte
    vill att någon annan ska ha sådana privilegier.

1.1.13. Speltid

    Nu är du redo att leka med Debian-systemet utan risker så länge
    du använder det icke-privilegierade användarkontot.

    Detta beror på att Debian-systemet, även efter
    standardinstallationen, är konfigurerat med korrekta
    filbehörigheter som förhindrar icke-privilegierade användare från
    att skada systemet. Naturligtvis kan det fortfarande finnas några
    hål som kan utnyttjas, men de som oroar sig för dessa frågor bör
    inte läsa detta avsnitt utan bör läsa Securing Debian Manual.

    Vi lär oss Debian-systemet som ett Unix-liknande system med
    följande.

      * Avsnitt 1.2, ”Unix-liknande filsystem” (enkla koncept)

      * Avsnitt 1.3, ”Midnight Commander (MC)” (överlevnadsmetod)

      * Avsnitt 1.4, ”Den grundläggande Unix-liknande arbetsmiljön”
        (enkel metod)

      * Avsnitt 1.5, ”Det enkla shell-kommandot” (skalmekanism)

      * Avsnitt 1.6, ”Unix-liknande textbehandling” (metod för
        textbearbetning)

1.2. Unix-liknande filsystem

    I GNU/Linux och andra Unix-liknande operativsystem är filer
    organiserade i kataloger. Alla filer och kataloger är ordnade i
    ett stort träd med rot i "/". Det kallas ett träd eftersom
    filsystemet ser ut som ett träd om man ritar det, men det är upp
    och ner.

    Dessa filer och kataloger kan vara utspridda över flera enheter.
    mount(8) används för att koppla filsystemet som finns på en enhet
    till det stora filträdet. Omvänt kopplar umount(8) loss det igen.
    På de senaste Linux-kärnorna kan mount(8) med vissa alternativ
    binda en del av ett filträd någon annanstans eller montera
    filsystemet som delat, privat, slav eller obindbart. Vilka
    monteringsalternativ som stöds för varje filsystem finns i "/usr/
    share/doc/linux-doc-*/Documentation/filesystems/".

    Kataloger i Unix-system kallas mappar i vissa andra system.
    Observera också att det inte finns något begrepp för enhet som
    "A:" på något Unix-system. Det finns ett filsystem och allt är
    inkluderat. Detta är en enorm fördel jämfört med Windows.

1.2.1. Grunderna för Unix-filer

    Här följer några grunderna för Unix-filer.

      * Filnamn är skiftlägeskänsliga. Det vill säga "MYFILE" och
        "MyFile" är olika filer.

      * Rotkatalogen betyder roten till filsystemet och kallas helt
        enkelt "/". Förväxla inte detta med hemkatalogen för
        root-användaren: "/root".

      * Varje katalog har ett namn som kan innehålla alla bokstäver
        eller symboler utom "/". Rotkatalogen är ett undantag; dess
        namn är "/" (uttalas "slash" eller "rotkatalogen") och den
        kan inte döpas om.

      * Varje fil eller katalog betecknas med ett fullständigt
        kvalificerat filnamn, ett absolut filnamn eller en sökväg som
        anger den sekvens av kataloger som måste passeras för att nå
        den. De tre termerna är synonyma.

      * Alla fullständigt kvalificerade filnamn börjar med katalogen
        "/", och det finns ett "/" mellan varje katalog eller fil i
        filnamnet. Den första "/" är den översta katalogen, och de
        andra "/":erna separerar successiva underkataloger, tills vi
        når den sista posten som är namnet på den faktiska filen. De
        ord som används här kan vara förvirrande. Ta följande 
        fullständigt kvalificerade filnamn som exempel: "/usr/share/
        keytables/us.map.gz". Men människor hänvisar också till dess
        basnamn "us.map.gz" ensam som ett filnamn.

      * Rotkatalogen har ett antal förgreningar, t.ex. "/etc/" och "/
        usr/". Dessa underkataloger förgrenar sig i sin tur till ännu
        fler underkataloger, t.ex. "/etc/systemd/" och "/usr/local/".
        Allt detta sammantaget kallas katalogträdet. Du kan tänka på
        ett absolut filnamn som en väg från trädets bas ( "/") till
        slutet av någon gren (en fil). Du hör också folk prata om
        katalogträdet som om det vore ett släktträd som omfattar alla
        direkta ättlingar till en enda figur som kallas rotkatalogen
        ( "/"): underkataloger har alltså föräldrar, och en sökväg
        visar en fils fullständiga härkomst. Det finns också relativa
        sökvägar som börjar någon annanstans än i rotkatalogen. Du
        bör komma ihåg att katalogen "../" hänvisar till den
        överordnade katalogen. Denna terminologi gäller även för
        andra katalogliknande strukturer, t.ex. hierarkiska
        datastrukturer.

      * Det finns ingen speciell komponent i katalogsökvägsnamnet som
        motsvarar en fysisk enhet, t.ex. hårddisken. Detta skiljer
        sig från RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS och Microsoft
        Windows, där sökvägen innehåller ett enhetsnamn som till
        exempel "C:\". (Det finns dock katalogposter som hänvisar
        till fysiska enheter som en del av det normala filsystemet.
        Se Avsnitt 1.2.2, ”Internt i filsystemet”.)

    Notera

    Även om du kan använda nästan vilka bokstäver eller symboler som
    helst i ett filnamn är det i praktiken en dålig idé att göra det.
    Det är bättre att undvika tecken som ofta har speciella
    betydelser på kommandoraden, t.ex. mellanslag, tabbar, nya rader
    och andra specialtecken: { } ( ) [ ] ' ` " \ / > < | ; ! # & ^ *
    % @ $ Om du vill separera ord i ett namn är punkt, bindestreck
    och understreck bra val. Du kan också skriva varje ord med stor
    bokstav, "LikeThis". Erfarna Linux-användare brukar undvika
    mellanslag i filnamn.

    Notera
   
    Ordet "root" kan betyda antingen "root user" eller "root
    directory". Det bör framgå av sammanhanget där de används.

    Notera

    Ordet path används inte bara för fullt kvalificerade filnamn
    enligt ovan utan även för kommandots sökväg. Den avsedda
    betydelsen framgår vanligtvis tydligt av sammanhanget.

    Detaljerad bästa praxis för filhierarkin beskrivs i Filesystem
    Hierarchy Standard ( "/usr/share/doc/debian-policy/fhs/
    fhs-2.3.txt.gz" och hier(7)). Du bör komma ihåg följande fakta
    som start.

    Tabell 1.3. Lista över användning av nyckelkataloger

    +---------------------------------------------------------------+
    | katalog |               användning av katalogen               |
    |---------+-----------------------------------------------------|
    |/        |rotkatalogen                                         |
    |---------+-----------------------------------------------------|
    |/etc/    |systemövergripande konfigurationsfiler               |
    |---------+-----------------------------------------------------|
    |/var/log/|systemets loggfiler                                  |
    |---------+-----------------------------------------------------|
    |/home/   |alla hemkataloger för alla icke-privilegierade       |
    |         |användare                                            |
    +---------------------------------------------------------------+


1.2.2. Internt i filsystemet

    I enlighet med Unix-traditionen tillhandahåller Debian GNU/
    Linux-systemet det filsystem under vilket fysiska data på
    hårddiskar och andra lagringsenheter finns, och interaktionen med
    hårdvaruenheter som konsolskärmar och seriella fjärrkonsoler
    representeras på ett enhetligt sätt under "/dev/".

    Varje fil, katalog, named pipe (ett sätt för två program att dela
    data) eller fysisk enhet på ett Debian GNU/Linux-system har en
    datastruktur som kallas inode som beskriver dess associerade
    attribut, t.ex. användaren som äger den (owner), gruppen som den
    tillhör, tidpunkten för senaste åtkomst osv. Idén att
    representera nästan allt i filsystemet var en Unix-innovation,
    och moderna Linux-kärnor har utvecklat denna idé ännu mer. Nu kan
    till och med information om processer som körs i datorn hittas i
    filsystemet.

    Denna abstrakta och enhetliga representation av fysiska enheter
    och interna processer är mycket kraftfull eftersom den gör det
    möjligt för oss att använda samma kommando för samma typ av
    operation på många helt olika enheter. Det är till och med
    möjligt att ändra hur kärnan fungerar genom att skriva data till
    speciella filer som är kopplade till pågående processer.

    Tips
   
    Om du behöver identifiera korrespondensen mellan filträdet och
    den fysiska enheten, kör mount(8) utan argument.

1.2.3. Behörigheter i filsystemet

    Filsystembehörigheter för Unix-liknande system definieras för tre
    kategorier av berörda användare.

      * Användaren som äger filen(u)

      * Andra användare i den grupp som filen tillhör(g)

      * Alla andra användare(o) även kallad "världen" och "alla"

    För filen tillåter varje motsvarande behörighet följande
    åtgärder.

      * Behörigheten read(r) ger ägaren rätt att undersöka innehållet
        i filen.

      * Skrivrättigheten(w) ger ägaren rätt att ändra filen.

      * Behörigheten execute(x) ger ägaren rätt att köra filen som
        ett kommando.

    För katalogen tillåter varje motsvarande behörighet följande
    åtgärder.

      * Behörigheten read(r) tillåter ägaren att lista innehållet i
        katalogen.

      * Skrivrättigheten(w) ger ägaren rätt att lägga till eller ta
        bort filer i katalogen.

      * Behörigheten execute(x) ger ägaren åtkomst till filer i
        katalogen.

    Här innebär exekveringsbehörigheten för en katalog inte bara att
    man får läsa filer i katalogen utan också att man får visa deras
    attribut, t.ex. storlek och ändringstid.

    ls(1) används för att visa behörighetsinformation (med mera) för
    filer och kataloger. När den anropas med alternativet "-l" visas
    följande information i den ordning som anges.

      * Typ av fil (första tecknet)

      * Åtkomstbehörighet för filen (nio tecken, bestående av tre
        tecken vardera för användare, grupp och annan i denna
        ordning)

      * Antal hårda länkar till filen

      * Namnet på den användare som äger filen

      * Namnet på den grupp som filen tillhör

      * Filens storlek i tecken (bytes)

      * Datum och tid för filen (mtime)

      * Filens namn

    Tabell 1.4. Lista över det första tecknet i "ls -l"-utdata

    +-----------------------+
    |tecken|   betydelse    |
    |------+----------------|
    |-     |normal fil      |
    |------+----------------|
    |d     |katalog         |
    |------+----------------|
    |l     |symlänk         |
    |------+----------------|
    |c     |tecken enhet nod|
    |------+----------------|
    |b     |block enhet nod |
    |------+----------------|
    |p     |namngivet rör   |
    |------+----------------|
    |s     |uttag           |
    +-----------------------+


    chown(1) används från rotkontot för att ändra filens ägare. chgrp
    (1) används från filens ägare eller rotkontot för att ändra
    filens grupp. chmod(1) används från filens ägare eller rotkontot
    för att ändra fil- och katalogåtkomstbehörigheter. Grundläggande
    syntax för att manipulera en foo-fil är följande.

    # chown newowner foo
    # chgrp newgroup foo
    # chmod  [ugoa][+-=][rwxXst][,...] foo

    Du kan t.ex. skapa ett katalogträd som ägs av användaren foo och
    delas av gruppen bar på följande sätt.

    # cd /some/location/
    # chown -R foo:bar .
    # chmod -R ug+rwX,o=rX .

    Det finns ytterligare tre speciella behörighetsbitar.

      * Den inställda användar-ID-biten(s eller S istället för
        användarens x)

      * Den inställda grupp-ID-biten(s eller S istället för gruppens 
        x)

      * Den kladdiga biten(t eller T istället för andras x)

    Här skrivs utdata från "ls -l" för dessa bitar med stor bokstav
    om exekveringsbitar som döljs av dessa utdata är avaktiverade.

    Om du anger set user ID för en körbar fil kan en användare köra
    den körbara filen med filens ägar-ID (t.ex. root). På samma sätt
    gör inställningen set group ID för en körbar fil att en användare
    kan köra den körbara filen med filens grupp-ID (t.ex. root).
    Eftersom dessa inställningar kan medföra säkerhetsrisker bör du
    vara extra försiktig när du aktiverar dem.

    Om du anger set group ID för en katalog kan du använda
    BSD-liknande filskapande där alla filer som skapas i katalogen
    tillhör katalogens grupp.

    Genom att ställa in sticky bit på en katalog förhindras att en
    fil i katalogen tas bort av en användare som inte är ägare till
    filen. För att säkra innehållet i en fil i kataloger som kan
    skrivas av alla, såsom ”/tmp”, eller i kataloger som kan skrivas
    av gruppen, måste man inte bara återställa skriv-behörigheten för
    filen utan också ställa in sticky bit på katalogen. Annars kan
    filen tas bort och en ny fil med samma namn skapas av vilken
    användare som helst som har skrivbehörighet till katalogen.

    Här är några intressanta exempel på filbehörigheter.

    $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
    crw------T 1 root root   108, 0 Oct 16 20:57 /dev/ppp
    -rw-r--r-- 1 root root     2761 Aug 30 10:38 /etc/passwd
    -rw-r----- 1 root shadow   1695 Aug 30 10:38 /etc/shadow
    -rwsr-xr-x 1 root root   973824 Sep 23 20:04 /usr/sbin/exim4
    $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
    drwxrwxrwt 14 root root  20480 Oct 16 21:25 /tmp
    drwxrwsr-x 10 root staff  4096 Sep 29 22:50 /usr/local
    drwxr-xr-x 10 root root   4096 Oct 11 00:28 /usr/src
    drwxrwsr-x  2 root mail   4096 Oct 15 21:40 /var/mail
    drwxrwxrwt  3 root root   4096 Oct 16 21:20 /var/tmp

    Det finns ett alternativt numeriskt läge för att beskriva
    filbehörigheter med chmod(1). Detta numeriska läge använder 3-
    till 4-siffriga breda oktala (radix=8) tal.

    Tabell 1.5. Det numeriska läget för filbehörigheter i chmod(1)
    -kommandon

    +---------------------------------------------------------------+
    |   tecken   |                    betydelse                     |
    |------------+--------------------------------------------------|
    |1:a valfria |summan av inställt användar-ID (=4), inställt     |
    |siffran     |grupp-ID (=2) och sticky bit (=1)                 |
    |------------+--------------------------------------------------|
    |2:a siffran |summan av behörigheterna läsa (=4), skriva (=2)   |
    |            |och köra (=1) för användaren                      |
    |------------+--------------------------------------------------|
    |3:e siffran |dito för gruppen                                  |
    |------------+--------------------------------------------------|
    |4:e siffran |dito för övriga                                   |
    +---------------------------------------------------------------+


    Det här låter komplicerat men är faktiskt ganska enkelt. Om du
    tittar på de första kolumnerna (2-10) i kommandoutmatningen från
    "ls -l" och läser dem som en binär (radix=2) representation av
    filbehörigheter ("-" är "0" och "rwx" är "1"), bör de sista 3
    siffrorna i det numeriska lägesvärdet vara begripliga som en
    oktal (radix=8) representation av filbehörigheter för dig.

    Försök till exempel med följande

    $ touch foo bar
    $ chmod u=rw,go=r foo
    $ chmod 644 bar
    $ ls -l foo bar
    -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar
    -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo

    Tips

    Om du behöver komma åt information som visas av "ls -l" i ett
    skalskript, bör du använda relevanta kommandon som test(1), stat
    (1) och readlink(1). Skalets inbyggda kommandon som "[" eller
    "test" kan också användas.

1.2.4. Kontroll av behörigheter för nyskapade filer: umask

    Vilka behörigheter som tillämpas på en nyskapad fil eller katalog
    begränsas av det inbyggda kommandot umask i skalet. Se dash(1),
    bash(1) och builtins(7).

     (file permissions) = (requested file permissions) & ~(umask value)

    Tabell 1.6. Exempel på umask-värde

    +---------------------------------------------------------------+
    |umask|filbehörigheter |katalogbehörigheter|     användning     |
    |     |    skapade     |      skapade      |                    |
    |-----+----------------+-------------------+--------------------|
    |0022 |-rw-r--r--      |-rwxr-xr-x         |skrivbar endast av  |
    |     |                |                   |användaren          |
    |-----+----------------+-------------------+--------------------|
    |0002 |-rw-rw-r--      |-rwxrwxr-x         |skrivbar av gruppen |
    +---------------------------------------------------------------+


    Debian-systemet använder ett UPG-system (User Private Group) som
    standard. En UPG skapas varje gång en ny användare läggs till i
    systemet. En UPG har samma namn som den användare för vilken den
    skapades och den användaren är den enda medlemmen i UPG.
    UPG-systemet gör det säkert att sätta umask till 0002 eftersom
    varje användare har sin egen privata grupp. (I vissa
    Unix-varianter är det ganska vanligt att alla normala användare
    tillhör en enda användare grupp och det är en bra idé att sätta
    umask till 0022 för säkerhets skull i sådana fall)

    Tips
   
    Aktivera UPG genom att lägga till "umask 002" i filen ~/.bashrc.

1.2.5. Behörigheter för grupper av användare (group)

    Varning
   
    Se till att spara osparade ändringar innan du startar om eller
    gör liknande åtgärder.

    Du kan lägga till en användarpingvin till en gruppfågel i två
    steg:

      * Ändra gruppkonfigurationen med hjälp av något av följande:

          + Kör "sudo usermod -aG bird penguin".

          + Utför "sudo adduser penguin bird". (endast på typiska
            Debian-system)

          + Kör "sudo vigr" för /etc/group och "sudo vigr -s" för /
            etc/gshadow för att lägga till penguin i raden för bird.

      * Tillämpa konfigurationen med hjälp av något av följande:

          + Kall omstart och inloggning. (Bästa alternativet)

          + Logga ut via GUI-menyn och logga in. (Detta kanske inte
            fungerar i den moderna skrivbordsmiljön.)

    Du kan ta bort en användarpingvin från en gruppfågel i två steg:

      * Ändra gruppkonfigurationen med hjälp av något av följande:

          + Kör "sudo usermod -rG bird penguin".

          + Utför "sudo deluser penguin bird". (endast på typiska
            Debian-system)

          + Kör "sudo vigr" för /etc/group och "sudo vigr -s" för /
            etc/gshadow för att ta bort penguin i raden för bird.
   
      * Tillämpa konfigurationen med hjälp av något av följande:

          + Kall omstart och inloggning. (Bästa alternativet)

          + Kör "kill -TERM -1" och gör några korrigeringsåtgärder,
            t.ex. "systemctl restart NetworkManager.service".

          + Logga ut via GUI-menyn är inte ett alternativ för Gnome
            Desktop.

    Alla försök till varm omstart är bräckliga ersättningar för den
    riktiga kalla omstarten under det moderna skrivbordssystemet.

    Notera

    Alternativt kan du dynamiskt lägga till användare i grupper under
    autentiseringsprocessen genom att lägga till raden "auth optional
    pam_group.so" i "/etc/pam.d/common-auth" och ställa in "/etc/
    security/group.conf". (Se Kapitel 4, Autentisering och
    åtkomstkontroll.)

    The hardware devices are just another kind of file on the Debian
    system. If you have problems accessing devices such as USB flash
    drive and CD-ROM from a user account, you should make that user a
    member of the relevant group.

    Vissa grupper som tillhandahålls av systemet gör det möjligt för
    medlemmarna att komma åt vissa filer och enheter utan
    root-behörighet.

    Tabell 1.7. Lista över viktiga systemtillgängliga grupper för
    filåtkomst

    +---------------------------------------------------------------+
    | grupp |    beskrivning för tillgängliga filer och enheter     |
    |-------+-------------------------------------------------------|
    |dialout|full och direkt tillgång till serieportar ( "/dev/ttyS |
    |       |[0-3]")                                                |
    |-------+-------------------------------------------------------|
    |dip    |begränsad tillgång till serieportar för uppringd       |
    |       |IP-anslutning till betrodda motparter                  |
    |-------+-------------------------------------------------------|
    |cdrom  |CD-ROM, DVD+/-RW-enheter                               |
    |-------+-------------------------------------------------------|
    |audio  |ljud enhet                                             |
    |-------+-------------------------------------------------------|
    |video  |video enhet                                            |
    |-------+-------------------------------------------------------|
    |scanner|skanner(s)                                             |
    |-------+-------------------------------------------------------|
    |adm    |loggar för systemövervakning                           |
    |-------+-------------------------------------------------------|
    |staff  |några kataloger för mindre administrativt arbete: "/usr|
    |       |/local", "/home"                                       |
    +---------------------------------------------------------------+


    Tips

    Du måste tillhöra dialout-gruppen för att konfigurera om modemet,
    ringa upp var som helst osv. Men om root skapar fördefinierade
    konfigurationsfiler för betrodda peers i "/etc/ppp/peers/"
    behöver du bara tillhöra dip-gruppen för att skapa en uppringd
    IP-anslutning till dessa betrodda peers med kommandona pppd(8),
    pon(1) och poff(1).

    Vissa grupper som tillhandahålls av systemet gör det möjligt för
    medlemmarna att utföra vissa kommandon utan root-behörighet.

    Tabell 1.8. Lista över anmärkningsvärda systemlevererade grupper
    för särskilda kommandoexekveringar

    +---------------------------------------------------------------+
    | grupp |                tillgängliga kommandon                 |
    |-------+-------------------------------------------------------|
    |sudo   |kör valfritt kommando med superuser-behörighet         |
    |-------+-------------------------------------------------------|
    |lpadmin|utföra kommandon för att lägga till, ändra och ta bort |
    |       |skrivare från skrivardatabaser                         |
    +---------------------------------------------------------------+


    En fullständig lista över användare och grupper som
    tillhandahålls av systemet finns i den senaste versionen av
    dokumentet "Användar och grupper" i "/usr/share/doc/base-passwd/
    users-and-groups.html" som tillhandahålls av paketet base-passwd.

    Se passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8)
    och pam_group(8) för kommandon för hantering av användar- och
    gruppsystemet.

1.2.6. Tidsstämplar

    Det finns tre typer av tidsstämplar för en GNU/Linux-fil.

    Tabell 1.9. Lista över olika typer av tidsstämplar

    +----------------------------------------------+
    | typ | betydelse (historisk Unix-definition)  |
    |-----+----------------------------------------|
    |mtime|filens modifieringstid(ls -l)           |
    |-----+----------------------------------------|
    |ctime|tid för ändring av filstatus(ls -lc)    |
    |-----+----------------------------------------|
    |atime|den senaste tiden för filåtkomst(ls -lu)|
    +----------------------------------------------+


    Notera
   
    ctime är inte filens skapelsetid.

    Notera
   
    Det faktiska värdet på atime i GNU/Linux-system kan skilja sig
    från det i den historiska Unix-definitionen.

      * Om du skriver över en fil ändras alla attribut mtime, ctime
        och atime för filen.

      * Om du ändrar ägarskap eller behörighet för en fil ändras
        filens attribut ctime och atime.

      * När du läser en fil ändras filens atime-attribut i det
        historiska Unix-systemet.

      * Läsning av en fil ändrar atime-attributet för filen på GNU/
        Linux-systemet om dess filsystem är monterat med
        "strictatime".

      * Om du läser en fil för första gången eller efter en dag
        ändras filens atime-attribut på GNU/Linux-systemet om
        filsystemet är monterat med "relatime". (standardbeteende
        sedan Linux 2.6.30)

      * Läsning av en fil ändrar inte atime-attributet för filen på
        GNU/Linux-systemet om filsystemet är monterat med "noatime".

    Notera

    Monteringsalternativen "noatime" och "relatime" införs för att
    förbättra filsystemets läsprestanda i normala användningsfall.
    Enkel filläsning med alternativet "strictatime" åtföljs av en
    tidskrävande skrivoperation för att uppdatera atime-attributet.
    Men atime-attributet används sällan förutom för filen mbox(5). Se
    mount(8).

    Använd kommandot touch(1) för att ändra tidsstämplar för
    befintliga filer.

    För tidsstämplar skriver kommandot ls ut lokaliserade strängar
    under icke-engelsk locale ( "fr_FR.UTF-8").

    $ LANG=C  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
    $ LANG=en_US.UTF-8  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
    $ LANG=fr_FR.UTF-8  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo

    Tips
   
    Se Avsnitt 9.3.4, ”Anpassad visning av tid och datum” för att
    anpassa utdata från "ls -l".

1.2.7. Länkar

    Det finns två metoder för att associera en fil "foo" med ett
    annat filnamn "bar".

      * Hård länk

          + Duplicerat namn för en befintlig fil

          + "ln foo bar"
   
      * Symbolisk länk eller symlänk

          + Särskild fil som pekar på en annan fil med namn

          + "ln -s foo bar"

    Se följande exempel för förändringar i länkantal och de subtila
    skillnaderna i resultatet av kommandot rm.

    $ umask 002
    $ echo "Original Content" > foo
    $ ls -li foo
    1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
    $ ln foo bar     # hard link
    $ ln -s foo baz  # symlink
    $ ls -li foo bar baz
    1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
    1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
    1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
    $ rm foo
    $ echo "New Content" > foo
    $ ls -li foo bar baz
    1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
    1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
    1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
    $ cat bar
    Original Content
    $ cat baz
    New Content

    Den hårda länken kan göras inom samma filsystem och delar samma
    inodnummer som alternativet "-i" med ls(1) avslöjar.

    Symlänken har alltid den nominella filåtkomstbehörigheten
    "rwxrwxrwx", som visas i exemplet ovan, medan den faktiska
    åtkomstbehörigheten bestäms av behörigheten för den fil som den
    pekar på.

    Observera

    Det är i allmänhet en bra idé att inte skapa komplicerade
    symboliska länkar eller hårda länkar alls om du inte har en
    mycket god anledning. Det kan orsaka mardrömmar där den logiska
    kombinationen av de symboliska länkarna resulterar i loopar i
    filsystemet.

    Notera

    Det är i allmänhet att föredra att använda symboliska länkar
    framför hårda länkar, såvida du inte har ett gott skäl att
    använda en hård länk.

    Katalogen "..." länkar till den katalog den finns i, vilket
    innebär att länkantalet för en ny katalog börjar på 2. Katalogen
    "..." länkar till den överordnade katalogen, vilket innebär att
    katalogens länkantal ökar när nya underkataloger läggs till.

    Om du precis har gått över till Linux från Windows blir det snart
    tydligt hur väl utformad Unix filnamnslänkning är, jämfört med
    Windows närmaste motsvarighet till "genvägar". Eftersom det är
    implementerat i filsystemet kan applikationer inte se någon
    skillnad mellan en länkad fil och originalet. När det gäller
    hårda länkar är det verkligen ingen skillnad.

1.2.8. Namngivna pipes (FIFO)

    En named pipe är en fil som fungerar som ett rör. Du lägger in
    något i filen och det kommer ut i andra änden. Därför kallas det
    FIFO, eller First-In-First-Out: det första du stoppar in i röret
    är det första som kommer ut i andra änden.

    Om du skriver till en namngiven pipe avslutas inte den process
    som skriver till pipen förrän den information som skrivs har
    lästs från pipen. Om du läser från en namngiven pipe väntar
    läsprocessen tills det inte finns något att läsa innan den
    avslutas. Storleken på pipen är alltid noll --- den lagrar inte
    data, den länkar bara samman två processer på samma sätt som
    skalets "|"-syntax. Men eftersom pipen har ett namn behöver de
    två processerna inte finnas på samma kommandorad eller ens köras
    av samma användare. Pipes var en mycket inflytelserik innovation
    inom Unix.

    Försök till exempel med följande

    $ cd; mkfifo mypipe
    $ echo "hello" >mypipe & # put into background
    [1] 8022
    $ ls -l mypipe
    prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe
    $ cat mypipe
    hello
    [1]+  Done                    echo "hello" >mypipe
    $ ls mypipe
    mypipe
    $ rm mypipe

1.2.9. Uttag

    Uttag används i stor utsträckning av all Internetkommunikation,
    databaser och själva operativsystemet. Den liknar named pipe
    (FIFO) och gör det möjligt för processer att utbyta information
    även mellan olika datorer. För ett uttag behöver dessa processer
    inte köras samtidigt eller köras som barn till samma
    förfadersprocess. Detta är slutpunkten för
    interprocesskommunikation (IPC). Informationsutbytet kan ske över
    nätverket mellan olika värdar. De två vanligaste är
    Internet-uttaget och Unix-domän-uttaget.

    Tips
   
    "ss -t -u -a" (from the iproute2 package) provides a very useful
    overview of sockets that are open on a given system.

1.2.10. Enhetsfiler

    Enhetsfiler hänvisar till fysiska eller virtuella enheter i
    systemet, t.ex. hårddisk, grafikkort, skärm eller tangentbord.
    Ett exempel på en virtuell enhet är konsolen, som representeras
    av "/dev/console".

    Det finns 2 typer av enhetsfiler.

      * Teckenenhet

          + Åtkomst till ett tecken i taget

          + 1 tecken = 1 byte

          + T.ex. tangentbordsenhet, serieport, …
   
      * Blockenhet

          + nås i större enheter som kallas block

          + 1 block > 1 byte

          + T.ex. hårddisk, …

    Du kan läsa och skriva enhetsfiler, även om filen mycket väl kan
    innehålla binär data som kan vara en obegriplig rappakalja för
    människor. Att skriva data direkt till dessa filer är ibland
    användbart för felsökning av maskinvaruanslutningar. Du kan t.ex.
    dumpa en textfil till skrivarenheten "/dev/lp0" eller skicka
    modemkommandon till lämplig serieport "/dev/ttyS0". Men om detta
    inte görs noggrant kan det orsaka en stor katastrof. Så var
    försiktig.

    Notera
   
    För normal åtkomst till en skrivare använder du lp(1).

    Enhetens nodnummer visas genom att köra ls(1) på följande sätt.

    $ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
    brw-rw---T  1 root disk     8,  0 Oct 16 20:57 /dev/sda
    brw-rw---T+ 1 root cdrom   11,  0 Oct 16 21:53 /dev/sr0
    crw-rw---T  1 root dialout  4, 64 Oct 16 20:57 /dev/ttyS0
    crw-rw-rw-  1 root root     1,  5 Oct 16 20:57 /dev/zero

      * "/dev/sda" har det större enhetsnumret 8 och det mindre
        enhetsnumret 0. Detta är läs-/skrivåtkomligt för användare
        som tillhör diskgruppen.

      * "/dev/sr0" har det stora enhetsnumret 11 och det lilla
        enhetsnumret 0. Den är läs/skriv-åtkomlig för användare som
        tillhör cdrom-gruppen.

      * "/dev/ttyS0" har det större enhetsnumret 4 och det mindre
        enhetsnumret 64. Detta är läs-/skrivåtkomligt för användare
        som tillhör dialout-gruppen.

      * "/dev/zero" har det större enhetsnumret 1 och det mindre
        enhetsnumret 5. Detta är läs-/skrivåtkomligt för alla.

    På ett modernt Linux-system fylls filsystemet under "/dev/"
    automatiskt av udev(7)-mekanismen.

1.2.11. Särskilda enhetsfiler

    Det finns några speciella enhetsfiler.

    Tabell 1.10. Lista över speciella enhetsfiler

    +---------------------------------------------------------------+
    |enhetsfil|åtgärd|             beskrivning av svar              |
    |---------+------+----------------------------------------------|
    |/dev/null|läs   |return "tecken för slutet av filen (EOF)"     |
    |---------+------+----------------------------------------------|
    |/dev/null|skriv |returnera ingenting (en bottenlös             |
    |         |      |datadumpningsgrop)                            |
    |---------+------+----------------------------------------------|
    |/dev/zero|läs   |returnera "tecknet \0 (NUL)" (inte samma som  |
    |         |      |siffran noll ASCII)                           |
    |---------+------+----------------------------------------------|
    |/dev/    |      |returnera slumpmässiga tecken från en riktig  |
    |random   |läs   |slumptalsgenerator, vilket ger verklig entropi|
    |         |      |(långsamt)                                    |
    |---------+------+----------------------------------------------|
    |/dev/    |läs   |returnera slumpmässiga tecken från en         |
    |urandom  |      |kryptografiskt säker pseudorandomtalsgenerator|
    |---------+------+----------------------------------------------|
    |/dev/full|skriv |returnera felet disk full (ENOSPC)            |
    +---------------------------------------------------------------+


    Dessa används ofta i samband med shell-omdirigering (se
    Avsnitt 1.5.8, ”Typiska kommandosekvenser och omdirigering av
    skal”).

1.2.12. procfs och sysfs

    Procfs och sysfs som är monterade på "/proc" och "/sys" är
    pseudofilsystem och exponerar interna datastrukturer i kärnan för
    användarutrymmet. Med andra ord är dessa poster virtuella, vilket
    innebär att de fungerar som ett bekvämt fönster in i
    operativsystemets funktion.

    Katalogen "/proc" innehåller (bland annat) en underkatalog för
    varje process som körs i systemet och som har fått sitt namn
    efter process-ID (PID). Systemverktyg som hämtar information om
    processer, t.ex. ps(1), hämtar sin information från denna
    katalogstruktur.

    Katalogerna under "/proc/sys/" innehåller gränssnitt för att
    ändra vissa kärnparametrar under körning. (Du kan göra samma sak
    genom det specialiserade sysctl(8)-kommandot eller dess
    förladdnings-/konfigurationsfil "/etc/sysctl.d/*.conf")

    Många får panik när de upptäcker en fil - "/proc/kcore" - som i
    allmänhet är enorm. Det här är (mer eller mindre) en kopia av
    innehållet i datorns minne. Den används för att felsöka kärnan.
    Det är en virtuell fil som pekar på datorminnet, så oroa dig inte
    för dess storlek.

    Katalogen under "/sys" innehåller exporterade datastrukturer för
    kärnan, deras attribut och länkarna mellan dem. Den innehåller
    också gränssnitt för att ändra vissa kärnparametrar under
    körning.

    Se "proc.txt(.gz)", "sysfs.txt(.gz)" och andra relaterade
    dokument i dokumentationen för Linux-kärnan ("/usr/share/doc/
    linux-doc-*/Documentation/filesystems/*") som tillhandahålls av
    paketet linux-doc-*.

1.2.13. tmpfs

    Tmpfs är ett temporärt filsystem som förvarar alla filer i det
    virtuella minnet. Data från tmpfs i sidcachen i minnet kan vid
    behov swappas ut till swaputrymmet på disken.

    Katalogen "/run" monteras som tmpfs i den tidiga
    uppstartsprocessen. Detta gör det möjligt att skriva till den
    även när katalogen "/" är monterad som skrivskyddad. Detta är den
    nya platsen för lagring av transienta tillståndsfiler och
    ersätter flera platser som beskrivs i Filesystem Hierarchy
    Standard version 2.3:

      * "/var/run" → "/run"

      * "/var/lock" → "/run/lock"

      * "/dev/shm" → "/run/shm"

    Se "tmpfs.txt(.gz)" i dokumentationen för Linux-kärnan ( "/usr/
    share/doc/linux-doc-*/Documentation/filesystems/*") som
    tillhandahålls av paketet linux-doc-*.

1.3. Midnight Commander (MC)

    Midnight Commander (MC) är en "schweizisk armékniv" från GNU för
    Linux-konsolen och andra terminalmiljöer. Detta ger nybörjare en
    menystyrd konsolupplevelse som är mycket lättare att lära sig än
    standard Unix-kommandon.

    Du kan behöva installera Midnight Commander-paketet som heter
    "mc" enligt följande.

    $ sudo apt-get install mc

    Använd kommandot mc(1) för att utforska Debian-systemet. Detta är
    det bästa sättet att lära sig. Utforska några intressanta platser
    bara med hjälp av markörknapparna och Enter-tangenten.

      * "/etc" och dess underkataloger

      * "/var/log" och dess underkataloger
   
      * "/usr/share/doc" och dess underkataloger

      * "/usr/sbin" och "/usr/bin"

1.3.1. Anpassning av MC

    För att få MC att byta arbetskatalog vid avslutning och cd till
    katalogen föreslår jag att du ändrar "~/.bashrc" så att det
    innehåller ett skript som tillhandahålls av mc-paketet.

    . /usr/lib/mc/mc.sh

    Se mc(1) (under alternativet "-P") för anledningen. (Om du inte
    förstår exakt vad jag menar här, kan du göra det senare)

1.3.2. Starta MC

    MC kan startas på följande sätt.

    $ mc

    MC sköter alla filoperationer via menyn, vilket kräver minimal
    ansträngning av användaren. Tryck bara på F1 för att komma till
    hjälpskärmen. Du kan leka med MC genom att trycka på markör- och
    funktionsknappar.

    Notera

    I vissa konsoler, t.ex. gnome-terminal(1), kan tangenttryckningar
    på funktionstangenter stjälas av konsolprogrammet. Du kan
    inaktivera dessa funktioner i menyn "Inställningar" → "Allmänt"
    och "Genvägar" för gnome-terminal.

    Om du stöter på problem med teckenkodning som visar skräptecken
    kan du lägga till "-a" på MC:s kommandorad för att förhindra
    problem.

    Om detta inte löser dina problem med MC-displayen, se
    Avsnitt 8.3.1, ”Terminalens konfiguration”.

1.3.3. Filhanterare i MC

    Standard är två katalogpaneler som innehåller fillistor. Ett
    annat användbart läge är att ställa in det högra fönstret på
    "information" för att se information om filåtkomsträttigheter
    etc. Nedan följer några viktiga tangenttryckningar. När daemon
    gpm(8) körs kan man även använda musen på Linux teckenkonsoler.
    (Se till att trycka på shift-tangenten för att få det normala
    beteendet för klipp och klistra i MC)

    Tabell 1.11. De viktigaste bindningarna för MC

    +---------------------------------------------------------------+
    |    nyckel    |                 nyckelbindning                 |
    |--------------+------------------------------------------------|
    |F1            |hjälp meny                                      |
    |--------------+------------------------------------------------|
    |F3            |intern filvisare                                |
    |--------------+------------------------------------------------|
    |F4            |intern redaktör                                 |
    |--------------+------------------------------------------------|
    |F9            |aktivera rullgardinsmeny                        |
    |--------------+------------------------------------------------|
    |F10           |avsluta Midnight Commander                      |
    |--------------+------------------------------------------------|
    |Tab           |flytta mellan två fönster                       |
    |--------------+------------------------------------------------|
    |Insert eller  |markera fil för en operation med flera filer,   |
    |Ctrl-T        |t.ex. kopiering                                 |
    |--------------+------------------------------------------------|
    |Del           |radera fil (var försiktig - ställ in MC till    |
    |              |säkert raderingsläge)                           |
    |--------------+------------------------------------------------|
    |Piltangenter  |självförklarande                                |
    +---------------------------------------------------------------+


1.3.4. Trix på kommandoraden i MC

      * cd-kommandot ändrar den katalog som visas på den valda
        skärmen.

      * Ctrl-Enter eller Alt-Enter kopierar ett filnamn till
        kommandoraden. Använd detta med kommandona cp(1) och mv(1)
        tillsammans med kommandoradsredigering.

      * Alt-Tab visar valmöjligheter för filnamnsexpansion i skalet.

      * Man kan ange startkatalogen för båda fönstren som argument
        till MC, t.ex. "mc /etc /root".

      * Esc + n-nyckel → Fn (d.v.s. Esc + 1 → F1, etc.; Esc + 0 →
        F10)

      * Om du trycker på Esc före tangenten får du samma effekt som
        om du trycker på Alt och tangenten samtidigt, t.ex. skriv Esc
        + c för Alt-C. Esc kallas metatangent och skrivs ibland som
        "M-".

1.3.5. Den interna redaktören i MC

    Den interna editorn har ett intressant klipp-och-klistra-system.
    Genom att trycka på F3 markeras början av ett urval, ett andra F3
    markerar slutet av urvalet och markerar urvalet. Sedan kan du
    flytta markören. Om du trycker på F6 flyttas det markerade
    området till markörens plats. Om du trycker på F5 kopieras det
    markerade området och infogas på markörens plats. F2 sparar
    filen. F10 tar dig ut ur programmet. De flesta markörknappar
    fungerar intuitivt.

    Denna editor kan startas direkt på en fil med hjälp av något av
    följande kommandon.

    $ mc -e filename_to_edit

    $ mcedit filename_to_edit

    Detta är inte en editor för flera fönster, men man kan använda
    flera Linux-konsoler för att uppnå samma effekt. För att kopiera
    mellan fönster använder du Alt-Fn-tangenterna för att växla
    mellan virtuella konsoler och använder "File→Insert file" eller
    "File→Copy to file" för att flytta en del av en fil till en annan
    fil.

    Denna interna editor kan ersättas med valfri extern editor.

    Många program använder också miljövariablerna "$EDITOR" eller
    "$VISUAL" för att bestämma vilken editor som ska användas. Om du
    inte känner dig bekväm med vim(1) eller nano(1) från början kan
    du ställa in dessa till "mcedit" genom att lägga till följande
    rader i "~/.bashrc".

    export EDITOR=mcedit
    export VISUAL=mcedit

    Jag rekommenderar att du ställer in dessa på "vim" om möjligt.

    Om du inte känner dig bekväm med vim(1) kan du fortsätta att
    använda mcedit(1) för de flesta systemunderhållsuppgifter.

1.3.6. Den interna tittaren i MC

    MC är en mycket smart viewer. Detta är ett utmärkt verktyg för
    att söka efter ord i dokument. Jag använder det alltid för filer
    i katalogen "/usr/share/doc". Det här är det snabbaste sättet att
    bläddra igenom massor av Linux-information. Den här visaren kan
    startas direkt med något av följande kommandon.

    $ mc -v path/to/filename_to_view

    $ mcview path/to/filename_to_view

1.3.7. Funktioner för automatisk start av MC

    Tryck på Enter i en fil, så hanterar lämpligt program innehållet
    i filen (se Avsnitt 9.4.11, ”Anpassning av program som ska
    startas”). Detta är en mycket praktisk MC-funktion.

    Tabell 1.12. Reaktionen på enter-tangenten i MC

    +---------------------------------------------------------------+
    |        filtyp         |      reaktion på enter-tangenten      |
    |-----------------------+---------------------------------------|
    |exekverbar fil         |exekvera kommando                      |
    |-----------------------+---------------------------------------|
    |huvudfil               |rörinnehåll till visningsprogramvara   |
    |-----------------------+---------------------------------------|
    |html fil               |rörinnehåll till webbläsare            |
    |-----------------------+---------------------------------------|
    |"*.tar.gz" och "*.deb" |bläddra i dess innehåll som i en       |
    |fil                    |underkatalog                           |
    +---------------------------------------------------------------+


    För att dessa funktioner för visare och virtuella filer ska
    fungera bör visningsbara filer inte ställas in som körbara. Ändra
    deras status med hjälp av chmod(1) eller via MC-filmenyn.

1.3.8. Virtuellt filsystem för MC

    MC kan användas för att komma åt filer via Internet. Gå till
    menyn genom att trycka på F9, "Enter" och "h" för att aktivera
    filsystemet Shell. Ange en URL i formen "sh://[user@]machine
    [:options]/[remote-dir]", som hämtar en fjärrkatalog som ser ut
    som en lokal katalog med hjälp av ssh.

1.4. Den grundläggande Unix-liknande arbetsmiljön

    Även om du kan göra nästan allt med MC är det mycket viktigt att
    du lär dig att använda kommandoradsverktygen från skalprompten
    och blir bekant med den Unix-liknande arbetsmiljön.

1.4.1. Inloggningsskal

    Eftersom inloggningsskalet kan användas av vissa
    systeminitialiseringsprogram är det klokt att behålla det som
    bash(1) och undvika att byta inloggningsskal med chsh(1).

    Om du vill använda en annan interaktiv shell-prompt kan du ställa
    in den i GUI-terminalemulatorns konfiguration eller starta den
    från ~/.bashrc, t.ex. genom att placera "exec /usr/bin/zsh -i -l"
    eller "exec /usr/bin/fish -i -l" i den.

    Tabell 1.13. Lista över skalprogram

    +---------------------------------------------------------------+
    |     paket     |popcon |storlek|POSIX|       beskrivning       |
    |               |       |       |skal |                         |
    |---------------+-------+-------+-----+-------------------------|
    |bash           |V:893, |7309   |Ja   |Bash: GNU Bourne Again   |
    |               |I:1000 |       |     |SHell (de facto-standard)|
    |---------------+-------+-------+-----+-------------------------|
    |               |V:37,  |       |     |programmerbar            |
    |bash-completion|I:960  |1952   |N/A  |komplettering för        |
    |               |       |       |     |bash-skalet              |
    |---------------+-------+-------+-----+-------------------------|
    |dash           |V:928, |207    |Ja   |Debian Almquist Shell,   |
    |               |I:998  |       |     |bra för shell-skript     |
    |---------------+-------+-------+-----+-------------------------|
    |zsh            |V:41,  |2571   |Ja   |Z-skal: standardskalet   |
    |               |I:70   |       |     |med många förbättringar  |
    |---------------+-------+-------+-----+-------------------------|
    |               |V:4,   |       |     |TENEX C Shell: en        |
    |tcsh           |I:15   |1366   |Nej  |förbättrad version av    |
    |               |       |       |     |Berkeley csh             |
    |---------------+-------+-------+-----+-------------------------|
    |mksh           |V:5.6, |7713   |Ja   |En version av Korn-skalet|
    |               |I:8.0  |       |     |                         |
    |---------------+-------+-------+-----+-------------------------|
    |csh            |V:1.1, |348    |Nej  |OpenBSD C Shell, en      |
    |               |I:5.1  |       |     |version av Berkeley csh  |
    |---------------+-------+-------+-----+-------------------------|
    |               |       |       |     |Fristående skal med      |
    |sash           |V:0.3, |1245   |Ja   |inbyggda kommandon (inte |
    |               |I:5.1  |       |     |avsett för standard "/usr|
    |               |       |       |     |/bin/sh")                |
    |---------------+-------+-------+-----+-------------------------|
    |               |V:0.3, |       |     |den riktiga AT&          |
    |ksh            |I:7.7  |65     |Ja   |T-versionen av           |
    |               |       |       |     |Korn-skalet              |
    |---------------+-------+-------+-----+-------------------------|
    |rc             |V:0.09,|182    |Nej  |implementering av AT&T   |
    |               |I:0.77 |       |     |Plan 9 rc-skal           |
    |---------------+-------+-------+-----+-------------------------|
    |posh           |V:0.00,|195    |Ja   |Policyanpassad ordinär   |
    |               |I:0.23 |       |     |SHell(pdksh-derivat)     |
    +---------------------------------------------------------------+


    Tips

    Även om POSIX-liknande skal delar den grundläggande syntaxen kan
    de skilja sig åt i beteendet för så grundläggande saker som
    skalvariabler och glob-expansioner. Kontrollera deras
    dokumentation för detaljer.

    I det här handledningskapitlet betyder det interaktiva skalet
    alltid bash.

1.4.2. Anpassa bash

    Du kan anpassa bash(1)-beteendet genom "~/.bashrc".

    Försök till exempel med följande.

    # enable bash-completion
    if ! shopt -oq posix; then
      if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

    # CD upon exiting MC
    . /usr/lib/mc/mc.sh

    # set CDPATH to a good one
    CDPATH=.:/usr/share/doc:~:~/Desktop:~
    export CDPATH

    PATH="${PATH+$PATH:}/usr/sbin:/sbin"
    # set PATH so it includes user's private bin if it exists
    if [ -d ~/bin ] ; then
      PATH="~/bin${PATH+:$PATH}"
    fi
    export PATH

    EDITOR=vim
    export EDITOR

    Tips

    Du kan hitta fler tips för anpassning av bash, till exempel
    Avsnitt 9.3.6, ”Färgade kommandon”, i Kapitel 9, Tips för
    systemet.

    Tips
   
    Paketet bash-completion möjliggör programmerbar komplettering för
    bash.

1.4.3. Särskilda tangenttryckningar

    I den Unix-liknande miljön finns det några tangenttryckningar som
    har speciella betydelser. Observera att på en normal
    Linux-teckenkonsol är det bara de vänstra tangenterna Ctrl och
    Alt som fungerar som förväntat. Här är några viktiga
    tangenttryckningar att komma ihåg.

    Tabell 1.14. Lista över tangentbindningar för bash

    +---------------------------------------------------------------+
    |         nyckel          |    beskrivning av nyckelbindning    |
    |-------------------------+-------------------------------------|
    |Ctrl-U                   |radera raden före markören           |
    |-------------------------+-------------------------------------|
    |Ctrl-H                   |radera ett tecken före markören      |
    |-------------------------+-------------------------------------|
    |Ctrl-D                   |avsluta inmatning (avsluta shell om  |
    |                         |du använder shell)                   |
    |-------------------------+-------------------------------------|
    |Ctrl-C                   |avsluta ett pågående program         |
    |-------------------------+-------------------------------------|
    |Ctrl-Z                   |tillfälligt stoppa programmet genom  |
    |                         |att flytta det till bakgrundsjobbet  |
    |-------------------------+-------------------------------------|
    |Ctrl-S                   |stoppa utmatningen till skärmen      |
    |-------------------------+-------------------------------------|
    |Ctrl-Q                   |återaktivera utmatning till skärm    |
    |-------------------------+-------------------------------------|
    |Ctrl-Alt-Del             |starta om/halta upp systemet, se     |
    |                         |inittab(5)                           |
    |-------------------------+-------------------------------------|
    |Vänster-Alt-tangent      |metaknapp för Emacs och liknande     |
    |(valfritt,               |användargränssnitt                   |
    |Windows-tangent)         |                                     |
    |-------------------------+-------------------------------------|
    |Up-arrow                 |starta sökning i kommandohistoriken  |
    |                         |under bash                           |
    |-------------------------+-------------------------------------|
    |Ctrl-R                   |starta inkrementell sökning i        |
    |                         |kommandohistoriken under bash        |
    |-------------------------+-------------------------------------|
    |Tab                      |fullständig inmatning av filnamnet   |
    |                         |till kommandoraden under bash        |
    |-------------------------+-------------------------------------|
    |Ctrl-V Tab               |inmatning Tab utan expansion till    |
    |                         |kommandoraden under bash             |
    +---------------------------------------------------------------+


    Tips
   
    Terminalfunktionen i Ctrl-S kan inaktiveras med hjälp av stty(1).

1.4.4. Operationer med musen

    Musoperationer för text på Debian-system blandar 2 stilar med
    några vändningar:

      * Traditionella musoperationer i Unix-stil:

          + använd 3 knappar (klicka)

          + använd PRIMARY

          + används av X-program som xterm och textprogram i
            Linux-konsolen

      * Moderna musoperationer i GUI-stil:

          + använd 2 knappar (dra + klicka)

          + använda PRIMARY och CLIPBOARD

          + används i moderna GUI-program som gnome-terminal

    Tabell 1.15. Lista över musoperationer och relaterade
    nyckelåtgärder på Debian

    +---------------------------------------------------------------+
    |         åtgärd          |               respons               |
    |-------------------------+-------------------------------------|
    |Vänsterklicka-och-drag   |välj intervall som PRIMÄRt urval     |
    |med musen                |                                     |
    |-------------------------+-------------------------------------|
    |Vänsterklicka            |välj början på intervallet för       |
    |                         |PRIMARY-urvalet                      |
    |-------------------------+-------------------------------------|
    |Högerklicka              |välj slutet av intervallet för       |
    |(traditionellt)          |PRIMARY-urval                        |
    |-------------------------+-------------------------------------|
    |Högerklicka (modernt)    |kontextberoende meny (klippa/kopiera/|
    |                         |klistra in)                          |
    |-------------------------+-------------------------------------|
    |Mittenklicka eller       |infoga PRIMARY-urval vid markören    |
    |Shift-Ins                |                                     |
    |-------------------------+-------------------------------------|
    |Ctrl-X                   |klippa PRIMARY-valet till CLIPBOARD  |
    |-------------------------+-------------------------------------|
    |Ctrl-C(Skift-Ctrl-C i    |kopiera PRIMARY-urvalet till         |
    |terminal)                |CLIPBOARD                            |
    |-------------------------+-------------------------------------|
    |Ctrl-V                   |klistra in CLIPBOARD vid markören    |
    +---------------------------------------------------------------+


    Här är det PRIMÄRA valet det markerade textområdet. I
    terminalprogrammet används istället Shift-Ctrl-C för att undvika
    att avsluta ett pågående program.

    Det mellersta hjulet på en modern hjulmus betraktas som den
    mellersta musknappen och kan användas för mittklick. Om du
    klickar på vänster och höger musknapp tillsammans fungerar det
    som ett mittklick i ett mussystem med 2 knappar.

    För att kunna använda en mus i Linux teckenkonsoler måste du ha
    gpm(8) igång som daemon.

1.4.5. Personsökaren

    Kommandot less(1) är en förbättrad pager (filinnehållsläsare).
    Det läser filen som anges av dess kommandoargument eller dess
    standardinmatning. Tryck på "h" om du behöver hjälp när du
    bläddrar med kommandot less. Det kan göra mycket mer än more(1)
    och kan förstärkas genom att köra "eval $(lesspipe)" eller "eval
    $(lessfile)" i skalets startskript. Se mer i "/usr/share/doc/less
    /LESSOPEN". Alternativet "-R" tillåter utmatning av råa tecken
    och aktiverar ANSI-färg-escape-sekvenser. Se less(1).

    Tips

    I kommandot less skriver du "h" för att se hjälpskärmen, skriver
    "/" eller "?" för att söka efter en sträng och skriver "-i" för
    att ändra skiftlägeskänsligheten.

1.4.6. Textredigeraren

    Du bör bli skicklig i en av varianterna av Vim- eller
    Emacs-programmen som är populära i det Unix-liknande systemet.

    Jag tror att det är rätt att vänja sig vid Vim-kommandon,
    eftersom Vi-editor alltid finns där i Linux/Unix-världen.
    (Egentligen är original vi eller nya nvi program som du hittar
    överallt. Jag valde Vim istället för nybörjare eftersom det
    erbjuder dig hjälp via F1-tangenten medan det är tillräckligt
    liknande och kraftfullare.)

    Om du valde antingen Emacs eller XEmacs istället som ditt val av
    redigerare är det ett annat bra val, särskilt för programmering.
    Emacs har en uppsjö av andra funktioner också, inklusive att
    fungera som en nyhetsläsare, katalogredigerare, e-postprogram
    etc. När det används för programmering eller redigering av
    skalskript känner det på ett intelligent sätt igen formatet på
    det du arbetar med och försöker ge hjälp. En del människor hävdar
    att det enda program de behöver på Linux är Emacs. Tio minuters
    inlärning av Emacs nu kan spara timmar senare. Att ha GNU
    Emacs-manualen som referens när du lär dig Emacs rekommenderas
    starkt.

    Alla dessa program levereras vanligtvis med handledningsprogram
    så att du kan lära dig dem genom övning. Starta Vim genom att
    skriva "vim" och tryck på F1-tangenten. Du bör åtminstone läsa de
    första 35 raderna. Gör sedan online-utbildningskursen genom att
    flytta markören till "|tutor|" och trycka på Ctrl-].

    Notera

    Bra editorer, som Vim och Emacs, kan hantera UTF-8 och andra
    exotiska kodningstexter korrekt. Det är en god idé att använda
    GUI-miljön i UTF-8-lokalen och att installera nödvändiga program
    och teckensnitt i den. Redigerare har alternativ för att ställa
    in filkodningen oberoende av GUI-miljön. Se deras dokumentation
    om multibyte-text.

1.4.7. Ange en standardtextredigerare

    Debian levereras med ett antal olika redigeringsprogram. Vi
    rekommenderar att du installerar vim-paketet, som nämnts ovan.

    Debian ger enhetlig åtkomst till systemets standardredigerare via
    kommandot "/usr/bin/editor" så att andra program (t.ex. reportbug
    (1)) kan anropa den. Du kan ändra den på följande sätt.

    $ sudo update-alternatives --config editor

    Valet "/usr/bin/vim.basic" framför "/usr/bin/vim.tiny" är min
    rekommendation för nybörjare eftersom det stöder syntaxmarkering.

    Tips

    Många program använder miljövariablerna "$EDITOR" eller "$VISUAL"
    för att bestämma vilken editor som ska användas (se
    Avsnitt 1.3.5, ”Den interna redaktören i MC” och Avsnitt 9.4.11,
    ”Anpassning av program som ska startas”). För konsekvens på
    Debian-systemet, ställ in dessa till "/usr/bin/editor".
    (Historiskt sett var "$EDITOR" "ed" och "$VISUAL" var "vi")

1.4.8. Använda vim

    Den nya vim(1) startar sig själv med det sunda alternativet
    "nocompatible" och går in i NORMAL-läget.^[1]

    Tabell 1.16. Lista över grundläggande tangenttryckningar i Vim

    +---------------------------------------------------------------+
    |     läge      |tangenttryckningar|           åtgärd           |
    |---------------+------------------+----------------------------|
    |NORMAL         |:help|only        |visa hjälpfilen             |
    |---------------+------------------+----------------------------|
    |NORMAL         |:e filnamn.ext    |öppna ny buffert för att    |
    |               |                  |redigera filnamn.ext        |
    |---------------+------------------+----------------------------|
    |NORMAL         |:w                |skriv över aktuell buffert  |
    |               |                  |till originalfilen          |
    |---------------+------------------+----------------------------|
    |NORMAL         |:w filename.ext   |skriv aktuell buffert till  |
    |               |                  |filnamn.ext                 |
    |---------------+------------------+----------------------------|
    |NORMAL         |:q                |avsluta vim                 |
    |---------------+------------------+----------------------------|
    |NORMAL         |:q!               |tvinga att avsluta vim      |
    |---------------+------------------+----------------------------|
    |NORMAL         |:only             |stäng alla andra öppna      |
    |               |                  |fönster                     |
    |---------------+------------------+----------------------------|
    |NORMAL         |:set nocompatible?|kontrollera om vim är i det |
    |               |                  |sunda icke-kompatibla läget |
    |---------------+------------------+----------------------------|
    |NORMAL         |:set nocompatible |ställa in vim till det sunda|
    |               |                  |icke-kompatibla läget       |
    |---------------+------------------+----------------------------|
    |NORMAL         |i                 |gå till INSERT-läget        |
    |---------------+------------------+----------------------------|
    |NORMAL         |R                 |gå till REPLACE-läget       |
    |---------------+------------------+----------------------------|
    |NORMAL         |v                 |gå till VISUAL-läget        |
    |---------------+------------------+----------------------------|
    |NORMAL         |V                 |gå in i det linjära         |
    |               |                  |VISUAL-läget                |
    |---------------+------------------+----------------------------|
    |NORMAL         |Ctrl-V            |gå in i det blockvisa       |
    |               |                  |VISUAL-läget                |
    |---------------+------------------+----------------------------|
    |utom           |ESC-tangent       |gå till NORMAL-läge         |
    |TERMINAL-JOB   |                  |                            |
    |---------------+------------------+----------------------------|
    |NORMAL         |:term             |gå till läget TERMINAL-JOB  |
    |---------------+------------------+----------------------------|
    |TERMINAL-NORMAL|i                 |gå till läget TERMINAL-JOB  |
    |---------------+------------------+----------------------------|
    |TERMINAL-JOB   |Ctrl-W N (eller   |gå till läget               |
    |               |Ctrl-\ Ctrl-N)    |TERMINAL-NORMAL             |
    |---------------+------------------+----------------------------|
    |TERMINAL-JOB   |Ctrl-W :          |gå in i Ex-läge i           |
    |               |                  |TERMINAL-NORMAL-läge        |
    +---------------------------------------------------------------+


    Använd programmet "vimtutor" för att lära dig vim genom en
    interaktiv handledningskurs.

    Programmet vim ändrar sitt beteende för inmatade
    tangenttryckningar baserat på läge. Att skriva in
    tangenttryckningar till bufferten görs mest i INFOGNING-läge och
    ERSÄTT-läge. Flyttning av markören görs mestadels i NORMAL-läge.
    Interaktiva val görs i VISUELLT-läge. Om du skriver ":" i
    NORMAL-läge ändras läget till Ex-läget. Ex-läget accepterar
    kommandon.

    Tips

    Vim levereras med Netrw-paketet. Netrw stöder läsning av filer,
    skrivning av filer, bläddring i kataloger över ett nätverk och
    lokal bläddring! Prova Netrw med "vim ." (en punkt som argument)
    och läs dess manual på ":help netrw".

    För avancerad konfiguration av vim, se Avsnitt 9.2, ”Anpassa vim”
    .

1.4.9. Registrering av skalets aktiviteter

    Utdata från shell-kommandot kan rulla bort från skärmen och gå
    förlorade för alltid. Det är bra att logga shell-aktiviteter i
    filen så att du kan granska dem senare. Den här typen av
    dokumentation är viktig när du utför systemadministrativa
    uppgifter.

    Tips

    Den nya Vim (version>=8.2) kan användas för att spela in
    skalaktiviteterna på ett rent sätt med hjälp av
    TERMINAL-JOB-läget. Se Avsnitt 1.4.8, ”Använda vim”.

    Den grundläggande metoden för att registrera skalaktiviteten är
    att köra den under script(1).

    Försök till exempel med följande

    $ script
    Script started, file is typescript

    Utför de shell-kommandon som finns i skriptet.

    Tryck på Ctrl-D för att avsluta skriptet.

    $ vim typescript

    Se Avsnitt 9.1.1, ”Spela in skalaktiviteterna på ett rent sätt”.

1.4.10. Grundläggande Unix-kommandon

    Låt oss lära oss grundläggande Unix-kommandon. Här använder jag
    "Unix" i dess generiska betydelse. Alla Unix-klonade
    operativsystem erbjuder vanligtvis motsvarande kommandon.
    Debian-systemet är inget undantag. Oroa dig inte om vissa
    kommandon inte fungerar som du önskar nu. Om alias används i
    skalet är motsvarande kommandoutgångar annorlunda. De här
    exemplen är inte avsedda att utföras i den här ordningen.

    Prova alla följande kommandon från det icke-privilegierade
    användarkontot.

    Tabell 1.17. Lista över grundläggande Unix-kommandon

    +---------------------------------------------------------------+
    |  kommando  |                   beskrivning                    |
    |------------+--------------------------------------------------|
    |pwd         |visningsnamn för aktuell katalog/arbetskatalog    |
    |------------+--------------------------------------------------|
    |whoami      |visa aktuellt användarnamn                        |
    |------------+--------------------------------------------------|
    |id          |visa aktuell användaridentitet (namn, uid, gid och|
    |            |tillhörande grupper)                              |
    |------------+--------------------------------------------------|
    |file foo    |visa en filtyp för filen "foo"                    |
    |------------+--------------------------------------------------|
    |type -p     |visa en filplats för kommandot "kommandonamn"     |
    |commandname |                                                  |
    |------------+--------------------------------------------------|
    |which       |, ,                                               |
    |commandname |                                                  |
    |------------+--------------------------------------------------|
    |type        |visa information om kommandot "kommandonamn"      |
    |commandname |                                                  |
    |------------+--------------------------------------------------|
    |apropos     |hitta kommandon relaterade till "nyckelord"       |
    |nyckelord   |                                                  |
    |------------+--------------------------------------------------|
    |man -k      |, ,                                               |
    |nyckelord   |                                                  |
    |------------+--------------------------------------------------|
    |whatis      |visa en förklaring på en rad för kommandot "      |
    |kommandonamn|kommandonamn"                                     |
    |------------+--------------------------------------------------|
    |man -a      |visa förklaring till kommandot "kommandonamn"     |
    |commandname |(Unix-stil)                                       |
    |------------+--------------------------------------------------|
    |info        |visa en ganska lång förklaring på kommandot "     |
    |kommandonamn|kommandonamn" (GNU-stil)                          |
    |------------+--------------------------------------------------|
    |ls          |lista innehållet i en katalog (icke-dot-filer och |
    |            |kataloger)                                        |
    |------------+--------------------------------------------------|
    |ls -a       |lista innehållet i en katalog (alla filer och     |
    |            |kataloger)                                        |
    |------------+--------------------------------------------------|
    |ls -A       |lista innehållet i en katalog (nästan alla filer  |
    |            |och kataloger, d.v.s. hoppa över "..." och ".")   |
    |------------+--------------------------------------------------|
    |ls -la      |lista allt innehåll i katalogen med detaljerad    |
    |            |information                                       |
    |------------+--------------------------------------------------|
    |ls -lai     |lista allt innehåll i katalogen med inode-nummer  |
    |            |och detaljerad information                        |
    |------------+--------------------------------------------------|
    |ls -d       |lista alla kataloger under den aktuella katalogen |
    |------------+--------------------------------------------------|
    |tree        |visa innehållet i filträdet                       |
    |------------+--------------------------------------------------|
    |lsof foo    |lista öppen status för filen "foo"                |
    |------------+--------------------------------------------------|
    |lsof -p pid |lista över filer som öppnats av process-ID: "pid" |
    |------------+--------------------------------------------------|
    |mkdir foo   |skapa en ny katalog "foo" i den aktuella katalogen|
    |------------+--------------------------------------------------|
    |rmdir foo   |ta bort en katalog "foo" i den aktuella katalogen |
    |------------+--------------------------------------------------|
    |            |ändra katalog till katalogen "foo" i den aktuella |
    |cd foo      |katalogen eller i den katalog som anges i         |
    |            |variabeln "$CDPATH"                               |
    |------------+--------------------------------------------------|
    |cd /        |ändra katalog till rotkatalogen                   |
    |------------+--------------------------------------------------|
    |cd          |ändra katalog till den aktuella användarens       |
    |            |hemkatalog                                        |
    |------------+--------------------------------------------------|
    |cd /foo     |ändra katalog till den absoluta sökvägen katalog "|
    |            |/foo"                                             |
    |------------+--------------------------------------------------|
    |cd ..       |ändra katalog till den överordnade katalogen      |
    |------------+--------------------------------------------------|
    |cd ~foo     |ändra katalog till hemkatalogen för användaren "  |
    |            |foo"                                              |
    |------------+--------------------------------------------------|
    |cd -        |ändra katalog till föregående katalog             |
    |------------+--------------------------------------------------|
    |</etc/motd  |visa innehållet i "/etc/motd" med hjälp av        |
    |pager       |standard personsökaren                            |
    |------------+--------------------------------------------------|
    |touch       |skapa en tom fil "skräpfil"                       |
    |junkfile    |                                                  |
    |------------+--------------------------------------------------|
    |cp foo bar  |kopiera en befintlig fil "foo" till en ny fil "bar|
    |            |"                                                 |
    |------------+--------------------------------------------------|
    |rm skräpfil |ta bort en fil "skräpfil"                         |
    |------------+--------------------------------------------------|
    |mv foo bar  |byta namn på en befintlig fil "foo" till ett nytt |
    |            |namn "bar" ("bar" får inte existera)              |
    |------------+--------------------------------------------------|
    |mv foo bar  |flytta en befintlig fil "foo" till en ny plats"bar|
    |            |/foo" (katalogen "bar" måste existera)            |
    |------------+--------------------------------------------------|
    |mv foo bar/ |flytta en befintlig fil "foo" till en ny plats med|
    |baz         |det nya namnet "bar/baz" (katalogen "bar" måste   |
    |            |finnas men katalogen "bar/baz" får inte finnas)   |
    |------------+--------------------------------------------------|
    |chmod 600   |gör en befintlig fil "foo" till att vara          |
    |foo         |icke-läsbar och icke-skrivbar av de andra         |
    |            |personerna (icke-exekverbar för alla)             |
    |------------+--------------------------------------------------|
    |chmod 644   |gör en befintlig fil "foo" så att den blir läsbar |
    |foo         |men inte skrivbar för andra personer (ej          |
    |            |exekverbar för alla)                              |
    |------------+--------------------------------------------------|
    |chmod 755   |gör en befintlig fil "foo" så att den blir läsbar |
    |foo         |men inte skrivbar av andra personer (körbar för   |
    |            |alla)                                             |
    |------------+--------------------------------------------------|
    |find . -name|hitta matchande filnamn med hjälp av shell "      |
    |pattern     |mönster" (långsammare)                            |
    |------------+--------------------------------------------------|
    |locate -d . |hitta matchande filnamn med hjälp av shell "      |
    |pattern     |mönster" (snabbare med hjälp av regelbundet       |
    |            |genererad databas)                                |
    |------------+--------------------------------------------------|
    |grep -e "   |hitta ett "mönster" i alla filer som slutar med   |
    |mönster"    |".html" i den aktuella katalogen och visa dem alla|
    |*.html      |                                                  |
    |------------+--------------------------------------------------|
    |top         |visa processinformation i helskärm, skriv "q" för |
    |            |att avsluta                                       |
    |------------+--------------------------------------------------|
    |ps aux |    |visa information om alla processer som körs med   |
    |pager       |BSD-stil                                          |
    |------------+--------------------------------------------------|
    |ps -ef |    |visa information om alla processer som körs med   |
    |pager       |hjälp av Unix system-V-stil                       |
    |------------+--------------------------------------------------|
    |ps aux |    |                                                  |
    |grep -e "[e]|visa alla processer som körs "exim" och "exim4"   |
    |xim4*"      |                                                  |
    |------------+--------------------------------------------------|
    |ps axf |    |visa information om alla processer som körs med   |
    |pager       |ASCII-bildutskrift                                |
    |------------+--------------------------------------------------|
    |kill 1234   |döda en process som identifieras av process-ID:   |
    |            |"1234"                                            |
    |------------+--------------------------------------------------|
    |gzip foo    |komprimera "foo" för att skapa"foo.gz" med hjälp  |
    |            |av Lempel-Ziv-kodning (LZ77)                      |
    |------------+--------------------------------------------------|
    |gunzip foo  |dekomprimera"foo.gz" för att skapa "foo"          |
    |.gz         |                                                  |
    |------------+--------------------------------------------------|
    |            |komprimera "foo" för att skapa"foo.bz2" med       |
    |bzip2 foo   |Burrows-Wheeler blocksorteringsalgoritm för       |
    |            |textkomprimering och Huffman-kodning (bättre      |
    |            |komprimering än gzip)                             |
    |------------+--------------------------------------------------|
    |bunzip2 foo |dekomprimera"foo.bz2" för att skapa "foo"         |
    |.bz2        |                                                  |
    |------------+--------------------------------------------------|
    |            |komprimera "foo" för att skapa"foo.xz" med hjälp  |
    |xz foo      |av Lempel-Ziv-Markov-kedjealgoritmen (bättre      |
    |            |komprimering än bzip2)                            |
    |------------+--------------------------------------------------|
    |unxz foo.xz |dekomprimera"foo.xz" för att skapa "foo"          |
    |------------+--------------------------------------------------|
    |tar -xvf foo|extrahera filer från arkivet"foo.tar"             |
    |.tar        |                                                  |
    |------------+--------------------------------------------------|
    |tar -xvzf   |extrahera filer från gzippat"foo.tar.gz"-arkiv    |
    |foo.tar.gz  |                                                  |
    |------------+--------------------------------------------------|
    |tar -xvjf   |extrahera filer från arkivet"foo.tar.bz2"         |
    |foo.tar.bz2 |                                                  |
    |------------+--------------------------------------------------|
    |tar -xvJf   |extrahera filer från arkivet"foo.tar.xz"          |
    |foo.tar.xz  |                                                  |
    |------------+--------------------------------------------------|
    |tar -cvf foo|arkivera innehållet i mappen"bar/" i arkivet"foo  |
    |.tar bar/   |.tar"                                             |
    |------------+--------------------------------------------------|
    |tar -cvzf   |arkivera innehållet i mappen"bar/" i det          |
    |foo.tar.gz  |komprimerade arkivet"foo.tar.gz"                  |
    |bar/        |                                                  |
    |------------+--------------------------------------------------|
    |tar -cvjf   |arkivera innehållet i mappen"bar/" i arkivet"foo  |
    |foo.tar.bz2 |.tar.bz2"                                         |
    |bar/        |                                                  |
    |------------+--------------------------------------------------|
    |tar -cvJf   |arkivinnehållet i mappen"bar/" i arkivet"foo      |
    |foo.tar.xz  |.tar.xz"                                          |
    |bar/        |                                                  |
    |------------+--------------------------------------------------|
    |zcat        |visa innehållet i den komprimerade filen          |
    |README.gz | |"README.gz" med hjälp av standardsökaren          |
    |pager       |                                                  |
    |------------+--------------------------------------------------|
    |zcat        |skapa en fil "foo" med det dekomprimerade         |
    |README.gz > |innehållet i "README.gz"                          |
    |foo         |                                                  |
    |------------+--------------------------------------------------|
    |zcat        |lägg till det dekomprimerade innehållet i         |
    |README.gz >>|"README.gz" i slutet av filen "foo" (om den inte  |
    |foo         |finns, skapa den först)                           |
    +---------------------------------------------------------------+


    Notera

    Unix har en tradition att dölja filnamn som börjar med ".". Det
    är vanligtvis filer som innehåller konfigurationsinformation och
    användarinställningar.

    För cd-kommando, se builtins(7).

    Standard personsökaren i Debian-systemet med bara ben är more(1)
    som inte kan rulla tillbaka. Genom att installera less-paketet
    med kommandoraden "apt-get install less", blir less(1) standard
    personsökare och du kan bläddra tillbaka med markörknapparna.

    "[" och "]" i det reguljära uttrycket i kommandot "ps aux | grep
    -e "[e]xim4*"" ovan gör att grep undviker att matcha sig själv.
    "4*" i det reguljära uttrycket betyder 0 eller fler upprepningar
    av tecknet "4", vilket gör att grep kan matcha både "exim" och
    "exim4". Även om "*" används i skalets filnamnsglob och i det
    reguljära uttrycket har de olika betydelser. Lär dig det
    reguljära uttrycket från grep(1).

    Gå igenom kataloger och kika in i systemet med hjälp av
    ovanstående kommandon som träning. Om du har frågor om något av
    konsolkommandona kan du läsa manualsidan.

    Försök till exempel med följande

    $ man man
    $ man bash
    $ man builtins
    $ man grep
    $ man ls

    Stilen på man pages kan vara lite svår att vänja sig vid,
    eftersom de är ganska kortfattade, särskilt de äldre, mycket
    traditionella. Men när man väl har vant sig kommer man att
    uppskatta deras kortfattade form.

    Observera att många Unix-liknande kommandon, inklusive de från
    GNU och BSD, visar kortfattad hjälpinformation om du anropar dem
    på något av följande sätt (eller utan några argument i vissa
    fall).

    $ commandname --help
    $ commandname -h

1.5. Det enkla shell-kommandot

    Nu har du en viss känsla för hur man använder Debian-systemet.
    Låt oss titta djupt in i mekanismen för kommandokörning i
    Debiansystemet. Här har jag förenklat verkligheten för
    nybörjaren. Se bash(1) för den exakta förklaringen.

    Ett enkelt kommando är en sekvens av komponenter.

     1. Tilldelning av variabler (valfritt)

     2. Kommando namn

     3. Argument (valfritt)

     4. Omdirigeringar (valfritt: >, >>, <, <<, etc.)

     5. Kontrolloperator (valfritt: && , ||, nyrad, ;, &, (, ) )

1.5.1. Kommandokörning och miljövariabler

    Värdena på vissa miljövariabler ändrar beteendet hos vissa
    Unix-kommandon.

    Standardvärdena för miljövariablerna fastställs initialt av
    PAM-systemet och sedan kan vissa av dem återställas av vissa
    tillämpningsprogram.

      * PAM-systemet, t.ex. pam_env, kan ställa in miljövariabler med
        /etc/pam.conf", "/etc/environment" och "/etc/default/locale".

      * The modern GUI environment run from the user mode systemd
        unit (see systemd.unit(5)) sets its environment variables by
        a file in the "~/.config/environment.d/" directory.

      * Den användarspecifika programinitialiseringen kan återställa
        miljövariabler genom "~/.profile", "~/.bash_profile" och "~
        /.bashrc".

1.5.2. Variabeln "$LANG"

    Standardlokalen definieras i miljövariabeln "$LANG" och
    konfigureras som "LANG=xx_YY.UTF-8" av installationsprogrammet
    eller av den efterföljande grafiska gränssnittskonfigurationen,
    t.ex. "Inställningar" → "Region och språk" → "Språk" / "Format"
    för GNOME.

    Notera

    Jag rekommenderar att du för tillfället bara konfigurerar
    systemmiljön med variabeln "$LANG" och håller dig borta från
    variablerna "$LC_*" om det inte är absolut nödvändigt.

    Det fullständiga locale-värdet som ges till variabeln "$LANG"
    består av 3 delar: "xx_YY.ZZZZ".

    Tabell 1.18. De 3 delarna av locale-värdet

    +--------------------------------------------------------+
    |lokalt värde|                 betydelse                 |
    |------------+-------------------------------------------|
    |xx          |ISO 639 språkkoder (gemener) som t.ex. "en"|
    |------------+-------------------------------------------|
    |YY          |ISO 3166 landskoder (versaler), t.ex. "US" |
    |------------+-------------------------------------------|
    |ZZZZ        |codeset, alltid inställd på "UTF-8"        |
    +--------------------------------------------------------+


    Tabell 1.19. Lista över lokala rekommendationer

    +-----------------------------------------------------+
    |lokal rekommendation|         Språk (område)         |
    |--------------------+--------------------------------|
    |en_US.UTF-8         |Engelska (USA)                  |
    |--------------------+--------------------------------|
    |en_GB.UTF-8         |Engelska (Storbritannien)       |
    |--------------------+--------------------------------|
    |fr_FR.UTF-8         |Franska (Frankrike)             |
    |--------------------+--------------------------------|
    |de_DE.UTF-8         |Tyska (Tyskland)                |
    |--------------------+--------------------------------|
    |it_IT.UTF-8         |Italien (Italienska)            |
    |--------------------+--------------------------------|
    |es_ES.UTF-8         |Spanien (Spanska)               |
    |--------------------+--------------------------------|
    |ca_ES.UTF-8         |Katalanska (Spanien)            |
    |--------------------+--------------------------------|
    |sv_SE.UTF-8         |Svenska (Sverige)               |
    |--------------------+--------------------------------|
    |pt_BR.UTF-8         |Portugisiska (Brasiliansk)      |
    |--------------------+--------------------------------|
    |ru_RU.UTF-8         |Ryska (Ryssland)                |
    |--------------------+--------------------------------|
    |zh_CN.UTF-8         |Kinesiska (f.d. republiken Kina)|
    |--------------------+--------------------------------|
    |zh_TW.UTF-8         |Kinesiska (Taiwan R.O.C.)       |
    |--------------------+--------------------------------|
    |ja_JP.UTF-8         |Japanska (Japan)                |
    |--------------------+--------------------------------|
    |ko_KR.UTF-8         |Koreanska (Republiken Korea)    |
    |--------------------+--------------------------------|
    |vi_VN.UTF-8         |Vietnamesiska (Vietnam)         |
    +-----------------------------------------------------+


    Ett typiskt kommando utförs med en skalradsekvens enligt
    följande.

    $ echo $LANG
    en_US.UTF-8
    $ date -u
    Wed 19 May 2021 03:18:43 PM UTC
    $ LANG=fr_FR.UTF-8 date -u
    mer. 19 mai 2021 15:19:02 UTC

    Här körs programmet date(1) med olika locale-värden.

      * För det första kommandot är "$LANG" inställt på systemets
        standardvärde för locale "en_US.UTF-8".
   
      * För det andra kommandot sätts "$LANG" till det franska
        UTF-8-lokalvärdet "fr_FR.UTF-8".

    De flesta kommandokörningar har vanligtvis inte någon föregående
    miljövariabeldefinition. I exemplet ovan kan du alternativt köra
    kommandot på följande sätt.

    $ LANG=fr_FR.UTF-8
    $ date -u
    mer. 19 mai 2021 15:19:24 UTC

    Tips

    När du lämnar in en felrapport är det en bra idé att köra och
    kontrollera kommandot under "en_US.UTF-8"-lokal om du använder en
    icke-engelsk miljö.

    För mer detaljerad information om locale-konfigurationen, se
    Avsnitt 8.1, ”Lokalen”.

1.5.3. Variabeln "$PATH"

    När du skriver in ett kommando i skalet söker skalet efter
    kommandot i listan över kataloger som finns i miljövariabeln
    "$PATH". Värdet på miljövariabeln "$PATH" kallas också för
    skalets sökväg.

    I standardinstallationen av Debian kanske miljövariabeln "$PATH"
    för användarkonton inte inkluderar "/usr/sbin" och "/usr/sbin".
    Till exempel måste kommandot ifconfig utfärdas med fullständig
    sökväg som "/usr/sbin/ifconfig". (Liknande ip-kommando finns i "/
    usr/bin".)

    Du kan ändra miljövariabeln "$PATH" i Bash-skalet med filerna "~
    /.bash_profile" eller "~/.bashrc".

1.5.4. Variabeln "$HOME"

    Många kommandon lagrar användarspecifik konfiguration i
    hemkatalogen och ändrar sitt beteende med hjälp av innehållet.
    Hemkatalogen identifieras av miljövariabeln "$HOME".

    Tabell 1.20. Lista över "$HOME"-värden

    +---------------------------------------------------------------+
    |  värdet av  |          programgenomförande situation          |
    |   "$HOME"   |                                                 |
    |-------------+-------------------------------------------------|
    |/            |program som körs av init-processen (daemon)      |
    |-------------+-------------------------------------------------|
    |/root        |program som körs från det normala rotskalet      |
    |-------------+-------------------------------------------------|
    |/home/       |program som körs från det vanliga användarskalet |
    |normal_user  |                                                 |
    |-------------+-------------------------------------------------|
    |/home/       |programmet körs från den vanliga                 |
    |normal_user  |GUI-skrivbordsmenyn för användare                |
    |-------------+-------------------------------------------------|
    |/home/       |program körs som root med "sudo program"         |
    |normal_user  |                                                 |
    |-------------+-------------------------------------------------|
    |/root        |program körs som root med "sudo -H program"      |
    +---------------------------------------------------------------+


    Tips

    Shell expanderar "~/" till den aktuella användarens hemkatalog,
    dvs. "$HOME/". Shell expanderar "~foo/" till foos hemkatalog,
    dvs. "/home/foo/".

    Se Avsnitt 12.1.5, ”Shell-miljövariabler” om $HOME inte är
    tillgängligt för ditt program.

1.5.5. Alternativ för kommandoraden

    Vissa kommandon tar emot argument. Argument som börjar med "-"
    eller "--" kallas alternativ och styr kommandots beteende.

    $ date
    Thu 20 May 2021 01:08:08 AM JST
    $ date -R
    Thu, 20 May 2021 01:08:12 +0900

    Här ändrar kommandoradsargumentet "-R" date(1)-beteendet så att
    datumsträngen matas ut i enlighet med RFC2822.

1.5.6. Skal glob

    Ofta vill man att ett kommando ska fungera med en grupp filer
    utan att man behöver skriva in dem alla.
    Filnamnsexpansionsmönstret med hjälp av shell glob, (ibland
    kallat wildcards), underlättar detta behov.

    Tabell 1.21. Mönster för skalglob

    +---------------------------------------------------------------+
    |skalglobsmönster|        beskrivning av matchningsregel        |
    |----------------+----------------------------------------------|
    |*               |filnamnet (segmentet) börjar inte med "."     |
    |----------------+----------------------------------------------|
    |                |filename (segment) started with "." (in Bash  |
    |.*              |5.2 and later, "." and ".." are excluded by   |
    |                |default)                                      |
    |----------------+----------------------------------------------|
    |?               |exakt ett tecken                              |
    |----------------+----------------------------------------------|
    |[…]             |exakt ett tecken med alla tecken inom parentes|
    |----------------+----------------------------------------------|
    |[a-z]           |exakt ett tecken med valfritt tecken mellan   |
    |                |"a" och "z"                                   |
    |----------------+----------------------------------------------|
    |[^…]            |exakt ett annat tecken än något tecken inom   |
    |                |parentes (utom "^")                           |
    +---------------------------------------------------------------+


    Försök till exempel med följande

    $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt
    $ echo *.txt
    1.txt 2.txt
    $ echo *
    1.txt 2.txt 3.c 4.h
    $ echo *.[hc]
    3.c 4.h
    $ echo .*
    .5.txt ..6.txt
    $ echo .*[^.]*
    .5.txt ..6.txt
    $ echo [^1-3]*
    4.h
    $ cd ..; rm -rf junk

    Se glob(7).

    Notera

    Till skillnad från normal filnamnsexpansion av skalet, matchar
    skalmönstret "*" som testas i find(1) med "-name" test etc., det
    inledande "." i filnamnet. (Ny POSIX-funktion )

    Notera

    BASH kan anpassas för att ändra globbeteendet med de inbyggda
    alternativen i shopt, t.ex. "dotglob", "noglob", "nocaseglob",
    "nullglob", "extglob" osv. Se bash(1).

1.5.7. Returvärde för kommandot

    Varje kommando returnerar sin exit-status (variabel: "$?") som
    returvärde.

    Tabell 1.22. Kommandots utgångskoder

    +--------------------------------------------------------------+
    |kommando Utgångsstatus|numeriskt returvärde|logiskt returvärde|
    |----------------------+--------------------+------------------|
    |lyckades              |noll, 0             |SANT              |
    |----------------------+--------------------+------------------|
    |fel                   |ej noll, -1         |FALSK             |
    +--------------------------------------------------------------+


    Försök till exempel med följande.

    $ [ 1 = 1 ] ; echo $?
    0
    $ [ 1 = 2 ] ; echo $?
    1

    Notera

    Observera att i det logiska sammanhanget för skalet behandlas 
    framgång som det logiska TRUE som har 0 (noll) som sitt värde.
    Detta är något icke-intuitivt och behöver påminnas om här.

1.5.8. Typiska kommandosekvenser och omdirigering av skal

    Låt oss försöka komma ihåg följande shell-kommandon som skrivs på
    en rad som en del av shell-kommandot.

    Tabell 1.23. Idiom för Shell-kommandon

    +---------------------------------------------------------------+
    | kommando |                    beskrivning                     |
    |  idiom   |                                                    |
    |----------+----------------------------------------------------|
    |command & |bakgrundskörning av kommando i underskalet          |
    |----------+----------------------------------------------------|
    |kommando1 |Använd pipe för standard ut från kommando1 till     |
    ||         |standard in från kommando2 (samtidig körning)       |
    |kommando2 |                                                    |
    |----------+----------------------------------------------------|
    |command1  |skicka både standardutdata och standardfel från     |
    |2>&1 |    |kommando1 till standardinmatningen för kommando2    |
    |command2  |(samtidig körning)                                  |
    |----------+----------------------------------------------------|
    |command1 ;|utföra kommando1 och kommando2 sekventiellt         |
    |command2  |                                                    |
    |----------+----------------------------------------------------|
    |command1 &|kör kommando1; om det lyckas, kör kommando2         |
    |& command2|sekventiellt (returnerar success om både kommando1  |
    |          |och kommando2 lyckas)                               |
    |----------+----------------------------------------------------|
    |command1 ||kör kommando1; om det inte lyckas, kör kommando2    |
    || command2|sekventiellt (returnerar success om kommando1 eller |
    |          |kommando2 lyckas)                                   |
    |----------+----------------------------------------------------|
    |command > |omdirigera kommandots standardutdata till en fil foo|
    |foo       |(överskriva)                                        |
    |----------+----------------------------------------------------|
    |command 2>|omdirigera kommandots standardfel till en fil foo   |
    |foo       |(överskriva)                                        |
    |----------+----------------------------------------------------|
    |command >>|omdirigera standardutdata från kommandot till en fil|
    |foo       |foo (append)                                        |
    |----------+----------------------------------------------------|
    |command   |omdirigera kommandots standardfel till en fil foo   |
    |2>> foo   |(append)                                            |
    |----------+----------------------------------------------------|
    |command > |omdirigera både standardutdata och standardfel för  |
    |foo 2>&1  |kommandot till en fil foo                           |
    |----------+----------------------------------------------------|
    |command < |omdirigera kommandots standardinmatning till en fil |
    |foo       |foo                                                 |
    |----------+----------------------------------------------------|
    |command <<|omdirigera kommandots standardinmatning till        |
    |delimiter |följande rader tills "delimiter" uppfylls (här      |
    |          |dokument)                                           |
    |----------+----------------------------------------------------|
    |command   |omdirigera kommandots standardinmatning till        |
    |<<-       |följande rader tills "delimiter" uppfylls (här      |
    |delimiter |dokument, de inledande tabbtecknen tas bort från    |
    |          |inmatningsraderna)                                  |
    +---------------------------------------------------------------+


    Debian-systemet är ett multitasking-system. Bakgrundsjobb gör det
    möjligt för användare att köra flera program i ett enda skal.
    Hanteringen av bakgrundsprocessen involverar skalets inbyggda
    funktioner: jobs, fg, bg och kill. Läs avsnitten i bash(1) under
    "SIGNALER" och "JOBBKONTROLL" och builtins(1).

    Försök till exempel med följande

    $ </etc/motd pager

    $ pager </etc/motd

    $ pager /etc/motd

    $ cat /etc/motd | pager

    Även om alla fyra exemplen på omdirigeringar av skal visar samma
    sak, kör det sista exemplet ett extra cat-kommando och slösar
    resurser utan anledning.

    Med skalet kan du öppna filer med hjälp av den inbyggda
    funktionen exec med en godtycklig filbeskrivare.

    $ echo Hello >foo
    $ exec 3<foo 4>bar  # open files
    $ cat <&3 >&4       # redirect stdin to 3, stdout to 4
    $ exec 3<&- 4>&-    # close files
    $ cat bar
    Hello

    Filbeskrivarna 0-2 är fördefinierade.

    Tabell 1.24. Fördefinierade filbeskrivare

    +--------------------------------------+
    |enhet |   beskrivning   |filbeskrivare|
    |------+-----------------+-------------|
    |stdin |standardinmatning|0            |
    |------+-----------------+-------------|
    |stdout|standardutgång   |1            |
    |------+-----------------+-------------|
    |stderr|standardfel      |2            |
    +--------------------------------------+


1.5.9. Kommando alias

    Du kan ställa in ett alias för ett ofta använt kommando.

    Försök till exempel med följande

    $ alias la='ls -la'

    Nu fungerar "la" som en förkortning av "ls -la" som listar alla
    filer i formatet "long listing".

    Du kan lista alla befintliga alias med alias (se bash(1) under
    "SHELL BUILTIN COMMANDS").

    $ alias
    ...
    alias la='ls -la'

    Du kan identifiera den exakta sökvägen eller identiteten för
    kommandot efter typ (se bash(1) under "SHELL BUILTIN COMMANDS").

    Försök till exempel med följande

    $ type ls
    ls is hashed (/bin/ls)
    $ type la
    la is aliased to ls -la
    $ type echo
    echo is a shell builtin
    $ type file
    file is /usr/bin/file

    Här söktes ls nyligen medan "file" inte gjorde det, så "ls" är
    "hashed", dvs. skalet har ett internt register för snabb åtkomst
    till platsen för kommandot "ls".

    Tips
   
    Se Avsnitt 9.3.6, ”Färgade kommandon”.

1.6. Unix-liknande textbehandling

    I Unix-liknande arbetsmiljöer sker textbearbetningen genom att
    texten skickas genom kedjor av standardverktyg för
    textbearbetning. Detta var en annan viktig Unix-innovation.

1.6.1. Unix textverktyg

    Det finns ett fåtal standardverktyg för textbehandling som
    används mycket ofta i Unix-liknande system.

      * Inget reguljärt uttryck används:

          + cat(1) sammanfogar filer och skriver ut hela innehållet.

          + tac(1) sammanfogar filer och matar ut dem i omvänd
            ordning.

          + cut(1) väljer ut delar av rader och utdata.

          + head(1) matar ut den första delen av filerna.

          + tail(1) matar ut den sista delen av filer.

          + sort(1) sorterar rader i textfiler.

          + uniq(1) tar bort dubbletter av rader från en sorterad
            fil.

          + tr(1) översätter eller raderar tecken.

          + diff(1) jämför filer rad för rad.

      * Grundläggande reguljära uttryck(BRE) används som standard:

          + ed(1) är en primitiv linjeeditor.
   
          + sed(1) är en strömredigerare.

          + grep(1) matchar text med mönster.

          + vim(1) är en skärmredigerare.

          + emacs(1) är en skärmredigerare. (något utökad BRE)

      * Utökat reguljärt uttryck(ERE) används:

          + awk(1) gör enkel textbearbetning.

          + egrep(1) matchar text med mönster.

          + tcl(3tcl) kan göra all tänkbar textbehandling: Se
            re_syntax(3). Används ofta med tk(3tk).

          + perl(1) kan göra all tänkbar textbehandling. Se perlre
            (1).

          + pcre2grep(1) från pcregrep-paketet matchar text med Perl
            Compatible Regular Expressions (PCRE) -mönster.

          + python(1) med modulen re kan göra all tänkbar
            textbehandling. Se "/usr/share/doc/python/html/
            index.html".

    Om du inte är säker på exakt vad dessa kommandon gör kan du
    använda "man command" för att ta reda på det själv.

    Notera

    Sorteringsordning och intervalluttryck är lokalberoende. Om du
    vill att ett kommando ska fungera på traditionellt sätt ska du
    använda C locale eller C.UTF-8 locale i stället för normala UTF-8
    locale (se Avsnitt 8.1, ”Lokalen”).

    Notera

    Reguljära uttryck i Perl(perlre(1)), Perl Compatible Regular
    Expressions (PCRE) och reguljära uttryck i Python som erbjuds av
    modulen re har många gemensamma tillägg till den normala ERE.

1.6.2. Vanliga uttryck

    Reguljära uttryck används i många textbehandlingsverktyg. De är
    analoga med shell globs, men de är mer komplicerade och
    kraftfulla.

    Det reguljära uttrycket beskriver matchningsmönstret och består
    av texttecken och metatecken.

    Ett metatecken är bara ett tecken med en speciell betydelse. Det
    finns två huvudstilar, BRE och ERE, beroende på textverktygen
    enligt beskrivningen ovan.

    Tabell 1.25. Metatecken för BRE och ERE

    +---------------------------------------------------------------+
    |  BRE   | ERE  |    beskrivning av det reguljära uttrycket     |
    |--------+------+-----------------------------------------------|
    |\ . [ ] |\ . [ |                                               |
    |^ $ *   |] ^ $ |gemensamma metatecken                          |
    |        |*     |                                               |
    |--------+------+-----------------------------------------------|
    |\+ \? \(|      |                                               |
    |\) \{ \}|      |BRE endast "\" escapade metatecken             |
    |\|      |      |                                               |
    |--------+------+-----------------------------------------------|
    |        |+ ? ( |                                               |
    |        |) { } |ERE endast icke-"\"-escapade metatecken        |
    |        ||     |                                               |
    |--------+------+-----------------------------------------------|
    |c       |c     |matcha icke-metatecken "c"                     |
    |--------+------+-----------------------------------------------|
    |\c      |\c    |matcha ett bokstavligt tecken "c" även om "c"  |
    |        |      |är metatecken själv                            |
    |--------+------+-----------------------------------------------|
    |.       |.     |matcha alla tecken inklusive ny rad            |
    |--------+------+-----------------------------------------------|
    |^       |^     |position i början av en sträng                 |
    |--------+------+-----------------------------------------------|
    |$       |$     |position i slutet av en sträng                 |
    |--------+------+-----------------------------------------------|
    |\<      |\<    |position i början av ett ord                   |
    |--------+------+-----------------------------------------------|
    |\>      |\>    |position i slutet av ett ord                   |
    |--------+------+-----------------------------------------------|
    |[abc…]  |[abc…]|matcha alla tecken i "abc..."                  |
    |--------+------+-----------------------------------------------|
    |[^abc…] |[^    |matcha alla tecken utom i "abc..."             |
    |        |abc…] |                                               |
    |--------+------+-----------------------------------------------|
    |r*      |r*    |matcha noll eller flera reguljära uttryck som  |
    |        |      |identifieras av "r"                            |
    |--------+------+-----------------------------------------------|
    |r\+     |r+    |matcha ett eller flera reguljära uttryck som   |
    |        |      |identifieras av "r"                            |
    |--------+------+-----------------------------------------------|
    |r\?     |r?    |matcha noll eller ett reguljärt uttryck som    |
    |        |      |identifieras av "r"                            |
    |--------+------+-----------------------------------------------|
    |r1\|r2  |r1|r2 |matcha ett av de reguljära uttryck som         |
    |        |      |identifieras av "r1" eller "r2"                |
    |--------+------+-----------------------------------------------|
    |\(r1\|r2|(r1|  |matcha ett av de reguljära uttryck som         |
    |\)      |r2)   |identifieras av "r1" eller "r2" och behandla   |
    |        |      |det som ett reguljärt uttryck inom parentes    |
    +---------------------------------------------------------------+


    Det reguljära uttrycket för emacs är i princip BRE men har
    utökats till att behandla "+" och "?" som metatecken som i ERE.
    Det finns alltså inget behov av att undkomma dem med "\" i det
    reguljära uttrycket i emacs.

    grep(1) kan användas för att utföra en textsökning med hjälp av
    ett reguljärt uttryck.

    Försök till exempel med följande

    $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
    GNU GENERAL PUBLIC LICENSE
    GNU GENERAL PUBLIC LICENSE
    Yoyodyne, Inc., hereby disclaims all copyright interest in the program

    Tips
   
    Se Avsnitt 9.3.6, ”Färgade kommandon”.

1.6.3. Ersättningsuttryck

    För ersättningsuttrycket har vissa tecken särskilda betydelser.

    Tabell 1.26. Ersättningsuttrycket

    +---------------------------------------------------------------+
    |ersättningsuttryck|  beskrivning av den text som ska ersätta   |
    |                  |            ersättningsuttrycket            |
    |------------------+--------------------------------------------|
    |&                 |vad det reguljära uttrycket matchade (använd|
    |                  |\& i emacs)                                 |
    |------------------+--------------------------------------------|
    |\n                |vad det n:te reguljära uttrycket inom       |
    |                  |parentes matchade ("n" är ett nummer)       |
    +---------------------------------------------------------------+


    För ersättningssträngar i Perl används "$&" i stället för "&" och
    "$n" i stället för "\n".

    Försök till exempel med följande

    $ echo zzz1abc2efg3hij4 | \
    sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
    zzzefg3hij4===1abc
    $ echo zzz1abc2efg3hij4 | \
    sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/'
    zzzefg3hij4===1abc
    $ echo zzz1abc2efg3hij4 | \
    perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
    zzzefg3hij4===1abc

    Här bör du vara extra uppmärksam på stilen för det 
    parentesförsedda reguljära uttrycket och hur de matchade
    strängarna används i textutbytesprocessen i olika verktyg.

    Dessa reguljära uttryck kan också användas för markörrörelser och
    textutbyte i vissa redigeringsverktyg.

    Det bakre snedstrecket "\" i slutet av raden i
    shell-kommandoraden undviker newline som ett tecken för vitt
    utrymme och fortsätter inmatningen i shell-kommandoraden till
    nästa rad.

    Läs alla relaterade manualsidor för att lära dig dessa kommandon.

1.6.4. Global substitution med reguljära uttryck

    Kommandot ed(1) kan ersätta alla förekomster av "FROM_REGEX" med
    "TO_TEXT" i "file".

    $ ed file <<EOF
    ,s/FROM_REGEX/TO_TEXT/g
    w
    q
    EOF

    Kommandot sed(1) kan ersätta alla förekomster av "FROM_REGEX" med
    "TO_TEXT" i "file".

    $ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file

    Kommandot vim(1) kan ersätta alla förekomster av "FROM_REGEX" med
    "TO_TEXT" i "file" med hjälp av ex(1)-kommandon.

    $ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file

    Tips
   
    "c"-flaggan i det ovanstående ger en interaktiv bekräftelse för
    varje substitution.

    Flera filer ( "file1", "file2" och "file3") kan bearbetas med
    reguljära uttryck på samma sätt som i vim(1) eller perl(1).

    $ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3

    Tips
   
    Flaggan "e" i ovanstående exempel förhindrar att felet "Ingen
    matchning" bryter en mappning.

    $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' file1 file2 file3

    I exemplet med perl(1) står "-i" för redigering på plats av varje
    målfil och "-p" för en implicit loop över alla givna filer.

    Tips

    Om du använder argumentet "-i.bak" i stället för "-i" behålls
    varje originalfil genom att ".bak" läggs till i filnamnet. Detta
    gör det lättare att återställa fel vid komplexa utbyten.

    Notera
   
    ed(1) och vim(1) är BRE; perl(1) är ERE.

1.6.5. Extrahera data från textfilstabell

    Låt oss betrakta en textfil som heter "DPL" i vilken några
    Debian-projektledares namn från före 2004 och deras startdatum
    listas i ett mellanslagsseparerat format.

    Ian     Murdock   August  1993
    Bruce   Perens    April   1996
    Ian     Jackson   January 1998
    Wichert Akkerman  January 1999
    Ben     Collins   April   2001
    Bdale   Garbee    April   2002
    Martin  Michlmayr March   2003

    Tips
   
    Se "En kort historik över Debian" för den senaste historiken över
    Debians ledarskap.

    Awk används ofta för att extrahera data från den här typen av
    filer.

    Försök till exempel med följande

    $ awk '{ print $3 }' <DPL                   # month started
    August
    April
    January
    January
    April
    April
    March
    $ awk '($1=="Ian") { print }' <DPL          # DPL called Ian
    Ian     Murdock   August  1993
    Ian     Jackson   January 1998
    $ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
    April 1996

    Skal som Bash kan också användas för att analysera den här typen
    av filer.

    Försök till exempel med följande

    $ while read first last month year; do
        echo $month
      done <DPL
    ... same output as the first Awk example

    Här använder det inbyggda kommandot read tecken i "$IFS"
    (internal field separators) för att dela upp rader i ord.

    Om du ändrar "$IFS" till ":" kan du analysera "/etc/passwd" på
    ett snyggt sätt med shell.

    $ oldIFS="$IFS"   # save old value
    $ IFS=':'
    $ while read user password uid gid rest_of_line; do
        if [ "$user" = "bozo" ]; then
          echo "$user's ID is $uid"
        fi
      done < /etc/passwd
    bozo's ID is 1000
    $ IFS="$oldIFS"   # restore old value

    (Om Awk används för att göra motsvarande, använd "FS=':'" för att
    ange fältseparatorn)

    IFS används också av skalet för att dela upp resultat av
    parameterutvidgning, kommandosubstitution och aritmetisk
    utbyggnad. Dessa förekommer inte inom dubbel- eller enkelciterade
    ord. Standardvärdet för IFS är mellanslag, tabb och ny rad
    kombinerat.

    Var försiktig med att använda detta shell IFS-trick. Konstiga
    saker kan hända, när skalet tolkar vissa delar av skriptet som
    dess input.

    $ IFS=":,"                        # use ":" and "," as IFS
    $ echo IFS=$IFS,   IFS="$IFS"     # echo is a Bash builtin
    IFS=  , IFS=:,
    $ date -R                         # just a command output
    Sat, 23 Aug 2003 08:30:15 +0200
    $ echo $(date -R)                 # sub shell --> input to main shell
    Sat  23 Aug 2003 08 30 36 +0200
    $ unset IFS                       # reset IFS to the default
    $ echo $(date -R)
    Sat, 23 Aug 2003 08:30:50 +0200

1.6.6. Skriptavsnitt för piping-kommandon

    Följande skript gör trevliga saker som en del av en pipe.

    Tabell 1.27. Lista över skriptutdrag för piping-kommandon

    +---------------------------------------------------------------+
    |  skriptutdrag   |             effekt av kommando              |
    | (skriv en rad)  |                                             |
    |-----------------+---------------------------------------------|
    |find /usr -print |hitta alla filer under "/usr"                |
    |-----------------+---------------------------------------------|
    |seq 1 100        |skriv 1 till 100                             |
    |-----------------+---------------------------------------------|
    || xargs -n 1     |kör kommandot upprepade gånger med varje     |
    |command          |objekt från pipe som argument                |
    |-----------------+---------------------------------------------|
    || xargs -n 1 echo|dela upp white-space-separerade objekt från  |
    |                 |pipe i linjer                                |
    |-----------------+---------------------------------------------|
    || xargs echo     |sammanfoga alla linjer från röret till en    |
    |                 |linje                                        |
    |-----------------+---------------------------------------------|
    || grep -e        |extrahera rader från rör som innehåller      |
    |regex_pattern    |regex_mönster                                |
    |-----------------+---------------------------------------------|
    || grep -v -e     |extrahera rader från rör som inte innehåller |
    |regex_pattern    |regex_mönster                                |
    |-----------------+---------------------------------------------|
    || cut -d: -f3 -  |extrahera tredje fältet från pipe separerat  |
    |                 |med ":" (passwd-fil etc.)                    |
    |-----------------+---------------------------------------------|
    || awk '{ print $3|extrahera tredje fältet från pipe separerat  |
    |}'               |med blanksteg                                |
    |-----------------+---------------------------------------------|
    || awk -F'\t' '{  |extrahera tredje fältet från rör separerat   |
    |print $3 }'      |med flik                                     |
    |-----------------+---------------------------------------------|
    || col -bx        |ta bort backspace och expandera tabbar till  |
    |                 |mellanslag                                   |
    |-----------------+---------------------------------------------|
    || expand -       |expandera flikar                             |
    |-----------------+---------------------------------------------|
    || sort| uniq     |sortera och ta bort dubbletter               |
    |-----------------+---------------------------------------------|
    || tr 'A-Z' 'a-z' |konvertera versaler till gemener             |
    |-----------------+---------------------------------------------|
    || tr -d '\n'     |sammanfoga rader till en rad                 |
    |-----------------+---------------------------------------------|
    || tr -d '\r'     |ta bort CR                                   |
    |-----------------+---------------------------------------------|
    || sed 's/^/# /'  |lägg till "#" i början av varje rad          |
    |-----------------+---------------------------------------------|
    || sed 's/\.ext// |ta bort .ext                                 |
    |g'               |                                             |
    |-----------------+---------------------------------------------|
    || sed -n -e 2p   |skriv ut den andra raden                     |
    |-----------------+---------------------------------------------|
    || head -n 2 -    |skriv ut de första 2 raderna                 |
    |-----------------+---------------------------------------------|
    || tail -n 2 -    |skriv ut de 2 sista raderna                  |
    +---------------------------------------------------------------+


    Ett skalskript på en rad kan loopa över många filer med hjälp av
    find(1) och xargs(1) för att utföra ganska komplicerade
    uppgifter. Se Avsnitt 10.1.5, ”Idiom för urval av filer” och
    Avsnitt 9.4.9, ”Upprepa ett kommando loopa över filer”.

    När det blir för komplicerat att använda det interaktiva läget i
    skalet kan du överväga att skriva ett skalskript (se
    Avsnitt 12.1, ”Shell-skriptet”).


---------------------------------------------------------------------

    ^[1] Även den äldre vim kan starta i det sunda läget
    "nocompatible" genom att starta den med alternativet "-N".

Kapitel 2. Debians pakethantering

    Notera

    Detta kapitel är skrivet med antagandet att den senaste stabila
    versionen är codename: trixie.
   
    APT-systemets datakälla kallas i detta dokument för källistan.
    Den kan definieras var som helst i filerna "/etc/apt/
    sources.list", "/etc/apt/sources.list.d/*.list" eller "/etc/apt/
    sources.list.d/*.sources".

2.1. Förutsättningar för Debians pakethantering

2.1.1. Debians system för pakethantering

    Debian är en frivilligorganisation som bygger konsekventa
    distributioner av förkompilerade binära paket med fri programvara
    och distribuerar dem från sitt arkiv.

    Debian-arkivet erbjuds av många fjärranslutna spegelsajter för
    åtkomst via HTTP- och FTP-metoder. Det finns också tillgängligt
    som CD-ROM/DVD.

    Det nuvarande pakethanteringssystemet i Debian som kan utnyttja
    alla dessa resurser är Advanced Packaging Tool (APT).

    Debians pakethanteringssystem, när det används på rätt sätt,
    erbjuder användaren att installera konsekventa uppsättningar av
    binära paket till systemet från arkivet. För närvarande finns det
    78093 paket tillgängliga för arkitekturen amd64.

    Debians pakethanteringssystem har en rik historia och många
    valmöjligheter för användarprogrammet i frontend och metoden för
    arkivåtkomst i backend som ska användas. För närvarande
    rekommenderar vi följande.

      * apt(8) för alla interaktiva kommandoradsoperationer,
        inklusive installation, borttagning och dist-uppgradering av
        paket.

      * apt-get(8) för att anropa Debians pakethanteringssystem från
        skript. Det är också ett reservalternativ när apt inte är
        tillgängligt (ofta med äldre Debian-system).

      * aptitude(8) för ett interaktivt textgränssnitt för att
        hantera de installerade paketen och söka efter tillgängliga
        paket.

    Tabell 2.1. Lista över Debians verktyg för pakethantering

    +---------------------------------------------------------------+
    |       paket       |popcon|storlek|        beskrivning         |
    |-------------------+------+-------+----------------------------|
    |                   |V:904,|       |lågnivåsystem för           |
    |dpkg               |I:1000|6399   |pakethantering för Debian   |
    |                   |      |       |(filbaserat)                |
    |-------------------+------+-------+----------------------------|
    |                   |V:892,|       |APT-frontend för att hantera|
    |apt                |I:1000|4956   |paket med CLI: apt/apt-get/ |
    |                   |      |       |apt-cache                   |
    |-------------------+------+-------+----------------------------|
    |                   |V:32, |       |APT-frontend för interaktiv |
    |aptitude           |I:168 |4621   |hantering av paket med      |
    |                   |      |       |helskärmskonsol: aptitude(8)|
    |-------------------+------+-------+----------------------------|
    |                   |V:37, |       |APT-frontend för att        |
    |tasksel            |I:984 |351    |installera valda uppgifter: |
    |                   |      |       |tasksel(8)                  |
    |-------------------+------+-------+----------------------------|
    |                   |      |       |förbättringspaket för APT   |
    |unattended-upgrades|V:127,|320    |för att möjliggöra          |
    |                   |I:181 |       |automatisk installation av  |
    |                   |      |       |säkerhetsuppgraderingar     |
    |-------------------+------+-------+----------------------------|
    |gnome-software     |V:155,|4707   |Programvarucenter för GNOME |
    |                   |I:259 |       |(GUI APT front-end)         |
    |-------------------+------+-------+----------------------------|
    |synaptic           |V:31, |7788   |grafisk pakethanterare (GTK |
    |                   |I:276 |       |APT front-end)              |
    |-------------------+------+-------+----------------------------|
    |                   |      |       |APT-verktygsprogram:        |
    |apt-utils          |V:414,|1181   |apt-extracttemplates(1),    |
    |                   |I:998 |       |apt-ftparchive(1) och       |
    |                   |      |       |apt-sortpkgs(1)             |
    |-------------------+------+-------+----------------------------|
    |apt-listchanges    |V:396,|562    |verktyg för avisering av    |
    |                   |I:891 |       |paketändringshistorik       |
    |-------------------+------+-------+----------------------------|
    |apt-listbugs       |V:5.2,|512    |listar kritiska buggar före |
    |                   |I:7.1 |       |varje APT-installation      |
    |-------------------+------+-------+----------------------------|
    |                   |V:15, |       |APT-verktyget för           |
    |apt-file           |I:56  |89     |paketsökning -              |
    |                   |      |       |kommandoradsgränssnitt      |
    |-------------------+------+-------+----------------------------|
    |apt-rdepends       |V:0.4,|39     |rekursiv lista över         |
    |                   |I:4.7 |       |paketberoenden              |
    +---------------------------------------------------------------+


2.1.2. Konfiguration av paket

    Här följer några viktiga punkter för paketkonfiguration på
    Debian-systemet.

      * For the modern Desktop environment, rebooting of the system
        after package configuration change and package upgrade is a
        good idea to ensure the system to function properly.

      * Den manuella konfigurationen av systemadministratören
        respekteras. Med andra ord, paketkonfigurationssystemet gör
        ingen påträngande konfiguration för bekvämlighetens skull.

      * Varje paket levereras med ett eget konfigurationsskript med
        standardiserat användargränssnitt som heter debconf(7) för
        att underlätta den första installationen av paketet.

      * Debian-utvecklarna gör sitt bästa för att göra din
        uppgraderingsupplevelse felfri med hjälp av skript för
        paketkonfiguration.

      * Alla funktioner i paketerade program är tillgängliga för
        systemadministratören. Men de som innebär säkerhetsrisker är
        inaktiverade i standardinstallationen.

      * Om du manuellt aktiverar en tjänst med vissa säkerhetsrisker
        är du ansvarig för riskbegränsningen.

      * Esoterisk konfiguration kan aktiveras manuellt av
        systemadministratören. Detta kan skapa störningar med
        populära generiska hjälpprogram för systemkonfigurationen.

2.1.3. Grundläggande försiktighetsåtgärder

    Varning

    Installera inte paket från en slumpmässig blandning av sviter.
    Det bryter förmodligen paketkonsistensen som kräver djup kunskap
    om systemhantering, t.ex. kompilatorns ABI, biblioteksversion,
    tolkfunktioner etc.

    Debian-systemadministratören som är nybörjare bör hålla sig till
    den stable stabila utgåvan av Debian och endast använda
    säkerhetsuppdateringar. Tills du förstår Debiansystemet mycket
    väl, bör du följa följande försiktighetsåtgärder.

      * Inkludera inte testing eller unstable i källistan.

      * Blanda inte standard Debian med andra icke-Debian-arkiv som
        Ubuntu i källistan.

      * Skapa inte "/etc/apt/preferences".

      * Ändra inte standardbeteendet för pakethanteringsverktyg via
        konfigurationsfiler utan att känna till de fullständiga
        konsekvenserna.

      * Installera inte slumpmässiga paket med "dpkg -i 
        random_package".

      * Installera aldrig slumpmässiga paket med "dpkg --force-all -i
        random_package".

      * Radera eller ändra inte filer i "/var/lib/dpkg/".

      * Skriv inte över systemfiler genom att installera program som
        kompilerats direkt från källan.

          + Installera dem i "/usr/local" eller "/opt", om det
            behövs.

    De icke-kompatibla effekter som orsakas av brott mot ovanstående
    försiktighetsåtgärder för Debians pakethanteringssystem kan göra
    ditt system obrukbart.

    Den seriösa Debian-systemadministratören som driver
    verksamhetskritiska servrar bör vidta extra
    försiktighetsåtgärder.

      * Installera inte några paket, inklusive säkerhetsuppdateringar
        från Debian, utan att noggrant testa dem med din specifika
        konfiguration under säkra förhållanden.

          + I slutändan är det du som systemadministratör som är
            ansvarig för ditt system.

          + Debiansystemets långa stabilitetshistoria är ingen
            garanti i sig.

2.1.4. Liv med eviga uppgraderingar

    Observera

    För din produktionsserver rekommenderas den stable sviten med
    säkerhetsuppdateringar. Detsamma gäller för stationära datorer
    som du kan lägga begränsad tid på att administrera.

    Trots mina varningar ovan vet jag att många läsare av detta
    dokument kanske vill köra de nyare testing eller unstable
    sviterna.

    Upplysning med följande räddar en person från den eviga karmiska
    kampen i uppgraderingshelvetet och låter honom nå Debian-nirvana.

    Denna lista är avsedd för den självadministrerade Desktop-miljön.

      * Använd testing eftersom den praktiskt taget är den rullande
        utgåvan som automatiskt hanteras av Debianarkivets
        QA-infrastruktur, såsom Debians kontinuerliga integration,
        praxis för uppladdning av endast källkod och spårning av
        biblioteksövergångar. Paketen i testing uppdateras
        tillräckligt ofta för att erbjuda alla de senaste
        funktionerna.
   
      * Ange kodnamnet som motsvarar testing ( "forky;" under
        utgivningscykeln trixie as stable ) i källistan.

      * Uppdatera kodnamnet i källistan manuellt till det nya
        kodnamnet först efter att du själv har utvärderat situationen
        i ungefär en månad efter att den stora sviten har släppts.
        Debians sändlista för användare och utvecklare är också bra
        informationskällor för detta.

    Det är inte rekommenderat att använda den unstable sviten. Den
    unstable sviten är bra för att felsöka paket som utvecklare men
    tenderar att utsätta dig för onödiga risker vid normal användning
    på skrivbordet. Även om Debiansystemets unstable -svit för det
    mesta ser mycket stabil ut, har det förekommit en del
    paketproblem och några av dem var inte så triviala att lösa.

    Här är några grundläggande försiktighetsåtgärder för att
    säkerställa snabb och enkel återhämtning från buggar i
    Debian-paket.

      * Make the rescue system available by following Avsnitt 3.2,
        ”Rescue system”.

      * Gör systemet dubbelstartbart genom att installera den stable
        delen av Debian-systemet på en annan partition
   
      * Överväg att installera apt-listbugs för att kontrollera
        informationen i Debian Bug Tracking System (BTS) före
        uppgraderingen

      * Lär dig infrastrukturen för paketsystemet tillräckligt för
        att kunna lösa problemet

    Observera
   
    Om du inte kan göra någon av dessa försiktighetsåtgärder är du
    förmodligen inte redo för testing och de unstable sviterna.

2.1.5. Grunderna i Debian-arkivet

    Tips
   
    Debianarkivets officiella policy definieras i Debians
    policyhandbok, kapitel 2 - Debianarkivet.

    Låt oss titta in i Debian-arkivet från en systemanvändares
    perspektiv.

    En systemanvändare får tillgång till Debian-arkivet med hjälp av
    APT-systemet.

    APT-systemet specificerar sin datakälla som källistan och den
    beskrivs i sources.list(5).

    For the trixie system with the typical HTTP access, the source
    list is provided in the modern deb822-style in "/etc/apt/
    sources.list.d/debian.sources" as the following:

    Types: deb deb-src
    URIs: http://deb.debian.org/debian/
    Suites: trixie
    Components: main non-free-firmware contrib non-free
   
    Types: deb deb-src
    URIs: http://security.debian.org/debian-security/
    Suites: trixie-security
    Components: main non-free-firmware contrib non-free

    Tips

    If the source list is provided in the older deprecated
    one-line-style in "/etc/apt/sources.list" or "/etc/apt/
    sources.list.d/*.list" files, update them with:

     $ sudo apt modernize-sources

    Key points of the source list in deb822-style are followings.

      * Dess definitionsfiler finns i filerna "/etc/apt/
        sources.list.d/*.sources".

      * Varje block av rader som åtskiljs av en blankrad definierar
        datakällan för APT-systemet.

      * I strofen "Types:" definieras listan över typer, t.ex. "deb"
        och "deb-src".
   
      * Stanza "URIs:" definierar listan med rot-URI:er för
        Debian-arkivet.

      * I strofen "Suites:" definieras listan över distributionsnamn
        med hjälp av antingen svitnamnet eller kodnamnet.

      * Stanza "Components:" definierar listan över giltiga namn på
        arkivområden i Debian-arkivet.

    Definitionen för "deb-src" kan säkert utelämnas om det bara är
    för aptitude som inte har tillgång till källrelaterade metadata.
    Det påskyndar uppdateringarna av arkivets metadata.

    URL:en kan vara "https://", "http://", "ftp://", "file://", ....

    Rader som börjar med "#" är kommentarer och ignoreras.

    Här brukar jag använda kodnamnet "trixie" eller "forky" istället
    för svitnamnet "stable" eller "testing" för att undvika
    överraskningar när nästa stable släpps.

    Tips

    Om "sid" används i exemplet ovan istället för "trixie", krävs
    inte raden "deb: http://security.debian.org/ ..." eller dess
    deb822-ekvivalenta innehåll för säkerhetsuppdateringar i 
    källistan. Detta beror på att det inte finns något arkiv med
    säkerhetsuppdateringar för "sid"(unstable).

    Här är listan över URL-adresser till Debians arkivplatser och
    svitnamn eller kodnamn som används i konfigurationsfilen efter
    trixie -utgåvan.

    Tabell 2.2. Lista över Debians arkivplatser

    +-------------------------------------------------------------------------------------------+
    |     arkiv URL     |     svitens namn      |        kodnamn        |  syftet med förvaret  |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Quasi-statisk stable   |
    |deb.debian.org/    |stable                 |trixie                 |release efter          |
    |debian/            |                       |                       |omfattande kontroller  |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Dynamisk provning efter|
    |deb.debian.org/    |testing                |forky                  |ordentliga kontroller  |
    |debian/            |                       |                       |och korta väntetider   |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Dynamisk unstable      |
    |deb.debian.org/    |unstable               |sid                    |release efter minimala |
    |debian/            |                       |                       |kontroller och inga    |
    |                   |                       |                       |väntetider             |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Experimenterande av    |
    |deb.debian.org/    |experimental           |N/A                    |utvecklare före        |
    |debian/            |                       |                       |lansering (valfritt,   |
    |                   |                       |                       |endast för utvecklare) |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Uppdateringar för nästa|
    |deb.debian.org/    |stable-proposed-updates|trixie-proposed-updates|stable punktutgåva     |
    |debian/            |                       |                       |(valfritt)             |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |                   |                       |                       |Delmängd av sviten     |
    |http://            |                       |                       |stable-proposed-updates|
    |deb.debian.org/    |stable-updates         |trixie-updates         |som behöver brådskande |
    |debian/            |                       |                       |uppdateringar, t.ex.   |
    |                   |                       |                       |tidszonsdata (valfritt)|
    |-------------------+-----------------------+-----------------------+-----------------------|
    |                   |                       |                       |Slumpmässig samling av |
    |http://            |                       |                       |omkompilerade paket,   |
    |deb.debian.org/    |stable-backports       |trixie-backports       |mestadels från         |
    |debian/            |                       |                       |testversionen          |
    |                   |                       |                       |(valfritt)             |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Säkerhetsuppdateringar |
    |security.debian.org|stable-security        |trixie-security        |för den stable         |
    |/debian-security/  |                       |                       |versionen (viktigt)    |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Detta stöds inte aktivt|
    |security.debian.org|testing-security       |forky-security         |och används inte heller|
    |/debian-security/  |                       |                       |av säkerhetsteamet     |
    +-------------------------------------------------------------------------------------------+


    Observera

    Endast ren stable version med säkerhetsuppdateringar ger den
    bästa stabiliteten. Att köra mestadels stable utgåva blandat med
    några paket från testing eller unstable utgåva är mer riskfyllt
    än att köra en ren unstable utgåva där biblioteksversioner inte
    stämmer etc. Om du verkligen behöver den senaste versionen av
    vissa program under stable utgåva, använd paket från tjänsterna
    stable-updates och backports (se Avsnitt 2.7.4, ”Uppdateringar
    och baksidor”). Dessa tjänster måste användas med extra
    försiktighet.

    Observera

    Du bör i princip bara ange en av sviterna stable, testing eller
    unstable i "deb"-raden. Om du listar en kombination av stable,
    testing och unstable sviter på "deb"-raden blir APT-programmen
    långsammare och endast det senaste arkivet är effektivt. Multipel
    listning är meningsfullt för dessa när filen "/etc/apt/
    preferences" används med tydliga mål (se Avsnitt 2.7.7, ”Justera
    kandidatversionen med apt-pinning”).

    Tips

    För Debian-systemet med den stable sviten är det en bra idé att
    inkludera innehållet med "http://security.debian.org/" i 
    källistan för att aktivera säkerhetsuppdateringar som i exemplet
    ovan.

    Notera

    Säkerhetsbuggarna för det stable arkivet åtgärdas av Debians
    säkerhetsteam. Denna aktivitet har varit ganska rigorös och
    pålitlig. De för testing-arkivet kan åtgärdas av Debians
    säkerhetsteam för testing. Av flera skäl är denna aktivitet inte
    lika rigorös som den för stable och du kan behöva vänta på att
    fixade unstable paket flyttas till testing-arkivet. De för det
    unstable arkivet fixas av den individuella underhållaren. Aktivt
    underhållna unstable paket är vanligtvis i ganska gott skick
    genom att de utnyttjar de senaste säkerhetsfixarna uppströms. Se
    Debians FAQ om säkerhet för hur Debian hanterar säkerhetsbuggar.

    Tabell 2.3. Lista över Debians arkivområde

    +---------------------------------------------------------------+
    |     område      |antal|  kriterier för förpackningskomponent  |
    |                 |paket|                                       |
    |-----------------+-----+---------------------------------------|
    |main             |76611|DFSG-kompatibel och inget beroende av  |
    |                 |     |non-free                               |
    |-----------------+-----+---------------------------------------|
    |                 |     |inte DFSG-kompatibel, firmware krävs   |
    |non-free-firmware|75   |för rimlig upplevelse av               |
    |                 |     |systeminstallationen                   |
    |-----------------+-----+---------------------------------------|
    |contrib          |362  |Uppfyller DFSG men har beroende till   |
    |                 |     |non-free                               |
    |-----------------+-----+---------------------------------------|
    |non-free         |1045 |inte DFSG-kompatibel och inte i        |
    |                 |     |icke-fri-firmware                      |
    +---------------------------------------------------------------+


    Här är antalet paket i ovanstående för arkitekturen amd64.
    Området main tillhandahåller Debian-systemet (se Avsnitt 2.1.6,
    ”Debian är 100% fri programvara”).

    Debians arkivorganisation kan studeras bäst genom att rikta
    webbläsaren mot varje arkiv-URL med dists eller pool som tillägg.

    Distributionen benämns på två sätt, sviten eller kodnamnet. Ordet
    distribution används alternativt som synonym till sviten i många
    dokumentationer. Förhållandet mellan sviten och kodnamnet kan
    sammanfattas enligt följande.

    Tabell 2.4. Förhållandet mellan svit och kodnamn

    +---------------------------------------------------------------+
    |       Tid        |svit = stable |svit = testing|    svit =    |
    |                  |              |              |   unstable   |
    |------------------+--------------+--------------+--------------|
    |efter trixie      |kodnamn =     |kodnamn =     |kodnamn = sid |
    |release           |trixie        |forky         |              |
    |------------------+--------------+--------------+--------------|
    |efter forky       |kodnamn =     |kodnamn = duke|kodnamn = sid |
    |release           |forky         |              |              |
    +---------------------------------------------------------------+


    Kodnamnens historia beskrivs i Debians FAQ: 6.2.1 Vilka andra
    kodnamn har använts tidigare?

    I den striktare Debian-arkivterminologin används ordet "section"
    specifikt för kategorisering av paket efter tillämpningsområde.
    (Även om ordet "huvudavsnitt" ibland kan användas för att
    beskriva Debian-arkivets område med namnet "main")

    Varje gång en ny uppladdning görs av en Debian-utvecklare (DD)
    till det unstable arkivet (via inkommande bearbetning), måste DD
    säkerställa att de uppladdade paketen är kompatibla med den
    senaste uppsättningen paket i det senaste unstable arkivet.

    Om DD bryter denna kompatibilitet avsiktligt för en viktig
    biblioteksuppgradering etc., finns det vanligtvis ett meddelande
    på sändlistan debian-devel etc.

    Innan en uppsättning paket flyttas av Debians
    arkivunderhållsskript från det unstable arkivet till testarkivet,
    kontrollerar arkivunderhållsskriptet inte bara paketens
    mognadsgrad (ca 2-10 dagar gamla) och status för
    RC-buggrapporterna, utan försöker också se till att de är
    kompatibla med den senaste uppsättningen paket i testarkivet.
    Denna process gör testarkivet mycket aktuellt och användbart.

    Genom den gradvisa arkivfrysningsprocessen som leds av
    releaseteamet mognar testing så att det blir helt konsekvent och
    buggfritt med vissa manuella ingrepp. Därefter skapas den nya
    stable utgåvan genom att kodnamnet för det gamla arkivet testing
    tilldelas det nya stable arkivet och det nya kodnamnet skapas för
    det nya arkivet testing. Det ursprungliga innehållet i det nya
    arkivet testing är exakt detsamma som i det nyutgivna stable
    arkivet.

    Både de unstable och de testande arkiven kan drabbas av
    tillfälliga störningar på grund av flera faktorer.

      * Uppladdning av trasiga paket till arkivet (mest för unstable)

      * Fördröjning av att acceptera nya paket i arkivet (mest för
        unstable)
   
      * Problem med timing för arkivsynkronisering (både för testing
        och unstable)

      * Manuella ingrepp i arkivet, t.ex. borttagning av paket (mer
        för testing) etc.

    Så om du någonsin bestämmer dig för att använda dessa arkiv bör
    du kunna fixa eller arbeta runt den här typen av problem.

    Observera

    Under några månader efter en ny stable version bör de flesta
    datoranvändare använda det stable arkivet med dess
    säkerhetsuppdateringar, även om de vanligtvis använder unstable
    arkiv eller testing. Under den här övergångsperioden är både
    unstable arkiv och testing inte bra för de flesta. Ditt system är
    svårt att hålla i gott skick med det unstable arkivet eftersom
    det drabbas av stora uppgraderingar av kärnpaket. Testing-arkivet
    är inte heller användbart eftersom det innehåller i stort sett
    samma innehåll som det stable arkivet utan dess säkerhetsstöd
    (Debian testing-security-announce 2008-12). Efter en månad eller
    så kan unstable arkiv eller testing bli användbara om du är
    försiktig.

    Tips

    Vid spårning av testarkivet kan ett problem som orsakas av ett
    borttaget paket vanligtvis lösas genom att installera motsvarande
    paket från det unstable arkivet som laddas upp för buggfixning.

    Se Debians policyhandbok för arkivdefinitioner.

      * "Sektioner"

      * "Prioriteringar"
   
      * "Bassystem"

      * "Viktiga paket"

2.1.6. Debian är 100% fri programvara

    Debian är en 100% free programvara på grund av följande:

      * Debian installerar endast fri programvara som standard för
        att respektera användarnas friheter.

      * Debian tillhandahåller endast fri programvara i main.
   
      * Debian rekommenderar att man endast kör fri programvara från
        main.

      * Inga paket i main depend eller rekommenderar paket i non-free
        eller non-free-firmware eller contrib.

    Vissa människor undrar om följande 2 fakta motsäger varandra
    eller inte.

      * "Debian kommer att förbli 100% free". (Första villkoret i
        Debians sociala kontrakt)
   
      * Debians servrar innehåller en del paket för
        non-free-firmware, non-free och contrib.

    Dessa motsäger inte varandra, på grund av följande.

      * Debian-systemet är 100% free och dess paket finns på
        Debian-servrar i main.
   
      * Paket utanför Debiansystemet finns på Debians servrar i
        områdena non-free, non-free-firmware och contrib.

    Dessa förklaras exakt i de 4:e och 5:e villkoren i Debians
    sociala kontrakt:

      * Våra prioriteringar är våra användare och fri programvara

          + Vi kommer att vägledas av våra användares och den fria
            programvarugemenskapens behov. Vi kommer att sätta deras
            intressen först i våra prioriteringar. Vi kommer att
            stödja våra användares behov av drift i många olika typer
            av datormiljöer. Vi kommer inte att motsätta oss
            icke-fria verk som är avsedda att användas på
            Debiansystem, eller försöka ta ut en avgift av personer
            som skapar eller använder sådana verk. Vi kommer att
            tillåta andra att skapa distributioner som innehåller
            både Debiansystemet och andra verk, utan någon avgift
            från oss. För att främja dessa mål kommer vi att
            tillhandahålla ett integrerat system med material av hög
            kvalitet utan några juridiska restriktioner som skulle
            förhindra sådan användning av systemet.

      * Verk som inte uppfyller våra standarder för fri programvara

          + Vi är medvetna om att vissa av våra användare kräver
            användning av verk som inte överensstämmer med Debians
            riktlinjer för fri programvara. Vi har skapat områdena
            "non-free", "non-free-firmware" och "contrib" i vårt
            arkiv för dessa verk. Paketen i dessa områden är inte en
            del av Debiansystemet, även om de har konfigurerats för
            att användas med Debian. Vi uppmuntrar cd-tillverkare att
            läsa licenserna för paketen i dessa områden och avgöra om
            de kan distribuera paketen på sina cd-skivor. Även om
            icke-fria verk inte är en del av Debian, stöder vi deras
            användning och tillhandahåller infrastruktur för
            icke-fria paket (såsom vårt buggspårningssystem och våra
            e-postlistor). Debians officiella media kan innehålla
            inbyggd programvara som annars inte är en del av
            Debiansystemet för att möjliggöra användning av Debian
            med maskinvara som kräver sådan inbyggd programvara.

    Notera

    Den faktiska texten i den 5:e termen i det nuvarande Debian
    Social Contract 1.2 skiljer sig något från ovanstående text.
    Denna redaktionella avvikelse är avsiktlig för att göra detta
    användardokument konsekvent utan att ändra det verkliga
    innehållet i det sociala kontraktet.

    Användare bör vara medvetna om riskerna med att använda paket i
    områdena non-free, non-free-firmware och contrib:

      * brist på frihet för sådana programvarupaket

      * brist på stöd från Debian för sådana programpaket (Debian kan
        inte stödja programvara på rätt sätt utan att ha tillgång
        till källkoden)

      * kontaminering av ditt 100% free Debian-system

    Debians riktlinjer för fri programvara är standarderna för fri
    programvara för Debian. Debian tolkar "programvara" i vidaste
    bemärkelse, inklusive dokument, inbyggd programvara, logotyp och
    illustrationer i paketet. Detta gör Debians standarder för fri
    programvara mycket strikta.

    Typiska paket för non-free, non-free-firmware och contrib
    inkluderar fritt distribuerbara paket av följande typer:

      * Dokumentpaket under GNU Free Documentation License med
        invarianta avsnitt som de för GCC och Make. (finns mestadels
        i avsnittet non-free/doc.)

      * Firmwarepaket som innehåller binär data utan källa, t.ex. de
        som listas i Avsnitt 9.10.5, ”Drivrutiner för hårdvara och
        firmware” som non-free-firmware. (finns oftast i avsnittet
        non-free-firmware/kernel.)

      * Spel- och typsnittspaket med restriktioner för kommersiell
        användning och/eller ändring av innehåll.

    Observera att antalet paket i non-free-, non-free-firmware- och
    contrib är mindre än 2% jämfört med antalet i main. Att ge
    tillgång till områdena non-free, non-free-firmware och contrib
    döljer inte källan till paketen. Interaktiv helskärmsanvändning
    av aptitude(8) ger dig full insyn och kontroll över vilka paket
    som installeras från vilket område för att hålla ditt system så
    fritt som du önskar.

2.1.7. Beroenden av paket

    Debiansystemet erbjuder en konsekvent uppsättning binära paket
    genom sin mekanism för deklaration av binära beroendeversioner i
    kontrollfilsfälten. Här är en lite förenklad definition för dem.

      * "Depends"

          + Detta förklarar ett absolut beroende och alla paket som
            anges i detta fält måste installeras samtidigt eller i
            förväg.

      * "Pre-Depends"

          + Detta är som Depends, förutom att det kräver en
            fullständig installation av de listade paketen i förväg.

      * "Recommends"

          + Detta deklarerar ett starkt, men inte absolut, beroende.
            De flesta användare vill inte ha paketet om inte alla
            paket som anges i det här fältet är installerade.

      * "Suggests"

          + Detta deklarerar ett svagt beroende. Många användare av
            detta paket kan dra nytta av att installera paket som
            listas i detta fält men kan ha rimliga funktioner utan
            dem.

      * "Enhances"

          + Detta förklarar ett svagt beroende som Suggests men
            fungerar i motsatt riktning.

      * "Breaks"

          + Detta deklarerar en paketinkompatibilitet, vanligtvis med
            någon versionsspecifikation. Lösningen är i allmänhet att
            uppgradera alla paket som listas i detta fält.

      * "Conflicts"

          + Detta förklarar en absolut inkompatibilitet. Alla paket
            som anges i det här fältet måste tas bort för att
            installera det här paketet.

      * "Replaces"

          + Detta deklareras när filer som installeras av detta paket
            ersätter filer i de listade paketen.

      * "Provides"

          + Detta deklareras när detta paket innehåller alla filer
            och funktioner i de listade paketen.

    Notera

    Observera att det är den sundaste konfigurationen att definiera
    "Provides", "Conflicts" och "Replaces" samtidigt för ett
    virtuellt paket. Detta säkerställer att endast ett verkligt paket
    som tillhandahåller detta virtuella paket kan installeras vid
    varje tillfälle.

    Den officiella definitionen, inklusive källkodsberoende, finns i
    Policy Manual: Kapitel 7 - Deklaration av relationer mellan
    paket.

2.1.8. Händelseflödet för pakethanteringen

    Här följer en sammanfattning av det förenklade händelseflödet för
    APT:s pakethantering.

      * Uppdatera ("apt update", "aptitude update" eller "apt-get
        update"):

         1. Hämta arkivmetadata från fjärrarkiv

         2. Rekonstruktion och uppdatering av lokala metadata för
            användning av APT

      * Uppgradera ("apt upgrade" och "apt full-upgrade" eller
        "aptitude safe-upgrade" och "aptitude full-upgrade" eller
        "apt-get upgrade" samt "apt-get dist-upgrade"):

         1. Välj kandidatversionen, som vanligtvis är den senaste
            tillgängliga versionen för alla installerade paket (se
            Avsnitt 2.7.7, ”Justera kandidatversionen med apt-pinning
            ” för undantag)

         2. Lösning av paketberoenden

         3. Hämta utvalda binära paket från fjärrarkivet om
            kandidatversionen skiljer sig från den installerade
            versionen

         4. Packa upp hämtade binära paket

         5. Kör preinst skript

         6. Installera binära filer

         7. Kör postinst skript

      * Installera ("apt install …", aptitude install …" eller
        "apt-get install …"):

         1. Välj paket som listas på kommandoraden

         2. Lösning av paketberoenden

         3. Hämta utvalda binära paket från fjärrarkiv

         4. Packa upp hämtade binära paket

         5. Kör preinst skript

         6. Installera binära filer

         7. Kör postinst skript

      * Ta bort ("apt remove …", "aptitude remove …" eller "apt-get
        remove …"):

         1. Välj paket som listas på kommandoraden

         2. Lösning av paketberoenden

         3. Kör prerm skript

         4. Ta bort installerade filer utom konfigurationsfiler

         5. Kör postrm skript

      * Rensning ("apt purge", "aptitude purge ..." eller "apt-get
        purge ..."):

         1. Välj paket som listas på kommandoraden

         2. Lösning av paketberoenden

         3. Kör prerm skript

         4. Ta bort installerade filer inklusive konfigurationsfiler

         5. Kör postrm skript

    Här har jag avsiktligt hoppat över tekniska detaljer för
    helhetsbildens skull.

2.1.9. Första svaret på problem med pakethantering

    Du bör läsa den fina officiella dokumentationen. Det första
    dokumentet att läsa är det Debian-specifika "/usr/share/doc/
    package_name/README.Debian". Annan dokumentation i "/usr/share/
    doc/package_name/" bör också läsas. Om du har ställt in shell som
    Avsnitt 1.4.2, ”Anpassa bash”, skriv följande.

    $ cd package_name
    $ pager README.Debian
    $ mc

    Du kan behöva installera motsvarande dokumentationspaket med
    suffixet "-doc" för att få mer detaljerad information.

    Om du upplever problem med ett specifikt paket, se till att först
    kolla upp Debians felhanteringssystem (BTS).

    Tabell 2.5. Lista över viktiga webbplatser för att lösa problem
    med ett specifikt paket

    +---------------------------------------------------------------+
    |          webbplats          |            kommando             |
    |-----------------------------+---------------------------------|
    |Webbsidan för Debians        |sensible-browser "https://       |
    |felhanteringssystem (BTS)    |bugs.debian.org/"                |
    |-----------------------------+---------------------------------|
    |Felrapporten för ett känt    |sensible-browser "https://       |
    |paketnamn                    |bugs.debian.org/package_name"    |
    |-----------------------------+---------------------------------|
    |Buggrapporten med känt       |sensible-browser "https://       |
    |buggnummer                   |bugs.debian.org/bug_number"      |
    +---------------------------------------------------------------+


    Sök på Google med sökord som "site:debian.org",
    "site:wiki.debian.org", "site:lists.debian.org", etc.

    När du lämnar in en felrapport ska du använda kommandot reportbug
    (1).

2.1.10. Hur man väljer Debian-paket

    När du stöter på mer än två liknande paket och undrar vilket du
    ska installera utan att "pröva dig fram", bör du använda lite 
    sunt förnuft. Jag anser att följande punkter är bra indikationer
    på vilka paket som är att föredra.

      * Essential (Väsentlig): yes > no

      * Area (Område): main > contrib > non-free

      * Priority: required > important > standard > optional > extra

      * Uppgifter: paket som listas i uppgifter som "Skrivbordsmiljö"

      * Packages selected by the dependency package (e.g., gcc-16 by
        gcc)

      * Popcon: högre i röst- och installationsantal

      * Changelog: regelbundna uppdateringar av underhållaren

      * BTS: Inga RC-buggar (inga kritiska, inga allvarliga och inga
        allvarliga buggar)

      * BTS: underhållare som svarar på felrapporter

      * BTS: högre antal av de nyligen åtgärdade buggarna

      * BTS: lägre antal kvarvarande buggar som inte finns på
        önskelistan

    Debian är ett frivilligt projekt med en distribuerad
    utvecklingsmodell, och dess arkiv innehåller många paket med
    olika fokus och kvalitet. Du måste fatta ditt eget beslut om vad
    du ska göra med dem.

2.1.11. Hur man hanterar motstridiga krav

    Oavsett vilken svit av Debian-system du väljer att använda,
    kanske du ändå vill köra versioner av program som inte finns
    tillgängliga i den sviten. Även om du hittar binära paket av
    sådana program i andra Debian-sviter eller i andra
    icke-Debian-resurser, kan deras krav stå i konflikt med ditt
    nuvarande Debian-system.

    Även om du kan justera pakethanteringssystemet med 
    apt-pinning-teknik etc. som beskrivs i Avsnitt 2.7.7, ”Justera
    kandidatversionen med apt-pinning” för att installera sådana
    osynkroniserade binära paket, har sådana justeringsmetoder endast
    begränsade användningsområden eftersom de kan förstöra dessa
    program och ditt system.

    Innan du brutalt installerar sådana osynkroniserade paket bör du
    söka efter alla tillgängliga alternativa säkrare tekniska
    lösningar som är kompatibla med ditt nuvarande Debian-system.

      * Installera sådana program med motsvarande sandboxade
        uppströms binära paket (se Avsnitt 7.7, ”Sandlåda”).

          + Många GUI-program, t.ex. LibreOffice och GNOME-program,
            finns tillgängliga som Flatpak-, Snap- eller
            AppImage-paket.

      * Skapa en chroot eller liknande miljö och kör sådana program i
        den (se Avsnitt 9.11, ”Virtualiserat system”).

          + CLI-kommandon kan enkelt köras under dess kompatibla
            chroot (se Avsnitt 9.11.4, ”Chroot-system”).

          + Flera fullständiga skrivbordsmiljöer kan enkelt provas
            utan omstart (se Avsnitt 9.11.5, ”Flera skrivbordssystem”
            ).

      * Bygg själv önskade versioner av binära paket som är
        kompatibla med ditt nuvarande Debian-system.

          + Detta är inte en trivial uppgift (se Avsnitt 2.7.13,
            ”Portering av ett paket till det stabila systemet”).

2.2. Grundläggande funktioner för pakethantering

    Förvaringsbaserade pakethanteringsåtgärder i Debiansystemet kan
    utföras av många APT-baserade pakethanteringsverktyg som finns
    tillgängliga i Debiansystemet. Här förklarar vi 3 grundläggande
    pakethanteringsverktyg: apt, apt-get / apt-cache och aptitude.

    Du måste ha root-behörighet för att kunna utföra
    pakethanteringsåtgärder som innebär paketinstallation eller
    uppdatering av paketmetadata.

2.2.1. apt mot apt-get / apt-cache mot aptitude

    Även om aptitude är ett mycket trevligt interaktivt verktyg som
    författaren huvudsakligen använder, bör du känna till några
    försiktiga fakta:

      * Kommandot aptitude rekommenderas inte för systemuppgradering
        från release till release på det stable Debian-systemet efter
        den nya releasen.

          + Användning av "apt full-upgrade" eller "apt-get
            dist-upgrade" rekommenderas för detta. Se fel #411280.

      * Kommandot aptitude föreslår ibland massborttagning av paket
        för systemuppgraderingen på det testande eller unstable
        Debian-systemet.
   
          + Den här situationen har skrämt många
            systemadministratörer. Få inte panik.

          + Detta verkar främst bero på versionsskillnader mellan
            paket som är beroende av eller rekommenderas av ett
            metapaket som gnome-core.

          + Detta kan lösas genom att välja "Cancel pending actions"
            i kommandomenyn för aptitude, avsluta aptitude och
            använda "apt full-upgrade".

    Kommandona apt-get och apt-cache är de mest grundläggande
    APT-baserade pakethanteringsverktygen.

      * apt-get och apt-cache erbjuder endast användargränssnittet
        för kommandoraden.

      * apt-get är mest lämpligt för större systemuppgraderingar
        mellan releaser etc.

      * apt-get erbjuder en robust lösning för paketberoenden.

      * apt-get är mindre krävande när det gäller hårdvaruresurser.
        Det förbrukar mindre minne och körs snabbare.

      * apt-cache erbjuder en standardregexbaserad sökning på
        paketets namn och beskrivning.

      * apt-get och apt-cache kan hantera flera versioner av paket
        med hjälp av /etc/apt/preferences men det är ganska
        besvärligt.

    Kommandot apt är ett kommandoradsgränssnitt på hög nivå för
    pakethantering. Det är i grunden ett omslag för apt-get,
    apt-cache och liknande kommandon, ursprungligen avsett som ett
    gränssnitt för slutanvändare och aktiverar vissa alternativ som
    är bättre lämpade för interaktiv användning som standard.

      * apt tillhandahåller en vänlig förloppsindikator när du
        installerar paket med apt install.
   
      * apt kommer att ta bort cachade .deb-paket som standard efter
        lyckad installation av hämtade paket.

    Tips

    Användare rekommenderas att använda det nya kommandot apt(8) för 
    interaktiv användning och att använda kommandona apt-get(8) och
    apt-cache(8) i skalskriptet.

    Kommandot aptitude är det mest mångsidiga APT-baserade verktyget
    för pakethantering.

      * aptitude erbjuder användargränssnittet för interaktiv text i
        fullskärm.

      * aptitude erbjuder även ett användargränssnitt för
        kommandoraden.

      * aptitude är mest lämpad för den dagliga interaktiva
        pakethanteringen, t.ex. kontroll av installerade paket och
        sökning efter tillgängliga paket.

      * aptitude är mer krävande när det gäller hårdvaruresurser. Den
        förbrukar mer minne och körs långsammare.

      * aptitude erbjuder en förbättrad regexbaserad sökning på alla
        paketets metadata.

      * aptitude kan hantera flera versioner av paket utan att
        använda /etc/apt/preferences och det är ganska intuitivt.

2.2.2. Grundläggande pakethanteringsoperationer med kommandoraden

    Här följer grundläggande åtgärder för pakethantering via
    kommandoraden med apt(8), aptitude(8) och apt-get(8) /apt-cache
    (8).

    Tabell 2.6. Grundläggande pakethantering med kommandoraden med apt
    (8), aptitude(8) och apt-get(8) /apt-cache(8)

    +-------------------------------------------------------------------+
    |                  |               | syntax för |                   |
    |    apt-syntax    |aptitude-syntax|  apt-get/  |    beskrivning    |
    |                  |               | apt-cache  |                   |
    |------------------+---------------+------------+-------------------|
    |apt update        |aptitude update|apt-get     |uppdatera metadata |
    |                  |               |update      |för paketarkiv     |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |installera         |
    |apt install foo   |aptitude       |apt-get     |kandidatversionen  |
    |                  |install foo    |install foo |av "foo"-paketet   |
    |                  |               |            |med dess beroenden |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |installera         |
    |                  |               |            |kandidatversionen  |
    |apt upgrade       |aptitude       |apt-get     |av installerade    |
    |                  |safe-upgrade   |upgrade     |paket utan att ta  |
    |                  |               |            |bort några andra   |
    |                  |               |            |paket              |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |installera         |
    |                  |               |            |kandidatversionen  |
    |apt full-upgrade  |aptitude       |apt-get     |av installerade    |
    |                  |full-upgrade   |dist-upgrade|paket samtidigt som|
    |                  |               |            |andra paket tas    |
    |                  |               |            |bort vid behov     |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |ta bort paketet    |
    |apt remove foo    |aptitude remove|apt-get     |"foo" och lämna    |
    |                  |foo            |remove foo  |kvar dess          |
    |                  |               |            |konfigurationsfiler|
    |------------------+---------------+------------+-------------------|
    |                  |               |            |ta bort automatiskt|
    |apt autoremove    |N/A            |apt-get     |installerade paket |
    |                  |               |autoremove  |som inte längre    |
    |                  |               |            |behövs             |
    |------------------+---------------+------------+-------------------|
    |                  |aptitude purge |apt-get     |rensa paketet "foo"|
    |apt purge foo     |foo            |purge foo   |med dess           |
    |                  |               |            |konfigurationsfiler|
    |------------------+---------------+------------+-------------------|
    |                  |               |            |tömma det lokala   |
    |apt clean         |aptitude clean |apt-get     |arkivet på hämtade |
    |                  |               |clean       |paketfiler helt och|
    |                  |               |            |hållet             |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |rensa ut det lokala|
    |apt autoclean     |aptitude       |apt-get     |arkivet med hämtade|
    |                  |autoclean      |autoclean   |paketfiler för     |
    |                  |               |            |föråldrade paket   |
    |------------------+---------------+------------+-------------------|
    |                  |aptitude show  |apt-cache   |visa detaljerad    |
    |apt show foo      |foo            |show foo    |information om     |
    |                  |               |            |"foo" paketet      |
    |------------------+---------------+------------+-------------------|
    |apt search regex  |aptitude search|apt-cache   |sök paket som      |
    |                  |regex          |search regex|matchar regex      |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |förklara           |
    |                  |aptit varför   |            |anledningen till   |
    |N/A               |regex          |N/A         |att paket för      |
    |                  |               |            |regexmatchning bör |
    |                  |               |            |installeras        |
    |------------------+---------------+------------+-------------------|
    |                  |               |            |förklara orsaken   |
    |N/A               |aptitude       |N/A         |till att paket för |
    |                  |why-not regex  |            |regexmatchning inte|
    |                  |               |            |kan installeras    |
    |------------------+---------------+------------+-------------------|
    |apt list          |aptitude search|apt-mark    |lista manuellt     |
    |--manual-installed|'~i!~M'        |showmanual  |installerade paket |
    +-------------------------------------------------------------------+


    apt / apt-get och aptitude kan blandas utan större problem.

    "aptitude why regex" kan lista mer information genom "aptitude -v
    why regex". Liknande information kan erhållas med "apt rdepends 
    package" eller "apt-cache rdepends package".

    När kommandot aptitude startas i kommandoradsläget och stöter på
    problem, t.ex. paketkonflikter, kan du växla till det interaktiva
    helskärmsläget genom att trycka på "e"-tangenten senare vid
    prompten.

    Notera

    Även om kommandot aptitude har många funktioner, t.ex. en
    förbättrad paketlösare, har denna komplexitet orsakat (eller kan
    fortfarande orsaka) vissa regressioner, t.ex. fel #411123, fel #
    514930 och fel #570377. Om du är osäker bör du använda kommandona
    apt, apt-get och apt-cache i stället för kommandot aptitude.

    Du kan ange kommandoalternativ direkt efter "aptitude".

    Tabell 2.7. Anmärkningsvärda kommandoalternativ för aptitude(8)

    +---------------------------------------------------------------+
    |kommandoalternativ|                beskrivning                 |
    |------------------+--------------------------------------------|
    |-s                |simulera resultatet av kommandot            |
    |------------------+--------------------------------------------|
    |-d                |endast nedladdning men ingen installation/  |
    |                  |uppgradering                                |
    |------------------+--------------------------------------------|
    |-D                |visa korta förklaringar före automatiska    |
    |                  |installationer och borttagningar            |
    +---------------------------------------------------------------+


    Se aptitude(8) och "aptitude user's manual" på "/usr/share/doc/
    aptitude/README" för mer information.

2.2.3. Interaktiv användning av begåvning

    För interaktiv pakethantering startar du aptitude i interaktivt
    läge från konsolens shellprompt på följande sätt.

    $ sudo aptitude -u
    Password:

    Detta uppdaterar den lokala kopian av arkivinformationen och
    visar paketlistan i helskärmen med meny. Aptitude placerar sin
    konfiguration i "~/.aptitude/config".

    Tips

    Om du vill använda roots konfiguration i stället för användarens
    använder du "sudo -H aptitude ..." i stället för "sudo aptitude
    ..." i ovanstående uttryck.

    Tips

    Aptitude ställer automatiskt in väntande åtgärder när det startas
    interaktivt. Om du inte gillar det kan du återställa det från
    menyn: "Åtgärd" → "Avbryt väntande åtgärder".

2.2.4. Viktiga bindningar för lämplighet

    Viktiga tangenttryckningar för att bläddra igenom status för
    paket och för att ange "planerad åtgärd" för dem i detta
    helskärmsläge är följande.

    Tabell 2.8. Lista över nyckelbindningar för aptitude

    +---------------------------------------------------------------+
    |     nyckel      |               nyckelbindning                |
    |-----------------+---------------------------------------------|
    |F10 eller Ctrl-t |meny                                         |
    |-----------------+---------------------------------------------|
    |?                |visa hjälp för tangenttryckning (mer         |
    |                 |fullständig lista)                           |
    |-----------------+---------------------------------------------|
    |F10 → Hjälp →    |display Användarmanual                       |
    |Användarhandbok  |                                             |
    |-----------------+---------------------------------------------|
    |u                |uppdatera paketets arkivinformation          |
    |-----------------+---------------------------------------------|
    |+                |markera paketet för uppgradering eller       |
    |                 |installation                                 |
    |-----------------+---------------------------------------------|
    |-                |markera paketet för borttagning (behåll      |
    |                 |konfigurationsfiler)                         |
    |-----------------+---------------------------------------------|
    |_                |markera paketet för rensning (ta bort        |
    |                 |konfigurationsfiler)                         |
    |-----------------+---------------------------------------------|
    |=                |lägga paketet på is                          |
    |-----------------+---------------------------------------------|
    |U                |markera alla uppgraderingsbara paket         |
    |                 |(fungerar som fullständig uppgradering)      |
    |-----------------+---------------------------------------------|
    |g                |påbörja nedladdning och installation av valda|
    |                 |paket                                        |
    |-----------------+---------------------------------------------|
    |q                |lämna aktuell skärm och spara ändringar      |
    |-----------------+---------------------------------------------|
    |x                |lämna aktuell skärm och kassera ändringar    |
    |-----------------+---------------------------------------------|
    |Ange             |visa information om ett paket                |
    |-----------------+---------------------------------------------|
    |C                |visa ett pakets changelog                    |
    |-----------------+---------------------------------------------|
    |l                |ändra gränsen för de visade paketen          |
    |-----------------+---------------------------------------------|
    |/                |sök efter den första matchen                 |
    |-----------------+---------------------------------------------|
    |\                |upprepa den senaste sökningen                |
    +---------------------------------------------------------------+


    Filnamnsspecifikationen på kommandoraden och menyprompten efter
    att du har tryckt på "l" och "//" använder Aptitude regex enligt
    beskrivningen nedan. Aptitude regex kan uttryckligen matcha ett
    paketnamn med hjälp av en sträng som inleds med "~n" och följs av
    paketnamnet.

    Tips

    Du måste trycka på "U" för att få alla installerade paket
    uppgraderade till kandidatversionen i det visuella gränssnittet.
    Annars uppgraderas endast de valda paketen och vissa paket med
    versionsberoende till dem till kandidatversionen.

2.2.5. Paketera visningar under aptitude

    I det interaktiva helskärmsläget för aptitude(8) visas paketen i
    paketlistan som i nästa exempel.

    idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

    Här betyder denna linje från vänster som följande.

      * Flaggan "nuvarande tillstånd" (den första bokstaven)

      * Flaggan för "planerad åtgärd" (den andra bokstaven)

      * Den "automatiska" flaggan (den tredje bokstaven)

      * Paketets namn

      * Förändringen i användningen av diskutrymme till följd av
        "planerad åtgärd"

      * Den aktuella versionen av paketet

      * Kandidatversionen av paketet

    Tips
   
    Den fullständiga listan över flaggor finns längst ned på 
    hjälpskärmen och visas genom att trycka på "?".

    Kandidatversionen väljs enligt de aktuella lokala preferenserna
    (se apt_preferences(5) och Avsnitt 2.7.7, ”Justera
    kandidatversionen med apt-pinning”).

    Flera olika typer av paketvyer finns tillgängliga under menyn
    "Vyer".

    Tabell 2.9. Lista över vyer för lämplighet

    +---------------------------------------------------------------+
    |     visa      |               beskrivning av vy               |
    |---------------+-----------------------------------------------|
    |Package View   |se Tabell 2.10, ”Kategoriseringen av           |
    |               |standardpaketets vyer” (standard)              |
    |---------------+-----------------------------------------------|
    |Audit          |lista paket som rekommenderas av vissa         |
    |Recommendations|installerade paket men som ännu inte har       |
    |               |installerats                                   |
    |---------------+-----------------------------------------------|
    |Flat Package   |lista paket utan kategorisering (för användning|
    |List           |med regex)                                     |
    |---------------+-----------------------------------------------|
    |Debtags Browser|lista paket kategoriserade enligt deras        |
    |               |debtags-poster                                 |
    |---------------+-----------------------------------------------|
    |Source Package |lista paket grupperade efter källpaket         |
    |View           |                                               |
    +---------------------------------------------------------------+


    Notera
   
    Hjälp oss att förbättra märkningen av paket med debtags!

    Standardfunktionen "Package View" kategoriserar paket ungefär som
    dselect med några extra funktioner.

    Tabell 2.10. Kategoriseringen av standardpaketets vyer

    +---------------------------------------------------------------+
    |        kategori        |          beskrivning av vy           |
    |------------------------+--------------------------------------|
    |Upgradable Packages     |lista paket organiserade som sektion →|
    |                        |område → paket                        |
    |------------------------+--------------------------------------|
    |New Packages            |, ,                                   |
    |------------------------+--------------------------------------|
    |Installed Packages      |, ,                                   |
    |------------------------+--------------------------------------|
    |Not Installed Packages  |, ,                                   |
    |------------------------+--------------------------------------|
    |Föråldrade och lokalt   |, ,                                   |
    |skapade förpackningar   |                                      |
    |------------------------+--------------------------------------|
    |Virtual Packages        |lista paket med samma funktion        |
    |------------------------+--------------------------------------|
    |Uppgifter               |lista paket med olika funktioner som  |
    |                        |vanligtvis behövs för en uppgift      |
    +---------------------------------------------------------------+


    Tips
   
    Tasks-vyn kan användas för att välja ut paket för din uppgift.

2.2.6. Sök metodalternativ med aptitude

    Aptitude erbjuder flera alternativ för att söka efter paket med
    hjälp av regex-formeln.

      * Shell kommandorad:

          + "aptitude search 'aptitude_regex'" för att lista
            installationsstatus, paketnamn och kort beskrivning av
            matchande paket

          + "aptitude show 'package_name'" för att visa en detaljerad
            beskrivning av paketet

      * Interaktivt helskärmsläge:

          + "l" för att begränsa paketvisningen till matchande paket

          + "/" för sökning till ett matchande paket

          + "\" för bakåtriktad sökning till ett matchande paket

          + "n" för hitta nästa

          + "N" för find-next (bakåt)

    Tips

    Strängen för package_name behandlas som den exakta
    strängmatchningen till paketnamnet om den inte uttryckligen
    inleds med "~" för att vara regexformeln.

2.2.7. Formeln för regex för lämplighet

    Aptitude-regexformeln är mutt-liknande utökad ERE (se
    Avsnitt 1.6.2, ”Vanliga uttryck”) och betydelserna av de
    aptitude-specifika speciella matchningsregeltilläggen är
    följande.

    Tabell 2.11. Lista över regexformeln för lämplighet

    +-----------------------------------------------------------------------+
    | beskrivning av den |                                                  |
    |      utökade       |                   regex-formel                   |
    |  matchningsregeln  |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha på           |~nregex_name                                      |
    |förpackningsnamn    |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha på           |~dregex_description                               |
    |beskrivning         |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha på           |~tregex_task                                      |
    |uppgiftsnamn        |                                                  |
    |--------------------+--------------------------------------------------|
    |match på debtag     |~Gregex_debtag                                    |
    |--------------------+--------------------------------------------------|
    |matcha på           |~mregex_maintainer                                |
    |underhållare        |                                                  |
    |--------------------+--------------------------------------------------|
    |match på            |~sregex_section                                   |
    |paketavsnitt        |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha på           |~Vregex_version                                   |
    |paketversion        |                                                  |
    |--------------------+--------------------------------------------------|
    |matcharkiv          |~A{trixie,forky,sid}                              |
    |--------------------+--------------------------------------------------|
    |matcha ursprung     |~O{debian,…}                                      |
    |--------------------+--------------------------------------------------|
    |matcha prioritet    |~p{extra,important,optional,required,standard}    |
    |--------------------+--------------------------------------------------|
    |matcha viktiga paket|~E                                                |
    |--------------------+--------------------------------------------------|
    |matcha virtuella    |~v                                                |
    |paket               |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha nya paket    |~N                                                |
    |--------------------+--------------------------------------------------|
    |matchning med       |~a                                                |
    |pågående åtgärd     |{install,upgrade,downgrade,remove,purge,hold,keep}|
    |--------------------+--------------------------------------------------|
    |matcha installerade |~i                                                |
    |paket               |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha installerade |                                                  |
    |paket med A-märkning|~M                                                |
    |(automatiskt        |                                                  |
    |installerade paket) |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha installerade |                                                  |
    |paket utan          |                                                  |
    |A-märkning          |~i!~M                                             |
    |(administratörsvalda|                                                  |
    |paket)              |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha installerade |                                                  |
    |och                 |~U                                                |
    |uppgraderingsbara   |                                                  |
    |paket               |                                                  |
    |--------------------+--------------------------------------------------|
    |match avlägsnade men|~c                                                |
    |inte rensade paket  |                                                  |
    |--------------------+--------------------------------------------------|
    |matchade borttagna, |                                                  |
    |rensade eller kan   |~g                                                |
    |tas bort paket      |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket som    |                                                  |
    |deklarerar ett      |~b                                                |
    |brutet beroende     |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket som    |                                                  |
    |deklarerar brutna   |~Btype                                            |
    |beroenden av typen  |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha mönsterpaket |                                                  |
    |som deklarerar      |~D[type:]mönster                                  |
    |beroende av typen   |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha mönsterpaket |                                                  |
    |som deklarerar      |~DB[type:]mönster                                 |
    |brutet beroende av  |                                                  |
    |typen               |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket till   |                                                  |
    |vilka det           |                                                  |
    |mönstermatchande    |~R[type:]pattern                                  |
    |paketet deklarerar  |                                                  |
    |beroendetyp         |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket till   |                                                  |
    |vilka det           |                                                  |
    |mönstermatchande    |~RB[type:]pattern                                 |
    |paketet deklarerar  |                                                  |
    |bruten beroendetyp  |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket som    |                                                  |
    |vissa andra         |~R~i                                              |
    |installerade paket  |                                                  |
    |är beroende av      |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket som    |                                                  |
    |inga andra          |!~R~i                                             |
    |installerade paket  |                                                  |
    |är beroende av      |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha paket som    |                                                  |
    |vissa andra         |                                                  |
    |installerade paket  |~R~i|~Rrecommends:~i                              |
    |är beroende av eller|                                                  |
    |rekommenderar       |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha mönsterpaket |                                                  |
    |med filtrerad       |~S filter pattern                                 |
    |version             |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha alla paket   |~T                                                |
    |(true)              |                                                  |
    |--------------------+--------------------------------------------------|
    |matcha inga paket   |~F                                                |
    |(false)             |                                                  |
    +-----------------------------------------------------------------------+


      * Regex-delen är samma ERE som används i typiska Unix-liknande
        textverktyg som använder "^", ".*", "$" etc. som i egrep(1),
        awk(1) och perl(1).

      * Beroendetypen är en av (depends, predepends, recommends,
        suggests, conflicts, replaces, provides) som anger paketets
        inbördes förhållande.

      * Standardberoendetypen är "depends".

    Tips
   
    När regex_pattern är en nollsträng placeras "~T" omedelbart efter
    kommandot.

    Här är några genvägar.

      * "~Pterm" == "~Dprovides:term"

      * "~Cterm" == "~Dkonflikter:term"

      * "…~W term" == "(…|term)"

    Användare som är bekanta med mutt lär sig snabbt, eftersom mutt
    var inspirationen till uttryckssyntaxen. Se "SÖKNING, BEGRÄNSNING
    OCH UTTRYCK" i "Användarhandboken" "/usr/share/doc/aptitude/
    README".

    Notera

    Med Lenny-versionen av aptitude(8) kan den nya långa syntaxen som
    "?broken" användas för regex-matchning i stället för den gamla 
    korta motsvarigheten "~b". Nu betraktas mellanslagstecken " " som
    ett av regexens avslutande tecken utöver tilde-tecken "~". Se
    "Användarhandboken" för den nya syntaxen i långform.

2.2.8. Beroendeupplösning av lämplighet

    Valet av ett paket i aptitude drar inte bara in paket som
    definieras i dess "Depends:"-lista utan även i
    "Recommends:"-listan om menyn "F10 → Options → Preferences →
    Dependency handling" är inställd i enlighet med detta. Dessa
    automatiskt installerade paket tas bort automatiskt om de inte
    längre behövs under aptitude.

    Flaggan som styr kommandot aptitude är "auto install"-beteende
    kan också manipuleras med kommandot apt-mark(8) från apt-paketet.

2.2.9. Loggar över paketaktiviteter

    Du kan kontrollera paketaktivitetshistoriken i loggfilerna.

    Tabell 2.12. Loggfiler för paketaktiviteter

    +---------------------------------------------------------------+
    |      fil       |                   innehåll                   |
    |----------------+----------------------------------------------|
    |/var/log/       |Logg över aktivitet på dpkg-nivå för alla     |
    |dpkg.log        |paketaktiviteter                              |
    |----------------+----------------------------------------------|
    |/var/log/apt/   |Logg över generisk APT-aktivitet              |
    |term.log        |                                              |
    |----------------+----------------------------------------------|
    |/var/log/       |Logg över aktiviteten för kommandot aptitude  |
    |aptitude        |                                              |
    +---------------------------------------------------------------+


    I verkligheten är det inte så lätt att snabbt få en meningsfull
    förståelse från dessa loggar. Se Avsnitt 9.3.9, ”Registrering av
    ändringar i konfigurationsfiler” för ett enklare sätt.

2.3. Exempel på lämplighetsoperationer

    Här är några exempel på aptitude(8)-operationer.

2.3.1. Söker intressanta paket

    Du kan söka efter paket som uppfyller dina behov med aptitude
    från paketbeskrivningen eller från listan under "Tasks".

2.3.2. Lista paket med regex-matchning på paketnamn

    Följande kommando listar paket med regex-matchning på paketnamn.

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

    Detta är mycket praktiskt om du vill hitta det exakta namnet på
    ett paket.

2.3.3. Bläddra med regex-matchning

    Regexet "~dipv6" i vyn "New Flat Package List" med prompten "l"
    begränsar vyn till paket med matchande beskrivning och låter dig
    bläddra igenom deras information interaktivt.

2.3.4. Utrensning av borttagna paket för gott

    Du kan rensa bort alla återstående konfigurationsfiler för
    borttagna paket.

    Kontrollera resultatet av följande kommando.

    # aptitude search '~c'

    Om du tror att de listade paketen är OK att rensa, kör följande
    kommando.

    # aptitude purge '~c'

    Du kanske vill göra samma sak i det interaktiva läget för att få
    mer detaljerad kontroll.

    Du anger regex "~c" i vyn "New Package View" med prompten "l".
    Detta begränsar paketvyn till att endast omfatta paket som
    matchas med regex, dvs. "borttagna men inte rensade". Alla dessa
    regex-matchade paket kan visas genom att trycka på "[" i
    rubrikerna på översta nivån.

    Sedan trycker du på "_" vid rubriker på högsta nivå, t.ex. "Ej
    installerade paket". Endast regexmatchade paket under rubriken
    markeras för att rensas med detta. Du kan utesluta vissa paket
    som ska rensas genom att trycka på "=" interaktivt för vart och
    ett av dem.

    Den här tekniken är ganska praktisk och fungerar för många andra
    kommandotangenter.

2.3.5. Städning av status för automatisk/manuell installation

    Så här städar jag upp status för automatisk/manuell installation
    av paket (efter att ha använt installationsprogram för paket som
    inte är aptitude etc.).

     1. Starta aptitude i interaktivt läge som root.

     2. Skriv "u", "U", "f" och "g" för att uppdatera och uppgradera
        paketlistan och paketen.

     3. Skriv "l" för att ange paketets visningsgräns som "~i(~R~i|
        ~Rrecommends:~i)" och skriv "M" över "Installed Packages" som
        automatiskt installerat.

     4. Skriv "l" för att ange paketets visningsgräns som "~prequired
        |~pimportant|~pstandard|~E" och skriv "m" över "Installed
        Packages" som manuellt installerat.

     5. Skriv "l" för att ange gränsen för paketvisning som "~i!~M"
        och ta bort oanvända paket genom att skriva "-" över vart och
        ett av dem efter att ha exponerat dem genom att skriva "["
        över "Installerade paket".
   
     6. Skriv "l", för att ange paketets visningsgräns som "~i";
        skriv sedan "m" över "Tasks", för att markera det paketet som
        manuellt installerat.

     7. Avsluta aptitude.

     8. Starta "apt-get -s autoremove|less" som root för att
        kontrollera vad som inte används.

     9. Starta om aptitude i interaktivt läge och markera nödvändiga
        paket som "m".

    10. Starta om "apt-get -s autoremove|less" som root för att
        kontrollera att REMOVED endast innehåller förväntade paket.

    11. Starta "apt-get autoremove|less" som root för att automatiskt
        ta bort oanvända paket.

    "m"-åtgärden över "Tasks" är valfri för att förhindra massuttag
    av paket i framtiden.

2.3.6. Systemomfattande uppgradering

    Notera

    När du flyttar till en ny version bör du överväga att utföra en
    ren installation av det nya systemet, även om Debian kan
    uppgraderas enligt beskrivningen nedan. Detta ger dig en chans
    att ta bort skräp som samlats in och exponerar dig för den bästa
    kombinationen av de senaste paketen. Naturligtvis bör du göra en
    fullständig säkerhetskopiering av systemet till en säker plats
    (se Avsnitt 10.2, ”Backup och återställning”) innan du gör detta.
    Jag rekommenderar att du gör en dual boot-konfiguration med olika
    partitioner för att få den smidigaste övergången.

    Du kan göra en systemomfattande uppgradering till en nyare
    version genom att ändra innehållet i källistan som pekar på en ny
    version och köra kommandot "apt update; apt dist-upgrade".

    För att uppgradera från stable till testing eller unstable under
    utgivningscykeln trixie-as-stable ersätter du "trixie" i 
    källistexemplet på Avsnitt 2.1.5, ”Grunderna i Debian-arkivet”
    med "forky" eller "sid".

    I verkligheten kan du stöta på vissa komplikationer på grund av
    vissa problem med paketövergången, främst på grund av
    paketberoenden. Ju större skillnaden mellan uppgraderingarna är,
    desto större är sannolikheten att du får större problem. För
    övergången från den gamla stable till den nya stable efter
    lanseringen kan du läsa dess nya Release Notes och följa den
    exakta proceduren som beskrivs i den för att minimera problem.

    När du bestämmer dig för att flytta från stable till testing
    innan den formella releasen finns det inga Release Notes som kan
    hjälpa dig. Skillnaden mellan stable och testing kan ha blivit
    ganska stor efter den föregående stable releasen och gör
    uppgraderingssituationen komplicerad.

    Du bör vidta försiktighetsåtgärder för den fullständiga
    uppgraderingen samtidigt som du samlar in den senaste
    informationen från sändlistan och använder sunt förnuft.

     1. Läs tidigare "Release Notes".

     2. Säkerhetskopiera hela systemet (särskilt data- och
        konfigurationsinformation).

     3. Ha startbart media till hands för trasig bootloader.

     4. Informera användarna om systemet i god tid.

     5. Registrera uppgraderingsaktivitet med skript(1).

     6. Använd "unmarkauto" på nödvändiga paket, t.ex. "aptitude
        unmarkauto vim", för att förhindra borttagning.

     7. Minimera antalet installerade paket för att minska risken för
        paketkonflikter, t.ex. genom att ta bort paket för
        skrivbordsuppgifter.

     8. Ta bort filen "/etc/apt/preferences" (inaktivera apt-pinning
        ).

     9. Försök att uppgradera stegvis: oldstable → stable → testing →
        unstable.

    10. Uppdatera källistan så att den endast pekar på det nya
        arkivet och kör "aptitude update".

    11. Installera eventuellt nya kärnpaket först, t.ex. "aptitude
        install perl".

    12. Kör kommandot "apt-get -s dist-upgrade" för att bedöma
        effekten.

    13. Kör kommandot "apt-get dist-upgrade" till sist.

    Observera
   
    Det är inte klokt att hoppa över en större Debian-utgåva när man
    uppgraderar mellan stable utgåvor.

    Observera

    I tidigare "Release Notes" har GCC, Linux Kernel, initrd-tools,
    Glibc, Perl, APT tool chain etc. krävt särskild uppmärksamhet för
    systemomfattande uppgradering.

    Observera

    "Release Notes" may not cover all possible cases. If you change
    low level configurations, your next upgrade may fail badly as
    "... segfault after upgrade ...".

    För dagliga uppgradering i unstable, se Avsnitt 2.4.3, ”Skydd för
    paketproblem”.

2.4. Avancerade åtgärder för pakethantering

2.4.1. Avancerad pakethantering med kommandoraden

    Här är en lista över andra pakethanteringsoperationer för vilka
    aptitude är för hög nivå eller saknar nödvändiga funktioner.

    Tabell 2.13. Lista över avancerade åtgärder för pakethantering

    +---------------------------------------------------------------+
    |                  kommando                   |     åtgärd      |
    |---------------------------------------------+-----------------|
    |                                             |lista status för |
    |COLUMNS=120 dpkg -l package_name_pattern     |ett installerat  |
    |                                             |paket för        |
    |                                             |felrapporten     |
    |---------------------------------------------+-----------------|
    |                                             |lista innehållet |
    |dpkg -L paketnamn                            |i ett installerat|
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |dpkg -L paketnamn | egrep '/usr/share/man/   |lista manpages   |
    |man.*/.+'                                    |för ett          |
    |                                             |installerat paket|
    |---------------------------------------------+-----------------|
    |                                             |lista            |
    |dpkg -S fil_namn_mönster                     |installerade     |
    |                                             |paket som har    |
    |                                             |matchande filnamn|
    |---------------------------------------------+-----------------|
    |                                             |lista paket i    |
    |apt-file search filnamnsmönster              |arkivet som har  |
    |                                             |matchande filnamn|
    |---------------------------------------------+-----------------|
    |                                             |lista innehållet |
    |apt-file list package_name_pattern           |i matchande paket|
    |                                             |i arkivet        |
    |---------------------------------------------+-----------------|
    |                                             |konfigurera om   |
    |dpkg-reconfigure paketnamn                   |det exakta       |
    |                                             |paketet          |
    |---------------------------------------------+-----------------|
    |                                             |konfigurera om   |
    |                                             |det exakta       |
    |dpkg-reconfigure -plow paketnamn             |paketet med den  |
    |                                             |mest detaljerade |
    |                                             |frågan           |
    |---------------------------------------------+-----------------|
    |                                             |omkonfigurera    |
    |configure-debian                             |paket från       |
    |                                             |helskärmsmenyn   |
    |---------------------------------------------+-----------------|
    |                                             |granskningssystem|
    |dpkg --audit                                 |för delvis       |
    |                                             |installerade     |
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |konfigurera alla |
    |dpkg --configure -a                          |delvis           |
    |                                             |installerade     |
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |visa tillgänglig |
    |                                             |versions-,       |
    |apt-cache policy binary_package_name         |prioritets- och  |
    |                                             |arkivinformation |
    |                                             |för ett binärt   |
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |visa tillgänglig |
    |apt-cache madison paketnamn                  |version,         |
    |                                             |arkivinformation |
    |                                             |för ett paket    |
    |---------------------------------------------+-----------------|
    |                                             |visa information |
    |apt-cache showsrc binär_paketnamn            |om källpaketet   |
    |                                             |för ett binärt   |
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |installera       |
    |apt-get build-dep paket_namn                 |nödvändiga paket |
    |                                             |för att bygga    |
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |installera       |
    |aptitude build-dep paket_namn                |nödvändiga paket |
    |                                             |för att bygga    |
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |ladda ner en     |
    |apt-get source paketnamn                     |källa (från      |
    |                                             |standardarkivet) |
    |---------------------------------------------+-----------------|
    |                                             |ladda ner ett    |
    |dget URL för dsc-fil                         |källpaket (från  |
    |                                             |annat arkiv)     |
    |---------------------------------------------+-----------------|
    |                                             |bygg ett källträd|
    |                                             |från en          |
    |                                             |uppsättning      |
    |dpkg-source -x package_name_version-         |källkodspaket    |
    |debian.revision.dsc                          |("*.orig.tar.gz" |
    |                                             |och              |
    |                                             |"*.debian.tar.gz"|
    |                                             |/"*.diff.gz")    |
    |---------------------------------------------+-----------------|
    |                                             |bygga paket från |
    |debuild binary                               |ett lokalt       |
    |                                             |källträd         |
    |---------------------------------------------+-----------------|
    |                                             |bygga ett        |
    |make-kpkg kernel_image                       |kernelpaket från |
    |                                             |ett              |
    |                                             |kernelkällträd   |
    |---------------------------------------------+-----------------|
    |                                             |bygga ett        |
    |                                             |kernelpaket från |
    |make-kpkg --initrd kernel_image              |ett              |
    |                                             |kernelkällträd   |
    |                                             |med initramfs    |
    |                                             |aktiverat        |
    |---------------------------------------------+-----------------|
    |dpkg -i package_name_version-debian.revision_|installera ett   |
    |arch.deb                                     |lokalt paket till|
    |                                             |systemet         |
    |---------------------------------------------+-----------------|
    |                                             |installera ett   |
    |                                             |lokalt paket i   |
    |                                             |systemet och     |
    |apt install /path/to/package_filename.deb    |under tiden      |
    |                                             |försöka lösa     |
    |                                             |beroendet        |
    |                                             |automatiskt      |
    |---------------------------------------------+-----------------|
    |debi package_name_version-debian.revision_   |installera lokala|
    |arch.dsc                                     |paket till       |
    |                                             |systemet         |
    |---------------------------------------------+-----------------|
    |                                             |spara dpkg nivå  |
    |dpkg --get-selections '*' >selection.txt     |paketval         |
    |                                             |statusinformation|
    |---------------------------------------------+-----------------|
    |                                             |set dpkg level   |
    |dpkg --set-selections <selection.txt         |information om   |
    |                                             |status för val av|
    |                                             |paket            |
    |---------------------------------------------+-----------------|
    |                                             |ställa in        |
    |                                             |paketvalsstatus  |
    |                                             |på dpkg-nivå för |
    |echo paketnamn hold | dpkg --set-selections  |ett paket att    |
    |                                             |hålla            |
    |                                             |(motsvarande     |
    |                                             |"aptitude hold   |
    |                                             |package_name")   |
    +---------------------------------------------------------------+


    Notera

    För ett paket med multi-arch-funktionen kan du behöva ange
    arkitekturnamnet för vissa kommandon. Använd till exempel "dpkg
    -L libglib2.0-0:amd64" för att lista innehållet i paketet
    libglib2.0-0 för arkitekturen amd64.

    Observera

    Paketverktyg på lägre nivå som "dpkg -i ..." och "debi ….." bör
    användas med försiktighet av systemadministratören. De tar inte
    automatiskt hand om nödvändiga paketberoenden. Dpkg:s
    kommandoradsalternativ "--force-all" och liknande (se dpkg(1)) är
    endast avsedda att användas av experter. Att använda dem utan att
    fullt ut förstå deras effekter kan förstöra hela ditt system.

    Vänligen notera följande.

      * Alla kommandon för systemkonfiguration och installation måste
        köras från root.

      * Till skillnad från aptitude som använder regex (se
        Avsnitt 1.6.2, ”Vanliga uttryck”) använder andra kommandon
        för pakethantering mönster som shell glob (se Avsnitt 1.5.6,
        ”Skal glob”).

      * apt-file(1) som tillhandahålls av apt-file-paketet måste köra
        "apt-file update" i förväg.

      * configure-debian(8) som tillhandahålls av paketet
        configure-debian använder dpkg-reconfigure(8) som backend.

      * dpkg-reconfigure(8) kör paketskript med debconf(1) som
        backend.

      * kommandona "apt-get build-dep", "apt-get source" och
        "apt-cache showsrc" kräver att "deb-src" anges i källistan.

      * dget(1), debuild(1) och debi(1) kräver paketet devscripts.

      * Se (om)paketeringsproceduren med hjälp av "apt-get source" på
        Avsnitt 2.7.13, ”Portering av ett paket till det stabila
        systemet”.

      * kommandot make-kpkg kräver paketet kernel-package (se
        Avsnitt 9.10, ”Kärnan”).

      * Se Avsnitt 12.9, ”Skapa Debian-paket” för allmänna
        förpackningar.

2.4.2. Verifiering av installerade paketfiler

    Installationen av debsums möjliggör verifiering av installerade
    paketfiler mot MD5sum-värden i filen "/var/lib/dpkg/info/
    *.md5sums" med debsums(1). Se Avsnitt 10.3.5, ”MD5-summan” för
    information om hur MD5sum fungerar.

    Notera

    Eftersom MD5sum-databasen kan manipuleras av en inkräktare är
    debsums(1) av begränsad nytta som säkerhetsverktyg. Det är bara
    bra för att kontrollera lokala ändringar av administratören eller
    skador på grund av mediefel.

2.4.3. Skydd för paketproblem

    Många användare föredrar att följa de testversioner (eller 
    unstable versioner) av Debian-systemet som innehåller nya
    funktioner och paket. Detta gör systemet mer benäget att drabbas
    av de kritiska paketbuggarna.

    Installationen av paketet apt-listbugs skyddar ditt system mot
    kritiska buggar genom att Debian BTS automatiskt kontrolleras för
    kritiska buggar vid uppgradering med APT-systemet.

    Installationen av paketet apt-listchanges ger viktiga nyheter i
    "NEWS.Debian" vid uppgradering med APT-systemet.

2.4.4. Sökning på paketets metadata

    Även om det numera är lätt att söka i paketets metadata genom att
    besöka Debians webbplats https://packages.debian.org/, ska vi
    titta på mer traditionella sätt.

    Kommandona grep-dctrl(1), grep-status(1) och grep-available(1)
    kan användas för att söka i alla filer som har det allmänna
    formatet för en Debian-paketkontrollfil.

    "dpkg -S file_name_pattern" kan användas för att söka efter
    paketnamn som innehåller filer med matchande namn som
    installerats av dpkg. Men detta förbiser filer som skapats av
    underhållsskript.

    Om du behöver göra en mer detaljerad sökning i dpkg:s metadata
    måste du köra kommandot "grep -e regex_pattern *" i katalogen "/
    var/lib/dpkg/info/". Detta gör att du kan söka på ord som nämns i
    paketskript och installationsfrågetexter.

    Om du vill söka efter paketberoenden rekursivt bör du använda
    apt-rdepends(8).

2.5. Interna funktioner för Debians pakethantering

    Låt oss lära oss hur Debians pakethanteringssystem fungerar
    internt. Detta bör hjälpa dig att skapa din egen lösning på vissa
    paketproblem.

2.5.1. Metadata för arkiv

    Metadatafiler för varje distribution lagras under "dist/codename"
    på varje Debian-spegelsida, t.ex. "http://deb.debian.org/debian/
    ". Dess arkivstruktur kan bläddras igenom med webbläsaren. Det
    finns 6 typer av nyckelmetadata.

    Tabell 2.14. Innehållet i Debian-arkivets metadata

    +---------------------------------------------------------------+
    |         fil         |      plats       |       innehåll       |
    |---------------------+------------------+----------------------|
    |Release              |toppen av         |arkivbeskrivning och  |
    |                     |distributionen    |integritetsinformation|
    |---------------------+------------------+----------------------|
    |                     |toppen av         |signaturfil för filen |
    |Release.gpg          |distributionen    |"Release" signerad med|
    |                     |                  |arkivnyckeln          |
    |---------------------+------------------+----------------------|
    |                     |toppen av         |lista över alla filer |
    |Contents-architecture|distributionen    |för alla paket i det  |
    |                     |                  |aktuella arkivet      |
    |---------------------+------------------+----------------------|
    |                     |toppen av varje   |arkivbeskrivning som  |
    |Release              |kombination av    |används för regeln i  |
    |                     |distribution/     |apt_preferences(5)    |
    |                     |område/arkitektur |                      |
    |---------------------+------------------+----------------------|
    |                     |toppen av varje   |                      |
    |                     |kombination av    |sammanlänkad debian/  |
    |Packages             |distribution/     |control för binära    |
    |                     |område/           |paket                 |
    |                     |binär-arkitektur  |                      |
    |---------------------+------------------+----------------------|
    |                     |toppen av varje   |sammanlänkad debian/  |
    |Sources              |kombination av    |control för           |
    |                     |distribution/     |källkodspaket         |
    |                     |område/källa      |                      |
    +---------------------------------------------------------------+


    I det senaste arkivet lagras dessa metadata som komprimerade och
    differentierade filer för att minska nätverkstrafiken.

2.5.2. "Release"-fil på högsta nivå och äkthet

    Tips
   
    Filen "Release" på högsta nivån används för att signera arkivet
    under det säkra APT-systemet.

    Varje svit i Debian-arkivet har en "Release"-fil på högsta nivån,
    t.ex. "http://deb.debian.org/debian/dists/unstable/Release",
    enligt följande.

    Origin: Debian
    Label: Debian
    Suite: unstable
    Codename: sid
    Date: Sat, 14 May 2011 08:20:50 UTC
    Valid-Until: Sat, 21 May 2011 08:20:50 UTC
    Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
    Components: main contrib non-free
    Description: Debian x.y Unstable - Not Released
    MD5Sum:
     bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
     9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
     3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
    ...

    Notera

    Här kan du läsa min motivering till att använda "suite" och
    "codename" i Avsnitt 2.1.5, ”Grunderna i Debian-arkivet”.
    "Distribution" används när man hänvisar till både "suite" och
    "codename". Alla arkivnamn för "area" som erbjuds av arkivet
    listas under "Components".

    Integriteten hos filen "Release" på högsta nivån verifieras av en
    kryptografisk infrastruktur som kallas secure apt och som
    beskrivs i apt-secure(8).

      * Den kryptografiska signaturfilen "Release.gpg" skapas från
        den autentiska toppnivåfilen "Release" och den hemliga
        Debian-arkivnyckeln.

      * De offentliga Debian-arkivnycklarna installeras lokalt med
        det senaste paketet debian-archive-keyring.

      * Det säkra APT-systemet verifierar automatiskt integriteten
        hos den nedladdade filen "Release" på högsta nivån
        kryptografiskt med hjälp av filen "Release.gpg" och de lokalt
        installerade offentliga Debian-arkivnycklarna.

      * Integriteten hos alla "Packages"- och "Sources"-filer
        verifieras med hjälp av MD5sum-värden i "Release"-filen på
        högsta nivån. Integriteten för alla paketfiler verifieras
        genom att använda MD5sum-värden i filerna "Packages" och
        "Sources". Se debsums(1) och Avsnitt 2.4.2, ”Verifiering av
        installerade paketfiler”.

      * Eftersom verifieringen av kryptografiska signaturer är en
        mycket mer processorkrävande process än beräkningen av
        MD5sum-värdet, ger användningen av MD5sum-värdet för varje
        paket samtidigt som kryptografisk signatur används för
        "Release"-filen på högsta nivå god säkerhet med hög prestanda
        (se Avsnitt 10.3, ”Infrastruktur för datasäkerhet”).

    Om posten i källistan anger alternativet "signed-by" verifieras
    integriteten hos den nedladdade "Release"-filen på högsta nivån
    med hjälp av den angivna offentliga nyckeln. Detta är användbart
    när källistan innehåller icke-Debian-arkiv.

    Tips
   
    Användningen av kommandot apt-key(8) för APT-nyckelhantering är
    föråldrad.

    Du kan också manuellt verifiera integriteten hos filen "Release"
    med filen "Release.gpg" och den offentliga Debian-arkivnyckeln
    som finns på ftp-master.debian.org med hjälp av gpg.

2.5.3. "Release"-filer på arkivnivå

    Tips
   
    Filerna på arkivnivån "Release" används för regeln i
    apt_preferences(5).

    Det finns "Release"-filer på arkivnivå för alla arkivplatser som
    anges i källistan, t.ex. "http://deb.debian.org/debian/dists/
    unstable/main/binary-amd64/Release" eller "http://deb.debian.org/
    debian/dists/sid/main/binary-amd64/Release" enligt följande.

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

    Observera

    För "Archive:" används svitnamn ("stable", "testing", "unstable",
    ...) i Debian-arkivet medan kodnamn ("trusty", "xenial",
    "artful", ...) används i Ubuntu-arkivet.

    För vissa arkiv, t.ex. experimental och trixie-backports, som
    innehåller paket som inte bör installeras automatiskt, finns det
    en extra rad, t.ex. "http://deb.debian.org/debian/dists/
    experimental/main/binary-amd64/Release" enligt följande.

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

    Observera att för normala arkiv utan "NotAutomatic: yes" är
    standardvärdet för Pin-Priority 500, medan för specialarkiv med
    "NotAutomatic: yes" är standardvärdet för Pin-Priority 1 (se
    apt_preferences(5) och Avsnitt 2.7.7, ”Justera kandidatversionen
    med apt-pinning”).

2.5.4. Hämtning av metadata för paketet

    När APT-verktyg, såsom aptitude, apt-get, synaptic, apt-file,
    auto-apt, ... används, måste vi uppdatera de lokala kopiorna av
    metadata som innehåller Debian-arkivinformationen. Dessa lokala
    kopior har följande filnamn som motsvarar de angivna
    distributions-, områdes- och arkitekturnamnen i källistan (se
    Avsnitt 2.1.5, ”Grunderna i Debian-arkivet”).

      * "/var/lib/apt/lists/deb.debian.
        org_debian_dists_distribution_Release"

      * "/var/lib/apt/lists/deb.debian.
        org_debian_dists_distribution_Release.gpg"

      * "/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area
        _binary-architecture_Packages"

      * "/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area
        _source_Sources"

      * "/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution
        _Contents-arkitektur.gz" (för apt-file)

    De första 4 typerna av filer delas av alla relevanta
    APT-kommandon och uppdateras från kommandoraden med "apt-get
    update" eller "aptitude update". Metadata för "Packages"
    uppdateras om "deb" anges i källistan. Metadata för "Sources"
    uppdateras om "deb-src" anges i källistan.

    Metadata för "Packages" och "Sources" innehåller
    "Filename:"-stanza som pekar på filplatsen för binär- och
    källkodspaketen. För närvarande finns dessa paket under
    katalogträdet "pool/" för att underlätta övergången mellan olika
    utgåvor.

    Lokala kopior av metadata för "Packages" kan sökas interaktivt
    med hjälp av aptitude. Det specialiserade sökkommandot grep-dctrl
    (1) kan söka i lokala kopior av metadata för "Packages" och
    "Sources".

    Den lokala kopian av metadata för "Contents-architecture" kan
    uppdateras med "apt-file update" och dess plats skiljer sig från
    de andra 4. Se apt-file(1). ( Auto-Apt använder som standard en
    annan plats för den lokala kopian av "Contents-architecture.gz")

2.5.5. Paketstatus för APT

    Förutom de fjärrhämtade metadata lagrar APT-verktyget efter Lenny
    sin lokalt genererade information om installationsstatus i "/var/
    lib/apt/extended_states", som används av alla APT-verktyg för att
    spåra alla automatiskt installerade paket.

2.5.6. Paketstatus för aptitude

    Förutom de metadata som hämtas på distans lagrar kommandot
    aptitude sin lokalt genererade information om installationsstatus
    i "/var/lib/aptitude/pkgstates", som endast används av kommandot.

2.5.7. Lokala kopior av de hämtade paketen

    Alla paket som hämtas på distans via APT-mekanismen lagras i "/
    var/cache/apt/archives" tills de rensas.

    Denna policy för rensning av cachefiler för aptitude kan ställas
    in under "Alternativ" → "Inställningar" och den kan tvingas fram
    via menyn "Rensapaketcache" eller "Rensaföråldrade filer" under
    "Åtgärder".

2.5.8. Debian paket filnamn

    Debians paketfiler har särskilda namnstrukturer.

    Tabell 2.15. Namnstrukturen för Debian-paket

    +-----------------------------------------------------------------------------+
    |    paket typ     |                      namn struktur                       |
    |------------------+----------------------------------------------------------|
    |Det binära paketet|paketnamn_upstream-version-debian.revision_arkitektur.deb |
    |(a.k.a deb)       |                                                          |
    |------------------+----------------------------------------------------------|
    |Det binära paketet|                                                          |
    |för               |paketnamn_upstream-version-debian.revision_arkitektur.udeb|
    |debian-installer  |                                                          |
    |(även kallat udeb)|                                                          |
    |------------------+----------------------------------------------------------|
    |Källkodspaketet   |paketnamn_upstream-version-debian.revision.orig.tar.gz    |
    |(uppströmskälla)  |                                                          |
    |------------------+----------------------------------------------------------|
    |Källkodspaketet   |                                                          |
    |1.0               |package-name_upstream-version-debian.revision.diff.gz     |
    |(Debian-ändringar)|                                                          |
    |------------------+----------------------------------------------------------|
    |Källkodspaketet   |                                                          |
    |3.0 (quilt )      |paketnamn_upstream-version-debian.revision.debian.tar.gz  |
    |(Debian-ändringar)|                                                          |
    |------------------+----------------------------------------------------------|
    |Källpaketet       |paketnamn_upstream-version-debian.revision.dsc            |
    |(beskrivning)     |                                                          |
    +-----------------------------------------------------------------------------+


    Tips
   
    Här beskrivs endast de grundläggande formaten för källkodspaket.
    Se mer på dpkg-source(1).

    Tabell 2.16. De användbara tecknen för varje komponent i
    Debian-paketets namn

    +-------------------------------------------------------+
    | namn komponent |användbara tecken (ERE regex)|existens|
    |----------------+-----------------------------+--------|
    |paket-namn      |[a-z0-9][-a-z0-9.+]+         |krävs   |
    |----------------+-----------------------------+--------|
    |epoch:          |[0-9]+:                      |valfritt|
    |----------------+-----------------------------+--------|
    |upstream-version|[-a-zA-Z0-9.+:]+             |krävs   |
    |----------------+-----------------------------+--------|
    |debian.revision |[a-zA-Z0-9.+~]+              |valfritt|
    +-------------------------------------------------------+


    Notera
   
    Du kan kontrollera paketets versionsordning med dpkg(1), t.ex.
    "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?" .

    Notera

    Debian-installer (d-i) använder udeb som filändelse för sitt
    binära paket i stället för vanliga deb. Ett udeb-paket är ett
    nedbantat deb-paket som tar bort en del oväsentligt innehåll,
    t.ex. dokumentation, för att spara utrymme och samtidigt lätta på
    kraven i paketpolicyn. Både deb- och udeb-paketen delar samma
    paketstruktur. "u" står för micro.

2.5.9. Kommandot dpkg

    dpkg(1) är verktyget på lägsta nivå för Debians pakethantering.
    Det är mycket kraftfullt och måste användas med försiktighet.

    Under installationen av paketet med namnet "paketets_namn",
    bearbetar dpkg det i följande ordning.

     1. Packa upp deb-filen (motsvarande "ar -x")

     2. Kör"package_name.preinst" med debconf(1)
   
     3. Installera paketets innehåll i systemet ("tar
        -x"-motsvarighet)

     4. Kör"package_name.postinst" med debconf(1)

    Debconf-systemet tillhandahåller standardiserad
    användarinteraktion med I18N- och L10N-stöd (Kapitel 8, I18N och
    L10N).

    Tabell 2.17. De anmärkningsvärda filer som skapats av dpkg

    +---------------------------------------------------------------+
    |         fil          |        beskrivning av innehåll         |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |lista över konfigurationsfiler. (kan    |
    |package_name.conffiles|ändras av användaren)                   |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |lista över filer och kataloger som      |
    |package_name.list     |installerats av paketet                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |lista över MD5-hashvärden för filer som |
    |package_name.md5sums  |installerats av paketet                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |paketskript som ska köras innan paketet |
    |package_name.preinst  |installeras                             |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |paketskript som ska köras efter         |
    |package_name.postinst |installationen av paketet               |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |paketskript som ska köras innan paketet |
    |package_name.prerm    |tas bort                                |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |paketskript som ska köras efter att     |
    |package_name.postrm   |paketet har tagits bort                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |paket skript för debconf system         |
    |package_name.config   |                                        |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |den alternativa information som används |
    |alternatives/         |av kommandot update-alternatives        |
    |package_name          |                                        |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |information om tillgänglighet för alla  |
    |available             |paket                                   |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |den avledningsinformation som används av|
    |diversions            |dpkg(1) och som ställs in av dpkg-divert|
    |                      |(8)                                     |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |information om stat-överstyrning som    |
    |statoverride          |används av dpkg(1) och ställs in av     |
    |                      |dpkg-statoverride(8)                    |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/status  |statusinformation för alla paket        |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |den första generationens säkerhetskopia |
    |status-old            |av filen "var/lib/dpkg/status"          |
    |----------------------+----------------------------------------|
    |/var/backups/         |andra generationens säkerhetskopia och  |
    |dpkg.status*          |äldre versioner av filen "var/lib/dpkg/ |
    |                      |status"                                 |
    +---------------------------------------------------------------+


    Filen "status" används också av verktyg som dpkg(1), "dselect
    update" och "apt-get -u dselect-upgrade".

    Det specialiserade sökkommandot grep-dctrl(1) kan söka i de
    lokala kopiorna av metadata för "status" och "available".

    Tips

    I debian-installer-miljön används kommandot udpkg för att öppna
    udeb-paket. Kommandot udpkg är en nedbantad version av kommandot
    dpkg.

2.5.10. Kommandot update-alternatives

    Debian-systemet har en mekanism för att installera överlappande
    program på ett fredligt sätt med hjälp av update-alternatives(1).
    Du kan till exempel låta vi-kommandot välja att köra vim
    samtidigt som du installerar både vim- och nvi-paket.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

    Debians alternativsystem behåller sitt urval som symlänkar i "/
    etc/alternatives/". Urvalsprocessen använder motsvarande fil i "/
    var/lib/dpkg/alternatives/".

2.5.11. Kommandot dpkg-statoverride

    Stat-överskrivningar som tillhandahålls av kommandot
    dpkg-statoverride(8) är ett sätt att tala om för dpkg(1) att
    använda en annan ägare eller ett annat läge för en fil när ett
    paket installeras. Om "--update" anges och filen finns, sätts den
    omedelbart till den nya ägaren och det nya läget.

    Observera

    Om systemadministratören direkt ändrar ägare eller läge för en 
    fil som ägs av paketet med hjälp av kommandona chmod eller chown
    återställs detta vid nästa uppgradering av paketet.

    Notera

    Jag använder ordet fil här, men i själva verket kan det vara
    vilket filsystemobjekt som helst som dpkg hanterar, inklusive
    kataloger, enheter etc.

2.5.12. Kommandot dpkg-divert

    Filavledningar som tillhandahålls av kommandot dpkg-divert(8) är
    ett sätt att tvinga dpkg(1) att inte installera en fil på dess
    standardplats, utan på en avledd plats. Användningen av
    dpkg-divert är avsedd för skript för paketunderhåll. Den
    tillfälliga användningen av systemadministratören är föråldrad.

2.6. Återhämtning från ett trasigt system

    När testing eller unstable system körs förväntas administratören
    återhämta sig från en trasig pakethanteringssituation.

    Observera
   
    Vissa metoder som beskrivs här är högriskåtgärder. Du har blivit
    varnad!

2.6.1. Inkompatibilitet med gammal användarkonfiguration

    Om ett grafiskt gränssnittsprogram för skrivbord upplevde
    instabilitet efter en betydande uppgradering av
    uppströmsversionen, bör du misstänka störningar i gamla lokala
    konfigurationsfiler som skapats av det. Om det är stabilt under
    ett nyskapat användarkonto bekräftas denna hypotes. (Detta är ett
    fel i paketeringen som vanligtvis undviks av paketeraren)

    För att återställa stabiliteten bör du flytta motsvarande lokala
    konfigurationsfiler och starta om GUI-programmet. Du kan behöva
    läsa innehållet i gamla konfigurationsfiler för att återskapa
    konfigurationsinformation senare. (Radera dem inte för snabbt.)

2.6.2. Cachelagring av fel i paketdata

    Cachningsfel i paketdata orsakar spännande fel, t.ex. "GPG-fel:
    ... ogiltigt: BADSIG ..." med APT.

    Du bör ta bort alla cachade data med "sudo rm -rf /var/lib/apt/*
    " och försöka igen. (Om apt-cacher-ng används bör du även köra
    "sudo rm -rf /var/cache/apt-cacher-ng/* ")

2.6.3. Räddning med kommandot dpkg

    Eftersom dpkg är ett paketverktyg på mycket låg nivå kan det
    fungera utan nätverksanslutning.

    Låt oss anta att foo-paketet var trasigt och behöver åtgärdas.

    Du kan fortfarande hitta cachade kopior av äldre buggfria
    versioner av foo-paketet i paketets cachekatalog: "/var/cache/apt
    /archives/". (Om inte, kan du hämta den från arkivet på https://
    snapshot.debian.org/ eller kopiera den från paketcachen på en
    fungerande maskin)

    Om du kan starta upp systemet kan du installera det med följande
    kommando.

    # dpkg -i /path/to/foo_old_version_arch.deb

    Om ett försök att installera ett paket på det här sättet
    misslyckas på grund av vissa beroendeöverträdelser och du
    verkligen måste göra detta som en sista utväg, kan du åsidosätta
    beroendet med hjälp av dpkg:s "--ignore-depends",
    "--force-depends" och andra alternativ. Om du gör detta måste du
    anstränga dig ordentligt för att återställa korrekt beroende
    senare. Se dpkg(8) för mer information.

    Notera

    Om ditt system är allvarligt trasigt bör du göra en fullständig
    säkerhetskopia av systemet på en säker plats (se Avsnitt 10.2,
    ”Backup och återställning”) och utföra en ren installation. Detta
    är mindre tidskrävande och ger bättre resultat i slutändan.

    Tips

    Om systemhaveriet är mindre kan man alternativt nedgradera hela
    systemet som i Avsnitt 2.7.11, ”Akut nedgradering” genom att
    använda APT-systemet på högre nivå.

2.6.4. Misslyckad installation på grund av att beroenden saknas

    Om du försöker installera ett paket med "sudo dpkg -i ..." på ett
    system där alla beroendepaket inte är installerade, kommer
    paketinstallationen att misslyckas som delvis installerad.

    You should install all dependency packages by repeatedly using
    "sudo dpkg -i ..." or by using:

    # apt --fix-broken install

    Konfigurera sedan alla delvis installerade paket med följande
    kommando.

    # dpkg --configure -a

2.6.5. Olika paket med överlappande filer

    Pakethanteringssystem på arkivnivå, t.ex. aptitude(8) eller
    apt-get(1), försöker inte ens installera paket med överlappande
    filer med hjälp av paketberoenden (se Avsnitt 2.1.7, ”Beroenden
    av paket”).

    Fel från paketunderhållaren eller distribution av inkonsekvent
    blandade arkivkällor (se Avsnitt 2.7.6, ”Paket från blandade
    arkivkällor utan apt-pinning”) av systemadministratören kan skapa
    en situation med felaktigt definierade paketberoenden. När du
    installerar ett paket med överlappande filer med aptitude(8)
    eller apt-get(1) i en sådan situation, ser dpkg(1) som packar upp
    paketet till att returnera fel till det anropande programmet utan
    att skriva över befintliga filer.

    Observera

    Användningen av tredjepartspaket medför betydande systemrisker
    via underhållsskript som körs med root-rättigheter och kan göra
    vad som helst med ditt system. Kommandot dpkg(1) skyddar endast
    mot överskrivning vid uppackning.

    Du kan komma runt en sådan trasig installation genom att ta bort
    det gamla felaktiga paketet, gamla paketetförst.

    $ sudo dpkg -P old-package

2.6.6. Åtgärdar trasigt paketskript

    När ett kommando i paketskriptet av någon anledning returnerar
    ett felmeddelande och skriptet avslutas med ett felmeddelande
    avbryter pakethanteringssystemet sin åtgärd och får delvis
    installerade paket. När ett paket innehåller buggar i sina
    borttagningsskript kan paketet bli omöjligt att ta bort och
    ganska otrevligt.

    För problemet med paketskriptet "paketets_namn", bör du titta på
    följande paketskript.

      * "/var/lib/dpkg/info/package_name.preinst"

      * "/var/lib/dpkg/info/package_name.postinst"
   
      * "/var/lib/dpkg/info/package_name.prerm"

      * "/var/lib/dpkg/info/package_name.postrm"

    Redigera det felaktiga paketskriptet från roten med hjälp av
    följande tekniker.

      * inaktivera den kränkande raden genom att föregå "#"
   
      * tvinga fram en lyckad retur genom att lägga till "|| true" på
        den felaktiga raden

    Konfigurera sedan alla delvis installerade paket med följande
    kommando.

    # dpkg --configure -a

2.6.7. Återställning av data för paketval

    Om "/var/lib/dpkg/status" blir korrupt av någon anledning,
    förlorar Debiansystemet data om paketval och drabbas hårt. Leta
    efter den gamla filen "/var/lib/dpkg/status" i "/var/lib/dpkg/
    status-old" eller "/var/backups/dpkg.status.*".

    Att ha "/var/backups/" i en separat partition kan vara en bra idé
    eftersom den här katalogen innehåller massor av viktiga
    systemdata.

    Vid allvarliga skador rekommenderar jag att man gör en
    nyinstallation efter att ha tagit en säkerhetskopia av systemet.
    Även om allt i "/var/" är borta kan du fortfarande återskapa viss
    information från kataloger i "/usr/share/doc/" för att vägleda
    din nya installation.

    Installera om det minimala systemet (skrivbordet).

    # mkdir -p /path/to/old/system

    Montera det gamla systemet på "/path/to/old/system/".

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

    Sedan presenteras du med paketnamn som ska installeras. (Det kan
    finnas några icke-paketnamn som "texmf".)

2.7. Tips för pakethantering

    För enkelhetens skull presenteras exemplen på källistan i det här
    avsnittet som "/etc/apt/sources.list" i enradig stil efter
    utgåvan trixie.

2.7.1. Vem laddade upp paketet?

    Även om namnet på underhållaren som anges i "/var/lib/dpkg/
    available" och "/usr/share/doc/package_name/changelog" ger viss
    information om "vem som ligger bakom paketeringsaktiviteten", är
    den faktiska uppladdaren av paketet något dunkel. who-uploads(1)
    i devscripts-paketet identifierar den faktiska uppladdaren av
    Debians källkodspaket.

2.7.2. Begränsning av nedladdningsbandbredd för APT

    Om du vill begränsa nedladdningsbandbredden för APT till t.ex.
    800Kib/sek (=100kiB/sek) ska du konfigurera APT med följande
    konfigurationsparameter.

    APT::Acquire::http::Dl-Limit "800";

2.7.3. Automatisk nedladdning och uppgradering av paket

    Paketet apt levereras med ett eget cron-skript "/etc/cron.daily/
    apt" för att stödja automatisk nedladdning av paket. Detta skript
    kan förbättras för att utföra automatisk uppgradering av paket
    genom att installera paketet unattended-upgrades. Dessa kan
    anpassas med parametrar i "/etc/apt/apt.conf.d/02backup" och "/
    etc/apt/apt.conf.d/50unattended-upgrades" som beskrivs i "/usr/
    share/doc/unattended-upgrades/README".

    Paketet unattended-upgrades är huvudsakligen avsett för
    säkerhetsuppgraderingar av stable system. Om risken för att ett
    befintligt stable system bryts ned av den automatiska
    uppgraderingen är mindre än risken för att systemet bryts ned av
    en inkräktare som använder ett säkerhetshål som har täppts till
    av säkerhetsuppdateringen, bör du överväga att använda denna
    automatiska uppgradering med konfigurationsparametrar enligt
    följande.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "1";

    Om du kör ett testing eller unstable system vill du inte använda
    den automatiska uppgraderingen eftersom systemet då säkert går
    sönder någon dag. Även i sådana testing eller unstable fall kan
    du ändå vilja hämta paket i förväg för att spara tid för den
    interaktiva uppgraderingen med konfigurationsparametrar som
    följande.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "0";

2.7.4. Uppdateringar och baksidor

    Det finns stable-updates ( "trixie-updates" under
    utgivningscykeln trixie-as-stable ) och
    backports.debian.org-arkiv som tillhandahåller uppgraderingspaket
    för stable.

    För att kunna använda dessa arkiv måste du lista alla nödvändiga
    arkiv i filen "/etc/apt/sources.list" enligt följande.

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-backports main non-free-firmware contrib non-free

    Det finns inget behov av att ange Pin-Priority-värdet explicit i
    filen "/etc/apt/preferences". När nyare paket blir tillgängliga
    ger standardkonfigurationen de flesta rimliga uppgraderingar (se
    Avsnitt 2.5.3, ”"Release"-filer på arkivnivå”).

      * Alla installerade äldre paket uppgraderas till nyare från
        trixie-updates.
   
      * Endast manuellt installerade äldre paket från
        trixie-backports uppgraderas till nyare paket från
        trixie-backports.

    När du vill installera ett paket med namnet "paket-namn" med dess
    beroende från trixie-backports arkiv manuellt, använder du
    följande kommando medan du byter målversion med alternativet
    "-t".

    $ sudo apt-get install -t trixie-backports package-name

    Varning

    Installera inte för många paket från
    backports.debian.org-arkiven. Det kan orsaka komplikationer med
    paketberoenden. Se Avsnitt 2.1.11, ”Hur man hanterar motstridiga
    krav” för alternativa lösningar.

2.7.5. Externa paketarkiv

    Varning

    Du bör vara medveten om att det externa paketet får
    root-behörighet till ditt system. Du bör endast använda det
    betrodda externa paketarkivet. Se Avsnitt 2.1.11, ”Hur man
    hanterar motstridiga krav” för alternativa lösningar.

    Du kan använda säker APT med Debian-kompatibla externa paketarkiv
    genom att lägga till det i källistan och dess arkivnyckelfil i
    katalogen "/etc/apt/trusted.gpg.d/". Se sources.list(5),
    apt-secure(8) och apt-key(8).

2.7.6. Paket från blandade arkivkällor utan apt-pinning

    Observera

    Installation av paket från blandade arkivkällor stöds inte av den
    officiella Debian-distributionen, med undantag för officiellt
    stödda särskilda kombinationer av arkiv, t.ex. stable med
    säkerhetsuppdateringar och stable-updates.

    Här är ett exempel på åtgärder för att inkludera specifika paket
    med nyare uppströmsversioner som finns i unstable när du spårar
    testing för ett enstaka tillfälle.

     1. Ändra filen "/etc/apt/sources.list" tillfälligt till en enda
        "unstable"-post.

     2. Kör "aptitude update".

     3. Kör "aptitude install paket-namn".

     4. Återställ den ursprungliga filen "/etc/apt/sources.list" för
        testing.

     5. Kör "aptitude update".

    Du skapar inte filen "/etc/apt/preferences" och behöver inte
    heller oroa dig för apt-pinning med detta manuella
    tillvägagångssätt. Men detta är mycket besvärligt.

    Observera

    När du använder blandade arkivkällor måste du själv se till att
    paketen är kompatibla, eftersom Debian inte garanterar det. Om
    paket inte är kompatibla kan det leda till att systemet inte
    fungerar. Du måste kunna bedöma dessa tekniska krav. Användningen
    av blandade källor av slumpmässiga arkiv är helt valfri och det
    är inget jag uppmuntrar dig att använda.

    Allmänna regler för installation av paket från olika arkiv är
    följande.

      * Icke-binära paket ( "Architecture: all") är säkrare att
        installera.

          + dokumentationspaket: inga särskilda krav

          + tolkprogramspaket: kompatibel tolk måste finnas
            tillgänglig

      * Binära paket (icke "Architecture: all") möter vanligtvis
        många vägspärrar och är osäkra att installera.

          + kompatibilitet med biblioteksversioner (inklusive "libc")

          + relaterat verktyg programversion kompatibilitet

          + ABI-kompatibilitet för kärnan

          + Kompatibilitet med C++ ABI

          + …

    Notera

    För att göra ett paket säkrare att installera kan vissa
    kommersiella, icke-fria binära programpaket innehålla helt
    statiskt länkade bibliotek. Du bör ändå kontrollera
    ABI-kompatibilitetsproblem etc. för dem.

    Notera

    Förutom för att undvika trasiga paket på kort sikt, är det i
    allmänhet en dålig idé att installera binära paket från
    icke-Debian-arkiv. Du bör söka efter alla tillgängliga
    alternativa säkrare tekniska lösningar som är kompatibla med ditt
    nuvarande Debian-system (se Avsnitt 2.1.11, ”Hur man hanterar
    motstridiga krav”).

2.7.7. Justera kandidatversionen med apt-pinning

    Varning

    Use of apt-pinning technique by a novice user is sure call for
    major troubles. You must avoid using this technique except when
    you absolutely need it. See Avsnitt 2.1.11, ”Hur man hanterar
    motstridiga krav” for alternative solutions.

    Utan filen "/etc/apt/preferences" väljer APT-systemet den senast
    tillgängliga versionen som kandidatversion med hjälp av
    versionssträngen. Detta är det normala tillståndet och den mest
    rekommenderade användningen av APT-systemet. Alla officiellt
    stödda kombinationer av arkiv kräver inte filen "/etc/apt/
    preferences" eftersom vissa arkiv som inte bör användas som
    automatisk källa för uppgraderingar markeras som NotAutomatic och
    hanteras på rätt sätt.

    Tips

    Jämförelseregeln för versionssträngar kan verifieras med t.ex.
    "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" (se dpkg
    (1)).

    När du regelbundet installerar paket från blandade arkivkällor
    (se Avsnitt 2.7.6, ”Paket från blandade arkivkällor utan 
    apt-pinning”) kan du automatisera dessa komplicerade operationer
    genom att skapa filen "/etc/apt/preferences" med rätt poster och
    justera paketvalsregeln för kandidatversionen enligt
    beskrivningen i apt_preferences(5). Detta kallas apt-pinning.

    När du använder apt-pinning måste du själv se till att paketen är
    kompatibla eftersom Debian inte garanterar det. Apt-pinning är en
    helt frivillig åtgärd och jag uppmuntrar inte till att använda
    den.

    Release-filer på arkivnivå (se Avsnitt 2.5.3, ”"Release"-filer på
    arkivnivå”) används för regeln i apt_preferences(5). Således
    fungerar apt-pinning endast med "suite"-namn för normala
    Debian-arkiv och Debian-arkiv för säkerhet. (Detta skiljer sig
    från Ubuntu-arkiv.) Du kan t.ex. göra "Pin: release a=unstable"
    men inte "Pin: release a=sid" i filen "/etc/apt/preferences".

    När du använder icke-Debian-arkiv som en del av apt-pinning bör
    du kontrollera vad de är avsedda för och även kontrollera deras
    trovärdighet. Ubuntu och Debian är till exempel inte avsedda att
    blandas.

    Notera

    Även om du inte skapar filen "/etc/apt/preferences" kan du utföra
    ganska komplexa systemoperationer (se Avsnitt 2.6.3, ”Räddning
    med kommandot dpkg” och Avsnitt 2.7.6, ”Paket från blandade
    arkivkällor utan apt-pinning”) utan apt-pinning.

    Här följer en förenklad förklaring av apt-pinning-tekniken.

    APT-systemet väljer det uppgraderingspaket med högst
    Pin-prioritet från tillgängliga paketkällor som definieras i
    filen "/etc/apt/sources.list" som kandidatversionspaket. Om
    paketets Pin-Priority är större än 1000, tas denna
    versionsbegränsning för uppgradering bort för att möjliggöra
    nedgradering (se Avsnitt 2.7.11, ”Akut nedgradering”).

    Pin-Priority-värdet för varje paket definieras av
    "Pin-Priority"-poster i filen "/etc/apt/preferences" eller
    använder dess standardvärde.

    Tabell 2.18. Lista över anmärkningsvärda Pin-Priority-värden för 
    apt-pinning-teknik.

    +---------------------------------------------------------------+
    |Pin-prioritet|        apt-pinning effekter till paketet        |
    |-------------+-------------------------------------------------|
    |1001         |installera paketet även om detta utgör en        |
    |             |nedgradering av paketet                          |
    |-------------+-------------------------------------------------|
    |990          |används som standard för målversionens arkiv     |
    |-------------+-------------------------------------------------|
    |500          |används som standard för det normala arkivet     |
    |-------------+-------------------------------------------------|
    |100          |används som standard för arkiven NotAutomatic och|
    |             |ButAutomaticUpgrades                             |
    |-------------+-------------------------------------------------|
    |100          |används för det installerade paketet             |
    |-------------+-------------------------------------------------|
    |1            |används som standard för NotAutomatic-arkivet    |
    |-------------+-------------------------------------------------|
    |-1           |installera aldrig paketet även om det            |
    |             |rekommenderas                                    |
    +---------------------------------------------------------------+


    Målarkivet för utgåvan kan anges med
    kommandoradsalternativet,t.ex. "apt-get install -t testing
    some-package"

    Arkivet NotAutomatic and ButAutomaticUpgrades skapas genom att
    arkivservern har en Release-fil på arkivnivå (se Avsnitt 2.5.3,
    ”"Release"-filer på arkivnivå”) som innehåller både
    "NotAutomatic: yes" och "ButAutomaticUpgrades: yes". 
    NotAutomatic-arkivet skapas genom att arkivservern har en
    Release-fil på arkivnivå som endast innehåller
    "NotAutomatic:yes".

    Situationen med apt-pinning av paket från flera arkivkällor visas
    av "apt-cache policy package".

      * En rad som börjar med "Package pin:" listar paketversionen av
        pin om associationen bara med paket är definierad, t.ex.
        "Package pin: 0.190".

      * Ingen rad med "Paketnål:" finns om ingen association bara med
        paketet är definierad.

      * Pin-Priority-värdet som bara är associerat med paketet anges
        till höger om alla versionssträngar, t.ex. "0.181 700".

      * "0" anges på höger sida av alla versionssträngar om ingen
        koppling till paketet har definierats, t.ex. "0.181 0".

      * Arkivens Pin-Priority-värden (definierade som "Package: *" i
        filen "/etc/apt/preferences") listas till vänster om alla
        arkivsökvägar, t.ex. "100 http://deb.debian.org/debian/
        trixie-backports/main Packages".

2.7.8. Blockeringspaket installerade av "Recommends"

    Varning

    Use of apt-pinning technique by a novice user is sure call for
    major troubles. You must avoid using this technique except when
    you absolutely need it. See Avsnitt 2.1.11, ”Hur man hanterar
    motstridiga krav” for alternative solutions.

    Om du inte vill att vissa paket ska hämtas automatiskt av
    "Recommends" måste du skapa filen "/etc/apt/preferences" och
    uttryckligen lista alla dessa paket högst upp i den på följande
    sätt.

    Package: package-1
    Pin: version *
    Pin-Priority: -1
   
    Package: package-2
    Pin: version *
    Pin-Priority: -1

2.7.9. Spåra testing med vissa paket från unstable

    Varning

    Use of apt-pinning technique by a novice user is sure call for
    major troubles. You must avoid using this technique except when
    you absolutely need it. See Avsnitt 2.1.11, ”Hur man hanterar
    motstridiga krav” for alternative solutions.

    Här är ett exempel på apt-pinning-teknik för att inkludera
    specifika nyare uppströmsversionspaket som finns i unstable
    regelbundet uppgraderade när man följer testing. Du listar alla
    nödvändiga arkiv i filen "/etc/apt/sources.list" enligt följande.

    deb http://deb.debian.org/debian/ testing main contrib non-free
    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://security.debian.org/debian-security testing-security main contrib

    Ställ in filen "/etc/apt/preferences" enligt följande.

    Package: *
    Pin: release a=unstable
    Pin-Priority: 100

    När du vill installera ett paket med namnet "paket-namn" med dess
    beroenden från unstable-arkivet under denna konfiguration, ger du
    följande kommando som byter målversion med alternativet "-t"
    (Pin-prioritet för unstable blir 990).

    $ sudo apt-get install -t unstable package-name

    Med den här konfigurationen uppgraderas paket som installerades
    från testarkivet med det aktuella testarkivet och paket som
    installerades från det unstable arkivet med det aktuella unstable
    arkivet genom att köra "apt-get upgrade" och
    "apt-getdist-upgrade" (eller "aptitude safe-upgrade" och
    "aptitude full-upgrade").

    Observera

    Var försiktig så att du inte tar bort "testing"-posten från filen
    "/etc/apt/sources.list". Utan "testing"-posten i den uppgraderar
    APT-systemet paket med nyare unstable arkiv.

    Tips

    Jag brukar redigera filen "/etc/apt/sources.list" för att
    kommentera bort arkivposten "unstable" direkt efter ovanstående
    operation. Detta undviker en långsam uppdateringsprocess på grund
    av för många poster i filen "/etc/apt/sources.list", även om det
    förhindrar uppgradering av paket som installerades från ett
    unstable-arkiv med hjälp av det aktuella unstable-arkivet.

    Tips

    Om "Pin-Priority: 1" används i stället för "Pin-Priority: 100" i
    filen "/etc/apt/preferences", uppgraderas inte redan installerade
    paket med Pin-Priority-värdet 100 av unstable archive även om
    posten "testing" i filen "/etc/apt/sources.list" tas bort.

    Om du vill spåra vissa paket i unstable automatiskt utan
    inledande installation av "-t unstable", måste du skapa filen "/
    etc/apt/preferences" och uttryckligen lista alla dessa paket
    högst upp i den enligt följande.

    Package: package-1
    Pin: release a=unstable
    Pin-Priority: 700
   
    Package: package-2
    Pin: release a=unstable
    Pin-Priority: 700

    Dessa anger Pin-Priority-värdet för varje specifikt paket. För
    att till exempel spåra den senaste unstable versionen av denna
    "Debian Reference" på engelska, bör du ha följande poster i filen
    "/etc/apt/preferences".

    Package: debian-reference-en
    Pin: release a=unstable
    Pin-Priority: 700
   
    Package: debian-reference-common
    Pin: release a=unstable
    Pin-Priority: 700

    Tips

    Denna apt-pinning-teknik är giltig även när du spårar stable
    arkiv. Dokumentationspaket har alltid varit säkra att installera
    från unstable arkiv enligt min erfarenhet hittills.

2.7.10. Spårning unstable med vissa paket från experimental

    Varning

    Use of apt-pinning technique by a novice user is sure call for
    major troubles. You must avoid using this technique except when
    you absolutely need it. See Avsnitt 2.1.11, ”Hur man hanterar
    motstridiga krav” for alternative solutions.

    Här är ett annat exempel på apt-pinning-teknik för att inkludera
    specifika nyare uppströmsversionspaket som finns i experimental
    medan de spårar unstable. Du listar alla nödvändiga arkiv i filen
    "/etc/apt/sources.list" enligt följande.

    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://deb.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ testing-security main contrib

    Standardvärdet för Pin-Priority för experimentella arkiv är
    alltid 1 (<<100) eftersom det inte är ett automatiskt arkiv (se
    Avsnitt 2.5.3, ”"Release"-filer på arkivnivå”). Det finns inget
    behov av att ange Pin-Priority-värdet explicit i filen "/etc/apt/
    preferences" bara för att använda experimentarkivet, såvida du
    inte vill spåra vissa paket i det automatiskt för nästa
    uppgradering.

2.7.11. Akut nedgradering

    Varning

    Use of apt-pinning technique by a novice user is sure call for
    major troubles. You must avoid using this technique except when
    you absolutely need it. See Avsnitt 2.1.11, ”Hur man hanterar
    motstridiga krav” for alternative solutions.

    Observera

    Nedgradering stöds inte officiellt av Debian, vilket är meningen.
    Det bör endast göras som en del av en nödåterställningsprocess.
    Trots detta är det känt att det fungerar bra vid många
    incidenter. För kritiska system bör du säkerhetskopiera alla
    viktiga data på systemet efter återställningen och installera om
    det nya systemet från grunden.

    Du kan ha turen att kunna nedgradera från ett nyare arkiv till
    ett äldre arkiv för att återställa en trasig systemuppgradering
    genom att manipulera kandidatversionen (se Avsnitt 2.7.7,
    ”Justera kandidatversionen med apt-pinning”). Detta är ett lata
    alternativ till tråkiga åtgärder med många "dpkg -i 
    broken-package_old-version.deb"-kommandon (se Avsnitt 2.6.3,
    ”Räddning med kommandot dpkg”).

    Sök rader i filen "/etc/apt/sources.list" som spårar unstable som
    följande.

    deb http://deb.debian.org/debian/ sid main contrib non-free

    Ersätt det med följande för att spåra testing.

    deb http://deb.debian.org/debian/ forky main contrib non-free

    Ställ in filen "/etc/apt/preferences" enligt följande.

    Package: *
    Pin: release a=testing
    Pin-Priority: 1010

    Kör "apt-get update; apt-get dist-upgrade" för att tvinga fram
    nedgradering av paket i hela systemet.

    Ta bort den här speciella filen "/etc/apt/preferences" efter
    denna akuta nedgradering.

    Tips

    Det är en bra idé att ta bort (inte rensa!) så många paket som
    möjligt för att minimera beroendeproblem. Du kan behöva ta bort
    och installera vissa paket manuellt för att få systemet
    nedgraderat. Linuxkärnan, bootloader, udev, PAM, APT och
    nätverksrelaterade paket och deras konfigurationsfiler kräver
    särskild uppmärksamhet.

2.7.12. Equivs-paketet

    Om du ska kompilera ett program från källkod för att ersätta
    Debian-paketet, är det bäst att göra det till ett riktigt lokalt
    debianiserat paket(*.deb) och använda privat arkiv.

    Om du väljer att kompilera ett program från källkod och
    installera dem under "/usr/local" istället, kan du behöva använda
    equivs som en sista utväg för att tillgodose det saknade
    paketberoendet.

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

2.7.13. Portering av ett paket till det stabila systemet

    Observera

    Det finns ingen garanti för att det förfarande som beskrivs här
    fungerar utan extra manuella insatser på grund av
    systemskillnader.

    För partiella uppgraderingar av det stable systemet är det
    önskvärt att bygga om ett paket inom dess miljö med hjälp av
    källpaketet. På så sätt undviks omfattande uppgraderingar av
    paket på grund av deras beroenden.

    Lägg till följande poster i "/etc/apt/sources.list" i ett stable
    system.

    deb-src http://deb.debian.org/debian unstable  main contrib non-free

    Installera de paket som krävs för kompilering och ladda ner
    källkodspaketet enligt följande.

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

    Uppdatera vissa verktygskedjepaket som dpkg och debhelper från
    bakåtporteringspaketen om de krävs för bakåtporteringen.

    Utför följande.

    $ dch -i

    Bump-paketversion, t.ex. en som har tillägget "+bp1" i "debian/
    changelog"

    Bygg paket och installera dem i systemet på följande sätt.

    $ debuild
    $ cd ..
    # debi foo*.changes

2.7.14. Proxyserver för APT

    Eftersom spegling av hela underavsnitt av Debian-arkivet slösar
    med diskutrymme och nätverksbandbredd, är distribution av en
    lokal proxyserver för APT ett önskvärt övervägande när du
    administrerar många system på LAN. APT kan konfigureras att
    använda generiska webbproxyservrar (http) såsom squid (se
    Avsnitt 6.5, ”Andra nätverksapplikationsservrar”) som beskrivs i
    apt .conf(5) och i "/usr/share/doc/apt/examples/
    configure-index.gz". Miljövariabeln "$http_proxy" kan användas
    för att åsidosätta proxyserverinställningen i filen "/etc/apt/
    apt.conf".

    Det finns proxyverktyg speciellt för Debian-arkiv. Du bör
    kontrollera BTS innan du använder dem.

    Tabell 2.19. Lista över proxyverktyg speciellt för Debian-arkiv

    +---------------------------------------------------------------+
    |    paket    |popcon |storlek|           beskrivning           |
    |-------------+-------+-------+---------------------------------|
    |             |V:0.31,|       |Cachelagringsproxy för Debians   |
    |apt-cacher   |I:0.35 |265    |paket- och källfiler             |
    |             |       |       |(Perl-program)                   |
    |-------------+-------+-------+---------------------------------|
    |             |V:4.2, |       |Caching-proxy för distribution av|
    |apt-cacher-ng|I:4.3  |2063   |programvarupaket (kompilerat     |
    |             |       |       |C++-program)                     |
    +---------------------------------------------------------------+


    Observera

    När Debian omorganiserar sin arkivstruktur tenderar dessa
    specialiserade proxyverktyg att kräva kodomskrivningar av
    paketunderhållaren och kanske inte fungerar på ett tag. Å andra
    sidan är generiska webbproxyservrar (http) mer robusta och
    lättare att hantera sådana förändringar.

2.7.15. Mer läsning för pakethanteringen

    Du kan läsa mer om pakethanteringen i följande dokumentationer.

      * Primär dokumentation om pakethanteringen:

          + aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8),
            apt-config(8), apt-secure(8), sources.list(5), apt.conf
            (5) och apt_preferences(5);

          + "/usr/share/doc/apt-doc/guide.html/index.html" och "/usr/
            share/doc/apt-doc/offline.html/index.html" från paketet
            apt-doc; och

          + "/usr/share/doc/aptitude/html/en/index.html" från paketet
            aptitude-doc-en.

      * Officiella och detaljerade dokumentationer om Debian-arkivet:

          + "Debians policyhandbok kapitel 2 - Debianarkivet",

          + "Debian Developer's Reference, Kapitel 4 - Resurser för
            Debian-utvecklare 4.6 Debian-arkivet", och

          + "Vanliga frågor om Debian GNU/Linux, kapitel 6 - Debians
            FTP-arkiv".

      * Handledning för att bygga ett Debian-paket för
        Debian-användare:

          + "Guide för Debians underhållsansvariga".

Kapitel 3. Initialisering av systemet

    Det är klokt att du som systemadministratör vet ungefär hur
    Debian-systemet startas och konfigureras. Även om de exakta
    detaljerna finns i källfilerna för de installerade paketen och
    deras dokumentationer, är det lite överväldigande för de flesta
    av oss.

    Här är en grov översikt över de viktigaste punkterna i
    initieringen av Debiansystemet. Eftersom Debiansystemet är ett
    rörligt mål, bör du läsa den senaste dokumentationen.

      * Debian Linux Kernel Handbook är den primära källan till
        information om Debians kärnprogram.

      * bootup(7) beskriver systemets uppstartsprocess baserad på
        systemd. (Senaste Debian)

      * boot(7) beskriver systemets uppstartsprocess baserat på UNIX
        System V Release 4. (Äldre Debian)

3.1. En översikt av boot strap-processen

    Datorsystemet genomgår flera faser av boot strap-processer från
    det att det slås på tills det erbjuder ett fullt fungerande
    operativsystem (OS) till användaren.

    För enkelhetens skull begränsar jag diskussionen till den typiska
    PC-plattformen med standardinstallation.

    Den typiska boot strap-processen är som en fyrstegsraket. Varje
    steg i raketen överlämnar systemkontrollen till nästa steg.

      * Avsnitt 3.1.1, ”Steg 1: UEFI”

      * Avsnitt 3.1.2, ”Steg 2: startladdaren”
   
      * Avsnitt 3.1.3, ”Steg 3: mini-Debian-systemet”

      * Avsnitt 3.1.4, ”Steg 4: det normala Debian-systemet”

    Naturligtvis kan dessa konfigureras på olika sätt. Om du till
    exempel har kompilerat din egen kärna kanske du hoppar över
    steget med mini-Debian-systemet. Så anta inte att detta är fallet
    för ditt system förrän du har kontrollerat det själv.

3.1.1. Steg 1: UEFI

    UEFI (Unified Extensible Firmware Interface) definierar en
    starthanterare som en del av UEFI-specifikationen. När en dator
    slås på är starthanteraren det första steget i startprocessen som
    kontrollerar startkonfigurationen och utifrån dess inställningar
    kör den angivna startladdaren för operativsystemet eller
    operativsystemets kärna (vanligtvis startladdaren).
    Startkonfigurationen definieras av variabler som lagras i NVRAM,
    inklusive variabler som anger filsystemets sökvägar till
    OS-laddare eller OS-kärnor.

    En EFI-systempartition (ESP) är en datalagringsenhetspartition
    som används i datorer som följer UEFI-specifikationen. Den öppnas
    av UEFI-firmware när datorn slås på och lagrar UEFI-program och
    de filer som dessa program behöver för att köras, inklusive
    operativsystemets startladdare. (I äldre PC-system kan BIOS som
    lagras i MBR användas i stället)

3.1.2. Steg 2: startladdaren

    Startladdaren är det andra steget i startprocessen som startas av
    UEFI. Den laddar systemkärnans avbildning och initrd-avbildningen
    till minnet och överlämnar kontrollen till dem. Denna initrd-bild
    är rotfilsystembilden och dess stöd beror på vilken startladdare
    som används.

    Debian-systemet använder normalt Linux-kärnan som standardkärna
    för systemet. Initrd-avbildningen för den aktuella Linuxkärnan
    5.x är tekniskt sett initramfs-avbildningen (initial RAM
    filesystem).

    Det finns många olika boot loaders och konfigurationsalternativ.

    Tabell 3.1. Lista över startladdare

    +-------------------------------------------------------------------------+
    |     paket     |popcon |storlek|initrd|startladdare|     beskrivning     |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |Den är tillräckligt  |
    |               |       |       |      |            |smart för att förstå |
    |grub-efi-amd64 |I:459  |142    |Stöds |GRUB UEFI   |diskpartitioner och  |
    |               |       |       |      |            |filsystem som vfat,  |
    |               |       |       |      |            |ext4, .... (UEFI)    |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |Den är tillräckligt  |
    |               |V:16,  |       |      |            |smart för att förstå |
    |grub-pc        |I:518  |479    |Stöds |GRUB 2      |diskpartitioner och  |
    |               |       |       |      |            |filsystem som vfat,  |
    |               |       |       |      |            |ext4, .... (BIOS)    |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |Detta är GRUB 2      |
    |               |V:0.06,|       |      |            |startbara            |
    |grub-rescue-pc |I:0.63 |7273   |Stöds |GRUB 2      |räddningsavbildningar|
    |               |       |       |      |            |(CD och diskett) (PC/|
    |               |       |       |      |            |BIOS-version)        |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |grml-rescueboot adds |
    |grml-rescueboot|V:0.1, |36     |N/A   |GRUB 2      |live Linux ISO images|
    |               |I:1.1  |       |      |plug-in     |to the grub2 boot    |
    |               |       |       |      |            |menu                 |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |Detta förstår        |
    |syslinux       |V:3,   |325    |Stöds |Isolinux    |filsystemet ISO9660. |
    |               |I:31   |       |      |            |Detta används av     |
    |               |       |       |      |            |start-CD:n.          |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |Detta förstår MSDOS  |
    |syslinux       |V:3,   |325    |Stöds |Syslinux    |filsystem (FAT).     |
    |               |I:31   |       |      |            |Detta används av     |
    |               |       |       |      |            |startdisketten.      |
    |---------------+-------+-------+------+------------+---------------------|
    |               |V:0.04,|       |      |            |Nytt system startas  |
    |loadlin        |I:0.42 |87     |Stöds |Loadlin     |från FreeDOS/        |
    |               |       |       |      |            |MSDOS-systemet.      |
    |---------------+-------+-------+------+------------+---------------------|
    |               |       |       |      |            |Detta är fri         |
    |               |V:0.2, |       |Stöds |MBR av Neil |programvara som      |
    |mbr            |I:2.8  |47     |inte  |Turton      |ersätter MSDOS MBR.  |
    |               |       |       |      |            |Detta förstår bara   |
    |               |       |       |      |            |diskpartitioner.     |
    +-------------------------------------------------------------------------+


    För UEFI-system läser GRUB2 först ESP-partitionen och använder
    UUID som anges för search.fs_uuid i "/boot/efi/EFI/debian/
    grub.cfg" för att bestämma partitionen i GRUB2-menyns
    konfigurationsfil "/boot/grub/grub.cfg".

    Den viktigaste delen av GRUB2-menykonfigurationsfilen ser ut som
    följer:

    menuentry 'Debian GNU/Linux' ... {
            load_video
            insmod gzio
            insmod part_gpt
            insmod ext2
            search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1
            echo    'Loading Linux 5.10.0-6-amd64 ...'
            linux   /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initrd.img-5.10.0-6-amd64
    }

    För den här delen av /boot/grub/grub.cfg betyder den här
    menyposten följande.

    Tabell 3.2. Betydelsen av menyalternativet i ovanstående del av /
    boot/grub/grub.cfg

    +---------------------------------------------------------------+
    |      inställningen      |                värde                |
    |-------------------------+-------------------------------------|
    |GRUB2-moduler laddade    |gzio, part_gpt, ext2                 |
    |-------------------------+-------------------------------------|
    |root filsystem partition |partition identifierad av UUID=      |
    |används                  |fe3e1db5-6454-46d6-a14c-071208ebe4b1 |
    |-------------------------+-------------------------------------|
    |sökväg till              |                                     |
    |kärnavbildningen i       |/boot/vmlinuz-5.10.0-6-amd64         |
    |rotfilsystemet           |                                     |
    |-------------------------+-------------------------------------|
    |parameter för kärnstart  |"root=UUID=                          |
    |som används              |fe3e1db5-6454-46d6-a14c-071208ebe4b1 |
    |                         |ro quiet"                            |
    |-------------------------+-------------------------------------|
    |initrd-bildsökväg i      |/boot/initrd.img-5.10.0-6-amd64      |
    |rotfilsystemet           |                                     |
    +---------------------------------------------------------------+


    On Debian system, "/boot/grub/grub.cfg" is managed by the
    installed GRUB package (e.g. grub-efi-amd64) and direct user
    modification to this file is deprecated. You should customize
    configuration files in "/etc/grub.d/" and "/etc/default/grub",
    instead. Then configure the GRUB configuration files and update
    NVRAM variables to automatically boot into Debian by:

    # dpkg-reconfigure grub-efi-amd64

    Tips
   
    You can show kernel boot log messages by removing "quiet" from
    the "GRUB_CMDLINE_LINUX_DEFAULT" value in "/etc/default/grub".

    Tips
   
    You can add GRUB splash background by placing its image file in "
    /boot/grub/".

    See "info grub", grub-install(8), grub-mkconfig(8).

3.1.3. Steg 3: mini-Debian-systemet

    Mini-Debian-systemet är det 3:e steget i startprocessen som
    startas av startladdaren. Det kör systemkärnan med dess
    rotfilsystem i minnet. Detta är ett valfritt förberedande steg i
    startprocessen.

    Notera

    Termen "mini-Debian-systemet" har myntats av författaren för att
    beskriva det tredje steget i uppstartsprocessen i det här
    dokumentet. Det här systemet kallas vanligen initrd- eller
    initramfs-systemet. Ett liknande system i minnet används av
    Debians installationsprogram.

    Programmet "/init" körs som det första programmet i detta
    rotfilsystem på minnet. Det är ett program som initierar kärnan i
    användarutrymmet och överlämnar kontrollen till nästa steg. Detta
    mini-Debian-system erbjuder flexibilitet i uppstartsprocessen,
    t.ex. genom att lägga till kärnmoduler före den huvudsakliga
    uppstartsprocessen eller genom att montera rotfilsystemet som ett
    krypterat filsystem.

      * Programmet "/init" är ett skalskriptprogram om initramfs
        skapades av initramfs-tools.

          + Du kan avbryta denna del av startprocessen för att få
            root shell genom att ange "break=init" etc. till kernel
            boot parameter. Se skriptet "/init" för fler
            avbrottsvillkor. Den här skalmiljön är tillräckligt
            sofistikerad för att du ska kunna göra en bra inspektion
            av maskinens maskinvara.
   
          + De kommandon som finns tillgängliga i detta
            mini-Debian-system är avskalade och tillhandahålls
            huvudsakligen av ett GNU-verktyg som heter busybox(1).

      * Programmet "/init" är ett binärt systemd-program om initramfs
        skapades av dracut.

          + Kommandon som är tillgängliga i detta mini-Debian-system
            är avskalade från systemd(1)-miljön.

    Observera
   
    Du måste använda alternativet "-n" för mount-kommandot när du
    befinner dig på det skrivskyddade rotfilsystemet.

3.1.4. Steg 4: det normala Debian-systemet

    The normal Debian system is the 4th stage of the boot process
    which is started by the mini-Debian system. The system kernel for
    the mini-Debian system continues to run in this environment. The
    root filesystem is switched from the one on the memory to the one
    on the physical storage device.

    Init-programmet körs som det första programmet med PID=1 för att
    utföra den huvudsakliga startprocessen för att starta många
    program. Standardfilvägen för init-programmet är "/usr/sbin/
    init", men den kan ändras med kärnans startparameter "init=/path/
    to/init_program".

    "/usr/sbin/init" är symlänkat till "/lib/systemd/systemd" efter
    Debian 8 Jessie (utgiven 2015).

    Tips
   
    Det faktiska init-kommandot på ditt system kan verifieras med
    kommandot "ps --pid 1 -f".

    Tabell 3.3. Lista över uppstartsverktyg för Debian-systemet

    +---------------------------------------------------------------+
    |       paket       |popcon |storlek|        beskrivning        |
    |-------------------+-------+-------+---------------------------|
    |                   |V:920, |       |händelsebaserad init(8)    |
    |systemd            |I:979  |11013  |-daemon för samtidighet    |
    |                   |       |       |(alternativ till sysvinit) |
    |-------------------+-------+-------+---------------------------|
    |                   |V:3.6, |       |initialiseringssystem för  |
    |cloud-init         |I:6.7  |3267   |molninstanser för          |
    |                   |       |       |infrastruktur              |
    |-------------------+-------+-------+---------------------------|
    |                   |V:912, |       |de manussidor och länkar   |
    |systemd-sysv       |I:981  |76     |som behövs för att systemd |
    |                   |       |       |ska kunna ersätta sysvinit |
    |-------------------+-------+-------+---------------------------|
    |init-system-helpers|V:585, |131    |hjälpverktyg för att växla |
    |                   |I:988  |       |mellan sysvinit och systemd|
    |-------------------+-------+-------+---------------------------|
    |initscripts        |V:16,  |197    |skript för initiering och  |
    |                   |I:59   |       |avstängning av systemet    |
    |-------------------+-------+-------+---------------------------|
    |sysvinit-core      |V:3.4, |365    |System-V-liknande init(8)  |
    |                   |I:3.8  |       |-verktyg                   |
    |-------------------+-------+-------+---------------------------|
    |sysv-rc            |V:31,  |85     |System-V-liknande mekanism |
    |                   |I:63   |       |för ändring av runlevel    |
    |-------------------+-------+-------+---------------------------|
    |                   |V:722, |       |System-V-liknande verktyg  |
    |sysvinit-utils     |I:1000 |100    |(startpar(8), bootlogd(8), |
    |                   |       |       |...)                       |
    |-------------------+-------+-------+---------------------------|
    |                   |V:217, |       |Funktionalitet för         |
    |lsb-base           |I:320  |12     |init-skript i Linux        |
    |                   |       |       |Standard Base 3.2          |
    |-------------------+-------+-------+---------------------------|
    |                   |V:35,  |       |verktyg för att organisera |
    |insserv            |I:62   |132    |startsekvensen med hjälp av|
    |                   |       |       |LSB init.d-skriptberoenden |
    |-------------------+-------+-------+---------------------------|
    |kexec-tools        |V:1.4, |320    |kexec-verktyg för kexec(8) |
    |                   |I:5.4  |       |-omstart (varm omstart)    |
    |-------------------+-------+-------+---------------------------|
    |systemd-bootchart  |V:0.20,|131    |analysator för prestanda i |
    |                   |I:0.60 |       |startprocessen             |
    |-------------------+-------+-------+---------------------------|
    |mingetty           |V:0.1, |36     |konsol endast getty(8)     |
    |                   |I:2.5  |       |                           |
    |-------------------+-------+-------+---------------------------|
    |mgetty             |V:0.15,|318    |smart modem getty(8)       |
    |                   |I:0.50 |       |ersättning                 |
    +---------------------------------------------------------------+


    Tips
   
    Se Debian wiki: BootProcessSpeedup för de senaste tipsen för att
    snabba upp uppstartsprocessen.

3.2. Rescue system

    Varning
   
    Do not perform system administration tasks around the boot strap
    process without having a rescue system.

    Availability of a rescue system enables us to perform challenging
    tasks such as:

      * Booting a system from a broken boot loader installation

      * Fixing a broken boot loader installation
   
      * Extracting data from a broken unbootable system

      * Editing filesystems, disk partitions, and LVM volumes
        involving the root filesystem

    Typically, a rescue system is provided as a ISO image file and
    written to a removable storage media such as:

      * USB flash drive prepared as Avsnitt 9.7.2, ”Skriva direkt
        till hårddisken”
   
      * CD / DVD prepared as Avsnitt 9.7.7, ”Skriva direkt till CD/
        DVD-R/RW”

    For simplicity, USB flash drive cases are mentioned as examples
    below but CD or DVD may be used as well.

    Tips
   
    You may need to change some UEFI NVRAM variables to boot
    arbitrary boot loaders on the removable storage media.

3.2.1. GRUB UEFI rescue system on USB

    The GRUB UEFI rescue system with menu can be started by turning
    on system power with the "GRUB UEFI rescue system on USB"
    inserted.

    This "GRUB UEFI rescue system on USB" is prepared by writing the
    Super Grub2 Disk ISO image to USB flash drive in advance.

    In case of broken boot loader configuration by the installation
    of another operating system etc., you can fix this by:

      * Start the GRUB UEFI rescue system to discover bootable
        installed systems automatically.

      * Start the installed Debian system from the GRUB menu.

      * At Linux root shell prompt:

        # dpkg-reconfigure grub-efi-amd64

    Notera

    The bootable GRUB rescue ISO image can be generated by following
    "info grub-mkrescue", too. It offers a CLI GRUB shell prompt but
    doesn't offer automatic discovery of bootable installed systems.

3.2.2. Linux live rescue system on USB

    The Linux live rescue system can be started by turning on system
    power with the "Linux live rescue system on USB" inserted.

    This "Linux live rescue system on USB" can be prepared by writing
    one of Linux live ISO images based on Debian to a USB flash drive
    in advance. Here are some examples of such Linux live images.

      * Debian Live images

      * Kali Linux Live

      * Grml Live Linux

    Here are some use cases of this Linux live rescue system:

      * Fix the broken boot loader configuration caused by the
        installation of another operating system etc.:

          + Start the Linux live rescue system.

          + Mount the partition containing the root filesystem of the
            unbootable installed Debian system to "/mnt".

          + At Linux root shell prompt:

            # chroot /mnt; dpkg-reconfigure grub-efi-amd64

      * Fix the broken dpkg package:

          + Start the Linux live rescue system.

          + Mount the partition containing the root filesystem of the
            installed Debian system with the broken dpkg package to "/
            mnt".

          + At Linux root shell prompt:

            # dpkg --root /mnt -i /mnt/var/cache/apt/archives/dpkg_old_version_amd64.deb

      * Perform normally prohibited changes such as filesystem operations
        to the installed system (see Avsnitt 9.6, ”Tips om datalagring”).

    Varning
   
    Your GUI screen of the Linux live system may be locked after the
    inactivity.

    Tips

      * It's a good idea to set your password as soon as you start a
        Linux live system.

      * You may set your password for example by "sudo passwd user"
        from the user's shell prompt on the Linux virtual consoles
        (see Avsnitt 1.1.6, ”Virtuella konsoler”).

      * Some Linux live systems may set their default "user/password
        ": "Debian Live" = "user/live", "Kali Linux Live" = "kali/
        kali"

3.2.3. Linux live rescue system from GRUB

    The Linux live rescue system can be started from the GRUB menu
    entry. The GRUB configuration for this is prepared by the
    following:

      * Installera paketet grml-rescueboot.

      * Find a Linux live ISO image which has "/boot/grub/
        loopback.cfg" in its image.

          + ISO images mentioned in Avsnitt 3.2.2, ”Linux live rescue
            system on USB” have "/boot/grub/loopback.cfg" in their
            image.

      * Copy some of these Linux live ISO images to the "/boot/grml/"
        directory.

      * Update GRUB menu by:

        # dpkg-reconfigure grub-efi-amd64

    Upon turning on system power, the GRUB displays menu with
    candidates for Linux live rescue systems.

3.3. Systemd

3.3.1. Systemd startas

    När Debian-systemet startar, startas /usr/sbin/init symlänkad
    till /usr/lib/systemd som init-systemprocessen(PID=1) som ägs av
    root(UID=0). Se systemd(1).

    Systemd init-processen skapar parallella processer baserat på
    enhetskonfigurationsfilerna (se systemd.unit(5)) som är skrivna i
    deklarativ stil istället för SysV-liknande procedurell stil.

    De processer som skapas placeras i individuella
    Linux-kontrollgrupper som får sitt namn efter den enhet de
    tillhör i den privata systemd-hierarkin (se cgroups och
    Avsnitt 4.7.5, ”Säkerhetsfunktioner i Linux”).

    Enheter för systemläget laddas från "System Unit Search Path" som
    beskrivs i systemd.unit(5). De viktigaste är följande i
    prioritetsordning:

      * "/etc/systemd/system/*": Systemenheter som skapats av
        administratören

      * "/run/systemd/system/*": Runtime-enheter

      * "/lib/systemd/system/*": Systemenheter som installerats av
        distributionens pakethanterare

    Deras inbördes beroenden specificeras av direktiven "Wants=",
    "Requires=", "Before=", "After=", ... (se "MAPPING OF UNIT
    PROPERTIES TO THEIR INVERSES" i systemd.unit(5)).
    Resurskontrollerna är också definierade (se
    systemd.resource-control(5)).

    Suffixet i enhetens konfigurationsfil kodar deras typer som:

      * *.service beskriver den process som styrs och övervakas av
        systemd. Se systemd.service(5).

      * *.device beskriver den enhet som exponeras i sysfs(5) och
        udev(7) enhetsträdet. Se systemd.device(5).

      * *.mount beskriver den monteringspunkt för filsystemet som
        kontrolleras och övervakas av systemd. Se systemd.mount(5).

      * *.automount beskriver den automatiska monteringspunkten för
        filsystemet som kontrolleras och övervakas av systemd. Se
        systemd.automount(5).

      * *.swap beskriver den swap-enhet eller -fil som kontrolleras
        och övervakas av systemd. Se systemd.swap(5).

      * *.path beskriver den sökväg som övervakas av systemd för
        sökvägsbaserad aktivering. Se systemd.path(5).

      * *.socket beskriver det uttag som styrs och övervakas av
        systemd för uttagsbaserad aktivering. Se systemd.socket(5).

      * *.timer beskriver den timer som styrs och övervakas av
        systemd för timerbaserad aktivering. Se systemd.timer(5).

      * *.slice hanterar resurser med cgroups(7). Se systemd.slice
        (5).

      * *.scope skapas programmatiskt med hjälp av bussgränssnitten i
        systemd för att hantera en uppsättning systemprocesser. Se
        systemd.scope(5).

      * *.target grupperar andra enhetskonfigurationsfiler för att
        skapa synkroniseringspunkten under uppstarten. Se
        systemd.target(5).

    Vid systemstart (dvs. init) försöker systemd-processen att starta
    "/lib/systemd/system/default.target (normalt symlänkat till
    "graphical.target"). Först dras några speciella målenheter (se
    systemd.special(7)) som "local-fs.target", "swap.target" och
    "cryptsetup.target" in för att montera filsystemet. Sedan dras
    även andra målenheter in genom målenhetsberoendena. För mer
    information, läs bootup(7).

    systemd erbjuder funktioner för bakåtkompatibilitet. Startskript
    i SysV-stil i "/etc/init.d/rc[0123456S].d/[KS]name" tolkas
    fortfarande och telinit(8) översätts till begäran om aktivering
    av systemd-enheter.

    Observera
   
    Emulerade runlevel 2 till 4 är alla symlänkade till samma
    "multi-user.target".

3.3.2. Systemd-inloggning

    När en användare loggar in på Debiansystemet via gdm3(8), sshd
    (8), etc., startas /lib/systemd/system --user som den process för
    hantering av användartjänster som ägs av motsvarande användare.
    Se systemd(1).

    Processen systemd user service manager skapar parallella
    processer baserat på de deklarativa konfigurationsfilerna för
    enheter (se systemd.unit(5) och user@.service(5)).

    Enheter för användarläget laddas från "User Unit Search Path" som
    beskrivs i systemd.unit(5). De viktigaste är följande i
    prioritetsordning:

      * "~/.config/systemd/user/*": Enheter för användarkonfiguration

      * "/etc/systemd/user/*": Användarenheter som skapats av
        administratören
   
      * "/run/systemd/user/*": Runtime-enheter

      * "/lib/systemd/user/*": Användarenheter som installerats av
        distributionens pakethanterare

    Dessa hanteras på samma sätt som Avsnitt 3.3.1, ”Systemd startas”
    .

3.4. Kärnans meddelande

    Det kärnfelmeddelande som visas på konsolen kan konfigureras
    genom att ställa in dess tröskelnivå.

    # dmesg -n3

    Tabell 3.4. Lista över felnivåer i kärnan

    +---------------------------------------------------------------+
    |fel nivå värde|namn på felnivå|           betydelse            |
    |--------------+---------------+--------------------------------|
    |0             |KERN_EMERG     |systemet är oanvändbart         |
    |--------------+---------------+--------------------------------|
    |1             |KERN_ALERT     |åtgärder måste vidtas omedelbart|
    |--------------+---------------+--------------------------------|
    |2             |KERN_CRIT      |kritiska förhållanden           |
    |--------------+---------------+--------------------------------|
    |3             |KERN_ERR       |felförhållanden                 |
    |--------------+---------------+--------------------------------|
    |4             |KERN_VARNING   |varningsvillkor                 |
    |--------------+---------------+--------------------------------|
    |5             |KERN_NOTICE    |normalt men signifikant         |
    |              |               |tillstånd                       |
    |--------------+---------------+--------------------------------|
    |6             |KERN_INFO      |informativ                      |
    |--------------+---------------+--------------------------------|
    |7             |KERN_DEBUG     |meddelanden på felsökningsnivå  |
    +---------------------------------------------------------------+


3.5. Systemets meddelande

    Under systemd loggas både kärn- och systemmeddelanden av
    journaltjänsten systemd-journald.service (a.k.a journald)
    antingen till en beständig binär data under "/var/log/journal"
    eller till en flyktig binär data under "/run/log/journal/". Dessa
    binära loggdata nås med kommandot journalctl(1). Du kan t.ex.
    visa loggen från den senaste uppstarten på följande sätt:

    $ journalctl -b

    Tabell 3.5. Lista över typiska journalctl-kommandoutdrag

    +---------------------------------------------------------------+
    |                  Operation                   |Kommandosnuttar |
    |----------------------------------------------+----------------|
    |Visa loggen för systemtjänster och kärnan från|"journalctl -b  |
    |den senaste uppstarten                        |--system"       |
    |----------------------------------------------+----------------|
    |Visa logg för tjänster för den aktuella       |"journalctl -b  |
    |användaren från den senaste uppstarten        |--user"         |
    |----------------------------------------------+----------------|
    |Visa jobblogg för "$unit" från den senaste    |"journalctl -b  |
    |uppstarten                                    |-u $enhet"      |
    |----------------------------------------------+----------------|
    |Visa jobblogg för "$unit" ( "tail -f"-stil)   |"journalctl -b  |
    |från den senaste uppstarten                   |-u $unit -f"    |
    +---------------------------------------------------------------+


    Under systemd kan systemloggningsverktyget rsyslogd(8)
    avinstalleras. Om det installeras ändrar det sitt beteende för
    att läsa flyktiga binära loggdata (i stället för "/dev/log" som
    var standard före systemd) och för att skapa traditionella
    permanenta ASCII-systemloggdata. Detta kan anpassas med "/etc/
    default/rsyslog" och "/etc/rsyslog.conf" för både loggfilen och
    visningen på skärmen. Se rsyslogd(8) och rsyslog.conf(5). Se även
    Avsnitt 9.3.2, ”Logganalysator”.

3.6. Systemhantering

    Systemd erbjuder inte bara init-system utan även generiska
    systemhanteringsåtgärder med kommandot systemctl(1).

    Tabell 3.6. Lista över typiska kommandoutdrag för systemctl

    +---------------------------------------------------------------+
    |             Operation             |      Kommandosnuttar      |
    |-----------------------------------+---------------------------|
    |Lista alla tillgängliga enhetstyper|"systemctl list-units      |
    |                                   |--type=help"               |
    |-----------------------------------+---------------------------|
    |Lista alla målenheter i minnet     |"systemctl list-units      |
    |                                   |--type=target"             |
    |-----------------------------------+---------------------------|
    |Lista alla serviceenheter i minnet |"systemctl list-units -typ=|
    |                                   |service"                   |
    |-----------------------------------+---------------------------|
    |Lista alla enheter i minnet        |"systemctl list-units      |
    |                                   |--type=device"             |
    |-----------------------------------+---------------------------|
    |Lista alla monteringsenheter i     |"systemctl list-units      |
    |minnet                             |--type=mount"              |
    |-----------------------------------+---------------------------|
    |Lista alla uttagsenheter i minnet  |"systemctl list-sockets"   |
    |-----------------------------------+---------------------------|
    |Lista alla timerenheter i minnet   |"systemctl list-timers"    |
    |-----------------------------------+---------------------------|
    |Starta "$unit"                     |"systemctl start $unit"    |
    |-----------------------------------+---------------------------|
    |Stoppa "$enhet"                    |"systemctl stop $unit"     |
    |-----------------------------------+---------------------------|
    |Ladda om tjänstespecifik           |"systemctl reload $unit"   |
    |konfiguration                      |                           |
    |-----------------------------------+---------------------------|
    |Stoppa och starta alla "$enheter"  |"systemctl restart $unit"  |
    |-----------------------------------+---------------------------|
    |Starta "$unit" och stoppa alla     |"systemctl isolate $unit"  |
    |andra                              |                           |
    |-----------------------------------+---------------------------|
    |Byt till "grafisk" (GUI-system)    |"systemctl isolera grafisk"|
    |-----------------------------------+---------------------------|
    |Växla till "multi-user"            |"systemctl isolate         |
    |(CLI-system)                       |multi-user"                |
    |-----------------------------------+---------------------------|
    |Växla till "räddning" (CLI-system  |"systemctl isolate rescue" |
    |med en användare)                  |                           |
    |-----------------------------------+---------------------------|
    |Skicka dödssignal till "$unit"     |"systemctl kill $unit"     |
    |-----------------------------------+---------------------------|
    |Kontrollera om tjänsten "$unit" är |"systemctl is-active $unit"|
    |aktiv                              |                           |
    |-----------------------------------+---------------------------|
    |Kontrollera om tjänsten "$unit" är |"systemctl is-failed $unit"|
    |misslyckad                         |                           |
    |-----------------------------------+---------------------------|
    |Kontrollera status för "$unit|$PID||"systemctl status $unit|   |
    |device"                            |$PID|$device"              |
    |-----------------------------------+---------------------------|
    |Visa egenskaper för "$unit|$job"   |"systemctl show $unit|$job"|
    |-----------------------------------+---------------------------|
    |Återställning misslyckades "$unit" |"systemctl reset-failed    |
    |                                   |$unit"                     |
    |-----------------------------------+---------------------------|
    |Lista beroendet av alla            |"systemctl list-beroenden  |
    |enhetstjänster                     |--all"                     |
    |-----------------------------------+---------------------------|
    |Lista enhetsfiler installerade på  |"systemctl list-unit-files"|
    |systemet                           |                           |
    |-----------------------------------+---------------------------|
    |Aktivera "$unit" (lägg till        |"systemctl enable $unit"   |
    |symlänk)                           |                           |
    |-----------------------------------+---------------------------|
    |Inaktivera "$unit" (ta bort        |"systemctl disable $unit"  |
    |symlänk)                           |                           |
    |-----------------------------------+---------------------------|
    |Avmaskera "$unit" (ta bort         |"systemctl unmask $unit"   |
    |symlänken till "/dev/null")        |                           |
    |-----------------------------------+---------------------------|
    |Mask "$unit" (lägg till symlänk    |"systemctl mask $enhet"    |
    |till "/dev/null")                  |                           |
    |-----------------------------------+---------------------------|
    |Hämta inställning för standardmål  |"systemctl get-default"    |
    |-----------------------------------+---------------------------|
    |Ställ in default-target till       |"systemctl set-default     |
    |"graphical" (GUI-system)           |graphical"                 |
    |-----------------------------------+---------------------------|
    |Ställ in default-target till       |"systemctl set-default     |
    |"multi-user" (CLI-system)          |multi-user"                |
    |-----------------------------------+---------------------------|
    |Visa arbetsmiljön                  |"systemctl                 |
    |                                   |show-environment"          |
    |-----------------------------------+---------------------------|
    |Ställ in "variabel" för jobbmiljö  |"systemctl set-environment |
    |till "värde"                       |variable=value"            |
    |-----------------------------------+---------------------------|
    |Oreglerad "variabel" i arbetsmiljön|"systemctl                 |
    |                                   |unset-environment variable"|
    |-----------------------------------+---------------------------|
    |Ladda om alla enhetsfiler och      |"systemctl daemon-reload"  |
    |daemons                            |                           |
    |-----------------------------------+---------------------------|
    |Stäng av systemet                  |"systemctl poweroff"       |
    |-----------------------------------+---------------------------|
    |Stänga av och starta om systemet   |"systemctl reboot"         |
    |-----------------------------------+---------------------------|
    |Stänga av systemet                 |"systemctl suspend"        |
    |-----------------------------------+---------------------------|
    |Lägg systemet i viloläge           |"systemctl hibernate"      |
    +---------------------------------------------------------------+


    Här kan "$unit" i exemplen ovan vara ett enskilt enhetsnamn
    (suffix som .service och .target är valfria) eller, i många fall,
    flera enhetsspecifikationer (globs i shell-stil "*", "?", "[]"
    med fnmatch(3) som kommer att matchas mot de primära namnen på
    alla enheter som för närvarande finns i minnet).

    Kommandon som ändrar systemtillståndet i exemplen ovan föregås
    vanligtvis av "sudo" för att uppnå den administrativa behörighet
    som krävs.

    Utdata från "systemctl status $unit|$PID|$device" använder
    punktens färg ("●") för att sammanfatta enhetens tillstånd på ett
    överskådligt sätt.

      * Vitt "●" anger ett "inaktivt" eller "avaktiverande"
        tillstånd.

      * Röd "●" indikerar ett "misslyckat" eller "felaktigt"
        tillstånd.

      * Grönt "●" indikerar ett "aktivt", "omladdande" eller
        "aktiverande" tillstånd.

3.7. Andra systemövervakare

    Här är en lista över andra kommandoutdrag för övervakning under
    systemd. Läs relevanta manpages inklusive cgroups(7).

    Tabell 3.7. Lista över andra kommandosnuttar för övervakning
    under systemd

    +---------------------------------------------------------------+
    |                Operation                |   Kommandosnuttar   |
    |-----------------------------------------+---------------------|
    |Visa tidsåtgången för varje              |"systemd-analysera   |
    |initialiseringssteg                      |tid"                 |
    |-----------------------------------------+---------------------|
    |Lista över alla enheter efter tid för    |"systemd-analyze     |
    |initialisering                           |blame"               |
    |-----------------------------------------+---------------------|
    |Ladda och upptäcka fel i filen "$unit"   |"systemd-analyze     |
    |                                         |verify $unit"        |
    |-----------------------------------------+---------------------|
    |Visa kortfattad runtime-statusinformation|"loginctl            |
    |för användaren av den uppringandes       |användarstatus"      |
    |session                                  |                     |
    |-----------------------------------------+---------------------|
    |Visa kortfattad statusinformation under  |"loginctl            |
    |körning för den uppringandes session     |session-status"      |
    |-----------------------------------------+---------------------|
    |Spåra startprocessen av cgroups          |"systemd-cgls"       |
    |-----------------------------------------+---------------------|
    |Spåra startprocessen av cgroups          |"ps xawf -eo         |
    |                                         |pid,user,cgroup,args"|
    |-----------------------------------------+---------------------|
    |Spåra startprocessen av cgroups          |Läs sysfs under "/sys|
    |                                         |/fs/cgroup/"         |
    +---------------------------------------------------------------+


3.8. Systemkonfiguration

3.8.1. Värdnamnet

    Kärnan underhåller systemets värdnamn. Systemenheten som startas
    av systemd-hostnamed.service ställer in systemets värdnamn vid
    start till det namn som finns lagrat i "/etc/hostname". Den här
    filen ska bara innehålla systemets värdnamn, inte ett
    fullständigt kvalificerat domännamn.

    För att skriva ut det aktuella värdnamnet kör hostname(1) utan
    argument.

3.8.2. Filsystemet

    Monteringsalternativen för normala disk- och nätverksfilsystem
    anges i "/etc/fstab". Se fstab(5) och Avsnitt 9.6.7, ”Optimering
    av filsystem med hjälp av mount-alternativ”.

    Konfigurationen av det krypterade filsystemet anges i "/etc/
    crypttab". Se crypttab(5)

    Konfigurationen av RAID-programvara med mdadm(8) anges i "/etc/
    mdadm/mdadm.conf". Se mdadm.conf(5).

    Varning
   
    Efter montering av alla filsystem rensas temporära filer i "/
    tmp", "/var/lock" och "/var/run" vid varje uppstart.

3.8.3. Initialisering av nätverksgränssnitt

    Nätverksgränssnitt initialiseras vanligtvis i
    "networking.service" för lo-gränssnittet och
    "NetworkManager.service" för andra gränssnitt på moderna
    Debian-skrivbordssystem under systemd.

    Se Kapitel 5, Nätverkskonfiguration för information om hur du
    konfigurerar dem.

3.8.4. Initialisering av molnsystem

    Molnsysteminstansen kan startas som en klon av "Debian Official
    Cloud Images" eller liknande bilder. För en sådan systeminstans
    kan personligheter som värdnamn, filsystem, nätverk, lokal,
    SSH-nycklar, användare och grupper konfigureras med hjälp av
    funktioner som tillhandahålls av cloud-init- och
    netplan.io-paketen med flera datakällor, t.ex. filer som
    placerats i den ursprungliga systemavbildningen och externa data
    som tillhandahålls under lanseringen. Dessa paket möjliggör
    deklarativ systemkonfiguration med hjälp av YAML-data.

    Se mer på "Cloud Computing with Debian and its descendants",
    "Cloud-init documentation" och Avsnitt 5.4, ”Den moderna
    nätverkskonfigurationen för moln”.

3.8.5. Anpassningsexempel för att justera sshd-tjänsten

    Vid standardinstallation startas många nätverkstjänster (se
    Kapitel 6, Nätverkstillämpningar) som daemonprocesser efter
    network .target vid uppstarten av systemd. "sshd" är inget
    undantag. Låt oss ändra detta till on-demand start av "sshd" som
    ett exempel på anpassning.

    Först inaktiverar du den systeminstallerade serviceenheten.

     $ sudo systemctl stop sshd.service
     $ sudo systemctl mask sshd.service

    Systemet för aktivering av uttag på begäran i de klassiska
    Unix-tjänsterna skedde via superservern inetd (eller xinetd).
    Under systemd kan motsvarande aktiveras genom att lägga till
    enhetskonfigurationsfilerna *.socket och * .service.

    sshd.socket för att ange ett uttag att lyssna på

    [Unit]
    Description=SSH Socket for Per-Connection Servers

    [Socket]
    ListenStream=22
    Accept=yes

    [Install]
    WantedBy=sockets.target

    sshd@.service som den matchande servicefilen för sshd.socket

    [Unit]
    Description=SSH Per-Connection Server
   
    [Service]
    ExecStart=-/usr/sbin/sshd -i
    StandardInput=socket

    Ladda sedan om.

     $ sudo systemctl daemon-reload

3.9. Udev-systemet

    Systemet udev tillhandahåller en mekanism för automatisk upptäckt
    och initialisering av maskinvara (se udev(7)) sedan Linux-kärnan
    2.6. När kärnan upptäcker varje enhet startar udev-systemet en
    användarprocess som använder information från sysfs-filsystemet
    (se Avsnitt 1.2.12, ”procfs och sysfs”), laddar nödvändiga
    kärnmoduler med hjälp av modprobe(8)-programmet (se Avsnitt 3.10,
    ”Initialisering av kärnmodulen”) och skapar motsvarande
    enhetsnoder.

    Tips

    Om "/lib/modules/kernel-version/modules.dep" av någon anledning
    inte genererades korrekt av depmod(8), kan det hända att moduler
    inte laddas som förväntat av udev-systemet. Kör "depmod -a" för
    att åtgärda det.

    För monteringsregler i "/etc/fstab" behöver enhetsnoderna inte
    vara statiska. Du kan använda UUID för att montera enheter
    istället för enhetsnamn som t.ex. "/dev/sda". Se Avsnitt 9.6.3,
    ”Åtkomst till partition med hjälp av UUID”.

    Eftersom udev-systemet är något av ett rörligt mål, lämnar jag
    detaljerna till andra dokumentationer och beskriver
    minimiinformationen här.

    Varning

    Försök inte att köra långvariga program som t.ex.
    säkerhetskopieringsskript med RUN i udev-reglerna som nämns i
    udev(7). Skapa en korrekt systemd.service(5)-fil och aktivera den
    istället. Se Avsnitt 10.2.3.2, ”Montera händelsestyrd
    säkerhetskopiering”.

3.10. Initialisering av kärnmodulen

    Programmet modprobe(8) gör det möjligt för oss att konfigurera
    Linux-kärnan från användarprocessen genom att lägga till och ta
    bort kärnmoduler. Udev-systemet (se Avsnitt 3.9, ”Udev-systemet”)
    automatiserar dess anrop för att underlätta initieringen av
    kärnmodulen.

    Det finns moduler som inte är hårdvarumoduler och speciella
    drivrutinsmoduler för hårdvara, t.ex. följande, som måste
    förinstalleras genom att de listas i filen "/etc/modules" (se
    modules(5)).

      * TUN/TAP-moduler som tillhandahåller virtuell enhet för
        punkt-till-punkt-nätverk (TUN) och virtuell enhet för
        Ethernet-nätverk (TAP),
   
      * netfilter-moduler som ger netfilter-brandväggsfunktioner
        (iptables(8), Avsnitt 5.7, ”Netfilters infrastruktur”), och

      * drivmoduler för watchdog-timer.

    Konfigurationsfilerna för modprobe(8)-programmet finns i
    katalogen "/etc/modprobes.d/", vilket förklaras i modprobe.conf
    (5). (Om du vill undvika att vissa kärnmoduler laddas automatiskt
    kan du överväga att svartlista dem i filen "/etc/modprobes.d/
    blacklist")

    Filen "/lib/modules/version/modules.dep" som genereras av
    programmet depmod(8) beskriver modulberoenden som används av
    programmet modprobe(8).

    Notera

    Om du har problem med modulinläsningen vid start eller med
    modprobe(8) kan "depmod -a" lösa problemen genom att rekonstruera
    "modules.dep".

    Programmet modinfo(8) visar information om en modul i
    Linux-kärnan.

    Programmet lsmod(8) formaterar innehållet i "/proc/modules" på
    ett snyggt sätt och visar vilka kärnmoduler som för närvarande är
    inlästa.

    Tips

    Du kan identifiera exakt maskinvara i ditt system. Se
    Avsnitt 9.5.3, ”Identifiering av hårdvara”.

    Du kan konfigurera maskinvaran vid start för att aktivera
    förväntade maskinvarufunktioner. Se Avsnitt 9.5.4, ”Konfiguration
    av hårdvara”.

    Du kan förmodligen lägga till stöd för din speciella enhet genom
    att kompilera om kärnan. Se Avsnitt 9.10, ”Kärnan”.

Kapitel 4. Autentisering och åtkomstkontroll

    När en person (eller ett program) begär åtkomst till systemet
    bekräftas identiteten genom autentisering som en betrodd
    identitet.

    Varning

    Konfigurationsfel i PAM kan leda till att du blir utestängd från
    ditt eget system. Du måste ha en räddnings-CD till hands eller
    konfigurera en alternativ startpartition. För att återhämta dig,
    starta systemet med dem och korrigera saker därifrån.

4.1. Normal Unix-autentisering

    Normal Unix-autentisering tillhandahålls av modulen pam_unix(8)
    under PAM (Pluggable Authentication Modules). Dess 3 viktiga
    konfigurationsfiler, med ":"-separerade poster, är följande.

    Tabell 4.1. 3 viktiga konfigurationsfiler för pam_unix(8)

    +---------------------------------------------------------------+
    |  fil   |tillstånd |användare|grupp |       beskrivning        |
    |--------+----------+---------+------+--------------------------|
    |/etc/   |-rw-r--r--|root     |root  |(rensad) information om   |
    |passwd  |          |         |      |användarkonton            |
    |--------+----------+---------+------+--------------------------|
    |/etc/   |-rw-r-----|root     |shadow|säkra information om      |
    |shadow  |          |         |      |användarkonton            |
    |--------+----------+---------+------+--------------------------|
    |/etc/   |-rw-r--r--|root     |root  |gruppinformation          |
    |group   |          |         |      |                          |
    +---------------------------------------------------------------+


    "/etc/passwd" innehåller följande.

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

    Som förklaras i passwd(5) betyder varje ":"-separerad post i den
    här filen följande.

      * Inloggningsnamn

      * Inmatning av lösenordsspecifikation

      * Numeriskt användar-ID

      * Numeriskt grupp-ID

      * Användarnamn eller kommentarsfält

      * Användarens hemkatalog

      * Valfri tolk för användarkommandon

    Den andra posten i "/etc/passwd" användes för den krypterade
    lösenordsposten. Efter införandet av "/etc/shadow" används den
    här posten för lösenordsspecifikationen.

    Tabell 4.2. Den andra postens innehåll i "/etc/passwd"

    +--------------------------------------------------------+
    |innehåll|                   betydelse                   |
    |--------+-----------------------------------------------|
    |(tomt)  |lösenordslöst konto                            |
    |--------+-----------------------------------------------|
    |bredd   |det krypterade lösenordet finns i "/etc/shadow"|
    +--------------------------------------------------------+


    "/etc/shadow" innehåller följande.

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
     ...

    Som förklaras i shadow(5) betyder varje ":"-separerad post i
    denna fil följande.

      * Inloggningsnamn

      * Krypterat lösenord (Det inledande "$1$" anger att
        MD5-kryptering används. "*" indikerar ingen inloggning)

      * Datum för senaste lösenordsbytet, uttryckt som antal dagar
        sedan 1 januari 1970

      * Antal dagar som användaren måste vänta innan hon kan ändra
        sitt lösenord igen

      * Antal dagar efter vilka användaren måste ändra sitt lösenord

      * Antal dagar innan ett lösenord upphör att gälla under vilka
        användaren ska varnas

      * Antal dagar efter att ett lösenord har löpt ut under vilka
        lösenordet fortfarande ska accepteras

      * Datum då kontot upphör att gälla, uttryckt i antal dagar
        sedan den 1 januari 1970

      * …

    "/etc/group" innehåller följande.

    group1:x:20:user1,user2

    Som förklaras i group(5) betyder varje ":"-separerad post i denna
    fil följande.

      * Gruppnamn

      * Krypterat lösenord (används egentligen inte)
   
      * Numeriskt grupp-ID

      * "," Separerad lista med användarnamn

    Notera
   
    "/etc/gshadow" har samma funktion som "/etc/shadow" för "/etc/
    group", men används egentligen inte.

    Notera

    Det faktiska gruppmedlemskapet för en användare kan läggas till
    dynamiskt om raden "auth optional pam_group.so" läggs till i "/
    etc/pam.d/common-auth" och anges i "/etc/security/group.conf". Se
    pam_group(8).

    Notera

    Paketet base-passwd innehåller en auktoritativ lista över
    användare och grupper: "/usr/share/doc/base-passwd/
    users-and-groups.html".

4.2. Hantering av konto- och lösenordsinformation

    Här är några viktiga kommandon för att hantera kontoinformation.

    Tabell 4.3. Lista över kommandon för att hantera kontoinformation

    +---------------------------------------------------------------+
    |     kommando     |                  funktion                  |
    |------------------+--------------------------------------------|
    |getent passwd     |bläddra i kontoinformation för "användarnamn|
    |user_name         |"                                           |
    |------------------+--------------------------------------------|
    |getent shadow     |bläddra i skuggad kontoinformation för "    |
    |user_name         |användarens_namn"                           |
    |------------------+--------------------------------------------|
    |getent group      |bläddra i gruppinformation för "grupp_namn" |
    |group_name        |                                            |
    |------------------+--------------------------------------------|
    |passwd            |hantera lösenord för kontot                 |
    |------------------+--------------------------------------------|
    |passwd -e         |ange engångslösenord för aktivering av      |
    |                  |kontot                                      |
    |------------------+--------------------------------------------|
    |chage             |hantera information om åldrande av lösenord |
    +---------------------------------------------------------------+


    Du kan behöva ha root-behörighet för att vissa funktioner ska
    fungera. Se crypt(3) för kryptering av lösenord och data.

    Notera

    På systemet som konfigurerats med PAM och NSS som Debians
    salsamaskin, kanske innehållet i de lokala "/etc/passwd", "/etc/
    group" och "/etc/shadow" inte används aktivt av systemet.
    Ovanstående kommandon är giltiga även i en sådan miljö.

4.3. Bra lösenord

    När du skapar ett konto under systeminstallationen eller med
    kommandot passwd(1) bör du välja ett bra lösenord som består av
    minst 6 till 8 tecken, inklusive ett eller flera tecken från var
    och en av följande uppsättningar enligt passwd(1).

      * Små bokstäver i alfabetet

      * Siffror 0 till 9

      * Skiljetecken

    Varning

    Välj inte ord som går att gissa sig till som lösenord. Kontonamn,
    personnummer, telefonnummer, adress, födelsedag, namn på
    familjemedlemmar eller husdjur, ordboksord, enkla sekvenser av
    tecken som "12345" eller "qwerty", ... är alla dåliga val för
    lösenordet.

4.4. Skapa krypterat lösenord

    Det finns oberoende verktyg för att generera krypterade lösenord
    med salt.

    Tabell 4.4. Lista över verktyg för att generera lösenord

    +---------------------------------------------------------------+
    | paket |popcon |storlek|kommando |          funktion           |
    |-------+-------+-------+---------+-----------------------------|
    |whois  |V:23,  |384    |mkpasswd |överutrustad frontend till   |
    |       |I:210  |       |         |crypt(3)-biblioteket         |
    |-------+-------+-------+---------+-----------------------------|
    |openssl|V:855, |2532   |openssl  |beräkna lösenordshashar      |
    |       |I:997  |       |passwd   |(OpenSSL). passwd(1ssl)      |
    +---------------------------------------------------------------+


4.5. PAM och NSS

    Moderna Unix-liknande system som Debian-systemet tillhandahåller
    PAM (Pluggable Authentication Modules) och NSS (Name Service
    Switch) för att den lokala systemadministratören ska kunna
    konfigurera sitt system. Dessa mekanismers roll kan sammanfattas
    på följande sätt.

      * PAM erbjuder en flexibel autentiseringsmekanism som används
        av applikationsprogramvaran, vilket innebär utbyte av
        lösenordsdata.
   
      * NSS erbjuder en flexibel namntjänstmekanism som ofta används
        av standardbiblioteket C för att få fram användar- och
        gruppnamn för program som ls(1) och id(1).

    Dessa PAM- och NSS-system måste konfigureras på ett konsekvent
    sätt.

    De viktigaste paketen i PAM- och NSS-systemen är följande.

    Tabell 4.5. Lista över anmärkningsvärda PAM- och NSS-system

    +---------------------------------------------------------------+
    |       paket       |popcon|storlek|        beskrivning         |
    |-------------------+------+-------+----------------------------|
    |                   |V:941,|       |Pluggbara                   |
    |libpam-modules     |I:1000|892    |autentiseringsmoduler       |
    |                   |      |       |(grundläggande tjänst)      |
    |-------------------+------+-------+----------------------------|
    |                   |V:7,  |       |Inkopplingsbar              |
    |libpam-ldapd       |I:13  |79     |autentiseringsmodul som     |
    |                   |      |       |möjliggör LDAP-gränssnitt   |
    |-------------------+------+-------+----------------------------|
    |                   |      |       |Inkopplingsbar              |
    |libpam-systemd     |V:747,|785    |autentiseringsmodul för     |
    |                   |I:967 |       |registrering av             |
    |                   |      |       |användarsessioner för logind|
    |-------------------+------+-------+----------------------------|
    |                   |      |       |Pluggbara                   |
    |libpam-doc         |I:7.5 |1492   |autentiseringsmoduler       |
    |                   |      |       |(dokumentation i html och   |
    |                   |      |       |text)                       |
    |-------------------+------+-------+----------------------------|
    |                   |      |       |GNU C-bibliotek: Delade     |
    |libc6              |V:942,|5481   |bibliotek som också         |
    |                   |I:1000|       |tillhandahåller tjänsten    |
    |                   |      |       |"Name Service Switch"       |
    |-------------------+------+-------+----------------------------|
    |glibc-doc          |I:5.4 |3926   |GNU C-biblioteket:          |
    |                   |      |       |Handböcker                  |
    |-------------------+------+-------+----------------------------|
    |                   |      |       |GNU C-biblioteket:          |
    |glibc-doc-reference|I:3.2 |14764  |Referensmanual i info-, pdf-|
    |                   |      |       |och html-format (icke-fri)  |
    |-------------------+------+-------+----------------------------|
    |libnss-mdns        |V:282,|142    |NSS-modul för Multicast     |
    |                   |I:502 |       |DNS-namnlösning             |
    |-------------------+------+-------+----------------------------|
    |libnss-ldapd       |V:8,  |131    |NSS-modul för användning av |
    |                   |I:16  |       |LDAP som namngivningstjänst |
    +---------------------------------------------------------------+


      * "The Linux-PAM System Administrators' Guide" i libpam-doc är
        nödvändig för att lära sig PAM-konfigurationen.
   
      * avsnittet "System Databases and Name Service Switch" i
        glibc-doc-reference är viktigt för att lära sig
        NSS-konfigurationen.

    Notera

    Du kan se en mer omfattande och aktuell lista med kommandot
    "aptitude search 'libpam-|libnss-'". Akronymen NSS kan också
    betyda "Network Security Service", vilket inte är samma sak som
    "Name Service Switch".

    Notera
   
    PAM är det mest grundläggande sättet att initiera miljövariabler
    för varje program med det systemomfattande standardvärdet.

    Under systemd installeras paketet libpam-systemd för att hantera
    användarinloggningar genom att registrera användarsessioner i
    systemd-kontrollgruppshierarkin för logind. Se systemd-logind(8),
    logind.conf(5) och pam_systemd(8).

4.5.1. Konfigurationsfiler som nås av PAM och NSS

    Här är några viktiga konfigurationsfiler som PAM och NSS har
    åtkomst till.

    Tabell 4.6. Lista över konfigurationsfiler som PAM och NSS har
    åtkomst till

    +---------------------------------------------------------------+
    |konfigurationsfil|                  funktion                   |
    |-----------------+---------------------------------------------|
    |/etc/pam.d/      |ställa in PAM-konfiguration för "program_namn|
    |program_name     |" -programmet; se pam(7) och pam.d(5)        |
    |-----------------+---------------------------------------------|
    |/etc/            |konfigurera NSS-konfigurationen med en post  |
    |nsswitch.conf    |för varje tjänst. Se nsswitch.conf(5)        |
    |-----------------+---------------------------------------------|
    |/etc/nologin     |begränsa användarinloggningen med modulen    |
    |                 |pam_nologin(8)                               |
    |-----------------+---------------------------------------------|
    |/etc/securetty   |begränsa tty för root-åtkomst med modulen    |
    |                 |pam_securetty(8)                             |
    |-----------------+---------------------------------------------|
    |/etc/security/   |ange åtkomstbegränsning med modulen          |
    |access.conf      |pam_access(8)                                |
    |-----------------+---------------------------------------------|
    |/etc/security/   |ställa in gruppbaserad fasthållning genom    |
    |group.conf       |modulen pam_group(8)                         |
    |-----------------+---------------------------------------------|
    |/etc/security/   |ställa in miljövariabler med modulen pam_env |
    |pam_env.conf     |(8)                                          |
    |-----------------+---------------------------------------------|
    |/etc/environment |ställa in ytterligare miljövariabler med     |
    |                 |modulen pam_env(8) med argumentet "readenv=1"|
    |-----------------+---------------------------------------------|
    |/etc/default/    |ange locale med modulen pam_env(8) med       |
    |locale           |argumentet "readenv=1 envfile=/etc/default/  |
    |                 |locale" (Debian)                             |
    |-----------------+---------------------------------------------|
    |/etc/security/   |ange resursbegränsning (ulimit, core, ...)   |
    |limits.conf      |med modulen pam_linits(8)                    |
    |-----------------+---------------------------------------------|
    |/etc/security/   |ställa in tidsbegränsning med modulen        |
    |time.conf        |pam_time(8)                                  |
    |-----------------+---------------------------------------------|
    |/etc/systemd/    |ställa in konfigurationen för                |
    |logind.conf      |systemd-inloggningshanteraren (se logind.conf|
    |                 |(5) och systemd-logind.service(8))           |
    +---------------------------------------------------------------+


    Begränsningen av lösenordsvalet implementeras av PAM-modulerna,
    pam_unix(8) och pam_cracklib(8). De kan konfigureras med hjälp av
    sina argument.

    Tips
   
    PAM-moduler använder suffixet ".so" för sina filnamn.

4.5.2. Den moderna centraliserade systemhanteringen

    Den moderna centraliserade systemhanteringen kan distribueras med
    hjälp av den centraliserade LDAP-servern (Lightweight Directory
    Access Protocol) för att administrera många Unix-liknande och
    icke-Unix-liknande system i nätverket. Open
    source-implementeringen av Lightweight Directory Access Protocol
    är OpenLDAP Software.

    LDAP-servern tillhandahåller kontoinformationen genom användning
    av PAM och NSS med paketen libpam-ldapd och libnss-ldapd för
    Debian-systemet. Flera åtgärder krävs för att aktivera detta (jag
    har inte använt den här installationen och följande är enbart
    sekundär information. Vänligen läs detta i detta sammanhang).

      * Du konfigurerar en centraliserad LDAP-server genom att köra
        ett program, t.ex. den fristående LDAP-daemon, slapd(8).

      * Du ändrar PAM-konfigurationsfilerna i katalogen "/etc/pam.d/"
        så att de använder "pam_ldap.so" i stället för
        standardinställningen "pam_unix.so".

      * Du ändrar NSS-konfigurationen i filen "/etc/nsswitch.conf" så
        att "ldap" används i stället för standard ("compat" eller
        "file").

      * Du måste se till att libpam-ldapd använder SSL-anslutning
        (eller TLS) för att skydda lösenordet.

      * Du kan få libnss-ldapd att använda SSL-anslutning (eller TLS)
        för att säkerställa dataintegritet på bekostnad av
        LDAP-nätverkets overhead.

      * Du bör köra nscd(8) lokalt för att cachelagra alla
        LDAP-sökresultat för att minska LDAP-nätverkstrafiken.

    Se dokumentationen i nsswitch.conf(5), pam.conf(5), ldap.conf(5)
    och ”/usr/share/doc/libpam-doc/html/” som tillhandahålls av
    paketet libpam-doc och ”info libc ’Name Service Switch’” som
    tillhandahålls av paketet glibc-doc.

    På samma sätt kan du sätta upp alternativa centraliserade system
    med andra metoder.

      * Integrering av användare och grupper med Windows-systemet.

          + Få tillgång till Windows domäntjänster med paketen
            winbind och libpam_winbind.

          + Se winbindd(8) och Integrering av MS Windows-nätverk med
            Samba.
   
      * Integrering av användare och grupper med det äldre
        Unix-liknande systemet.

          + Få tillgång till NIS (ursprungligen kallat YP) eller NIS+
            med hjälp av paketet nis.

          + Se Linux NIS(YP)/NYS/NIS+ HOWTO.

4.5.3. "Varför GNU su inte stöder hjulgruppen"

    Detta är den berömda frasen längst ner på den gamla "info
    su"-sidan av Richard M. Stallman. Oroa dig inte: det nuvarande
    su-kommandot i Debian använder PAM, så att man kan begränsa
    möjligheten att använda su till rotgruppen genom att aktivera
    raden med "pam_wheel.so" i "/etc/pam.d/su".

4.5.4. Strängare regler för lösenord

    Genom att installera libpam-cracklib-paketet kan du tvinga fram
    strängare lösenordsregler.

    På ett typiskt GNOME-system som automatiskt installerar
    libpam-gnome-keyring ser "/etc/pam.d/common-password" ut så här:

    # here are the per-package modules (the "Primary" block)
    password        requisite                       pam_cracklib.so retry=3 minlen=8 difok=3
    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password        requisite                       pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password        required                        pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password        optional        pam_gnome_keyring.so
    # end of pam-auth-update config

4.6. Säkerhet vid autentisering

    Notera
   
    Informationen här kanske inte är tillräcklig för dina
    säkerhetsbehov, men den bör vara en bra början.

4.6.1. Säkert lösenord på Internet

    Många populära transportlagertjänster kommunicerar meddelanden
    som innehåller lösenordsautentisering i klartext. Det är en
    mycket dålig idé att överföra lösenord i klartext över det vilda
    Internet där det kan fångas upp. Du kan köra dessa tjänster
    över"Transport Layer Security" (TLS) eller dess föregångare
    "Secure Sockets Layer" (SSL) för att säkra hela kommunikationen
    inklusive lösenordet genom kryptering.

    Tabell 4.7. Lista över osäkra och säkra tjänster och portar

    +--------------------------------------------------+
    |osäkert servicenamn|port|namn på säker tjänst|port|
    |-------------------+----+--------------------+----|
    |www (http)         |80  |https               |443 |
    |-------------------+----+--------------------+----|
    |smtp (e-post)      |25  |ssmtp (smtps)       |465 |
    |-------------------+----+--------------------+----|
    |ftp-data           |20  |ftps-data           |989 |
    |-------------------+----+--------------------+----|
    |ftp                |21  |ftps                |990 |
    |-------------------+----+--------------------+----|
    |telnet             |23  |telnät              |992 |
    |-------------------+----+--------------------+----|
    |imap2              |143 |imaps               |993 |
    |-------------------+----+--------------------+----|
    |pop3               |110 |pop3s               |995 |
    |-------------------+----+--------------------+----|
    |ldap               |389 |ldaps               |636 |
    +--------------------------------------------------+


    Krypteringen kostar CPU-tid. Som ett CPU-vänligt alternativ kan
    du behålla kommunikationen i klartext och bara säkra lösenordet
    med ett säkert autentiseringsprotokoll, t.ex. "Authenticated Post
    Office Protocol" (APOP) för POP och "Challenge-Response
    Authentication Mechanism MD5" (CRAM-MD5) för SMTP och IMAP. (För
    att skicka e-postmeddelanden över Internet till din e-postserver
    från din e-postklient har det nyligen blivit populärt att använda
    den nya porten 587 för meddelandeinlämning i stället för den
    traditionella SMTP-porten 25 för att undvika att port 25
    blockeras av nätverksleverantören samtidigt som du autentiserar
    dig med CRAM-MD5)

    The traditional password-based authentication still suffers
    inherent security issues such as password reuse across multiple
    websites. See other authentication methods for the secure
    solution: Time-based one-time password (TOTP), Universal 2nd
    Factor (U2F), Web Authentication (WebAuthn, commonly referred as
    "passkey")

4.6.2. Secure Shell

    Programmet Secure Shell (SSH) tillhandahåller säker krypterad
    kommunikation mellan två icke betrodda värdar över ett osäkert
    nätverk med säker autentisering. Det består av OpenSSH-klienten,
    ssh(1), och OpenSSH-daemon, sshd(8). Denna SSH kan användas för
    att tunnla en osäker protokollkommunikation som POP och X säkert
    över Internet med funktionen port forwarding.

    Klienten försöker autentisera sig med hjälp av värdbaserad
    autentisering, autentisering med offentlig nyckel, autentisering
    med utmaningssvar eller lösenordsautentisering. Användningen av
    autentisering med publik nyckel möjliggör fjärrinloggning utan
    lösenord. Se Avsnitt 6.3, ”Server och verktyg för fjärråtkomst
    (SSH)”.

4.6.3. Extra säkerhetsåtgärder för Internet

    Även om du kör säkra tjänster som Secure Shell (SSH) och
    PPTP-servrar (Point-to-Point Tunneling Protocol) finns det
    fortfarande risk för intrång via brute force-attacker med
    lösenordsgissning etc. från Internet. Användning av
    brandväggspolicyn (se Avsnitt 5.7, ”Netfilters infrastruktur”)
    tillsammans med följande säkerhetsverktyg kan förbättra
    säkerhetssituationen.

    Tabell 4.8. Lista över verktyg för extra säkerhetsåtgärder

    +---------------------------------------------------------------+
    |    paket    | popcon |storlek|          beskrivning           |
    |-------------+--------+-------+--------------------------------|
    |knockd       |V:0.7,  |110    |liten port-knock-daemon knockd  |
    |             |I:1.7   |       |(1) och klient knock(1)         |
    |-------------+--------+-------+--------------------------------|
    |fail2ban     |V:102,  |2191   |förbjuda IP-adresser som orsakar|
    |             |I:113   |       |flera autentiseringsfel         |
    |-------------+--------+-------+--------------------------------|
    |libpam-shield|V:0.05, |115    |låsa ut fjärrangripare som      |
    |             |I:0.05  |       |försöker gissa lösenord         |
    +---------------------------------------------------------------+


4.6.4. Säkra lösenordet för root

    Om du vill förhindra att personer får åtkomst till din maskin med
    root-behörighet måste du vidta följande åtgärder.

      * Prevent physical access to the system storage device (HDD /
        SSD / ...)

      * Lås UEFI/BIOS och förhindra uppstart från flyttbara media

      * Ange lösenord för GRUB:s interaktiva session

      * Lås GRUB-menyn från redigering

    With physical access to the system storage device, resetting the
    password is relatively easy with following steps.

     1. Move the system storage device to a PC with USB bootable UEFI
        /BIOS.

     2. Boot system with a rescue media (see Avsnitt 3.2.2, ”Linux
        live rescue system on USB”).

     3. Montera rotpartitionen med läs- och skrivåtkomst.

     4. Redigera "/etc/passwd" i rotpartitionen och gör den andra
        posten för rotkontot tom.

    Om du har redigeringsåtkomst till GRUB-menyalternativet (se
    Avsnitt 3.1.2, ”Steg 2: startladdaren”) för grub-rescue-pc vid
    start, är det ännu enklare med följande steg.

     1. Starta systemet med kärnparametern ändrad till något i stil
        med "root=/dev/sda6 rw init=/bin/sh".

     2. Redigera "/etc/passwd" och töm den andra posten för
        root-kontot.

     3. Starta om systemet.

    Systemets root-skal är nu åtkomligt utan lösenord.

    Notera

    När man har root shell-åtkomst kan man komma åt allt på systemet
    och återställa alla lösenord på systemet. Dessutom kan han
    kompromissa med lösenordet för alla användarkonton med hjälp av
    verktyg för att knäcka lösenord med brutal kraft, t.ex. john och
    crack-paket (se Avsnitt 9.5.10, ”Kontroll av systemsäkerhet och
    -integritet”). Detta knäckta lösenord kan leda till att andra
    system äventyras.

    Den enda rimliga mjukvarulösningen för att undvika alla dessa
    problem är att använda en mjukvarukrypterad rotpartition (eller "
    /etc"-partition) med hjälp av dm-crypt och initramfs (se
    Avsnitt 9.9, ”Tips om datakryptering”). Du behöver dock alltid
    ett lösenord för att starta systemet.

4.7. Andra åtkomstkontroller

    Det finns andra åtkomstkontroller till systemet än den
    lösenordsbaserade autentiseringen och filbehörigheterna.

    Notera
   
    Se Avsnitt 9.4.16, ”Alt-SysRq-tangenten” för begränsning av
    SAK-funktionen (Secure Attention Key) i kärnan.

4.7.1. Listor för åtkomstkontroll (ACL)

    ACL:er är en överuppsättning av de vanliga behörigheterna som
    förklaras i Avsnitt 1.2.3, ”Behörigheter i filsystemet”.

    Du stöter på ACL:er i aktion i moderna skrivbordsmiljöer. När en
    formaterad USB-lagringsenhet är automatiskt monterad som t.ex. "/
    media/penguin/USBSTICK" kan en normal användare, pingvinen, köra:

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

    "+" i den 11:e kolumnen indikerar att ACL:er används. Utan ACL:er
    skulle en vanlig användare, pingvin, inte kunna lista sig på det
    här sättet eftersom pingvin inte är med i rotgruppen. Du kan se
    ACL:er som:

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

    Här:

      * "user::rwx", "group::---" och "other::---" motsvarar de
        vanliga ägar-, grupp- och andra behörigheterna.

      * ACL:n "user:penguin:r-x" ger den vanliga användaren penguin
        behörigheten "r-x". Detta gjorde det möjligt för "ls -la" att
        lista kataloginnehåll.

      * ACL:n "mask::r-x" anger den övre gränsen för behörigheter.

    Se"POSIX Access Control Lists on Linux", acl(5), getfacl(1) och
    setfacl(1) för mer information.

4.7.2. sudo

    sudo(8) är ett program som är utformat så att en sysadmin kan ge
    begränsade root-privilegier till användare och logga
    root-aktiviteter. sudo kräver endast ett vanligt
    användarlösenord. Installera sudo-paketet och aktivera det genom
    att ställa in alternativ i "/etc/sudoers". Se
    konfigurationsexempel i "/usr/share/doc/sudo/examples/sudoers"
    och Avsnitt 1.1.12, ”sudo konfiguration”.

    Min användning av sudo för single user-systemet (se
    Avsnitt 1.1.12, ”sudo konfiguration”) syftar till att skydda mig
    mot min egen dumhet. Personligen anser jag att sudo är ett bättre
    alternativ än att använda systemet från root-kontot hela tiden.
    Följande ändrar till exempel ägaren till "någon_fil" till "
    mitt_namn".

    $ sudo chown my_name some_file

    Om du känner till root-lösenordet (vilket självinstallerade
    Debian-användare gör) kan du naturligtvis köra alla kommandon
    under root från vilket användarkonto som helst med "su -c".

4.7.3. PolicyKit

    PolicyKit är en operativsystemskomponent för kontroll av
    systemövergripande behörigheter i Unix-liknande operativsystem.

    Nyare GUI-program är inte utformade för att köras som
    privilegierade processer. De kommunicerar med privilegierade
    processer via PolicyKit för att utföra administrativa åtgärder.

    PolicyKit begränsar sådana åtgärder till användarkonton som
    tillhör sudo-gruppen på Debian-systemet.

    Se polkit(8).

4.7.4. Begränsning av åtkomst till vissa servertjänster

    För systemets säkerhet är det en god idé att inaktivera så många
    serverprogram som möjligt. Detta är särskilt viktigt för
    nätverksservrar. Att ha oanvända servrar, aktiverade antingen
    direkt som daemon eller via super-serverprogram, anses vara en
    säkerhetsrisk.

    Många program, t.ex. sshd(8), använder PAM-baserad
    åtkomstkontroll. Det finns många sätt att begränsa åtkomsten till
    vissa servertjänster.

      * konfigurationsfiler: "/etc/default/program_namn"

      * Konfiguration av Systemd-tjänstenhet för daemon

      * PAM (pluggbara autentiseringsmoduler)

      * "/etc/inetd.conf" för super-server

      * "/etc/hosts.deny" och "/etc/hosts.allow" för TCP-wrapper,
        tcpd(8)

      * "/etc/rpc.conf" för Sun RPC

      * "/etc/at.allow" och "/etc/at.deny" för atd(8)

      * "/etc/cron.allow" och "/etc/cron.deny" för crontab(1)

      * Nätverksbrandvägg för nätfilterinfrastruktur

    Se Avsnitt 3.6, ”Systemhantering”, Avsnitt 4.5.1,
    ”Konfigurationsfiler som nås av PAM och NSS”, och Avsnitt 5.7,
    ”Netfilters infrastruktur”.

    Tips
   
    Sun RPC-tjänster måste vara aktiva för NFS och andra RPC-baserade
    program.

    Tips

    Om du har problem med fjärråtkomst i ett nyare Debian-system,
    kommentera bort felaktiga konfigurationer som ”ALL: PARANOID” i ”
    /etc/hosts.deny” om de finns. (Men du måste vara försiktig med
    säkerhetsriskerna som är förknippade med denna typ av åtgärd.)

4.7.5. Säkerhetsfunktioner i Linux

    Linuxkärnan har utvecklats och stöder säkerhetsfunktioner som
    inte finns i traditionella UNIX-implementationer.

    Linux stöder utökade attribut som utökar de traditionella
    UNIX-attributen (se xattr(7)).

    Linux delar upp de privilegier som traditionellt förknippas med
    superuser i olika enheter, så kallade capabilities(7), som kan
    aktiveras och inaktiveras oberoende av varandra. Capabilities är
    ett attribut per tråd sedan kärnversion 2.2.

    Ramverket Linux Security Module (LSM) tillhandahåller en mekanism
    för olika säkerhetskontroller som kan kopplas till nya
    kärntillägg. Till exempel:

      * AppArmor

      * Säkerhetshöjande Linux (SELinux)
   
      * Smack (kärnan för förenklad obligatorisk åtkomstkontroll)

      * Tomoyo Linux

    Eftersom dessa tillägg kan strama åt privilegiemodellen hårdare
    än den vanliga Unix-liknande säkerhetsmodellen, kan till och med
    root-behörigheten begränsas. Vi rekommenderar att du läser
    ramverksdokumentet för Linux Security Module (LSM) på kernel.org.

    Linux namnrymder omsluter en global systemresurs med en
    abstraktion som gör att processerna inom namnrymden ser ut som om
    de har en egen isolerad instans av den globala resursen.
    Ändringar i den globala resursen är synliga för andra processer
    som är medlemmar i namnrymden, men osynliga för andra processer.
    Sedan kärnversion 5.6 finns det 8 typer av namnrymder (se
    namnrymder(7), unshare(1), nsenter(1)).

    Från och med Debian 11 Bullseye (2021) använder Debian en
    enhetlig cgroup-hierarki (a.k.a. cgroups-v2).

    Exempel på användning av namnrymder med cgrupper för att isolera
    sina processer och tillåta resurskontroll är:

      * Systemd. Se Avsnitt 3.3.1, ”Systemd startas”.

      * Sandlådemiljö. Se Avsnitt 7.7, ”Sandlåda”.

      * Linux-containrar såsom Docker, LXC. Se Avsnitt 9.11,
        ”Virtualiserat system”.

    Dessa funktioner kan inte realiseras av Avsnitt 4.1, ”Normal
    Unix-autentisering”. Dessa avancerade ämnen är oftast utanför
    ramen för detta introduktionsdokument.

Kapitel 5. Nätverkskonfiguration

    Tips
   
    För en modern Debian-specifik guide till nätverk, läs The Debian
    Administrator's Handbook - Configuring the Network.

    Tips
   
    Under systemd kan networkd användas för att hantera nätverk. Se
    systemd-networkd(8).

5.1. Den grundläggande nätverksinfrastrukturen

    Låt oss gå igenom den grundläggande nätverksinfrastrukturen i ett
    modernt Debian-system.

    Tabell 5.1. Lista över verktyg för nätverkskonfiguration

    +-------------------------------------------------------------------------------------+
    |        paket        |popcon|storlek|       typ        |         beskrivning         |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:422,|       |                  |NetworkManager (daemon):     |
    |network-manager      |I:469 |7021   |config::NM        |hanterar nätverket           |
    |                     |      |       |                  |automatiskt                  |
    |---------------------+------+-------+------------------+-----------------------------|
    |network-manager-gnome|V:39, |18     |config::NM        |NetworkManager               |
    |                     |I:156 |       |                  |(GNOME-frontend)             |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |      |       |                  |Netplan (generator):         |
    |                     |V:1.4,|       |                  |Enhetligt, deklarativt       |
    |netplan.io           |I:8.6 |340    |config::NM+nätverk|gränssnitt till              |
    |                     |      |       |                  |NetworkManager och           |
    |                     |      |       |                  |systemd-networkd backends    |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:640,|       |                  |standardiserat verktyg för   |
    |ifupdown             |I:972 |201    |config::ifupdown  |att ta upp och ner nätverket |
    |                     |      |       |                  |(Debian-specifikt)           |
    |---------------------+------+-------+------------------+-----------------------------|
    |pppoeconf            |V:0.2,|176    |config::hjälpare  |konfigurationshjälp för      |
    |                     |I:4.0 |       |                  |PPPoE-anslutning             |
    |---------------------+------+-------+------------------+-----------------------------|
    |wpasupplicant        |V:411,|3896   |config::hjälpare  |klientstöd för WPA och WPA2  |
    |                     |I:513 |       |                  |(IEEE 802.11i)               |
    |---------------------+------+-------+------------------+-----------------------------|
    |wpagui               |V:0.2,|779    |config::hjälpare  |Qt GUI-klient för            |
    |                     |I:1.4 |       |                  |wpa_supplicant               |
    |---------------------+------+-------+------------------+-----------------------------|
    |wireless-tools       |V:190,|232    |config::hjälpare  |verktyg för att manipulera   |
    |                     |I:260 |       |                  |Linux Wireless Extensions    |
    |---------------------+------+-------+------------------+-----------------------------|
    |iw                   |V:38, |332    |config::hjälpare  |verktyg för konfiguration av |
    |                     |I:472 |       |                  |trådlösa Linux-enheter       |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |      |       |                  |iproute2, IPv6 och annan     |
    |iproute2             |V:775,|4123   |config::iproute2  |avancerad                    |
    |                     |I:987 |       |                  |nätverkskonfiguration: ip(8),|
    |                     |      |       |                  |tc(8), etc                   |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:382,|       |                  |administrationsverktyg för   |
    |iptables             |I:642 |2408   |config::Netfilter |paketfiltrering och NAT      |
    |                     |      |       |                  |(Netfilter)                  |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |      |       |                  |administrationsverktyg för   |
    |nftables             |V:254,|189    |config::Netfilter |paketfiltrering och NAT      |
    |                     |I:872 |       |                  |(Netfilter)(efterföljare till|
    |                     |      |       |                  |{ip,ip6,arp,eb}tables)       |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |      |       |                  |testa                        |
    |iputils-ping         |V:198,|188    |test              |nätverkstillgängligheten för |
    |                     |I:998 |       |                  |en fjärrvärd via värdnamn    |
    |                     |      |       |                  |eller IP-adress(iproute2)    |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:2,  |       |                  |testa nätverkets nåbarhet för|
    |iputils-arping       |I:18  |53     |test              |en fjärrvärd som anges av    |
    |                     |      |       |                  |ARP-adressen                 |
    |---------------------+------+-------+------------------+-----------------------------|
    |iputils-tracepath    |V:2,  |50     |test              |spåra nätverkssökvägen till  |
    |                     |I:21  |       |                  |en fjärrvärd                 |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:97, |       |                  |visa eller ändra             |
    |ethtool              |I:254 |1093   |test              |inställningar för            |
    |                     |      |       |                  |Ethernet-enheter             |
    |---------------------+------+-------+------------------+-----------------------------|
    |mtr-tiny             |V:4,  |182    |test::låg nivå    |spåra nätverkssökvägen till  |
    |                     |I:39  |       |                  |en fjärrvärd (curses)        |
    |---------------------+------+-------+------------------+-----------------------------|
    |mtr                  |V:4,  |231    |test::låg nivå    |spåra nätverkssökvägen till  |
    |                     |I:41  |       |                  |en fjärrvärd (curses och GTK)|
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:0.5,|       |                  |verktyg för gemensam         |
    |gnome-nettool        |I:9.1 |2480   |test::låg nivå    |nätverksinformationshantering|
    |                     |      |       |                  |(GNOME)                      |
    |---------------------+------+-------+------------------+-----------------------------|
    |nmap                 |V:25, |4759   |test::låg nivå    |network mapper / portskanner |
    |                     |I:186 |       |                  |(Nmap, konsol)               |
    |---------------------+------+-------+------------------+-----------------------------|
    |tcpdump              |V:19, |1346   |test::låg nivå    |analysator för nätverkstrafik|
    |                     |I:177 |       |                  |(Tcpdump, konsol)            |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:4,  |       |                  |analysprogram för            |
    |wireshark            |I:39  |17068  |test::låg nivå    |nätverkstrafik (Wireshark,   |
    |                     |      |       |                  |GTK)                         |
    |---------------------+------+-------+------------------+-----------------------------|
    |tshark               |V:2,  |433    |test::låg nivå    |nätverkstrafikanalysator     |
    |                     |I:24  |       |                  |(konsol)                     |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:0.2,|       |                  |skapa en sammanfattning av   |
    |tcptrace             |I:1.7 |407    |test::låg nivå    |anslutningarna från          |
    |                     |      |       |                  |tcpdump-utdata               |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:5,  |       |                  |nätverksklienter som         |
    |dnsutils             |I:156 |23     |test::låg nivå    |levereras med BIND: nslookup |
    |                     |      |       |                  |(8), nsupdate(8), dig(8)     |
    |---------------------+------+-------+------------------+-----------------------------|
    |                     |V:0.1,|       |                  |kontrollera                  |
    |dlint                |I:2.1 |52     |test::låg nivå    |DNS-zoninformation med hjälp |
    |                     |      |       |                  |av namnserveruppslagningar   |
    |---------------------+------+-------+------------------+-----------------------------|
    |dnstracer            |V:0.1,|63     |test::låg nivå    |spåra en kedja av DNS-servrar|
    |                     |I:1.1 |       |                  |till källan                  |
    +-------------------------------------------------------------------------------------+


5.1.1. Upplösning av värdnamn

    Värdnamnsupplösningen stöds för närvarande även av NSS-mekanismen
    (Name Service Switch). Flödet för denna upplösning är följande.

     1. Filen "/etc/nsswitch.conf" med en stanza som "hosts: files
        dns" dikterar ordningen för upplösning av värdnamn. (Detta
        ersätter den gamla funktionaliteten i "order"-strofen i "/etc
        /host.conf")

     2. Metoden files anropas först. Om värdnamnet finns i filen "/
        etc/hosts" returnerar den alla giltiga adresser för det och
        avslutas. (Filen "/etc/host.conf" innehåller "multi on")

     3. Metoden dns anropas. Om värdnamnet hittas genom en förfrågan
        till DNS (Internet Domain Name System), som identifieras i
        filen "/etc/resolv.conf", returneras alla giltiga adresser
        för det och metoden avslutas.

    En vanlig arbetsstation kan installeras med värdnamnet inställt
    på t.ex."host_name" och det valfria domännamnet inställt på en
    tom sträng. Då ser "/etc/hosts" ut på följande sätt.

    127.0.0.1 localhost
    127.0.1.1 host_name

    # The following lines are desirable for IPv6 capable hosts
    ::1     localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

    Varje rad börjar med en IP-adress och följs sedan av det
    tillhörande värdnamnet.

    IP-adressen 127.0.1.1 i den andra raden i det här exemplet kanske
    inte finns på några andra Unix-liknande system. Debian Installer
    skapar den här posten för ett system utan en permanent IP-adress
    som en lösning för vissa program (t.ex. GNOME), vilket
    dokumenteras i felet #719621.

    Host_name motsvarar det hostname som definieras i "/etc/hostname"
    (se Avsnitt 3.8.1, ”Värdnamnet”).

    För ett system med en permanent IP-adress ska den permanenta
    IP-adressen användas här i stället för 127.0.1.1.

    För ett system med en permanent IP-adress och ett fullständigt
    kvalificerat domännamn (FQDN) som tillhandahålls av Domain Name
    System (DNS), bör det kanoniska host_name.domain_name användas i
    stället för bara host_name.

    "/etc/resolv.conf" är en statisk fil om paketet resolvconf inte
    är installerat. Om det är installerat är det en symbolisk länk. I
    vilket fall som helst innehåller den information som initierar
    resolverrutinerna. Om DNS hittas på IP= "192.168.11.1" innehåller
    den följande.

    nameserver 192.168.11.1

    Paketet resolvconf gör denna "/etc/resolv.conf" till en symbolisk
    länk och hanterar dess innehåll automatiskt med hjälp av
    hook-skript.

    För en PC-arbetsstation i en typisk adhoc LAN-miljö kan
    värdnamnet lösas via Multicast DNS (mDNS) utöver de grundläggande
    fil- och dns-metoderna.

      * Avahi tillhandahåller ett ramverk för Multicast DNS Service
        Discovery på Debian.

      * Det motsvarar Apple Bonjour / Apple Rendezvous.

      * Instickspaketet libnss-mdns tillhandahåller
        värdnamnsupplösning via mDNS för GNU Name Service Switch
        (NSS)-funktionaliteten i GNU C Library (glibc).
   
      * Filen "/etc/nsswitch.conf" bör ha en strof som "hosts: files
        mdns4_minimal [NOTFOUND=return] dns" (se /usr/share/doc/
        libnss-mdns/README.Debian för andra konfigurationer).

      * Ett värdnamn som har pseudotoppdomänen ".local" som suffix
        löses genom att skicka ett mDNS-frågemeddelande i ett
        multicast UDP-paket med IPv4-adressen "224.0.0.251" eller
        IPv6-adressen "FF02::FB".

    Notera

    Utbyggnaden av generiska toppdomäner (gTLD) i domännamnssystemet
    pågår. Se upp för namnkollisioner när du väljer ett domännamn som
    bara används inom LAN.

    Notera

    Användning av paket som libnss-resolve tillsammans med
    systemd-resolved, eller libnss-myhostname, eller
    libnss-mymachine, med coressponding-listor på raden "hosts" i
    filen "/etc/nsswitch.conf" kan åsidosätta den traditionella
    nätverkskonfigurationen som diskuteras ovan. Se nss-resolve(8),
    systemd-resolved(8), nss-myhostname(8) och nss-mymachines(8) för
    mer information.

5.1.2. Namnet på nätverksgränssnittet

    Systemd använder"Predictable Network Interface Names", t.ex.
    "enp0s25".

5.1.3. Nätverksadressområde för LAN

    Låt oss påminna om de 32-bitars IPv4-adressområden i varje klass
    som enligt rfc1918 är reserverade för användning i lokala nätverk
    (LAN). Dessa adresser kommer garanterat inte i konflikt med några
    adresser på själva Internet.

    Notera
   
    IP-adresser som skrivs med kolon är IPv6-adresser, t.ex. "::1"
    för localhost.

    Tabell 5.2. Lista över adressintervall för nätverk

    +---------------------------------------------------------------+
    |Klass|  nätverksadresser   |   nätmask   | nätmask / |  antal  |
    |     |                     |             |   bitar   | subnät  |
    |-----+---------------------+-------------+-----------+---------|
    |A    |10.x.x.x             |255.0.0.0    |/8         |1        |
    |-----+---------------------+-------------+-----------+---------|
    |B    |172.16.x.x -         |255.255.0.0  |/16        |16       |
    |     |172.31.x.x           |             |           |         |
    |-----+---------------------+-------------+-----------+---------|
    |C    |192.168.0.x -        |255.255.255.0|/24        |256      |
    |     |192.168.255.x        |             |           |         |
    +---------------------------------------------------------------+


    Notera

    Om en värd tilldelas en av dessa adresser får värden inte komma
    åt Internet direkt utan måste komma åt Internet via en gateway
    som fungerar som proxy för enskilda tjänster eller som utför NAT
    (Network Address Translation). Bredbandsroutern utför vanligtvis
    NAT för LAN-miljön för konsumenter.

5.1.4. Stöd för nätverksenhet

    Även om de flesta maskinvaruenheter stöds av Debian-systemet,
    finns det vissa nätverksenheter som kräver DFSG:s non-free
    firmware för att stödjas. Vänligen se Avsnitt 9.10.5,
    ”Drivrutiner för hårdvara och firmware”.

5.2. Den moderna nätverkskonfigurationen för stationära datorer

    Nätverksgränssnitt initialiseras vanligtvis i
    "networking.service" för lo-gränssnittet och
    "NetworkManager.service" för andra gränssnitt på moderna
    Debian-skrivbordssystem under systemd.

    Debian kan hantera nätverksanslutningen via en daemonprogramvara
    för hantering, t.ex. NetworkManager (NM) (network-manager och
    tillhörande paket).

      * De har egna GUI- och kommandoradsprogram som
        användargränssnitt.

      * De levereras med sin egen daemon som backend-system.

      * De gör det enkelt att ansluta ditt system till Internet.

      * De gör det enkelt att hantera konfigurationen av trådbundna
        och trådlösa nätverk.

      * De gör det möjligt för oss att konfigurera nätverket
        oberoende av det äldre paketet ifupdown.

    Notera

    Använd inte dessa verktyg för automatisk nätverkskonfiguration
    för servrar. De är i första hand avsedda för mobila användare på
    bärbara datorer.

    Dessa moderna nätverkskonfigurationsverktyg måste konfigureras på
    rätt sätt för att undvika konflikter med det äldre
    ifupdown-paketet och dess konfigurationsfil "/etc/network/
    interfaces".

5.2.1. GUI-verktyg för nätverkskonfiguration

    Officiella dokumentationer för NM på Debian finns i "/usr/share/
    doc/network-manager/README.Debian".

    I huvudsak görs nätverkskonfigurationen för desktop på följande
    sätt.

     1. Gör så att skrivbordsanvändaren, t.ex. foo, tillhör gruppen
        "netdev" genom följande (alternativt görs det automatiskt via
        D-bus i moderna skrivbordsmiljöer som GNOME och KDE).

        $ sudo usermod -a -G netdev foo

     2. Håll konfigurationen av "/etc/network/interfaces" så enkel
        som i följande exempel.
   
        auto lo
        iface lo inet loopback

     3. Starta om NM genom att göra följande.

        $ sudo systemctl restart NetworkManager

     4. Konfigurera ditt nätverk via GUI.

    Notera
   
    Endast gränssnitt som inte finns listade i "/etc/network/
    interfaces" hanteras av NM för att undvika konflikt med ifupdown.

    Tips

    Om du vill utöka NM:s nätverkskonfigurationsfunktioner, sök efter
    lämpliga plugin-moduler och tilläggspaket såsom
    network-manager-openconnect, network-manager-openvpn-gnome,
    network-manager-pptp-gnome, mobile-broadband-provider-info,
    gnome-bluetooth osv.

5.3. Den moderna nätverkskonfigurationen utan GUI

    Under systemd kan nätverket konfigureras i /etc/systemd/network/
    istället. Se systemd-resolved(8), resolved.conf(5) och
    systemd-networkd(8).

    Detta möjliggör modern nätverkskonfiguration utan GUI.

    En DHCP-klientkonfiguration kan sättas upp genom att skapa "/etc/
    systemd/network/dhcp.network". T.ex:

    [Match]
    Name=en*
   
    [Network]
    DHCP=yes

    En statisk nätverkskonfiguration kan ställas in genom att skapa "
    /etc/systemd/network/static.network". T.ex:

    [Match]
    Name=en*
   
    [Network]
    Address=192.168.0.15/24
    Gateway=192.168.0.1

5.4. Den moderna nätverkskonfigurationen för moln

    Den moderna nätverkskonfigurationen för molnet kan använda
    paketen cloud-init och netplan.io (se Avsnitt 3.8.4,
    ”Initialisering av molnsystem”).

    Paketet netplan.io stöder systemd-networkd och NetworkManager som
    backends för nätverkskonfiguration och möjliggör deklarativ
    nätverkskonfiguration med hjälp av YAML-data. När du ändrar YAML:

      * Kör kommandot "netplan generate" för att generera all
        nödvändig backendkonfiguration från YAML.
   
      * Kör kommandot "netplan apply" för att tillämpa den genererade
        konfigurationen på backend.

    Se "Netplan-dokumentation", netplan(5), netplan-generate(8) och
    netplan-apply(8).

    Se även "Cloud-init-dokumentation " (särskilt
    "Konfigurationskällor " och "Netplan Passthrough") för hur
    cloud-init kan integrera netplan.io-konfigurationen med
    alternativa datakällor.

5.4.1. Den moderna nätverkskonfigurationen för moln med DHCP

    En DHCP-klientkonfiguration kan ställas in genom att skapa en
    datakällfil "/etc/netplan/50-dhcp.yaml":

    network:
      version: 2
      ethernets:
        all-en:
          match:
            name: "en*"
          dhcp4: true
          dhcp6: true

5.4.2. Den moderna nätverkskonfigurationen för moln med statisk IP

    En statisk nätverkskonfiguration kan ställas in genom att skapa
    en datakällfil "/etc/netplan/50-static.yaml":

    network:
      version: 2
      ethernets:
        eth0:
          addresses:
            - 192.168.0.15/24
          routes:
            - to: default
              via: 192.168.0.1

5.4.3. Den moderna nätverkskonfigurationen för molnet med Network
Manager

    Konfigurationen av nätverksklienten med hjälp av Network
    Manager-infrastrukturen kan ställas in genom att skapa en
    datakällfil "/etc/netplan/00-network-manager.yaml":

    network:
      version: 2
      renderer: NetworkManager

5.5. Nätverkskonfiguration på låg nivå

    För nätverkskonfiguration på låg nivå under Linux använder du
    iproute2-programmen(ip(8), ...) .

5.5.1. Iproute2 kommandon

    Iproute2-kommandona erbjuder kompletta möjligheter till
    nätverkskonfiguration på låg nivå. Här är en översättningstabell
    från föråldrade net-tools-kommandon till de nya kommandona
    iproute2 etc.

    Tabell 5.3. Översättningstabell från föråldrade
    net-tools-kommandon till nya iproute2-kommandon

    +---------------------------------------------------------------+
    |  föråldrade   |ny iproute2|           manipulation            |
    |  nätverktyg   |   etc.    |                                   |
    |---------------+-----------+-----------------------------------|
    |ifconfig(8)    |ip addr    |protokolladress (IP eller IPv6) på |
    |               |           |en enhet                           |
    |---------------+-----------+-----------------------------------|
    |rutt(8)        |ip route   |post i routningstabell             |
    |---------------+-----------+-----------------------------------|
    |arp(8)         |ip neigh   |ARP- eller NDISC-cachepost         |
    |---------------+-----------+-----------------------------------|
    |ipmaddr        |ip maddr   |multicast-adress                   |
    |---------------+-----------+-----------------------------------|
    |iptunnel       |ip tunnel  |tunnel över IP                     |
    |---------------+-----------+-----------------------------------|
    |nameif(8)      |ifrename(8)|namnge nätverksgränssnitt baserat  |
    |               |           |på MAC-adresser                    |
    |---------------+-----------+-----------------------------------|
    |mii-verktyg(8) |ethtool(8) |Inställningar för Ethernet-enheter |
    +---------------------------------------------------------------+


    Se ip(8) och Linux Advanced Routing & Traffic Control.

5.5.2. Säker nätverksdrift på låg nivå

    Du kan använda nätverkskommandon på låg nivå som följer på ett
    säkert sätt eftersom de inte ändrar nätverkskonfigurationen.

    Tabell 5.4. Lista över nätverkskommandon på låg nivå

    +---------------------------------------------------------------+
    |      kommando      |               beskrivning                |
    |--------------------+------------------------------------------|
    |ip addr show        |visa länk- och adressstatus för aktiva    |
    |                    |gränssnitt                                |
    |--------------------+------------------------------------------|
    |route -n            |visa alla routningstabeller i numeriska   |
    |                    |adresser                                  |
    |--------------------+------------------------------------------|
    |ip route show       |visa alla routningstabeller i numeriska   |
    |                    |adresser                                  |
    |--------------------+------------------------------------------|
    |arp                 |visa det aktuella innehållet i            |
    |                    |ARP-cachetabellerna                       |
    |--------------------+------------------------------------------|
    |ip neigh            |visa det aktuella innehållet i            |
    |                    |ARP-cachetabellerna                       |
    |--------------------+------------------------------------------|
    |plog                |visa logg för ppp-daemon                  |
    |--------------------+------------------------------------------|
    |ping yahoo.com      |kontrollera Internetanslutningen till     |
    |                    |"yahoo.com"                               |
    |--------------------+------------------------------------------|
    |whois yahoo.com     |kontrollera vem som registrerade          |
    |                    |"yahoo.com" i domändatabasen              |
    |--------------------+------------------------------------------|
    |traceroute yahoo.com|spåra Internetanslutningen till           |
    |                    |"yahoo.com"                               |
    |--------------------+------------------------------------------|
    |tracepath yahoo.com |spåra Internetanslutningen till           |
    |                    |"yahoo.com"                               |
    |--------------------+------------------------------------------|
    |mtr yahoo.com       |spåra Internetanslutningen till           |
    |                    |"yahoo.com" (upprepade gånger)            |
    |--------------------+------------------------------------------|
    |dig [@dns-server.se]|kontrollera DNS-posterna för "exempel.se" |
    |exempel.se [{a|mx|  |med "dns-server.com" för en "a"-, "mx"-   |
    |any}]               |eller "any"-post                          |
    |--------------------+------------------------------------------|
    |iptables -L -n      |kontrollera paketfilter                   |
    |--------------------+------------------------------------------|
    |ss -a               |hitta alla öppna portar                   |
    |--------------------+------------------------------------------|
    |ss -l               |hitta lyssningsportar                     |
    |--------------------+------------------------------------------|
    |ss -l -t -n         |hitta lyssnande TCP-portar (numerisk)     |
    |--------------------+------------------------------------------|
    |dlint exempel.com   |kontrollera DNS-zoninformation för        |
    |                    |"exempel.se"                              |
    +---------------------------------------------------------------+


    Tips

    En del av dessa nätverkskonfigurationsverktyg på låg nivå finns i
    "/usr/sbin/". Du kan behöva ange en fullständig kommandosökväg
    som "/usr/sbin/ifconfig" eller lägga till "/usr/sbin" i listan
    "$PATH" i din "~/.bashrc".

5.6. Optimering av nätverk

    Generisk nätverksoptimering ligger utanför ramen för denna
    dokumentation. Jag tar endast upp ämnen som är relevanta för
    konsumentanslutningen.

    Tabell 5.5. Lista över verktyg för nätverksoptimering

    +---------------------------------------------------------------+
    |  paket  | popcon |storlek|            beskrivning             |
    |---------+--------+-------+------------------------------------|
    |         |V:6,    |       |visa information om                 |
    |iftop    |I:88    |93     |bandbreddsanvändning på ett         |
    |         |        |       |nätverksgränssnitt                  |
    |---------+--------+-------+------------------------------------|
    |iperf    |V:2,    |431    |Verktyg för mätning av bandbredd för|
    |         |I:34    |       |Internetprotokoll                   |
    |---------+--------+-------+------------------------------------|
    |ifstat   |V:0.6,  |52     |InterFace STATistics övervakning    |
    |         |I:5.5   |       |                                    |
    |---------+--------+-------+------------------------------------|
    |bmon     |V:2,    |141    |bärbar bandbreddsövervakare och     |
    |         |I:20    |       |hastighetsestimator                 |
    |---------+--------+-------+------------------------------------|
    |ethstatus|V:0.2,  |41     |skript som snabbt mäter             |
    |         |I:2.6   |       |nätverksenhetens genomströmning     |
    |---------+--------+-------+------------------------------------|
    |bing     |V:0.07, |80     |empirisk stokastisk                 |
    |         |I:0.50  |       |bandbreddstestare                   |
    |---------+--------+-------+------------------------------------|
    |bwm-ng   |V:1.0,  |95     |liten och enkel konsolbaserad       |
    |         |I:9.6   |       |bandbreddsmonitor                   |
    |---------+--------+-------+------------------------------------|
    |ethstats |V:0.05, |21     |konsolbaserad                       |
    |         |I:0.39  |       |Ethernet-statistikmonitor           |
    |---------+--------+-------+------------------------------------|
    |ipfm     |V:0.04, |78     |verktyg för analys av bandbredd     |
    |         |I:0.11  |       |                                    |
    +---------------------------------------------------------------+


5.6.1. Hitta optimal MTU

    NM ställer normalt in optimal Maximum Transmission Unit (MTU)
    automatiskt.

    I vissa fall kanske du vill ställa in MTU manuellt efter att ha
    experimenterat med ping(8) med alternativet "-M do" för att
    skicka ett ICMP-paket med olika datapaketstorlekar. MTU är den
    maximala efterföljande datapaketstorleken utan IP-fragmentering
    plus 28 byte för IPv4 och plus 48 byte för IPv6. I följande
    exempel är MTU för en IPv4-anslutning 1460 och MTU för en
    IPv6-anslutning 1500.

    $ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
    PING  (149.20.4.15) 1472(1500) bytes of data.
    ping: local error: message too long, mtu=1460

    ---  ping statistics ---
    1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

    $ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
    PING  (130.89.148.77) 1432(1460) bytes of data.
    1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms
   
    ---  ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
    $ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
    PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
    1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

    --- www.debian.org ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

    Denna process är Path MTU (PMTU) discovery(RFC1191) och kommandot
    tracepath(8) kan automatisera detta.

    Tabell 5.6. Grundläggande riktlinjer för det optimala MTU-värdet

    +------------------------------------------------------------+
    |           nätverksmiljö           |MTU |    motivering     |
    |-----------------------------------+----+-------------------|
    |Uppringd länk (IP: PPP)            |576 |standard           |
    |-----------------------------------+----+-------------------|
    |Ethernet-länk (IP: DHCP eller fast)|1500|standard och förval|
    +------------------------------------------------------------+


    Utöver dessa grundläggande riktlinjer bör du känna till följande.

      * All användning av tunneleringmetoder (VPN etc.) kan minska
        optimal MTU ytterligare på grund av deras overhead.

      * MTU-värdet bör inte överstiga det experimentellt fastställda
        PMTU-värdet.

      * Ett större MTU-värde är i allmänhet bättre när andra
        begränsningar uppfylls.

    Den maximala segmentstorleken (MSS) används som ett alternativt
    mått på paketstorleken. Förhållandet mellan MSS och MTU är
    följande.

      * MSS = MTU - 40 för IPv4
   
      * MSS = MTU - 60 för IPv6

    Notera

    Den iptables(8)-baserade optimeringen (se Avsnitt 5.7,
    ”Netfilters infrastruktur”) kan klämma paketstorleken med MSS och
    är användbar för routern. Se "TCPMSS" i iptables(8).

5.6.2. WAN TCP-optimering

    TCP-genomströmningen kan maximeras genom att justera
    TCP-buffertstorleksparametrarna som i"TCP tuning" för moderna WAN
    med hög bandbredd och hög latens. Hittills har de nuvarande
    standardinställningarna för Debian fungerat bra även för mitt LAN
    som är anslutet med den snabba 1G bps FTTP-tjänsten.

5.7. Netfilters infrastruktur

    Netfilter tillhandahåller infrastruktur för stateful brandvägg
    och NAT (Network Address Translation) med Linux kernel-moduler
    (se Avsnitt 3.10, ”Initialisering av kärnmodulen”).

    Tabell 5.7. Lista över brandväggsverktyg

    +---------------------------------------------------------------+
    |     paket     |popcon |storlek|          beskrivning          |
    |---------------+-------+-------+-------------------------------|
    |               |       |       |administrationsverktyg för     |
    |nftables       |V:254, |189    |paketfiltrering och NAT        |
    |               |I:872  |       |(Netfilter)(efterföljare till  |
    |               |       |       |{ip,ip6,arp,eb}tables)         |
    |---------------+-------+-------+-------------------------------|
    |               |V:382, |       |administrationsverktyg för     |
    |iptables       |I:642  |2408   |netfilter(iptables(8) för IPv4,|
    |               |       |       |ip6tables(8) för IPv6)         |
    |---------------+-------+-------+-------------------------------|
    |arptables      |V:0.1, |102    |administrationsverktyg för     |
    |               |I:1.8  |       |netfilter(arptables(8) för ARP)|
    |---------------+-------+-------+-------------------------------|
    |               |V:14,  |       |administrationsverktyg för     |
    |ebtables       |I:24   |276    |netfilter(ebtables(8) för      |
    |               |       |       |Ethernet-bryggning)            |
    |---------------+-------+-------+-------------------------------|
    |               |V:0.2, |       |kontinuerligt övervaka         |
    |iptstate       |I:1.7  |121    |nätfiltrets tillstånd (liknande|
    |               |       |       |top(1))                        |
    |---------------+-------+-------+-------------------------------|
    |               |V:82,  |       |Uncomplicated Firewall (UFW) är|
    |ufw            |I:109  |862    |ett program för hantering av en|
    |               |       |       |nätfilterbrandvägg             |
    |---------------+-------+-------+-------------------------------|
    |gufw           |V:6,   |3682   |grafiskt användargränssnitt för|
    |               |I:11   |       |Uncomplicated Firewall (UFW)   |
    |---------------+-------+-------+-------------------------------|
    |               |V:14,  |       |firewalld är ett dynamiskt     |
    |firewalld      |I:22   |2581   |hanterat brandväggsprogram med |
    |               |       |       |stöd för nätverkszoner         |
    |---------------+-------+-------+-------------------------------|
    |firewall-config|V:0.7, |1096   |grafiskt användargränssnitt för|
    |               |I:3.3  |       |firewalld                      |
    |---------------+-------+-------+-------------------------------|
    |shorewall-init |V:0.18,|88     |Initialisering av Shoreline    |
    |               |I:0.40 |       |Firewall                       |
    |---------------+-------+-------+-------------------------------|
    |               |V:2.2, |       |Shoreline Firewall, generator  |
    |shorewall      |I:5.0  |3090   |för konfigurationsfil för      |
    |               |       |       |netfilter                      |
    |---------------+-------+-------+-------------------------------|
    |               |V:0.02,|       |Shoreline Firewall, Netfilter  |
    |shorewall-lite |I:0.06 |71     |konfigurationsfilgenerator     |
    |               |       |       |(light-version)                |
    |---------------+-------+-------+-------------------------------|
    |               |V:0.7, |       |Shoreline Firewall, generator  |
    |shorewall6     |I:1.3  |1334   |för konfigurationsfilen        |
    |               |       |       |netfilter (IPv6-version)       |
    |---------------+-------+-------+-------------------------------|
    |               |V:0.01,|       |Shoreline Firewall, netfilter  |
    |shorewall6-lite|I:0.02 |71     |konfigurationsfilgenerator     |
    |               |       |       |(IPv6, light-version)          |
    +---------------------------------------------------------------+


    See The netfilter.org "nftables" project for the newer user space
    nft(8) command in the nftables package. (Linux kernel >= 3.13)

    See The netfilter.org "iptables" project for the older user space
    iptables(8) and similar commands in the iptables and similar
    packages. (Linux kernel >= 2.4.x)

    You can manually configure netfilter interactively from shell,
    save its state with "nft list ruleset > file" or iptables-save
    (8), and restore it via init script with "nft -f file" or
    iptables-restore(8) upon system reboot.

    Konfigurationshjälpskript som shorewall underlättar denna
    process.

    Se dokumentationen på Netfilter Documentation (eller i "/usr/
    share/doc/iptables/html/").

      * HOWTO om Linux-nätverkskoncept

      * HOWTO om paketfiltrering i Linux 2.4
   
      * Linux 2.4 NAT HOWTO

      * nftables HOWTO

Kapitel 6. Nätverkstillämpningar

    När du har upprättat en nätverksanslutning (se Kapitel 5, 
    Nätverkskonfiguration) kan du köra olika nätverksprogram.

    Tips
   
    För en modern Debian-specifik guide till nätverksinfrastrukturen,
    läs The Debian Administrator's Handbook - Network Infrastructure.

    Tips

    Om du har aktiverat "2-stegsverifiering" hos någon
    Internetleverantör måste du skaffa ett programlösenord för att få
    tillgång till POP- och SMTP-tjänster från ditt program. Du kan
    behöva godkänna din värd-IP i förväg.

6.1. Webbläsare

    Det finns många webbläsarpaket för att komma åt fjärrinnehåll med
    Hypertext Transfer Protocol (HTTP).

    Tabell 6.1. Lista över webbläsare

    +---------------------------------------------------------------+
    |     paket      |popcon|storlek| typ  |     beskrivning av     |
    |                |      |       |      |       webbläsare       |
    |----------------+------+-------+------+------------------------|
    |                |V:30, |       |      |Chromium, (webbläsare   |
    |chromium        |I:99  |316808 |X     |med öppen källkod från  |
    |                |      |       |      |Google)                 |
    |----------------+------+-------+------+------------------------|
    |                |      |       |      |Firefox, (webbläsare med|
    |                |V:16, |       |      |öppen källkod från      |
    |firefox         |I:22  |299491 |, ,   |Mozilla, endast         |
    |                |      |       |      |tillgänglig i Debian    |
    |                |      |       |      |Unstable)               |
    |----------------+------+-------+------+------------------------|
    |                |V:195,|       |      |Firefox ESR, (Firefox   |
    |firefox-esr     |I:421 |266258 |, ,   |Extended Support        |
    |                |      |       |      |Release)                |
    |----------------+------+-------+------+------------------------|
    |epiphany-browser|V:2,  |6666   |, ,   |GNOME, HIG-kompatibel,  |
    |                |I:11  |       |      |Epiphany                |
    |----------------+------+-------+------+------------------------|
    |konqueror       |V:25, |7982   |, ,   |KDE, Konqueror          |
    |                |I:112 |       |      |                        |
    |----------------+------+-------+------+------------------------|
    |                |V:0.5,|       |      |Dillo, (lättviktig      |
    |dillo           |I:4.3 |2203   |, ,   |webbläsare, FLTK-baserad|
    |                |      |       |      |)                       |
    |----------------+------+-------+------+------------------------|
    |w3m             |V:10, |2853   |text  |w3m                     |
    |                |I:134 |       |      |                        |
    |----------------+------+-------+------+------------------------|
    |lynx            |V:29, |2031   |, ,   |Lynx                    |
    |                |I:448 |       |      |                        |
    |----------------+------+-------+------+------------------------|
    |elinks          |V:3,  |1791   |, ,   |ELinks                  |
    |                |I:16  |       |      |                        |
    |----------------+------+-------+------+------------------------|
    |links           |V:2,  |2321   |, ,   |Länkar (endast text)    |
    |                |I:21  |       |      |                        |
    |----------------+------+-------+------+------------------------|
    |links2          |V:0.8,|5466   |grafik|Länkar (konsolgrafik    |
    |                |I:8.6 |       |      |utan X)                 |
    +---------------------------------------------------------------+


6.1.1. Förfalskning av User-Agent-strängen

    För att få tillgång till vissa alltför restriktiva webbplatser
    kan du behöva förfalska User-Agent-strängen som returneras av
    webbläsarprogrammet. Se här:

      * MDN Webbdokument: userAgent
      * Chrome-utvecklare: Åsidosätt strängen för användaragent
      * Så här ändrar du din användaragent
      * Så här ändrar du User-Agent i Chrome, Firefox, Safari m.fl
      * Så här ändrar du webbläsarens användaragent utan att
        installera några tillägg
      * Så här ändrar du användaragenten i Gnome Web (epiphany)

6.1.2. Tillägg till webbläsare

    Alla moderna GUI-webbläsare stöder källkodsbaserade
    webbläsartillägg och de håller på att standardiseras som
    webbtillägg.

6.2. E-postsystemet

    Detta avsnitt fokuserar på typiska mobila arbetsstationer med
    Internetanslutningar av konsumentkvalitet.

    Observera
   
    Om du ska konfigurera e-postservern så att den kan utbyta e-post
    direkt med Internet, bör du läsa detta elementära dokument.

6.2.1. Grunderna i e-post

    Ett e-postmeddelande består av tre komponenter: kuvertet,
    meddelandehuvudet och meddelandetexten.

      * Informationen "To" och "From" i meddelandekuvertet används av
        SMTP för att leverera e-postmeddelandet. (Informationen
        "From" i meddelandekuvertet kallas även avvisningsadress,
        From_, etc.).

      * Informationen "Till" och "Från" i meddelanderubriken visas av
        e-postklienten. (Det är vanligast att dessa är desamma som i
        meddelandekuvertet, men så är inte alltid fallet)

      * E-postmeddelandets format, som omfattar rubrik- och
        brödtextdata, utökas med MIME (Multipurpose Internet Mail
        Extensions) från vanlig ASCII-text till andra
        teckenkodningar, samt bilagor med ljud, video, bilder och
        applikationsprogram.

    GUI-baserade e-postklienter med full funktionalitet erbjuder alla
    följande funktioner med hjälp av GUI-baserad intuitiv
    konfiguration.

      * Den skapar och tolkar meddelandets rubrik- och brödtextdata
        med hjälp av MIME (Multipurpose Internet Mail Extensions) för
        att hantera innehållets datatyp och kodning.

      * Den autentiserar sig mot ISP:s SMTP- och IMAP-servrar med
        hjälp av äldre grundläggande åtkomstautentisering eller
        modern OAuth 2.0. (För OAuth 2.0 ställer du in det via
        inställningarna för skrivbordsmiljön. T.ex. "Inställningar"
        -> "Onlinekonton")
   
      * Den skickar meddelandet till ISP:s smarthost SMTP-server som
        lyssnar på porten för meddelandeinlämning (587).

      * Den tar emot det lagrade meddelandet på ISP:s server från TLS
        /IMAP4-porten (993).

      * Det kan filtrera e-postmeddelanden efter deras attribut.

      * Det kan erbjuda ytterligare funktioner: Kontakter, Kalender,
        Uppgifter, Memon.

    Tabell 6.2. Lista över användaragenter för e-post (MUA)

    +---------------------------------------------------------------+
    |   paket   | popcon  |storlek|               typ               |
    |-----------+---------+-------+---------------------------------|
    |evolution  |V:25,    |489    |X GUI program (GNOME, groupware  |
    |           |I:225    |       |suite)                           |
    |-----------+---------+-------+---------------------------------|
    |thunderbird|V:41,    |274581 |X GUI-program (GTK, Mozilla      |
    |           |I:103    |       |Thunderbird)                     |
    |-----------+---------+-------+---------------------------------|
    |kmail      |V:43,    |25265  |X GUI-program (KDE)              |
    |           |I:103    |       |                                 |
    |-----------+---------+-------+---------------------------------|
    |mutt       |V:11,    |7334   |terminalprogram med tecken som   |
    |           |I:86     |       |troligen används med vim         |
    |-----------+---------+-------+---------------------------------|
    |mew        |V:0.01,  |2319   |teckenterminalprogram under (x)  |
    |           |I:0.16   |       |emacs                            |
    +---------------------------------------------------------------+


6.2.2. Begränsning av modern postservice

    Moderna e-posttjänster är underkastade vissa begränsningar för
    att minimera exponeringen för spam (oönskad och oönskad e-post).

      * Det är inte realistiskt att köra en SMTP-server i ett
        konsumentnätverk för att skicka e-post direkt till en
        fjärrvärd på ett tillförlitligt sätt.

      * Ett mail kan avvisas av alla värdar på väg till destinationen
        om det inte verkar så autentiskt som möjligt.

      * Det är inte realistiskt att förvänta sig att ett enda
        smarthost på ett tillförlitligt sätt ska skicka
        e-postmeddelanden med orelaterade källadresser till
        fjärrvärden.

    Detta beror på att:

      * SMTP-port (25)-anslutningar från värdar som betjänas av
        konsumentnätverket till Internet blockeras.

      * SMTP-port (25)-anslutningar till värdar som betjänas av
        konsumentnätverket från Internet blockeras.

      * Utgående meddelanden från värddatorer som betjänas av
        konsumentnätverket till Internet kan endast skickas via
        porten för meddelandeinlämning (587).

      * Antispamtekniker som DKIM (DomainKeys Identified Mail), SPF
        (Sender_Policy_Framework) och DMARC (Domain-based Message
        Authentication, Reporting and Conformance ) används ofta för
        filtrering av e-post.

      * Tjänsten DomainKeys Identified Mail kan tillhandahållas för
        din e-post som skickas via smarthost.

      * Smarthost kan skriva om källadressen i meddelanderubriken
        till ditt e-postkonto på smarthost för att förhindra att
        e-postadresser förfalskas.

6.2.3. Historisk förväntan på postservice

    Vissa program på Debian förväntar sig att få tillgång till
    kommandot /usr/sbin/sendmail för att skicka e-postmeddelanden som
    standard eller anpassad inställning eftersom e-posttjänsten på
    ett UNIX-system historiskt fungerade på samma sätt:

      * Ett e-postmeddelande skapas som en textfil.

      * E-postmeddelandet överlämnas till kommandot /usr/sbin/
        sendmail.

      * För destinationsadressen på samma värd gör kommandot /usr/
        sbin/sendmail en lokal leverans av e-postmeddelandet genom
        att lägga till det i filen /var/mail/$username.

          + Kommandon som förväntar sig denna funktion:
            apt-listchanges, cron, at, ...

      * För destinationsadressen på fjärrvärden gör kommandot /usr/
        sbin/sendmail en fjärröverföring av e-postmeddelandet till
        den destinationsvärd som hittas genom DNS MX-posten med hjälp
        av SMTP.

          + Kommandon som förväntar sig denna funktion: popcon,
            reportbug, bts, ...

6.2.4. Transportagent för post (MTA)

    Debians mobila arbetsstationer kan konfigureras med GUI-baserade
    e-postklienter med fullständiga funktioner utan MTA-program (Mail
    Transfer Agent) efter Debian 12 Bookworm.

    Debian installerade traditionellt något MTA-program för att
    stödja program som förväntar sig kommandot /usr/sbin/sendmail.
    Sådana MTA på mobila arbetsstationer måste klara av
    Avsnitt 6.2.2, ”Begränsning av modern postservice” och
    Avsnitt 6.2.3, ”Historisk förväntan på postservice”.

    För mobila arbetsstationer är det typiska valet av MTA antingen
    exim4-daemon-light eller postfix med installationsalternativet
    "Mail sent by smarthost; received via SMTP or fetchmail" valt.
    Dessa är lätta MTA:er som respekterar "/etc/aliases".

    Tips

    Att konfigurera exim4 för att skicka e-post via Internet via
    flera motsvarande smarthosts för flera e-postadresser är inte
    trivialt. Om du behöver en sådan funktion för vissa program kan
    du ställa in dem så att de använder msmtp, som är enkelt att
    ställa in för flera e-postadresser. Lämna sedan huvud-MTA endast
    för en enda e-postadress.

    Tabell 6.3. Lista över relaterade paket för transportagent för
    grundläggande post

    +------------------------------------------------------------------+
    |      paket       |popcon|storlek|          beskrivning           |
    |------------------+------+-------+--------------------------------|
    |exim4-daemon-light|V:207,|1768   |Exim4 transportagent för e-post |
    |                  |I:215 |       |(MTA: Debians standard)         |
    |------------------+------+-------+--------------------------------|
    |exim4-daemon-heavy|V:5.1,|1950   |Exim4 mail transport agent (MTA:|
    |                  |I:5.2 |       |flexibelt alternativ)           |
    |------------------+------+-------+--------------------------------|
    |exim4-base        |V:213,|1677   |Exim4-dokumentation (text) och  |
    |                  |I:221 |       |gemensamma filer                |
    |------------------+------+-------+--------------------------------|
    |exim4-doc-html    |I:1.1 |3798   |Exim4-dokumentation (html)      |
    |------------------+------+-------+--------------------------------|
    |exim4-doc-info    |I:0.57|648    |Exim4-dokumentation (info)      |
    |------------------+------+-------+--------------------------------|
    |postfix           |V:103,|4268   |Postfix mail transport agent    |
    |                  |I:110 |       |(MTA: säkert alternativ)        |
    |------------------+------+-------+--------------------------------|
    |postfix-doc       |I:4.6 |5026   |Dokumentation om Postfix        |
    |                  |      |       |(html+text)                     |
    |------------------+------+-------+--------------------------------|
    |                  |V:5,  |       |Cyrus SASL API-implementering   |
    |sasl2-bin         |I:10  |381    |(kompletterar postfix för SMTP  |
    |                  |      |       |AUTH)                           |
    |------------------+------+-------+--------------------------------|
    |cyrus-sasl2-doc   |I:0.71|2140   |Cyrus SASL - dokumentation      |
    |------------------+------+-------+--------------------------------|
    |msmtp             |V:8,  |822    |Lättvikts MTA                   |
    |                  |I:15  |       |                                |
    |------------------+------+-------+--------------------------------|
    |                  |V:6.8,|       |Lättviktig MTA                  |
    |msmtp-mta         |I:8.9 |139    |(sendmail-kompatibilitetstillägg|
    |                  |      |       |till msmtp)                     |
    |------------------+------+-------+--------------------------------|
    |nullmailer        |V:7.7,|483    |Avveckla MTA, ingen lokal post  |
    |                  |I:8.2 |       |                                |
    |------------------+------+-------+--------------------------------|
    |ssmtp             |V:4.0,|134    |Avveckla MTA, ingen lokal post  |
    |                  |I:6.2 |       |                                |
    |------------------+------+-------+--------------------------------|
    |sendmail-bin      |V:10, |1954   |Fullständig MTA (endast om du   |
    |                  |I:11  |       |redan är bekant)                |
    |------------------+------+-------+--------------------------------|
    |                  |V:0.4,|       |git-send-email(1) program för   |
    |git-email         |I:9.9 |1229   |att skicka en serie             |
    |                  |      |       |patch-e-postmeddelanden         |
    +------------------------------------------------------------------+


6.2.4.1. Konfigurationen av exim4

    För Internet-post via smarthost (om)konfigurerar du
    exim4-*-paketen enligt följande.

    $ sudo systemctl stop exim4
    $ sudo dpkg-reconfigure exim4-config

    Välj "mail skickas av smarthost; tas emot via SMTP eller
    fetchmail" för "Allmän typ av e-postkonfiguration".

    Ställ in "System mail name:" på standardvärdet för FQDN (se
    Avsnitt 5.1.1, ”Upplösning av värdnamn”).

    Ställ in "IP-adresser att lyssna på för inkommande
    SMTP-anslutningar:" till standardvärdet "127.0.0.1 ; ::1".

    Innehållet i "Andra destinationer för vilka post accepteras:" har
    inte angetts.

    Ej fastställt innehåll i "Maskiner att vidarebefordra e-post
    till:".

    Ställ in "IP-adress eller värdnamn för utgående smarthost:" till
    "smtp.hostname.dom:587".

    Välj "No" för "Hide local mail name in outgoing mail?". (Använd "
    /etc/email-addresses" som i Avsnitt 6.2.4.3, ”Konfiguration av
    e-postadresser”, istället)

    Svara på "Håll antalet DNS-förfrågningar minimalt
    (Dial-on-Demand)?" med något av följande.

      * "Nej" om systemet är anslutet till Internet under uppstart.
   
      * "Yes" om systemet inte är anslutet till Internet när det
        startas.

    Ställ in "Leveransmetod för lokal e-post:" till "mbox-format i /
    var/mail/".

    Välj "Yes" för "Split configuration into small files?:".

    Skapa lösenordsinmatningar för smarthost genom att redigera "/etc
    /exim4/passwd.client".

    $ sudo vim /etc/exim4/passwd.client
     ...
    $ cat /etc/exim4/passwd.client
    ^smtp.*\.hostname\.dom:username@hostname.dom:password

    Konfigurera exim4(8) med "QUEUERUNNER='queueonly'", "QUEUERUNNER=
    'nodaemon'", etc. i "/etc/default/exim4" för att minimera
    användningen av systemresurser. (valfritt)

    Starta exim4 på följande sätt.

    $ sudo systemctl start exim4

    Värdnamnet i "/etc/exim4/passwd.client" ska inte vara aliaset. Du
    kontrollerar det riktiga värdnamnet med följande.

    $ host smtp.hostname.dom
    smtp.hostname.dom is an alias for smtp99.hostname.dom.
    smtp99.hostname.dom has address 123.234.123.89

    Jag använder regex i "/etc/exim4/passwd.client" för att komma
    runt aliasproblemet. SMTP AUTH fungerar förmodligen även om ISP:n
    flyttar värden som pekas ut av aliaset.

    Du kan uppdatera exim4-konfigurationen manuellt på följande sätt:

      * Uppdatera exim4-konfigurationsfilerna i "/etc/exim4/".

          + skapa "/etc/exim4/exim4.conf.localmacros" för att ställa
            in MACROs och redigera "/etc/exim4/exim4.conf.template".
            (icke-splitad konfiguration)
   
          + skapa nya filer eller redigera befintliga filer i
            underkatalogerna "/etc/exim4/exim4.conf.d". (delad
            konfiguration)

      * Kör "systemctl reload exim4".

    Observera

    Det tar lång tid att starta exim4 om "No" (standardvärde) valdes
    för debconf-frågan "Keep number of DNSqueries minimal
    (Dial-on-Demand)?" och systemet inte är anslutet till Internet
    under uppstarten.

   

    Vänligen läs den officiella guiden på: "/usr/share/doc/exim4-base
    /README.Debian.gz" och update-exim4.conf(8).

    Varning

    Av praktiska skäl bör du använda SMTP med STARTTLS på port 587
    eller SMTPS (SMTP over SSL) på port 465 i stället för vanlig SMTP
    på port 25.

6.2.4.2. Konfiguration av postfix med SASL

    För internetpost via smarthost bör du först läsa
    postfix-dokumentationen och viktiga manualer.

    Tabell 6.4. Lista över viktiga sidor i postfix-manualen

    +----------------------------------------------------+
    |  kommando  |               funktion                |
    |------------+---------------------------------------|
    |postfix(1)  |Postfix kontrollprogram                |
    |------------+---------------------------------------|
    |postconf(1) |Verktyg för konfiguration av Postfix   |
    |------------+---------------------------------------|
    |postconf(5) |Parametrar för konfiguration av Postfix|
    |------------+---------------------------------------|
    |postmap(1)  |Underhåll av Postfix uppslagstabell    |
    |------------+---------------------------------------|
    |postalias(1)|Underhåll av Postfix aliasdatabas      |
    +----------------------------------------------------+


    Du (om)konfigurerar postfix- och sasl2-bin-paketen enligt
    följande.

    $ sudo systemctl stop postfix
    $ sudo dpkg-reconfigure postfix

    Välj "Internet med smarthost".

    Ställ in "SMTP relay host (blank for none):" till "
    [smtp.hostname.dom]:587" och konfigurera den enligt följande.

    $ sudo postconf -e 'smtp_sender_dependent_authentication = yes'
    $ sudo postconf -e 'smtp_sasl_auth_enable = yes'
    $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
    $ sudo postconf -e 'smtp_sasl_type = cyrus'
    $ sudo vim /etc/postfix/sasl_passwd

    Skapa lösenordsinmatningar för smarthost.

    $ cat /etc/postfix/sasl_passwd
    [smtp.hostname.dom]:587     username:password
    $ sudo postmap hush:/etc/postfix/sasl_passwd

    Starta postfixet genom att göra följande.

    $ sudo systemctl start postfix

    Här säkerställer användningen av "[" och "]" i dialogrutan
    dpkg-reconfigure och "/etc/postfix/sasl_passwd" att MX-poster
    inte kontrolleras utan att det exakta angivna värdnamnet används
    direkt. Se "Aktivering av SASL-autentisering i Postfix
    SMTP-klient" i "/usr/share/doc/postfix/html/SASL_README.html".

6.2.4.3. Konfiguration av e-postadresser

    Det finns några konfigurationsfiler för postadresser för
    posttransport, leverans och användaragenter.

    Tabell 6.5. Lista över konfigurationsfiler relaterade till
    e-postadresser

    +---------------------------------------------------------------+
    |      fil      |    funktion     |           ansökan           |
    |---------------+-----------------+-----------------------------|
    |               |standardvärdnamn |                             |
    |/etc/mailname  |för (utgående)   |Debian-specifik, mailname(5) |
    |               |e-post           |                             |
    |---------------+-----------------+-----------------------------|
    |/etc/          |spoofing av      |exim(8) specifik,            |
    |email-addresses|värdnamn för     |exim4-config_files(5)        |
    |               |utgående e-post  |                             |
    |---------------+-----------------+-----------------------------|
    |/etc/postfix/  |spoofing av      |postfix(1)-specifik,         |
    |generic        |värdnamn för     |aktiveras efter att kommandot|
    |               |utgående e-post  |postmap(1) har körts.        |
    |---------------+-----------------+-----------------------------|
    |               |kontonamn alias  |general, aktiverad efter     |
    |/etc/aliases   |för inkommande   |newaliases(1) orderutförande.|
    |               |e-post           |                             |
    +---------------------------------------------------------------+


    E-postnamnet i filen "/etc/mailname" är vanligtvis ett
    fullständigt kvalificerat domännamn (FQDN) som kan härledas till
    en av värdens IP-adresser. För den mobila arbetsstationen som
    inte har ett värdnamn med en IP-adress som går att koppla till,
    ställer du in det här e-postnamnet till värdet i "hostname-f".
    (Detta är ett säkert val och fungerar för både exim4-* och
    postfix)

    Tips

    Innehållet i "/etc/mailname" används av många icke-MTA-program
    för deras standardbeteende. För mutt, ställ in variablerna
    "hostname" och "from" i filen ~/muttrc för att åsidosätta 
    mailname-värdet. För program i devscripts-paketet, till exempel
    bts(1) och dch(1), exportera miljövariablerna "$DEBFULLNAME" och
    "$DEBEMAIL" för att åsidosätta det.

    Tips

    Paketet popularity-contest skickar normalt e-post från rotkontot
    med FQDN. Du måste ställa in MAILFROM i /etc/
    popularity-contest.conf enligt beskrivningen i filen /usr/share/
    popularity-contest/default.conf. Annars kommer din e-post att
    avvisas av SMTP-servern hos smarthost. Även om det här är tråkigt
    är det här tillvägagångssättet säkrare än att skriva om
    källadressen för alla e-postmeddelanden från root av MTA och bör
    användas för andra daemoner och cron-skript.

    När du ställer in e-postnamnet till "hostname -f" kan
    förfalskningen av källpostadressen via MTA realiseras på följande
    sätt.

      * filen "/etc/email-addresses" för exim4(8) enligt förklaring i
        exim4-config_files(5)
   
      * "/etc/postfix/generic" fil för postfix(1) enligt förklaring i
        generic(5)

    För postfix krävs följande extra steg.

    # postmap hash:/etc/postfix/generic
    # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic'
    # postfix reload

    Du kan testa konfigurationen av e-postadresser på följande sätt.

      * exim(8) med alternativen -brw, -bf, -bF, -bV, ..
   
      * postmap(1) med alternativet -q.

    Tips

    Exim levereras med flera verktygsprogram, t.ex. exiqgrep(8) och
    exipick(8). Se "dpkg -L exim4-base|grep man8/" för tillgängliga
    kommandon.

6.2.4.4. Grundläggande MTA-verksamhet

    Det finns flera grundläggande MTA-operationer. Vissa kan utföras
    via sendmail(1) kompatibilitetsgränssnitt.

    Tabell 6.6. Lista över grundläggande MTA-funktioner

    +---------------------------------------------------------------+
    |exim-kommando| postfix-kommando  |         beskrivning         |
    |-------------+-------------------+-----------------------------|
    |             |                   |läsa e-post från             |
    |sendmail     |sendmail           |standardinmatning och ordna  |
    |             |                   |med leverans(-bm)            |
    |-------------+-------------------+-----------------------------|
    |mailq        |mailq              |lista e-postkön med status   |
    |             |                   |och kö-ID(-bp)               |
    |-------------+-------------------+-----------------------------|
    |newaliases   |newaliases         |initiera aliasdatabasen(-I)  |
    |-------------+-------------------+-----------------------------|
    |exim4 -q     |postqueue -f       |spola fram väntande          |
    |             |                   |e-postmeddelanden(-q)        |
    |-------------+-------------------+-----------------------------|
    |             |postsuper -r ALL   |                             |
    |exim4 -qf    |deferred; postqueue|spola alla e-postmeddelanden |
    |             |-f                 |                             |
    |-------------+-------------------+-----------------------------|
    |exim4 -qff   |postsuper -r ALL;  |spola även frysta mejl       |
    |             |postqueue -f       |                             |
    |-------------+-------------------+-----------------------------|
    |exim4 -Mg    |postsuper -h       |frysa ett meddelande med dess|
    |queue_id     |queue_id           |kö-ID                        |
    |-------------+-------------------+-----------------------------|
    |exim4 -Mrm   |postsuper -d       |ta bort ett meddelande med   |
    |queue_id     |queue_id           |hjälp av dess kö-ID          |
    |-------------+-------------------+-----------------------------|
    |N/A          |postsuper -d ALL   |ta bort alla meddelanden     |
    +---------------------------------------------------------------+


    Tips
   
    Det kan vara en bra idé att spola alla e-postmeddelanden med ett
    skript i "/etc/ppp/ip-up.d/*".

6.3. Server och verktyg för fjärråtkomst (SSH)

    Secure SHell (SSH) är ett säkert sätt att ansluta via Internet.
    En gratisversion av SSH som heter OpenSSH finns som paketen
    openssh-client och openssh-server i Debian.

    För användaren fungerar ssh(1) som ett smartare och säkrare
    telnet(1). Till skillnad från telnet-kommandot stoppas inte
    ssh-kommandot av telnets escape-tecken (standardinställning
    CTRL-]).

    Tabell 6.7. Lista över server och verktyg för fjärråtkomst

    +---------------------------------------------------------------------------------+
    |        paket         |popcon |storlek|       verktyg       |    beskrivning     |
    |----------------------+-------+-------+---------------------+--------------------|
    |openssh-client        |V:657, |3521   |ssh(1)               |Säker shell-klient  |
    |                      |I:996  |       |                     |                    |
    |----------------------+-------+-------+---------------------+--------------------|
    |openssh-server        |V:772, |3594   |sshd(8)              |Server för säkert   |
    |                      |I:820  |       |                     |skal                |
    |----------------------+-------+-------+---------------------+--------------------|
    |                      |       |       |                     |ber användaren om en|
    |ssh-askpass           |I:16   |103    |ssh-askpass(1)       |lösenordsfras för   |
    |                      |       |       |                     |ssh-add (vanlig X)  |
    |----------------------+-------+-------+---------------------+--------------------|
    |                      |V:0.4, |       |                     |ber användaren om en|
    |ssh-askpass-gnome     |I:3.0  |46     |ssh-askpass-gnome(1) |lösenordsfras för   |
    |                      |       |       |                     |ssh-add (GNOME)     |
    |----------------------+-------+-------+---------------------+--------------------|
    |                      |       |       |                     |ber användaren om en|
    |ssh-askpass-fullscreen|V:0.09,|41     |ssh-askpass-fullskärm|lösenordsfras för   |
    |                      |I:0.42 |       |(1)                  |ssh-add (GNOME) med |
    |                      |       |       |                     |extra ögonfägnad    |
    |----------------------+-------+-------+---------------------+--------------------|
    |                      |       |       |                     |webbserver för      |
    |shellinabox           |V:0.7, |528    |shellinaboxd(1)      |webbläsartillgänglig|
    |                      |I:1.0  |       |                     |VT100               |
    |                      |       |       |                     |terminalemulator    |
    +---------------------------------------------------------------------------------+


    Även om shellinabox inte är ett SSH-program, listas det här som
    ett intressant alternativ för fjärråtkomst till terminaler.

    Se även Avsnitt 7.9, ”Anslutning till X-server” för anslutning
    till fjärrstyrda X-klientprogram.

    Observera
   
    Se Avsnitt 4.6.3, ”Extra säkerhetsåtgärder för Internet” om din
    SSH är tillgänglig från Internet.

    Tips

    Använd programmet screen(1) för att göra det möjligt för
    fjärrskalprocessen att överleva den avbrutna anslutningen (se
    Avsnitt 9.1.2, ”Skärmprogrammet”).

6.3.1. Grunderna i SSH

    OpenSSH SSH-daemon stöder endast SSH-protokoll 2.

    Läs"/usr/share/doc/openssh-client/README.Debian.gz", ssh(1), sshd
    (8), ssh-keygen(1), ssh-add(1) och ssh-agent(1).

    Varning

    "/etc/ssh/sshd_not_to_be_run" får inte finnas med om man vill
    köra OpenSSH-servern.

    Aktivera inte rhost-baserad autentisering(HostbasedAuthentication
    i /etc/ssh/sshd_config).

    Tabell 6.8. Lista över SSH-konfigurationsfiler

    +---------------------------------------------------------------+
    |konfigurationsfil|      beskrivning av konfigurationsfil       |
    |-----------------+---------------------------------------------|
    |/etc/ssh/        |Standardvärden för SSH-klient, se ssh_config |
    |ssh_config       |(5)                                          |
    |-----------------+---------------------------------------------|
    |/etc/ssh/        |Standardvärden för SSH-server, se sshd_config|
    |sshd_config      |(5)                                          |
    |-----------------+---------------------------------------------|
    |~/.ssh/          |offentliga SSH-standardnycklar som klienter  |
    |authorized_keys  |använder för att ansluta till det här kontot |
    |                 |på den här SSH-servern                       |
    |-----------------+---------------------------------------------|
    |~/.ssh/id_rsa    |användarens hemliga SSH-2 RSA-nyckel         |
    |-----------------+---------------------------------------------|
    |~/.ssh/id_       |hemlig SSH-2-nyckel typ-namn-nyckel, t.ex.   |
    |key-type-name    |ecdsa, ed25519, ... för användaren           |
    +---------------------------------------------------------------+


    Följande startar en ssh(1)-anslutning från en klient.

    Tabell 6.9. Lista över exempel på uppstart av SSH-klient

    +---------------------------------------------------------------+
    |           kommando            |          beskrivning          |
    |-------------------------------+-------------------------------|
    |ssh                            |anslut med standardläge        |
    |username@hostname.domain.ext   |                               |
    |-------------------------------+-------------------------------|
    |ssh -v                         |ansluta med standardläge med   |
    |username@hostname.domain.ext   |felsökningsmeddelanden         |
    |-------------------------------+-------------------------------|
    |ssh -o PreferredAuthentications|tvinga att använda lösenord med|
    |=password                      |SSH version 2                  |
    |username@hostname.domain.ext   |                               |
    |-------------------------------+-------------------------------|
    |ssh -t                         |köra passwd-programmet för att |
    |username@hostname.domain.ext   |uppdatera lösenordet på en     |
    |passwd                         |fjärrvärd                      |
    +---------------------------------------------------------------+


6.3.2. Användarnamn på fjärrvärden

    Om du använder samma användarnamn på den lokala värden och
    fjärrvärden kan du slippa skriva "username@".

    Även om du använder olika användarnamn på den lokala värden och
    fjärrvärden kan du eliminera det med hjälp av "~/.ssh/config".
    För Debian Salsa-tjänsten med kontonamnet "foo-guest" ställer du
    in "~/.ssh/config" så att den innehåller följande.

    Host salsa.debian.org people.debian.org
    User foo-guest

6.3.3. Anslutning utan fjärrlösenord

    Man kan undvika att behöva komma ihåg lösenord för fjärrsystem
    genom att använda "PubkeyAuthentication" (SSH-2-protokollet).

    På fjärrsystemet ställer du in respektive poster,
    "PubkeyAuthentication yes", i "/etc/ssh/sshd_config".

    Generera autentiseringsnycklar lokalt och installera den
    offentliga nyckeln på fjärrsystemet på följande sätt.

    $ ssh-keygen -t rsa
    $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"

    Du kan lägga till alternativ till posterna i "~/.ssh/
    authorized_keys" för att begränsa värdar och köra specifika
    kommandon. Se sshd(8) "AUTHORIZED_KEYS FILFORMAT".

6.3.4. Hantering av främmande SSH-klienter

    Det finns några gratis SSH-klienter tillgängliga för andra
    plattformar.

    Tabell 6.10. Lista över gratis SSH-klienter för andra plattformar

    +---------------------------------------------------------------+
    |   miljö    |                gratis SSH-program                |
    |------------+--------------------------------------------------|
    |Fönster     |puTTY(PuTTY: en gratis SSH- och Telnet-klient)    |
    |            |(GPL)                                             |
    |------------+--------------------------------------------------|
    |Windows     |SSH i cygwin(Cygwin: Få den där Linux-känslan - i |
    |(cygwin)    |Windows) (GPL)                                    |
    |------------+--------------------------------------------------|
    |Mac OS X    |OpenSSH; använd ssh i terminalprogrammet (GPL)    |
    +---------------------------------------------------------------+


6.3.5. Konfigurera ssh-agent

    Det är säkrare att skydda dina hemliga nycklar för
    SSH-autentisering med en lösenordsfras. Om en lösenordsfras inte
    har angetts kan du använda "ssh-keygen -p" för att ange den.

    Placera din offentliga SSH-nyckel (t.ex. "~/.ssh/id_rsa.pub") i
    "~/.ssh/authorized_keys" på en fjärrvärd med hjälp av en
    lösenordsbaserad anslutning till fjärrvärden enligt beskrivningen
    ovan.

    $ ssh-agent bash
    $ ssh-add ~/.ssh/id_rsa
    Enter passphrase for /home/username/.ssh/id_rsa:
    Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

    Inget fjärrlösenord behövs från och med nu för nästa kommando.

    $ scp foo username@remote.host:foo

    Tryck på ^D för att avsluta ssh-agent-sessionen.

    För X-servern exekverar det normala Debian-startskriptet
    ssh-agent som den överordnade processen. Så du behöver bara köra
    ssh-add en gång. För mer information, läs ssh-agent(1) och
    ssh-add(1).

6.3.6. Skicka ett e-postmeddelande från en fjärrvärd

    Om du har ett SSH-shellkonto på en server med korrekta
    DNS-inställningar kan du skicka ett e-postmeddelande som
    genereras på din arbetsstation som ett e-postmeddelande som
    verkligen skickas från fjärrservern.

    $ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt

6.3.7. Portvidarebefordran för SMTP/POP3-tunnel

    Om du vill upprätta en pipe för att ansluta till port 25 på
    fjärrservern från port 4025 på localhost och till port 110 på
    fjärrservern från port 4110 på localhost via ssh, kör du följande
    på den lokala värden.

    # ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server

    Detta är ett säkert sätt att ansluta till SMTP/POP3-servrar via
    Internet. Ställ in posten "AllowTcpForwarding" till "yes" i "/etc
    /ssh/sshd_config" på fjärrvärden.

6.3.8. Hur man stänger av fjärrsystemet på SSH

    Du måste skydda processen som gör "shutdown -h now" (se
    Avsnitt 1.1.8, ”Så här stänger du av systemet”) från avslutningen
    av SSH med kommandot at(1) (se Avsnitt 9.4.13, ”Schemaläggning av
    uppgifter en gång”) på följande sätt.

    # echo "shutdown -h now" | at now

    Att köra "shutdown -h now" i en screen(1)-session (se
    Avsnitt 9.1.2, ”Skärmprogrammet”) är ett annat sätt att göra
    samma sak.

6.3.9. Felsökning av SSH

    Om du har problem kan du kontrollera behörigheterna för
    konfigurationsfilerna och köra ssh med alternativet "-v".

    Använd alternativet "-p" om du är root och har problem med en
    brandvägg; detta undviker användning av serverportarna 1 - 1023.

    Om ssh-anslutningar till en fjärranslutning plötsligt slutar
    fungera kan det bero på att systemadministratören har gjort
    något, troligen en ändring av "host_key" under systemunderhåll.
    Efter att ha försäkrat sig om att så är fallet och att ingen
    försöker fejka fjärrvärden genom något smart hack, kan man återfå
    en anslutning genom att ta bort posten "host_key" från "~/.ssh/
    known_hosts" på den lokala värden.

6.4. Skrivarserver och verktyg

    I det gamla Unix-liknande systemet var BSD Line printer daemon
    (lpd) standard och standardutskriftsformatet för den klassiska
    fria programvaran var PostScript (PS). Något filtersystem
    användes tillsammans med Ghostscript för att möjliggöra utskrift
    till en icke-PostScript-skrivare. Se Avsnitt 11.4.1,
    ”Ghostscript”.

    I det moderna Debian-systemet är CUPS ( Common UNIX Printing
    System ) de facto-standard och standardutskriftsformatet för
    modern fri programvara är PDF (Portable Document Format).

    The CUPS uses Internet Printing Protocol (IPP). The IPP is the
    cross-platform de facto standard for remote printing with
    bi-directional communication capability.

    Tack vare den automatiska konverteringen av filformat i
    CUPS-systemet kan du helt enkelt mata in data i lpr-kommandot och
    få fram den förväntade utskriften. (I CUPS kan lpr aktiveras
    genom att installera paketet cups-bsd )

    Debian-systemet har några anmärkningsvärda paket för
    skrivarservrar och verktyg.

    Tabell 6.11. Lista över skrivarservrar och verktyg

    +----------------------------------------------------------------------+
    |          paket          |popcon|storlek|  port  |    beskrivning     |
    |-------------------------+------+-------+--------+--------------------|
    |lpr                      |V:2.0,|378    |skrivare|BSD lpr/lpd (demon  |
    |                         |I:2.3 |       |(515)   |för linjeskrivare)  |
    |-------------------------+------+-------+--------+--------------------|
    |cups                     |V:143,|1088   |IPP     |Internet Utskrift   |
    |                         |I:442 |       |(631)   |CUPS-server         |
    |-------------------------+------+-------+--------+--------------------|
    |                         |      |       |        |System              |
    |                         |      |       |        |V-skrivarkommandon  |
    |                         |V:151,|       |        |för CUPS: lp(1),    |
    |cups-client              |I:454 |429    |, ,     |lpstat(1), lpoptions|
    |                         |      |       |        |(1), cancel(1),     |
    |                         |      |       |        |lpmove(8), lpinfo   |
    |                         |      |       |        |(8), lpadmin(8), …  |
    |-------------------------+------+-------+--------+--------------------|
    |                         |      |       |        |BSD-skrivarkommandon|
    |cups-bsd                 |V:32, |131    |, ,     |för CUPS: lpr(1),   |
    |                         |I:184 |       |        |lpq(1), lprm(1), lpc|
    |                         |      |       |        |(8)                 |
    |-------------------------+------+-------+--------+--------------------|
    |printer-driver-gutenprint|V:17, |1117   |Inte    |skrivardrivrutiner  |
    |                         |I:54  |       |giltigt |för CUPS            |
    +----------------------------------------------------------------------+


    Tips
   
    Du kan konfigurera CUPS-systemet genom att rikta din webbläsare
    mot"http://localhost:631/".

6.5. Andra nätverksapplikationsservrar

    Här finns andra nätverksapplikationsservrar.

    Tabell 6.12. Lista över andra nätverksapplikationsservrar

    +---------------------------------------------------------------+
    |      paket      |popcon |storlek|protokoll|    beskrivning    |
    |-----------------+-------+-------+---------+-------------------|
    |telnetd          |V:0.3, |55     |TELNET   |TELNET-server      |
    |                 |I:1.5  |       |         |                   |
    |-----------------+-------+-------+---------+-------------------|
    |nfs-kernel-server|V:47,  |834    |NFS      |Unix fildelning    |
    |                 |I:55   |       |         |                   |
    |-----------------+-------+-------+---------+-------------------|
    |                 |V:109, |       |         |Fil- och           |
    |samba            |I:122  |5138   |SMB      |skrivardelning i   |
    |                 |       |       |         |Windows            |
    |-----------------+-------+-------+---------+-------------------|
    |                 |V:0.71,|       |         |Apple/Mac fil- och |
    |netatalk         |I:0.93 |933    |ATP      |skrivardelning     |
    |                 |       |       |         |(AppleTalk)        |
    |-----------------+-------+-------+---------+-------------------|
    |proftpd-basic    |V:3.7, |452    |FTP      |Allmän nedladdning |
    |                 |I:9.0  |       |         |av filer           |
    |-----------------+-------+-------+---------+-------------------|
    |apache2          |V:179, |586    |HTTP     |Allmän webbserver  |
    |                 |I:216  |       |         |                   |
    |-----------------+-------+-------+---------+-------------------|
    |squid            |V:7.8, |9358   |, ,      |Allmän             |
    |                 |I:8.5  |       |         |webbproxyserver    |
    |-----------------+-------+-------+---------+-------------------|
    |bind9            |V:34,  |888    |DNS      |IP-adress för andra|
    |                 |I:37   |       |         |värdar             |
    |-----------------+-------+-------+---------+-------------------|
    |kea              |I:0.52 |245    |DHCP     |IP-adress för      |
    |                 |       |       |         |själva klienten    |
    +---------------------------------------------------------------+


    Common Internet File System Protocol (CIFS) är samma protokoll
    som Server Message Block (SMB) och används i stor utsträckning av
    Microsoft Windows.

    Tips
   
    Se Avsnitt 4.5.2, ”Den moderna centraliserade systemhanteringen”
    för integration av serversystem.

    Tips

    Värdnamnsupplösningen tillhandahålls vanligtvis av DNS-servern.
    För värd-IP-adressen som dynamiskt tilldelas av DHCP kan dynamisk
    DNS konfigureras för värdnamnsupplösning med bind9 och kea enligt
    beskrivningen på DDNS-sidan på Debian-wikin.

    Tips

    Att använda en proxyserver som squid är mycket effektivare för
    att spara bandbredd än att använda en lokal spegelserver med hela
    Debian-arkivets innehåll.

6.6. Andra klienter för nätverksapplikationer

    Här finns andra klienter för nätverksapplikationer.

    Tabell 6.13. Lista över klienter för nätverksapplikationer

    +------------------------------------------------------------------+
    |      paket       |popcon|storlek|protokoll |     beskrivning     |
    |------------------+------+-------+----------+---------------------|
    |netcat-traditional|V:52, |139    |TCP/IP    |TCP/IP swiss         |
    |                  |I:904 |       |          |army-kniv            |
    |------------------+------+-------+----------+---------------------|
    |                  |      |       |          |Schweizisk armékniv  |
    |                  |V:20, |       |          |för TCP/IP med stöd  |
    |netcat-openbsd    |I:121 |105    |TCP/IP    |för IPv6,            |
    |                  |      |       |          |proxyservrar och     |
    |                  |      |       |          |Unix-uttag           |
    |------------------+------+-------+----------+---------------------|
    |                  |      |       |          |Secure Socket Layer  |
    |                  |V:855,|       |          |(SSL) binär och      |
    |openssl           |I:997 |2532   |SSL       |relaterade           |
    |                  |      |       |          |kryptografiska       |
    |                  |      |       |          |verktyg              |
    |------------------+------+-------+----------+---------------------|
    |stunnel4          |V:6.2,|24     |, ,       |universell           |
    |                  |I:9.6 |       |          |SSL-omslagsfilm      |
    |------------------+------+-------+----------+---------------------|
    |telnet            |V:11, |55     |TELNET    |TELNET-klient        |
    |                  |I:206 |       |          |                     |
    |------------------+------+-------+----------+---------------------|
    |nfs-common        |V:147,|1140   |NFS       |Unix fildelning      |
    |                  |I:194 |       |          |                     |
    |------------------+------+-------+----------+---------------------|
    |smbclient         |V:23, |2117   |SMB       |MS Windows fil- och  |
    |                  |I:205 |       |          |skrivardelningsklient|
    |------------------+------+-------+----------+---------------------|
    |                  |V:32, |       |          |mount- och           |
    |cifs-utils        |I:117 |351    |, ,       |umount-kommandon för |
    |                  |      |       |          |fjärrfil i MS Windows|
    |------------------+------+-------+----------+---------------------|
    |wget              |V:179,|3784   |HTTP och  |webbnedladdare       |
    |                  |I:982 |       |FTP       |                     |
    |------------------+------+-------+----------+---------------------|
    |curl              |V:248,|512    |, ,       |, ,                  |
    |                  |I:726 |       |          |                     |
    |------------------+------+-------+----------+---------------------|
    |transmission-gtk  |V:11, |6259   |BitTorrent|BitTorrent client    |
    |                  |I:151 |       |          |(GTK)                |
    |------------------+------+-------+----------+---------------------|
    |transmission-qt   |V:0.7,|6213   |, ,       |BitTorrent client    |
    |                  |I:2.7 |       |          |(Qt)                 |
    |------------------+------+-------+----------+---------------------|
    |ktorrent          |V:1.4,|5031   |, ,       |BitTorrent client    |
    |                  |I:5.3 |       |          |(Qt)                 |
    |------------------+------+-------+----------+---------------------|
    |qbittorrent       |V:9,  |15262  |, ,       |BitTorrent client    |
    |                  |I:24  |       |          |(Qt)                 |
    |------------------+------+-------+----------+---------------------|
    |bind9-host        |V:117,|136    |DNS       |host(1) från bind9,  |
    |                  |I:940 |       |          |"Priority: standard" |
    |------------------+------+-------+----------+---------------------|
    |dnsutils          |V:5,  |23     |, ,       |dig(1) från bindning,|
    |                  |I:156 |       |          |"Priority: standard" |
    |------------------+------+-------+----------+---------------------|
    |ldap-utils        |V:10, |790    |LDAP      |hämta data från      |
    |                  |I:55  |       |          |LDAP-servern         |
    +------------------------------------------------------------------+


6.7. Diagnos av systemets daemons

    Programmet telnet möjliggör manuell anslutning till systemets
    daemons och dess diagnos.

    Om du vill testa en vanlig POP3-tjänst kan du prova följande

    $ telnet mail.ispname.net pop3

    För att testa den TLS/SSL-aktiverade POP3-tjänsten hos vissa
    Internetleverantörer behöver du en TLS/SSL-aktiverad
    telnet-klient med paketen telnet-ssl eller openssl.

    $ telnet -z ssl pop.gmail.com 995

    $ openssl s_client -connect pop.gmail.com:995

    Följande RFC: er ger nödvändig kunskap för varje systemdaemon.

    Tabell 6.14. Lista över populära RFC:er

    +---------------------------------------------------------------+
    |        RFC        |                beskrivning                |
    |-------------------+-------------------------------------------|
    |rfc1939 och rfc2449|POP3-tjänst                                |
    |-------------------+-------------------------------------------|
    |rfc3501            |IMAP4-tjänst                               |
    |-------------------+-------------------------------------------|
    |rfc2821 (rfc821)   |SMTP-tjänst                                |
    |-------------------+-------------------------------------------|
    |rfc2822 (rfc822)   |Filformat för e-post                       |
    |-------------------+-------------------------------------------|
    |rfc2045            |MIME (Multipurpose Internet Mail           |
    |                   |Extensions)                                |
    |-------------------+-------------------------------------------|
    |rfc819             |DNS-tjänst                                 |
    |-------------------+-------------------------------------------|
    |rfc2616            |HTTP-tjänst                                |
    |-------------------+-------------------------------------------|
    |rfc2396            |Definition av URI                          |
    +---------------------------------------------------------------+


    Portanvändningen beskrivs i "/etc/services".

Kapitel 7. GUI-system

7.1. GUI-skrivbordsmiljö

    Det finns flera valmöjligheter för den fullständiga
    GUI-skrivbordsmiljön på Debian-systemet.

    Tabell 7.1. Lista över skrivbordsmiljöer

    +---------------------------------------------------------------+
    |       uppgiftspaket        |popcon|storlek|    beskrivning    |
    |----------------------------+------+-------+-------------------|
    |task-gnome-desktop          |I:187 |9      |Skrivbordsmiljön   |
    |                            |      |       |GNOME              |
    |----------------------------+------+-------+-------------------|
    |task-xfce-desktop           |I:88  |9      |Xfce               |
    |                            |      |       |skrivbordsmiljö    |
    |----------------------------+------+-------+-------------------|
    |task-kde-desktop            |I:93  |6      |Skrivbordsmiljön   |
    |                            |      |       |KDE Plasma         |
    |----------------------------+------+-------+-------------------|
    |task-mate-desktop           |I:31  |9      |Skrivbordsmiljön   |
    |                            |      |       |MATE               |
    |----------------------------+------+-------+-------------------|
    |task-cinnamon-desktop       |I:36  |9      |Skrivbordsmiljön   |
    |                            |      |       |Cinnamon           |
    |----------------------------+------+-------+-------------------|
    |task-lxde-desktop           |I:20  |9      |LXDE               |
    |                            |      |       |skrivbordsmiljö    |
    |----------------------------+------+-------+-------------------|
    |task-lxqt-desktop           |I:17  |9      |LXQt               |
    |                            |      |       |skrivbordsmiljö    |
    |----------------------------+------+-------+-------------------|
    |task-gnome-flashback-desktop|I:9.9 |6      |GNOME Flashback    |
    |                            |      |       |skrivbordsmiljö    |
    +---------------------------------------------------------------+


    Tips

    Beroendepaket som valts av ett uppgiftsmetapaket kan vara
    osynkroniserade med det senaste paketövergångsläget under Debian
    unstable/testing-miljön. För task-gnome-desktop kan du behöva
    justera paketvalen enligt följande:

      * Starta aptitude(8) som sudo aptitude -u.

      * Flytta markören till "Tasks" och tryck på "Enter".

      * Flytta markören till "Slutanvändare" och tryck på "Enter".

      * Flytta markören till "GNOME" och tryck på "Enter".
   
      * Flytta markören till task-gnome-desktop och tryck på "Enter".

      * Flytta markören till "Depends" och tryck på "m" (manuellt
        valt).

      * Flytta markören till "Recommends" och tryck på "m" (manuellt
        val).

      * Flytta markören till "task-gnome-desktop " och tryck på "-".
        (släpp)

      * Justera valda paket samtidigt som du tar bort problematiska
        paket som orsakar paketkonflikter.

      * Tryck på "g" för att starta installationen.

    Detta kapitel kommer att fokusera mest på Debians
    standardskrivbordsmiljö: task-gnome-desktop som erbjuder GNOME på
    wayland.

7.2. GUI-kommunikationsprotokoll

    GUI-kommunikationsprotokoll som används på GNOME-skrivbordet kan
    vara:

      * Wayland (displayserverprotokoll) (inbyggt)
   
      * X Window System kärnprotokoll (via xwayland)

    Se webbplatsen freedesktop.org för att se hur
    Wayland-arkitekturen skiljer sig från X Window-arkitekturen.

    Från användarens perspektiv kan skillnaderna sammanfattas som:

      * Wayland är ett kommunikationsprotokoll för GUI med samma
        värd: nytt, enklare, snabbare, ingen setuid root-binär
   
      * X Window är ett nätverkskompatibelt
        GUI-kommunikationsprotokoll: traditionellt, komplext,
        långsammare, setuid root binärt

    För program som använder Wayland-protokollet stöds åtkomsten till
    deras skärminnehåll från en fjärrvärd av VNC eller RDP. Se även
    Avsnitt 7.8, ”Fjärrskrivbord”

    Moderna X-servrar har MIT Shared Memory Extension och
    kommunicerar med sina lokala X-klienter med hjälp av det lokala
    delade minnet. Detta förbigår den nätverkstransparenta
    Xlib-kommunikationskanalen mellan processer och ger bättre
    prestanda. Denna situation var bakgrunden till att Wayland
    skapades som ett kommunikationsprotokoll för enbart lokala
    GUI:er.

    Med hjälp av programmet xeyes som startas från GNOME-terminalen
    kan du kontrollera GUI-kommunikationsprotokollet som används av
    varje GUI-program.

     $ xeyes

      * Om muspekaren är på ett program som "GNOME terminal" som
        använder Wayland display server protocol, rör sig inte ögonen
        med muspekaren.
   
      * Om muspekaren befinner sig i ett program som "xterm", som
        använder X Window Systems kärnprotokoll, rör sig ögonen med
        muspekaren, vilket visar att X Window-arkitekturen inte är
        helt isolerad.

    Från och med april 2021 har många populära GUI-program som GNOME-
    och LibreOffice (LO) -program migrerats till
    Wayland-displayserverprotokollet. Jag ser att xterm-, gitk-,
    chromium-, firefox-, gimp-, dia- och KDE-applikationer
    fortfarande använder X Window System-kärnprotokollet.

    Notera

    För både xwayland på Wayland och det inbyggda X Window System bör
    den gamla konfigurationsfilen för X-servern "/etc/X11/xorg.conf"
    inte finnas på systemet. Grafik- och inmatningsenheterna
    konfigureras nu av kärnan med DRM, KMS och udev. Den inbyggda
    X-servern har skrivits om för att använda dem. Se"modedb default
    video mode support" i dokumentationen för Linux-kärnan.

7.3. GUI-infrastruktur

    Här är några viktiga GUI-infrastrukturpaket för GNOME på
    Wayland-miljön.

    Tabell 7.2. Lista över anmärkningsvärda GUI-infrastrukturpaket

    +----------------------------------------------------------------------------------+
    |           paket           |popcon|förpackningsstorlek|        beskrivning        |
    |---------------------------+------+-------------------+---------------------------|
    |mutter                     |V:1,  |215                |GNOME:s fönsterhanterare   |
    |                           |I:24  |                   |mutter [auto]              |
    |---------------------------+------+-------------------+---------------------------|
    |xwayland                   |V:249,|2652               |En X-server som körs på    |
    |                           |I:329 |                   |toppen av wayland [auto]   |
    |---------------------------+------+-------------------+---------------------------|
    |                           |V:139,|                   |Fjärrskrivbordsdaemon för  |
    |gnome-remote-desktop       |I:236 |2453               |GNOME som använder PipeWire|
    |                           |      |                   |[auto]                     |
    |---------------------------+------+-------------------+---------------------------|
    |                           |V:16, |                   |Avancerade                 |
    |gnome-tweaks               |I:228 |1145               |konfigurationsinställningar|
    |                           |      |                   |för GNOME                  |
    |---------------------------+------+-------------------+---------------------------|
    |                           |V:7,  |                   |Verktyg för att aktivera / |
    |gnome-shell-extension-prefs|I:121 |73                 |inaktivera GNOME           |
    |                           |      |                   |Shell-tillägg              |
    +----------------------------------------------------------------------------------+


    Här betyder "[auto]" att dessa paket installeras automatiskt när
    task-gnome-desktop installeras.

    Tips

    gnome-tweaks är det oumbärliga konfigurationsverktyget. Till
    exempel:
   
      * Du kan tvinga fram "Over-Amplification" av ljudvolymen från
        "General".

      * Du kan tvinga "Caps" att bli "Esc" från "Keyboard & Mouse" ->
        "Keyboard" -> "Additional Layout Option".

    Tips

    Detaljerade funktioner i skrivbordsmiljön GNOME kan konfigureras
    med hjälp av verktyg som startas genom att skriva "settings",
    "tweaks" eller "extensions" efter att du tryckt på
    Super-tangenten.

7.4. GUI-applikationer

    Många användbara GUI-program finns nu tillgängliga på Debian. Att
    installera programpaket som scribus (KDE) på
    GNOME-skrivbordsmiljön är helt acceptabelt eftersom motsvarande
    funktionalitet inte är tillgänglig under GNOME-skrivbordsmiljön.
    Men att installera för många paket med duplicerade funktioner kan
    göra ditt system rörigt.

    Här är en lista över GUI-applikationer som fångade mina ögon.

    Tabell 7.3. Lista över anmärkningsvärda GUI-applikationer

    +-------------------------------------------------------------------------------+
    |       paket       |popcon |förpackningsstorlek| typ  |      beskrivning       |
    |-------------------+-------+-------------------+------+------------------------|
    |                   |V:25,  |                   |      |Hantering av personlig  |
    |evolution          |I:225  |489                |GNOME |information (grupprogram|
    |                   |       |                   |      |och e-post)             |
    |-------------------+-------+-------------------+------+------------------------|
    |thunderbird        |V:41,  |274581             |GTK   |E-postklient(Mozilla    |
    |                   |I:103  |                   |      |Thunderbird)            |
    |-------------------+-------+-------------------+------+------------------------|
    |                   |V:1.0, |                   |      |Hantering av personlig  |
    |kontact            |I:9.3  |2360               |KDE   |information (grupprogram|
    |                   |       |                   |      |och e-post)             |
    |-------------------+-------+-------------------+------+------------------------|
    |libreoffice-writer |V:107, |34123              |LO    |ordbehandlare           |
    |                   |I:418  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |abiword            |V:0.9, |3596               |GNOME |ordbehandlare           |
    |                   |I:5.2  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |calligrawords      |V:0.2, |7134               |KDE   |ordbehandlare           |
    |                   |I:2.9  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |                   |V:1,   |                   |      |desktop publishing      |
    |scribus            |I:12   |32415              |KDE   |editor för att redigera |
    |                   |       |                   |      |PDF-filer               |
    |-------------------+-------+-------------------+------+------------------------|
    |glabels            |V:0.3, |1283               |GNOME |etikettredaktör         |
    |                   |I:2.6  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |libreoffice-calc   |V:104, |28733              |LO    |kalkylblad              |
    |                   |I:415  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |gnumeric           |V:3,   |9945               |GNOME |kalkylblad              |
    |                   |I:11   |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |calligrasheets     |V:0.1, |14012              |KDE   |kalkylblad              |
    |                   |I:1.8  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |libreoffice-impress|V:91,  |2485               |LO    |presentation            |
    |                   |I:414  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |calligrastage      |V:0.1, |6194               |KDE   |presentation            |
    |                   |I:1.8  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |libreoffice-base   |V:21,  |5050               |LO    |databashantering        |
    |                   |I:69   |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |kexi               |V:0.06,|7565               |KDE   |databashantering        |
    |                   |I:0.86 |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |libreoffice-draw   |V:91,  |11209              |LO    |redigerare för          |
    |                   |I:414  |                   |      |vektorgrafik (draw)     |
    |-------------------+-------+-------------------+------+------------------------|
    |inkscape           |V:11,  |113353             |GNOME |redigerare för          |
    |                   |I:76   |                   |      |vektorgrafik (draw)     |
    |-------------------+-------+-------------------+------+------------------------|
    |karbon             |V:0.1, |4004               |KDE   |redigerare för          |
    |                   |I:2.3  |                   |      |vektorgrafik (draw)     |
    |-------------------+-------+-------------------+------+------------------------|
    |dia                |V:1,   |3846               |GTK   |editor för flödesscheman|
    |                   |I:15   |                   |      |och diagram             |
    |-------------------+-------+-------------------+------+------------------------|
    |gimp               |V:41,  |32779              |GTK   |bitmappsgrafikredigerare|
    |                   |I:214  |                   |      |(paint)                 |
    |-------------------+-------+-------------------+------+------------------------|
    |shotwell           |V:14,  |6334               |GTK   |digital fotoorganisatör |
    |                   |I:243  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |digikam            |V:1.5, |325                |KDE   |digital fotoorganisatör |
    |                   |I:8.6  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |darktable          |V:4,   |35876              |GTK   |lighttable och mörkrum  |
    |                   |I:11   |                   |      |för fotografer          |
    |-------------------+-------+-------------------+------+------------------------|
    |gnome-video-trimmer|V:0.2, |1665               |GNOME |lossless cutting of     |
    |                   |I:1.1  |                   |      |video files             |
    |-------------------+-------+-------------------+------+------------------------|
    |kdenlive           |V:3,   |19821              |KDE   |non-linear video editor |
    |                   |I:22   |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |shotcut            |V:1.0, |7943               |Qt-app|non-linear video editor |
    |                   |I:7.1  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |openshot-qt        |V:0.9, |196007             |Qt-app|non-linear video editor |
    |                   |I:9.3  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |flowblade          |V:0.2, |42213              |GTK   |non-linear video editor |
    |                   |I:2.3  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |planner            |V:0.1, |1400               |GNOME |projektledning          |
    |                   |I:3.2  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |calligraplan       |V:0.1, |23545              |KDE   |projektledning          |
    |                   |I:1.8  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |gnucash            |V:2.3, |29451              |GNOME |personlig redovisning   |
    |                   |I:7.2  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |homebank           |V:0.3, |3194               |GTK   |personlig redovisning   |
    |                   |I:1.7  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |kmymoney           |V:0.5, |19289              |KDE   |personlig redovisning   |
    |                   |I:2.0  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |frescobaldi        |V:0.2, |11102              |Qt-app|LilyPond sheet music    |
    |                   |I:1.5  |                   |      |text editor             |
    |-------------------+-------+-------------------+------+------------------------|
    |librecad           |V:1,   |9164               |Qt-app|cAD-system (datorstödd  |
    |                   |I:12   |                   |      |konstruktion) (2D)      |
    |-------------------+-------+-------------------+------+------------------------|
    |freecad            |V:1,   |112                |Qt-app|cAD-system (datorstödd  |
    |                   |I:19   |                   |      |konstruktion) (3D)      |
    |-------------------+-------+-------------------+------+------------------------|
    |                   |V:3,   |                   |      |programvara för         |
    |kicad              |I:13   |222895             |GTK   |elektroniska scheman och|
    |                   |       |                   |      |PCB-design              |
    |-------------------+-------+-------------------+------+------------------------|
    |xsane              |V:8,   |1512               |GTK   |skanner frontend        |
    |                   |I:129  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |libreoffice-math   |V:87,  |1958               |LO    |editor för matematiska  |
    |                   |I:417  |                   |      |ekvationer/formler      |
    |-------------------+-------+-------------------+------+------------------------|
    |calibre            |V:7,   |69924              |KDE   |e-bokskonverterare och  |
    |                   |I:26   |                   |      |bibliotekshantering     |
    |-------------------+-------+-------------------+------+------------------------|
    |fbreader           |V:0.6, |3827               |GTK   |e-bokläsare             |
    |                   |I:6.0  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |evince             |V:72,  |942                |GNOME |dokument(pdf)-visare    |
    |                   |I:282  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |okular             |V:41,  |4419               |KDE   |dokument(pdf)-visare    |
    |                   |I:129  |                   |      |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |x11-apps           |V:30,  |2461               |ren   |xeyes(1), etc.          |
    |                   |I:440  |                   |X-app |                        |
    |-------------------+-------+-------------------+------+------------------------|
    |x11-utils          |V:222, |651                |ren   |xev(1), xwininfo(1),    |
    |                   |I:551  |                   |X-app |etc.                    |
    +-------------------------------------------------------------------------------+


7.5. Användarkataloger

    Standardnamnen för användarkataloger som "~/Desktop", "~/
    Documents", ..., som används av Desktop-miljön beror på vilken
    språkdräkt som används vid systeminstallationen. Du kan
    återställa dem till de engelska namnen genom att:

     $ LANGUAGE=C xdg-user-dirs-update --force

    Sedan flyttar du manuellt alla data till de nyare katalogerna. Se
    xdg-user-dirs-update(1).

    Du kan också ge dem valfria namn genom att redigera "~/.config/
    user-dirs.dirs". Se user-dirs.dirs(5).

7.6. Typsnitt

    Många användbara skalbara teckensnitt finns tillgängliga för
    användare på Debian. Användarens problem är hur man undviker
    redundans och hur man konfigurerar delar av installerade
    teckensnitt så att de inaktiveras. Annars kan värdelösa val av
    teckensnitt fördärva menyerna i dina GUI-program.

    Debian-systemet använder FreeType 2.0-biblioteket för att
    rastrera många skalbara teckensnittsformat för skärm och
    utskrift:

      * Typ 1 (PostScript)-teckensnitt som använder kubiska
        Bézier-kurvor (nästan föråldrat format)

      * TrueType-teckensnitt som använder kvadratiska Bézier-kurvor
        (bra valformat)

      * OpenType-teckensnitt som använder kubiska Bézier-kurvor
        (bästa val av format)

7.6.1. Grundläggande teckensnitt

    Följande tabell har sammanställts i hopp om att hjälpa användare
    att välja lämpliga skalbara teckensnitt med tydlig förståelse för
    den metriska kompatibiliteten och glyftäckningen. De flesta
    teckensnitt täcker alla latinska, grekiska och kyrilliska tecken.
    Det slutliga valet av aktiverade teckensnitt kan också påverkas
    av din estetik. Dessa teckensnitt kan användas för skärmvisning
    eller för pappersutskrift.

    Tabell 7.4. Lista över anmärkningsvärda TrueType- och
    OpenType-teckensnitt

    +-------------------------------------------------------------------------------+
    |          paket          |popcon|storlek|sans|serif|mono|    anmärkning om     |
    |                         |      |       |    |     |    |     teckensnitt      |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-cantarell          |V:173,|224    |59  |-    |-   |Cantarell (GNOME 3,   |
    |                         |I:285 |       |    |     |    |display)              |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |      |       |    |     |    |Noto-teckensnitt      |
    |fonts-noto               |I:151 |30     |61  |63   |40  |(Google, flerspråkigt |
    |                         |      |       |    |     |    |med CJK)              |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |      |       |    |     |    |DejaVu (GNOME 2,      |
    |fonts-dejavu             |I:384 |34     |58  |68   |40  |MCM:Verdana, utökad   |
    |                         |      |       |    |     |    |Bitstream Vera)       |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:44, |       |    |     |    |Liberation-teckensnitt|
    |fonts-liberation2        |I:168 |15     |56  |60   |40  |för LibreOffice (Red  |
    |                         |      |       |    |     |    |Hat, MCMATC)          |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:20, |       |    |     |    |Chrome OS: Arimo,     |
    |fonts-croscore           |I:36  |5260   |56  |60   |40  |Tinos och Cousine     |
    |                         |      |       |    |     |    |(Google, MCMATC)      |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-crosextra-carlito  |V:20, |2696   |57  |-    |-   |Chrome OS: Carlito    |
    |                         |I:91  |       |    |     |    |(Google, MCM:Calibri )|
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:12, |       |    |     |    |Chrome OS: Caladea    |
    |fonts-crosextra-caladea  |I:85  |347    |-   |55   |-   |(Google, MCM:Cambria )|
    |                         |      |       |    |     |    |(endast latin )       |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-freefont-ttf       |V:79, |14460  |57  |59   |40  |GNU FreeFont (utökad  |
    |                         |I:203 |       |    |     |    |URW Nimbus)           |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:207,|       |    |     |    |Debian task-desktop,  |
    |fonts-quicksand          |I:447 |392    |56  |-    |-   |Quicksand (display,   |
    |                         |      |       |    |     |    |endast latin)         |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:34, |       |    |     |    |Ett typsnitt utformat |
    |fonts-hack               |I:136 |2507   |-   |-    |40 P|för källkod Hack      |
    |                         |      |       |    |     |    |(Facebook)            |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-sil-gentiumplus    |V:0,  |14345  |-   |54   |-   |Gentium SIL           |
    |                         |I:28  |       |    |     |    |                      |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-sil-charis         |V:1,  |6704   |-   |59   |-   |Charis SIL            |
    |                         |I:28  |       |    |     |    |                      |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:190,|       |    |     |    |URW Nimbus (Nimbus    |
    |fonts-urw-base35         |I:528 |15558  |56  |60   |40  |Sans, Roman No. 9 L,  |
    |                         |      |       |    |     |    |Mono L, MCAHTC)       |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-ubuntu             |V:2.2,|4339   |58  |-    |33 P|Ubuntu-teckensnitt    |
    |                         |I:4.7 |       |    |     |    |(display)             |
    |-------------------------+------+-------+----+-----+----+----------------------|
    |fonts-terminus           |V:0.3,|451    |-   |-    |33  |Coola teckensnitt för |
    |                         |I:4.0 |       |    |     |    |terminaler i retrostil|
    |-------------------------+------+-------+----+-----+----+----------------------|
    |                         |V:1,  |       |    |     |    |Nedladdare av         |
    |ttf-mscorefonts-installer|I:39  |85     |56? |60   |40  |Microsofts icke-fria  |
    |                         |      |       |    |     |    |teckensnitt (se nedan)|
    +-------------------------------------------------------------------------------+


    Här:

      * "MCM" står för "metrisk kompatibel med teckensnitt som
        tillhandahålls av Microsoft"

      * "MCMATC" står för "metrisk kompatibel med teckensnitt som
        tillhandahålls av Microsoft: Arial, Times New Roman, Courier
        New"

      * "MCAHTC" står för "metrisk kompatibel med teckensnitt som
        tillhandahålls av Adobe: Helvetica, Times, Courier"

      * Siffrorna i kolumnerna för typsnitt står för den ungefärliga
        relativa "M"-bredden för samma typsnitt i punktstorlek.

      * "P" i kolumner av monotyp typsnitt står för dess användbarhet
        för programmering med tydligt urskiljbara "0"/"O" och "1"/"I"
        /"l".

      * Paketet ttf-mscorefonts-installer hämtar Microsofts"Core
        fonts for the Web" och installerar Arial, Times New Roman,
        Courier New, Verdana, ... . Dessa installerade
        teckensnittsdata är icke-fria data.

    Många gratis latinska teckensnitt har sin härkomst spårad till
    URW Nimbus-familjen eller Bitstream Vera.

    Tips

    Om din lokal behöver teckensnitt som inte täcks väl av
    ovanstående teckensnitt, använd aptitude för att kontrollera
    under uppgiftspaket som listas under "Uppgifter" ->
    "Lokalisering". De teckensnittspaket som listas som "Depends:"
    eller "Recommends:" i uppgiftspaketen för lokalisering är de
    primära kandidaterna.

7.6.2. Rasterisering av teckensnitt

    Debian använder FreeType för att rastrera teckensnitt. Dess
    infrastruktur för val av teckensnitt tillhandahålls av
    teckensnittskonfigurationsbiblioteket Fontconfig.

    Tabell 7.5. Lista över viktiga teckensnittsmiljöer och relaterade
    paket

    +---------------------------------------------------------------+
    |        paket        |popcon |storlek|       beskrivning       |
    |---------------------+-------+-------+-------------------------|
    |libfreetype6         |V:583, |1018   |Bibliotek för rastrering |
    |                     |I:997  |       |av FreeType-teckensnitt  |
    |---------------------+-------+-------+-------------------------|
    |                     |V:573, |       |Fontconfig bibliotek för |
    |libfontconfig1       |I:810  |344    |konfiguration av         |
    |                     |       |       |teckensnitt              |
    |---------------------+-------+-------+-------------------------|
    |fontconfig           |V:464, |415    |fc-*: CLI-kommandon för  |
    |                     |I:692  |       |Fontconfig               |
    |---------------------+-------+-------+-------------------------|
    |                     |V:2.4, |       |Fonthanterare:           |
    |font-manager         |I:7.0  |1116   |GUI-kommando för         |
    |                     |       |       |Fontconfig               |
    |---------------------+-------+-------+-------------------------|
    |nautilus-font-manager|V:0.11,|38     |Nautilus-tillägg för Font|
    |                     |I:0.43 |       |Manager                  |
    +---------------------------------------------------------------+


    Tips

    Vissa teckensnittspaket, t.ex. fonts-noto*, installerar för många
    teckensnitt. Du kanske också vill ha vissa teckensnittspaket
    installerade men inaktiverade under normala
    användningsförhållanden. De multipla glyferna förväntas för vissa
    Unicode-kodpunkter på grund av Han-unifiering och oönskade gliphs
    kan väljas av det okonfigurerade Fontconfig-biblioteket. Ett av
    de mest irriterande fallen är "U+3001 IDEOGRAPHIC COMMA" och
    "U+3002 IDEOGRAPHIC FULL STOP" bland CJK-länder. Du kan enkelt
    undvika denna problematiska situation genom att konfigurera
    tillgängligheten för teckensnitt med hjälp av Font Manager GUI
    (font-manager).

    Du kan även lista konfigurationsstatus för teckensnitt från
    kommandoraden.

      * "fc-match(1)" för fontconfig-teckensnittets standard
   
      * "fc-list(1)" för tillgängliga fontconfig-teckensnitt

    Du kan konfigurera teckensnittets konfigurationsstatus från
    textredigeraren, men det är inte trivialt. Se fonts.conf(5).

7.7. Sandlåda

    Många GUI-program på Linux finns tillgängliga i binära format
    från andra källor än Debian.

      * AppImage -- Linux-appar som kan köras var som helst

      * FLATHUB -- Appar för Linux, här hittar du dem

      * snapcraft -- Appbutiken för Linux

    Varning
   
    Binärfiler från dessa webbplatser kan innehålla proprietära,
    non-free programvarupaket.

    Det finns ett visst existensberättigande för dessa distributioner
    i binärt format för användare av fri programvara som använder
    Debian, eftersom de kan rymma en ren uppsättning bibliotek som
    används för varje program av respektive uppströmsutvecklare
    oberoende av de som tillhandahålls av Debian.

    Den inneboende risken med att köra externa binärfiler kan minskas
    genom att använda sandlådemiljön som utnyttjar moderna
    säkerhetsfunktioner i Linux (se Avsnitt 4.7.5,
    ”Säkerhetsfunktioner i Linux”).

      * För binärfiler från AppImage och vissa uppströmswebbplatser,
        kör dem i Firejail med manuell konfiguration.

      * För binärfiler från FLATHUB, kör dem i Flatpak (ingen manuell
        konfiguration krävs)

      * För binärfiler från snapcraft, kör dem i Snap . (Ingen
        manuell konfiguration krävs. Kompatibel med daemonprogram.)

    Paketet xdg-desktop-portal tillhandahåller ett standardiserat API
    för vanliga skrivbordsfunktioner. Se xdg-desktop-portal (flatpak)
    och xdg-desktop-portal (snap) .

    Tabell 7.6. Lista över viktiga sandlådemiljöer och relaterade paket

    +--------------------------------------------------------------------------+
    |            paket            |popcon|storlek|         beskrivning         |
    |-----------------------------+------+-------+-----------------------------|
    |                             |V:107,|       |Flatpak-ramverk för          |
    |flatpak                      |I:115 |9278   |applikationsdistribution för |
    |                             |      |       |skrivbordsappar              |
    |-----------------------------+------+-------+-----------------------------|
    |gnome-software-plugin-flatpak|V:30, |283    |Flatpak-stöd för             |
    |                             |I:42  |       |GNOME-programvara            |
    |-----------------------------+------+-------+-----------------------------|
    |snapd                        |V:61, |78931  |Daemon och verktyg som       |
    |                             |I:64  |       |möjliggör snap-paket         |
    |-----------------------------+------+-------+-----------------------------|
    |gnome-software-plugin-snap   |V:1.5,|145    |Snap-stöd för                |
    |                             |I:2.3 |       |GNOME-programvara            |
    |-----------------------------+------+-------+-----------------------------|
    |                             |V:365,|       |portal för                   |
    |xdg-desktop-portal           |I:434 |2291   |desktop-integration för      |
    |                             |      |       |Flatpak och Snap             |
    |-----------------------------+------+-------+-----------------------------|
    |xdg-desktop-portal-gtk       |V:329,|715    |xdg-desktop-portal backend   |
    |                             |I:432 |       |för gtk (GNOME)              |
    |-----------------------------+------+-------+-----------------------------|
    |xdg-desktop-portal-kde       |V:79, |3324   |xdg-desktop-portal backend   |
    |                             |I:111 |       |för Qt (KDE)                 |
    |-----------------------------+------+-------+-----------------------------|
    |xdg-desktop-portal-wlr       |V:2.3,|159    |xdg-desktop-portal backend   |
    |                             |I:5.4 |       |för wlroots (Wayland)        |
    |-----------------------------+------+-------+-----------------------------|
    |                             |      |       |ett                          |
    |firejail                     |V:1.3,|1827   |SUID-säkerhetssandlådeprogram|
    |                             |I:4.7 |       |firejail för användning med  |
    |                             |      |       |AppImage                     |
    +--------------------------------------------------------------------------+


    Den här sandlådemiljön är mycket lik apparna i operativsystemet
    för smarta telefoner, där apparna körs under kontrollerad
    resursåtkomst.

    Vissa stora GUI-program, t.ex. webbläsare på Debian, använder
    också sandboxmiljöteknik internt för att göra dem säkrare.

7.8. Fjärrskrivbord

    Tabell 7.7. Lista över anmärkningsvärda fjärråtkomstservrar

    Åtkomst till skrivbordet och program som använder Wayland-protokollet
    och körs på fjärrvärden stöds av GNOME Remote Desktop på fjärrvärden
    via VNC eller RDP till den lokala klienten.

    Tillgång till skrivbordsfunktioner i alla virtuella QEMU-maskiner
    stöds av SPICE-protokollet (Simple Protocol for Independent Computing
    Environments).

    +-------------------------------------------------------------------------+
    |          paket           |popcon|storlek|protokoll|     beskrivning     |
    |--------------------------+------+-------+---------+---------------------|
    |gnome-remote-desktop      |V:139,|2453   |RDP      |GNOME-server för     |
    |                          |I:236 |       |         |fjärrskrivbord       |
    |--------------------------+------+-------+---------+---------------------|
    |                          |V:27, |       |         |xrdp, RDP-server     |
    |xrdp                      |I:29  |4669   |RDP      |(Remote Desktop      |
    |                          |      |       |         |Protocol)            |
    |--------------------------+------+-------+---------+---------------------|
    |                          |V:9,  |       |         |x11vnc, VNC-server   |
    |x11vnc                    |I:44  |1863   |RFB (VNC)|(Remote Framebuffer  |
    |                          |      |       |         |Protocol)            |
    |--------------------------+------+-------+---------+---------------------|
    |                          |V:5,  |       |         |TigerVNC, fjärrserver|
    |tigervnc-standalone-server|I:15  |2960   |RFB (VNC)|för VNC (Framebuffer |
    |                          |      |       |         |Protocol)            |
    |--------------------------+------+-------+---------+---------------------|
    |gnome-connections         |V:6,  |1695   |RDP, RFB |GNOME                |
    |                          |I:139 |       |(VNC)    |fjärrskrivbordsklient|
    |--------------------------+------+-------+---------+---------------------|
    |                          |      |       |RDP, RFB |                     |
    |vinagre                   |V:1,  |4249   |(VNC),   |Vinagre: GNOME-klient|
    |                          |I:23  |       |SPICE,   |för fjärrskrivbord   |
    |                          |      |       |SSH      |                     |
    |--------------------------+------+-------+---------+---------------------|
    |                          |      |       |RDP, RFB |                     |
    |remmina                   |V:16, |983    |(VNC),   |Remmina: GTK-klient  |
    |                          |I:62  |       |SPICE,   |för fjärrskrivbord   |
    |                          |      |       |SSH, ... |                     |
    |--------------------------+------+-------+---------+---------------------|
    |krdc                      |V:2,  |4144   |RDP, RFB |KRDC: KDE-klient för |
    |                          |I:14  |       |(VNC)    |fjärrskrivbord       |
    |--------------------------+------+-------+---------+---------------------|
    |                          |      |       |         |Virtual Machine      |
    |                          |V:3,  |       |RFB      |Managers             |
    |virt-viewer               |I:38  |1278   |(VNC),   |GUI-visningsklient   |
    |                          |      |       |SPICE    |för                  |
    |                          |      |       |         |gästoperativsystemet |
    +-------------------------------------------------------------------------+


7.9. Anslutning till X-server

    Det finns flera sätt att ansluta från ett program på en fjärrvärd
    till X-servern, inklusive xwayland på den lokala värden.

    Tabell 7.8. Lista över anslutningsmetoder till X-servern

    +--------------------------------------------------------------------------+
    |      paket      |popcon|storlek|     kommando      |     beskrivning     |
    |-----------------+------+-------+-------------------+---------------------|
    |                 |V:772,|       |sshd med           |                     |
    |openssh-server   |I:820 |3594   |alternativet       |SSH-server (säker)   |
    |                 |      |       |X11-vidarebefordran|                     |
    |-----------------+------+-------+-------------------+---------------------|
    |openssh-client   |V:657,|3521   |ssh -X             |SSH-klient (säker)   |
    |                 |I:996 |       |                   |                     |
    |-----------------+------+-------+-------------------+---------------------|
    |xauth            |V:189,|81     |xauth              |X authority          |
    |                 |I:973 |       |                   |filverktyg           |
    |-----------------+------+-------+-------------------+---------------------|
    |x11-xserver-utils|V:304,|559    |xhost              |serveråtkomstkontroll|
    |                 |I:528 |       |                   |för X                |
    +--------------------------------------------------------------------------+


7.9.1. Lokal anslutning till X-server

    Åtkomst till den lokala X-servern för de lokala program som
    använder X core-protokollet kan anslutas lokalt via ett lokalt
    UNIX-domänuttag. Detta kan godkännas av auktoritetsfilen som
    innehåller en åtkomstcookie. Behörighetsfilens plats identifieras
    av miljövariabeln "$XAUTHORITY" och X-display identifieras av
    miljövariabeln "$DISPLAY". Eftersom dessa normalt ställs in
    automatiskt behövs ingen speciell åtgärd, t.ex. "gitk" som
    följande.

    username $ gitk

    Notera
   
    För xwayland har XAUTHORITY ett värde som "/run/user/1000
    /.mutter-Xwaylandauth.YVSU30".

7.9.2. Fjärranslutning till X-server

    Åtkomst till den lokala X-serverskärmen från fjärrprogram som
    använder X core-protokollet stöds genom att använda funktionen
    X11 forwarding.

      * Öppna en gnome-terminal på den lokala värden.

      * Kör ssh(1) med alternativet -X för att upprätta en anslutning
        till fjärrplatsen enligt följande.

        localname @ localhost $ ssh -q -X loginname@remotehost.domain
        Password:

      * Kör ett X-programkommando, t.ex. "gitk", på fjärrplatsen på
        följande sätt.

        loginname @ remotehost $ gitk

    Den här metoden kan visa utdata från en fjärrstyrd X-klient som
    om den vore lokalt ansluten via ett lokalt UNIX-domänuttag.

    Se Avsnitt 6.3, ”Server och verktyg för fjärråtkomst (SSH)” för
    SSH/SSHD.

    Varning

    En fjärransluten TCP/IP-anslutning till X-servern är av
    säkerhetsskäl inaktiverad som standard på Debian-systemet.
    Aktivera dem inte genom att helt enkelt ställa in ”xhost +” eller
    genom att aktivera XDMCP-anslutning, om du kan undvika det.

7.9.3. X-server chroot-anslutning

    Åtkomst till X-servern för de program som använder
    X-kärnprotokollet och körs på samma värd men i en miljö som
    chroot där auktoritetsfilen inte är tillgänglig, kan auktoriseras
    på ett säkert sätt med xhost genom att använda användarbaserad
    åtkomst, t.ex. "gitk" enligt följande.

    username $ xhost + si:localuser:root ; sudo chroot /path/to
    # cd /src
    # gitk
    # exit
    username $ xhost -

7.10. Urklipp

    För att klippa text till klippbordet, se Avsnitt 1.4.4,
    ”Operationer med musen”.

    För att klippa grafik till klippbordet, se Avsnitt 11.6,
    ”Grafiska dataverktyg”.

    Vissa CLI-kommandon kan också manipulera urklipp för tecken
    (PRIMARY och CLIPBOARD).

    Tabell 7.9. Lista över program relaterade till manipulering av tecken
    urklipp

    +---------------------------------------------------------------------------+
    |   paket    |popcon|förpackningsstorlek|  lokation  |     beskrivning      |
    |------------+------+-------------------+------------+----------------------|
    |xsel        |V:7,  |55                 |X           |kommandoradsgränssnitt|
    |            |I:42  |                   |            |för X-val (urklipp)   |
    |------------+------+-------------------+------------+----------------------|
    |xclip       |V:18, |62                 |X           |kommandoradsgränssnitt|
    |            |I:79  |                   |            |för X-val (urklipp)   |
    |------------+------+-------------------+------------+----------------------|
    |            |V:9,  |                   |            |wl-copy wl-paste:     |
    |wl-clipboard|I:27  |174                |Wayland     |kommandoradsgränssnitt|
    |            |      |                   |            |för Waylands urklipp  |
    |------------+------+-------------------+------------+----------------------|
    |            |V:8.2,|                   |            |en daemon som fångar  |
    |gpm         |I:9.1 |524                |Linux-konsol|upp mushändelser på   |
    |            |      |                   |            |Linux-konsolen        |
    +---------------------------------------------------------------------------+


Kapitel 8. I18N och L10N

    Flerspråkighet (M17N) eller modersmålsstöd för en
    applikationsprogramvara görs i två steg.

      * Internationalisering (I18N): Att göra en programvara
        potentiellt hanterbar för flera lokala språk.
   
      * Lokalisering (L10N): Att få en programvara att hantera en
        specifik lokal.

    Tips

    Det finns 17, 18 eller 10 bokstäver mellan ”m” och ”n”, ”i” och
    ”n” eller ’l’ och ”n” i flerspråkighet, internationalisering och
    lokalisering, vilket motsvarar M17N, I18N och L10N. Se
    Internationalisering och lokalisering för mer information.

8.1. Lokalen

    Beteendet hos program som stöder internationalisering
    konfigureras av miljövariabeln "$LANG" för att stödja
    lokalisering. För att libc-biblioteket faktiskt ska stödja
    lokalberoende funktioner krävs att paketen locales eller
    locales-all installeras. Paketet locales måste initialiseras på
    rätt sätt.

    Om varken paketen locales eller locales-all är installerade
    förloras stödet för locale-funktioner och systemet använder
    meddelanden på US-engelska och hanterar data som ASCII. Detta
    beteende är på samma sätt som "$LANG" ställs in av "LANG=", "LANG
    =C" eller "LANG=POSIX".

    De moderna programvarorna som GNOME och KDE är flerspråkiga. De
    internationaliseras genom att de hanterar UTF-8-data och
    lokaliseras genom att de översatta meddelandena tillhandahålls
    via infrastrukturen gettext(1). Översatta meddelanden kan
    tillhandahållas som separata lokaliseringspaket.

    Debians nuvarande GUI-system för skrivbordet ställer normalt in
    locale under GUI-miljön som "LANG=xx_YY.UTF-8". Här är "xx" ISO
    639 språkkoder och "YY" ISO 3166 landskoder. Dessa värden ställs
    in av GUI-dialogen för skrivbordskonfiguration och ändrar
    programmets beteende. Se även Avsnitt 1.5.2, ”Variabeln "$LANG"”

8.1.1. Motivering för UTF-8-lokal

    Den enklaste representationen av textdata är ASCII som är
    tillräckligt för engelska och använder mindre än 127 tecken
    (representerbara med 7 bitar).

    Även vanlig engelsk text kan innehålla icke-ASCII-tecken, t.ex.
    finns inte vänster- och högercitationstecken i ASCII.

    “double quoted text” is not "double quoted ASCII"
    ‘single quoted text’ is not 'single quoted ASCII'

    För att kunna stödja fler tecken har många teckenuppsättningar
    och kodningssystem använts för att stödja många språk (se
    Tabell 11.2, ”Lista över kodningsvärden och deras användning”).

    Unicodes teckenuppsättning kan representera praktiskt taget alla
    tecken som människan känner till med 21 bitars kodpunktsintervall
    (dvs. 0 till 10FFFF i hexadecimal notation).

    Textkodningssystemet UTF-8 passar Unicode-kodpunkter i en
    förnuftig 8-bitars dataström som är mestadels kompatibel med
    ASCII-databehandlingssystemet. Detta gör UTF-8 till det moderna
    förstahandsvalet. UTF står för Unicode Transformation Format. När
    ASCII-data i klartext konverteras till UTF-8 har de exakt samma
    innehåll och storlek som den ursprungliga ASCII-datan. Så du
    förlorar ingenting genom att distribuera UTF-8 locale.

    Under UTF-8-läge med det kompatibla programmet kan du visa och
    redigera textdata på alla främmande språk så länge som nödvändiga
    teckensnitt och inmatningsmetoder är installerade och aktiverade.
    Till exempel under "LANG=fr_FR.UTF-8" locale kan gedit(1)
    (textredigerare för GNOME-skrivbordet) visa och redigera textdata
    med kinesiska tecken samtidigt som menyerna visas på franska.

    Tips

    Både den nya standarden ”en_US.UTF-8” och den gamla standarden
    ”C”/”POSIX” använder standardmeddelanden på amerikansk engelska,
    men det finns små skillnader i sorteringsordning etc. Om du vill
    hantera inte bara ASCII-tecken utan också alla UTF-8-kodade
    tecken på ett smidigt sätt och samtidigt behålla det gamla
    ”C”-beteendet, använd den icke-standardiserade
    ”C.UTF-8”-lokaliseringen på Debian.

    Notera

    Vissa program förbrukar mer minne efter stöd för I18N. Detta
    beror på att de är kodade för att använda UTF-32 (UCS4) internt
    för att stödja Unicode för hastighetsoptimering och förbrukar 4
    byte per varje ASCII-teckeninformation oberoende av vald locale.
    Återigen, du förlorar ingenting genom att distribuera UTF-8
    locale.

8.1.2. Omkonfigurering av lokal

    För att systemet ska kunna komma åt en viss locale måste
    locale-data sammanställas från locale-databasen.

    Paketet locales levereras inte med förkompilerade locale-data. Du
    måste konfigurera det som:

    # dpkg-reconfigure locales

    Denna process omfattar 2 steg.

     1. Välj alla nödvändiga lokala data som ska sammanställas till
        binär form. (Se till att inkludera minst en UTF-8-lokal)
   
     2. Ange det systemomfattande standardvärdet för locale genom att
        skapa "/etc/default/locale" för användning av PAM (se
        Avsnitt 4.5, ”PAM och NSS”).

    Det systemomfattande standardvärdet för locale som anges i "/etc/
    default/locale" kan åsidosättas av GUI-konfigurationen för
    GUI-applikationer.

    Notera

    Det faktiska traditionella kodningssystemet kan identifieras med
    "/usr/share/i18n/SUPPORTED". Således är "LANG=en_US" "LANG=
    en_US.ISO-8859-1".

    Paketet locales-all levereras med förkompilerade locale-data för
    alla locale-data. Eftersom det inte skapar "/etc/default/locale",
    kan du fortfarande behöva installera locales-paketet också.

    Tips

    Paketet locales i vissa Debian-distributioner kommer med
    förkompilerade locale-data för alla locale-data. Du måste
    installera både locales- och locales-all-paketen på Debian för
    att emulera en sådan systemmiljö.

8.1.3. Kodning av filnamn

    För datautbyte mellan plattformar (se Avsnitt 10.1.7, ”Flyttbar
    lagringsenhet”) kan du behöva montera vissa filsystem med
    särskilda kodningar. Exempelvis förutsätter mount(8) för
    vfat-filsystem CP437 om det används utan alternativ. Du måste
    ange ett explicit mount-alternativ för att använda UTF-8 eller
    CP932 för filnamn.

    Notera

    When auto-mounting a hot-pluggable USB flash drive under modern
    desktop environment such as GNOME, you may provide such mount
    option by right clicking the icon on the desktop, click "Drive"
    tab, click to expand "Setting", and entering "utf8" to "Mount
    options:". The next time this USB flash drive is mounted, mount
    with UTF-8 is enabled.

    Notera

    Om du uppgraderar systemet eller flyttar hårddiskar från ett
    äldre system som inte har UTF-8 kan filnamn med icke-ASCII-tecken
    vara kodade i historiska och föråldrade kodningar som ISO-8859-1
    eller eucJP. Ta hjälp av textkonverteringsverktyg för att
    konvertera dem till UTF-8. Se Avsnitt 11.1, ”Verktyg för
    konvertering av textdata”.

    Samba använder Unicode för nyare klienter (Windows NT, 200x, XP)
    men använder CP850 som standard för äldre klienter (DOS och
    Windows 9x/Me). Denna standard för äldre klienter kan ändras med
    hjälp av "dos charset" i filen "/etc/samba/smb.conf", t.ex. till
    CP932 för japanska.

8.1.4. Lokaliserade meddelanden och översatt dokumentation

    Översättningar finns för många av de textmeddelanden och dokument
    som visas i Debian-systemet, såsom felmeddelanden,
    standardprogramutdata, menyer och manualer. GNU gettext(1)
    command tool chain används som backend-verktyg för de flesta
    översättningsaktiviteter.

    Under "Tasks" → "Localization" tillhandahåller aptitude(8) en
    omfattande lista över användbara binära paket som lägger till
    lokaliserade meddelanden i program och tillhandahåller översatt
    dokumentation.

    Du kan t.ex. få det lokaliserade meddelandet för manpage genom
    att installera paketet manpages-LANG. Om du vill läsa den
    italienskspråkiga manpagesidan för programnamn från "/usr/share/
    man/it/", gör du så här.

    LANG=it_IT.UTF-8 man programname

    GNU gettext kan hantera en prioriterad lista över
    översättningsspråk med miljövariabeln $LANGUAGE. Till exempel:

     $ export LANGUAGE="pt:pt_BR:es:it:fr"

    För mer information, se info gettext och läs avsnittet "Variabeln
    LANGUAGE".

8.1.5. Effekter av lokal

    Sorteringsordningen för tecken med sort(1) och ls(1) påverkas av
    lokal. Export av LANG=en_US.UTF-8 sorterar i ordlistan A->a->B->
    b...->Z->z ordning, medan export av LANG=C.UTF-8 sorterar i ASCII
    binär A->B->...->Z->a->b...ordning.

    Datumformatet i ls(1) påverkas av språkvalet (se Avsnitt 9.3.4,
    ”Anpassad visning av tid och datum”).

    Datumformatet i date(1) påverkas av språkvalet. Ett exempel:

     $ unset LC_ALL
     $ LANG=en_US.UTF-8 date
    Thu Dec 24 08:30:00 PM JST 2023
     $ LANG=en_GB.UTF-8 date
    Thu 24 Dec 20:30:10 JST 2023
     $ LANG=es_ES.UTF-8 date
    jue 24 dic 2023 20:30:20 JST
     $ LC_TIME=en_DK.UTF-8 date
    2023-12-24T20:30:30 JST

    Interpunktionerna för siffror är olika i olika länder. Till
    exempel, på engelska visas ett tusen komma ett som "1,000.1"
    medan det på tyska visas som "1.000,1". Du kan se den här
    skillnaden i kalkylbladsprogram.

    Varje detaljfunktion i miljövariabeln "$LANG" kan åsidosättas
    genom att ställa in variablerna "$LC_*". Dessa miljövariabler kan
    åsidosättas igen genom att ställa in variabeln "$LC_ALL". Se
    locale(7) manpage för mer information. Om du inte har starka skäl
    att skapa komplicerade konfigurationer bör du undvika dem och
    endast använda variabeln "$LANG" som är inställd på en av
    UTF-8-domänerna.

8.2. Inmatning med tangentbordet

    The keyboard system can be configured at different layers of the
    system.

      * Linux kernel: keyboard(5)

      * X server: setxkbmap(1), xkeyboard-config(5), environment
        variable XMODIFIERS
   
      * GUI desktop environment: Input Method framework: ibus, fcitx5

      * Application: environment variables to set its input source:
        GTK_IM_MODULE, QT_IM_MODULE, QT_IM_MODULES, ...

    Input method framework (IM) consists of:

      * Input method engine (IME): Actual input method

      * Configuration: Handles the configuration for IBus and other
        services such as IME plugins

      * Panel: User interface such as language bar and candidate
        selection table

    Multilingual input to the application is processed roughly as:

    Keyboard        UI panel    Configuration          Application
    |                  ^ |           |                        ^  ^
    v                  | v           v                        |  |
    Linux kernel -> Input method engine (IME) -+-> Gtk, Qt ---+  |
                       | ^                     |                 |
                       | |                     +-> X11, Wayland -+
                       v |
                    IME plugin (ibus-mozc, ...)

8.2.1. Tangentbordsinmatning för Linux-konsolen och X Window

    The Debian system can be configured to work with many
    international keyboard arrangements using the
    keyboard-configuration package.

    # dpkg-reconfigure keyboard-configuration

    For the Linux console and the X Window system, this updates
    configuration parameters in "/etc/default/keyboard". Many
    non-ASCII characters including accented characters used by many
    European languages can be made available with dead key, AltGr
    key, and compose key.

    Notera

    Om ibus är aktivt kan din klassiska X-tangentbordskonfiguration
    med setxkbmap åsidosättas av ibus även i en klassisk X-baserad
    skrivbordsmiljö. Du kan inaktivera installerad ibus genom att
    använda im-config för att ställa in inmatningsmetod till "None".
    För mer information, se Debian Wiki om tangentbord.

8.2.2. Tangentbordsinmatning för Wayland

    Unlike the X Window protocol, the Wayland core protocol doesn't
    even support the input of accented characters. Popular Wayland
    Compositors, such as Mutter for GNOME or KWin for KDE, implement
    extension protocols such as the text-input-unstable-v3 for the
    text input (see "current Wayland protocols and their support
    status").

    The text-input-unstable-v3 protocol works well with Input methods
    for Wayland (see "Wayland input method project post-mortem").

      * Most GUI applications are built with GUI libraries such as
        GTK or Qt which support this text-input-unstable-v3.

      * Popular Input Method Engines (IME), such as IBus or Fcitx
        (version 5), can work with this text-input-unstable-v3.
   
      * IMEs support text input for many languages with plugins.

      * Recent IMEs integrate "X Keyboard Extension (XKB)"
        functionalities such as setxkbmap previously provided by the
        X Window to support accented character text input for
        European languages for Wayland.

8.2.3. Stöd för inmatningsmetod med IBus

    For GNOME, "ibus" is the default IME which is automatically
    installed via its package dependency.

      * Most multilingualized keyboard input features can be
        configured from "GNOME Settings" or "GNOME Tweaks".

      * Some multilingualized keyboard input features may need to be
        configured from the ibus-setup(1) command.

      * The emoji keyboard input is available by typing "SUPER-."
        (Simultaneously type Windows and period keys) followed by a
        keyword for each emoji and SPACE-keys.

    The list of IBus and its plugin packages are the following.

    Tabell 8.1. List of IBus and its plugin packages

    +---------------------------------------------------------------+
    |     paket     | popcon |storlek|       lokal som stöds        |
    |---------------+--------+-------+------------------------------|
    |ibus           |V:210,  |1828   |ramverk för inmatningsmetod   |
    |               |I:250   |       |med hjälp av dbus             |
    |---------------+--------+-------+------------------------------|
    |ibus-mozc      |V:2.2,  |979    |Japanska                      |
    |               |I:3.9   |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-anthy     |V:0.5,  |8958   |Japanska                      |
    |               |I:1.2   |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-skk       |V:0.05, |242    |Japanska                      |
    |               |I:0.16  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-kkc       |V:0.04, |206    |Japanska                      |
    |               |I:0.17  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-libpinyin |V:1.1,  |123    |Kinesiska (för zh_CN)         |
    |               |I:5.1   |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-chewing   |V:0.16, |298    |Chinese (for zh_TW)           |
    |               |I:0.84  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-libzhuyin |V:0.00, |41021  |Chinese (for zh_TW)           |
    |               |I:0.12  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-rime      |V:0.26, |76     |Chinese (for zh_CN/zh_TW)     |
    |               |I:0.49  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-cangjie   |V:0.01, |235    |Chinese (for zh_HK)           |
    |               |I:0.11  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-hangul    |V:0.3,  |261    |Koreanska                     |
    |               |I:2.0   |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-libthai   |V:0.00, |84     |Thai                          |
    |               |I:0.04  |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-table-thai|I:0.05  |59     |Thai                          |
    |---------------+--------+-------+------------------------------|
    |ibus-unikey    |V:0.18, |286    |Vietnamesisk                  |
    |               |I:0.38  |       |                              |
    |---------------+--------+-------+------------------------------|
    |keyman         |V:0.00, |507    |Multilingual: Keyman plugin   |
    |               |I:0.12  |       |for over 2000 languages       |
    |---------------+--------+-------+------------------------------|
    |ibus-table     |V:0.1,  |2364   |table plugin for IBus         |
    |               |I:1.0   |       |                              |
    |---------------+--------+-------+------------------------------|
    |ibus-m17n      |V:0.2,  |373    |Flerspråkigt: indiska,        |
    |               |I:1.9   |       |arabiska och andra            |
    +---------------------------------------------------------------+


8.2.4. The input method support with Fcitx

    The Fcitx (version 5) input method framework is popular with
    Chinese users and compatible with "ibus".

    The list of "fcitx5" and its plugin packages are the following.

    Tabell 8.2. List of Fcitx5 and its plugin packages

    +---------------------------------------------------------------+
    |          paket           |popcon |storlek|  lokal som stöds   |
    |--------------------------+-------+-------+--------------------|
    |                          |V:8,   |       |input method        |
    |fcitx5                    |I:12   |761    |framework compatible|
    |                          |       |       |with "ibus"         |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-mozc               |V:1.1, |1265   |Japanska            |
    |                          |I:1.8  |       |                    |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-anthy              |V:0.07,|808    |Japanska            |
    |                          |I:0.21 |       |                    |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-skk                |V:0.06,|369    |Japanska            |
    |                          |I:0.17 |       |                    |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-kkc                |V:0.01,|416    |Japanska            |
    |                          |I:0.07 |       |                    |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-chinese-addons     |I:9.0  |17     |Chinese (metapackage|
    |                          |       |       |for zh_*)           |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-pinyin             |V:3.9, |996    |Kinesiska (för      |
    |                          |I:9.4  |       |zh_CN)              |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-chewing            |V:0.24,|217    |Chinese (for zh_TW) |
    |                          |I:0.93 |       |                    |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-zhuyin             |I:0.07 |41051  |Chinese (for zh_TW) |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-rime               |V:0.45,|371    |Chinese (for zh_CN/ |
    |                          |I:0.90 |       |zh_TW)              |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-table-cangjie-large|I:0.12 |1292   |Chinese (for zh_HK) |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-hangul             |V:0.11,|235    |Koreanska           |
    |                          |I:0.25 |       |                    |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-libthai            |I:0.04 |119    |Thai                |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-table-thai         |I:0.07 |34     |Thai                |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-unikey             |V:0.09,|588    |Vietnamesisk        |
    |                          |I:0.20 |       |                    |
    |--------------------------+-------+-------+--------------------|
    |                          |V:0.16,|       |Flerspråkigt:       |
    |fcitx5-m17n               |I:0.58 |259    |indiska, arabiska   |
    |                          |       |       |och andra           |
    |--------------------------+-------+-------+--------------------|
    |fcitx5-table              |V:0.3, |417    |table plugin for    |
    |                          |I:9.3  |       |fcitx5              |
    |--------------------------+-------+-------+--------------------|
    |                          |V:0.04,|       |Multilingual: Keyman|
    |fcitx5-keyman             |I:0.05 |235    |plugin for over 2000|
    |                          |       |       |languages           |
    +---------------------------------------------------------------+


8.2.5. Ett exempel för japanska

    I find the Japanese input method started under English
    environment ("en_US.UTF-8") very useful. Here is how I did this
    with IBus:

     1. Install the Japanese input tool package ibus-mozc (or
        ibus-anthy).

     2.
          + Generic: Execute ibus-setup(1) → select "Input Method" →
            click "Add" → "Japanese" → "Mozc (or Anthy)" → click
            "Add"

          + GNOME: Select "Settings" → "Keyboard" → "Input Sources" →
            click "+" in "Input Sources" → "Japanese" → "Mozc (or
            Anthy)" → click "Add"

     3. Du kan välja hur många ingångskällor som helst.

     4. Logga in på nytt på användarens konto.

     5. Konfigurera varje ingångskälla genom att högerklicka på
        ikonen i GUI:s verktygsfält.

     6. Växla mellan installerade ingångskällor med SUPER-SPACE.
        (SUPER är normalt Windows-tangenten)

    Tips

    Om du vill ha tillgång till en tangentbordsmiljö med enbart
    alfabet med det fysiska japanska tangentbordet där shift-2 har "
    ( dubbla citattecken) ingraverat, väljer du "Japanese" i
    proceduren ovan. Du kan skriva in japanska med hjälp av "Japanese
    mozc (or anthy)" med det fysiska "US"-tangentbordet där shift-2
    har @ (at-mark) ingraverat.

      * For Wayland:

          + The im-config package does nothing and can be removed
            safely.

          + You probably don't need to set environment variables
            except for the backward compatibility etc.

          + If you need to set environment variables, create a file
            such as "~/.config/environment.d/50-input-method.conf "to
            set them.

      * For X Window:
   
          + Install the im-config package.

          + GUI-menyalternativet för im-config(8) är "Input method".

          + Alternativt kan du köra "im-config" från användarens
            shell.

          + im-config(8) beter sig olika om kommandot körs från root
            eller inte.

          + im-config(8) aktiverar den bästa inmatningsmetoden i
            systemet som standard utan några åtgärder från
            användaren.

8.3. Displayens utgång

    Linux-konsolen kan bara visa ett begränsat antal tecken. (Du
    måste använda ett speciellt terminalprogram som jfbterm(1) för
    att visa icke-europeiska språk på en konsol som inte är en
    GUI-konsol)

    GUI-miljön (Kapitel 7, GUI-system) kan visa alla tecken i UTF-8
    så länge som nödvändiga teckensnitt är installerade och
    aktiverade. (Kodningen av de ursprungliga teckensnittsdata tas om
    hand och är transparent för användaren)

8.3.1. Terminalens konfiguration

    The Debian system can be configured to work with many
    international console arrangements using the console-setup
    package.

    # dpkg-reconfigure console-setup

    For the Linux console and the X Window system, this updates
    configuration parameters in "/etc/default/console-setup" to
    display many non-ASCII characters including accented characters
    used by many European languages can be made available.

    Det finns flera komponenter för att konfigurera teckenkonsol- och
    ncurses(3)-systemfunktioner.

      * Filen "/etc/terminfo/*/*"(terminfo(5))

      * Miljövariabeln "$TERM"(term(7))

      * setterm(1), stty(1), tic(1) och toe(1)

    Om terminfo-posten för xterm inte fungerar med en xterm som inte
    är från Debian, ändra din terminaltyp, "$TERM", från "xterm" till
    en av de funktionsbegränsade versionerna som "xterm-r6" när du
    loggar in på ett Debiansystem på distans. Se "/usr/share/doc/
    libncurses5/FAQ" för mer information. "dumb" är den minsta
    gemensamma nämnaren för "$TERM".

8.3.2. Östasiatiska tvetydiga tecken bredd tecken

    Under the East Asian locale, the box drawing, Greek, and Cyrillic
    characters may be displayed wider than your desired width to
    cause the unaligned terminal output (see Unicode Standard Annex #
    11, 4.2 Ambiguous Characters).

    Du kan komma runt detta problem:

      * gnome-terminal: Inställningar → Profiler → Profilnamn →
        Kompatibilitet → Tvetydiga breda tecken → Smala

      * ncurses: Ställ in miljöexport NCURSES_NO_UTF8_ACS=0.

Kapitel 9. Tips för systemet

    Här beskriver jag grundläggande tips för att konfigurera och
    hantera system, mestadels från konsolen.

9.1. Tips för konsolen

    Det finns några verktygsprogram som hjälper dig med
    konsolaktiviteterna.

    Tabell 9.1. Lista över program för att stödja konsolaktiviteter

    +---------------------------------------------------------------+
    | paket  |popcon |storlek|             beskrivning              |
    |--------+-------+-------+--------------------------------------|
    |mc      |V:39,  |1590   |Se Avsnitt 1.3, ”Midnight Commander   |
    |        |I:179  |       |(MC)”                                 |
    |--------+-------+-------+--------------------------------------|
    |bsdutils|V:445, |338    |script(1)-kommando för att spela in en|
    |        |I:1000 |       |terminalsession                       |
    |--------+-------+-------+--------------------------------------|
    |screen  |V:52,  |991    |terminalmultiplexer med VT100/        |
    |        |I:198  |       |ANSI-terminalemulering                |
    |--------+-------+-------+--------------------------------------|
    |tmux    |V:100, |1391   |terminal multiplexer alternativ       |
    |        |I:164  |       |(Använd "Control-B" istället)         |
    |--------+-------+-------+--------------------------------------|
    |        |V:15,  |       |snabb rekursiv strängsökning i        |
    |ripgrep |I:46   |5284   |källkodsträdet med automatisk         |
    |        |       |       |filtrering                            |
    |--------+-------+-------+--------------------------------------|
    |fzf     |V:8,   |5064   |fuzzy text sökare                     |
    |        |I:34   |       |                                      |
    |--------+-------+-------+--------------------------------------|
    |fzy     |V:0.07,|59     |fuzzy text sökare                     |
    |        |I:0.38 |       |                                      |
    |--------+-------+-------+--------------------------------------|
    |rlwrap  |V:1,   |328    |readline-funktion                     |
    |        |I:11   |       |kommandoradsinklädnad                 |
    |--------+-------+-------+--------------------------------------|
    |ledit   |V:0.4, |375    |readline-funktion                     |
    |        |I:7.8  |       |kommandoradsinklädnad                 |
    |--------+-------+-------+--------------------------------------|
    |rlfe    |V:0.02,|45     |readline-funktion                     |
    |        |I:0.50 |       |kommandoradsinklädnad                 |
    +---------------------------------------------------------------+


9.1.1. Spela in skalaktiviteterna på ett rent sätt

    En enkel användning av script(1) (se Avsnitt 1.4.9, ”Registrering
    av skalets aktiviteter”) för att registrera aktiviteten i skalet
    ger en fil med kontrolltecken. Detta kan undvikas genom att
    använda col(1) på följande sätt.

    $ script
    Script started, file is typescript

    Gör vad som helst ... och tryck på Ctrl-D för att avsluta
    skriptet.

    $ col -bx < typescript > cleanedfile
    $ vim cleanedfile

    Det finns alternativa metoder för att registrera
    skalaktiviteterna:

      * Använd tee (kan användas under startprocessen i initramfs):

        $ sh -i 2>&1 | tee typescript

      * Använd gnome-terminal med utökad radbuffert för scrollback.

      * Använd skärmen med "^A H" (se Avsnitt 9.1.2,
        ”Skärmprogrammet”) för att spela in konsolen.
   
      * Använd vim med ":terminal" för att gå till terminalläget.
        Använd "Ctrl-W N" för att gå från terminalläge till
        normalläge. Använd ":w typescript" för att skriva bufferten
        till en fil.

      * Använd emacs med "M-xshell", "M-x eshell" eller "M-xterm" för
        att komma till inspelningskonsolen. Använd "C-x C-w" för att
        skriva bufferten till en fil.

9.1.2. Skärmprogrammet

    screen(1) gör inte bara att ett terminalfönster kan arbeta med
    flera processer, utan gör också att fjärrskalprocessen kan
    överleva avbrutna anslutningar. Här är ett typiskt
    användningsscenario för screen(1).

     1. Du loggar in på en fjärrmaskin.

     2. Du startar skärmen på en enda konsol.

     3. Du kör flera program i skärmfönster som skapats med ^A c
        ("Control-A" följt av "c").

     4. Du växlar mellan de olika fönstren med ^A n ("Control-A"
        följt av "n").

     5. Plötsligt måste du lämna din terminal, men du vill inte
        förlora ditt aktiva arbete genom att behålla anslutningen.

     6. Du kan ta bort skärmsessionen på valfritt sätt.
   
          + Brutalt koppla bort din nätverksanslutning

          + Skriv ^A d ("Control-A" följt av "d") och logga ut
            manuellt från fjärranslutningen

          + Skriv ^A DD ("Control-A" följt av "DD") för att få
            skärmen att lossna och logga ut dig

     7. Du loggar in igen på samma fjärrmaskin (även från en annan
        terminal).

     8. Du startar screen som "screen -r".

     9. screen återför på ett magiskt sätt alla tidigare skärmfönster
        med alla aktivt pågående program.

    Tips

    Du kan spara anslutningsavgifter med screen för
    nätverksanslutningar med mätning, t.ex. uppringda och
    paketanslutna, eftersom du kan låta en process vara aktiv medan
    du är frånkopplad och sedan koppla upp den igen senare när du
    ansluter igen.

    I en skärmsession skickas alla tangentbordsinmatningar till det
    aktuella fönstret utom kommandotangenttryckningen. Alla
    kommandotangenttryckningar på skärmen anges genom att skriva ^A
    ("Control-A") plus en enda tangent [plus eventuella parametrar].
    Här är några som är viktiga att komma ihåg.

    Tabell 9.2. Lista över tangentbindningar för skärm

    +---------------------------------------------------------------+
    |nyckelbindning|                   betydelse                    |
    |--------------+------------------------------------------------|
    |^A ?          |visa en hjälpskärm (visa tangentbindningar)     |
    |--------------+------------------------------------------------|
    |^A c          |skapa ett nytt fönster och växla till det       |
    |--------------+------------------------------------------------|
    |^A n          |gå till nästa fönster                           |
    |--------------+------------------------------------------------|
    |^A p          |gå till föregående fönster                      |
    |--------------+------------------------------------------------|
    |^A 0          |gå till fönster nummer 0                        |
    |--------------+------------------------------------------------|
    |^A 1          |gå till fönster nummer 1                        |
    |--------------+------------------------------------------------|
    |^A w          |visa en lista över fönster                      |
    |--------------+------------------------------------------------|
    |^A a          |skicka ett Ctrl-A till aktuellt fönster som     |
    |              |tangentbordsinmatning                           |
    |--------------+------------------------------------------------|
    |^A h          |skriva en papperskopia av det aktuella fönstret |
    |              |till filen                                      |
    |--------------+------------------------------------------------|
    |^A H          |påbörja/avsluta loggning av aktuellt fönster    |
    |              |till fil                                        |
    |--------------+------------------------------------------------|
    |^A ^X         |låsa terminalen (lösenordsskyddad)              |
    |--------------+------------------------------------------------|
    |^A d          |koppla loss skärmsessionen från terminalen      |
    |--------------+------------------------------------------------|
    |^A DD         |koppla bort skärmsessionen och logga ut         |
    +---------------------------------------------------------------+


    Se screen(1) för mer information.

    Se tmux(1) för funktionaliteten hos det alternativa kommandot.

9.1.3. Navigera runt i kataloger

    I Avsnitt 1.4.2, ”Anpassa bash” beskrivs 2 tips för att snabbt
    kunna navigera i kataloger: $CDPATH och mc.

    Om du använder textfilterprogrammet fuzzy kan du slippa skriva
    den exakta sökvägen. För fzf, inkludera följande i ~/.bashrc.

    FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
    if [ -f $FZF_KEYBINDINGS_PATH ]; then
      . $FZF_KEYBINDINGS_PATH
    fi

    Till exempel:

      * Du kan hoppa till en mycket djup underkatalog med minimal
        ansträngning. Du skriver först "cd **" och trycker på Tab.
        Sedan får du en fråga om möjliga sökvägar. Om du skriver in
        delsträngar av sökvägen, t.ex. s/d/b foo, begränsas antalet
        sökvägar. Du väljer den sökväg som ska användas av cd med
        hjälp av markör- och returtangenterna.
   
      * Du kan välja ett kommando från kommandohistoriken på ett mer
        effektivt sätt med minimal ansträngning. Du trycker på Ctrl-R
        vid kommandotolken. Då kommer du att uppmanas med
        kandidatkommandon. Om du skriver in delar av
        kommandosträngar, t.ex. vim d, begränsas antalet kandidater.
        Du väljer det som ska användas med markör- och
        returtangenterna.

9.1.4. Omslag för läslinje

    Vissa kommandon, t.ex. /usr/bin/dash, som saknar möjlighet att
    redigera kommandoradshistorik kan lägga till sådan funktionalitet
    på ett transparent sätt genom att köra under rlwrap eller dess
    motsvarigheter.

     $ rlwrap dash -i

    Detta ger en bekväm plattform för att testa subtila punkter för
    dash med vänlig bash-liknande miljö.

9.1.5. Skanna källkodsträdet

    Kommandot rg(1) i paketet ripgrep erbjuder ett snabbare
    alternativ till kommandot grep(1) för att skanna källkodsträdet
    för typiska situationer. Det drar nytta av moderna flerkärniga
    processorer och tillämpar automatiskt rimliga filter för att
    hoppa över vissa filer.

9.2. Anpassa vim

    När du har lärt dig grunderna i vim(1) via Avsnitt 1.4.8,
    ”Använda vim”, läs Bram Moolenaars"Seven habits of effective text
    editing (2000)" för att förstå hur vim ska användas.

9.2.1. Anpassa vim med interna funktioner

    Beteendet hos vim kan ändras avsevärt genom att aktivera dess
    interna funktioner genom Ex-mode-kommandon som "set ..." för att
    ställa in vim-alternativ.

    Dessa Ex-mode-kommandon kan inkluderas i användarens vimrc-fil,
    traditionell "~/.vimrc" eller git-vänlig "~/.vim/vimrc". Här är
    ett mycket enkelt exempel ^[2]:

    """ Generic baseline Vim and Neovim configuration (~/.vimrc)
    """   - For NeoVim, use "nvim -u ~/.vimrc [filename]"
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    let mapleader = ' '             " :h mapleader
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    set nocompatible                " :h 'cp -- sensible (n)vim mode
    syntax on                       " :h :syn-on
    filetype plugin indent on       " :h :filetype-overview
    set encoding=utf-8              " :h 'enc (default: latin1) -- sensible encoding
    """ current vim option value can be verified by :set encoding?
    set backspace=indent,eol,start  " :h 'bs (default: nobs) -- sensible BS
    set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
    set listchars=eol:¶,tab:⇄\ ,extends:↦,precedes:↤,nbsp:␣
    set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
    """ Pick "colorscheme" from blue darkblue default delek desert elflord evening
    """ habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
    """ shine slate torte zellner
    colorscheme industry
    """ don't pick "colorscheme" as "default" which may kill SpellUnderline settings
    set scrolloff=5                 " :h 'scr -- show 5 lines around cursor
    set laststatus=2                " :h 'ls (default 1)  k
    """ boolean options can be unset by prefixing "no"
    set ignorecase                  " :h 'ic
    set smartcase                   " :h 'scs
    set autoindent                  " :h 'ai
    set smartindent                 " :h 'si
    set nowrap                      " :h 'wrap
    "set list                        " :h 'list (default nolist)
    set noerrorbells                " :h 'eb
    set novisualbell                " :h 'vb
    set t_vb=                       " :h 't_vb -- termcap visual bell
    set spell                       " :h 'spell
    set spelllang=en_us,cjk         " :h 'spl -- english spell, ignore CJK
    set clipboard=unnamedplus       " :h 'cb -- cut/copy/paste with other app
    set hidden                      " :h 'hid
    set autowrite                   " :h 'aw
    set timeoutlen=300              " :h 'tm

    Keymapen för vim kan ändras i användarens vimrc-fil. T.ex:

    Observera
   
    Försök inte att ändra standardtangentbindningarna utan mycket
    goda skäl.

    """ Popular mappings (imitating LazyVim etc.)
    """ Window moves without using CTRL-W which is dangerous in INSERT mode
    nnoremap <C-H> <C-W>h
    nnoremap <C-J> <C-W>j
    nnoremap <C-K> <C-W>k
    silent! nnoremap <C-L> <C-W>l
    """ Window resize
    nnoremap <C-LEFT> <CMD>vertical resize -2<CR>
    nnoremap <C-DOWN> <CMD>resize -2<CR>
    nnoremap <C-UP> <CMD>resize +2<CR>
    nnoremap <C-RIGHT> <CMD>vertical resize +2<CR>
    """ Clear hlsearch with <ESC> (<C-L> is mapped as above)
    nnoremap <ESC> <CMD>noh<CR><ESC>
    inoremap <ESC> <CMD>noh<CR><ESC>
    """ center after jump next
    nnoremap n nzz
    nnoremap N Nzz
    """ fast "jk" to get out of INSERT mode (<ESC>)
    inoremap  jk <CMD>noh<CR><ESC>
    """ fast "<ESC><ESC>" to get out of TERM mode (CTRL-\ CTRL-N)
    tnoremap <ESC><ESC> <C-\><C-N>
    """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N)
    tnoremap jk <C-\><C-N>
    """ previous/next trouble/quickfix item
    nnoremap [q <CMD>cprevious<CR>
    nnoremap ]q <CMD>cnext<CR>
    """ buffers
    nnoremap <S-H> <CMD>bprevious<CR>
    nnoremap <S-L> <CMD>bnext<CR>
    nnoremap [b <CMD>bprevious<CR>
    nnoremap ]b <CMD>bnext<CR>
    """ Add undo break-points
    inoremap  , ,<C-G>u
    inoremap  . .<C-G>u
    inoremap  ; ;<C-G>u
    """ save file
    inoremap <C-S> <CMD>w<CR><ESC>
    xnoremap <C-S> <CMD>w<CR><ESC>
    nnoremap <C-S> <CMD>w<CR><ESC>
    snoremap <C-S> <CMD>w<CR><ESC>
    """ better indenting
    vnoremap < <gv
    vnoremap > >gv
    """ terminal (Somehow under Linux, <C-/> becomes <C-_> in Vim)
    nnoremap <C-_> <CMD>terminal<CR>
    "nnoremap <C-/> <CMD>terminal<CR>
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    if ! has('nvim')
    """ Toggle paste mode with <SPACE>p for Vim (no need for Nvim)
    set pastetoggle=<leader>p
    """ nvim default mappings for Vim.  See :h default-mappings in nvim
    """ copy to EOL (no delete) like D for d
    noremap Y y$
    """ sets a new undo point before deleting
    inoremap <C-U> <C-G>u<C-U>
    inoremap <C-W> <C-G>u<C-W>
    """ <C-L> is re-purposed as above
    """ execute the previous macro recorded with Q
    nnoremap Q @@
    """ repeat last substitute and *KEEP* flags
    nnoremap & :&&<CR>
    """ search visual selected string for visual mode
    xnoremap * y/\V<C-R>"<CR>
    xnoremap # y?\V<C-R>"<CR>
    endif

    För att ovanstående tangentbindningar ska fungera korrekt måste
    terminalprogrammet konfigureras så att det genererar "ASCII DEL"
    för Backspace-tangenten och "Escape-sekvens" för
    Delete-tangenten.

    Andra diverse konfigurationer kan ändras i användarens vimrc-fil.
    T.ex:

    """ Use faster 'rg' (ripgrep package) for :grep
    if executable("rg")
      set grepprg=rg\ --vimgrep\ --smart-case
      set grepformat=%f:%l:%c:%m
    endif
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ Retain last cursor position :h '"
    augroup RetainLastCursorPosition
      autocmd!
      autocmd BufReadPost *
        \ if line("'\"") > 0 && line ("'\"") <= line("$") |
        \   exe "normal! g'\"" |
        \ endif
    augroup END
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ Force to use underline for spell check results
    augroup SpellUnderline
      autocmd!
      autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
    augroup END
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ highlight tailing spaces except when typing as red (set after colorscheme)
    highlight TailingWhitespaces ctermbg=red guibg=red
    """ \s\+     1 or more whitespace character: <Space> and <Tab>
    """ \%#\@<!  Matches with zero width if the cursor position does NOT match.
    match TailingWhitespaces /\s\+\%#\@<!$/

9.2.2. Anpassa vim med externa paket

    Intressanta externa plugin-paket kan hittas:

      * Vim - den allestädes närvarande textredigeraren -- Den
        officiella uppströmswebbplatsen för Vim och vim-skript
   
      * VimAwsome -- En lista över Vim-plugins

      * vim-scripts -- Debian-paket: en samling vim-skript

    Plugin-paket i paketet vim-scripts kan aktiveras med hjälp av
    användarens vimrc-fil. T.ex:

    packadd! secure-modelines
    packadd! winmanager
    " IDE-like UI for files and buffers with <space>w
    nnoremap <leader>w         :WMToggle<CR>

    Det nya inbyggda Vim-paketsystemet fungerar fint med "git" och
    "git submodule". Ett sådant exempel på konfiguration finns i mitt
    git-arkiv: dot-vim. Detta gör i huvudsak:

      * Genom att använda "git" och "git submodule" kan de senaste
        externa paketen, till exempel "namn", placeras i ~/.vim/pack/
        */opt/name och liknande.

      * Genom att lägga till namnraden:packadd! i användarens
        vimrc-fil placeras dessa paket på runtimepath.

      * Vim laddar dessa paket på runtimepath under initialiseringen.

      * I slutet av initialiseringen uppdateras taggarna för de
        installerade dokumenten med "helptags ALL".

    För mer information, starta vim med ”vim --startuptime
    vimstart.log” för att kontrollera den faktiska
    exekveringssekvensen och tiden som åtgår för varje steg.

    Det är ganska förvirrande att se alltför många sätt^[3] att
    hantera och ladda dessa externa paket till vim. Att kontrollera
    den ursprungliga informationen är det bästa botemedlet.

    Tabell 9.3. Information om initialiseringen av vim

    +---------------------------------------------------------------+
    |tangenttryckningar|                information                 |
    |------------------+--------------------------------------------|
    |:help package     |förklaring av paketmekanismen vim           |
    |------------------+--------------------------------------------|
    |:help runtimepath |förklaring av mekanismen för runtimepath    |
    |------------------+--------------------------------------------|
    |:version          |interna stater inklusive kandidater för     |
    |                  |vimrc-filen                                 |
    |------------------+--------------------------------------------|
    |:echo $VIM        |miljövariabeln "$VIM" som används för att   |
    |                  |hitta vimrc-filen                           |
    |------------------+--------------------------------------------|
    |:set runtimepath? |lista över kataloger som ska genomsökas     |
    |                  |efter alla runtime-stödfiler                |
    |------------------+--------------------------------------------|
    |                  |miljövariabeln "$VIMRUNTIME" som används för|
    |:echo $VIMRUNTIME |att hitta olika systemtillhandahållna       |
    |                  |runtime-stödfiler                           |
    +---------------------------------------------------------------+


9.3. Registrering och presentation av data

9.3.1. Loggdaemon

    Många traditionella program registrerar sina aktiviteter i
    textfilformat under katalogen "/var/log/".

    logrotate(8) används för att förenkla administrationen av
    loggfiler på ett system som genererar många loggfiler.

    Många nya program registrerar sina aktiviteter i det binära
    filformatet med hjälp av systemd-journald(8) Journaltjänst under
    katalogen "/var/log/journal".

    Du kan logga data till journalen systemd-journald(8) från ett
    skalskript med kommandot systemd-cat(1).

    Se Avsnitt 3.5, ”Systemets meddelande” och Avsnitt 3.4, ”Kärnans
    meddelande”.

9.3.2. Logganalysator

    Här är anmärkningsvärda logganalysatorer (
    "~Gsecurity::log-analyzer" i aptitude(8)).

    Tabell 9.4. Lista över systemlogganalysatorer

    +---------------------------------------------------------------+
    |  paket   | popcon |storlek|            beskrivning            |
    |----------+--------+-------+-----------------------------------|
    |fail2ban  |V:102,  |2191   |förbjuda IP-adresser som orsakar   |
    |          |I:113   |       |flera autentiseringsfel            |
    |----------+--------+-------+-----------------------------------|
    |logwatch  |V:9,    |2440   |logganalysator med snygg utdata    |
    |          |I:11    |       |skriven i Perl                     |
    |----------+--------+-------+-----------------------------------|
    |awstats   |V:5.3,  |6934   |kraftfull och funktionell          |
    |          |I:8.4   |       |analysator för webbserverloggar    |
    |----------+--------+-------+-----------------------------------|
    |analog    |V:3,    |3739   |logganalysator för webbserver      |
    |          |I:84    |       |                                   |
    |----------+--------+-------+-----------------------------------|
    |sarg      |V:0.71, |863    |generator för                      |
    |          |I:0.79  |       |bläckfiskanalysrapport             |
    |----------+--------+-------+-----------------------------------|
    |pflogsumm |V:1.5,  |173    |Postfix sammanfattning av          |
    |          |I:3.7   |       |loggposter                         |
    |----------+--------+-------+-----------------------------------|
    |fwlogwatch|V:0.12, |487    |analysator för brandväggsloggar    |
    |          |I:0.18  |       |                                   |
    |----------+--------+-------+-----------------------------------|
    |squidview |V:0.02, |224    |övervaka och analysera squid       |
    |          |I:0.43  |       |access.log-filer                   |
    |----------+--------+-------+-----------------------------------|
    |          |V:0.07, |       |loggfilsgranskare med              |
    |swatch    |I:0.31  |99     |regexp-matchning, markering och    |
    |          |        |       |krokar                             |
    |----------+--------+-------+-----------------------------------|
    |crm114    |V:0.06, |1371   |Kontrollerbart regex- och          |
    |          |I:0.33  |       |skräppostfilter (CRM114)           |
    |----------+--------+-------+-----------------------------------|
    |icmpinfo  |V:0.01, |42     |tolka ICMP-meddelanden             |
    |          |I:0.38  |       |                                   |
    +---------------------------------------------------------------+


    Notera

    CRM114 tillhandahåller språkinfrastruktur för att skriva 
    fuzzy-filter med TRE regex-biblioteket. Det används ofta som
    spamfilter men kan även användas som logganalysator.

9.3.3. Anpassad visning av textdata

    Även om pager-verktyg som more(1) och less(1) (se Avsnitt 1.4.5,
    ”Personsökaren”) och anpassade verktyg för markering och
    formatering (se Avsnitt 11.1.8, ”Markera och formatera data i
    klartext”) kan visa textdata på ett snyggt sätt, är generella
    editorer (se Avsnitt 1.4.6, ”Textredigeraren”) mest mångsidiga
    och anpassningsbara.

    Tips
   
    För vim(1) och dess alias view(1) i personsökarläget aktiverar
    ":set hls" markerad sökning.

9.3.4. Anpassad visning av tid och datum

    Standardformatet för visning av tid och datum med kommandot "ls
    -l" beror på locale (se Avsnitt 1.2.6, ”Tidsstämplar” för värde).
    Variabeln "$LANG" anges först och den kan åsidosättas av de
    exporterade miljövariablerna "$LC_TIME" eller "$LC_ALL".

    Det faktiska standardformatet för varje lokal beror på vilken
    version av standardbiblioteket för C ( paketet libc6 ) som
    används. D.v.s. olika versioner av Debian har olika
    standardformat. För isoformat, se ISO 8601.

    Om du verkligen vill anpassa detta visningsformat för tid och
    datum utöver locale, bör du ställa in tidsformatvärdet med
    argumentet " --time-style” eller med värdet ”$TIME_STYLE” (se ls
    (1), date(1), ”info coreutils ’ls invocation’").

    Tabell 9.5. Visa exempel på tid och datum för kommandot "ls -l"
    med värdet för tidstyp

    +---------------------------------------------------------------+
    |  tid stil   |      lokal      |   visning av tid och datum    |
    |    värde    |                 |                               |
    |-------------+-----------------+-------------------------------|
    |iso          |någon            |01-19 00:15                    |
    |-------------+-----------------+-------------------------------|
    |long-iso     |någon            |2009-01-19 00:15               |
    |-------------+-----------------+-------------------------------|
    |full-iso     |någon            |2009-01-19 00:15:16.000000000  |
    |             |                 |+0900                          |
    |-------------+-----------------+-------------------------------|
    |locale       |C                |Jan 19 00:15                   |
    |-------------+-----------------+-------------------------------|
    |locale       |en_US.UTF-8      |Jan 19 00:15                   |
    |-------------+-----------------+-------------------------------|
    |locale       |es_ES.UTF-8      |ene 19 00:15                   |
    |-------------+-----------------+-------------------------------|
    |+%d.%m.%y    |någon            |19.01.09 00:15                 |
    |%H:%M        |                 |                               |
    |-------------+-----------------+-------------------------------|
    |+%d.%b.%y    |C eller          |19.Jan.09 00:15                |
    |%H:%M        |en_US.UTF-8      |                               |
    |-------------+-----------------+-------------------------------|
    |+%d.%b.%y    |es_ES.UTF-8      |19.ene.09 00:15                |
    |%H:%M        |                 |                               |
    +---------------------------------------------------------------+


    Tips

    Du kan slippa skriva långa alternativ på kommandoraden med hjälp
    av kommandonas alias (se Avsnitt 1.5.9, ”Kommando alias”):

    alias ls='ls --time-style=+%d.%m.%y %H:%M'

9.3.5. Färgat skal eko

    Shell-eko till de flesta moderna terminaler kan färgläggas med
    hjälp av ANSI escape code (se "/usr/share/doc/xterm/
    ctlseqs.txt.gz").

    Försök till exempel med följande

    $ RED=$(printf "\x1b[31m")
    $ NORMAL=$(printf "\x1b[0m")
    $ REVERSE=$(printf "\x1b[7m")
    $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

9.3.6. Färgade kommandon

    Färgade kommandon är praktiska för att inspektera deras utdata i
    den interaktiva miljön. Jag inkluderar följande i min "~
    /.bashrc".

    if [ "$TERM" != "dumb" ]; then
        eval "`dircolors -b`"
        alias ls='ls --color=always'
        alias ll='ls --color=always -l'
        alias la='ls --color=always -A'
        alias less='less -R'
        alias ls='ls --color=always'
        alias grep='grep --color=always'
        alias egrep='egrep --color=always'
        alias fgrep='fgrep --color=always'
        alias zgrep='zgrep --color=always'
    else
        alias ll='ls -l'
        alias la='ls -A'
    fi

    Användningen av alias begränsar färgeffekterna till den
    interaktiva kommandoanvändningen. Det har en fördel jämfört med
    att exportera miljövariabeln "export GREP_OPTIONS='--color=auto'"
    eftersom färg kan ses under pager-program som less(1). Om du vill
    undertrycka färgen vid piping till andra program, använd "--color
    =auto" istället i exemplet ovan för "~/.bashrc".

    Tips
   
    Du kan stänga av dessa färgläggande alias i den interaktiva
    miljön genom att anropa shell med "TERM=dumb bash".

9.3.7. Registrering av redaktörsaktiviteter för komplexa upprepningar

    Du kan spela in redigeringsaktiviteterna för komplexa
    upprepningar.

    För Vim, enligt följande.

      * "qa": börja registrera skrivna tecken i ett namngivet
        register "a".

      * ... redaktörsverksamhet

      * "q": avsluta inspelning av skrivna tecken.

      * "@a": kör innehållet i register "a".

    För Emacs, enligt följande.

      * "C-x (": Börja definiera ett tangentbordsmakro.

      * ... redaktörsverksamhet
   
      * "C-x )": Avsluta definitionen av ett tangentbordsmakro.

      * "C-x e": Utför ett tangentbordsmakro.

9.3.8. Inspelning av grafikbilden för en X-applikation

    Det finns några olika sätt att spela in grafikbilden för ett
    X-program, inklusive en xterm-display.

    Tabell 9.6. Lista över grafiska bildmanipuleringsverktyg

    +---------------------------------------------------------------+
    |     paket      | popcon |storlek| skärm  |      kommando      |
    |----------------+--------+-------+--------+--------------------|
    |gnome-screenshot|V:12,   |1115   |Wayland |skärmdumpsprogram   |
    |                |I:99    |       |        |för GNOME           |
    |----------------+--------+-------+--------+--------------------|
    |flameshot       |V:7,    |3542   |Wayland |skärmdump ansökan på|
    |                |I:16    |       |        |steroid             |
    |----------------+--------+-------+--------+--------------------|
    |gimp            |V:41,   |32779  |Wayland |skärmdump i GUI-meny|
    |                |I:214   |       |+ X     |                    |
    |----------------+--------+-------+--------+--------------------|
    |x11-apps        |V:30,   |2461   |X       |xwd(1)              |
    |                |I:440   |       |        |                    |
    |----------------+--------+-------+--------+--------------------|
    |imagemagick     |V:7,    |81     |X       |import(1)           |
    |                |I:275   |       |        |                    |
    |----------------+--------+-------+--------+--------------------|
    |scrot           |V:4,    |144    |X       |scrot(1)            |
    |                |I:49    |       |        |                    |
    +---------------------------------------------------------------+


9.3.9. Registrering av ändringar i konfigurationsfiler

    Det finns specialiserade verktyg för att registrera ändringar i
    konfigurationsfiler med hjälp av DVCS och för att göra
    ögonblicksbilder av systemet på Btrfs.

    Tabell 9.7. Lista över paket som kan registrera
    konfigurationshistorik

    +---------------------------------------------------------------+
    |  paket  |popcon|storlek|             beskrivning              |
    |---------+------+-------+--------------------------------------|
    |         |V:23, |       |lagra konfigurationsfiler och deras   |
    |etckeeper|I:26  |157    |metadata med Git (standard), Mercurial|
    |         |      |       |eller GNU Bazaar                      |
    |---------+------+-------+--------------------------------------|
    |timeshift|V:8,  |4481   |verktyg för systemåterställning med   |
    |         |I:14  |       |hjälp av rsync eller BTRFS-snapshots  |
    |---------+------+-------+--------------------------------------|
    |snapper  |V:6.3,|2396   |Verktyg för hantering av              |
    |         |I:8.4 |       |ögonblicksbilder av Linux-filsystem   |
    +---------------------------------------------------------------+


    Du kan också tänka dig att använda det lokala skriptet
    Avsnitt 10.2.3, ”Tips för säkerhetskopiering”.

9.4. Övervakning, kontroll och start av programaktiviteter

    Programaktiviteter kan övervakas och styras med hjälp av
    specialiserade verktyg.

    Tabell 9.8. Förteckning över verktyg för övervakning och kontroll
    av programaktiviteter

    +---------------------------------------------------------------+
    |  paket  |popcon |storlek|             beskrivning             |
    |---------+-------+-------+-------------------------------------|
    |coreutils|V:910, |17994  |nice(1): kör ett program med ändrad  |
    |         |I:1000 |       |schemaläggningsprioritet             |
    |---------+-------+-------+-------------------------------------|
    |         |V:445, |       |renice(1): ändra                     |
    |bsdutils |I:1000 |338    |schemaläggningsprioriteten för en    |
    |         |       |       |process som körs                     |
    |---------+-------+-------+-------------------------------------|
    |procps   |V:828, |2691   |"/proc" filsystemverktyg: ps(1), top |
    |         |I:998  |       |(1), kill(1), watch(1), …            |
    |---------+-------+-------+-------------------------------------|
    |         |V:400, |       |verktyg för filsystemet "/proc":     |
    |psmisc   |I:720  |950    |killall(1), fuser(1), peekfd(1),     |
    |         |       |       |pstree(1)                            |
    |---------+-------+-------+-------------------------------------|
    |         |V:6,   |       |time(1): kör ett program för att     |
    |time     |I:79   |148    |rapportera hur systemresurser används|
    |         |       |       |med avseende på tid                  |
    |---------+-------+-------+-------------------------------------|
    |sysstat  |V:118, |1904   |sar(1), iostat(1), mpstat(1), ...:   |
    |         |I:168  |       |verktyg för systemprestanda för Linux|
    |---------+-------+-------+-------------------------------------|
    |isag     |V:0.1, |109    |Interactive System Activity Grapher  |
    |         |I:3.3  |       |för sysstat                          |
    |---------+-------+-------+-------------------------------------|
    |         |V:449, |       |lsof(8): lista filer som öppnats av  |
    |lsof     |I:949  |492    |en pågående process med alternativet |
    |         |       |       |"-p"                                 |
    |---------+-------+-------+-------------------------------------|
    |strace   |V:11,  |4393   |strace(1): spåra systemanrop och     |
    |         |I:103  |       |signaler                             |
    |---------+-------+-------+-------------------------------------|
    |ltrace   |V:1,   |420    |ltrace(1): spåra anrop till bibliotek|
    |         |I:12   |       |                                     |
    |---------+-------+-------+-------------------------------------|
    |xtrace   |V:0.05,|342    |xtrace(1): spåra kommunikationen     |
    |         |I:0.71 |       |mellan X11-klient och server         |
    |---------+-------+-------+-------------------------------------|
    |powertop |V:35,  |696    |powertop(1): information om systemets|
    |         |I:226  |       |strömförbrukning                     |
    |---------+-------+-------+-------------------------------------|
    |cron     |V:922, |247    |kör processer enligt ett schema i    |
    |         |I:997  |       |bakgrunden från cron(8)-daemon       |
    |---------+-------+-------+-------------------------------------|
    |         |V:416, |       |cron-liknande kommandoschemaläggare  |
    |anacron  |I:475  |110    |för system som inte körs 24 timmar om|
    |         |       |       |dygnet                               |
    |---------+-------+-------+-------------------------------------|
    |         |V:72,  |       |at(1) eller batch(1): kör ett jobb   |
    |at       |I:96   |158    |vid en angiven tidpunkt eller under  |
    |         |       |       |en viss belastningsnivå              |
    +---------------------------------------------------------------+


    Tips

    Paketen procps innehåller grundläggande information om
    övervakning, kontroll och start av programaktiviteter. Du bör
    lära dig dem alla.

9.4.1. Tidsinställning av en process

    Visar tid som använts av den process som anropas av kommandot.

    # time some_command >/dev/null
    real    0m0.035s       # time on wall clock (elapsed real time)
    user    0m0.000s       # time in user mode
    sys     0m0.020s       # time in kernel mode

9.4.2. Prioritet för schemaläggning

    Ett fint värde används för att styra schemaläggningsprioriteten
    för processen.

    Tabell 9.9. Lista med bra värden för schemaläggningsprioritet

    +---------------------------------------------------------------+
    |bra värde|            prioritet för schemaläggning             |
    |---------+-----------------------------------------------------|
    |19       |process med lägst prioritet (nice)                   |
    |---------+-----------------------------------------------------|
    |0        |mycket högprioriterad process för användaren         |
    |---------+-----------------------------------------------------|
    |-20      |mycket högprioriterad process för rot (inte trevligt)|
    +---------------------------------------------------------------+


    # nice  -19 top                                      # very nice
    # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast

    Ibland gör ett extremt nice-värde mer skada än nytta för
    systemet. Använd detta kommando med försiktighet.

9.4.3. Kommandot ps

    Kommandot ps(1) på ett Debian-system har stöd för både BSD- och
    SystemV-funktioner och hjälper till att identifiera
    processaktiviteten statiskt.

    Tabell 9.10. Lista över stilar för kommandot ps

    +----------------------------------------+
    |  stil  |typiskt kommando|   funktion   |
    |--------+----------------+--------------|
    |BSD     |ps aux          |visa %CPU %MEM|
    |--------+----------------+--------------|
    |System V|ps -efH         |visa PPID     |
    +----------------------------------------+


    När det gäller zombieprocesser kan du döda dem med hjälp av det
    ID för den överordnade processen som anges i fältet "PPID".

    Kommandot pstree(1) visar ett träd med processer.

9.4.4. Det högsta kommandot

    top(1) på Debian-systemet har rika funktioner och hjälper till
    att identifiera vilken process som agerar roligt dynamiskt.

    Det är ett interaktivt fullskärmsprogram. Du kan få hjälp med
    användningen genom att trycka på "h"-tangenten och avsluta det
    genom att trycka på "q"-tangenten.

9.4.5. Listning av filer som öppnats av en process

    Du kan lista alla filer som öppnats av en process med ett
    process-ID (PID), t.ex. 1, på följande sätt.

    $ sudo lsof -p 1

    PID=1 är vanligtvis init-programmet.

9.4.6. Spårning av programaktiviteter

    Du kan spåra programaktivitet med strace(1), ltrace(1) eller
    xtrace(1) för systemanrop och signaler, biblioteksanrop eller
    kommunikation mellan X11-klient och -server.

    Du kan spåra systemanrop med kommandot ls på följande sätt.

    $ sudo strace ls

    Tips
   
    Använd skriptet strace-graph som finns i /usr/share/doc/strace/
    examples/ för att skapa en snygg trädvy

9.4.7. Identifiering av processer som använder filer eller uttag

    Du kan också identifiera processer med hjälp av filer genom fuser
    (1), t.ex. för "/var/log/mail.log" på följande sätt.

    $ sudo fuser -v /var/log/mail.log
                         USER        PID ACCESS COMMAND
    /var/log/mail.log:   root       2946 F.... rsyslogd

    Du ser att filen "/var/log/mail.log" är öppen för skrivning av
    kommandot rsyslogd(8).

    Du kan också identifiera processer som använder uttag med fuser
    (1), t.ex. för ”smtp/tcp” med följande.

    $ sudo fuser -v smtp/tcp
                         USER        PID ACCESS COMMAND
    smtp/tcp:            Debian-exim   3379 F.... exim4

    Nu vet du att ditt system kör exim4(8) för att hantera
    TCP-anslutningar till SMTP-porten (25).

9.4.8. Upprepa ett kommando med ett konstant intervall

    watch(1) kör ett program upprepade gånger med ett konstant
    intervall och visar dess resultat i helskärm.

    $ watch w

    Visar vem som är inloggad på systemet och uppdateras varannan
    sekund.

9.4.9. Upprepa ett kommando loopa över filer

    Det finns flera sätt att upprepa ett kommando som loopar över
    filer som uppfyller ett visst villkor, t.ex. att matcha
    globmönstret "*.ext".

      * Shell for loop-metoden (se Avsnitt 12.1.4, ”Öglor i skalet”):

    for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done

      * find(1) och xargs(1) kombination:

    find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command

      * find(1) med alternativet "-exec" med ett kommando:

    find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;

      * find(1) med alternativet "-exec" med ett kort shell-skript:

    find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

    Exemplen ovan är skrivna för att säkerställa korrekt hantering av
    konstiga filnamn, t.ex. sådana som innehåller mellanslag. Se
    Avsnitt 10.1.5, ”Idiom för urval av filer” för mer avancerade
    användningsområden för find(1).

9.4.10. Starta ett program från GUI

    För kommandoradsgränssnittet (CLI) körs det första programmet med
    samma namn som finns i de kataloger som anges i miljövariabeln
    $PATH. Se Avsnitt 1.5.3, ”Variabeln "$PATH"”.

    För det grafiska användargränssnittet (GUI) som följer
    freedesktop.org-standarderna tillhandahåller *.desktop-filerna i
    katalogen /usr/share/applications/ nödvändiga attribut för
    GUI-menyvisningen i varje program. Varje paket som är kompatibelt
    med Freedesktop.org:s xdg-menysystem installerar sina menydata
    som tillhandahålls av "*.desktop" under "/usr/share/applications/
    ". Moderna skrivbordsmiljöer som följer
    Freedesktop.org-standarden använder dessa data för att generera
    sin meny med hjälp av paketet xdg-utils. Se "/usr/share/doc/
    xdg-utils/README".

    Till exempel definierar filen chromium.desktop attribut för
    "Chromium Web Browser", såsom "Name" för programnamnet, "Exec"
    för sökvägen och argumenten för programkörning, "Icon" för den
    ikon som används, etc. (se Desktop Entry Specification) enligt
    följande:

    [Desktop Entry]
    Version=1.0
    Name=Chromium Web Browser
    GenericName=Web Browser
    Comment=Access the Internet
    Comment[fr]=Explorer le Web
    Exec=/usr/bin/chromium %U
    Terminal=false
    X-MultipleArgs=false
    Type=Application
    Icon=chromium
    Categories=Network;WebBrowser;
    MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
    StartupWMClass=Chromium
    StartupNotify=true

    Detta är en alltför förenklad beskrivning. *.desktop-filerna
    skannas enligt följande.

    The desktop environment sets $XDG_DATA_HOME and $XDG_DATA_DIR
    environment variables. For example, under the GNOME:

      * $XDG_DATA_HOME är inte inställt. (Standardvärdet $HOME/.local
        /share används)
   
      * $XDG_DATA_DIRS är inställd på /usr/share/gnome:/usr/local/
        share/:/usr/share/.

    Baskatalogerna (se XDG Base Directory Specification) och
    applikationskatalogerna är alltså följande.

      * $HOME/.local/share/ → $HOME/.local/share/applications/

      * /usr/share/gnome/ → /usr/share/gnome/applications/
   
      * /usr/local/share/ → /usr/local/share/applications/

      * /usr/share/ → /usr/share/applications/

    *.desktop-filerna skannas i dessa programkataloger i denna
    ordning.

    Tips
   
    En användaranpassad GUI-menypost kan skapas genom att lägga till
    en *.desktop-fil i katalogen $HOME/.local/share/applications/.

    Tips
   
    "Exec=..."-raden tolkas inte av skalet. Använd kommandot env(1)
    om miljövariabler behöver ställas in.

    Tips

    På samma sätt, om en *.desktop-fil skapas i autostartkatalogen
    under dessa baskataloger, körs det angivna programmet i *.desktop
    -filen automatiskt när skrivbordsmiljön startas. Se
    Autostart-specifikation för skrivbordsprogram.

    Tips

    På samma sätt, om en *.desktop-fil skapas i katalogen $HOME/
    Desktop och Desktop-miljön är konfigurerad för att stödja
    funktionen för ikonstart på skrivbordet, körs det angivna
    programmet i den när du klickar på ikonen. Observera att det
    faktiska namnet på katalogen $HOME/Desktop är lokalt beroende. Se
    xdg-user-dirs-update(1).

9.4.11. Anpassning av program som ska startas

    Vissa program startar ett annat program automatiskt. Här följer
    kontrollpunkter för att anpassa denna process.

      * Meny för programkonfiguration:

          + GNOME desktop: "Settings" → "Apps" → "Default Apps"

          + KDE desktop: "Application Launcher" → "System Settings" →
            "Default Applications"

          + Iceweasel webbläsare: "Redigera" → "Inställningar" →
            "Program"

          + mc(1): "/etc/mc/mc.ext"

      * Miljövariabler som "$BROWSER", "$EDITOR", "$VISUAL" och
        "$PAGER" (se environ(7))

      * Systemet update-alternatives(1) för program som "editor",
        "view", "x-www-browser", "gnome-www-browser" och
        "www-browser" (se Avsnitt 1.4.7, ”Ange en
        standardtextredigerare”)

      * filinnehållet i "~/.mailcap" och "/etc/mailcap" som
        associerar MIME-typ med program (se mailcap(5))

      * Filinnehållet i "~/.mime.types" och "/etc/mime.types" som
        associerar filnamnstillägg med MIME-typ (se run-mailcap(1))

    Tips
   
    update-mime(8) uppdaterar filen "/etc/mailcap" med hjälp av filen
    "/etc/mailcap.order" (se mailcap.order(5)).

    Tips

    Paketet debianutils innehåller sensible-browser(1),
    sensible-editor(1) och sensible-pager(1) som fattar förnuftiga
    beslut om vilken editor, pager respektive webbläsare som ska
    anropas. Jag rekommenderar att du läser dessa skalskript.

    Tips

    För att kunna köra en konsolapplikation som mutt under GUI som
    din föredragna applikation, bör du skapa en GUI-applikation
    enligt följande och ange "/usr/local/bin/mutt-term" som din
    föredragna applikation som ska startas enligt beskrivningen.

    # cat /usr/local/bin/mutt-term <<EOF
    #!/bin/sh
    gnome-terminal -e "mutt \$@"
    EOF
    # chmod 755 /usr/local/bin/mutt-term

9.4.12. Döda en process

    Använd kill(1) för att döda (eller skicka en signal till) en
    process med process-ID.

    Använd killall(1) eller pkill(1) för att göra samma sak med
    processens kommandonamn och andra attribut.

    Tabell 9.11. Lista över ofta använda signaler för kill-kommando

    +---------------------------------------------------------------+
    |signalvärde|signalens|      åtgärd       |      notering       |
    |           |  namn   |                   |                     |
    |-----------+---------+-------------------+---------------------|
    |           |         |ingen signal       |kontrollera om       |
    |0          |---      |skickas (se kill   |processen är igång   |
    |           |         |(2))               |                     |
    |-----------+---------+-------------------+---------------------|
    |1          |SIGHUP   |avsluta processen  |frånkopplad terminal |
    |           |         |                   |(signal upphängd)    |
    |-----------+---------+-------------------+---------------------|
    |2          |SIGINT   |avsluta processen  |avbrott från         |
    |           |         |                   |tangentbordet(CTRL-C)|
    |-----------+---------+-------------------+---------------------|
    |           |         |avsluta processen  |avsluta från         |
    |3          |SIGQUIT  |och dumpa kärnan   |tangentbordet(CTRL-\ |
    |           |         |                   |\)                   |
    |-----------+---------+-------------------+---------------------|
    |9          |SIGKILL  |avsluta processen  |oblockerbar          |
    |           |         |                   |dödssignal           |
    |-----------+---------+-------------------+---------------------|
    |15         |SIGTERM  |avsluta processen  |blockerbar           |
    |           |         |                   |avslutningssignal    |
    +---------------------------------------------------------------+


9.4.13. Schemaläggning av uppgifter en gång

    Kör kommandot at(1) för att schemalägga ett engångsjobb på
    följande sätt.

    $ echo 'command -args'| at 3:40 monday

9.4.14. Regelbunden schemaläggning av arbetsuppgifter

    Använd cron(8) för att schemalägga uppgifter regelbundet. Se
    crontab(1) och crontab(5).

    Du kan schemalägga att köra processer som en vanlig användare,
    t.ex. foo, genom att skapa en crontab(5)-fil som "/var/spool/cron
    /crontabs/foo" med kommandot "crontab -e".

    Här är ett exempel på en crontab(5)-fil.

    # use /usr/bin/sh to run commands, no matter what /etc/passwd says
    SHELL=/bin/sh
    # mail any output to paul, no matter whose crontab this is
    MAILTO=paul
    # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
    # run at 00:05, every day
    5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
    # run at 14:15 on the first of every month -- output mailed to paul
    15 14 1  * *   $HOME/bin/monthly
    # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
    0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
    23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
    5  4 *   * sun echo "run at 04:05 every Sunday"
    # run at 03:40 on the first Monday of each month
    40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args

    Tips

    Om systemet inte körs kontinuerligt kan du installera paketet
    anacron för att schemalägga periodiska kommandon med de angivna
    intervallen så nära maskinens drifttid som möjligt. Se anacron(8)
    och anacrontab(5).

    Tips

    Skript för schemalagt systemunderhåll kan du köra regelbundet
    från root-kontot genom att placera dem i "/etc/cron.hourly/", "/
    etc/cron.daily/", "/etc/cron.weekly/" eller "/etc/cron.monthly/".
    Exekveringstiderna för dessa skript kan anpassas med "/etc/
    crontab" och "/etc/anacrontab".

    Systemd har kapacitet på låg nivå för att schemalägga program som
    ska köras utan cron-daemon. Till exempel ställer /lib/systemd/
    system/apt-daily.timer och /lib/systemd/system/apt-daily.service
    in dagliga apt-hämtningsaktiviteter. Se systemd.timer(5) .

9.4.15. Schemaläggning av uppgifter på evenemang

    Systemd kan schemalägga program inte bara på timerhändelsen utan
    även på mount-händelsen. Se Avsnitt 10.2.3.3,
    ”Timerhändelseutlöst säkerhetskopiering” och Avsnitt 10.2.3.2,
    ”Montera händelsestyrd säkerhetskopiering” för exempel.

9.4.16. Alt-SysRq-tangenten

    Genom att trycka på Alt-SysRq (PrtScr) följt av en knapptryckning
    återfår du kontrollen över systemet.

    Tabell 9.12. Lista över anmärkningsvärda SAK-kommandotangenter

    +---------------------------------------------------------------+
    | tangent efter  |           beskrivning av åtgärden            |
    |   Alt-SysRq    |                                              |
    |----------------+----------------------------------------------|
    |k               |dödaalla processer på den aktuella virtuella  |
    |                |konsolen(SAK)                                 |
    |----------------+----------------------------------------------|
    |s               |synkroniseraalla monterade filsystem för att  |
    |                |undvika datakorruption                        |
    |----------------+----------------------------------------------|
    |u               |återmontera alla monterade filsystem          |
    |                |skrivskyddade(umount)                         |
    |----------------+----------------------------------------------|
    |r               |återställa tangentbordet från raw-lägeefter   |
    |                |X-krasch                                      |
    +---------------------------------------------------------------+


    Se mer på Linux-kärnans användar- och administratörshandbok "
    Linux Magic System Request Key Hacks

    Tips

    Från SSH-terminaler etc. kan du använda Alt-SysRq-funktionen
    genom att skriva till "/proc/sysrq-trigger". Till exempel, "echo
    s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" från root
    shell-prompten synkroniseraroch umountaralla monterade filsystem.

    Den aktuella (2021) Debian amd64 Linux-kärnan har /proc/sys/
    kernel/sysrq=438=0b110110110:

      * 2 = 0x2 - aktivera kontroll av konsolloggningsnivå (ON)

      * 4 = 0x4 - aktivera styrning av tangentbord (SAK, unraw) (ON)

      * 8 = 0x8 - aktivera felsökningsdumpar av processer etc. (OFF)

      * 16 = 0x10 - aktivera synkroniseringskommando (ON)
   
      * 32 = 0x20 - aktivera återmontering skrivskyddad (ON)

      * 64 = 0x40 - aktivera signalering av processer (term, kill,
        oom-kill) (OFF)

      * 128 = 0x80 - Tillåt omstart/avstängning (ON)

      * 256 = 0x100 - Tillåt nikning av alla RT-uppgifter (ON)

9.5. Tips för underhåll av systemet

9.5.1. Vem är med i systemet?

    Du kan kontrollera vem som är inne i systemet på följande sätt.

      * who(1) visar vem som är inloggad.

      * w(1) visar vem som är inloggad och vad de gör.
   
      * last(1) visar en lista över den senast inloggade användaren.

      * lastb(1) visar en lista över de senaste dåliga inloggade
        användarna.

    Tips
   
    "/var/run/utmp" och "/var/log/wtmp" innehåller sådan
    användarinformation. Se login(1) och utmp(5).

9.5.2. Varning för alla

    Du kan skicka ett meddelande till alla som är inloggade i
    systemet med wall(1) på följande sätt.

    $ echo "We are shutting down in 1 hour" | wall

9.5.3. Identifiering av hårdvara

    För PCI-liknande enheter(AGP, PCI-Express, CardBus, ExpressCard
    etc.) är lspci(8) (förmodligen med alternativet "-nn") en bra
    början för identifiering av maskinvaran.

    Alternativt kan du identifiera maskinvaran genom att läsa
    innehållet i "/proc/bus/pci/devices" eller bläddra i
    katalogträdet under "/sys/bus/pci" (se Avsnitt 1.2.12, ”procfs
    och sysfs”).

    Tabell 9.13. Lista över verktyg för identifiering av hårdvara

    +---------------------------------------------------------------+
    |   paket   |popcon |storlek|            beskrivning            |
    |-----------+-------+-------+-----------------------------------|
    |pciutils   |V:258, |289    |Linux PCI-verktyg: lspci(8)        |
    |           |I:993  |       |                                   |
    |-----------+-------+-------+-----------------------------------|
    |usbutils   |V:84,  |322    |USB-verktyg för Linux: lsusb(8)    |
    |           |I:888  |       |                                   |
    |-----------+-------+-------+-----------------------------------|
    |nvme-cli   |V:26,  |2222   |NVMe-verktyg för Linux: nvme(1)    |
    |           |I:36   |       |                                   |
    |-----------+-------+-------+-----------------------------------|
    |pcmciautils|V:4.0, |92     |PCMCIA-verktyg för Linux: pccardctl|
    |           |I:6.0  |       |(8)                                |
    |-----------+-------+-------+-----------------------------------|
    |scsitools  |V:0.2, |261    |samling verktyg för hantering av   |
    |           |I:2.2  |       |SCSI-maskinvara: lsscsi(8)         |
    |-----------+-------+-------+-----------------------------------|
    |procinfo   |V:0.8, |149    |systeminformation hämtad från "/   |
    |           |I:6.1  |       |proc": lsdev(8)                    |
    |-----------+-------+-------+-----------------------------------|
    |lshw       |V:12,  |971    |information om                     |
    |           |I:91   |       |maskinvarukonfiguration: lshw(1)   |
    |-----------+-------+-------+-----------------------------------|
    |discover   |V:25,  |81     |system för identifiering av        |
    |           |I:595  |       |hårdvara: discover(8)              |
    +---------------------------------------------------------------+


9.5.4. Konfiguration av hårdvara

    Även om det mesta av maskinvarukonfigurationen på moderna
    GUI-skrivbordssystem som GNOME och KDE kan hanteras via
    medföljande GUI-konfigurationsverktyg, är det en bra idé att
    känna till några grundläggande metoder för att konfigurera dem.

    For the keyboard and terminal configuration, see Avsnitt 8.2,
    ”Inmatning med tangentbordet” and Avsnitt 8.3, ”Displayens
    utgång”.

    Tabell 9.14. Lista över verktyg för hårdvarukonfiguration

    +---------------------------------------------------------------+
    |         paket         |popcon |storlek|      beskrivning      |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:82,  |       |Font och               |
    |console-setup          |I:975  |422    |keytable-verktyg för   |
    |                       |       |       |Linux-konsolen         |
    |-----------------------+-------+-------+-----------------------|
    |                       |       |       |keyboard key remapping |
    |keyd                   |V:1.4, |1437   |daemon using kernel    |
    |                       |I:1.5  |       |level input primitives |
    |                       |       |       |(evdev, uinput)        |
    |-----------------------+-------+-------+-----------------------|
    |                       |       |       |keyboard key remapping |
    |keyd-application-mapper|V:0.00,|34     |daemon -               |
    |                       |I:0.07 |       |application-specific   |
    |                       |       |       |remapper               |
    |-----------------------+-------+-------+-----------------------|
    |x11-xserver-utils      |V:304, |559    |Verktyg för X-server:  |
    |                       |I:528  |       |xset(1), xmodmap(1)    |
    |-----------------------+-------+-------+-----------------------|
    |                       |       |       |daemon för att hantera |
    |                       |V:55,  |       |händelser som levereras|
    |acpid                  |I:83   |158    |av ACPI (Advanced      |
    |                       |       |       |Configuration and Power|
    |                       |       |       |Interface)             |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:7,   |       |verktyg för att visa   |
    |acpi                   |I:77   |49     |information om         |
    |                       |       |       |ACPI-enheter           |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:0.10,|       |daemon för att sätta en|
    |sleepd                 |I:0.12 |84     |bärbar dator i viloläge|
    |                       |       |       |under inaktivitet      |
    |-----------------------+-------+-------+-----------------------|
    |                       |       |       |optimering av          |
    |                       |V:114, |       |hårddiskåtkomst (se    |
    |hdparm                 |I:208  |246    |Avsnitt 9.6.9,         |
    |                       |       |       |”Optimering av         |
    |                       |       |       |hårddisken”)           |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:239, |       |styra och övervaka     |
    |smartmontools          |I:269  |2455   |lagringssystem med     |
    |                       |       |       |hjälp av S.M.A.R.T.    |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:3.2, |       |samling av verktyg för |
    |setserial              |I:5.2  |104    |hantering av           |
    |                       |       |       |serieportar            |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:1,   |       |samling av verktyg för |
    |memtest86+             |I:19   |12483  |hantering av           |
    |                       |       |       |minneshårdvara         |
    |-----------------------+-------+-------+-----------------------|
    |                       |V:0.2, |       |samling av verktyg för |
    |scsitools              |I:2.2  |261    |hantering av           |
    |                       |       |       |SCSI-hårdvara          |
    |-----------------------+-------+-------+-----------------------|
    |setcd                  |V:0.06,|33     |optimering av åtkomst  |
    |                       |I:0.67 |       |till cd-läsare         |
    |-----------------------+-------+-------+-----------------------|
    |big-cursor             |I:0.65 |26     |större muspekare för X |
    +---------------------------------------------------------------+


    ACPI är ett nyare ramverk för energihanteringssystemet än APM.

    Tips
   
    Skalning av CPU-frekvens på moderna system styrs av kärnmoduler
    som t.ex. acpi_cpufreq.

9.5.5. System- och hårdvarutid

    I det följande ställs system- och maskinvarutid in på MM/DD
    hh:mm, CCYY.

    # date MMDDhhmmCCYY
    # hwclock --utc --systohc
    # hwclock --show

    Tiderna visas normalt i lokal tid på Debian-systemet, men
    maskinvaru- och systemtiden använder vanligtvis UTC(GMT).

    Om maskinvarans tid är inställd på UTC ska du ändra inställningen
    till "UTC=yes" i "/etc/default/rcS".

    Följande omkonfigurerar den tidszon som används av
    Debiansystemet.

    # dpkg-reconfigure tzdata

    Om du vill uppdatera systemtiden via nätverket kan du överväga
    att använda NTP-tjänsten med paket som ntp, ntpdate och chrony.

    Tips
   
    Under systemd ska du istället använda systemd-timesyncd för
    synkronisering av nätverkstiden. Se systemd-timesyncd(8).

    Se följande.

      * Hantera korrekt datum och tid HOWTO

      * NTP Projekt för offentliga tjänster

      * Paketet ntp-doc

    Tips
   
    ntptrace(8) i ntp-paketet kan spåra en kedja av NTP-servrar
    tillbaka till den primära källan.

9.5.6. Den sunda infrastrukturen

    Drivrutiner för ljudkort för nuvarande Linux tillhandahålls av
    Advanced Linux Sound Architecture (ALSA). ALSA tillhandahåller
    emuleringsläge för tidigare Open Sound System (OSS) för
    kompatibilitet.

    Programvarorna kan konfigureras så att de inte bara har direkt
    tillgång till ljudenheterna utan också till dem via ett
    standardiserat ljudserversystem. För närvarande används
    PulseAudio, JACK och PipeWire som ljudserversystem. Se Debians
    wikisida om ljud för den senaste situationen.

    Det finns vanligtvis en gemensam ljudmotor för varje populär
    skrivbordsmiljö. Varje ljudmotor som används av programmet kan
    välja att ansluta till olika ljudservrar.

    Tips
   
    Använd "cat /dev/urandom > /dev/audio" eller speaker-test(1) för
    att testa högtalaren (^C för att stoppa).

    Tips

    Om du inte får något ljud kan högtalaren vara ansluten till en
    utgång som är avstängd. Moderna ljudsystem har många utgångar.
    alsamixer(1) i paketet alsa-utils är användbart för att
    konfigurera volym- och mute-inställningar.

    Tabell 9.15. Lista över ljudpaket

    +---------------------------------------------------------------+
    |     paket     |popcon|storlek|          beskrivning           |
    |---------------+------+-------+--------------------------------|
    |alsa-utils     |V:337,|2700   |verktyg för att konfigurera och |
    |               |I:455 |       |använda ALSA                    |
    |---------------+------+-------+--------------------------------|
    |               |V:0.5,|       |OSS-kompatibilitet under ALSA   |
    |oss-compat     |I:9.7 |21     |förhindrar "/dev/dsp hittades   |
    |               |      |       |inte"-fel                       |
    |---------------+------+-------+--------------------------------|
    |pipewire       |V:321,|135    |multimedia server för ljud- och |
    |               |I:364 |       |videobearbetning - metapaket    |
    |---------------+------+-------+--------------------------------|
    |               |V:328,|       |multimedia-server för ljud- och |
    |pipewire-bin   |I:364 |2219   |videobearbetningsmotor -        |
    |               |      |       |ljudserver och CLI-program      |
    |---------------+------+-------+--------------------------------|
    |               |V:168,|       |ljud- och videobehandlingsmotor |
    |pipewire-alsa  |I:234 |190    |multimediaserver - ljudserver   |
    |               |      |       |som ersätter ALSA               |
    |---------------+------+-------+--------------------------------|
    |               |      |       |multimedia-server med ljud- och |
    |pipewire-pulse |V:290,|53     |videobearbetningsmotor -        |
    |               |I:338 |       |ljudserver som ersätter         |
    |               |      |       |PulseAudio                      |
    |---------------+------+-------+--------------------------------|
    |pulseaudio     |V:151,|6602   |PulseAudio-server               |
    |               |I:177 |       |                                |
    |---------------+------+-------+--------------------------------|
    |libpulse0      |V:437,|969    |PulseAudio klientbibliotek      |
    |               |I:575 |       |                                |
    |---------------+------+-------+--------------------------------|
    |jackd          |V:2,  |8      |JACK Audio Connection Kit.      |
    |               |I:14  |       |(JACK) server (låg latens)      |
    |---------------+------+-------+--------------------------------|
    |libjack0       |V:1.8,|328    |JACK Audio Connection Kit.      |
    |               |I:9.0 |       |(JACK) bibliotek (låg latens)   |
    |---------------+------+-------+--------------------------------|
    |libphonon4qt5-4|V:20, |572    |Phonon: KDE:s ljudmotor         |
    |               |I:46  |       |                                |
    +---------------------------------------------------------------+


9.5.7. Inaktivera skärmsläckaren

    Använd följande kommandon för att inaktivera skärmsläckaren.

    Tabell 9.16. Lista över kommandon för att inaktivera
    skärmsläckaren

    +---------------------------------------------------------------+
    |                 miljö                 |       kommando        |
    |---------------------------------------+-----------------------|
    |Linux-konsolen                         |setterm -powersave off |
    |---------------------------------------+-----------------------|
    |X-fönstret (stänga av skärmsläckaren)  |xset s off             |
    |---------------------------------------+-----------------------|
    |X-fönstret (inaktivera dpms)           |xset -dpms             |
    |---------------------------------------+-----------------------|
    |X-fönstret (GUI-konfiguration av       |xscreensaver-command   |
    |skärmsläckare)                         |-prefs                 |
    +---------------------------------------------------------------+


9.5.8. Avaktivera ljudsignaler

    Man kan alltid koppla ur datorns högtalare för att inaktivera
    pipljud. Att ta bort pcspkr-kärnmodulen gör detta åt dig.

    Följande förhindrar att programmet readline(3) som används av
    bash(1) piper när det stöter på ett alert-tecken (ASCII=7).

    $ echo "set bell-style none">> ~/.inputrc

9.5.9. Använt minne

    Det finns 2 resurser tillgängliga för dig för att få information
    om minnesanvändningssituationen.

      * Kärnans startmeddelande i "/var/log/dmesg" innehåller den
        totala exakta storleken på tillgängligt minne.
   
      * free(1) och top(1) visar information om minnesresurser i det
        system som körs.

    Här är ett exempel.

    # grep '\] Memory' /var/log/dmesg
    [    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
    $ free -k
                 total       used       free     shared    buffers     cached
    Mem:        997184     976928      20256          0     129592     171932
    -/+ buffers/cache:     675404     321780
    Swap:      4545576          4    4545572

    Du kanske undrar "dmesg säger att jag har 990 MB ledigt, och free
    -k säger att 320 MB är ledigt. Mer än 600 MB saknas ...".

    Bry dig inte om det stora "used" och det lilla "free" i raden
    "Mem:", utan läs det som står under dem (675404 och 321780 i
    exemplet ovan) och slappna av.

    För min MacBook med 1GB=1048576k DRAM (videosystemet stjäl en del
    av detta), ser jag följande.

    Tabell 9.17. Lista över rapporterade minnesstorlekar

    +------------------------------------------------------+
    |     felanmalan      |            storlek             |
    |---------------------+--------------------------------|
    |Total storlek i dmesg|1016784k = 1GB - 31792k         |
    |---------------------+--------------------------------|
    |Gratis i dmesg       |990528k                         |
    |---------------------+--------------------------------|
    |Totalt under skal    |997184k                         |
    |---------------------+--------------------------------|
    |Fri under skal       |20256k (men i praktiken 321780k)|
    +------------------------------------------------------+


9.5.10. Kontroll av systemsäkerhet och -integritet

    Dåligt systemunderhåll kan utsätta ditt system för extern
    exploatering.

    För att kontrollera systemets säkerhet och integritet bör du
    börja med följande.

      * Debsums-paketet, se debsums(1) och Avsnitt 2.5.2,
        ”"Release"-fil på högsta nivå och äkthet”.

      * Paketet chkrootkit, se chkrootkit(1).
   
      * Paketfamiljen clamav, se clamscan(1) och freshclam(1).

      * FAQ om Debians säkerhet.

      * Säkra Debian Manual.

    Tabell 9.18. Förteckning över verktyg för kontroll av
    systemsäkerhet och systemintegritet

    +---------------------------------------------------------------+
    |  paket   |popcon |storlek|            beskrivning             |
    |----------+-------+-------+------------------------------------|
    |          |V:4.7, |       |daemon för att skicka avvikelser i  |
    |logcheck  |I:5.8  |120    |systemets loggfiler till            |
    |          |       |       |administratören                     |
    |----------+-------+-------+------------------------------------|
    |          |V:4,   |       |verktyg för att verifiera           |
    |debsums   |I:30   |108    |installerade paketfiler mot         |
    |          |       |       |MD5-kontrollsummor                  |
    |----------+-------+-------+------------------------------------|
    |chkrootkit|V:11,  |988    |rootkit-detektor                    |
    |          |I:15   |       |                                    |
    |----------+-------+-------+------------------------------------|
    |clamav    |V:9,   |19861  |antivirusprogram för Unix -         |
    |          |I:40   |       |kommandoradsgränssnitt              |
    |----------+-------+-------+------------------------------------|
    |tiger     |V:1.2, |7800   |rapportera sårbarheter i            |
    |          |I:1.5  |       |systemsäkerheten                    |
    |----------+-------+-------+------------------------------------|
    |tripwire  |V:1.3, |5060   |kontroll av fil- och                |
    |          |I:1.7  |       |katalogintegritet                   |
    |----------+-------+-------+------------------------------------|
    |john      |V:1.1, |469    |aktivt verktyg för att knäcka       |
    |          |I:7.7  |       |lösenord                            |
    |----------+-------+-------+------------------------------------|
    |aide      |V:2.2, |324    |Avancerad miljö för                 |
    |          |I:2.6  |       |intrångsdetektering - statisk binär |
    |----------+-------+-------+------------------------------------|
    |integrit  |V:0.09,|2759   |program för verifiering av          |
    |          |I:0.18 |       |filintegritet                       |
    |----------+-------+-------+------------------------------------|
    |crack     |V:0.09,|153    |program för lösenordsgissning       |
    |          |I:0.65 |       |                                    |
    +---------------------------------------------------------------+


    Här är ett enkelt skript för att kontrollera om filbehörigheterna
    för skrivbara filer är felaktiga.

    # find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)

    Observera

    Eftersom debsums-paketet använder MD5-kontrollsummor som lagras
    lokalt, kan det inte fullt ut användas som ett verktyg för att
    kontrollera systemsäkerheten mot skadliga attacker.

9.6. Tips om datalagring

    Booting your system as the Linux live system (see Avsnitt 3.2.2,
    ”Linux live rescue system on USB” and Avsnitt 3.2.3, ”Linux live
    rescue system from GRUB”) makes it easy for you to reconfigure
    data storage on the installed system.

    Notera

    Statements on hard disk (HDD) are applicable to other storage
    devices such as SSD / USB flash drive / Memory card / ... .
    Replace device names in examples such as /dev/sda with applicable
    device names /dev/nvme0, /dev/mmcblk0, ... .

    Du kan behöva umount(8) vissa enheter manuellt från kommandoraden
    innan du kör på dem om de monteras automatiskt av
    GUI-skrivbordssystemet.

9.6.1. Användning av diskutrymme

    Diskutrymmesanvändningen kan utvärderas med hjälp av program som
    tillhandahålls av paketen mount, coreutils och xdu:

      * mount(8) rapporterar alla monterade filsystem (= diskar).

      * df(1) rapporterar hur mycket diskutrymme som används för
        filsystemet.

      * du(1) rapporterar hur mycket diskutrymme som används för
        katalogträdet.

    Tips

    Du kan mata utdata från du(8) till xdu(1) för att skapa en
    grafisk och interaktiv presentation med ”du -k . |xdu”, ”sudo du
    -k -x / |xdu”, etc.

9.6.2. Konfiguration av diskpartitioner

    För diskpartitionskonfiguration, även om fdisk(8) har ansetts
    vara standard, förtjänar parted(8) viss uppmärksamhet.
    "Diskpartitionsdata", "partitionstabell", "partitionskarta" och
    "disketikett" är synonymer.

    Äldre datorer använder det klassiska MBR-schemat (Master Boot
    Record) för att lagra diskpartitioneringsdata i den första
    sektorn, dvs. LBA-sektorn 0 (512 byte).

    Nya datorer med UEFI (Unified Extensible Firmware Interface),
    inklusive Intel-baserade Mac-datorer, använder GPT (GUID
    Partition Table) för att lagra diskpartitioneringsdata som inte
    finns i den första sektorn.

    Även om fdisk(8) har varit standard för
    diskpartitioneringsverktyget håller parted(8) på att ersätta det.

    Tabell 9.19. Lista över paket för hantering av diskpartitioner

    +---------------------------------------------------------------+
    |  paket   | popcon |storlek|            beskrivning            |
    |----------+--------+-------+-----------------------------------|
    |util-linux|V:914,  |4758   |diverse systemverktyg inklusive    |
    |          |I:1000  |       |fdisk(8) och cfdisk(8)             |
    |----------+--------+-------+-----------------------------------|
    |parted    |V:435,  |122    |GNU Parted program för att ändra   |
    |          |I:565   |       |storlek på diskpartitioner         |
    |----------+--------+-------+-----------------------------------|
    |gparted   |V:11,   |2313   |GNOME-partitionsredigerare baserad |
    |          |I:87    |       |på libparted                       |
    |----------+--------+-------+-----------------------------------|
    |gdisk     |V:19,   |967    |partition editor för GPT/MBR       |
    |          |I:264   |       |hybriddisk                         |
    |----------+--------+-------+-----------------------------------|
    |kpartx    |V:16,   |80     |program för att skapa              |
    |          |I:26    |       |enhetsmappningar för partitioner   |
    +---------------------------------------------------------------+


    Observera

    Även om parted(8) påstår sig kunna skapa och ändra storlek på
    filsystem är det säkrare att göra sådana saker med hjälp av
    specialverktyg som mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs
    .ext3(8), mkfs .ext4(8), ...) och resize2fs(8).

    Notera

    För att kunna växla mellan GPT och MBR måste du radera de första
    blocken av diskinnehållet direkt (se Avsnitt 9.8.6, ”Rensning av
    filinnehåll”) och använda "parted /dev/sdx mklabel gpt" eller
    "parted /dev/sdx mklabel msdos" för att ställa in det. Observera
    att "msdos" används här för MBR.

9.6.3. Åtkomst till partition med hjälp av UUID

    Även om omkonfigurering av partitioner eller aktiveringsordning
    för flyttbara lagringsmedia kan ge olika namn på partitioner, kan
    du komma åt dem på ett konsekvent sätt. Detta är också användbart
    om du har flera diskar och ditt BIOS/UEFI inte ger dem enhetsnamn
    som är konsekventa.

      * mount(8) med alternativet "-U" kan montera en blockenhet med
        hjälp av UUID, istället för att använda dess filnamn, t.ex. "
        /dev/sda3".
   
      * "/etc/fstab" (se fstab(5)) kan använda UUID.

      * Boot loaders (Avsnitt 3.1.2, ”Steg 2: startladdaren”) kan
        också använda UUID.

    Tips

    Du kan undersöka UUID för en blockspecifik enhet med blkid(8).

    Du kan också undersöka UUID och annan information med "lsblk -f".

9.6.4. LVM2

    LVM2 är en logisk volymhanterare för Linux-kärnan. Med LVM2 kan
    diskpartitioner skapas på logiska volymer i stället för på de
    fysiska hårddiskarna.

    LVM kräver följande.

      * stöd för enhetsmappare i Linux-kärnan (standard för
        Debian-kärnor)

      * stödbibliotek för enhet-mappare i användarutrymmet
        (libdevmapper*-paketet)

      * lVM2-verktygen i användarutrymmet(lvm2-paketet)

    Börja med att lära dig LVM2 från följande manpages.

      * lvm(8): Grunderna i LVM2-mekanismen (lista över alla
        LVM2-kommandon)

      * lvm.conf(5): Konfigurationsfil för LVM2
   
      * lvs(8): Rapportera information om logiska volymer

      * vgs(8): Rapportera information om volymgrupper

      * pvs(8): Rapportera information om fysiska volymer

9.6.5. Konfiguration av filsystem

    För ext4-filsystem tillhandahåller paketet e2fsprogs följande.

      * mkfs.ext4(8) för att skapa ett nytt ext4-filsystem

      * fsck.ext4(8) för att kontrollera och reparera ett befintligt
        ext4-filsystem
   
      * tune2fs(8) för att konfigurera superblock i ext4-filsystem

      * debugfs(8) för att felsöka ext4-filsystem interaktivt. (Det
        har kommandot undel för att återställa raderade filer)

    Kommandona mkfs(8) och fsck(8) tillhandahålls av paketet
    e2fsprogs som front-ends till olika filsystemberoende program
    (mkfs.fstype och fsck.fstype). För ext4-filsystemet är det
    mkfs.ext4(8) och fsck.ext4(8) (de är symlänkade till mke2fs(8)
    och e2fsck(8)).

    Liknande kommandon finns tillgängliga för alla filsystem som
    stöds av Linux.

    Tabell 9.20. Lista över paket för hantering av filsystem

    +---------------------------------------------------------------+
    |    paket     |popcon|storlek|           beskrivning           |
    |--------------+------+-------+---------------------------------|
    |e2fsprogs     |V:828,|1560   |verktyg för filsystemen ext2/ext3|
    |              |I:998 |       |/ext4                            |
    |--------------+------+-------+---------------------------------|
    |btrfs-progs   |V:52, |5255   |verktyg för filsystemet Btrfs    |
    |              |I:79  |       |                                 |
    |--------------+------+-------+---------------------------------|
    |reiserfsprogs |V:10, |473    |verktyg för Reiserfs-filsystemet |
    |              |I:21  |       |                                 |
    |--------------+------+-------+---------------------------------|
    |zfsutils-linux|V:33, |1904   |verktyg för OpenZFS-filsystemet  |
    |              |I:33  |       |                                 |
    |--------------+------+-------+---------------------------------|
    |dosfstools    |V:260,|310    |verktyg för FAT-filsystemet.     |
    |              |I:564 |       |(Microsoft: MS-DOS, Windows)     |
    |--------------+------+-------+---------------------------------|
    |exfatprogs    |V:35, |558    |verktyg för exFAT-filsystemet som|
    |              |I:459 |       |underhålls av Samsung.           |
    |--------------+------+-------+---------------------------------|
    |exfat-fuse    |V:2,  |73     |läs/skriv exFAT-filsystem        |
    |              |I:43  |       |(Microsoft) drivrutin för FUSE.  |
    |--------------+------+-------+---------------------------------|
    |xfsprogs      |V:41, |4382   |verktyg för XFS-filsystemet.     |
    |              |I:86  |       |(SGI: IRIX)                      |
    |--------------+------+-------+---------------------------------|
    |              |V:175,|       |läs/skriv NTFS-filsystem         |
    |ntfs-3g       |I:509 |1507   |(Microsoft: Windows NT, ...)     |
    |              |      |       |drivrutin för FUSE.              |
    |--------------+------+-------+---------------------------------|
    |jfsutils      |V:0.4,|1104   |verktyg för JFS-filsystemet.     |
    |              |I:6.7 |       |(IBM: AIX, OS/2)                 |
    |--------------+------+-------+---------------------------------|
    |              |V:14, |       |utilities for the ISO-9660       |
    |xorriso       |I:65  |378    |filesystem and CD/DVD writing    |
    |              |      |       |from libburnia                   |
    |--------------+------+-------+---------------------------------|
    |wodim         |V:7,  |898    |command line CD/DVD writing tool |
    |              |I:87  |       |from cdrkit                      |
    |--------------+------+-------+---------------------------------|
    |genisoimage   |V:16, |1567   |command line ISO-9660 filesystem |
    |              |I:158 |       |tool from cdrkit                 |
    |--------------+------+-------+---------------------------------|
    |reiser4progs  |V:0.1,|1367   |verktyg för Reiser4-filsystemet  |
    |              |I:1.2 |       |                                 |
    |--------------+------+-------+---------------------------------|
    |hfsprogs      |V:0.3,|394    |verktyg för filsystemet HFS och  |
    |              |I:3.2 |       |HFS Plus. (Apple: Mac OS)        |
    |--------------+------+-------+---------------------------------|
    |zerofree      |V:7,  |30     |program för att nollställa fria  |
    |              |I:117 |       |block från ext2/3/4-filsystem    |
    +---------------------------------------------------------------+


    Tips

    Ext4-filsystemet är standardfilsystemet för Linux-systemet och
    rekommenderas starkt att använda det om du inte har några
    specifika skäl att inte göra det.

    Status för btrfs finns på Debian wiki on btrfs och kernel.org
    wiki on btrfs. Det förväntas bli nästa standardfilsystem efter
    ext4-filsystemet.

    Vissa verktyg ger åtkomst till filsystem utan stöd från
    Linux-kärnan (se Avsnitt 9.8.2, ”Manipulera filer utan att
    montera disk”).

9.6.6. Skapande av filsystem och kontroll av dess integritet

    Kommandot mkfs(8) skapar filsystemet på ett Linux-system. Med
    kommandot fsck(8) kan du kontrollera och reparera filsystemets
    integritet på ett Linux-system.

    Debian använder nu som standard ingen periodisk fsck efter
    skapande av filsystem.

    Observera
   
    Det är i allmänhet inte säkert att köra fsck på monterade
    filsystem.

    Tips

    Du kan köra kommandot fsck(8) säkert på alla filsystem inklusive
    rotfilsystemet vid omstart genom att ange "enable_periodic_fsck"
    i "/etc/mke2fs.conf" och max mount count till 0 med "tune2fs -c0 
    /dev/partition_name". Se mke2fs.conf(5) och tune2fs(8).

    Kontrollera filerna i "/var/log/fsck/" för resultatet av
    kommandot fsck(8) som körs från startskriptet.

9.6.7. Optimering av filsystem med hjälp av mount-alternativ

    Den grundläggande konfigurationen av ett statiskt filsystem anges
    i "/etc/fstab". Till exempel,

    «file system»                   «mount point» «type» «options»    «dump» «pass»
    proc                                      /proc proc   defaults          0 0
    UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 /     ext4   errors=remount-ro 0 1
    UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none  swap   sw                0 0
    /dev/scd0                        /media/cdrom0  udf,iso9660 user,noauto  0 0

    Tips

    UUID (se Avsnitt 9.6.3, ”Åtkomst till partition med hjälp av
    UUID”) kan användas för att identifiera en blockenhet i stället
    för normala blockenhetsnamn som "/dev/sda1", "/dev/sda2", …

    Sedan Linux 2.6.30 använder kärnan som standard det beteende som
    anges i alternativet "relatime".

    Se fstab(5) och mount(8).

9.6.8. Optimering av filsystemet via superblock

    Egenskaperna hos ett filsystem kan optimeras via dess superblock
    med hjälp av kommandot tune2fs(8).

      * När "sudo tune2fs -l /dev/sda1" körs visas innehållet i
        filsystemets superblock på "/dev/sda1".

      * Genom att köra "sudo tune2fs -c 50 /dev/sda1" ändras
        frekvensen för filsystemkontroller(fsck körs under uppstart)
        till var 50:e uppstart på "/dev/sda1".

      * Genom att köra "sudo tune2fs -j /dev/sda1" läggs
        journaliseringskapacitet till filsystemet, dvs. filsystemet
        konverteras från ext2 till ext3 på "/dev/sda1". (Gör detta på
        det omonterade filsystemet.)

      * Utförandet av "sudo tune2fs -O extents,uninit_bg,dir_index /
        dev/sda1 && fsck -pf /dev/sda1" konverterar det från ext3
        till ext4 på "/dev/sda1". (Gör detta på det omonterade
        filsystemet.)

    Tips
   
    Trots sitt namn fungerar tune2fs(8) inte bara på ext2-filsystemet
    utan även på ext3- och ext4-filsystemen.

9.6.9. Optimering av hårddisken

    Varning

    Kontrollera din maskinvara och läs manpage för hdparm(8) innan du
    leker med hårddiskkonfigurationen eftersom detta kan vara ganska
    farligt för dataintegriteten.

    Du kan testa diskåtkomsthastigheten för en hårddisk, t.ex. "/dev/
    sda", med "hdparm -tT /dev/sda". För vissa hårddiskar som är
    anslutna till (E)IDE kan du snabba upp den med "hdparm -q -c3 -d1
    -u1 -m16 /dev/sda" genom att aktivera "(E)IDE 32-bitars I/
    O-stöd", aktivera "using_dma-flaggan", ställa in
    "interrupt-unmask-flaggan" och ställa in "multiple 16 sector I/O"
    (farligt!).

    Du kan testa skrivcache-funktionen på en hårddisk, t.ex. "/dev/
    sda", med "hdparm -W /dev/sda". Du kan inaktivera dess
    skrivcachefunktion med "hdparm -W 0 /dev/sda".

    Du kanske kan läsa dåligt pressade CDROM-skivor på en modern
    CD-ROM-enhet med hög hastighet genom att sakta ner den med "setcd
    -x 2".

9.6.10. Optimering av solid state-enhet

    SSD-enheten (Solid State Drive) upptäcks automatiskt nu.

    Minska onödiga diskåtkomster för att förhindra att disken slits
    ut genom att montera "tmpfs" på den flyktiga datasökvägen i /etc/
    fstab.

9.6.11. Använda SMART för att förutsäga hårddiskfel

    Du kan övervaka och logga din SMART-kompatibla hårddisk med hjälp
    av daemon smartd(8).

     1. Aktivera SMART-funktionen i BIOS.

     2. Installera paketet smartmontools.

     3. Identifiera dina hårddiskar genom att lista dem med df(1).

          + Låt oss anta att en hårddisk som ska övervakas heter "/
            dev/sda".

     4. Kontrollera utdata från "smartctl -a /dev/sda" för att se om
        SMART-funktionen faktiskt är aktiverad.

          + Om inte, aktivera den genom att "smartctl -s on -a /dev/
            sda".

     5. Aktivera smartd(8) daemon att köras genom att göra följande.

          + kommentera bort "start_smartd=yes" i filen "/etc/default/
            smartmontools".

          + starta om daemon smartd(8) med "sudo systemctl restart
            smartmontools".

    Tips
   
    Smartd(8)-daemon kan anpassas med filen /etc/smartd.conf, bland
    annat hur man vill bli meddelad om varningar.

9.6.12. Ange katalog för temporär lagring via $TMPDIR

    Program skapar normalt temporära filer under den temporära
    lagringskatalogen "/tmp". Om "/tmp" inte ger tillräckligt med
    utrymme kan du ange en sådan katalog för tillfällig lagring via
    variabeln $TMPDIR för väluppfostrade program.

9.6.13. Utökning av användbart lagringsutrymme via LVM

    För partitioner som skapas med LVM (Logical Volume Manager)
    (Linux-funktion) vid installationstillfället kan storleken enkelt
    ändras genom att sammanlänka extenter till dem eller avkorta
    extenter från dem över flera lagringsenheter utan större
    omkonfigurering av systemet.

9.6.14. Utökning av användbart lagringsutrymme genom montering av
ytterligare en partition

    Om du har en tom partition (t.ex. "/dev/sdx") kan du formatera
    den med mkfs.ext4(1) och mount(8) den till en katalog där du
    behöver mer utrymme. (Du måste kopiera det ursprungliga
    datainnehållet.)

    $ sudo mv work-dir old-dir
    $ sudo mkfs.ext4 /dev/sdx
    $ sudo mount -t ext4 /dev/sdx work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

    Tips

    Alternativt kan du montera en tom diskavbildningsfil (se
    Avsnitt 9.7.5, ”Skapa en tom diskavbildningsfil”) som en
    loop-enhet (se Avsnitt 9.7.3, ”Montering av diskavbildningsfilen”
    ). Den faktiska diskanvändningen växer med de faktiska data som
    lagras.

9.6.15. Utökning av användbart lagringsutrymme genom bind-mounting av
en annan katalog

    Om du har en tom katalog (t.ex. "/path/to/emp-dir") på en annan
    partition med användbart utrymme kan du montera(8) den med
    alternativet "--bind" till en katalog (t.ex. "work-dir") där du
    behöver mer utrymme.

    $ sudo mount --bind /path/to/emp-dir work-dir

9.6.16. Utökning av användbart lagringsutrymme genom overlay-mounting
av en annan katalog

    Om du har användbart utrymme i en annan partition (t.ex. "/path/
    to/empty" och "/path/to/work") kan du skapa en katalog i den och
    stapla den på en gammal katalog (t.ex. "/path/to/old") där du
    behöver utrymme med hjälp av OverlayFS för Linux-kärnan 3.18
    eller nyare (Debian Stretch 9.0 eller nyare).

    $ sudo mount -t overlay overlay \
      -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work

    Här bör "/path/to/empty" och "/path/to/work" finnas på den
    RW-aktiverade partitionen för att skriva på "/path/to/old".

9.6.17. Utökning av användbart lagringsutrymme med hjälp av symlänk

    Observera

    Detta är en föråldrad metod. Vissa program kanske inte fungerar
    bra med "symlänk till en katalog". Använd istället
    "mounting"-metoderna som beskrivs i avsnittet ovan.

    Om du har en tom katalog (t.ex. "/path/to/emp-dir") i en annan
    partition med användbart utrymme kan du skapa en symlänk till
    katalogen med ln(8).

    $ sudo mv work-dir old-dir
    $ sudo mkdir -p /path/to/emp-dir
    $ sudo ln -sf /path/to/emp-dir work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

    Varning

    Använd inte "symlänk till en katalog" för kataloger som hanteras
    av systemet, t.ex. "/opt". En sådan symlänk kan skrivas över när
    systemet uppgraderas.

9.7. Diskavbildningen

    Här diskuterar vi manipuleringar av diskavbildningen.

9.7.1. Skapa en diskavbildningsfil

    The disk image file, "disk.img", of an unmounted device, e.g.,
    the second SCSI or serial ATA drive "/dev/sdb", can be made by
    one of the following.

    # dd if=/dev/sdb of=disk.img; sync

    # cp /dev/sdb disk.img ; sync

    # cat /dev/sdb > disk.img ; sync

    Skivavbildningen av den traditionella datorns Master Boot Record
    (MBR) (se Avsnitt 9.6.2, ”Konfiguration av diskpartitioner”) som
    finns i den första sektorn på den primära IDE-disken kan skapas
    med dd(1) på följande sätt.

    # dd if=/dev/sda of=mbr.img bs=512 count=1
    # dd if=/dev/sda of=mbr-nopart.img bs=446 count=1
    # dd if=/dev/sda of=mbr-part.img skip=446 bs=1 count=66

      * "mbr.img": MBR med partitionstabellen

      * "mbr-nopart.img": MBR utan partitionstabell

      * "mbr-part.img": Endast partitionstabellen för MBR

    Om du gör en avbildning av en diskpartition på originaldisken
    ersätter du "/dev/sda" med "/dev/sda1" osv.

9.7.2. Skriva direkt till hårddisken

    The disk image file, "disk.img" can be written to an unmounted
    device, e.g., the second SCSI drive "/dev/sdb" with matching
    size, by one of the following.

    # dd if=disk.img of=/dev/sdb ; sync

    # cp disk.img /dev/sdb ; sync

    # cat disk.img >/dev/sdb ; sync

    På samma sätt kan diskpartitionsbildfilen "partition.img" skrivas
    till en omonterad partition, t.ex. den första partitionen i den
    andra SCSI-enheten "/dev/sdb1" med matchande storlek, på följande
    sätt.

    # dd if=partition.img of=/dev/sdb1 ; sync

9.7.3. Montering av diskavbildningsfilen

    Diskavbildningen "partition.img" som innehåller en enda
    partitionsavbildning kan monteras och avmonteras med hjälp av
    loop-enheten på följande sätt.

    # losetup --show -f partition.img
    /dev/loop0
    # mkdir -p /mnt/loop0
    # mount -t auto /dev/loop0 /mnt/loop0
    ...hack...hack...hack
    # umount /dev/loop0
    # losetup -d /dev/loop0

    Detta kan förenklas på följande sätt.

    # mkdir -p /mnt/loop0
    # mount -t auto -o loop partition.img /mnt/loop0
    ...hack...hack...hack
    # umount partition.img

    Varje partition i diskavbildningen "disk.img" som innehåller
    flera partitioner kan monteras med hjälp av loop-enheten.

    # losetup --show -f -P disk.img
    /dev/loop0
    # ls -l /dev/loop0*
    brw-rw---- 1 root disk   7,  0 Apr  2 22:51 /dev/loop0
    brw-rw---- 1 root disk 259, 12 Apr  2 22:51 /dev/loop0p1
    brw-rw---- 1 root disk 259, 13 Apr  2 22:51 /dev/loop0p14
    brw-rw---- 1 root disk 259, 14 Apr  2 22:51 /dev/loop0p15
    # fdisk -l /dev/loop0
    Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

    Device         Start     End Sectors  Size Type
    /dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
    /dev/loop0p14   2048    8191    6144    3M BIOS boot
    /dev/loop0p15   8192  262143  253952  124M EFI System

    Partition table entries are not in disk order.
    # mkdir -p /mnt/loop0p1
    # mkdir -p /mnt/loop0p15
    # mount -t auto /dev/loop0p1 /mnt/loop0p1
    # mount -t auto /dev/loop0p15 /mnt/loop0p15
    # mount |grep loop
    /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
    /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
    ...hack...hack...hack
    # umount /dev/loop0p1
    # umount /dev/loop0p15
    # losetup -d /dev/loop0

    Alternativt kan liknande effekter åstadkommas genom att använda
    device mapper-enheter som skapats av kpartx(8) från
    kpartx-paketet enligt följande.

    # kpartx -a -v disk.img
    add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
    add map loop0p14 (253:1): 0 6144 linear 7:0 2048
    add map loop0p15 (253:2): 0 253952 linear 7:0 8192
    # fdisk -l /dev/loop0
    Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

    Device         Start     End Sectors  Size Type
    /dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
    /dev/loop0p14   2048    8191    6144    3M BIOS boot
    /dev/loop0p15   8192  262143  253952  124M EFI System

    Partition table entries are not in disk order.
    # ls -l /dev/mapper/
    total 0
    crw------- 1 root root 10, 236 Apr  2 22:45 control
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p1 -> ../dm-0
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p14 -> ../dm-1
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p15 -> ../dm-2
    # mkdir -p /mnt/loop0p1
    # mkdir -p /mnt/loop0p15
    # mount -t auto /dev/mapper/loop0p1 /mnt/loop0p1
    # mount -t auto /dev/mapper/loop0p15 /mnt/loop0p15
    # mount |grep loop
    /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
    /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
    ...hack...hack...hack
    # umount /dev/mapper/loop0p1
    # umount /dev/mapper/loop0p15
    # kpartx -d disk.img

9.7.4. Rengöring av en diskavbildningsfil

    En diskavbildningsfil, "disk.img", kan rensas från alla borttagna
    filer till en ren, gles avbildning, "new.img", på följande sätt.

    # mkdir old; mkdir new
    # mount -t auto -o loop disk.img old
    # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G
    # mount -t auto -o loop new.img new
    # cd old
    # cp -a --sparse=always ./ ../new/
    # cd ..
    # umount new.img
    # umount disk.img

    Om "disk.img" är i ext2, ext3 eller ext4 kan du också använda
    zerofree(8) från zerofree-paketet enligt följande.

    # losetup --show -f disk.img
    /dev/loop0
    # zerofree /dev/loop0
    # cp --sparse=always disk.img new.img
    # losetup -d /dev/loop0

9.7.5. Skapa en tom diskavbildningsfil

    Den tomma diskavbildningen "disk.img" som kan växa upp till 5GiB
    kan skapas med dd(1) på följande sätt.

    $ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G

    Istället för att använda dd(1) kan den specialiserade fallocate
    (8) användas här.

    Du kan skapa ett ext4-filsystem på den här diskavbildningen
    "disk.img" med hjälp av loop-enheten på följande sätt.

    # losetup --show -f disk.img
    /dev/loop0
    # mkfs.ext4 /dev/loop0
    ...hack...hack...hack
    # losetup -d /dev/loop0
    $ du  --apparent-size -h disk.img
    5.0G  disk.img
    $ du -h disk.img
    83M disk.img

    För "disk.img" är filstorleken 5,0 GiB och den faktiska
    diskanvändningen är bara 83MiB. Denna avvikelse är möjlig
    eftersom ext4 kan hålla glesa filer.

    Tips
   
    Den faktiska diskanvändningen för sparse file växer med data som
    skrivs till den.

    Genom att använda liknande åtgärder på enheter som skapats av
    loop-enheten eller enhetsmappningsenheterna som Avsnitt 9.7.3,
    ”Montering av diskavbildningsfilen” kan du partitionera
    diskavbildningen "disk.img" med hjälp av parted(8) eller fdisk(8)
    och skapa filsystem på den med hjälp av mkfs.ext4(8), mkswap(8),
    etc.

9.7.6. Skapa ISO9660-bildfilen

    Tips

    Both genisoimage(1) provided by cdrkit and xorrisofs(1) provided
    by Libburnia share the same command syntax except for the command
    name.

    ISO9660-bildfilen, "cd.iso", från källkatalogträdet i
    "source_directory" kan skapas med hjälp av genisoimage(1) från
    cdrkit på följande sätt.

    #  genisoimage -r -J -T -V volume_id -o cd.iso source_directory

    På samma sätt kan den startbara ISO9660-bildfilen, "cdboot.iso",
    skapas från debian-installer-liknande katalogträd i
    "source_directory" genom följande.

    #  genisoimage -r -o cdboot.iso -V volume_id \
       -b isolinux/isolinux.bin -c isolinux/boot.cat \
       -no-emul-boot -boot-load-size 4 -boot-info-table source_directory

    Här används Isolinux boot loader (se Avsnitt 3.1.2, ”Steg 2:
    startladdaren”) för uppstart.

    Du kan beräkna md5sum-värdet och skapa ISO9660-bilden direkt från
    CD-ROM-enheten på följande sätt.

    $ isoinfo -d -i /dev/cdrom
    CD-ROM is in ISO 9660 format
    ...
    Logical block size is: 2048
    Volume size is: 23150592
    ...
    # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
    # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso

    Varning
   
    Du måste noggrant undvika ISO9660 filsystem read ahead bug i
    Linux enligt ovan för att få rätt resultat.

9.7.7. Skriva direkt till CD/DVD-R/RW

    Tips

    DVD is only a large CD to wodim(1) provided by cdrkit and
    xorrecord(1) provided by Libburnia. These commands share the same
    command syntax except for the command name.

    Du kan hitta en användbar enhet genom att göra följande.

    # wodim --devices

    Sedan sätts den tomma CD-R:n i CD-enheten och ISO9660-bildfilen
    "cd.iso" skrivs till den här enheten, t.ex. "/dev/sda", med wodim
    (1) på följande sätt.

    # wodim -v -eject dev=/dev/sda cd.iso

    Om CD-RW används i stället för CD-R, gör du i stället på följande
    sätt.

    # wodim -v -eject blank=fast dev=/dev/sda cd.iso

    Tips

    Om ditt skrivbordssystem monterar CD-skivor automatiskt ska du
    avmontera dem genom att "sudo umount /dev/sda" från konsolen
    innan du använder wodim(1).

9.7.8. Montering av ISO9660-bildfilen

    Om "cd.iso" innehåller en ISO9660-avbildning, monteras den
    manuellt till "/cdrom" på följande sätt.

    # mount -t iso9660 -o ro,loop cd.iso /cdrom

    Tips

    Moderna skrivbordssystem kan automatiskt montera flyttbara media,
    t.ex. ISO9660-formaterade CD-skivor (se Avsnitt 10.1.7, ”Flyttbar
    lagringsenhet”).

9.8. De binära uppgifterna

    Här diskuterar vi direkta manipulationer av binärdata på
    lagringsmedia.

9.8.1. Visa och redigera binära data

    Den mest grundläggande visningsmetoden för binära data är att
    använda kommandot "od -t x1".

    Tabell 9.21. Lista över paket som visar och redigerar binära data

    +---------------------------------------------------------------+
    |     paket     |popcon |storlek|          beskrivning          |
    |---------------+-------+-------+-------------------------------|
    |               |V:910, |       |grundläggande paket som har od |
    |coreutils      |I:1000 |17994  |(1) för att dumpa filer (HEX,  |
    |               |       |       |ASCII, OCTAL, ...)             |
    |---------------+-------+-------+-------------------------------|
    |               |V:4,   |       |verktygspaket som har hd(1) för|
    |bsdmainutils   |I:131  |17     |att dumpa filer (HEX, ASCII,   |
    |               |       |       |OCTAL, ...)                    |
    |---------------+-------+-------+-------------------------------|
    |hexedit        |V:0.8, |70     |binär editor och viewer (HEX,  |
    |               |I:8.1  |       |ASCII)                         |
    |---------------+-------+-------+-------------------------------|
    |bless          |V:0.1, |924    |fullfjädrad                    |
    |               |I:1.4  |       |hexadecimalredigerare (GNOME)  |
    |---------------+-------+-------+-------------------------------|
    |okteta         |V:1,   |1589   |fullfjädrad hexadecimal editor |
    |               |I:10   |       |(KDE4)                         |
    |---------------+-------+-------+-------------------------------|
    |ncurses-hexedit|V:0.1, |130    |binär editor och viewer (HEX,  |
    |               |I:1.3  |       |ASCII, EBCDIC)                 |
    |---------------+-------+-------+-------------------------------|
    |beav           |V:0.04,|137    |binär editor och viewer (HEX,  |
    |               |I:0.30 |       |ASCII, EBCDIC, OCTAL, ...)     |
    +---------------------------------------------------------------+


    Tips

    HEX används som en förkortning för hexadecimalt format med radix
    16. OCTAL används för oktalt format med radix 8. ASCII används
    för American Standard Code for Information Interchange, dvs.
    normal engelsk textkod. EBCDIC är för Extended Binary Coded
    Decimal Interchange Code som används på IBM mainframe
    operativsystem.

9.8.2. Manipulera filer utan att montera disk

    Det finns verktyg för att läsa och skriva filer utan att montera
    disken.

    Tabell 9.22. Lista över paket för att manipulera filer utan att
    montera disk

    +---------------------------------------------------------------+
    | paket  | popcon  |storlek|            beskrivning             |
    |--------+---------+-------+------------------------------------|
    |mtools  |V:7, I:53|400    |verktyg för MSDOS-filer utan att    |
    |        |         |       |montera dem                         |
    |--------+---------+-------+------------------------------------|
    |hfsutils|V:0.2,   |178    |verktyg för HFS och HFS+ filer utan |
    |        |I:2.8    |       |att montera dem                     |
    +---------------------------------------------------------------+


9.8.3. Redundans av data

    RAID-system för programvara som erbjuds av Linux-kärnan ger
    dataredundans på filsystemnivå för att uppnå höga nivåer av
    lagringstillförlitlighet.

    Det finns också verktyg för att lägga till dataredundans i filer
    på applikationsprogramnivå för att uppnå höga nivåer av
    lagringstillförlitlighet.

    Tabell 9.23. Lista över verktyg för att lägga till dataredundans
    i filer

    +---------------------------------------------------------------+
    |  paket   |popcon |storlek|            beskrivning             |
    |----------+-------+-------+------------------------------------|
    |par2      |V:9,   |297    |Parity Archive Volume Set, för      |
    |          |I:116  |       |kontroll och reparation av filer    |
    |----------+-------+-------+------------------------------------|
    |dvdisaster|V:0.1, |1422   |skydd mot dataförlust/skrap/åldring |
    |          |I:1.2  |       |för CD/DVD-media                    |
    |----------+-------+-------+------------------------------------|
    |          |V:0.01,|       |backupverktyg som använder          |
    |dvbackup  |I:0.04 |413    |MiniDV-videokameror (tillhandahåller|
    |          |       |       |rsbep(1))                           |
    +---------------------------------------------------------------+


9.8.4. Återställning av datafiler och kriminalteknisk analys

    Det finns verktyg för återställning av datafiler och
    kriminalteknisk analys.

    Tabell 9.24. Lista över paket för återställning av datafiler och
    kriminalteknisk analys

    +---------------------------------------------------------------+
    |    paket    |popcon |storlek|           beskrivning           |
    |-------------+-------+-------+---------------------------------|
    |testdisk     |V:2,   |2276   |verktyg för partitionsskanning   |
    |             |I:26   |       |och diskåterställning            |
    |-------------+-------+-------+---------------------------------|
    |magicrescue  |V:0.2, |257    |verktyg för att återställa filer |
    |             |I:1.9  |       |genom att leta efter magiska byte|
    |-------------+-------+-------+---------------------------------|
    |scalpel      |V:0.2, |89     |sparsam, högpresterande          |
    |             |I:2.4  |       |filhuggare                       |
    |-------------+-------+-------+---------------------------------|
    |myrescue     |V:0.2, |81     |rädda data från skadade          |
    |             |I:2.1  |       |hårddiskar                       |
    |-------------+-------+-------+---------------------------------|
    |extundelete  |V:0.5, |152    |verktyg för att återställa filer |
    |             |I:7.8  |       |på ext3/4-filsystemet            |
    |-------------+-------+-------+---------------------------------|
    |ext4magic    |V:0.3, |235    |verktyg för att återställa filer |
    |             |I:3.7  |       |på ext3/4-filsystemet            |
    |-------------+-------+-------+---------------------------------|
    |             |V:0.2, |       |verktyg som hjälper till att     |
    |ext3grep     |I:2.0  |299    |återställa raderade filer på     |
    |             |       |       |ext3-filsystemet                 |
    |-------------+-------+-------+---------------------------------|
    |scrounge-ntfs|V:0.2, |49     |program för dataåterställning för|
    |             |I:1.7  |       |NTFS-filsystem                   |
    |-------------+-------+-------+---------------------------------|
    |gzrt         |V:0.02,|34     |verktyg för gzip-återställning   |
    |             |I:0.47 |       |                                 |
    |-------------+-------+-------+---------------------------------|
    |sleuthkit    |V:2,   |1119   |verktyg för kriminalteknisk      |
    |             |I:25   |       |analys. (Sleuthkit)              |
    |-------------+-------+-------+---------------------------------|
    |autopsy      |V:0.2, |1026   |grafiskt gränssnitt till         |
    |             |I:1.3  |       |SleuthKit                        |
    |-------------+-------+-------+---------------------------------|
    |foremost     |V:0.4, |101    |kriminalteknisk applikation för  |
    |             |I:4.2  |       |att återställa data              |
    |-------------+-------+-------+---------------------------------|
    |guymager     |V:0.14,|1049   |verktyg för kriminalteknisk      |
    |             |I:0.82 |       |avbildning baserat på Qt         |
    |-------------+-------+-------+---------------------------------|
    |dcfldd       |V:0.3, |113    |förbättrad version av dd för     |
    |             |I:2.8  |       |kriminalteknik och säkerhet      |
    +---------------------------------------------------------------+


    Tips

    Du kan återställa filer i ext2-filsystemet med hjälp av
    kommandona list_deleted_inodes och undel i debugfs(8) i paketet
    e2fsprogs.

9.8.5. Dela upp en stor fil i små filer

    När en data är för stor för att säkerhetskopiera som en enda fil
    kan du säkerhetskopiera innehållet efter att ha delat upp det i
    t.ex. 2000MiB bitar och slå samman dessa bitar tillbaka till
    originalfilen senare.

    $ split -b 2000m large_file
    $ cat x* >large_file

    Observera
   
    Se till att du inte har några filer som börjar med "x" för att
    undvika namnkrascher.

9.8.6. Rensning av filinnehåll

    Om du vill rensa innehållet i en fil, t.ex. en loggfil, ska du
    inte använda rm(1) för att radera filen och sedan skapa en ny tom
    fil, eftersom filen fortfarande kan nås under tiden mellan
    kommandona. Följande är det säkra sättet att rensa innehållet i
    filen.

    $ :>file_to_be_cleared

9.8.7. Dummy-filer

    Följande kommandon skapar dummyfiler eller tomma filer.

    $ dd if=/dev/zero    of=5kb.file bs=1k count=5
    $ dd if=/dev/urandom of=7mb.file bs=1M count=7
    $ touch zero.file
    $ : > alwayszero.file

    Du bör hitta följande filer.

      * "5kb.file" är 5KB med nollor.

      * "7mb.file" är 7MB slumpmässig data.

      * "zero.file" kan vara en fil på 0 byte. Om den existerade
        uppdateras dess mtime medan dess innehåll och längd behålls.

      * "alwayszero.file" är alltid en fil med 0 byte. Om den
        existerade uppdateras dess mtime och dess innehåll
        nollställs.

9.8.8. Radering av en hel hårddisk

    There are several ways to completely erase data from an entire
    hard disk like device, e.g., USB flash drive at "/dev/sda".

    Observera

    Check your USB flash drive location with mount(8) first before
    executing commands here. The device pointed by "/dev/sda" may be
    SCSI hard disk or serial-ATA hard disk where your entire system
    resides.

    Radera allt innehåll på hårddisken genom att återställa data till
    0 med följande.

    # dd if=/dev/zero of=/dev/sda

    Radera allt genom att skriva över med slumpmässiga data enligt
    följande.

    # dd if=/dev/urandom of=/dev/sda

    Radera allt genom att skriva över med slumpmässiga data på ett
    mycket effektivt sätt enligt följande.

    # shred -v -n 1 /dev/sda

    Alternativt kan du använda badblocks(8) med flaggan -t random.

    Eftersom dd(1) finns tillgänglig i skalet på många startbara
    Linux-CD-skivor, t.ex. Debians installations-CD, kan du radera
    ditt installerade system helt genom att köra ett
    raderingskommando från ett sådant media på systemets hårddisk,
    t.ex. "/dev/sda", "/dev/sda", etc.

9.8.9. Radera oanvänt område på en hårddisk

    Unused area on an hard disk (or USB flash drive), e.g. "/dev/
    sdb1" may still contain erased data themselves since they are
    only unlinked from the filesystem. These can be cleaned by
    overwriting them.

    # mount -t auto /dev/sdb1 /mnt/foo
    # cd /mnt/foo
    # dd if=/dev/zero of=junk
    dd: writing to `junk': No space left on device
    ...
    # sync
    # umount /dev/sdb1

    Varning

    This is usually good enough for your USB flash drive. But this is
    not perfect. Most parts of erased filenames and their attributes
    may be hidden and remain in the filesystem.

9.8.10. Återskapa raderade men fortfarande öppna filer

    Även om du av misstag har raderat en fil, så länge filen
    fortfarande används av något program (läs- eller skrivläge), är
    det möjligt att återställa en sådan fil.

    Försök till exempel med följande

    $ echo foo > bar
    $ less bar
    $ ps aux | grep ' less[ ]'
    bozo    4775  0.0  0.0  92200   884 pts/8    S+   00:18   0:00 less bar
    $ rm bar
    $ ls -l /proc/4775/fd | grep bar
    lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -l
    -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar
    $ cat bar
    foo

    Gör så här på en annan terminal (när du har lsof-paketet
    installerat).

    $ ls -li bar
    2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar
    $ rm bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -li bar
    2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar
    $ cat bar
    foo

9.8.11. Söker alla hårda länkar

    Filer med hårda länkar kan identifieras med "ls -li".

    $ ls -li
    total 0
    2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo

    Både "baz" och "foo" har länkantal på "2" (>1) vilket visar att
    de har hårda länkar. Deras inodnummer är gemensamma "2738404".
    Detta betyder att de är samma hårdlänkade fil. Om du inte råkar
    hitta alla hårdlänkade filer av en slump kan du söka efter inode,
    t.ex. "2738404" enligt följande.

    # find /path/to/mount/point -xdev -inum 2738404

9.8.12. Osynlig förbrukning av diskutrymme

    Alla raderade men öppna filer förbrukar diskutrymme även om de
    inte är synliga från normal du(1). De kan listas med sin storlek
    på följande sätt.

    # lsof -s -X / |grep deleted

9.9. Tips om datakryptering

    Med fysisk tillgång till din dator kan vem som helst enkelt få
    root-behörighet och komma åt alla filer på din dator (se
    Avsnitt 4.6.4, ”Säkra lösenordet för root”). Det innebär att ett
    system med inloggningslösenord inte kan skydda dina privata och
    känsliga data mot eventuell stöld av din dator. Du måste använda
    datakrypteringsteknik för att göra det. GNU privacy guard (se
    Avsnitt 10.3, ”Infrastruktur för datasäkerhet”) kan visserligen
    kryptera filer, men det kräver en del arbete av användaren.

    Dm-crypt underlättar automatisk datakryptering via inbyggda
    Linux-kärnmoduler med minimal användarinsats med hjälp av
    device-mapper.

    Tabell 9.25. Lista över verktyg för datakryptering

    +---------------------------------------------------------------+
    |    paket     |popcon |storlek|          beskrivning           |
    |--------------+-------+-------+--------------------------------|
    |cryptsetup    |V:35,  |465    |verktyg för krypterad blockenhet|
    |              |I:80   |       |(dm-crypt / LUKS)               |
    |--------------+-------+-------+--------------------------------|
    |              |       |       |verktyg för krypterade          |
    |cryptmount    |V:2.0, |236    |blockenheter(dm-crypt / LUKS)   |
    |              |I:2.6  |       |med fokus på montering/         |
    |              |       |       |avmontering av vanliga användare|
    |--------------+-------+-------+--------------------------------|
    |fscrypt       |V:0.4, |6545   |verktyg för kryptering av       |
    |              |I:1.1  |       |Linux-filsystem(fscrypt)        |
    |--------------+-------+-------+--------------------------------|
    |libpam-fscrypt|V:0.29,|6594   |PAM-modul för kryptering av     |
    |              |I:0.34 |       |Linux-filsystem(fscrypt)        |
    +---------------------------------------------------------------+


    Observera

    Datakryptering kostar CPU-tid etc. Krypterad data blir oåtkomlig
    om lösenordet förloras. Vänligen väga dess fördelar och
    kostnader.

    Notera

    Hela Debian-systemet kan installeras på en krypterad disk med
    debian-installer (lenny eller nyare) med hjälp av dm-crypt/LUKS
    och initramfs.

    Tips
   
    Se Avsnitt 10.3, ”Infrastruktur för datasäkerhet” för verktyg för
    kryptering av användarutrymme: GNU Privacy Guard.

9.9.1. Kryptering av flyttbara diskar med dm-crypt/LUKS

    You can encrypt contents of removable mass devices, e.g. USB
    flash drive on "/dev/sdx", using dm-crypt/LUKS. You simply format
    it as the following.

    # fdisk /dev/sdx
    ... "n" "p" "1" "return" "return" "w"
    # cryptsetup luksFormat /dev/sdx1
    ...
    # cryptsetup open /dev/sdx1 secret
    ...
    # ls -l /dev/mapper/
    total 0
    crw-rw---- 1 root root  10, 60 2021-10-04 18:44 control
    lrwxrwxrwx 1 root root       7 2021-10-04 23:55 secret -> ../dm-0
    # mkfs.vfat /dev/mapper/secret
    ...
    # cryptsetup close secret

    Sedan kan den monteras precis som en vanlig disk på "/media/
    användarnamn/disk_label", förutom att man måste fråga efter
    lösenordet (se Avsnitt 10.1.7, ”Flyttbar lagringsenhet”) i en
    modern skrivbordsmiljö med hjälp av udisks2-paketet. Skillnaden
    är att alla data som skrivs till den är krypterade.
    Lösenordsinmatningen kan automatiseras med hjälp av keyring (se
    Avsnitt 10.3.6, ”Nyckelring för lösenord”).

    Alternativt kan du formatera media i ett annat filsystem, t.ex.
    ext4 med "mkfs.ext4 /dev/mapper/sdx1". Om btrfs används i stället
    måste paketet udisks2-btrfs installeras. För dessa filsystem kan
    filägande och behörigheter behöva konfigureras.

9.9.2. Montering av krypterad disk med dm-crypt/LUKS

    En krypterad diskpartition som skapats med dm-crypt/LUKS på "/dev
    /sdc5" av Debian Installer kan t.ex. monteras på "/mnt" enligt
    följande:

    $ sudo cryptsetup open /dev/sdc5 ninja --type luks
    Enter passphrase for /dev/sdc5: ****
    $ sudo lvm
    lvm> lvscan
      inactive          '/dev/ninja-vg/root' [13.52 GiB] inherit
      inactive          '/dev/ninja-vg/swap_1' [640.00 MiB] inherit
      ACTIVE            '/dev/goofy/root' [180.00 GiB] inherit
      ACTIVE            '/dev/goofy/swap' [9.70 GiB] inherit
    lvm> lvchange -a y /dev/ninja-vg/root
    lvm> exit
      Exiting.
    $ sudo mount /dev/ninja-vg/root /mnt

9.10. Kärnan

    Debian distribuerar den modulariserade Linuxkärnan som paket för
    de arkitekturer som stöds.

    Om du läser den här dokumentationen behöver du förmodligen inte
    kompilera Linux-kärnan själv.

9.10.1. Kernel-parametrar

    Många Linux-funktioner är konfigurerbara via kärnparametrar
    enligt följande.

      * Kärnparametrar som initieras av bootloader (se Avsnitt 3.1.2,
        ”Steg 2: startladdaren”)

      * Kärnparametrar som ändras av sysctl(8) vid körning för de som
        är tillgängliga via sysfs (se Avsnitt 1.2.12, ”procfs och
        sysfs”)

      * Modulparametrar som ställs in med argument från modprobe(8)
        när en modul aktiveras (se Avsnitt 9.7.3, ”Montering av
        diskavbildningsfilen”)

    Se"Linux-kärnans användar- och administratörshandbok " " Kärnans
    kommandoradsparametrar" för mer information.

9.10.2. Kernel-rubriker

    De flesta normala program behöver inte kärnhuvuden och kan i
    själva verket gå sönder om du använder dem direkt för
    kompilering. De bör kompileras mot headern i "/usr/include/linux"
    och "/usr/include/asm" som tillhandahålls av libc6-dev-paketet
    (skapat från källkodspaketet glibc ) på Debian-systemet.

    Notera

    För att kompilera vissa kärnspecifika program, t.ex. kärnmoduler
    från extern källa och automounter-daemon(amd), måste du inkludera
    sökvägen till motsvarande kärnhuvud, t.ex. "-I/usr/src/
    linux-particular-version/include/", på kommandoraden.

9.10.3. Kompilering av kärnan och relaterade moduler

    Debian har sin egen metod för att kompilera kärnan och relaterade
    moduler.

    Tabell 9.26. Lista över viktiga paket som ska installeras för
    omkompilering av kärnan på Debian-systemet

    +---------------------------------------------------------------+
    |     paket      |popcon|storlek|          beskrivning          |
    |----------------+------+-------+-------------------------------|
    |build-essential |V:18, |17     |nödvändiga paket för att bygga |
    |                |I:512 |       |Debian-paket: make, gcc, …     |
    |----------------+------+-------+-------------------------------|
    |bzip2           |V:159,|113    |verktyg för komprimering och   |
    |                |I:972 |       |dekomprimering av bz2-filer    |
    |----------------+------+-------+-------------------------------|
    |libncurses5-dev |I:34  |6      |utvecklares bibliotek och      |
    |                |      |       |dokument för ncurses           |
    |----------------+------+-------+-------------------------------|
    |                |V:409,|       |git: distribuerat              |
    |git             |I:623 |52512  |revisionskontrollsystem som    |
    |                |      |       |används av Linux-kärnan        |
    |----------------+------+-------+-------------------------------|
    |                |V:32, |       |tillhandahålla fakeroot-miljö  |
    |fakeroot        |I:514 |225    |för att bygga paket som        |
    |                |      |       |icke-root                      |
    |----------------+------+-------+-------------------------------|
    |initramfs-tools |V:479,|49     |verktyg för att bygga en       |
    |                |I:988 |       |initramfs (Debian-specifikt)   |
    |----------------+------+-------+-------------------------------|
    |dkms            |V:81, |235    |dKMS (dynamiskt stöd för       |
    |                |I:149 |       |kärnmoduler) (generisk)        |
    |----------------+------+-------+-------------------------------|
    |module-assistant|V:1,  |395    |hjälpverktyg för att skapa     |
    |                |I:13  |       |modulpaket (Debian-specifikt)  |
    |----------------+------+-------+-------------------------------|
    |                |V:5,  |       |hjälpskript för en underhållare|
    |devscripts      |I:33  |2766   |av Debian-paket                |
    |                |      |       |(Debian-specifikt)             |
    +---------------------------------------------------------------+


    Om du använder initrd i Avsnitt 3.1.2, ”Steg 2: startladdaren”,
    se till att läsa relaterad information i initramfs-tools(8),
    update-initramfs(8), mkinitramfs(8) och initramfs.conf(5).

    Varning

    Lägg inte in symlinks till katalogerna i källträdet (t.ex. "/usr/
    src/linux*") från "/usr/include/linux" och "/usr/include/asm" när
    du kompilerar Linux-kärnkällan. (Vissa föråldrade dokument
    föreslår detta.)

    Notera

    Vid kompilering av den senaste Linux-kärnan på Debian
    stable-systemet kan det vara nödvändigt att använda
    bakåtporterade senaste verktyg från Debian unstable.

    module-assistant(8) (eller dess kortform m-a) hjälper användare
    att enkelt bygga och installera modulpaket för en eller flera
    anpassade kärnor.

    DKMS (Dynamic Kernel Module Support) är ett nytt
    distributionsoberoende ramverk som gör det möjligt att uppgradera
    enskilda kernelmoduler utan att ändra hela kerneln. Detta används
    för underhåll av out-of-tree-moduler. Det gör det också mycket
    enkelt att bygga om moduler när man uppgraderar kärnan.

9.10.4. Kompilering av kärnkällan: Rekommendation från Debian Kernel
Team

    För att bygga anpassade binära kärnpaket från uppströms kärnkälla
    bör du använda "deb-pkg"-målet som tillhandahålls av den.

    $ sudo apt-get build-dep linux
    $ cd /usr/src
    $ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v7.x/linux-7.1.7.tar.xz
    $ tar --xz -xvf linux-7.1.7.tar.xz
    $ cd linux-7.1.7
    $ cp /boot/config-7.1.7.config
    $ make menuconfig
     ...
    $ make deb-pkg

    Tips
   
    Paketet linux-source-version tillhandahåller Linux-kärnkällan med
    Debian-patchar som "/usr/src/linux-version.tar.bz2".

    För att bygga specifika binära paket från Debian-kärnans
    källkodspaket bör du använda målen "binary-arch_arkitektur_
    featureset_variant" i debian/rules.gen".

    $ sudo apt-get build-dep linux
    $ apt-get source linux
    $ cd linux-7.*
    $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686

    Se ytterligare information:

      * Debian Wiki: KernelFAQ

      * Debian Wiki: DebianKernel

      * Handbok för Debians Linuxkärnor: https://
        kernel-handbook.debian.net

9.10.5. Drivrutiner för hårdvara och firmware

    Maskinvarudrivrutinen är den kod som körs på målsystemets
    huvudprocessorer. De flesta maskinvarudrivrutiner finns nu
    tillgängliga som fri programvara och ingår i de normala
    Debian-kärnpaketen i main.

      * GPU-drivrutin

          + Intel GPU-drivrutin (main)

          + AMD/ATI GPU-drivrutin (main)

          + NVIDIA GPU-drivrutin (main för drivrutinen nouveau och
            non-free för binära drivrutiner som stöds av
            tillverkaren.)

    Den fasta programvaran är den kod eller de data som laddas på den
    enhet som är kopplad till målsystemet (t.ex. CPU:ns mikrokod,
    renderingskod som körs på GPU, eller FPGA / CPLD, ...). Vissa
    paket med fast programvara är tillgängliga som fri programvara,
    men många paket för fast programvara är inte tillgängliga som fri
    programvara eftersom de innehåller binära data utan källa.
    Installation av dessa datapaket med fast programvara är nödvändig
    för att enheten ska fungera som förväntat.

      * Datapaket för fast programvara som innehåller data som
        laddats till det flyktiga minnet på målenheten.

          + firmware-linux-free (main)

          + firmware-linux-nonfree (non-free-firmware)

          + firmware-linux-*(icke-fri firmware)

          + *-firmware(icke-fri-firmware)

          + intel-mikrokod(icke-fri firmware)
   
          + amd64-mikrokod(icke-fri firmware)

      * Programpaket för uppdatering av fast programvara som
        uppdaterar data i det icke-flyktiga minnet på målenheten.

          + fwupd (main): Demon för uppdatering av fast programvara
            som hämtar data om fast programvara från Linux Vendor
            Firmware Service.

          + gnome-firmware (main): GTK-frontend för fwupd

          + plasma-discover-backend-fwupd (main): Qt-frontend för
            fwupd

    Observera att åtkomst till icke-firmware-paket tillhandahålls av
    det officiella installationsmediet för att erbjuda en funktionell
    installationsupplevelse för användaren sedan Debian 12 Bookworm.
    Området för non-free programvaror beskrivs i Avsnitt 2.1.5,
    ”Grunderna i Debian-arkivet”.

    Observera också att de data om fast programvara som hämtas av
    fwupd från Linux Vendor Firmware Service och laddas till den
    Linux-kärna som körs kan vara non-free.

9.11. Virtualiserat system

    Genom att använda ett virtualiserat system kan vi köra flera
    instanser av systemet samtidigt på en enda maskinvara.

    Tips
   
    Se Debians wiki om SystemVirtualization.

9.11.1. Virtualiserings- och emuleringsverktyg

    Det finns flera olika plattformar för virtualiserings- och
    emuleringsverktyg.

      * Kompletta hårdvaruemuleringspaket, t.ex. de som installeras
        av metapaketet games-emulator

      * Mestadels emulering på CPU-nivå med vissa emuleringar av I/
        O-enheter, t.ex. QEMU

      * Mestadels virtualisering på CPU-nivå med vissa emuleringar av
        I/O-enheter, t.ex. Kernel-based Virtual Machine (KVM)

      * Containervirtualisering på OS-nivå med stöd på kärnnivå,
        t.ex. LXC (Linux Containers), Docker, systemd-nspawn(1), ...

      * Virtualisering av filsystemåtkomst på OS-nivå med
        åsidosättande av systembiblioteksanrop på filsökvägen, t.ex.
        chroot

      * Virtualisering av filsystemåtkomst på OS-nivå med
        systembiblioteksanrop som åsidosätter filägandet, t.ex.
        fakeroot

      * OS API-emulering som till exempel Wine

      * Virtualisering på tolkningsnivå med dess val av körbar fil
        och åsidosättande av körtidsbibliotek, t.ex. virtualenv och
        venv för Python

    Containervirtualisering använder Avsnitt 4.7.5,
    ”Säkerhetsfunktioner i Linux” och är backend-tekniken för
    Avsnitt 7.7, ”Sandlåda”.

    Här följer några paket som hjälper dig att konfigurera det
    virtualiserade systemet.

    Tabell 9.27. Lista över virtualiseringsverktyg

    +---------------------------------------------------------------+
    |      paket       |popcon |storlek|        beskrivning         |
    |------------------+-------+-------+----------------------------|
    |coreutils         |V:910, |17994  |GNU core-verktyg som        |
    |                  |I:1000 |       |innehåller chroot(8)        |
    |------------------+-------+-------+----------------------------|
    |                  |V:914, |       |miscellaneous system        |
    |util-linux        |I:1000 |4758   |utilities which contain     |
    |                  |       |       |unshare(1)                  |
    |------------------+-------+-------+----------------------------|
    |                  |V:74,  |       |systemd container/nspawn    |
    |systemd-container |I:77   |2726   |verktyg som innehåller      |
    |                  |       |       |systemd-nspawn(1)           |
    |------------------+-------+-------+----------------------------|
    |                  |V:7.6, |       |specialiserat verktyg för   |
    |schroot           |I:9.5  |2222   |att köra Debians binära     |
    |                  |       |       |paket i chroot              |
    |------------------+-------+-------+----------------------------|
    |                  |V:3.8, |       |verktyg för att bygga binära|
    |sbuild            |I:7.2  |155    |Debian-paket från           |
    |                  |       |       |Debian-källor               |
    |------------------+-------+-------+----------------------------|
    |debootstrap       |V:4,   |331    |starta upp ett grundläggande|
    |                  |I:46   |       |Debian-system (skrivet i sh)|
    |------------------+-------+-------+----------------------------|
    |                  |V:8,   |       |bootstrappa ett             |
    |mmdebstrap        |I:13   |574    |Debian-system (skrivet i    |
    |                  |       |       |Perl)                       |
    |------------------+-------+-------+----------------------------|
    |cdebootstrap      |V:0.1, |114    |bootstrappa ett             |
    |                  |I:1.3  |       |Debian-system (skrivet i C) |
    |------------------+-------+-------+----------------------------|
    |cloud-image-utils |V:1,   |52     |verktyg för bildhantering i |
    |                  |I:14   |       |molnet                      |
    |------------------+-------+-------+----------------------------|
    |cloud-guest-utils |V:5,   |67     |verktyg för molngäster      |
    |                  |I:23   |       |                            |
    |------------------+-------+-------+----------------------------|
    |                  |       |       |Virtual Machine Manager:    |
    |virt-manager      |V:11,  |2309   |skrivbordsprogram för       |
    |                  |I:48   |       |hantering av virtuella      |
    |                  |       |       |maskiner                    |
    |------------------+-------+-------+----------------------------|
    |libvirt-clients   |V:48,  |1164   |program för                 |
    |                  |I:72   |       |libvirt-biblioteket         |
    |------------------+-------+-------+----------------------------|
    |docker.io         |V:50,  |81699  |docker: Körprogram för      |
    |                  |I:52   |       |Linux-containrar            |
    |------------------+-------+-------+----------------------------|
    |                  |V:33,  |       |podman: motor för att köra  |
    |podman            |I:36   |84895  |OCI-baserade behållare i    |
    |                  |       |       |Pods                        |
    |------------------+-------+-------+----------------------------|
    |                  |V:2.7, |       |motor för att köra          |
    |podman-docker     |I:3.3  |270    |OCI-baserade containrar i   |
    |                  |       |       |Pods - wrapper för docker   |
    |------------------+-------+-------+----------------------------|
    |incus             |V:0.8, |23     |Incus: systembehållare och  |
    |                  |I:3.2  |       |virtuell maskinhanterare    |
    |------------------+-------+-------+----------------------------|
    |games-emulator    |I:0.19 |21     |spel-emulator: Debians      |
    |                  |       |       |emulatorer för spel         |
    |------------------+-------+-------+----------------------------|
    |bochs             |V:0.05,|8180   |Bochs: IA-32 PC-emulator    |
    |                  |I:0.62 |       |                            |
    |------------------+-------+-------+----------------------------|
    |qemu-system       |I:21   |64     |QEMU: binärfiler för        |
    |                  |       |       |fullständig systememulering |
    |------------------+-------+-------+----------------------------|
    |qemu-user         |V:5.8, |471927 |QEMU: binärfiler för        |
    |                  |I:9.6  |       |emulering i användarläge    |
    |------------------+-------+-------+----------------------------|
    |qemu-utils        |V:13,  |12634  |QEMU: verktyg               |
    |                  |I:113  |       |                            |
    |------------------+-------+-------+----------------------------|
    |                  |       |       |KVM: full virtualisering på |
    |qemu-system-x86   |V:53,  |69241  |x86-hårdvara med            |
    |                  |I:96   |       |hårdvaruassisterad          |
    |                  |       |       |virtualisering              |
    |------------------+-------+-------+----------------------------|
    |                  |V:2.7, |       |VirtualBox: lösning för     |
    |virtualbox        |I:3.4  |151006 |x86-virtualisering på i386  |
    |                  |       |       |och amd64                   |
    |------------------+-------+-------+----------------------------|
    |                  |V:1.1, |       |Lådor: Enkel GNOME-app för  |
    |gnome-boxes       |I:6.5  |7074   |åtkomst till virtuella      |
    |                  |       |       |system                      |
    |------------------+-------+-------+----------------------------|
    |xen-tools         |V:0.1, |719    |verktyg för att hantera     |
    |                  |I:1.5  |       |debian XEN virtuell server  |
    |------------------+-------+-------+----------------------------|
    |wine              |V:13,  |204    |Vin: Implementering av      |
    |                  |I:56   |       |Windows API (standardpaket) |
    |------------------+-------+-------+----------------------------|
    |                  |V:1,   |       |DOSBox: x86-emulator med    |
    |dosbox            |I:12   |2697   |Tandy/Herc/CGA/EGA/VGA/     |
    |                  |       |       |SVGA-grafik, ljud och DOS   |
    |------------------+-------+-------+----------------------------|
    |lxc               |V:10,  |1681   |Linux-containrar verktyg för|
    |                  |I:13   |       |användarutrymme             |
    |------------------+-------+-------+----------------------------|
    |                  |V:8,   |       |venv för att skapa virtuella|
    |python3-venv      |I:153  |6      |pythonmiljöer               |
    |                  |       |       |(systembibliotek)           |
    |------------------+-------+-------+----------------------------|
    |                  |V:7,   |       |virtualenv för att skapa    |
    |python3-virtualenv|I:39   |374    |isolerade virtuella         |
    |                  |       |       |pythonmiljöer               |
    |------------------+-------+-------+----------------------------|
    |                  |V:8,   |       |pipx för installation av    |
    |pipx              |I:50   |4412   |python-program i isolerade  |
    |                  |       |       |miljöer                     |
    +---------------------------------------------------------------+


    Se Wikipedia-artikeln Comparison of platform virtual machines för
    en detaljerad jämförelse av olika lösningar för
    plattformsvirtualisering.

9.11.2. Arbetsflöde för virtualisering

    Notera
   
    Debians standardkärnor stöder KVM sedan Lenny.

    Ett typiskt arbetsflöde för virtualisering omfattar flera steg.

      * Skapa ett tomt filsystem (ett filträd eller en
        diskavbildning).

          + Filträdet kan skapas genom "mkdir -p /path/to/chroot".

          + Den obearbetade diskavbildningsfilen kan skapas med dd(1)
            (se Avsnitt 9.7.1, ”Skapa en diskavbildningsfil” och
            Avsnitt 9.7.5, ”Skapa en tom diskavbildningsfil”).

          + qemu-img(1) kan användas för att skapa och konvertera
            diskavbildningsfiler som stöds av QEMU.

          + Filformaten raw och VMDK kan användas som gemensamma
            format bland virtualiseringsverktyg.

      * Montera diskavbildningen med mount(8) till filsystemet
        (valfritt).

          + För den råa diskavbildningsfilen, montera den som
            loop-enhet eller enhetsmappningsenheter (se
            Avsnitt 9.7.3, ”Montering av diskavbildningsfilen”).

          + För diskavbildningar som stöds av QEMU, montera dem som
            nätverksblockenheter (se Avsnitt 9.11.3, ”Montering av
            avbildningsfilen för den virtuella disken”).

      * Fyll på målfilsystemet med nödvändiga systemdata.

          + Användningen av program som debootstrap och cdebootstrap
            hjälper till med denna process (se Avsnitt 9.11.4,
            ”Chroot-system”).

          + Använd installatörer av operativsystem under fullständig
            systememulering.

      * Kör ett program i en virtualiserad miljö.

          + chroot ger en grundläggande virtualiserad miljö som är
            tillräcklig för att kompilera program, köra konsolprogram
            och köra daemoner i den.

          + QEMU tillhandahåller CPU-emulering över flera
            plattformar.

          + QEMU med KVM ger fullständig systememulering genom
            maskinvaruassisterad virtualisering.

          + VirtualBox tillhandahåller fullständig systememulering på
            i386 och amd64 med eller utan maskinvarustödd
            virtualisering.

9.11.3. Montering av avbildningsfilen för den virtuella disken

    För den råa diskavbildningsfilen, se Avsnitt 9.7,
    ”Diskavbildningen”.

    För andra virtuella diskavbildningsfiler kan du använda qemu-nbd
    (8) för att exportera dem med hjälp av network block device
    protocol och montera dem med hjälp av nbd-kärnmodulen.

    qemu-nbd(8) stöder diskformat som stöds av QEMU: raw, qcow2,
    qcow, vmdk, vdi, bochs, cow (Linux copy-on-write i användarläge),
    parallels, dmg, cloop, vpc, vvfat (virtuell VFAT) och
    host_device.

    Nätverksblockenheten kan stödja partitioner på samma sätt som
    loop-enheten (se Avsnitt 9.7.3, ”Montering av
    diskavbildningsfilen”). Du kan montera den första partitionen på
    "disk.img" på följande sätt.

    # modprobe nbd max_part=16
    # qemu-nbd -v -c /dev/nbd0 disk.img
    ...
    # mkdir /mnt/part1
    # mount /dev/nbd0p1 /mnt/part1

    Tips
   
    Du kan exportera endast den första partitionen i "disk.img" genom
    att använda alternativet "-P 1" i qemu-nbd(8).

9.11.4. Chroot-system

    Om du vill prova en ny Debian-miljö från en terminalkonsol
    rekommenderar jag att du använder chroot. Detta gör att du kan
    köra konsolprogram för Debian unstable och testing utan de
    vanliga risker som är förknippade med detta och utan att starta
    om. chroot(8) är det mest grundläggande sättet.

    Observera
   
    Exemplen nedan förutsätter att både det överordnade systemet och
    chroot-systemet har samma amd64 CPU-arkitektur.

    Även om du manuellt kan skapa en chroot(8)-miljö med hjälp av
    debootstrap(1), kräver det en del arbete.

    Paketet sbuild för att bygga Debian-paket från källkod använder
    chroot-miljön som hanteras av paketet schroot. Det levereras med
    hjälpskriptet sbuild-createchroot(1). Låt oss lära oss hur det
    fungerar genom att köra det på följande sätt.

    $ sudo mkdir -p /srv/chroot
    $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
     ...

    Du ser hur debootstrap(8) fyller i systemdata för unstable miljö
    under "/srv/chroot/unstable-amd64-sbuild" för ett minimalt
    byggsystem.

    Du kan logga in i den här miljön med hjälp av schroot(1).

    $ sudo schroot -v -c chroot:unstable-amd64-sbuild

    Du ser hur ett systemskal som körs i en unstable miljö skapas.

    Notera

    Filen "/usr/sbin/policy-rc.d", som alltid avslutas med 101,
    förhindrar att daemonprogram startas automatiskt i
    Debiansystemet. Se "/usr/share/doc/init-system-helpers/
    README.policy-rc.d.gz".

    Notera

    Vissa program under chroot kan behöva tillgång till fler filer
    från det överordnade systemet för att fungera än vad
    sbuild-createchroot ger enligt ovan. Till exempel kan "/sys", "/
    etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", etc.
    behöva bind-monteras eller kopieras.

    Tips

    Paketet sbuild hjälper till att konstruera ett chroot-system och
    bygger ett paket inuti chroot med hjälp av schroot som backend.
    Det är ett idealiskt system för att kontrollera byggberoenden. Se
    mer om sbuild på Debians wiki och exempel på sbuild-konfiguration
    i "Guide for Debian Maintainers".

    Tips

    Kommandot systemd-nspawn(1) hjälper till att köra ett kommando
    eller operativsystem i en lättviktscontainer på liknande sätt som
    chroot. Det är mer kraftfullt eftersom det använder namnrymder
    för att helt virtualisera processträdet, IPC, värdnamn, domännamn
    och, valfritt, nätverks- och användardatabaser. Se
    systemd-nspawn.

9.11.5. Flera skrivbordssystem

    Om du vill prova en ny GUI-skrivbordsmiljö för något
    operativsystem rekommenderar jag att du använder QEMU eller KVM
    på ett stable Debian-system för att köra flera skrivbordssystem
    på ett säkert sätt med hjälp av virtualisering. Dessa gör att du
    kan köra alla skrivbordsprogram, inklusive Debian unstable och
    testing, utan de vanliga risker som är förknippade med dem och
    utan att behöva starta om.

    Eftersom ren QEMU är mycket långsam rekommenderas det att
    accelerera den med KVM när värdsystemet stöder det.

    Administrerare av virtuella maskiner, även känd som virt-manager,
    är ett bekvämt grafiskt gränssnittsverktyg för hantering av
    KVM-virtuella maskiner via libvirt.

    Den virtuella diskavbildningen "virtdisk.qcow2" som innehåller
    ett Debian-system för QEMU kan skapas med debian-installer: Små
    CD-skivor enligt följande.

    $ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
    $ qemu-img create -f qcow2 virtdisk.qcow2 5G
    $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
    ...

    Tips

    Att köra andra GNU/Linux-distributioner som Ubuntu och Fedora
    under virtualisering är ett bra sätt att lära sig
    konfigurationstips. Andra proprietära operativsystem kan också
    köras snyggt under denna GNU/Linux-virtualisering.

    Se fler tips på Debians wiki: SystemVirtualisering.


---------------------------------------------------------------------

    ^[2] Mer detaljerade exempel på anpassning:"Vim
    Galore","sensible.vim", ...

    ^[3] vim-pathogen var populär.

Kapitel 10. Datahantering

    Verktyg och tips för att hantera binär- och textdata på
    Debian-systemet beskrivs.

10.1. Delning, kopiering och arkivering

    Varning

    Okoordinerad skrivåtkomst till aktivt åtkomna enheter och filer
    från flera processer får inte göras för att undvika
    tävlingstillståndet. Fillåsningsmekanismer som använder flock(1)
    kan användas för att undvika detta.

    Datasäkerheten och den kontrollerade delningen av data har flera
    aspekter.

      * Skapande av dataarkiv

      * Tillgång till fjärrlagring

      * Dupliceringen

      * Spårning av modifieringshistoriken

      * Underlättande av datadelning

      * Förhindrande av obehörig filåtkomst

      * Detektering av obehörig filändring

    Dessa kan realiseras genom att använda en kombination av olika
    verktyg.

      * Verktyg för arkivering och komprimering

      * Verktyg för kopiering och synkronisering

      * Filsystem i nätverk

      * Flyttbara lagringsmedier
   
      * Det säkra skalet

      * Systemet för autentisering

      * Verktyg för versionshanteringssystem

      * Hash- och kryptografiska krypteringsverktyg

10.1.1. Verktyg för arkivering och komprimering

    Här följer en sammanfattning av de arkiv- och
    komprimeringsverktyg som finns tillgängliga i Debian-systemet.

    Tabell 10.1. Lista över arkiv- och komprimeringsverktyg

    +--------------------------------------------------------------------+
    |  paket   |popcon|storlek|tillägg|kommando|        kommentar        |
    |----------+------+-------+-------+--------+-------------------------|
    |tar       |V:906,|3101   |.tar   |tjära(1)|standardarkiveraren (de  |
    |          |I:1000|       |       |        |facto-standard)          |
    |----------+------+-------+-------+--------+-------------------------|
    |cpio      |V:354,|1201   |.cpio  |cpio(1) |Unix System V-arkivering,|
    |          |I:999 |       |       |        |använd med find(1)       |
    |----------+------+-------+-------+--------+-------------------------|
    |binutils  |V:190,|1119   |.ar    |ar(1)   |arkiverare för skapande  |
    |          |I:637 |       |       |        |av statiska bibliotek    |
    |----------+------+-------+-------+--------+-------------------------|
    |fastjar   |V:0.9,|182    |.jar   |fastjar |arkiveringsprogram för   |
    |          |I:9.8 |       |       |(1)     |Java (zip-liknande)      |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |ny                       |
    |pax       |V:5.4,|167    |.pax   |pax(1)  |POSIX-standardarkiverare,|
    |          |I:9.5 |       |       |        |en kompromiss mellan tar |
    |          |      |       |       |        |och cpio                 |
    |----------+------+-------+-------+--------+-------------------------|
    |          |V:902,|       |       |gzip(1),|GNU LZ77                 |
    |gzip      |I:1000|256    |.gz    |zcat(1),|komprimeringsverktyg (de |
    |          |      |       |       |…       |facto-standard)          |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |Burrows-Wheeler          |
    |          |      |       |       |bzip2   |block-sorterande         |
    |          |V:159,|       |       |(1),    |komprimeringsverktyg med |
    |bzip2     |I:972 |113    |.bz2   |bzcat   |högre komprimeringsgrad  |
    |          |      |       |       |(1), …  |än gzip(1) (långsammare  |
    |          |      |       |       |        |än gzip med liknande     |
    |          |      |       |       |        |syntax)                  |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |LZMA-komprimeringsverktyg|
    |lzma      |V:1,  |349    |.lzma  |lzma(1) |med högre                |
    |          |I:10  |       |       |        |komprimeringsgrad än gzip|
    |          |      |       |       |        |(1) (föråldrad)          |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |XZ-komprimeringsverktyg  |
    |          |      |       |       |        |med högre                |
    |          |      |       |       |xz(1),  |komprimeringsgrad än     |
    |xz-utils  |V:309,|1520   |.xz    |xzdec   |bzip2(1) (långsammare än |
    |          |I:981 |       |       |(1), …  |gzip men snabbare än     |
    |          |      |       |       |        |bzip2; ersättning för    |
    |          |      |       |       |        |LZMA-komprimeringsverktyg|
    |          |      |       |       |        |)                        |
    |----------+------+-------+-------+--------+-------------------------|
    |          |V:319,|       |       |zstd(1),|Zstandard verktyg för    |
    |zstd      |I:814 |2308   |.zstd  |zstdcat |snabb förlustfri         |
    |          |      |       |       |(1), …  |komprimering             |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |7-Zip                    |
    |p7zip     |V:5,  |8      |.7z    |7zr(1), |filarkiveringsprogram med|
    |          |I:184 |       |       |p7zip(1)|hög komprimeringsgrad    |
    |          |      |       |       |        |(LZMA-komprimering)      |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |7-Zip                    |
    |          |V:15, |       |       |7z(1),  |filarkiveringsprogram med|
    |p7zip-full|I:210 |12     |.7z    |7za(1)  |hög komprimeringsgrad    |
    |          |      |       |       |        |(LZMA-komprimering och   |
    |          |      |       |       |        |andra)                   |
    |----------+------+-------+-------+--------+-------------------------|
    |          |      |       |       |        |LZO-komprimeringsverktyg |
    |          |      |       |       |        |med högre komprimerings- |
    |          |V:12, |       |       |        |och                      |
    |lzop      |I:132 |164    |.lzo   |lzop(1) |dekomprimeringshastighet |
    |          |      |       |       |        |än gzip(1) (lägre        |
    |          |      |       |       |        |komprimeringsgrad än gzip|
    |          |      |       |       |        |med liknande syntax)     |
    |----------+------+-------+-------+--------+-------------------------|
    |zip       |V:48, |635    |.zip   |zip(1)  |InfoZIP: DOS arkiv- och  |
    |          |I:360 |       |       |        |komprimeringsverktyg     |
    |----------+------+-------+-------+--------+-------------------------|
    |          |V:109,|       |       |packa   |InfoZIP: DOS verktyg för |
    |unzip     |I:747 |399    |.zip   |upp(1)  |avarkivering och         |
    |          |      |       |       |        |dekomprimering           |
    +--------------------------------------------------------------------+


    Varning
   
    Ange inte variabeln "$TAPE" om du inte vet vad du kan förvänta
    dig. Den ändrar tar(1):s beteende.

      * Det gzippade tar(1)-arkivet använder filändelsen ".tgz" eller
        ".tar.gz".

      * Det xz-komprimerade tar(1)-arkivet använder filändelsen
        ".txz" eller ".tar.xz".

      * Populära komprimeringsmetoder i FOSS-verktyg som tar(1) har
        flyttats enligt följande: gzip → bzip2 → xz

      * cp(1), scp(1) och tar(1) kan ha vissa begränsningar för
        speciella filer. cpio(1) är mest mångsidig.
   
      * cpio(1) är utformat för att användas med find(1) och andra
        kommandon och lämpar sig för att skapa backup-skript eftersom
        filvalsdelen av skriptet kan testas oberoende av varandra.

      * Libreoffice-datafilernas interna struktur är ".jar"-filer som
        också kan öppnas med unzip.

      * Det de facto plattformsoberoende arkivverktyget är zip.
        Använd det som "zip -rX" för att uppnå maximal
        kompatibilitet. Använd även alternativet "-s" om den maximala
        filstorleken är viktig.

10.1.2. Verktyg för kopiering och synkronisering

    Här följer en sammanfattning av enkla kopierings- och
    säkerhetskopieringsverktyg som finns tillgängliga på
    Debian-systemet.

    Tabell 10.2. Lista över kopierings- och synkroniseringsverktyg

    +---------------------------------------------------------------+
    |    paket     |popcon|storlek|verktyg|        funktion         |
    |--------------+------+-------+-------+-------------------------|
    |              |V:910,|       |       |lokal kopiering av filer |
    |coreutils     |I:1000|17994  |GNU cp |och kataloger ("-a" för  |
    |              |      |       |       |rekursiv)                |
    |--------------+------+-------+-------+-------------------------|
    |              |V:657,|       |       |fjärrkopiera filer och   |
    |openssh-client|I:996 |3521   |scp    |kataloger (klient, "-r"  |
    |              |      |       |       |för rekursiv)            |
    |--------------+------+-------+-------+-------------------------|
    |openssh-server|V:772,|3594   |sshd   |fjärrkopiera filer och   |
    |              |I:820 |       |       |kataloger (fjärrserver)  |
    |--------------+------+-------+-------+-------------------------|
    |              |V:196,|       |       |1-vägs                   |
    |rsync         |I:542 |835    |       |fjärrsynkronisering och  |
    |              |      |       |       |säkerhetskopiering       |
    |--------------+------+-------+-------+-------------------------|
    |              |V:2,  |       |       |2-vägs                   |
    |unison        |I:11  |14     |       |fjärrsynkronisering och  |
    |              |      |       |       |säkerhetskopiering       |
    +---------------------------------------------------------------+


    Kopiering av filer med rsync(8) har fler funktioner än andra.

      * delta-överföringsalgoritm som bara skickar skillnaderna
        mellan källfilerna och de befintliga filerna i destinationen

      * algoritm för snabbkontroll (som standard) som letar efter
        filer som har ändrats i storlek eller i tid för senaste
        ändring

      * "--exclude" och "--exclude-from" alternativ liknande tar(1)

      * "ett efterföljande snedstreck på källkatalogen" syntax som
        undviker att skapa en ytterligare katalognivå på
        destinationen.

    Tips

    Versionskontrollsystem (VCS)-verktyg i Tabell 10.14, ”Lista över
    andra verktyg för versionskontrollsystem” kan fungera som
    flervägskopierings- och synkroniseringsverktyg.

10.1.3. Idiom för arkivet

    Här är flera sätt att arkivera och avarkivera hela innehållet i
    katalogen "./source" med hjälp av olika verktyg.

    GNU tar(1):

    $ tar -cvJf archive.tar.xz ./source
    $ tar -xvJf archive.tar.xz

    Alternativt på följande sätt.

    $ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -T -

    cpio(1):

    $ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio
    $ zcat archive.cpio.xz | cpio -i

10.1.4. Idiom för kopian

    Här är flera sätt att kopiera hela innehållet i katalogen "./
    source" med hjälp av olika verktyg.

      * Lokal kopia: "Katalogen "./source" → katalogen "/dest
   
      * Fjärrkopiering: "./source"-katalogen på den lokala värden → "
        /dest"-katalogen på värden "user@host.dom"

    rsync(8):

    # cd ./source; rsync -aHAXSv . /dest
    # cd ./source; rsync -aHAXSv . user@host.dom:/dest

    Alternativt kan du använda syntaxen "ett efterföljande snedstreck
    på källkatalogen".

    # rsync -aHAXSv ./source/ /dest
    # rsync -aHAXSv ./source/ user@host.dom:/dest

    Alternativt på följande sätt.

    # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
    # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

    GNU cp(1) och openSSH scp(1):

    # cd ./source; cp -a . /dest
    # cd ./source; scp -pr . user@host.dom:/dest

    GNU tar(1):

    # (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
    # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

    cpio(1):

    # cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

    Du kan ersätta "." med "foo" för alla exempel som innehåller "."
    för att kopiera filer från katalogen "./source/foo" till
    katalogen "/dest/foo".

    Du kan ersätta "." med den absoluta sökvägen "/path/to/source/
    foo" för alla exempel som innehåller "." för att släppa "cd ./
    source;". Dessa kopierar filer till olika platser beroende på
    vilka verktyg som används enligt följande.

      * "/dest/foo": rsync(8), GNU cp(1) och scp(1)
   
      * "/dest/path/to/source/foo": GNU tar(1) och cpio(1)

    Tips
   
    rsync(8) och GNU cp(1) har alternativet "-u" för att hoppa över
    filer som är nyare på mottagaren.

10.1.5. Idiom för urval av filer

    find(1) används för att välja filer för arkiv- och
    kopieringskommandon (se Avsnitt 10.1.3, ”Idiom för arkivet” och
    Avsnitt 10.1.4, ”Idiom för kopian”) eller för xargs(1) (se
    Avsnitt 9.4.9, ”Upprepa ett kommando loopa över filer”). Detta
    kan förbättras genom att använda dess kommandoparametrar.

    Den grundläggande syntaxen för find(1) kan sammanfattas enligt
    följande.

      * Dess villkorliga argument utvärderas från vänster till höger.

      * Denna utvärdering upphör när resultatet har fastställts.

      * "Logisk OR" (anges med "-o" mellan villkor) har lägre
        prioritet än "logisk AND" (anges med "-a" eller inget mellan
        villkor).

      * "Logisk NOT" (anges med "!" före ett villkor) har högre
        prioritet än "logisk AND".

      * "-prune" returnerar alltid logisk TRUE och, om det är en
        katalog, stoppas sökningen av filen bortom denna punkt.

      * "-name" matchar basen av filnamnet med shell glob (se
        Avsnitt 1.5.6, ”Skal glob”) men matchar även dess inledande
        "." med metatecken som "*" och "?" (ny POSIX-funktion )

      * "-regex" matchar hela sökvägen med BRE i emacs-stil (se
        Avsnitt 1.6.2, ”Vanliga uttryck”) som standard.

      * "-size" matchar filen baserat på filstorleken (värdet föregås
        av "+" för större, föregås av "-" för mindre)

      * "-newer" matchar den fil som är nyare än den som anges i dess
        argument.

      * "-print0" returnerar alltid logisk TRUE och skriver ut det
        fullständiga filnamnet(nollavslutat) på standardutmatningen.

    find(1) används ofta med en idiomatisk stil som följande.

    # find /path/to \
        -xdev -regextype posix-extended \
        -type f -regex ".*\.cpio|.*~" -prune -o \
        -type d -regex ".*/\.git" -prune -o \
        -type f -size +99M -prune -o \
        -type f -newer /path/to/timestamp -print0

    Detta innebär att göra följande åtgärder.

     1. Sök alla filer som börjar från "/path/to"

     2. Begränsar sin sökning globalt inom sitt startfilsystem och
        använder ERE (se Avsnitt 1.6.2, ”Vanliga uttryck”) istället

     3. Utesluta filer som matchar regex av ".*\.cpio" eller ".*~"
        från sökning genom att stoppa bearbetning
   
     4. Utesluta kataloger som matchar regex av ".*/\.git" från
        sökning genom att stoppa bearbetning

     5. Uteslut filer som är större än 99 megabyte (enheter om
        1048576 byte) från sökning genom att stoppa bearbetningen

     6. Skriv ut filnamn som uppfyller ovanstående sökvillkor och är
        nyare än "/path/to/timestamp"

    Observera den idiomatiska användningen av "-prune -o" för att
    utesluta filer i exemplet ovan.

    Notera

    För icke-Debian Unix-liknande system kan det hända att vissa
    alternativ inte stöds av find(1). I sådana fall bör du överväga
    att justera matchningsmetoderna och ersätta "-print0" med
    "-print". Du kan också behöva justera relaterade kommandon.

10.1.6. Arkivmedia

    När du väljer datalagringsmedia för viktiga dataarkiv bör du vara
    försiktig med deras begränsningar. För säkerhetskopiering av små
    personliga data använder jag CD-R och DVD-R från
    varumärkesföretaget och förvarar dem i en sval, skuggig, torr och
    ren miljö. (Bandarkivmedier verkar vara populära för
    professionellt bruk.)

    Notera

    Ett brandsäkert kassaskåp är avsett för pappersdokument. De
    flesta datalagringsmedier har lägre temperaturtolerans än papper.
    Jag förlitar mig vanligtvis på flera säkra krypterade kopior som
    lagras på flera säkra platser.

    Optimistisk lagringstid för arkivmedia som finns på nätet
    (mestadels från leverantörsinformation).

      * 100+ år : Syrafritt papper med bläck

      * 100 år : Optisk lagring (CD/DVD, CD/DVD-R)
   
      * 30 år: Magnetisk lagring (band, diskett)

      * 20 år: Optisk lagring med fasändring (CD-RW)

    Här ingår inte mekaniska fel på grund av hantering etc.

    Optimistisk skrivcykel för arkivmedia som finns på nätet
    (mestadels från leverantörsinformation).

      * 250.000+ cykler : Hårddisk-enhet

      * 10.000+ cykler : Flashminne
   
      * 1.000 cykler : CD/DVD-RW

      * 1 cykler : CD/DVD-R, papper

    Observera

    Siffrorna för lagringstid och skrivcykel bör inte användas för
    att fatta beslut om kritisk datalagring. Se den specifika
    produktinformation som tillhandahålls av tillverkaren.

    Tips

    Eftersom CD/DVD-R och papper endast har 1 skrivcykel, förhindrar
    de i sig oavsiktlig dataförlust genom överskrivning. Detta är en
    fördel!

    Tips

    Om du behöver snabb och frekvent säkerhetskopiering av stora
    datamängder kan en hårddisk på en fjärrdator som är kopplad till
    en snabb nätverksanslutning vara det enda realistiska
    alternativet.

    Tips

    Om du använder återskrivbara media för dina säkerhetskopior kan
    det vara en bra idé att använda filsystem som btrfs eller zfs som
    stöder skrivskyddade ögonblicksbilder.

10.1.7. Flyttbar lagringsenhet

    Flyttbara lagringsenheter kan vara något av följande.

      * USB-minne

      * Hårddisk

      * Optisk skivenhet

      * Digitalkamera

      * Digital musikspelare

    De kan anslutas via något av följande.

      * USB

      * IEEE 1394 / FireWire

      * PC-kort

    Moderna skrivbordsmiljöer som GNOME och KDE kan montera dessa
    flyttbara enheter automatiskt utan en matchande "/etc/
    fstab"-post.

      * paketet udisks2 tillhandahåller en daemon och tillhörande
        verktyg för att montera och avmontera dessa enheter.
   
      * D-bus skapar händelser för att starta automatiska processer.

      * PolicyKit ger nödvändiga behörigheter.

    Tips
   
    Automountade enheter kan ha monteringsalternativet "uhelper=" som
    används av umount(8).

    Tips
   
    Automounting under modern skrivbordsmiljö sker endast när dessa
    flyttbara mediaenheter inte är listade i "/etc/fstab".

    Monteringspunkten under modern skrivbordsmiljö väljs som "/media/
    användarnamn/disk_label" som kan anpassas enligt följande.

      * mlabel(1) för FAT-filsystem

      * genisoimage(1) med alternativet "-V" för ISO9660-filsystem

      * tune2fs(1) med alternativet "-L" för filsystemet ext2/ext3/
        ext4

    Tips
   
    Valet av kodning kan behöva tillhandahållas som
    monteringsalternativ (se Avsnitt 8.1.3, ”Kodning av filnamn”).

    Tips

    Om du använder GUI-menyn för att avmontera ett filsystem kan det
    hända att dess dynamiskt genererade enhetsnod, t.ex. "/dev/sdc",
    tas bort. Om du vill behålla enhetsnoden kan du avmontera den med
    kommandot umount(8) från skalprompten.

10.1.8. Val av filsystem för delning av data

    När du delar data med ett annat system via en flyttbar
    lagringsenhet bör du formatera den med ett gemensamt filsystem
    som stöds av båda systemen. Här är en lista över filsystem som
    kan väljas.

    Notera

    Statements on hard disk (HDD) are applicable to other storage
    devices such as SSD / USB flash drive / Memory card / ... .
    Replace device names in examples such as /dev/sda with applicable
    device names /dev/nvme0, /dev/mmcblk0, ... .

    Tabell 10.3. Lista över filsystemval för flyttbara
    lagringsenheter med typiska användningsscenarier

    +---------------------------------------------------------------+
    |filsystemets|           typiskt användningsscenario            |
    |    namn    |                                                  |
    |------------+--------------------------------------------------|
    |FAT12       |plattformsoberoende delning av data på disketten  |
    |            |(<32MiB)                                          |
    |------------+--------------------------------------------------|
    |FAT16       |plattformsoberoende delning av data på en liten   |
    |            |hårddiskliknande enhet (2 Gb)                     |
    |------------+--------------------------------------------------|
    |            |plattformsoberoende delning av data på en stor    |
    |FAT32       |hårddiskliknande enhet (<8TiB, stöds av nyare än  |
    |            |MS Windows95 OSR2)                                |
    |------------+--------------------------------------------------|
    |            |plattformsoberoende delning av data på den stora  |
    |exFAT       |hårddisken som enhet (512TiB, stöds av WindowsXP, |
    |            |Mac OS X Snow Leopard 10.6.5 och Linux-kärnan     |
    |            |sedan 5.4 release)                                |
    |------------+--------------------------------------------------|
    |            |plattformsoberoende delning av data på den stora  |
    |NTFS        |hårddiskliknande enheten (stöds inbyggt i MS      |
    |            |Windows NT och senare versioner, och stöds av     |
    |            |NTFS-3G via FUSE på Linux)                        |
    |------------+--------------------------------------------------|
    |ISO9660     |plattformsoberoende delning av statiska data på   |
    |            |CD-R och DVD+/-R                                  |
    |------------+--------------------------------------------------|
    |UDF         |inkrementell dataskrivning på CD-R och DVD+/-R    |
    |            |(ny)                                              |
    |------------+--------------------------------------------------|
    |MINIX       |utrymmeseffektiv lagring av unix-fildata på       |
    |            |disketten                                         |
    |------------+--------------------------------------------------|
    |ext2        |delning av data på hårddisken som enhet med äldre |
    |            |Linux-system                                      |
    |------------+--------------------------------------------------|
    |ext3        |delning av data på hårddisken som enhet med äldre |
    |            |Linux-system                                      |
    |------------+--------------------------------------------------|
    |ext4        |delning av data på hårddisken som enhet med       |
    |            |nuvarande Linux-system                            |
    |------------+--------------------------------------------------|
    |            |delning av data på hårddisken som enhet med       |
    |btrfs       |nuvarande Linux-system med skrivskyddade          |
    |            |ögonblicksbilder                                  |
    +---------------------------------------------------------------+


    Tips

    Se Avsnitt 9.9.1, ”Kryptering av flyttbara diskar med dm-crypt/
    LUKS” för plattformsoberoende delning av data med hjälp av
    kryptering på enhetsnivå.

    FAT-filsystemet stöds av nästan alla moderna operativsystem och
    är mycket användbart för datautbyte via flyttbara
    hårddiskliknande media.

    Vid formatering av flyttbara hårddiskar som enheter för
    plattformsoberoende delning av data med FAT-filsystemet bör
    följande vara säkra val.

      * Partitionera dem med fdisk(8), cfdisk(8) eller parted(8) (se
        Avsnitt 9.6.2, ”Konfiguration av diskpartitioner”) till en
        enda primär partition och markera den på följande sätt.

          + Skriv "6" för FAT16 för media som är mindre än 2 GB.

          + Skriv "c" för FAT32 (LBA) för större media.
   
      * Formatera den primära partitionen med mkfs.vfat(8) med
        följande.

          + Bara enhetsnamnet, t.ex. "/dev/sda1" för FAT16

          + Det uttryckliga alternativet och dess enhetsnamn, t.ex.
            "-F 32 /dev/sda1" för FAT32

    När du använder FAT- eller ISO9660-filsystemen för att dela data
    bör du tänka på följande.

      * Arkivera filer i en arkivfil först med tar(1) eller cpio(1)
        för att behålla det långa filnamnet, den symboliska länken,
        den ursprungliga Unix-filbehörigheten och ägarinformationen.

      * Dela upp arkivfilen i bitar på mindre än 2 GiB med kommandot
        split(1) för att skydda den från filstorleksbegränsningen.

      * Kryptering av arkivfilen för att skydda dess innehåll från
        obehörig åtkomst.

    Notera

    För FAT-filsystem är den maximala filstorleken (2^32 - 1) byte =
    (4GiB - 1 byte). För vissa program på det äldre 32-bitars
    operativsystemet var den maximala filstorleken ännu mindre (2^31
    - 1) byte = (2GiB - 1 byte). Debian lider inte av det senare
    problemet.

    Notera

    Microsoft rekommenderar inte att FAT används för enheter eller
    partitioner som är större än 200 MB. Microsoft belyser dess
    brister, t.ex. ineffektiv användning av diskutrymme, i
    sin"Översikt över FAT-, HPFS- och NTFS-filsystem". Naturligtvis
    bör vi normalt använda ext4-filsystemet för Linux.

    Tips
   
    Mer information om filsystem och åtkomst till filsystem finns
    i"Filesystems HOWTO".

10.1.9. Delning av data via nätverk

    När du delar data med andra system via nätverket bör du använda
    en gemensam tjänst. Här är några tips.

    Tabell 10.4. Lista över de nätverkstjänster som ska väljas med
    det typiska användningsscenariot

    +---------------------------------------------------------------+
    |  nätverkstjänst  | beskrivning av typiskt användningsscenario |
    |------------------+--------------------------------------------|
    |SMB/CIFS          |dela filer via "Microsoft Windows Network", |
    |nätverksmonterat  |se smb.conf(5) och The Official Samba 3.x.x |
    |filsystem med     |HOWTO and Reference Guide eller paketet     |
    |Samba             |samba-doc                                   |
    |------------------+--------------------------------------------|
    |NFS               |                                            |
    |nätverksmonterat  |dela filer via "Unix/Linux Network", se     |
    |filsystem med     |exports(5) och Linux NFS-HOWTO              |
    |Linux-kärnan      |                                            |
    |------------------+--------------------------------------------|
    |HTTP-tjänst       |dela filer mellan webbserver/klient         |
    |------------------+--------------------------------------------|
    |                  |fildelning mellan webbserver/klient med     |
    |HTTPS-tjänst      |krypterad Secure Sockets Layer (SSL) eller  |
    |                  |Transport Layer Security (TLS)              |
    |------------------+--------------------------------------------|
    |FTP-tjänst        |dela filer mellan FTP-server/klient         |
    +---------------------------------------------------------------+


    Även om dessa filsystem som monteras över nätverket och
    filöverföringsmetoder över nätverket är ganska praktiska för att
    dela data, kan de vara osäkra. Deras nätverksanslutning måste
    säkras på följande sätt.

      * Kryptera den med SSL/TLS

      * Tunnla den via SSH
   
      * Tunnla den via VPN

      * Begränsa det bakom den säkra brandväggen

    Se även Avsnitt 6.5, ”Andra nätverksapplikationsservrar” och
    Avsnitt 6.6, ”Andra klienter för nätverksapplikationer”.

10.2. Backup och återställning

    Vi vet alla att datorer ibland går sönder eller att mänskliga fel
    orsakar skador på system och data. Säkerhetskopiering och
    återställning är en viktig del av en framgångsrik
    systemadministration. Alla möjliga felsituationer drabbar dig en
    dag.

    Tips
   
    Håll ditt backupsystem enkelt och gör backup ofta. Att ha
    backup-data är viktigare än hur tekniskt bra din backup-metod är.

10.2.1. Policy för säkerhetskopiering och återställning

    Det finns tre nyckelfaktorer som avgör den faktiska policyn för
    säkerhetskopiering och återställning.

     1. Att veta vad man ska säkerhetskopiera och återställa.

          + Datafiler som skapats direkt av dig: data i "~/"

          + Datafiler som skapats av program som du använder: data i
            "/var/" (utom "/var/cache/", "/var/run/" och "/var/tmp/")

          + Systemkonfigurationsfiler: data i "/etc/"

          + Lokala program: data i "/usr/local/" eller "/opt/"

          + Information om systeminstallation: ett memo i klartext om
            viktiga steg (partition, ...)

          + Bevisad uppsättning data: bekräftad genom experimentella
            återvinningsoperationer i förväg

              o Cron-jobb som en användarprocess: filer i katalogen "
                /var/spool/cron/crontabs" och starta om cron(8). Se
                Avsnitt 9.4.14, ”Regelbunden schemaläggning av
                arbetsuppgifter” för cron(8) och crontab(1).

              o Systemd-timerjobb som användarprocesser: filer i
                katalogen "~/.config/systemd/user". Se systemd.timer
                (5) och systemd.service(5).

              o Autostarta jobb som användarprocesser: filer i
                katalogen "~/.config/autostart". Se Specifikation för
                autostart av skrivbordsprogram.

     2. Att veta hur man säkerhetskopierar och återställer.

          + Säker lagring av data: skydd mot överskrivning och
            systemfel

          + Frekvent säkerhetskopiering: schemalagd
            säkerhetskopiering

          + Redundant säkerhetskopiering: dataspegling

          + En idiotsäker process: enkel backup med ett enda kommando

     3. Bedömning av risker och kostnader.

          + Risk för att data går förlorade

              o Data bör åtminstone finnas på olika diskpartitioner,
                helst på olika diskar och maskiner för att motstå
                korruption i filsystemet. Viktiga data lagras bäst på
                ett skrivskyddat filsystem. ^[4]

          + Risk för dataintrång

              o Känsliga identitetsdata som "/etc/ssh/
                ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/
                share/keyrings/*", "/etc/passwd", "/etc/shadow",
                "popularity-contest.conf", "/etc/ppp/pap-secrets" och
                "/etc/exim4/passwd.client" bör säkerhetskopieras som
                krypterade. ^[5] (Se Avsnitt 9.9, ”Tips om
                datakryptering”.)

              o Hårdkoda aldrig lösenordet för systeminloggning eller
                lösenfrasen för dekryptering i något skript, inte ens
                på ett betrott system. (Se Avsnitt 10.3.6,
                ”Nyckelring för lösenord”.)

          + Felfunktioner och deras möjligheter

              o Hårdvaran (särskilt hårddisken) går sönder

              o Filsystemet kan skadas och data i det kan gå
                förlorade

              o Fjärrlagringssystem är inte tillförlitligt när det
                gäller säkerhetsöverträdelser

              o Svagt lösenordsskydd kan lätt avslöjas

              o Filbehörighetssystemet kan ha äventyrats

          + Resurser som krävs för backup: personal, hårdvara,
            mjukvara, …

              o Automatisk schemalagd säkerhetskopiering med
                cron-jobb eller systemd-timerjobb

    Tips

    Du kan återställa debconf-konfigurationsdata med
    "debconf-set-selections debconf-selections" och dpkg-urvalsdata
    med "dpkg--set-selection <dpkg-selections.list".

    Notera

    Säkerhetskopiera inte innehållet i pseudofilsystemet som finns i
    /proc, /sys, /tmp och /run (se Avsnitt 1.2.12, ”procfs och sysfs”
    och Avsnitt 1.2.13, ”tmpfs”). Om du inte vet exakt vad du gör är
    det enorma mängder värdelös data.

    Notera

    Du kanske vill stoppa vissa applikationsdaemons, t.ex. MTA (se
    Avsnitt 6.2.4, ”Transportagent för post (MTA)”), medan du
    säkerhetskopierar data.

10.2.2. Verktygssviter för säkerhetskopiering

    Här är en utvald lista över viktiga säkerhetskopieringsprogram
    som finns tillgängliga i Debian-systemet.

    Tabell 10.5. Lista över verktyg för säkerhetskopiering

    +---------------------------------------------------------------+
    |    paket     |popcon |storlek|          beskrivning           |
    |--------------+-------+-------+--------------------------------|
    |              |V:6.3, |       |Bacula: säkerhetskopiering,     |
    |bacula-common |I:7.1  |2501   |återställning och verifiering av|
    |              |       |       |nätverk - vanliga supportfiler  |
    |--------------+-------+-------+--------------------------------|
    |              |V:0.3, |       |Bacula: säkerhetskopiering,     |
    |bacula-client |I:1.8  |199    |återställning och verifiering av|
    |              |       |       |nätverk - metapaket för klienter|
    |--------------+-------+-------+--------------------------------|
    |              |V:0.6, |       |Bacula: säkerhetskopiering,     |
    |bacula-console|I:2.1  |112    |återställning och verifiering av|
    |              |       |       |nätverk - textkonsol            |
    |--------------+-------+-------+--------------------------------|
    |              |       |       |Bacula: säkerhetskopiering,     |
    |bacula-server |I:0.61 |199    |återställning och verifiering av|
    |              |       |       |nätverk - metapaket för server  |
    |--------------+-------+-------+--------------------------------|
    |              |V:0.6, |       |Amanda: Avancerad Maryland      |
    |amanda-common |I:2.2  |9851   |automatisk                      |
    |              |       |       |nätverksdiskarkivering (Libs)   |
    |--------------+-------+-------+--------------------------------|
    |              |V:0.6, |       |Amanda: Avancerad Maryland      |
    |amanda-client |I:2.2  |1099   |automatisk                      |
    |              |       |       |nätverksdiskarkivering (klient) |
    |--------------+-------+-------+--------------------------------|
    |              |V:0.12,|       |Amanda: Avancerad Maryland      |
    |amanda-server |I:0.22 |1093   |automatisk                      |
    |              |       |       |nätverksdiskarkivering (server) |
    |--------------+-------+-------+--------------------------------|
    |              |       |       |BackupPC är ett högpresterande, |
    |backuppc      |V:1.4, |3088   |företagsklassat system för      |
    |              |I:1.7  |       |säkerhetskopiering av datorer   |
    |              |       |       |(diskbaserad)                   |
    |--------------+-------+-------+--------------------------------|
    |duplicity     |V:5,   |2679   |(fjärr-)inkrementell            |
    |              |I:46   |       |säkerhetskopiering              |
    |--------------+-------+-------+--------------------------------|
    |deja-dup      |V:28,  |5274   |GUI-frontend för duplicity      |
    |              |I:42   |       |                                |
    |--------------+-------+-------+--------------------------------|
    |borgbackup    |V:13,  |3532   |(fjärr)deduplicerande           |
    |              |I:28   |       |säkerhetskopiering              |
    |--------------+-------+-------+--------------------------------|
    |borgmatic     |V:3.2, |946    |borgbackup-hjälpare             |
    |              |I:4.5  |       |                                |
    |--------------+-------+-------+--------------------------------|
    |rdiff-backup  |V:2.2, |1207   |(fjärr-)inkrementell            |
    |              |I:6.5  |       |säkerhetskopiering              |
    |--------------+-------+-------+--------------------------------|
    |restic        |V:7,   |41617  |(fjärr-)inkrementell            |
    |              |I:14   |       |säkerhetskopiering              |
    |--------------+-------+-------+--------------------------------|
    |backupninja   |V:2.1, |360    |lättviktigt, utbyggbart         |
    |              |I:2.6  |       |meta-backup-system              |
    |--------------+-------+-------+--------------------------------|
    |slbackup      |V:0.09,|147    |(fjärr-)inkrementell            |
    |              |I:0.12 |       |säkerhetskopiering              |
    |--------------+-------+-------+--------------------------------|
    |backup-manager|V:0.43,|573    |kommandoradsverktyg för         |
    |              |I:0.75 |       |säkerhetskopiering              |
    |--------------+-------+-------+--------------------------------|
    |              |       |       |verktyg för säkerhetskopiering/ |
    |backup2l      |V:0.34,|110    |återställning med lågt underhåll|
    |              |I:0.47 |       |för monterbara medier           |
    |              |       |       |(diskbaserade)                  |
    +---------------------------------------------------------------+


    Backup-verktyg har sina specialiserade fokusområden.

      * Mondo Rescue är ett backup-system som gör det möjligt att
        snabbt återställa hela systemet från backup-CD/DVD etc. utan
        att gå igenom normala systeminstallationsprocesser.

      * Bacula, Amanda och BackupPC är fullfjädrade verktyg för
        säkerhetskopiering som är inriktade på regelbundna
        säkerhetskopior över nätverk.

      * Duplicity och Borg är enklare backup-verktyg för vanliga
        arbetsstationer.

10.2.3. Tips för säkerhetskopiering

    För en personlig arbetsstation kan fullfjädrade verktyg för
    säkerhetskopiering som är utformade för servermiljön inte fungera
    bra. Samtidigt kan befintliga verktyg för säkerhetskopiering för
    arbetsstationer ha vissa brister.

    Här är några tips för att göra säkerhetskopiering enklare med
    minimala användarinsatser. Dessa tekniker kan användas med alla
    verktyg för säkerhetskopiering.

    I demonstrationssyfte antar vi att den primära användaren och
    gruppnamnet är pingvin och skapar ett exempel på skript för
    säkerhetskopiering och ögonblicksbild "/usr/local/bin/bkss.sh"
    som:

    #!/bin/sh -e
    SRC="$1" # source data path
    DSTFS="$2" # backup destination filesystem path
    DSTSV="$3" # backup destination subvolume name
    DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
    if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
      echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
    fi
    MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
    if [ ! -d "$DSTFS/$DSTSV" ]; then
      btrfs subvolume create "$DSTFS/$DSTSV"
      mkdir -p "$DSTSS"
    fi
    rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
    btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
    notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"

    Här används endast det grundläggande verktyget rsync(1) för att
    underlätta säkerhetskopiering av systemet och lagringsutrymmet
    utnyttjas effektivt av Btrfs.

    Tips

    FYI: Den här författaren använder sitt eget liknande
    skalskript"bss: Btrfs Subvolume Snapshot Utility" för sin
    arbetsstation.

10.2.3.1. Grafiskt gränssnitt för säkerhetskopiering

    Här är ett exempel på hur du konfigurerar säkerhetskopiering med
    ett enda GUI-klick.

      * Förbered en USB-lagringsenhet som ska användas för
        säkerhetskopiering.

          + Formatera en USB-lagringsenhet med en partition i btrfs med
            dess etikettnamn som "BKUP". Detta kan krypteras (se
            Avsnitt 9.9.1, ”Kryptering av flyttbara diskar med dm-crypt/
            LUKS”).

          + Koppla in den här till ditt system. Skrivbordssystemet bör
            automatiskt montera den som "/media/penguin/BKUP".

          + Kör "sudo chown penguin:penguin /media/penguin/BKUP" för att
            göra den skrivbar för användaren.

      * Skapa "~/.local/share/applications/BKUP.desktop" enligt de
        tekniker som beskrivs i Avsnitt 9.4.10, ”Starta ett program från
        GUI” som:

        [Desktop Entry]
        Name=bkss
        Comment=Backup and snapshot of ~/Documents
        Exec=/usr/local/bin/bkss.sh /home/penguin/Documents /media/penguin/BKUP Documents
        Type=Application

    För varje GUI-klick säkerhetskopieras dina data från "~/
    Documents" till en USB-lagringsenhet och en skrivskyddad
    ögonblicksbild skapas.

10.2.3.2. Montera händelsestyrd säkerhetskopiering

    Här är ett exempel på inställning för automatisk
    säkerhetskopiering som utlöses av mount-händelsen.

      * Förbered en USB-lagringsenhet som ska användas för
        säkerhetskopiering enligt Avsnitt 10.2.3.1, ”Grafiskt gränssnitt
        för säkerhetskopiering”.

      * Skapa en systemd service unit-fil "~/.config/systemd/user/
        back-BKUP.service" som:

        [Unit]
        Description=USB Disk backup
        Requires=media-%u-BKUP.mount
        After=media-%u-BKUP.mount
   
        [Service]
        ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
        StandardOutput=append:%h/.cache/systemd-snap.log
        StandardError=append:%h/.cache/systemd-snap.log

        [Install]
        WantedBy=media-%u-BKUP.mount

      * Aktivera denna systemd-enhetskonfiguration med följande:

         $ systemctl --user enable bkup-BKUP.service

    För varje mount-händelse säkerhetskopieras dina data från "~/
    Documents" till en USB-lagringsenhet och en skrivskyddad
    ögonblicksbild skapas.

    Här kan namn på systemd-monteringsenheter som systemd för
    närvarande har i minnet frågas till servicehanteraren för den
    anropande användaren med "systemctl --user list-units --type=
    mount".

10.2.3.3. Timerhändelseutlöst säkerhetskopiering

    Här är ett exempel på inställning för automatisk
    säkerhetskopiering som utlöses av timerhändelsen.

      * Förbered en USB-lagringsenhet som ska användas för
        säkerhetskopiering enligt Avsnitt 10.2.3.1, ”Grafiskt gränssnitt
        för säkerhetskopiering”.

      * Skapa en systemd timer unit-fil "~/.config/systemd/user/
        snap-Documents.timer" som:

        [Unit]
        Description=Run btrfs subvolume snapshot on timer
        Documentation=man:btrfs(1)

        [Timer]
        OnStartupSec=30
        OnUnitInactiveSec=900

        [Install]
        WantedBy=timers.target

      * Skapa en systemd service unit-fil "~/.config/systemd/user/
        snap-Documents.service" som:

        [Unit]
        Description=Run btrfs subvolume snapshot
        Documentation=man:btrfs(1)

        [Service]
        Type=oneshot
        Nice=15
        ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
        IOSchedulingClass=idle
        CPUSchedulingPolicy=idle
        StandardOutput=append:%h/.cache/systemd-snap.log
        StandardError=append:%h/.cache/systemd-snap.log

      * Aktivera denna systemd-enhetskonfiguration med följande:

         $ systemctl --user enable snap-Documents.timer

    För varje timerhändelse säkerhetskopieras dina data från "~/
    Documents" till en USB-lagringsenhet och en skrivskyddad
    ögonblicksbild skapas.

    Här kan namn på systemd-timeranvändarenheter som systemd för
    närvarande har i minnet frågas till servicehanteraren för den
    anropande användaren med "systemctl --user list-units --type=
    timer".

    För moderna skrivbordssystem kan systemd erbjuda mer finkornig
    kontroll än de traditionella Unix-metoderna med at(1), cron(8)
    eller anacron(8).

10.3. Infrastruktur för datasäkerhet

    Infrastrukturen för datasäkerhet utgörs av en kombination av
    datakrypteringsverktyg, verktyg för sammanställning av
    meddelanden och signaturverktyg.

    Tabell 10.6. Lista över infrastrukturverktyg för datasäkerhet

    +---------------------------------------------------------------------------+
    |     paket     |popcon|storlek|  kommando   |         beskrivning          |
    |---------------+------+-------+-------------+------------------------------|
    |               |V:406,|       |             |GNU Privacy Guard - verktyg   |
    |gnupg          |I:864 |465    |gpg(1)       |för kryptering och signering  |
    |               |      |       |             |med OpenPGP                   |
    |---------------+------+-------+-------------+------------------------------|
    |               |V:219,|       |             |GNU Privacy Guard - verktyg   |
    |gpgv           |I:932 |577    |gpgv(1)      |för signaturverifiering       |
    |               |      |       |             |OpenPGP                       |
    |---------------+------+-------+-------------+------------------------------|
    |               |V:1,  |       |             |Sequoia-PGP - verktyg för     |
    |sq             |I:30  |23926  |sq(1)        |kryptering och signering med  |
    |               |      |       |             |OpenPGP                       |
    |---------------+------+-------+-------------+------------------------------|
    |sqv            |V:443,|1855   |sqv(1)       |Sequoia-PGP - verktyg för     |
    |               |I:518 |       |             |signaturverifiering OpenPGP   |
    |---------------+------+-------+-------------+------------------------------|
    |               |V:1,  |       |pappersnyckel|extrahera bara den hemliga    |
    |paperkey       |I:11  |58     |(1)          |informationen ur OpenPGP:s    |
    |               |      |       |             |hemliga nycklar               |
    |---------------+------+-------+-------------+------------------------------|
    |               |V:35, |       |cryptsetup   |verktyg för dm-crypt          |
    |cryptsetup     |I:80  |465    |(8), …       |blockenhetskryptering med stöd|
    |               |      |       |             |för LUKS                      |
    |---------------+------+-------+-------------+------------------------------|
    |coreutils      |V:910,|17994  |md5sum(1)    |beräkna och kontrollera       |
    |               |I:1000|       |             |MD5-meddelandesammanställning |
    |---------------+------+-------+-------------+------------------------------|
    |coreutils      |V:910,|17994  |sha1sum(1)   |beräkna och kontrollera       |
    |               |I:1000|       |             |SHA1-meddelandesammanställning|
    |---------------+------+-------+-------------+------------------------------|
    |               |V:855,|       |             |beräkna                       |
    |openssl        |I:997 |2532   |openssl(1ssl)|meddelandesammanställning med |
    |               |      |       |             |"openssl dgst" (OpenSSL)      |
    |---------------+------+-------+-------------+------------------------------|
    |libsecret-tools|V:1,  |45     |hemligt      |lagra och hämta lösenord (CLI)|
    |               |I:12  |       |verktyg(1)   |                              |
    |---------------+------+-------+-------------+------------------------------|
    |seahorse       |V:73, |7999   |sjöhäst(1)   |verktyg för nyckelhantering   |
    |               |I:258 |       |             |(GNOME)                       |
    +---------------------------------------------------------------------------+


    Se Avsnitt 9.9, ”Tips om datakryptering” om dm-crypt och fscrypt
    som implementerar infrastruktur för automatisk datakryptering via
    Linux-kärnmoduler.

10.3.1. Nyckelhantering för GnuPG

    Här följer GNU Privacy Guard-kommandon för grundläggande
    nyckelhantering.

    Tabell 10.7. Lista över GNU Privacy Guard-kommandon för
    nyckelhantering

    +---------------------------------------------------------------+
    |        kommando         |             beskrivning             |
    |-------------------------+-------------------------------------|
    |gpg --gen-key            |skapa en ny nyckel                   |
    |-------------------------+-------------------------------------|
    |gpg --gen-revoke         |generera nyckel för återkallande för |
    |min_användare_ID         |my_user_ID                           |
    |-------------------------+-------------------------------------|
    |gpg --edit-key           |redigera tangenten interaktivt,      |
    |användare_ID             |"hjälp" för hjälp                    |
    |-------------------------+-------------------------------------|
    |gpg -o file --export     |export all public keys to file       |
    |-------------------------+-------------------------------------|
    |gpg -o file              |export all private key to file       |
    |--export-secret-keys     |                                     |
    |-------------------------+-------------------------------------|
    |gpg --import file        |importera alla nycklar från filen    |
    |-------------------------+-------------------------------------|
    |gpg --send-keys user_ID  |skicka nyckeln för user_ID till      |
    |                         |keyserver                            |
    |-------------------------+-------------------------------------|
    |gpg --recv-keys user_ID  |hämta nyckel till user_ID från       |
    |                         |keyserver                            |
    |-------------------------+-------------------------------------|
    |gpg --list-keys          |lista nycklar för user_ID            |
    |användare_ID             |                                     |
    |-------------------------+-------------------------------------|
    |gpg --list-sigs          |lista sig. för user_ID               |
    |användare_ID             |                                     |
    |-------------------------+-------------------------------------|
    |gpg --check-sigs         |kontrollera sig. av user_ID          |
    |användare_ID             |                                     |
    |-------------------------+-------------------------------------|
    |gpg --fingerprint user_ID|kontrollera fingeravtryck för user_ID|
    |-------------------------+-------------------------------------|
    |gpg --refresh-keys       |uppdatera lokal nyckelring           |
    +---------------------------------------------------------------+


    Här är innebörden av förtroendekoden.

    Tabell 10.8. Förteckning över innebörden av förtroendekoden

    +---------------------------------------------------+
    |kod|           beskrivning av stiftelsen           |
    |---+-----------------------------------------------|
    |-  |ingen ägartrust tilldelad / ännu inte beräknad |
    |---+-----------------------------------------------|
    |e  |beräkning av förtroende misslyckades           |
    |---+-----------------------------------------------|
    |q  |inte tillräckligt med information för beräkning|
    |---+-----------------------------------------------|
    |n  |lita aldrig på den här nyckeln                 |
    |---+-----------------------------------------------|
    |m  |marginellt pålitlig                            |
    |---+-----------------------------------------------|
    |f  |fullt betrodd                                  |
    |---+-----------------------------------------------|
    |u  |slutligen betrodda                             |
    +---------------------------------------------------+


    The following generates my key
    "9563FC29932C409F1A77F9C1AB8A1522D8234C6A".

    $ gpg --gen-key
    gpg (GnuPG) 2.4.7; Copyright (C) 2024 g10 Code GmbH
    ...
    GnuPG needs to construct a user ID to identify your key.

    Real name: Osamu Aoki
    Email address: osamu@debian.org
    You selected this USER-ID:
        "Osamu Aoki <osamu@debian.org>"
   
    Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
    ...
    public and secret key created and signed.

    pub   ed25519 2026-02-14 [SC] [expires: 2029-02-13]
          9563FC29932C409F1A77F9C1AB8A1522D8234C6A
    uid                      Osamu Aoki <osamu@debian.org>
    sub   cv25519 2026-02-14 [E] [expires: 2029-02-13]


    Följande laddar upp min nyckel
    "9563FC29932C409F1A77F9C1AB8A1522D8234C6A" till den populära
    nyckelservern "hkp://keys.gnupg.net".

    $ gpg --keyserver hkp://keys.gnupg.net --send-keys 9563FC29932C409F1A77F9C1AB8A1522D8234C6A

    En bra standardnyckelserver i "~/.gnupg/gpg.conf" (eller den
    gamla platsen "~/.gnupg/options") innehåller följande.

    keyserver hkp://keys.gnupg.net

    Följande hämtar okända nycklar från nyckelservern.

    $ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
              cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

    Det fanns en bugg i OpenPGP Public Key Server (före version
    0.9.6) som skadade nycklar med fler än 2 undernycklar. Det nyare
    paketet gnupg (>1.2.1-2) kan hantera dessa skadade undernycklar.
    Se gpg(1) under alternativet "--repair-pks-subkey-bug".

    Use of SHA-1 for hash has been deprecated. If your old RSA based
    openPGP key uses SHA-1 for hash, fix it using FixKeyWithSha1.

    Tips

    The sq(1) and sqv(1) commands are an alternative set of openPGP
    commands. See sq user documentation and A Practical Introduction
    to using sq, Sequoia PGP’s CLI.

10.3.2. Använda GnuPG på filer

    Här följer exempel på hur du använder GNU Privacy Guard-kommandon
    på filer.

    Tabell 10.9. Lista över GNU Privacy Guard-kommandon på filer

    +---------------------------------------------------------------+
    |        kommando        |             beskrivning              |
    |------------------------+--------------------------------------|
    |gpg -a -s fil           |konvertera filen till ASCII armored   |
    |                        |file.asc                              |
    |------------------------+--------------------------------------|
    |gpg --armor --sign fil  |, ,                                   |
    |------------------------+--------------------------------------|
    |gpg --clearsign fil     |tydligt budskap                       |
    |------------------------+--------------------------------------|
    |gpg --clearsign fil|mail|skicka ett i klartext signerat        |
    |foo@exempel.se          |meddelande till foo@exempel.se        |
    |------------------------+--------------------------------------|
    |gpg --clearsign         |                                      |
    |--not-dash-escaped      |klar-sign patchfile                   |
    |patchfile               |                                      |
    |------------------------+--------------------------------------|
    |gpg --verify file       |verifiera klar-signerad fil           |
    |------------------------+--------------------------------------|
    |gpg -o file.sig -b file |skapa fristående signatur             |
    |------------------------+--------------------------------------|
    |gpg -o file.sig         |, ,                                   |
    |--detach-sign file      |                                      |
    |------------------------+--------------------------------------|
    |gpg --verify file.sig   |verifiera filen med file.sig          |
    |file                    |                                      |
    |------------------------+--------------------------------------|
    |gpg -o crypt_file.gpg -r|kryptering med öppen nyckel avsedd för|
    |namn -e fil             |namn från fil till binär              |
    |                        |crypt_file.gpg                        |
    |------------------------+--------------------------------------|
    |gpg -o crypt_file.gpg   |                                      |
    |--recipient name        |, ,                                   |
    |--encrypt file          |                                      |
    |------------------------+--------------------------------------|
    |gpg -o crypt_file.asc -a|kryptering med öppen nyckel avsedd för|
    |-r name -e file         |namn från fil till ASCII-armored      |
    |                        |crypt_file.asc                        |
    |------------------------+--------------------------------------|
    |gpg -o crypt_file.gpg -c|symmetrisk kryptering från fil till   |
    |file                    |crypt_file.gpg                        |
    |------------------------+--------------------------------------|
    |gpg -o crypt_file.gpg   |, ,                                   |
    |--symmetric file        |                                      |
    |------------------------+--------------------------------------|
    |gpg -o crypt_file.asc -a|symmetrisk kryptering avsedd för namn |
    |-c fil                  |från fil till ASCII armerad           |
    |                        |crypt_file.asc                        |
    |------------------------+--------------------------------------|
    |gpg -o file -d          |dekryptering                          |
    |crypt_file.gpg -r name  |                                      |
    |------------------------+--------------------------------------|
    |gpg -o file --decrypt   |, ,                                   |
    |crypt_file.gpg          |                                      |
    +---------------------------------------------------------------+


10.3.3. Använda GnuPG med Mutt

    Lägg till följande i "~/.muttrc" för att förhindra att en långsam
    GnuPG startar automatiskt, samtidigt som den kan användas genom
    att skriva "S" på indexmenyn.

    macro index S ":toggle pgp_verify_sig\n"
    set pgp_verify_sig=no

10.3.4. Använda GnuPG med Vim

    Med insticksprogrammet gnupg kan du köra GnuPG transparent för
    filer med tillägg ".gpg", ".asc" och ".pgp".^[6]

    $ sudo aptitude install vim-scripts
    $ echo "packadd! gnupg" >> ~/.vim/vimrc

10.3.5. MD5-summan

    md5sum(1) är ett verktyg för att skapa en digest-fil med hjälp av
    metoden i rfc1321 och verifiera varje fil med den.

    $ md5sum foo bar >baz.md5
    $ cat baz.md5
    d3b07384d113edec49eaa6238ad5ff00  foo
    c157a79031e1c40f85931829bc5fc552  bar
    $ md5sum -c baz.md5
    foo: OK
    bar: OK

    Notera

    Beräkningen av MD5-summan är mindre CPU-intensiv än beräkningen
    av den kryptografiska signaturen med GNU Privacy Guard (GnuPG).
    Vanligtvis signeras endast den översta digestfilen kryptografiskt
    för att säkerställa dataintegriteten.

10.3.6. Nyckelring för lösenord

    I GNOME-systemet hanterar GUI-verktyget seahorse(1) lösenord och
    lagrar dem säkert i nyckelringen ~/.local/share/keyrings/*.

    secret-tool(1) kan lagra lösenord till nyckelringen från
    kommandoraden.

    Let's store lösenfras som används för LUKS/dm-crypt-krypterad
    diskavbildning

    $ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img
    Password: ********

    Detta lagrade lösenord kan hämtas och matas till andra program,
    t.ex. cryptsetup(8).

    $ secret-tool lookup LUKS my_disk.img | \
      cryptsetup open disk.img disk_img --type luks --keyring -
    $ sudo mount /dev/mapper/disk_img /mnt

    Tips
   
    När du behöver ange lösenord i ett skript ska du använda
    secret-tool och undvika att direkt hårdkoda lösenfrasen i det.

10.4. Verktyg för sammanfogning av källkod

    Det finns många sammanfogningsverktyg för källkoden. Följande
    kommandon fångade mina ögon.

    Tabell 10.10. Lista över verktyg för sammanfogning av källkod

    +---------------------------------------------------------------+
    |  paket   |popcon |storlek|  kommando   |     beskrivning      |
    |----------+-------+-------+-------------+----------------------|
    |patch     |V:107, |242    |patch(1)     |tillämpa en diff-fil  |
    |          |I:729  |       |             |på ett original       |
    |----------+-------+-------+-------------+----------------------|
    |vim       |V:81,  |4164   |vimdiff(1)   |jämföra 2 filer sida  |
    |          |I:342  |       |             |vid sida i vim        |
    |----------+-------+-------+-------------+----------------------|
    |          |       |       |             |interaktivt           |
    |imediff   |V:0.02,|329    |imediff(1)   |fullskärmsverktyg för |
    |          |I:0.28 |       |             |2/3-vägs              |
    |          |       |       |             |sammanslagning        |
    |----------+-------+-------+-------------+----------------------|
    |meld      |V:5,   |3992   |meld(1)      |jämföra och sammanfoga|
    |          |I:24   |       |             |filer (GTK)           |
    |----------+-------+-------+-------------+----------------------|
    |wiggle    |V:0.02,|175    |vicka(1)     |tillämpa avvisade     |
    |          |I:0.14 |       |             |korrigeringar         |
    |----------+-------+-------+-------------+----------------------|
    |diffutils |V:895, |1768   |diff(1)      |jämföra filer rad för |
    |          |I:998  |       |             |rad                   |
    |----------+-------+-------+-------------+----------------------|
    |diffutils |V:895, |1768   |diff3(1)     |jämför och sammanfogar|
    |          |I:998  |       |             |tre filer rad för rad |
    |----------+-------+-------+-------------+----------------------|
    |quilt     |V:2,   |880    |quilt(1)     |hantera serier av     |
    |          |I:18   |       |             |korrigeringar         |
    |----------+-------+-------+-------------+----------------------|
    |wdiff     |V:6,   |651    |wdiff(1)     |visa ordskillnader    |
    |          |I:40   |       |             |mellan textfiler      |
    |----------+-------+-------+-------------+----------------------|
    |          |V:9,   |       |             |producera ett         |
    |diffstat  |I:97   |79     |diffstat(1)  |histogram av          |
    |          |       |       |             |förändringar av diff  |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |kombineradiff|skapa en kumulativ    |
    |patchutils|I:96   |269    |(1)          |patch från två        |
    |          |       |       |             |inkrementella patchar |
    |----------+-------+-------+-------------+----------------------|
    |patchutils|V:12,  |269    |dehtmldiff(1)|extrahera en diff från|
    |          |I:96   |       |             |en HTML-sida          |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |             |extrahera eller       |
    |patchutils|I:96   |269    |filterdiff(1)|exkludera diffar från |
    |          |       |       |             |en diff-fil           |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |             |åtgärda diff-filer    |
    |patchutils|I:96   |269    |fixcvsdiff(1)|skapade av CVS som    |
    |          |       |       |             |patch(1) tolkar fel   |
    |----------+-------+-------+-------------+----------------------|
    |patchutils|V:12,  |269    |flipdiff(1)  |byta ordning på två   |
    |          |I:96   |       |             |lappar                |
    |----------+-------+-------+-------------+----------------------|
    |          |       |       |             |visa vilka filer som  |
    |patchutils|V:12,  |269    |grepdiff(1)  |har ändrats av en     |
    |          |I:96   |       |             |patch som matchar en  |
    |          |       |       |             |regex                 |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |             |visa skillnader mellan|
    |patchutils|I:96   |269    |interdiff(1) |två enhetliga         |
    |          |       |       |             |diff-filer            |
    |----------+-------+-------+-------------+----------------------|
    |patchutils|V:12,  |269    |lsdiff(1)    |visa vilka filer som  |
    |          |I:96   |       |             |ändras av en patch    |
    |----------+-------+-------+-------------+----------------------|
    |          |       |       |             |räkna om räkningar och|
    |patchutils|V:12,  |269    |recountdiff  |förskjutningar i      |
    |          |I:96   |       |(1)          |enhetliga sammanhang  |
    |          |       |       |             |diffs                 |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |             |fixa offsets och      |
    |patchutils|I:96   |269    |rediff(1)    |counts för en         |
    |          |       |       |             |handredigerad diff    |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |             |separera ut           |
    |patchutils|I:96   |269    |splitdiff(1) |inkrementella         |
    |          |       |       |             |korrigeringar         |
    |----------+-------+-------+-------------+----------------------|
    |          |V:12,  |       |packa uppdiff|demanglera lappar som |
    |patchutils|I:96   |269    |(1)          |har blivit inplastade |
    |          |       |       |             |med ord               |
    |----------+-------+-------+-------------+----------------------|
    |          |V:0.1, |       |             |visa skillnader och   |
    |dirdiff   |I:1.4  |167    |dirdiff(1)   |slå samman ändringar  |
    |          |       |       |             |mellan katalogträd    |
    |----------+-------+-------+-------------+----------------------|
    |          |V:0.02,|       |             |jämför två filer ord  |
    |docdiff   |I:0.19 |554    |docdiff(1)   |för ord / tecken för  |
    |          |       |       |             |tecken                |
    |----------+-------+-------+-------------+----------------------|
    |makepatch |V:0.01,|99     |makepatch(1) |generera utökade      |
    |          |I:0.16 |       |             |patchfiler            |
    |----------+-------+-------+-------------+----------------------|
    |makepatch |V:0.01,|99     |applicera    |tillämpa utökade      |
    |          |I:0.16 |       |patch(1)     |patchfiler            |
    +---------------------------------------------------------------+


10.4.1. Extrahera skillnader för källfiler

    Följande procedurer extraherar skillnader mellan två källfiler
    och skapar enhetliga diff-filer "file.patch0" eller "file.patch1"
    beroende på filens plats.

    $ diff -u file.old file.new > file.patch0
    $ diff -u old/file new/file > file.patch1

10.4.2. Sammanslagning av uppdateringar för källfiler

    Diff-filen (alternativt kallad patch-fil) används för att skicka
    en programuppdatering. Den mottagande parten tillämpar denna
    uppdatering på en annan fil på följande sätt.

    $ patch -p0 file < file.patch0
    $ patch -p1 file < file.patch1

10.4.3. Interaktiv sammanslagning

    Om du har två versioner av en källkod kan du utföra 2-vägs
    sammanslagning interaktivt med hjälp av imediff(1) på följande
    sätt.

    $ imediff -o file.merged file.old file.new

    Om du har tre versioner av en källkod kan du utföra 3-vägs
    sammanslagning interaktivt med hjälp av imediff(1) på följande
    sätt.

    $ imediff -o file.merged file.yours file.base file.theirs

10.5. Git

    Git är idag det självklara verktyget för versionshanteringssystem
    (VCS) eftersom Git kan göra allt för både lokal och fjärransluten
    källkodshantering.

    Debian tillhandahåller kostnadsfria Git-tjänster via Debian
    Salsa-tjänsten. Dess dokumentation finns på https://
    wiki.debian.org/Salsa.

    Här är några Git-relaterade paket.

    Tabell 10.11. Lista över git-relaterade paket och kommandon

    +-------------------------------------------------------------------------+
    |     paket      |popcon |storlek|   kommando   |       beskrivning       |
    |----------------+-------+-------+--------------+-------------------------|
    |                |       |       |              |Git, det snabba, skalbara|
    |git             |V:409, |52512  |git(7)        |och distribuerade        |
    |                |I:623  |       |              |systemet för             |
    |                |       |       |              |revisionskontroll        |
    |----------------+-------+-------+--------------+-------------------------|
    |                |V:4,   |       |              |GUI                      |
    |gitk            |I:26   |2045   |gitk(1)       |Git-repository-webbläsare|
    |                |       |       |              |med historik             |
    |----------------+-------+-------+--------------+-------------------------|
    |                |V:0.2, |       |              |GUI                      |
    |qgit            |I:2.0  |1431   |qgit(1)       |Git-repository-webbläsare|
    |                |       |       |              |med historik             |
    |----------------+-------+-------+--------------+-------------------------|
    |                |V:0.6, |       |              |GUI                      |
    |git-cola        |I:3.4  |5129   |git-cola(1)   |Git-repository-webbläsare|
    |                |       |       |              |med historik             |
    |----------------+-------+-------+--------------+-------------------------|
    |tig             |V:2,   |1245   |tig(1)        |console Git repository   |
    |                |I:11   |       |              |browser with history     |
    |----------------+-------+-------+--------------+-------------------------|
    |lazygit         |V:0.9, |24167  |lazygit(1)    |console Git repository   |
    |                |I:4.0  |       |              |browser with history     |
    |----------------+-------+-------+--------------+-------------------------|
    |git-gui         |V:2,   |2549   |git-gui(1)    |GUI för Git (Ingen       |
    |                |I:16   |       |              |historik)                |
    |----------------+-------+-------+--------------+-------------------------|
    |git-email       |V:0.4, |1229   |git-send-email|skicka en samling patchar|
    |                |I:9.9  |       |(1)           |som e-post från Git      |
    |----------------+-------+-------+--------------+-------------------------|
    |git-buildpackage|V:1.2, |2027   |git-byggpaket |automatisera             |
    |                |I:7.2  |       |(1)           |Debian-paketering med Git|
    |----------------+-------+-------+--------------+-------------------------|
    |dgit            |V:0.1, |755    |dgit(1)       |gits interoperabilitet   |
    |                |I:1.0  |       |              |med Debian-arkivet       |
    |----------------+-------+-------+--------------+-------------------------|
    |imediff         |V:0.02,|329    |git-ime(1)    |interaktivt git commit   |
    |                |I:0.28 |       |              |split hjälpverktyg       |
    |----------------+-------+-------+--------------+-------------------------|
    |stgit           |V:0.07,|6177   |stg(1)        |quilt ovanpå git (Python)|
    |                |I:0.49 |       |              |                         |
    |----------------+-------+-------+--------------+-------------------------|
    |git-doc         |I:11   |15192  |N/A           |officiell dokumentation  |
    |                |       |       |              |för Git                  |
    |----------------+-------+-------+--------------+-------------------------|
    |                |       |       |              |"Git Magic", en mer      |
    |gitmagic        |I:0.56 |721    |N/A           |lättförståelig guide till|
    |                |       |       |              |Git                      |
    +-------------------------------------------------------------------------+


10.5.1. Konfiguration av Git-klient

    Du kanske vill ställa in flera globala konfigurationer i "~
    /.gitconfig", till exempel ditt namn och din e-postadress som
    används av Git enligt följande.

    $ git config --global user.name "Name Surname"
    $ git config --global user.email yourname@example.com

    Du kan också anpassa Gits standardbeteende genom att göra
    följande.

    $ git config --global init.defaultBranch main
    $ git config --global pull.rebase true
    $ git config --global push.default current

    Om du är alltför van vid CVS- eller Subversion-kommandon kanske
    du vill ställa in flera kommandovalias genom att göra följande.

    $ git config --global alias.ci "commit -a"
    $ git config --global alias.co checkout

    Du kan kontrollera din globala konfiguration på följande sätt.

    $ git config --global --list

10.5.2. Grundläggande Git-kommandon

    Git-operationen omfattar flera uppgifter.

      * Arbetsträdet som innehåller filer som vänder sig till
        användaren och som du gör ändringar i.

          + De ändringar som ska registreras måste uttryckligen
            väljas ut och läggas till i indexet. Detta är kommandona
            git add och git rm.

      * Indexet som innehåller staged-filer.

          + Staged-filer kommer att överföras till det lokala
            förvaret på efterföljande begäran. Detta är git
            commit-kommandot.

      * Det lokala arkiv som innehåller filer med åtaganden.

          + Git registrerar den länkade historiken för de överförda
            uppgifterna och organiserar dem som grenar i arkivet.

          + Det lokala förvaret kan skicka data till fjärrförvaret
            med kommandot git push.
   
          + Det lokala arkivet kan ta emot data från fjärrarkiv med
            kommandona git fetch och git pull.

              o Kommandot git pull utför kommandot git merge eller
                git rebase efter kommandot git fetch.

              o Här kombinerar git merge två separata grenar av
                historien i slutet till en punkt. (Detta är standard
                för git pull utan anpassning och kan vara bra för
                upstream-personer som publicerar gren till många
                människor)

              o Här skapar git rebase en enda gren av sekventiell
                historia av den avlägsna grenen en följt av den
                lokala grenen en. (Detta är pull.rebase verkliga
                anpassningsfall och kan vara bra för resten av oss.)

      * Fjärrförvaret som innehåller bekräftade filer.

          + Kommunikationen till fjärrlagret sker med hjälp av säkra
            kommunikationsprotokoll som SSH eller HTTPS.

    Arbetsträdet är filer utanför katalogen .git/. Filerna i
    katalogen .git/ innehåller indexet, data från det lokala arkivet
    och vissa textfiler för git-konfigurationen.

    Här följer en översikt över de viktigaste Git-kommandona.

    Tabell 10.12. Huvudsakliga Git-kommandon

    +---------------------------------------------------------------+
    | Git-kommando |                    funktion                    |
    |--------------+------------------------------------------------|
    |git init      |skapa det (lokala) förvaret                     |
    |--------------+------------------------------------------------|
    |git clone URL |klona fjärrförvaret till ett lokalt förvar med  |
    |              |arbetsträdet                                    |
    |--------------+------------------------------------------------|
    |git pull      |uppdatera den lokala grenen main med            |
    |origin main   |fjärrarkivet origin                             |
    |--------------+------------------------------------------------|
    |git add .     |lägg till fil(er) i arbetsträdet till indexet   |
    |              |för redan existerande filer i indexet endast    |
    |--------------+------------------------------------------------|
    |git add -A .  |lägg till fil(er) i arbetsträdet till indexet   |
    |              |för alla filer inklusive borttagningar          |
    |--------------+------------------------------------------------|
    |git rm filnamn|ta bort fil(er) från arbetsträdet och indexet   |
    |--------------+------------------------------------------------|
    |git commit    |överföra ändringar i indexet till det lokala    |
    |              |arkivet                                         |
    |--------------+------------------------------------------------|
    |              |lägga till alla ändringar i arbetsträdet i      |
    |git commit -a |indexet och överföra dem till det lokala arkivet|
    |              |(add + commit)                                  |
    |--------------+------------------------------------------------|
    |git push -u   |uppdatera fjärrförvarets origin med den lokala  |
    |ursprung      |grenen branch_name (första anropet)             |
    |gren_namn     |                                                |
    |--------------+------------------------------------------------|
    |git push      |uppdatera fjärrförvarets origin med den lokala  |
    |origin        |grenen branch_name (efterföljande anrop)        |
    |branch_name   |                                                |
    |--------------+------------------------------------------------|
    |git diff      |visa skillnaden mellan treeish1 commit och      |
    |treeish1      |treeish2 commit                                 |
    |treeish2      |                                                |
    |--------------+------------------------------------------------|
    |gitk          |GUI-visning av historikträd för grenar i VCS    |
    |              |repository                                      |
    +---------------------------------------------------------------+


10.5.3. Git-tips

    Här är några Git-tips.

    Tabell 10.13. Git-tips

    +---------------------------------------------------------------+
    |   Git-kommandoraden    |               funktion               |
    |------------------------+--------------------------------------|
    |                        |se fullständig Git-historik och       |
    |gitk --all              |hantera dem, till exempel återställa  |
    |                        |HEAD till en annan commit, plocka     |
    |                        |patchar, skapa taggar och grenar ...  |
    |------------------------+--------------------------------------|
    |git stash               |få det rena fungerande trädet utan att|
    |                        |förlora data                          |
    |------------------------+--------------------------------------|
    |git remote -v           |kontrollera inställningar för         |
    |                        |fjärrkontroll                         |
    |------------------------+--------------------------------------|
    |git gren -vv            |kontrollera inställningar för filial  |
    |------------------------+--------------------------------------|
    |git status              |visa status för arbetsträdet          |
    |------------------------+--------------------------------------|
    |git config -l           |lista git-inställningar               |
    |------------------------+--------------------------------------|
    |git reset --hard HEAD;  |återställ alla ändringar i            |
    |git clean -x -d -f      |arbetsträdet och rensa upp dem helt   |
    |------------------------+--------------------------------------|
    |git rm --cached filename|återställt staged index ändrat av git |
    |                        |add filnamn                           |
    |------------------------+--------------------------------------|
    |                        |hämta referenslogg (användbart för att|
    |git reflog              |återskapa commits från den borttagna  |
    |                        |grenen)                               |
    |------------------------+--------------------------------------|
    |git branch              |skapa en ny gren från reflog          |
    |new_branch_name HEAD@{6}|information                           |
    |------------------------+--------------------------------------|
    |git remote add          |lägga till en new_remote              |
    |new_remote URL          |fjärrförvaringsplats som pekas ut av  |
    |                        |URL                                   |
    |------------------------+--------------------------------------|
    |git remote rename origin|byt namn på fjärrförvaret från origin |
    |upstream                |till upstream                         |
    |------------------------+--------------------------------------|
    |git branch -u uppströms/|ställa in fjärrspårningen till        |
    |branch_namn             |fjärrförvaret upstream och dess       |
    |                        |grennamn branch_name.                 |
    |------------------------+--------------------------------------|
    |git remote set-url      |                                      |
    |ursprung https://foo/   |ändra URL för origin                  |
    |bar.git                 |                                      |
    |------------------------+--------------------------------------|
    |git remote set-url      |inaktivera push till upstream         |
    |--push uppströms        |(redigera .git/config för att         |
    |AVSTÄNGD                |återaktivera)                         |
    |------------------------+--------------------------------------|
    |git fjärruppdatering    |hämta uppdateringar av alla avlägsna  |
    |uppströms               |grenar i uppströmsförvaret            |
    |------------------------+--------------------------------------|
    |git fetch upstream      |skapa en lokal (eventuellt            |
    |foo:upstream-foo        |föräldralös) upstream-foo-gren som en |
    |                        |kopia av foo-grenen i uppströmsarkivet|
    |------------------------+--------------------------------------|
    |git checkout -b         |skapa en ny topic_branch och skicka   |
    |ämne_gren ; git push -u |den till origin                       |
    |ämne_gren ursprung      |                                      |
    |------------------------+--------------------------------------|
    |git branch -m           |byt namn på lokal filial              |
    |gammaltnamn nyttnamn    |                                      |
    |------------------------+--------------------------------------|
    |git push -d origin      |ta bort fjärrfilial (ny metod)        |
    |branch_to_be_removed    |                                      |
    |------------------------+--------------------------------------|
    |git push ursprung       |ta bort fjärrfilial (gammal metod)    |
    |:branch_to_be_removed   |                                      |
    |------------------------+--------------------------------------|
    |git checkout --orphan   |skapa en ny oansluten filial          |
    |oansluten               |                                      |
    |------------------------+--------------------------------------|
    |git rebase -i ursprung/ |omorganisera/droppa/släcka åtaganden  |
    |main                    |från origin/main för att rensa grenens|
    |                        |historik                              |
    |------------------------+--------------------------------------|
    |git reset HEAD^; git    |sammanfoga de 2 senaste uppdragen till|
    |commit --amend          |ett                                   |
    |------------------------+--------------------------------------|
    |git checkout ämne_gren ;|pressa ihop hela topic_branch till en |
    |git merge --squash      |commit                                |
    |ämne_gren               |                                      |
    |------------------------+--------------------------------------|
    |git fetch --unshallow   |                                      |
    |--update-head-ok origin |konvertera en ytlig klon till en      |
    |'+refs/heads/*:refs/    |fullständig klon med alla grenar      |
    |heads/*'                |                                      |
    |------------------------+--------------------------------------|
    |                        |dela upp den senaste överföringen i en|
    |git ime                 |serie fil-för-fil mindre överföringar |
    |                        |etc.(imediff-paketet krävs)           |
    |------------------------+--------------------------------------|
    |                        |packa om det lokala arkivet till ett  |
    |git repack -a -d; git   |enda paket (detta kan begränsa risken |
    |prune                   |för förlorad dataåterställning från   |
    |                        |raderad filial etc.)                  |
    +---------------------------------------------------------------+


    Varning

    Använd inte taggsträngen med mellanslag även om vissa verktyg som
    gitk(1) tillåter dig att använda den. Det kan kväva vissa andra
    git-kommandon.

    Observera

    Om en lokal gren som har flyttats till ett fjärrarkiv blir
    omgjord eller krossad, är det riskfyllt att flytta den här grenen
    och kräver alternativet --force. Detta är vanligtvis inte
    acceptabelt för main, men kan vara acceptabelt för en ämnesgren
    innan den slås samman med main.

    Observera
   
    Att anropa ett git-underkommando direkt som "git-xyz" från
    kommandoraden har varit föråldrat sedan början av 2006.

    Tips

    Om det finns en körbar fil git-foo i sökvägen som anges av $PATH,
    anger du "git foo" utan bindestreck på kommandoraden och anropar
    denna git-foo. Detta är en funktion i kommandot git.

10.5.4. Git-referenser

    Se följande.

      * manpage: git(1)(/usr/share/doc/git-doc/git.html)

      * Användarhandbok för Git(/usr/share/doc/git-doc/
        user-manual.html)

      * En introduktion till git i form av en handledning(/usr/share/
        doc/git-doc/gittutorial.html)
   
      * En introduktion till git i form av en handledning: del två(/
        usr/share/doc/git-doc/gittutorial-2.html)

      * Vardaglig GIT med 20 kommandon eller så(/usr/share/doc/
        git-doc/giteveryday.html)

      * Git Magic(/usr/share/doc/gitmagic/html/index.html)

10.5.5. Andra system för versionshantering

    Versionskontrollsystem (VCS) kallas ibland för
    revisionskontrollsystem (RCS) eller
    programvarukonfigurationshantering (SCM).

    Här är en sammanfattning av de anmärkningsvärda andra VCS som
    inte är Git på Debiansystemet.

    Tabell 10.14. Lista över andra verktyg för versionskontrollsystem

    +------------------------------------------------------------------+
    |  paket   |popcon |storlek| verktyg  | Typ av VCS |   kommentar   |
    |----------+-------+-------+----------+------------+---------------|
    |mercurial |V:4,   |2575   |Mercurial |distribuerad|DVCS i Python  |
    |          |I:23   |       |          |            |och lite C     |
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |DVCS med smart |
    |darcs     |V:0.2, |38856  |Darcs     |distribuerad|algebra av     |
    |          |I:3.3  |       |          |            |patchar        |
    |          |       |       |          |            |(långsam)      |
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |DVCS           |
    |tla       |V:0.04,|1022   |GNU arkiv |distribuerad|huvudsakligen  |
    |          |I:0.70 |       |          |            |av Tom Lord    |
    |          |       |       |          |            |(historisk)    |
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |DVCS påverkad  |
    |bzr       |V:0.1, |28     |GNU Bazaar|distribuerad|av tla skriven |
    |          |I:4.3  |       |          |            |i Python       |
    |          |       |       |          |            |(historisk)    |
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |"CVS done      |
    |          |V:9,   |       |          |            |right", nyare  |
    |subversion|I:55   |4848   |Subversion|fjärr       |standard för   |
    |          |       |       |          |            |fjärrstyrd VCS |
    |          |       |       |          |            |(historisk)    |
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |tidigare       |
    |cvs       |V:3,   |4835   |CVS       |fjärr       |standard       |
    |          |I:23   |       |          |            |fjärrstyrd VCS |
    |          |       |       |          |            |(historisk)    |
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |GUI-visning av |
    |          |V:0.12,|       |          |            |VCS (CVS,      |
    |tkcvs     |I:0.91 |34     |CVS, …    |fjärr       |Subversion,    |
    |          |       |       |          |            |RCS)           |
    |          |       |       |          |            |repository-träd|
    |----------+-------+-------+----------+------------+---------------|
    |          |       |       |          |            |"Unix SCCS     |
    |rcs       |V:2.1, |578    |RCS       |lokal       |gjort på rätt  |
    |          |I:9.5  |       |          |            |sätt"          |
    |          |       |       |          |            |(historisk)    |
    |----------+-------+-------+----------+------------+---------------|
    |          |V:0.01,|       |          |            |klon av Unix   |
    |cssc      |I:0.30 |2044   |CSSC      |lokal       |SCCS           |
    |          |       |       |          |            |(historisk)    |
    +------------------------------------------------------------------+



---------------------------------------------------------------------

    ^[4] En skrivskyddad media som CD/DVD-R kan förhindra
    överskrivningsolyckor. (Se Avsnitt 9.8, ”De binära uppgifterna”
    för hur man skriver till lagringsmediet från kommandoraden i
    skalet. GUI-miljön på GNOME-skrivbordet ger dig enkel åtkomst via
    menyn: "Platser→CD/DVD-skapare")

    ^[5] Vissa av dessa data kan inte återskapas genom att samma
    indatasträng matas in i systemet.

    ^[6] Om du använder "~/.vimrc" istället för "~/.vim/vimrc",
    vänligen ersätt på motsvarande sätt.

Kapitel 11. Konvertering av data

    Verktyg och tips för att konvertera dataformat på Debian-systemet
    beskrivs.

    Standardbaserade verktyg är i mycket gott skick, men stödet för
    proprietära dataformat är begränsat.

11.1. Verktyg för konvertering av textdata

    Följande paket för konvertering av textdata fångade min
    uppmärksamhet.

    Tabell 11.1. Lista över verktyg för konvertering av textdata

    +----------------------------------------------------------------------------+
    | paket  |popcon |storlek|       sökord        |         beskrivning         |
    |--------+-------+-------+---------------------+-----------------------------|
    |        |V:942, |       |                     |textkodningskonverterare     |
    |libc6   |I:1000 |5481   |charset              |mellan lokala av iconv(1)    |
    |        |       |       |                     |(fundamental)                |
    |--------+-------+-------+---------------------+-----------------------------|
    |        |       |       |                     |textkodningskonverterare     |
    |recode  |V:2,   |528    |teckenuppsättning+eol|mellan lokala språk          |
    |        |I:13   |       |                     |(mångsidig, fler alias och   |
    |        |       |       |                     |funktioner)                  |
    |--------+-------+-------+---------------------+-----------------------------|
    |konwert |V:2,   |137    |charset              |textkodningskonverterare     |
    |        |I:42   |       |                     |mellan lokala språk (snyggt) |
    |--------+-------+-------+---------------------+-----------------------------|
    |nkf     |V:0.4, |360    |charset              |teckenuppsättningsöversättare|
    |        |I:8.5  |       |                     |för japanska                 |
    |--------+-------+-------+---------------------+-----------------------------|
    |tcs     |V:0.01,|518    |charset              |teckenuppsättningsöversättare|
    |        |I:0.14 |       |                     |                             |
    |--------+-------+-------+---------------------+-----------------------------|
    |        |V:0.03,|       |                     |ersätta accentuerade         |
    |unaccent|I:0.28 |35     |charset              |bokstäver med deras          |
    |        |       |       |                     |oaccentuerade motsvarighet   |
    |--------+-------+-------+---------------------+-----------------------------|
    |        |V:1,   |       |                     |textformatkonverterare mellan|
    |tofrodos|I:12   |50     |eol                  |DOS och Unix: fromdos(1) och |
    |        |       |       |                     |todos(1)                     |
    |--------+-------+-------+---------------------+-----------------------------|
    |        |V:0.04,|       |                     |textformatkonverterare mellan|
    |macutils|I:0.43 |319    |eol                  |Macintosh och Unix: frommac  |
    |        |       |       |                     |(1) och tomac(1)             |
    +----------------------------------------------------------------------------+


11.1.1. Konvertera en textfil med iconv

    Tips

    iconv(1) tillhandahålls som en del av libc6-paketet och är alltid
    tillgängligt på praktiskt taget alla Unix-liknande system för att
    konvertera kodningen av tecken.

    Du kan konvertera kodningar i en textfil med iconv(1) på följande
    sätt.

    $ iconv -f encoding1 -t encoding2 input.txt >output.txt

    Kodningsvärdena är skiftlägesokänsliga och ignorerar "-" och "_"
    vid matchning. Kodningar som stöds kan kontrolleras med kommandot
    "iconv -l".

    Tabell 11.2. Lista över kodningsvärden och deras användning

    +---------------------------------------------------------------+
    |kodningsvärde|                   användning                    |
    |-------------+-------------------------------------------------|
    |             |American Standard Code for Information           |
    |ASCII        |Interchange, 7 bitars kod utan accentuerade      |
    |             |tecken                                           |
    |-------------+-------------------------------------------------|
    |UTF-8        |aktuell flerspråkig standard för alla moderna    |
    |             |operativsystem                                   |
    |-------------+-------------------------------------------------|
    |ISO-8859-1   |gammal standard för västeuropeiska språk, ASCII +|
    |             |accentuerade tecken                              |
    |-------------+-------------------------------------------------|
    |ISO-8859-2   |gammal standard för östeuropeiska språk, ASCII + |
    |             |accentuerade tecken                              |
    |-------------+-------------------------------------------------|
    |ISO-8859-15  |gammal standard för västeuropeiska språk,        |
    |             |ISO-8859-1 med eurotecken                        |
    |-------------+-------------------------------------------------|
    |CP850        |kodsida 850, Microsoft DOS-tecken med grafik för |
    |             |västeuropeiska språk, ISO-8859-1-variant         |
    |-------------+-------------------------------------------------|
    |CP932        |kodsida 932, Microsoft Windows-stil              |
    |             |Shift-JIS-variant för japanska                   |
    |-------------+-------------------------------------------------|
    |CP936        |kodsida 936, Microsoft Windows stil GB2312, GBK  |
    |             |eller GB18030 variant för förenklad kinesiska    |
    |-------------+-------------------------------------------------|
    |CP949        |kodsida 949, Microsoft Windows-stil EUC-KR eller |
    |             |Unified Hangul Code-variant för koreanska        |
    |-------------+-------------------------------------------------|
    |CP950        |kodsida 950, Microsoft Windows stil Big5-variant |
    |             |för traditionell kinesiska                       |
    |-------------+-------------------------------------------------|
    |CP1251       |kodsida 1251, Microsoft Windows stilkodning för  |
    |             |det kyrilliska alfabetet                         |
    |-------------+-------------------------------------------------|
    |CP1252       |kodsida 1252, Microsoft Windows-stil             |
    |             |ISO-8859-15-variant för västeuropeiska språk     |
    |-------------+-------------------------------------------------|
    |KOI8-R       |gammal rysk UNIX-standard för det kyrilliska     |
    |             |alfabetet                                        |
    |-------------+-------------------------------------------------|
    |ISO-2022-JP  |standardkodning för japansk e-post som endast    |
    |             |använder 7-bitars koder                          |
    |-------------+-------------------------------------------------|
    |eucJP        |gammal japansk UNIX-standard 8-bitars kod och    |
    |             |helt annorlunda än Shift-JIS                     |
    |-------------+-------------------------------------------------|
    |Shift-JIS    |JIS X 0208 Appendix 1 standard för japanska (se  |
    |             |CP932)                                           |
    +---------------------------------------------------------------+


    Notera
   
    Vissa kodningar stöds endast för datakonvertering och används
    inte som lokala värden (Avsnitt 8.1, ”Lokalen”).

    För teckenuppsättningar som ryms i en enda byte, t.ex. ASCII- och
    ISO-8859-teckenuppsättningar, betyder teckenkodningen nästan
    samma sak som teckenuppsättningen.

    För teckenuppsättningar med många tecken, t.ex. JIS X 0213 för
    japanska eller Universal Character Set (UCS, Unicode, ISO-10646-1
    ) för praktiskt taget alla språk, finns det många kodningsscheman
    för att passa in dem i byte-datasekvensen.

      * EUC och ISO/IEC 2022 (även känd som JIS X 0202 ) för japanska
   
      * UTF-8, UTF-16/UCS-2 och UTF-32/UCS-4 för Unicode

    För dessa finns det tydliga skillnader mellan teckenuppsättning
    och teckenkodning.

    Kodsidan används som synonym till teckenkodningstabellerna för
    vissa leverantörsspecifika tabeller.

    Notera

    Observera att de flesta kodningssystem delar samma kod med ASCII
    för 7-bitars tecken. Men det finns några undantag. Om du
    konverterar gamla japanska C-program och URL-data från
    kodningsformatet shift-JIS till UTF-8-format ska du använda
    "CP932" som kodningsnamn i stället för "shift-JIS" för att få
    förväntat resultat: 0x5C → "\" och 0x7E → "~". Annars konverteras
    dessa till fel tecken.

    Tips

    recode(1) kan också användas och erbjuder mer än den kombinerade
    funktionaliteten hos iconv(1), fromdos(1), todos(1), frommac(1)
    och tomac(1). För mer information, se "info recode".

11.1.2. Kontrollerar att filen är UTF-8 med iconv

    Du kan kontrollera om en textfil är kodad i UTF-8 med iconv(1) på
    följande sätt.

    $ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found"

    Tips
   
    Använd alternativet "--verbose" i exemplet ovan för att hitta det
    första tecknet som inte är UTF-8.

11.1.3. Konvertera filnamn med iconv

    Här är ett exempel på ett skript för att konvertera kodning av
    filnamn från sådana som skapats under äldre operativsystem till
    moderna UTF-8 i en enda katalog.

    #!/bin/sh
    ENCDN=iso-8859-1
    for x in *;
     do
     mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)"
    done

    Variabeln "$ENCDN" anger den ursprungliga kodningen som används
    för filnamn under äldre operativsystem som i Tabell 11.2, ”Lista
    över kodningsvärden och deras användning”.

    För mer komplicerade fall kan du montera ett filsystem (t.ex. en
    partition på en hårddisk) som innehåller sådana filnamn med
    korrekt kodning med alternativet mount(8) (se Avsnitt 8.1.3,
    ”Kodning av filnamn”) och kopiera hela innehållet till ett annat
    filsystem som är monterat som UTF-8 med kommandot "cp -a".

11.1.4. EOL-konvertering

    Textfilformatet, särskilt koden för radavslut (EOL), är beroende
    av plattformen.

    Tabell 11.3. Lista över EOL-stilar för olika plattformar

    +------------------------------------------------------+
    |    plattform    |EOL-kod|kontroll|decimal|hexadecimal|
    |-----------------+-------+--------+-------+-----------|
    |Debian (unix)    |LF     |^J      |10     |0A         |
    |-----------------+-------+--------+-------+-----------|
    |MSDOS och Windows|CR-LF  |^M^J    |13 10  |0D 0A      |
    |-----------------+-------+--------+-------+-----------|
    |Apples Macintosh |SR     |^M      |13     |0D         |
    +------------------------------------------------------+


    Konverteringsprogrammen för EOL-format, fromdos(1), todos(1),
    frommac(1) och tomac(1), är ganska praktiska. recode(1) är också
    användbart.

    Notera

    Vissa data i Debian-systemet, t.ex. wikisidans data för paketet
    python-moinmoin, använder CR-LF i MSDOS-stil som EOL-kod. Så
    ovanstående regel är bara en allmän regel.

    Notera
   
    De flesta redigeringsprogram (t.ex. vim, emacs, gedit, ...) kan
    hantera filer i MSDOS-stil EOL på ett transparent sätt.

    Tips

    Användningen av "sed -e '/\r$/!s/$/\r/'" istället för todos(1) är
    bättre när du vill förena EOL-stilen med MSDOS-stilen från den
    blandade MSDOS- och Unix-stilen. (t.ex. efter att ha slagit
    samman 2 MSDOS-stilfiler med diff3(1) Detta beror på att todos
    lägger till CR på alla rader.

11.1.5. TAB-konvertering

    Det finns några få populära specialiserade program för att
    konvertera tab-koderna.

    Tabell 11.4. Lista över TAB-konverteringskommandon från paketen
    bsdmainutils och coreutils

    +-------------------------------------------------------+
    |            funktion            |bsdmainutils|coreutils|
    |--------------------------------+------------+---------|
    |expandera fliken till mellanslag|"col -x"    |expandera|
    |--------------------------------+------------+---------|
    |oexpanderad flik från utrymmen  |"col -h"    |unexpand |
    +-------------------------------------------------------+


    indent(1) från indent-paketet omformaterar blanksteg i
    C-programmet helt och hållet.

    Editorprogram som vim och emacs kan också användas för
    TAB-konvertering. Med vim kan du till exempel expandera TAB med
    kommandosekvenserna ":set expandtab" och ":%retab". Du kan
    återställa detta med kommandosekvenserna ":set noexpandtab" och
    ":%retab!".

11.1.6. Redaktörer med automatisk konvertering

    Intelligenta moderna editorer som vim-programmet är ganska smarta
    och klarar sig bra med alla kodningssystem och alla filformat.
    För bästa kompatibilitet bör du använda dessa redigeringsprogram
    i UTF-8-lokalen i en UTF-8-kompatibel konsol.

    En gammal västeuropeisk Unix-textfil, "u-file.txt", som lagras i
    kodningen latin1 (iso-8859-1) kan redigeras enkelt med vim på
    följande sätt.

    $ vim u-file.txt

    Detta är möjligt eftersom den automatiska detekteringsmekanismen
    för filkodningen i vim först antar UTF-8-kodningen och, om den
    misslyckas, antar att den är latin1.

    En gammal polsk Unix-textfil, "pu-file.txt", som lagras i
    kodningen latin2 (iso-8859-2) kan redigeras med vim på följande
    sätt.

    $ vim '+e ++enc=latin2 pu-file.txt'

    En gammal japansk unix-textfil, "ju-file.txt", som lagrats i
    eucJP-kodning kan redigeras med vim på följande sätt.

    $ vim '+e ++enc=eucJP ju-file.txt'

    En gammal japansk MS-Windows textfil, "jw-file.txt", lagrad i den
    s.k. shift-JIS-kodningen (mer exakt: CP932) kan redigeras med vim
    på följande sätt.

    $ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'

    När en fil öppnas med flaggorna "++enc" och "++ff", lagrar ":w" i
    Vims kommandorad den i originalformat och skriver över
    originalfilen. Du kan också ange sparformatet och filnamnet i
    kommandoraden i Vim, t,ex, ":w ++enc=utf8 new.txt".

    Se mbyte.txt "multi-byte text support" i vim on-line help och
    Tabell 11.2, ”Lista över kodningsvärden och deras användning” för
    lokala värden som används med "++enc".

    Programfamiljen emacs kan utföra motsvarande funktioner.

11.1.7. Extrahering av vanlig text

    Följande läser in en webbsida till en textfil. Detta är mycket
    användbart när du kopierar konfigurationer från webben eller
    använder grundläggande Unix-textverktyg som grep(1) på webbsidan.

    $ w3m -dump https://www.remote-site.com/help-info.html >textfile

    På samma sätt kan du extrahera vanlig textdata från andra format
    med hjälp av följande.

    Tabell 11.5. Lista över verktyg för att extrahera data i klartext

    +-------------------------------------------------------------------+
    |  paket  |popcon |storlek|    sökord     |        funktion         |
    |---------+-------+-------+---------------+-------------------------|
    |w3m      |V:10,  |2853   |html→text      |HTML till text-omvandlare|
    |         |I:134  |       |               |med kommandot "w3m -dump"|
    |---------+-------+-------+---------------+-------------------------|
    |         |V:3,   |       |               |avancerad HTML till      |
    |html2text|I:68   |298    |html→text      |text-omvandlare (ISO     |
    |         |       |       |               |8859-1)                  |
    |---------+-------+-------+---------------+-------------------------|
    |         |V:29,  |       |               |HTML till text-omvandlare|
    |lynx     |I:448  |2031   |html→text      |med kommandot "lynx      |
    |         |       |       |               |-dump"                   |
    |---------+-------+-------+---------------+-------------------------|
    |         |V:3,   |       |               |HTML till text-omvandlare|
    |elinks   |I:16   |1791   |html→text      |med kommandot "elinks    |
    |         |       |       |               |-dump"                   |
    |---------+-------+-------+---------------+-------------------------|
    |         |V:2,   |       |               |HTML till text-omvandlare|
    |links    |I:21   |2321   |html→text      |med kommandot "links     |
    |         |       |       |               |-dump"                   |
    |---------+-------+-------+---------------+-------------------------|
    |         |V:0.8, |       |               |HTML-till-text-omvandlare|
    |links2   |I:8.6  |5466   |html→text      |med kommandot "links2    |
    |         |       |       |               |-dump"                   |
    |---------+-------+-------+---------------+-------------------------|
    |         |V:15,  |       |               |konvertera MSWord-filer  |
    |catdoc   |I:170  |682    |MSWord→text,TeX|till vanlig text eller   |
    |         |       |       |               |TeX                      |
    |---------+-------+-------+---------------+-------------------------|
    |antiword |V:0.9, |587    |MSWord→text,ps |konvertera MSWord-filer  |
    |         |I:6.7  |       |               |till vanlig text eller ps|
    |---------+-------+-------+---------------+-------------------------|
    |         |V:0.05,|       |               |ta bort                  |
    |unhtml   |I:0.49 |40     |html→text      |markeringstaggarna från  |
    |         |       |       |               |en HTML-fil              |
    |---------+-------+-------+---------------+-------------------------|
    |         |V:1,   |       |               |omvandlare från          |
    |odt2txt  |I:20   |60     |odt→text       |OpenDocument Text till   |
    |         |       |       |               |text                     |
    +-------------------------------------------------------------------+


11.1.8. Markera och formatera data i klartext

    Du kan markera och formatera vanlig textdata på följande sätt.

    Tabell 11.6. Lista över verktyg för att markera data i klartext

    +-------------------------------------------------------------------+
    |     paket      |popcon |storlek|  sökord  |      beskrivning      |
    |----------------+-------+-------+----------+-----------------------|
    |                |       |       |          |Vim MACRO för att      |
    |                |V:18,  |       |          |konvertera källkod till|
    |vim-runtime     |I:360  |38849  |highlight |HTML med ":source      |
    |                |       |       |          |$VIMRUNTIME/syntax/    |
    |                |       |       |          |html.vim"              |
    |----------------+-------+-------+----------+-----------------------|
    |                |V:0.01,|       |          |konverterare för       |
    |cxref           |I:0.23 |1191   |c→html    |C-programmet till latex|
    |                |       |       |          |och HTML (C-språk)     |
    |----------------+-------+-------+----------+-----------------------|
    |                |V:0.02,|       |          |konvertera många       |
    |src2tex         |I:0.16 |1799   |highlight |källkoder till TeX     |
    |                |       |       |          |(C-språk)              |
    |----------------+-------+-------+----------+-----------------------|
    |                |       |       |          |konvertera många       |
    |                |       |       |          |källkoder till HTML,   |
    |                |V:0.4, |       |          |XHTML, LaTeX, Texinfo, |
    |source-highlight|I:3.1  |2131   |highlight |ANSI                   |
    |                |       |       |          |färg-escape-sekvenser  |
    |                |       |       |          |och DocBook-filer med  |
    |                |       |       |          |markering (C++)        |
    |----------------+-------+-------+----------+-----------------------|
    |                |       |       |          |konvertera många       |
    |                |V:0.4, |       |          |källkoder till HTML-,  |
    |highlight       |I:3.1  |1412   |highlight |XHTML-, RTF-, LaTeX-,  |
    |                |       |       |          |TeX- eller XSL-FO-filer|
    |                |       |       |          |med markering (C++)    |
    |----------------+-------+-------+----------+-----------------------|
    |grc             |V:0.9, |208    |text→färg |generisk färgläggare   |
    |                |I:5.9  |       |          |för allt (Python)      |
    |----------------+-------+-------+----------+-----------------------|
    |                |V:10,  |       |          |allmän                 |
    |pandoc          |I:46   |209102 |text→någon|markup-omvandlare      |
    |                |       |       |          |(Haskell)              |
    |----------------+-------+-------+----------+-----------------------|
    |                |       |       |          |Formatering av         |
    |python3-docutils|V:11,  |2013   |text→någon|ReStructured           |
    |                |I:50   |       |          |Text-dokument till XML |
    |                |       |       |          |(Python)               |
    |----------------+-------+-------+----------+-----------------------|
    |                |V:0.4, |       |          |Formatering av         |
    |markdown        |I:6.1  |56     |text→html |Markdown-textdokument  |
    |                |       |       |          |till (X)HTML (Perl)    |
    |----------------+-------+-------+----------+-----------------------|
    |                |V:0.4, |       |          |AsciiDoc               |
    |asciidoctor     |I:5.0  |101    |text→någon|textdokumentformaterare|
    |                |       |       |          |till XML/HTML (Ruby)   |
    |----------------+-------+-------+----------+-----------------------|
    |                |       |       |          |ReStructured           |
    |python3-sphinx  |V:6,   |3234   |text→någon|Text-baserat system för|
    |                |I:25   |       |          |publicering av dokument|
    |                |       |       |          |(Python)               |
    |----------------+-------+-------+----------+-----------------------|
    |                |       |       |          |Markdown-baserat system|
    |hugo            |V:0.8, |66736  |text→html |för publicering av     |
    |                |I:5.3  |       |          |statiska webbplatser   |
    |                |       |       |          |(Go)                   |
    +-------------------------------------------------------------------+


11.2. XML-data

    XML (Extensible Markup Language) är ett märkspråk för dokument
    som innehåller strukturerad information.

    Se inledande information på XML.COM.

      * "Vad är XML?"

      * "Vad är XSLT?"
   
      * "Vad är XSL-FO?"

      * "Vad är XLink?"

11.2.1. Grundläggande tips för XML

    XML-text ser ut ungefär som HTML. Det gör det möjligt för oss att
    hantera flera format för utdata för ett dokument. Ett enkelt
    XML-system är docbook-xsl-paketet, som används här.

    Varje XML-fil börjar med en standard XML-deklaration enligt
    följande.

    <?xml version="1.0" encoding="UTF-8"?>

    Den grundläggande syntaxen för ett XML-element märks upp enligt
    följande.

    <name attribute="value">content</name>

    XML-element med tomt innehåll märks upp i följande korta form.

    <name attribute="value" />

    Attributet "attribute="value"" i exemplen ovan är valfritt.

    Kommentarsfältet i XML är markerat enligt följande.

    <!-- comment -->

    Förutom att lägga till markeringar kräver XML en mindre
    konvertering av innehållet med hjälp av fördefinierade enheter
    för följande tecken.

    Tabell 11.7. Lista över fördefinierade enheter för XML

    +---------------------------------------------------+
    |fördefinierad enhet|tecken som ska konverteras till|
    |-------------------+-------------------------------|
    |&quot;             |": offert                      |
    |-------------------+-------------------------------|
    |&apos;             |': apostrof                    |
    |-------------------+-------------------------------|
    |&lt;               |<: mindre än                   |
    |-------------------+-------------------------------|
    |&gt;               |>: större än                   |
    |-------------------+-------------------------------|
    |&amp;              |& : ampersand                  |
    +---------------------------------------------------+


    Observera
   
    "<" eller "&" kan inte användas i attribut eller element.

    Notera

    När användardefinierade entiteter i SGML-stil, t.ex. "&some-tag;
    ", används, vinner den första definitionen över de andra.
    Entitetsdefinitionen uttrycks i "<!ENTITY some-tag
    "entitetsvärde">".

    Notera

    Så länge XML-markeringen görs konsekvent med en viss uppsättning
    taggnamn (antingen vissa data som innehåll eller attributvärde),
    är konvertering till en annan XML en trivial uppgift med hjälp av
    Extensible Stylesheet Language Transformations (XSLT).

11.2.2. XML-bearbetning

    Det finns många verktyg för att bearbeta XML-filer, t.ex.
    Extensible Stylesheet Language (XSL).

    När du har skapat en välformad XML-fil kan du konvertera den till
    valfritt format med hjälp av Extensible Stylesheet Language
    Transformations (XSLT).

    XSL-FO (Extensible Stylesheet Language for Formatting Objects) är
    tänkt att vara en lösning för formatering. Paketet fop är nytt i
    Debians main arkiv på grund av dess beroende av programspråket
    Java. Så LaTeX-koden genereras vanligtvis från XML med hjälp av
    XSLT och LaTeX-systemet används för att skapa utskrivbara filer
    som DVI, PostScript och PDF.

    Tabell 11.8. Lista över XML-verktyg

    +---------------------------------------------------------------+
    |   paket   |popcon |storlek|sökord|        beskrivning         |
    |-----------+-------+-------+------+----------------------------|
    |docbook-xml|V:15,  |2126   |xml   |XML-dokumenttypdefinition   |
    |           |I:404  |       |      |(DTD) för DocBook           |
    |-----------+-------+-------+------+----------------------------|
    |           |       |       |      |XSL-stilmallar för          |
    |docbook-xsl|V:14,  |14823  |xml/  |bearbetning av DocBook XML  |
    |           |I:145  |       |xslt  |till olika utdataformat med |
    |           |       |       |      |XSLT                        |
    |-----------+-------+-------+------+----------------------------|
    |           |V:15,  |       |      |XSLT kommandoradsprocessor  |
    |xsltproc   |I:72   |83     |xslt  |(XML→ XML, HTML, vanlig     |
    |           |       |       |      |text, etc.)                 |
    |-----------+-------+-------+------+----------------------------|
    |xmlto      |V:0.5, |124    |xml/  |XML-till-alla-konverterare  |
    |           |I:8.8  |       |xslt  |med XSLT                    |
    |-----------+-------+-------+------+----------------------------|
    |fop        |V:0.6, |281    |xml/  |konvertera Docbook XML-filer|
    |           |I:7.6  |       |xsl-fo|till PDF                    |
    |-----------+-------+-------+------+----------------------------|
    |           |V:0.9, |       |xml/  |konvertera Docbook-filer    |
    |dblatex    |I:5.9  |4636   |xslt  |till DVI-, PostScript-,     |
    |           |       |       |      |PDF-dokument med XSLT       |
    |-----------+-------+-------+------+----------------------------|
    |dbtoepub   |V:0.05,|37     |xml/  |DocBook XML till            |
    |           |I:0.58 |       |xslt  |.epub-omvandlare            |
    +---------------------------------------------------------------+


    Eftersom XML är en delmängd av Standard Generalized Markup
    Language (SGML) kan det bearbetas med de omfattande verktyg som
    finns för SGML, t.ex. Document Style Semantics and Specification
    Language (DSSSL).

    Tabell 11.9. Lista över DSSSL-verktyg

    +---------------------------------------------------------------+
    |    paket    |popcon|storlek|sökord|        beskrivning        |
    |-------------+------+-------+------+---------------------------|
    |openjade     |V:1,  |1066   |dsssl |ISO/IEC 10179:1996 standard|
    |             |I:22  |       |      |DSSSL-processor (senaste)  |
    |-------------+------+-------+------+---------------------------|
    |             |      |       |      |DSSSL-stilmallar för       |
    |docbook-dsssl|V:0.5,|2594   |xml/  |bearbetning av DocBook XML |
    |             |I:8.0 |       |dsssl |till olika utdataformat med|
    |             |      |       |      |DSSSL                      |
    |-------------+------+-------+------+---------------------------|
    |             |      |       |      |verktyg för DocBook-filer  |
    |             |      |       |      |inklusive konvertering till|
    |docbook-utils|V:0.3,|287    |xml/  |andra format (HTML, RTF,   |
    |             |I:5.7 |       |dsssl |PS, man, PDF) med          |
    |             |      |       |      |docbook2*-kommandon med    |
    |             |      |       |      |DSSSL                      |
    +---------------------------------------------------------------+


    Tips
   
    GNOME:s yelp är ibland praktiskt för att läsa DocBook XML-filer
    direkt eftersom den återges hyfsat på X.

11.2.3. Extrahering av XML-data

    Du kan extrahera HTML- eller XML-data från andra format på
    följande sätt.

    Tabell 11.10. Lista över verktyg för extrahering av XML-data

    +---------------------------------------------------------------+
    |  paket  |popcon|storlek|     sökord      |    beskrivning     |
    |---------+------+-------+-----------------+--------------------|
    |         |V:0.1,|       |                 |omvandlare från     |
    |man2html |I:1.3 |142    |manpage→html     |manpage till HTML   |
    |         |      |       |                 |(CGI-stöd)          |
    |---------+------+-------+-----------------+--------------------|
    |         |      |       |                 |omvandlare från     |
    |doclifter|I:0.04|487    |troff→xml        |troff till DocBook  |
    |         |      |       |                 |XML                 |
    |---------+------+-------+-----------------+--------------------|
    |texi2html|V:0.2,|1847   |texi→html        |omvandlare från     |
    |         |I:2.9 |       |                 |Texinfo till HTML   |
    |---------+------+-------+-----------------+--------------------|
    |         |V:0.9,|       |                 |konverterare från   |
    |info2www |I:1.5 |76     |info→html        |GNU info till HTML  |
    |         |      |       |                 |(CGI-stöd)          |
    |---------+------+-------+-----------------+--------------------|
    |         |      |       |                 |dokumentkonverterare|
    |wv       |V:0.2,|733    |MSWord→någon     |från Microsoft Word |
    |         |I:2.5 |       |                 |till HTML, LaTeX,   |
    |         |      |       |                 |etc.                |
    |---------+------+-------+-----------------+--------------------|
    |         |V:0.3,|       |                 |dokumentkonverterare|
    |unrtf    |I:3.0 |159    |rtf→html         |från RTF till HTML, |
    |         |      |       |                 |etc                 |
    |---------+------+-------+-----------------+--------------------|
    |         |      |       |                 |WordPerfect 5.0- och|
    |wp2x     |I:0.09|200    |WordPerfect→något|5.1-filer till TeX, |
    |         |      |       |                 |LaTeX, troff, GML   |
    |         |      |       |                 |och HTML            |
    +---------------------------------------------------------------+


11.2.4. XML-data lint

    För HTML-filer som inte är XML kan du konvertera dem till XHTML,
    som är en instans av välformad XML. XHTML kan bearbetas av
    XML-verktyg.

    Syntaxen i XML-filer och korrektheten i de webbadresser som finns
    i dem kan kontrolleras.

    Tabell 11.11. Lista över XML Pretty Print-verktyg

    +---------------------------------------------------------------+
    |    paket    |popcon |storlek|   funktion   |   beskrivning    |
    |-------------+-------+-------+--------------+------------------|
    |             |       |       |              |xML-verktyg för   |
    |             |       |       |              |kommandoraden med |
    |libxml2-utils|V:60,  |211    |xml↔html↔xhtml|xmllint(1)        |
    |             |I:210  |       |              |(syntaxkontroll,  |
    |             |       |       |              |omformatering,    |
    |             |       |       |              |lint, ...)        |
    |-------------+-------+-------+--------------+------------------|
    |             |V:0.8, |       |              |HTML              |
    |tidy         |I:7.5  |79     |xml↔html↔xhtml|syntaxkontroll och|
    |             |       |       |              |omformatering     |
    |-------------+-------+-------+--------------+------------------|
    |             |V:0.05,|       |              |syntax och minimal|
    |weblint-perl |I:0.96 |32     |ludd          |stilkontroll för  |
    |             |       |       |              |HTML              |
    |-------------+-------+-------+--------------+------------------|
    |             |       |       |              |verktyg för       |
    |             |V:0.06,|       |              |kontroll av       |
    |linklint     |I:0.49 |343    |länk kontroll |snabblänkar och   |
    |             |       |       |              |underhåll av      |
    |             |       |       |              |webbplatser       |
    +---------------------------------------------------------------+


    När korrekt XML har genererats kan du använda XSLT-teknik för att
    extrahera data baserat på markeringskontexten etc.

11.3. Inställning av typ

    Unix-programmet troff, som ursprungligen utvecklades av AT&T, kan
    användas för enkel sättning. Det används vanligtvis för att skapa
    manpages.

    TeX, som skapades av Donald Knuth, är ett mycket kraftfullt
    verktyg för typsättning och är de facto-standarden. LaTeX, som
    ursprungligen skrevs av Leslie Lamport, ger tillgång till TeX:s
    kraft på hög nivå.

    Tabell 11.12. Lista över typinställningsverktyg

    +---------------------------------------------------------------+
    | paket  |popcon |storlek|sökord|          beskrivning          |
    |--------+-------+-------+------+-------------------------------|
    |texlive |V:1,   |55     |(La)  |TeX-system för sättning,       |
    |        |I:27   |       |TeX   |förhandsgranskning och utskrift|
    |--------+-------+-------+------+-------------------------------|
    |lilypond|V:0.6, |16924  |(La)  |musik sättare                  |
    |        |I:5.7  |       |TeX   |                               |
    |--------+-------+-------+------+-------------------------------|
    |groff   |V:2,   |16514  |troff |GNU troff                      |
    |        |I:24   |       |      |textformateringssystem         |
    +---------------------------------------------------------------+


11.3.1. roff sättning

    Traditionellt är roff det huvudsakliga textbehandlingssystemet i
    Unix. Se roff(7), groff(7), groff(1), grotty(1), troff(1),
    groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm
    (7) och "info groff".

    Du kan läsa eller skriva ut en bra handledning och referens om
    "-me" -makro i "/usr/share/doc/groff/" genom att installera
    groff-paketet.

    Tips

    "groff -Tascii -me -" ger ut vanlig text med ANSI escape-kod. Om
    du vill få ut manpage-liknande utdata med många "^H" och "_",
    använd "GROFF_NO_SGR=1 groff -Tascii -me-" istället.

    Tips
   
    Om du vill ta bort "^H" och "_" från en textfil som genererats av
    groff filtrerar du den med "col -b -x".

11.3.2. TeX/LaTeX

    Programvarudistributionen TeX Live erbjuder ett komplett
    TeX-system. Metapaketet texlive innehåller ett anständigt urval
    av TeX Live-paketen som bör räcka för de vanligaste uppgifterna.

    Det finns många referenser tillgängliga för TeX och LaTeX.

      * HOWTO för teTeX: Den lokala guiden för Linux-teTeX

      * tex(1)

      * latex(1)

      * texdoc(1)

      * texdoctk(1)

      * "The TeXbook", av Donald E. Knuth, (Addison-Wesley)

      * "LaTeX - A Document Preparation System", av Leslie Lamport,
        (Addison-Wesley)

      * "The LaTeX Companion", av Goossens, Mittelbach, Samarin,
        (Addison-Wesley)

    Detta är den mest kraftfulla sättningsmiljön. Många
    SGML-processorer använder detta som sin backend-textprocessor.
    Lyx som tillhandahålls av lyxpaketet och GNU TeXmacs som
    tillhandahålls av texmacs-paketet erbjuder en trevlig
    WYSIWYG-redigeringsmiljö för LaTeX medan många använder Emacs och
    Vim som val för källredigeraren.

    Det finns många tillgängliga resurser på nätet.

      * TEX Live Guide - TEX Live 2007 ( "/usr/share/doc/
        texlive-doc-base/english/texlive-en/live.html")
        (paketettexlive-doc-base )
   
      * En enkel guide till Latex/Lyx

      * Ordbehandling med hjälp av LaTeX

    När dokumenten blir större kan TeX ibland orsaka fel. Du måste
    öka poolstorleken i "/etc/texmf/texmf.cnf" (eller mer lämpligt
    redigera "/etc/texmf/texmf.d/95NonPath" och köra update-texmf(8))
    för att åtgärda detta.

    Notera

    TeX-källan till "The TeXbook" finns tillgänglig på www.ctan.org
    tex-archive site for texbook.tex. Denna fil innehåller de flesta
    av de nödvändiga makron. Jag har hört att man kan bearbeta detta
    dokument med tex(1) efter att ha kommenterat raderna 7 till 10
    och lagt till "\input manmac \proofmodefalse". Det rekommenderas
    starkt att köpa den här boken (och alla andra böcker av Donald E.
    Knuth) i stället för att använda onlineversionen, men källan är
    ett bra exempel på TeX-inmatning!

11.3.3. Skriv ut en manuell sida

    Du kan skriva ut en manuell sida i PostScript på ett snyggt sätt
    med något av följande kommandon.

    $ man -Tps some_manpage | lpr

11.3.4. Skapa en manuell sida

    Även om det är möjligt att skriva en manuell sida (manpage) i det
    vanliga troff-formatet finns det få hjälppaket för att skapa den.

    Tabell 11.13. Lista över paket som hjälper till att skapa manpage

    +---------------------------------------------------------------+
    |    paket     |popcon |storlek|   sökord    |   beskrivning    |
    |--------------+-------+-------+-------------+------------------|
    |              |V:0.5, |       |             |konverterare från |
    |docbook-to-man|I:5.7  |189    |SGML→manusida|DocBook SGML till |
    |              |       |       |             |roff man-makron   |
    |--------------+-------+-------+-------------+------------------|
    |              |       |       |             |automatisk        |
    |help2man      |V:0.5, |542    |text→manpage |generator av      |
    |              |I:6.4  |       |             |manpage från      |
    |              |       |       |             |--help            |
    |--------------+-------+-------+-------------+------------------|
    |              |V:0.02,|       |             |omvandlare från   |
    |info2man      |I:0.21 |134    |info→manpage |GNU info till POD |
    |              |       |       |             |eller man pages   |
    |--------------+-------+-------+-------------+------------------|
    |              |V:0.05,|       |             |konvertera platt  |
    |txt2man       |I:0.66 |112    |text→manpage |ASCII-text till   |
    |              |       |       |             |man page-format   |
    +---------------------------------------------------------------+


11.4. Utskrivbara data

    Utskrivbara data uttrycks i PostScript-format på Debian-systemet.
    CUPS (Common Unix Printing System) använder Ghostscript som
    backendprogram för rastrering för icke-PostScript-skrivare.

    Utskrivbara data kan också uttryckas i PDF-format på det senaste
    Debian-systemet.

    PDF-filer kan visas och dess formulärposter kan fyllas i med
    hjälp av GUI-visningsprogram som Evince och Okular (se
    Avsnitt 7.4, ”GUI-applikationer”) och moderna webbläsare som
    Chromium.

    PDF-filer kan redigeras med hjälp av vissa grafikverktyg som
    LibreOffice, Scribus och Inkscape (se Avsnitt 11.6, ”Grafiska
    dataverktyg”).

    Tips

    Du kan läsa en PDF-fil med GIMP och konvertera den till
    PNG-format med en upplösning på mer än 300 dpi. Detta kan
    användas som en bakgrundsbild för LibreOffice för att producera
    en önskvärd ändrad utskrift med minsta möjliga ansträngning.

11.4.1. Ghostscript

    Kärnan i hanteringen av utskrivbara data är Ghostscript
    PostScript (PS) -tolken som genererar rasterbilder.

    Tabell 11.14. Lista över Ghostscript PostScript-tolkar

    +---------------------------------------------------------------+
    |       paket       |popcon|storlek|        beskrivning         |
    |-------------------+------+-------+----------------------------|
    |ghostscript        |V:181,|177    |GPL Ghostscript PostScript/ |
    |                   |I:559 |       |PDF-tolk                    |
    |-------------------+------+-------+----------------------------|
    |                   |V:0,  |       |GPL Ghostscript PostScript/ |
    |ghostscript-x      |I:14  |88     |PDF-tolk - Stöd för         |
    |                   |      |       |X-display                   |
    |-------------------+------+-------+----------------------------|
    |libpoppler162      |V:1.2,|5313   |Bibliotek för PDF-rendering |
    |                   |I:3.1 |       |från PDF-tittaren xpdf      |
    |-------------------+------+-------+----------------------------|
    |                   |V:73, |       |Bibliotek för PDF-rendering |
    |libpoppler-glib8t64|I:307 |612    |(GLib-baserat delat         |
    |                   |      |       |bibliotek)                  |
    |-------------------+------+-------+----------------------------|
    |                   |V:169,|       |CMaps för                   |
    |poppler-data       |I:580 |13086  |PDF-renderingsbibliotek (för|
    |                   |      |       |CJK-stöd: Adobe-*)          |
    +---------------------------------------------------------------+


    Tips
   
    "gs -h" kan visa konfigurationen för Ghostscript.

11.4.2. Slå samman två PS- eller PDF-filer

    Du kan slå samman två PostScript (PS) - eller Portable Document
    Format (PDF) -filer med hjälp av gs(1) i Ghostscript.

    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

    Notera

    PDF, som är ett allmänt använt utskriftsformat för flera
    plattformar, är i huvudsak det komprimerade PS-formatet med några
    ytterligare funktioner och tillägg.

    Tips

    För kommandoraden är psmerge(1) och andra kommandon från
    psutils-paketet användbara för att manipulera
    PostScript-dokument. pdftk(1) från pdftk-paketet är också
    användbart för att manipulera PDF-dokument.

11.4.3. Verktyg för utskrivbara data

    Jag fick upp ögonen för följande paket för utskriftsvänliga
    dataverktyg.

    Tabell 11.15. Lista över utskrivbara dataprogram

    +--------------------------------------------------------------------+
    |    paket    |popcon |storlek|   sökord    |      beskrivning       |
    |-------------+-------+-------+-------------+------------------------|
    |             |V:156, |       |             |PDF-verktyg: pdftops,   |
    |poppler-utils|I:471  |804    |pdf→ps,text,…|pdfinfo, pdfimages,     |
    |             |       |       |             |pdftotext, pdffonts     |
    |-------------+-------+-------+-------------+------------------------|
    |psutils      |V:4,   |34     |ps→ps        |Verktyg för konvertering|
    |             |I:50   |       |             |av PostScript-dokument  |
    |-------------+-------+-------+-------------+------------------------|
    |poster       |V:0.1, |57     |ps→ps        |skapa stora affischer av|
    |             |I:1.8  |       |             |PostScript-sidor        |
    |-------------+-------+-------+-------------+------------------------|
    |             |V:1,   |       |text→ps,     |konvertera ASCII-text   |
    |enscript     |I:11   |2138   |html, rtf    |till PostScript, HTML,  |
    |             |       |       |             |RTF eller Pretty-Print  |
    |-------------+-------+-------+-------------+------------------------|
    |             |V:1.0, |       |             |"Allt till              |
    |a2ps         |I:7.0  |4109   |text→ps      |PostScript"-konverterare|
    |             |       |       |             |och pretty-printer      |
    |-------------+-------+-------+-------------+------------------------|
    |pdftk        |V:1,   |28     |pdf→pdf      |Verktyg för konvertering|
    |             |I:21   |       |             |av PDF-dokument: pdftk  |
    |-------------+-------+-------+-------------+------------------------|
    |html2ps      |V:0.1, |256    |html→ps      |omvandlare från HTML    |
    |             |I:1.8  |       |             |till PostScript         |
    |-------------+-------+-------+-------------+------------------------|
    |gnuhtml2latex|V:0.02,|26     |html→latex   |omvandlare från html    |
    |             |I:0.63 |       |             |till latex              |
    |-------------+-------+-------+-------------+------------------------|
    |             |V:0.1, |       |             |konvertera dokument från|
    |latex2rtf    |I:1.6  |495    |latex→rtf    |LaTeX till RTF som kan  |
    |             |       |       |             |läsas av MS Word        |
    |-------------+-------+-------+-------------+------------------------|
    |             |       |       |             |konvertering från       |
    |ps2eps       |V:2,   |95     |ps→eps       |PostScript till EPS     |
    |             |I:32   |       |             |(Encapsulated           |
    |             |       |       |             |PostScript)             |
    |-------------+-------+-------+-------------+------------------------|
    |             |       |       |             |Text till               |
    |e2ps         |V:0.01,|104    |text→ps      |PostScript-omvandlare   |
    |             |I:0.12 |       |             |med stöd för japansk    |
    |             |       |       |             |kodning                 |
    |-------------+-------+-------+-------------+------------------------|
    |impose+      |V:0.1, |118    |ps→ps        |PostScript-verktyg      |
    |             |I:1.5  |       |             |                        |
    |-------------+-------+-------+-------------+------------------------|
    |             |       |       |             |skriver ut många        |
    |             |V:0.01,|       |             |källkoder (C, C++, Java,|
    |trueprint    |I:0.07 |148    |text→ps      |Pascal, Perl, Pike, Sh  |
    |             |       |       |             |och Verilog) till       |
    |             |       |       |             |PostScript. (C-språk)   |
    |-------------+-------+-------+-------------+------------------------|
    |             |V:0.2, |       |             |omvandlare från PDF till|
    |pdf2svg      |I:3.0  |33     |pdf→svg      |skalbart                |
    |             |       |       |             |vektorgrafikformat      |
    |-------------+-------+-------+-------------+------------------------|
    |pdftoipe     |V:0.01,|69     |pdf→ipe      |konverterare från PDF   |
    |             |I:0.46 |       |             |till IPE:s XML-format   |
    +--------------------------------------------------------------------+


11.4.4. Skriva ut med CUPS

    Kommandona lp(1) och lpr(1) som erbjuds av Common Unix Printing
    System (CUPS) ger möjlighet till anpassad utskrift av utskrivbara
    data.

    Du kan skriva ut 3 kopior av en fil som är sorterad med hjälp av
    något av följande kommandon.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

    Du kan anpassa skrivarfunktionen ytterligare genom att använda
    skrivaralternativ som "-o number-up=2", "-o page-set=even", "-o
    page-set=odd", "-o scaling=200", "-o natural-scaling=200", etc.,
    som finns dokumenterade i Command-Line Printing and Options.

11.5. Konvertering av postdata

    Följande paket för konvertering av postdata fångade min
    uppmärksamhet.

    Tabell 11.16. Lista över paket som hjälper till med konvertering
    av e-postdata

    +---------------------------------------------------------------+
    |  paket  |popcon|storlek|sökord |         beskrivning          |
    |---------+------+-------+-------+------------------------------|
    |sharutils|V:2,  |1436   |post   |shar(1), unshar(1), uuencode  |
    |         |I:28  |       |       |(1), uudecode(1)              |
    |---------+------+-------+-------+------------------------------|
    |         |V:0.8,|       |       |kodning och avkodning av      |
    |mpack    |I:8.0 |109    |MIME   |MIME-meddelanden: mpack(1) och|
    |         |      |       |       |munpack(1)                    |
    |---------+------+-------+-------+------------------------------|
    |         |      |       |       |uppackning av MIME-bilagor av |
    |tnef     |V:0.3,|103    |ms-tnef|typen "application/ms-tnef"   |
    |         |I:4.0 |       |       |som endast är ett             |
    |         |      |       |       |Microsoft-format              |
    |---------+------+-------+-------+------------------------------|
    |         |      |       |       |kodare och avkodare för       |
    |uudeview |V:0.2,|105    |post   |följande format: uuencode,    |
    |         |I:1.8 |       |       |xxencode, BASE64, quotted     |
    |         |      |       |       |printable, och BinHex         |
    +---------------------------------------------------------------+


    Tips

    IMAP4-servern ( Internet Message Access Protocol version 4) kan
    användas för att flytta ut e-post från proprietära e-postsystem
    om e-postklientprogrammet kan konfigureras så att det också
    använder IMAP4-servern.

11.5.1. Grunderna för e-postdata

    Mail(SMTP) bör begränsas till serier av 7-bitarsdata. Binärdata
    och 8-bitars textdata kodas därför till 7-bitarsformat med hjälp
    av MIME (Multipurpose Internet Mail Extensions) och val av
    teckenuppsättning (se Tabell 11.2, ”Lista över kodningsvärden och
    deras användning”).

    Standardlagringsformatet för e-post är mbox formaterat enligt
    RFC2822 (uppdaterad RFC822). Se mbox(5) (tillhandahålls av
    mutt-paketet ).

    För europeiska språk används vanligtvis
    "Content-Transfer-Encoding: quoted-printable" med
    teckenuppsättningen ISO-8859-1 för e-post eftersom det inte finns
    så många 8-bitars tecken. Om europeisk text är kodad i UTF-8
    kommer sannolikt "Content-Transfer-Encoding: quoted-printable"
    att användas eftersom det mestadels är 7-bitarsdata.

    För japanska används traditionellt "Content-Type: text/plain;
    charset=ISO-2022-JP" för e-post för att hålla texten i 7 bitar.
    Men äldre Microsoft-system kan skicka e-postdata i Shift-JIS utan
    korrekt deklaration. Om japansk text kodas i UTF-8 kommer Base64
    sannolikt att användas eftersom den innehåller många
    8-bitarsdata. Situationen för andra asiatiska språk är liknande.

    Notera

    Om dina e-postdata som inte är Unix är tillgängliga för en
    klientprogramvara som inte är Debian och som kan prata med
    IMAP4-servern, kan du kanske flytta ut dem genom att köra din
    egen IMAP4-server.

    Notera

    Om du använder andra lagringsformat för e-post är det ett bra
    första steg att flytta dem till mbox-format. Ett mångsidigt
    klientprogram som mutt(1) kan vara praktiskt för detta.

    Du kan dela upp innehållet i brevlådan till varje meddelande med
    procmail(1) och formail(1).

    Varje e-postmeddelande kan packas upp med munpack(1) från
    mpack-paketet (eller andra specialiserade verktyg) för att få
    fram det MIME-kodade innehållet.

11.6. Grafiska dataverktyg

    Även om GUI-program som gimp(1) är mycket kraftfulla, är
    kommandoradsverktyg som imagemagick(1) ganska användbara för att
    automatisera bildmanipulering via skript.

    De facto bildfilformat för digitalkameror är EXIF ( Exchangeable
    Image File Format ), som är JPEG-bildfilformatet med ytterligare
    metadatataggar. Det kan innehålla information som datum, tid och
    kamerainställningar.

    Patentet för den förlustfria datakomprimeringen Lempel-Ziv-Welch
    (LZW) har löpt ut. GIF-verktyg (Graphics Interchange Format) som
    använder LZW-komprimeringsmetoden är nu fritt tillgängliga på
    Debian-systemet.

    Tips

    Alla digitalkameror eller skannrar med flyttbara inspelningsmedia
    fungerar med Linux via USB-lagringsläsare eftersom de följer
    designregeln för kamerafilsystem och använder FAT-filsystem. Se
    Avsnitt 10.1.7, ”Flyttbar lagringsenhet”.

11.6.1. Grafiska dataverktyg (metapaket)

    Följande metapaket är bra utgångspunkter för att söka efter
    grafiska dataverktyg med aptitude(8). "Packages overview for
    Debian PhotoTools Maintainers" kan vara en annan startpunkt.

    Tabell 11.17. Lista över verktyg för grafikdata (metapaket)

    +---------------------------------------------------------------+
    |         paket          |popcon|storlek|sökord|  beskrivning   |
    |------------------------+------+-------+------+----------------|
    |                        |      |       |svg,  |metapaket för   |
    |education-graphics      |I:0.34|25     |jpeg, |undervisning i  |
    |                        |      |       |…     |grafik och      |
    |                        |      |       |      |bildkonst.      |
    |------------------------+------+-------+------+----------------|
    |                        |      |       |ttf,  |metapaket för   |
    |open-font-design-toolkit|I:0.06|9      |ps, … |öppen           |
    |                        |      |       |      |typsnittsdesign |
    +---------------------------------------------------------------+


    Tips

    Sök efter fler bildverktyg med hjälp av regex
    "~Gworks-with::image" i aptitude(8) (se Avsnitt 2.2.6, ”Sök
    metodalternativ med aptitude”).

11.6.2. Grafiska dataverktyg (GUI)

    Följande paket för datakonvertering, redigering och
    organisationsverktyg för GUI-grafik fångade min uppmärksamhet.

    Tabell 11.18. Lista över verktyg för grafikdata (GUI)

    +-----------------------------------------------------------------+
    |     paket      |popcon |storlek| sökord  |     beskrivning      |
    |----------------+-------+-------+---------+----------------------|
    |gimp            |V:41,  |32779  |bild     |GNU-program för       |
    |                |I:214  |       |(bitmap) |bildmanipulering      |
    |----------------+-------+-------+---------+----------------------|
    |                |       |       |         |GTK-baserad           |
    |xsane           |V:8,   |1512   |bild     |X11-frontend för SANE |
    |                |I:129  |       |(bitmap) |(Scanner Access Now   |
    |                |       |       |         |Easy)                 |
    |----------------+-------+-------+---------+----------------------|
    |scribus         |V:1,   |32415  |ps/pdf/  |Scribus DTP-editor    |
    |                |I:12   |       |SVG/…    |                      |
    |----------------+-------+-------+---------+----------------------|
    |libreoffice-draw|V:91,  |11209  |bild     |LibreOffice           |
    |                |I:414  |       |(vektor) |kontorspaket - ritning|
    |----------------+-------+-------+---------+----------------------|
    |inkscape        |V:11,  |113353 |bild     |SVG-redigerare        |
    |                |I:76   |       |(vektor) |(skalbar vektorgrafik)|
    |----------------+-------+-------+---------+----------------------|
    |dia             |V:1,   |3846   |bild     |diagramredigerare     |
    |                |I:15   |       |(vektor) |(Gtk)                 |
    |----------------+-------+-------+---------+----------------------|
    |                |V:0.8, |       |bild     |Möjlighet till        |
    |xfig            |I:8.4  |7951   |(vektor) |interaktiv generering |
    |                |       |       |         |av siffror enligt X11 |
    |----------------+-------+-------+---------+----------------------|
    |gocr            |V:0.4, |549    |bild→text|gratis OCR-programvara|
    |                |I:3.8  |       |         |                      |
    |----------------+-------+-------+---------+----------------------|
    |eog             |V:24,  |10535  |bild     |Ögon av GNOME         |
    |                |I:137  |       |(Exif)   |grafikvisare program  |
    |----------------+-------+-------+---------+----------------------|
    |gthumb          |V:3,   |5162   |bild     |bildvisare och        |
    |                |I:12   |       |(Exif)   |webbläsare (GNOME)    |
    |----------------+-------+-------+---------+----------------------|
    |geeqie          |V:3,   |3135   |bild     |bildvisare med GTK    |
    |                |I:11   |       |(Exif)   |                      |
    |----------------+-------+-------+---------+----------------------|
    |                |V:14,  |       |bild     |digital               |
    |shotwell        |I:243  |6334   |(Exif)   |fotoorganisator       |
    |                |       |       |         |(GNOME)               |
    |----------------+-------+-------+---------+----------------------|
    |gwenview        |V:39,  |6000   |bild     |bildvisare (KDE)      |
    |                |I:115  |       |(Exif)   |                      |
    |----------------+-------+-------+---------+----------------------|
    |kamera          |I:114  |992    |bild     |stöd för digitalkamera|
    |                |       |       |(Exif)   |för KDE-applikationer |
    |----------------+-------+-------+---------+----------------------|
    |                |V:1.5, |       |bild     |program för hantering |
    |digikam         |I:8.6  |325    |(Exif)   |av digitala foton för |
    |                |       |       |         |KDE                   |
    |----------------+-------+-------+---------+----------------------|
    |darktable       |V:4,   |35876  |bild     |virtuellt ljusbord och|
    |                |I:11   |       |(Exif)   |mörkrum för fotografer|
    |----------------+-------+-------+---------+----------------------|
    |hugin           |V:0.4, |6481   |bild     |panorama foto stitcher|
    |                |I:5.7  |       |(Exif)   |                      |
    |----------------+-------+-------+---------+----------------------|
    |librecad        |V:1,   |9164   |DXF, ... |2D CAD-dataredigerare |
    |                |I:12   |       |         |                      |
    |----------------+-------+-------+---------+----------------------|
    |freecad         |V:1,   |112    |DXF, ... |3D CAD-dataredigerare |
    |                |I:19   |       |         |                      |
    |----------------+-------+-------+---------+----------------------|
    |                |V:2,   |       |blend,   |3D-innehållsredigerare|
    |blender         |I:19   |169320 |TIFF,    |för animering etc     |
    |                |       |       |VRML, …  |                      |
    |----------------+-------+-------+---------+----------------------|
    |                |V:0.02,|       |ms3d,    |OpenGL-baserad        |
    |mm3d            |I:0.26 |4123   |obj, dxf,|3D-modellredigerare   |
    |                |       |       |…        |                      |
    |----------------+-------+-------+---------+----------------------|
    |                |V:0.5, |       |ttf, ps, |fontredigerare för    |
    |fontforge       |I:5.8  |4736   |…        |PS-, TrueType- och    |
    |                |       |       |         |OpenType-teckensnitt  |
    |----------------+-------+-------+---------+----------------------|
    |                |       |       |         |program för           |
    |xgridfit        |V:0.01,|878    |ttf      |gridfitting och       |
    |                |I:0.10 |       |         |hintning av           |
    |                |       |       |         |TrueType-teckensnitt  |
    +-----------------------------------------------------------------+


11.6.3. Grafiska dataverktyg (CLI)

    Följande paket för CLI-verktyg för konvertering, redigering och
    organisering av grafikdata fångade min uppmärksamhet.

    Tabell 11.19. Lista över verktyg för grafikdata (CLI)

    +-----------------------------------------------------------------------------+
    |      paket      |popcon |storlek|      sökord      |      beskrivning       |
    |-----------------+-------+-------+------------------+------------------------|
    |imagemagick      |V:7,   |81     |bild(bitmap)      |bildbehandlingsprogram  |
    |                 |I:275  |       |                  |                        |
    |-----------------+-------+-------+------------------+------------------------|
    |graphicsmagick   |V:1.0, |5945   |bild(bitmap)      |bildmanipuleringsprogram|
    |                 |I:8.8  |       |                  |(gaffel av imagemagick) |
    |-----------------+-------+-------+------------------+------------------------|
    |netpbm           |V:26,  |8435   |bild(bitmap)      |verktyg för grafisk     |
    |                 |I:285  |       |                  |konvertering            |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |       |       |                  |konvertera HEIF (High   |
    |                 |       |       |                  |Efficiency Image File   |
    |libheif-examples |V:0.3, |503    |heif→jpeg(bitmap) |Format) till JPEG-, PNG-|
    |                 |I:3.6  |       |                  |eller Y4M-format med    |
    |                 |       |       |                  |kommandot heif-convert  |
    |                 |       |       |                  |(1)                     |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |       |       |                  |konvertera MS           |
    |icoutils         |V:3,   |221    |png↔ico(bitmapp)  |Windows-ikoner och      |
    |                 |I:33   |       |                  |markörer till och från  |
    |                 |       |       |                  |PNG-format(favicon.ico) |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |       |       |                  |Konvertera PostScript-  |
    |pstoedit         |V:1,   |1075   |ps/pdf→bild       |och PDF-filer till      |
    |                 |I:37   |       |(vektor)          |redigerbar vektorgrafik |
    |                 |       |       |                  |(SVG)                   |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:4,   |       |Fönster/bild      |Verktyg för konvertering|
    |libwmf-bin       |I:81   |149    |(vektor)          |av Windows-metafiler    |
    |                 |       |       |                  |(vektorgrafikdata)      |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:0.01,|       |                  |konvertera XFig-filer   |
    |fig2sxd          |I:0.18 |158    |fig→sxd(vektor)   |till OpenOffice.org Draw|
    |                 |       |       |                  |-format                 |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:2,   |       |                  |verktyg för             |
    |unpaper          |I:17   |417    |bild→bild         |efterbehandling av      |
    |                 |       |       |                  |skannade sidor för OCR  |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:8,   |       |                  |gratis OCR-programvara  |
    |tesseract-ocr    |I:35   |2209   |bild→text         |baserad på HP:s         |
    |                 |       |       |                  |kommersiella OCR-motor  |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:8,   |       |                  |OCR-motordata:          |
    |tesseract-ocr-eng|I:35   |4032   |bild→text         |tesseract-ocr-språkfiler|
    |                 |       |       |                  |för engelsk text        |
    |-----------------+-------+-------+------------------+------------------------|
    |ocrad            |V:0.3, |608    |bild→text         |gratis OCR-programvara  |
    |                 |I:2.5  |       |                  |                        |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |       |       |                  |kommandoradsverktyg för |
    |exif             |V:3,   |335    |bild(Exif)        |att visa                |
    |                 |I:51   |       |                  |EXIF-information i      |
    |                 |       |       |                  |JPEG-filer              |
    |-----------------+-------+-------+------------------+------------------------|
    |exiv2            |V:2,   |429    |bild(Exif)        |Verktyg för hantering av|
    |                 |I:20   |       |                  |EXIF/IPTC-metadata      |
    |-----------------+-------+-------+------------------+------------------------|
    |exiftran         |V:1,   |81     |bild(Exif)        |omvandla digitalkamerans|
    |                 |I:11   |       |                  |jpeg-bilder             |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |       |       |                  |verktyg för att läsa    |
    |exiftags         |V:0.2, |309    |bild(Exif)        |Exif-taggar från en     |
    |                 |I:2.8  |       |                  |JPEG-fil från en        |
    |                 |       |       |                  |digitalkamera           |
    |-----------------+-------+-------+------------------+------------------------|
    |exifprobe        |V:0.2, |506    |bild(Exif)        |läsa metadata från      |
    |                 |I:2.3  |       |                  |digitala bilder         |
    |-----------------+-------+-------+------------------+------------------------|
    |dcraw            |V:0.8, |428    |bild(Raw)→ppm     |avkoda råa              |
    |                 |I:7.7  |       |                  |digitalkamerabilder     |
    |-----------------+-------+-------+------------------+------------------------|
    |findimagedupes   |V:0.1, |76     |bild→fingeravtryck|hitta visuellt liknande |
    |                 |I:1.1  |       |                  |eller duplicerade bilder|
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:0.01,|       |                  |sammanfoga bilder för   |
    |ale              |I:0.16 |850    |bild→bild         |att öka återgivningen   |
    |                 |       |       |                  |eller skapa mosaiker    |
    |-----------------+-------+-------+------------------+------------------------|
    |                 |V:0.1, |       |                  |generera statiska       |
    |imageindex       |I:1.3  |143    |bild(Exif)→html   |HTML-gallerier från     |
    |                 |       |       |                  |bilder                  |
    |-----------------+-------+-------+------------------+------------------------|
    |outguess         |V:0.1, |230    |jpeg,png          |universellt             |
    |                 |I:1.1  |       |                  |steganografiskt verktyg |
    |-----------------+-------+-------+------------------+------------------------|
    |jpegoptim        |V:0.6, |59     |jpeg              |optimera JPEG-filer     |
    |                 |I:6.2  |       |                  |                        |
    |-----------------+-------+-------+------------------+------------------------|
    |optipng          |V:2,   |187    |png               |optimera PNG-filer,     |
    |                 |I:40   |       |                  |förlustfri komprimering |
    |-----------------+-------+-------+------------------+------------------------|
    |pngquant         |V:1,   |62     |png               |optimera PNG-filer,     |
    |                 |I:12   |       |                  |förlustfri komprimering |
    +-----------------------------------------------------------------------------+


11.7. Diverse datakonvertering

    Det finns många andra program för konvertering av data. Följande
    paket fångade mina ögon med hjälp av regex "~Guse::converting" i
    aptitude(8) (se Avsnitt 2.2.6, ”Sök metodalternativ med aptitude”
    ).

    Tabell 11.20. Lista över diverse verktyg för datakonvertering

    +---------------------------------------------------------------+
    |  paket  |popcon|storlek| sökord  |        beskrivning         |
    |---------+------+-------+---------+----------------------------|
    |         |V:1,  |       |rpm/     |konverterare för det        |
    |alien    |I:13  |150    |tgz→deb  |utländska paketet till      |
    |         |      |       |         |Debian-paketet              |
    |---------+------+-------+---------+----------------------------|
    |         |      |       |         |omvandlare från "Electric   |
    |         |      |       |         |Book" (populärt i Japan)    |
    |freepwing|I:0.02|447    |EB→EPWING|till ett enda JIS X         |
    |         |      |       |         |4081-format (en delmängd av |
    |         |      |       |         |EPWING V1)                  |
    |---------+------+-------+---------+----------------------------|
    |calibre  |V:7,  |69924  |alla→EPUB|e-bokskonverterare och      |
    |         |I:26  |       |         |bibliotekshantering         |
    +---------------------------------------------------------------+


    Du kan också extrahera data från RPM-format med följande.

    $ rpm2cpio file.src.rpm | cpio --extract

Kapitel 12. Programmering

    Jag ger några tips för att människor ska lära sig programmering
    på Debian-systemet tillräckligt för att spåra den paketerade
    källkoden. Här är anmärkningsvärda paket och motsvarande
    dokumentationspaket för programmering.

    Online-referenser finns tillgängliga genom att skriva "man name"
    efter installation av paketen manpages och manpages-dev.
    Online-referenser för GNU-verktygen finns tillgängliga genom att
    skriva "info programnamn" efter att du har installerat de
    relevanta dokumentationspaketen. Du kan behöva inkludera arkiven
    contrib- och non-free utöver main eftersom vissa
    GFDL-dokumentationer inte anses vara DFSG-kompatibla.

    Tänk på att använda verktyg för versionskontrollsystem. Se
    Avsnitt 10.5, ”Git”.

    Varning
   
    Använd inte "test" som namn på en körbar testfil. "test" är en
    inbyggd funktion i skalet.

    Observera

    Du bör installera program som är direkt kompilerade från källkod
    i "/usr/local" eller "/opt" för att undvika kollision med
    systemprogram.

    Tips
   
    Kodexempel för att skapa "Song 99 Bottles of Beer" bör ge dig
    goda idéer om praktiskt taget alla programmeringsspråk.

12.1. Shell-skriptet

    Shellskriptet är en textfil med exekveringsbiten aktiverad och
    innehåller kommandon i följande format.

    #!/bin/sh
     ... command lines

    Den första raden anger vilken shell-tolk som ska läsa och
    exekvera filinnehållet.

    Att läsa skalskript är det bästa sättet att förstå hur ett
    Unix-liknande system fungerar. Här ger jag några tips och
    påminnelser för programmering i skalet. Se "Shell Mistakes"
    (https://www.greenend.org.uk/rjk/2001/04/shell.html) för att lära
    dig av misstag.

    Till skillnad från det interaktiva läget i shell (se Avsnitt 1.5,
    ”Det enkla shell-kommandot” och Avsnitt 1.6, ”Unix-liknande
    textbehandling”) används ofta parametrar, villkor och loopar i
    shell-skript.

12.1.1. POSIX shell-kompatibilitet

    Många systemskript kan tolkas av något av POSIX-skalen (se
    Tabell 1.13, ”Lista över skalprogram”).

      * Det icke-interaktiva POSIX-skalet "/usr/bin/sh" är en
        symbolisk länk som pekar på /usr/bin/dash och används av
        många systemprogram.

      * Det interaktiva POSIX-shell som används som standard är /usr/
        bin/bash.

    Undvik att skriva ett skalskript med bashisms eller zshisms för
    att göra det portabelt mellan alla POSIX-skal. Du kan kontrollera
    det med checkbashisms(1).

    Tabell 12.1. Lista över typiska bashismer

    +---------------------------------------------------------------+
    |          Bra: POSIX           |        Undvik: bashism        |
    |-------------------------------+-------------------------------|
    |if [ "$foo" = "$bar" ] ; then …|if [ "$foo" == "$bar" ] ; then |
    |                               |…                              |
    |-------------------------------+-------------------------------|
    |diff -u file.c.orig file.c     |diff -u file.c{.orig,}         |
    |-------------------------------+-------------------------------|
    |mkdir /foobar /foobaz          |mkdir /foo{bar,baz}            |
    |-------------------------------+-------------------------------|
    |funcname() { … }               |function funcname() { … }      |
    |-------------------------------+-------------------------------|
    |oktalformat: "\377"            |hexadecimalt format: "\xff"    |
    +---------------------------------------------------------------+


    Kommandot "echo" måste användas med försiktighet eftersom dess
    implementering skiljer sig mellan inbyggda och externa kommandon
    i skalet.

      * Undvik att använda några kommandoval utom "-n".
   
      * Undvik att använda escape-sekvenser i strängen eftersom
        hanteringen av dem varierar.

    Notera
   
    Alternativet "-n" är inte riktigt POSIX-syntax, men det är
    allmänt accepterat.

    Tips
   
    Använd kommandot "printf" i stället för kommandot "echo" om du
    behöver bädda in escape-sekvenser i utdatasträngen.

12.1.2. Parametrar för skal

    Speciella shell-parametrar används ofta i shell-skriptet.

    Tabell 12.2. Lista över skalparametrar

    +---------------------------------------------------------+
    |skalparameter|                   värde                   |
    |-------------+-------------------------------------------|
    |$0           |namnet på skalet eller skalskriptet        |
    |-------------+-------------------------------------------|
    |$1           |första (1st) skalargumentet                |
    |-------------+-------------------------------------------|
    |$9           |nionde (9:e) skalargumentet                |
    |-------------+-------------------------------------------|
    |$#           |antal positionsparametrar                  |
    |-------------+-------------------------------------------|
    |"$*"         |"$1 $2 $3 $4 … "                           |
    |-------------+-------------------------------------------|
    |"$@"         |"$1" "$2" "$3" "$4" …                      |
    |-------------+-------------------------------------------|
    |$?           |utgångsstatus för det senaste kommandot    |
    |-------------+-------------------------------------------|
    |$$           |PID för detta shell-skript                 |
    |-------------+-------------------------------------------|
    |$!           |PID för det senast startade bakgrundsjobbet|
    +---------------------------------------------------------+


    Grundläggande parameterutvidgningar att komma ihåg är följande.

    Tabell 12.3. Lista över expansioner av skalparametrar

    +---------------------------------------------------------------+
    |  parameter   |värde om var är | värde om var inte är inställd |
    | uttryck form |    inställd    |                               |
    |--------------+----------------+-------------------------------|
    |${var:-string}|"$var"          |"sträng"                       |
    |--------------+----------------+-------------------------------|
    |${var:+string}|"sträng"        |"null"                         |
    |--------------+----------------+-------------------------------|
    |${var:=string}|"$var"          |"string" (och kör "var=string")|
    |--------------+----------------+-------------------------------|
    |${var:?string}|"$var"          |echo "string" till stderr (och |
    |              |                |avsluta med fel)               |
    +---------------------------------------------------------------+


    Här är kolon ":" i alla dessa operatorer faktiskt valfritt.

      * med ":" = operatörstest för exist och inte null
   
      * utan ":" = operatörstest för endast existera

    Tabell 12.4. Lista över ersättningar för viktiga skalparametrar

    +---------------------------------------------------------------+
    |          formulär för           |          resultat           |
    |      parametersubstitution      |                             |
    |---------------------------------+-----------------------------|
    |${var%suffix}                    |ta bort minsta suffixmönster |
    |---------------------------------+-----------------------------|
    |${var%%suffix}                   |ta bort största suffixmönster|
    |---------------------------------+-----------------------------|
    |${var#prefix}                    |ta bort minsta prefixmönster |
    |---------------------------------+-----------------------------|
    |${var##prefix}                   |ta bort största prefixmönster|
    +---------------------------------------------------------------+


12.1.3. Villkor för skal

    Varje kommando returnerar en utgångsstatus som kan användas för
    villkorliga uttryck.

      * Framgång: 0 ("True")
   
      * Fel: non 0 ("False")

    Notera
   
    "0" i skalvillkorskontexten betyder "sant", medan "0" i
    C-villkorskontexten betyder "falskt".

    Notera
   
    "[" är motsvarigheten till kommandot test, som utvärderar sina
    argument upp till "]" som ett villkorligt uttryck.

    Grundläggande villkorliga idiom att komma ihåg är följande.

      * "kommando && if_success_run_this_command_too || true"

      * "kommandot || if_not_success_run_this_command_too || true"

      * Ett skriptutdrag med flera rader enligt följande

    if [ conditional_expression ]; then
     if_success_run_this_command
    else
     if_not_success_run_this_command
    fi

    Här behövdes det efterföljande "|| true" för att säkerställa att
    detta skalskript inte avslutas på denna rad av misstag när skalet
    anropas med flaggan "-e".

    Tabell 12.5. Lista över operatorer för filjämförelse i det
    villkorliga uttrycket

    +---------------------------------------------------------------+
    |  ekvation  |      villkor som ska returnera logiskt sant      |
    |------------+--------------------------------------------------|
    |-e file     |filen finns                                       |
    |------------+--------------------------------------------------|
    |-d file     |filen finns och är en katalog                     |
    |------------+--------------------------------------------------|
    |-f fil      |filen finns och är en vanlig fil                  |
    |------------+--------------------------------------------------|
    |-w file     |filen finns och är skrivbar                       |
    |------------+--------------------------------------------------|
    |-x file     |filen finns och är körbar                         |
    |------------+--------------------------------------------------|
    |file1 -nt   |fil1 är nyare än fil2 (modifiering)               |
    |file2       |                                                  |
    |------------+--------------------------------------------------|
    |file1 -ot   |fil1 är äldre än fil2 (modifiering)               |
    |file2       |                                                  |
    |------------+--------------------------------------------------|
    |fil1 -ef    |fil1 och fil2 finns på samma enhet och har samma  |
    |fil2        |inode-nummer                                      |
    +---------------------------------------------------------------+


    Tabell 12.6. Lista över operatorer för strängjämförelse i det
    villkorliga uttrycket

    +--------------------------------------------------------+
    |  ekvation  |  villkor som ska returnera logiskt sant   |
    |------------+-------------------------------------------|
    |-z str      |längden på str är noll                     |
    |------------+-------------------------------------------|
    |-n str      |längden på str är inte noll                |
    |------------+-------------------------------------------|
    |str1 = str2 |str1 och str2 är lika                      |
    |------------+-------------------------------------------|
    |str1 != str2|str1 och str2 är inte lika                 |
    |------------+-------------------------------------------|
    |str1 < str2 |str1 sorteras före str2 (beroende på lokal)|
    |------------+-------------------------------------------|
    |str1 > str2 |str1 sorteras efter str2 (lokalberoende)   |
    +--------------------------------------------------------+


    Aritmetiska heltalsjämförelseoperatorer i det villkorliga
    uttrycket är "-eq", "-ne", "-lt", "-le", "-gt" och "-ge".

12.1.4. Öglor i skalet

    Det finns flera loop-idiom som kan användas i POSIX-skal.

      * "for x in foo1 foo2 ... ; do command ; done" loopar genom att
        tilldela objekt från listan "foo1 foo2 ..." till variabeln
        "x" och utföra "command".

      * "while condition ; do command ; done" upprepar "command"
        medan "condition" är sant.
   
      * "until condition ; do command ; done" upprepar "command"
        medan "condition" inte är sant.

      * "break" gör det möjligt att lämna loopen.

      * "continue" gör det möjligt att återuppta nästa iteration av
        loopen.

    Tips
   
    Den numeriska iterationen som liknar C-språkets kan realiseras
    genom att använda seq(1) som generator för "foo1 foo2 ...".

    Tips
   
    Se Avsnitt 9.4.9, ”Upprepa ett kommando loopa över filer”.

12.1.5. Shell-miljövariabler

    Vissa populära miljövariabler för den normala kommandoprompten i
    shell kanske inte är tillgängliga i exekveringsmiljön för ditt
    skript.

      * För "$USER", använd "$(id -un)"

      * För "$UID", använd "$(id -u)"
   
      * För "$HOME" använder du "$(getent passwd "$(id -u)"|cut -d
        ":" -f 6)" (detta fungerar även på Avsnitt 4.5.2, ”Den
        moderna centraliserade systemhanteringen”)

12.1.6. Bearbetningssekvensen för kommandoraden i Shell

    Shell bearbetar ett skript ungefär enligt följande sekvens.

      * Shell läser en rad.

      * Skalet grupperar en del av raden som en token om den ligger
        inom "..." eller '... '.

      * Shell delar upp andra delar av en rad i tokens på följande
        sätt.

          + Whitespaces: mellanslag flik nytt streck

          + Metatecken: < > | ; & ( )

      * Skalet kontrollerar det reserverade ordet för varje token för
        att anpassa sitt beteende om det inte finns inom "..." eller
        '... '.

          + reserverat ord: if then elif else fi for in while unless
            do done case esac

      * Skalet expanderar alias om det inte finns inom "..." eller
        '...'.

      * Skalet expanderar tilde om det inte finns inom "..." eller
        '... '.

          + "~" → den aktuella användarens hemkatalog

          + "~användare" → användarensanvändarens hemkatalog

      * Skalet expanderar parametern till dess värde om den inte
        finns inom '...'.

          + parameter: "$PARAMETER" eller "${PARAMETER}"

      * Skalet expanderar kommandosubstitutionen om den inte finns
        inom '...'.

          + "$( kommando )" → utdata från "kommando"

          + "`kommando `" → utdata från "kommando"

      * Skalet expanderar sökvägsnamnet glob till matchande filnamn
        om det inte finns inom "..." eller '...'.

          + * → alla tecken

          + ? → ett tecken

          + [...] → något av tecknen i "... "

      * Shell letar upp kommandot från följande och utför det.

          + definition av funktion

          + inbyggt kommando

          + körbar fil i "$PATH"

      * Skalet går till nästa rad och upprepar denna process igen
        från början av denna sekvens.

    Enkla citattecken inom dubbla citattecken har ingen effekt.

    Om du kör "set -x" i skalet eller anropar skalet med alternativet
    "-x" skriver skalet ut alla kommandon som har körts. Detta är
    ganska praktiskt för felsökning.

12.1.7. Verktygsprogram för shell-skript

    För att göra ditt skalprogram så portabelt som möjligt mellan
    olika Debian-system är det en god idé att begränsa
    hjälpprogrammen till sådana som tillhandahålls av viktiga paket.

      * "aptitude search ~E" listar viktiga paket.
   
      * "dpkg -L paketnamn |grep '/man/man.*/'" listar handböcker för
        kommandon som erbjuds av paket_namn paketet.

    Tabell 12.7. Lista över paket som innehåller små verktygsprogram
    för skalskript

    +---------------------------------------------------------------+
    |    paket    | popcon  |storlek|          beskrivning          |
    |-------------+---------+-------+-------------------------------|
    |dash         |V:928,   |207    |litet och snabbt               |
    |             |I:998    |       |POSIX-kompatibelt skal för sh  |
    |-------------+---------+-------+-------------------------------|
    |coreutils    |V:910,   |17994  |GNU:s centrala verktyg         |
    |             |I:1000   |       |                               |
    |-------------+---------+-------+-------------------------------|
    |grep         |V:779,   |1297   |GNU grep, egrep och fgrep      |
    |             |I:1000   |       |                               |
    |-------------+---------+-------+-------------------------------|
    |sed          |V:762,   |987    |GNU sed                        |
    |             |I:1000   |       |                               |
    |-------------+---------+-------+-------------------------------|
    |mawk         |V:485,   |295    |liten och snabb awk            |
    |             |I:998    |       |                               |
    |-------------+---------+-------+-------------------------------|
    |debianutils  |V:936,   |225    |diverse verktyg som är         |
    |             |I:997    |       |specifika för Debian           |
    |-------------+---------+-------+-------------------------------|
    |bsdutils     |V:445,   |338    |grundläggande verktyg från     |
    |             |I:1000   |       |4.4BSD-Lite                    |
    |-------------+---------+-------+-------------------------------|
    |bsdextrautils|V:754,   |382    |extra verktyg från 4.4BSD-Lite |
    |             |I:863    |       |                               |
    |-------------+---------+-------+-------------------------------|
    |moreutils    |V:18,    |232    |ytterligare Unix-verktyg       |
    |             |I:39     |       |                               |
    +---------------------------------------------------------------+


    Tips

    Även om moreutils kanske inte existerar utanför Debian, erbjuder
    det intressanta små program. Det mest anmärkningsvärda är sponge
    (8) som är ganska användbart när du vill skriva över
    originalfilen.

    Se Avsnitt 1.6, ”Unix-liknande textbehandling” för exempel.

12.2. Skriptning i tolkade språk

    Tabell 12.8. Lista över tolkrelaterade paket

    +---------------------------------------------------------------+
    |          paket          |popcon |storlek|    dokumentation    |
    |-------------------------+-------+-------+---------------------|
    |                         |V:928, |       |sh: litet och snabbt |
    |dash                     |I:998  |207    |POSIX-kompatibelt    |
    |                         |       |       |skal för sh          |
    |-------------------------+-------+-------+---------------------|
    |                         |V:893, |       |sh: "info bash"      |
    |bash                     |I:1000 |7309   |tillhandahålls av    |
    |                         |       |       |bash-doc             |
    |-------------------------+-------+-------+---------------------|
    |mawk                     |V:485, |295    |AWK: liten och snabb |
    |                         |I:998  |       |awk                  |
    |-------------------------+-------+-------+---------------------|
    |                         |V:250, |       |AWK: "info gawk"     |
    |gawk                     |I:301  |3289   |tillhandahålls av    |
    |                         |       |       |gawk-doc             |
    |-------------------------+-------+-------+---------------------|
    |                         |       |       |Perl: perl(1) och    |
    |                         |V:673, |       |html-sidor           |
    |perl                     |I:992  |836    |tillhandahålls av    |
    |                         |       |       |perl-doc och         |
    |                         |       |       |perl-doc-html        |
    |-------------------------+-------+-------+---------------------|
    |                         |V:2,   |       |Perl-tillägg för GNU |
    |libterm-readline-gnu-perl|I:27   |439    |ReadLine/History     |
    |                         |       |       |Library: perlsh(1)   |
    |-------------------------+-------+-------+---------------------|
    |libreply-perl            |V:0.01,|171    |REPL för Perl: svar  |
    |                         |I:0.10 |       |(1)                  |
    |-------------------------+-------+-------+---------------------|
    |libdevel-repl-perl       |V:0.03,|237    |REPL för Perl: re.pl |
    |                         |I:0.57 |       |(1)                  |
    |-------------------------+-------+-------+---------------------|
    |                         |       |       |Python: python3(1)   |
    |python3                  |V:717, |80     |och html-sidor       |
    |                         |I:974  |       |tillhandahålls av    |
    |                         |       |       |python3-doc          |
    |-------------------------+-------+-------+---------------------|
    |                         |       |       |Tcl: tcl(3) och      |
    |                         |V:23,  |       |detaljerade          |
    |tcl                      |I:176  |20     |manualsidor som      |
    |                         |       |       |tillhandahålls av    |
    |                         |       |       |tcl-doc              |
    |-------------------------+-------+-------+---------------------|
    |                         |       |       |Tk: tk(3) och        |
    |                         |V:17,  |       |detaljerade          |
    |tk                       |I:169  |20     |manualsidor som      |
    |                         |       |       |tillhandahålls av    |
    |                         |       |       |tk-doc               |
    |-------------------------+-------+-------+---------------------|
    |                         |V:71,  |       |Ruby: ruby(1), erb   |
    |ruby                     |I:157  |32     |(1), irb(1), rdoc(1),|
    |                         |       |       |ri(1)                |
    +---------------------------------------------------------------+


    När du vill automatisera en uppgift på Debian bör du först
    skripta den med ett tolkat språk. Riktlinjerna för valet av
    tolkat språk är:

      * Använd dash om det handlar om en enkel uppgift som kombinerar
        CLI-program med ett skalprogram.

      * Använd python3, om uppgiften inte är enkel och du skriver den
        från grunden.

      * Använd perl, tcl, ruby, ... om det finns en befintlig kod som
        använder något av dessa språk på Debian som behöver
        förbättras för att utföra uppgiften.

    Om den resulterande koden är för långsam kan du skriva om endast
    den del som är kritisk för exekveringshastigheten i ett
    kompilerat språk och anropa den från det tolkade språket.

12.2.1. Felsökning av tolkade språkkoder

    De flesta tolkar erbjuder grundläggande funktioner för
    syntaxkontroll och kodspårning.

      * "dash -n script.sh" - Syntaxkontroll av ett Shell-skript

      * "dash -x script.sh" - Spåra ett Shell-skript

      * "python-m py_compile script .py" - Syntaxkontroll av ett
        Python-skript
   
      * "python -mtrace --trace script .py" - Spåra ett Python-skript

      * "perl -I ../libpath -c script.pl" - Syntaxkontroll av ett
        Perl-skript

      * "perl -d: Trace script.pl" - Spåra ett Perl-skript

    För att testa kod för dash, prova Avsnitt 9.1.4, ”Omslag för
    läslinje” som rymmer bash-liknande interaktiv miljö.

    För att testa kod för Perl, prova REPL-miljö för Perl som rymmer
    Python-liknande REPL (=READ + EVAL + PRINT + LOOP) -miljö för
    Perl.

12.2.2. GUI-program med shell-skript

    Shell-skriptet kan förbättras för att skapa ett attraktivt
    GUI-program. Tricket är att använda något av de s.k.
    dialogprogrammen istället för tråkig interaktion med echo och
    read-kommandon.

    Tabell 12.9. Lista över dialogprogram

    +---------------------------------------------------------------+
    |  paket  |popcon |storlek|             beskrivning             |
    |---------+-------+-------+-------------------------------------|
    |x11-utils|V:222, |651    |xmessage(1): visa ett meddelande     |
    |         |I:551  |       |eller en fråga i ett fönster (X)     |
    |---------+-------+-------+-------------------------------------|
    |whiptail |V:303, |61     |visar användarvänliga dialogrutor    |
    |         |I:997  |       |från shell-skript (newt)             |
    |---------+-------+-------+-------------------------------------|
    |dialog   |V:8,   |520    |visar användarvänliga dialogrutor    |
    |         |I:77   |       |från shell-skript (ncurses)          |
    |---------+-------+-------+-------------------------------------|
    |zenity   |V:74,  |193    |visa grafiska dialogrutor från       |
    |         |I:338  |       |skalskript (GTK)                     |
    |---------+-------+-------+-------------------------------------|
    |         |V:0.01,|       |Shell Scripts Frontend Tool (wrapper |
    |ssft     |I:0.16 |80     |för zenity, kdialog och dialog med   |
    |         |       |       |gettext)                             |
    |---------+-------+-------+-------------------------------------|
    |gettext  |V:51,  |20468  |"/usr/bin/gettext.sh": översätt      |
    |         |I:216  |       |meddelande                           |
    +---------------------------------------------------------------+


    Här är ett exempel på ett GUI-program som visar hur enkelt det är
    att bara använda ett skalskript.

    Detta skript använder zenity för att välja en fil (standard /etc/
    motd) och visa den.

    GUI-startprogrammet för detta skript kan skapas enligt
    Avsnitt 9.4.10, ”Starta ett program från GUI”.

    #!/bin/sh -e
    # Copyright (C) 2021 Osamu Aoki <osamu@debian.org>, Public Domain
    # vim:set sw=2 sts=2 et:
    DATA_FILE=$(zenity --file-selection --filename="/etc/motd" --title="Select a file to check") || \
      ( echo "E: File selection error" >&2 ; exit 1 )
    # Check size of archive
    if ( file -ib "$DATA_FILE" | grep -qe '^text/' ) ; then
      zenity --info --title="Check file: $DATA_FILE" --width 640  --height 400 \
        --text="$(head -n 20 "$DATA_FILE")"
    else
      zenity --info --title="Check file: $DATA_FILE" --width 640  --height 400 \
        --text="The data is MIME=$(file -ib "$DATA_FILE")"
    fi

    Den här typen av tillvägagångssätt för GUI-program med
    shell-skript är endast användbart för enkla val. Om du ska skriva
    något program med komplexitet bör du överväga att skriva det på
    en mer kapabel plattform.

12.2.3. Anpassade åtgärder för GUI-fil

    GUI-filprogram kan utökas för att utföra vissa populära åtgärder
    på utvalda filer med hjälp av ytterligare tilläggspaket. De kan
    också göras för att utföra mycket specifika anpassade åtgärder
    genom att lägga till dina specifika skript.

      * För GNOME, se NautilusScriptsHowto.

      * För KDE, se Skapa Dolphins servicemenyer.
   
      * För Xfce, se Thunar - Anpassade åtgärder och https://
        help.ubuntu.com/community/ThunarCustomActions.

      * För LXDE, se Anpassade åtgärder.

12.2.4. Perl kortskript galenskap

    För att bearbeta data måste sh skapa underprocesser som kör cut,
    grep, sed, etc. och är långsamma. Å andra sidan har perl interna
    funktioner för att bearbeta data och är snabb. Så många
    systemunderhållsskript på Debian använder perl.

    Låt oss tänka på följande one-liner AWK-skriptutdrag och dess
    motsvarigheter i Perl.

    awk '($2=="1957") { print $3 }' |

    Detta är likvärdigt med någon av följande rader.

    perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |

    perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |

    perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |

    perl -lane 'print $F[2] if $F[1] eq "1957"' |

    perl -lane 'print$F[2]if$F[1]eq+1957' |

    Den sista är en gåta. Den utnyttjade följande Perl-funktioner.

      * Det vita tecknet är valfritt.

      * Den automatiska konverteringen sker från tal till sträng.
   
      * Tricks för Perl-körning via kommandoradsalternativ: perlrun
        (1)

      * Specialvariabler för Perl: perlvar(1)

    Denna flexibilitet är styrkan i Perl. Samtidigt gör det att vi
    kan skapa kryptiska och trassliga koder. Så var försiktig.

12.3. Kodning i kompilerade språk

    Tabell 12.10. Lista över kompilatorrelaterade paket

    +---------------------------------------------------------------+
    |     paket      |popcon |storlek|         beskrivning          |
    |----------------+-------+-------+------------------------------|
    |gcc             |V:155, |36     |GNU C-kompilator              |
    |                |I:564  |       |                              |
    |----------------+-------+-------+------------------------------|
    |                |V:269, |       |GNU C-biblioteket:            |
    |libc6-dev       |I:584  |12861  |Utvecklingsbibliotek och      |
    |                |       |       |huvudfiler                    |
    |----------------+-------+-------+------------------------------|
    |g++             |V:57,  |13     |GNU C++-kompilator            |
    |                |I:531  |       |                              |
    |----------------+-------+-------+------------------------------|
    |libstdc++-16-dev|V:0.7, |24382  |GNU Standard C++ Library v3   |
    |                |I:4.3  |       |(utvecklingsfiler)            |
    |----------------+-------+-------+------------------------------|
    |cpp             |V:332, |18     |GNU C preprocessor            |
    |                |I:719  |       |                              |
    |----------------+-------+-------+------------------------------|
    |gettext         |V:51,  |20468  |GNU:s                         |
    |                |I:216  |       |internationaliseringsverktyg  |
    |----------------+-------+-------+------------------------------|
    |glade           |V:0.7, |1613   |GTK-byggare för               |
    |                |I:2.7  |       |användargränssnitt            |
    |----------------+-------+-------+------------------------------|
    |valac           |V:0.2, |533    |C#-liknande språk för         |
    |                |I:3.2  |       |GObject-systemet              |
    |----------------+-------+-------+------------------------------|
    |flex            |V:7,   |1247   |LEX-kompatibel snabb generator|
    |                |I:68   |       |för lexikal analys            |
    |----------------+-------+-------+------------------------------|
    |bison           |V:7,   |3122   |YACC-kompatibel               |
    |                |I:73   |       |parser-generator              |
    |----------------+-------+-------+------------------------------|
    |susv2           |I:0.03 |16     |hämta"The Single UNIX         |
    |                |       |       |Specifications v2"            |
    |----------------+-------+-------+------------------------------|
    |susv3           |I:0.06 |16     |hämta"The Single UNIX         |
    |                |       |       |Specifications v3"            |
    |----------------+-------+-------+------------------------------|
    |susv4           |I:0.04 |16     |hämta"The Single UNIX         |
    |                |       |       |Specifications v4"            |
    |----------------+-------+-------+------------------------------|
    |golang          |I:22   |12     |Go programmeringsspråk        |
    |                |       |       |kompilator                    |
    |----------------+-------+-------+------------------------------|
    |rustc           |V:5,   |13061  |Rust system                   |
    |                |I:20   |       |programmeringsspråk           |
    |----------------+-------+-------+------------------------------|
    |gfortran        |V:4,   |15     |GNU Fortran 95-kompilator     |
    |                |I:50   |       |                              |
    |----------------+-------+-------+------------------------------|
    |fpc             |I:2.3  |101    |Fri Pascal                    |
    +---------------------------------------------------------------+


    Här ingår Avsnitt 12.3.3, ”Flex - en bättre Lex” och
    Avsnitt 12.3.4, ”Bison - en bättre Yacc” för att visa hur ett
    kompilatorliknande program kan skrivas i C-språk genom att
    kompilera en beskrivning på högre nivå till C-språk.

12.3.1. C

    Du kan skapa en lämplig miljö för att kompilera program som är
    skrivna i programmeringsspråket C genom att göra följande.

    # apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential

    Paketet libc6-dev, dvs GNU C Library, tillhandahåller
    C-standardbiblioteket som är en samling av rubrikfiler och
    biblioteksrutiner som används av programmeringsspråket C.

    Se referenser för C som följande.

      * "info libc" (referens till C-bibliotekets funktioner)

      * gcc(1) och "info gcc"
   
      * varje_C_biblioteks_funktionsnamn(3)

      * Kernighan & Ritchie, "The C Programming Language", 2:a
        upplagan (Prentice Hall)

12.3.2. Enkelt C-program (gcc)

    Ett enkelt exempel ".c" kan kompileras med ett bibliotek "libm"
    till en körbar fil "run_example" på följande sätt.

    $ cat > example.c << EOF
    #include <stdio.h>
    #include <math.h>
    #include <string.h>

    int main(int argc, char **argv, char **envp){
            double x;
            char y[11];
            x=sqrt(argc+7.5);
            strncpy(y, argv[0], 10); /* prevent buffer overflow */
            y[10] = '\0'; /* fill to make sure string ends with '\0' */
            printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
            return 0;
    }
    EOF
    $ gcc -Wall -g -o run_example example.c -lm
    $ ./run_example
            1, 2.915, ./run_exam,     (null)
    $ ./run_example 1234567890qwerty
            2, 3.082, ./run_exam, 1234567890qwerty

    Här behövs "-lm" för att länka biblioteket "/usr/lib/libm.so"
    från libc6-paketet för sqrt(3). Det faktiska biblioteket finns i
    "/lib/" med filnamnet "libm.so.6", som är en symlänk till
    "libm-2.7.so".

    Titta på den sista parametern i utdatatexten. Det finns mer än 10
    tecken trots att "%10s" har angetts.

    Användningen av funktioner för pekarminnesoperationer utan
    gränskontroller, t.ex. sprintf(3) och strcpy(3), avråds för att
    förhindra buffer overflow-exploateringar som utnyttjar
    ovanstående överskridningseffekter. Använd istället snprintf(3)
    och strncpy(3).

12.3.3. Flex - en bättre Lex

    Flex är en Lex-kompatibel snabb generator för lexikal analys.

    Handledning för flex(1) kan hittas i "info flex".

    Många enkla exempel finns under "/usr/share/doc/flex/examples/".
    ^[7]

12.3.4. Bison - en bättre Yacc

    Flera paket tillhandahåller en Yacc-kompatibel lookahead
    LR-parser eller LALR-parsergenerator i Debian.

    Tabell 12.11. Lista över Yacc-kompatibla LALR-parser-generatorer

    +---------------------------------------------------------------+
    |paket |  popcon  |storlek|             beskrivning             |
    |------+----------+-------+-------------------------------------|
    |bison |V:7, I:73 |3122   |Generator för GNU LALR-parser        |
    |------+----------+-------+-------------------------------------|
    |byacc |V:0.1,    |263    |Generator för Berkeley LALR-parser   |
    |      |I:3.0     |       |                                     |
    |------+----------+-------+-------------------------------------|
    |btyacc|V:0.01,   |247    |parsergenerator för backtracking     |
    |      |I:0.06    |       |baserad på byacc                     |
    +---------------------------------------------------------------+


    Handledning för bison(1) finns i "info bison".

    Du måste tillhandahålla dina egna "main()" och "yyerror()". "main
    ()"anropar "yyparse()" som anropar "yylex()", vanligtvis skapat
    med Flex.

    Här följer ett exempel på hur du skapar ett enkelt
    kalkylatorprogram för terminalen.

    Låt oss skapa exempel.y:

    /* calculator source for bison */
    %{
    #include <stdio.h>
    extern int yylex(void);
    extern int yyerror(char *);
    %}

    /* declare tokens */
    %token NUMBER
    %token OP_ADD OP_SUB OP_MUL OP_RGT OP_LFT OP_EQU

    %%
    calc:
     | calc exp OP_EQU    { printf("Y: RESULT = %d\n", $2); }
     ;

    exp: factor
     | exp OP_ADD factor  { $$ = $1 + $3; }
     | exp OP_SUB factor  { $$ = $1 - $3; }
     ;

    factor: term
     | factor OP_MUL term { $$ = $1 * $3; }
     ;

    term: NUMBER
     | OP_LFT exp OP_RGT  { $$ = $2; }
      ;
    %%

    int main(int argc, char **argv)
    {
      yyparse();
    }

    int yyerror(char *s)
    {
      fprintf(stderr, "error: '%s'\n", s);
    }


    Låt oss skapa, exempel.l:

    /* calculator source for flex */
    %{
    #include "example.tab.h"
    %}

    %%
    [0-9]+ { printf("L: NUMBER = %s\n", yytext); yylval = atoi(yytext); return NUMBER; }
    "+"    { printf("L: OP_ADD\n"); return OP_ADD; }
    "-"    { printf("L: OP_SUB\n"); return OP_SUB; }
    "*"    { printf("L: OP_MUL\n"); return OP_MUL; }
    "("    { printf("L: OP_LFT\n"); return OP_LFT; }
    ")"    { printf("L: OP_RGT\n"); return OP_RGT; }
    "="    { printf("L: OP_EQU\n"); return OP_EQU; }
    "exit" { printf("L: exit\n");   return YYEOF; } /* YYEOF = 0 */
    .      { /* ignore all other */ }
    %%

    Kör sedan följande från shellprompten för att prova detta:

    $ bison -d example.y
    $ flex example.l
    $ gcc -lfl example.tab.c lex.yy.c -o example
    $ ./example
    1 + 2 * ( 3 + 1 ) =
    L: NUMBER = 1
    L: OP_ADD
    L: NUMBER = 2
    L: OP_MUL
    L: OP_LFT
    L: NUMBER = 3
    L: OP_ADD
    L: NUMBER = 1
    L: OP_RGT
    L: OP_EQU
    Y: RESULT = 9

    exit
    L: exit

12.4. Verktyg för statisk kodanalys

    Lint-liknande verktyg kan hjälpa till med automatisk statisk
    kodanalys.

    Indragningsliknande verktyg kan underlätta mänskliga
    kodgranskningar genom att omformatera källkoder på ett konsekvent
    sätt.

    Taggar som verktyg kan hjälpa mänskliga kodgranskare genom att
    generera en indexfil (eller taggfil) med namn som finns i
    källkoder.

    Tips

    Om du konfigurerar din favoritredigerare (emacs eller vim) så att
    den använder asynkrona insticksmoduler för lint-motorer blir det
    lättare att skriva kod. Dessa insticksmoduler blir mycket
    kraftfulla genom att dra nytta av Language Server Protocol.
    Eftersom de utvecklas snabbt kan det vara ett bra alternativ att
    använda deras uppströmskod istället för Debian-paketet.

    Tabell 12.12. Lista över verktyg för statisk kodanalys

    +---------------------------------------------------------------+
    |     paket     |popcon |storlek|          beskrivning          |
    |---------------+-------+-------+-------------------------------|
    |vim-ale        |I:0.80 |2833   |Asynkron Lint-motor för Vim 8  |
    |               |       |       |och NeoVim                     |
    |---------------+-------+-------+-------------------------------|
    |vim-syntastic  |I:2.0  |1379   |Syntaxkontroll-hacks för vim   |
    |---------------+-------+-------+-------------------------------|
    |elpa-flycheck  |V:0.1, |1130   |modern on-the-fly              |
    |               |I:1.7  |       |syntaxkontroll för Emacs       |
    |---------------+-------+-------+-------------------------------|
    |elpa-relint    |I:0.06 |150    |Emacs Lisp regexp              |
    |               |       |       |misstagssökare                 |
    |---------------+-------+-------+-------------------------------|
    |cppcheck-gui   |V:0.1, |7697   |verktyg för statisk analys av C|
    |               |I:1.0  |       |/C++-kod (GUI)                 |
    |---------------+-------+-------+-------------------------------|
    |shellcheck     |V:3,   |22860  |lint-verktyg för shell-skript  |
    |               |I:16   |       |                               |
    |---------------+-------+-------+-------------------------------|
    |pyflakes3      |V:1,   |20     |passiv kontroll av Python      |
    |               |I:12   |       |3-program                      |
    |---------------+-------+-------+-------------------------------|
    |pylint         |V:3,   |2093   |Statisk kontroll av Python-kod |
    |               |I:17   |       |                               |
    |---------------+-------+-------+-------------------------------|
    |perl           |V:673, |836    |tolk med intern statisk        |
    |               |I:992  |       |kodkontroll: B::Lint(3perl)    |
    |---------------+-------+-------+-------------------------------|
    |rubocop        |V:0.1, |4192   |Analysator för statisk kod i   |
    |               |I:1.1  |       |Ruby                           |
    |---------------+-------+-------+-------------------------------|
    |clang-tidy     |V:2,   |21     |clang-baserat C++              |
    |               |I:10   |       |linter-verktyg                 |
    |---------------+-------+-------+-------------------------------|
    |               |V:0.06,|       |verktyg för att statiskt       |
    |splint         |I:0.92 |2325   |kontrollera C-program för      |
    |               |       |       |buggar                         |
    |---------------+-------+-------+-------------------------------|
    |               |V:0.07,|       |verktyg för att undersöka C/   |
    |flawfinder     |I:0.49 |187    |C++-källkod och leta efter     |
    |               |       |       |säkerhetsbrister               |
    |---------------+-------+-------+-------------------------------|
    |black          |V:2,   |10057  |kompromisslös                  |
    |               |I:13   |       |Python-kodformaterare          |
    |---------------+-------+-------+-------------------------------|
    |perltidy       |V:0.4, |3086   |Indenterare och omformaterare  |
    |               |I:3.1  |       |av Perl-skript                 |
    |---------------+-------+-------+-------------------------------|
    |indent         |V:0.8, |438    |C-språk källkod                |
    |               |I:5.1  |       |formateringsprogram            |
    |---------------+-------+-------+-------------------------------|
    |astyle         |V:0.2, |770    |Källkodsindenter för C, C++,   |
    |               |I:2.7  |       |Objective-C, C# och Java       |
    |---------------+-------+-------+-------------------------------|
    |bcpp           |V:0.02,|114    |C(++) förskönare               |
    |               |I:0.26 |       |                               |
    |---------------+-------+-------+-------------------------------|
    |xmlindent      |V:0.05,|52     |Omformatering av XML-ström     |
    |               |I:0.79 |       |                               |
    |---------------+-------+-------+-------------------------------|
    |global         |V:0.2, |1923   |Verktyg för att söka och       |
    |               |I:1.6  |       |bläddra i källkod              |
    |---------------+-------+-------+-------------------------------|
    |exuberant-ctags|V:2,   |341    |skapa taggfilsindex för        |
    |               |I:13   |       |källkodsdefinitioner           |
    |---------------+-------+-------+-------------------------------|
    |universal-ctags|V:2,   |4238   |skapa taggfilsindex för        |
    |               |I:10   |       |källkodsdefinitioner           |
    +---------------------------------------------------------------+


12.5. Debugg

    Felsökning är en viktig del av programmeringsaktiviteter. Att
    veta hur man felsöker program gör dig till en bra
    Debian-användare som kan producera meningsfulla felrapporter.

    Tabell 12.13. Lista över felsökningspaket

    +---------------------------------------------------------------+
    |paket|   popcon   |storlek|           dokumentation            |
    |-----+------------+-------+------------------------------------|
    |gdb  |V:88, I:161 |12453  |"info gdb" tillhandahålls av gdb-doc|
    |-----+------------+-------+------------------------------------|
    |ddd  |V:0.7, I:5.2|4210   |"info ddd" tillhandahålls av ddd-doc|
    +---------------------------------------------------------------+


12.5.1. Grundläggande gdb-körning

    Den primära felsökaren på Debian är gdb(1) som gör att du kan
    inspektera ett program medan det körs.

    Låt oss installera gdb och relaterade program enligt följande.

    # apt-get install gdb gdb-doc build-essential devscripts

    Bra handledning av gdb kan hittas:

      * "info gdb"

      * "Felsökning med GDB" i /usr/share/doc/gdb-doc/html/gdb/
        index.html

      * "handledning på webben"

    Här följer ett enkelt exempel på hur du använder gdb(1) på ett
    "program" som kompilerats med alternativet "-g" för att ta fram
    felsökningsinformation.

    $ gdb program
    (gdb) b 1                # set break point at line 1
    (gdb) run args           # run program with args
    (gdb) next               # next line
    ...
    (gdb) step               # step forward
    ...
    (gdb) p parm             # print parm
    ...
    (gdb) p parm=12          # set value to 12
    ...
    (gdb) quit

    Tips
   
    Många gdb(1)-kommandon kan förkortas. Tabbexpansion fungerar som
    i skalet.

12.5.2. Felsökning av Debian-paketet

    Eftersom alla installerade binärfiler som standard bör vara
    strippade på Debian-systemet, tas de flesta felsökningssymbolerna
    bort i det normala paketet. För att kunna felsöka Debian-paket
    med gdb(1) måste *-dbgsym-paket installeras (t.ex.
    coreutils-dbgsym när det gäller coreutils). Källpaketen genererar
    *-dbgsym-paket automatiskt tillsammans med normala binära paket
    och dessa felsökningspaket placeras separat i
    debian-debug-arkivet. Se artiklar på Debian Wiki för mer
    information.

    Om ett paket som ska felsökas inte tillhandahåller sitt
    *-dbgsym-paket måste du installera det efter att ha byggt upp det
    på följande sätt.

    $ mkdir /path/new ; cd /path/new
    $ sudo apt-get update
    $ sudo apt-get dist-upgrade
    $ sudo apt-get install fakeroot devscripts build-essential
    $ apt-get source package_name
    $ cd package_name*
    $ sudo apt-get build-dep ./

    Åtgärda buggar om det behövs.

    Förbättra paketversionen till en som inte kolliderar med
    officiella Debian-versioner, t.ex. en som har tillägget "+debug1"
    vid omkompilering av befintlig paketversion, eller en som har
    tillägget "~pre1" vid kompilering av outgiven paketversion genom
    följande.

    $ dch -i

    Kompilera och installera paket med debug-symboler med följande.

    $ export DEB_BUILD_OPTIONS="nostrip noopt"
    $ debuild
    $ cd ..
    $ sudo debi package_name*.changes

    Du måste kontrollera paketets byggskript och se till att du
    använder "CFLAGS=-g -Wall" för att kompilera binärfiler.

12.5.3. Hämta bakspårning

    När du stöter på programkrasch är det en bra idé att rapportera
    felrapport med klippt och klistrat backtrace-information.

    Bakspårningen kan hämtas av gdb(1) med hjälp av något av följande
    tillvägagångssätt:

      * Crash-in-GDB-metoden:

          + Kör programmet från GDB.

          + Krascha programmet.

          + Skriv "bt" i GDB-prompten.

      * Först till kvarn när olyckan är framme:

          + Uppdatera filen "/etc/security/limits.conf" så att den
            innehåller följande:
   
            * soft core unlimited

          + Skriv "ulimit -c unlimited" i shellprompten.

          + Kör programmet från denna shell-prompt.

          + Krascha programmet för att producera en kärndumpfil.

          + Läs in minnesdumpfilen till GDB som "gdb gdb ./
            program_binary core" .

          + Skriv "bt" i GDB-prompten.

    Vid oändlig loop eller fruset tangentbord kan du tvinga
    programmet att krascha genom att trycka på Ctrl\ eller Ctrl-C
    eller köra "kill -ABRT PID". (Se Avsnitt 9.4.12, ”Döda en
    process”)

    Tips

    Ofta ser man en backtrace där en eller flera av de översta
    raderna är i "malloc()" eller "g_malloc()". När detta händer är
    chansen stor att din backtrace inte är särskilt användbar. Det
    enklaste sättet att hitta användbar information är att ställa in
    miljövariabeln "$MALLOC_CHECK_" till ett värde av 2 (malloc(3)).
    Du kan göra detta medan du kör gdb genom att göra följande.

     $ MALLOC_CHECK_=2 gdb hello

12.5.4. Avancerade gdb-kommandon

    Tabell 12.14. Lista över avancerade gdb-kommandon

    +---------------------------------------------------------------+
    |    kommando     |         beskrivning för ledningsmål         |
    |-----------------+---------------------------------------------|
    |(gdb) thread     |få en backtrace för alla trådar för          |
    |apply all bt     |flertrådade program                          |
    |-----------------+---------------------------------------------|
    |(gdb) bt full    |hämta parametrar som kom på stacken i        |
    |                 |funktionsanrop                               |
    |-----------------+---------------------------------------------|
    |(gdb) thread     |få en backtrace och parametrar som en        |
    |apply all bt full|kombination av de föregående alternativen    |
    |-----------------+---------------------------------------------|
    |(gdb) thread     |få en backtrace och parametrar för topp      |
    |apply all bt full|10-anrop för att skära bort irrelevanta      |
    |10               |utdata                                       |
    |-----------------+---------------------------------------------|
    |(gdb) set logging|skriva logg över gdb-utdata till en fil      |
    |on               |(standard är "gdb.txt")                      |
    +---------------------------------------------------------------+


12.5.5. Kontrollera beroendet av bibliotek

    Använd ldd(1) för att ta reda på hur beroende ett program är av
    bibliotek enligt följande.

    $ ldd /usr/bin/ls
            librt.so.1 => /lib/librt.so.1 (0x4001e000)
            libc.so.6 => /lib/libc.so.6 (0x40030000)
            libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    För att ls(1) ska fungera i en `chroot`-miljö måste ovanstående
    bibliotek finnas tillgängliga i din `chroot`-miljö.

    Se Avsnitt 9.4.6, ”Spårning av programaktiviteter”.

12.5.6. Dynamiska verktyg för samtalsspårning

    Det finns flera verktyg för dynamisk anropsspårning tillgängliga
    i Debian. Se Avsnitt 9.4, ”Övervakning, kontroll och start av
    programaktiviteter”.

12.5.7. Felsökning av X-fel

    Om ett GNOME-program preview1 har fått ett X-fel, bör du se ett
    meddelande enligt följande.

    The program 'preview1' received an X Window System error.

    Om så är fallet kan du prova att köra programmet med "--sync" och
    bryta på funktionen "gdk_x_error" för att få en backtrace.

12.5.8. Verktyg för detektering av minnesläckor

    Det finns flera verktyg för att upptäcka minnesläckor i Debian.

    Tabell 12.15. Lista över verktyg för detektering av minnesläckage

    +---------------------------------------------------------------+
    |    paket     |popcon |storlek|          beskrivning           |
    |--------------+-------+-------+--------------------------------|
    |              |V:269, |       |mtrace(1):                      |
    |libc6-dev     |I:584  |12861  |malloc-felsökningsfunktionalitet|
    |              |       |       |i glibc                         |
    |--------------+-------+-------+--------------------------------|
    |valgrind      |V:4,   |89318  |minnesfelsökare och profilerare |
    |              |I:31   |       |                                |
    |--------------+-------+-------+--------------------------------|
    |electric-fence|V:0.2, |69     |malloc(3) felsökare             |
    |              |I:2.3  |       |                                |
    |--------------+-------+-------+--------------------------------|
    |libdmalloc5   |V:0.01,|373    |bibliotek för minnesallokering  |
    |              |I:0.61 |       |för felsökning                  |
    |--------------+-------+-------+--------------------------------|
    |              |       |       |bibliotek för att upptäcka      |
    |duma          |V:0.00,|297    |buffertöverskridanden och       |
    |              |I:0.06 |       |-underskridanden i C- och       |
    |              |       |       |C++-program                     |
    |--------------+-------+-------+--------------------------------|
    |leaktracer    |V:0.01,|56     |minnesläcksökare för C++-program|
    |              |I:0.33 |       |                                |
    +---------------------------------------------------------------+


12.5.9. Demontera binär

    Du kan demontera binär kod med objdump(1) på följande sätt.

    $  objdump -m i386 -b binary -D /usr/lib/grub/x86_64-pc/stage1

    Notera
   
    gdb(1) kan användas för att plocka isär kod interaktivt.

12.6. Bygg verktyg

    Tabell 12.16. Lista över byggverktygspaket

    +---------------------------------------------------------------+
    |   paket   |popcon |storlek|           dokumentation           |
    |-----------+-------+-------+-----------------------------------|
    |make       |V:150, |1762   |"info make" tillhandahålls av      |
    |           |I:566  |       |make-doc                           |
    |-----------+-------+-------+-----------------------------------|
    |autoconf   |V:29,  |2244   |"info autoconf" tillhandahålls av  |
    |           |I:200  |       |autoconf-doc                       |
    |-----------+-------+-------+-----------------------------------|
    |automake   |V:28,  |1932   |"info automake" tillhandahålls av  |
    |           |I:199  |       |automake1.10-doc                   |
    |-----------+-------+-------+-----------------------------------|
    |libtool    |V:24,  |1245   |"info libtool" tillhandahålls av   |
    |           |I:183  |       |libtool-doc                        |
    |-----------+-------+-------+-----------------------------------|
    |cmake      |V:21,  |59735  |cmake(1) make-system med öppen     |
    |           |I:123  |       |källkod och plattformsoberoende    |
    |-----------+-------+-------+-----------------------------------|
    |ninja-build|V:9,   |456    |ninja(1) litet byggsystem närmast i|
    |           |I:55   |       |anda till Make                     |
    |-----------+-------+-------+-----------------------------------|
    |meson      |V:6,   |4278   |meson(1) högproduktivt byggsystem  |
    |           |I:29   |       |på toppen av ninja                 |
    |-----------+-------+-------+-----------------------------------|
    |xutils-dev |V:0.9, |1495   |imake(1), xmkmf(1), etc.           |
    |           |I:7.0  |       |                                   |
    +---------------------------------------------------------------+


12.6.1. Märke

    Make är ett verktyg för att underhålla grupper av program. Vid
    exekvering av make(1) läser make regelfilen "Makefile" och
    uppdaterar ett mål om det är beroende av förutsättningsfiler som
    har ändrats sedan målet senast ändrades, eller om målet inte
    existerar. Exekveringen av dessa uppdateringar kan ske samtidigt.

    Syntaxen för regelfilen är följande.

    target: [ prerequisites ... ]
     [TAB]  command1
     [TAB]  -command2 # ignore errors
     [TAB]  @command3 # suppress echoing

    Här är "[TAB]" en TAB-kod. Varje rad tolkas av skalet efter att
    variabeln har bytts ut. Använd "\" i slutet av en rad för att
    fortsätta skriptet. Använd "$$" för att ange "$" för miljövärden
    i ett skalskript.

    Implicita regler för mål och förutsättningar kan skrivas till
    exempel enligt följande.

    %.o: %.c header.h

    Här innehåller målet tecknet "%" (exakt ett av dem). "%" kan
    matcha alla icke-tomma delsträngar i de faktiska målfilnamnen.
    Förutsättningarna använder också "%" för att visa hur deras namn
    förhåller sig till det faktiska målnamnet.

    Tabell 12.17. Lista över make automatic-variabler

    +--------------------------------------------------+
    |automatisk variabel|            värde             |
    |-------------------+------------------------------|
    |$@                 |lokation                      |
    |-------------------+------------------------------|
    |$<                 |första förutsättningen        |
    |-------------------+------------------------------|
    |$?                 |alla nyare förutsättningar    |
    |-------------------+------------------------------|
    |$^                 |alla förkunskapskrav          |
    |-------------------+------------------------------|
    |$*                 |"%" matchad stam i målmönstret|
    +--------------------------------------------------+


    Tabell 12.18. Lista över utvidgningar av märkesvariabler

    +-------------------------------------+
    |variabel expansion|   beskrivning    |
    |------------------+------------------|
    |foo1 := bar       |engångsexpansion  |
    |------------------+------------------|
    |foo2 = bar        |rekursiv expansion|
    |------------------+------------------|
    |foo3 += bar       |bifoga            |
    +-------------------------------------+


    Kör "make -p -f/dev/null" för att se automatiska interna regler.

12.6.2. Autotools

    Autotools är en uppsättning programmeringsverktyg som är
    utformade för att hjälpa till att göra källkodspaket portabla
    till många Unix-liknande system.

      * Autoconf är ett verktyg för att producera ett skalskript
        "configure" från "configure.ac".

          + "configure" används senare för att producera "Makefile"
            från "Makefile.in"-mallen.
   
      * Automake är ett verktyg för att producera "Makefile.in" från
        "Makefile.am".

      * Libtool är ett skalskript för att lösa problemet med
        programvaruportabilitet när delade bibliotek kompileras från
        källkod.

12.6.2.1. Kompilera och installera ett program

    Varning
   
    Skriv inte över systemfiler med dina kompilerade program när du
    installerar dem.

    Debian rör inte filer i "/usr/local/" eller "/opt". Så om du
    kompilerar ett program från källkod, installera det i "/usr/local
    /" så att det inte stör Debian.

    $ cd src
    $ ./configure --prefix=/usr/local
    $ make # this compiles program
    $ sudo make install # this installs the files in the system

12.6.2.2. Avinstallera program

    Om du har originalkällan och om den använder autoconf(1)/automake
    (1) och om du kan komma ihåg hur du konfigurerade den, gör du så
    här för att avinstallera programmet.

    $ ./configure all-of-the-options-you-gave-it
    $ sudo make uninstall

    Alternativt, om du är helt säker på att installationsprocessen
    bara lägger filer under "/usr/local/" och att det inte finns
    något viktigt där, kan du radera allt innehåll på följande sätt.

    # find /usr/local -type f -print0 | xargs -0 rm -f

    Om du inte är säker på var filer är installerade bör du överväga
    att använda checkinstall(8) från checkinstall-paketet, vilket ger
    en ren sökväg för avinstallationen. Det finns nu stöd för att
    skapa ett Debian-paket med alternativet "-D".

12.6.3. Meson

    Systemet för programvaruutveckling har utvecklats:

      * Autotools på toppen av Make har varit de facto-standarden för
        den portabla bygginfrastrukturen sedan 1990-talet. Detta är
        extremt långsamt.

      * CMake, som ursprungligen släpptes 2000, förbättrade
        hastigheten avsevärt men byggdes ursprungligen på toppen av
        den i sig långsamma Make. (Nu kan Ninja vara dess backend.)
   
      * Ninja, som ursprungligen släpptes 2012, är tänkt att ersätta
        Make för den ytterligare förbättrade bygghastigheten och är
        utformad för att få sina indatafiler genererade av ett
        byggsystem på högre nivå.

      * Meson, som ursprungligen släpptes 2013, är det nya populära
        och snabba byggsystemet på högre nivå som använder Ninja som
        backend.

    Se dokument som finns på"The Meson Build system" och "The Ninja
    build system".

12.7. Webb

    Enkla interaktiva dynamiska webbsidor kan skapas på följande
    sätt.

      * Frågorna presenteras för webbläsaren med hjälp av
        HTML-formulär.

      * Genom att fylla i och klicka på formulärposterna skickas en
        av följande URL-strängar med kodade parametrar från
        webbläsaren till webbservern.

          + "https://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2=
            VAL2&VAR3=VAL3"

          + "https://www.foo.dom/cgi-bin/program.py?VAR1=VAL1&VAR2=
            VAL2&VAR3=VAL3"
   
          + "https://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3
            =VAL3"

      * "%nn" i URL ersätts med ett tecken med hexadecimalt nn-värde.

      * Miljövariabeln är inställd som: "QUERY_STRING="VAR1=VAL1 VAR2
        =VAL2 VAR3=VAL3"".

      * CGI-program (vilket som helst av "program.*") på webbservern
        kör sig själv med miljövariabeln "$QUERY_STRING".

      * stdout från CGI-programmet skickas till webbläsaren och
        presenteras som en interaktiv dynamisk webbsida.

    Av säkerhetsskäl är det bättre att inte själv skapa nya hack för
    att tolka CGI-parametrar. Det finns etablerade moduler för dem i
    Perl och Python. PHP kommer med dessa funktioner. När lagring av
    klientdata behövs används HTTP-cookies. När databehandling på
    klientsidan behövs används ofta Javascript.

    För mer information, se Common Gateway Interface, Apache Software
    Foundation och JavaScript.

    Att söka på "CGI tutorial" på Google genom att skriva in den
    kodade URL:en https://www.google.com/search?hl=en&ie=UTF-8&q=
    CGI+tutorial direkt i webbläsarens adress är ett bra sätt att se
    CGI-skriptet i aktion på Googles server.

12.8. Översättning av källkoden

    Det finns program för att konvertera källkoder.

    Tabell 12.19. Lista över verktyg för översättning av källkod

    +---------------------------------------------------------------+
    |  paket  |popcon |storlek| sökord  |        beskrivning        |
    |---------+-------+-------+---------+---------------------------|
    |perl     |V:673, |836    |AWK→PERL |konvertera källkoder från  |
    |         |I:992  |       |         |AWK till PERL: a2p(1)      |
    |---------+-------+-------+---------+---------------------------|
    |         |V:0.1, |       |         |konvertera källkoder från  |
    |f2c      |I:2.0  |443    |FORTRAN→C|FORTRAN 77 till C/C++: f2c |
    |         |       |       |         |(1)                        |
    |---------+-------+-------+---------+---------------------------|
    |         |V:0.02,|       |         |konverterare från NASM     |
    |intel2gas|I:0.19 |178    |intel→gas|(Intel-format) till GNU    |
    |         |       |       |         |Assembler (GAS)            |
    +---------------------------------------------------------------+


12.9. Skapa Debian-paket

    Om du vill skapa ett Debian-paket ska du läsa följande.

      * Kapitel 2, Debians pakethantering för att förstå det
        grundläggande paketsystemet

      * Avsnitt 2.7.13, ”Portering av ett paket till det stabila
        systemet” att förstå den grundläggande portningsprocessen

      * Avsnitt 9.11.4, ”Chroot-system” för att förstå grundläggande
        chroot-tekniker

      * debuild(1) och sbuild(1)

      * Avsnitt 12.5.2, ”Felsökning av Debian-paketet” för
        omkompilering för felsökning

      * Guide för Debians underhållsansvariga (paketet debmake-doc )

      * Debian Developer's Reference (paketet med referenser för
        utvecklare )

      * Debians policyhandbok (paketet debian-policy )

    Det finns paket som debmake, dh-make, dh-make-perl etc. som
    hjälper till med paketering.


---------------------------------------------------------------------

    ^[7] Vissa justeringar kan krävas för att få dem att fungera
    under det nuvarande systemet.

Appendix A. Appendix

    Här finns bakgrundsbilder av detta dokument.

A.1. Debians labyrint

    Linux-systemet är en mycket kraftfull dataplattform för en
    nätverksansluten dator. Det är dock inte lätt att lära sig att
    använda alla dess funktioner. Att konfigurera LPR-skrivarens kö
    med en icke-PostScript-skrivare var ett bra exempel på
    snubbelpunkter. (Det finns inga problem längre eftersom nyare
    installationer använder det nya CUPS-systemet)

    Det finns en komplett, detaljerad karta som kallas "SOURCE CODE".
    Den är mycket exakt men mycket svår att förstå. Det finns också
    referenser som kallas HOWTO och mini-HOWTO. De är lättare att
    förstå men tenderar att ge för mycket detaljer och förlora den
    stora bilden. Jag har ibland problem med att hitta rätt avsnitt i
    en lång HOWTO när jag behöver några kommandon att anropa.

    Jag hoppas att denna "Debian Reference (version 2.147)"
    (2026-08-18 03:37:20 UTC) ger en bra startriktning för människor
    i Debians labyrint.

A.2. Upphovsrättshistoria

    Debian Reference initierades av mig, Osamu Aoki <osamu at debian
    dot org>, som ett personligt memo för systemadministration.
    Mycket av innehållet kommer från den kunskap jag fått från
    sändlistan debian-user och andra Debian-resurser.

    Efter ett förslag från Josip Rodin, som var mycket aktiv inom
    Debians dokumentationsprojekt (DDP), skapades "Debian Reference
    (version 1, 2001-2007)" som en del av DDP-dokumenten.

    Efter 6 år insåg jag att den ursprungliga "Debian Reference
    (version 1)" var föråldrad och började skriva om mycket av
    innehållet. Den nya "Debian Reference (version 2)" släpptes 2008.

    Jag har uppdaterat "Debian Reference (version 2)" för att ta upp
    nya ämnen (Systemd, Wayland, IMAP, PipeWire, Linuxkärnan 5.10)
    och tagit bort föråldrade ämnen (SysV init, CVS, Subversion, SSH
    protokoll 1, Linuxkärnor före 2.5). Referenser till Jessie 8
    (2015-2020) release situation eller äldre är till största delen
    borttagna.

    Denna "Debian Reference (version 2.147)" (2026-08-18 03:37:20
    UTC) täcker mestadels Trixie (=stable) och Forky (=testing)
    Debian-utgåvor.

    Innehållet i handledningen kan spåra sitt ursprung och sin
    inspiration i följande.

      * "Linux User's Guide" av Larry Greenfield (december 1996)

          + ersatt av "Debian Tutorial"

      * "Debian Tutorial" av Havoc Pennington. (11 december 1998)

          + delvis skriven av Oliver Elphick, Ole Tetlie, James
            Treacy, Craig Sawyer och Ivan E. Moore II

          + föråldrad av "Debian GNU/Linux: Guide till installation
            och användning"

      * "Debian GNU/Linux: Guide to Installation and Usage" av John
        Goerzen och Ossama Othman (1999)

          + ersatt av "Debian Reference (version 1)"

    Paket- och arkivbeskrivningen kan spåra en del av sitt ursprung
    och sin inspiration i följande.

      * "Debian FAQ" (version från mars 2002, då den sköttes av Josip
        Rodin)

    Det övriga innehållet kan spåra en del av sitt ursprung och sin
    inspiration i följande.

      * "Debian Reference (version 1)" av Osamu Aoki (2001-2007)
   
          + ersattes av den nyare "Debian Reference (version 2)" år
            2008.

    Den tidigare "Debian Reference (version 1)" skapades med många
    bidragsgivare.

      * det viktigaste innehållsbidraget om
        nätverkskonfigurationsämnen av Thomas Hood

      * betydande innehållsbidrag om X- och VCS-relaterade ämnen av
        Brian Nelson

      * hjälp med byggskript och många innehållskorrigeringar av Jens
        Seidel

      * omfattande korrekturläsning av David Sewell

      * många bidrag från översättare, bidragsgivare och
        felrapportörer

    Många manualsidor och informationssidor om Debian-systemet samt
    uppströms webbsidor och Wikipedia-dokument har använts som
    primära referenser för att skriva detta dokument. I den
    utsträckning som Osamu Aoki ansåg att det låg inom ramen för
    rättvis användning, användes många delar av dem, särskilt
    kommandodefinitioner, som fraser efter noggranna redaktionella
    ansträngningar för att passa in dem i stilen och syftet med detta
    dokument.

    Beskrivningen av felsökaren gdb har utökats med hjälp av
    innehållet i Debians wiki om backtrace med samtycke från Ari
    Pollak, Loïc Minier och Dafydd Harries.

    Innehållet i den aktuella "Debian Reference (version 2.147)"
    (2026-08-18 03:37:20 UTC) är mestadels mitt eget arbete förutom
    vad som nämns ovan. Dessa har också uppdaterats av
    bidragsgivarna.

    Författaren, Osamu Aoki, tackar alla som har hjälpt till att göra
    detta dokument möjligt.

A.3. Dokumentets format

    Källan till det engelska originaldokumentet är för närvarande
    skriven i DocBook XML-filer. Denna Docbook XML-källa konverteras
    till HTML, vanlig text, PostScript och PDF. (Vissa format kan
    hoppas över för distribution.)

