Exercices Chapitre 5 -- 30 exos en ligne de commande
Exercice 1
Donner la liste de tous les comptes et uniquement ceux-là, issus du fichier passwd triés par ordre alphabétique. Le résultat sera mis dans le fichier /tmp/out. Vous utiliserez cut et sort.
cat /etc/passwd | cut -d : -f1 | sort >> /tmp/out cat /etc/passwd | cut -d : -f1 | sort > /tmp/out && cat /tmp/out
Exercice 2
- Donner le nombre de fichiers dans /usr/bin. Vous utiliserez ls et wc.
- Liste des fichiers au sens strict du terme :
ls /usr/bin/ | wc -l
- Liste des fichiers en excluant les répertoires et les liens symboliques :
ls -l /usr/bin/ | grep '^-' | wc -l
- Vérification avec find :
find /usr/bin/ -type f | wc -l
Exercice 3
- Rechercher dans /usr/share/doc tous les fichiers compressés avec gzip (extension .gz) et indiquer leur nombre.
- Vous utiliserez find et wc.
find /usr/share/doc | grep '\.gz$' | wc -l find /usr/share/doc -name *.gz | wc -l find /usr/share/doc -type f -name "*.gz" | wc -l
Exercice 4
- Donner la liste des processus shell (bash) lancés par des utilisateurs.
- Vous utiliserez ps et grep.
- Processus lancés par tous les utilisateurs y compris root : ps au | grep ‘bash$’
ps aux | grep bash
Exercice 5
- Que se passe t-il à la suite de la commande :
cat /etc/passwd | tr '\n' '\r' > /tmp/newpasswd
Cette commande remplace tous les passages à la ligne par un retour chariot dans le fichier /etc/passwd et écrit le résultat dans /tmp/newpasswd
le résultat de la commande cat est passé à la commande tr qui va créer une nouvelle ligne avec un retour chariot dans un fichier /tmp/passwd
Exercice 6
- Créez un fichier dont chaque ligne commence par un chiffre, suivi d'un slash (/), puis d'un ou plusieurs mots.
- Affichez les lignes de ce fichier triées en ordre croissant, suivant le nombre placé en début de ligne:
sort -n /tmp/test.txt
- Eliminez de chaque ligne le chiffre et le caractère «/»:
cat /tmp/test.txt | cut -d / -f 2 > /tmp/newtest.txt
- Triez ces lignes par ordre alphabétique inverse:
sort -r /tmp/newtest.txt echo -e '/aa\n/bb\n/cc\n/dd\n/ee' | nl | sed 's/^[ \t]*//' | tr -d [:blank:] | tr -d [:digit:] | tr -d / | sort -r >> ok echo -e '/aa\n/bb\n/cc\n/dd\n/ee' | nl -n ln | tr -d [:blank:] > /tmp/ok.bak && cat /tmp/ok.bak | tr -d [:digit:] | tr -d / | sort -r > /tmp/ok && cat /tmp/ok
Exercice 7
- Combien de fichiers de configuration avez-vous dans le répertoire /etc (sans compter les sous-répertoires) ?
find /etc -maxdepth 1 -type f | grep '\.conf' | wc -l grep pas nécessaire : mêmes les fichiers sans extension .conf peuvent être des fichiers de configuration find /etc/ -maxdepth 1 -type f -prune | wc -l
Exercice 8
- Combien de répertoires de configuration avez-vous dans le répertoire /etc (sans compter les sous-répertoires) ?
find /etc -maxdepth 1 -type d | grep 'conf' | wc -l grep pas nécessaire find /etc/ -maxdepth 1 -type d | wc -l
Exercice 9
- Comment mettre dans un fichier la liste de tous les fichiers (pas les dossiers) de l'arborescence à partir du répertoire courant ?
sudo find . -type f > /tmp/files-list.txt find . -maxdepth 1 -type f | tr -d /. > /tmp/ok ls -l | grep ^- >> /tmp/ok
Exercice 10
- Créez un fichier liste contenant la liste de tous vos fichiers, avec leur taille, leurs droits, etc. (à partir de votre répertoire personnel)
- Avec ls:
ls -l | grep '^-' > /tmp/files.list
- Avec find:
find . -maxdepth 1 -type f -ls > /tmp/files.list ls -lh >> ok && sed -i '/^d/d' /tmp/ok ls -lh | grep ^- >> /tmp/ok
Exercice 11
- Comment afficher uniquement les fichiers du répertoire courant qui sont des liens symboliques ?
ls -l | grep '^l'
OU
find . -maxdepth 1 -type l ls -la | grep ^l
Exercice 12
- Combien de lignes contiennent le mot «file» dans la page de man de ls (sans tenir compte de la casse) ?
man ls | grep file -i | wc -l man ls | grep -i file | wc -w -l
Exercice 13
- Quels sont les dix plus gros fichiers de /usr/bin/ ?
find /usr/bin -type f -ls | sort -k 7 -rn | head
ls -l /usr/bin/ -S | head -11
find /usr/bin/ -type f | xargs du -s | sort -rn | head
find /usr/bin/ -type f -exec du -s {} \; | sort -rn | head
ls -lSh /usr/bin/ | head -n 11
Exercice 14
- Chercher toutes les lignes commençant par «a» ou «A» dans le fichier zola_curee.txt. Combien y a-t-il de lignes ?
grep '^a' regexp/zola_curee.txt -i -c
J’ai remplacé le . par un retour à la ligne, ensuite j’ai viré les espaces de début de ligne, j’ai ensuite compté le nombre de ligne commençant par A
sed 'y/\./\n/' zola_curee.txt | sed 's/^ //' >> ok && sed -n '/^[Aa]/p' ok | wc -l
Exercice 15
- Chercher toutes les lignes contenant au moins un chiffre dans le fichier zola_curee.txt. Combien y a-t-il de lignes ?
grep '[[:digit:]]' regexp/zola_curee.txt -c
sed -n '/[0-9]/p' zola_curee.txt | wc -l
Exercice 16
- Chercher toutes les lignes finissant par un signe de ponctuation autre que le point (virgule, point-virgule, deux-points, point d'interrogation, point d'exclamation) dans le fichier zola_curee.txt.
- Combien y a-t-il de lignes ?
grep '[[:punct:]]$' regexp/zola_curee.txt | grep -cv '\.$'
sed -n '/[\,\;\:\?\!]$/p' zola_curee.txt | wc -l
Exercice 17
- Rechercher tous les mots dont la seconde lettre est un «r» dans le fichier zola_curee.txt.
sed 's/\b/\n/g' regexp/zola_curee.txt | grep '^.r'
- Combien y a-t-il de mots ?
grep -o '\b\wr' regexp/zola_curee.txt | wc -l
- MOTS UNIQUES :
sed 's/\b/\n/g' regexp/zola_curee.txt | grep -i '^.r' --color=always | sort -u | wc -l cat zola_curee.txt | grep '\<.r' | wc -l 247 cat zola_curee.txt | grep -E '(\b.\Br)' | wc -l 247 regex: groupe ( ) boundary word \b. non-word boundary \Br
Exercice 18
- Rechercher tous les mots contenant un «r» précédé d’un nombre quelconque de lettre majuscule ou minuscule dans le fichier zola_curee.txt.
sed 's/\b/\n/g' regexp/zola_curee.txt | grep '.r'
- Combien y a-t-il de mots ?
sed 's/\b/\n/g' regexp/zola_curee.txt | grep '.r' | wc -l
cat zola_curee.txt | grep -E '(r\w+)' | wc -l
Exercice 19
- La chaîne de caractères the est-elle présente dans le fichier texte_01.txt ?
grep 'the' regexp/texte_01.txt
- Combien de lignes contiennent cette chaîne de caractères ?
grep 'the' regexp/texte_01.txt | wc -l
- Quels en sont les numéros ?
grep -n 'the' regexp/texte_01.txt | cut -d : -f1 | column
cat texte_01.txt | grep -i -o -n 'the' | wc -w
cat texte_01.txt | grep -i -o -n 'the' && cat texte_01.txt | grep -i -o -n 'the' | wc -l
Exercice 20
- Combien de fois le mot NASA est-il présent dans le fichier texte_01.txt ? (on cherche un mot, pas une chaîne de caractères).
sed 's/\b/\n/g' regexp/texte_01.txt | grep '^NASA$' | wc -l
grep -i -o 'nasa' texte_01.txt | wc -w
Exercice 21
- Combien y a-t-il de lignes vides dans le fichier texte_01.txt ?
grep '^$' regexp/texte_01.txt | wc -l
sed -n '/^$/p' texte_01.txt | wc -l
Exercice 22
- Le fichier texte_01.txt contient il des nombres entiers ?
- N’afficher que les nombres et pas toute la ligne qui contient un nombre.
sed 's/\s/\n/g' regexp/texte_01.txt | grep -E '^[0-9]+$' | column
Tout dépend de ce qu’on cherche exactement…
sed 's/\s/\n/g' regexp/texte_01.txt | grep -E '^[0-9]+$' | sort -nu | wc -l
cat texte_01.txt | grep -P '(\d+)' | wc -l
-P, c’est pour –perl-regexp
Exercice 23
- Lister les commandes de /usr/bin qui s’écrivent avec deux caractères.
find /usr/bin -type f -executable | cut -d / -f4 | grep -E '^..$'
OU
find /usr/bin -type f -executable | grep -E '^/usr/bin/..$'
ls /usr/bin/ | sed -n '/^..$/p'
Exercice 24
- Lister toutes les balises html du document page.html (une balise html est un mot ou un ensemble de mots entouré de chevrons : <voici une balise>).
sed -e 's/</\n</g' -e 's/>/>\n/g' regexp/page.html | grep '^<.*>$'
- Combien y en a-t-il (sans compter les doublons) ?
sed -e 's/</\n</g' -e 's/>/>\n/g' regexp/page.html | grep '^<.*>$' | sort -u | wc -l
cat page.html | grep -P -o '(<\w+|\/\w+>)' | tr -d \/ | tr -d \< | tr -d \> | sort -u
cat page.html | grep -P -o '(^<(\w+))' | tr -d \< | sort -u
Exercice 25
- Le document page.html contient t’il des expressions en gras (une fois affichées dans le navigateur ; vous devrez savoir quelle balise est utilisée pour cela) ?
grep '<strong>' regexp/page.html | wc -l
sed -n '/<b>/p' page.html oui le doc contient bien des balises <b><b/>
Exercice 26
- Rechercher dans le répertoire /etc et ses sous-répertoires les fichiers ayant une extension et contenant plus de 3 lettres dans leur nom
sudo find /etc -type f | grep -Ei '\/[a-z]+[^\.\/]*[a-z]+[^\.\/]*[a-z]+[^\.\/]*[a-z]+\.[^\/]*$'
sudo ls -R /etc/ | sed '/.{4,}\..{3}/p' | more
Exercice 27
- Trouver une commande permettant de renommer tous les fichiers .test en .old dans votre répertoire personnel
sudo apt install rename rename 's/\.test/.old/' *.test
find ~ -name "*.test" -type f -exec bash -c "mv '{}' \`dirname '{}'\`/\`basename '{}' .test\`.old" \;
Exercice 28
- Rechercher dans le répertoire /etc (mais pas ses sous-répertoires) les fichiers ayant au moins 3 lettres successives en commun avec les 3 premières lettres des fichiers de votre répertoire personnel
find . -maxdepth 1 -type f | while IFS= read -r f; do f="$(basename $f)" f="$(sed 's/[^a-z]//g' <<< "$f")"; f="${f:0:3}"; echo ">> $f matching '/[$f]{3,}.*$'"; find /etc/ -maxdepth 1 -type f | grep -E --color=always "/.*[$f]{3,}.*$"; done
ls | cut -c 1-3 | uniq | xargs -I letters find /etc -maxdepth 1 -name '*letters*'
- récupération des deux commande ls dans des variables test_1 et test_2
- établir une liste avec 3 caractéres ls 1 | grep -o -E '^…'
- puis ….. faire un script !
xargs va faire une boucles
ls | cut -c 1-3 | uniq | xargs -I lettres find /etc/ -maxdepth 1 -name '*lettres*'
Exercice 29
- Rechercher dans votre répertoire personnel et ses sous-répertoires tous les fichiers ayant été modifié moins de 10 minutes auparavant
sudo find . -type f -mmin -10 find ~ -type f -mmin -10
Exercice 30
- Rechercher dans votre répertoire personnel et ses sous-répertoires tous les fichiers ayant été modifié aujourd’hui, hier et la semaine passée.
sudo find . -type f -ctime -1 sudo find . -type f -ctime -2 sudo find . -type f -ctime -7
→ mtime = modification des datas → ctime = modification du status
http://www.expreg.com/symbole.php
echo -e "\nToday\n*****"; find ~ -type f -mtime -1 && echo -e "\nHier\n****"; find ~ -type f -mtime +1 && echo -e "\n7Jours\n*******"; find ~ -type f -mtime +6
