Bab 10. Manajemen data

Daftar Isi

10.1. Berbagi, menyalin, dan mengarsipkan
10.1.1. Alat arsip dan kompresi
10.1.2. Alat salin dan sinkronisasi
10.1.3. Idiom untuk arsip
10.1.4. Idiom untuk menyalin
10.1.5. Idiom untuk pemilihan berkas
10.1.6. Media arsip
10.1.7. Perangkat penyimpanan lepasan
10.1.8. Pilihan sistem berkas untuk berbagi data
10.1.9. Berbagi data melalui jaringan
10.2. Pencadangan dan pemulihan
10.2.1. Kebijakan pencadangan dan pemulihan
10.2.2. Keluarga utilitas pencadangan
10.2.3. Cadangan pribadi
10.3. Infrastruktur keamanan data
10.3.1. Manajemen kunci untuk GnuPG
10.3.2. Menggunakan GnuPG pada berkas
10.3.3. Menggunakan GnuPG dengan Mutt
10.3.4. Menggunakan GnuPG dengan Vim
10.3.5. The MD5 sum
10.3.6. Password keyring
10.4. Alat penggabungan kode sumber
10.4.1. Mengekstrak perbedaan untuk berkas sumber
10.4.2. Merging updates for source files
10.4.3. Interactive merge
10.5. Git
10.5.1. Konfigurasi klien Git
10.5.2. Perintah Git dasar
10.5.3. Tips Git
10.5.4. Referensi Git
10.5.5. Sistem kontrol versi lainnya

Alat dan tips untuk mengelola data biner dan teks pada sistem Debian dijelaskan.

[Awas] Awas

Akses tulis yang tidak terkoordinasi ke perangkat dan berkas yang diakses secara aktif dari berbagai proses tidak boleh dilakukan untuk menghindari kondisi race. Mekanisme penguncian berkas menggunakan flock(1) dapat digunakan untuk menghindarinya.

Keamanan data dan berbagi yang terkontrol memiliki beberapa aspek.

  • Pembuatan arsip data

  • Akses penyimpanan jarak jauh

  • Duplikasi

  • Pelacakan riwayat modifikasi

  • Memfasilitasi berbagi data

  • Pencegahan akses berkas tanpa otorisasi

  • Deteksi modifikasi berkas tanpa otorisasi

Ini dapat direalisasikan dengan menggunakan beberapa kombinasi alat.

  • Alat arsip dan kompresi

  • Alat salin dan sinkronisasi

  • Sistem berkas jaringan

  • Media penyimpanan lepasan

  • Secure shell

  • Sistem autentikasi

  • Alat sistem kontrol versi

  • Alat enkripsi hash dan kriptografi

Berikut adalah ringkasan alat kompresi dan arsip yang tersedia pada sistem Debian.

Tabel 10.1. Daftar alat arsip dan kompresi

