previous up next_inactive


ujf.gif  
Introduction à LINUX
Licence de Physique/M2 ITDD
  ujf.gif

[Home|Linux|C++|Graphisme|Projets|Web|FAQ]


Contents

redball.gifLinux c'est quoi?

LINUX est un système d'exploitation (au même titre que Windows XP, 7, ... ) qui permet de ``dialoguer'' avec l'ordinateur. Ce système est très puissant et très stable (contrairement à Windows). Bien qu'au premier abord il puisse paraître un peu austère, on s'y habitue très vite.

blueball.gifComment dialoguer avec l'ordinateur ?

Ceci se fait dans une fenêtre dite terminal1 via un langage le shell. Il existe, sous LINUX, 3 principaux shell : le Bourne shell (sh) qui est le plus ancien et sans doute le plus utilisé, le C shell (csh) très utilisé et le Korn shell (ksh) qui est un peu un mélange des deux autres. Hormis ces shells, il existe des versions un peu plus conviviales : ce sont par exemple le bash (sh amélioré) et le tcsh (csh amélioré).

blueball.gifLes utilisateurs

Pour vous connecter sur une machine LINUX vous avez besoin d'un login, c'est-à-dire un nom d'utilisateur et d'un mot de passe. Chaque utilisateur appartient à un groupe, ce qui permet de donner certains privilèges (possibilité d'écrire, lire ou exécuter un programme dans une certaine zone) communs à tous les utilisateurs de ce groupe. Il existe cependant un utilisateur particulier, nommé root qui a tous les privilèges.

blueball.gifOrganisation des fichiers

Il est important de savoir que les fichiers sont classés dans l'ordinateur (sur le disque magnétique ou dans une mémoire flash) selon une structure arborescente. Chaque n½ud de l'arborescence s'appelle un répertoire ou directory (en anglais). Dans ces répertoires se trouvent des fichiers (ou file en anglais).

Par exemple /home/phys/aaa/zorro.c signifie que le fichier zorro.c se trouve dans le répertoire aaa qui se trouve lui même dans le répertoire phys, qui se trouve lui même dans home qui est dans /. Le répertoire racine est /.

redball.gifPrincipales commandes

Toutes les commandes ``Linux'' que nous utiliserons sont des commandes sont à tapper dans une fenêtre terminal (gnome-terminal, xterm, ...). Avant de regarder les commandes plus en détail, il y a deux commandes dont vous aurez besoin rapidement: man et passwd. La première vous sera très souvent utile car elle permet d'avoir un aide en ligne sur les autres commandes et même sur certaines fonctions C/C++. On tape

man commande

La seconde permet de changer votre mot de passe ; on tape

passwd

et on suit les instructions... Un mot de passe doit avoir 8 caractères (lettres, chiffres, ...).

Remarques :

diamond_red.gif  LINUX (comme le C/C++) fait la différence entre les MAJUSCULES et les minuscules.
diamond_red.gif  pour copier/coller un exemple donné sur la page web utilisez la souris : bouton gauche, et bouton milieu :-).

blueball.gifLes répertoires et Fichiers

diamond_red.gif  Pour connaître le répertoire où vous êtes (le répertoire courant): pwd.
diamond_red.gif  Pour avoir la liste des fichiers et des sous répertoires du répertoire courant:

diamond_red.gif  ls
diamond_red.gif  ls -als pour avoir plus de détails2
diamond_red.gif  ls -F pour voir rapidement les fichiers exécutables (ils sont suivis d'une étoile), les répertoires (ils sont suivis d'un /).
diamond_red.gif  ls [-alsF]3 filename pour ne voir que le fichier filename4
diamond_red.gif  Pour changer de répertoire:

