Archives mensuelles : décembre 2018

[Bash] : comment remettre en place le bashrc ou le bash_profile par défaut ?

Un article très court aujourd’hui pour revenir sur une situation qui m’est déjà arrivée. Tout heureux d’avoir trouvé une nouvelle fonction à mettre en place dans mon bahsrc, je décide de modifier celui-ci. Donc je faic un vim sur mon fichier favori et je le source.

Et là paff le chien. Mon bashrc ne fonctionne plus donc je reste bloqué sur mon terminal. Et là ce cas est assez facile pour revenir dessus car je sais quelles modifications j’ai fait. Mais cela peut arriver avec des comptes d’exploitation que l’on pousse sur un parc de serveur. Et alors imaginez cela sur un bastion c’est un peu balot.

Parfois on peut avoir besoin de restaurer un bashrc fonctionnel très rapidement. Dans ce cas la solution est de restaurer le bashrc par défaut à partir des squelettes à votre disposition dans /etc/skel :

20:33:33 - oki @ doki /etc/skel
└─ $ ▶ ls -larth
total 28K
-rw-r--r-- 1 root root 3,7K sept. 1 2015 .bashrc
-rw-r--r-- 1 root root 220 sept. 1 2015 .bash_logout
-rw-r--r-- 1 root root 655 mai 16 2017 .profile
cp /etc/skel/.bashrc ~/

Une fois ce copier/coller réalisé, vous devez sourcer le fichier si vous volez :

source ~/.bashrc
board game business challenge chess

Photo by Pixabay on Pexels.com

[Python] : quelques minutes avec Tkinter (GUI)

Tkinter est un module graphique pour python, un GUI (Graphical User Interface). Bien sûr, cet article intéressera les débutants car il s’agit de découvrir le module le plus simplement possible mais avec un exemple « concret ». Je dis concret en double quotes car en fait ce n’est pas si utile que cela mais il faut bien avoir un but pour développer et écrire quelques lignes de codes.

Pour apprendre, je vous propose de réaliser un petit soft qui va avoir deux boutons (un pour quitter, l’autre pour lancer une action). L’action consistera à réaliser la liste des répertoires de ma home « ~ ». Et on affiche tout cela dans une fenêtre spécifique. Comme ceci :

file_manager

Nous utiliserons deux modules :

  • tkinter pour l’interface graphique
  • os : pour lister les répertoires au niveau de notre système
#!/usr/bin/python
#coding: UTF-8
import os
from Tkinter import *

def affichageRepertoires():
    path = os.path.expanduser("~/")
    for f in os.listdir(path):
        cadre2.insert(END, f + "\n")

if __name__ == '__main__':
    principale = Tk()
    cadre1 = LabelFrame(principale, text="FILE MANAGER", font="Arial 14")
    cadre1.grid(row=0, columnspan=2, sticky='E')

    Button(cadre1, text="Afficher répertoire", font="Arial 8", command=affichageRepertoires).grid(row=1, column=1)
    Button(cadre1, text="Quitter", font="Arial 8", command=principale.quit).grid(row=1, column=2)

    cadre2 = Text(master=principale)
    cadre2.grid(row=2, column=1, sticky=NW)
    
    cadre3 = Scrollbar(principale, orient=VERTICAL, command=cadre2.yview)
    cadre3.grid(row=2, column=2, rowspan=15, columnspan=1, sticky=NS)
    cadre2.config(yscrollcommand=cadre3.set, font=('Arial 8'))

    root.mainloop()

