• tutorial
  • unix
  • public


Première connexion à l’infrastructure migale et généralités

Pour accéder à l’environnement Unix on utilise en général un terminal pour accéder à un environnement appelé shell. Un shell Unix est une couche logicielle qui fournit l’interface utilisateur au système d’exploitation Unix. En pratique pour vous connecter à l’environnement Unix de l’infrastructure migale vous devez vous munir :

  • de votre compte utilisateur migale personnel (nom d’utilisateur et mot de passe)
  • d’un logiciel de connexion :
    • le terminal par défault sous linux ou macOS (par défaut dans Logiciels/Utiltaires)
    • pour les utilisateur de Windows, il est nécéssaire d’installer un logiciel dédié tel que Ubuntu for Windows, PuTTY ou bien MobaXterm.

Ensuite vous utiliserez la commande :

ssh -X nom_utilisateur@migale.jouy.inrae.fr

Vous devez ensuite indiquer votre mot de passe pour accéder à l’environnement Unix du serveur migale.

S’affiche alors à l’écran un message d’acceuil ainsi que des instructions génériques et actualités, merci d’en tenir compte. Au début de chaque ligne s’affiche votre nom d’utilisateur et là où vous êtes connecté, séparré par un @.

Par exemple :

  __  __ _           _     
 |  \/  (_)__ _ __ _| |___ 
 | |\/| | / _` / _` | / -_)
 |_|  |_|_\__, \__,_|_\___|
          |___/           
-----------------------
Bienvenue sur le serveur frontal de la  plateforme Migale,
Vous trouverez la liste des outils disponibles en ligne de commande sur le site de la plateforme :
https://migale.inra.fr/tools
Merci d utiliser le cluster pour vos calculs. 
Dans tous les cas, ne pas lancer de calcul long (supérieur à 1h) ou utilisant plus de deux processeurs sur ce serveur.
Pour toute question : help-migale@inra.fr
-----------------------
Welcome to the Migale facility front end server,
You will find the list of command line tools available on our website:
https://migale.inra.fr/tools
Please use the cluster for your calculations.
In any case, do not run a long jobs (more than 1 hour) or using more than two processors on this server.
For any questions: help-migale@inra.fr
-----------------------
[ironman@migale ~]$ 

Changer son mot de passe avec passwd

Si c’est la première fois que vous cous connectez au serveur migale, il y a une actions simple à faire : changer son mot de passe. Pour cela, vous pouvez utiliser la commande passwd et suivre les consignes :

[ironman@migale ~] passwd

Généralités sur les commandes Unix

Une commande Linux s’écrit comme suit : nom_commande [-option] argument

Les options et arguments entre [ ] sont facultatifs pour certaines commandes.

Toutes les commandes sont documentées. Suivant les commandes l’aide est accessible de 2 façons :

  • Pour les commande avec la commande man qui donne accès au manuel complet : $ man nom_commande
  • Pour les outils avec l’option --help qui décrit l’a commande’outils et ses options : $ nom_outil –-help

Par exemple pour lister le contenu d’un répetoire on utilise la commande ls. On pourra accéder aux options de ls en tapant ls –help :

[ironman@migale ~]$ ls
fichier1 fichier2
[ironman@migale ~]$ man ls
[ironman@migale ~]$ ls --help

L’arborescence Unix, les répertoires et les fichiers

L’arborescence et la notion de chemin

Les fichiers et répértoires d’Unix sont organisés sous forme d’une structure particulière de type arbre : on parle d’arborescence Unix.
Voici par exemple un extrait de l’arborescence de l’infrastructure migale :

Vous pouvez utiliser la commande tree pour visualiser l’arborescence Unix de vos fichiers et répertoires.
Les fichiers et répertoires sont positionnés dans un chemin d’accès Unix qui donne sa position dans l’arborescence.
C’est une expression du parcours à suivre pour accéder à un fichier ou un répertoire. Il faut indiquer la séquence de répertoires à « traverser » pour accéder à un fichier/répertoire. Les chemins d’accès peuvent être absolus ou relatifs.

  • Les chemins absolus commencent tous par «/» car ils partent du répertoire racine de l’arborescence «/»

