Archives mensuelles : août 2018


[bash] : créer une fonction pour monter de 1 ou plusieurs niveaux dans une arborescence

Pour gagner du temps l’idéal est de personnaliser votre .bashrc en y créant des alias. Mais pour aller encore un peu plus loin vous pouvez y ajouter des fonctions cela permet d’aller un peu plus loin que les alias.

Par exemple, je vous propose une fonction qui vous permettra de remonter facilement dans une arborescence. Vous pouvez la nommer comme vous voulez prenons par exemple up.

up() { if [ "${1/[^0-9]/}" == "$1" ]; 
then p=./; for i in $(seq 1 $1); 
do p=${p}../; done; cd $p; 
else echo 'usage: up N'; fi }
export -f up

Cete fonction peut-être lancée soit en tapant un simple « up » dans ce cas vous remontez d’un niveau (1 directory) ou « up 3 » pour remonter de 3 niveaux directement. Très efficace.

Donc plus expliciter un peu cette ligne de code :

  • avec le if on vérifie si on a un argument ou pas
  • si on a un arguement on fait une séquence sui va permettre de répéter « ../ »
  • sinon on remonte d’un niveau seulement
  • on oublie pas d’exporter cette fonction pour qu’elle soit utilisable
  • et surtout après ajout on source .bashrc

 


[Postgresql] : Appliquer un GRANT à toutes les séquences d’une base

Vous utilisez postgresql, cet article est pour vous ? Encore une fois rien de bien compliqué mais de l’élémentaire et efficace. Si vous faites souvent des imports de base sans reprendre tous les GRANT (droits) qui vont bien, vous vous retrouvez à faire des ALTER sur les tables pour redonner les bons droits aux bons users (utilisateurs).

Mais pour les séquences ça peut se compliquer car vous n’avez pas de possibilité de faire cela en masse comme on peut faire un « GRANT ALL ON ALL TABLES ». Du coup on va quand même pas se palucher les droits à la main non ? et pis quoi encore lol.

Bon les DBA postgresql le savent il suffit de faire une petite boucle qui va bien comme ceci :
echo "select sequence_name FROM information_schema.sequences" | psql --cluster 9.4/main -d madatabase | grep -v '('|awk '{print "GRANT ALL ON TABLE madatabase."$1" TO monuser;"}' > maj_grant_monuser.sql

Pas trop compliqué :

  • On liste les séquences de la base
  • on vire la ligne vide
  • on édite une line GRANT sur la séquence
  • on ajoute cette ligne dans un fichier sql

Il vous reste ensuite à lancer ce script et le tour est joué. Dans mon cas, j’ai indiqué –cluster pour le cas où on a plusieurs cluster sur la machine sinon viré l’option et l’argument.

box business celebrate celebration

Photo by rawpixel.com on Pexels.com

 


[Python] : lire et écrire facilement dans un fichier avec PATHLIB … et un peu plus

PathLib est un module Python qui mérite d’être un peu plus connu. En effet, ce module permet de lire ou d’écrire dans un fichier en quelques lignes très courtes. Jusqu’ici pour lire un fichier il faut faire :

alire = open("fichier.txt", "r")
for ligne in alire:
  print(ligne)

alire.close()

idem pour écrire :

aecrire = open("fichier.txt", "a")
aecrire.write("Salut !!!")
aecrire.close()

Avec le module pathlib, les choses sont plu simples :

from pathlib import Path
fichier = Path('fichier.txt')

#pour écrire
fichier.write_text("Pathlib is great")

#pour lire
print(fichier.read_text())

Voilà pour un exemple concernant la manipulation d’un fichier.

PathLib c’est aussi d’autres actions vous l’imaginez bien. Ce module vous permettra aussi d’agir sur les répertoires :

# vérifier l'existence du répertoire
Path('/home/xavki').exists()False

# créer le répertoire
Path('/home/xavki').mkdir()

# vérifier si l'objet est un répertoire
Path('/home/xavki').is_dir()

PathLib c’est aussi parcourir facilement une arborescence  et y rechercher certains fichiers (exemple avec les fichiers sql du répertoire /home/xavki :

[fichier for fichier in Path('/home/xavki').glob('*.sql')]

Pour mémoire, le module « os » parcourt aussi les arbres avec « os.walk() ».

Et vous ? vous êtes plutôt « os » ou « pathlib » ?


[Bash] : template de script avec parsage d’arguments

Créer un script bash c’est toujours un peu le même principe. On peut donc s’oirenter vers un squelette, une sorte de template. Le principe étant d’avoir toujours une trame permettant de passer comme arguments : le mode verbeux, un fichier ou une aide.

Ainsi vous n’aurez plus besoin de chercher comment parser les arguments, quoi écrire pour commencer et comment le faire pour mettre en place le –help.

Voici donc ce bout de code qui j’espère vous sera utile :

Screenshot from 2018-07-24 14-46-15