author=D. Pellier, D. Janiszek, J. Mauclair
title=Memento Unix v1.0
======= Memento Unix =======
\newpage
Tout système Unix (Linux, BSD/Mac OS X, System V...) foisonne de commandes. Sans prétendre à l'exhaustivité, nous espérons ici résumer celles qui vous sont à la fois les plus utiles au quotidien et les plus génériques possibles. Les commandes spécifiques à un Unix particulier sont précisées, nous fournissons également le cas échéant les différences entre les shells Bourn/Korn **sh** **bash** **zsh** **ksh** et les C shells **csh** et **tsh**.
===== Aide =====
=== Obtenir de l'aide sur un sujet ===
$ man [section] sujet
\vspace{-10mm}
=== Lister les pages man parlant d'un sujet ===
$ man -k sujet
$ apropos sujet
\vspace{-10mm}
=== Afficher la page d'un manuel contenue dans le fichier pageman.X ===
$ groff - Tascii -man pageman.X | less
\vspace{-10mm}
=== Obtenir de l'aide sur un sujet (page info) ===
$ info sujet
\vspace{-5mm}
Les pages info sont presque exclusivement utilisées par les programmes de la FSF (Free Software Foundation) : qcc, ar, nm, objdump, ranlib, ld, libtool, autoconf, automake... Ils sont aussi dotés de pages man qui sont souvent obsolètes.
=== Référence des sections du man ===
- commandes
- appels système
- appels de bibliothèques
- interface noyau et drivers
- fichiers de configuration
- jeux
- standards
- commandes d'administration
- documentation du noyau
===== Confort et shells =====
=== Pour identifier l'interpréteur de commandes actif ===
$ echo $SHELL
\vspace{-10mm}
=== Pour changer d'interpréteur ===
$ chsh
\vspace{-10mm}
=== Les différents shells ===
^^ Shell ^ Commentaires ^
| ''/bin/sh'' | Le shell POSIX, anciennement Bourne shell. Peu tourné vers l'utilisation interactive, il est le seul à être standardisé. À préférer pour les scripts. **Attention:** sur les Unix tels que Linux ou Mac OS X, ''/bin/sh'' est un lien vers ''/bin/bash''.|
| ''/bin/ksh'' | Très répendu, le Korn shell est un Bourne shell amélioré pour l'utilisation interactive.|
| ''/bin/csh'' | Le C-shell est un shell utilisant une syntaxe proche du langage C. |
| ''bash'' | Shell standard sous Linux, le Bourne-again shell est un Bourne shell très amélioré au niveau de l'utilisation interactive.|
| ''tcsh'' | Un C-shell amélioré.|
| ''zsh'' | Shell peu répandu mais empruntant à bash et tcsh pour pousser plus loin les fonctionnalités et l'ergonomie interactive.|
**Attention:** Sur certain Unix, lorsque l'on configure pour root un shell qui n'est pas sur la partition racine, on rend le monde mono-utilisateur inutilisable.
=== Raccourcis clavier ===
Ils sont disponibles sous **bash**, **csh** et **tcsh** par défaut, mais il ne le sont pas sous **sh**. Sous **ksh**, il faut activer ces raccourcis clavier avec
$ set -o emacs
\vspace{-5mm}
** Remarque:** Les touches fléchées permettent également de déplacer le curseur et de naviguer entre les commandes précédentes et suivantes si le terminal est bien configuré.
^^Raccourcis ^Commentaires^
| ''Ctrl-P'' | Commande précédente |
| ''Ctrl-N'' | Commande suivante |
| ''Ctrl-A'' | Début de ligne |
| ''Ctrl-E'' | Fin de ligne |
| ''Ctrl-K'' | Efface la ligne à partir du curseur |
| ''Ctrl-U'' | Efface la ligne jusqu'au curseur en **bash** ou toute la ligne **csh**, **tcsh** et **ksh**.|
| ''Ctrl-B'' | Déplace le curseur vers le début de la ligne |
| ''Ctrl-F'' | Déplace le curseur vers la fin de la ligne |
=== Les variables d'environnement ===
Le contenu entre (" ") est interprété par le shell, le contenu par apostrophes (' ') ne l'est pas. Dans tous les cas, si l'élément considéré ne contient pas de caractère spéciaux, guillemets et apostrophes sont facultatifs.
^^Actions ^ Commandes^
| Afficher une variable VAR | ''echo $VAR'' |
| Affiche toutes les variables | ''set'' |
| Positionne la variable ''VAR'' à la valeur ''val'' | ''VAR='val' ; export VAR'' sous **sh** --- ''export VAR='val''' sous **bash**, **sh** et **ksh** |
| Positionne la variable d'environnement ''VAR'' à la valeur ''val'' | ''set VAR='val''' sous **csh** |
| Définit une variables pour une commande ''commande'' | ''VAR='val' commande'' |
=== Variables fréquemment utilisées ===
^^Variables ^ Commentaires ^
| ''SHELL'' | Nom de l'interpréteur de commandes |
| ''PATH'' | Chemin de recherche des exécutables |
| ''LD_LIBRARY_PATH'' | Chemin de recherche des bibliothèques (sauf sous MacOs X "''DYLD_LIBRARY_PATH''") |
| ''MANPATH'' | Chemin de recherche des pages de man |
| ''HOME'' | Répertoire maison |
| ''LANG'' | Localisation (ex : ''fr_FR.ISO8859-1'') |
| ''LC_CTYPE'' | Localisation de la classification des caractères et de la casse |
| ''LC_ALL'' | Écrase les définitions d'autres paramètres régionaux ''LANG'', ''LC_..'' |
| ''DISPLAY'' | Serveur X, i.e., graphique, vers lequel rediriger l'affichage, e.g., ''DISPLAY=0'' pour local |
| ''LESSCHARSET'' | Jeu de caractères pour la commande ''less''. Valeurs possibles: ascii, latin1, utf-8, dos, ebcdic, IBM-1047, koi8-r, next |
| ''IFS'' | Séparateur de champs ou de mots lors de l'interprétation d'une chaîne (**sh**, **ksh**, **bash**). **NB:** les espaces (tabulations, retour chariot, caractère espace) sont gérés différemment des autres caractères. Une série de 3 tabulations sera interprétée comme un seul séparateur tandis que ''':::''' sera interprété comme trois séparateurs de champs. |
| ''LOGNAME'' | Login de l'utilisateur |
| ''PWD'' | Le répertoire courant |
| ''PS1'' | Invite de l'interpréteur de commande (**bash**) --- ''\u'' usager --- ''\h'' nom de la manchine --- ''\W'' dernier niveau du répertoire courant --- ''\w'' répertoire courant --- ''\A'' heure au format HH:MM (24heures) --- ''\$'' symbole $. **NB:** Valable aussi pour **sh** et **ksh** mais sans les séquences d'échappement. |
| ''prompt'' | Invite de l'interpréteur de comande **csh** --- ''%n'' usager --- ''%m'' nom de la machine --- ''%c'' répertoire courant --- ''%cX'' X dernier niveau du répertoire courant --- ''%T'' heure au format HH:MM (24heures) |
| ''EDITOR'' | Éditeur de texte par défaut |
===== Naviguer dans les répertoires =====
^^Commandes ^ Commentaires^
| ''pwd'' | Affiche le répertoire courant |
| ''cd rep'' | Déplacement dans le répertoire ''rep'' |
| ''cd'' | Déplacement dans le répertoire ''home'', équivalent à ''cd ~'' |
| ''cd ..'' | Déplacement dans le répertoire parent |
| ''ls [rep]'' | Liste les fichiers du répertoire ''rep'' (si un répertoire n'est pas spécifié, les fichiers du répertoire courant sont listés |
| ''ls -a [rep]'' | Liste aussi les fichiers cachés |
| ''ls -l [rep]'' | Liste les fichiers avec leur droits d'accès |
===== Gérer les droits d'accès =====
=== Conventions pour les droit d'accès ===
Le 1er caractère correspond au type d'objet (fichier, répertoire, etc.). Les suivants se lisent par groupes de 3 et définissent respectivement les droits accordés:
- au propriétaire
- au groupe propriétaire du fichier et
- aux autres usagers.
=== Types d'objets ===
^^Symboles ^ Types ^
| ''-'' | fichier |
| ''d'' | répertoire |
| ''l'' | lien symbolique |
| ''s'' | socket |
| ''p'' | FIFO |
| ''c'' | device (mode caractère) |
| ''b'' | device (mode bloc) |
=== Types de droits accordés ===
^^Symboles ^ Droits accordés ^
| ''-'' | pas d'accès |
| ''r'' | lecture |
| ''w'' | écriture |
| ''x'' | exécution (fichier), parcourir (répertoire) |
| ''s'' | bit set-UID (utilisateur), bit set-GID (groupe) |
| ''t'' | sticky bit: impossible d'effacer les fichiers des autres |
| ''S'' | bit set-UID sans droit en exécution |
| ''T'' | sticky bit sans droit de parcourir |
\newpage
=== Changer le propriétaire d'un fichier ===
$ chown usager fichier
\vspace{-10mm}
=== Changer le groupe d'un fichier ===
$ chgrp groupe fichier
\vspace{-10mm}
=== Changer les droits d'accès d'un fichier ===
$ chmod mode fichier
\vspace{-7mm}
ou mode est:
* soit sous la forme groupe(s) + droit(s) (ajout de droits)
* soit sous la forme groupe(s) - droit(s) (suppression de droits) avec groupe : usager ''u'', groupe ''g'' et autres ''o''.
* soit sous la forme octale ''SUGO'' ou ''S = 1'' (sticky-bit) ou 2 (set-GID) ou 4 (set-UID) et ''U'', ''G'' et ''O'' peuvent chacun prendre pour valeur 1 (exécutable) ou 2 ( droit en écriture) ou 4 (droit en lecture). On additionne les modes par chiffre pour obtenir un mode de quatre chiffre.
== Exemples: changer les droits sous la forme groupe + droit ==
* Permet à tous de lister et de parcourir un répertoire
$ chmod ugo+rx repertoire
\vspace{-7mm}
* Retire tous les droits aux utilisateurs autres que le propriétaire du fichier.
$ chmod go-rwx fichier
\vspace{-7mm}
== Exemples: changer les droits sous la forme octal SUGO ==
* L'utilisateur courant et le groupe peuvent parcourir le répertoire et le lire
$ chmod 1750 repertoire
\vspace{-7mm}
* Le fichier est accessible en lecture et en écriture au groupe et à l'utilisateur propriétaire du fichier
$ chmod 660 fichier
\vspace{-7mm}
===== Manipuler les fichiers =====
^^Commandes ^ Commentaires ^
| ''mv source cible'' | Déplace et/ou renomme un fichier |
| ''cp source cible'' | Copie un fichier |
| ''cp -R source cible'' | Copie un répertoire. **Attention:** les droits d'accès peuvent être perdus. Pour éviter cela utiliser l'option ''-p'' ou utiliser ''tar'' |
| ''ln source lien'' | Lien fort de source vers lien |
| ''ln -s source lien'' | Lien symbolique de source vers lien |
| ''mkdir répertoire'' | Crée un répertoire |
| ''rmdir'' | Supprime un répertoire vide |
| ''du -ks répertoire'' | Affiche la taille du répertoire en Ko |
| ''rm fichier'' | Supprime un fichier (**Irréversible!**) |
| ''rm -f fichier'' | Supprime un fichier protégé en écriture |
| ''rm -R répertoire'' | Supprime un répertoire |
| ''touch fichier'' | Met à jour la date de modification d'un fichier |
===== Rechercher un fichier =====
^^Commandes ^ Commentaires ^
| ''locate motif'' | Recherche des fichiers dont le nom correspond au motif |
| ''updatedb'' | Met à jour la base de données de locate (**linux**) |
| ''/usr/libexec/locate.updatedb'' | Met à jour la base de données de locate (**BSD**, **MacOS X**) |
| ''find chemin options'' | Recherche les fichiers correspondant aux options dans chemin |
=== Principales options de la commande ''find'' ===
* Recherche à partir du répertoire courant les fichiers dans le nom respectif le motif
$ find . -name motif
\vspace{-7mm}
* Recherche à partir du répertoire courant les fichiers du type spécifié : ''f'' pour les fichiers réguliers, ''d'' pour les répertoires et ''l'' pour les liens symboliques
$ find . -type type
\vspace{-7mm}
* Exécute la commande ''cmd'' sur tous les fichiers trouvés. L'argument ''{}'' désigne le nom du fichier trouvé par ''find''
$ find . -exec cmd \;
\vspace{-7mm}
* Affiche les fichiers trouvés (**System V** uniquement, implicite pour **linux**, **MacOs X** et **BSD**)
$ find . -print
\vspace{-7mm}
== Exemples ==
* Recherche dans le répertoire courant tous les fichiers dont l'extension est ''html''
$ find . -name '*.html'
\vspace{-7mm}
* Supprime à partir du répertoire courant tous les fichiers dont l'extension est ''png''
$ find . -name '*.png' -exec rm {} \;
\vspace{-7mm}
===== Redirection des flux =====
^^Commandes ^ Commentaires ^
| ''cmd > fichier'' | Redirige la sortie standard de la commande ''cmd'' dans le fichier spécifié |
| ''cmd > > fichier'' | Écrit à la fin du fichier au lieu de l'écraser |
| ''cmd < fichier'' | Utilise le fichier spécifié comme entrée de la commande ''cmd'' |
| ''cmd1 | cmd2'' | Utilise la sortie de la commande ''cmd1'' comme entrée de la commande ''cmd2'' |
| ''cmd < < "chaîne"'' | Utilise l'entrée standard pour la commande ''cmd'' jusqu'à que la chaîne spécifiée soit rencontrée |
| ''cmd 2>&1 > fichier'' | Redirige la sortie standard et les erreurs dans le fichier spécifié (**sh**, **bash**, **ksh**) |
| ''cmd >& fichier'' | Redirige la sortie standard et les erreurs dans le fichier spécifié (**csh**, **tcsh**) |
| ''cmd > fichier1 2> fichier2'' | Redirige la sortie standard dans le ''fichier1'' et les erreurs dans le ''fichier2'' (**sh**, **bash**, **ksh**) |
| ''(cmd > fichier1) >& fichier2'' | Redirige la sortie standard dans le ''fichier1'' et les erreurs dans le ''fichier2'' (**csh**, **tcsh**) |
== Exemple ==
* Liste tous les fichiers du répertoire courant avec leurs droits d'accès dans le fichier ''liste_fichiers''
$ ls -al > liste_fichiers
\vspace{-10mm}
===== Comparer et trier des fichiers =====
* Affiche les différences entres les deux fichiers texte spécifiés
$ diff fichier1 fichier2
\vspace{-7mm}
* Affiche les différences entres les deux fichiers spécifiés au format ''patch''
$ diff -u fichier1 fichier2
\vspace{-7mm}
* Compare et affiche un contexte de deux lignes pour chaque différence constatée
$ diff -C 2 fichier1 fichier2
\vspace{-7mm}
* Compare deux fichiers binaires spécifiés
$ cmp fichier1 fichier2
\vspace{-7mm}
* Compare le premier fichier à partir du 13ème octet et le second fichiers à partir du 17ème
$ cmp fichier1 fichier2 13 17
\vspace{-7mm}
* Trie les lignes d'un fichier. Options:
* ''-n'' Tri numérique
* ''-k n'' Tri sur le nième champs de la ligne
$ sort fichier
\vspace{-7mm}
* Supprime les doublons de lignes dans un fichier trié (l'option ''-c'' permet d'afficher le nombre d'occurrences devant chaque ligne)
$ uniq fichier
\vspace{-7mm}
== Exemples ==
* Stock dans un fichier ''main.patch'' les différences entres deux fichiers sources
$ diff -u logiciel2.0/main.c logiciel1.0/main.c > main.patch
\vspace{-7mm}
* Affiche les différences entres deux fichiers sources en précisant 2 lignes de contexte
$ diff -C 2 logiciel2.0/main.c logiciel1.0/main.c
\vspace{-7mm}
===== Afficher le contenu de fichiers =====
^^Commandes ^ Commentaires ^
| ''wc fichier'' | Compte le nombre de lignes, de mots, d'octets d'un fichier spécifié |
| ''cat fichier1 fichier2'' | Concatène les fichiers spécifiés |
| ''more fichier'' | Affiche un fichier page après page: --- ''espace'' pour passer à la page suivante --- ''entrée'' pour passer à la ligne suivante --- ''u'' pour remonter --- ''q'' pour quitter. |
| ''less fichier'' | Affiche un fichier page après page et permet d'y naviguer avec les flèches ''Page prec'' et ''Page Suiv''. |
| ''head -n 3 fichier'' | Affiche les 3 premières lignes du fichier spécifié |
| ''tail -n 3 fichier'' | Affiche les 3 dernières lignes du fichier spécifié |
| ''tail -f fichier'' | Affiche la fin du fichier au fur et à mesure qu's'il est rempli |
| ''echo 'chaîne' > fichier'' | Crée le fichier avec le nom spécifié contenant la chaîne en argument |
| ''echo 'chaîne' > > fichier'' | Crée la chaîne en argument à la fin du fichier après un saut de ligne |
| ''cat - > fichier << EOF'' | Écrit ligne à ligne dans in fichier jusqu'à ligne EOF (End of file) |
== Exemples d'utilisation ==
* Affiche le fichier ''/etc/resolv.conf''
$ cat /etc/resolv.conf
\vspace{-7mm}
* Liste tous les fichiers du répertoire courant et les affiche page après page
$ ls -as | more
\vspace{-7mm}
* Affiche les 3 premières lignes du fichier ''todolist''
$ head -n 3 todolist
\vspace{-7mm}
* Affiche les 3 dernières ligne du fichier de log ''/var/log/message''
$ tail -n 3 /var/log/message'
\vspace{-7mm}
* Affiche la fin du fichier de log d'erreur du serveur Web apache ''/var/log/apache/error.log'' au fur et à mesure qu'il est rempli
$ tail -f /var/log/apacheerror.log
\vspace{-7mm}
* Écrit la ligne ''licorne'' dans le fichier ''/etc/hostname'' autrement dit changement le nom réseaux de la machine
$ echo 'licorne' > /etc/hostname
\vspace{-7mm}
* Écrit ligne à ligne dans le fichier ''list_de_courses-0806.txt'' jusqu'à ligne EOF
$ cat - > list_de_courses-0806.txt << "EOF"
\vspace{-7mm}
===== Recherche de chaînes avec grep =====
La commande ''grep'' recherche un motif dans un ensemble de chemins spécifiés et affiche les lignes correspondantes:
$ grep motif chemins
\vspace{-7mm}
* Exemple: recherche tous les fichiers du répertoire "Mail/inbox/" avec un nom contenant la chaîne de caractères "recette de cassoulet":
$ grep "recette de cassoulet" Mail/inbox/*
\vspace{-7mm}
^^Options ^Commentaires ^
| ''grep -A N'' | Affiche la ligne et les ''N'' lignes suivantes (**Linux**, **BSD**, **MacOs X**) |
| ''grep -B N'' | Affiche la ligne et les ''N'' lignes précédentes (**Linux**, **BSD**, **MacOs X**) |
| ''grep -i'' | Le motif est insensible à la casse |
| ''grep -P'' | Le motif est donné comme une expression régulière Perl (**Linux**, **BSD**, **MacOs X**) |
| ''grep -R'' | Le motif est recherché récursivement dans les sous-répertoires (**Linux**, **BSD**, **MacOs X**) |
| ''grep -E'' | Le motif est une expression régulière étendue (voir ci-dessous) |
** Remarque: ** Lorsque la commande ''grep -R'' n'est pas disponible, on peut effectuer la recherche récursivement une chaîne avec la commande ''find'':
$ find chemin -exec grep motif {} \; - print
\vspace{-10mm}
== Les expressions régulières étendues ==
Elles consistent en des chaînes de caractères modèle auxquelles comparer d'autres chaînes. Dans une expression régulière, certain caractères revêtent un sens particulier:
^^Caractères ^ Significations ^
| ''.'' | n'importe quel caractère |
| ''[0-9]'' | un chiffre |
| ''[A-Z]'' | une majuscule entre ''A'' et ''Z'' |
| ''[a-z]'' | une minuscule entre ''a'' et ''z'' |
| ''[A-Z0-9]'' | une majuscule entre ''A'' et ''Z'' ou un chiffre |
| ''[a,g,h,i]'' | l'un des caractère ''a'', ''g'', ''h'' ou ''i'' |
À ces atomes peuvent être ajoutés des localisateurs:
^^Localisateurs ^ Significations ^
| ''^E'' | un ''E'' en début de ligne |
| ''toto$'' | la chaîne ''"toto"'' en fin de ligne |
et des quantifieurs:
^^Quantifieurs ^ Significations ^
| ''E*'' | un nombre quelconque et éventuellement aucun ''E'' |
| ''[0-9]+'' | un nombre quelconque et au moins un chiffre |
| ''[xyz]?'' | rien ou une lettre parmi ''x'', ''y'' ou ''z'' |
| ''.{3}'' | 3 caractères n'importe lesquels |
| ''Z{2,}'' | au moins 2 caractères ''Z'' |
| ''[A-Z]{,6}'' | au plus 6 majuscules |
| ''[a-z]{3,5}'' | entre 3 et 5 minuscules |
Enfin on peut factoriser des expressions et indiquer des alternatives:
^^Factorisateurs ^ Significations ^
| ''(toto){2}'' | la chaîne ''"toto"'' répétée deux fois |
| ''(toto | tata)$'' | la chaîne ''""toto"'' ou ''"tata"'' en fin de ligne |
Le caractère « \ » permet de faire perdre sont sens particulier (« échapper ») à l'un des caractères spéciaux.
===== Remplacer des chaînes =====
=== La commande sed ===
Remplace l'expression régulière ''expr'' par la chaîne spécifiée dans un fichier
$ sed 's/expr/chaine/' fichier
\vspace{-7mm}
Remplace directement l'expression régulière ''expr'' par la chaîne spécifiée dans un fichier et enregistre l'ancien fichier avec le nom ''fichiersuff'' (**Linux**)
$ sed -i suff 's/expr/chaine/' fichier
\vspace{-7mm}
Remplace plusieurs occurrences par ligne
$ sed 's/expr/chaine/g' fichier
\vspace{-7mm}
Remplace l'expression régulière ''expr'' par une chaîne: ''\1'' est remplacé par ce qui correspond à la partie de l'expression régulière entre ''\('' et ''\)''
$ sed 's/\(groupe\)expr/chaine\1/' fichier
\vspace{-7mm}
** Remarque:** Il peut y avoir plusieurs groupes entre parenthèse dans le premier membre qui se substitue à ''\1 \2... \9'' dans le second membre.
** Exemple: ** remplace tous les noms de fichier se terminant par ''.html'' par des noms de fichier se terminant pas ''.fr.html''
$ sed 's/\(.*\).html/\1.fr.html/' fichier
\vspace{-7mm}
=== La commande tr ===
Remplacement sur le flux d'entrée standard: les ''a'' sont transformé en ''d'', les ''b'' en ''e'' et les ''c'' en ''f''.
$ tr 'abc' def'
\vspace{-7mm}
** Remarque:** On peut utiliser des classes de caractères telles que '''[A-Z]'''.
== Exemples (La conversion de fichier) ==
* Conversion de fichier LF Unix ⇒ CR MacOS
$ tr '\n' '\r' < in > out
\vspace{-7mm}
* Conversion de fichier LF Unix ⇒ CRLF MS-DOS
$ tr '\n' '\r\n' < in > out
\vspace{-7mm}
* Conversion majuscules ⇒ minuscule
$ tr '[A-Z]' '[a-z]' < in > out
\vspace{-7mm}
===== Éditer des fichiers =====
=== La commande cut ===
La commande ''cut'' affiche les champs d'un fichier (séparés par des tabulations, index commençant à 1):
* ''x,y'': champs ''x'' et ''y''
* ''x-y'': champs entre ''x'' et ''y'' inclus
* ''-d'': délimiteur.
$ cut -f champs fichier
\vspace{-7mm}
** Exemple: ** Extrait la deuxième et la cinquième colonne d'un fichier nommé ''data.csv'' (séparation des champs par le point-virgule).
$ cut -f 2,5 -d ';' data.csv
\vspace{-7mm}
=== La commande paste ===
La commande ''paste'' affiche des lignes contenant la ligne correspondante de chaque fichier séparées par des tabulations:
* ''-d'': délimiteur
$ paste f1 f2 ...
\vspace{-7mm}
** Exemple: ** Si les fichiers ''f1'', ''f2'' et ''f3'' sont des fichiers numériques, affiche des lignes de nombres sous la forme ''x1:x2:x3''.
$ paste -d ':l' f1 f2 f3
\vspace{-7mm}
=== La commande join ===
La commande ''join'' permet de fusionner deux fichiers ayant un champ commun (jointure):
* ''-1 champ'': champ de jointure dans le fichier 1
* ''-2 champ'': champ de jointure dans le fichier 2
$ joint fichier1 fichier2
\vspace{-7mm}
=== La commande vi ===
La commande ''vi'' permet d'éditer un fichier. Pour plus d'information vous pouvez consulter le [[mementos:vi|memento Vi]].
$ vi fichier
\vspace{-7mm}
Vi dispose de deux modes: édition et commande, qui est le mode au lancement. En mode édition, ''ESC'' permet de passer en mode commande. En mode commande:
* '':w'' enregistre
* '':q'' quitte
* '':wq'' enregistre et quitte
* '':q!'' quitte sans enregistrer
La manipulation du curseur s'effecture avec les touches fléchées si le terminal est bien configuré ou avec les touches:
* ''h'' pour se diriger à gauche
* ''i'' pour se diriger en bas
* ''k'' pour se diriger en haut
* ''l'' pour se diriger à droit
Les commandes d'édition les plus courantes:
* ''x'' efface un caractère
* ''r'' remplace un caractère
* ''dd'' coupe la ligne courante
* ''yy'' copie la ligne courante
* ''u'' annuler
* ''3yy'' copie 3 lignes à partir de la ligne courante
* ''p'' colle la dernière ligne coupée ou copier après la ligne courante
* ''1,$s/foo/bar/g'' remplace ''foo'' par ''bar'' (même syntaxe que [[mementos:unix#La commande sed|la commande sed]])
* ''!'' execute une commande externe sur le fichier, e.g.,
: 1,$!tr '[A-Z]' '[a-z]'
\vspace{-7mm}
===== Réseaux =====
^^Commandes ^Commentaires ^
| ''ping [-n] machine'' | Envoie un ping à la machine spécifiée (''-n'' sans DNS) |
| ''traceroute [-n] machine'' | Trace la route d'un paquet de données vers machine spécifiée (''-n'' sans DNS) |
| ''netstate [-n]'' | Affiche l'usage du réseaux par les processus |
| ''netstate [-n] -a'' | Idem avec affiche des processus serveur |
| ''fuser'', ''fstat'', ''lsof'' | Liste détaillée de l'usage des fichiers et du réseau |
| ''ifconfig -a'' | Affiche la configuration des interfaces réseaux |
| ''ifconfig interface IP masque'' | Configure une interface réseau |
| ''route [-n] show'' | Affiche la table de routage (''-n'' sans DNS et sans l'option show pour les systèmes **Linux**) |
| ''route [-n] add route [gw] passerelle'' | Ajoute une entrée de routage (gw uniquement pour **Linux**) |
| ''route add default [gw] passerelle'' | Ajoute une entrée de routage par défaut (gw uniquement pour **Linux**) |
| ''route delete default'' | Efface la route par défaut |
| ''hostname'' | Affiche et configure le nom réseau de la machine |
| ''/etc/resolv.conf'' | Fichier de configuration de la résolution DNS |
** Exemple de fichier** ''resolv.conf''
nameserver 192.0.2.15
search example.com
\vspace{-10mm}
===== Connexion à une machine distante =====
=== La commande SSH ===
La commande SSH permet de se connecter à distance à une machine et un port spécifiés
$ ssh [-p port] [usager@]machine
\vspace{-7mm}
**Examples:**
* Les connexions au port 2223 de la machine locale seront renvoyées au port 23 de la machine 1, en passant pas un tunnel SSH entre la machine locale et la machine 2. À moins d'utiliser l'option ''-g'', seule la machine locale peut utiliser ce renvoi.
$ ssh -L 223:machine1:23 machine2
\vspace{-7mm}
* Les connexions au port 23 de la machine 2 seront renvoyées au port 23 de la machine, en passant par un tunnel SSH entre la machine 2 et la machine locale.
$ ssh -R 2223:machine1:23 machine2
\vspace{-7mm}
* Redirige l'affichage graphique si autorisé avec un X11Forwarding yes dans ''/etc/ssh/sshd_config'' pour un serveur OpenSSH.
$ ssh -X [usager@]machine
\vspace{-7mm}
=== La commande scp ===
La commande scp permet d'effectuer une copie de fichier à distance sécurisée (même principe que la commande ''cp'').
scp [[usager1]@machine1:]fichier [[usager2]@machine2:]chemin
\vspace{-7mm}
Transférer récurcivement un répertoire de manière sécurisée (utiliser l'option ''-P'' pour préciser un port particulier)
scp -R [[usager1]@machine1:]chemin [[usager2]@machine2:]chemin
\vspace{-7mm}
=== La commande sftp ===
La commande sftp permet le transfert defichier de manière sécurisée en mode interactif
sftp machine
\vspace{-7mm}
===== Archivage, signature, UUencode =====
=== La commande gunzip ===
La commande ''gunzip'' décompacte une archive au format ''.gz'' ou ''tgz''):
$ gunzip fichier.gz
\vspace{-10mm}
=== La commande unzip ===
La commande ''unzip'' décompacte une archive au format ''.zip'':
$ unzip fichier.zip
\vspace{-10mm}
=== La commande uncompress ===
La commande ''uncompress'' décompacte une archive au format ''.Z'':
$ uncompress fichier.Z
\vspace{-10mm}
=== La commande zip ===
La commande ''zip'' compacte au format ''.zip'':
$ zip archive.zip fichiers
\vspace{-10mm}
=== La commande gzip ===
La commande ''gzip'' compacte une archive au format ''.gz'':
$ gzip fichier
\vspace{-10mm}
=== La commande compress ===
La commande ''compress'' compacte une archive au format ''.Z''':
$ compress fichier
\vspace{-10mm}
=== La commande bunzip ===
La commande ''bunzip'' permet d'extraire des archives au format ''.bz2''
=== La commande tar ===
La commande ''tar'' permet de manipuler des archives en respectant les droits la structure des répertoires archiver.
**Exemples: **
* Créer une archive ''.tar'' d'un répertoire spécifié
$ tar -cf archive.tar repertoire
\vspace{-7mm}
* Examine le contenu d'une archive spécifiée
$ tar -tf archive.tar
\vspace{-7mm}
* Extrait le contenu d'une achive
$ tar -xf archive.tar
\vspace{-7mm}
* Extrait l'archive dans un répertoire donné
$ tar -xf archive.tar -C repertoire
\vspace{-7mm}
* Extrait une archive en respectant au mieux les droits d'accès aux fichiers contenus dans l'archive
$ tar -xpf archive.tar
\vspace{-7mm}
* Décompacte et extrait une archive au format ''.tgz'' ou ''tar.gz''
$ tar -xzf archive.tar.gz
\vspace{-7mm}
* Décompacte et extrait une archive au format ''.tgz'' ou ''tar.gz'' dans le cas général
$ gunzip archive.tar.gz | tar -xf -
\vspace{-7mm}
* Décompacte et extrait une archive au format ''.tar.bz2'' dans le cas général
$ tar -xjf archive.tar.bz2
\vspace{-7mm}
=== La commande sha1 ===
La commande ''sha1'' affiche la signature SHA1 d'un fichier
$ sha1 fichier
\vspace{-7mm}
** Remarque:** sous **linus** la commande s'appelle ''sha1sum''.
**Exemple: ** Comparaison des signatures SHA1 de deux fichiers
$ sha1sum fich1 fich2 | uniq | wc -l
\vspace{-7mm}
=== La commande md5 ===
La commande ''md5'' affiche la signature MD5 d'un fichier.
$ md5 fichier
\vspace{-7mm}
** Remarque:** sous **linus** la commande s'appelle ''md5sum''.
=== La commande uuencode ===
La commande ''uuencode'' encode un fichier au format UU
$ uuencode f > f.uu
\vspace{-7mm}
=== La commande uudecode ===
La commande ''uudecode'' décode un fichier au format UU
$ uudecode f.uu > f
\vspace{-7mm}
===== Gestion des processus =====
^^Commandes ^ Commentaires^
| ''ps'' | Affiche la liste des processus de l'usager attachés à un terminal |
| ''ps -ax'' | Affiche tous les processus (**BSD**, **Linux**) |
| ''ps -aux'' | Affiche tous les processus en indiquant les usagers (**BSD**, **Linux**) |
| ''ps -ef'' | Affiche tous les processus (**System V**) |
| ''top'' | Affiche les processus les plus gourmands (**BSD**, **Linux**). Pour réaliser l'affichage par ordre décroissant de mémoire utilisée option ''M''. |
| ''systat'' | Affiche les processus les plus gourmands (**BSD**, **MacOs X**) |
| ''nohup programme'' | Un lance un programme qui ne meure pas en faim de session |
| ''kill [-signal] pid'' | Tue un processus en donnant son PID |
| ''pkill [-signal] nom'' | Tue un processus en donnant son nom |
=== Signaux les plus souvent utilisés ===
^^Signaux ^ Commentaires ^
| ''-1'' (HUP) | Recharge le fichier de configuration |
| ''-2'' (INT) | Interrompt le processus (résultat d'un ''contrôle-C'') |
| ''-3'' (QUIT) | Quitte le processus |
| ''-9'' (KILL) | Tue le processus immédiatement (à éviter, essayer ''-15'' avant) |
| ''-15'' (TERM) | Tue le processus proprement (par défaut si pas de signal indiqué) |
| ''-18'' (STOP) | Gèle le processus |
| ''-20'' (CONT) | Reprend l'exécution d'un processus gelé |
===== Réaliser des tâches de maintenance périodiques =====
^^Commandes ^Commentaires ^
| ''crontab -l'' | Liste des tâches périodiques de l'usager |
| ''crontab -e'' | Édite les tâches périodiques de l'usager avec l'éditeur Vi |
| ''crontab -e -u usager'' | Édite les tâches périodiques d'une usager particulier (root uniquement) |
=== Format des commandes crontab ===
Une commande est composée de 5 champs temporels, d'un nom d'usager s'il s'agit de la table générale du système et d'une commande. Les 5 champs temporels représentent les minutes (0-59), les heures (0-23), les jours du mois (1-31), les mois (1-12) et les jours de la semaine (0-7; le dimanche est représenté par 0 ou par 7):
* ''x,y...'' Liste de valeur
* ''x-y'' Intervalle de valeurs
* ''*'' toutes les valeurs
* ''/n'' Période ou pas
**Exemples:**
* Tous les jours: ''0 5 * * *''
* Toutes les 5 minutes: ''*/5 * * * *''
* Un mardi sur deux à 10h22: ''10 22 * * 2/2''
* Du lundi au vendredi à 21h52: ''21 52 * * 1-5''
* Le 10 et le 20 de chaque mois à 18h48: ''18 36 10,20 * *''
===== Gestion des disques et des partitions =====
^^Commandes ^ Commentaire^
| ''mount'' | Affiche la liste des systèmes de fichiers montés |
| ''mount device rep''| Monte un système de fichiers (depuis un périphérique ''device'') sur un répertoire. **NB:** ''device'' est souvent de la forme ''/dev/hd*'' ou ''/dev/sd*''. |
| '' mount -t msdos device rep'' | Montage d'une partition MS-DOS |
| ''df'' | Affiche l'espace occupé/libre sur les systèmes de fichiers montés: --- ''-k'' Exprime les tailles en Ko --- ''-h'' Exprime les tailles dans l'unité la plus significative (**Linux**, **BSD**) |
| ''fdisk device'' | Modification du partitionnement |
| ''pdisk device'' | Modification du partitionnement (**MacOs X**, **BSD**) |
| ''disklabel device'' | Modification du partitionnement (**BSD**) |
| ''newfs device'' | Formatage d'une partition |
| ''mkfs device'' | Formatage d'une partition |
| ''/etc/fstab'' | Fichier contenant les correspondances entre devices et points de montage et indication des options de montage. **NB:** Le fichier ''fstab'' est également utilisé pour le montage automatique des partitions au démarrage. |
===== Développement =====
=== Les commandes de bases ===
^^Commandes ^Commentaires ^
| ''cc -c fcihier.c'' | Compilation de ''fichier.c'' en ''fichier.o'' |
| ''cc -o prog f1.o f2.o'' | Liaison de ''f1.o'' et ''f2.o'' pour générer le programme ''prog'' |
| ''ar'' | Manipulation d'archive ''.a'' |
| ''ranlib'' | Indexation des archive ''.a'' |
| ''nm'' | Liste les symboles d'un binaire |
| ''objdump'' | Affichage, désassemblage d'un binaire |
| ''patch -pX < fichier.patch'' | Applique le patch ''fichier.patch'' en supprimant ''X'' niveau d'arborescences dans les chemins |
=== Les principales options de GCC pour la compilation ===
^^Options ^ Commentaires ^
| ''-Wall'' | Affiche tous les avertissements |
| '' -Werror'' | Prend les avertissements pour des erreurs |
| ''ansi'' | Exige un style ANSI |
| ''-I/usr/pkg/include'' | Recherche des entêtes dans ''/usr/pkg/include'' |
| ''-O, -O2, -O3, -O6'' | Optimisation pour la vitesse |
| ''-Os'' | Optimisation pour la taille de l'exécutable |
=== Les principales options de GCC pour la liaison ===
^^Options ^ Commentaires ^
| ''-static'' | Liaison statique (utilise les librairies ''.a'') |
| ''-dynamic'' | Liaison dynamique (utilise les librairies ''.so'' ou ''.dylb'' sous **MacOs X**). |
| ''-I//biblio//'' | Lie avec la libraririe ''biblio.a'' ou ''biblio.so'' |
| ''-L//chemin//'' | Recherche les librairies dans ''chemin'' |
| ''-R//chemin//'' | Indem, mais effectue la recherche au moment de l'exéctution |
** Remarque:** ''cc'' et un alias de ''gcc'' sous **BSD**, **Linux** et **MacOs X**.
===== Utilisateurs =====
^^Commandes ^Commentaires ^
| ''whoami'' | Affiche son propre login |
| ''who'' | Affiche la liste des usagers |
| ''finger //usager//'' | Affiche les informations concernant un utilisateur |
| ''talk usager[@machine]'' | Engage une conversation avec un usager |
| ''write usager'' | Affiche un message sur le terminal d'un usager |
| ''wall'' | Affiche un message à tous les usagers |
| ''msg [y|n]'' | Autorise (y) ou pas (n) l'affichage des messages |
| ''tty'' | Affiche le nom de son terminal |
===== Contrôle de version avec CVS et SVN =====
=== Les commandes de bases de CVS ===
^^Commandes ^Commentaires ^
| ''cvs -d //dépôt// co -P //module//'' | Récupération d'un module depuis le dépôt |
| ''cvs -d //dépôt// update -P -d'' | Mise à jour des sources |
| ''cvs -d //dépôt// diff'' | Liste les differences au dépôt |
| ''cvs -d //dépôt// diff | patch -R'' | Annule les differences au dépôt |
| ''cvs -d //dépôt// commit'' | Valide les modification vers le dépôt |
**Remarque:** L'option ''-d'' des commandes CVS peut être supprimée si la variable d'environnement ''CVS_ROOT'' est correctement initialisée.
=== Les chemins de dépôt ===
^^Chemins ^Commentaires ^
| ''/chemin'' | Dépôt local |
| '':pserver://usager//@//serveur//:/chemin'' | Accès via le protocole pserver au dépôt sur le serveur ''//serveur//'' en utilisant le nom ''//usager//'' |
| ''//usager//@//serveur//:/chemin'' | Accès via le protocole rsh ou ssh en fonction de la valeur de la variable d'environnement ''CVS_RSH'' |
=== Les commandes de bases de SVN ===
^^Commandes ^Commentaires ^
| ''svn co //dépôt/dossier// //copie_locale//'' | Récupération d'un dossier depuis le dépôt |
| ''svn update //copie_locale//'' | Mise à jour des sources |
| ''svv diff //dépôt/dossier// //copie_locale//'' | Liste les differences au dépôt |
| ''svn //distant// //local// | patch -R'' | Annule les differences au dépôt |
| ''svn -commit //copie_locale//'' | Valide les modification vers le dépôt |
**Exemple:**
svn co https://www.ens.math-info.univ-paris5.fr/stage-unix/MementoUnix/ / home/mu/MementoUnix/
\vspace{-10mm}