Guillaume Chanel, Damien Morard
Automne
Nous allons utiliser une machine virtuelle
Tapez la commande suivante:
$ git clone https://gitlab.unige.ch/outils-info/bash.git
man
)man [section] <sujet>
q
/montexte
(valider par entrer)1 | Commandes générales |
2 | Appels systèmes |
3 | Librairie C |
4 | Fichiers spéciaux |
5 | Formats de fichiers et conventions |
6 | Jeux |
7 | Divers |
8 | Commandes d'administration et démons |
/tmp
/tmp
Les conventions suivantes (POSIX) s'appliquent:
/
/
/
est relatif au répertoire courant..
..
~
$ cd ~/././././bash
$ ls ~/./bash/../bash/../.
Les noms de fichiers suivent les règles suivantes:
.
*
?
/
!
On peut référencer plusieurs fichiers en utilisant les symboles suivants:
* | remplace zéro, un ou plusieurs caractères |
---|---|
? | un seul caractère |
commandes utiles:
man
ls
ls
qui permet de lister les fichiers cachésls -lh
home
Accès au mot de passe root: faille de sécurité majeure.
Les utilisateurs peuvent faire partie d'un ou plusieurs groupes:
Ceci permet par exemple de:
whoami
obtenez votre logingroups
obtenez vos groupesid
La commande cat
permet d'afficher un ou plusieurs fichiers à l'écran (concatenation, voir manuel):
Fichier:
Read | Lire le contenu du fichier |
---|---|
Write | Modifer le contenu d'un fichier Warning en cas de suppression |
eXecute | Exécuter le fichier (exécutable binaire ou script) |
Répertoire:
Read | Lister les noms des fichiers inclus (mais pas les métadonnées) |
---|---|
Write | Créer, renommer ou détruire les fichiers inclus |
eXecute | "Ouvrir" le répertoire, voir les métadonnées, accéder au contenu des fichiers (mais pas aux noms), exécuter les fichiers exécutables. |
La commande chmod
permet de changer les droits des fichiers:
$ chmod 754 monficher.c
chmod
La commande chmod
permet de changer les droits des fichiers:
$ chmod 754 monficher.c
Cible | Modification | Droits |
u: user g: group o: others a: all |
=: remplacement des droits +: ajout des droits -: suppression des droits |
r: read w: write x: execution |
$ chmod u+x monficher.c # ajoute les droits d'excution pour l'utilisateur
$ chmod ug=rx monficher.c # fixe les droits de l'utilisateur et du groupe à 5 (r-x)
$ chmod a-x # retire les droits d'execution à tout le monde
commandes utiles:
cat
chmod
ls
ls -l
touch file | Crée un fichier vide si le fichier n'existe pas, sinon met à jour sa date de modification |
---|---|
mkdir folder | Crée le dossier spécifié |
mv source [sources] dest | Déplace les sources vers la destination si la destination est un dossier, sinon renomme le fichier source en dest (possible changement de dossier) |
cp source [sources] dest | Copie les sources vers la destination (la destination peut être un fichier ou un dossier) |
commandes utiles:
touch
mkdir
mv
cp
rm fichier | Supprime le fichier indiqué |
---|---|
rmdir dossier | Supprime le dossier indiqué |
rm, rmdir
) - exercicesrm
, supprimez le dossier images-backup et son contenu en une commande$ rm -rf ~/*.txt
$ rm -rf ~/* .txt
Plusieurs éditeur shell sont disponibles, on peut mentionner:
nano | Editeur léger, le plus facile à appréhender, les raccourcis clavier sont indiqués en bas |
---|---|
vi | Editeur historique, forte courbe d'apprentissage |
vim | Nouvelle version de vi avec de nombreux plugins disponibles |
emacs | Editeur historique, forte courbe d'apprentissage, plus qu'un éditeur, il fait même le café |
Dans le cas ou vous utilisez nano
:
Le flux de sortie d'un programme est dirigée par défaut sur le terminal
La commande echo
affiche les paramètres sur la sortie standard
$ echo ce cours est vraiment génial
ce cours est vraiment génial
$ echo "ce cours est vraiment génial"
ce cours est vraiment génial
Ce flux peut être redirigé vers un fichier avec '>'
:
$ echo ce cours est vraiment génial > /tmp/qualite_du_cours.txt
cp
cp
Le flux d'entrée d'un programme est par défaut associé au clavier du terminal
La plupart des commandes nécéssitant une entrée en paramètre (par exemple un nom de fichier) utilisent l'entrée standard si le paramètre n'est pas donné
$ cat # va attendre et répéter les entrées utilisateur
$ cat > livre.txt # va concaténer tout ce qui est tapé dans livre.txt -> UN NOUVEL EDITEUR :-) !
Un fichier peut-être redirigé vers ce flux d'entrée en utilisant '<'
:
$ cat < livre.txt # l'entrée standard est le fichier livre
$ cat livre.txt # le programme lit depuis le fichier livre, pas depuis l'entrée standard
$ # LE RESULTAT EST LE MEME
Ctrl+D
permet d'interrompre le flux d'entrée
Les messages d'erreur des programmes ne sont pas redirigés vers le flux de sortie mais vers un flux d'erreur
Par défaut le flux d'erreur est redirigé vers le terminal
Ce flux peut être redirigé vers un fichier avec '2>'
:
$ ls non_existant_folder > /tmp/error.txt # produit une erreur sur le terminal et un fichier vide
$ ls non_existant_folder 2> /tmp/error.txt # produit un fichier contenant l'erreur
ls -R /tmp
pour lister récursivement le contenu de /tmpC | C++ | Java | Python | Ruby | |
---|---|---|---|---|---|
Entrée | stdin | std::cin | System.in | sys.stdin | $stdin |
Sortie | stdout | std::cout | System.out | sys.stdout | $stdout |
Erreur | stderr | std::cerr | System.err | sys.stderr | $stderr |
Exemple:
System.out.println( "Hello world!" );
$ java HelloWorld > hello.txt
Les pipes permettent de rediriger la sortie standard d'un programme vers l'entrée standard d'un autre
On utilise le symbole '|' entre deux commandes pour les utiliser:
$ less file # affiche le contenu du fichier file avec scrolling
$ ls -R /tmp | less # affiche la sortie de ls AVEC scrolling
Combinés à la phylosophie UNIX, les pipes sont au coeur de la puissance des interfaces en ligne de commande
grep pattern fichier | cherche et affiche les lignes du fichier qui contiennent un pattern (e.g. un mot) |
---|---|
grep pattern | cherche le pattern dans l'entrée standard et affiche les lignes le contenant |
Commandes utiles:
sort
uniq
grep
head
du
man
ls -l
pour lister les fichiers de chats du dossier images
mais sans ajouter d'arguments à ls
mails
contient des listes d'adresses. A partir de ces fichiers obtenez une seule liste des membres de l'université, triée par ordre alphabétique, sans doublonsmails
La commande ps
permet de lister les processus
Sous unix, tous les processus ont:
ps
. Qu'est-ce que les processus affichés ont en commun ?ps -ef
(voir man). Trouvez un processus qui est l'enfant d'un autre.pstree
que c'est bien le cas. Quel est le PID du processus initial (le plus ancien parent de tous les processus)?Bash utilise plusieurs fichiers cachés à la racine du home pour obtenir une configuration des shells interactifs:
.bash_profile .profile | uniquement pour les shells de login. | .bashrc | uniquement pour les shells qui ne sont PAS de login | .bash_logout | exécuté lorsqu'on quitte un shell de login |
---|
.bash_profile
)tty
).bashrc
depuis .bash_profile
(automatique sous Mac)..bashrc
)Habituellement, on utilise .bashrc
pour définir les éléments suivants:
export
)$
(comme une variable normale).export
:$ export VAR1="hello world"
$ echo $VAR1
$PATH | chemin d'accès | $HOME | répertoire Home | $LANG | Language par défaut | $DISPLAY | Serveur graphique | $PS1 | Prompt | $HOSTNAME | Nom de la machine |
---|
$PATH
définit le chemin par défaut.alias
seule permet d'afficher tous les alias.awk '{print $n}' | sélectioner la n ème colonne. |
---|---|
basename <FILE> | récupère le nom du fichier (sans le chemin) |
dirname <FILE> | récupère le chemin d'un fichier |
sed s/JPEG/jpg/ | remplace 'JPEG' par 'jpeg' |
uname -n | retourne le nom de la machine |
cut -c m-n | extrait les caractères de m à n de chaque ligne |
sed '1d' | omet la première ligne |
$ ssh login@mon.server.com
exit
ou Ctrl+D)10.25.10.53
, dont les fingerprints peuvent être:
SHA256:4l42yjlUw6yektZ7A5dPE06Mj9igDiwk+t6iriAdXhs (ECDSA)
SHA256:a9yWNjrrf+MWWEKaLpQ0hdzVxHiMZPSo3OPwIRlMdQI (ED25519)
SHA256:Gi6dG1JTuKwWSHhdEfXoFGclMxGPkQdvecsh3LXegRc (RSA)
La commande SCP
permet de copier des fichier d'un serveur vers la machine locale et vice-versa
$ scp login@mon.server.com:/path/to/my/file /path/to/destination
$ scp /path/to/my/file login@mon.server.com:/path/to/destination
Les formats de chemin habituels sont disponibles (*, ?, ~, etc.)
Vous avez à disposition une clef publique et une clef privée:
Il n'est donc pas grave de distribuer sa clef publique, en revanche la clef privée est personelle et ne doit jamais quitter la machine
Créez une paire de clef publique / privée (de préférence avec passphrase)
$ ssh-keygen
Copiez la clef publique sur le serveur
$ ssh-copy-id login@cuilxa.unige.ch
Connectez vous au serveur
$ ssh login@cuilxa.unige.ch