Ensemble de programmes qui dirige l'utilisation des capacités d'un ordinateur par des logiciels applicatifs (Wikipedia)
Unix est un ancien système d'exploitation (OS), écrit en langage C au début des années 1970.
/home/login
où login désigne votre nom d'utilisateur.pwd #affiche le répertoire courant
cd .. #remonte dans le répertoire parent
cd rep1 #descend dans le répertoire "rep1"
#Le point "." est un raccourci pour le répertoire courant.
#On peut donc aussi écrire cd ./rep1
cd / #va à la racine
cd #raccourci pour revenir dans le répertoire de travail
#(équivalent à cd /home/login)
#Le tilde est un alias pour /home/login. On peut donc écrire
cd ~/rep1
#au lieu de cd /home/login/rep1
ls [rep1] #liste les fichiers dans le répertoire courant [dans rep1]
ls -a[l] #liste aussi les fichiers cachés [en affichant les tailles et dates]
cp [-r] source destination #copie source vers destination [récursivement]
mv source destination #déplace source vers destination
mkdir folder #crée le répertoire folder
rm [-r[f]] fichiers #supprime [récursivement] les fichiers
touch file #crée ou met à jour file
ps -e #liste les processus en cours
kill -9 pid #arrête le processus d'identifiant pid
#Changer les droits d'accès ou le propriétaire :
chmod [-R] masque fichiers
chown [-R] user:group fichiers
Page Wikipedia sur chmod
Analogue de la commande cp
:
scp [-r]
[login1@machine1:]/chemin/vers/fichiers1
[login2@machine2:]/chemin/vers/fichiers2
Commande plus efficace pour mettre à jour un répertoire,
ou copier des fichiers de grande taille ou nombreux :
rsync -azP --delete [...]
[login1@machine1:]/chemin/vers/fichiers1
[login2@machine2:]/chemin/vers/fichiers2
Plus d'informations sur l'outil rsync
Voir aussi le manuel (man rsync ...)
Les TPs s'effectuent sur une machine distante, d'adresse IP 192.168.31.236.
Celle-ci n'est accessible que depuis les salles de TP (pas chez vous).
Au cas où vous souhaiteriez poursuivre certains TP chez vous, il suffit de récupérer
les données et d'installer PostgreSQL.
Votre login = première lettre du prénom suivie de première lettre du nom, suivie du rang alphabétique en cas d'ex-aequos (parmi ces ex-aequos).
Exemples : Samy BEN LEMRID £\rightarrow£ sb,
Exemples : Anaïs CHERCHALI £\rightarrow£ ac1 (avant Arnaud COULOMB)
Mot de passe envoyé par email (modifiable via la commande passwd
)
Éditeur de texte simple, dans le terminal (donc utilisable sur 192.168.31.236).
nano <fichier>
ouvre fichier en lecture/écriture.
Ensuite (^X signifie Ctrl + X) :
+ configurable, extensible (plugins), bonne coloration syntaxique par défaut
- nécessite l'apprentissage de commandes pas toujours intuitives
Navigation
Divers
Navigation
Divers
Résumé des commandes
Voir aussi l'aide en ligne...
Une commande renvoit en général sa sortie sur l'écran.
On peut préférer envoyer sa sortie dans un fichier :
ps -eF > processes.txt #liste des processus en cours
(>> au lieu de > ajoute en fin de fichier)
On peut aussi changer l'entrée d'une commande :
R --vanilla --slave < script.R [> sortie]
Attention : il y a deux types de sorties,
En général on ne se proccupe que de la première, mais
pour certaines commandes il faut rediriger les deux :
valgrind programme > sortie.txt 2> erreurs.txt
#ou > fichier.txt 2>&1 : tout dans le même fichier
Exemple : rendre un programme "silencieux"
command >/dev/null 2>&1
Mécanisme permettant de chaîner des processus de sorte que la sortie d'un processus (stdout) alimente directement l'entrée (stdin) du suivant. [Wikipedia]
locate fichier | less
: liste les occurrences de fichiercat fichier | shuf
: affiche une permutation des lignes du fichierman rsync | grep "\-z"
: recherche une option dans le manuel de rsyncip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'
ls -d ~/.[!.]*
: les fichiers cachés ([!.]
= "tout sauf un point")ls file??
: les fichiers dont le nom commence par "file" suivi d'exactement deux caractèresls -d [a-f]*
: les fichers/dossiers commençant par une lettre de a à fcp {*.txt,*.pdf} folder/
: copie tous les fichier texte et pdf dans folder/grep motif fichier
Remplacer une chaîne de charactères dans un texte :
sed -i 's/recherche/substitut/g' fichier
Récupérer la seconde colonne dans un fichier CSV :
awk -F"," '{print $2}' fichier
Transformer les 'c' en 'h' :
echo "coucou" | tr 'c' 'h'
Exemple de session
#Connexion sur la machine des TPs
ssh auder@192.168.31.236
#Récupération de la liste des logins
m1im_users=`awk -F"\t" '{print $1}' ~/login_name_email`
#Code pour la création des comptes
cat accounts.sh | grep init_students -A5
# 'init_students' )
# for username in $m1im_users; do
# createUnixUser $username
# createDbUser $username tpbd
# done
#Lancement de psql avec redirection des erreurs
psql 2> error.txt
Mémorise une commande complexe sous un nom simple.
Exemples :alias spgre='ssh auder@192.168.31.236'
: connexion à un serveuralias ll='ls -chlt'
: tri par date de modificationLe texte affiché à gauche dans le terminal
À retenir :Personnalisation possible. Un article complet
"Une base de données est une collection de données persistantes,
utilisées par les applications d’une entreprise."
Comment organiser les données ?
En ligne dans un fichier texte : OK pour quelques lignes, laborieux au-delà.
Exemple : /etc/passwd sous Linux stocke des informations relatives aux utilisateurs.
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/usr/bin/nologin
daemon:x:2:2:daemon:/:/usr/bin/nologin
mail:x:8:12:mail:/var/spool/mail:/usr/bin/nologin
ftp:x:14:11:ftp:/srv/ftp:/usr/bin/nologin
http:x:33:33:http:/srv/http:/usr/bin/nologin
uuidd:x:68:68:uuidd:/:/usr/bin/nologin
dbus:x:81:81:dbus:/:/usr/bin/nologin
nobody:x:99:99:nobody:/:/usr/bin/nologin
(...)
+ plus lisible qu'un fichier texte, accès en ligne ou colonne
- difficile de stocker une structure (hiérarchique, composition ...).
Exemple (où un tableau est adapté) : les notes des étudiants
Dans un arbre : adapté à certains types de données
...Moins à d'autres : ensemble des villes du monde ?
Dans un graphe : adapté à certains types de données
En fait on peut adapter la plupart des données à un modèle graphique,
car elles sont de plus en plus interconnectées ;
un article intéressant
La base de données est composée d'un ensemble de tables (les relations) dans lesquelles sont placées les données ainsi que les liens. Chaque ligne d'une table est un enregistrement. [Wikipedia]
+ très répandu, suffisant dans la plupart des cas
- pas de notion de voisinage (comme dans un graphe)
Historique :
Pensez une BdD relationnelle comme un ensemble de feuilles Excel :
Le schéma résume plusieurs "feuilles Excel" (les tables) par leur nom et leurs attributs (colonnes)
Ces tables sont liées par des attributs spéciaux (cf. suite du cours)
Base de données relationnelle = ensemble de tables
Table = matrice contenant des échantillons d'une entité
Rangées : individus
Colonnes : attributs
Remarque : certaines colonnes font référence à d'autres tables.
Contraintes d'intégrité : arrivée transport £\simeq£ arrivée hébergement,
Contraintes d'intégrité : cohérence des lieux (graphe) ...
Beaucoup de problèmes "du monde réel" peuvent se traduire par des interactions entre différents acteurs.
Dans une base de données,
On distingue les points de vue
Abbréviation : BdDR = Base de Données Relationnelle
L'algèbre relationnelle introduite par E. F. Codd en 1970 définit les bases mathématiques des requêtes SQL.
L'algèbre relationnelle...
Base de données = ensemble (fini) de tables.
Table = ensemble (fini) de relations.
Relation = n-uplet d'attributs.
Attribut = triplet (nom, type, valeur), ou
Attribut = valeur + header (nom, type) ;
Attribut = exemple : ("Vitesse", réel, 55.1)
Schéma = ensemble des headers (nom, type).
Remarque : les noms doivent être distincts, mais l'ordre n'importe pas :
Remarque : (attribut£_1£, attribut£_2£) £\equiv£ (attribut£_2£, attribut£_1£).
Opérations usuelles entre entiers, réels, booléens... ; p.ex. :
£o(nom_1,nom_2,\dots)£ réalise l'opération ligne par ligne.
Utilisation :
Nom vol | Heure départ | Heure arrivée |
---|---|---|
AF1952 | 1020 | 1425 |
EZS1392 | 2045 | 2150 |
TO3566 | 1715 | 1905 |
HA - HD |
---|
0405 |
0105 |
0150 |
A | B | C |
---|---|---|
1 | 2 | 3 |
2 | 1 | 3 |
3 | 1 | 6 |
£A < B \vee C > 5£ |
---|
TRUE |
FALSE |
TRUE |
Fonctions prenant en paramètre une ou plusieurs tables,
et renvoyant toujours une table (éventuellement vide).
Exemple : (jointure sur numéro client)
Prénom | Date de naissance | Numéro client |
---|---|---|
Pauline | 25/10/1991 | 1 |
Matthieu | 15/12/1990 | 2 |
Vincent | 15/03/1985 | 3 |
Amandine | 10/06/1982 | 4 |
Numéro client | Points |
---|---|
1 | 150 |
3 | 170 |
5 | 140 |
7 | 160 |
££\Downarrow££
Prénom | Date de naissance | Numéro client | Points |
---|---|---|---|
Pauline | 25/10/1991 | 1 | 150 |
Vincent | 15/03/1985 | 3 | 170 |
Restriction sur les colonnes :
£\pi[C_1,\dots,C_k](T)£ ne garde que les colonnes £C_1£ à £C_k£ de la table £T£.
Exemple : £\pi[nom,capitale](Pays)£
Équivalent SQL : SELECT
Filtre sur les rangées :
£\sigma[C](T)£ ne garde que les rangées de £T£ vérifiant la condition £C£.
Exemple : £\sigma[surface < 100](Pays)£
Équivalent SQL : WHERE
Requête = £\pi_{nss,nom}(\sigma_{age < 30 \vee prenom='Solange'}(Personnes))£
nss | nom | prénom | âge |
---|---|---|---|
12 | Aymard | Serge | 45 |
18 | Aymard | Hélène | 28 |
45 | Fenouil | Solange | 35 |
nss | nom |
---|---|
18 | Aymard |
45 | Fenouil |
Il faut renommer un attribut s'il entre en conflit avec des attributs d'autres tables.
Syntaxe : £\alpha[£nom_attribut : nouveau_nom£](T)£
Exemple :
£\alpha[£nom : nom_pays£](\pi[nom,capitale](\sigma[surface < 100](Pays)))£
Équivalent SQL : AS
Opérateur sur une (voire plusieurs) colonne : AVG(nom1 x nom2).
Retourne en général un scalaire (1 ligne 1 colonne).
Exemples :
où £T£ est une table pouvant résulter d'une opération complexe.
Quelle opération transforme la table ?
A | B | C |
---|---|---|
1 | 2 | 3 |
2 | 3 | 3 |
3 | 1 | 1 |
4 | 5 | 1 |
Z | B | C |
---|---|---|
2 | 3 | 3 |
3 | 1 | 1 |
£\alpha[A:Z](\sigma[B=C](T))£
A | B | C |
---|---|---|
1 | 2 | 3 |
2 | 1 | 4 |
3 | 4 | 2 |
4 | 3 | 1 |
A | C |
---|---|
1 | 3 |
3 | 2 |
£\pi[A,C](\sigma[A < B](T))£
Soient deux tables £T_1(A_1,\dots,A_n), T_2(A_1,\dots,A_n)£ (même attributs).
On note £\mathcal T£ l'espace des n-uplets d'attributs.
Mots-clés PostGreSQL : UNION, INTERSECT, EXCEPT.
Exemple/exercice :
A | B |
---|---|
a | b |
y | z |
b | b |
A | B |
---|---|
u | v |
y | z |
Soient deux tables £T_1(A_1,\dots,A_n), T_2(B_1,\dots,B_m)£.
Définition :
£T_1 \times T_2 = \{ t = (t_1, t_2) / t_1 \in \mathcal T_1, t_2 \in \mathcal T_2 \}£.
Les lignes de £T_1£ sont concaténées avec celles de £T_2£.
Équivalent SQL : SELECT ... FROM T1, T2.
Exemple/exercice :
A | B |
---|---|
a | b |
y | c |
b | b |
C | D | E |
---|---|---|
c | v | y |
b | z | u |
Soient deux tables £T_1(A_1,\dots,A_n), T_2(B_1,\dots,B_m)£.
Soit une condition £\mathcal C£ portant sur les valeurs d'attributs.
Définition :
£T_1 \underset{\mathcal C}{\bowtie} T_2 = \{ t = (t_1, t_2) / t_1 \in \mathcal T_1, t_2 \in \mathcal T_2, \mathcal C(t_1,t_2) \}£.
On ne retient que les lignes concaténées qui vérifient £\mathcal C£.
Notation alternative : £\bowtie[\mathcal C](T_1,T_2)£.
Exemple/exercice :
A | B |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
C | D | E |
---|---|---|
1 | 2 | 3 |
2 | 3 | 4 |
£\mathcal C \equiv A \neq C£ ?
£\mathcal C \equiv B = D£ ?
£\mathcal C \equiv A > C£ ?
Remarque : si £C£ n'est pas indiquée, une jointure naturelle est réalisée.
cinema=> select * from role; idfilm | idacteur | nomrole -------+----------+-------------- 2 | 5 | Ripley 5 | 11 | Sean Archer 5 | 12 | Castor Troy 6 | 14 | Ichabod Crane 17 | 11 | Vincent Vega
cinema=> select * from artiste; idartiste | nom | prenom ----------+-----------+---------- 3 | Hitchcock | Alfred 5 | Weaver | Sigourney 10 | Woo | John 11 | Travolta | John 14 | Depp | Johnny
Jointure sur "idacteur = idartiste" :
cinema=> select * from artiste join role on idartiste=idacteur; idartiste | nom | prenom | idfilm | idacteur | nomrole ----------+----------+-----------+--------+----------+-------------- 5 | Weaver | Sigourney | 2 | 5 | Ripley 11 | Travolta | John | 17 | 11 | Vincent Vega 11 | Travolta | John | 5 | 11 | Sean Archer 14 | Depp | Johnny | 6 | 14 | Ichabod Crane
ENO | ENOM | PROF | DNO |
---|---|---|---|
10 | Joe | Ingénieur | 3 |
20 | Jack | Technicien | 2 |
30 | Jim | Vendeur | 1 |
40 | Lucy | Ingénieur | 3 |
DNO | DNOM | VILLE |
---|---|---|
1 | Commercial | New York |
2 | Production | Houston |
3 | Développement | Boston |
Obtenir les numéros des employés travaillant à Boston.
£\pi_{ENO}(\sigma_{VILLE='Boston' \wedge E\_DNO=D\_DNO}(E \times D))£, ou
£\pi_{ENO}\left(E \underset{E\_DNO=D\_DNO}{\bowtie} \sigma_{VILLE='Boston'}(D)\right)£
Soient deux tables £T_1(A_1,\dots,A_n), T_2(A_{i_1},\dots,A_{i_k})£ avec £i_j \in [ 1,n ]£.
Définition (£T_2 \subset T_1£) :
£T_1 \div T_2£ = sous-ensemble (maximal) de £T_1£ noté £T'_1£ vérifiant £T'_1 \times T_2 \subset T_1£.
Sous-ensemble de £T_1£ qui concaténé à tout £T_2£ donne un sous-ensemble de £T_1£.
Exemple/exercice :
A | B | C | D |
---|---|---|---|
a | b | c | d |
a | b | e | f |
g | h | c | d |
i | j | k | l |
C | D |
---|---|
c | d |
e | f |
£T_1 \div T_2 =£ ?
Dividende : T_ENTREPOT
VILLE_ETP | RAYON_ETP |
---|---|
PARIS | boisson |
PARIS | frais |
PARIS | conserve |
LYON | boisson |
LYON | conserve |
LYON | droguerie |
MARSEILLE | boisson |
MARSEILLE | frais |
MARSEILLE | conserve |
MARSEILLE | droguerie |
ANGERS | boisson |
ANGERS | frais |
ANGERS | droguerie |
TOULOUSE | boisson |
TOULOUSE | frais |
TOULOUSE | conserve |
TOULOUSE | droguerie |
Diviseur : T_RAYON
RAYON_RYN |
---|
boisson |
frais |
conserve |
droguerie |
Question : quels sont les entrepôts qui approvisionnent tous les rayons ?
Résultat : T_RESULTAT
VILLE_ETP |
---|
MARSEILLE |
TOULOUSE |
Une requête est une expression composée d'opérations de l'algèbre relationnelle. Elle permet d'élaborer les réponses à la plupart des questions que l'on peut poser à une base de données relationnelle.
Exemple : £\pi[Nom](\sigma[IdCours='Algo'](\bowtie(CEN,ENAT)£
(Au moins...) Deux types d'incertitudes envisageables.
Applications :
Voir la page wikipedia.
L'algèbre relationnelle a également un intérêt mathématique : cadre formel pouvant servir de point de départ à certaines extensions.
Les tables sont en fait des multi-ensembles de n-uplets car des doublons apparaissent naturellement dans un résultat. On ne cherche pas à les éliminer systématiquement, car
/