paket popcon ukuran ekstensi perintah kommen
tar V:907, I:999 3152 .tar tar(1) pengarsip standar (standar de facto)
cpio V:383, I:998 1140 .cpio cpio(1) Pengarsipan gaya Unix System V, gunakan dengan find(1)
binutils V:148, I:652 99 .ar ar(1) pengarsip untuk pembuatan pustaka statis
fastjar V:2, I:22 183 .jar fastjar(1) pengarsip untuk Java (mirip zip)
pax V:11, I:20 170 .pax pax(1) pengarsip standar POSIX baru, kompromi antara tar dan cpio
gzip V:878, I:999 242 .gz gzip(1), zcat(1), … Utilitas kompresi GNU LZ77 (standar de facto)
bzip2 V:161, I:973 120 .bz2 bzip2(1), bzcat(1), … Utilitas kompresi pengurut blok Burrows-Wheeler dengan rasio kompresi yang lebih tinggi daripada gzip(1) (lebih lambat dari gzip dengan sintaks serupa)
lzma V:2, I:23 149 .lzma lzma(1) Utilitas kompresi LZMA dengan rasio kompresi yang lebih tinggi daripada gzip(1) (usang)
xz-utils V:436, I:980 612 .xz xz(1), xzdec(1), … Utilitas kompresi XZ dengan rasio kompresi yang lebih tinggi daripada bzip2(1) (lebih lambat dari gzip tetapi lebih cepat dari bzip2; pengganti utilitas kompresi LZMA)
zstd V:7, I:34 1898 .zstd zstd(1), zstdcat(1), … Zstandard utilitas kompresi lossless cepat
p7zip V:83, I:468 987 .7z 7zr(1), p7zip(1) Pengarsip berkas 7-Zip dengan rasio kompresi tinggi (kompresi LZMA)
p7zip-full V:116, I:478 4664 .7z 7z(1), 7za(1) Pengarsip berkas 7-Zipdengan rasio kompresi tinggi (kompresi LZMA dan lain-lain)
lzop V:14, I:120 164 .lzo lzop(1) Utilitas kompresi LZO dengan kompresi dan kecepatan dekompresi yang lebih tinggi daripada gzip(1) (rasio kompresi yang lebih rendah daripada gzip dengan sintaks serupa)
zip V:49, I:414 623 .zip zip(1) InfoZIP: Alat arsip dan kompresi DOS
unzip V:142, I:788 385 .zip unzip(1) InfoZIP: Alat pembuka arsip dan dekompresi DOS

[Awas] Awas

Jangan mengatur variabel "$TAPE" kecuali Anda tahu apa yang diharapkan. Itu mengubah perilaku tar(1).

Berikut adalah beberapa cara untuk menyalin seluruh konten direktori "./source" menggunakan alat-alat yang berbeda.

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . [email protected]:/dest

You can alternatively use "a trailing slash on the source directory" syntax.

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ [email protected]:/dest

Atau, dengan berikut.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . [email protected]:/dest

GNU cp(1) dan openSSH scp(1):

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . [email protected]:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh [email protected] '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

Anda dapat mengganti "." dengan "foo" untuk semua contoh yang mengandung "." untuk menyalin berkas dari direktori "./source/foo" ke direktori "/dest/foo".

Anda dapat mengganti "." dengan path absolut "/path/to/source/foo" untuk semua contoh yang mengandung "." untuk membuang " cd./source;". Ini menyalin berkas ke lokasi yang berbeda tergantung pada alat yang digunakan sebagai berikut.

  • "/dest/foo": rsync(8), GNU cp(1), dan scp(1)

  • "/dest/path/to/source/foo": GNU tar(1), dan cpio(1)

[Tip] Tip

rsync(8) dan GNU cp(1) memiliki opsi "-u" untuk melewatkan berkas yang lebih baru pada penerima.

find(1) digunakan untuk memilih berkas untuk perintah arsip dan salin (lihat Bagian 10.1.3, “Idiom untuk arsip” dan Bagian 10.1.4, “Idiom untuk menyalin”) atau untuk xargs(1) (lihat Bagian 9.4.9, “Mengulangi perintah atas berkas”). Ini dapat ditingkatkan dengan memakai argumen-argumen perintahnya.

Sintaks dasar find(1) dapat diringkas sebagai berikut.

  • Argumen bersyaratnya dievaluasi dari kiri ke kanan.

  • Evaluasi ini berhenti setelah hasilnya ditentukan.

  • "Logical OR" (specified by "-o" between conditionals) has lower precedence than "logical AND" (specified by "-a" or nothing between conditionals).

  • "Logical NOT" (specified by "!" before a conditional) has higher precedence than "logical AND".

  • "-prune" selalu mengembalikan TRUE logis dan, jika itu adalah direktori, pencarian berkas dihentikan di luar titik ini.

  • "-name" mencocokkan basis nama berkas dengan shell glob (lihat Bagian 1.5.6, “Glob shell”) tetapi juga mencocokkan "." awal dengan karakter-karakter meta seperti "*" dan "?". (Fitur POSIX baru)

  • "-regex" mencocokkan path lengkap dengan BRE gaya emacs (lihat Bagian 1.6.2, “Ekspresi reguler”) secara baku.

  • "-size" cocok dengan berkas berdasarkan ukuran berkas (nilai didahului dengan "+" untuk lebih besar, didahului dengan "-" untuk lebih kecil)

  • "-newer" cocok dengan berkas yang lebih baru dari yang ditentukan dalam argumennya.

  • "-print0" selalu mengembalikan TRUE logis dan mencetak nama berkas lengkap (diakhiri null) pada keluaran standar.

