Apa yang dihasilkan setelah menggunakan kucing pada gambar?

9

Katakanlah seseorang membuat file seperti:

touch myFile

Anda memasukkan beberapa teks di dalamnya dengan vim atau apa pun, dan kemudian gunakan cat myFileuntuk meludahkan konten ke terminal.

Sekarang, apa yang terjadi ketika saya menggunakan kucing pada gambar apa pun? Mengatakan,

cat myPNG.png

Saya hanya mendapatkan banyak sampah. Itu hanya membuat saya berpikir tentang apa yang catcoba dilakukan oleh perintah, dan dari mana semua "sampah" ini berasal. Hanya penasaran.

Qcom
sumber

Jawaban:

22

Mungkin bermanfaat untuk menjelaskan cara kerja file di level terendah:

File adalah aliran byte, panjangnya nol atau lebih. Satu byte adalah 8 bit. Karena ada 256 kombinasi 8 bit, itu artinya byte adalah angka dari 0 hingga 255. Jadi setiap file, pada level terendah, sebongkah besar angka mulai dari 0 hingga 255.

Ini sepenuhnya tergantung pada program dan pengguna untuk memutuskan apa arti angka "." Jika kita ingin menyimpan teks, maka mungkin ide yang baik untuk menggunakan angka sebagai kode, di mana setiap angka diberi huruf. Itulah yang dilakukan ASCII dan Unicode. Jika kita ingin menampilkan teks, maka itu mungkin ide yang baik untuk membangun perangkat atau menulis program yang dapat mengambil angka-angka ini dan menampilkan bitmap yang tampak seperti kode ASCII / Unicode yang sesuai. Itulah yang dilakukan terminal dan emulator terminal.

Tentu saja, untuk grafis, kami mungkin ingin angka mewakili piksel dan warnanya. Maka kita akan membutuhkan program yang menelusuri file, membaca semua byte, dan membuat gambar sesuai. Terminal emulator mengharapkan byte menjadi nomor ASCII / Unicode dan akan berperilaku berbeda, untuk potongan byte yang sama (atau file).

LawrenceC
sumber
Penjelasan yang bagus! Senang Anda turun ke level terendah.
Qcom
2
@BOSS Aku akan melempar definisi sedikit. Bit adalah Binary DIgit atau angka yang bisa menjadi satu atau nol. Satu bit memiliki dua kemungkinan atau 2 ^ 1 = 2. Dua bit dapat memiliki empat kombinasi atau 2 × 2 = 4. Lebih tepatnya, 2² = 4 untuk 2 digit. 8 Bit atau bit Biner dapat memiliki 2 ^ 8 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 kombinasi yang mungkin.
penguin359
2
Nitpick / pedantry minor: satu byte berukuran sewenang-wenang. Anda mungkin menemukan situasi di mana tidak 8 bit lebar. "Oktet" adalah terminologi yang disukai.
Chris Down
9

Cat membuang konten file input ke output standar, yang dalam hal ini adalah perangkat teks: jendela terminal Anda. Karena gambar terdiri dari data biner, apa yang Anda lihat adalah data biner mentah yang ditafsirkan seolah-olah itu adalah teks ASCII. Misalnya, byte dengan nilai 65 akan ditampilkan sebagai huruf besar A, 66 adalah huruf besar B, dll. Jika Anda membuka file dengan aplikasi yang mampu menafsirkan file gambar dengan benar, konten biner dari file tersebut akan ditampilkan sebagai gambar.

penyulap
sumber
OK keren. Terima kasih atas jawabannya. Anda menyebutkan "mode teks". Apakah ada mode lain untuk terminal standar? Atau, apakah satu-satunya cara lain untuk menafsirkannya seperti yang Anda katakan, melalui aplikasi yang dapat dengan benar membuat jenis file itu?
Qcom
4
@BOSS, tidak, saya percaya gordoco bermaksud mengatakan bahwa terminal adalah perangkat teks. Tujuan awal dari catadalah untuk menyatukan file seperti pada cat filea fileb > filec, jika Anda tidak transit melalui terminal (seperti dalam contoh ini) maka tidak masalah apakah file tersebut berupa teks atau biner. Di dunia unix, file biner dan teks disimpan sama, hanya file teks berisi set byte yang agak terbatas. Penggunaan umum cat adalah mengarahkan isi file ke perintah yang tidak menggunakan nama file sebagai parameter, tetapi menerima input dari input standar.
asoundmove
@BOSS, mengatakan file adalah file teks yang bertentangan dengan biner, hanya berarti bahwa konten biner file dapat diartikan sebagai teks. Dulu hal-hal sederhana, baik file itu ASCII atau bukan. Saat ini file tersebut dapat berupa beberapa format teks yang berbeda, termasuk ASCII, UTF8, UTF16 ... Pada hard drive semuanya adalah biner.
asoundmove
@asoundmove: Anda benar, saya seharusnya mengatakan perangkat teks, daripada istilah ambigu "mode teks". Saya telah mengedit respons saya.
juggler
Saya menggunakan cat pada bitmap sekarang dan dicetak ke terminal bukan hanya simbol ascii, tetapi juga karakter unicode (seperti "ڣ" dan "漥"). ada yang tahu ini kenapa?
Magnus