Kapitel 10. Datahantering

Innehållsförteckning

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.2.3.1. Grafiskt gränssnitt för säkerhetskopiering
10.2.3.2. Montera händelsestyrd säkerhetskopiering
10.2.3.3. Timerhändelseutlöst 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

Verktyg och tips för att hantera binär- och textdata på Debian-systemet beskrivs.

[Varning] 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

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, I:999 3085 .tar tjära(1) standardarkiveraren (de facto-standard)
cpio V:321, I:998 1201 .cpio cpio(1) Unix System V-arkivering, använd med find(1)
binutils V:170, I:643 1118 .ar ar(1) arkiverare för skapande av statiska bibliotek
fastjar V:1, I:10 183 .burk fastjar(1) arkiveringsprogram för Java (zip-liknande)
pax V:6, I:10 167 .pax pax(1) ny POSIX-standardarkiverare, en kompromiss mellan tar och cpio
gzip V:890, I:999 256 .gz gzip(1), zcat(1), … GNU LZ77 komprimeringsverktyg (de facto-standard)
bzip2 V:165, I:971 113 .bz2 bzip2(1), bzcat(1), … Burrows-Wheeler block-sorterande komprimeringsverktyg med högre komprimeringsgrad än gzip(1) (långsammare än gzip med liknande syntax)
lzma V:0, I:12 349 .lzma lzma(1) LZMA-komprimeringsverktyg med högre komprimeringsgrad än gzip(1) (föråldrad)
xz-utils V:311, I:980 1475 .xz xz(1), xzdec(1), … XZ-komprimeringsverktyg med högre komprimeringsgrad än bzip2(1) (långsammare än gzip men snabbare än bzip2; ersättning för LZMA-komprimeringsverktyg )
zstd V:132, I:760 2312 .zstd zstd(1), zstdcat(1), … Zstandard verktyg för snabb förlustfri komprimering
p7zip V:8, I:259 8 .7z 7zr(1), p7zip(1) 7-Zip filarkiveringsprogram med hög komprimeringsgrad(LZMA-komprimering)
p7zip-full V:28, I:280 12 .7z 7z(1), 7za(1) 7-Zip filarkiveringsprogram med hög komprimeringsgrad(LZMA-komprimering och andra)
lzop V:12, I:139 164 .lzo lzop(1) LZO-komprimeringsverktyg med högre komprimerings- och dekomprimeringshastighet än gzip(1) (lägre komprimeringsgrad än gzip med liknande syntax)
zip V:48, I:372 627 .zip zip(1) InfoZIP: DOS arkiv- och komprimeringsverktyg
unzip V:107, I:762 387 .zip packa upp(1) InfoZIP: DOS verktyg för avarkivering och dekomprimering

[Varning] Varning

Ange inte variabeln "$TAPE" om du inte vet vad du kan förvänta dig. Den ändrar tar(1):s beteende.

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] Tips

rsync(8) och GNU cp(1) har alternativet "-u" för att hoppa över filer som är nyare på mottagaren.

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] 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.

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] 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] 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] 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] 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] 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.

Flyttbara lagringsenheter kan vara något av följande.

De kan anslutas via något av följande.

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] Tips

Automountade enheter kan ha monteringsalternativet "uhelper=" som används av umount(8).

[Tips] 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] Tips

Valet av kodning kan behöva tillhandahållas som monteringsalternativ (se Avsnitt 8.1.3, ”Kodning av filnamn”).

[Tips] 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.

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.


[Tips] 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.

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] 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] 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] Tips

Mer information om filsystem och åtkomst till filsystem finns i"Filesystems HOWTO".

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] 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.

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.

  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

      • 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

      • 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”.)

      • 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

      • Hårdvaran (särskilt hårddisken) går sönder

      • Filsystemet kan skadas och data i det kan gå förlorade

      • Fjärrlagringssystem är inte tillförlitligt när det gäller säkerhetsöverträdelser

      • Svagt lösenordsskydd kan lätt avslöjas

      • Filbehörighetssystemet kan ha äventyrats

    • Resurser som krävs för backup: personal, hårdvara, mjukvara, …

      • Automatisk schemalagd säkerhetskopiering med cron-jobb eller systemd-timerjobb

[Tips] Tips

Du kan återställa debconf-konfigurationsdata med "debconf-set-selections debconf-selections" och dpkg-urvalsdata med "dpkg--set-selection <dpkg-selections.list".

[Notera] Notera

Säkerhetskopiera inte innehållet i pseudofilsystemet som finns i /proc, /sys, /tmp och /run (se Avsnitt 1.2.12, ”procfs och sysfs” och Avsnitt 1.2.13, ”tmpfs”). Om du inte vet exakt vad du gör är det enorma mängder värdelös data.

[Notera] Notera

Du kanske vill stoppa vissa applikationsdaemons, t.ex. MTA (se Avsnitt 6.2.4, ”Transportagent för post (MTA)”), medan du säkerhetskopierar data.

Här är en utvald lista över viktiga säkerhetskopieringsprogram som finns tillgängliga i Debian-systemet.