find(1) is often used with an idiomatic style as the following.

# 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

Ini berarti melakukan tindakan berikut.

  1. Cari semua berkas mulai dari "/path/to"

  2. Secara global membatasi pencariannya dalam sistem berkas awalnya dan menggunakan ERE (lihat Bagian 1.6.2, “Ekspresi reguler”) sebagai gantinya

  3. Exclude files matching regex of ".*\.cpio" or ".*~" from search by stop processing

  4. Exclude directories matching regex of ".*/\.git" from search by stop processing

  5. Exclude files larger than 99 Megabytes (units of 1048576 bytes) from search by stop processing

  6. Cetak nama berkas yang memenuhi kondisi pencarian di atas dan lebih baru dari "/path/to/timestamp"

Harap dicatat penggunaan idiomatik "-prune -o" untuk mengecualikan berkas dalam contoh di atas.

[Catatan] Catatan

Untuk sistem mirip Unix non-Debian, beberapa opsi mungkin tidak didukung oleh find(1). Dalam kasus seperti itu, silakan pertimbangkan untuk menyesuaikan metode yang cocok dan mengganti "-print0" dengan "-print". Anda mungkin perlu menyesuaikan perintah terkait juga.

Ketika memilih media penyimpanan data komputer untuk arsip data penting, Anda harus berhati-hati tentang keterbatasan mereka. Untuk cadangan data pribadi kecil, saya menggunakan CD-R dan DVD-R oleh perusahaan dengan merek terkenal dan menyimpan di lingkungan yang sejuk, teduh, kering, dan bersih. (Media arsip tape tampaknya populer untuk penggunaan profesional.)

[Catatan] Catatan

Brankas tahan api dimaksudkan untuk dokumen kertas. Sebagian besar media penyimpanan data komputer memiliki toleransi suhu yang lebih rendah daripada kertas. Saya biasanya mengandalkan beberapa salinan terenkripsi aman yang disimpan di beberapa lokasi aman.

Optimistic storage life of archive media seen on the net (mostly from vendor info).

  • 100+ tahun : Kertas bebas asam dengan tinta

  • 100 tahun : Penyimpanan optik (CD/DVD, CD/DVD-R)

  • 30 tahun : Penyimpanan magnetik (tape, floppy)

  • 20 tahun : Penyimpanan optik perubahan fase (CD-RW)

Ini tidak memperhitungkan kegagalan mekanis karena penanganan dll.

Siklus tulis optimis dari media arsip yang terlihat di internet (sebagian besar dari informasi vendor).

  • 250.000+ siklus : Harddisk drive

  • 10.000+ siklus : Memori flash

  • 1.000 siklus : CD/DVD-RW

  • 1 siklus : CD/DVD-R, kertas

[Perhatian] Perhatian

Angka masa penyimpanan dan siklus penulisan di sini tidak boleh digunakan untuk keputusan tentang penyimpanan data penting apa pun. Silakan berkonsultasi dengan informasi produk spesifik yang disediakan oleh produsen.

[Tip] Tip

Karena CD/DVD-R dan kertas hanya memiliki 1 siklus penulisan, mereka secara inheren mencegah kehilangan data yang tidak disengaja dengan menimpa. Ini adalah keuntungan!

[Tip] Tip

Jika Anda memerlukan cadangan data dalam jumlah besar dan sering, hard disk pada host jarak jauh yang dihubungkan oleh koneksi jaringan cepat, mungkin satu-satunya pilihan yang realistis.

[Tip] Tip

