Untuk other uses of cat, lihat Cat (disambiguation) dan Cat.

***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. ***cat*** telah diporting ke sejumlah sistem operasi lainnya.

Sejarah
-------

`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` : 

* `-b` (GNU: `--number-nonblank`), tampilkan nomer jika baris tidak kosong.
* `-e` menyiratkan `-v`, tampikan karakter`$` di akhir setiap akhir baris. (Khusus GNU: *flag* `-E` sama dengan `-e`, tapi tanpa menyiratkan `-v`).
* `-n` (GNU: `--number`), tampilknan nomer di awal setiap baris.
* `-s` (GNU: `--squeeze-blank`), menghapus baris kosong bila ada lebih dari satu dan berdekatan.
* `-t` menyiratkan `-v`, menyingkat tab menjadi `^I` jika ada tab sebanyak dua kali. (GNU: *flag* `-T` sama dengan `-t`, tapi tanpa menyiratkan `-v`).
* `-u` menggunakan *unbuffered* I/O untuk *stdout*. POSIX tidak menentukan perilaku tanpa *flag* ini.
* `-v` (GNU: `--show-nonprinting`), 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
------

| `Memerintah` | Penjelasan |
| --- | --- |
| `cat file1.txt` | Tampilkan isi file. |
| `cat file1.txt file2.txt` | Gabungkan dua file dan tampilkan hasilnya di terminal. |
| `cat file1.txt file2.txt > file\_gabungan.txt` | Gabungkan dua file teks dan tulis ke dalam file teks baru. |
| `cat > file\_baru.txt` | Buat file bernama file\_baru.txt. Ketikan huruf atau karakter yang diinginkan dan kemudian tekan CTRL+D untuk keluar dari mode menulis. Teks yang sudah ditulis kemudian akan di masukan ke dalam file file\_baru.txt. |
| `cat -n file1.txt file2.txt > nama\_file.txt` | Beberapa pennggunaan cat dengan menggunakan opsi atau *flag* -n. *Flag* -n akan menampilkan nomor di setiap baris. |
| `cat file1.txt > file2.txt` | Salin konten dari file file1.txt ke file file2.txt. |
| `cat file1.txt >> file2.txt` | Tambahkan konten yang berasal file1.txt ke file2.txt. |
| `cat file1.txt file2.txt file3.txt | sort > file4.txt` | Menggabungkan file, mengurutkan setiap baris, dan menulis output ke dalam file yang baru dibuat. |
| `cat file1.txt file2.txt | less` | Jalankan *command* "less" dengan penggabungan file1 dan file2 sebagai inputnya. |
| `cat file1.txt | grep contoh\_text` | Tampilkan semua karakter yang berada di file1.txt dan kemudian filter atau saring supaya hanya menampilkan karakter atau kata "contoh" saja di dalam terminal. |
| `command | cat` | Batalkan perintah "*command*", misalnya *pagging*, ketika menulis secara langsung ke TTY |
|

Budaya Unix
-----------

### Definisi file jargon

Pada File Jargon versi 4.4.7, dicantumkan beberapa hal sebagai definisi untuk `cat` :

> # To spew an entire file to the screen or some other output sink without pause (syn. blast).
> 
> 
> 1. By extension, to dump large amounts of data at an unprepared target or with no intention of browsing it carefully. Usage: considered silly. Rare outside Unix sites. See also `dd`, BLT.
> 
> 
> Among Unix fans, `cat(1)` is considered an excellent example of user-interface design, because it delivers the file contents without such verbosity as spacing or headers between the files, and because it does not require the files to consist of lines of text, but works with any sort of data.
> 
> 
> 
> Among Unix critics, `cat(1)` is considered the canonical example of bad user-interface design, because of its woefully unobvious name. It is far more often used to blast a single file to standard output than to concatenate two or more files. The name `cat` for the former operation is just as unintuitive as, say, LISP's `cdr`.[*butuh rujukan*]
> 
> 
> 

### 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 <a href="https://en.wikipedia.org/wiki/Redirection\_(computing)" rel="mw:ExtLink" title="Redirection (computing)" class="cx-link" data-linkid="168">redirection</a> dan stdin. Sebagai gantinya, dalam salah satu bentuk berikut (yang pertama lebih tradisional):

```
 command arg1 arg2 argn < nama_file
 < nama_file command arg1 arg2 argn
```

Manfaat lainnya, input dari *command* memungkinkan untuk melakukan akses acak pada file, sedangkan contoh `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 "> "malah menjadi "< "(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 < in | command2 > out
 < in command | command2 > 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

1. ↑  `[[[:Templat:Man/die.net]] cat(Templat:Man/die.net)]` – Templat:Man/die.net
2. ↑  "reactos/cat.c at master · reactos/reactos · GitHub". *github.com*.
3. ↑  GNU Coreutils. "GNU Coreutils manual", *GNU*, Retrieved on 1 Mars 2017.
4. ↑  OpenBSD manual page and the GNU Core Utiltites version of cat
5. ↑  comp.unix.shell. "Early award example of UUOC (1994)", *comp.unix.shell via Google Groups*, Retrieved on 1 Mars 2017.
6. ↑  "Merriam Webster's Definition of Abuse". Diakses tanggal 2021-02-25.
7. ↑  Nguyen, Dan. "Stanford Computational Journalism Lab". stanford.edu. Diakses tanggal 2017-10-08.

Pranala luar
------------

* `[[[:Templat:Man/SUS]] cat(Templat:Man/SUS)]`: concatenate and print files – Templat:Man/SUS
* 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.
* `cat(1)`: concatenate and write files – GNU Coreutils reference
* `[[[:Templat:Man/OpenBSD]] cat(Templat:Man/OpenBSD)]`: concatenate and print files – Templat:Man/OpenBSD
* `[[[:Templat:Man/FreeBSD]] cat(Templat:Man/FreeBSD)]` – Templat:Man/FreeBSD
* `[[[:Templat:Man/Plan 9]] cat(Templat:Man/Plan 9)]` – Templat:Man/Plan 9
* `tac(1)`: concatenate and write files in reverse – GNU Coreutils reference

| * l
* b
* s
Program *shell* baku dan antarmuka baris perintah Unix |
| --- |
| Sistem berkas | 
* cat
* chmod
* chown
* chgrp
* cksum
* cmp
* cp
* dd
* du
* df
* file
* fuser
* ln
* ls
* mkdir
* mv
* pax
* pwd
* rm
* rmdir
* split
* tee
* touch
* type
* umask

 |
| Proses | 
* at
* bg
* crontab
* fg
* kill
* nice
* ps
* time

 |
| Lingkungan pengguna | 
* env
* exit
* logname
* mesg
* talk
* tput
* uname
* who
* write

 |
| Pemroses teks | 
* awk
* basename
* comm
* csplit
* cut
* diff
* dirname
* ed
* ex
* fold
* head
* iconv
* join
* m4
* more
* nl
* paste
* printf
* sed
* sort
* strings
* tail
* tr
* uniq
* vi
* wc
* xargs

 |
| Shell builtins | 
* alias
* cd
* echo
* test
* unset
* wait

 |
| Pencarian | 
* find
* grep

 |
| Dokumentasi | 
* man

 |
| Pengembangan perangkat lunak | 
* ar
* ctags
* lex
* make
* nm
* strip
* yacc

 |
| Lain-lain | 
* bc
* cal
* expr
* lp
* od
* sleep
* true and false

 |
| 
* Category **Kategori**
	+ Program standar Unix
	+ Utilitas Unix SUS2008
* List-Class article **Daftar**

 |

Templat:Core Utilities commands