Outils pour utilisateurs

Outils du site


ubu:ubd

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

Ubuntu Serveur

ubu/ubd.txt · Dernière modification : de 127.0.0.1