Linux Embarqué
Quelques commandes utiles
cd
-> change directory
cd .
-> on avance
cd ..
-> on recule
cd
- on retourne a la racine
ls
-> y a quoi la?
ls-la
-> y a quoi la avec des details sur les fichiers
cat
-> on lit ce qui a écrit dans un fichier
ln -s
-> on créer un lien symbolique
ln
pour lien
-s
pour symbolic
-h
pour hard link
echo
-> affiche ce que tu dis après
(echo "dbsuicbqs" > toto/fichier
) -> on met des trucs dans un fichier sans l'ouvrir
tree
-> joli affichage en arbre
Les opérations sur les fichiers
CREATE
DELETE
OPEN
CLOSE
READ
WRITE
APPEND
SEEK
GET ATTRIBUTES
SET ATTRIBUTES
RENAME
Stockage de données
Contiguê = les uns a la suite des autres
Liste chainée = on indique le suivant
Liste chainée indexée = on créer une table avec les adresses des blocs memoires qui se suivent
Vocabulaire
Processus Zombie = processus dont le parent meurt, il ne peut donc pas être supprimer par le processus initial, il va bouffer de la ressource
Exercice 2
5 processus A, B, C, D et E sont soumis à un calculateur dans cet ordre, mais quasi simultanément. Ces travaux ne font pas d'entrées-sorties. Leurs durées respectives sont 10, 6, 2, 4 et 8 secondes.
Déterminer les temps de réponse de chacun des processus, ainsi que le temps de réponse moyen, pour les disciplines FIFO (First In First Out) et SJF (Shortest Job First)
A = 10 B = 16 C = 18 D = 22 E = 30
Temps de réponse moyen : (10+16+18+22+30)/5 = 19,2s
Même question pour une discipline à priorité, avec P(A)=3, P (B)=5, P(C)=2, P(D)=1, P(E)=4 avec le plus petit chiffre égal à la priorité la plus forte.
D = 4 C = 6 A = 16 E = 24 B = 30
Temps de réponse moyen : (4+6+16+24+30)/5 = 16s
Expressions régulières
Les expressions régulières caractérisent uniquement des chaînes de caractères et non pas des noms de fichiers.
Exercice 1
Afficher l’ensemble de vos variables d’environnement : printenv Donner la signification de: PATH = lien de tous les executables executable partout PS1 = info sur le prompt HOME = Directory de base de l'utilisateur TERM = Configuration du terminal
env | grep "TERM"
echo $TERM
Quels sont les alias présents sur votre machine?
alias >> maindell/Dropbox/Cours/OS/TP1.txt
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
Créer un alias lu qui réalise la commande ls -lrt?
alias lu='ls -lrt'
Le rendre permanant
echo "alias lu='ls -lrt'" >> ~/.bash_aliases
Supprimer cet alias
unalias lu
Créer, dans votre environnement de travail, l’arborescence suivante :
SE
/TP1
/doc
/script
/delivery
/TP2
/bin
/obj
/src
/inc
mkdir -p SE/{TP1/{doc,script,delivery},TP2/{bin,obj,src,inc}}
Afficher son répertoire courant
pwd
Créer le fichier bonjour.c sous SE/TP2/src contenant les lignes suivantes :
// directive du préprocesseur
#include <stdio.h>
/* prototype des fonctions */
/* programme principal */
main(){
printf(« Bonjour\n ») ;
/*
0100123456123
0100123457123
0100123458123
0100123459123
0100123450123
0100123451123
0100123451123
*/
}
cd ~/Dropbox/Cours/OS/SE/TP2/src
touch bonjour.c
echo "// directive du préprocesseur
#include <stdio.h>
/* prototype des fonctions */
/* programme principal */
main(){
printf(« Bonjour\n ») ;
/*
0100123456123
0100123457123
0100123458123
0100123459123
0100123450123
0100123451123
0100123451123
*/
}" >> bonjour.c
Déplacer vous sous votre home directory et créer le fichier vide config.txt
cd ~
touch config.txt
Déplacer vous par un déplacement absolu sous le répertoire src et compiler le programme
bonjour.c en un programme exécutable bonjour. Le résultat de la compilation est déplacé sous bin.
cd ~/Dropbox/Cours/OS/SE/TP2/src
gcc bonjour.c -o ~/Dropbox/Cours/OS/SE/TP2/bin/bonjour
Afficher les types des fichiers bonjour et bonjour.c
ls -lrt
Déplacez vous par un déplacement relatif sous bin
cd ..
cd bin/
Modifier les droits du fichier bonjour afin qu’il soit:
- en lecture, écriture, exécution pour le owner
- en lecture, exécution pour le groupe
- et non accessible pour les autres.
chmod 750 coucou
Déplacez vous sous votre home directory et modifiez de façon récursive l’ensemble des droits (directories + fichiers) de TP2
cd ~
find ./Dropbox/Cours/OS/SE/TP2 -type d -exec chmod 751 {} \;
chmod -R 750 /Dropbox/Cours/OS/SE/TP2
Copier le fichier bonjour.c en salut.c en local,
cp bonjour.c salut.c
Copier le répertoire TP2 en TP3 avec l’ensemble de ses fichiers,
cp -R /Dropbox/Cours/OS/SE/TP2 /Dropbox/Cours/OS/SE/TP3
Déplacer le fichier salut.c de TP3 dans SE/TP2/src en l’appelant salut1.c,
mv /Dropbox/Cours/OS/SE/TP2/src/salut.c /Dropbox/Cours/OS/SE/TP3/src/salut1.c
Effacer le fichier bonjour.c de TP3,
rm /Dropbox/Cours/OS/SE/TP3/src/bonjour.c
Effacer TP3
rm -R /Dropbox/Cours/OS/SE/TP3
Copier le répertoire TP2 en TP3 avec l’ensemble de ses fichiers
cp -R /Dropbox/Cours/OS/SE/TP2 /Dropbox/Cours/OS/SE/TP3
Changer les droits du fichier salut.c de TP3 en _rwxrwxrwx
chmod 777 /Dropbox/Cours/OS/SE/TP3/src/salut.c
Changer le owner de ce fichier par le nom de login de votre voisin(e), monitorer le résultat,
chown root /Dropbox/Cours/OS/SE/TP3/src/salut.c
Changer le groupe de ce fichier par un groupe connu sur la machine,
chgrp root /Dropbox/Cours/OS/SE/TP3/src/salut.c
Attribuer les droits rwxrwxrwx à TP3 et aux fichiers qu’il contient,
chmod -R 777 /Dropbox/Cours/OS/SE/TP3
Changer en une seule commande le owner et groupe de TP3 et des fichiers qu’il contient,
chown root:root /Dropbox/Cours/OS/SE/TP3
Se positionner sur son home directory et créer un lien symbolique vers le fichier salut.c de TP3.
cd
ln -s /Dropbox/Cours/OS/SE/TP3/salut.c
Editer ce lien. Expliquer la différence entre un lien permanent et un lien symbolique.
cat /Dropbox/Cours/OS/SE/TP3/salut.c
Afficher de trois façons différentes le contenu du fichier bonjour.c
cat, nano, vi
Afficher le contenu de votre PATH,
$PATH(/home/maindell/bin:/home/maindell/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games)
Modifier le contenu de la variable d’environnement PATH afin d’y ajouter le répertoire local.
export PATH=/Dropbox/Cours/OS/SE/TP2/bin:$PATH
Vérifier que, situez sous SE/TP2/bin, vous pouvez lancer bonjour de la façon suivante :
bonjour
Oui
( Attention de ne pas effacer PATH)
Modifier votre profil utilisateur afin de modifier PATH comme précédemment.
Modifier votre prompt afin d’afficher [
export ps1 mes couilles
Déplacez vous sous SE/TP1/script et créer, en 1 seule commande, un fichier essai.bash contenant #!/bin/bash
cd /home/maindell/Dropbox/Cours/OS/SE/TP1/script
echo '#!/bin/bash' >> /home/maindell/Dropbox/Cours/OS/SE/TP1/script/essai.bash
Ajouter à la fin de essai.bash la ligne « ls –lrt » (en une seule commande)
echo 'ls -lrt' >> essai.bash
Sur le shell 1, affichez la fin du fichier essai.bash avec mise à jour,
tail -f essai.bash
Rechercher l’occurrence « include » dans le fichier bonjour.c
grep 'include' /home/maindell/Dropbox/Cours/OS/SE/TP2/src/bonjour.c
Afficher l’ensemble des processus utiliser par root, puis par votre user,
ps -U root
Afficher l’ensemble des sockets utilisées par votre machine,
netstat
Afficher l’ensemble des sockets en état ‘ESTABLISHED’ sur votre machine.
netstat | grep 'ESTABLISHED'
Affichez le nombre de sockets en état ‘ESTABLISHED’
netstat | grep 'ESTABLISHED' | wc -l
netstat | grep -c 'ESTABLISHED'
Changer votre password
passwd
Rechercher à partir de votre home directory l’ensemble des fichiers .c contenus dans ce répertoire et ses sous répertoires
find / -name '*.c'
Rechercher à partir de votre home directory l’ensemble des fichiers .c contenant le caractère ‘u’ dans leur nom,
find / -name '*u.c'
Rechercher à partir de votre home directory l’ensemble des occurrences de « printf » dans l’ensemble des fichiers .c contenus dans ce répertoire et ses sous répertoires,
`find -name '*.c' -exec grep 'println' {} \; -print
Rechercher à partir de votre home directory l’ensemble des fichiers qui ne sont pas d’extension.c
find / -not -name '*.c'
Modifier l’ensemble des fichiers contenu dans votre répertoire courant et ses sous-répertoires d’extension .bak en .c
rename s/.bac/.c/ *.bac
Afficher dans un fichier le contenu de l’ensemble des fichiers .c se trouvant sous ./SE/TP2/src.
ls *.c |xargs cat > /home/maindell/Dropbox/Cours/OS/SE/retour.txt
Afficher qui est loggé sur votre machine ?
who
Afficher qui est loggé sur votre machine sur la sortie standard mais également dans un fichier log.txt (sans répétition de commande) ?
who>exo.log
Afficher quel est le nom de votre machine ?
uname -a
Afficher quel est le nom de votre système ?
uname
Afficher quel est le nom du terminal associé à votre user ?
tty
Afficher les numéros utilisateurs et groupe
id
Monitorer de manière dynamique l’ensemble des process (rafraichissement de la commande 2 secondes),
Lancer un process en background,
firefox &
Monitorer le de 2 façon différentes,
ps
Tuer le violemment.
kill 1
Lancer un process, l’interrompre et le mettre en exécution en background,
firefox
CTRL+Z
bg
Monitorer le,
ps
Basculer ce process en foreground,
jobs
fg1
Stopper le par un signal d’interruption.
CTRL+C
Transformer les commentaires // en /* */ – Affichage stdout
sed -e 's/\/\/\(.*\)/\/* \1 *\//g' TP2/src/bonjour.c>salut.C
sed -e 's://\(.*\):/* \1 */:g' TP2/src/bonjour.c>salut.C
g pour dire qu'on fait ça sur toutes les lignes
Exo chiant
awk 'BEGIN {FS=":" ; OFS='@'} {print "Affichage de la ligne "NR" avant modification: "$0} $7!="" {print "Shell trouve ligne "NR" : "$7" remplace par /bin/bash" ; $7="/bin/bash"} $6="" {print "Usenr directory trouve ligne "NR" : "$6" (User : "$1" "} {print "Ligne "NR" apres modification : "$0"} ' /etc/passwd