Jika Anda menggunakan media yang dapat ditulis ulang untuk cadangan Anda, penggunaan sistem berkas seperti btrfs atau zfs yang mendukung snapshot hanya baca mungkin merupakan ide yang baik.

Perangkat penyimpanan lepasan mungkin salah satu dari yang berikut ini.

Mereka dapat dihubungkan melalui salah satu dari yang berikut.

Lingkungan desktop modern seperti GNOME dan KDE dapat mengait perangkat lepasan ini secara otomatis tanpa entri "/etc/fstab" yang cocok.

  • Paket udisks2 menyediakan daemon dan utilitas terkait untuk mengait dan melepas kait perangkat-perangkat ini.

  • D-bus membuat kejadian-kejadian untuk memulai proses otomatis.

  • PolicyKit memberikan hak istimewa yang diperlukan.

[Tip] Tip

Automounted devices may have the "uhelper=" mount option which is used by umount(8).

[Tip] Tip

Automounting under modern desktop environment happens only when those removable media devices are not listed in "/etc/fstab".

Titik kait di bawah lingkungan desktop modern dipilih sebagai "/media/username/disk_label" yang dapat disesuaikan dengan hal-hal berikut.

  • mlabel(1) untuk sistem berkas FAT

  • genisoimage(1) dengan opsi "-V" untuk sistem berkas ISO9660

  • tune2fs(1) dengan opsi "-L" untuk sistem berkas ext2/ext3/ext4

[Tip] Tip

Pilihan pengodean mungkin perlu disediakan sebagai opsi kait (lihat Bagian 8.1.3, “Pengodean nama berkas”).

[Tip] Tip

Penggunaan menu GUI untuk melepas kait sistem berkas dapat menghapus node perangkat yang dihasilkan secara dinamis seperti "/dev/sdc". Jika Anda ingin menyimpan node perangkatnya, lepas kait dengan perintah umount(8) dari prompt shell.

Saat berbagi data dengan sistem lain melalui perangkat penyimpanan lepasan, Anda harus memformatnya dengan sistem berkas umum yang didukung oleh kedua sistem. Berikut adalah daftar pilihan sistem berkas.


[Tip] Tip

Lihat Bagian 9.9.1, “Enkripsi disk lepasan dengan dm-crypt/LUKS” untuk berbagi data lintas platform menggunakan enkripsi tingkat perangkat.

Sistem berkas FAT didukung oleh hampir semua sistem operasi modern dan cukup berguna untuk tujuan pertukaran data melalui media lepasan seperti hard disk.

Saat memformat perangkat lepasan seperti hard disk untuk berbagi data lintas platform dengan sistem berkas FAT, berikut ini harus menjadi pilihan yang aman.

Saat menggunakan sistem berkas FAT atau ISO9660 untuk berbagi data, berikut ini harus menjadi pertimbangan yang aman.

  • Pengarsipan berkas ke dalam berkas arsip terlebih dahulu menggunakan tar(1), atau cpio(1) untuk mempertahankan nama berkas yang panjang, taut simbolis, izin berkas Unix asli dan informasi pemilik.

  • Memecah berkas arsip menjadi potongan kurang dari 2 GiB dengan perintah split(1) untuk melindunginya dari batasan ukuran berkas.

  • Mengenkripsi berkas arsip untuk mengamankan isinya dari akses yang tidak sah.

[Catatan] Catatan

Untuk sistem berkas FAT dengan desainnya, ukuran berkas maksimum adalah (2^32 - 1) byte = (4GiB - 1 byte). Untuk beberapa aplikasi pada OS 32 bit yang lebih tua, ukuran berkas maksimum bahkan lebih kecil (2^31 - 1) byte = (2GiB - 1 byte). Debian tidak mengalami masalah yang terakhir.

[Catatan] Catatan

Microsoft sendiri tidak merekomendasikan untuk menggunakan FAT bagi drive atau partisi lebih dari 200 MB. Microsoft menyoroti kekurangannya seperti penggunaan ruang disk yang tidak efisien dalam "Overview of FAT, HPFS, and NTFS File Systems" mereka. Tentu saja, kita biasanya harus menggunakan sistem berkas ext4 untuk Linux.

