# Cat (Unix)

Het cat-commando, wat staat voor concatenate, is een standaardprogramma voor Unix-achtige systemen om een of meer bestanden en/of de standaardinvoer samen te voegen en af te drukken op de standaarduitvoer. Vaak wordt het in combinatie met een zogenaamde pipe gebruikt om de inhoud van een reeks bestanden te verwerken:
Op GNU-systemen is cat onderdeel van het pakket GNU Core Utilities.

## Geschiedenis

Cat maakte deel uit van de vroege versies van Unix, bijvoorbeeld versie 1, en verving pr, een hulpprogramma op de PDP-7 en in Multics voor het kopiëren van een enkel bestand naar het scherm. Het is geschreven door Ken Thompson en Dennis Ritchie. De versie van cat gebundeld in GNU coreutils is geschreven door Torbjörn Granlund en Richard Stallman. De versie voor ReactOS werd geschreven door David Welch, Semyon Novikov en Hermès Bélusca.
In de loop van de tijd kwamen er ook alternatieve hulpprogramma's zoals tac en bat beschikbaar, die verschillende nieuwe functies met zich meebrachten.

## Gebruik

Het hulpprogramma cat heeft een tweeledig doel: aaneenschakeling en afdrukken. Met een enkel argument wordt het vaak gebruikt om een bestand af te drukken naar de terminalemulator van de gebruiker (of historisch gezien naar een computerterminal of telex). Met meer dan één argument worden verschillende bestanden samengevoegd. Het gecombineerde resultaat wordt standaard ook naar de terminal geprint, maar vaak leiden gebruikers het resultaat om naar weer een ander bestand. Daarom is het afdrukken van een enkel bestand naar de terminal een speciale use-case van dit aaneenschakelingsprogramma. Toch is dit het meest voorkomende gebruik.
De Single Unix-specificatie definieert de werking van cat om bestanden te lezen in de volgorde die in de argumenten wordt gegeven, en schrijft hun inhoud in dezelfde volgorde naar de standaarduitvoer. De specificatie schrijft de ondersteuning van één optievlag voor, voor niet-gebufferde uitvoer, wat betekent dat elke byte wordt geschreven nadat deze is gelezen. Sommige besturingssystemen, zoals die welke GNU Core Utilities gebruiken, doen dit standaard en negeren de vlag.
Als een van de invoerbestandsnamen is opgegeven als een enkel koppelteken (-), leest cat op dat punt in de reeks van standaardinvoer. Als er geen bestanden zijn opgegeven, leest cat alleen van standaardinvoer.
De command-syntaxis is:
cat [opties] [file_names]

## Opties

Voorbeeld van enkele cat-opties:
* -b (GNU: --number-nonblank), nummer niet-lege uitvoerregels
* -e impliceert -v, maar geeft ook tekens aan het einde van de regel weer als $ (alleen GNU: -E hetzelfde, maar zonder -v te impliceren)
* -n (GNU: --getal), nummer alle uitvoerregels
* -s (GNU: --squeeze-blank), knijp meerdere aangrenzende witregels
* -t impliceert -v, maar geeft tabs ook weer als ^I (GNU: -T hetzelfde, maar zonder -v te impliceren)
* -u gebruik niet-gebufferde I/O voor stdout. POSIX specificeert het gedrag niet zonder deze optie.
* -v (GNU: --show-nonprinting), geeft niet-afdrukbare tekens weer, met uitzondering van tabs en het teken aan het einde van de regel

## Praktijkvoorbeelden

Cat kan worden gebruikt om een bestand door te sturen naar een programma dat platte tekst of binaire gegevens op de invoerstroom verwacht. Cat vernietigt geen niet-tekstbytes bij het samenvoegen en uitvoeren. Als zodanig zijn de twee belangrijkste gebruiksscenario's tekstbestanden en bepaalde indelingscompatibele typen binaire bestanden.
Aaneenschakeling van tekst is beperkt tot tekstbestanden die dezelfde verouderde codering gebruiken, zoals ASCII. Cat biedt geen manier om Unicode-tekstbestanden met een Byte Order Mark of bestanden met verschillende tekstcoderingen van elkaar samen te voegen.
Voor veel gestructureerde binaire gegevenssets is het resulterende gecombineerde bestand mogelijk niet geldig; als een bestand bijvoorbeeld een unieke kop- of voettekst heeft, zal het resultaat deze op een vreemde manier dupliceren. Voor sommige multimedia digitale containerformaten is het resulterende bestand echter geldig, en dus biedt cat een effectieve manier om bestanden toe te voegen. Videostreams kunnen een belangrijk voorbeeld zijn van bestanden die cat zonder problemen kan samenvoegen, bijvoorbeeld de MPEG-programmastream (MPEG-1 en MPEG-2) en DV-formaten (Digital Video), die in wezen eenvoudige pakketstromen zijn.
* ↑ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html. Gearchiveerd op 26 maart 2023.
* ↑ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
* ↑ cat(1): concatenate files/print on stdout - Linux man page (die.net)
* ↑ tac(1) - Linux manual page (man7.org)
* ↑ https://web.archive.org/web/20060617103249/http://www.bitsavers.org/pdf/bellLabs/unix/UNIX_ProgrammersManual_Nov71.pdf
* ↑ unix_prog_design.pdf (cat-v.org)
* ↑ cat invocation (GNU Coreutils 9.4)