logo piwik

Réseau - Web - GNU/Linux

2010 04 mars

Commandes utiles

Rédigé par Marc GUILLAUME | Aucun commentaire

Ces petites commandes que l'on oublie si facilement

Cet article contient diverses petites commandes que l'on n'utilise pas forcément tous les jours et que l'on oublie. C'est un pense-bête dans ma catégorie pense-bête !

Modifier l'éditeur par défaut du système

L'éditeur par défaut de Debian est configuré à l'installation. Si vous avez vos habitudes avec un éditeur particulier et qu'il ne soit pas celui par défaut vous préférerez certainement l'utiliser, par exemple pour éditer les fichiers crontab. Debian propose un outils pour réaliser ce type de choix  update-alternatives. La commande liste toutes les alternatives installées sur la machine et vous permet de choisir. La syntaxe est la suivante :

# update-alternatives --config editor

La sortie affiche les éditeurs disponibles affiche quatre possibilités, il y en aurait plus de trois si vous aviez installé d'autres éditeurs (comme joe par exemple). Comme vous l'auriez deviné, dans la liste c'est le nom d'éditeur précédé d'une étoile (*) qui est celui par défaut. Pour ma part j'utilise vim donc c'est celui que je vais choisir à la place de nano par défaut.

There are 3 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/nano            40        manual mode
  2            /usr/bin/vim.basic   30        manual mode
  3            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode 

Après avoir saisi 2 et pressé Enter si je recommence pour vérifier je vois que l'éditeur a bien changé :

 # update-alternatives --config editor
There are 3 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /bin/nano            40        auto mode
  1            /bin/nano            40        manual mode
* 2            /usr/bin/vim.basic   30        manual mode
  3            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number:  

Remplacements par lot avec find et sed

Il est courant de devoir changer une chaîne de caractères qui apparaît dans plusieurs fichiers d'un répertoire et de ses sous-répertoires. Les commandes utiles dans ce cas sont find et sed.

La syntaxe de find est la suivante :

find /chemin/de/recherche -name "motif du fichier recherché" -type f 
find
Le nom de la commande
-name
La chaine représentant le nom du fichier, qui prend les jockers ? et * pour un caractère et n'importe quel caractère
-type
Le type de fichier à rechercher. f indique que l'on ne veut que les fichiers (pas les répertoires).

La syntaxe de sed est la suivante :

sed -i 's/chaîne recherchée/chaîne à substituer/g'
sed
Le nom de la commande
-i
Option attendant des chemins de fichiers et indiquant que l'on veut modifier les fichiers au lieu d'envoyer la modification sur la sortie standard
's/chaîne recherchée/chaîne à substituer/g'
Chaîne indiquant à sed les actions à réaliser. s indique qu'il faut réaliser une substitution, g qu'il faut substituer toutes les occurances de la chaine et pas seulement la première (comportement par défaut). « chaîne recherchée » est le motif qu'il faut rechercher (c'est une regex) et « chaîne à substituer » est la chaîne de remplacement.

L'option -exec commande {} de find permet de relier les deux commandes. la syntaxe est la suivante :

find /home -name "*.txt" -type f -exec sed -i 's/toto/titi/g' {} \;

Dans cet exemple on cherche à remplacer la chaîne toto par la chaîne titi dans tous les fichiers en .txt du répertoire /home. Le point-virgule final indique à find la fin de la commande, il est échappé par un anti-slash pour qu'il ne soit pas interprêté par le shell.

Application : changer toutes les racines du référentiel dans une copie CVS

On postule que la copie de travail CVS se trouve dans /home/toto/monsiteweb/. Les données figurent dans le dossier Root du dossier CVS de chaque répertoire et sous-répertoire. La racine CVS recherchée est la suivante :ext:toto@cvs.exemple.com:/srv/cvs/html et l'on veut lui substituer une racine atteignable en ssh sur un autre port que le port par défaut : :extssh:toto@cvs.exemple.com:2222/srv/cvs/html

find /home/toto/monsiteweb/ -name "Root" -type f -exec sed -i 's/:ext:toto@cvs.exemple.com:\/srv\/cvs\/html/:extssh:toto@cvs.exemple.com:2222\/srv\/cvs\/html/g' {} \;

