Cours Linux unige 12-14.5.03
Gilbert Robert, prolibre.com
Questions à poser: ASF: VMWare ou Cygwin? X avec Cygwin?
12.5
Install Linux, ajouter
netmask 255.255.248.0
GW 129.194.16.42
DNS 129.194.8.7
sécurité: élevée pour un poste uni, normale
maison
poste de travail: / (3-20Go), /swap (256-512 Mb), /home (reste)
serveur idem + /var (dans lequel on met tout ce qui bouge)
types de systèmes de fichier:
linux ext2 (native)
> disques: systèmes de fichiers journalisés; ext3
(compatible bijectivement avec ext2), reiser bon pour serveurs, XFM
(IBM), JFM (Silicon Graphics)
!!! tjs backuper avant /etc
conseille d'utiliser partition magic
notes d'install, aller voir softs: draksec, multi network firewall
(VPN), webmin, clone
d'outlook: evolution
(permet de synchroniser sur le palm)
/ base+config
/usr applications
/home utilisateurs
/tmp tout user peut y créer des fichiers
Remarques:
booter en single user boot (?) -s pour réparer en root
CTRL-ALT F1 -> F6; F7 pour revenir en mode graphique
Commandes
commande= nom + argument(s)
ex: cat /etc/passwd | cut -f1,5 -d: | sort | grep root
Compte utilisateur
date && whoami
nom de l'utilisateur logname, whoami
id qui on est, quel groupe etc
tty interface terminal (TiTiOuaille)
uname infos
sur système d'exploitation; uname -a pour avoir tout
who liste des utilisateurs
passwd modifier son mot de passe
man pages de manuel
man pages
q quit
b back
/ recherche
n next recherche
space next
Métaphore
Métaphore des tuyauteries pour les pipes
Exercice
afficher calendrier année 1997
cal 1997
mois sept 1752
cal 9 1752
date au format jj-mm-aa
date '+%d-%m-%y'
12-05-03
options
-h --help
-q --count
mount
permet de monter une partition pour la rendre accessible, p. ex.
à d'autres utilisateurs
p. ex. /mnt/windows
Le système de fichiers
/usr...
pour installer les programmes etc.: GROS
/bin
/doc
/src
/lib
/usr/local
pour installer
ses propres logiciels
/bin
/lib
/var
tout ce qui est variable, imprimante, mail, logs
/home
fichiers des utilisateurs: GROS
/tmp
doit ê en 777 pour que tout le monde puisse y bosser
/sbin
binaires sytème
/lib
librairies
/dev
sur unix, tout est fichier, le disque p. ex. sera /dev/hda1/, le cdrom
/dev/cdrom etc.
/proc
toutes les informations sur la machine
GUI pour la manipulation de fichiers
konqueror
nautilus (pour nostalgiques de windows)
Commandes de base
mkdir
rmdir
cp
-p préserve
les attributs
-r récursif
mv
rm
-i interactif
file
touch
pwd
find
-type nature de l'objet
-name
-size
-perm
-atime date de création
-ctime date de dernière
modification des attributs
-mtime date de dernière
modification
-> actions:
-print attiche le ré
-exec effectue une commande unix sur
les fichiers
-ok comme exec mais demande confirmation
voir exemples dans support de cours
path
set
PATH='/unige/workshop_6.0.2/SUNWspro/bin:/usr/ccs/bin:/unige/ow3/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ucb:/usr/openwin/bin:/opt/sfw/bin:/usr/local/bin:/unige/util/bin:.:/usr/dt/bin:/home/radeff/bin'
permet p. ex. d'utiliser les scripts créés dans
/home/radeff/bin
windows / linux
utiliser magic partition; pour les mail, si on veut partager des
agendas etc: netscape dernière version + groupware
Ex. 2
4) touch: modifie la date d’accès et la
date de modification de chaque fichier indiqué (surtout
utilisé par moi pour créer des fichiers)
5) uname -a
6) afficher les login + nombre
cat /etc/passwd | cut -f1 -d: | sort
puis
cat /etc/passwd | cut -f1 -d: | sort | wc -l (-l pour le nombre de
lignes)
en une fois?
who -q
7) fred:x:501:501:fred:/home/fred:/bin/bash
Login:Password:UID:GID:Nom complet:HOMEDIR:SHELL
Ex. 3
2)
fred@PC1790 fred]$ mkdir exercices
[fred@PC1790 fred]$ mkdir exercices/serie_1
[fred@PC1790 fred]$ mkdir exercices/serie_2
ls exercices
find . -name "serie*"
./exercices/serie_1
./exercices/serie_2
7)
[fred@PC1790 fred]$ cp /etc/passwd fic_pass
[fred@PC1790 fred]$ mv fic_pass password
[fred@PC1790 fred]$ mv password ./exercices/serie_1
[fred@PC1790 fred]$ cd /etc
[fred@PC1790 etc]$ cp passwd ~/exercices/serie_2
[fred@PC1790 etc]$ cp group ~/exercices/serie_2
[fred@PC1790 serie_2]$ cp /etc/passwd ./
cp: écraser `./passwd'?y
[fred@PC1790 serie_2]$ pwd
/home/fred/exercices/serie_2
[[fred@PC1790 serie_2]$ cp /etc/passwd /home/fred/exercices/serie_2
8) ls ../serie_1
9) touch document
ls -l document
file document
10)
[fred@PC1790 fred]$ cd
[fred@PC1790 fred]$ ls -alF
11) ls -alF ./
12) diff /etc/passwd /home/fred/password
[fred@PC1790 fred]$ diff /etc/profile .profile
2c2
< # (c) MandrakeSoft, Chmouel Boudjnah
<chmouel@mandrakesoft.com>
---
> # blablabla (c) MandrakeSoft, Chmouel Boudjnah
<chmouel@mandrakesoft.com>
diff
base du fonctionnement des serveurs openSource CVS: chaque membre du
projet a une copie locale du serveur CVS et quand il a fini de bosser il
fait "commit", màj des serveurs- avant de commencer à
bosser il fait un "update"
13)
mkdir exemples
cp -r exercices exemples
14)
rm -fR exercices
mais tue tout, pas seulement les fichiers en lecture seule: vaut mieux
chercher puis tuer:
find . -perm 444
[fred@PC1790 fred]$ ls -l t
-rw-r--r-- 1 fred
fred 12 mai
12 17:01 t
[fred@PC1790 fred]$ chmod 444 t
[fred@PC1790 fred]$ find . -perm 444
./t
find . -perm 444 -exec rm -f {} \;
su
slocate -u
(à faire avec un cron sinon très long)
puis locate blabla (nomdufichier) et on le trouve, c'est une petite db
CTRL-ALT-BACKSPACE: tuer le serveur X (pas propre!)
13.5.3
trouver tous les htm*, HTM*:
différentes solutions, p. ex.
*.[Hh][Tt][Mm]?
essais ratés en plus précis, avec:
ls *.[Hh][Tt][Mm][Ll]?
ls *.[Hh][Tt][Mm]([Ll]?)
ls *.[Hh][Tt][Mm]([Ll])?
ls *.[Hh][Tt][Mm][L?][l?]
ls *.[Hh][Tt][Mm][L]?[l]?
Redirection d'une commande
STD-OUTPUT: 1> ou >
STD-ERROR: 2>
exemple (pas en root):
grep radeff /etc/* 2> junk
ls -l 2> /tmp/test
wc < /tmp/test > /tmp/test1
pour ajouter qqchose: >>
Ex. 4
1)
cd /usr/bin
ls ????
2) ? (listes des fichiers commençant par a à e)
ls [a-e]*
et
ls [a-e]*.*
3)
ls ?[t]
ls ?[t]*.
4)
echo "Il fait beau aujourd'hui"
5)
echo "bonjour" > junk
echo " monsieur" >> junk
less junk
solution officielle:
[fred@PC1790 fred]$ echo \
> bonjour \
> il \
> fait \
> beau \
>
bonjour il fait beau
6)
date > info.txt
cat info.txt
7)
écrase contenu précédent
8) ajouté après date+heure ls
mail
très utilisé par la machine pour avertir
l'administrateur, on peut envoyer des fichiers texte:
9)
mail fred < info.txt
mail -s test radeff@adm.unige.ch < file
NB: si on tape mail tout seul, finir
en tapant un point "."
10)
ls /etc | more
Groupes et utilisateurs
umask <droits>
défaut: umask 022
ex. umask 037
pour trouver le umask, soustraire 777 des droits souhaités
ex. 5
[fred@PC1790 fred]$ emacs calen.sh
#! /bin/sh
date
echo calendrier:
cal
[fred@PC1790 fred]$ chmod a+x calen.sh
[fred@PC1790 fred]$ calen.sh
bash: calen.sh: command not found
[fred@PC1790 fred]$ ./calen.sh
mar mai 13 11:45:53 CEST 2003
calendrier:
mai 2003
di lu ma me je ve sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1) touch essai.txt
chmod oga+r-w-x essai.txt
et
chmod 444 essai.txt
3) proprio: écriture-exécution, group écriture,
public peut pas voir
-rwxrw----
4) tous (o-g-a)
5) tous sauf all
6)non
7) mkdir prive
chmod 700 prive
8) chmod g+r prive
9) non:
drwxr-xr-x 25 fred
fred 4096 mai 13 11:51 ./
drwxr-xr-x 3 root
root 4096 mai 12 13:00
../
pour renommer il faut pouvoir bouger (égal à effacer +
créer) et fred a pas les droits
10) répertoire: 750 -> umask 027
fichier 620 -> umask 157
12) chown pierre:paye prive
Package manager
db opensource (majors): MySQL, postgresql, sapdb
install MySQL
il faut lancer le démon après le rpm
ports: smtp port 25, apache 80, mysql 3306
/etc/init.d/
contient tous les services
/etc/init.d/mysql start
ATTENTION: BIEN INDIQUER LE PATH COMPLET!!! SINON ERREUR HABITUELLE:
ERROR 2002: Can't connect to local MySQL server through socket
'/var/lib/mysql/mysql.sock' (2)
bon site rpm (noté dans signets) sunsite.cnlab-switch.ch
root@PC1790 init.d]# /etc/init.d/mysql stop
Arrêt du serveur MySQL
(pid
4172)
[ OK ]
webmin
https://localhost:10000/
/etc/pam.d
à la main:
adduser -r toto3 -p cowslinux
nous montre ssh
nous montre scp, rappel:
scp filename toto1@129.194.17.90:/home/toto1
rsync
options: -a, -l, -z
Redirection suite
réunion des canaux n>&m
grep 'linux' /usr/doc/* > /tmp/result 2>&1
redirection des erreurs (double redirection)
grep 'linux' /usr/doc/* > /tmp/result 2>/dev/null
Commandes
alias
exemples
alias cd..='cd ..'
alias d='ls'
alias df='df -h -x supermount'
alias du='du -h'
alias kde='xinit /usr/bin/startkde'
alias l='ls'
alias la='ls -a'
alias ll='ls -l'
alias ls='ls -F --show-control-chars --color=auto'
alias lsd='ls -d */'
alias md='mkdir'
alias mv='mv -i'
alias p='cd -'
alias rd='rmdir'
alias rm='rm -i'
alias s='cd ..'
unalias
history
c-shell
!! ré-exécution de la dernière commande
!n ré-exécution de la commande n
!chaîne ré-exécution de la dernière commande
commençant par la chaîne
!?chaîne ré-exécution de la dernière
commande contenant la chaîne
Initialisation de l'environnement
global (root): /etc/profile
users:
.bash_profile
.bash_login
.profile
shell de commande .bashrc
Prompt
\d date
\h nom de la machine
\n saut de ligne
\s nom du shell
\t heure
\u utilisateur
\w répertoire courant
\# numéro de commande depuis la connexion
\! numéro de commande (historique)
ex
$ PS1="[\#]-\u(\h)\w: "
du -a | grep webmin (idem à find . -name webmin en + rapide)
du -s
taille du repertoire courant (complet)
Ex. 6
1)
2) alias taille du -s
res= 15840
3) $ echo $TERM
xterm
Gestion des processus
zombie: processus à problème
pour avoir tous les processus:
ps aux
pour voir seulement les proc. actifs + mémoire
ex.: ps aux | grep emacs
top
puis on peut taper des trucs, p. ex.:
s (rafraichissement)
m (nbre de lignes visibles sur l'écran)
liste arborescente
pstree
ns montre que init est père de tous les ps
bg
lancer la commande, p. ex. emacs, revenir dans le shell, taper CTRL-Z
puis bg
ou (+ court): emacs &
met en background un processus
fg
met en foreground le ps
jobs
liste les ps
kill
tuer un ps, taper kill [numeroDuProcessus] ou (+ propre)
kill -TERM [numeroDuProcessus]
brutos: kill -KILL [numeroDuProcessus] ou kill -9 [numeroDuProcessus]
mais peut justement
générer des zombies en tuant des pères sans tuer
avant les fils
SI ON EST EN MODE GRAPHIQUE ET QU'IL Y A UN PEPIN
CTRL-ALT F1 (-> F6),
kill ... puis CTRL-ALT F7 pour revenir en graphique
possible aussi à distance par ssh
stty
configuration du terminal
14.5.03
impression CUPS: http://localhost:631
lpr commande d'imporesion: lpr -P[nomImprimante] [path]/[fileName]
lpq liste des demandes d'impression
lprm supprime la requête
lpc information imprimantes
ex:
lpr -PsP etc/motd
lpq -Psp
lprm -Psp 96
a) vérifier que cups est installé:
ls /etc/init.d/cups
si pas démarré:
/etc/init.d/cups start
Rem: Pour démarrer un service il faut toujours être root
ajout imprimante
1e page blabla
2e page -> standard= LPD/LPR
3e page device URI: lpd://129.194.22.19/RAW
TOUJOURS CONFIGURER ENSUITE ET CHOISIR A4 (PAR DEFAUT=FORMAT U.S.)
si peu de drivers, relancer RPM et ajouter les drivers CUPS: si il faut
d'autres drivers, aller sur www.cups.org
Autre utilitaire avec kde intéressant: kups
-> choix imprimante, instances, configuration -> filtres -> on
peut imprimer en PDF etc.
hackers: scannent machines (ports) et cherchent services
Images
gphoto
gallery (utilitaire php)
convert
convert image.gif image.png --geometry 50% 400x600
enscript
^m chose avec du texte!
konvert
pour changer les accents etc.
pour trouver différents trucs:
pdf TAB
ps TAB
etc.
NOMCOMMAND + TAB -> NOMCOMMANDES*
pour imprimer en PDF, installer une imprimante PDF et lancer depuis un
traitement de texte (openOffice ou Kword)
Développement
a2ps
kdevelop
tidy
Concaténer
cat f1 f2 f3 > f4 concatène les 3 files dans f4
cat > notes.txt
tout ce qu'on tape tant qu'on a pas fait CTRL-D est enregistré,
p. ex. pour sauver l'historique
Traitement du contenu des fichiers
cut
diff
uniq
tr
sed
comm comparaison ligne par ligne de 2 fichiers triés
pr mise en page
Ex. 8
liste des utilisateurs triés par nom
1) cat /etc/passwd | cut -f1 -d: | sort
alternatives
cut -f1 -d: /etc/passwd
ou
who | sort
+ gros fichier du rép
2) ls -s | sort -n | tail -1
alternatives
ls -lS | grep 'fred' | head -1
ou
ls -l | sort -n +4 | head -1
si dans sous-rép: utiliser du et tri alpha-numérique
contenu joli .profile + ajouter header
3) sed '1,1 s/^/Fichier de configuration\
/' .profile | pr
+ simple
pr -h " ... header ... " .profile
tous les fichiers modifiés dans la jounée du 14 mai
(rem: calcul bc)
4) find -atime 1
+ joli
ls -l | grep ' mai[ ]*14'
ou (si le fichier test.txt a > 24h)
find -newer test.txt
ou
find -mmin -180 -print
afficher les lignes qui contiennent #
5) grep '#' .profile
afficher tous les fichiers texte de votre répertoire
6) file * | grep -i 'text'
utilisateurs connectés (seulement le nom)
7) who
who | cut -f1 -d ' '
remplacer le caractère de début de ligne "-" lors d'un ls
-l par un "f"
8) ls -l | sed 's/^-/f/g'
Gestion du temps
time temps d'exécution d'une commande
cal calendrier
date date
at diffère l'exécution d'une commande
crontab (/etc/cron. ... daily, weekly, monthly,...)
/etc/crontab pour chaque user
Compression
bz2 + récent et meilleur: bzip2
.tar.gz gzip
ex.: cat file1 file2 | gzip > goo.gz
zless ou zcat pour lire sans décompresser, idem zgrep, ex.: zles
file.txt.gz
gzip <-> winzip
Archivage
archive: c
tar czvf fred.tar.gz /home/fred
ou
tar cyvf fred.tar.bz2 /home/fred
extrait: x
tar xzvf fred.tar.gz
tar xyvf fred.tar.bz2
liste t
tar tzvf fred.tar.gz
ATTENTION:
tar CIBLE SOURCE et NON l'INVERSE!!!
chercher dans RPM keyword backup, genre af ou al backup ou cdbackup,
arkeia très pratique (gratuit pour 2 clients et 1 serveur)
Packages, RPM's, installation soft, sites
freshmeat.net
ap-utils
chercher dans la boîte, prendre les versions bz2 et rpm
ftp://sunsite.uio.no/pub/Linux/Mandrake/Mandrake-devel/contrib/RPMS
tar tyvf ap-utils-1.3.2-pre3.tar.bz2
on voit où il extraiera l'archive, alors on fait
tar xyvf ap-utils-1.3.2-pre3.tar.bz2
cd ap-utils-1.3.2-pre3
Lire doc: README; INSTALL
Installation standard
en login normal
./configure --help
si ok
./configure
si tvb crée fichier Makefile
puis
make (va compiler le tout avec gcc)
crée les binaires normalement dans le sous-répertoire src
se mettre en root
remonter à la source des sources (en général cd ..)
make install (copie les binaires dans des répertoires à
disposition des utilisateurs)
make clean + tard pour virer le junk (si on a travaillé pas en
root on peut le faire en normal, sinon il faudra passer en root)
Ex. 12
- expliquer ps
- affiche bonjour toutes les 30'
cat > bonjour
while true
do
echo bonjour
sleep 30
done
CTRL-D
ps ux
ps ft
ps uxft | grep sleep
[fred@PC1790 fred]$ ps uxft | grep sleep
fred 7094 0.1 0.2
3108 740 ?
S 15:18 0:00 \_ sleep 30
fred 7093 0.0 0.2
3108 740 pts/3 S
15:18
0:00 |
\_ sleep 30
[1]+
Running
bonjour &
Ex. 14
- liste utilisateurs avec korn shell (aucun, je change pour le bash)
cat /etc/passwd | cut -f1,7 -d: | grep "bash$" | cut -f1 -d: | sort
- uid 0
- afficher attributs de tous les sous-rep de tous les niveaux
- chercher fichier > 1 lien dans /home
vi
sauver sous un autre nom: :w filename-new-name
:wq = :x
ex.
- créer liste utilisateurs connectés, insérer
liste des "utilisateurs concernés" en ligne 1
- ajouter ligne constituée d'étoiles après la
dernière ligne du fichier
- déplacer la ligne qui indique votre terminal
- mettre en majuscules la première lettre de chaque mot de
la première ligne
- sauver sous essai2.txt
- afficher options actives de vi
- afficher caractères invisibles
- quitter vi sans enregistrer
voir corrigés
expressions régulières
2e feuillet (commence par archivage) voir mes notes
améliorées: http://tecfa.unige.ch/~radeff/info/regexp.html
rechercher toutes les adresses ip dans le rep /etc; 1 adresse IP = [1-3
chiffres]. [1-3 chiffres]. [1-3 chiffres]. [1-3 chiffres]
egrep -s "([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/*
(le -s permet au non-root de le faire, sinon on doit faire en root)
Manuel (man)
locate /man/ | wc -l
HOWTO
+ didactique que les man
locate HOWTO
ou sur google:
http://www.linuxdoc.org/HOWTO
http://www.tldp.org
http://fr.tldp.org/howtos.php
http://www.freshmeat.net
http://www.tuxfinder.com
http://www.linux-gull-ch/liens
xhost
export DISPLAY=129.194.17.80:0
ALLER VOIR DOC ET TESTER AVEC BANCAL