Tabell 10.5. Lista över verktyg för säkerhetskopiering

paket popcon storlek beskrivning
bacula-common V:6, I:7 2501 Bacula: säkerhetskopiering, återställning och verifiering av nätverk - vanliga supportfiler
bacula-client V:0, I:2 199 Bacula: säkerhetskopiering, återställning och verifiering av nätverk - metapaket för klienter
bacula-console V:0, I:2 112 Bacula: säkerhetskopiering, återställning och verifiering av nätverk - textkonsol
bacula-server I:0 199 Bacula: säkerhetskopiering, återställning och verifiering av nätverk - metapaket för server
amanda-common V:0, I:2 9851 Amanda: Avancerad Maryland automatisk nätverksdiskarkivering (Libs)
amanda-client V:0, I:2 1099 Amanda: Avancerad Maryland automatisk nätverksdiskarkivering (klient)
amanda-server V:0, I:0 1093 Amanda: Avancerad Maryland automatisk nätverksdiskarkivering (server)
backuppc V:1, I:1 3088 BackupPC är ett högpresterande, företagsklassat system för säkerhetskopiering av datorer (diskbaserad)
duplicity V:6, I:50 2649 (fjärr-)inkrementell säkerhetskopiering
deja-dup V:30, I:45 5031 GUI-frontend för duplicity
borgbackup V:12, I:27 3477 (fjärr)deduplicerande säkerhetskopiering
borgmatic V:3, I:4 946 borgbackup-hjälpare
rdiff-backup V:2, I:7 1207 (fjärr-)inkrementell säkerhetskopiering
restic V:4, I:9 24708 (fjärr-)inkrementell säkerhetskopiering
backupninja V:2, I:2 360 lättviktigt, utbyggbart meta-backup-system
slbackup V:0, I:0 147 (fjärr-)inkrementell säkerhetskopiering
backup-manager V:0, I:0 573 kommandoradsverktyg för säkerhetskopiering
backup2l V:0, I:0 110 verktyg för säkerhetskopiering/återställning med lågt underhåll för monterbara medier (diskbaserade)

Backup-verktyg har sina specialiserade fokusområden.

  • Mondo Rescue är ett backup-system som gör det möjligt att snabbt återställa hela systemet från backup-CD/DVD etc. utan att gå igenom normala systeminstallationsprocesser.

  • Bacula, Amanda och BackupPC är fullfjädrade verktyg för säkerhetskopiering som är inriktade på regelbundna säkerhetskopior över nätverk.

  • Duplicity och Borg är enklare backup-verktyg för vanliga arbetsstationer.

För en personlig arbetsstation kan fullfjädrade verktyg för säkerhetskopiering som är utformade för servermiljön inte fungera bra. Samtidigt kan befintliga verktyg för säkerhetskopiering för arbetsstationer ha vissa brister.

Här är några tips för att göra säkerhetskopiering enklare med minimala användarinsatser. Dessa tekniker kan användas med alla verktyg för säkerhetskopiering.

I demonstrationssyfte antar vi att den primära användaren och gruppnamnet är pingvin och skapar ett exempel på skript för säkerhetskopiering och ögonblicksbild "/usr/local/bin/bkss.sh" som:

#!/bin/sh -e
SRC="$1" # source data path
DSTFS="$2" # backup destination filesystem path
DSTSV="$3" # backup destination subvolume name
DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
  echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
fi
MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
if [ ! -d "$DSTFS/$DSTSV" ]; then
  btrfs subvolume create "$DSTFS/$DSTSV"
  mkdir -p "$DSTSS"
fi
rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"

Här används endast det grundläggande verktyget rsync(1) för att underlätta säkerhetskopiering av systemet och lagringsutrymmet utnyttjas effektivt av Btrfs.

[Tips] Tips

FYI: Den här författaren använder sitt eget liknande skalskript"bss: Btrfs Subvolume Snapshot Utility" för sin arbetsstation.

Här är ett exempel på hur du konfigurerar säkerhetskopiering med ett enda GUI-klick.

För varje GUI-klick säkerhetskopieras dina data från "~/Documents" till en USB-lagringsenhet och en skrivskyddad ögonblicksbild skapas.

Här är ett exempel på inställning för automatisk säkerhetskopiering som utlöses av mount-händelsen.

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".

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).

Infrastrukturen för datasäkerhet utgörs av en kombination av datakrypteringsverktyg, verktyg för sammanställning av meddelanden och signaturverktyg.


Se Avsnitt 9.9, ”Tips om datakryptering” om dm-crypt och fscrypt som implementerar infrastruktur för automatisk datakryptering via Linux-kärnmoduler.

Här följer GNU Privacy Guard-kommandon för grundläggande nyckelhantering.


