Mots-clé : linux

Equivalent dos2unix

Sous Linux/Unix, Si vous cherchez à transformer un texte DOS (va de retro Satanas) en texte Unix, voici une solution rapide et efficace :

awk '{sub(/\r$/,"");print}' nom_fichier_dos > nom_fichier_unix
ou bien encore :
sed 's/.$//' nom_fichier_dos > nom_fichier_unix

Cette petite explication a été honteusement pompée ici, le but principal étant d’aider ceux qui ont du mal avec l’Anglais.

Linux Cron : mémo rapide / exemples concrets

Bon, pour tous ceux qui veulent utiliser cron, voici comment il fonctionne (c’est souvent le plus difficile à comprendre).

Toutes les minutes, le système vérifie s’il faut qu’il lance un programme. Comment fait-il sa vérification ?
C’est simple : il prend date + heure du moment et la décompose.
Prenons aujourd’hui et maintenant :

Samedi 27 février 2010, 1h44 du matin

Cela va être décomposé ainsi :

Minutes / Heures / Jour / Mois / Jour de la semaine
44      / 01     / 27   / 02   / 6

Et le système va lister toutes les tâches, et si les chiffres sont identiques, alors il l’exécute.
Exemple :

* * * * * root ping -c 1 google.fr > /dev/null

Le «*» signifie : «quelque que soit le chiffre, c’est valide».
Comparaison :

Minutes / Heures / Jour / Mois / Jour de la semaine
44      / 01     / 27   / 02   / 6
*       / *      / *    / *    / *

Tout correspond => exécution de la tâche !
Maintenant, des exemples qui vont vous servir :

# m h dom mon dow user  command
17 *  * * * root    [commande]

Lancer la commande toutes les fois où «minutes = 17» => lancer «[commande]» toutes les heures (00:17, 01:17, 02:17, 03:17 etc.).

# m h dom mon dow user  command
25 6  * * * root    [commande]

Lancer la commande toutes les fois où «minutes = 17» et «heure = 6» => lancer «[commande]» tous les jours à 6:17.

# m h dom mon dow user  command
47 6  * * 7 root    [commande]

Lancer la commande toutes les fois où «minutes = 47, heure = 6» et «jour de la semaine = 7» => lancer «[commande]» tous les dimanches à 6:47.

# m h dom mon dow user  command
52 6  1 * * root    [commande]

Lancer la commande toutes les fois où «minutes = 52, heure = 6» et «jour du mois = 1» => lancer «[commande]» tous premiers du mois à 6:52.

Un peu plus complexe mais plus pratique : on peut préciser des intervalles : «2-6» veut dire «de 2 à 6 inclus». Exemple :

# m h dom mon dow user  command
* 1-6 * * * root    [commande]

Lancer la commande toutes les fois où «heure est comprise entre 1 et 6» => lancer «[commande]» toutes les minutes, de une heure à six heures du matin (c’est un exemple concret puisque «[commande], c’est une commande d’une araignée Internet (spider) qui va vérifier des choses pendant que tout le monde dort).

Un peu plus complexe mais encore plus pratique : on peut préciser des intervalles : «*/4» veut dire «tous les multiples de 4». Exemple :

# m h dom mon dow user  command
*/4 1-6 * * * root    [commande]

Lancer la commande toutes les fois où «heure est comprise entre 1 et 6» et «la minute est un multiple de 4» => lancer «[commande]» toutes les quatre minutes, de une heure à six heures du matin (c’est un exemple concret puisque «[commande]», c’est une commande d’une araignée Internet (spider) qui va vérifier des choses pendant que tout le monde dort).

PS : oui oui il est bien 1:44 du matin et je n’arrive pas à dormir…

Linux Shell : exemple de grep et expressions régulières

Ci-suivent des exemples de grep qui fonctionnent.
Je veux très souvent lister tous les fichiers php / htm / Javascript. J’ai deux possibilités :

  • find . | grep -E '(php|htm|html|js)$' | more
  • find . | grep '\(php\|htm\|html\|js\)$' | more

Je veux aussi souvent chercher parmi tous mes fichiers de mon site Internet, lesquels contiennent un mot particulier. Prenons par exemple le mot « Internet ». J’ai deux possibilités :

  • find . | grep -E '(php|htm|html|js)$' | xargs grep Internet
  • find . | grep '\(php\|htm\|html\|js\)$' | xargs grep Internet

Je le note parce que je ne comprenais pas pourquoi ce qui suit ne fonctionnait pas :
find . | grep '(php|htm|html|js)$' | xargs grep Internet