Voici deux exemples (en bleu sur la figure) de chemins absolus :
Exemple 1 : le répertoire /tmp est situé à la racine de l’arborescence Linux car il commence par /.
Exemple 2 : le répertoire /home/formation/maiage/stage02 : stage02 est situé dans le répertoire maiage/, lui même situé dans le répertoire formation/, lui même situé dans le répertoire home/ situé à la racine / de l’arborescence Unix.

  • Les chemins relatifs partent du répertoire courant (et ne commencent donc pas par «/»).

Les chemins stage02/module1/linux1/resultat/blast et stage02/module1/linux1/data en orange partent du repertoire courant maiage. Ce sont des chemins relatifs.

Il existe des raccourcis très utiles pour les chemins :

  • . : désigne le répertoire courant.
  • .. : désigne le répertoire parent. Par exemple si l’utilisateur est dans le répertoire /home/ironman/, alors après avoir exécuté la commande cd .., il se trouvera dans le répertoire /home/.
  • ~: désigne le répertoire utilisateur. Par exemple ~/documents/ désigne le répertoire documents du répertoire utilisateur. Si le répertoire utilisateur est /home/ironman/, alors ~/documents/ est équivalent à /home/ironman/documents/.
    Remarquez que le caractère / sert aussi à séparer les différents répertoires et sous-répertoires entre eux.

Les répertoires et les fichiers

Voici un résumé des fonctionnalités des principales commandes en lien avec les répertoires :

  • pwd (pour print working directory) : Affiche le répertoire courant, celui dans lequel l’utilisateur se trouve actuellement.
  • cd (pour change directory) : Change de répertoire courant. L’utilisateur se déplace dans un autre répertoire.
  • ls (pour list) : Affiche le contenu d’un répertoire. Sans argument il s’aggit du répertoire courant. Avec un chemin en argument ls affiche le contenu du répertoire spécifié.
  • cp (pour copy) : Copie un fichier, cp fichier_source fichier_copie. Chaque fichier peut être précédé du chemin d’accès absolu ou relatif.
  • mv (pour move) : Déplace (et éventuellement renomme) un fichier ou répertoire, mv source destination.
  • rm (pour remove) : Supprime un fichier.
  • mkdir (pour make directory) : Crée un nouveau répertoire.
  • rmdir (pour remove directory) : Supprime un répertoire vide.

Quelques exemples :

L’utilisateur se déplace dans le répertoire test :

$ cd test

Ici le répertoire courant est /home/ironman, c’est-à-dire le répertoire personnel de l’utilisateur ironman :

$ pwd
/home/ironnman

Le répertoire courant contient 2 fichiers : seq1.fsa et seq2.fsa :

$ ls
seq1.fsa seq2.fsa

Le fichier seq1.fsa est copié vers backup/seq1-copy.fsa :

$ cp seq1.fsa  backup/seq1-copy.fsa

Les caractères de substitution permettent de remplacer 1 ou plusieurs caractères dans une commande Unix :

  • ? : remplace un caractère (exemple :ls module1/linux1/resultat/blast/blast?.out).
  • * : remplace 0, 1 ou n caractère(s) (exemple : ls module1/linux1/resultat/blast/blast.*).
  • [ ] : remplace n’importe quel caractère entre [ et ] (exemple : ls module1/linux1/resultat/blast/blast[123]*).

Recherche de fichier dans une arborescence : find

La commande find permet de rechercher des fichiers de manière récursive dans un chemin à partir d’un motif. Un motif est ici une expression ou une chaine de caractères correspondant au nom ou une partie du nom du fichier recherché

Syntaxe : find [chemin] -name <MOTIF>

Exemple : Rechercher tous les fichiers dont l’extension est .seq dans le répertoire linux1 :

$ find /home/formation/maiage/stage02/module1/linux1 -name "*.seq"

Extraire le contenu d’un fichier et gestion de flux

Recherche de contenu dans un fichier : grep

La commande grep permet de rechercher et afficher les lignes contenant un motif donné en argument dans un ou des fichiers donnés en argument.
Le motif est ici une expression ou une chaine de caractères correspondant à l’élément recherché (un nom de gène, de protéine,…etc).

Syntaxe : grep [options] <MOTIF> <FICHIERS>

La commande grep a beaucoup d’options très utiles :

  • -i : ignore les distinctions de casse dans le motif
  • -v : sélectionne les lignes NE contenant PAS le motif
  • -n : préfixe chaque ligne de sortie avec son numéro de ligne
  • -c : affiche uniquement le nombre total de lignes contenant le motif
  • -e : utilise les expressions régulières

