Cat (Unix)

***cat*** adalah salah satu utilitas standar Unix yang digunakan untuk membaca file secara berurutan, dan mengeluarkannya sebagai output standar di dalam terminal (TTY). Nama ini berasal dari fungsinya, yaitu *(con)*'cat**enate'', yang dalam Bahasa Indonesia memiliki arti menggabungkan. ''<small>**cat*'</small>* telah diporting ke sejumlah sistem operasi lainnya.

## Sejarah
`[[Porting|cat]]` adalah bagian dari versi awal Unix. cat ditulis oleh Ken Thompson dan Dennis Ritchie. Versi `cat` yang dibundel di dalam GNU coreutils ditulis oleh Torbjorn Granlund dan Richard Stallman. Sedangkan untuk versi ReactOS ditulis oleh David Welch, Semyon Novikov, dan Hermès Bélusca.

## Penggunaan
Unix mendefinisikan perintah `cat` dengan cara membaca isi file dalam urutan yang susuai dengan argumen, dan kemudian mengeluarkan isinya dalam urutan yang sesuai dengan argumen yang telah diberikan. `cat` juga memiliki dukungan untuk *flag*, misalnya *flag* -*u* untuk output tanpa buffer. Itu berarti bahwa setiap byte ditulis setelah dibaca. Di dalam beberapa sistem operasi, seperti yang digunakan di dalam GNU Core Utilities, melakukan ini secara default dan mengabaikan *flag*.

Sintaks perintahnya adalah:
 cat [opsi] [nama_file]

### Opsi
Contoh beberapa *flag* `cat` :

*  (GNU: ), tampilkan nomer jika baris tidak kosong.
*  menyiratkan , tampikan karakter di akhir setiap akhir baris.  (Khusus GNU: *flag*  sama dengan `-e`, tapi tanpa menyiratkan ).
*  (GNU: ), tampilknan nomer di awal setiap baris.
*  (GNU: ), menghapus baris kosong bila ada lebih dari satu dan berdekatan.
*  menyiratkan , menyingkat tab menjadi  jika ada tab sebanyak dua kali. (GNU: *flag*  sama dengan `-t`, tapi tanpa menyiratkan ).
*  menggunakan *unbuffered* I/O untuk *[[:en:Standard streams|stdout]]*. POSIX tidak menentukan perilaku tanpa *flag* ini.
*  (GNU: ), paksa tampilkan karakter atau font yang tidak ada dalam ASCII ke dalam karakter yang tersedia di dalam ASCII, namun tidak berlaku untuk tab dan karakter di akhir baris.

## Penggunaan
`cat` dapat digunakan untuk menghubungkan file ke dalam program yang menggunakan teks biasa atau data biner pada inputnya. `cat` tidak menghancurkan byte non-teks saat menggabungkan dan mengeluarkan. Dengan demikian, dua kasus penggunaan utamanya adalah file teks dan jenis file biner yang kompatibel dengan format tertentu.

Penggabungan teks terbatas pada file teks yang menggunakan pengkodean lama, seperti ASCII. `cat` tidak menyediakan cara untuk menggabungkan file teks *Unicode* yang memiliki Tanda Urutan Byte atau file yang menggunakan penyandian teks yang berbeda satu sama lain. Dengan kata lain, `cat` hanya bisa menggunakan pengkodean lama seperti ASCII.

Jika ada banyak kumpulan data biner terstruktur, file gabungan yang dihasilkan mungkin tidak valid. Misalnya, jika sebuah file memiliki *header* atau *footer* yang unik, maka hasilnya akan menduplikasi ini secara palsu. Namun, untuk beberapa format file multimedia digital, file yang dihasilkan akan valid, sehingga `cat` menyediakan cara yang efektif untuk menambahkan karakter. Format video seperti, mkv/mp4/3gp/avi/dll, dapat menjadi contoh dari file yang dapat `cat` baca tanpa masalah.

## Contoh

## Budaya Unix

### Definisi file jargon
Pada File Jargon versi 4.4.7, dicantumkan beberapa hal sebagai definisi untuk `cat` :

### Penggunaan cat yang tidak berguna
Penggunaan `cat` yang tidak berguna atau u*seless use of cat* (*UUOC*), adalah jargon umum di Unix untuk baris perintah yang hanya menyediakan fungsi kenyamanan bagi pengguna. Dalam komputasi, kata "penyalahgunaan", dalam definisi kedua, digunakan untuk menghina penggunaa (user) yang berlebihan atau tidak perlu dalam penggunaan konstruksi bahasa. Dengan demikian, penyalahgunaan `cat` kadang-kadang disebut "*cat abuse"*. Contoh penyalahgunaan `cat` yang umum sebagi berikut:
 cat nama_file | command arg1 arg2 argn
Ini dapat ditulis ulang menggunakan redirection dan stdin. Sebagai gantinya, dalam salah satu bentuk berikut (yang pertama lebih tradisional):

  command arg1 arg2 argn cat tidak. Ini karena input *command* membuka file sebagai deskriptor file stdin yang dapat diakses sepenuhnya oleh *command*, sedangkan perintah `cat` hanya menyediakan data sebagai aliran byte.

Kasus umum lainnya adalah saat di mana `cat` tidak diperlukan ketika *command* beroperasi dengan menggunakan perintah stdin, namun akan membaca dari file jika nama file diberikan sebagai argumen. Ini adalah kasus untuk banyak perintah umum; contoh berikut,

  cat "$file" | grep "$pattern"
  cat "$file" | less

 `Sebagai gantinya dapat ditulis sebagai`
`grep "$pattern" "$file"`

`less "$file"`

 
Penggunaan umum dari `cat` untuk file adalah guna menampilkan konten file ke output standar. Namun, jika output disalurkan atau dialihkan, cat tidak diperlukan.

Perintah `cat` ditulis dengan *UUOC* mungkin masih lebih disukai karena alasan keterbacaan, mungkin karena membaca aliran sambungan dari kiri ke kanan lebih mudah untuk dikonseptualisasikan. Juga, jika salah dalam menggunakan simbol, yang harusnya " &#x3E; " malah menjadi " &#x3C; " (karena berdekatan di keyboard), maka dapat menghapus konten file secara permanen. Dengan kata lain clobbering, salah satu cara untuk menghindarinya adalah dengan menggunakan perintah `cat` engan karakter `[|]` atau bisa disebut *pipe*.

Bandingkan:
  command  out
   out
dengan:

`cat in | command | command > out`

## Lihat juga

* Paste
* split, perintah yang membagi file menjadi beberapa bagian yang kemudian dapat digabungkan kembali oleh cat.
* lebih sedikit

## Pranala luar

* 
* UNIX Style, or cat -v Considered Harmful - A paper by Rob Pike on proper Unix command design using cat as an example.
* cat(1) original manual page in the First Edition of Unix.
* 
* 
* 
* 
*