RaphAstronome

dimanche, 29 janvier 2023

"rmdir" et "rm -r"

Sous Linux et bien d'autres systèmes la commande pour supprimer un fichier est rm. Ceci ne fonctionne toutefois pas sur les dossiers, si vous essayez vous aurez une erreur du genre :

rm: impossible de supprimer 'toto': est un dossier

Pour le supprimer un dossier et tout son contenu ce que fait rm -r mais il peut être utile de s'assurer que le dossier est bien vide avant le le supprimer. On peut bien sûr regarder avec ls -a avant de faire le rm -r mais il faut y penser et ce n'est pas très pratique. De plus on n'est jamais à l'abri de la création d'un fichier entre le moment de la vérification et de la sauvegarde.

Pour ceci il est possible de faire rmdir qui ne supprime le dossier qu'a la condition qu'il soit vide et évite tout risque l'oubli de fichier.

vendredi, 26 juin 2009

Cron pour prévenir des mises à jour Debian

Mieux vaut être rapidement prévenu de la disponibilité des mise à jour. Pour ça le mieux c'est d'être averti par e-mail. Mail présantant une mise à jour Debian

C'est un bon complément à la liste debian-security-announce

Lire la suite...

lundi, 5 janvier 2009

Backup rsync

Quelles sont vos résolutions pour cette année ? Enfin faire des backups ? Bien, pas trop tôt !

Vous avez un serveur en SSH, le plus facile et rapide est d'utiliser rsync pour télécharger automatiquement les fichiers qui ont étés modifiés.

Lire la suite...

jeudi, 31 janvier 2008

Time avec paramètres : marche pas.

Pour voir la durée d'exécution d'un programme de manière un peu plus précise et simple qu'avec un chronomètre il y a la commande time. De plus le temps CPU dédié au processus (user) et système (sys) est affiché :

$ time sleep 10
real    0m10.023s
user    0m0.004s
sys     0m0.000s

Ici l'instruction "sleep 10", attend 10 secondes et ne consomme presque pas de CPU.

On va mettre en forme tout ça pour par exemple l'utiliser dans un script pour ça il y a l'option --format, qui peut éventuellement être réduit à -f mais ici :

$ time -f "%e" sleep 10
bash: -f : commande introuvable
real    0m0.157s
user    0m0.116s
sys     0m0.028s

Baf ! Marche pas il à essayé d'exécuter la commande "-f" au lieu de sleep.

Ce problème est bizarre mais quelques part il fallait s'y attendre : mais comment bash et time peut deviner où est la commande et où sont les paramètres ? En fait la solution est elle aussi bizarre car on peut résoudre le problème en mettant le chemin complet de la commande time :

$ /usr/bin/time -f "%e" sleep 10
10.00

Ca marche ! Le temps d'exécution de la commande sleep est bien de 10 secondes.

Si quelqu'un sait pourquoi il y a un tel changement qu'il me le dise, merci.

mardi, 29 mai 2007

Faire un .deb automatiquement

Vous venez de trouver un logiciel open-source que vous voudriez installer. Seulement il n'existe pas de paquet pour votre système d'exploitation et/ou architecture. La solution est alors de télécharger le code source et le compiler vous même pour ce faire il faut d'habitude extraire l'archive et entrer ces commandes dans une console :

./configure
make
sudo make install

Le programme sera alors installé toutefois il n'appairera pas parmi vos paquets. Pour ce faire il faut utiliser "checkinstall" au lieu de "sudo make install". Checkinstall génère un paquet prêt à l'emploi au lieu de l'installer tout de suite. Et tant qu'a faire nous allons programmer un script bash qui permettra de compiler et faire le paquet automatiquement en quelques clics :

#!/bin/sh

tar -xf "$@"
cd `tar -tf "$@" | head --lines=1`
./configure
make
checkinstall --fstrans
mv *.deb ..

Tout d'abord on extrait l'archive : il contient un répertoire dans lequel on ce rend. Ensuite on fait les classiques ./configure et make puis on utilise checkinstall avec une option qui permet d'éviter d'avoir à ce mettre en "root". Remarquez que le deb généré sera minimal, pas de description, ni dépendances, ni tout autre élément d'information. Pour une diffusion il faudrait être plus précis mais pour un paquet juste pour nous ça va.

Ce script bash est prévu pour être placé dans les scripts du menu contextuel de gnome : il faut le placer dans ~/.gnome2/nautilus-scripts, il apparaîtra normalement dans le menu lorsque vous ferez un clic droit sur un fichier.

Quelques remarques :

  • Durant le traitement aucun affichage n'est effectué, ça prend souvent plusieurs minutes, ne lancez pas deux fois le script et attendez que le .deb apparaisse. En cas d'erreur le programme ce finit sans message d'erreur, si vous voulez voir ce qu'il se passe je vous conseille de l'utiliser en mode console.
  • Pour la ligne avec cd il faut bien mettre ` et pas '. N'oubliez pas d'en faire un exécutable avec "chmod".
  • Pour fonctionner il faut bien sur que vous ayez installé ce qu'il faut pour compiler et checkinstall.
  • Ce script est prévu pour les archives de sources répondant au format classique de l'open-source, des archives atypiques ont de grandes chances de ne pas être traités comme il faut et être extrait dans le répertoire courant au lieu d'un sous répertoire.
  • Le dossier de l'archive est conservé pour une éventuelle réutilisation mais si vous n'en avez pas besoin vous pouvez le supprimer.
  • Il doit être possible de générer un rpm ou un paquet Slackware avec mais il faut alors le modifier.
  • Étrangement cet utilitaire ne semble pas marcher avec une archive placée sur le bureau.
  • Le script est sous licence BSD.