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 :
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 ~]$
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
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 :
man
qui donne accès au manuel complet : $ man nom_commande
--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
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.
/
» 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épertoiremaiage/
, lui même situé dans le répertoireformation/
, lui même situé dans le répertoirehome/
situé à la racine/
de l’arborescence Unix.
/
»).Les chemins
stage02/module1/linux1/resultat/blast
etstage02/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/
./
sert aussi à séparer les différents répertoires et sous-répertoires entre eux.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
etseq2.fsa
:$ ls seq1.fsa seq2.fsa
Le fichier
seq1.fsa
est copié versbackup/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]*
).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épertoirelinux1
:$ find /home/formation/maiage/stage02/module1/linux1 -name "*.seq"
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èresExemple : rechercher toutes les occurences du gène
oriC
en affichant le numéro de ligne de chaque occurence dans le fichierchromosome.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
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élimiteursExemple : 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
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
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
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 lignesExemple : On souhaite déterminer le nombre de lignes des fichiers
cutadapt_bwa_featureCounts_WT1_sorted.tsv
etcutadapt_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
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 <
.
|
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 commandecut
(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 avecgrep 'gene'
, puis on les tri avecsort
, puis on élimine les redondances avecuniq
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
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.
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 :
Il est formellement déconseillé de dupliquer des fichiers, en particulier lorsqu’ils sont volumineux.
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, …).
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
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.
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 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’archivef <OUTPUT>
: nom du fichier de sortieIl 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
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.
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