Exemple : rechercher toutes les occurences du gène oriC en affichant le numéro de ligne de chaque occurence dans le fichier chromosome.gff3

$ grep -ni "oric" chromosome.gff3
4859:Chromosome    ena gene    1028404 1028721 .   -   .   ID=gene:b0966;Name=hspQ;biotype=protein_coding;description=heat shock protein involved in degradation of mutant DnaA%3B hemimethylated oriC DNA-binding protein;gene_id=b0966;logic_name=ena
8256:Chromosome    ena gene    1704949 1705164 .   +   .   ID=gene:b1625;Name=cnu;biotype=protein_coding;description=nucleoid-associated oriC-binding protein%3B H-NS and StpA stabilizing factor;gene_id=b1625;logic_name=ena
18950:Chromosome   ena_rep_origin  biological_region   3925744 3925975 .   +   .   external_name=oriC%3B origin of chromosomal DNA replication%2C bidirectional%3B oriC%3B b4489%3B ECK3735%3B JWS0001;logic_name=ena_rep_origin
22228:Chromosome   ena gene    4634441 4635310 .   -   .   ID=gene:b4396;Name=rob;biotype=protein_coding;description=right oriC-binding transcriptional activator%2C AraC family;gene_id=b4396;logic_name=ena

Extraire une ou plusieurs colonnes d’un fichier : cut

La commande cut permet d’extraire une ou plusieurs colonnes d’un fichier. Les options principales sont :

  • -f : selection les positions des champs (fields) à afficher dans le fichier.
  • -d : spécifie le délimiteur. (par défaut le délimiteur est la tabulation)
  • -c : utilise les positions des caractères dans le fichier (au lieu des colonnes)
  • -s : ignore les lignes ne contenant pas de délimiteurs

Exemple : extraction des dix premiers caractères de chaque ligne du fichier test.txt

$ cut -c 1-10 test.txt

Exemple : extraction de la deuxième colonne d’un fichier test.csv

$ cut -d "," -f 2 -s test.csv

Trier le contenu d’un fichier : sort

La commande sort permet de trier les lignes du ou des fichiers donnés en argument .
Attention : le tri par défaut est selon le code ASCII. Pour faire un tri numérique il faut utiliser l’option -n.

Exemple: Trier le fichier test.csv par ordre numérique croissant des lignes

$ sort -n test.csv 

Eliminer les contenus identiques d’un fichier : uniq

La commande uniq permet de supprimer les doublons consécutives d’un fichier. Pour éliminer les lignes répétées sur l’ensemble d’un fichier, il est donc nécessaire de trier le fichier avant d’utiliser la commande uniq.

Les options les plus couramment utilisées de uniq sont :

  • -c : afficher le nombre d’occurences de chaque ligne,
  • -d : afficher les lignes dupliquées,
  • -i : ignore la casse.

Exemple : Éliminer les lignes dupliquées du fichier cutadapt_bwa_featureCounts_WT1_sorted.tsv

$ uniq cutadapt_bwa_featureCounts_WT1_sorted.tsv

Compter le nombre d’éléments d’un fichier : wc

La commande wc (word count) permet de compter le nombre de lignes, de mots et de caractères du fichier ou des fichiers donnés en argument.

  • -c : pour le nombre d’octets
  • -m : pour le nombre de caractères
  • -w : pour le nombre de mots
  • -l : pour le nombre de lignes

Exemple : On souhaite déterminer le nombre de lignes des fichiers cutadapt_bwa_featureCounts_WT1_sorted.tsv et cutadapt_bwa_featureCounts_WT1_sorted_uniq.tsv ?

$ wc -l cutadapt_bwa_featureCounts_WT1_sorted.tsv
4498 cutadapt_bwa_featureCounts_WT1_sorted.tsv
$ 
$ wc -l cutadapt_bwa_featureCounts_WT1_sorted_uniq.tsv
1357 cutadapt_bwa_featureCounts_WT1_sorted_uniq.tsv

Rediriger la sortie d’une commande

Sous Unix l’entrée standard est le clavier et la sortie standard est l’écran. Il est possible de rediriger la sortie d’un programme dans un fichier avec le chevron >. Dans ce cas le contenu est supprimé et la sortie est enregistré dans le fichier. Pour ajouter la sortie d’un programme à la fin d’un fichier (sans supprimer sont contenu) il faut uttiliser un double chevron >>.

Exemple : On veut enregistrer le tri du fichier dans test_sorted.csv