[Tip] Tip

Untuk informasi lebih lanjut tentang sistem berkas dan mengakses sistem berkas, silakan baca Filesystems HOWTO".

Kita semua tahu bahwa komputer gagal suatu saat atau kesalahan manusia menyebabkan kerusakan sistem dan data. Operasi pencadangan dan pemulihan adalah bagian penting dari administrasi sistem yang sukses. Semua mode kegagalan yang mungkin menimpa Anda suatu hari nanti.

[Tip] Tip

Jaga sistem cadangan Anda sederhana dan seringlah mencadangkan sistem Andag. Memiliki data cadangan lebih penting daripada seberapa baik metode cadangan Anda secara teknis.

Ada 3 faktor kunci yang menentukan kebijakan pencadangan dan pemulihan yang sebenarnya.

  1. Mengetahui apa yang harus dicadangkan dan dipulihkan.

  2. Mengetahui cara membuat cadangan dan memulihkan.

    • Penyimpanan data yang aman: perlindungan dari penimpaan dan kegagalan sistem

    • Pencadangan yang sering: cadangan terjadwal

    • Cadangan redundan: mirroring data

    • Proses fool proof: pencadangan dengan perintah tunggal yang mudah

  3. Menilai risiko dan biaya yang terlibat.

    • Risiko data saat hilang

      • Data harus setidaknya pada partisi disk yang berbeda, sebaiknya pada disk dan mesin yang berbeda agar bertahan atas korupsi sistem berkas. Data penting paling baik disimpan pada sistem berkas hanya baca. [4]

    • Risk of data when breached

      • Sensitive identity data such as "/etc/ssh/ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" should be backed up as encrypted. [5] (See Bagian 9.9, “Tips enkripsi data”.)

      • Never hard code system login password nor decryption passphrase in any script even on any trusted system. (See Bagian 10.3.6, “Password keyring”.)

    • Mode kegagalan dan kemungkinannya

      • Perangkat keras (terutama HDD) akan rusak

      • Sistem berkas mungkin terkorupsi dan data di dalamnya mungkin hilang

      • Sistem penyimpanan jarak jauh tidak dapat dipercaya untuk pelanggaran keamanan

      • Perlindungan kata sandi yang lemah dapat dengan mudah dikompromikan

      • Sistem izin berkas mungkin terkompromi

    • Sumber daya yang diperlukan untuk membuat cadangan: manusia, perangkat keras, perangkat lunak, …

      • Pencadangan terjadwal otomatis dengan pekerjaan cron atau pekerjaan timer systemd

[Catatan] Catatan

Do not back up the pseudo-filesystem contents found on /proc, /sys, /tmp, and /run (see Bagian 1.2.12, “procfs dan sysfs” and Bagian 1.2.13, “tmpfs”). Unless you know exactly what you are doing, they are huge useless data.

[Catatan] Catatan

Anda mungkin ingin menghentikan beberapa daemon aplikasi seperti MTA (lihat Bagian 6.2.4, “Agen transportasi surat (mail transport agent/MTA)”) saat mencadangkan data.

Berikut adalah daftar keluarga utilitas pencadangan terkemuka yang tersedia di sistem Debian.

Tabel 10.5. Daftar utilitas keluarga pencadangan

