À quoi sert «chat»?

14

J'ai vu la commande cat apparaître dans certains trucs en ligne et j'étais curieux de savoir ce qui a catfait et à quoi cela sert dans le contexte de quelqu'un qui fait juste des trucs en ligne de commande simples.

cosmoflop12
la source

Réponses:

12

cat« s but principal est de con chat fichiers Enate. cat file1 file2 ...affichera le contenu de file, file2et les autres l'un après l'autre, comme si le contenu était dans un seul fichier. Voir la page de manuel :

NAME
       cat - concatenate and print files

Il est destiné à une utilisation où:

  • une commande cible ne peut pas lire les fichiers et vous devez lui passer plusieurs fichiers. Un exemple est l' trutilitaire. Normalement, avec un seul fichier, vous feriez:

    tr < file
    

    Mais avec plusieurs fichiers, la redirection ne peut pas être utilisée, vous devez donc faire:

    cat file1 file2 ... | tr
    
  • une commande cible peut lire à partir de plusieurs fichiers, mais son comportement peut changer lorsqu'elle reçoit plusieurs fichiers. Un exemple est wc, qui imprime les décomptes pour chaque fichier, ainsi que les noms de fichiers, où vous auriez pu vouloir juste le total, sans nom de fichier.

Rappelez - vous que la plupart des commandes que vous rencontrez ( grep, sed, awk, sort, ...) peut lire les fichiers parfaitement bien.

Si vous souhaitez afficher le contenu d'un fichier, utilisez un pager - lesset moresont tous deux parfaitement capables de présenter des fichiers à visualiser et sont beaucoup plus pratiques à utiliser.

muru
la source
La redirection peut très bien être utilisée avec plusieurs fichiers car vous pouvez la combiner avec la substitution de processus et de commande: < <(cat file[12]) trainsi que <<<$(cat file[12]) trles deux moyens parfaitement valides pour rediriger plusieurs fichiers. Bien sûr, vous avez également besoin catde cela, juste que la tuyauterie n'est pas le seul moyen.
dessert le
@dessert si vous devez être pédant, cette redirection n'utilise toujours qu'un seul fichier - le fichier représentant la sortie standard de la commande (ou stdin, si l'inverse). Bash ne prend pas en charge la véritable redirection multi-fichiers comme le fait zsh.
muru
9

catest l'une des commandes les plus utilisées sur les systèmes d'exploitation de type Unix. Il a trois fonctions liées aux fichiers texte:

  1. les afficher
  2. en combinant des copies
  3. en créer de nouveaux.
  4. Copier des fichiers

La syntaxe générale de cat est:

cat [options] [filenames] [-] [filenames]

Lecture de fichiers

L'utilisation la plus courante de cat est de lire le contenu des fichiers, et cat est souvent le programme le plus pratique à cet effet. Tout ce qui est nécessaire pour ouvrir un fichier texte à visualiser sur le moniteur d'affichage est de taper le mot chat suivi d'un espace et du nom du fichier puis d'appuyer sur la touche ENTER. Par exemple, ce qui suit affichera le contenu d'un fichier nommé file1:

cat file1

Enchaînement

Le deuxième rôle du chat est la concaténation. (Ceci est la source du nom curieux du chat.) Il n'y a aucun effet sur les fichiers originaux.

Par exemple, la commande suivante concaténera des copies du contenu des trois fichiers file1, file2 et file3:

cat file1 file2 file3

Le contenu de chaque fichier sera affiché sur l'écran du moniteur. Cette sortie pourrait tout aussi bien être redirigée à l'aide de l'opérateur de redirection de sortie vers un autre fichier, tel que file4, en utilisant les éléments suivants:

cat file1 file2 file3 > file4

Création de fichiers

Merci au commentaire @muru : cat est capable de créer de nouveaux fichiers en fonction de la fonction de redirection du shell et non de lui-même

Pour les petits fichiers, cela est souvent plus facile que d'utiliser vi, gedit ou d'autres éditeurs de texte. Cela se fait en tapant cat suivi de l'opérateur de redirection de sortie et du nom du fichier à créer, puis en appuyant ENTERet enfin en appuyant simultanément sur les touches Ctrl& d.

Par exemple, un nouveau fichier nommé file1 peut être créé en tapant

cat > file1

puis appuyez sur ENTERet appuyez simultanément sur les touches Ctrl& d.

PS1: Si un fichier nommé file1 existe déjà, il sera écrasé

PS2: vous pouvez ajouter au fichier quitté à l'aide de l' >>exemple d' opérateur d'ajout cat >> file1

Copier des fichiers

La commande cat peut également être utilisée ( selon la fonction de redirection du shell) pour créer un nouveau fichier et y transférer les données d'un fichier existant. Exemple: faites une copie du fichier oldfile.txt:

cat oldfile.txt > newfile.txt

Les références:

Maythux
la source
1
Re 3: catne crée pas ces fichiers - le shell est lorsque vous avez utilisé la redirection. Vous auriez aussi bien pu faire echo foo > file1.
muru
@muru Vous avez tout à fait raison, mais vous utilisez toujours la commande cat
Maythux
1
Non, ça ne l'est pas. Vous attribuez à catce qui est réellement fait par autre chose. Par exemple, faire less file1 > file2(ou grep '.*' file1 > fileou awk 1 file1 > file2ou ...) a le même effet. Idem pour 4. Ce ne sont que des abus.
muru
Je sais que je pourrais l'utiliser juste > fileet donner le même résultat, mais ne puis-je pas le considérer comme valide pour le faire avec un chat?!
Maythux
1
Vous pouvez, si vous spécifiez que cela catne crée pas le fichier. Dire catcrée ou copie le fichier est tout simplement faux.
muru
1

Il peut être utilisé pour afficher le contenu d'un fichier. Par exemple: cat "my file.txt". Vous pouvez également faire man catpour vous montrer les détails sur ce qui catpeut être utilisé.

Puneet Gill
la source
0

Voici une autre façon de créer des fichiers en utilisant la redirection shell (ou piping) et cat:

cat << EOF > foo.sh
#!/bin/sh
echo 'Hello World!'
EOF

cat << EOFaffichera les lignes suivantes jusqu'à ce que la chaîne EOFsoit rencontrée à nouveau. Ensuite >( >>) redirigera la sortie vers le fichier foo.sh. Alternativement, si vous devez créer un fichier en tant que root, vous pouvez diriger la sortie vers la commande tee( tee -a), exécutée par la commande sudo:

cat << EOF | sudo tee foo.sh && sudo chmod +x foo.sh
#!/bin/sh
HELLO='Hello World!'
echo "\$HELLO"
EOF
  • Ce qui précède rendra le fichier exécutable ( chmod +x) s'il est créé avec succès ( &&).
  • La signification spéciale de certains caractères (as $) doit être échappée (avec \) dans la sortie de cat.
pa4080
la source