Comment supprimer toutes les sessions screen sous Linux ?

Testé et approuvé, en une ligne de commande vous serez capable de supprimer toutes les sessions screen sous Linux. Ceci se fera par l’intermédiaire d’une boucle for en shell. A l’intérieur de cette boucle for, vous listerez toutes les sessions avec la commande :

screen -ls

Une fois toutes les sessions listées vous récupérerez le mot-clé « Detached ». En effet, nous ne supprimerons que les sessions « détachées », ce sera en effet plus sympa pour les utilisateurs déjà connectés en mode screen.

Enfin, grâce à la commande awk on isolera uniquement la partie contenant l’identifiant de session.

Tout d’abord, vous trouverez ci-dessous un exemple :

server1:~ # screen -ls
 There are screens on:
 36130.pts-0.server1 (Detached)
 59510.pts-18.server1 (Detached)
 5700.pts-3.server1 (Detached)
 26285.pts-5.server1 (Detached)
 16726.pts-22.server1 (Detached)
 49048.pts-12.server1 (Detached)
 59782.pts-4.server1 (Detached)
 26695.pts-10.server1 (Detached)
 47762.pts-18.server1 (Detached)
 15672.pts-23.server1 (Detached)
 42181.pts-18.server1 (Detached)
 51100.pts-6.server1 (Detached)
 54468.pts-16.server1 (Detached)
 24588.pts-3.server1 (Detached)
 33985.pts-1.server1 (Detached)
 15 Sockets in /var/run/screens/S-root.

Et voilà la fameuse commande :

for i in `screen -ls | grep Detached | awk '{ print $1 }' `; do screen -S $i -X quit ; done

Source :

Stackoverflow




Comment utiliser une variable shell dans awk ?

Merci Google encore une fois ! Je cherche depuis une bonne demi-heure comment faire pour afficher une variable shell dans awk et je tombe sur un forum ubuntu qui me donne la réponse. Je suis trop contente !

Il suffit d’utiliser l’option -v et de passer en paramètre la valeur de la variable shell que l’on souhaite utiliser.

Cf. un exemple ci-dessous :

Je parse un fichier et j’affiche la ligne qui m’intéresse ainsi que la variable shell que j’aurai créée au préalable. C’est très utile quand on manipule plusieurs fichiers et qu’on veut afficher une colonne du fichier d’origine et une colonne du fichier destination et ce en une ligne.

awk -v VAR= »$myShellVariable » ‘/^MY_PATTERN/ { print $1 « ; » VAR }’ $myFile

Source : forum Ubuntu

Comment afficher la liste des répertoires sous Linux à partir du répertoire courant ?

Depuis le répertoire courant, cela donne :

ls -Rl | egrep « ^d »

Le petit ^signifie « commence par ». On recherche donc toutes les lignes commençant par d avec la commande ls (lister). d voulant dire directory ou répertoire en français. L’option -R indique qu’il faut parcourir aussi les sous-répertoires, … c’est l’option récursive. La commande egrep est utilisée lorsqu’on veut faire des recherches avec des expressions régulières en paramètre.

Nous pouvons bien sûr rediriger les résultats dans un fichier :

ls -Rl | egrep « ^d » > /home/fatiha/listeDeTousLesRepertoires

Nous pouvons aussi facilement les compter avec la commande wc :

ls -Rl | egrep « ^d » | wc -l

Exemple sur mon ordi :

[fatiha@localhost ~]$ ls -Rl | egrep « ^d » | wc -l
2205

Vous pourrez voir apparaître quelques erreurs au cas où vous n’auriez pas le droit de lister le contenu d’un répertoire « Permission denied », exemple :

ls: cannot open directory ./Téléchargements/android-sdk-linux: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-hdpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-ldpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-mdpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/gen/com: Permission denied

Dans ce cas, soit vous changez les droits, soit vous redirigez les erreurs lors du lancement de la ligne de commande. Cela donnerait :

ls -Rl 2>/dev/null | egrep « ^d » | wc -l

Vous souhaitez afficher uniquement le nom du répertoire, c’est possible en utilisant la commande awk et en lui disant de n’afficher que la 9e colonne :

ls -Rl 2>/dev/null | egrep « ^d » | awk ‘{ print $9 }’

Vous pouvez classer les noms par ordre alphabétique avec la commande sort :

ls -Rl 2>/dev/null | egrep « ^d » | awk ‘{ print $9 }’ | sort

Linux : Vérifier qu’un script lancé en background tourne bien

Admettons que je lance un script en arrière-plan sous Linux :

nohup myScript &

Je souhaite savoir s’il tourne correctement, dans ce cas, je lance les commandes ci-dessous.

while :

do

     ps -aux | grep 12526 | awk ‘{ print $8 }’ | grep R

     sleep 1

done

Je vais les décomposer :

  • boucle while
  • récupération de la liste des process en cours
  • filtrage selon le PID du script, exemple 12526
  • affichage de la colonne numéro 8 contenant le « process state code » (R+)
  • on fait une pause d’une seconde : sleep 1
  • filtrage selon l’état « running » du process

Voilà ce que j’obtiens toutes les secondes si mon script tourne bien :

R+

R+

R+

Pour en savoir plus, il suffit de taper un man ps sur sa console Linux.