$ sort -n –k 1 test.csv > test_sorted.csv

NB : Il est aussi possible de changer l’entrée d’un programme et de lire des données depuis un fichier avec le caractère <.

Enchainer des commandes Unix : le pipe |

Le | est une manière simple et élégante d’enchainer des commandes sous Unix. Nous venons de voir qu’il est possible de rediriger la sortie standard d’une commande vers un fichier de son choix.
Le pipe | permet rediriger la sortie d’une commande vers l’entrée d’une autre commande. On peut ainsi enchainer un nombre pratiquement illimité de commandes grâce à des pipes |.

Exemple : on souhaite déterminer le nombre de gènes uniques dans le fichier chromosome.gff3
On va pour cela extraire le nom des gènes avec la commande cut (d’abord pour extraire la 9ème colonne du fichier, puis pour extraire le 1er champ de cette 9ème colonne avant le délimliteur ‘;’), puis selectionner les lignes contenant le mot gene avec grep 'gene', puis on les tri avec sort, puis on élimine les redondances avec uniq et enfin on compte le nombre de lignes résultats (wc -l) :

$ cut -f 9 chromosome.gff3 | cut -d';' -f 1 | grep 'gene' | sort | uniq | wc -l  
4498  

Note : Sous Windows et Linux, le pipe est accessible avec la combinaison Alt Gr + 6. Sous macOS, le pipe est accessible avec la combinaison Alt + Maj + L

Editer un fichier avec nano

Il existe de nombreux éditeurs de fichier sous Unix. L’éditeur nano est l’un des plus simples à utiliser :

$ nano monfichier.txt

Nano permet ainsi de modifier directement le contenu de vos fichiers texte.

Organiser ses fichiers : les bonnes pratiques

D’une manière générale il est conseillé d’organiser ses fichiers dans des répertoires en distinguant les scripts, les données, les fichiers temporaires des fichiers à sauvegarder.

Il est utile d’utiliser des fichiers texte README pour documenter chaque projet :

  • L’origine et la date (ou version) des données utilisées
  • La version des logiciels utilisés
  • Les commandes et options utilisées pour traiter vos données

Il est formellement déconseillé de dupliquer des fichiers, en particulier lorsqu’ils sont volumineux.

Gérer son espace disque

Connaître la quantité d’espace disque occupée et disponible sur un disque

La commande df (pour disk free) permet de connaître les quantités d’espace occupé et disponible pour tous les disques du système. L’option -h permet d’utiliser les multiples “human readable” (ko, Mo, Go, To, …).

Connaître la quantité d’espace disque occupé par un fichier/dossier.

La commande pour connaître la taille des fichiers présents dans un dossier est ls -lh.

Exemple: Déterminer la quantité d’espace disque occupée par chacun des fichiers présents dans le répertoire /projet/maiage/save/stage1/data et trier les fichiers du plus volumineux au moins volumineux :

$ cd /projet/maiage/save/stage1/data
$ ls -lh
# Afficher la taille des fichiers du dossier courant

Pour connaître la quantité d’espace disque occupée par un dossier, utiliser la commande du (disk usage), encore une fois avec l’option -h. On peut affichier la version résumé avec -s.

Exemple: Afficher la taille des sous-dossiers du dossier /projet/maiage/save.

$ du -sh /projet/maiage/save

Transférer des données entre plusieurs machines

Pour travailler sur migale et le cluster de calcul il est souvent nécessaire de transférer des données sur son compte utilisateur migale.
Pour télécharger des données depuis un site web, il faut utiliser la commande wget suivie de l’adresse du site web (URL),

Exemple : Pour récupérer des données depuis le NCBI

$ wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/001/696/305/GCF_001696305.1_UCN72.1/GCF_001696305.1_UCN72.1_genomic.gbff.gz

Pour trasférer des données depuis un poste de travail personnel sous Linux ou MacOS X, utiliser la commande scp (secure copy) :
Syntaxe : scp [user@host:]fichier [user@host:]fichier

Exemple : pour envoyer le fichier multinuc.seq vers migale.

scp module1/linux1/multinuc.seq stage01@migale.jouy.inrae.fr:/projet/tmp/multinuc.seq

La commande rsync permet aussi de synchroniser le contenu des espaces disques deux machines distinctes,

Exemples :

rsync -avz ~/module1/linux1/resultat/blast migale:/projet/tmp 
rsync --delete -avz blast  migale:/tmp

