IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Le Shell > Commandes avancées
        Comment connaître les différents processus en cours lancés par un programme ?
        Que signifie le caractère > ou < (redirection) ? Quelle utilité ?
        Que signifie le caractère | (pipe) ? Quelle utilité ?
        Que signifie le sticky bit ?
        Comment filtrer la sortie standard et/ou la sortie d'erreurs ?
        Comment effacer des fichiers selon leur date ?
        Que signifie le caractère & ? A quoi sert-il ?
        Comment passer un processus en background si on a oublié le &?
        Comment dialoguer avec un serveur ftp ?
        Démarrer un programme non-graphique en arrière plan et le rappeller à la volée ?
        Comment récupérer les 10 derniers caractères d'une chaine ?
        Comment faire une boucle sur une indice ?
        Quelle est la différence entre nohup et & ?

rechercher
precedent    sommaire    suivant    telecharger


Comment connaître les différents processus en cours lancés par un programme ?
auteur : Francois Trazzi
Par exemple, vous utilisez le shell zsh, et vous voulez savoir à quel(s) PID (Processus IDentification) il(s) est(sont) lié(s).
La commande fuser retourne les différents PID de zsh :
$ fuser /bin/zsh
/bin/zsh: 1942e 2860e 2996e 3469m 3487e 4527m 4607e
Comme indiqué dans le man, les caractères suivant le PID correspondent à :
  • c : répertoire courant
  • e : programme en cours d'exécution
  • f : fichier ouvert. f est omis par défaut
  • r : répertoire racine
  • m : fichier projeté en mémoire, ou bibliothèque partagée.
On observe donc ici que l'on a 5 programmes zsh en cours d'exécution, et 2 projetés en mémoire.
On vérifie la valeur des PID qui correspond bien aux valeurs retournées par fuser :
$ ps -aux | grep zsh
francois 1942 0.0 0.0 3560 4 vc/1 S 10:24 0:00 -zsh
francois 2860 0.0 0.9 3900 2484 pts/1 S 13:43 0:00 /bin/zsh
francois 2996 0.0 0.8 3692 2212 pts/2 S 14:01 0:00 /bin/zsh
root 3469 0.0 0.8 3612 2084 pts/1 S 15:25 0:00 zsh
francois 3487 0.0 1.0 3976 2580 pts/1 S 15:25 0:00 zsh
root 4527 0.0 0.9 3768 2308 pts/2 S 19:49 0:00 zsh
francois 4607 0.2 0.8 3728 2268 pts/2 R 20:13 0:00 zsh
francois 4632 0.0 0.2 1904 760 pts/2 R 20:14 0:00 grep zsh

Que signifie le caractère > ou < (redirection) ? Quelle utilité ?
auteur : nyal
Ce sont les opérateurs permettant de gérer les flux de données.
La redirection '>' permet de stocker la sortie d'un programme dans un fichier. Cela crée le fichier s'il n'existait pas, et efface son contenu s'il existe (il faut donc faire attention !) :
$ cat fichier1 > fichier_sauvegarde
Si l'on veut rajouter des données au fichier, on utilisera la double redirection '>>' :
$ cat ajout >> fichier_sauvegarde
La redirection '<' joue le même rôle. Au lieu de taper au clavier le contenu du fichier, vous pouvez utiliser cette redirection et ainsi le fichier va se substituer a l'entrée standard (saisie clavier) :
$ cat < nom_du_fichier
$ cat < fichier1 > fichier_sauvegarde
Vous remarquerez que la dernière commande a le même effet que la première.


Que signifie le caractère | (pipe) ? Quelle utilité ?
auteur : nyal
Le caractère '|' permet de lier des commandes entre elles. La sortie standard d'une commande devient l'entrée standard de la commande suivante :
$ cat fichier | grep YES
La commande cat envoie le contenu du fichier vers la commande grep qui va le lire. Bien entendu, si vous utilisez une commande qui ne lit pas de données sur l'entrée standard, cela n'aura aucun resultat :
$ cat fichier | ls
La commande cat envoie bien le contenu vers la commande ls, laquelle ne lit pas sur son entrée standard. Par conséquent, le pipe entre les deux commandes ne sert absolument à rien ;)
Il est tout à fait possible d'enchaîner un très grand nombre de pipes (la limite dépend des shells).
nyal $ cat fichier | grep YES | sed 's/YES/NO/'

Que signifie le sticky bit ?
auteur : 2Eurocents
Voici la signification du sticky bit :

  • sur un fichier : un programme executable sera maintenu en zone de swap après la fin de son exécution, ce qui accélerera les chargements ultérieurs
  • sur un répertoire : un fichier du répertoire ne peut être supprimé que par son propriétaire
