Mini cours Linux / shell / bash # Dans les lignes suivantes, les commantaires commencent par un '#' # et les commandes du shell commencent par un '$' $ # Connexion ssh # la première fois qu'on se connecte sur un serveur, une empreinte est proposée, cette empreinte sera enregistrée # pour être comparée avec l'empreinte présentée lors des prochaines re-connexions. $ ssh pugnere@formation-iot.ip2i.in2p3.fr The authenticity of host 'formation-iot.ip2i.in2p3.fr (134.158.81.243)' can't be established. ECDSA key fingerprint is SHA256:hM+ajJw3UN0l8beTwP4zR01UkLw0Xvg6tJvJErN6rWs. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes # voir https://perso.liris.cnrs.fr/pierre-antoine.champin/enseignement/linux/s1.html#le-shell # le shell attends que l'on tape des commandes $ # affichage du contenu de la variable SHELL (instanciée par le système) $ echo $SHELL # plusieurs commandes permettent d'afficher le contenu d'un fichier (ici le fichier système /etc/hostname) $ more /etc/hostname $ less /etc/hostname $ cat /etc/hostname # pour afficher le manuel d'une commande, avec les paramêtres possibles... (ici le manuel de la commande 'cat') $ man cat # afficher une chaine de caractères $ echo "Bonjour tout le monde" # voir https://perso.liris.cnrs.fr/pierre-antoine.champin/enseignement/linux/s2.html#commandes-usuelles # Pour connaître le répertoire courant dans lequel on est $ pwd # création d'un répertoire $ mkdir iot # création d'un sous-répertoire $ mkdir iot/exercice1 # création d'un fichier dans une arboresence $ echo tp1 > iot/exercice1/tp.txt # et on affiche le contenu du fichier iot/exercice1/tp.txt $ cat iot/exercice1/tp.txt # ls : affichage de la liste des fichiers du répertoire courant $ ls # ls : affichage de la liste des fichiers du répertoire 'iot' $ ls iot # ls -l = liste détaillée des fichiers du répertoire 'iot' $ ls -l iot total 4 drwxrwxr-x. 2 pugnere pugnere 6 Sep 29 03:28 exercice1 -rw-rw-r--. 1 pugnere pugnere 4 Sep 29 03:23 tp.txt # se déplacer dans un répertoire (cd = change dierctory) $ cd iot # Pour connaître le répertoire courant dans lequel on est, ici on doit se trouver dans le sous répertoire 'iot' $ pwd # se déplacer dans le répertoire précédent (..) $ cd .. # tentative de suppression du répertoire 'iot' $ rmdir iot rmdir: failed to remove 'iot': Directory not empty # c'est normal, on ne peut pas car le répertoire n'est pas vide # déplacement de fichiers : mv (move) # ici déplacement du fichiers depuis iot/exercice1/tp.txt vers le iot/tp.txt $ mv iot/exercice1/tp.txt iot $ ls -l iot total 4 drwxr-xr-x 2 petit adm 4096 Sep 29 08:36 exercice1 -rw-r--r-- 1 petit adm 0 Sep 29 08:36 tp.txt # droits associés aux fichiers et aux répertoires : # drwxr-xr-x 2 petit adm 4096 Sep 29 08:36 exercice1 # -rw-r--r-- 1 petit adm 0 Sep 29 08:36 tp.txt # uuugggooo # d = d = 'directory' # r r r # w w w # x x x # # uuu = user : droits (rwx) associés au propriétaire (ici 'petit') # ggg = group : droits (rwx) associés à tous les utilisateurs du groupe (ici 'adm') # ooo = others : droits (rwx) associés aux autres utilisateurs qui ne sont ni le propriétaire 'petit' ni les autres membres du groupe 'adm') # # r = read : droits accordés en lecture # w = write : droits accordés en écriture # x = exécute : droits accordés en exécution pour un fichier (ou accès à un répertoire si l'inode est un répertoire) # déplacement de fichiers : mv (move) # ici déplacement du fichiers depuis iot/tp.txt vers le répertoire courant (.) $ mv iot/tp.txt . # ls -l = liste détaillée des fichiers du répertoire 'iot', ici il ne contient maintenant que le sous répertoire 'exercice1' $ ls -l iot total 3 drwxr-xr-x 2 petit adm 4096 Sep 29 08:36 exercice1 # copie de fichiers cp (=copy) # crée une copie du fichier tp.txt et place la copie dans iot/exercice1/tp1.txt $ cp tp.txt iot/exercice1/tp1.txt # crée une 2ème copie du fichier tp.txt et place la copie dans iot/exercice1/tp2.txt $ cp tp.txt iot/exercice1/tp2.txt # rm (=remove) : on efface le fichier iot/exercice1/tp1.txt $ rm iot/exercice1/tp1.txt # rm -i ( '-i' avec confirmation) : on efface le fichier iot/exercice1/tp2.txt $ rm -i iot/exercice1/tp2.txt # maintenant que le répertoire 'iot/exercice1' est vide, on peut l'effacer $ rmdir iot/exercice1 # maintenant que le répertoire 'iot' est vide, on peut l'effacer $ rmdir iot # editeurs : vi, nano, emacs... $ nano fin.txt # Les redirections : stdin stdout stderr < > | # stdin = entrée standard # stdout = sortie standard # stderr = erreur standard # le '>' renvoie la sortie de la commande précédente vers un fichier # le '<' renvoie la sortie de la commande suivante ou du fichier en paramêtre, l'entrée (standard) précédente # le '|' (pipe) prends la sortie (standard) de la commande précédente et l'envoie dans l'entrée (standard) de la commande suivante # voir https://perso.liris.cnrs.fr/pierre-antoine.champin/enseignement/linux/s3.html# # redirection de la sortie de la commande 'cat tp.txt' vers le fichier tp2.txt $ cat tp.txt > tp2.txt # redirection de la sortie de la commande 'echo Bonjour' vers le fichier b1.txt $ echo Bonjour > b1.txt # le '|'' (pipe) prends la sortie (standard) de la commande précédente et l'envoie dans l'entrée (standard) de la commande tr # la commande tr 'traduit' le caractère 'B' en un 'b' $ echo Bonjour | tr 'B' 'b' bonjour # on peut aussi enchaîner les commandes en utilisant la sortie d'une commande pour l'enregistrer dans un fichier $ echo Bonjour | tr 'B' 'b' > b2.txt # on peut aussi enchaîner les commandes en utilisant la sortie d'une commande pour l'envoyer dans # l'entrée (standard) d'une autre commande ... pour par exemple l'enregistrer ensuite dans un fichier $ echo Bonjour | tr 'B' 'b' | tr 'r' 'R' bonjouR $ echo Bonjour | tr 'B' 'b' | tr 'r' 'R' > b3.txt $ cat b1.txt $ cat b2.txt $ cat b3.txt # le contenu du fichier b2.txt est envoyé dans l'entrée sandard de la commande 'tr' $ tr 'b' 'c' < b2.txt conjour # création d'une variable 'message' $ message="Bonjour" # on affiche le contenu de la variable $message $ echo $message # edition d'un script mon-premier-script.sh # y copier le contenu suivant #!/usr/bin/env bash message="Bonjour" echo $message echo $message > fichier1.txt # on essaie de l'exécuter ./mon-premier-script.sh -bash: ./mon-premier-script.sh: Permission non accordée # $ ls -l mon-premier-script.sh -rw-rw-r--. 1 pugnere pugnere 83 Sep 29 03:51 mon-premier-script.sh # les droits d'exécution ne sont pas accordés, # on ajoute les droits d'exécution chmod a+x mon-premier-script.sh $ ls -l mon-premier-script.sh -rwxrwxr-x. 1 pugnere pugnere 83 Sep 29 03:51 mon-premier-script.sh # maintenant on peut l'exécuter $ ./mon-premier-script.sh Bonjour # commande history permet d'afficher l'ensemble des commandes précédemment tapées history # les flèches haut + bas du clavier permettent de ré-invoquer une prédédente commande Ctrl-R : permet de rechercher une précédente commande dans l'historique