diamond_red.gif  cd rep : pour aller dans le sous répertoire appelé rep.
diamond_red.gif  cd .. : pour aller dans le répertoire parent. (``..'' est le chemin relatif qui représente le parent ; ``.'' est le chemin relatif représentant le répertoire courant).
diamond_red.gif  cd : pour revenir à votre répertoire principal (ce répertoire s'appelle HOME ou home directory).
diamond_red.gif  Pour créer un sous répertoire appelé rep : mkdir rep
diamond_red.gif  Pour détruire un fichier :

diamond_red.gif  rm filename : détruit le fichier filename (sans demander de confirmation)
diamond_red.gif  rm * : détruit tous les fichiers (sans demander de confirmation !)
diamond_red.gif  rm -i fi* : détruit tous les fichiers commençant par fi en demandant une confirmation
diamond_red.gif  Pour détruire le répertoire rep ainsi que les fichiers qu'il contient : rm -r rep
diamond_red.gif  Pour copier un fichier : cp chemin1/fic1 chemin2/fic2chemin 1/2 peut être un chemin absolu (/home/users/zorro/Affaire) ou un chemin relatif (../zorro/Affaire ou bien Exemple/essai) et fic1/2 sont les noms des fichiers.
diamond_red.gif  Pour copier un répertoire : cp -r chemin1/rep1 chemin2/rep2
diamond_red.gif  Pour déplacer un fichier : mv chemin1/fic1 chemin2/fic2 (en particulier, mv chemin1/fic1 chemin1/fic2 renomme fic1 en fic2)
diamond_red.gif  Pour déplacer un répertoire : mv chemin1/rep1 chemin2/rep2 (ceci peut aussi servir à renommer un répertoire)
ATTENTION, comme pour la commande rm, les commandes cp et mv ne demandent pas de confirmation si un fichier fic2 existait déjà avant le cp ou le mv. Celui-ci sera perdu !
diamond_red.gif  Pour créer un fichier (voir Comment choisir un nom de fichier)

diamond_red.gif  ls > liste : redirige le résultat de la commande ls dans le fichier liste (en le créant)
diamond_red.gif  ls >> liste : redirige le résultat de la commande ls dans le fichier liste (en l'ajoutant à la fin)
diamond_red.gif  more fic : voir le contenu d'un fichier
diamond_red.gif  tail [-n] fic : voir les n dernière lignes d'un fichier [par défaut n=10]

Remarquez qu'en pratique on utilise souvent un éditeur (voir le paragraphe Éditeur) pour créer/visualiser un fichier.

Exercices

diamond_red.gif  A l'aide des commandes expliquées ci-dessus:

diamond_red.gif  Placez vous dans votre répertoire principal. Vérifiez que vous y êtes bien. Regardez la liste des fichiers par: ls , puis avec: ls -als
diamond_red.gif  Créer un répertoire essai. Vérifier son existence (avec ls).
diamond_red.gif  Aller dans ce répertoire. Vérifier que vous y êtes (avec pwd). Créer 3 fichiers vides fic1, fic2 et fic3 (on pourra utiliser la commande touch fic1)
diamond_red.gif  Revenir dans le répertoire principal par cd .. . Vérifiez que vous y êtes. Créer un répertoire exemple contenant 4 fichiers vides ex1, ex2, fic1, fic2
diamond_red.gif  Revenir dans votre home directory. Taper les commandes ls, puis ls exemple/, ls exemple/fic* et enfin ls *.
diamond_red.gif  Taper ensuite ls * > liste1. Vérifier avec la commande more le contenu de liste1.
diamond_red.gif  Renommer le fichier liste1 en fichier liste2. Vérifier avec la commande ls. Taper ensuite mv exemple/ex1 essai/ . Observer le résultat en listant les contenus de exemple et essai. Se Placer dans essai/ et taper ls puis mv ex1 fic1; vérifier le résultat avec ls puis faire mv -i fic1 fic2.
diamond_red.gif  Détruire les fichiers de essai par rm -i * . Se placer dans votre home directory et taper rm -r essai puis rm -r exemple.
diamond_red.gif  Créer un répertoire bin, lib et tmp. Ces répertoires vous seront utiles pour la suite et vous permettront de mettre des exécutables Linux (bin/), vos librairies (lib/) ou des fichiers temporaires (tmp/).


blueball.gifÉditeurs de textes

Comme nous l'avons déjà souligné, pour créer ou visualiser un fichier, on utilise généralement un éditeur. Il existe un grand nombre d'éditeurs différents ; citons Word5, vi6, emacs7, gedit et enfin nedit qui permet de faire beaucoup de choses, qui est assez conviviale et instinctif. Nous utiliserons donc nedit pour tous nos exemples. On le lance en tapant nedit ou nedit filename pour éditer le fichier filename. Vous trouverez ici un petit aperçu de nedit

Remarque

diamond_red.gif  il est souvent utile d'utiliser la commande nedit & ou nedit filename & cela permet ``de garder la main'' dans la fenêtre terminal (gnome-terminal, xterm, ...) (faire l'essai avec est sans le signe &). Le signe & signifie ``lancement en background'' (arrière plan) ; il est valable pour n'importe quelle application.

blueball.gifDivers commandes utiles

diamond_red.gif  alias/unalias : cette commande permet de définir un raccourci : par exemple, nous avons vu que la commande rm fic détruit le fichier fic sans demander confirmation ; pour plus de sûreté, on peut utiliser rm -i fic qui demande une confirmation. On peut redéfinir la commande grâce à un alias:

diamond_red.gif  alias rm "rm -i" en csh ou
diamond_red.gif  alias rm="rm -i" en bash

ainsi quand vous taperez rm la commande exécutée sera en fait rm -i
alias sans argument donne la liste des alias déjà existant et unalias mon_alias annule la commande alias. Cette commande très utile est à utiliser avec beaucoup de précaution (imaginer l'effet de commande comme : alias ls "cd" )

diamond_red.gif  find : comment rechercher un fichier dans une arborescence ?

diamond_red.gif  find chemin -name filename : cherche tous les fichiers filename depuis le répertoire pointé par chemin.
diamond_red.gif  find . -name "f*.txt" : recherche tous les fichiers commençant par ``f'', se finissant par ``.txt'' à partir du répertoire courant (``.'')
diamond_red.gif  grep : recherche dans un fichier du répertoire courant une chaîne.

diamond_red.gif  grep "petite chaine" fic*.cxx : recherche ``petite chaine'' dans les fichiers commençant par ``fic'' et finissant par ``.cxx''
diamond_red.gif  chmod : change les privilèges d'un fichier ou d'un répertoire.
chmod ugo nom : ugo sont 3 nombres correspondant à un privilège donné au fichier/répertoire pour le USER (u) le groupe auquel appartient le USER (g) et les autres (o) ; ils correspondent aux lettres rwx obtenu lors de la commande ls -als. Les valeurs possible pour ces nombres sont :

diamond_red.gif  0 : aucun privilège
diamond_red.gif  1 : exécution autorisée (x pour execute)
diamond_red.gif  2 : écriture autorisée (w pour write)
diamond_red.gif  4 : lecture autorisée (r pour read)

ou toute combinaison.

Exemple: chmod 754 fic permet au USER d'avoir tous les privilèges (7=1+2+4), aux membres de son groupe de lire et exécuter le fichier fic (5=4+1) et aux autres, uniquement une lecture de fic. On peut aussi utilisé la commande chmod u+w ficpour donner au user les droits d'écriture sur le fichier fic ou chmod o-r fic, pour enlever les droits de lecture aux autres ou chmod a+x fic pour donner les droits d'exécution à tout le monde (user, groupe et les autres) et ainsi de suite...

diamond_red.gif  gzip/gunzip : compression/décompression d'un fichier. La place ainsi occupée par le fichier compressé est généralement beaucoup plus petite.

diamond_red.gif  gzip fic.ps : compresse fic.ps et le renomme fic.ps.gz
diamond_red.gif  gunzip fic.ps.gz :décompresse fic.ps.gz et le renomme en fic.ps
diamond_red.gif  tar : création/extraction d'archives composées de plusieurs fichiers et /ou directory

diamond_red.gif  tar cvf monarchive.tar mydir : met dans monarchive.tar (un fichier) l'ensemble du contenu (arborescence et fichiers) du directory mydir
diamond_red.gif  tar xvf monarchive.tar : extraction de l'ensemble des fichiers et/ou répertoires contenu dans monarchive.tar
diamond_red.gif  source: exécute un script shell sans lancé un nouveau shell.

blueball.gifEnchaînement de commande

Il est possible de taper sur une même ligne plusieurs commandes indépendantes qui seront exécutées séquentiellement en les séparant par un point virgule.

Exemple:

Essayer de taper cette ligne :

echo "echo un petit texte" > fic ; ls -als fic ; chmod 755 fic ; ls -als fic ; fic

On peut également utiliser le résultat d'une commande comme argument d'une autre en utilisant la commande ``|'' (ce prononce pipe).

Exemple:

Essayer de taper:

touch fic1 ; touch ex1; touch ex2 
ls | grep fic 
ls | grep 1

redball.gifImpression

diamond_red.gif  lpr -Pimprimante nom_du_fichier.ps ou nom_fichier.txt : pour imprimer respectivement un fichier POSTCRIPT8 et un fichier texte.
diamond_red.gif  Pour annuler une impression, faire lpq (donne la liste des travaux en cours) et lprm -Pimprimante numeronumero est le numero de ce que vous voulez annuler.

redball.gifInterruption, passage en background d'un exécutable

Passage en background

Nous avons déjà vu que le symbole ``&'' permet de lancer en background (i.e., en gardant la main dans une fenêtre terminal) un exécutable (par exemple, un éditeur). Cependant on a parfois oublié de mettre ce symbole et on souhaite récupérer la main : on tape alors Ctrl+z ; cela suspend l'exécution de la commande ; on peut alors l'envoyer en background en tapant bg. Essayer avec nedit.

Interruption d'un exécutable

Il est parfois nécessaire d'interrompre l'exécution d'un programme ; pour cela on peut utiliser dans la fenêtre où il a été lancé les touches Ctrl+c. Ceci termine violemment l'exécution. Bien sûr, Ctrl+c ne peut être effectif que si l'exécutable ne tourne pas en background. Si c'était le cas, il est possible de le ``tuer''. La commande ps donne le nom des exécutables qui tournent et le numéro qui leur a été attribué (PID). Soit X ce numéro ; on arrête l'exécution du programme en tapant kill -9 X. Essayer avec nedit.

redball.gifLes variables dans un shell

Nous donnerons à titre indicatif certaines syntaxes propres à sh (ou bash). Le shell est comme nous l'avons dit un moyen de communiquer avec l'ordinateur. Outre les instructions de bases que vous avez déjà vues, celui-ci permet d'utiliser des variables. Ces variables sont de 2 types ; il y a les variables standardset les variables d'environnement.

blueball.gifComplément : Les variables standards

Ce sont des variables que l'utilisateur se définit ; elles sont généralement utilisées dans des scripts ou programmes écrits dans un shell (csh ou sh). Elles ne ``vivent'' que dans le shell courant et sont perdues si on lance un nouveau shell. Leur affectation dépend du shell utilisé :

diamond_red.gif  en sh: var=valeur
diamond_red.gif  en csh:

diamond_red.gif  si la variable est un nombre on utilise @ var=valeur
diamond_red.gif  si c'est une chaîne de caractères set var=valeur
On utilise une variable ainsi affectée par ${var} ou plus simplement $var

On peut afficher la valeur d'une variable par la commande echo

Exemples:

Essayer :

var1="ceci est une chaine"
var2="cela aussi"
echo "voici la variable var1: $var1 et la variable var2 : $var2"

Essayer aussi

echo 'voici la variable var1: $var1 et la variable var2 : $var2'

Pour les nombres:

a=1
b=2
let c=$a+$b
echo "$a + $b = $c"

blueball.gifLes Variables d'environnement

Les variables d'environnement sont particulières dans la mesure ou elles sont utilisées par le shell lui même. Certaines sont déjà définies et sont indispensables, d'autres ne servent que dans certaines circonstances. Contrairement aux variables standards, elles ``s'exportent'' d'un shell au shell fils. Leur affectation dépend également du shell utilisé :

diamond_red.gif  en sh: VAR=valeur ; export VAR ou plus simplement export VAR=valeur
diamond_red.gif  en csh: setenv VAR valeur
La commande printenv VAR permet de visualiser la variable (printenv sans argument donne la liste complète des variables d'environnement affectées). La commande echo peut aussi être utilisée (echo $VAR)

Exemples

diamond_red.gif  PATH: ensemble des répertoires où le système recherche un exécutable (commande LINUX ou programme)
diamond_red.gif  USER: votre login
diamond_red.gif  HOME: votre répertoire principal
diamond_red.gif  PWD: le répertoire courant
diamond_red.gif  SHELL: votre shell par défaut
diamond_red.gif  LD_LIBRARY_PATH: chemin où le système recherche les librairies dynamique (libxxx.so).

blueball.gifLe bash et le .bashrc

Si votre shell est le bash, à chaque fois qu'une terminal est ouverte, bash lance par défaut un certain nombre de script ; le dernier de ceux-ci est, s'il existe, le ~/.bashrc9. Si ce fichier n'existe pas vous pouvez le créer en vous inspirant du modèle ci-dessous :

# .bashrc
# User specific aliases and functions
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

export EDITOR=nedit

PS1='\h[\W] \!: '        #command prompt.

ulimit -s unlimited      #may be useful for some codes

#
#  Alias section
#
alias lpq="lpstat -o"
alias rm="rm -i"
alias dir="ls -alsh"
alias ls="ls -color=auto"
alias cls="clear"
alias h="history"
alias pss="ps -edlaf | grep $USER"

export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"    # where to look for executables
export PATH="${PATH}:~/bin:."

Ce script ne doit pas être exécuter directement mais par la commande source .bashrc afin de conserver tous les alias et autres variables. Si cela vous semble utile vous rajouterez des commandes ou alias.

blueball.gifLe csh et le .cshrc

Si votre shell est le csh, à chaque fois qu'une terminal est ouverte, csh lance par défaut un certain nombre de script ; le dernier de ceux-ci est, s'il existe, le ~/.cshrc. En faisant ls -als dans votre home directory vous verrez que ce fichier n'existe pas. Vous allez en créer un suivant le modèle suivant :

set path=( $path $HOME/bin .)  # where to look for executables
if ( $?prompt ) then           # shell is interactive. 
   set history=40              # previous commands to remember. 
   set savehist=40             # number to save across sessions 
   set system=`hostname|cut -d"." -f 1`     # name of this system.       
   set prompt='%m[%c1] \!: '                # command prompt.
   
   alias xterm "xterm -sl 1000 -sb -n $HOST &"
   alias dir "ls -als"
   alias cls clear 
   alias pss "ps waux | grep $USER" 
   alias lpq lpstat -o 
   alias rm rm -i 
   alias cp cp -i 
   alias mv mv -i 
endif 
Ce script ne doit pas être exécuter directement mais par la commande source .cshrc afin de conserver tous les alias et autres variables. Si cela vous semble utile vous rajouterez des commandes ou alias.

redball.gifProgrammation : le début

Nous allons utiliser un langage évolué de programmation afin d'écrire des programmes un peu plus compliqués que les scripts shell. Ce langage est le C++ (analogue au C).

blueball.gifÉcriture

La première des choses est de taper le programme (en utilisant nedit).

Voici un exemple que vous taperez dans un directory tp1

#include <iostream>
using namespace std;
int main()
{
        cout<<"Bonjour ca va?"<<endl;
}

Sauvegarder le sous essai.cxx

blueball.gifCompilation

Il faut ensuite le compiler, c'est-à-dire transformer le code compréhensible par vous en un code compréhensible par l'ordinateur. Pour cela on se place dans le répertoire tp1 et on tape

g++ -o essai essai.cxx

Cela a pour effet de créer un nouveau fichier exécutable appelé essai, à partir de votre programme C++ essai.cxx (-o signifie output name). Si vous oubliez -o xxx, l'exécutable créé aura pour nom a.out.

diamond_red.gif  Si votre programme contient des erreurs, elles apparaissent expliquées avec le numéro de la ligne du programme correspondante. Il faut alors les corriger, sauvegarder le programme et le compiler à nouveau, jusqu'à ce qu'il n'y ait plus d'erreur.
diamond_red.gif  Il existe divers compilateur C++ ; nous utiliserons g++.

blueball.gifExécution

Exécutez votre programme en lançant la commande essai dans la fenêtre terminal.

[Home|Linux|C++|Graphisme|Projets|Web|FAQ]


previous up next_inactive