Permettre à n'importe quel utilisateur de créer et modifier ses fichiers dans un répertoire, c'est mettre les droits rw (et x pour l'exploration) pour tous les utilisateurs (propriétaire, groupe et autres).

Le stickybit sert juste à éviter qu'un utilisateur ne détruise les fichiers des autres. On le fixe de la manière suivante :

Pour le mettre
chmod a+t
Pour l'enlever
chmod a-t
C'est aussi le 1 de la première position lorsque l'on utiliser un masque à quatre chiffres avec la notation octale de chmod


Comment filtrer la sortie standard et/ou la sortie d'erreurs ?
auteur : Francois Trazzi
A l'aide des commandes grep et cut, on va extraire l'occurrence "/home/francois" du fichier /etc/passwd :
$ cat /etc/passwd | grep francois
francois:x:502:502::/home/francois:/bin/zsh
La commande grep permet de ne conserver que la ligne contenant "francois" de la sortie standard de cat.
$ cat /etc/passwd | grep francois | cut -f6 -d:
/home/francois
La commande cut permet de couper certains mots d'une ligne.
L'option -f6 indique que l'on veut garder la 6ème chaîne de caractères, délimitée par le signe ':' (option - d).


Comment effacer des fichiers selon leur date ?
auteur : nyal
La commande find permet de faire le plus rapidement possible ce genre de traitement.

Pour afficher les fichiers vieux de plus de 24 heures :
$ find . -ctime +1
Pour les effacer :
find . -ctime +1 -exec rm -f  \{\} \;
L'option -i de la commande rm est utilisé pour demander une confirmation pour chaque fichier à effacer.


Que signifie le caractère & ? A quoi sert-il ?
auteur : nyal
Ce caractère signifie que la commande sera exécutée en tâche de fond.
Ainsi vous aurez toujours accès au shell pour exécuter d'autres commandes sur le terminal :
$ xmms &
$

Comment passer un processus en background si on a oublié le &?
auteur : Pouic
Quand on lance une application depuis le terminal (genre xpdf, emacs, etc....) , on veut souvent reprendre la main sur ce meme terminal, non ?
Mais on a oublié le & magique ! C'est terrible, il va falloir tout refermer pour tout réouvrir !
Eh bien non : imaginons le cas :

$ xpdf toto.pdf 
Si on veut reprendre la main sans avoir a fermer, on revient sur le terminal, puis un petit Ctrl-Z histoire de geler le processus : là, on reprend la main. Et tout de suite derriere, on fait :

$ bg

Comment dialoguer avec un serveur ftp ?
auteur : nyal
Il existe de nombreux programmes ftp en mode console.
Voici un exemple pour exécuter des commandes ftp automatiquement :
$ lftp -c "open nom_de_domaine ; user login password ; mput src destination ; ls"
ou :
$ ncftp -u login -p passwd host << EOF
get fichier
ls
EOF
Ces méthodes sont utilisées dans les scripts shell (par cron notamment).


Démarrer un programme non-graphique en arrière plan et le rappeller à la volée ?
auteur : Sylvain Luce
La commande screen permet de lancer des processus non graphiques, qui seront rattachés au processus init. Ainsi, vous pourrez enlever votre programme de votre console et le rappellez quand vous le désirez. Pour cela, commençons par créer un screen :

screen -dmS nom_du_screen  'commande_a_lancer' 
Vous entrez directement dans votre screen en lancant la commande. Pour détacher le screen de votre terminal:

CTRL+A CTRL+D 
Pour attacher le screen à votre terminal :

screen -x nom_du_screen
Vous pouvez ainsi lancer un bash détachable de votre terminal et récupérable n'importe quand et n'importe où. Très pratique pour ne pas avoir beaucoup de fenêtres d'ouverts ou quand on se connecte à distance à une machine de différent poste

Les raccourcis claviers sont modifiables dans un fichier de configuration /etc/screenrc


Comment récupérer les 10 derniers caractères d'une chaine ?
auteur : narmataru

#:~$ toto="bonjour le monde" 
#:~$ echo ${toto:$((${#toto}-10))} 
r le monde 
${var:x} : extrait la sous chaine de $var à partir caractère n° x jusqu'à la fin.
$((....)) : permet de faire des calculs.


Comment faire une boucle sur une indice ?
auteurs : Alveric, bobuse
ou l'équivalent du for (int i=4; i<=8; i++) { ... } du C++


for i in `seq 4 8`; do
   # commande
done 
Attention, car si vous voulez générer de grosses listes avec cette méthode, ça bouffe de la mémoire... (toutes les valeurs sont calculées et conservées).


Quelle est la différence entre nohup et & ?
auteur : Sylvain Luce
Lorsqu'on lance une commande avec le caractère & à la fin, la commande est lancée en tache de fond mais reste rattachée à votre terminal. Vous pouvez continuez à travailler sur le terminal mais si vous le quittez, la tache de fond est détruite (rapport père/fils)
Si vous lancez une commande avec nohup en préfixe (exemple : nohup ma_tache.sh), alors votre tache est détachée de son père et rattaché à l'init si vous quittez votre terminal...


rechercher
precedent    sommaire    suivant    telecharger

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.