Depuis un poste de travail local, il est aussi possible d’utiliser un logiciel dédié au transfert de fichiers avec une interface graphique comme winSCP (sous Windows) ou FileZilla.

Compresser des fichiers

La compression de fichiers permet de réduire la quantité d’espace disque occupée par vos fichiers. Plusieurs outils de compression existent, le plus courant sous Unix étant gzip et l’outil de décompression associé gunzip.

Exemple: On souhaite déterminer la taille du fichier transcripto.tsv puis le compresser et déterminer la taille du fichier compressé

$ # Taille du fichier transcripto.tsv
$ ls -lh transcripto.tsv
-rw-rw-r-- 1 stage01 stage01 13M Feb  1 10:44 transcripto.tsv
$ # Le fichier fait 13M.
$ 
$ # Compression du fichier.
$ # Attention : par défaut, gzip compresse directement le fichier sans créer de copie
$ # On utilise l'option -c pour écrire la sortie sur la sortie standard et > pour rédiriger la sortie standard dans un fichier.
$ gzip -c transcripto.tsv > transcripto.tsv.gz
$ 
$ # Taille du fichier compressé
$ ls -lh transcripto.tsv.gz
-rw-rw-r-- 1 stage01 stage01 2.5M Feb  1 15:44 transcripto.tsv.gz
$ # Le fichier fait 2.5M, soit un taux de compression de 80%.

Réduire le nombre de fichiers présents sur un disque et compression d’un dossier.

Réduire le nombre de fichiers présents sur un disque consiste à créer une archive d’un dossier. Cette archive va contenir, en un seul fichier, tous les fichiers présents initialement dans le dossier.

La commande pour créer une archive est tar.

Syntaxe : tar cvf <TARNAME> <SOURCE>

tar est une commande un peu spéciale puisque certaines options sont accessibles sans utiliser le caractère -.

Voici la signification des options utilisées :

  • c : mode création d’archive
  • f <OUTPUT> : nom du fichier de sortie

Il est également possible d’utiliser l’option -z (tar czf) pour compresser l’archive à la volée.

Exemple :

$ # Création d'une archive pour le dossier Arabidopsis_thaliana
$ tar cf Arabidopsis_thaliana.tar Arabidopsis_thaliana
$ 
$ # Idem mais en compressant l'archive à la volée.
$ tar czf Arabidopsis_thaliana.tar.gz Arabidopsis_thaliana

On peut également utiliser l’option (-v, --verbose) pour afficher le nom des fichiers au fur et à mesure qu’ils sont ajoutés à l’archive) :

On utilise également l’outil tar pour extraire le contenu d’une archive.

Syntaxe : tar xvf <TARNAME>

Ici, on utilise l’option -x (extract) à la place de l’option -c (create). Si l’archive est compressée, on utilise l’option -z pour indique au programme qu’il faudra décompresser l’archive.

Exemple :

# Extraction d'une archive compressée en mode verbeux (verbose)
$ tar xvzf ../Arabidopsis_thaliana.tar.gz

Crér un raccourci migale

Il est possible de configurer ses paramètres de connexion ssh pour se simplifier les connexions suivantes
Depuis votre poste de travail local, créer un fichier texte ~/.ssh/config avec votre éditeur de texte préféré (ici nano) en ajoutant les 2 lignes suivantes :

> nano ~/.ssh/config
host migale
HostName migale.jouy.inra.fr

Cette procédure vous permet d’utiliser le raccourci ssh -X nom_utilisateur@migale pour vous connecter sur migale depuis un terminal.

Utiliser une clé ssh

Pour ne pas avoir a fournir a chaque connexion votre mot de passe, on peut utiliser une clé ssh (également utile pour une connexion vers certaines applis web). Pour cela utiliser les commandes suivante depuis le terminal de votre poste de travail local :

ssh-keygen -t rsa #création d’une paire de clé
ssh-copy-id -i ~/.ssh/id_rsa.pub ironman@migale #envoi de la clé publique
ssh -X migale #connexion facilitée sans avoir à fournir votre mot de passe à chaque connexion
 

A work by Migale Bioinformatics Facility

https://migale.inrae.fr

Our two affiliations to cite us:

Université Paris-Saclay, INRAE, MaIAGE, 78350, Jouy-en-Josas, France

Université Paris-Saclay, INRAE, BioinfOmics, MIGALE bioinformatics facility, 78350, Jouy-en-Josas, France