Les petites infos – 7

Rentrée difficile here, on va reprendre doucement avec des petites infos.

Comment obtenir la taille d’un fichier dans un script bash

Je n’avais jamais eu à récupérer la taille d’un fichier dans un script bash, j’en ai eu besoin pour un script perso. Sans trop réfléchir, je me dis du --human-readable /data/file, je vois 31G alors que j’attendais 30G. Je découvre l’option --apparent-size : print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like et vous fais une piqûre de rappel man du : du - estimate file space usage.

du --apparent-size --human-readable /data/file me donne bien 30G mais je fais une recherche pour connaître la meilleure pratique. Ici j’apprends que le plus « reliable » (fiable) est stat --printf="%s" /data/file et accessoirement qu’entre stat, wc, du, la première commande fait le moins d’appels système (system calls).

I/O redirection summary for bash and POSIX shell

Un magnifique tableau trouvé chez nixCraft, bien utile, très clair.

/usr/bin/bash ou /usr/bin/env bash dans un script bash

J’ai noté que tout le monde était passé sur #!/usr/bin/env bash. Comme j’aime bien comprendre les choses, je n’avais pas effectué la modification de mes scripts persos, j’ai pris le temps de faire une recherche et comprendre le pourquoi. On fait le tour de la question avec ces liens (1, 2). J’utilise maintenant #!/usr/bin/env bash.

Ce qui m’a le plus intéressé personnellement (il y a d’autres subtilités, allez lire les liens).

#!/usr/bin/env bash # lends you some flexibility on different systems
#!/usr/bin/bash     # gives you explicit control on a given system of what executable is called

« In some situations, the first may be preferred (like running python scripts with multiple versions of python, without having to rework the executable line). But in situations where security is the focus, the latter would be preferred, as it limits code injection possibilities ».

Simuler l’environnement avec lequel cron exécute un script

Je détecte un problème sur un cron lançant un script. Le script me paraît bon, je lance à la main, il passe. Je pige pas tout de suite puis je pense à l’env, je le simule.

* * * * * root env > ~/cronenv # Dans un cron
env - $(<~/cronenv) /bin/sh /home/monjoliscript.sh # Lancé manuellement

Une commande du script n’était pas dans le PATH, un classique, il a suffi de renseigner le chemin complet/absolu de la commande pour résoudre le souci.

flysystem

Sur le Jdh on commence à avoir des ESN (entreprise de services du numérique, anciennement SSII) qui viennent poster leurs articles de blog, évidemment ça parle de libre sinon ça serait immédiatement supprimé par votre serviteur. Je reste très attentif à ce qu’ils font, pour ne pas dire que je les marque à la culotte. Avec un titre comme Importer des ressources depuis Microsoft Sharepoint dans le PIM Akeneo, je m’attendais au mieux à ce que l’article fasse un bide, au pire à devoir le supprimer voire à ce qu’un utilisateur n’ayant pas lu l’article se plaigne qu’il soit sur le Jdh.

Dans mon rôle de modérateur, je lis l’article et je découvre flysystem : « Flysystem is a filesystem abstraction library for PHP. By providing a unified interface for many different filesystems you’re able to swap out filesystems without application wide rewrites. Using Flysystem can eliminate vendor-lock in, reduce technical debt, and improve the testability of your code ».

J’ai plussé l’info sur le Jdh, elle est restée à 2 votes car le titre est très mal choisi pour le public du Jdh. Un utilisateur normal, je lui aurais envoyé un mail pour lui en faire part, je me voyais mal informer l’ESN que son titre est mauvais sur son blog d’entreprise. Cependant au regard de l’intérêt de flysystem, l’article est pertinent pour le prendre en main.

Déjà 7 avis pertinents dans Les petites infos – 7

  • Yoko
    > Simuler l’environnement avec lequel cron exécute un script

    C’est l’un des intérêts de systemd. On crée un unit qui exécute ce que l’on souhaite et on défini un scheduler pour choisir quand on exécute l’unit précédemment créé. Donc pour exécuter la tâche manuellement (à des fins de debug où juste pour le faire manuellement ponctuellement) il suffit de l’exécuter.
    Ça plus le fait qu’il indique très clairement la dernière exécution et la prochaine :)

  • JeanMarcS
    Jessie ? Celle qui est EOL depuis juin ? C’est par flemme ou pour des versions spécifiques de logiciels que vous n’avez pas migré ?
  • JeanMarcS
    Ah, si c’est chez les clients ça explique tout :-D ! J’ai moi-même une paire de VM en Debian 7 qui traînent chez un client (une enseigne nationale…). Et j’ai même un client que j’ai récupéré qui a un Kimsufi avec une Debian 5 dessus ! On migre l’applicatif PHP (PHP 5.3….) pour fermer définitivement le truc.

Les commentaires sont fermés.