Rechercher Liste des Membres S'enregistrer Profil Se connecter pour vérifier ses messages privés Connexion



Recherche rapide :


Debutant > Apprendre à administrer linux (pense bête)

   
 
Poster un nouveau sujet   Répondre au sujet    ALV Basket - Le forum NBA et Aide Informatique -> Astuces informatiques
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
r23o
Administrateur
Administrateur




Inscrit le: 04 Mai 2003
Messages: 5219
Localisation: lille

MessagePosté le: 19 Mai 2005 14:58    Sujet du message: Répondre en citant

En surfant sur le net je suis tombé vraiment par hasard sur un fichier trés interessant :)

Il sagit d'une espece de pense bête en ligne, d'un neophyte au monde de linux, qui a ecrit dans un simple fichier texte tel dans un journal intime au fur et à mesure toutes ses decouvertes, et nous les fait partager sous forme de commentaires et de liens vers des articles et tutoriel sur internet trés pertinants ;)


Voici le lien vers le ficher txt en question :
http://myrte.u-strasbg.fr/Pense_bete_Linux.txt

Je vous le recopie juste en dessous (pour rendre les liens cliquables et pour une meilleure lisibilité, aussi pour que vous puissiez donner des idées, des suggestions, vos commentaires...)

///////////////////////////////////////////////////////////////////////////////////////////////////////
NB : ceci est mon "pense-bête" _personnel_ : j'y mets mes notes au fur et à mesure de ma découverte de Linux (Mandrake principalement, Debian/Knoppix parfois) : vous y trouverez donc des erreurs, des explications incomplètes et des choses que je suis le seul à comprendre. Mais comme certaines explications peuvent être utiles, je laisse ce fichier en ligne.
Il n'y a pas (encore) de classement ou de liens : utilisez la fonction recherche de votre "butineur".

A utiliser à vos risques et périls :)

Jean-Claude Garaud
///////////////////////////////////////////////////////////////////////////////////////////////////////

Les mines de renseignements
===========================
http://tldp.org/LDP/intro-linux/html/ Introduction to Linux
http://tldp.org/LDP/intro-linux/html/chap_04.html Processes
http://www.freenix.fr/unix/linux/Guide/ (le guide du rootard)
http://www.delafond.org/survielinux/ Guide de survie du débutant sous Linux
http://lea-linux.org
http://www.funix.org/fr/linux/main-linux.php3?ref=main&page=menu
http://www.zebulon.org.uk/
http://christian.caleca.free.fr/index.html
http://aplawrence.com
http://linux-newbie.sunsite.dk/index.html
http://www.unixguide.net/linux/linuxshortcuts.shtml
http://www.freeos.com
http://www.anfalab.org
http://tldp.org
http://www.linux-france.org/article/cesar/index.php?page=501
http://astuce.linux.free.fr/
http://troumad.free.fr/Linux/Linux.sxw
http://guide.andesi.org
http://funix.chez.tiscali.fr/informatique/linux/
http://linux-sottises.net
http://www.univ-st-etienne.fr/infsci/linfo/l0/unix/Cours/Html/ UNIX Principes de base
http://cyberzoide.developpez.com/unix/ Pense bête pour UNIX

Programmation
=============

BASH
----
- Bash Guide for Beginners
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/index.html
- BASH Programming - Introduction HOW-TO
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
- Guide avancé d'écriture des scripts Bash
http://www.bsdbooks.net/shells/scripting/fr/
http://abs.traduc.org/abs-3.1-fr/
Advanced Bash Scripting Guide :
http://www.tldp.org/LDP/abs/html/
http://personal.riverusers.com/~thegrendel/abs-guide-3.3.tar.bz2
- Linux Shell Scripting Tutorial
http://www.freeos.com/guides/lsst/

Quelques trucs
==============

Identifier le shell
-------------------
echo $SHELL
cf. http://unix.about.com/library/weekly/aa092500a.htm
La commande ps retourne les processus actifs, et en particulier le shell

Connaître la configuration matérielle et logicielle
---------------------------------------------------
cf. http://lea-linux.org/admin/exploration_config.html

Version de mandrake installée : cat /etc/mandrake-release
Version du noyau Linux : uname -sr (cf. man uname)

Déterminer le type d'un fichier
-------------------------------
file nomfichier

Infos sur un fichier (ou répertoire)
------------------------------------
stat nom_fichier
(donne en particulier le nombre de "hard links")

Récupérer le code de sortie d'une commande (errorlevel)
-------------------------------------------------------
Très utile dans les scripts, ce code peut aussi être visualisé directement en ligne de commande grâce à echo $?.
Exemple :
$ mount | grep /dev/hda1
echo $?
1
=> la partition /dev/hda1 n'est pas montée, n'existe pas, est déjà montée ... (voir man mount)

$ mount | grep /dev/sda7
/dev/sda9 on /mnt/backup type ext3 (rw)
$ echo $?
0
=> la partition /dev/sda9 est montée


Configuration matérielle
========================
D'après Gnu/linux magazine N°71

Bus PCI
-------
$ lspci
$ lspci -v
$ lspcidrake

Bios et hardware
----------------
# dmidecode (à installer)
Exemple : chercher les caractéristiques de la carte mère :
# dmidecode | less
Dans less taper h (pour la doc en ligne)
-i (pour des recherches en ignorant la casse)
/board (pour trouver la 1° occurence de board)
n (pour la suivante)
N (pour revenir à la précédante)

# lshw
# lshw -html

Disque dur :
----------
# hdparm -i /dev/hdx
Nb : ne fonctionne pas (actuellement 14-4-2005) avec disques SATA ; dans ce cas taper hdparm /dev/sdx qui ne retourne pas des infos vraiment intéressantes

SMARTmontools (=smartctl)

Processeurs
-----------
$ cat /proc/cpuinfo


Arrêter le PC
=============
cf: http://www.faqts.com/knowledge_base/view.phtml/aid/24476/fid/10
Pour l'arrêter complètement :
halt
shutdown now
shutdown -h now
(h = halt)

Avec redémarrage :
shutdown -r now
(r= reboot)
ou
<CTRL><ALT><DEL>

A partir de X Window, d'abord
<CTRL><ALT><BACKSPACE>
pour quitter X Windows, puis
<CTRL><ALT><DEL>


shutdown +3
(shutdown dans 3 minutes)
shutdown -c
supprimer l'arrêt programmé par la commande précédante

shutdown -Fr now
shutdown -fr now
-F = avec fsck au reboot
-f = sans fsck au reboot

init 5

Fichiers standard
-----------------
cf. http://livefirelabs.com/unix_tip_trick_shell_script/june_2003/06092003.htm
Un programme UNIX standard ouvre par défaut 3 fichiers
Nom Numéro
- standard input (stdin) 0
- standard output (stdout) 1
- standard error (stderr) 2

Redirections
------------
cf. http://unix.about.com/library/weekly/aa110600b.htm#stderr

Rediriger la sortie d'une commande vers un fichier :
cmd > fic
Rediriger stderr vers un fichier :
cmd 2> fic
Rediriger stdin et stderr vers le même fichier :
cmd > fic 2>&1
Rediriger stdin et stderr dans 2 fichiers différents :
cmd > fic1 2> fic2

Diriger le résultat (stdout) d'une commande simultanément vers l'écran et un fichier :
cmd | tee fic

Diriger le résultat d'une commande (stdout + stderr) simultanément vers l'écran et un fichier :
cmd 2>&1 | tee fic

Pour ajouter à un fichier déjà existant, remplacer > par >>
Pour tee, l'option d'ajout est -a :
cmd | tee -a fic

Arborescence (nom des répertoires)
==================================
http://www.pathname.com/fhs/2.2/
okki666.free.fr/docmaster/articles/linux025.htm

Différence entre bin et sbin : bin=binaires, sbin=binaires système.
=> pour un utilisateur standard bin peut être dans le PATH, mais sbin n'a aucune raison d'y être.

/ racine (root) du système de fichiers
/bin programmes nécessaires pour démarrer le système en mode mono-utilisateur.
/boot
/dev device files : points d'entrées vers des périphériques physiques
/etc fichiers de configuration
/home données propres à chaque utilisateur
/lib shared libraries nécessaires aux programmes de démarrage (principalement des programmes placés dans /bin et /sbin).
/mnt pour le montage pour les périphériques en mode block (cdrom, floppy ...)
/proc infos sur l'état du système et les différents processus
/sbin programmes nécessaires au fonctionnement du système
Les commandes placées dans /sbin (et dans /bin) ne sont en général pas exécutées par les utilisateurs.
/tmp fichiers temporaires
/usr usr = Unix System Resources. Données que les utilisateurs peuvent se partager
/var fichiers qui sont susceptibles de changer fréquemment : logs, les files d'attentes pour les impressions, etc.

Répertoires dans /usr

X11R6 système Xwindow
X11R6/bin exécutables pour le système Xwindow.
X11R6/lib librairies pour les programmes dans /usr/X11R6/bin.
X11R6/lib/X11 librairies utiles au démarrage du serveur Xwindow.
X11R6/include/X11 fichiers d'entêtes des applications X11.

bin programmes utilisables sur le système.
bin/X11 liens symboliques (et historiques) vers /usr/X11R6/bin
dict dictionnaires utilisés par les vérificateurs orthographiques
etc fichiers de configuration qui peuvent être partagés entre plusieurs machines. Vide sur MDK
include fichiers entêtes (.h) pour le compilateur C
lib librairies utilisées par les programmes des utilisateurs. Sous-répertoires pour les grosses applications
Contient aussi des programmes qui ne sont jamais lancés directement
X11 lien symbolique vers /usr/X11R6/lib/X11

local ce qui est spécifique à la machine locale
local/bin programmes
local/lib librairies
local/doc documentations
man man pages
src sources des diverses applications installées sur le système.
src/linux sources du noyau.

Les répertoires dans /var
lock fichiers de verrouillage. Par convention, le nom des fichiers est toujours LCK.<périphérique>
log logs du système
preserve sauvegardes d'édition de vi.
spool contient les files d'attentes d'impressions
spool/cron entrées crontab pour l'automatisation des tâches.
spool/lpd fichiers en attente d'impression.
spool/mail boîtes à lettres (mailbox) et les messages (mails) des utilisateurs.

PATH
----
Affichage :
echo $PATH

Ajout :
PATH=$PATH:nouveau_rep

Pour que la nouvelle valeur soit utilisée par le shell et les threads :
export PATH

Ou en une seule commande :
export PATH=$PATH:nouveau_rep


Quelques touches rapides très pratiques
=======================================
http://linux-newbie.sunsite.dk/lnag_commands.html#shortcuts
et touches système :
http://www.linux-france.org/article/cesar/index.php?page=5035

<Ctrl><+> Zoomer (nombreux browsers, konqueror, firefox ...)
<Ctrl><-> 'dé'zoomer
<Ctrl><Alt><Esc> lance xkill
<Ctrl><Alt><BkSpc> kill le serveur X-windows courant
<Ctrl><d> en début de ligne : ferme le terminal courant
sinon envoie EOL au processus courant
<Ctrl><z> Envoie le processus courant en tâche de fond

Sous KDE
--------
<Ctrl><Esc> Visualisation avec possibilité de suppresion des processus
<Alt><F12> (Bascule) permet d'émuler la souris à l'aide des flèches du clavier
<Alt><PrintScreen> Met une image de la fenêtre courante dans le presse-papier
<Ctrl><Alt><PrintScreen> " de l'écran " "
<Ctrl><Alt><d> (Bascule) fait apparaître/disparaître les fenêtres présentes sur le bureau
<Alt><LeftMouseButton> Permet de déplacer une fenêtre dont la barre de titre est inaccessible