paket popcon ukuran deskripsi
dump V:1, I:5 351 BSD 4.4 dump(8) dan restore(8) untuk sistem berkas ext2/ext3/ext4
xfsdump V:0, I:8 865 dump dan restore dengan xfsdump(8) dan xfsrestore(8) untuk sistem berkas XFS pada GNU/Linux dan IRIX
backupninja V:3, I:4 367 lightweight, extensible meta-backup system
bacula-common V:10, I:13 2158 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - berkas dukungan umum
bacula-client I:3 183 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - meta-paket klien
bacula-console V:1, I:4 107 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - konsol teks
bacula-server I:1 183 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - meta-paket server
amanda-common V:0, I:2 10090 Amanda: Advanced Maryland Automatic Network Disk Archiver (Pustaka)
amanda-client V:0, I:2 1149 Amanda: Advanced Maryland Automatic Network Disk Archiver (Klien)
amanda-server V:0, I:0 1117 Amanda: Advanced Maryland Automatic Network Disk Archiver (Server)
backup-manager V:0, I:1 571 alat pencadangan baris perintah
backup2l V:0, I:1 115 low-maintenance backup/restore tool for mountable media (disk based)
backuppc V:2, I:3 3184 BackupPC is a high-performance, enterprise-grade system for backing up PCs (disk based)
duplicity V:15, I:36 1867 (remote) incremental backup
flexbackup V:0, I:0 243 (remote) incremental backup
rdiff-backup V:5, I:13 769 (remote) incremental backup
restic V:2, I:4 21080 (remote) incremental backup
slbackup V:0, I:0 151 (remote) incremental backup

Alat cadangan memiliki fokus khusus mereka.

  • Mondo Rescue is a backup system to facilitate restoration of complete system quickly from backup CD/DVD etc. without going through normal system installation processes.

  • Bacula, Amanda, and BackupPC are full featured backup suite utilities which are focused on regular backups over network.

  • Regular backups of user data can be realized by a simple script (Bagian 10.2.3, “Cadangan pribadi”).

Basic tools described in Bagian 10.1.1, “Alat arsip dan kompresi” and Bagian 10.1.2, “Alat salin dan sinkronisasi” can be used to facilitate system backup via custom scripts. Such script can be enhanced by the following.

  • The restic package enables incremental (remote) backups.

  • The rdiff-backup package enables incremental (remote) backups.

  • The dump package helps to archive and restore the whole filesystem incrementally and efficiently.

[Tip] Tip

Lihat berkas-berkas di "/usr/share/doc/dump/" dan "Apakah dump benar-benar usang?" untuk mempelajari tentang paket dump.

For a personal Debian desktop system running testing suite, I only need to protect personal and critical data. I reinstall system once a year anyway. Thus I see no reason to backup the whole system or to install a full featured backup utility.

At the same time, it is very valuable to have frequent recent snapshots of personal data and system configuration, and occasional full backups of personal data.

I usually make these snapshots and backups with a simple shell script bss. This script is a short shell which uses standard utilities: btrfs subvolume snapshot, rsync. For data encryption, disk image is created by fallocate(1) and configured with cryptsetup(8).

[Tip] Tip

You can recover debconf configuration data with "debconf-set-selections debconf-selections" and dpkg selection data with "dpkg --set-selection <dpkg-selections.list".

The data security infrastructure is provided by the combination of data encryption tool, message digest tool, and signature tool.


Lihat Bagian 9.9, “Tips enkripsi data” pada dm-crypt dan fscrypt yang menerapkan infrastruktur enkripsi data otomatis melalui modul kernel Linux.

Berikut adalah perintah GNU Privacy Guard untuk manajemen kunci dasar.


Berikut adalah arti dari kode kepercayaan.


The following uploads my key "1DD8D791" to the popular keyserver "hkp://keys.gnupg.net".

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791

A good default keyserver set up in "~/.gnupg/gpg.conf" (or old location "~/.gnupg/options") contains the following.

keyserver hkp://keys.gnupg.net

The following obtains unknown keys from the keyserver.

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
  cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

There was a bug in OpenPGP Public Key Server (pre version 0.9.6) which corrupted key with more than 2 sub-keys. The newer gnupg (>1.2.1-2) package can handle these corrupted subkeys. See gpg(1) under "--repair-pks-subkey-bug" option.

md5sum(1) provides utility to make a digest file using the method in rfc1321 and verifying each file with it.

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
[Catatan] Catatan

The computation for the MD5 sum is less CPU intensive than the one for the cryptographic signature by GNU Privacy Guard (GnuPG). Usually, only the top level digest file is cryptographically signed to ensure data integrity.

