Configuration de (xm)grace

Grace et plus précisément sa version graphique xmgrace (anciennement xmgr) est un outil permettant de concevoir des graphiques en deux dimensions (XY, polaire, logarithmique, boxplot …) ainsi que faire un peu d’analyse numérique (regression, interpolation, intégration …) et réaliser quelques traitements sur les données. Les graphiques obtenus sont de haute qualité et peuvent être exportés sous divers formats vectoriels (eps, ps, svg) ou non (png, jpg …). Le paquet est disponible sous ubuntu (apt://grace), fedora et la plupart des distributions linux.

site web : plasma-gate.weizmann.ac.il/Grace.

Accents et séparateur des décimaux

Par défaut, les accents ne sont pas pris en charge. Il faut passer un paramètre de langue au lancement de xmgrace pour pouvoir les utiliser. Sur la ligne de commande, lancer xmgrace de la façon suivante :

[user@machine] > LANG=C xmgrace

ou

[user@machine] > LANG=fr_FR xmgrace

Suivant votre distribution, le paramètre LANG=fr_Fr activera les accents et conservera un séparateur des décimaux avec une virgule, tandis que LANG=C activera les accents et changera le séparateur de décimaux en un point. Il est possible d’enregistrer ces paramètres dans un alias pour simplifier l’utilisation. Pour cela, ajouter la ligne suivante dans votre fichier .bashrc ou .profile :

alias xm="LANG=fr_FR xmgrace -geometry 1150x900"

L’option geometry permet quand à elle de faire en sorte que la fenêtre de xmgrace soit suffisamment grande pour voir la totalité du graphique.

Template

Pour éviter d’avoir à saisir systématiquement les mêmes paramètres (épaisseur des bordures, taille du texte …) il est possible de créer un template qui sera chargé automatiquement à l’ouverture du programme. Pour ce faire, créer un graphique vide avec toutes les options qui vous intéressent et sauvegarder le sous le nom Default.agr. Placer ensuite ce fichier dans :

~/.grace/templates/

Si les dossiers n’existent pas, il faut les créer.

Ce fichier Default.agr permet également de définir de nouvelles couleurs pour étoffer un peu la palette proposée par défaut qui est un peu pauvre. Voici, par exemple, les lignes à insérer pour disposer d’une partie des couleurs de bases plus celles de la palette tango. Ces lignes sont à placer à la place de celles définissant les couleurs dans le fichier Default.agr (commençant par @map. Pour ce faire utiliser un éditeur de texte quelconque tel que vim, gedit, emacs …

@map color  0 to (255, 255, 255), "white"
@map color  1 to (  0,   0,   0), "black"
@map color  2 to (255,   0,   0), "red"
@map color  3 to (  0, 255,   0), "green"
@map color  4 to (  0,   0, 255), "blue"
@map color  5 to (148,   0, 211), "violet"
@map color  6 to (255, 165,   0), "orange"
@map color  7 to (  0, 255, 255), "cyan"
@map color  8 to (255,   0, 255), "magenta"
@map color  9 to (114,  33, 188), "indigo"
@map color 10 to (103,   7,  72), "maroon"
@map color 11 to ( 64, 224, 208), "turquoise"
@map color 12 to (  0, 139,   0), "green4"
@map color 13 to (252, 233,  79), "Butter 1"
@map color 14 to (237, 212,   0), "Butter 2"
@map color 15 to (196, 160,   0), "Butter 3"
@map color 16 to (138, 226,  52), "Chameleon 1"
@map color 17 to (115, 210,  22), "Chameleon 2"
@map color 18 to ( 78, 154,   6), "Chameleon 3"
@map color 19 to (252, 175,  62), "Orange 1"
@map color 20 to (245, 121,   0), "Orange 2"
@map color 21 to (206,  92,   0), "Orange 3"
@map color 22 to (114, 159, 207), "Sky Blue 1"
@map color 23 to ( 52, 101, 164), "Sky Blue 2"
@map color 24 to ( 32,  74, 135), "Sky Blue 3"
@map color 25 to (173, 127, 168), "Plum 1"
@map color 26 to (117,  80, 123), "Plum 2"
@map color 27 to ( 92,  53, 102), "Plum 3"
@map color 28 to (233, 185, 110), "Chocolate 1"
@map color 29 to (193, 125,  17), "Chocolate 2"
@map color 30 to (143,  89,   2), "Chocolate 3"
@map color 31 to (239,  41,  41), "Scarlet Red 1"
@map color 32 to (204,   0,   0), "Scarlet Red 2"
@map color 33 to (164,   0,   0), "Scarlet Red 3"
@map color 34 to (238, 238, 236), "Aluminium 1"
@map color 35 to (211, 215, 207), "Aluminium 2"
@map color 36 to (186, 189, 182), "Aluminium 3"
@map color 37 to (136, 138, 133), "Aluminium 4"
@map color 38 to ( 85,  87,  83), "Aluminium 5"
@map color 39 to ( 46,  52,  54), "Aluminium 6"

Lorsque vous choisissez une couleur, vous avez maintenant une palette plus importante :

grace_color

Exportation par défaut

Dans le dossier :

~/.grace/

Créer un fichier gracerc.user contenant les lignes suivantes pour que le format de sortie par défaut soit .eps :

# 
HARDCOPY DEVICE "EPS"

Il sera alors inutile de passer par le menu « print setup » avant d’exporter un graphique. Changer le paramètre "EPS" par le format de sortie qui vous convient.

Configuration de vim

Voici le contenu de mon fichier .vimrc. Cette configuration n’est pas la meilleure puisqu’elle est adaptée à ma façon de faire mais vous trouverez peut être des exemples pour construire votre propre configuration.

La fin du fichier concerne l’utilisation de vim-latex. Il s’agit d’un plugin pour vi ajoutant des fonctionnalités intéressantes pour l’écriture de fichiers latex avec vi. Ce plugin est disponible dans les dépôts ubuntu officiels ou directement sur le site du plugin.

" --------------------------------------------------------------------
"  abandonne les regles de vim anciennes versions
" --------------------------------------------------------------------
set nocompatible
set backspace=2	" pour un fonctionnement correct du backspace
 
" --------------------------------------------------------------------
"  COULEURS:
" --------------------------------------------------------------------
colorscheme default
highlight IncSearch term=underline ctermbg=LightGreen ctermfg=NONE guibg=LightGreen guifg=NONE
highlight Search term=underline ctermbg=LightGreen ctermfg=NONE guibg=LightGreen guifg=NONE
highlight Cursor guifg=white guibg=grey30 
highlight CursorLine term=underline cterm=underline guibg=#F4F4F4
highlight CursorColumn term=NONE ctermbg=grey guibg=#F4F4F4
highlight StatusLine term=reverse,bold cterm=reverse,bold gui=italic guibg=SteelBlue guifg=white
highlight StatusLineNC term=reverse cterm=reverse gui=italic guibg=grey75 guifg=SteelBlue
highlight Error gui=bold guifg=red guibg=yellow
 
" --------------------------------------------------------------------
"  RECHERCHE:
" --------------------------------------------------------------------
set hlsearch	" active surbrillance
set incsearch	" se deplace pendant la frappe
set ignorecase	" ignore la casse
 
" --------------------------------------------------------------------
"  STATUS LINE:
" --------------------------------------------------------------------
set ruler          " Affiche le numero de la ligne/colonne
set showmode       " Affiche le mode courant
set showcmd        " Affiche des commandes
set laststatus=2   " affiche la status line
set statusline=fichier:\ %m\%F\ %y\ %=\ ligne\ %l\ colonne\ %c\ --\%P\--
 
" --------------------------------------------------------------------
"  APPARENCE:
" --------------------------------------------------------------------
syntax on                    " coloration syntaxique
let fortran_free_source=1    " fortran syntax is free format (f90)
 
set visualbell t_vb=	" pas de message sonore ni visuel
			" When the GUI starts, 't_vb' is reset to its default value.
			" You have to set it again in your gvimrc
set nowrap		" pas de retour à la ligne
set textwidth=90	" coupe la ligne si elle depasse 90 caractères
set showmatch		" affiche les paires de parenthese
set cursorline		" highlight current line
set autoindent		" copy indent from the current line to the new line
set smartindent		" automatically indent a line depending on previous line
set expandtab           " remplace les tab par des espaces
set shiftwidth=4        " indentation = 4 espaces
set encoding=utf-8
" set guifont=Mono\ 9
 
" --------------------------------------------------------------------
"  SOURIS:
" --------------------------------------------------------------------
set mouse=a             " active le deplacement a la souris
 
" --------------------------------------------------------------------
"  ABBREVIATIONS ET RACCOURCIS CLAVIER:
" --------------------------------------------------------------------
ab ccom /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
ab fcom ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ab lcom % * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ab pcom # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
" mise a zero du champ de recherche avec F2 : supprime la surbriallance apres la recherche
nnoremap <silent> <F2> :silent noh<cr>
 
" nouvel onglet
map <C-n> <Esc>:tabnew<cr>
" navigateur de fichier
map <C-e> <Esc>:Exp<cr>
" sauvegarde
map <C-s> <Esc>:w<cr>
" tout selectionner
map <c-a> ggVG
 
" --------------------------------------------------------------------
"  ORTHOGRAPHE:
" --------------------------------------------------------------------
" set spell
" set spelllang=fr
map <F3> :setlocal spell spelllang=fr<cr>
map <F4> :set nospell<cr>
 
" --------------------------------------------------------------------
"  PLUGINS:
" --------------------------------------------------------------------
" charge le bon plugin à l'ouverture du fichier
filetype on
filetype plugin on
 
" --------------------------------------------------------------------
"  VIMLATEX:
" --------------------------------------------------------------------
" PATH: ajout dans le path pour chercher vim-latex-suite
" set runtimepath+=/usr/share/vim/addons/
 
" IMPORTANT: win32 users will need to have 'shellslash' set so that latex
" can be called correctly.
" set shellslash
 
" IMPORTANT: grep will sometimes skip displaying the file name if you
" search in a singe file. This will confuse Latex-Suite. Set your grep
" program to always generate a file-name.
set grepprg=grep\ -nH\ $*
 
" OPTIONAL: This enables automatic indentation as you type.
"filetype indent on
 
" OPTIONAL: Starting with Vim 7, the filetype of empty .tex files defaults to
" 'plaintex' instead of 'tex', which results in vim-latex not being loaded.
" The following changes the default filetype back to 'tex':
let g:tex_flavor='latex'
 
" TIP: if you write your \label's as \label{fig:something}, then if you
" type in \ref{fig: and press <C-n> you will automatically cycle through
" all the figure labels. Very useful!
autocmd FileType *.tex set iskeyword+=: 
" => conflit avec else: de python
 
" REPLIS: vim-latex replis automatiquement certaines sections et environnements
" ou commandes. La liste de ce qui doit être replié est géré par les varibales
" globales suivantes. Les replis se font en partant de la fin de la liste puis
" en remontant. Les defaut sont dans folding.vim (~/.vim/ftplugin/latex-suite/)
let g:Tex_FoldedSections="part,chapter,section,%%fakesection,subsection"
let g:Tex_FoldedEnvironments="verbatim,comment,eq,align,figure,table,tabular,tikzpicture,thebibliography,abstract,frame"
let g:Tex_FoldedMisc = 'preamble,<<<'
 
" COMPILATION VISUALISATION: par defaut on compile avec pdflatex et on utilise
" pour visualiser les pdf : evince
let g:Tex_DefaultTargetFormat="pdf"
let g:Tex_ViewRule_pdf = "evince"
let g:Tex_CompileRule_pdf="pdflatex -shell-escape -interaction=nonstopmode $*"

J’utilise les plugins :

Fichier .bashrc, alias et fonctions

Voici quelques alias ou fonction que j’utilise dans le fichier .bashrc ou .profile. Dans un terminal linux, un alias est une sorte de raccourcis permettant de créer des commandes personnelles. L’intérêt d’un alias est de regrouper dans une commande simple une commande ou un ensemble de commandes plus complexes ou comportant de nombreuses options que vous utilisez fréquement. Pour aller plus loin, les fonctions bash permettent de gérer les arguments de cette commandes personnelles.

# Alias basiques
alias ll='ls -lrth'
alias la="ls -a"
alias cp="cp -ip"
alias mv="mv -i"
alias clr="clear; pwd; ls -lrth"
alias le="less"
 
# une fonction pour faire un cd suivi d'un ls
function cl { 
    cd $* && ls 
}
 
alias vi="gvim -geometry 120x50"
alias orthographe="aspell -t check --lang=fr"
 
# fonction pour suivre une commande
function suivre { 
    gnome-terminal -e "watch -n1 $*" 
}
 
# cleantex, fonction pour nettoyer les fichiers output de latex
function cleantex {
    rm -vf $1.aux $1.log $1.out $1.bbl $1.toc $1.lof $1.lot $1.snm $1.nav $1.vrb $1.blg
}
 
# quelque options de compilation
alias gfcomp="gfortran -o exe -g -fbounds-check -fbacktrace -Wall"
alias ifcomp="ifort -o exe -g -traceback -check bounds -check uninit -warn unused"
alias compc="gcc -o exe -O1 -lm -W -Wall -Wuninitialized -fbounds-check "

Il est souvant pratique de faire des alias pour se connecter à diverses machines avec ssh. Une autre possibilité est l’utilisation de sshfs. Cette commande permet de monter un dossier d’une autre machine. Le montage est possible si la machine est accessible par ssh, il est donc inutile de faire un montage réseau. Vos fichiers de la machine distante sont alors accessible depuis votre machine locale comme s’il s’agissait d’une clef usb ou d’un dossier quelconque. Attention, je pense qu’il est quand même préférable que l’id utilisateur soit le même sur la machine distante et la machine locale si vous voulez écrire dans les fichiers de la machine distante.

# connexions ssh
alias machine="ssh -Y user@machine"
 
# montage ssh d'un dossier avec sshfs. Cette commande montera votre dossier 
# utilisateur de la machine distante sur le dossier machine de votre ordinateur
# local.
alias mntmachine="sshfs user@machine:/home/user/ /home/user/machine/"

La variable PATH contient la liste des dossiers dans lesquels se trouvent les exécutables. Si vous voulez installer des programmes ou scripts personnels, mettez les dans un dossier et ajoutez ce dossier à PATH.

# rajout d'un dossier dans le PATH.
export PATH=/home/user/bin/:$PATH

Pour pouvoir utiliser mes modules python n’importe où, je les ai tous mis dans un même dossier et les lignes suivantes ajoutent ces dossiers à la variable PYTHONPATH. Lors de l’importation d’un module, python cherche parmi les dossiers contenu dans PYTHONPATH s’ils contiennent ce module.

# python : recuperation des dossiers contenant les classes python
classDir="/home/user/Python/classes/"
liste=`ls $classDir`
monpath="$classDir:"
for dossier in $liste
do
	monpath="$classDir$dossier:$monpath"
done
export PYTHONPATH=$PYTHONPATH:$monpath

Pour la personnalisation du prompt

  • \e ou \033 sequence d’echappement pour les couleurs
  • \[ \] début et fin de texte non imprimable
  • format : [ format texte ; couleur1; couleur2 m

J’avais utlisé ce lien pour écrire les lignes ci-dessous : Mettez de la couleur dans votre prompt.

# prompt
PS1="\[\e[0;32m\]\n# \u@\h \[\e[1;33m\] \w\[\e[0m\]\n> "
 
# autre variante :
PS1="\[\e[0;34m\]\n# \u@\h \[\e[1;33m\] \w\[\e[0m\]\n> "
 
# sans couleur :
#PS1="[\u@\h \W]> "

bigfiles.py : rechercher les plus gros fichiers dans une arborescence de dossier

Description :

Voici un script écrit en python qui recherche les plus gros fichiers dans une arborescence de dossiers de façon récursive. Par défaut il affiche les vingt plus gros fichiers. On peut indiquer au script le chemin d’un dossier à analyser ou encore le nombre de fichiers que l’on veut afficher. Si on donne un nombre de fichiers négatifs le script affichera la liste de tous les fichiers (attention elle peut être longue). Quelques exemples sont donnés dans la doc, vous pouvez passer l’option -h ou –help à l’exécution pour l’afficher. Tous les fichiers sont pris en considérations, y compris les fichiers cachés (commençant par un . sous linux).

Installation (sous linux) :

Téléchargez le fichier ci-dessous et donnez lui le nom que vous souhaitez, par exemple bigfiles. Placez ensuite ce fichier dans un dossier contenu dans votre PATH comme par exemple /usr/local/bin si vous avez les droits administrateur. Il ne faut pas oublier de rendre le fichier exécutable :
chmod +x bigfile. Vous pourrez ensuite exécuter bigfile depuis une console linux.

script :

bigfiles.py

#!/usr/bin/python
# -*- coding=utf-8 -*-
 
"""
BigFiles
--------
 
print the first bigest files in all subdirectories of a given path
 
SYNTAX
        bigfiles [OPTIONS] ... [PATH]
 
DESCRIPTION
        Print the first 20 bigest files in directory [PATH] and in all subdirectories of
        [PATH]. Default [PATH] is the current working directory.
 
        -h, --help
            print this help
 
        -n, --nfiles=N
            output the first N bigest files, instead if the first 20. If N is negative,
            print all files.
 
EXAMPLES
        bigfile -h
        bigfile -n 50
        bigfile ./another/directory/
        bigfile -n -1 
        bigfile -n 20 ./anotherdirectory
"""
 
__licence__ = "GPL"
__author__ = "Germain Vallverdu <germain .vallverdu@univ-pau.fr>"
 
import doctest
import os
import sys
 
KILO_OCTET = 1024
MEGA_OCTET = 1048576
GIGA_OCTET = 1073741824
TERA_OCTET = 1099511627776
 
def humanSize(taille):
    """ return a byte number in human readable format (1ko 234Mo 2Go
 
    >>> humanSize( 345)
    '345 o'
    >>> humanSize( 123478)
    '120.6 ko'
    >>> humanSize( 983435743)
    '937.9 Mo'
    >>> humanSize( 12983435743)
    '12.1 Go'
    >>> humanSize( 755812983435743)
    '687.4 To'
 
    """
    taille = float(taille)
    if taille >= TERA_OCTET:
        size = "%.1f To" % (taille / TERA_OCTET)
    elif taille >= GIGA_OCTET:
        size = "%.1f Go" % (taille / GIGA_OCTET)
    elif taille >= MEGA_OCTET:
        size = "%.1f Mo" % (taille / MEGA_OCTET)
    elif taille >= KILO_OCTET:
        size = "%.1f ko" % (taille / KILO_OCTET)
    else:
        size = "%.0f o" % taille
 
    return size
 
def BigFiles( dossier = "./", nmax = 20):
    """ print the first bigest files in all subdirectories of a given path 
 
        arguments :
            * dossier : path where you want to list bigest files
            * nmax    : maximum number of files you want BigFiles to list
    """
 
    fichier = list()
    tailleTotale = 0
    nFiles = 0
    for root, dirs, files in os.walk(dossier):
        for name in files:
            if not os.path.isfile(os.path.join(root,name)): continue
            taille = os.path.getsize(os.path.join(root, name))
            nFiles += 1
            tailleTotale += taille
            fichier.append({"nom":name, "dossier":root, "taille":taille})
 
    print("\n" + " * * * BigFiles * * *".center(80) + "\n")
    print("--------------------------------------------------------------------------------")
    print(" Analyse du dossier         : " + dossier)
    print(" Nombre de fichiers traités : " + str(nFiles))
    print(" Taille totale des fichiers : " + humanSize(tailleTotale))
    print("--------------------------------------------------------------------------------\n")
 
    # sort files and print the first nmax
    sorted_fichier = sorted( fichier, key = lambda f:f["taille"], reverse = True)
    for i, f in enumerate(sorted_fichier):
        print(str(i+1).rjust(6) + humanSize(f["taille"]).rjust(10) + f["nom"].rjust(30) + "   " + f["dossier"])
        if i == (nmax-1): break
 
if __name__ == "__main__":
    doctest.testmod()
 
    # --------------------------------------------------------
    # default values
    # --------------------------------------------------------
    dossier = "./"
    nmax = 20
 
    # --------------------------------------------------------
    # get options
    # --------------------------------------------------------
    narg = len(sys.argv)
    if narg > 1:
        args = sys.argv
        i = 1
        while i < narg:
            if args[i] == "-h" or args[i] == "--help":
                print(__doc__)
                exit(0)
            elif args[i] == "-n" or args[i] == "--nfiles":
                try:
                    nmax = int(args[i+1])
                except ValueError:
                    print("\nError : bad arguments " + args[i])
                    print("    try : " + args[0] + " --help\n")
                    exit(1)
                except IndexError:
                    print("\nError : bad arguments " + args[i])
                    print("    try : " + args[0] + " --help\n")
                    exit(1)
                i += 2
 
            elif args[i] == "-v":
                i += 1
            else:
                if i == narg - 1:
                    dossier = args[i]
                else:
                    print(args)
                    print("\nError : bad arguments")
                    print("    try : " + args[0] + " --help\n")
                    exit(1)
                i += 1
 
    BigFiles(dossier, nmax)

Le terminal linux et l’éditeur vim : une petite introduction

Ce petit document fait 3 pages et rassemble une présentation rapide et un ensemble de commandes de bases du terminal linux et de l’éditeur vim (ou de sa version graphique gvim). La liste de commandes et très loin d’être exhaustives mais elle est suffisante pour débuter. Ce document a été rédigé à l’attention de stagiaires de niveaux L3 à M2 que j’ai encadré.

Aide mémoire pour vim et le terminal linux

Pour aller plus loin :

  • En ligne de commande, la commande man vous donnera accès à la documentation des commandes linux
  • L’éditeur vim contient un tutoriel intégré. Dans un terminal tapez vimtutor pour démarrer.
  • Vous pouvez accéder très simplement à l’aide sur vim en tapant :help en mode normal suivi de la commande sur laquelle vous souhaitez de l’aide
  • Programmez des scripts Bash