Il est possible de demander un reboot sur une des entrées du fichier de configuration de GRUB : /boot/grub/menu.lst :
# grub-reboot 2
Cette commande redémarre le PC avec la 3ème entrée définie dans le fichier menu.lst.
Affichage des articles dont le libellé est linux. Afficher tous les articles
Affichage des articles dont le libellé est linux. Afficher tous les articles
lundi 17 septembre 2007
vendredi 14 septembre 2007
FAIRE UN SCRIPT SHELL AVEC AIDE ET PARSER DE LIGNE DE COMMANDE
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat < Write usage and help text here
HELP
exit 0
}
error()
{
# print an error and exit
echo "$1"
exit 1
}
# The option parser, change it as needed
# In this example -f and -h take no arguments -l takes an argument
# after the l
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
-f) opt_f=1;shift 1;; # variable opt_f is set
-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
# The main program of you script comes after this line
error "ERROR: This is a generic script framework you must modify it first"
#
# vim: set sw=4 ts=4 et:
help()
{
cat <
HELP
exit 0
}
error()
{
# print an error and exit
echo "$1"
exit 1
}
# The option parser, change it as needed
# In this example -f and -h take no arguments -l takes an argument
# after the l
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
-f) opt_f=1;shift 1;; # variable opt_f is set
-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
# The main program of you script comes after this line
error "ERROR: This is a generic script framework you must modify it first"
#
FAIRE UN MENU DE CHOIX EN SHELL
The select statement is a bash specific extension and is very good for interactive use. The user can select a choice from a list of different values:
select var in ... ; do
break
done
.... now $var can be used ....
Here is an example:
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
Here is what the script does:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
select var in ... ; do
break
done
.... now $var can be used ....
Here is an example:
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
Here is what the script does:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
ENVOYER UN FAX GRATUIT AVEC FREE
1) Scanner le document et le sauvegarder en JPEG, ou si c'est un document word, l'exporter en PDF avec openoffice
2) Lancer la commande suivante pour en faire un PDF au format A4 (très important sinon c'est refusé par free)
$ sam2p -m:bottom:28bp -m:top:28bp -e:rot:0 faxe.jpeg faxe.ps && sam2p faxe.ps faxe.pdf && rm faxe.ps
3) Aller sur l'interface de free et connectez vous à votre compte pour l'envoyer :
http://www.free.fr
2) Lancer la commande suivante pour en faire un PDF au format A4 (très important sinon c'est refusé par free)
$ sam2p -m:bottom:28bp -m:top:28bp -e:rot:0 faxe.jpeg faxe.ps && sam2p faxe.ps faxe.pdf && rm faxe.ps
3) Aller sur l'interface de free et connectez vous à votre compte pour l'envoyer :
http://www.free.fr
AUTORISER LA GENERATION DE FICHIER CORE EN CAS DE PLANTAGE
En cas de crash violent (message Segmentation fault) autoriser la production de fichiers core grâce à :
#Set user limit (accept core files and remove limit of stack size)
$ ulimit -c unlimited
$ ulimit -s unlimited
#Set user limit (accept core files and remove limit of stack size)
$ ulimit -c unlimited
$ ulimit -s unlimited
MONTER UNE CLE USB
Il faut que les modules suivant soient chargés s'ils ne sont pas compilés dans le noyau :
# lsmod |grep usb
usb_storage 69056 1
usbcore 119044 5 usb_storage,ehci_hcd,uhci_hcd
ide_core 139940 5 usb_storage,ide_cd,ide_generic,piix,ide_disk
scsi_mod 125228 3 usb_storage,sd_mod,libata
Pour les charger manuellement :
# modprobe ide_core
# modprobe usbcore
# modprobe ehci_hcd
# modprobe uhci_hcd
# modprobe scsi_mod
# modprobe sd_mod
# modprobe libata
# modprobe usb_storage
Pour charger automatiquement au démarrage, ceux qui ne sont pas compilés dans le noyau, il faut les ajouter au fichier
/etc/modules
Je ne sais pas encore pourquoi mais certaines clés sont reconnues en scsi sous /dev/sda et d'autres sous /dev/sda1. Si on ne parvient pas à en monter une, c'est peut-être qu'on la cherche à un mauvais emplacement : lister avec un ls -l /dev/sd*
# lsmod |grep usb
usb_storage 69056 1
usbcore 119044 5 usb_storage,ehci_hcd,uhci_hcd
ide_core 139940 5 usb_storage,ide_cd,ide_generic,piix,ide_disk
scsi_mod 125228 3 usb_storage,sd_mod,libata
Pour les charger manuellement :
# modprobe ide_core
# modprobe usbcore
# modprobe ehci_hcd
# modprobe uhci_hcd
# modprobe scsi_mod
# modprobe sd_mod
# modprobe libata
# modprobe usb_storage
Pour charger automatiquement au démarrage, ceux qui ne sont pas compilés dans le noyau, il faut les ajouter au fichier
/etc/modules
Je ne sais pas encore pourquoi mais certaines clés sont reconnues en scsi sous /dev/sda et d'autres sous /dev/sda1. Si on ne parvient pas à en monter une, c'est peut-être qu'on la cherche à un mauvais emplacement : lister avec un ls -l /dev/sd*
LIMITER LES ACCES RESEAUX AUX SERVICES LINUX
# vi /etc/hosts.deny
ALL: ALL
# vi /etc/hosts.allow
sshd: 192.168.1.
ALL: ALL
# vi /etc/hosts.allow
sshd: 192.168.1.
CONFIGURER UN SERVEUR X AVEC GNOME ET XFCE4
Installer les paquets : # apt-get install x-window-system-core
# apt-get install xdm
# dpkg-reconfigure xserver-xfree86
# apt-get install gdm
# apt-get install xfce4
gdm est lancé par init au démarrage de la machine par le script /etc/rc2.d/S21gdm
Fichier de conf de gnome : /etc/X11/gdm/gdm.conf
Il contient une variable SessionDesktopDir=/etc/X11/sessions/:/etc/dm/Sessions/:/usr/share/gdm/BuiltInSessions/:/usr/share/xsessions/
Le dossier /usr/share/xsessions/ contient un fichier xfce4.desktop qui décrit le desktop manager xfce comme suit :
[Desktop Entry]
Encoding=UTF-8
# The names/descriptions should really be better
Name=Xfce Session
Comment=Use this session to run Xfce as your desktop environment
Exec=startxfce4
Icon=
Type=Application
On pourra donc le sélectionner dans l'invite d'accueil de gnome, puis ensuite demander de se loguer avec le même desktop que précédemment.
# apt-get install xdm
# dpkg-reconfigure xserver-xfree86
# apt-get install gdm
# apt-get install xfce4
gdm est lancé par init au démarrage de la machine par le script /etc/rc2.d/S21gdm
Fichier de conf de gnome : /etc/X11/gdm/gdm.conf
Il contient une variable SessionDesktopDir=/etc/X11/sessions/:/etc/dm/Sessions/:/usr/share/gdm/BuiltInSessions/:/usr/share/xsessions/
Le dossier /usr/share/xsessions/ contient un fichier xfce4.desktop qui décrit le desktop manager xfce comme suit :
[Desktop Entry]
Encoding=UTF-8
# The names/descriptions should really be better
Name=Xfce Session
Comment=Use this session to run Xfce as your desktop environment
Exec=startxfce4
Icon=
Type=Application
On pourra donc le sélectionner dans l'invite d'accueil de gnome, puis ensuite demander de se loguer avec le même desktop que précédemment.
SAUVEGARDER LA CONFIGURATION SON AVEC ALSA
Pour configurer le son :
# alsaconf
Pour régler les volumes :
# alsamixer
ou mieux :
# alsamixergui
Utiliser l'utilitaire alsactl qui sauvegardera les différents volumes audio sous '/var/lib/alsa/asound.state' :
# alsactl store
# alsaconf
Pour régler les volumes :
# alsamixer
ou mieux :
# alsamixergui
Utiliser l'utilitaire alsactl qui sauvegardera les différents volumes audio sous '/var/lib/alsa/asound.state' :
# alsactl store
COMPILER UN PROJET QT AVEC QMAKE
1) Se positionner dans le répertoire où se trouvent les sources et lancer
$ qmake -project
qui va générer un fichier nom_repertoire.pro
2) Editer le .pro pour le modifier et lancer
$ qmake
qui va générer le Makefile équivalent
3) Ne jamais éditer le Makefile, toujours repasser par le .pro
4) Si on veut regénérer le Makefile par la suite :
$ make distclean && qmake
5) Par défaut, Qt semble linker avec les librairies de debug, sin on ne le souhaite pas, ajouter une ligne au .pro :
CONFIG += release warn_on qt thread
$ qmake -project
qui va générer un fichier nom_repertoire.pro
2) Editer le .pro pour le modifier et lancer
$ qmake
qui va générer le Makefile équivalent
3) Ne jamais éditer le Makefile, toujours repasser par le .pro
4) Si on veut regénérer le Makefile par la suite :
$ make distclean && qmake
5) Par défaut, Qt semble linker avec les librairies de debug, sin on ne le souhaite pas, ajouter une ligne au .pro :
CONFIG += release warn_on qt thread
RECUPERER UNE INFO DANS UNE COLONNE D'UN FLUX MATERIALISEE PAR DES ESPACES
Faire un pipe vers "tr -s ' ' " pour supprimer les répétitions de l'espace et ainsi pouvoir repérer les colonnes. exemple :
Récupérer la version de libc6 installée :
$ dpkg -l libc6|grep libc6|tr -s ' ' |cut -d' ' -f 3
Récupérer la version de libc6 installée :
$ dpkg -l libc6|grep libc6|tr -s ' ' |cut -d' ' -f 3
SUPPRIMER UN FICHIER AVEC UN NOM AVEC CARACTERE ILLEGAL PAR SON INODE
Il arrive qu'un fichier qui comporte un caractère illégal dans son nom soit créé par une application. Dans ce cas, la commande rm ne fonctionne pas puisqu'on ne peut pas nommer le fichier. Voici un élément de réponse :
- récupérer son inode :
$ ls -i *
- le supprimer
$ find . -inum $num_inode -exec rm {} \;
- récupérer son inode :
$ ls -i *
- le supprimer
$ find . -inum $num_inode -exec rm {} \;
VERIFIER UNE SIGNATURE MD5
Générer la signature :
$ md5sum mon_fichier > mon_fichier.md5
Vérifier :
$ md5sum -cv mon_fichier.md5
On peut contrôler un répertoire entier avec le script md5.sh suivant :
#!/bin/sh
# Calculate md5sum of each files or directories in argument
rm -f /tmp/archive.files
rm -f /tmp/archive.md5
find $@ -type f > /tmp/archive.files
for files in `cat /tmp/archive.files`
do
md5sum $files >> /tmp/archive.md5
done
echo "You can get the md5 file at : /tmp/archive.md5"
echo "To check your files, just do a : md5sum -cv /tmp/archive.md5"
$ md5sum mon_fichier > mon_fichier.md5
Vérifier :
$ md5sum -cv mon_fichier.md5
On peut contrôler un répertoire entier avec le script md5.sh suivant :
#!/bin/sh
# Calculate md5sum of each files or directories in argument
rm -f /tmp/archive.files
rm -f /tmp/archive.md5
find $@ -type f > /tmp/archive.files
for files in `cat /tmp/archive.files`
do
md5sum $files >> /tmp/archive.md5
done
echo "You can get the md5 file at : /tmp/archive.md5"
echo "To check your files, just do a : md5sum -cv /tmp/archive.md5"
CONNAÎTRE LES VARIABLES D'ENVIRONNEMENT D'UN PROCESSUS
Il faut utiliser le script ~/showenv.sh PID :
#!/bin/sh
# showenv - show environment of a process, by PID
# If second argument given, show just that one environment variable.
f=/proc/$1/environ
if [ ! -r "$f" ]; then
echo "`basename $0`: can't access process $1" 1>&2
exit 1
fi
case $# in
1) tr '\000' '\012' < $f | sort ;; 2) tr '\000' '\012' < $f | grep "^$2=" ;; *) echo "Usage: `basename $0` pid [envariable-name]" 1>&2; exit 1 ;;
esac
#!/bin/sh
# showenv - show environment of a process, by PID
# If second argument given, show just that one environment variable.
f=/proc/$1/environ
if [ ! -r "$f" ]; then
echo "`basename $0`: can't access process $1" 1>&2
exit 1
fi
case $# in
1) tr '\000' '\012' < $f | sort ;; 2) tr '\000' '\012' < $f | grep "^$2=" ;; *) echo "Usage: `basename $0` pid [envariable-name]" 1>&2; exit 1 ;;
esac
ANALYSER UN FICHIER CORE AVEC GDB
$ gdb fichier_programme fichier_core_généré
(gdb) bt
la commande bt (BackTrace) remontera la pile des appels de fonctions précédent le crash
(gdb) bt
la commande bt (BackTrace) remontera la pile des appels de fonctions précédent le crash
AJOUTER UNE COMMANDE A SUDO
Exemple de configuration du fichier /etc/sudoers (avec l'utilitaire #visudo)
Cmnd_Alias HALT=/sbin/halt
Cmnd_Alias REBOOT=/sbin/reboot
# User privilege specification
root ALL=(ALL) ALL
myuser ALL=NOPASSWD: /usr/sbin/pptpconfig
myuser ALL=NOPASSWD:HALT,NOPASSWD:REBOOT
Cmnd_Alias HALT=/sbin/halt
Cmnd_Alias REBOOT=/sbin/reboot
# User privilege specification
root ALL=(ALL) ALL
myuser ALL=NOPASSWD: /usr/sbin/pptpconfig
myuser ALL=NOPASSWD:HALT,NOPASSWD:REBOOT
SYNCHRONISATION DE TEMPS GUEST LINUX VMWARE/ HOTE WINDOWS
Il faut modifier le fichier /usr/src/kernel-source-2.6.8/include/asm-i386/param.h des sources du noyau 2.6.8 et le recompiler.
Trouver la définition de la fréquence du timer d'interruption :
#define HZ 1000
Passer sa valeur à 100 :
#define HZ 100
Trouver la définition de la fréquence du timer d'interruption :
#define HZ 1000
Passer sa valeur à 100 :
#define HZ 100
COMPILER UN NOYAU LINUX 2.6
Télécharger le code source du noyau
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
ou sur debian :
# apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)
Décompresser le code source
$ tar xvjf linux-2.6.8.tar.bz2
Nettoyer les anciennes compilations (si besoin)
$ make mrproper
Configurer le noyau
(Cette opération va générer un fichier .config qui contiendra toutes les options paramétrées pour la compilation du nouveau noyau)
$ make menuconfig (ou xconfig ou config)
A noter que si l'on souhaite compiler le noyau avec les mêmes options que son noyau actuel, il suffit de remplacer l'opération précédente par :
$ cp /boot/config- .config
$ make oldconfig # repondre a toute question par entree
Compiler le noyau
$ make bzImage
Compiler les modules
$ make modules
Déplacer le noyau vers /boot
$ cp ./arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-cmp
Déplacer la table de symboles vers /boot
$ cp System.map /boot/System.map-2.6.8-cmp
Installer les modules
$ make modules_install
Créer un fichier "RAM disk" si on n'a pas de disque dur IDE
$ cd /lib/modules/2.6.8
$ mkinitrd -o /boot/initrd-2.6.8-cmp 2.6.8
Configurer GRUB, le chargeur de boot avec le nouveau noyau :
title Debian GNU/Linux, new recompiled kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.8-cmp root=/dev/hda1 ro
initrd /boot/initrd-2.6.8-cmp
savedefault
boot
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
ou sur debian :
# apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)
Décompresser le code source
$ tar xvjf linux-2.6.8.tar.bz2
Nettoyer les anciennes compilations (si besoin)
$ make mrproper
Configurer le noyau
(Cette opération va générer un fichier .config qui contiendra toutes les options paramétrées pour la compilation du nouveau noyau)
$ make menuconfig (ou xconfig ou config)
A noter que si l'on souhaite compiler le noyau avec les mêmes options que son noyau actuel, il suffit de remplacer l'opération précédente par :
$ cp /boot/config-
$ make oldconfig # repondre a toute question par entree
Compiler le noyau
$ make bzImage
Compiler les modules
$ make modules
Déplacer le noyau vers /boot
$ cp ./arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-cmp
Déplacer la table de symboles vers /boot
$ cp System.map /boot/System.map-2.6.8-cmp
Installer les modules
$ make modules_install
Créer un fichier "RAM disk" si on n'a pas de disque dur IDE
$ cd /lib/modules/2.6.8
$ mkinitrd -o /boot/initrd-2.6.8-cmp 2.6.8
Configurer GRUB, le chargeur de boot avec le nouveau noyau :
title Debian GNU/Linux, new recompiled kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.8-cmp root=/dev/hda1 ro
initrd /boot/initrd-2.6.8-cmp
savedefault
boot
UTILISER SUBVERSION (SVN)
L'argument d'une révision peut être :
NUMÉRO numéro de la révision
'{' DATE '}' révision disponible à cette date au format {aaaa-mm-jjThh:mm:ss}
'HEAD( dernière révision du dépôt
'BASE' rév. de base de la copie de travail
'COMMITTED' dernière propagation à ou avant BASE
'PREV' révision juste avant COMMITTED
Ajouter un répertoire et son arborescence
-----------------------------------------
svn add mon_rep
svn commit mon_rep -m "Ceci est la description de ce répertoire"
Récupérer une copie de travail SVN
----------------------------------
Se placer à l'endroit de la partition où on souhaite récupérer l'arborescence :
cd ~/svn/dev
récuperer l'arborescence Tracking :
svn co http://rd-cvs/svn/gc/CURRENT/dev/Tracking
Connaître les informations sur une arborescence locale
------------------------------------------------------
svn info
Connaître les révisions et leur auteur sur un fichier donné
-----------------------------------------------------------
svn blame monFichier.cpp > /tmp/monFichier.cpp.svn && kate /tmp/monFichier.cpp.svn
Connaître le status d'un fichier
--------------------------------
svn status mon_fichier
Revenir en arrière les fichiers locaux non commités
---------------------------------------------------
svn revert mon_fichier
Déverrouiller un fichier verrouillé au niveau .svn
--------------------------------------------------
svn cleanup mon_fichier
Trouver les 5 derniers changements effectués sur le repository
-------------------------------------------------------------
svn log -v --limit=5
Comparer un fichier de la copie de travail par rapport au dépot
---------------------------------------------------------------
svn diff mon_fichier
l'option diff-cmd peut être définie dans ~/.subversion/config pour utiliser un outil de diff externe (comme kdiff3)
Déterminer les fichiers modifiés d'une arborescence entre 2 révisions
---------------------------------------------------------------------
svn di -r 74247:74332 --summarize
Revenir à une version précédente des fichiers
---------------------------------------------
svn sw http://rd-cvs/svn/gc/CURRENT/dev/K2/K2 -r 72724
NUMÉRO numéro de la révision
'{' DATE '}' révision disponible à cette date au format {aaaa-mm-jjThh:mm:ss}
'HEAD( dernière révision du dépôt
'BASE' rév. de base de la copie de travail
'COMMITTED' dernière propagation à ou avant BASE
'PREV' révision juste avant COMMITTED
Ajouter un répertoire et son arborescence
-----------------------------------------
svn add mon_rep
svn commit mon_rep -m "Ceci est la description de ce répertoire"
Récupérer une copie de travail SVN
----------------------------------
Se placer à l'endroit de la partition où on souhaite récupérer l'arborescence :
cd ~/svn/dev
récuperer l'arborescence Tracking :
svn co http://rd-cvs/svn/gc/CURRENT/dev/Tracking
Connaître les informations sur une arborescence locale
------------------------------------------------------
svn info
Connaître les révisions et leur auteur sur un fichier donné
-----------------------------------------------------------
svn blame monFichier.cpp > /tmp/monFichier.cpp.svn && kate /tmp/monFichier.cpp.svn
Connaître le status d'un fichier
--------------------------------
svn status mon_fichier
Revenir en arrière les fichiers locaux non commités
---------------------------------------------------
svn revert mon_fichier
Déverrouiller un fichier verrouillé au niveau .svn
--------------------------------------------------
svn cleanup mon_fichier
Trouver les 5 derniers changements effectués sur le repository
-------------------------------------------------------------
svn log -v --limit=5
Comparer un fichier de la copie de travail par rapport au dépot
---------------------------------------------------------------
svn diff mon_fichier
l'option diff-cmd peut être définie dans ~/.subversion/config pour utiliser un outil de diff externe (comme kdiff3)
Déterminer les fichiers modifiés d'une arborescence entre 2 révisions
---------------------------------------------------------------------
svn di -r 74247:74332 --summarize
Revenir à une version précédente des fichiers
---------------------------------------------
svn sw http://rd-cvs/svn/gc/CURRENT/dev/K2/K2 -r 72724
AVOIR DES INFORMATIONS SUR UN BINAIRE
LISTER LES DEPENDANCES DE BIBLIOTHEQUES D'UN BINAIRE
Définir le chemin vers les librairies partagées (shared libraries) chargées dynamiquement s'il y en a
$ export LD_LIBRARY_PATH=./lib/
$ ldd ./bin/gcis
========================================
LISTER LES FONCTIONS ET SYMBOLES D'UNE BIBLIOTHEQUE
$ nm ./libgcis.so
Définir le chemin vers les librairies partagées (shared libraries) chargées dynamiquement s'il y en a
$ export LD_LIBRARY_PATH=./lib/
$ ldd ./bin/gcis
========================================
LISTER LES FONCTIONS ET SYMBOLES D'UNE BIBLIOTHEQUE
$ nm ./libgcis.so
Inscription à :
Articles (Atom)