Ada banyak alat gabungan untuk kode sumber. Perintah berikut menarik perhatian saya.

Tabel 10.10. Daftar alat penggabungan kode sumber

paket popcon ukuran perintah deskripsi
patch V:73, I:711 248 patch(1) menerapkan berkas diff ke yang asli
vim V:100, I:394 3546 vimdiff(1) membandingkan 2 berkas berdampingan di vim
imediff V:0, I:0 169 imediff(1) alat gabungan 2/3 arah layar penuh interaktif
meld V:14, I:37 3086 meld(1) membandingkan dan menggabungkan berkas (GTK)
wiggle V:0, I:0 174 wiggle(1) menerapkan patch yang ditolak
diffutils V:871, I:994 1598 diff(1) membandingkan berkas baris per baris
diffutils V:871, I:994 1598 diff3(1) membandingkan dan menggabungkan tiga berkas baris demi baris
quilt V:3, I:29 788 quilt(1) mengelola serangkaian patch
wdiff V:9, I:64 644 wdiff(1) menampilkan perbedaan kata antara berkas-berkas teks
diffstat V:15, I:139 81 diffstat(1) menghasilkan histogram perubahan oleh diff
patchutils V:18, I:136 232 combinediff(1) membuat patch kumulatif dari dua patch inkremental
patchutils V:18, I:136 232 dehtmldiff(1) mengekstrak diff dari halaman HTML
patchutils V:18, I:136 232 filterdiff(1) mengekstrak atau mengecualikan diff dari berkas diff
patchutils V:18, I:136 232 fixcvsdiff(1) fix diff files created by CVS that patch(1) mis-interprets
patchutils V:18, I:136 232 flipdiff(1) menukar urutan dua patch
patchutils V:18, I:136 232 grepdiff(1) menunjukkan berkas mana yang dimodifikasi oleh patch yang cocok dengan regex
patchutils V:18, I:136 232 interdiff(1) menunjukkan perbedaan antara dua berkas diff unified
patchutils V:18, I:136 232 lsdiff(1) menunjukkan berkas mana yang dimodifikasi oleh patch
patchutils V:18, I:136 232 recountdiff(1) recompute counts and offsets in unified context diffs
patchutils V:18, I:136 232 rediff(1) memperbaiki ofset dan cacah diff yang disunting dengan tangan
patchutils V:18, I:136 232 splitdiff(1) separate out incremental patches
patchutils V:18, I:136 232 unwrapdiff(1) demangle patches that have been word-wrapped
dirdiff V:0, I:2 166 dirdiff(1) display differences and merge changes between directory trees
docdiff V:0, I:0 555 docdiff(1) membandingkan dua berkas kata demi kata / huruf demi huruf
makepatch V:0, I:0 100 makepatch(1) generate extended patch files
makepatch V:0, I:0 100 applypatch(1) apply extended patch files

Git is the tool of choice these days for the version control system (VCS) since Git can do everything for both local and remote source code management.

Debian provides free Git services via Debian Salsa service. Its documentation can be found at https://wiki.debian.org/Salsa .

Berikut adalah beberapa paket terkait Git.


You may wish to set several global configuration in "~/.gitconfig" such as your name and email address used by Git by the following.

$ git config --global user.name "Name Surname"
$ git config --global user.email [email protected]

You may also customize the Git default behavior by the following.

$ git config --global init.defaultBranch main
$ git config --global pull.rebase true
$ git config --global push.default current

If you are too used to CVS or Subversion commands, you may wish to set several command aliases by the following.

$ git config --global alias.ci "commit -a"
$ git config --global alias.co checkout

You can check your global configuration by the following.

$ git config --global --list