Raccourci touches rapides <Alt><F2>
-----------------------------------
Ouvre une fenêtre pour taper une commande.
A partir d'une session utilisateur, pour lancer une commande en root :
kdesu commande

Ce raccourci manque dans KDE, session root
Pour l'installer :
Menu : System / Configuration / KDE / Accessibility / Keyboard shortcuts / Modifier Keys
et cliquer sur Defaults

magic sysrq keys
----------------
Pour arrêter une machine plantée.
http://snafu.freedom.org/linux2.2/docs/sysrq.txt (EN)
NB : il faut que le noyau ait été compilé avec 'Magic SysRq key' à yes (CONFIG_MAGIC_SYSRQ).

<ALT><SysRQ><command key>

<command key> :
'r' - Turns off keyboard raw mode and sets it to XLATE.
'k' - Kills all programs on the current virtual console.
'b' - Will immediately reboot the system without syncing or unmounting
your disks.
'o' - Will shut your system off via APM (if configured and supported).
's' - Will attempt to sync all mounted filesystems.
'u' - Will attempt to remount all mounted filesystems read-only.
'p' - Will dump the current registers and flags to your console.
't' - Will dump a list of current tasks and their information to your
console.
'm' - Will dump current memory info to your console.
'0'-'9' - Sets the console log level, controlling which kernel messages
will be printed to your console. ('0', for example would make
it so that only emergency messages like PANICs or OOPSes would
make it to your console.)
'e' - Send a SIGTERM to all processes, except for init.
'i' - Send a SIGKILL to all processes, except for init.
'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system
will be non-functional after this.)


Utilisation de "info"
=====================
<q> quitter
<p> previous node
<n> next node

Menus :
se déplacer à l'aide des flèches sur une entrée de menu indiquée par ::
<entrée> sélectionne l'entrée de menu
<u> up (pour revenir en arrière)

ps
===

$ ps affiche tous les processus lancés par l'utilisateur dans le terminal
$ ps -x affiche tous les processus lancés par l'utilisateur
$ ps -aux affiche tous les processus lancés par tous les utilisateurs

pstree
------
affiche les processus sous forme d'arborescence


less
====

less fichier
ls -l /etc | less

Recherche : /chaine_cherchée
Les chaînes trouvées apparaissent en surbrillance
Pour passer à la suivante : n
précédente : Shift n
Pour quitter : q

grep, egrep
===========
http://www.linux-tutorial.info/modules.php?name=Tutorial&pageid=32

Rechercher une chaîne de caractères dans l'ensemble des fichiers d'un répertoire
---------------------------------------------------------------------------------
find répertoire -print | xargs grep chaîne_cherchée
=> -print | xargs permet de faire affichier en début de ligne le nom du fichier qui contient la châine cherchée

