Pages

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

REBOOTER SUR UNE PARTITION DONNEE DU CHARGEUR GRUB

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.

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"
#

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

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

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

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*

LIMITER LES ACCES RESEAUX AUX SERVICES LINUX

# vi /etc/hosts.deny
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.

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

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

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

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 {} \;

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"

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

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

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

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

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

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

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