Operasi Git melibatkan beberapa data.

  • The working tree which holds user facing files and you make changes to them.

    • The changes to be recorded must be explicitly selected and staged to the index. This is git add and git rm commands.

  • The index which holds staged files.

    • Staged files will be committed to the local repository upon the subsequent request. This is git commit command.

  • The local repository which holds committed files.

    • Git records the linked history of the committed data and organizes them as branches in the repository.

    • The local repository can send data to the remote repository by git push command.

    • The local repository can receive data from the remote repository by git fetch and git pull commands.

      • The git pull command performs git merge or git rebase command after git fetch command.

      • Here, git merge combines two separate branches of history at the end to a point. (This is default of git pull without customization and may be good for upstream people who publish branch to many people.)

      • Here, git rebase creates one single branch of sequential history of the remote branch one followed by the local branch one. (This is pull.rebase true customization case and may be good for rest of us.)

  • The remote repository which holds committed files.

    • The communication to the remote repository uses secure communication protocols such as SSH or HTTPS.

The working tree is files outside of the .git/ directory. Files inside of the .git/ directory hold the index, the local repository data, and some git configuration text files.

Here is an overview of main Git commands.


Berikut adalah tips Git.

Tabel 10.13. Tips Git

Baris perintah Git fungsi
gitk --all see complete Git history and operate on them such as resetting HEAD to another commit, cheery-picking patches, creating tags and branches ...
git stash get the clean working tree without loosing data
git remote -v memeriksa pengaturan untuk remote
git branch -vv memeriksa pengaturan untuk branch
git status menampilkan status pohon kerja
git config -l list git settings
git reset --hard HEAD; git clean -x -d -f revert all working tree changes and clean them up completely
git rm --cached namaberkas revert staged index changed by git add filename
git reflog get reference log (useful for recovering commits from the removed branch)
git branch nama_branch_baru HEAD@{6} membuat branch baru dari informasi reflog
git remote add remote_baru URL add a new_remote remote repository pointed by URL
git remote rename origin upstream rename the remote repository name from origin to upstream
git branch -u upstream/nama_branch set the remote tracking to the remote repository upstream and its branch name branch_name.
git remote set-url origin https://foo/bar.git change URL of origin
git remote set-url --push upstream DISABLED disable push to upstream (Edit .git/config to re-enable)
git checkout -b topic_branch ; git push -u topic_branch origin make a new topic_branch and push it to origin
git branch -m namalama namabaru mengganti nama nama cabang lokal
git push -d origin branch_yang_akan_dihapus menghapus branch remote (metode baru)
git push origin :branch_yang_akan_dihapus menghapus branch remote (metode lama)
git checkout --orphan unconnected membuat branch baru yang tidak terhubung
git fetch upstream foo:upstream-foo create a local (possibly orphan) upstream-foo branch as a copy of foo branch the upstream repository
git rebase -i origin/main reorder/drop/squish commits from origin/main to clean branch history
git reset HEAD^; git commit --amend squash last 2 commits into one
git checkout topic_branch ; git merge --squash topic_branch squash entire topic_branch into a commit
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' convert a shallow clone to the full clone of all branches
git ime split the last commit into a series of file-by-file smaller commits etc. (imediff package required)
git repack -a -d; git prune repack the local repository into single pack (this may limit chance of lost data recovery from erased branch etc.)

[Awas] Awas

Do not use the tag string with spaces in it even if some tools such as gitk(1) allow you to use it. It may choke some other git commands.

[Perhatian] Perhatian

If a local branch which has been pushed to remote repository is rebased or squashed, pushing this branch has risks and requires --force option. This is usually not an acceptable for main branch but may be acceptable for a topic branch before merging to main branch.

[Perhatian] Perhatian

Invoking a git subcommand directly as "git-xyz" from the command line has been deprecated since early 2006.

[Tip] Tip

If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command.

Lihat yang berikut.



[4] A write-once media such as CD/DVD-R can prevent overwrite accidents. (See Bagian 9.8, “Data biner” for how to write to the storage media from the shell commandline. GNOME desktop GUI environment gives you easy access via menu: "Places→CD/DVD Creator".)

[5] Sebagian data ini tidak dapat diregenerasi dengan memasukkan string masukan yang sama ke sistem.

[6] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly.