=> Un système Unix est Multi-utilisateurs et Multi-tâches.
ssh benoit@ngstc.iutms.umontpellier.fr
Linux srv-04 2.6.32-042stab120.11 #1 SMP Wed Nov 16 12:05:45 MSK 2016 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
commande options arguments
who # Une commande sans options ni arguments
ls /etc # la commande ls, sans option mais avec un argument
id --help # une option au format long
head -n 5 /etc/hosts # ici, une commande avec une option et un argument
cp /tmp/fic.txt $HOME # pas d'options mais deux arguments
tar xvf archive.tar.gz # xvf sont trois options, tar n'impose pas le tiret
man cp
cp --help
pwd : où suis-je ?
pwd
/home/jono
ls : qu'y a t-il ici ?
ls
ls -a
ls -l /etc
ls -lAd /etc/*
cd : je vais ailleurs
cd # sans argument - envoie dans son répertoire d'accueil
cd photos # chemin relatif - on est dans /home/jono
cd ../jono/photos # chemin relatif - on est dans mako (par exemple)
cd /home/jono/photos # chemin absolu - commence par un /
ls -lA
total 20
-rw-r--r-- 1 ben ben 329 janv. 28 13:10 fic1.txt
-rw-r--r-- 1 ben ben 11133 janv. 28 13:13 .fic-hidden.txt
lrwxrwxrwx 1 ben ben 10 janv. 28 13:14 lien.json -> ../s1.json
drwxr-xr-x 2 ben ben 4096 janv. 28 13:11 rep01
cd : change directory
cd photos # chemin relatif - on est dans /home/jono
cd ../jono/photos # chemin relatif - on est dans mako (par exemple)
cd /home/jono/photos # chemin absolu - commence par un /
mkdir rep01 rep02 # crée deux répertoires rep01 et rep02
rmdir rep02 # Supprime le répertoire rep02, s'il est vide
touch fictest # crée un fichier vide
rm fictest # supprime le fichier fictest
rm *.txt # supprime tous les fichiers se terminant par .txt
rm -rf rep01 # supprime le répertoire rep01 et tout son contenu
# r : récursivité
# f : évite la validation par l'utilisateur
mv
mv fic1 ficAutreNom # renomme le fichier fic1 en ficAutreNom
mv fic1 fic2 rep01 # déplace fic1 et fic2 dans le répertoire rep01
mv rep01 /tmp # déplace rep01 et son contenu dans /tmp
mv rep01 /tmp/repAutreNom # déplace en le renommant le répertoire rep01
cp
cp fic1 fic.copie # copie fic1 en fic.copie
ls /etc/*.conf # retourne tous les fichiers se terminant par .conf
ls -l /etc/host? # fichiers commençant par "host", suivis d'un seul caractère
echo Bonjour $LOGNAME
echo "Aujourd'hui"
echo 'Prix : 10$50'
echo Aujourd\'hui, le prix est de 10\$50
[...], [...-...], [!....]
cat : Affiche du texte et sort du fichier
cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"
more /etc/ssh/ssh_config # barre d'espace pour aller à la page d'écran suivante
less /etc/ssh/ssh_config # q pour quitter
# h pour obtenir l'aide (more et less)
head /etc/init.d/cron # affiche les 10 premières lignes
tail -20 /var/log/syslog # afficher les 20 dernières lignes
wc : compte le nombre de lignes, mots et caractères
wc /etc/hosts # retourne le nombre de lignes, mots et caractère du fichiers
wc -l /etc/hosts # retourne le nombre de lignes du fichiers
# l : lignes
# w : mots
# c : caractères
Comme les caractères spéciaux du shell, les regexp permettent d'utiliser des caractères qui prendront une signification générique.
La commande grep agit comme un filtre qui retourne les lignes contenant un motif de recherche.
grep API /etc/ssh/ssh_config # retourne les lignes contenant API
grep -i api /etc/ssh/ssh_config # ne tient pas compte de la casse
grep -vE "^$|^#" /etc/ssh/ssh_config # lignes non commentées et non-vides
# -v : inverse la selection (les lignes qui ne contiennent pas)
# -E : Pour utiliser plusieurs critères
# ^$ : Rien entre le début et la fin, soit une ligne vide
# | : pour séparer les critères de recherche
# ^# : qui commence par un dièse
find est un outil puissant de recherche de fichiers dans l'arborescence
# Cherche tous les fichiers commençant par "init" dans /etc.
find /etc -name init*
# Cherche tous les répertoires commençant par "init" dans /etc.
find /etc -type d -name init*
# Idem, en faisant en plus une copie de chacun des fichiers trouvés.
find /etc -type d -name init* -exec cp {} {}.save \;
# -exec : permet de lancer une commande
# cp : la commande
# {} : expression qui retourne à la commande le ficher trouvé
# \; : obligatoire avec -exec
de nombreux outils :
Pour un usage fréquent : choisir emacs ou vim, qui sont des outils très puissant d'édition de texte, et resteront utilisable avec une connection ssh
Work in progress...
Très utile, la redirection permet de rediriger la sortie écran vers un fichier.
# Rediriger les lignes utiles du fichier ssh_config
grep -Ev "^$|^#" /etc/ssh/ssh_config > ~/ssh_config.lite
# Ajouter une ligne à un fichier (sans l'écraser)
echo "alias lh='ls -lh'" >> ~/.bashrc
Également incontournable, le pipe '|' consiste à récupérer la sortie d'une commande pour la réutiliser en entrée d'une autre commande
# le résultat de 'cat' est redirigé vers la commande 'wc'
cat /etc/hosts | wc -l
# On combine souvent les pipes !
ls -l /etc/ | grep "^-" | grep "\.conf$" | tr -s " " | cut -d " " -f 9 | sort -r
Créer un script revient à stocker plusieurs commandes dans un même fichier.
Ce fichier sera ensuite 'exécuté' comme une commande.
#!/bin/bash
# Espace Disque sur la racine du système de fichiers
read dd_total dd_free < <(df -h | grep "/$" | tr -s " " | cut -d" " -f2,4)
# RAM Disponible
read ram_total ram_used < <(free -m | grep ^Mem | tr -s " " | cut -d" " -f2,3)
echo -e "\n Espace disque disponible : $dd_free (sur $dd_total)"
echo -e " RAM utilisée : $ram_used Mo (sur $ram_total)\n"
# Rendre le fichier exécutable
chmod +x monscript.sh
# Puis, l'exécuter, en indiquant le chemin d'accès
./monscript.sh
Espace disque disponible : 272G (sur 432G)
RAM utilisée : 1817 Mo (sur 7811)
# Télécharger le fichiers
wget http://linux.hetica.net/download/tp-linux.tar.gz
# Décompresser et désarchiver l'archive
tar xvf tp-linux.tar.gz
# Afficher le contenu de l'archive
ls tp-linux
On a déja vu la commande grep, mais un grand nombre de commandes peuvent être utiles. Nous verrons ici les commandes tr, cut, sort, uniq, sed, et awk
La commande tr agit caractère par caractère, elle permet :
# supprimer des caractères
echo abracadabra | tr -d 'a'
# supprimer des caractères en doublon
echo abraacadabraaa | tr -s 'a'
# remplacer des caractères
echo abracadabra | tr 'abc' 'efg'
# supprimer les doublons et remplacer
echo abraacadabraaa | tr -s 'abc' 'efg'
Avec grep, on pouvait faire un tri par ligne, c'est à dire horizontal ; avec cut, on va faire un tri par colonne, c'est à dire vertical
# Afficher les adresses IP de son ordinateur
ip -4 -o a | tr -s " " | cut -d" " -f2,4 |tr ' ' '\t' | cut -d'/' -f1
# -d" " : spécifie l'espace comme délimiteur
# -f2,4 : affiche les colonnes 2 et 4
# -f2-4,6 : affiche les colonnes 2 à 4 et la colonne 6
sort permet de :
cat Edition | sort -r -k3.3 -kn4
# -r : ordre inverse
# -k3.3 : tri principal, du début de la colonne 3 jusqu'à la fin de la col 3
# -k4n : tri secondaire, du début de la col 4 à la fin de la ligne - numérique
uniq ne laisse qu'un seul exemplaire des lignes similaires, à la condition qu'elles se suivent.
# supprime les lignes en doublon
cat fichier.txt | uniq
# affiche en plus le nombre d'occurences de la ligne
cat fichier.txt | uniq -c
# n'affiche que les lignes en plusieurs exemplaires
cat fichier.txt | uniq -d
sed utilise une syntaxe très proche de celle de vim, il permet de faire de l'édition de texte depuis le prompt ou dans des scripts
# Remplace Dupont par Dubosc dans le fichier Edition :
sed 's/Dupont/Dubosc/' Edition
# -i : modifie directement le fichier :
sed -i 's/Dupont/Dubosc/' Edition
# g modifie toutes les occurences de chaque ligne trouvée :
sed 's/Dupont/Dubosc/g' Edition
# Ne substitue que certaine lignes, en fonction d'un motif de recherche :
sed '/Dupont/ s/Jean/Marc/' Edition
# Ne change que la 5ème ligne, ne change que les 3 premières lignes :
sed '5 s/Jean/Marc/' Edition
sed '1,3 s/Jean/Marc/' Edition
awk est un outil très riche d'édition de texte en ligne de commande, avec une grande richesse fonctionnelle, au prix d'une certaine complexité toutefois.
# Affiche les lignes du fichier /etc/passwd contenant bash
awk '/bash/ { print $0 }' /etc/passwd
# Affiche les noms des utilisateurs utilisant le bash comme shell par défaut
awk -F: '/bash/ { print $1 }' /etc/passwd
# Affiche les champs 1, 2 et 3 du fichier lorsque la ligne se termine par 2 ou 3 :
awk '/[23]$/ { print $1, $2, $3 }' Edition
# Affiche les lignes du fichier Edition lorsque le champ 3 commence par 2 ou 3 :
awk '$3 ~ /^[23]/ { print }' Edition
# Affiche le numéro de ligne et les champs 1 et 2 du fichier clients :
awk '{ print NR , $1 , $2 }' Edition
# Affiche le nombre de champs de la ligne, le champs 1 et le dernier du fichier :
awk '{ print NF , $1 , $NF }' Edition
# Affiche les lignes du fichier Edition dont le champ 3 est égal à 222222 :
awk '$3 == "222222" { print }' Edition
Une variable est un peu comme un tiroir, dans lequel on peut mettre une chaine de caractère, un nombre ou tout autre type de données.
On peut changer le contenu d'une variable, il reste toujours facile d'accéder à son contenu par son nom, qui lui ne change pas.
nom="Camille Honaite"
echo "Bonjour $nom"
echo "Bonjour ${nom}"
# Un certain nombre de variables prédéfinies existent déjà
echo $LOGNAME # affiche le nom d'utilisateur
echo $HOSTNAME # affiche le nom de l'ordinateurs
Le système Linux distingue 2 types de variables : les variables locales et les variables d'environnement
# retourne toutes les variables.
set
# retourne les variables d'environnements.
env
Pour réaliser les TP suivants, il faut télécharger et décompresser l'archive tp-linux.tar.gz comme indiqué dans la page sur l'archivage
Un fichier SAM est le résultat de l'alignement d'une séquence avec une séquence de référence (en général un génome). Nous voulons savoir dans quels chromosomes du fichier mds-roche454.sam est présente la séquence TCGGCA, et combien de fois.
En cas de difficultés, des indices dans la page ci-dessous pourront vous aider.
Vous avez déjà fini ? Alors recommencez le même exercice, en remplacant le fichier mds-roche454.sam par son équivalent binaire mds-roche454.bam (plus courant).
# avec le fichier SAM
grep TCGGCA mds-roche454.sam | cut -f 3 | uniq -c
# avec le fichier BAM, il faut utiliser la commande samtools
samtools view mds-roche454.bam | grep TCGGCA | cut -f3 | uniq -c
Par exemple, la séquence ATGGCAdeviendra TGCCAT.
En supplément, vous pouvez réaliser un script pour réutiliser facilement les commandes utilisées
Pour faire cet exercice, il faut utiliser une commande que l'on a pas abordée dans ce tutoriel, Cherchez la commande adéquate. Sinon, l'indice 1 fournit cette commande
echo ATcggGCuA | rev | tr "atcgATCG" "tagcTAGC"
#!/bin/bash
# Si on a lancé la commande sans argument, afficher la syntaxe de la commande
[ "$1" ] || {
echo -e "\n Syntaxe : \n $(basename $0) \n"
exit
}
# Si on a fourni en argument un fichier contenant la séquence
[ -f "$1" ] && {
cat $1 | rev | tr "atcgATCG" "tagcTAGC"
exit
}
# si on a fourni en argument une chaîne de caractères
echo $1 | rev | tr "atcgATCG" "tagcTAGC"
Le fichier manifest.txt est un fichier de design fourni par Illumina. Il est composé de trois sections :
Votre mission, si vous l'acceptez, est de lister les chomosomes de la section [Probes], puis ceux de la section [Targets], l'ojectif final étant de comparer les deux résultats.
Pour un résultat plus lisible, trier les chromosomes par ordre numérique
# Les chromosomes de la section [Probes]
cat manifest.txt | cut -f6 | grep ^chr | sort -k1.4n| uniq
# Les chromosomes de la section [Targets]
cat manifest.txt | cut -f4 | grep ^chr | sort -k1.4n| uniq