Les différentes lignes de codes permettent :

  1. codage en UTF8 (pour ne pas avoir de problème avec les accents)
  2. import des deux modules
  3. création d’une fonction  affichageRepertoires() :
    1. utilisation de os.path : pour récupérer les chemins
    2. parcourir la liste obtenue
    3. afficher les éléments dans le cadre 2 avec un renvoi à la ligne à chaque fois
  4. le bloc principal :
    1. création de la fenêtre principale
    2. définition du premier cadre de type Label (avec titre intégré)
    3. placement du cadre 1 aligné à droite dans la fenêtre et sur la première ligne d’une grille « imaginaire »
    4. ajout des deux boutons dans le cadre 1 avec le texte qui correspond et surtout la commande qui va avec. Pour le premier la commande lance notre fonction affichageRepertoires() pour le second elle quitte la fenêtre « principale ». Attention l’alignement se fait toujours sur notre grille mais en ligne n°1 et colonne 1 puis 2 en fonction du bouton.
    5. création du cadre 2 dans la fenêtre « principale ». Ce cadre sera alimenté par la fonction affichageRepertoires().
    6. la grille nous permet une fois de plus de placer notre cadre en ligne n°2/colonne n°1 et aligné en haut à gauche (NW : nord ouest)
    7. le cadre 3 consiste à ajouter la barre de défilement dans la fenêtre « principale » en se basant sur la fenêtre cadre 2 (command)
    8. Positionnement de cadre 3
    9. Configuration du cadre 2 avec la barre de défilement de cadre3

Tkinter pour python fait partie des modules très bien documentés. Vous pouvez consulter cette page en français et pour être plus complet cette page en anglais.

 

[Mysql] : comment générer le sql pour recréer un table ?

C’est un article similaire à celui que j’ai déjà pu faire pour oracle mais vous allez vous rendre compte qu’avec mysql c’est plus simple. Eh oui pas de dbms et autres trucs tordus de ce genre un simple « show » suffit.

Ah oui, j’allais oublier qu’avant de faire  ce genre de manip par un « show » je passais par des manips sur les dumps… autant dire que ce n’était pas léger et que cela a des limites très vite atteintes.

Alors comment récupérer le sql d’une table avec la commande « show » ? Facile

mysql> show create table matable;
+---------+-------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-------------------------------------------------------------------------------------------------------------------------------------+
| matable | CREATE TABLE `matable` (
`id` int(11) DEFAULT NULL,
`monchamp` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+-------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

C’est facile donc et très efficace. Et vous comment pratiquez vous mysql et quelle version ?

mysql-recreate-table

[Mysql] : comment merger deux tables en une ?

Merger des tables sur mysql c’est possible. En effet, vous pouvez faire des associations de table assez facilement. Personnellement je ne suis pas un fan de cette solution nous allons voir pourquoi un peu plus loin. Commençons par créer deux tables similaires au niveau de la structure :

mysql> create table tab3 (f1 varchar(255)) ENGINE=MyISAM;
Query OK, 0 rows affected (0,08 sec)

mysql> create table tab4 (f2 varchar(255)) ENGINE=MyISAM;
Query OK, 0 rows affected (0,08 sec)

Puis insérons des données dans ces tables :

mysql> insert into tab4 values ('table 2');
Query OK, 1 row affected (0,00 sec)

mysql> insert into tab4 values ('table 2');
Query OK, 1 row affected (0,00 sec)

Maintenant créons la table de merge :

mysql> create table fusion (f1 varchar(255)) ENGINE=MERGE UNION=(tab3,tab4) INSERT_METHOD=LAST;
Query OK, 0 rows affected (0,07 sec)

Et voici maintenant son contenu :

mysql> select * from fusion;
+---------+
| f1 |
+---------+
| table 1 |
| table 1 |
| table 2 |
| table 2 |
+---------+
4 rows in set (0,01 sec)

Mais supprimons une des tables composant la table de merge et procédons à un nouveau SELECT :

mysql> drop table tab3;
Query OK, 0 rows affected (0,00 sec)

mysql> select * from fusion;
ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

Et voilà mysql nous jette car nous venons de casser un des éléments constitutif de la table de merge. Pas terrible. Vous comprenez donc pourquoi il vaut mieux éviter de créer des tables de merge.

Et vous utilisez vous des tables de ce type ? avez vous rencontré des problèmes avec ?

mysql_table_merge