Rechercher simultannément plusieurs chaînes
--------------------------------------------
Exemple
egrep "while|read|for" /repertoire/*

Afficher le contenu de tous les fichiers d'un répertoire en évitant les lignes vides et les commentaires
----------------------------------------------------------
egrep -v "^$|^#" /repertoire/* | less
-v --invert-match
^ début de ligne
$ fin de ligne
^# ligne commençant par #

Afficher le nom des fichiers contenant une chaîne
grep -l chaîne_cherchée /repertoire/*


sed
===
sed s/"chaîne_cherchée"/"chaîne_de_remplacement"/g fichier_source > fichier_destination
s substituer
/ entre // la chaîne à chercher et la chaîne qui la remplace
g répéter la substitution


Quelques commandes intéressantes
================================
lspci
-----
lspci |less
lspci v |less
lspci vv |less

Affiche toutes les infos concernant le bus PCI et les périphériques qui y sont connectés.


tail
----
tail /var/log/syslog affiche les 10 dernières lignes
tail -n 30 /var/log/syslog affiche les 30 dernières lignes
tail -f /var/log/messages affiche en continu les 10 dernières lignes du fichier

lsof
----
En l'absence de toute option, lsof retourne la liste de tous les fichiers ouverts appartenant aux pocessus actifs
lsof -i tous les fichiers internet
lsof -i :25 tous ceux qui utilisent le port 25 (SMTP)
lsof -i |grep imap tous les processus IMAP actifs

find
----
http://www.linux-mag.com/2001-04/newbies_01.html
http://www.linux-mag.com/2002-09/power_01.html

Nb:
- AND implicite entre les opérateurs !
- la commande est récursive ; pour limiter la profondeur de recherche : -maxdepth n

find / -name fichier.txt localiser fichier.txt à partir de la racine
find . -name fichier.txt à partir du répertoire où l'on se trouve

find / -name fichier.txt -ls affiche à la manière de ls

find / -name fichier.txt 2>/dev/null supprime les messages d'erreur
find / -name '*fic*' trouve la chaîne fic dans les noms de fichiers ou répertoires
find / -iname '*fic*' ignore la casse
find / -size +10000k trouve les fichiers de plus de 10000k (k = kilobytes, c = bytes)
find /home -iname '*do*' -type d 2>/dev/null tous les répertoires contenant do dans le nom (ignore la casse)
-type d directory
f regular file
l symbolic file
-user uname
username ou ID
find / -amin -10 # find files accessed in last 10 minutes
find / -atime -2 # find files accessed in last 48 hours
find / -empty # find empty files and directories
find / -group cat # find files owned by group cat
find / -mmin -5 # find files modified in last 5 minutes
find / -mtime -1 # find files modified in last 24 hours
find / -nouser # find files owned by an invalid user
find / -user fred # find files owned by fred
find /usr/local/toto -user bibi # affiche tous les fichiers à partir du répertoire /usr/local/toto
qui ont pour utilisateur bibi


Expressions
(and est implicite !)
find / -user fred -or -user george tous les fichiers appartenant à fred ou george

Commandes
find ./tmp/ -name '*.tmp' -exec rm \{\} \; efface tous les fichiers *.tmp du répartoire ./tmp
attention, l'alias rm='rm -i' n'est pas utilisé !

chkconfig
---------
pour gérer les services (cf. man chkconfig)

# chkconfig --list |grep on Liste des services démarrés :
# chkconfig --add nom_service ajouter un service
# chkconfig --level

runlevel
--------
pour afficher le runlevel actuel et le précédent

Liens
=====
- symboliques (symlink)
ln -s nom_fichier_réel nom_fichier_lien

Prompt
======
cf. http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/
$ echo $PS1
[\u@\h \W]\$

Quelques séquences escape intéressantes :
\d the date in "Weekday Month Date" format
(e.g., "Tue May 26")
\h the hostname up to the first `.'
\H the hostname
\j the number of jobs currently managed by the
shell
\l the basename of the shell's terminal device
name
\t the current time in 24-hour HH:MM:SS format
\T the current time in 12-hour HH:MM:SS format

\@ the current time in 12-hour am/pm format
\u the username of the current user
\w the current working directory
\W the basename of the current working direc­
tory

Path
====
echo $PATH
Le path est créé modifié dans de nombreux fichiers d'initialisation :
etc/rc.sysinit, /etc/profile, .bash-profile

Pour le modifier :
PATH=$PATH:/nouveau/path
export PATH

Su et PATH
===========
$ su
permet de passer sous root, mais avec le path de l'utilisateur d'origine. Pour avoir le path de root :
$ su -
cf. le prompt :
[user@PC user]$
[root@PC user]#
[root@PC root]#

Tuer un processus ou un ensemble de processus
================
# kill -9 n° ou nom du processus
# killall -9 nom du processus
Tuer une session X plantée (KDE, Gnome ou autre, ça arrive !!!) : <Ctrl><Alt><Backspace>

Device or resource busy
=======================
ps ux
ps auf
lsof liste des fichiers ouverts
fuser pour identifer des processus qui utilisent des fichiers ou sockets
kill -9 $pid pour tuer le processus qui bloque (quand on le connaît)

Le plus pratique :
umount -fl /point/de/montage/recalcitrant

Scripts
=======
Première ligne :
#! /bin/bash

Tutorials :
- Guide avancé d'écriture des scripts Bash : http://abs.traduc.org/abs-3.1-fr/
- Linux Script Programming
http://www.comptechdoc.org/os/linux/programming/script/linux_pgscript.html

Exécuter un script sans avoir mis le droit x (et sans le faire précéder de ./) :
$ source nom_du_script

Sinon, mettre le droit x :
$ chmod u+x nom_du_script
puis l'exécuter :
$ ./nom_du_script

Utile
°°°°°

Caractères spéciaux
-------------------
cf. man echo :

\a BEL
\\ \
\n newline (saut ligne)
\b backspace (retour arrière)
\c sans saut de ligne
\f form feed
\r CR
\t tabulation
\v tab vertical


Dans la commande echo, -e permet l'interprétation des caractères précédés de \ :
$ echo -e "abc\ndef"
abc
def
$ echo -e "abc\bdef"
abdef
$ echo -e "abc\tdef"
abc def
$ echo -e "abc\fdef"
abc
def
$ echo -e "abcde\rfg"
fgcde

Entrer un caractère spécial dans une commande immédiate
Par exemple pour initialiser la variable tab avec un caractère de tabulation, taper:
tab=" puis <ctrl><v> puis la touche tabulation.puis ".
Vérifier que la variable tab contient bien le caractère spécial :

echo "$tab" | od -a
0000000 ht nl

echo "1${tab}2"
1 2

"Trace on/off" :
---------------
set -x
set +x

set -x envoie les messages vers stderr (fichier standard n° 2)
set +x les supprime
Pour récupérer les messages de stderr dans un fichier :
./monscript 2> /tmp/erreurs

Utilisation des codes ascii
---------------------------
man ascii
Exemples :

En octal :
$ echo $'\125'
U

En décimal
$ echo $'\125'
U


en hexadécimal :
$ echo $'\x55'
U

Afficher le code ascii de chaîne, fichiers, etc.
-----------------------------------------------
hexdump
od

IFS
---
http://www.livefirelabs.com/unix_tip_trick_shell_script/oct_2003/10132003.htm

"Internal Field Separator", variable du shell.
Par défaut contient 3 caractères : space, tab, et newline
Utilisé pour délimiter les mots dans les commandes telles que read et set

$ echo "$IFS" | od -a
0000000 sp ht nl nl
sp = space
ht = horizontal tab
nl = newline
le dernier nl est généré par la commande echo, en effet :
echo | od -a
0000000 nl

Pour que echo ne gténère pas de "newline"
$ echo -n "$IFS" | od -a
0000000 sp ht nl

Idem en octal :
$ echo -n "$IFS" | od -b
0000000 040 011 012

Modifier IFS
------------
OLDIFS=$IFS
IFS=$'\n'

Test du contenu :
echo "$IFS" | od -a
0000000 nl nl

Puis après utilisation remette IFS à sa valeur initiale :
IFS=$OLDIFS
unset OLDIFS

read
----
http://www.faqs.org/docs/bashman/bashref_55.html


Expressions régulières
----------------------
http://www.funix.org/fr/unix/expr-sed.htm

Boucles
-------
Exemples

for I in 1 2 3 ; do echo $I; done
ou bien :
for ((I=1;I<=3;I++)); do echo $I; done
1
2
3

Avec un fichier "films" contenant par exemple :
Le train sifflera trois fois
Merlin l'Enchanteur

$ j=0 ; for i in `cat films` ; do echo $i ; ((j++)) ; done ; echo Il y a $j mots
Le
train
sifflera
trois
fois
Merlin
l'Enchanteur
Il y a 7 mots

Pour rompre le déroulement d'une boucle for, while ou until :
* continue [n]
revient au début de la boucle
n = niveau de boucle
n = 1 revient début de la boucle
n = 2 revient au début de la boucle précédente
etc.
* break [n]
o sort d'une ou n boucles
o n = niveau de boucle comme ci-dessus
* exit n
o fin du script avec un code de sortie (n)

``, '' et ""
------------
`` => sortie de la commade incluse dans ``
Exemples : affectation de variable
TOTO=`ls *.txt`
echo $TOTO
0t.txt

''
=> prend l'expression plus ou moins littéralement !?
TOTO='ls *.txt'
echo $TOTO
ls 0t.txt


history
=======
Recherche rapide : ctrl r chaine_à_chercher

history affiche la liste des 500 dernières commandes
history | grep chaine_à_chercher affiche les commandes contenant "chaine_à_chercher"
!20 Pour rappeler la commande n°20
!p Pour rappeler la commande commençant par p (si plusieurs affiche toutes les commandes)
!tel " tel
!-2 rappelle l'avant dernière commande

La liste des commandes semble être mémorisée dans le fichier .bash_history, mais les commandes
$ cat .bash_history
et
$ history
ne donnent pas le même résultat (sans doute une écriture différée des dernières commandes dans .bash_history) !

Pour effacer (par mesure de sécurité) l'historique :
$ history -c
et en plus supprimer le fichier .bash_history

Disque plein
============
Pour chercher le coupable, taper par exemple (faire varier la taille) :
find / -mount -size +500000k -print (ici dans le répertoire /)
Puis supprimer les fichiers/répertoires inutiles par la commande :
rm -rf /dossier/à/supprimer/*
NB : r=récursif
f=force, efface sans avoir à valider chaque nom de fichier

Lister les fichiers par ordre de taille croissante :
du -s | sort -n

Lister les fichiers supprimés qui sont encore ouverts par des processus en cours :
ls -ld /proc/*/fd/* 2>&1 | fgrep '(deleted)'

Pour voir si c'est un problème de manque d'inodes :
df -i

Voir également les fichiers de log dans /var

Correspondance n°IP <-> adresse
===============================
nslookup NomMachine-ou-n°IP
host NomMachine-ou-n°IP
ipcalc -h n°IP

Si nslookup, host, ipcalc ne retourne rien : whois n°IP

Infos sur le système
====================
cat /proc/cpuinfo
cat /proc/meminfo (utilisation de la RAM
NB : Linux utilise toute la ram a sa disposition.
Il ne la libère que s'il en a besoin)
cat /proc/net/ip_conntrack table de suivi de connexions

Sous KDE, voir également
K > KDE > Configuration > Information


Infos sur la carte écran et les drivers, test de rapidité de la carte écran
======================================
glxinfo
glxgears
xdpyinfo

Police de caractères
====================
cf. http://www.telenovela-world.com/~spade/linux/howto/Francophones-HOWTO-3.html

ISO 8859-1 (latin 1) a tous les caractères Français sauf les « o e liés », l'euro et l'y tréma majuscule. Préférer ISO 8859-15 (latin 9).

Installation d'une distribution par le réseau
=============================================
La doc est dans la racine de la distribution, fichier INSTALL.txt

A noter avant de commencer l'installation !
-------------------------------------------
- la configuration du disque (pour éventuellement éviter d'effacer par la suite la partition home)
- L'adresse IP et le nom de la machine
L'adresse IP du DNS
L'adresse IP du gateway (passerelle)
- Le nom du driver (xxx.o) de la carte réseau (sur une machine qui fonctionne déjà, voir mcc > Hardware > Hardware > EthernetCard)
- L'adresse du serveur où récupérer la distribution
- Le chemin vers le répertoire où se trouve la distribution sur ce serveur, par exemple :
/pub/linux/distributions/mandrakelinux/official/10.0/i585

Puis récupérer network.img et pour MDK10.0 network-drivers.img, graver les images sur disquettes
Booter sur la disquette network.img

Installation de MDK 10.1
========================
En mode expert, le choix du clavier a disparu !§"@&&
Pour qu'il apparaisse, choisir autre chose que Language English (US) !!!

On peut sélectionner plusieurs langues : arrivé à "Choose language to use", cliquer sur advanced et cocher les langages à utiliser.

Configuration des imprmantes : passer en mode expert !!
la configuration en mode normal met le souk !
CUPS configuration : décocher :
- "Automatically find available printers on remote machines"
- "The printers on this machine are available to other computers"

"Broadcast" d'un message
======================
wall
Voir également : mesg, write, ytalk

Compilation / installation de programmes
========================================

Savoir / vérifier (conserver une trace de) ce qui est installé
--------------------------------------------------------------
Avant l'installation :
# find /* > avant
Après l'installation
# find /* > apres
Comparer :
diff avant apres > modifs

Librairies :
------------
Mise à jour de tables de liens symboliques : ldconfig (cf. man ldconfig)

Noyau
=====
http://lea-linux.org/kernel/
http://www-phase.c-strasbourg.fr/inform/linux/cours/linux-admin-10.html#ss10.7
http://www.freenix.fr/unix/linux/HOWTO/Kernel-HOWTO.html

Infos : uname -a

Mise à jour
-----------
# urpmi kernel

Compilation du noyau
--------------------
Si ce n'est déjà fait, installer (K > Configuration > Packaging >Install software) :
- les outils de compilation :
Mandrake choices > Development >
- les sources du noyau
Find in names : kernel
kernel-source-xxxxmdk

Les sources s'installent automatiquement dans usr/src/linux-x.y.z-xxxmdk
le lien usr/src/linux est créé (ou modifié s'il existe déjà) automatiquement : il pointe sur usr/src/linux-x.y.z-xxxmdk

# cd /usr/src/linux
# make xconfig

NB :
- sauvegarder la configuration dans un fichier.
Avec "Save and exit" la configuration est sauvegardée dans un fichier caché (!!!) .config, la configuration précédante est dans .config.old
Pour garder une trace d'une configuration, utiliser "Store configuration to file" qui permet de créer un fichier avec le nom de son choix, mais ce n'est pas cette config qui est utilisée aux étapes suivantes (c'est .config !)
- vérifier les messages d'erreur qui s'affichent dans la console texte et corriger si nécessaire.


Puis :
# make dep
# make clean
# make bzImage
# make modules

Pour garder une trace de la compilation dans le fichier compil-kernel.txt :
script compil-kernel.txt
make bzImage
Ctrl-D

Pour compiler en une seule commande :
make dep clean bzImage modules modules_install

Installation des modules :
Attention : si on ne change de version de noyau il est généralement conseillé de faire une sauvegarde des modules actuels:
mv /lib/modules/x.y.z-xxxmdk /lib/modules/x.y.z-xxxmdk-old
C'est probablement inutile car la commande make modules_install crée un répertoire différent de x.y.z-xxxmdk : x.y.z-xxxmdkcustom

# make modules_install

Installation du noyau
---------------------
# make install
Cette commande :
- copie bzImage (qui se trouve dans /usr/src/linux-xxxxmdk/arch/i386/boot)
dans /boot sous un nom différent du noyau actuel pour qu'il ne soit pas écrasé (i.e. vmlinuz-x.y.z-xxxmdkcustom).
- renomme vmlinuz en vmlinuz.old et crée un nouveau vmlinuz, lien qui pointe sur vmlinuz-x.y.z-xxxmdkcustom
- crée initrd-x.y.z-xxxmdkcustom.img et fait pointer initrg.img sur ce fichier
- crée config-x.y.z-xxxmdkcustom.img mais le lien config pointe toujours sur le fichier config-x.y.z-xxxmdk.img original
- crée un fichier System.map-x.y.z-xxxmdkcustom mais le lien System.map pointe toujours sur le fichier System.map-x.y.z-xxxmdk original
- Les fichiers message et message-graphic sont également mis à jour
- essaye de modifier Grub et le réinstalle, ce qui est parfaitement inutile !

Il vaut mieux modifier Grub à la main ; rajouter les lignes permettant de booter si nécessaire sur l'ancien noyau dans le fichier /boot/grub/menu/lst :

# Chargement du nouveau noyau : rien à modifier
title linux custom (nouveau noyau)
kernel (hd1,0)/boot/vmlinuz root=/dev/hdc1 quiet devfs=mount acpi=off vga=791
initrd (hd1,0)/boot/initrd.img

# Chargement de l'ancien noyau, indiquer le vmlinuz et le inird d'origine :
title linux original (ancien noyau)
kernel (hd1,0)/boot/vmlinuz-x.y.z-xxxmdk root=/dev/hdc1 quiet devfs=mount acpi=off vga=791
initrd (hd1,0)/boot/initrd-x.y.z-xxxmdk.img

Contrairement à Lilo, inutile de réinstaller grub.

Installation du noyau 2.6 en bref
=================================
=> Télécharger la dernière version (actuellement linux-2.6.10.tar.bz2) sur www.kernel.org : choisir la version full (F).
=> Décompresser :
$ tar -jxvf linux-2.6.10.tar.bz2

=> Lire la doc dans le dossier crée (linux-2.6.10/README)
=> Configurer le noyau à l'aide de l'une ou l'autre des commandes suivantes :
make menuconfig ou make O=/home/name/build/kernel menuconfig
make xconfig " xconfig
make gconfig " gconfig
Avant toute modification sauvegarder la config par défaut dans (par exemple) .config.original : elle peut éventuellement resservir NB lorsqu'on enregistre la config est mémorisée par défaut dans .config.
Pour le choix des drivers à intégrer dans la config, voir :
la doc de la carte mère
lspci -v |less
ou encore ce qu'indique une version de MDK déjà installée (mcc -> hardware)


Remarques :
- Dans Device Drivers / Character devices, cocher "Legacy (BSD) PTY support" (contrairement aux conseils affichés) sinon rien ne s'affiche dans AUCUNE console graphique (Kde, Gnome ...) !


=> Compiler, créer une image compressée du noyau (bzimage), installer les modules, etc. :
$ make ou make O=/home/name/build/kernel
# make modules_install
# make install ou ou sudo make O=/home/name/build/kernel modules_install install
=> Modifier Grub :
Editer /boot/grub/menu.lst

Rajouter par exemple
# Nouveau noyau
title linux (noyau 2.6.10)
kernel (hd0,0)/boot/vmlinuz-2.6.10 root=/dev/sda1 acpi=ht resume=/dev/sdb2 splash=silent vga=791
initrd (hd0,0)/boot/initrd-2.6.10.img

NB : rien à changer pour le noyau d'origine, si ce n'est éventuellement le titre
# MDK 10.1 noyau 2.6.8.1-12mdk d'origine
title linux (MDK 10.1 d'origine)
....
En effet les liens vmlinuz et initrd.img pointent toujours sur les fichiers du noyau d'origine.
Dans le cas où l'on essaye plusieurs noyaux, il est cependant prudent d'indiquer les fichiers réels : en effet vmlinuz et initrd.img peuvent alors ne pas pointer sur les bons fichiers ce qui peut résulter en un "kernel panic".

Perl
====
http://www.cpan.org/

Version et autres infos : perl -V

CPAN = Comprehensive Perl Archive Network

Vérifier la présence de modules
-------------------------------
perldoc Librairie::Module
ou bien

Info sur un module
# perl -MCPAN -e shell
cpan> i Librairie::Module

Installer un module
-------------------
# perl -MCPAN -e 'install Librairie::Module'

ou bien :
# perl -MCPAN -e shell
Puis au niveau du prompt cpan> :
cpan> install Librairie:Module
Pour quitter : <Ctrl> D

Nb : A la première utilisation de CPAN un questionnaire de configuration s'affiche. Y répondre.
Pour vérifier les paramètres entrés et faire des modifications le mieux est peut-être d'éditer directement le fichier de configuration /usr/lib/perl5/5.8.5/CPAN/Config.pm
Voir en particulier les lignes :
'urllist' => [q[ftp://ftp.u-strasbg.fr/CPAN]],
'keep_source_where' => q[/root/.cpan/sources],

Commandes avec mesure du temps
==============================
time
uptime
wait
w
top

Mesurer le temps d'exécution d'un programme (compilation par exemple) et émettre un bip à la fin
------------------------------------------------------------------------------------------------
time ma_commande ; echo -e \\a

Débloquer une console occupée par une commande
==============================================
&
<ctrl><z> arrête la commande en cours d'exécution
bg la fait passer en arrière plan (background)
fg la refait passer en premier plan (foreground)

Eviter de tuer une application à la fermeture de la console dans laquelle elle a été lancée
===========================================================================================
Exemple :
nohup konqueror &

Comparaison (ou synchronisation) de répertoires
===============================================
diff
diff3
kdiff3

Comparaison de 2 fichiers ou contenus de 2 répertoires
======================================================
diff fic1 fic2 | less
sdiff fic1 fic2 | less comparaison "side by side"
sdiff -s fic1 fic2 | less seules les différences sont affichées

Imprimantes
===========
mcc est merdique, utiliser _SOUS ROOT_ :
System/Configuration/KDE/Peripherals/Printers

En bas de page choisir dans la liste déroulante :
Print system currently used: CUPS (Common...)
Cliquer sur la première icône en haut à gauche (elle ouvre le fenêtre "Add printer wizard"
Pour une imprimante réseau (TCP) : Network printer (TCP)
Entrer l'addresse IP de la machine et le port (9100)
Choisir le modèle : pour une imprimante Postscript il y a une case à cocher en bas à gauche
sinon choisir le pilote d'impression
Dans la page <Test> <Settings...> ne pas oublier de modifier si nécessaire le paramétrage de l'imprimante, en particulier le format qui doit être A4.
Dans la page Users Access Settings, définir les utilisateurs autorisés

Réglage des marges de l'imprimante :
------------------------------------
Dans l'utilitaire "Configure - Printing manager"
- sélectionner l'imprimante,
- cliquer en bas à droite sur le bouton "Settings" et dans la page qui s'ouvre
- choisir l'onglet "Margin"
Pour les imprimante tektronix Phaser la marge minimum est d'environ 20 pixels.
Après avoir entré les valeurs de configuration, vérifier que le format de page et bien A4 et ne pas oublier de sauvegarder.

Disques et partitions : commandes utiles
========================================
Liste les disques et partitions des disques
# fdisk -l

Visualisation des partitions montées :
$ mount (sans paramètre)
ou bien :
$ less /etc/mstab

Créer, modifier les partitions
==============================
fdisk
cfdisk
Partimage
LVM (http://lea-linux.org/leapro/lvm.html)

Webmin
======
Après installation de webmin, ne pas oublier de le démarrer, sinon message :
"Could not connect to localhost (port 10000)
Démarrer par :
# service webmin start
Se connecter
https://localhost:10000
Shorewall : il ne semble pas utile de modifier les autorisations. En cas de problème mettre dans le fichier "rules":
ACCEPT loc fw tcp 10000


Copie/clonage de disques et de partitions
=========================================

Avec 2 disques identiques la commande dd permet d'obtenir une réplique exacte du disque source : sauf erreur la commande doit être :
# dd if=/dev/hda of=/dev/hdc

Dans le cas où l'on veut remplacer un petit disque par un plus gros, avec éventuellement un changement de la taille et/ou du nombre de partitions, dd ne convient pas.

Après plusieurs essais (rsync, mirrordir, tar, cp), une solution toute simple au problème de "clonage" de disques : en très bref les 3 étapes pour copier le disque d'origine (hd0) sur le nouveau disque :

1 - copie des partitions et répertoires de hd0 vers hd1 à l'aide de la commande :
cp -a
2 - modification du fichier de configuration /etc/fstab
3 - modification du boot (grub ou lilo)

Ce qui donne avec un peu plus de détails :

1 - copie des partitions et répertoires de hd0 vers hd1 à l'aide de la
commande cp -a
----------------------------------------------------------------------------------------------------
- Connecter le nouveau disque (hd1)
- Lancer Linux (MDK)
- Avec diskdrake ou au moyen des outils en ligne de commande (fdisk ou cfdisk,
mkfs) créer sur hd1 les partitions désirées et les formater
- Redémarrer l'ordinateur avec UN LINUX SUR DISQUETTE OU CD : j'utilise
tomsrtbt (http://www.toms.net/rb/), mais tout autre Linux sur disquette ou CD
doit convenir, par exemple Knoppix (http://knoppixfr.tuxfamily.org/), ou
encore le CD n°1 d'installation de MDK : il suffit qu'il contienne la
commande cp
- Avec la commande cp -a, copier les partitions et répertoires de hd0 vers
leur emplacement prévu sur hd1

Questions :
* Pourquoi utiliser un Linux sur disquette ou CD ?
C'est pour obtenir une copie de ce qui est réellement sur disque et non pas de
ce que Linux y met ou veut bien laisser copier lorsqu'il fonctionne. Par
exemple /proc contient une série de fichiers qui n'existent qu'en RAM ; il
n'y a rien sur le disque : /proc n'est qu'un point de montage pour l'accès à
une partie de la RAM.
* Pourquoi utiliser cp plutôt que mirrordir ou rsync plus pratiques ?
C'est parce que cp se trouve dans toutes distributions Linux ce qui n'est pas
le cas des autres commandes (pas de rsync, mirrordir ... dans tomsrtbt).

2 - modification du fichier de configuration /etc/fstab
---------------------------------------------------------------------------
- Rebooter sous MDK (ce n'est pas indispensable, mais l'interface est plus
conviviale que celle d'un Linux sur disquette)
- Mettre à jour le fichier /etc/fstab sur hd1

3 - modification du boot (grub ou lilo)
-----------------------------------------------------
- Mettre à jour le fichier de configuration du programme de boot sur hd0
(et/ou sur hd1 si par la suite on veut démarrer directement à partir de hd1)
Dans le cas de GRUB, le fichier à modifier est /boot/grub/menu.lst.
Dans le cas de LILO (à vérifier : non testé) modifier /etc/lilo.conf et exécuter la commande
"/sbin/lilo" avec les options -b bootdev et -C config-file pour indiquer
d'une part le disque sur lequel installer le boot et d'autre part le fichier
de configuration que l'on vient de modifier.

C'est tout. Au redémarrage le menu de grub ou de lilo apparaît et permet de
booter le système copié sur hd1.

Avec tous les détails, une réalisation concrète qui a parfaitement fonctionné :

J'ai un PC qui tourne sur MDK9.1. J'utilise l'environnement graphique KDE. Le
disque dur d'origine (hd0) a 3 partitions :
- hda1 /
- hda2 swap
- hda3 home
Il devient trop petit (3 Go). J'ai récupéré un disque de 20 Go. Après montage
dans le PC, ce 2° disque est vu comme hdc.
Je désire partitionner le 2° disque dur (hd1) en :
- hdc1 /
- hdc2 swap
- hdc3 usr
- hdc5 var
- hdc6 home

1 - Avec diskdrake, partitionner le nouveau disque (hd1) et formater les
partitions
2 - Redémarrer Linux à partir d'une disquette tomsrtbt. Se "loger" en "root"
avec le mot de passe par défaut "xxxx"
3 - Créer les points de montage pour pouvoir monter le disque source et le disque destination
# cd /mnt
# mkdir source
# mkdir dest
# cd /

4 - Monter les disques source (hda) et destination (hdc) et copier le
répertoire racine
# mount /dev/hda1 /mnt/source
# mount /dev/hdc1 /mnt/dest
# cp -a /mnt/source/* /mnt/dest
# umount /mnt/dest

5 - La même chose pour /usr
# mount /dev/hdc3 /mnt/dest
# cp -a /mnt/source/usr/* /mnt/dest
# umount /mnt/dest

6 - La même chose pour /var
# mount /dev/hdc5 /mnt/dest
# cp -a /mnt/source/var/* /mnt/dest
# umount /mnt/dest

7 - La même chose pour /home
# umount /mnt/source
# mount /dev/hda3 /mnt/source
# mount /dev/hdc6 /mnt/dest
# cp -a /mnt/source/* /mnt/dest
# umount /mnt/dest
# umount /mnt/source
# reboot
Sortir la disquette tomsrtbt

7 - Redémarrer sous MDK

8 - Supprimer de hdc1 non pas les répertoires /usr, /var et /home mais leur
CONTENU qui est maintenant sur les partitions respectivement hdc3, hdc5 et
hdc6
# mount /dev/hdc1 /mnt/dest
puis sous konqueror supprimer le CONTENU de /usr, /var et /home
(NB : la commande
# rm -rf nom_repertoire/*
efface bien le contenu du répertoire nom_repertoire, mais pas les fichiers
cachés !)

9 - Mettre à jour le fichier /etc/fstab du nouveau disque
Remplacer :
/dev/hda1 / ext3 defaults 1 1
/dev/hda2 swap swap defaults 0 0
/dev/hda3 /home ext3 defaults 1 2
par :
/dev/hdc1 / ext3 defaults 1 1
/dev/hdc2 swap swap defaults 0 0
/dev/hdc3 /usr ext3 defaults 1 2
/dev/hdc5 /var ext3 defaults 1 2
/dev/hdc6 /home ext3 defaults 1 2

10 - Mettre à jour le menu de boot de grub (/boot/grub/menu.lst)
pour faire apparaître l'option de boot du système Linux installé maintenant
hd1

NB : pour le moment hd0 est toujours en place. On peut donc utiliser son "boot
device" ; il suffit d'ouvrir le fichier menu.lst qui se trouve sur hda1 :
# mount /dev/hda1 /mnt/source
# kwrite /mnt/source/boot/grub/menu.lst

et de le modifier : j'ai rajouté, juste en dessous de "default 0" (pour que le
PC démarre par défaut sur MDK qui est sur hd1) :

title linux dd 20 Go
kernel (hd1,0)/boot/vmlinuz root=/dev/hdc1 quiet devfs=mount acpi=off vga=791
initrd (hd1,0)/boot/initrd.img

Noter vga=791 : ce n'est pas indispensable, mais ça permet de bien mieux voir
les messages (d'erreurs éventuelles) au démarrage du système. Pour la signification de ce n°, voir plus loin à "Amélioration de l'affichage des infos au démarrage de MDK"

11 - Rebooter, c'est fini et la nouvelle copie de MDK fonctionne comme l'original

NB : les commandes rsync et mirrordir (au contraire de cp) ont une option "exclude-from" pratique pour éviter de
copier les répertoires inutiles avec la commande cp (ça prend du temps et il
faut ensuite les effacer, voir points 4 et 8 ci-dessus). Les utiliser si elles sont dispoonibles sur la disquette ou le CD utilisé.

Icônes KDE
==========
Remplacer les infâmes icônes "conectiva crystal" (installées par défaut par MDK 9.1) par les bonnes vieilles icônes KDE classiques
---------------------------------------------------------------------------------------------
K> System > Configuration > KDE > LookNfeel > Icons
Si KDE classic apparaît dans la liste, sélectionner et cliquer sur <OK>
Si KDE classic est absent, K > Configuration > Packaging > Install Software
Faire une recherche sur le mot "classic"
Dans la liste qui apparaît, sélectionner et installer kdeartwork-kde-classicxxxx.mdk
Fermer et rouvrir le "KDE control module" ouvert au départ, pour faire appraître KDE classic dans la liste des thèmes disponibles
Sous root, il faut sans doute aussi redémarrer KDE pour que les icônes classiques soient affichées.

Outils pratiques ou indispensables
==================================

sleuthkit http://www.sleuthkit.org/sleuthkit/
---------------------------------------------------
pour récupérer des fichiers effacés, analyser une machine piratée, etc..


Sécurité
========

Gestion des ACL
---------------
http://www.linuxfrench.net/article.php3?id_article=1463

setfacl
getfacl
gtk-acl

Commandes simples
-----------------
w utilisateurs "logués", ce qu'il font, etc.
rwho -a ? à revoir, ne semble pas fonctionner
finger nom_utilisateur Infos concernant un utilisateur
last |less Liste des derniers utilisateurs "logués"

msec
----
http://www.mandrakesecure.net/en/docs/msec.php
man msec

draksec
-------
Outil de configuration en mode graphique
Accessible ausi via "Mandrake control center"

drakperm
--------
Pour connaître le niveau (msec) de sécurité actuel
Pour voir et fixer les permissions

Changer de niveau de sécurité :
-----------------------------
Sous root, pour passer au niveau 4, par exemple :
msec 4

Configuration : voir le fichier
-------------------------------
/var/lib/msec/security.conf



Outils divers
--------------
nmap
hping
tcpdump


Tests pour savoir si un serveur n'est pas compromis par un rootkit
------------------------------------------------------------------
cf. A la recherche de Rootkits
http://www.viginews.com/affichage_article.php?id=822

Installer chkrootkit
cd /usr/lib/chkrootkit/
./ifpromisc pour vérifier que l'interface n'est pas en mode "promiscuous"
./chkproc pour détecter un processus caché
cd /
chkrootkit vérification complète du système

Scan des ports d'une machine
°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Lister les ports ouverts

nmap
----
Exemple :
nmap localhost

Attention :
1 - Par défaut nmap ne scanne que les ports 1 à 10024
Pour scanner tous les ports possibles :
nmap -p 1-65535 localhost
nmap -sU -p 1-65535 localhost

2 - nmap localhost ne montre que les ports ouverts sur l'interface 127.0.0.1 (loopback) ce qui n'est pas représentatif des ports réellement accessibles

netstat
-------
netstat -vtlnp
-v verbose
-l (--listening) affiche uniquement les sockets en écoute
-n (--numeric) addresse du socket en numérique (sinon affichage du nom canonique)
-p (--program) affiche le PID et le nom du programme associé au socket

netstat -taup
-a (--all) affiche tous les sockets (en écoute ou non)
-t --tcp
-u --udp

lsof
----
lsof -i
liste les connexions internet ouvertes.
lsof -i :80
liste les connexions internet ouvertes sur le port 80

On peux ainsi vérifier quels ports sont ouverts et voir si certains ports n'ont pas derrière eux un programme suspect.

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd2 10738 apache 4u IPv6 22984 TCP *:http (LISTEN)
httpd2 10739 apache 3u IPv6 22981 TCP *:https (LISTEN)
Dans ce cas par exemple le programme httpd2 avec comme user apache ecoute en TCP sur le port 80 (http) et 443 (https), ce qui est normal

lsof -i permet de détecter des processus suspects éventuellement attachés à des ports connus (80 par exemple).
Pour les arrêter :
- soit chkconfig <COMMAND> off, ce qui évite que <COMMAND> soit relancé au démarrage
mcc -> System -> Services permet de faire la même chose.
- soit trouver la commande
ps aux |grep <COMMAND>
et tuer le processu correspondant kill -9 <PID>
mais il repartira au prochain démarrage.


Contrôle des ports à partir de l'extérieur
-------------------------------------------
Sites proposant des contrôles :

http://outils.sdv.fr/
http://grc.com/x/ne.dll?rh1dkyd2
http://scan.sygatetech.com/

Netfilter / Iptables
--------------------
http://www.netfilter.org/documentation/ (pointeurs sur documentation)
http://iptables-tutorial.frozentux.net/iptables-tutorial.html
http://logi.cc/linux/netfilter-log-format.php3 (netfilter log format)
http://christian.caleca.free.fr/netfilter.html
http://olivieraj.free.fr/fr/linux/information/firewall/fw-03.html

which iptables Pour voir si la commande iptables est présente
lsmod | grep iptable pour voir si le module est installé.
iptables -L -v affiche les règles de fitrages.
iptables -F pour supprimer toutes les règles (F = flush)

tail -f netfilter.log |grep 1.25 affiche ce qui concerne la machine x.x.1.25
dans les 10 dernières lignes des logs d'iptables
iptables -L FORWARD -vn |grep 80 ce qui concerne le port 80 (http, affichage numérique)
iptables -L FORWARD -v |grep 80 ce qui concerne le port 80 (http, affichage en clair)

Shorewall
---------
Tout est très bien expliqué sur le site http://www.shorewall.net/
NB : les actions prédéfinies sont dans /usr/share/shorewall/actions.std (et non pas /etc/shorewall/actions.std)

Installation :
- Récupérer la dernière version de shorewall sur le site http://www.shorewall.net/
- Installer :
# rpm -ivh shorewall....
Shorewall a besoin du package iproute. En cas de message d'erreur indiquant qu'iproute n'est pas trouvé, vérifier qu'il est bien installé :
# which ip
/sbin/ip
Puis relancer l'installation avec :
# rpm -ivh --nodeps shorewall....

Les 2 fichiers à renseigner obligatoirement pour que ça fonctionne :
/etc/shorewall/interfaces
/etc/shorewall/rules

Dans /etc/shorewall/interfaces mettre :
net eth0 detect norfc1918,routefilter,tcpflags,nosmurfs
dans le cas d'une connexion par modem, rajouter :
net ppp0 norfc1918,routefilter,tcpflags,nosmurfs

Dans /etc/shorewall/rules indiquer ce qui est autorisé et ce qui est interdit. Mettre au moins :
ACCEPT net fw icmp 8
ACCEPT fw net icmp
ACCEPT net fw tcp http

Rajouter éventuellement :
AllowSSH net fw
et pour un serveur :
AllowFTP net fw
AllowSMB net fw
AllowSMB fw net
AllowSMTP net fw
AllowIMAP net fw


Attention, pour que ça fonctionne, le fichier policy doit contenir :
fw net ACCEPT
net all DROP info
all all REJECT info

et non pas comme installé par défaut par les rpm MDK :
loc net ACCEPT
net all DROP info
all all REJECT info

(!!! explication ??)

A partir de Shorewall 2.2.0, le fichier /etc/shorewall/zones est vide : seule la zone fw est défine par défaut.
Définir les zones à utiliser, par exemple (cf. http://shorewall.net/shorewall_setup_guide.htm) :
net Net Internet
loc Local Local networks
dmz DMZ Demilitarized zone


Puis démarrer le firewall par :
# shorewall start
(ou redémarrer par shorewall restart)
Vérifier que les règles sont bien installées : iptables -L


Principal fichier à configurer pour autoriser différents services (http, ftp, imap, etc.) à fonctionner :
/etc/shorewall/rules
Si les services ne sont pas prédéfinis dans /usr/share/shorewall/actions.std autoriser les ports "à la main" comme indiqué dans la doc contenue dans le fichier /etc/shorewall/rules

Commandes intéressantes :
shorewall stop
shorewall clear
shorewall start
shorewall restart

Pour voir l'état des règles de filtrage :
iptables -L -v

Anti-virus
----------
Clamav/Klamav

Cryptographie, disques virtuels cryptés
=======================================
http://openpgp.vie-privee.org/linux.html

Mountloop et son interface drakloop
-----------------------------------
http://www.aerospacesoftware.com/cryptoloop-howto.html
/usr/share/doc/mountloop-0.15.1/README

La configuration de drakloop est stockée dans ~/.mountlooprc : on peut y modifier (si nécessaire) le nom du répertoire crypté.
NB : par contre le nom du fichier crypté "encfile" est codé en dur
dans drakloop (voir le code source perl) : si on modifie ce nom, drakloop ne fonctionne plus. Idem pour les possibilités de cryptage : seul aes est proposé. Il est tout a fait possible de nommer autrement le fichier crypté et d'utiliser d'autres cryptages, cf./usr/share/doc/mountloop-0.15.1/README
=> dans ce cas, utiliser mountloop en ligne de commande

Montage à la main
-----------------
$ mountloop <enc> <file> <dir>
par exemple :
$ mountloop aes256 Dossier_crypte/Fichier_crypte Dossier_crypte

Menu contextuel pour monter ou démonter un fichier crypté
--------------------------------------------------------------------
http://developer.kde.org/documentation/tutorials/dot/servicemenus.html
http://www.kde-france.org/article.php3?id_article=82
http://www.coagul.org/article.php3?id_article=91
www.oreilly.com/catalog/linuxdeskhks/chapter/hack40.pdf
http://mandrakeusers.org/lofiversion/index.php/t18068.html

Ajouter dans
~/.kde/share/apps/konqueror/servicemenus (à l'usage de l'utilisateur courant)
ou dans
/usr/share/apps/konqueror/servicemenus (pour tous les utilisateurs)
les fichiers .desktop suivants :

- Pour monter le fichier crypté
````````````````````````````````
OpenCryptFile.desktop

[Desktop Entry]
Actions=OpenCryptFile
ServiceTypes=all/allfiles

[Desktop Action OpenCryptFile]
Name=Open encrypted file
Exec=/usr/bin/kdialog --password "Password for this crypted file?" | /usr/bin/mountloop aes256 %f %d
Icon=/usr/share/pixmaps/password.png

- Pour démonter le système de fichier crypté (ou tout autre système monté)
`````````````````````````````````````````````````````````````````````````
UmountFS.desktop

[Desktop Entry]
Actions=UmountFS
ServiceTypes=inode/directory

[Desktop Action UmountFS]
Name=Unmount File System
Exec=kdesu "/bin/umount -fl %f"
Icon=encrypted

Pour activer ces actions, clic droit sur le fichier ou le dossier, puis sous-menu "Actions"

Autre possibilité : associer le fichier encfile au programme drakloop
---------------------------------------------------------------------
(K> System > Configuration > KDE > Components > File Associations
encfile -> /usr/bin/drakloop)
=> un double clic sur le fichier lance drakloop
NB : le fichier .desktop créé se trouve dans ~/.kde/share/mimelnk/application

Serveur de log syslog-ng
========================
Voir doc et FAQ très bien faites sur :
http://www.balabit.com/products/syslog_ng/

Installation
------------
Installer à partir des rpm (actuellement syslog-ng-1.4.17-5mdk) ou récupérer les sources sur http://www.balabit.com/products/syslog_ng/upgrades.bbq, actuellement :
- syslog-ng-1.6.6.tar.gz
- libol-0.3.15+20050407.tar.gz
Décompresser :
$ tar zxvf nom_fichier
Compiler d'abord liblo puis syslog-ng :
# cd nom_répertoire
# ./configure
# make
# make install

Fichiers syslog-ng installés :
/usr/local/sbin/syslog-ng
/usr/local/man/man5/syslog-ng.conf.5
/usr/local/man/man8/syslog-ng.8

Créer le répertoire /etc/syslog-ng
Y copier le fichier de configuration autodocumenté que l'on trouve dans les sources
/contrib/syslog-ng.conf.doc
et le renommer en syslog-ng.conf

Copier le script de démarrage init.d.RedHat-7.3 que l'on trouve dans les sources, répertoire contrib/, et le renommer en syslog-ng et lui donner les droits rwxr--r-- :
# chmod 744 syslog-ng


Commandes de base
-----------------
syslog-ng --help
syslog-ng -V -> version



Classer les fichiers de log
---------------------------
http://linuxfr.org/tips/index,1.html
Pour classer les fichiers de log dans des répertoires type AAAA/MM/JJ
ou encore HOSTS/AAAA/MM/JJ (si on fait un serveur de log), configurer syslog-ng.log :
utiliser les variables $HOSTS $YEAR ...
Exemple pour auth.log :
destination authlog {file("/var/log/HOSTS/$HOST/$YEAR/$MONTH/$DAY/auth.log");};


Lancement automatique de processus
==================================
at, cron, kcron, drakcronat

http://www.ml.refer.org/LancementAuto.htm
http://www.faqts.com/knowledge_base/view.phtml/aid/1005/fid/436

at
--
Exemple :

# at 12:15
warning: commands will be executed using (in order) a) $SHELL b) utilisateur shell c) /bin/sh
at> echo coucou
at> df
at> <EOT>
job 1 at 2003-09-04 12:15

NB : EOT obtenu en tapant <ctrl><d>
A 12 H 15 un message est envoyé à l'utilisateur avec le résultat des commandes echo et df

atq : liste des jobs en attente

cron
----
Voir le man, pour une fois presque clair (il y a des exemples) !
http://lea-linux.org/admin/automate.php3#cron

Les tâches à exécuter sont stockées dans des fichiers texte ayant le nom de l'utilisateur (root, adm, tartempion ...) dans le répertoire :
/var/spool/cron/
A voir également : les répertoires /etc/cron.....

---- Pour programmer une tâche à répéter plusieurs fois :
Exemple : mise à l'heure de la machine à 3 H du matin tous les jours
Ouvrir le fichier avec la commande crontab -e (ça ouvre le fichier de l'utilisateur logé). Y inscrire :
0 3 * * * /bin/nice -n 19 /usr/sbin/ntpdate -u ntp1.tuxfamily.net
Fermer : un message de mise à jour de la table s'affiche

Les champs de gauche à droite :
minute (0-59) / heure (0-23) / jour (1-31) / mois (1-12 ou les 3 premières lettres du mois) / jour de la semaine (0-7) ou les 3 premières lettres du jour.

Listes permises, par exemple :
1,2,3,4,5 pour lundi à vendredi (dans le champ jour)
1-5 idem
0-4,20-23 dans le champ heure : toutes les heures de 0 à 4 et de 20 à 23 heures

NB :
- Pour le jour de la semaine 0=7=sun
- Bien indiquer le "path" des commandes, sinon elles ne sont pas trouvées.

Les choses qu'il semble utile de mettre dans la crontab :
- mise à jour de l'heure
- mise à jour de la base slocate (updatedb)
- mise à jour des sources urpmi (urpmi.update --all, urpmi.update -a sous MDK10)
- mise à jour automatique du système (urpmi --auto-select)

----- Pour changer l'éditeur utilisé par défaut par crontab changer la variable d'environnement
EDITOR (ou VISUAL) :
$ export EDITOR=nom_de_l'éditeur


Gestion des tâches
==================
ps

Lister les "process"
===================
top
Sous KDE : <ctrl><esc>

Impression
==========
Liste des impressions en cours :
-------------------------------
$ lpq

Supprimer une impression :
------------------------
$ lprm n°_de_job

Lancer une impression à partir de la ligne de commande :
--------------------------------------------------------
$ lpr nom_du_fichier

Association (KDE)
=================
K> System > Configuration > KDE > Components > File Associations
Les associations sont mémorisées dans :~/.kde/share/config/profilerc

Utilisation de la memoire (cache, swap)
=======================================
free

Permissions
===========

Droits
------

--- 0 = No rights at all
--x 1 = Execute only
r-- 4 = Read only
r-x 5 = Read and Execute
rw- 6 = Read and Write
rwx 7 = Read, Write, and Execute.

Exemples :
``````````
# chmod 644 file.txt
ou bien :
# chmod u+rw-x,g+r-wx,o+r-wx file.txt
# ls -l file.txt
-rw-r--r-- 1 root root 33 Jul 11 17:10 file.txt

Ne changer les droits que sur les répertoires ou les fichiers, exemples :
`````````````````````````````````````````````````````````````````````````
find -type d -print0 |xargs -0 chmod 755
find -type f -print0 |xargs -0 chmod 644

Utilisateur propriétaire du fichier
-----------
chown [-R] nom_du_propriétaire:nom_du_groupe nom_fichiers
-R = récursif

chown root toto.txt
chown root:root toto.txt iti.sh
find /usr/local/toto -user bibi -exec chown bobo {} \;
trouve à partir du répertoire /usr/local/toto tous les fichiers ayant pour utilisateur bibi
pour le remplacer par l'utilisateur bobo.

Disques durs
============
Bios :
Cas d'un disque dur IDE seul sur sa nappe :
s'il est reconnu avec le cavalier sur CS, mais pas sur MA, essayer sans cavalier (cas des disques WD)

Test performances
-----------------
hdparm -t /dev/drive
bonnie

Compression / décompression
===========================
http://astuce.linux.free.fr/Archivage/Comment_créer_et_décompresser_une_archive_avec_tar.html

Compresser un fichier :
-----------------------
gzip NomFichier.ext -> NomFichier.ext.gz
Autre possibilité : bzip2

Décompresser
------------
gunzip filename.ext.gz.
NB : le fichier compressé est supprimé : il est remplacé par le décompressé

Compresser plusieurs fichiers en une seule archive
--------------------------------------------------
Archiver 2 fichiers dans un seul
tar -cvf NomArchive.tar NomFichier1.ext NomFichier2.ext

Désarchiver ces fichiers
tar -xvf NomArchive.tar

Pour en même temps archiver et compresser
tar -cvfz NomArchive.tgz NomFichier1.ext NomFichier2.ext
Options :
c = créer l'archive
v = verbose
f = dans un fichier archive
z = compresser

Voir le contenu
tar -tfz NomArchive.tgz
Option :
t "type" le contenu de l'archive

Décompresser :
tar -xvfz NomArchive.tgz
x extrait les fichiers.

Fichiers .tar.Z
gunzip toto.tar.Z -> crée toto.tar
tar xvf toto.tar -> décompresse toto.tar

Fichiers .tar.gz :
tar -zxvf toto.tar.gz
(ou bien en 2 temps :
gunzip toto.tar.gz
tar -xvf toto.tar)

Fichiers bz2
------------
En 2 temps :
bunzip2 NomFichier.bz2 -> NomFichier.tar
tar-xvf NomFichier.tar
En 1 temps :
tar -jxvf NomFichier.bz2

Fichier zip
-----------
Décompresser :
unzip fichier.zip


Copier, archiver, mettre à jour un disque, une partition, un répertoire
=======================================================================

Avec cp
-------
cp -a source destination

Avec dd
-------
Copie de disque à disque (disques identiques, semble poser des problèmes si disques différents)
dd if=/dev/hda of=/dev/hdc

NB : la taille de block par défaut est très faible, d'où des temps de copie élevés : entrer une taille de
bloc élevée, par exemple :
dd if=/dev/hda of=/dev/hdc bs=256k

Avec rsync
----------
cf.http://lea-linux.org/trucs/?aff_item=202

Créer un fichier d'exclusion : contient la liste des fichiers ou répertoires que l'on ne veut pas r (copier) Exemple

dir_exclus.lst :
...................
/proc
/tmp
/mnt
/home
...................

NB : il est important d'exclure /mnt surtout si la destination est montée sous /mnt (/mnt/copie dans l'exemple suivant)

# rsync -ravH --exclude-from=dir_exclus.lst / /mnt/copie

Avec mirrordir
--------------
# mirrordir --exclude-from /dir_exclus.lst / /mnt/copie

Programmation de tâches (cron)
==============================
kcron
/etc/crontab

MBR écrasé -> partitions disque perdues : comment les récupérer
===============================================================
Le mbr contient plusieurs informations essentielles pour le fontionnement de l'ordinateur :
Extrait du "Linux System Administrator's Guide"
The MBR, boot sectors and partition table

The information about how a hard disk has been partitioned is stored in its first sector (that is, the first sector of the first track on the first disk surface). The first sector is the master boot record (MBR) of the disk; this is the sector that the BIOS reads in and starts when the machine is first booted. The master boot record contains a small program that reads the partition table, checks which partition is active (that is, marked bootable), and reads the first sector of that partition, the partition's boot sector (the MBR is also a boot sector, but it has a special status and therefore a special name). This boot sector contains another small program that reads the first part of the operating system stored on that partition (assuming it is bootable), and then starts it.

Outils de récupération de la table de partition :
-----------------------------------------------
gpart http://www.stud.uni-hannover.de/user/76201/gpart/
fixdisktable http://bmrc.berk
_________________
Eddyhalftime.com votre magazine de la mi-temps !


Dernière édition par r23o le 19 Mai 2005 15:11; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
r23o
Administrateur
Administrateur




Inscrit le: 04 Mai 2003
Messages: 5219
Localisation: lille

MessagePosté le: 19 Mai 2005 15:05    Sujet du message: Répondre en citant

Suite 2/3 ;)


Outils de récupération de la table de partition :
-----------------------------------------------
gpart http://www.stud.uni-hannover.de/user/76201/gpart/
fixdisktable http://bmrc.berkeley.edu/people/chaffee/fat32.html
testdisk http://www.cgsecurity.org/
Testdisk semble le meilleur


Liens intéressants :
http://www.ntfs.com/mbr-damaged.htm
http://plug.linux.org.au/~steve/mbr.html#mbr

MBR écrasé : affectation lettre <-> partition perdue sous W2000
================================================================
Dans les OS Microsoft les partitions sont désignées par une lettre.
Sous Windows 2000 (et NT4 ?) l'affectation lettre <-> partition dépend d'une information stockée dans le mbr.
Si l'on écrase le mbr (sous DOS par fdisk /mbr, par exemple) cette information est perdue, d'où parfois impossibilité d'accéder à une session.
Pour y rémédier, consulter les articles suivants de la knowledge base Microsoft

Unable to Log on if the Boot Partition Drive Letter Has Changed (article 249321)
HOW TO: Change the System/Boot Drive Letter in Windows (article 223188)

Telnet
======
Caractère d'échappement :
Escape character is '^]'
soit sur le clavier :
Ctrl + AltGr + "]"
"]" = touche °)] entre le "0" et le "=" en haut du clavier.


SSH
===
http://www-106.ibm.com/developerworks/library/l-keyc.html
http://www-106.ibm.com/developerworks/linux/library/l-keyc2/
http://troumad.free.fr/Linux/Linux.sxw

Démarrer / redémarrer ...
---------------------
# service sshd status
start
restart
stop

Fichiers de configuration
-------------------------
/etc/ssh
~/.ssh

Vérifier si SSH tourne sur le PC distant et quelle est la version du programme:
------------------------------------------------------------------------------
telnet nom_ou_N°IP_PC_distant 22

Se connecter au PC distant :
----------------------------
ssh nom_ou_N°IP_PC_distant
ou bien pour avec un autre utilisateur que celui qui est utilisé
ssh -l utilisateur nom_ou_N°IP_PC_distant
ssh utilisateur@nom_ou_N°IP_PC_distant

ConnectionTimeout :
En cas d'erreur de connexion le timeout est particulièrement long (de l'ordre de 2 minutes ?)
Pour le raccourcir par exemple à 10 secondes :
ssh -o ConnectTimeout=10 user@machine
(ConnectTimeout et non pas ConnectionTimeout comme indiqué dans la doc !)


Connection directe sous konqueror
---------------------------------
fish://nom_ou_N°IP_PC_distant
fish://utilisateur@nom_ou_N°IP_PC_distant
fish://utilisateur@nom_ou_N°IP_PC_distant/repertoire/à/consulter

Attention : avant d'utiliser fish se connecter au moins une fois avec user@ssh à la machine distante, sinon la connection par fish est refusée.

Monter un répertoire Unix distant : shfs (Secure SHell FileSystem Linux kernel module)
-----------------------------------------------------------------------
http://shfs.sourceforge.net/
Installation et mode d'emploi : http://www.labo-linux.org/index.php?page=lumieres&id=278

shfsmount utilisateur@machine_distante /point/de/montage
ou mount -t shfs utilisateur@machine_distante /point/de/montage

Attention, contrairement à fish, pour indiquer un répertoire, rajouter ":" après le nom de machine :
shfsmount utilisateur@machine_distante:/repertoire/à/monter /point/de/montage

shfsmount -o rmode=755 user@PC_distant:/répertoire/distant /point/de/montage

cf man shfsmount
-o rmode=755 pour permettre à un utilisateur autre que root d'accéder au point de montage
:/répertoire/distant facultatif, si absent c'est le répertoire / qui est monté.

Attention : cas d'une machine W$+Cygwin protégée par firewall (kerio)
après un shfsmount -o rmode=755 user@PC_distant:/répertoire/distant /point/de/montage
si la commande ls /point/de/montage bloque, c'est très probablement kerio qui bloque l'exécution de la commande cygwin ls : le vérifier

Copie de fichiers
-----------------
Copier un fichier local sur un pc distant:
$ scp /rep_source/fichier utilisateur@pc_distant:~/rep_destination
$ scp /rep_source/fichier utilisateur@pc_distant:~/rep_destination/ (même résultat)
$ scp /rep_source/fichier utilisateur@pc_distant:~/rep_destination/autre_nom_de_fichier

L'inverse : copier un fichier résidant sur un pc distant dans un répertoire local :
$ scp utilisateur@pc_distant:/répertoire_distant/fichier /chemin/vers/rép_local/nom_fichier

Pour les copies récursives, option -r :
$ scp -r utilisateur@pc_distant:/répertoire distant


Pour éviter d'avoir à taper à chaque connexion le login/mot de passe :
---------------------------------------------------------------------
1 - générer une paire de clés privée/publique (= clé/serrure)
$ ssh-keygen -t rsa
Répondre à la question "passphrase:" en entrant la phrase de son choix

Les clés générées sont dans ~/.ssh :
id_rsa clé privée
id_rsa.pub clé publique

2 - Copier la clé publique dans le fichier ~/.ssh/authorized_keys de la machine sur laquelle on veut se connecter :
$ scp ~/.ssh/id_rsa.pub utilisateur@nom_ou_N°IP_PC_distant:~/.ssh/authorized_keys
ou bien ajouter cette clé publique à un fichier ~/.ssh/authorized_keys existant
$ cat ~/.ssh/id_rsa.pub | ssh utilisateur@nom_ou_N°IP_PC_distant "cat >> ~/.ssh/authorized_keys"


3 - Utiliser ssh-agent

Utilisation de ssh-agent
========================
ssh-agent est un daemon dont le seul but est de garder en mémoire (de façon sécurisée) la "passphrase" de façon à ce qu'il ne soit pas nécessaire de la taper à chaque utilisation de ssh.
La commande suivante crée la variable SSH_AUTH_SOCK qui contient le chemin d'un socket que ssh, scp (et autres commandes) vont utiliser pour dialoguer avec ssh-agent :
$ eval `ssh-agent`

Communiquer la clé privée et la phrase de passe à ssh-agent au moyen de ssh-add :
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/jcg/.ssh/id_rsa:

La clé privée est ainsi décryptée et stockée dans le cache de ssh-agent, prête à être utilisée
On peut maintenant utiliser ssh et scp sans avoir à entrer le mot de passe.

keychain
=========
Récupérer la dernière version sur http://www.gentoo.org/proj/en/keychain.xml

Permet d'utiliser un seul processus ssh-agent par systeme, et non par session (login). Particulièrement intéressant si on veut utiliser ssh et scp dans un cron.
Keychain supprime les processus ssh-agent éventuellement en surnombre. Il mémorise les variables SSH_AUTH_SOCK et SSH_AGENT_PID dans ~/.keychain/nom_machine.sh

A partir d'une autre session, récupération de ces variables :
source ~/.keychain/nom_machine-sh

Pour automatiser, copier les lignes suivantes dans ~/.bash_profile
# Keychain lance ssh-agent et stocke les variables SSH_AUTH_SOCK et SSH_AGENT_PID
# dans ~/.keychain/nom_machine-sh pour pouvoir les récupérer dans d'autres sessions
# cf. http://www-106.ibm.com/developerworks/linux/library/l-keyc2/

/usr/bin/keychain ~/.ssh/id_rsa
source ~/.keychain/nom_machine-sh


*****
X
*****



Configuration X (écran/carte graphique)
---------------------------------------
XFdrake
fonctionne aussi bien en mode graphique qu'en mode texte (pas besoin qque X soit lancé)

Login graphique
===============
kdm
mdkkdm

Fichiers de configuration
-------------------------
cf répertoires /etc/X11/xdm/

Sessions X multiples
====================
Pour obtenir plusieurs sessions X :

Sous la session X de départ (display 0)
<Alt Ctrl Fn>
Fn est une des touches de fonction F1 à F6 pour accéder à la console texte à utiliser

Taper le login de l'utilisateur désiré
Taper le mot de passe
Taper :
startx -- :n
n étant le n° de console graphique virtuelle (0 est le n° de la première console graphhique crée par le système)
(NB : attention, espace indispensable entre -- et :n)
Pour passer d'une console à une autre :
<Ctrl Alt F7> pour la première console graphique
<Ctrl Alt F8> pour la 2°, etc. (F7 à F11 utilisables)
<Ctrl Alt F12> messages système

cf. http://www.mandrakeuser.org/docs/xwin/xnet.html

Démarrer une interface graphique particulière :
startx /etc/X11/xdm/Xsession KDE -- :n
startx /etc/X11/xdm/Xsession Gnome -- :n
startx /etc/X11/xdm/Xsession IceWM -- :n
startx /etc/X11/xdm/Xsession WindowMaker -- :n
startx /etc/X11/xdm/Xsession Enlightenment -- :n
startx /etc/X11/xdm/Xsession BlackBox -- :n
startx /etc/X11/xdm/Xsession Sawfish -- :n
startx /etc/X11/xdm/Xsession XFce -- :n

Supprimer le démarrage automatique en mode graphique
----------------------------------------------------
Editer /etc/X11/xdm/Xservers
Mettre en commentaire (#) la ligne :
:0 local /bin/nice -n -10 /usr/X11R6/bin/X -deferglyphs 16

Mode texte/mode graphique
-------------------------
# init 3 => texte
# init 5 => graphique


Au boot avec Grub :
"e" pour éditer la ligne de commande
Pour booter en init 3, il suffit donc d'ajouter un "3" à la liste des options sur la ligne qui appelle le noyau (kernel=..... 3 ), de valider les modifs (Entrée) et d'appuyer sur "b" pour poursuivre le boot.
Cette manip n'affecte que le boot présent et donc au prochain passage par grub, tout se passe par défaut (init 5)


Récupérer les messages d'erreur
-------------------------------
Exemple :
startx -- :3 > erreur 2>&1
Le fichier "erreur" contient les tous les messages provenant du démarrage du serveur X

XF86Config
==========
Localisation : /etc/X11/XF86Config-4

Souris
------
Exemples :
Section "InputDevice"
Identifier "IntelliMouse"
Driver "mouse"
Option "Protocol" "ExplorerPS/2"
Option "Device" "/dev/psaux"
Option "ZAxisMapping" "6 7"
EndSection

Section "InputDevice"
Identifier "LogitechSerial"
Driver "mouse"
Option "Protocol" "MouseMan"
Option "Device" "/dev/ttyS0"
EndSection

Pour que la souris série Logitech fonctionne, il faut renseigner la section :
Section "ServerLayout"
Identifier "layout1"
InputDevice "LogitechSerial" "CorePointer"
Screen "screen1"
EndSection

L'option "CorePointer" indique quelle souris est le périphérique de pointage principal
Pour indiquer plus d'un pointeur utiliser l'option "SendCoreEvents".

Quel répertoire ?
=================
pwd

Gestion des disques
===================
fdisk
cfdisk

Exemple :
fdisk /dev/hda

Monter une partition, une disquette
===================================
mount -t ext3 /dev/hdc2 /mnt/disk
mount -t auto /dev/hdc2 /mnt/disk
mount -t ext2 /dev/hd0 /mnt/floppy

Démonter une partition récalcitrante (à voir)
====================================
$ fuser -k -TERM -v -m point_de_montage
ou, plus violent (SIGKILL) :
$ fuser -k -v -m point_de_montage

Trouver ce qui empêche de démonter la disquette (par exemple)
#umount /dev/fd0
umount: /mnt/floppy: périphérique occupé

# fuser -m /dev/fd0
/dev/fd0: 1692

# ps aux | grep 1692
root 1692 fam

# kill -9 1692

# umount /dev/fd0

# fam



NFS
===
- Indiquer dans :
/etc/hosts.allow
les machines autorisées à se connecter (si vide, pas de connexion possible !). Voir également /etc/hosts.deny
- Indiquer dans :
/etc/exports
les répertoires partagés
- Relancer nfs
# service nfs restart
- Monter le répertoire partagé :
# mount NomMachine:RépertoirePartagé /mnt/disk

Mémoriser la configuration de Konqueror
=======================================
Menu : Window/Save View Profile "File Management"


Changer de console
==================
Sortir de l'environnement graphique
Alt Ctrl F9
Console 1
Alt F1
Revenir à l'environnement graphique
Alt Ctrl F7

Variables
=========
Voir une liste de variables d'environnement (shell, etc)
-------------------------------------------------------
env

Voir une variable particulière
------------------------------
exemple :
echo $SHELL

Supprimer une variable
----------------------
unset toto (et non pas $toto !)

Substitution de variables
°°°°°°°°°°°°°°°°°°°°°°°°°
http://www.linuxplusvalue.be/mylpv.php?id=187

Affectation
-----------
$ TUTU="Le soleil brille"
$ echo $TUTU
Le soleil brille

Valeur par défaut à utiliser en cas de variable inexistante
-----------------------------------------------------------
NB : TITI est une variable inexistante
$echo TITI

$ echo ${TITI:-il pleut}
il pleut
$ echo ${TUTU:-il pleut}
Le soleil brille
$echo TITI

ce qui montre que la valeur de TITI est temporaire

Affectation d'une valeur en cas de variable inexistante
-------------------------------------------------------
$ echo ${TITI:=coucou}
coucou
$ echo TITI
coucou


Message à renvoyer en cas de variable inexistante
-------------------------------------------------
$ unset TITI
$ echo ${TUTU:?Cette variable est vide}
Le soleil brille
$ echo ${TITI:?Cette variable est vide}
bash: TITI: Cette variable est vide


Message à renvoyer si la variable existe
----------------------------------------
$ echo ${TUTU:+Cette variable est initialisée}
Cette variable est initialisée
$ echo ${TITI:+Cette variable est initialisée}

Dans un bash utiliser plutôt un code, par exemple 0 pour TRUE
$ echo ${TUTU:+0}
0

Extraction d'une sous chaîne
----------------------------
${variable:position:longueur}

$ echo $TUTU
Le soleil brille
$ echo ${TUTU:3:6}
soleil

La numérotation commence à 0
La longueur de la chaîne soleil est 6 caractères

Nombre de caractères dans la variable :
-------------------------------------
$ echo ${#TUTU}
16
$ LEN=${#TUTU}
$ echo $LEN
16

Extractions
-----------
$echo ${TUTU#Le}
soleil brille
$ echo ${TUTU%brille}
Le soleil

Voir égalemenent la signification de ## par rapport à # et ## par rapport à #

Remplacements
-------------
$ echo ${TUTU/soleil/miroir}
Le miroir brille

Remplacements multiples
-----------------------
$ TUTU="Le chien hurle. Le chien s'endort"
$ echo ${TUTU/chien/loup}
Le loup hurle. Le chien s'endort
$ echo ${TUTU//chien/loup}
Le loup hurle. Le loup s'endort

Noter que la valeur de TUTU n'a pas changé
$ echo $TUTU
Le chien hurle. Le chien s'endort

Suppression(s)
--------------
TUTU="dix sept, dix huit, dix neuf"
$ echo ${TUTU//dix}
sept, huit, neuf

Substitution par le résultat d'une commande
-------------------------------------------
`commande`
${commande}


Voir/ supprimer des processus
=============================
ps

Vignettes
=========
Les images sont dans /usr/share/mdk/faces/

Grub
====
http://www.gnu.org/software/grub/
http://doc.polynum.org/howto/grub/grub-howto-1.html (en français)

I - Créer une disquette grub
////////////////////////////

1 - Formater une disquette au format ext2fs :
# kfloppy
ou bien :
# mke2fs /dev/fd0

2 - Monter la disquette

3 - Créer un répertoire boot. Dans ce répertoire créer un répertoire grub,
Dans /boot/grub, copier les fichiers
menu.lst
stage1
stage2

3 - Démonter la disquette

4 - Rendre la disquette bootable
La méthode décrite dans le "GRUB manual", §3.1 "Creating a GRUB boot floppy"
ne fonctionne pas.
Utiliser plutôt l'une ou l'autre des méthodes suivantes :

a) Methode simple (interactive)
# grub
grub> root (fd0)
grub> setup (fd0)
grub> quit


b) Méthode décrite dans la FAQ "4. How to create a GRUB boot floppy with the menu interface"
---------------------------------------------------------------------------------
Lancer la commande batch suivante
# grub --batch --device-map=/dev/null <<EOF
device (fd0) /dev/fd0
root (fd0)
setup (fd0)
quit
EOF

Cette disquette permettra de démarrer pratiquement n'importe quel système
d'exploitation (Linux ou autre) qui se trouve sur le(s) disque(s) de l'ordinateur.


II - Installer grub sur le MBR d'un disque

Attention : éviter d'écraser le MBR Windows. S'il a été écrasé, voir plus loin
Pour éviter cela, sauvegarder le MBR avec dd par exemple sur une disquette :
dd if=device of=/dev/fd0/mbr.win bs=512 count=1
remplacer device par le device du disque de boot (par exemple hda, sdb ...)

1 - Lancer grub :
# grub

2 - Vérifier que le "root device" (c'est à dire les fichiers grub) se trouve bien là
où l'on pense : en effet la dénomination des disques est différente sous linux
et sous grub:

grub> find /boot/grub/stage1
(fd0)
(hd1,1)

Le root device est donc ici en hd1,1, c'est à dire hdb2 en nomenclature Linux

3 -Indiquer à grub l'emplacement du root device :
grub> root (hd1,1)
Filesystem type is ext2fs, partition type 0x83

4 - Installer GRUB dans le MBR
grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 17 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+17 p (hd1,1)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.

5 - Quitter grub
grub> quit

6 - Copier le programme de boot que l'on vient de mettre dans le MBR du disque hdb.
La copie est mise dans un fichier (ici bootsect.grb) qui sera placé dans la racine de
la partition bootable, soit très généralement hda1. Si nécessaire vérifier à l'aide de
fdisk que cette partition a bien l'attribut bootable.
Dans l'exemple ci-dessous /dev/hda1 est monté en /mnt/win_c

# dd if=/dev/hdb of=/mnt/win_c/bootsect.grb bs=512 count=1


Configurer grub pour booter linux
--------------------------------------
Taper sur la touche <c> pour passer en mode commande et rechercher où se trouve le(s) dossier(s) grub :
c'est dans ces dossiers que se trouve le fichier menu.lst à configurer :
grub> find /boot/grub/stage1
(fd0)
(hd1,1)

=> dans ce cas il y a 2 dossiers grub
- sur disquette (fd0)
- sur la 2° partition du disque hd1

Taper sur les touches <Esc> puis <e> pour éditer les lignes de commande
Corriger les valeurs et essayer de booter.
Dans le cas d'un déplacement de disque, fstab est probablement incorrect : booter avec un mini-linux sur disquette (tomsrtbt, puis utiliser vi) ou sur CD (Knoppix avec KDE ou le CD1 d'installation Mandrake avec vi) et corriger fstab. En profiter pour corriger le fichier menu.lst qui se trouve dans boot/grub.

NB : sous Knoppix les partitions sont par défaut "read only". En plus KDE est ouvert pour un utilisateur non root. Donc pas moyen d'écrire.
Pour pouvoir écrire, passer dans une console root (il n'y a pas de mot de passe) :
<Alt Ctrl F2>
Démmarrer KDE en root :
# startx -- :1
- Sur le bureau, trouver l'icône de la partition qui contient les fichiers menu.lst et fstab à modifier
- Click droit sur l'icône de la partition, la monter
- A nouveau click droit et changer le mode en read/write
- passer dans le répertoire boot/grub/
- clik droit sur l'icône du fichier menu.lst : l'ouvrir avec un éditeur (kwrite) et entrer les bonnes valeurs
- idem pour /etc/fstab

Attention : Knoppix et Mandrake ne reconnaissent pas les disques sous le même nom : par exemple hdg sous knoppix peut devenir hdc sous Mandrake. Pour savoir comment mandrake identifie les disques, démarrer avec le CD d'installation n°1 jusqu'au partitionnement : on voit alors comment les disques sont nommés.

Rebooter.
S'il n'y a plus d'erreur dans menu.lst et dans fstab, ça boote correctement.

Amélioration de l'affichage des infos au démarrage de MDK
---------------------------------------------------------
Remplacer vga=788 par vga=791
dans le fichier /boot/grub/menu.lst

Valeur du paramètre vga
cf. http://guide.andesi.org/html/jbootsplash.html

Résolution Nombre de couleurs paramètre vga
640x480 256 769
32000 784
65000 785
16.7 Millions 786

800x600 256 771
32000 787
65000 788
16.7 Millions 789

1024x768 256 773
32000 790
65000 791
16.7 Millions 792

1280x1024 256 775
32000 793
65000 794
16.7 Millions 795

On peut également utiliser :
vga=normal
vga=ask


Gestion des disques
===================
diskdrake

Taux d'occupation des disques
=============================
df
df -h (h = human readable, affichage en MO, etc.)

Monter/démonter des disques, occupation
=======================================
kdf

Formatage d'une partition d'un disque dur
=========================================
Formatage de la partition hdc2, par exemple :
mkfs -V -t ext3 -c /dev/hdc2
Curieusement c'est une partition ext2 qui est crée : pour la passer en ext3 (ça n'efface rien !)
tune2fs -j /dev/hdc2

ou bien
mkfs.ext3 -c -v /dev/hdc2
-v verbose
-c vérifie les blocs défectueux

Formatage rapide :
mkfs /dev/hdc2

ext3
----
Avec le noyau 2.6 les répertoires peuvent être indexés ce qui accélère l'affichage en cas de fichiers en gand nombre (cf. http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt)
Par exemple pour ajouter l'indexation à un système de fichiers ext3 existant sur la partition sda3 :
# tune2fs -O dir_index /dev/sda3

Formater une disquette
=======================
kfloppy

Formatage ext2 (rapide)
mke2fs /dev/fd0

Formatage ext2 avec contrôle en lecture/écriture de la surface de la disquette (lent)
mke2fs -c -c /dev/fd0

Localiser quelque chose
=======================
find
locate
which ou type
whereis
kfind

Rechercher à l'intérieur de fichiers
------------------------------------
grep
rgrep
kfind



Copie de disquette (idem diskcopy sous DOS)
===========================================
1 - Copier le contenu de la disquette sur le disque dur
dd if=/dev/fd0 of=flop.tmp
2 - Facultatif : formatter une disquette (voir ci-dessus)
Pas vraiment utile, car dd copie secteur à secteur. permet de vérifier l'état de la disquette
3 - Copier le fichier flop sur cette disquette
dd if=flop of=/dev/fd0
4 - Effacer le fichier temporaire flop.tmp
rm -i flop.tmp

Messagerie (mail)
=================
Format de stockage des messages : 3 possibilités suivant les clients de messagerie utilisés :
1 - Dans un répertoire : 1 fichier par message
2 - tous les messages sont dans un seul fichier, éventuellement organisé en base de donnée
3 - Solution intermédiaire un fichier par dossier : tous les messages du dossier sont groupés dans un fichier.

1 = maildir, format le plus sur
cf. http://www.qmail.org/qmail-manual-html/man5/maildir.html,
http://en.wikipedia.org/wiki/Maildir

Utilisé par Kmail, Postfix, etc.

Les messages d'un dossier du client de messagerie (par exemple inbox) sont mis dans un répertoire (inbox) subdivisé en trois sous-répertoires : cur, new et tmp
- new : les messages nouvellement arrivés, avec l'heure et date d'arrivée
- cur : idem new, mais messages lus
- tmp : pas clair, voir doc ci-dessus

2 = format le plus dangereux et le plus difficile à tranférer sous un autre format
Utilisé par Microsoft Outlook

3 = mbox, format tès courant
cf. http://www.qmail.org/man/man5/mbox.html,
http://en.wikipedia.org/wiki/Mbox
Utilisé par exemple par Eudora

Kmail
=====
Plante avec une message "The application Kmail crashed and caused signal 11 (SIGSEGV)" etc.
Remède : supprimer le fichier de configuration de l'utilisateur : $HOME/.kde/share/config/kmailrc
Refaire la config de Kmail (menu "Settings")

Trash (poubelle)
---------------
Menu : Settings/Configure Kmail
Onglet Receiving
Créer une BAL (ou bien choisir la BAL à modifier)
Onglet General, en bas de la fenêtre menu déroulant "Trash folder" : bien choisir dans quel dossier mettre les messages à envoyer à la poubelle.

Carnet d'adresses
-----------------
~/.kde/share/apps/kabc


Envoyer un mail en ligne de commande (mail)
===========================================
Exemples :
- Envoyer le résultat d'une commande :
$ date | mail -s "Voici la date et l'heure" toto@serveur_mail
(mettre le sujet entre "" si ce n'est pas un mot unique.

- Rédiger le mail à l'aide d'un éditeur de texte quelconque et l'enregistrer dans un fichier. Puis :
$ cat nom_fichier | mail -s sujet destinataire@serveur_mail

Transférer les messages du format mailbox au format maildir
===========================================================
Récupérer le programme perl mb2md sur http://batleth.sapienti-sat.org/projects/mb2md/
Le dézipper (gunzip nom_programme)
Mettre les droits x
Utilisation : voir le mode d'emploi. Par exemple pour remplir /home/utilisateur/Maildir :
$ ./mb2md-x.xx.pl -s /var/spool/mail/mbox_utilisateur

Si ça ne fonctionne pas vérifier que perl et perl-TimeDate soient bien installés.



Serveur ftp (proftpd)
=====================
Documentation : http://www.mandrakeuser.org/docs/connect/print/ftp.html
Fichier de configuration : /etc/proftpd.conf
Répertoire de départ (cf. directive <Anonymous ~ftp> dans le fichier de configuration) : /var/ftp

Proftpd, symlinks et chroot
---------------------------
cf. http://castaglia.proftpd.de/doc/contrib/ProFTPD-mini-HOWTO-Chroot.html

Pour faire apparaître un répertoire dans /var/ftp/pub ln ne fonctionne pas. Utiliser à la place :
mount --bind /le/repertoire/a/monter /var/ftp/pub

Pour rendre accessible par ftp un partage samba :
mount -t smbfs -o username=toto //nom_machine/nom_partage /var/ftp/pub

FTP sécurisé
============
sftp utilise le port 22 (SSH)
A partir de KDE/konqueror :
sftp://NomDeMachine
Puis entrer le login et le mot de passe de l'utilisateur : on est alors à la racine du home de l'utilisateur

A partir de W$ :
Pas de client sftp dans IE ou Mozilla :(
Mais possible avec filezilla :
remplir les champs Address, User et Password et taper retour chariot
on est alors à la racine du home de l'utilisateur

Serveur http (apache)
====================
- Documentation : http://httpd.apache.or