Här är innebörden av förtroendekoden.


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".

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] 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.

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, I:716 242 patch(1) tillämpa en diff-fil på ett original
vim V:85, I:353 4077 vimdiff(1) jämföra 2 filer sida vid sida i vim
imediff V:0, I:0 348 imediff(1) interaktivt fullskärmsverktyg för 2/3-vägs sammanslagning
meld V:5, I:25 3546 meld(1) jämföra och sammanfoga filer (GTK)
wiggle V:0, I:0 175 vicka(1) tillämpa avvisade korrigeringar
diffutils V:879, I:997 1768 diff(1) jämföra filer rad för rad
diffutils V:879, I:997 1768 diff3(1) jämför och sammanfogar tre filer rad för rad
quilt V:1, I:19 885 quilt(1) hantera serier av korrigeringar
wdiff V:5, I:43 651 wdiff(1) visa ordskillnader mellan textfiler
diffstat V:10, I:106 79 diffstat(1) producera ett histogram av förändringar av diff
patchutils V:12, I:104 242 kombineradiff(1) skapa en kumulativ patch från två inkrementella patchar
patchutils V:12, I:104 242 dehtmldiff(1) extrahera en diff från en HTML-sida
patchutils V:12, I:104 242 filterdiff(1) extrahera eller exkludera diffar från en diff-fil
patchutils V:12, I:104 242 fixcvsdiff(1) åtgärda diff-filer skapade av CVS som patch(1) tolkar fel
patchutils V:12, I:104 242 flipdiff(1) byta ordning på två lappar
patchutils V:12, I:104 242 grepdiff(1) visa vilka filer som har ändrats av en patch som matchar en regex
patchutils V:12, I:104 242 interdiff(1) visa skillnader mellan två enhetliga diff-filer
patchutils V:12, I:104 242 lsdiff(1) visa vilka filer som ändras av en patch
patchutils V:12, I:104 242 recountdiff(1) räkna om räkningar och förskjutningar i enhetliga sammanhang diffs
patchutils V:12, I:104 242 rediff(1) fixa offsets och counts för en handredigerad diff
patchutils V:12, I:104 242 splitdiff(1) separera ut inkrementella korrigeringar
patchutils V:12, I:104 242 packa uppdiff(1) demanglera lappar som har blivit inplastade med ord
dirdiff V:0, I:1 167 dirdiff(1) visa skillnader och slå samman ändringar mellan katalogträd
docdiff V:0, I:0 554 docdiff(1) jämför två filer ord för ord / tecken för tecken
makepatch V:0, I:0 99 makepatch(1) generera utökade patchfiler
makepatch V:0, I:0 99 applicera patch(1) tillämpa utökade patchfiler

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.


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.

      • Kommandot git pull utför kommandot git merge eller git rebase efter kommandot git fetch.

      • 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)

      • 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.


Här är några Git-tips.

Tabell 10.13. Git-tips

Git-kommandoraden funktion
gitk --all se fullständig Git-historik och 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; git clean -x -d -f återställ alla ändringar i arbetsträdet och rensa upp dem helt
git rm --cached filnamn återställt staged index ändrat av git add filnamn
git reflog hämta referenslogg (användbart för att återskapa commits från den borttagna grenen)
git branch new_branch_name HEAD@{6} skapa en ny gren från reflog information
git remote lägg till ny_remote URL lägga till en new_remote fjärrförvaringsplats som pekas ut av URL
git remote rename origin upstream byt namn på fjärrförvaret från origin till upstream
git branch -u uppströms/branch_namn ställa in fjärrspårningen till fjärrförvaret upstream och dess grennamn branch_name.
git remote set-url ursprung https://foo/bar.git ändra URL för origin
git remote set-url --push uppströms AVSTÄNGD inaktivera push till upstream (redigera .git/config för att återaktivera)
git fjärruppdatering uppströms hämta uppdateringar av alla avlägsna grenar i uppströmsförvaret
git hämta uppströms foo:uppströms-foo skapa en lokal (eventuellt föräldralös) upstream-foo-gren som en kopia av foo-grenen i uppströmsarkivet
git checkout -b ämne_gren ; git push -u ämne_gren ursprung skapa en ny topic_branch och skicka den till origin
git branch -m gammaltnamn nyttnamn byt namn på lokal filial
git push -d origin branch_to_be_removed ta bort fjärrfilial (ny metod)
git push ursprung :branch_to_be_removed ta bort fjärrfilial (gammal metod)
git checkout --orphan oansluten skapa en ny oansluten filial
git rebase -i ursprung/main omorganisera/droppa/släcka åtaganden från origin/main för att rensa grenens historik
git reset HEAD^; git commit --amend sammanfoga de 2 senaste uppdragen till ett
git checkout ämne_gren ; git merge --squash ämne_gren pressa ihop hela topic_branch till en commit
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' konvertera en ytlig klon till en fullständig klon med alla grenar
git ime dela upp den senaste överföringen i en serie fil-för-fil mindre överföringar etc.(imediff-paketet krävs)
git repack -a -d; git prune packa om det lokala arkivet till ett enda paket (detta kan begränsa risken för förlorad dataåterställning från raderad filial etc.)

[Varning] 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] 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] Observera

Att anropa ett git-underkommando direkt som "git-xyz" från kommandoraden har varit föråldrat sedan början av 2006.

[Tips] 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.

Se följande.



[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.