C’est tout simplement que par défaut (je ne sais pas si c’est le fait de mettre des quotes (« '« )) qui y fait, mais grep considère que ce qui est passé ainsi doit être cherché littéralement, et donc il ne ressortira que les fichiers dont le nom contient ces caractères : « (php|htm|html|js)« … ce qui n’est pas le but recherché. Mes exemples précédents, eux, fonctionnent correctement.

En espérant que cela serve à quelqu’un un jour !

Linux : changer les droits que sur des répertoires et sous répertoires

Voilà le problème :

Vous voulez mettre des droits en lecture uniquement sur tous les fichiers mais laisser le droit "x" sur les répertoires.

Voilà la solution la plus simple que j’ai décomposée volontairement pour être plus clair :

  1. Supprimer toutes les autorisations :
    chmod -R 0 ./*
  2. Ajouter les autorisations en lecture pour tout le monde :
    chmod -R ugo+r ./*
  3. Ajouter les autorisations en écriture uniquement pour le possesseur des fichiers :
    chmod -R u+w ./*
  4. Et la petite astuce pour que les autres puissent lire les répertoires et sous-répertoires :
    Appliquer le "x" uniquement sur les répertoires et sous répertoires (et pas sur les fichiers) :
    find . -type d | xargs chmod ugo+x

En résumé, copiez collez cette ligne :
chmod -R 0 ./* && chmod -R ugo+r ./* && chmod -R u+w ./* && find . -type d | xargs chmod ugo+x

Et vous aurez pour tout le monde le droit en lecture des répertoire et sous répertoires et le droit en écriture uniquement donné à l’utilisateur courant.
Attention : il n’y aura pas de fichier exécutable, car les autorisations "x" seront enlevées.

Linux : rechercher les programmes qui accèdent à un fichier

Comment rechercher les programmes qui accèdent à un fichier ?

Je vous donne un exemple concret : j’ai monté un répertoire qui est un lien vers un répertoire d’un autre PC.

La commande « mount ». Une fois que je n’en ai plus besoin, je fais « umount » pour le retirer. Et là, problème : ça ne fonctionne pas : il me dit qu’il ne peut pas le retirer, quelque chose y accède toujours !

Pas de problème : tapez :

lsof | grep [nom du répertoire monté]

et vous verrez quelles sont les applications qui y accèdent.

« lsof » vous sauve la vie.

Ca ne vous est jamais arrivé de pester contre Windows lorsque que vous faites « Retirer le périphérique » et que vous avez le message « Impossible de retirer le péripérique » ? Moi si. Avec lsof sur Linux, vous n’aurez jamais ce genre de désagrément !

Linux vsftp : mémo ajout d'un utilisateur

Voilà, je perds toujours un temps fou à rechercher comment ajouter un utilisateur pour qu’il se connecte sur le serveur ftp.

Si vous n’y arrivez pas, lisez le fichier de configuration :
/etc/vsftpd.conf
Dedans il y aura beaucoup d’informations utiles.

Voilà le résumé pour ajouter un utilisateur sur le serveur vsftp :

  1. Créer l’utilisateur. Par exemple :
    noeunoeu
  2. Changer son mot de passe :
    passwd noeunoeu
  3. L’ajouter à la fin des fichiers suivants :
    • /etc/vsftpd/chroot_list
    • /etc/vsftpd/user_list

Et voilà tout devrait fonctionner !

Linux : mount permanent avec mot de passe (mémo simple)

mount donne la possibilité de faire croire qu’un répertoire de Linux existe bel et bien alors que ce n’est qu’un lien vers un autre répertoire.

Si vous voulez faire :

  • un montage qui reste, même après redémarrage de l’ordinateur ;
  • un lien vers un répertoire partagé Windows ;
  • préciser dès le début le nom d’utilisateur et le mot de passe Windows.

Voici la solution (je mets plusieurs couleurs pour bien différencier les paramètres) :
mount -t smbfs //192.168.0.85/www /root/test -o auto,username=macaille,password=bienrotie
Traduction simplifiée de l’ordre qui suit : « lorsque quelqu’un voudra accéder au répertoire /root/test, c’est en réalité le répertoire partagé www de l’ordinateur 192.168.0.85. Si on demande un utilisateur/mot de passe c’est macaille/bienrotie (quelle subtilité !) (options username/password)). Enfin, s’il redémarre, refaire automatiquement le montage : c’est l’option auto« .

Linux : Cron et cronjob

Pour éditer la table cron de l’utilisateur en cours avec vi.

crontab -e

Ensuite pour un déclenchement chaque jour à minuit d’une tâche :

# Declenchement du script creation_zip chaque jour a minuit
0 0 * * * /xx/xx/nomduscript [params] > /dev/null 2>&1

Vous vous demandez peut-être ce que signifie la fin des paramètres que vous voyez juste au dessus :

/dev/null 2>&1

Cela signifie rediriger la sortie d’erreur (2) vers la sortie normale (1) : 2>&1 et rediriger la totale résultant vers la poubelle (« /dev/null« ).

Linux : faire l'ISO d'un CD

  1. Il faut insérer le CD dans le lecteur ;
  2. Vérifier avec mount qu’il n’a pas été monté automatiquement, sinon il faut le démonter
    (umount /dev/cdrom) ;
  3. Ensuite se mettre dans une partition qui a au moins l’espace requis de libre
    (vérifier avec df -kh) ;
  4. Ensuite, taper l’ordre :
    dd if=/dev/cdrom of=/toto/cd.iso ;
  5. S’il faut le copier sur un site distant :
    scp /toto/cd.iso 192.xx.xx.xx:/sources .