Il ne faut pas oublier d'échapper avec un anti-slash les slashs qui se trouvent dans les chaînes réprésentant des chemins.

Avant de faire une telle modification récursive il est prudent de faire au préalable une recherche des fichiers impactés :

grep -lR ":ext:toto@cvs.exemple.com:/srv/cvs/html" *

Utiliser l'utilitaire screen

Screen est fort utile quand vous administrez des serveurs à distance. Cet utilitaire permet de détacher une session shell de manière à ce que vous puissiez vous déconnecter sans interrompre la tâche en cours, et éventuellement reprendre en main la console dans une autre connexion, éventuellement depuis une autre machine. C'est une assurance qu'une tâche un peu longue ne soit pas interrompue par une perte de connexion avec le serveur par exemple.

L'installation est simple :

apt-get install screen

L'utilisation de base n'est pas très compliquée non plus. Vous vous connectez en tant que l'utilisateur qui vous intéresse, par exemple root, puis vous lancez screen. Un message vous avertit que screen est lancé. Taper une touche efface le message, vous vous retrouvez dans une console comme une autre, sauf que vous pouvez la détacher et vous y ré-attacher quand vous le voulez.

Pour détacher la session Ctrl+A+D, et pour raccrocher la session screen -dr. Si plusieurs sessions screen sont détachées, screen vous présentera une liste des sessions pour savoir laquelle vous voulez rejoindre. Ici j'ai lancé deux sessions screen indépendantes :

$ screen -dr
There are several suitable screens on:
        1332.pts-3.Marc-ThinkPad-SL510  (08/10/2017 19:31:28)   (Detached)
        1310.pts-3.Marc-ThinkPad-SL510  (08/10/2017 19:30:47)   (Detached)
Type "screen [- -r [pidtty.host" to resume one of them.

Si l'on tape Ctrl+D on sort de la session screen en la supprimant.

Créer un fichier de type socket en ligne de commande

Un fichier socket est un fichier spécial qui est utilisé pour communiquer avec une application. Lors du lancement d'une commande ls il se caractérise par la première lettre figurant dans la liste des droits Unix, la lettre s comme on peut le voir par exemple dans le fichier socket de MySQL :

# ls -l /var/run/mysqld/
total 4
-rw-rw---- 1 mysql mysql 6 Nov 12 14:07 mysqld.pid
srwxrwxrwx 1 mysql mysql 0 Nov 12 14:07 mysqld.sock

On ne peut pas créer simplement un tel fichier, comme on crée un répertoire avec mkdir ou un fichier FIFO avec mkfifo. On doit passer par un langage de programmation permettant de créer ce fichier. On peut le faire en C mais il est plus simple de le faire avec un langage de script qui sera ici en l'espèce Python. Voici un exemple qui crée un fichier de type socket dans le répertoire /tmp :

# python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/monSocket')"
# ll /tmp/monSocket
srwxr-xr-x. 1 root root 0 Nov  12 14:22 /tmp/someSocket

On voit que le fichier créé est bien de type socket. La commande peut être utile si par exemple avec vos gros doigts vous supprimez le fichier socket de MySQL... (Je sais ça n'arrive jamais ce genre de chose, mais qui sait ?) ;).

Vous pourrez comme moi recréer votre fichier socket perdu et ainsi pouvoir de nouveau atteindre votre serveur de base de données.

# python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/var/run/mysqld/mysqld.sock')"
# ls -l /var/run/mysqld/
total 4
-rw-rw---- 1 mysql mysql 6 Nov 12 14:07 mysqld.pid
srwxrwxrwx 1 mysql mysql 0 Nov 12 14:07 mysqld.sock

Gestion des utilisateurs

Manipulation des groupes
Changer le groupe primaire d'un utilisateur

Définir que le groupe primaire de l'utilisateur monuser sera admin :

usermod -g admin monuser
Ajouter un groupe secondaire à un utilisateur

Ajouter l'utilisateur monuser au groupe fuse :

usermod -a -G fuse monuser

Écrire un commentaire

Quelle est la troisième lettre du mot zszxjq ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.075s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml