GNU/Linux >> Belajar Linux >  >> Linux

Dd Vs Cat — Apakah Dd Masih Relevan Saat Ini?

Baru-baru ini saya menyadari bahwa kita dapat menggunakan cat sebanyak dd , dan sebenarnya lebih cepat dari dd

Saya tahu bahwa dd berguna dalam menangani kaset di mana ukuran blok benar-benar penting dalam kebenaran, bukan hanya kinerja. Namun, pada hari-hari ini, apakah ada situasi di mana dd bisa melakukan sesuatu cat tidak bisa? (Di sini saya akan menganggap perbedaan kinerja kurang dari 20% tidak relevan.)

Contoh konkret akan bagus!

Jawaban yang Diterima:

Secara tampilan, dd adalah alat dari sistem operasi IBM yang mempertahankan tampilan asingnya (penelusuran parameternya), yang melakukan beberapa fungsi yang sangat jarang digunakan (seperti konversi EBCDIC ke ASCII atau pembalikan endianness… bukan kebutuhan umum saat ini).

Dulu saya berpikir bahwa dd lebih cepat untuk menyalin blok data yang besar pada disk yang sama (karena penggunaan buffering yang lebih efisien), tetapi ini tidak benar, setidaknya pada sistem Linux saat ini.

Saya pikir beberapa dd Opsi ini berguna ketika berhadapan dengan kaset, di mana pembacaan benar-benar dilakukan dalam blok (driver kaset tidak menyembunyikan blok pada media penyimpanan seperti yang dilakukan driver disk). Tapi saya tidak tahu secara spesifik.

Satu hal dd dapat melakukan itu tidak dapat (dengan mudah) dilakukan oleh alat POSIX lainnya mengambil N byte pertama dari sebuah aliran. Banyak sistem dapat melakukannya dengan head -c 42 , tetapi head -c , meskipun umum, tidak ada di POSIX (dan tidak tersedia hari ini di misalnya OpenBSD). (tail -c adalah POSIX.) Juga, bahkan di mana head -c ada, itu mungkin membaca terlalu banyak byte dari sumbernya (karena menggunakan buffering stdio secara internal), yang merupakan masalah jika Anda membaca dari file khusus di mana hanya membaca memiliki efek. (GNU coreutils saat ini membaca jumlah pastinya dengan head -c , tetapi FreeBSD dan NetBSD menggunakan stdio.)

Secara umum, dd memberikan antarmuka ke file API yang mendasarinya yang unik di antara alat Unix:hanya dd dapat menimpa atau memotong file kapan saja atau mencari dalam sebuah file. (Ini adalah dd kemampuan uniknya, dan itu hebat; anehnya dd terkenal karena hal-hal yang dapat dilakukan alat lain.)

  • Kebanyakan alat Unix menimpa file keluarannya, yaitu menghapus isinya dan memulainya dari awal. Inilah yang terjadi ketika Anda menggunakan > pengalihan di shell juga.
  • Anda dapat menambahkan konten file dengan >> pengalihan di shell, atau dengan tee -a .
  • Jika Anda ingin mempersingkat file dengan menghapus semua data setelah titik tertentu , ini didukung oleh kernel dan C API yang mendasarinya melalui truncate fungsi, tetapi tidak diekspos oleh alat baris perintah apa pun kecuali dd :

    dd if=/dev/null of=/file/to/truncate seek=1 bs=123456  # truncate file to 123456 bytes
    
  • Jika Anda ingin menimpa data di tengah file, sekali lagi, ini dimungkinkan di API yang mendasarinya dengan membuka file untuk menulis tanpa memotong (dan memanggil lseek untuk pindah ke posisi yang diinginkan jika perlu), tetapi hanya dd dapat membuka file tanpa memotong atau menambahkan, atau mencari dari shell (contoh yang lebih kompleks).

    # zero out the second kB block in the file (i.e. bytes 1024 to 2047)
    dd if=/dev/zero of=/path/to/file bs=1024 seek=1 count=1 conv=notrunc
    

Jadi… Sebagai alat sistem, dd cukup banyak tidak berguna. Sebagai alat pemrosesan teks (atau file biner), ini cukup berharga!

Terkait:Hitung jumlah hari untuk pembayaran?
Linux
  1. Contoh Perintah Cat Penting di Linux

  2. Cat Line X Ke Line Y Pada File Besar?

  3. Perbedaan Antara Cat Dan '>' Untuk Menghilangkan File?

  1. Bagaimana Cara Cat File Dari Awk?

  2. 10 Contoh Perintah Cat untuk Mengelola File di Linux / UNIX

  3. temukan dan hapus file atau folder yang lebih lama dari x hari

  1. Apakah filosofi Linux masih relevan di tahun 2019?

  2. Keuntungan dari file cat'ing dan pemipaan ke grep

  3. Perintah Linux untuk menggabungkan file ke dirinya sendiri sebanyak n kali