GNU/Linux >> Belajar Linux >  >> Linux

Mengapa (dan Bagaimana) Apakah Menggunakan Cat Pada File Biner Merusak Terminal?

Jika saya mengerti cat manual dengan benar:

menggabungkan file dan mencetak pada output standar

cat akan mengambil file sebagai argumen dan mencetaknya pada output standar.
Yang tidak saya dapatkan adalah jika saya menggunakan perintah:

cat img.png > copy.png

Saya akan mendapatkan 2 file png identik sedangkan jika saya hanya

cat img.png  

Saya memiliki semua kemungkinan terminal saya menjadi kacau dan salah mengartikan apa yang saya ketik.

  • Bagaimana mungkin?
  • Nilai biner masih merupakan data biner. Mengapa tidak hanya menunjukkan serangkaian 0 dan 1 atau interpretasi data biner tersebut di ASCII atau apa pun pengkodean di terminal?
  • Apakah perilaku ini juga dimungkinkan oleh cat ing file teks yang berisi karakter aneh?
  • Haruskah mekanisme untuk mencegah perilaku ini seperti pernyataan try{}catch{} harus diimplementasikan?

Jawaban yang Diterima:

cat menggabungkan file yang diberikan sebagai argumen pada baris perintah ke output standar, ia membaca byte pada satu waktu dan sebagai default tidak melakukan interpretasi apa pun dari byte yang dibacanya.

Dalam contoh pertama Anda, Anda mengarahkan stdout ke file, itu sebabnya Anda mendapatkan file baru.

Dalam contoh kedua Anda, byte ditulis ke terminal, dan terminallah yang menafsirkan urutan karakter sebagai urutan kontrol untuk terminal, inilah mengapa Anda mendapatkan perilaku yang tidak biasa di terminal Anda. Ini tidak ada hubungannya dengan cat dengan demikian, cat tidak tahu apa yang akan Anda lakukan dengan outputnya. Anda mungkin mengirimkannya melalui pipa ke program lain untuk menafsirkan/memproses/mencetak atau memainkan “Menyanyi dalam hujan”.

Jadi mengikuti filosofi unix,

lakukan satu hal, lakukan satu hal saja, tetapi lakukan dengan baik

cat tidak boleh mencoba menebak-nebak apa yang Anda coba lakukan.

edit 1 balasan untuk komentar pertama @kiwy di bawah.

Ya dan Tidak, izinkan saya menjelaskan,

Tidak, jika Anda cat ke terminal, karena itu (perangkat lunak terminal) mengirimkan output ke layar Anda atau menafsirkan urutan kontrol (ini meniru perangkat keras lama yaitu perangkat teletipe ).

tapi,

Ya, jika Anda menggunakan pipa dan program yang menerima dapat menginterpretasikan karakter sebagai perintah.

Terkait:Dapatkan daftar semua file dengan topeng di terminal?

lihat cat ini sebagai contoh, cat anyOldShellScript | bash bash akan menafsirkan apa yang didapatnya sebagai perintah.


Linux
  1. Hapus file dan folder di terminal Linux

  2. wget vs curl:Cara Mengunduh File Menggunakan wget dan curl

  3. Cara mengecek OS dan versi menggunakan perintah Linux

  1. Cara Mengenkripsi dan Mendekripsi File dan Direktori Menggunakan Tar dan OpenSSL

  2. Cara Menghapus Direktori dan File Menggunakan Linux

  3. Bagaimana Cara Mengompres dan Mengekstrak File Menggunakan Perintah tar di Linux?

  1. Cara Menghapus File dan Direktori Menggunakan Baris Perintah Linux

  2. Cara mencari file dari Terminal di Linux

  3. Cara Backup dan Restore File menggunakan Deja Dup di Linux