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
  1. expliquer ps
  2. 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
  1. liste utilisateurs avec korn shell (aucun, je change pour le bash)
    cat /etc/passwd | cut -f1,7 -d: | grep "bash$" | cut -f1 -d: | sort
  2. uid 0
  3. afficher attributs de tous les sous-rep de tous les niveaux
  4. chercher fichier > 1 lien dans /home

vi

sauver sous un autre nom: :w filename-new-name
:wq = :x

ex.
  1. créer liste utilisateurs connectés, insérer liste des "utilisateurs concernés" en ligne 1
  2. ajouter ligne constituée d'étoiles après la dernière ligne du fichier
  3. déplacer la ligne qui indique votre terminal
  4. mettre en majuscules la première lettre de chaque mot de la première ligne
  5. sauver sous essai2.txt
  6. afficher options actives de vi
  7. afficher caractères invisibles
  8. 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