Debian Reference Osamu Aoki Copyright © 2013-2024 Osamu Aoki Denna Debian Reference (version 2.132) (2026-01-11 04:45:44 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. Misslyckad installation på grund av att beroenden saknas 2.6.2. Cachelagring av fel i paketdata 2.6.3. Inkompatibilitet med gammal användarkonfiguration 2.6.4. Olika paket med överlappande filer 2.6.5. Åtgärdar trasigt paketskript 2.6.6. Räddning med kommandot dpkg 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. Systemd 3.2.1. Systemd startas 3.2.2. Systemd-inloggning 3.3. Kärnans meddelande 3.4. Systemets meddelande 3.5. Systemhantering 3.6. Andra systemövervakare 3.7. Systemkonfiguration 3.7.1. Värdnamnet 3.7.2. Filsystemet 3.7.3. Initialisering av nätverksgränssnitt 3.7.4. Initialisering av molnsystem 3.7.5. Anpassningsexempel för att justera sshd-tjänsten 3.8. Udev-systemet 3.9. 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. Ett exempel för japanska 8.3. Displayens utgång 8.4. Ö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. Terminalens konfiguration 9.5.7. Den sunda infrastrukturen 9.5.8. Inaktivera skärmsläckaren 9.5.9. Avaktivera ljudsignaler 9.5.10. Använt minne 9.5.11. 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. Lista över IBus och dess motorpaket 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.132) (2026-01-11 04:45:44 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     testversionen 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-01-02 13:42:08 UTC och innehåller den totala inlämningen av 269003 rapporter över 215470 binära paket och 27 arkitekturer. Notera     Observera att det amd64-arkivet för unstable för närvarande endast innehåller paketen 74980. 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 * Ha alltid ett alternativt startmedium (USB-minne, CD, ...) 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     * "Unix ÄR användarvänligt ... Det är bara selektivt när det gäller vilka dess vänner är." --- Tollef Fog Heen     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:42, |1590 |En filhanterare i textläge med | | |I:189 | |fullskärm | |---------+------+-------+--------------------------------------| |sudo |V:738,|6768 |Ett program för att ge användare | | |I:863 | |begränsade root-rättigheter | |---------+------+-------+--------------------------------------| | |V:85, | |Unix textredigerare Vi IMproved, en | |vim |I:353 |4077 |textredigerare för programmerare | | | | |(standardversion) |     |---------+------+-------+--------------------------------------| | |V:55, | |Unix textredigerare Vi IMproved, en | |vim-tiny |I:977 |1873 |textredigerare för programmerare | | | | |(kompakt version) | |---------+------+-------+--------------------------------------| |emacs-nox|V:3, |46536 |GNU-projektet Emacs, den Lisp-baserade| | |I:13 | |extensibla textredigeraren | |---------+------+-------+--------------------------------------| |w3m |V:11, |2853 |Webbläsare i textläge | | |I:151 | | | |---------+------+-------+--------------------------------------| |gpm |V:9, |545 |Klipp-och-klistra i Unix-stil på | | |I:10 | |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:879 |187 |Debian-projektet, (Debian | | | | |FAQ) och andra dokument | |--------------------+------+-------+---------------------------| |debian-policy |I:8 |5061 |Debians policyhandbok och | | | | |relaterade dokument |     |--------------------+------+-------+---------------------------| |developers-reference|V:0, |2602 |Riktlinjer och information | | |I:3 | |för Debian-utvecklare | |--------------------+------+-------+---------------------------| |debmake-doc |I:0 |12503 |Guide för Debians | | | | |underhållsansvariga | |--------------------+------+-------+---------------------------| |debian-history |I:0 |6251 |Debian-projektets historia | |--------------------+------+-------+---------------------------| |debian-faq |I:878 |798 |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) + Kör "kill -TERM -1" och gör några korrigeringsåtgärder, t.ex. "systemctl restart NetworkManager.service". + Logga ut via GUI-meny och logga in.     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.) Maskinvaruenheter är bara en annan typ av filer i Debians system.     Om du har problem med att komma åt enheter som CD-ROM och USB-minnen från ett användarkonto, bör du göra den användaren till medlem i den relevanta gruppen. 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 | |-----------+---------------------------------------------------| |uppringning|full och direkt tillgång till serieportar ( "/dev/ | | |ttyS[0-3]") | |-----------+---------------------------------------------------| |dopp |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     "netstat -an" ger en mycket användbar översikt över uttag som är öppna på ett visst 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.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 9.5.6, ”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:875,|7273 |Ja |Bash: GNU Bourne Again | | |I:999 | | |SHell (de facto-standard) | |---------------+------+-------+-----+--------------------------| | |V:33, | | |programmerbar | |bash-completion|I:951 |1952 |N/A |komplettering för | | | | | |bash-skalet | |---------------+------+-------+-----+--------------------------| |dash |V:910,|207 |Ja |Debian Almquist Shell, bra| | |I:998 | | |för shell-skript | |---------------+------+-------+-----+--------------------------| |zsh |V:41, |2509 |Ja |Z-skal: standardskalet med| | |I:71 | | |många förbättringar | |---------------+------+-------+-----+--------------------------| | |V:3, | | |TENEX C Shell: en | |tcsh |I:15 |1366 |Nej |förbättrad version av |     | | | | |Berkeley csh | |---------------+------+-------+-----+--------------------------| |mksh |V:2, |7713 |Ja |En version av Korn-skalet | | |I:8 | | | | |---------------+------+-------+-----+--------------------------| |csh |V:1, |348 |Nej |OpenBSD C Shell, en | | |I:5 | | |version av Berkeley csh | |---------------+------+-------+-----+--------------------------| | | | | |Fristående skal med | |sash |V:0, |1335 |Ja |inbyggda kommandon (inte | | |I:5 | | |avsett för standard "/usr/| | | | | |bin/sh") | |---------------+------+-------+-----+--------------------------| |ksh |I:8 |65 |Ja |den riktiga AT&T-versionen| | | | | |av Korn-skalet | |---------------+------+-------+-----+--------------------------| |rc |V:0, |182 |Nej |implementering av AT&T | | |I:0 | | |Plan 9 rc-skal | |---------------+------+-------+-----+--------------------------| |posh |V:0, |187 |Ja |Policyanpassad ordinär | | |I:0 | | |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) | | |-------------------------+-------------------------------------| |Pil upp |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 |:hjälp|endast |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 filnamn.ext |skriv aktuell buffert till | | | |filnamn.ext | |---------------+------------------+----------------------------| |NORMAL |:q |avsluta vim | |---------------+------------------+----------------------------| |NORMAL |:q! |tvinga att avsluta vim | |---------------+------------------+----------------------------| |NORMAL |:bara |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) | |------------+--------------------------------------------------| |fil foo |visa en filtyp för filen "foo" | |------------+--------------------------------------------------| |typ -p |visa en filplats för kommandot "kommandonamn" | |kommandonamn| | |------------+--------------------------------------------------| |vilket |, , | |kommandonamn| | |------------+--------------------------------------------------| |typ |visa information om kommandot "kommandonamn" | |kommandonamn| | |------------+--------------------------------------------------| |apropos |hitta kommandon relaterade till "nyckelord" | |nyckelord | | |------------+--------------------------------------------------| |man -k |, , | |nyckelord | | |------------+--------------------------------------------------| |vad är |visa en förklaring på en rad för kommandot " | |kommandonamn|kommandonamn" | |------------+--------------------------------------------------| |man -a |visa förklaring till kommandot "kommandonamn" | |kommandonamn|(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 | |------------+--------------------------------------------------| | |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". * Displayhanteraren, t.ex. gdm3, kan återställa     miljövariablerna för GUI-sessionen med "~/.profile". * 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 "." | |----------------+----------------------------------------------| |.* |filnamn (segment) inleds med "." | |----------------+----------------------------------------------|     |? |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 | | |-----------+---------------------------------------------------| |kommando& |bakgrundskörning av kommando i underskalet | |-----------+---------------------------------------------------| |kommando1 ||Använd pipe för standard ut från kommando1 till | |kommando2 |standard in från kommando2 (samtidig körning) | |-----------+---------------------------------------------------| |kommando1 |skicka både standardutdata och standardfel från | |2>&1 | |kommando1 till standardinmatningen för kommando2 | |kommando2 |(samtidig körning) | |-----------+---------------------------------------------------| |kommando1 ;|utföra kommando1 och kommando2 sekventiellt | |kommando2 | | |-----------+---------------------------------------------------| |kommando1 &|kör kommando1; om det lyckas, kör kommando2 | |& kommando2|sekventiellt (returnerar success om både kommando1 | | |och kommando2 lyckas) | |-----------+---------------------------------------------------| |kommando1 ||kör kommando1; om det inte lyckas, kör kommando2 | || kommando2|sekventiellt (returnerar success om kommando1 eller| | |kommando2 lyckas) | |-----------+---------------------------------------------------|     |kommando > |omdirigera kommandots standardutdata till en fil | |foo |foo (överskriva) | |-----------+---------------------------------------------------| |kommando 2>|omdirigera kommandots standardfel till en fil foo | |foo |(överskriva) | |-----------+---------------------------------------------------| |kommando >>|omdirigera standardutdata från kommandot till en | |foo |fil foo (append) | |-----------+---------------------------------------------------| |kommando |omdirigera kommandots standardfel till en fil foo | |2>> foo |(append) | |-----------+---------------------------------------------------| |kommando > |omdirigera både standardutdata och standardfel för | |foo 2>&1 |kommandot till en fil foo | |-----------+---------------------------------------------------| |kommando < |omdirigera kommandots standardinmatning till en fil| |foo |foo | |-----------+---------------------------------------------------| |kommando <<|omdirigera kommandots standardinmatning till | |avgränsare |följande rader tills "delimiter" uppfylls (här | | |dokument) | |-----------+---------------------------------------------------| |kommando |omdirigera kommandots standardinmatning till | |<<- |följande rader tills "delimiter" uppfylls (här | |avgränsare |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     $ foo $ exec 3bar # 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). + pcregrep(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 < 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 | |-----------------+---------------------------------------------| || Kommando xargs |kör kommandot upprepade gånger med varje | |-n 1 |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_mönster |regex_mönster | |-----------------+---------------------------------------------| || grep -v -e |extrahera rader från rör som inte innehåller | |regex_mönster |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 74980 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:894,| |lågnivåsystem för | |dpkg |I:999 |6350 |pakethantering för Debian | | | | |(filbaserat) | |-------------------+------+-------+----------------------------| | |V:882,| |APT-frontend för att hantera| |apt |I:999 |4632 |paket med CLI: apt/apt-get/ | | | | |apt-cache | |-------------------+------+-------+----------------------------| | |V:36, | |APT-frontend för interaktiv | |aptitude |I:189 |4624 |hantering av paket med | | | | |helskärmskonsol: aptitude(8)| |-------------------+------+-------+----------------------------| | |V:35, | |APT-frontend för att | |tasksel |I:983 |349 |installera valda uppgifter: | | | | |tasksel(8) | |-------------------+------+-------+----------------------------| | | | |förbättringspaket för APT | |unattended-upgrades|V:126,|317 |för att möjliggöra | | |I:188 | |automatisk installation av | | | | |säkerhetsuppgraderingar |     |-------------------+------+-------+----------------------------| |gnome-software |V:163,|4208 |Programvarucenter för GNOME | | |I:270 | |(GUI APT front-end) | |-------------------+------+-------+----------------------------| |synaptic |V:36, |7788 |grafisk pakethanterare (GTK | | |I:310 | |APT front-end) | |-------------------+------+-------+----------------------------| | | | |APT-verktygsprogram: | |apt-utils |V:388,|1148 |apt-extracttemplates(1), | | |I:998 | |apt-ftparchive(1) och | | | | |apt-sortpkgs(1) | |-------------------+------+-------+----------------------------| |apt-listchanges |V:368,|553 |verktyg för avisering av | | |I:886 | |paketändringshistorik | |-------------------+------+-------+----------------------------| |apt-listbugs |V:5, |514 |listar kritiska buggar före | | |I:7 | |varje APT-installation | |-------------------+------+-------+----------------------------| | |V:15, | |APT-verktyget för | |apt-file |I:60 |89 |paketsökning - | | | | |kommandoradsgränssnitt | |-------------------+------+-------+----------------------------| |apt-rdepends |V:0, |39 |rekursiv lista över | | |I:4 | |paketberoenden | +---------------------------------------------------------------+ 2.1.2. Konfiguration av paket     Här följer några viktiga punkter för paketkonfiguration på Debian-systemet. * 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. * Gör systemet dubbelstartbart genom att installera den stable delen av Debian-systemet på en annan partition * Ha installations-CD:n till hands för räddningsstarten     * Ö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).     För systemet trixie med den typiska HTTP-åtkomsten ser källistan i enradig stil ut som följer: deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free deb-src 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-src http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free     Alternativt är motsvarande källista i deb822-style följande. 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     De viktigaste punkterna i källistan är följande. * Format med en rad + Dess definitionsfiler finns i filerna "/etc/apt/ sources.list" och "/etc/apt/sources.list.d/*.list". + Varje rad definierar datakällan för APT-systemet. + Raden "deb" definierar de binära paketen. + Raden "deb-src" definierar källkodspaketen. + Det första argumentet är rot-URL:en för Debian-arkivet. + Det andra argumentet är distributionsnamnet med antingen svitnamnet eller kodnamnet. + Det tredje och följande argumenten är en lista över giltiga namn på arkivområden i Debian-arkivet.     * Deb822-liknande format + 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/ |experimentell |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 |73518|DFSG-kompatibel och inget beroende av | | | |non-free | |-----------------+-----+---------------------------------------|     | | |inte DFSG-kompatibel, firmware krävs | |icke-fri-firmware|50 |för rimlig upplevelse av | | | |systeminstallationen | |-----------------+-----+---------------------------------------| |contrib |376 |Uppfyller DFSG men har beroende till | | | |non-free | |-----------------+-----+---------------------------------------| |icke-fri |1036 |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/paketnamn" | |-----------------------------+---------------------------------| |Buggrapporten med känt |sensible-browser "https:// | |buggnummer |bugs.debian.org/buggnummer" | +---------------------------------------------------------------+     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ö" * Paket som väljs av beroendepaketet (t.ex. gcc-10 av 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-sökning regex |aptit sökning |apt-cache |sök paket som | | |regex |sök 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 |aptit varför |N/A |till att paket för | | |inte 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 | |----------------+----------------------------------------------| |Paketvy |se Tabell 2.10, ”Kategoriseringen av | | |standardpaketets vyer” (standard) | |----------------+----------------------------------------------| |Rekommendationer|lista paket som rekommenderas av vissa | |från revisionen |installerade paket men som ännu inte har |     | |installerats | |----------------+----------------------------------------------| |Platt Paketlista|lista paket utan kategorisering (för | | |användning med regex) | |----------------+----------------------------------------------| |Debtags |lista paket kategoriserade enligt deras | |webbläsare |debtags-poster | |----------------+----------------------------------------------| |Källa Paket Visa|lista paket grupperade efter källpaket | +---------------------------------------------------------------+ 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 | |------------------------+--------------------------------------| |Uppgraderingsbara paket |lista paket organiserade som sektion →| | |område → paket | |------------------------+--------------------------------------| |Nya paket |, , | |------------------------+--------------------------------------| |Installerade paket |, , |     |------------------------+--------------------------------------| |Inte installerade paket |, , | |------------------------+--------------------------------------| |Föråldrade och lokalt |, , | |skapade förpackningar | | |------------------------+--------------------------------------| |Virtuella paket |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_namn | |förpackningsnamn | | |--------------------+--------------------------------------------------| |matcha på |~dregex_beskrivning | |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:]mönster | |paketet deklarerar | | |beroendetyp | | |--------------------+--------------------------------------------------| |matcha paket till | | |vilka det | | |mönstermatchande |~RB[type:]mönster | |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|~Rrekommenderar:~i | |är beroende av eller| | |rekommenderar | | |--------------------+--------------------------------------------------| |matcha mönsterpaket | | |med filtrerad |~S filtermönster | |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.     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 ett| |COLUMNS=120 dpkg -l paketnamn_mönster |installerat paket | | |för felrapporten | |------------------------------------------+--------------------| | |lista innehållet i | |dpkg -L paketnamn |ett installerat | | |paket | |------------------------------------------+--------------------| |dpkg -L paketnamn | egrep '/usr/share/man/|lista manpages för | |man.*/.+' |ett installerat | | |paket | |------------------------------------------+--------------------| | |lista installerade | |dpkg -S fil_namn_mönster |paket som har | | |matchande filnamn | |------------------------------------------+--------------------| | |lista paket i | |apt-file search filnamnsmönster |arkivet som har | | |matchande filnamn | |------------------------------------------+--------------------| | |lista innehållet i | |apt-file list paketnamnsmönster |matchande paket i | | |arkivet | |------------------------------------------+--------------------| |dpkg-reconfigure paketnamn |konfigurera om det | | |exakta paketet | |------------------------------------------+--------------------| | |konfigurera om det | |dpkg-reconfigure -plow paketnamn |exakta paketet med | | |den mest detaljerade| | |frågan | |------------------------------------------+--------------------| |configure-debian |omkonfigurera 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 binärt_paketnamn |prioritets- och | | |arkivinformation för| | |ett binärt paket | |------------------------------------------+--------------------| | |visa tillgänglig | |apt-cache madison paketnamn |version, | | |arkivinformation för| | |ett paket | |------------------------------------------+--------------------| | |visa information om | |apt-cache showsrc binär_paketnamn |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 källa | |apt-get källa paketnamn |(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 paketnamn_version- |källkodspaket | |debian.revision.dsc |("*.orig.tar.gz" och| | |"*.debian.tar.gz"/ | | |"*.diff.gz") | |------------------------------------------+--------------------| |debuild binary |bygga paket från ett| | |lokalt källträd | |------------------------------------------+--------------------| | |bygga ett | |make-kpkg kernel_image |kernelpaket från ett| | |kernelkällträd | |------------------------------------------+--------------------| | |bygga ett | |make-kpkg --initrd kernel_image |kernelpaket från ett| | |kernelkällträd med | | |initramfs aktiverat | |------------------------------------------+--------------------| |dpkg -i paketnamn_version-debian.revision_|installera ett | |arch.deb |lokalt paket till | | |systemet | |------------------------------------------+--------------------| | |installera ett | | |lokalt paket i | |apt install /sökväg/till/paketfilnamn.deb |systemet och under | | |tiden försöka lösa | | |beroendet | | |automatiskt | |------------------------------------------+--------------------| |debi paketnamn_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 /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. 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.     Du bör installera alla beroendepaket med hjälp av APT-system eller "sudo dpkg -i ...".     Konfigurera sedan alla delvis installerade paket med följande kommando.     # dpkg --configure -a 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. 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.4. 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.5. Å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     Följ sedan Avsnitt 2.6, ”Återhämtning från ett trasigt system”. 2.6.6. Räddning med kommandot dpkg Eftersom dpkg är ett paketverktyg på mycket låg nivå kan det     fungera i mycket dåliga situationer, t.ex. om systemet inte går att starta utan nätverksanslutning. Låt oss anta att foo-paketet var trasigt och behöver ersättas. 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 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å.     Om det inte går att starta systemet från hårddisken bör du försöka hitta andra sätt att starta det. 1. Starta upp systemet med hjälp av CD-skivan med debian-installer i räddningsläge.     2. Montera det omstartbara systemet på hårddisken till "/ target". 3. Installera en äldre version av foo-paketet på följande sätt.     # dpkg --root /target -i /path/to/foo_old_version_arch.deb     Detta exempel fungerar även om dpkg-kommandot på hårddisken är trasigt. Tips     Alla GNU/Linux-system som startas av ett annat system på hårddisk, live GNU/Linux-CD, startbar USB-sticka eller netboot kan användas på samma sätt för att rädda ett trasigt system. 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. 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     Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den. 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.6, ”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     Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den. 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     Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den. 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     Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den. 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     Om en nybörjare använder apt-pinning-tekniken kan det leda till stora problem. Du måste undvika att använda den här tekniken utom när du absolut behöver den. 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.6, ”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, | |proxyserver för cachning av | |approx |I:0 |8308 |Debian-arkivfiler (kompilerat | | | | |OCaml-program ) |     |-------------+------+-------+----------------------------------| | |V:0, | |Cachelagringsproxy för Debians | |apt-cacher |I:0 |267 |paket- och källfiler | | | | |(Perl-program) | |-------------+------+-------+----------------------------------| | |V:4, | |Caching-proxy för distribution av | |apt-cacher-ng|I:4 |1968 |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:430 |142 |Stöds |GRUB UEFI |diskpartitioner och | | | | | | |filsystem som vfat, | | | | | | |ext4, .... (UEFI) | |--------------+------+-------+------+------------+---------------------| | | | | | |Den är tillräckligt | | |V:17, | | | |smart för att förstå | |grub-pc |I:545 |479 |Stöds |GRUB 2 |diskpartitioner och | | | | | | |filsystem som vfat, | | | | | | |ext4, .... (BIOS) | |--------------+------+-------+------+------------+---------------------| | | | | | |Detta är GRUB 2 | | |V:0, | | | |startbara | |grub-rescue-pc|I:0 |7183 |Stöds |GRUB 2 |räddningsavbildningar| | | | | | |(CD och diskett) (PC/|     | | | | | |BIOS-version) | |--------------+------+-------+------+------------+---------------------| | | | | | |Detta förstår | |syslinux |V:2, |325 |Stöds |Isolinux |filsystemet ISO9660. | | |I:32 | | | |Detta används av | | | | | | |start-CD:n. | |--------------+------+-------+------+------------+---------------------| | | | | | |Detta förstår MSDOS | |syslinux |V:2, |325 |Stöds |Syslinux |filsystem (FAT). | | |I:32 | | | |Detta används av | | | | | | |startdisketten. | |--------------+------+-------+------+------------+---------------------| | |V:0, | | | |Nytt system startas | |loadlin |I:0 |87 |Stöds |Loadlin |från FreeDOS/ | | | | | | |MSDOS-systemet. | |--------------+------+-------+------+------------+---------------------| | | | | | |Detta är fri | | |V:0, | |Stöds |MBR av Neil |programvara som | |mbr |I:3 |47 |inte |Turton |ersätter MSDOS MBR. | | | | | | |Detta förstår bara | | | | | | |diskpartitioner. | +-----------------------------------------------------------------------+ Varning     Lek inte med startladdare utan att ha ett startbart räddningsmedium (USB-minne, CD eller diskett) som skapats från bilder i grub-rescue-pc-paketet. Det gör att du kan starta ditt system även utan fungerande bootloader på hårddisken. 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 | | +---------------------------------------------------------------+ Tips     Du kan göra det möjligt att se kärnans startloggmeddelanden genom att ta bort quiet i "/boot/grub/grub.cfg". För en bestående ändring, redigera raden "GRUB_CMDLINE_LINUX_DEFAULT="quiet"" i "/ etc/default/grub". Tips     Du kan anpassa GRUB-startbilden genom att ställa in variabeln GRUB_BACKGROUND i "/etc/default/grub" som pekar på bildfilen eller genom att placera själva bildfilen i "/boot/grub/".     Se "info grub" och grub-install(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 Det normala Debian-systemet är det 4:e steget i startprocessen som startas av mini-Debian-systemet. Systemkärnan för     mini-Debian-systemet fortsätter att köras i den här miljön. Rotfilsystemet byts från det som finns i minnet till det som finns på den riktiga hårddiskens filsystem. 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:898,| |händelsebaserad init(8) | |systemd |I:978 |10634 |-daemon för samtidighet | | | | |(alternativ till sysvinit) | |-------------------+------+-------+----------------------------| | |V:2, | |initialiseringssystem för | |cloud-init |I:6 |3231 |molninstanser för | | | | |infrastruktur | |-------------------+------+-------+----------------------------| | |V:893,| |de manussidor och länkar som| |systemd-sysv |I:977 |94 |behövs för att systemd ska | | | | |kunna ersätta sysvinit | |-------------------+------+-------+----------------------------| |init-system-helpers|V:910,|133 |hjälpverktyg för att växla | | |I:985 | |mellan sysvinit och systemd | |-------------------+------+-------+----------------------------| |initscripts |V:19, |203 |skript för initiering och | | |I:75 | |avstängning av systemet | |-------------------+------+-------+----------------------------| |sysvinit-core |V:3, |369 |System-V-liknande init(8) | | |I:4 | |-verktyg | |-------------------+------+-------+----------------------------|     |sysv-rc |V:38, |91 |System-V-liknande mekanism | | |I:80 | |för ändring av runlevel | |-------------------+------+-------+----------------------------| | |V:720,| |System-V-liknande verktyg | |sysvinit-utils |I:999 |106 |(startpar(8), bootlogd(8), | | | | |...) | |-------------------+------+-------+----------------------------| | |V:266,| |Funktionalitet för | |lsb-base |I:385 |12 |init-skript i Linux Standard| | | | |Base 3.2 | |-------------------+------+-------+----------------------------| | |V:41, | |verktyg för att organisera | |insserv |I:79 |132 |startsekvensen med hjälp av | | | | |LSB init.d-skriptberoenden | |-------------------+------+-------+----------------------------| |kexec-tools |V:1, |320 |kexec-verktyg för kexec(8) | | |I:5 | |-omstart (varm omstart) | |-------------------+------+-------+----------------------------| |systemd-bootchart |V:0, |131 |analysator för prestanda i | | |I:0 | |startprocessen | |-------------------+------+-------+----------------------------| |mingetty |V:0, |36 |konsol endast getty(8) | | |I:2 | | | |-------------------+------+-------+----------------------------| |mgetty |V:0, |315 |smart modem getty(8) | | |I:0 | |ersättning | +---------------------------------------------------------------+ Tips     Se Debian wiki: BootProcessSpeedup för de senaste tipsen för att snabba upp uppstartsprocessen. 3.2. Systemd 3.2.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.2.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.2.1, ”Systemd startas” . 3.3. 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.4. 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.5. 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.6. 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.7. Systemkonfiguration 3.7.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.7.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.7.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.7.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.7.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.8. 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.9, ”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.9. 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.8, ”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--|rot |rot |(rensad) information om | |passwd | | | |användarkonton |     |--------+----------+---------+------+--------------------------| |/etc/ |-rw-r-----|rot |skugga|säkra information om | |skugga | | | |användarkonton | |--------+----------+---------+------+--------------------------| |/etc/ |-rw-r--r--|rot |rot |gruppinformation | |grupp | | | | | +---------------------------------------------------------------+     "/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 |användarnamn" | |-------------------+-------------------------------------------| |getent skugga |bläddra i skuggad kontoinformation för " | |användarnamn |användarens_namn" |     |-------------------+-------------------------------------------| |getent grupp |bläddra i gruppinformation för "grupp_namn"| |grupp_namn | | |-------------------+-------------------------------------------| |lösenord |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:21, |384 |mkpasswd |överutrustad frontend till | | |I:215 | | |crypt(3)-biblioteket | |-------+-------+-------+---------+-----------------------------| |openssl|V:843, |2493 |openssl |beräkna lösenordshashar | | |I:996 | |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:929,| |Pluggbara | |libpam-modules |I:999 |923 |autentiseringsmoduler | | | | |(grundläggande tjänst) | |-------------------+------+-------+----------------------------| | |V:5, | |Inkopplingsbar | |libpam-ldapd |I:14 |80 |autentiseringsmodul som | | | | |möjliggör LDAP-gränssnitt | |-------------------+------+-------+----------------------------| | | | |Inkopplingsbar | |libpam-systemd |V:686,|739 |autentiseringsmodul för | | |I:961 | |registrering av | | | | |användarsessioner för logind| |-------------------+------+-------+----------------------------| | | | |Pluggbara | |libpam-doc |I:6 |1504 |autentiseringsmoduler |     | | | |(dokumentation i html och | | | | |text) | |-------------------+------+-------+----------------------------| | | | |GNU C-bibliotek: Delade | |libc6 |V:932,|5678 |bibliotek som också | | |I:999 | |tillhandahåller tjänsten | | | | |"Name Service Switch" | |-------------------+------+-------+----------------------------| |glibc-doc |I:6 |3857 |GNU C-biblioteket: | | | | |Handböcker | |-------------------+------+-------+----------------------------| | | | |GNU C-biblioteket: | |glibc-doc-reference|I:3 |14261 |Referensmanual i info-, pdf-| | | | |och html-format (icke-fri) | |-------------------+------+-------+----------------------------| |libnss-mdns |V:209,|141 |NSS-modul för Multicast | | |I:516 | |DNS-namnlösning | |-------------------+------+-------+----------------------------| |libnss-ldapd |V:6, |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_namn |" -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/miljö |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) 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, |110 |liten port-knock-daemon knockd(1)| | |I:1 | |och klient knock(1) |     |-------------+-------+-------+---------------------------------| |fail2ban |V:97, |2191 |förbjuda IP-adresser som orsakar | | |I:108 | |flera autentiseringsfel | |-------------+-------+-------+---------------------------------| |libpam-shield|V:0, |115 |låsa ut fjärrangripare som | | |I:0 | |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. * Förhindra fysisk åtkomst till hårddisken * 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     Med fysisk tillgång till hårddisken är det relativt enkelt att återställa lösenordet med följande steg. 1. Flytta hårddisken till en PC med CD-bootbar UEFI/BIOS. 2. Starta upp systemet med ett räddningsmedium (Debian-startdiskett, Knoppix-CD, GRUB-CD, ...).     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/hda6 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.11, ”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.5, ”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.2.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:418,| | |NetworkManager (daemon): | |network-manager |I:478 |7809 |config::NM |hanterar nätverket | | | | | |automatiskt | |---------------------+------+-------+------------------+-----------------------------| |network-manager-gnome|V:58, |18 |config::NM |NetworkManager | | |I:212 | | |(GNOME-frontend) | |---------------------+------+-------+------------------+-----------------------------| | | | | |Netplan (generator): | | |V:1, | | |Enhetligt, deklarativt | |netplan.io |I:7 |340 |config::NM+nätverk|gränssnitt till | | | | | |NetworkManager och | | | | | |systemd-networkd backends | |---------------------+------+-------+------------------+-----------------------------| | |V:599,| | |standardiserat verktyg för | |ifupdown |I:973 |200 |config::ifupdown |att ta upp och ner nätverket | | | | | |(Debian-specifikt) | |---------------------+------+-------+------------------+-----------------------------| |isc-dhcp-client |V:179,|2884 |config::låg nivå |DHCP-klient | | |I:749 | | | | |---------------------+------+-------+------------------+-----------------------------| |pppoeconf |V:0, |174 |config::hjälpare |konfigurationshjälp för | | |I:4 | | |PPPoE-anslutning | |---------------------+------+-------+------------------+-----------------------------| |wpasupplicant |V:386,|3900 |config::hjälpare |klientstöd för WPA och WPA2 | | |I:521 | | |(IEEE 802.11i) | |---------------------+------+-------+------------------+-----------------------------| |wpagui |V:0, |783 |config::hjälpare |Qt GUI-klient för | | |I:1 | | |wpa_supplicant | |---------------------+------+-------+------------------+-----------------------------| |wireless-tools |V:187,|292 |config::hjälpare |verktyg för att manipulera | | |I:259 | | |Linux Wireless Extensions | |---------------------+------+-------+------------------+-----------------------------| |iw |V:36, |332 |config::hjälpare |verktyg för konfiguration av | | |I:482 | | |trådlösa Linux-enheter | |---------------------+------+-------+------------------+-----------------------------| | | | | |iproute2, IPv6 och annan | |iproute2 |V:748,|3901 |config::iproute2 |avancerad | | |I:983 | | |nätverkskonfiguration: ip(8),| | | | | |tc(8), etc | |---------------------+------+-------+------------------+-----------------------------| | |V:344,| | |administrationsverktyg för | |iptables |I:636 |2410 |config::Netfilter |paketfiltrering och NAT | | | | | |(Netfilter) | |---------------------+------+-------+------------------+-----------------------------| | | | | |administrationsverktyg för | |nftables |V:186,|191 |config::Netfilter |paketfiltrering och NAT | | |I:840 | | |(Netfilter)(efterföljare till| | | | | |{ip,ip6,arp,eb}tables) | |---------------------+------+-------+------------------+-----------------------------| | | | | |testa |     |iputils-ping |V:188,|188 |test |nätverkstillgängligheten för | | |I:997 | | |en fjärrvärd via värdnamn | | | | | |eller IP-adress(iproute2) | |---------------------+------+-------+------------------+-----------------------------| | |V:1, | | |testa nätverkets nåbarhet för| |iputils-arping |I:19 |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:22 | | |en fjärrvärd | |---------------------+------+-------+------------------+-----------------------------| | |V:93, | | |visa eller ändra | |ethtool |I:255 |1068 |test |inställningar för | | | | | |Ethernet-enheter | |---------------------+------+-------+------------------+-----------------------------| |mtr-tiny |V:4, |181 |test::låg nivå |spåra nätverkssökvägen till | | |I:40 | | |en fjärrvärd (curses) | |---------------------+------+-------+------------------+-----------------------------| |mtr |V:3, |230 |test::låg nivå |spåra nätverkssökvägen till | | |I:41 | | |en fjärrvärd (curses och GTK)| |---------------------+------+-------+------------------+-----------------------------| | |V:0, | | |verktyg för gemensam | |gnome-nettool |I:10 |2480 |test::låg nivå |nätverksinformationshantering| | | | | |(GNOME) | |---------------------+------+-------+------------------+-----------------------------| |nmap |V:24, |4607 |test::låg nivå |network mapper / portskanner | | |I:189 | | |(Nmap, konsol) | |---------------------+------+-------+------------------+-----------------------------| |tcpdump |V:15, |1343 |test::låg nivå |analysator för nätverkstrafik| | |I:168 | | |(Tcpdump, konsol) | |---------------------+------+-------+------------------+-----------------------------| | |V:3, | | |analysprogram för | |wireshark |I:41 |11260 |test::låg nivå |nätverkstrafik (Wireshark, | | | | | |GTK) | |---------------------+------+-------+------------------+-----------------------------| |tshark |V:2, |431 |test::låg nivå |nätverkstrafikanalysator | | |I:23 | | |(konsol) | |---------------------+------+-------+------------------+-----------------------------| | |V:0, | | |skapa en sammanfattning av | |tcptrace |I:1 |407 |test::låg nivå |anslutningarna från | | | | | |tcpdump-utdata | |---------------------+------+-------+------------------+-----------------------------| |ntopng |V:0, |15604 |test::låg nivå |visa nätverksanvändning i | | |I:0 | | |webbläsaren | |---------------------+------+-------+------------------+-----------------------------| | | | | |nätverksklienter som | |dnsutils |I:186 |22 |test::låg nivå |levereras med BIND: nslookup | | | | | |(8), nsupdate(8), dig(8) | |---------------------+------+-------+------------------+-----------------------------| | |V:0, | | |kontrollera | |dlint |I:2 |51 |test::låg nivå |DNS-zoninformation med hjälp | | | | | |av namnserveruppslagningar | |---------------------+------+-------+------------------+-----------------------------| |dnstracer |V:0, |59 |test::låg nivå |spåra en kedja av DNS-servrar| | |I: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.7.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.7.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-adress |protokolladress (IP eller IPv6) på | | | |en enhet | |---------------+-----------+-----------------------------------| |rutt(8) |ip-väg |post i routningstabell |     |---------------+-----------+-----------------------------------| |arp(8) |ip grann |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 visa |visa länk- och adressstatus för aktiva | | |gränssnitt | |--------------------+------------------------------------------| |rutt -n |visa alla routningstabeller i numeriska | | |adresser | |--------------------+------------------------------------------| |ip route visa |visa alla routningstabeller i numeriska | | |adresser | |--------------------+------------------------------------------| |arp |visa det aktuella innehållet i | | |ARP-cachetabellerna | |--------------------+------------------------------------------| |ip grann |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 | |--------------------+------------------------------------------| |netstat -a |hitta alla öppna portar | |--------------------+------------------------------------------| |netstat -l --inet |hitta lyssningsportar | |--------------------+------------------------------------------| |netstat -ln --tcp |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:91 |93 |bandbreddsanvändning på ett | | | | |nätverksgränssnitt | |---------+------+-------+--------------------------------------| |iperf |V:2, |427 |Verktyg för mätning av bandbredd för | | |I:37 | |Internetprotokoll | |---------+------+-------+--------------------------------------| |ifstat |V:0, |53 |InterFace STATistics övervakning | | |I:6 | | | |---------+------+-------+--------------------------------------| |bmon |V:2, |141 |bärbar bandbreddsövervakare och |     | |I:20 | |hastighetsestimator | |---------+------+-------+--------------------------------------| |ethstatus|V:0, |41 |skript som snabbt mäter | | |I:2 | |nätverksenhetens genomströmning | |---------+------+-------+--------------------------------------| |bing |V:0, |80 |empirisk stokastisk bandbreddstestare | | |I:0 | | | |---------+------+-------+--------------------------------------| |bwm-ng |V:1, |95 |liten och enkel konsolbaserad | | |I:10 | |bandbreddsmonitor | |---------+------+-------+--------------------------------------| |ethstats |V:0, |21 |konsolbaserad | | |I:0 | |Ethernet-statistikmonitor | |---------+------+-------+--------------------------------------| |ipfm |V:0, |78 |verktyg för analys av bandbredd | | |I:0 | | | +---------------------------------------------------------------+ 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.9, ”Initialisering av kärnmodulen”). Tabell 5.7. Lista över brandväggsverktyg +---------------------------------------------------------------+ | paket |popcon|storlek| beskrivning | |---------------+------+-------+--------------------------------| | | | |administrationsverktyg för | |nftables |V:186,|191 |paketfiltrering och NAT | | |I:840 | |(Netfilter)(efterföljare till | | | | |{ip,ip6,arp,eb}tables) | |---------------+------+-------+--------------------------------| | |V:344,| |administrationsverktyg för | |iptables |I:636 |2410 |netfilter(iptables(8) för IPv4, | | | | |ip6tables(8) för IPv6) | |---------------+------+-------+--------------------------------| |arptables |V:0, |102 |administrationsverktyg för | | |I:1 | |netfilter(arptables(8) för ARP) | |---------------+------+-------+--------------------------------| | |V:14, | |administrationsverktyg för | |ebtables |I:25 |276 |netfilter(ebtables(8) för | | | | |Ethernet-bryggning) | |---------------+------+-------+--------------------------------| | |V:0, | |kontinuerligt övervaka | |iptstate |I:1 |122 |nätfiltrets tillstånd (liknande | | | | |top(1)) | |---------------+------+-------+--------------------------------| | |V:69, | |Uncomplicated Firewall (UFW) är | |ufw |I:96 |859 |ett program för hantering av en | | | | |nätfilterbrandvägg | |---------------+------+-------+--------------------------------|     |gufw |V:5, |3663 |grafiskt användargränssnitt för | | |I:10 | |Uncomplicated Firewall (UFW) | |---------------+------+-------+--------------------------------| | |V:15, | |firewalld är ett dynamiskt | |firewalld |I:24 |2482 |hanterat brandväggsprogram med | | | | |stöd för nätverkszoner | |---------------+------+-------+--------------------------------| |firewall-config|V:0, |1076 |grafiskt användargränssnitt för | | |I:3 | |firewalld | |---------------+------+-------+--------------------------------| |shorewall-init |V:0, |88 |Initialisering av Shoreline | | |I:0 | |Firewall | |---------------+------+-------+--------------------------------| | |V:2, | |Shoreline Firewall, generator | |shorewall |I:5 |3090 |för konfigurationsfil för | | | | |netfilter | |---------------+------+-------+--------------------------------| | |V:0, | |Shoreline Firewall, Netfilter | |shorewall-lite |I:0 |71 |konfigurationsfilgenerator | | | | |(light-version) | |---------------+------+-------+--------------------------------| | |V:0, | |Shoreline Firewall, generator | |shorewall6 |I:1 |1334 |för konfigurationsfilen | | | | |netfilter (IPv6-version) | |---------------+------+-------+--------------------------------| | |V:0, | |Shoreline Firewall, netfilter | |shorewall6-lite|I:0 |71 |konfigurationsfilgenerator | | | | |(IPv6, light-version) | +---------------------------------------------------------------+ Huvudprogrammet för användarutrymmet i netfilter är iptables(8).     Du kan konfigurera netfilter manuellt interaktivt från shell, spara dess tillstånd med iptables-save(8) och återställa det via init-skript med iptables-restore(8) när systemet startas om.     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 Tips     Även om dessa skrevs för Linux 2.4, gäller både kommandot iptables(8) och kärnfunktionen netfilter för Linux 2.6 och 3.x-kärnserierna. 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:31, | | |Chromium, (webbläsare | |chromium |I:103 |279987 |X |med öppen källkod från | | | | | |Google) | |----------------+------+-------+------+------------------------| | | | | |Firefox, (webbläsare med| | |V:16, | | |öppen källkod från | |firefox |I:21 |274760 |, , |Mozilla, endast | | | | | |tillgänglig i Debian | | | | | |Unstable) | |----------------+------+-------+------+------------------------| | |V:202,| | |Firefox ESR, (Firefox | |firefox-esr |I:437 |265679 |, , |Extended Support | | | | | |Release) | |----------------+------+-------+------+------------------------| |epiphany-browser|V:2, |2258 |, , |GNOME, HIG-kompatibel, | | |I:12 | | |Epiphany |     |----------------+------+-------+------+------------------------| |konqueror |V:26, |7931 |, , |KDE, Konqueror | | |I:116 | | | | |----------------+------+-------+------+------------------------| | |V:0, | | |Dillo, (lättviktig | |dillo |I:4 |1585 |, , |webbläsare, FLTK-baserad| | | | | |) | |----------------+------+-------+------+------------------------| |w3m |V:11, |2853 |text |w3m | | |I:151 | | | | |----------------+------+-------+------+------------------------| |lynx |V:27, |1972 |, , |Lynx | | |I:450 | | | | |----------------+------+-------+------+------------------------| |elinks |V:2, |1755 |, , |ELinks | | |I:17 | | | | |----------------+------+-------+------+------------------------| |links |V:2, |2321 |, , |Länkar (endast text) | | |I:22 | | | | |----------------+------+-------+------+------------------------| |links2 |V:0, |5466 |grafik|Länkar (konsolgrafik | | |I:11 | | |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) Observera     Förfalskad användaragentsträng kan orsaka dåliga sidoeffekter med Java. 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:26, |492 |X GUI-program (GNOME3, | | |I:236 | |gruppvarupaket) | |-----------+-------+-------+-----------------------------------| |thunderbird|V:46, |273862 |X GUI-program (GTK, Mozilla | | |I:111 | |Thunderbird) |     |-----------+-------+-------+-----------------------------------| |kmail |V:42, |25074 |X GUI-program (KDE) | | |I:106 | | | |-----------+-------+-------+-----------------------------------| |mutt |V:12, |7118 |terminalprogram med tecken som | | |I:100 | |troligen används med vim | |-----------+-------+-------+-----------------------------------| |mew |V:0, |2319 |teckenterminalprogram under (x) | | |I:0 | |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:224,|1649 |Exim4 transportagent för e-post | | |I:231 | |(MTA: Debians standard) | |------------------+------+-------+--------------------------------| |exim4-daemon-heavy|V:5, |1814 |Exim4 mail transport agent (MTA:| | |I:5 | |flexibelt alternativ) | |------------------+------+-------+--------------------------------| |exim4-base |V:229,|1646 |Exim4-dokumentation (text) och | | |I:237 | |gemensamma filer | |------------------+------+-------+--------------------------------| |exim4-doc-html |I:1 |3798 |Exim4-dokumentation (html) | |------------------+------+-------+--------------------------------| |exim4-doc-info |I:0 |648 |Exim4-dokumentation (info) | |------------------+------+-------+--------------------------------| |postfix |V:110,|4002 |Postfix mail transport agent | | |I:116 | |(MTA: säkert alternativ) | |------------------+------+-------+--------------------------------| |postfix-doc |I:5 |4840 |Dokumentation om Postfix | | | | |(html+text) | |------------------+------+-------+--------------------------------| | |V:5, | |Cyrus SASL API-implementering | |sasl2-bin |I:11 |368 |(kompletterar postfix för SMTP | | | | |AUTH) | |------------------+------+-------+--------------------------------| |cyrus-sasl2-doc |I:0 |2142 |Cyrus SASL - dokumentation |     |------------------+------+-------+--------------------------------| |msmtp |V:7, |811 |Lättvikts MTA | | |I:13 | | | |------------------+------+-------+--------------------------------| | |V:5, | |Lättviktig MTA | |msmtp-mta |I:7 |136 |(sendmail-kompatibilitetstillägg| | | | |till msmtp) | |------------------+------+-------+--------------------------------| |esmtp |V:0, |123 |Lättvikts MTA | | |I:0 | | | |------------------+------+-------+--------------------------------| | |V:0, | |Lättviktig MTA | |esmtp-run |I:0 |27 |(sendmail-kompatibilitetstillägg| | | | |till esmtp) | |------------------+------+-------+--------------------------------| |nullmailer |V:7, |483 |Avveckla MTA, ingen lokal post | | |I:8 | | | |------------------+------+-------+--------------------------------| |ssmtp |V:4, |133 |Avveckla MTA, ingen lokal post | | |I:6 | | | |------------------+------+-------+--------------------------------| |sendmail-bin |V:11, |1962 |Fullständig MTA (endast om du | | |I:11 | |redan är bekant) | |------------------+------+-------+--------------------------------| |courier-mta |V:0, |2674 |Fullfjädrad MTA (webbgränssnitt | | |I:0 | |etc.) | |------------------+------+-------+--------------------------------| | |V:0, | |git-send-email(1) program för | |git-email |I:11 |1187 |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/mailnamn |för (utgående) |Debian-specifik, mailname(5) | | |e-post | | |--------------+-----------------+------------------------------| |/etc/ |spoofing av |exim(8) specifik, |     |email-adresser|värdnamn för |exim4-config_files(5) | | |utgående e-post | | |--------------+-----------------+------------------------------| |/etc/postfix/ |spoofing av |postfix(1)-specifik, aktiveras| |generisk |värdnamn för |efter att kommandot postmap(1)| | |utgående e-post |har körts. | |--------------+-----------------+------------------------------| | |kontonamn alias |general, aktiverad efter | |/etc/aliaser |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) | |-------------+-------------------+-----------------------------| |nyaliaser |nyaliaser |initiera aliasdatabasen(-I) | |-------------+-------------------+-----------------------------| |exim4 -q |postqueue -f |spola fram väntande | | | |e-postmeddelanden(-q) |     |-------------+-------------------+-----------------------------| | |postsuper -r ALL | | |exim4 -qf |uppskjuten; |spola alla e-postmeddelanden | | |postqueue -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:902,|5131 |ssh(1) |Säker shell-klient | | |I:996 | | | | |----------------------+------+-------+---------------------+--------------------| |openssh-server |V:752,|3501 |sshd(8) |Server för säkert | | |I:808 | | |skal | |----------------------+------+-------+---------------------+--------------------| | | | | |ber användaren om en| |ssh-askpass |I:18 |103 |ssh-askpass(1) |lösenordsfras för | | | | | |ssh-add (vanlig X) |     |----------------------+------+-------+---------------------+--------------------| | |V:0, | | |ber användaren om en| |ssh-askpass-gnome |I:3 |215 |ssh-askpass-gnome(1) |lösenordsfras för | | | | | |ssh-add (GNOME) | |----------------------+------+-------+---------------------+--------------------| | | | | |ber användaren om en| |ssh-askpass-fullscreen|V:0, |41 |ssh-askpass-fullskärm|lösenordsfras för | | |I:0 | |(1) |ssh-add (GNOME) med | | | | | |extra ögonfägnad | |----------------------+------+-------+---------------------+--------------------| | | | | |webbserver för | |shellinabox |V:0, |525 |shellinaboxd(1) |webbläsartillgänglig| | |I:1 | | |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/ssh_config |Standardvärden för SSH-klient, se | | |ssh_config(5) | |---------------------+-----------------------------------------| |/etc/ssh/sshd_config |Standardvärden för SSH-server, se | | |sshd_config(5) |     |---------------------+-----------------------------------------| |~/.ssh/ |offentliga SSH-standardnycklar som | |auktoriserade_nycklar|klienter 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/ |hemlig SSH-2-nyckel typ-namn-nyckel, | |id_nyckeltyp-namn |t.ex. 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). CUPS använder IPP ( Internet Printing Protocol ). IPP stöds nu av     andra operativsystem som Windows XP och Mac OS X och har blivit en ny plattformsoberoende de facto-standard för fjärrutskrift med möjlighet till dubbelriktad kommunikation. 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, |364 |skrivare|BSD lpr/lpd (demon | | |I:2 | |(515) |för linjeskrivare) | |-------------------------+------+-------+--------+--------------------| |lprng |V:0, |3078 |, , |, , (Förbättrad) | | |I:0 | | | | |-------------------------+------+-------+--------+--------------------| |cups |V:94, |1092 |IPP |Internet Utskrift | | |I:456 | |(631) |CUPS-server | |-------------------------+------+-------+--------+--------------------| | | | | |System |     | | | | |V-skrivarkommandon | | |V:114,| | |för CUPS: lp(1), | |cups-client |I:470 |433 |, , |lpstat(1), lpoptions| | | | | |(1), cancel(1), | | | | | |lpmove(8), lpinfo | | | | | |(8), lpadmin(8), … | |-------------------------+------+-------+--------+--------------------| | | | | |BSD-skrivarkommandon| |cups-bsd |V:33, |131 |, , |för CUPS: lpr(1), | | |I:197 | | |lpq(1), lprm(1), lpc| | | | | |(8) | |-------------------------+------+-------+--------+--------------------| |printer-driver-gutenprint|V:14, |1194 |Inte |skrivardrivrutiner | | |I:65 | |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, |51 |TELNET |TELNET-server | | |I:1 | | | | |-----------------+------+-------+---------+--------------------| |telnetd-ssl |V:0, |158 |, , |, , (SSL-stöd) | | |I:0 | | | | |-----------------+------+-------+---------+--------------------| |nfs-kernel-server|V:46, |798 |NFS |Unix fildelning | | |I:56 | | | | |-----------------+------+-------+---------+--------------------| | |V:107,| | |Fil- och | |samba |I:123 |5019 |SMB |skrivardelning i | | | | | |Windows | |-----------------+------+-------+---------+--------------------|     | |V:0, | | |Apple/Mac fil- och | |netatalk |I:1 |814 |ATP |skrivardelning | | | | | |(AppleTalk) | |-----------------+------+-------+---------+--------------------| |proftpd-basic |V:4, |452 |FTP |Allmän nedladdning | | |I:10 | | |av filer | |-----------------+------+-------+---------+--------------------| |apache2 |V:192,|587 |HTTP |Allmän webbserver | | |I:231 | | | | |-----------------+------+-------+---------+--------------------| |squid |V:9, |9349 |, , |Allmän | | |I:10 | | |webbproxyserver | |-----------------+------+-------+---------+--------------------| |bind9 |V:36, |887 |DNS |IP-adress för andra | | |I:39 | | |värdar | |-----------------+------+-------+---------+--------------------| |isc-dhcp-server |V:15, |6102 |DHCP |IP-adress för själva| | |I:26 | | |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 isc-dhcp-server 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:43, |139 |TCP/IP |TCP/IP swiss | | |I:903 | | |army-kniv | |------------------+------+-------+---------+---------------------| | | | | |Schweizisk armékniv | | |V:20, | | |för TCP/IP med stöd | |netcat-openbsd |I:122 |109 |TCP/IP |för IPv6, | | | | | |proxyservrar och | | | | | |Unix-uttag | |------------------+------+-------+---------+---------------------| | | | | |Secure Socket Layer | | |V:843,| | |(SSL) binär och | |openssl |I:996 |2493 |SSL |relaterade | | | | | |kryptografiska | | | | | |verktyg | |------------------+------+-------+---------+---------------------| |stunnel4 |V:6, |569 |, , |universell | | |I:10 | | |SSL-omslagsfilm | |------------------+------+-------+---------+---------------------| |telnet |V:13, |51 |TELNET |TELNET-klient | | |I:256 | | | | |------------------+------+-------+---------+---------------------| |telnet-ssl |V:0, |199 |, , |, , (SSL-stöd) | | |I:2 | | | | |------------------+------+-------+---------+---------------------| |nfs-common |V:145,|1194 |NFS |Unix fildelning | | |I:206 | | | | |------------------+------+-------+---------+---------------------| |smbclient |V:26, |2106 |SMB |MS Windows fil- och | | |I:211 | | |skrivardelningsklient| |------------------+------+-------+---------+---------------------| | |V:30, | | |mount- och | |cifs-utils |I:120 |351 |, , |umount-kommandon för |     | | | | |fjärrfil i MS Windows| |------------------+------+-------+---------+---------------------| |ftp |V:3, |53 |FTP |FTP-klient | | |I:69 | | | | |------------------+------+-------+---------+---------------------| |lftp |V:3, |2377 |, , |, , | | |I:24 | | | | |------------------+------+-------+---------+---------------------| |ncftp |V:1, |1407 |, , |fTP-klient i | | |I:10 | | |fullskärm | |------------------+------+-------+---------+---------------------| |wget |V:185,|3784 |HTTP och |webbnedladdare | | |I:982 | |FTP | | |------------------+------+-------+---------+---------------------| |curl |V:212,|504 |, , |, , | | |I:683 | | | | |------------------+------+-------+---------+---------------------| |axel |V:0, |228 |, , |snabbare nedladdare | | |I:3 | | | | |------------------+------+-------+---------+---------------------| | | | | |snabbare nedladdare | |aria2 |V:4, |1984 |, , |med stöd för | | |I:22 | | |BitTorrent och | | | | | |Metalink | |------------------+------+-------+---------+---------------------| |bind9-host |V:121,|140 |DNS |host(1) från bind9, | | |I:941 | | |"Priority: standard" | |------------------+------+-------+---------+---------------------| |dnsutils |I:186 |22 |, , |dig(1) från bindning,| | | | | |"Priority: standard" | |------------------+------+-------+---------+---------------------| |isc-dhcp-client |V:179,|2884 |DHCP |få IP-adress | | |I:749 | | | | |------------------+------+-------+---------+---------------------| |ldap-utils |V:10, |788 |LDAP |hämta data från | | |I:58 | | |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:196 |9 |Skrivbordsmiljön | | | | |GNOME | |----------------------------+------+-------+-------------------| |task-xfce-desktop |I:90 |9 |Xfce | | | | |skrivbordsmiljö | |----------------------------+------+-------+-------------------| |task-kde-desktop |I:95 |6 |Skrivbordsmiljön | | | | |KDE Plasma | |----------------------------+------+-------+-------------------|     |task-mate-desktop |I:36 |9 |Skrivbordsmiljön | | | | |MATE | |----------------------------+------+-------+-------------------| |task-cinnamon-desktop |I:39 |9 |Skrivbordsmiljön | | | | |Cinnamon | |----------------------------+------+-------+-------------------| |task-lxde-desktop |I:23 |9 |LXDE | | | | |skrivbordsmiljö | |----------------------------+------+-------+-------------------| |task-lxqt-desktop |I:17 |9 |LXQt | | | | |skrivbordsmiljö | |----------------------------+------+-------+-------------------| |task-gnome-flashback-desktop|I:11 |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:0, |221 |GNOME:s fönsterhanterare | | |I:30 | |mutter [auto] | |---------------------------+------+-------------------+---------------------------| |xwayland |V:250,|2541 |En X-server som körs på | | |I:343 | |toppen av wayland [auto] | |---------------------------+------+-------------------+---------------------------|     | |V:110,| |Fjärrskrivbordsdaemon för | |gnome-remote-desktop |I:246 |2215 |GNOME som använder PipeWire| | | | |[auto] | |---------------------------+------+-------------------+---------------------------| | |V:19, | |Avancerade | |gnome-tweaks |I:238 |1145 |konfigurationsinställningar| | | | |för GNOME | |---------------------------+------+-------------------+---------------------------| | |V:8, | |Verktyg för att aktivera / | |gnome-shell-extension-prefs|I:153 |82 |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:26, | | |Hantering av personlig | |evolution |I:236 |492 |GNOME |information (grupprogram| | | | | |och e-post) | |-------------------+------+-------------------+------+------------------------| |thunderbird |V:46, |273862 |GTK |E-postklient(Mozilla | | |I:111 | | |Thunderbird) | |-------------------+------+-------------------+------+------------------------| | |V:1, | | |Hantering av personlig | |kontact |I:11 |2258 |KDE |information (grupprogram| | | | | |och e-post) | |-------------------+------+-------------------+------+------------------------| |libreoffice-writer |V:117,|33053 |LO |ordbehandlare | | |I:439 | | | | |-------------------+------+-------------------+------+------------------------| |abiword |V:0, |3576 |GNOME |ordbehandlare | | |I:5 | | | | |-------------------+------+-------------------+------+------------------------| |calligrawords |V:0, |6937 |KDE |ordbehandlare | | |I:5 | | | | |-------------------+------+-------------------+------+------------------------| | |V:1, | | |desktop publishing | |scribus |I:14 |32052 |KDE |editor för att redigera | | | | | |PDF-filer | |-------------------+------+-------------------+------+------------------------| |glabels |V:0, |1283 |GNOME |etikettredaktör | | |I:2 | | | | |-------------------+------+-------------------+------+------------------------| |libreoffice-calc |V:111,|28164 |LO |kalkylblad | | |I:435 | | | | |-------------------+------+-------------------+------+------------------------| |gnumeric |V:3, |9958 |GNOME |kalkylblad | | |I:11 | | | | |-------------------+------+-------------------+------+------------------------| |calligrasheets |V:0, |13593 |KDE |kalkylblad | | |I:4 | | | | |-------------------+------+-------------------+------+------------------------| |libreoffice-impress|V:92, |2469 |LO |presentation | | |I:434 | | | | |-------------------+------+-------------------+------+------------------------| |calligrastage |V:0, |6017 |KDE |presentation | | |I:4 | | | | |-------------------+------+-------------------+------+------------------------| |libreoffice-base |V:24, |5031 |LO |databashantering | | |I:82 | | | | |-------------------+------+-------------------+------+------------------------| |kexi |V:0, |7565 |KDE |databashantering | | |I:0 | | | | |-------------------+------+-------------------+------+------------------------| |libreoffice-draw |V:92, |10985 |LO |redigerare för | | |I:434 | | |vektorgrafik (draw) | |-------------------+------+-------------------+------+------------------------| |inkscape |V:12, |113183 |GNOME |redigerare för | | |I:86 | | |vektorgrafik (draw) | |-------------------+------+-------------------+------+------------------------| |karbon |V:0, |3962 |KDE |redigerare för | | |I:5 | | |vektorgrafik (draw) | |-------------------+------+-------------------+------+------------------------| |dia |V:1, |4086 |GTK |editor för flödesscheman| | |I:19 | | |och diagram |     |-------------------+------+-------------------+------+------------------------| |gimp |V:45, |32135 |GTK |bitmappsgrafikredigerare| | |I:232 | | |(paint) | |-------------------+------+-------------------+------+------------------------| |shotwell |V:15, |6334 |GTK |digital fotoorganisatör | | |I:255 | | | | |-------------------+------+-------------------+------+------------------------| |digikam |V:1, |302 |KDE |digital fotoorganisatör | | |I:9 | | | | |-------------------+------+-------------------+------+------------------------| |darktable |V:4, |35873 |GTK |lighttable och mörkrum | | |I:12 | | |för fotografer | |-------------------+------+-------------------+------+------------------------| |planner |V:0, |1400 |GNOME |projektledning | | |I:5 | | | | |-------------------+------+-------------------+------+------------------------| |calligraplan |V:0, |19241 |KDE |projektledning | | |I:3 | | | | |-------------------+------+-------------------+------+------------------------| |gnucash |V:2, |29748 |GNOME |personlig redovisning | | |I:7 | | | | |-------------------+------+-------------------+------+------------------------| |homebank |V:0, |3196 |GTK |personlig redovisning | | |I:1 | | | | |-------------------+------+-------------------+------+------------------------| |lilypond |V:0, |16924 |- |musik sättare | | |I:6 | | | | |-------------------+------+-------------------+------+------------------------| |kmymoney |V:0, |18826 |KDE |personlig redovisning | | |I:2 | | | | |-------------------+------+-------------------+------+------------------------| |librecad |V:1, |9100 |Qt-app|cAD-system (datorstödd | | |I:15 | | |konstruktion) (2D) | |-------------------+------+-------------------+------+------------------------| |freecad |I:20 |110 |Qt-app|cAD-system (datorstödd | | | | | |konstruktion) (3D) | |-------------------+------+-------------------+------+------------------------| | |V:3, | | |programvara för | |kicad |I:15 |163802 |GTK |elektroniska scheman och| | | | | |PCB-design | |-------------------+------+-------------------+------+------------------------| |xsane |V:10, |1512 |GTK |skanner frontend | | |I:135 | | | | |-------------------+------+-------------------+------+------------------------| |libreoffice-math |V:83, |1904 |LO |editor för matematiska | | |I:437 | | |ekvationer/formler | |-------------------+------+-------------------+------+------------------------| |calibre |V:7, |65174 |KDE |e-bokskonverterare och | | |I:27 | | |bibliotekshantering | |-------------------+------+-------------------+------+------------------------| |fbreader |V:0, |3783 |GTK |e-bokläsare | | |I:7 | | | | |-------------------+------+-------------------+------+------------------------| |evince |V:79, |963 |GNOME |dokument(pdf)-visare | | |I:300 | | | | |-------------------+------+-------------------+------+------------------------| |okular |V:41, |4415 |KDE |dokument(pdf)-visare | | |I:135 | | | | |-------------------+------+-------------------+------+------------------------| |x11-apps |V:31, |2461 |ren |xeyes(1), etc. | | |I:467 | |X-app | | |-------------------+------+-------------------+------+------------------------| |x11-utils |V:217,|651 |ren |xev(1), xwininfo(1), | | |I:565 | |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:180,|213 |59 |- |- |Cantarell (GNOME 3, | | |I:302 | | | | |display) | |-------------------------+------+-------+----+-----+----+----------------------| | | | | | | |Noto-teckensnitt | |fonts-noto |I:158 |31 |61 |63 |40 |(Google, flerspråkigt | | | | | | | |med CJK) | |-------------------------+------+-------+----+-----+----+----------------------| | | | | | | |DejaVu (GNOME 2, | |fonts-dejavu |I:405 |35 |58 |68 |40 |MCM:Verdana, utökad | | | | | | | |Bitstream Vera) | |-------------------------+------+-------+----+-----+----+----------------------| | |V:71, | | | | |Liberation-teckensnitt| |fonts-liberation2 |I:239 |15 |56 |60 |40 |för LibreOffice (Red | | | | | | | |Hat, MCMATC) | |-------------------------+------+-------+----+-----+----+----------------------| | |V:21, | | | | |Chrome OS: Arimo, | |fonts-croscore |I:39 |5274 |56 |60 |40 |Tinos och Cousine | | | | | | | |(Google, MCMATC) | |-------------------------+------+-------+----+-----+----+----------------------| |fonts-crosextra-carlito |V:18, |2696 |57 |- |- |Chrome OS: Carlito | | |I:102 | | | | |(Google, MCM:Calibri )| |-------------------------+------+-------+----+-----+----+----------------------| | |V:10, | | | | |Chrome OS: Caladea | |fonts-crosextra-caladea |I:97 |347 |- |55 |- |(Google, MCM:Cambria )|     | | | | | | |(endast latin ) | |-------------------------+------+-------+----+-----+----+----------------------| |fonts-freefont-ttf |V:78, |14460 |57 |59 |40 |GNU FreeFont (utökad | | |I:209 | | | | |URW Nimbus) | |-------------------------+------+-------+----+-----+----+----------------------| | |V:207,| | | | |Debian task-desktop, | |fonts-quicksand |I:460 |392 |56 |- |- |Quicksand (display, | | | | | | | |endast latin) | |-------------------------+------+-------+----+-----+----+----------------------| | |V:32, | | | | |Ett typsnitt utformat | |fonts-hack |I:140 |2507 |- |- |40 P|för källkod Hack | | | | | | | |(Facebook) | |-------------------------+------+-------+----+-----+----+----------------------| |fonts-sil-gentiumplus |I:30 |14345 |- |54 |- |Gentium SIL | |-------------------------+------+-------+----+-----+----+----------------------| |fonts-sil-charis |I:29 |6704 |- |59 |- |Charis SIL | |-------------------------+------+-------+----+-----+----+----------------------| | |V:189,| | | | |URWNimbus (Nimbus | |fonts-urw-base35 |I:536 |15560 |56 |60 |40 |Sans, Roman No. 9 L, | | | | | | | |Mono L, MCAHTC) | |-------------------------+------+-------+----+-----+----+----------------------| |fonts-ubuntu |V:2, |4339 |58 |- |33 P|Ubuntu-teckensnitt | | |I:5 | | | | |(display) | |-------------------------+------+-------+----+-----+----+----------------------| |fonts-terminus |I:4 |452 |- |- |33 |Coola teckensnitt för | | | | | | | |terminaler i retrostil| |-------------------------+------+-------+----+-----+----+----------------------| | |V:0, | | | | |Nedladdare av | |ttf-mscorefonts-installer|I:43 |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:578,|1021 |Bibliotek för rastrering | | |I:996 | |av FreeType-teckensnitt | |---------------------+------+-------+--------------------------| | |V:569,| |Fontconfig bibliotek för | |libfontconfig1 |I:831 |624 |konfiguration av |     | | | |teckensnitt | |---------------------+------+-------+--------------------------| |fontconfig |V:459,|681 |fc-*: CLI-kommandon för | | |I:708 | |Fontconfig | |---------------------+------+-------+--------------------------| | |V:2, | |Fonthanterare: | |font-manager |I:7 |1121 |GUI-kommando för | | | | |Fontconfig | |---------------------+------+-------+--------------------------| |nautilus-font-manager|V:0, |39 |Nautilus-tillägg för Font | | |I:0 | |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:97, | |Flatpak-ramverk för | |flatpak |I:103 |8284 |applikationsdistribution för | | | | |skrivbordsappar | |-----------------------------+------+-------+-----------------------------| |gnome-software-plugin-flatpak|V:29, |285 |Flatpak-stöd för | | |I:40 | |GNOME-programvara | |-----------------------------+------+-------+-----------------------------| |snapd |V:67, |71722 |Daemon och verktyg som | | |I:70 | |möjliggör snap-paket | |-----------------------------+------+-------+-----------------------------| |gnome-software-plugin-snap |V:1, |144 |Snap-stöd för | | |I:2 | |GNOME-programvara | |-----------------------------+------+-------+-----------------------------|     | |V:359,| |portal för | |xdg-desktop-portal |I:442 |2169 |desktop-integration för | | | | |Flatpak och Snap | |-----------------------------+------+-------+-----------------------------| |xdg-desktop-portal-gtk |V:326,|715 |xdg-desktop-portal backend | | |I:441 | |för gtk (GNOME) | |-----------------------------+------+-------+-----------------------------| |xdg-desktop-portal-kde |V:78, |2688 |xdg-desktop-portal backend | | |I:111 | |för Qt (KDE) | |-----------------------------+------+-------+-----------------------------| |xdg-desktop-portal-wlr |V:1, |160 |xdg-desktop-portal backend | | |I:6 | |för wlroots (Wayland) | |-----------------------------+------+-------+-----------------------------| | | | |ett | |firejail |V:1, |1759 |SUID-säkerhetssandlådeprogram| | |I:4 | |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:110,|2215 |RDP |GNOME-server för | | |I:246 | | |fjärrskrivbord | |--------------------------+------+-------+---------+---------------------| | |V:25, | | |xrdp, RDP-server | |xrdp |I:28 |4506 |RDP |(Remote Desktop | | | | | |Protocol) | |--------------------------+------+-------+---------+---------------------| | |V:8, | | |x11vnc, VNC-server | |x11vnc |I:41 |1835 |RFB (VNC)|(Remote Framebuffer | | | | | |Protocol) | |--------------------------+------+-------+---------+---------------------| | |V:4, | | |TigerVNC, fjärrserver|     |tigervnc-standalone-server|I:14 |2967 |RFB (VNC)|för VNC (Framebuffer | | | | | |Protocol) | |--------------------------+------+-------+---------+---------------------| |gnome-connections |V:5, |1599 |RDP, RFB |GNOME | | |I:112 | |(VNC) |fjärrskrivbordsklient| |--------------------------+------+-------+---------+---------------------| | | | |RDP, RFB | | |vinagre |V:1, |4249 |(VNC), |Vinagre: GNOME-klient| | |I:30 | |SPICE, |för fjärrskrivbord | | | | |SSH | | |--------------------------+------+-------+---------+---------------------| | | | |RDP, RFB | | |remmina |V:14, |971 |(VNC), |Remmina: GTK-klient | | |I:65 | |SPICE, |för fjärrskrivbord | | | | |SSH, ... | | |--------------------------+------+-------+---------+---------------------| |krdc |V:1, |4052 |RDP, RFB |KRDC: KDE-klient för | | |I:17 | |(VNC) |fjärrskrivbord | |--------------------------+------+-------+---------+---------------------| | | | | |Virtual Machine | | |V:5, | |RFB |Managers | |virt-viewer |I:46 |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:752,| |sshd med | | |openssh-server |I:808 |3501 |alternativet |SSH-server (säker) | | | | |X11-vidarebefordran| | |-----------------+------+-------+-------------------+---------------------|     |openssh-client |V:902,|5131 |ssh -X |SSH-klient (säker) | | |I:996 | | | | |-----------------+------+-------+-------------------+---------------------| |xauth |V:183,|81 |xauth |X authority | | |I:970 | | |filverktyg | |-----------------+------+-------+-------------------+---------------------| |x11-xserver-utils|V:306,|559 |xhost |serveråtkomstkontroll| | |I:537 | | |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:43 | | |för X-val (urklipp) | |------------+------+-------------------+------------+----------------------| |xclip |V:13, |62 |X |kommandoradsgränssnitt|     | |I:74 | | |för X-val (urklipp) | |------------+------+-------------------+------------+----------------------| | |V:6, | | |wl-copy wl-paste: | |wl-clipboard|I:22 |162 |Wayland |kommandoradsgränssnitt| | | | | |för Waylands urklipp | |------------+------+-------------------+------------+----------------------| | |V:9, | | |en daemon som fångar | |gpm |I:10 |545 |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 Vid automatisk montering av ett USB-minne under en modern     skrivbordsmiljö, t.ex. GNOME, kan du tillhandahålla ett sådant monteringsalternativ genom att högerklicka på ikonen på skrivbordet, klicka på fliken "Drive", klicka för att expandera "Setting" och ange "utf8" i "Mount options:". Nästa gång minnesstickan monteras är montering med UTF-8 aktiverad. 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 8.2.1. Tangentbordsinmatning för Linux-konsolen och X Window Debian-systemet kan konfigureras för att fungera med många     internationella tangentbordsarrangemang med hjälp av paketen keyboard-configuration och console-setup.     # dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup För Linux-konsolen och X Window-systemet uppdateras konfigurationsparametrarna i "/etc/default/keyboard" och "/etc/ default/console-setup". Detta konfigurerar också Linux-konsolens     teckensnitt. Många icke-ASCII-tecken, inklusive accentuerade tecken som används av många europeiska språk, kan göras tillgängliga med dead-tangenten, AltGr-tangenten och compose-tangenten. 8.2.2. Tangentbordsinmatning för Wayland För skrivbordssystemet GNOME på Wayland kan Avsnitt 8.2.1, ”Tangentbordsinmatning för Linux-konsolen och X Window” inte stödja europeiska språk som inte är engelska. IBus skapades för att stödja inte bara asiatiska språk utan även europeiska språk.     Paketberoendet för GNOME-skrivbordsmiljön rekommenderar "ibus" via "gnome-shell". Koden för "ibus" har uppdaterats för att integrera funktionerna setxkbmap och XKB-alternativ. Du måste konfigurera ibus från "GNOME Settings" eller "GNOME Tweaks" för flerspråkig tangentbordsinmatning. 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.3. Stöd för inmatningsmetod med IBus     Eftersom skrivbordsmiljön GNOME rekommenderar "ibus" via "gnome-shell" är "ibus" ett bra val som inmatningsmetod.     Flerspråkig input till ansökan behandlas som: Keyboard Application | ^     | | +-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland +-- Engine--+     Förteckningen över IBus och dess motorpaket är följande. Tabell 8.1. Lista över IBus och dess motorpaket +---------------------------------------------------------------+ | paket |popcon|storlek| lokal som stöds | |---------------------+------+-------+--------------------------| | |V:215,| |ramverk för | |ibus |I:260 |1857 |inmatningsmetod med hjälp | | | | |av dbus | |---------------------+------+-------+--------------------------| |ibus-mozc |V:2, |980 |Japanska | | |I:3 | | | |---------------------+------+-------+--------------------------| |ibus-anthy |V:0, |8900 |, , | | |I:1 | | | |---------------------+------+-------+--------------------------| |ibus-skk |V:0, |243 |, , | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-kkc |V:0, |211 |, , | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-libpinyin |V:1, |2768 |Kinesiska (för zh_CN) | | |I:4 | | | |---------------------+------+-------+--------------------------| |ibus-chewing |V:0, |288 |, , (för zh_TW) | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-libzhuyin |V:0, |41008 |, , (för zh_TW) | | |I:0 | | | |---------------------+------+-------+--------------------------|     |ibus-rime |V:0, |78 |, , (för zh_CN/zh_TW) | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-cangjie |V:0, |235 |, , (för zh_HK) | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-hangul |V:0, |261 |Koreanska | | |I:2 | | | |---------------------+------+-------+--------------------------| |ibus-libthai |V:0, |84 |Thai | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-table-thai |I:0 |58 |Thai | |---------------------+------+-------+--------------------------| |ibus-unikey |V:0, |286 |Vietnamesisk | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-keyman |V:0, |191 |Flerspråkig: Keyman-motor | | |I:0 | |för över 2000 språk | |---------------------+------+-------+--------------------------| |ibus-table |V:0, |2271 |tabellmotor för IBus | | |I:1 | | | |---------------------+------+-------+--------------------------| |ibus-m17n |I:1 |448 |Flerspråkigt: indiska, | | | | |arabiska och andra | |---------------------+------+-------+--------------------------| | |V:66, | |ytterligare widgetar för | |plasma-widgets-addons|I:113 |5132 |Plasma 5 som innehåller | | | | |tangentbordsindikator | +---------------------------------------------------------------+ Notera För kinesiska kan "fcitx5" vara ett alternativt ramverk för     inmatningsmetoder. För Emacs-entusiaster kan "uim" vara ett alternativ. I båda fallen kan du behöva göra extra manuell konfiguration med im-config. Vissa gamla klassiska inmatningsmetoder som "kinput2" kan fortfarande finnas i Debians arkiv men rekommenderas inte för den moderna miljön. 8.2.4. Ett exempel för japanska Jag tycker att den japanska inmatningsmetoden som startas under     engelsk miljö ("en_US.UTF-8") är mycket användbar. Här är hur jag gjorde detta med IBus för GNOME på Wayland: 1. Installera det japanska inmatningsverktygspaketet ibus-mozc (eller ibus-anthy) med dess rekommenderade paket, t.ex. im-config. 2. Välj "Inställningar" → "Tangentbord" → "Inmatningskällor" → klicka på "+" i "Inmatningskällor" → "Japanska" → "Japanska mozc (eller anthy)" och klicka på "Lägg till" om det inte har aktiverats.     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. * 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.4. Östasiatiska tvetydiga tecken bredd tecken Under den östasiatiska lokalen kan boxtecknen, grekiska och     kyrilliska tecken visas bredare än önskad bredd för att orsaka ojusterad terminalutmatning (se Unicode Standard Annex #11).     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:42, |1590 |Se Avsnitt 1.3, ”Midnight Commander | | |I:189 | |(MC)” | |--------+-------+-------+--------------------------------------| |bsdutils|V:429, |335 |script(1)-kommando för att spela in en| | |I:999 | |terminalsession | |--------+-------+-------+--------------------------------------| |screen |V:55, |1009 |terminalmultiplexer med VT100/ | | |I:205 | |ANSI-terminalemulering | |--------+-------+-------+--------------------------------------| |tmux |V:72, |1292 |terminal multiplexer alternativ | | |I:154 | |(Använd "Control-B" istället) | |--------+-------+-------+--------------------------------------| |fzf |V:7, |4651 |fuzzy text sökare |     | |I:30 | | | |--------+-------+-------+--------------------------------------| |fzy |V:0, |59 |fuzzy text sökare | | |I:0 | | | |--------+-------+-------+--------------------------------------| |rlwrap |V:1, |328 |readline-funktion | | |I:12 | |kommandoradsinklädnad | |--------+-------+-------+--------------------------------------| |ledit |V:0, |375 |readline-funktion | | |I:8 | |kommandoradsinklädnad | |--------+-------+-------+--------------------------------------| |rlfe |V:0, |45 |readline-funktion | | |I:0 | |kommandoradsinklädnad | |--------+-------+-------+--------------------------------------| | |V:8, | |snabb rekursiv strängsökning i | |ripgrep |I:28 |5342 |källkodsträdet med automatisk | | | | |filtrering | +---------------------------------------------------------------+ 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 h nnoremap j nnoremap k silent! nnoremap l """ Window resize nnoremap vertical resize -2 nnoremap resize -2 nnoremap resize +2 nnoremap vertical resize +2 """ Clear hlsearch with ( is mapped as above) nnoremap noh inoremap noh """ center after jump next nnoremap n nzz nnoremap N Nzz """ fast "jk" to get out of INSERT mode () inoremap jk noh """ fast "" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap jk """ previous/next trouble/quickfix item nnoremap [q cprevious nnoremap ]q cnext """ buffers nnoremap bprevious nnoremap bnext nnoremap [b bprevious nnoremap ]b bnext """ Add undo break-points     inoremap , ,u inoremap . .u inoremap ; ;u """ save file inoremap w xnoremap w nnoremap w snoremap w """ better indenting vnoremap < >gv """ terminal (Somehow under Linux, becomes in Vim) nnoremap terminal "nnoremap terminal """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if ! has('nvim') """ Toggle paste mode with p for Vim (no need for Nvim) set pastetoggle=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 u inoremap u """ is re-purposed as above """ execute the previous macro recorded with Q nnoremap Q @@ """ repeat last substitute and *KEEP* flags nnoremap & :&& """ search visual selected string for visual mode xnoremap * y/\V" xnoremap # y?\V" 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: and """ \%#\@w nnoremap w :WMToggle 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 | |------------------+--------------------------------------------| |:hjälp paket |förklaring av paketmekanismen vim | |------------------+--------------------------------------------| |:hjälp 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.4, ”Systemets meddelande” och Avsnitt 3.3, ”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 | |----------+-------+-------+------------------------------------| |logwatch |V:9, |2412 |logganalysator med snygg utdata | | |I:11 | |skriven i Perl | |----------+-------+-------+------------------------------------| |fail2ban |V:97, |2191 |förbjuda IP-adresser som orsakar | | |I:108 | |flera autentiseringsfel | |----------+-------+-------+------------------------------------| |analog |V:3, |3739 |logganalysator för webbserver | | |I:88 | | | |----------+-------+-------+------------------------------------| |awstats |V:5, |6935 |kraftfull och funktionell analysator| | |I:9 | |för webbserverloggar | |----------+-------+-------+------------------------------------| |sarg |V:0, |863 |generator för bläckfiskanalysrapport| | |I:0 | | |     |----------+-------+-------+------------------------------------| |pflogsumm |V:1, |167 |Postfix sammanfattning av loggposter| | |I:4 | | | |----------+-------+-------+------------------------------------| |fwlogwatch|V:0, |487 |analysator för brandväggsloggar | | |I:0 | | | |----------+-------+-------+------------------------------------| |squidview |V:0, |189 |övervaka och analysera squid | | |I:0 | |access.log-filer | |----------+-------+-------+------------------------------------| | |V:0, | |loggfilsgranskare med | |swatch |I:0 |99 |regexp-matchning, markering och | | | | |krokar | |----------+-------+-------+------------------------------------| |crm114 |V:0, |1365 |Kontrollerbart regex- och | | |I:0 | |skräppostfilter (CRM114) | |----------+-------+-------+------------------------------------| |icmpinfo |V:0, |42 |tolka ICMP-meddelanden | | |I:0 | | | +---------------------------------------------------------------+ 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 | |-------------+-----------------+-------------------------------| |lång-iso |någon |2009-01-19 00:15 | |-------------+-----------------+-------------------------------| |full-iso |någon |2009-01-19 00:15:16.000000000 | | | |+0900 | |-------------+-----------------+-------------------------------|     |lokal |C |19 januari 00:15 | |-------------+-----------------+-------------------------------| |lokal |en_US.UTF-8 |19 januari 00:15 | |-------------+-----------------+-------------------------------| |lokal |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.09 januari 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:13, |1115 |Wayland |skärmdumpsprogram | | |I:114 | | |för GNOME | |----------------+--------+-------+--------+--------------------| |flameshot |V:7, |3532 |Wayland |skärmdump ansökan på| | |I:17 | | |steroid | |----------------+--------+-------+--------+--------------------|     |gimp |V:45, |32135 |Wayland |skärmdump i GUI-meny| | |I:232 | |+ X | | |----------------+--------+-------+--------+--------------------| |x11-apps |V:31, |2461 |X |xwd(1) | | |I:467 | | | | |----------------+--------+-------+--------+--------------------| |imagemagick |I:295 |77 |X |import(1) | |----------------+--------+-------+--------+--------------------| |scrot |V:4, |141 |X |scrot(1) | | |I:54 | | | | +---------------------------------------------------------------+ 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:24, | |lagra konfigurationsfiler och deras | |etckeeper|I:28 |157 |metadata med Git (standard), Mercurial|     | | | |eller GNU Bazaar | |---------+------+-------+--------------------------------------| |timeshift|V:7, |4234 |verktyg för systemåterställning med | | |I:13 | |hjälp av rsync eller BTRFS-snapshots | |---------+------+-------+--------------------------------------| |snapper |V:6, |2426 |Verktyg för hantering av | | |I:8 | |ö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:897,|18457 |nice(1): kör ett program med ändrad | | |I:999 | |schemaläggningsprioritet | |---------+------+-------+--------------------------------------| | |V:429,| |renice(1): ändra | |bsdutils |I:999 |335 |schemaläggningsprioriteten för en | | | | |process som körs | |---------+------+-------+--------------------------------------| |procps |V:821,|2395 |"/proc" filsystemverktyg: ps(1), top | | |I:997 | |(1), kill(1), watch(1), … | |---------+------+-------+--------------------------------------| | |V:403,| |verktyg för filsystemet "/proc": | |psmisc |I:748 |950 |killall(1), fuser(1), peekfd(1), | | | | |pstree(1) | |---------+------+-------+--------------------------------------| | |V:6, | |time(1): kör ett program för att | |time |I:90 |129 |rapportera hur systemresurser används | | | | |med avseende på tid | |---------+------+-------+--------------------------------------| |sysstat |V:129,|1904 |sar(1), iostat(1), mpstat(1), ...: | | |I:165 | |verktyg för systemprestanda för Linux | |---------+------+-------+--------------------------------------| |isag |V:0, |109 |Interactive System Activity Grapher |     | |I:3 | |för sysstat | |---------+------+-------+--------------------------------------| |lsof |V:438,|492 |lsof(8): lista filer som öppnats av en| | |I:949 | |pågående process med alternativet "-p"| |---------+------+-------+--------------------------------------| |strace |V:9, |3253 |strace(1): spåra systemanrop och | | |I:106 | |signaler | |---------+------+-------+--------------------------------------| |ltrace |V:0, |420 |ltrace(1): spåra anrop till bibliotek | | |I:12 | | | |---------+------+-------+--------------------------------------| |xtrace |V:0, |353 |xtrace(1): spåra kommunikationen | | |I:0 | |mellan X11-klient och server | |---------+------+-------+--------------------------------------| |powertop |V:29, |696 |powertop(1): information om systemets | | |I:226 | |strömförbrukning | |---------+------+-------+--------------------------------------| |cron |V:903,|250 |kör processer enligt ett schema i | | |I:996 | |bakgrunden från cron(8)-daemon | |---------+------+-------+--------------------------------------| | |V:412,| |cron-liknande kommandoschemaläggare | |anacron |I:485 |112 |för system som inte körs 24 timmar om | | | | |dygnet | |---------+------+-------+--------------------------------------| | |V:77, | |at(1) eller batch(1): kör ett jobb vid| |at |I:107 |158 |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.     Skrivbordsmiljön ställer in miljövariablerna $XDG_DATA_HOME och $XDG_DATA_DIR. Till exempel, under GNOME 3: * $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/tillämpningar/     * /usr/local/share/ → /usr/local/share/applications/ * /usr/share/ → /usr/share/applikationer/     *.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: + GNOME3 skrivbord: "Inställningar" → "System" → "Detaljer" → "Standardprogram" + KDE-skrivbord: "K" → "Kontrollcenter" → "KDE-komponenter" → "Komponentväljare" + 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 <> $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:252, |279 |Linux PCI-verktyg: lspci(8) | | |I:992 | | | |-----------+-------+-------+-----------------------------------| |usbutils |V:77, |322 |USB-verktyg för Linux: lsusb(8) | | |I:883 | | | |-----------+-------+-------+-----------------------------------| |nvme-cli |V:21, |2222 |NVMe-verktyg för Linux: nvme(1) | | |I:31 | | | |-----------+-------+-------+-----------------------------------|     |pcmciautils|V:4, |92 |PCMCIA-verktyg för Linux: pccardctl| | |I:7 | |(8) | |-----------+-------+-------+-----------------------------------| |scsitools |V:0, |261 |samling verktyg för hantering av | | |I:2 | |SCSI-maskinvara: lsscsi(8) | |-----------+-------+-------+-----------------------------------| |procinfo |V:0, |149 |systeminformation hämtad från "/ | | |I:6 | |proc": lsdev(8) | |-----------+-------+-------+-----------------------------------| |lshw |V:13, |971 |information om | | |I:93 | |maskinvarukonfiguration: lshw(1) | |-----------+-------+-------+-----------------------------------| |discover |V:28, |81 |system för identifiering av | | |I:727 | |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. Tabell 9.14. Lista över verktyg för hårdvarukonfiguration +---------------------------------------------------------------+ | paket |popcon|storlek| beskrivning | |-----------------+------+-------+------------------------------| |console-setup |V:58, |420 |Font och keytable-verktyg för | | |I:971 | |Linux-konsolen | |-----------------+------+-------+------------------------------| |x11-xserver-utils|V:306,|559 |Verktyg för X-server: xset(1),| | |I:537 | |xmodmap(1) | |-----------------+------+-------+------------------------------| | | | |daemon för att hantera | |acpid |V:60, |158 |händelser som levereras av | | |I:96 | |ACPI (Advanced Configuration | | | | |and Power Interface) | |-----------------+------+-------+------------------------------| |acpi |V:7, |49 |verktyg för att visa | | |I:89 | |information om ACPI-enheter | |-----------------+------+-------+------------------------------| | |V:0, | |daemon för att sätta en bärbar| |sleepd |I:0 |84 |dator i viloläge under | | | | |inaktivitet |     |-----------------+------+-------+------------------------------| | |V:116,| |optimering av hårddiskåtkomst | |hdparm |I:231 |246 |(se Avsnitt 9.6.9, ”Optimering| | | | |av hårddisken”) | |-----------------+------+-------+------------------------------| | |V:227,| |styra och övervaka | |smartmontools |I:265 |2455 |lagringssystem med hjälp av | | | | |S.M.A.R.T. | |-----------------+------+-------+------------------------------| |setserial |V:3, |104 |samling av verktyg för | | |I:5 | |hantering av serieportar | |-----------------+------+-------+------------------------------| |memtest86+ |V:0, |12473 |samling av verktyg för | | |I:19 | |hantering av minneshårdvara | |-----------------+------+-------+------------------------------| |scsitools |V:0, |261 |samling av verktyg för | | |I:2 | |hantering av SCSI-hårdvara | |-----------------+------+-------+------------------------------| |setcd |V:0, |33 |optimering av åtkomst till | | |I:0 | |cd-läsare | |-----------------+------+-------+------------------------------| |big-cursor |I:0 |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. Terminalens konfiguration     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". 9.5.7. 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:333,|2702 |verktyg för att konfigurera | | |I:470 | |och använda ALSA | |-----------------+------+-------+------------------------------| | |V:0, | |OSS-kompatibilitet under ALSA | |oss-compat |I:11 |18 |förhindrar "/dev/dsp hittades | | | | |inte"-fel | |-----------------+------+-------+------------------------------| | |V:310,| |multimedia server för ljud- | |pipewire |I:367 |142 |och videobearbetning - | | | | |metapaket | |-----------------+------+-------+------------------------------| | |V:319,| |multimedia-server för ljud- | |pipewire-bin |I:367 |2106 |och videobearbetningsmotor - | | | | |ljudserver och CLI-program | |-----------------+------+-------+------------------------------| | | | |ljud- och | |pipewire-alsa |V:164,|197 |videobehandlingsmotor | | |I:230 | |multimediaserver - ljudserver | | | | |som ersätter ALSA |     |-----------------+------+-------+------------------------------| | | | |multimedia-server med ljud- | |pipewire-pulse |V:273,|64 |och videobearbetningsmotor - | | |I:330 | |ljudserver som ersätter | | | | |PulseAudio | |-----------------+------+-------+------------------------------| |pulseaudio |V:174,|6609 |PulseAudio-server | | |I:205 | | | |-----------------+------+-------+------------------------------| |libpulse0 |V:436,|973 |PulseAudio klientbibliotek | | |I:584 | | | |-----------------+------+-------+------------------------------| |jackd |V:2, |8 |JACK Audio Connection Kit. | | |I:16 | |(JACK) server (låg latens) | |-----------------+------+-------+------------------------------| |libjack0 |V:2, |329 |JACK Audio Connection Kit. | | |I:9 | |(JACK) bibliotek (låg latens) | |-----------------+------+-------+------------------------------| |libgstreamer1.0-0|V:464,|5183 |GStreamer: GNOME-ljudmotor | | |I:602 | | | |-----------------+------+-------+------------------------------| |libphonon4qt5-4 |V:33, |572 |Phonon: KDE:s ljudmotor | | |I:73 | | | +---------------------------------------------------------------+ 9.5.8. 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 av |     |---------------------------------------+-----------------------| |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-kommando | |skärmsläckare) |-prefs | +---------------------------------------------------------------+ 9.5.9. 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.10. 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.11. 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:5, | |daemon för att skicka avvikelser i | |logcheck |I:6 |120 |systemets loggfiler till | | | | |administratören | |----------+------+-------+-------------------------------------| | |V:4, | |verktyg för att verifiera | |debsums |I:31 |107 |installerade paketfiler mot | | | | |MD5-kontrollsummor | |----------+------+-------+-------------------------------------| |chkrootkit|V:9, |966 |rootkit-detektor | | |I:15 | | | |----------+------+-------+-------------------------------------| |clamav |V:8, |33105 |antivirusprogram för Unix - | | |I:40 | |kommandoradsgränssnitt |     |----------+------+-------+-------------------------------------| |tiger |V:1, |7800 |rapportera sårbarheter i | | |I:1 | |systemsäkerheten | |----------+------+-------+-------------------------------------| |tripwire |V:1, |5050 |kontroll av fil- och | | |I:1 | |katalogintegritet | |----------+------+-------+-------------------------------------| |john |V:1, |469 |aktivt verktyg för att knäcka | | |I:8 | |lösenord | |----------+------+-------+-------------------------------------| |aide |V:1, |331 |Avancerad miljö för | | |I:2 | |intrångsdetektering - statisk binär | |----------+------+-------+-------------------------------------| |integrit |V:0, |2939 |program för verifiering av | | |I:0 | |filintegritet | |----------+------+-------+-------------------------------------| |crack |V:0, |153 |program för lösenordsgissning | | |I:0 | | | +---------------------------------------------------------------+     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 Om du startar ditt system med Linux live-CD-skivor eller     Debian-installer-CD-skivor i räddningsläge kan du enkelt konfigurera om datalagringen på din startenhet. 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(1x) 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:900, |4401 |diverse systemverktyg inklusive | | |I:999 | |fdisk(8) och cfdisk(8) | |----------+-------+-------+------------------------------------| |parted |V:443, |126 |GNU Parted program för att ändra | | |I:577 | |storlek på diskpartitioner |     |----------+-------+-------+------------------------------------| |gparted |V:13, |2168 |GNOME-partitionsredigerare baserad | | |I:94 | |på libparted | |----------+-------+-------+------------------------------------| |gdisk |V:20, |940 |partition editor för GPT/MBR | | |I:331 | |hybriddisk | |----------+-------+-------+------------------------------------| |kpartx |V:17, |78 |program för att skapa | | |I:29 | |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:797,|1549 |verktyg för filsystemen ext2/ext3| | |I:998 | |/ext4 | |--------------+------+-------+---------------------------------| |btrfs-progs |V:44, |5204 |verktyg för filsystemet Btrfs | | |I:77 | | | |--------------+------+-------+---------------------------------| |reiserfsprogs |V:6, |473 |verktyg för Reiserfs-filsystemet | | |I:22 | | | |--------------+------+-------+---------------------------------| |zfsutils-linux|V:32, |1873 |verktyg för OpenZFS-filsystemet | | |I:32 | | | |--------------+------+-------+---------------------------------| |dosfstools |V:238,|310 |verktyg för FAT-filsystemet. | | |I:568 | |(Microsoft: MS-DOS, Windows) | |--------------+------+-------+---------------------------------| |exfatprogs |V:34, |352 |verktyg för exFAT-filsystemet som| | |I:459 | |underhålls av Samsung. |     |--------------+------+-------+---------------------------------| |exfat-fuse |V:2, |74 |läs/skriv exFAT-filsystem | | |I:54 | |(Microsoft) drivrutin för FUSE. | |--------------+------+-------+---------------------------------| |xfsprogs |V:33, |4384 |verktyg för XFS-filsystemet. | | |I:90 | |(SGI: IRIX) | |--------------+------+-------+---------------------------------| | |V:122,| |läs/skriv NTFS-filsystem | |ntfs-3g |I:523 |1494 |(Microsoft: Windows NT, ...) | | | | |drivrutin för FUSE. | |--------------+------+-------+---------------------------------| |jfsutils |V:0, |1104 |verktyg för JFS-filsystemet. | | |I:7 | |(IBM: AIX, OS/2) | |--------------+------+-------+---------------------------------| |reiser4progs |V:0, |1367 |verktyg för Reiser4-filsystemet | | |I:1 | | | |--------------+------+-------+---------------------------------| |hfsprogs |V:0, |394 |verktyg för filsystemet HFS och | | |I:3 | |HFS Plus. (Apple: Mac OS) | |--------------+------+-------+---------------------------------| |zerofree |V:5, |30 |program för att nollställa fria | | |I:122 | |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/hda1" körs visas innehållet i filsystemets superblock på "/dev/hda1". * Genom att köra "sudo tune2fs -c 50 /dev/hda1" ändras frekvensen för filsystemkontroller(fsck körs under uppstart) till var 50:e uppstart på "/dev/hda1".     * Genom att köra "sudo tune2fs -j /dev/hda1" läggs journaliseringskapacitet till filsystemet, dvs. filsystemet konverteras från ext2 till ext3 på "/dev/hda1". (Gör detta på det omonterade filsystemet.) * Utförandet av "sudo tune2fs -O extents,uninit_bg,dir_index / dev/hda1 && fsck -pf /dev/hda1" konverterar det från ext3 till ext4 på "/dev/hda1". (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/ hda", med "hdparm -tT /dev/hda". För vissa hårddiskar som är anslutna till (E)IDE kan du snabba upp den med "hdparm -q -c3 -d1     -u1 -m16 /dev/hda" 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/hda". 4. Kontrollera utdata från "smartctl -a /dev/hda" för att se om     SMART-funktionen faktiskt är aktiverad. + Om inte, aktivera den genom att "smartctl -s on -a /dev/ hda". 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 Diskavbildningsfilen "disk.img" för en omonterad enhet, t.ex. den     andra SCSI- eller seriella ATA-enheten "/dev/sdb", kan skapas med hjälp av cp(1) eller dd(1) på följande sätt.     # cp /dev/sdb disk.img # dd if=/dev/sdb of=disk.img 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/hda of=mbr.img bs=512 count=1     # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda 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 har en SCSI- eller seriell ATA-enhet som startdiskett ersätter du "/dev/hda" med "/dev/sda".     Om du gör en avbildning av en diskpartition på originaldisken ersätter du "/dev/hda" med "/dev/hda1" osv. 9.7.2. Skriva direkt till hårddisken Diskavbildningsfilen "disk.img" kan skrivas till en omonterad     enhet, t.ex. den andra SCSI-enheten "/dev/sdb" med motsvarande storlek, på följande sätt.     # dd if=disk.img of=/dev/sdb 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 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 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 är bara en stor CD till wodim(1) som tillhandahålls av cdrkit.     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/hda", med wodim (1) på följande sätt.     # wodim -v -eject dev=/dev/hda 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/hda cd.iso Tips     Om ditt skrivbordssystem monterar CD-skivor automatiskt ska du avmontera dem genom att "sudo umount /dev/hda" 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:897,| |grundläggande paket som har od | |coreutils |I:999 |18457 |(1) för att dumpa filer (HEX, | | | | |ASCII, OCTAL, ...) | |---------------+------+-------+--------------------------------| | |V:4, | |verktygspaket som har hd(1) för | |bsdmainutils |I:163 |17 |att dumpa filer (HEX, ASCII, | | | | |OCTAL, ...) | |---------------+------+-------+--------------------------------| |hexedit |V:0, |70 |binär editor och viewer (HEX, |     | |I:8 | |ASCII) | |---------------+------+-------+--------------------------------| |bless |V:0, |924 |fullfjädrad | | |I:1 | |hexadecimalredigerare (GNOME) | |---------------+------+-------+--------------------------------| |okteta |V:1, |1590 |fullfjädrad hexadecimal editor | | |I:13 | |(KDE4) | |---------------+------+-------+--------------------------------| |ncurses-hexedit|V:0, |130 |binär editor och viewer (HEX, | | |I:1 | |ASCII, EBCDIC) | |---------------+------+-------+--------------------------------| |beav |V:0, |137 |binär editor och viewer (HEX, | | |I:0 | |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, |400 |verktyg för MSDOS-filer utan att | | |I:56 | |montera dem | |--------+-------+-------+--------------------------------------| |hfsutils|V:0, |178 |verktyg för HFS och HFS+ filer utan | | |I:3 | |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:11, |292 |Parity Archive Volume Set, för | | |I:119 | |kontroll och reparation av filer |     |----------+------+-------+-------------------------------------| |dvdisaster|V:0, |1422 |skydd mot dataförlust/skrap/åldring | | |I:1 | |för CD/DVD-media | |----------+------+-------+-------------------------------------| | |V:0, | |backupverktyg som använder | |dvbackup |I:0 |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, |1495 |verktyg för partitionsskanning och| | |I:27 | |diskåterställning | |-------------+------+-------+----------------------------------| |magicrescue |V:0, |258 |verktyg för att återställa filer | | |I:2 | |genom att leta efter magiska byte | |-------------+------+-------+----------------------------------| |scalpel |V:0, |89 |sparsam, högpresterande filhuggare| | |I:2 | | | |-------------+------+-------+----------------------------------| |myrescue |V:0, |83 |rädda data från skadade hårddiskar| | |I:2 | | | |-------------+------+-------+----------------------------------| |extundelete |V:0, |152 |verktyg för att återställa filer | | |I:8 | |på ext3/4-filsystemet | |-------------+------+-------+----------------------------------| |ext4magic |V:0, |235 |verktyg för att återställa filer | | |I:3 | |på ext3/4-filsystemet | |-------------+------+-------+----------------------------------|     | |V:0, | |verktyg som hjälper till att | |ext3grep |I:2 |299 |återställa raderade filer på | | | | |ext3-filsystemet | |-------------+------+-------+----------------------------------| |scrounge-ntfs|V:0, |49 |program för dataåterställning för | | |I:1 | |NTFS-filsystem | |-------------+------+-------+----------------------------------| |gzrt |V:0, |33 |verktyg för gzip-återställning | | |I:0 | | | |-------------+------+-------+----------------------------------| |sleuthkit |V:2, |1719 |verktyg för kriminalteknisk | | |I:24 | |analys. (Sleuthkit) | |-------------+------+-------+----------------------------------| |autopsy |V:0, |1026 |grafiskt gränssnitt till SleuthKit| | |I:1 | | | |-------------+------+-------+----------------------------------| |foremost |V:0, |102 |kriminalteknisk applikation för | | |I:4 | |att återställa data | |-------------+------+-------+----------------------------------| |guymager |V:0, |1047 |verktyg för kriminalteknisk | | |I:0 | |avbildning baserat på Qt | |-------------+------+-------+----------------------------------| |dcfldd |V:0, |113 |förbättrad version av dd för | | |I:3 | |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     Det finns flera sätt att helt radera data från en hel hårddisk som enhet, t.ex. USB-minne på "/dev/sda". Observera     Kontrollera först USB-minnets plats med mount(8) innan du utför kommandon här. Enheten som pekas ut av "/dev/sda" kan vara en SCSI-hårddisk eller en serial-ATA-hårddisk där hela ditt system finns.     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/hda", "/dev/sda", etc. 9.8.9. Radera oanvänt område på en hårddisk Oanvända områden på en hårddisk (eller ett USB-minne), t.ex. "/     dev/sdb1", kan fortfarande innehålla raderade data eftersom de bara är olänkade från filsystemet. Dessa kan rensas genom att skriva över dem. # 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     Detta är vanligtvis tillräckligt bra för ditt USB-minne. Men det är inte perfekt. De flesta delar av raderade filnamn och deras attribut kan vara dolda och ligga kvar i filsystemet. 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:16, |463 |verktyg för krypterad blockenhet | | |I:81 | |(dm-crypt / LUKS) | |--------------+------+-------+---------------------------------| | | | |verktyg för krypterade |     |cryptmount |V:2, |231 |blockenheter(dm-crypt / LUKS) med| | |I:2 | |fokus på montering/avmontering av| | | | |vanliga användare | |--------------+------+-------+---------------------------------| |fscrypt |V:0, |6471 |verktyg för kryptering av | | |I:1 | |Linux-filsystem(fscrypt) | |--------------+------+-------+---------------------------------| |libpam-fscrypt|V:0, |5589 |PAM-modul för kryptering av | | |I:0 | |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 Du kan kryptera innehållet i flyttbara massmediaenheter, t.ex.     ett USB-minne på "/dev/sdx", med hjälp av dm-crypt/LUKS. Du formaterar den helt enkelt enligt följande. # 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 |I:505 |17 |nödvändiga paket för att bygga | | | | |Debian-paket: make, gcc, … | |----------------+------+-------+-------------------------------| |bzip2 |V:165,|113 |verktyg för komprimering och | | |I:971 | |dekomprimering av bz2-filer | |----------------+------+-------+-------------------------------| |libncurses5-dev |I:44 |6 |utvecklares bibliotek och | | | | |dokument för ncurses | |----------------+------+-------+-------------------------------| | |V:379,| |git: distribuerat | |git |I:598 |50172 |revisionskontrollsystem som | | | | |används av Linux-kärnan |     |----------------+------+-------+-------------------------------| | |V:30, | |tillhandahålla fakeroot-miljö | |fakeroot |I:509 |225 |för att bygga paket som | | | | |icke-root | |----------------+------+-------+-------------------------------| |initramfs-tools |V:422,|52 |verktyg för att bygga en | | |I:988 | |initramfs (Debian-specifikt) | |----------------+------+-------+-------------------------------| |dkms |V:56, |235 |dKMS (dynamiskt stöd för | | |I:148 | |kärnmoduler) (generisk) | |----------------+------+-------+-------------------------------| |module-assistant|V:0, |391 |hjälpverktyg för att skapa | | |I:14 | |modulpaket (Debian-specifikt) | |----------------+------+-------+-------------------------------| | |V:5, | |hjälpskript för en underhållare| |devscripts |I:34 |2768 |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/v6.x/linux-version.tar.xz $ tar --xz -xvf linux-version.tar.xz     $ cd linux-version $ cp /boot/config-version .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-3.* $ 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(icke-fri-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:897,|18457 |GNU core-verktyg som | | |I:999 | |innehåller chroot(8) | |------------------+------+-------+-----------------------------| | |V:72, | |systemd container/nspawn | |systemd-container |I:76 |2264 |verktyg som innehåller | | | | |systemd-nspawn(1) | |------------------+------+-------+-----------------------------| | |V:5, | |specialiserat verktyg för att| |schroot |I:7 |2627 |köra Debians binära paket i | | | | |chroot | |------------------+------+-------+-----------------------------| | |V:1, | |verktyg för att bygga binära | |sbuild |I:4 |157 |Debian-paket från | | | | |Debian-källor | |------------------+------+-------+-----------------------------| |debootstrap |V:4, |330 |starta upp ett grundläggande | | |I:48 | |Debian-system (skrivet i sh) | |------------------+------+-------+-----------------------------| |cdebootstrap |V:0, |114 |bootstrappa ett Debian-system| | |I:1 | |(skrivet i C) | |------------------+------+-------+-----------------------------| |cloud-image-utils |V:1, |66 |verktyg för bildhantering i | | |I:15 | |molnet | |------------------+------+-------+-----------------------------| |cloud-guest-utils |V:2, |71 |verktyg för molngäster | | |I:18 | | | |------------------+------+-------+-----------------------------| | | | |Virtual Machine Manager: | |virt-manager |V:11, |2310 |skrivbordsprogram för | | |I:49 | |hantering av virtuella | | | | |maskiner | |------------------+------+-------+-----------------------------| |libvirt-clients |V:48, |1154 |program för | | |I:72 | |libvirt-biblioteket | |------------------+------+-------+-----------------------------| | |V:0, | |Incus: systembehållare och | |incus |I:2 |21 |virtuell maskinhanterare (för| | | | |Debian 13 "Trixie") | |------------------+------+-------+-----------------------------| | | | |LXD: systembehållare och | |lxd |V:0, |55606 |hantering av virtuella | | |I:0 | |maskiner (för Debian 12 | | | | |"Bookworm") | |------------------+------+-------+-----------------------------| |podman |V:24, |81828 |podman: motor för att köra | | |I:27 | |OCI-baserade behållare i Pods| |------------------+------+-------+-----------------------------| | |V:2, | |motor för att köra | |podman-docker |I:2 |275 |OCI-baserade containrar i | | | | |Pods - wrapper för docker |     |------------------+------+-------+-----------------------------| |docker.io |V:45, |95958 |docker: Körprogram för | | |I:47 | |Linux-containrar | |------------------+------+-------+-----------------------------| |games-emulator |I:0 |21 |spel-emulator: Debians | | | | |emulatorer för spel | |------------------+------+-------+-----------------------------| |bochs |V:0, |8180 |Bochs: IA-32 PC-emulator | | |I:0 | | | |------------------+------+-------+-----------------------------| |qemu-system |I:23 |80 |QEMU: binärfiler för | | | | |fullständig systememulering | |------------------+------+-------+-----------------------------| |qemu-user |V:5, |472779 |QEMU: binärfiler för | | |I:9 | |emulering i användarläge | |------------------+------+-------+-----------------------------| |qemu-utils |V:13, |12161 |QEMU: verktyg | | |I:110 | | | |------------------+------+-------+-----------------------------| | | | |KVM: full virtualisering på | |qemu-system-x86 |V:53, |67511 |x86-hårdvara med | | |I:94 | |hårdvaruassisterad | | | | |virtualisering | |------------------+------+-------+-----------------------------| | |V:4, | |VirtualBox: lösning för | |virtualbox |I:5 |154064 |x86-virtualisering på i386 | | | | |och amd64 | |------------------+------+-------+-----------------------------| |gnome-boxes |V:1, |6847 |Lådor: Enkel GNOME-app för | | |I:7 | |åtkomst till virtuella system| |------------------+------+-------+-----------------------------| |xen-tools |V:0, |719 |verktyg för att hantera | | |I:1 | |debian XEN virtuell server | |------------------+------+-------+-----------------------------| |wine |V:13, |204 |Vin: Implementering av | | |I:57 | |Windows API (standardpaket) | |------------------+------+-------+-----------------------------| | |V:1, | |DOSBox: x86-emulator med | |dosbox |I:13 |2697 |Tandy/Herc/CGA/EGA/VGA/ | | | | |SVGA-grafik, ljud och DOS | |------------------+------+-------+-----------------------------| |lxc |V:9, |1626 |Linux-containrar verktyg för | | |I:12 | |användarutrymme | |------------------+------+-------+-----------------------------| | | | |venv för att skapa virtuella | |python3-venv |I:132 |6 |pythonmiljöer | | | | |(systembibliotek) | |------------------+------+-------+-----------------------------| | |V:8, | |virtualenv för att skapa | |python3-virtualenv|I:43 |379 |isolerade virtuella | | | | |pythonmiljöer | |------------------+------+-------+-----------------------------| | |V:6, | |pipx för installation av | |pipx |I:42 |3613 |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:895,|3085 |.tar |tjära(1)|standardarkiveraren (de | | |I:999 | | | |facto-standard) | |----------+------+-------+-------+--------+-------------------------| |cpio |V:321,|1201 |.cpio |cpio(1) |Unix System V-arkivering,| | |I:998 | | | |använd med find(1) | |----------+------+-------+-------+--------+-------------------------| |binutils |V:170,|1118 |.ar |ar(1) |arkiverare för skapande | | |I:643 | | | |av statiska bibliotek | |----------+------+-------+-------+--------+-------------------------| |fastjar |V:1, |183 |.burk |fastjar |arkiveringsprogram för | | |I:10 | | |(1) |Java (zip-liknande) | |----------+------+-------+-------+--------+-------------------------| | | | | | |ny | |pax |V:6, |167 |.pax |pax(1) |POSIX-standardarkiverare,| | |I:10 | | | |en kompromiss mellan tar | | | | | | |och cpio | |----------+------+-------+-------+--------+-------------------------| | |V:890,| | |gzip(1),|GNU LZ77 | |gzip |I:999 |256 |.gz |zcat(1),|komprimeringsverktyg (de | | | | | |… |facto-standard) | |----------+------+-------+-------+--------+-------------------------| | | | | | |Burrows-Wheeler | | | | | |bzip2 |block-sorterande | | |V:165,| | |(1), |komprimeringsverktyg med | |bzip2 |I:971 |113 |.bz2 |bzcat |högre komprimeringsgrad | | | | | |(1), … |än gzip(1) (långsammare | | | | | | |än gzip med liknande | | | | | | |syntax) | |----------+------+-------+-------+--------+-------------------------| | | | | | |LZMA-komprimeringsverktyg| |lzma |V:0, |349 |.lzma |lzma(1) |med högre | | |I:12 | | | |komprimeringsgrad än gzip| | | | | | |(1) (föråldrad) | |----------+------+-------+-------+--------+-------------------------|     | | | | | |XZ-komprimeringsverktyg | | | | | | |med högre | | | | | |xz(1), |komprimeringsgrad än | |xz-utils |V:311,|1475 |.xz |xzdec |bzip2(1) (långsammare än | | |I:980 | | |(1), … |gzip men snabbare än | | | | | | |bzip2; ersättning för | | | | | | |LZMA-komprimeringsverktyg| | | | | | |) | |----------+------+-------+-------+--------+-------------------------| | |V:132,| | |zstd(1),|Zstandard verktyg för | |zstd |I:760 |2312 |.zstd |zstdcat |snabb förlustfri | | | | | |(1), … |komprimering | |----------+------+-------+-------+--------+-------------------------| | | | | | |7-Zip | |p7zip |V:8, |8 |.7z |7zr(1), |filarkiveringsprogram med| | |I:259 | | |p7zip(1)|hög komprimeringsgrad | | | | | | |(LZMA-komprimering) | |----------+------+-------+-------+--------+-------------------------| | | | | | |7-Zip | | |V:28, | | |7z(1), |filarkiveringsprogram med| |p7zip-full|I:280 |12 |.7z |7za(1) |hög komprimeringsgrad | | | | | | |(LZMA-komprimering och | | | | | | |andra) | |----------+------+-------+-------+--------+-------------------------| | | | | | |LZO-komprimeringsverktyg | | | | | | |med högre komprimerings- | | |V:12, | | | |och | |lzop |I:139 |164 |.lzo |lzop(1) |dekomprimeringshastighet | | | | | | |än gzip(1) (lägre | | | | | | |komprimeringsgrad än gzip| | | | | | |med liknande syntax) | |----------+------+-------+-------+--------+-------------------------| |zip |V:48, |627 |.zip |zip(1) |InfoZIP: DOS arkiv- och | | |I:372 | | | |komprimeringsverktyg | |----------+------+-------+-------+--------+-------------------------| | |V:107,| | |packa |InfoZIP: DOS verktyg för | |unzip |I:762 |387 |.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:897,| | |lokal kopiering av filer | |coreutils |I:999 |18457 |GNU cp |och kataloger ("-a" för | | | | | |rekursiv) | |--------------+------+-------+-------+-------------------------| | |V:902,| | |fjärrkopiera filer och | |openssh-client|I:996 |5131 |scp |kataloger (klient, "-r" | | | | | |för rekursiv) |     |--------------+------+-------+-------+-------------------------| |openssh-server|V:752,|3501 |sshd |fjärrkopiera filer och | | |I:808 | | |kataloger (fjärrserver) | |--------------+------+-------+-------+-------------------------| | |V:201,| | |1-vägs | |rsync |I:545 |814 | |fjärrsynkronisering och | | | | | |säkerhetskopiering | |--------------+------+-------+-------+-------------------------| | |V:2, | | |2-vägs | |unison |I:13 |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. 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 &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:352,| | |GNU Privacy Guard - verktyg | |gnupg |I:878 |468 |gpg(1) |för kryptering och signering | | | | | |med OpenPGP | |---------------+------+-------+-------------+------------------------------| |gpgv |V:289,|559 |gpgv(1) |GNU Privacy Guard - verktyg | | |I:964 | | |för signaturverifiering | |---------------+------+-------+-------------+------------------------------| | |V:1, | |pappersnyckel|extrahera bara den hemliga | |paperkey |I:14 |58 |(1) |informationen ur OpenPGP:s | | | | | |hemliga nycklar | |---------------+------+-------+-------------+------------------------------| | |V:16, | |cryptsetup |verktyg för dm-crypt | |cryptsetup |I:81 |463 |(8), … |blockenhetskryptering med stöd|     | | | | |för LUKS | |---------------+------+-------+-------------+------------------------------| |coreutils |V:897,|18457 |md5sum(1) |beräkna och kontrollera | | |I:999 | | |MD5-meddelandesammanställning | |---------------+------+-------+-------------+------------------------------| |coreutils |V:897,|18457 |sha1sum(1) |beräkna och kontrollera | | |I:999 | | |SHA1-meddelandesammanställning| |---------------+------+-------+-------------+------------------------------| | |V:843,| | |beräkna | |openssl |I:996 |2493 |openssl(1ssl)|meddelandesammanställning med | | | | | |"openssl dgst" (OpenSSL) | |---------------+------+-------+-------------+------------------------------| |libsecret-tools|V:0, |49 |hemligt |lagra och hämta lösenord (CLI)| | |I:9 | |verktyg(1) | | |---------------+------+-------+-------------+------------------------------| |seahorse |V:78, |7971 |sjöhäst(1) |verktyg för nyckelhantering | | |I:270 | | |(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-nyckel |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 fil --export |exportera alla nycklar till fil | |-------------------------+-------------------------------------| |gpg --importera fil |importera alla nycklar från filen | |-------------------------+-------------------------------------| |gpg --send-keys |skicka nyckeln för user_ID till |     |användare_ID |keyserver | |-------------------------+-------------------------------------| |gpg --recv-keys |hämta nyckel till user_ID från | |användare_ID |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 --fingeravtryck |kontrollera fingeravtryck för user_ID| |användare_ID | | |-------------------------+-------------------------------------| |gpg --uppdatera-nycklar |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 | +---------------------------------------------------+     Följande laddar upp min nyckel "1DD8D791" till den populära nyckelservern "hkp://keys.gnupg.net".     $ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791     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". 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 --verifiera fil |verifiera klar-signerad fil | |-------------------------+-------------------------------------| |gpg -o fil.sig -b fil |skapa fristående signatur | |-------------------------+-------------------------------------| |gpg -o fil.sig |, , | |--avlägsna-sign fil | | |-------------------------+-------------------------------------| |gpg --verifiera fil.sig |verifiera filen med file.sig | |fil | |     |-------------------------+-------------------------------------| |gpg -o crypt_file.gpg -r |kryptering med öppen nyckel avsedd | |namn -e fil |för namn från fil till binär | | |crypt_file.gpg | |-------------------------+-------------------------------------| |gpg -o crypt_file.gpg | | |--mottagarens namn |, , | |--kryptera filen | | |-------------------------+-------------------------------------| |gpg -o crypt_file.asc -a |kryptering med öppen nyckel avsedd | |-r namn -e fil |för namn från fil till ASCII-armored | | |crypt_file.asc | |-------------------------+-------------------------------------| |gpg -o crypt_file.gpg -c |symmetrisk kryptering från fil till | |fil |crypt_file.gpg | |-------------------------+-------------------------------------| |gpg -o crypt_file.gpg |, , | |--symmetrisk fil | | |-------------------------+-------------------------------------| |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 namn | | |-------------------------+-------------------------------------| |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:77, |242 |patch(1) |tillämpa en diff-fil på| | |I:716 | | |ett original | |----------+------+-------+-------------+-----------------------| |vim |V:85, |4077 |vimdiff(1) |jämföra 2 filer sida | | |I:353 | | |vid sida i vim | |----------+------+-------+-------------+-----------------------| | |V:0, | | |interaktivt | |imediff |I:0 |348 |imediff(1) |fullskärmsverktyg för 2| | | | | |/3-vägs sammanslagning | |----------+------+-------+-------------+-----------------------| |meld |V:5, |3546 |meld(1) |jämföra och sammanfoga | | |I:25 | | |filer (GTK) | |----------+------+-------+-------------+-----------------------| |wiggle |V:0, |175 |vicka(1) |tillämpa avvisade | | |I:0 | | |korrigeringar | |----------+------+-------+-------------+-----------------------| |diffutils |V:879,|1768 |diff(1) |jämföra filer rad för | | |I:997 | | |rad | |----------+------+-------+-------------+-----------------------| |diffutils |V:879,|1768 |diff3(1) |jämför och sammanfogar | | |I:997 | | |tre filer rad för rad | |----------+------+-------+-------------+-----------------------| |quilt |V:1, |885 |quilt(1) |hantera serier av | | |I:19 | | |korrigeringar | |----------+------+-------+-------------+-----------------------| |wdiff |V:5, |651 |wdiff(1) |visa ordskillnader | | |I:43 | | |mellan textfiler | |----------+------+-------+-------------+-----------------------| |diffstat |V:10, |79 |diffstat(1) |producera ett histogram| | |I:106 | | |av förändringar av diff| |----------+------+-------+-------------+-----------------------| | |V:12, | |kombineradiff|skapa en kumulativ | |patchutils|I:104 |242 |(1) |patch från två | | | | | |inkrementella patchar | |----------+------+-------+-------------+-----------------------| |patchutils|V:12, |242 |dehtmldiff(1)|extrahera en diff från | | |I:104 | | |en HTML-sida | |----------+------+-------+-------------+-----------------------| | |V:12, | | |extrahera eller | |patchutils|I:104 |242 |filterdiff(1)|exkludera diffar från | | | | | |en diff-fil | |----------+------+-------+-------------+-----------------------| | |V:12, | | |åtgärda diff-filer |     |patchutils|I:104 |242 |fixcvsdiff(1)|skapade av CVS som | | | | | |patch(1) tolkar fel | |----------+------+-------+-------------+-----------------------| |patchutils|V:12, |242 |flipdiff(1) |byta ordning på två | | |I:104 | | |lappar | |----------+------+-------+-------------+-----------------------| | |V:12, | | |visa vilka filer som | |patchutils|I:104 |242 |grepdiff(1) |har ändrats av en patch| | | | | |som matchar en regex | |----------+------+-------+-------------+-----------------------| | |V:12, | | |visa skillnader mellan | |patchutils|I:104 |242 |interdiff(1) |två enhetliga | | | | | |diff-filer | |----------+------+-------+-------------+-----------------------| |patchutils|V:12, |242 |lsdiff(1) |visa vilka filer som | | |I:104 | | |ändras av en patch | |----------+------+-------+-------------+-----------------------| | | | | |räkna om räkningar och | |patchutils|V:12, |242 |recountdiff |förskjutningar i | | |I:104 | |(1) |enhetliga sammanhang | | | | | |diffs | |----------+------+-------+-------------+-----------------------| | |V:12, | | |fixa offsets och counts| |patchutils|I:104 |242 |rediff(1) |för en handredigerad | | | | | |diff | |----------+------+-------+-------------+-----------------------| | |V:12, | | |separera ut | |patchutils|I:104 |242 |splitdiff(1) |inkrementella | | | | | |korrigeringar | |----------+------+-------+-------------+-----------------------| | |V:12, | |packa uppdiff|demanglera lappar som | |patchutils|I:104 |242 |(1) |har blivit inplastade | | | | | |med ord | |----------+------+-------+-------------+-----------------------| | |V:0, | | |visa skillnader och slå| |dirdiff |I:1 |167 |dirdiff(1) |samman ändringar mellan| | | | | |katalogträd | |----------+------+-------+-------------+-----------------------| | |V:0, | | |jämför två filer ord | |docdiff |I:0 |554 |docdiff(1) |för ord / tecken för | | | | | |tecken | |----------+------+-------+-------------+-----------------------| |makepatch |V:0, |99 |makepatch(1) |generera utökade | | |I:0 | | |patchfiler | |----------+------+-------+-------------+-----------------------| |makepatch |V:0, |99 |applicera |tillämpa utökade | | |I:0 | |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:379,|50172 |git(7) |och distribuerade | | |I:598 | | |systemet för | | | | | |revisionskontroll | |----------------+------+-------+--------------+-------------------------| | |V:3, | | |GUI | |gitk |I:30 |2003 |gitk(1) |Git-repository-webbläsare| | | | | |med historik | |----------------+------+-------+--------------+-------------------------| |git-gui |V:1, |2508 |git-gui(1) |GUI för Git (Ingen | | |I:19 | | |historik) | |----------------+------+-------+--------------+-------------------------| |git-email |V:0, |1187 |git-send-email|skicka en samling patchar| | |I:11 | |(1) |som e-post från Git |     |----------------+------+-------+--------------+-------------------------| |git-buildpackage|V:1, |2030 |git-byggpaket |automatisera | | |I:8 | |(1) |Debian-paketering med Git| |----------------+------+-------+--------------+-------------------------| |dgit |V:0, |646 |dgit(1) |gits interoperabilitet | | |I:1 | | |med Debian-arkivet | |----------------+------+-------+--------------+-------------------------| |imediff |V:0, |348 |git-ime(1) |interaktivt git commit | | |I:0 | | |split hjälpverktyg | |----------------+------+-------+--------------+-------------------------| |stgit |V:0, |604 |stg(1) |quilt ovanpå git (Python)| | |I:0 | | | | |----------------+------+-------+--------------+-------------------------| |git-doc |I:12 |14238 |N/A |officiell dokumentation | | | | | |för Git | |----------------+------+-------+--------------+-------------------------| | | | | |"Git Magic", en mer | |gitmagic |I:0 |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-klon 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 | |ursprung |grenen branch_name (efterföljande anrop) | |gren_namn | | |--------------+------------------------------------------------| |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 fjärrkontroll -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 filnamn |å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 lägg till |lägga till en new_remote | |ny_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 hämta uppströms |skapa en lokal (eventuellt | |foo:uppströms-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:3, |1330 |Mercurial |distribuerad|DVCS i Python | | |I:27 | | | |och lite C | |----------+------+-------+----------+------------+---------------| | | | | | |DVCS med smart | |darcs |V:0, |48209 |Darcs |distribuerad|algebra av | | |I:3 | | | |patchar | | | | | | |(långsam) | |----------+------+-------+----------+------------+---------------| | | | | | |DVCS påverkad | |bzr |I:5 |28 |GNU Bazaar|distribuerad|av tla skriven | | | | | | |i Python | | | | | | |(historisk) | |----------+------+-------+----------+------------+---------------| | | | | | |DVCS | |tla |V:0, |1017 |GNU arkiv |distribuerad|huvudsakligen | | |I:0 | | | |av Tom Lord | | | | | | |(historisk) | |----------+------+-------+----------+------------+---------------| | | | | | |"CVS done |     | |V:10, | | | |right", nyare | |subversion|I:61 |4850 |Subversion|fjärr |standard för | | | | | | |fjärrstyrd VCS | | | | | | |(historisk) | |----------+------+-------+----------+------------+---------------| | | | | | |tidigare | |cvs |V:3, |4835 |CVS |fjärr |standard | | |I:28 | | | |fjärrstyrd VCS | | | | | | |(historisk) | |----------+------+-------+----------+------------+---------------| | | | | | |GUI-visning av | | |V:0, | | | |VCS (CVS, | |tkcvs |I:0 |34 |CVS, … |fjärr |Subversion, | | | | | | |RCS) | | | | | | |repository-träd| |----------+------+-------+----------+------------+---------------| | | | | | |"Unix SCCS | |rcs |V:1, |578 |RCS |lokal |gjort på rätt | | |I:10 | | | |sätt" | | | | | | |(historisk) | |----------+------+-------+----------+------------+---------------| | |V:0, | | | |klon av Unix | |cssc |I:0 |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:932,| | |textkodningskonverterare | |libc6 |I:999 |5678 |charset |mellan lokala av iconv(1) | | | | | |(fundamental) | |--------+------+-------+---------------------+-----------------------------| | | | | |textkodningskonverterare | |recode |V:1, |528 |teckenuppsättning+eol|mellan lokala språk | | |I:14 | | |(mångsidig, fler alias och | | | | | |funktioner) | |--------+------+-------+---------------------+-----------------------------| |konwert |V:1, |137 |charset |textkodningskonverterare | | |I:44 | | |mellan lokala språk (snyggt) | |--------+------+-------+---------------------+-----------------------------|     |nkf |V:0, |359 |charset |teckenuppsättningsöversättare| | |I:8 | | |för japanska | |--------+------+-------+---------------------+-----------------------------| |tcs |V:0, |518 |charset |teckenuppsättningsöversättare| | |I:0 | | | | |--------+------+-------+---------------------+-----------------------------| | |V:0, | | |ersätta accentuerade | |unaccent|I:0 |34 |charset |bokstäver med deras | | | | | |oaccentuerade motsvarighet | |--------+------+-------+---------------------+-----------------------------| | |V:0, | | |textformatkonverterare mellan| |tofrodos|I:13 |50 |eol |DOS och Unix: fromdos(1) och | | | | | |todos(1) | |--------+------+-------+---------------------+-----------------------------| | |V:0, | | |textformatkonverterare mellan| |macutils|I:0 |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 | |-------------+-------------------------------------------------| |Skift-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" |oexpanderad| +---------------------------------------------------------+     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:11, |2853 |html→text |HTML till text-omvandlare| | |I:151 | | |med kommandot "w3m -dump"| |---------+------+-------+---------------+-------------------------| | |V:4, | | |avancerad HTML till | |html2text|I:71 |298 |html→text |text-omvandlare (ISO | | | | | |8859-1) | |---------+------+-------+---------------+-------------------------| | |V:27, | | |HTML till text-omvandlare| |lynx |I:450 |1972 |html→text |med kommandot "lynx | | | | | |-dump" | |---------+------+-------+---------------+-------------------------| | |V:2, | | |HTML till text-omvandlare| |elinks |I:17 |1755 |html→text |med kommandot "elinks | | | | | |-dump" | |---------+------+-------+---------------+-------------------------| | |V:2, | | |HTML till text-omvandlare|     |links |I:22 |2321 |html→text |med kommandot "links | | | | | |-dump" | |---------+------+-------+---------------+-------------------------| | |V:0, | | |HTML-till-text-omvandlare| |links2 |I:11 |5466 |html→text |med kommandot "links2 | | | | | |-dump" | |---------+------+-------+---------------+-------------------------| | |V:15, | | |konvertera MSWord-filer | |catdoc |I:176 |682 |MSWord→text,TeX|till vanlig text eller | | | | | |TeX | |---------+------+-------+---------------+-------------------------| |antiword |V:0, |587 |MSWord→text,ps |konvertera MSWord-filer | | |I:7 | | |till vanlig text eller ps| |---------+------+-------+---------------+-------------------------| | |V:0, | | |ta bort | |unhtml |I:0 |40 |html→text |markeringstaggarna från | | | | | |en HTML-fil | |---------+------+-------+---------------+-------------------------| | |V:1, | | |omvandlare från | |odt2txt |I:27 |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:17, | | |konvertera källkod till| |vim-runtime |I:373 |37551 |highlight |HTML med ":source | | | | | |$VIMRUNTIME/syntax/ | | | | | |html.vim" | |----------------+------+-------+----------+-----------------------| | |V:0, | | |konverterare för | |cxref |I:0 |1191 |c→html |C-programmet till latex| | | | | |och HTML (C-språk) | |----------------+------+-------+----------+-----------------------| | |V:0, | | |konvertera många | |src2tex |I:0 |1799 |highlight |källkoder till TeX | | | | | |(C-språk) | |----------------+------+-------+----------+-----------------------| | | | | |konvertera många | | | | | |källkoder till HTML, | | |V:0, | | |XHTML, LaTeX, Texinfo, | |source-highlight|I:3 |2127 |highlight |ANSI | | | | | |färg-escape-sekvenser | | | | | |och DocBook-filer med | | | | | |markering (C++) | |----------------+------+-------+----------+-----------------------| | | | | |konvertera många | | |V:0, | | |källkoder till HTML-, | |highlight |I:3 |1412 |highlight |XHTML-, RTF-, LaTeX-, | | | | | |TeX- eller XSL-FO-filer|     | | | | |med markering (C++) | |----------------+------+-------+----------+-----------------------| |grc |V:0, |208 |text→färg |generisk färgläggare | | |I:6 | | |för allt (Python) | |----------------+------+-------+----------+-----------------------| | |V:10, | | |allmän | |pandoc |I:48 |193946 |text→någon|markup-omvandlare | | | | | |(Haskell) | |----------------+------+-------+----------+-----------------------| | | | | |Formatering av | |python3-docutils|V:13, |2009 |text→någon|ReStructured | | |I:53 | | |Text-dokument till XML | | | | | |(Python) | |----------------+------+-------+----------+-----------------------| | |V:0, | | |Formatering av | |markdown |I:7 |56 |text→html |Markdown-textdokument | | | | | |till (X)HTML (Perl) | |----------------+------+-------+----------+-----------------------| | |V:0, | | |AsciiDoc | |asciidoctor |I:5 |101 |text→någon|textdokumentformaterare| | | | | |till XML/HTML (Ruby) | |----------------+------+-------+----------+-----------------------| | | | | |ReStructured | |python3-sphinx |V:7, |2996 |text→någon|Text-baserat system för| | |I:27 | | |publicering av dokument| | | | | |(Python) | |----------------+------+-------+----------+-----------------------| | | | | |Markdown-baserat system| |hugo |V:0, |61446 |text→html |för publicering av | | |I:5 | | |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.         Den grundläggande syntaxen för ett XML-element märks upp enligt följande.     content     XML-element med tomt innehåll märks upp i följande korta form.         Attributet "attribute="value"" i exemplen ovan är valfritt.     Kommentarsfältet i XML är markerat enligt följande.     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| |-------------------+-------------------------------| |" |": offert | |-------------------+-------------------------------|     |' |': apostrof | |-------------------+-------------------------------| |< |<: mindre än | |-------------------+-------------------------------| |> |>: större än | |-------------------+-------------------------------| |& |& : 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 "". 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|I:420 |2126 |xml |XML-dokumenttypdefinition | | | | | |(DTD) för DocBook | |-----------+------+-------+------+-----------------------------| | | | | |XSL-stilmallar för | |docbook-xsl|V:14, |14823 |xml/ |bearbetning av DocBook XML | | |I:152 | |xslt |till olika utdataformat med | | | | | |XSLT | |-----------+------+-------+------+-----------------------------| | |V:16, | | |XSLT kommandoradsprocessor | |xsltproc |I:77 |83 |xslt |(XML→ XML, HTML, vanlig text,|     | | | | |etc.) | |-----------+------+-------+------+-----------------------------| |xmlto |V:0, |124 |xml/ |XML-till-alla-konverterare | | |I:10 | |xslt |med XSLT | |-----------+------+-------+------+-----------------------------| |fop |V:0, |281 |xml/ |konvertera Docbook XML-filer | | |I:9 | |xsl-fo|till PDF | |-----------+------+-------+------+-----------------------------| | |V:1, | |xml/ |konvertera Docbook-filer till| |dblatex |I:6 |4636 |xslt |DVI-, PostScript-, | | | | | |PDF-dokument med XSLT | |-----------+------+-------+------+-----------------------------| |dbtoepub |V:0, |37 |xml/ |DocBook XML till | | |I:0 | |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:23 | | |DSSSL-processor (senaste) | |-------------+------+-------+------+---------------------------| | | | | |DSSSL-stilmallar för | |docbook-dsssl|V:0, |2594 |xml/ |bearbetning av DocBook XML |     | |I:9 | |dsssl |till olika utdataformat med| | | | | |DSSSL | |-------------+------+-------+------+---------------------------| | | | | |verktyg för DocBook-filer | | | | | |inklusive konvertering till| |docbook-utils|V:0, |287 |xml/ |andra format (HTML, RTF, | | |I:6 | |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, | | |omvandlare från | |man2html |I:1 |142 |manpage→html |manpage till HTML | | | | | |(CGI-stöd) | |---------+------+-------+-----------------+--------------------| | |V:0, | | |omvandlare från | |doclifter|I:0 |473 |troff→xml |troff till DocBook | | | | | |XML | |---------+------+-------+-----------------+--------------------| |texi2html|V:0, |1847 |texi→html |omvandlare från | | |I:3 | | |Texinfo till HTML | |---------+------+-------+-----------------+--------------------| | |V:0, | | |konverterare från |     |info2www |I:1 |74 |info→html |GNU info till HTML | | | | | |(CGI-stöd) | |---------+------+-------+-----------------+--------------------| | | | | |dokumentkonverterare| |wv |V:0, |733 |MSWord→någon |från Microsoft Word | | |I:2 | | |till HTML, LaTeX, | | | | | |etc. | |---------+------+-------+-----------------+--------------------| | |V:0, | | |dokumentkonverterare| |unrtf |I:3 |159 |rtf→html |från RTF till HTML, | | | | | |etc | |---------+------+-------+-----------------+--------------------| | | | | |WordPerfect 5.0- och| |wp2x |V:0, |200 |WordPerfect→något|5.1-filer till TeX, | | |I:0 | | |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:62, |205 |xml↔html↔xhtml|xmllint(1) | | |I:217 | | |(syntaxkontroll, | | | | | |omformatering, | | | | | |lint, ...) | |-------------+------+-------+--------------+-------------------|     |tidy |V:1, |79 |xml↔html↔xhtml|HTML syntaxkontroll| | |I:8 | | |och omformatering | |-------------+------+-------+--------------+-------------------| | |V:0, | | |syntax och minimal | |weblint-perl |I:1 |32 |ludd |stilkontroll för | | | | | |HTML | |-------------+------+-------+--------------+-------------------| | | | | |verktyg för | | |V:0, | | |kontroll av | |linklint |I:0 |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|I:30 |56 |(La) |TeX-system för sättning, | | | | |TeX |förhandsgranskning och utskrift | |-------+------+-------+------+---------------------------------| |groff |V:1, |20577 |troff |GNU troff textformateringssystem | | |I:27 | | | | +---------------------------------------------------------------+ 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, | | |konverterare från | |docbook-to-man|I:6 |189 |SGML→manusida|DocBook SGML till | | | | | |roff man-makron | |--------------+------+-------+-------------+-------------------| | |V:0, | | |automatisk |     |help2man |I:6 |542 |text→manpage |generator av | | | | | |manpage från --help| |--------------+------+-------+-------------+-------------------| | |V:0, | | |omvandlare från GNU| |info2man |I:0 |134 |info→manpage |info till POD eller| | | | | |man pages | |--------------+------+-------+-------------+-------------------| | |V:0, | | |konvertera platt | |txt2man |I:0 |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:149,|183 |GPL Ghostscript PostScript/ | | |I:578 | |PDF-tolk | |-------------------+------+-------+----------------------------| | | | |GPL Ghostscript PostScript/ | |ghostscript-x |I:19 |87 |PDF-tolk - Stöd för | | | | |X-display |     |-------------------+------+-------+----------------------------| |libpoppler147 |V:149,|4891 |Bibliotek för PDF-rendering | | |I:250 | |från PDF-tittaren xpdf | |-------------------+------+-------+----------------------------| | |V:134,| |Bibliotek för PDF-rendering | |libpoppler-glib8t64|I:246 |550 |(GLib-baserat delat | | | | |bibliotek) | |-------------------+------+-------+----------------------------| | |V:161,| |CMaps för | |poppler-data |I:599 |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:131,| | |PDF-verktyg: pdftops, | |poppler-utils|I:485 |760 |pdf→ps,text,…|pdfinfo, pdfimages, | | | | | |pdftotext, pdffonts | |-------------+------+-------+-------------+------------------------| |psutils |V:3, |34 |ps→ps |Verktyg för konvertering| | |I:55 | | |av PostScript-dokument | |-------------+------+-------+-------------+------------------------| |poster |V:0, |58 |ps→ps |skapa stora affischer av| | |I:1 | | |PostScript-sidor | |-------------+------+-------+-------------+------------------------| | |V:0, | |text→ps, |konvertera ASCII-text | |enscript |I:11 |2138 |html, rtf |till PostScript, HTML, | | | | | |RTF eller Pretty-Print | |-------------+------+-------+-------------+------------------------| | |V:0, | | |"Allt till | |a2ps |I:7 |4083 |text→ps |PostScript"-konverterare| | | | | |och pretty-printer | |-------------+------+-------+-------------+------------------------| |pdftk |I:27 |28 |pdf→pdf |Verktyg för konvertering| | | | | |av PDF-dokument: pdftk | |-------------+------+-------+-------------+------------------------| |html2ps |V:0, |256 |html→ps |omvandlare från HTML | | |I:2 | | |till PostScript | |-------------+------+-------+-------------+------------------------| |gnuhtml2latex|V:0, |26 |html→latex |omvandlare från html | | |I:0 | | |till latex |     |-------------+------+-------+-------------+------------------------| | |V:0, | | |konvertera dokument från| |latex2rtf |I:2 |495 |latex→rtf |LaTeX till RTF som kan | | | | | |läsas av MS Word | |-------------+------+-------+-------------+------------------------| | | | | |konvertering från | |ps2eps |V:1, |95 |ps→eps |PostScript till EPS | | |I:35 | | |(Encapsulated | | | | | |PostScript) | |-------------+------+-------+-------------+------------------------| | | | | |Text till | |e2ps |V:0, |104 |text→ps |PostScript-omvandlare | | |I:0 | | |med stöd för japansk | | | | | |kodning | |-------------+------+-------+-------------+------------------------| |impose+ |V:0, |118 |ps→ps |PostScript-verktyg | | |I:1 | | | | |-------------+------+-------+-------------+------------------------| | | | | |skriver ut många | | |V:0, | | |källkoder (C, C++, Java,| |trueprint |I:0 |148 |text→ps |Pascal, Perl, Pike, Sh | | | | | |och Verilog) till | | | | | |PostScript. (C-språk) | |-------------+------+-------+-------------+------------------------| | |V:0, | | |omvandlare från PDF till| |pdf2svg |I:3 |33 |pdf→svg |skalbart | | | | | |vektorgrafikformat | |-------------+------+-------+-------------+------------------------| |pdftoipe |V:0, |74 |pdf→ipe |konverterare från PDF | | |I:0 | | |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:31 | | |(1), uudecode(1) | |---------+------+-------+-------+------------------------------| | |V:0, | | |kodning och avkodning av | |mpack |I:9 |109 |MIME |MIME-meddelanden: mpack(1) och|     | | | | |munpack(1) | |---------+------+-------+-------+------------------------------| | | | | |uppackning av MIME-bilagor av | |tnef |V:0, |103 |ms-tnef|typen "application/ms-tnef" | | |I:4 | | |som endast är ett | | | | | |Microsoft-format | |---------+------+-------+-------+------------------------------| | | | | |kodare och avkodare för | |uudeview |V:0, |105 |post |följande format: uuencode, | | |I:2 | | |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 |31 |jpeg, |undervisning i |     | | | |… |grafik och | | | | | |bildkonst. | |------------------------+------+-------+------+----------------| | | | |ttf, |metapaket för | |open-font-design-toolkit|I:0 |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:45, |32135 |bild |GNU-program för | | |I:232 | |(bitmap) |bildmanipulering | |----------------+------+-------+---------+----------------------| | | | | |GTK-baserad | |xsane |V:10, |1512 |bild |X11-frontend för SANE | | |I:135 | |(bitmap) |(Scanner Access Now | | | | | |Easy) | |----------------+------+-------+---------+----------------------| |scribus |V:1, |32052 |ps/pdf/ |Scribus DTP-editor | | |I:14 | |SVG/… | | |----------------+------+-------+---------+----------------------| |libreoffice-draw|V:92, |10985 |bild |LibreOffice | | |I:434 | |(vektor) |kontorspaket - ritning| |----------------+------+-------+---------+----------------------| |inkscape |V:12, |113183 |bild |SVG-redigerare | | |I:86 | |(vektor) |(skalbar vektorgrafik)| |----------------+------+-------+---------+----------------------| |dia |V:1, |4086 |bild |diagramredigerare | | |I:19 | |(vektor) |(Gtk) | |----------------+------+-------+---------+----------------------| | |V:0, | |bild |Möjlighet till | |xfig |I:9 |8511 |(vektor) |interaktiv generering | | | | | |av siffror enligt X11 | |----------------+------+-------+---------+----------------------| |gocr |V:0, |549 |bild→text|gratis OCR-programvara| | |I:4 | | | | |----------------+------+-------+---------+----------------------| |eog |V:35, |10310 |bild |Ögon av GNOME | | |I:176 | |(Exif) |grafikvisare program | |----------------+------+-------+---------+----------------------| |gthumb |V:3, |5152 |bild |bildvisare och | | |I:13 | |(Exif) |webbläsare (GNOME) | |----------------+------+-------+---------+----------------------| |geeqie |V:3, |2982 |bild |bildvisare med GTK | | |I:12 | |(Exif) | | |----------------+------+-------+---------+----------------------|     | |V:15, | |bild |digital | |shotwell |I:255 |6334 |(Exif) |fotoorganisator | | | | | |(GNOME) | |----------------+------+-------+---------+----------------------| |gwenview |V:39, |5988 |bild |bildvisare (KDE) | | |I:119 | |(Exif) | | |----------------+------+-------+---------+----------------------| |kamera |I:118 |982 |bild |stöd för digitalkamera| | | | |(Exif) |för KDE-applikationer | |----------------+------+-------+---------+----------------------| | |V:1, | |bild |program för hantering | |digikam |I:9 |302 |(Exif) |av digitala foton för | | | | | |KDE | |----------------+------+-------+---------+----------------------| |darktable |V:4, |35873 |bild |virtuellt ljusbord och| | |I:12 | |(Exif) |mörkrum för fotografer| |----------------+------+-------+---------+----------------------| |hugin |V:0, |6489 |bild |panorama foto stitcher| | |I:6 | |(Exif) | | |----------------+------+-------+---------+----------------------| |librecad |V:1, |9100 |DXF, ... |2D CAD-dataredigerare | | |I:15 | | | | |----------------+------+-------+---------+----------------------| |freecad |I:20 |110 |DXF, ... |3D CAD-dataredigerare | |----------------+------+-------+---------+----------------------| | |V:3, | |blend, |3D-innehållsredigerare| |blender |I:24 |92911 |TIFF, |för animering etc | | | | |VRML, … | | |----------------+------+-------+---------+----------------------| | |V:0, | |ms3d, |OpenGL-baserad | |mm3d |I:0 |4123 |obj, dxf,|3D-modellredigerare | | | | |… | | |----------------+------+-------+---------+----------------------| | |V:0, | |ttf, ps, |fontredigerare för | |fontforge |I:6 |4058 |… |PS-, TrueType- och | | | | | |OpenType-teckensnitt | |----------------+------+-------+---------+----------------------| | | | | |program för | |xgridfit |V:0, |878 |ttf |gridfitting och | | |I:0 | | |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 |I:295 |77 |bild(bitmap) |bildbehandlingsprogram | |-----------------+------+-------+------------------+------------------------| |graphicsmagick |V:1, |5816 |bild(bitmap) |bildmanipuleringsprogram| | |I:9 | | |(gaffel av imagemagick) | |-----------------+------+-------+------------------+------------------------| |netpbm |V:27, |8433 |bild(bitmap) |verktyg för grafisk | | |I:305 | | |konvertering | |-----------------+------+-------+------------------+------------------------| | | | | |konvertera HEIF (High | | | | | |Efficiency Image File | |libheif-examples |V:0, |412 |heif→jpeg(bitmap) |Format) till JPEG-, PNG-| | |I:3 | | |eller Y4M-format med | | | | | |kommandot heif-convert | | | | | |(1) | |-----------------+------+-------+------------------+------------------------| | | | | |konvertera MS | |icoutils |V:4, |221 |png↔ico(bitmapp) |Windows-ikoner och | | |I:36 | | |markörer till och från | | | | | |PNG-format(favicon.ico) | |-----------------+------+-------+------------------+------------------------| | | | | |Konvertera PostScript- | |pstoedit |V:1, |1076 |ps/pdf→bild |och PDF-filer till | | |I:43 | |(vektor) |redigerbar vektorgrafik | | | | | |(SVG) | |-----------------+------+-------+------------------+------------------------| | |V:4, | |Fönster/bild |Verktyg för konvertering| |libwmf-bin |I:92 |151 |(vektor) |av Windows-metafiler | | | | | |(vektorgrafikdata) | |-----------------+------+-------+------------------+------------------------| | |V:0, | | |konvertera XFig-filer | |fig2sxd |I:0 |151 |fig→sxd(vektor) |till OpenOffice.org Draw| | | | | |-format | |-----------------+------+-------+------------------+------------------------| | |V:1, | | |verktyg för | |unpaper |I:17 |417 |bild→bild |efterbehandling av | | | | | |skannade sidor för OCR | |-----------------+------+-------+------------------+------------------------| | |V:7, | | |gratis OCR-programvara | |tesseract-ocr |I:33 |2279 |bild→text |baserad på HP:s | | | | | |kommersiella OCR-motor | |-----------------+------+-------+------------------+------------------------| | |V:7, | | |OCR-motordata: | |tesseract-ocr-eng|I:33 |4032 |bild→text |tesseract-ocr-språkfiler| | | | | |för engelsk text |     |-----------------+------+-------+------------------+------------------------| |ocrad |V:0, |599 |bild→text |gratis OCR-programvara | | |I:2 | | | | |-----------------+------+-------+------------------+------------------------| | | | | |kommandoradsverktyg för | |exif |V:2, |335 |bild(Exif) |att visa | | |I:53 | | |EXIF-information i | | | | | |JPEG-filer | |-----------------+------+-------+------------------+------------------------| |exiv2 |V:1, |427 |bild(Exif) |Verktyg för hantering av| | |I:21 | | |EXIF/IPTC-metadata | |-----------------+------+-------+------------------+------------------------| |exiftran |V:0, |81 |bild(Exif) |omvandla digitalkamerans| | |I:12 | | |jpeg-bilder | |-----------------+------+-------+------------------+------------------------| | | | | |verktyg för att läsa | |exiftags |V:0, |309 |bild(Exif) |Exif-taggar från en | | |I:3 | | |JPEG-fil från en | | | | | |digitalkamera | |-----------------+------+-------+------------------+------------------------| |exifprobe |V:0, |502 |bild(Exif) |läsa metadata från | | |I:2 | | |digitala bilder | |-----------------+------+-------+------------------+------------------------| |dcraw |V:0, |428 |bild(Raw)→ppm |avkoda råa | | |I:8 | | |digitalkamerabilder | |-----------------+------+-------+------------------+------------------------| |findimagedupes |V:0, |76 |bild→fingeravtryck|hitta visuellt liknande | | |I:1 | | |eller duplicerade bilder| |-----------------+------+-------+------------------+------------------------| | |V:0, | | |sammanfoga bilder för | |ale |I:0 |818 |bild→bild |att öka återgivningen | | | | | |eller skapa mosaiker | |-----------------+------+-------+------------------+------------------------| | |V:0, | | |generera statiska | |imageindex |I:1 |143 |bild(Exif)→html |HTML-gallerier från | | | | | |bilder | |-----------------+------+-------+------------------+------------------------| |outguess |V:0, |230 |jpeg,png |universellt | | |I:1 | | |steganografiskt verktyg | |-----------------+------+-------+------------------+------------------------| |jpegoptim |V:0, |59 |jpeg |optimera JPEG-filer | | |I:6 | | | | |-----------------+------+-------+------------------+------------------------| |optipng |V:2, |187 |png |optimera PNG-filer, | | |I:44 | | |förlustfri komprimering | |-----------------+------+-------+------------------+------------------------| |pngquant |V:1, |62 |png |optimera PNG-filer, | | |I:10 | | |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:14 |150 |tgz→deb |utländska paketet till | | | | | |Debian-paketet | |---------+------+-------+---------+----------------------------|     | | | | |omvandlare från "Electric | | |V:0, | | |Book" (populärt i Japan) | |freepwing|I:0 |447 |EB→EPWING|till ett enda JIS X | | | | | |4081-format (en delmängd av | | | | | |EPWING V1) | |---------+------+-------+---------+----------------------------| |calibre |V:7, |65174 |alla→EPUB|e-bokskonverterare och | | |I:27 | | |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 fil.c.orig fil.c |diff -u fil.c{.orig,} | |-------------------------------+-------------------------------| |mkdir /foobar /foobaz |mkdir /foo{bar,baz} | |-------------------------------+-------------------------------| |funcname() { ... } |funktion 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-fil |filen finns | |-----------+---------------------------------------------------| |- d-fil |filen finns och är en katalog | |-----------+---------------------------------------------------| |-f fil |filen finns och är en vanlig fil | |-----------+---------------------------------------------------|     |- w-fil |filen finns och är skrivbar | |-----------+---------------------------------------------------| |-x fil |filen finns och är körbar | |-----------+---------------------------------------------------| |fil1 -nt |fil1 är nyare än fil2 (modifiering) | |fil2 | | |-----------+---------------------------------------------------| |fil1 -ot |fil1 är äldre än fil2 (modifiering) | |fil2 | | |-----------+---------------------------------------------------| |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:910, |207 |litet och snabbt | | |I:998 | |POSIX-kompatibelt skal för sh | |-------------+--------+-------+--------------------------------| |coreutils |V:897, |18457 |GNU:s centrala verktyg | | |I:999 | | | |-------------+--------+-------+--------------------------------| |grep |V:765, |1297 |GNU grep, egrep och fgrep | | |I:999 | | | |-------------+--------+-------+--------------------------------| |sed |V:801, |987 |GNU sed |     | |I:999 | | | |-------------+--------+-------+--------------------------------| |mawk |V:458, |296 |liten och snabb awk | | |I:997 | | | |-------------+--------+-------+--------------------------------| |debianutils |V:922, |225 |diverse verktyg som är specifika| | |I:998 | |för Debian | |-------------+--------+-------+--------------------------------| |bsdutils |V:429, |335 |grundläggande verktyg från | | |I:999 | |4.4BSD-Lite | |-------------+--------+-------+--------------------------------| |bsdextrautils|V:725, |361 |extra verktyg från 4.4BSD-Lite | | |I:841 | | | |-------------+--------+-------+--------------------------------| |moreutils |V:16, |231 |ytterligare Unix-verktyg | | |I:38 | | | +---------------------------------------------------------------+ 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:910,| |sh: litet och snabbt | |dash |I:998 |207 |POSIX-kompatibelt skal| | | | |för sh | |-------------------------+------+-------+----------------------| | |V:875,| |sh: "info bash" | |bash |I:999 |7273 |tillhandahålls av | | | | |bash-doc | |-------------------------+------+-------+----------------------| |mawk |V:458,|296 |AWK: liten och snabb | | |I:997 | |awk | |-------------------------+------+-------+----------------------| | |V:255,| |AWK: "info gawk" | |gawk |I:315 |3289 |tillhandahålls av | | | | |gawk-doc | |-------------------------+------+-------+----------------------| | | | |Perl: perl(1) och | | |V:673,| |html-sidor | |perl |I:990 |841 |tillhandahålls av | | | | |perl-doc och | | | | |perl-doc-html | |-------------------------+------+-------+----------------------| | |V:2, | |Perl-tillägg för GNU |     |libterm-readline-gnu-perl|I:28 |439 |ReadLine/History | | | | |Library: perlsh(1) | |-------------------------+------+-------+----------------------| |libreply-perl |I:0 |171 |REPL för Perl: svar(1)| |-------------------------+------+-------+----------------------| |libdevel-repl-perl |V:0, |237 |REPL för Perl: re.pl | | |I:0 | |(1) | |-------------------------+------+-------+----------------------| | | | |Python: python3(1) och| |python3 |V:714,|82 |html-sidor | | |I:969 | |tillhandahålls av | | | | |python3-doc | |-------------------------+------+-------+----------------------| | | | |Tcl: tcl(3) och | | |V:23, | |detaljerade | |tcl |I:188 |20 |manualsidor som | | | | |tillhandahålls av | | | | |tcl-doc | |-------------------------+------+-------+----------------------| | | | |Tk: tk(3) och | | |V:18, | |detaljerade | |tk |I:182 |20 |manualsidor som | | | | |tillhandahålls av | | | | |tk-doc | |-------------------------+------+-------+----------------------| |ruby |V:67, |32 |Ruby: ruby(1), erb(1),| | |I:171 | |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:217,|651 |xmessage(1): visa ett meddelande eller| | |I:565 | |en fråga i ett fönster (X) | |---------+------+-------+--------------------------------------| |whiptail |V:284,|62 |visar användarvänliga dialogrutor från| | |I:996 | |shell-skript (newt) | |---------+------+-------+--------------------------------------| |dialog |V:9, |493 |visar användarvänliga dialogrutor från|     | |I:85 | |shell-skript (ncurses) | |---------+------+-------+--------------------------------------| |zenity |V:77, |190 |visa grafiska dialogrutor från | | |I:355 | |skalskript (GTK) | |---------+------+-------+--------------------------------------| | |V:0, | |Shell Scripts Frontend Tool (wrapper | |ssft |I:0 |75 |för zenity, kdialog och dialog med | | | | |gettext) | |---------+------+-------+--------------------------------------| |gettext |V:51, |7165 |"/usr/bin/gettext.sh": översätt | | |I:234 | |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 , 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:134, |36 |GNU C-kompilator | | |I:565 | | | |----------------+-------+-------+------------------------------| | |V:266, | |GNU C-biblioteket: | |libc6-dev |I:585 |13574 |Utvecklingsbibliotek och | | | | |huvudfiler | |----------------+-------+-------+------------------------------| |g++ |V:53, |13 |GNU C++-kompilator | | |I:526 | | | |----------------+-------+-------+------------------------------| |libstdc++-14-dev|V:27, |24507 |GNU Standard C++ Library v3 | | |I:203 | |(utvecklingsfiler) | |----------------+-------+-------+------------------------------| |cpp |V:323, |18 |GNU C preprocessor | | |I:725 | | | |----------------+-------+-------+------------------------------| |gettext |V:51, |7165 |GNU:s | | |I:234 | |internationaliseringsverktyg | |----------------+-------+-------+------------------------------| |glade |V:0, |1613 |GTK-byggare för | | |I:3 | |användargränssnitt | |----------------+-------+-------+------------------------------| |valac |V:0, |532 |C#-liknande språk för |     | |I:3 | |GObject-systemet | |----------------+-------+-------+------------------------------| |flex |V:6, |1239 |LEX-kompatibel snabb generator| | |I:70 | |för lexikal analys | |----------------+-------+-------+------------------------------| |bison |V:6, |3118 |YACC-kompatibel | | |I:75 | |parser-generator | |----------------+-------+-------+------------------------------| |susv2 |I:0 |16 |hämta"The Single UNIX | | | | |Specifications v2" | |----------------+-------+-------+------------------------------| |susv3 |I:0 |16 |hämta"The Single UNIX | | | | |Specifications v3" | |----------------+-------+-------+------------------------------| |susv4 |I:0 |16 |hämta"The Single UNIX | | | | |Specifications v4" | |----------------+-------+-------+------------------------------| |golang |I:21 |12 |Go programmeringsspråk | | | | |kompilator | |----------------+-------+-------+------------------------------| |rustc |V:4, |13748 |Rust system | | |I:18 | |programmeringsspråk | |----------------+-------+-------+------------------------------| |gfortran |V:4, |15 |GNU Fortran 95-kompilator | | |I:53 | | | |----------------+-------+-------+------------------------------| |fpc |I:2 |104 |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 #include #include 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:6, |3118 |Generator för GNU LALR-parser | | |I:75 | | |     |------+-------+-------+----------------------------------------| |byacc |V:0, |263 |Generator för Berkeley LALR-parser | | |I:3 | | | |------+-------+-------+----------------------------------------| |btyacc|V:0, |251 |parsergenerator för backtracking baserad| | |I:0 | |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 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 |2833 |Asynkron Lint-motor för Vim 8 | | | | |och NeoVim | |---------------+------+-------+--------------------------------| |vim-syntastic |I:2 |1379 |Syntaxkontroll-hacks för vim | |---------------+------+-------+--------------------------------| |elpa-flycheck |V:0, |826 |modern on-the-fly syntaxkontroll| | |I:1 | |för Emacs | |---------------+------+-------+--------------------------------| |elpa-relint |V:0, |150 |Emacs Lisp regexp misstagssökare| | |I:0 | | | |---------------+------+-------+--------------------------------| |cppcheck-gui |V:0, |7682 |verktyg för statisk analys av C/| | |I:1 | |C++-kod (GUI) | |---------------+------+-------+--------------------------------| |shellcheck |V:2, |35220 |lint-verktyg för shell-skript | | |I:15 | | | |---------------+------+-------+--------------------------------| |pyflakes3 |V:2, |20 |passiv kontroll av Python | | |I:15 | |3-program | |---------------+------+-------+--------------------------------| |pylint |V:4, |2089 |Statisk kontroll av Python-kod | | |I:20 | | | |---------------+------+-------+--------------------------------| |perl |V:673,|841 |tolk med intern statisk | | |I:990 | |kodkontroll: B::Lint(3perl) | |---------------+------+-------+--------------------------------| |rubocop |V:0, |3247 |Analysator för statisk kod i | | |I:1 | |Ruby | |---------------+------+-------+--------------------------------| |clang-tidy |V:1, |22 |clang-baserat C++ linter-verktyg|     | |I:12 | | | |---------------+------+-------+--------------------------------| |splint |V:0, |2328 |verktyg för att statiskt | | |I:1 | |kontrollera C-program för buggar| |---------------+------+-------+--------------------------------| | |V:0, | |verktyg för att undersöka C/ | |flawfinder |I:0 |205 |C++-källkod och leta efter | | | | |säkerhetsbrister | |---------------+------+-------+--------------------------------| |black |V:4, |10138 |kompromisslös | | |I:16 | |Python-kodformaterare | |---------------+------+-------+--------------------------------| |perltidy |V:0, |3086 |Indenterare och omformaterare av| | |I:3 | |Perl-skript | |---------------+------+-------+--------------------------------| |indent |V:0, |438 |C-språk källkod | | |I:5 | |formateringsprogram | |---------------+------+-------+--------------------------------| |astyle |V:0, |769 |Källkodsindenter för C, C++, | | |I:2 | |Objective-C, C# och Java | |---------------+------+-------+--------------------------------| |bcpp |V:0, |114 |C(++) förskönare | | |I:0 | | | |---------------+------+-------+--------------------------------| |xmlindent |V:0, |52 |Omformatering av XML-ström | | |I:0 | | | |---------------+------+-------+--------------------------------| |global |V:0, |1923 |Verktyg för att söka och bläddra| | |I:1 | |i källkod | |---------------+------+-------+--------------------------------| |exuberant-ctags|V:1, |341 |skapa taggfilsindex för | | |I:14 | |källkodsdefinitioner | |---------------+------+-------+--------------------------------| |universal-ctags|V:1, |4238 |skapa taggfilsindex för | | |I:12 | |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:74, I:154|12478 |"info gdb" tillhandahålls av gdb-doc| |-----+-----------+-------+------------------------------------| |ddd |V:0, I:5 |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) tråd |få en backtrace för alla trådar för | |tillämpa alla bt |flertrådade program | |-----------------+---------------------------------------------| |(gdb) bt full |hämta parametrar som kom på stacken i | | |funktionsanrop |     |-----------------+---------------------------------------------| |(gdb) tråd gäller|få en backtrace och parametrar som en | |alla bt full |kombination av de föregående alternativen | |-----------------+---------------------------------------------| |(gdb) tråd gäller|få en backtrace och parametrar för topp | |alla bt full 10 |10-anrop för att skära bort irrelevanta | | |utdata | |-----------------+---------------------------------------------| |(gdb) ställa in |skriva logg över gdb-utdata till en fil | |loggning på |(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:266,| |mtrace(1): | |libc6-dev |I:585 |13574 |malloc-felsökningsfunktionalitet | | | | |i glibc | |--------------+------+-------+---------------------------------| |valgrind |V:5, |87847 |minnesfelsökare och profilerare | | |I:35 | | | |--------------+------+-------+---------------------------------| |electric-fence|V:0, |69 |malloc(3) felsökare |     | |I:2 | | | |--------------+------+-------+---------------------------------| |libdmalloc5 |V:0, |380 |bibliotek för minnesallokering | | |I:0 | |för felsökning | |--------------+------+-------+---------------------------------| | | | |bibliotek för att upptäcka | |duma |V:0, |297 |buffertöverskridanden och | | |I:0 | |-underskridanden i C- och | | | | |C++-program | |--------------+------+-------+---------------------------------| |leaktracer |V:0, |56 |minnesläcksökare för C++-program | | |I:0 | | | +---------------------------------------------------------------+ 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:126, |1762 |"info make" tillhandahålls av | | |I:566 | |make-doc | |-----------+-------+-------+-----------------------------------| |autoconf |V:28, |2197 |"info autoconf" tillhandahålls av | | |I:210 | |autoconf-doc | |-----------+-------+-------+-----------------------------------| |automake |V:28, |1933 |"info automake" tillhandahålls av | | |I:210 | |automake1.10-doc | |-----------+-------+-------+-----------------------------------|     |libtool |V:24, |1245 |"info libtool" tillhandahålls av | | |I:193 | |libtool-doc | |-----------+-------+-------+-----------------------------------| |cmake |V:18, |41613 |cmake(1) make-system med öppen | | |I:119 | |källkod och plattformsoberoende | |-----------+-------+-------+-----------------------------------| |ninja-build|V:7, |456 |ninja(1) litet byggsystem närmast i| | |I:51 | |anda till Make | |-----------+-------+-------+-----------------------------------| |meson |V:6, |4183 |meson(1) högproduktivt byggsystem | | |I:28 | |på toppen av ninja | |-----------+-------+-------+-----------------------------------| |xutils-dev |V:0, |1495 |imake(1), xmkmf(1), etc. | | |I:7 | | | +---------------------------------------------------------------+ 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,|841 |AWK→PERL |konvertera källkoder från | | |I:990 | | |AWK till PERL: a2p(1) | |---------+------+-------+---------+----------------------------|     | |V:0, | | |konvertera källkoder från | |f2c |I:2 |443 |FORTRAN→C|FORTRAN 77 till C/C++: f2c | | | | | |(1) | |---------+------+-------+---------+----------------------------| | |V:0, | | |konverterare från NASM | |intel2gas|I:0 |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.132)"     (2026-01-11 04:45:44 UTC) ger en bra startriktning för människor i Debians labyrint. A.2. Upphovsrättshistoria Debian Reference initierades av mig, Osamu Aoki , 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.132)" (2026-01-11 04:45:44     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.132)"     (2026-01-11 04:45:44 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.)