lundi 25 avril 2011

La commande find ou la puissance de la recherche

find est une commande UNIX permettant de chercher des fichiers dans un ou plusieurs répertoires selon des critères définis par l'utilisateur. Par défaut, find retourne tous les fichiers contenus dans l'arborescence du répertoire courant. find permet aussi d'exécuter une action sur  chaque fichier retrouvé, ce qui en fait un outil très puissant. La commande find fait partie des commandes avancées les plus efficaces dans l’administration d’un système elle nécessite les privilèges de l’administrateur pour effectuer une recherche sur un ou plusieurs systèmes de fichiers. La commande find est un outil extrêmement puissant, doté d’une cinquantaine d’options, autorisant des recherches définies selon des critères très fins : sur fichiers, répertoires, liens symboliques... à partir du nom (en tenant compte de la casse ou non), selon le propriétaire, la taille, la date, etc, dans un unique système de fichiers ou plus ! Il faut ajouter que ses options se définissent selon deux catégories : sélection et exécution. On mesure alors toute l’étendue de la puissance de cette commande.

La preuve par l’exemple

find dispose de nombreuses options pour limiter les fichiers selon leurs caractéristiques : taille, date de modification, propriétaire, type, etc.

La syntaxe générale est :

find chemin [chemin2...] [options] [action]

Voici quelques exemples d'utilisation :

Impression de la liste des fichiers sous /home qui ont été modifiés dans les 7 derniers jours :

find /home -type f -a -mtime -7 -print

Recherche de la chaîne Wikipedia dans tous les fichiers terminés par .txt sous /home :

find /home -type f -a -name '*.txt' -exec grep -H Wikipedia {} \;
Suppression des fichiers sous /tmp de plus de 14 jours ou nommés core  :

find /tmp -type f -a \( -mtime +14 -o -name 'core' \) -exec rm {} \;

Recherche du fichier nom.txt récursivement à partir du répertoire courant et écrit le résultat dans le fichier sortie.txt situé sur le répertoire spécifié par chemin :

find . -name "nom.txt" -print > ./chemin/sortie.txt

En raison de la possibilité d'espaces dans les noms de fichiers (par exemple /tmp/ /etc/passwd), on prendra garde à des constructions telles que :
find /tmp -type f -a -mtime +14 | xargs rm

 

 




jeudi 21 avril 2011

Sauvegarde des bases des données mysql sous debian


Ce script récupère toutes les bases de données MySQL du serveur MySQL, puis compresse les données en ”.tar.gz”. Une fois les données compressées, elles sont envoyées par mail sur un compte mon compte monsar.database@gmail.com


Mutt est un excellent client de messagerie en ligne de commande et gère parfaitement l'envoi de pièce jointe.
Après avoir installé et configuré postfix, n'oubliez pas d'installer mutt; c'est un véritable clientb de messagerie en mode text

apt-get install mutt

En principe, il faut écrire le corps du mail dans un fichier :

nano /root/message_mail.txt

Bonjour,

En attache à ce mail, veullez trouvez la sauvagarde complete des bases des données du serveur Merci  

Script de sauvegarde

Fonctionnement

toutes les bases de données hébergées sur le serveur seront sauvegardées 
dans ”/root/save_mysql” compressées en ”.tar.gz” envoyées par mail
 
nano /root/script_save_mysql.sh 

#!/bin/sh
## Date -1 jour ##
DATE=$(date +%d-%m-%Y_%Hh-%M –date '1 day ago')
FILE=mysql_dump-${DATE}
## Utilisation de mysqldump attention ici l'option -p et votre mot de passe sont collés ##
mysqldump –all-databases -u root -pvotre_mot_de_passe > /root/save_mysql/$FILE.sql
## COMPRESSION ##
tar cvfz /root/save_mysql/$FILE.tar.gz /root/save_mysql/$FILE.sql
## Suppression du fichier .sql ##
rm /root/save_mysql/$FILE.sql
## Envoi par mail avec le fichier compressé en piece jointe ##
/usr/bin/mutt -a ”/root/save_mysql/$FILE.tar.gz” -s “Sauvegarde MySQL $DATE” -i /root/message_mail.txt email@domaine.com < /dev/null
exit 0
  
Il faut rendre le script exécutable

chmod +x /root/script_save_mysql.sh
Le script sera lancé à 1h du matin, donc on retranche 1 journée dans la date qui s'affiche pour que la sauvegarde soit la date du jour. 

Mettons le script dans le cron pour automatiser l'action

Le script script_save_mysql.sh sera exécuté toutes les nuits à 02h00.
crontab -e
00 02 * * * /root/script_save_mysql.sh > /dev/null
/etc/init.d/cron reload
Et le tour est joué.
Vous allez observer vos mails le jour suivants pour vérifier si vous avez réussi la sauvagarde ou bien changer l'heure du cron pour voir dans quelques minutes 

Que faire si ça ne marche pas ?

1. Vérifier les logs de postfix
2. Vérifier si si mutt est correctement installé
3. GIYF ( Google Is Your Friend)
4. vous avez mon numéro de téléphone (00243997647154)

vendredi 15 avril 2011

Crontab

Crontab est le nom du programme sous Unix (ou Linux) qui permet d'éditer des tables de configuration du programme cron.
Par extension, on appelle souvent cron (ou cron job en anglais) toute application lancée à horaire fixe.
La commande crontab édite en fait un fichier relatif à l'utilisateur qui l'exécute, et en vérifie la syntaxe
Afin d'afficher le contenu de la table cron (pour l'utilisateur courant), il suffit d'exécuter la commande suivante :

$ crontab -l


Modification


Afin d'éditer la table cron (pour l'utilisateur courant), il suffit d'exécuter la commande suivante :

$ crontab -e

Cette commande a pour effet de lancer l'éditeur par défaut

présentant la table actuelle (donc aucune s'il s'agit du premier lancement de crontab). Cette commande ne permet pas de modifier la crontab centralisée (/etc/crontab). Ne pas oublier d'exporter l'éditeur : pour vi lancer la commande suivante :

$ export EDITOR=vi

Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter et est notée de la façon suivante :

mm hh jj MMM JJJ tâche > log

Dans cette syntaxe :

    * mm représente les minutes (de 0 à 59)
    * hh représente l'heure (de 0 à 23)
    * jj représente le numéro du jour du mois (de 1 à 31)
    * MMM représente le numéro du mois (de 1 à 12) ou l'abréviation du nom du mois (jan, feb, mar, apr, ...)
    * JJJ représente l'abréviation du nom du jour ou le chiffre correspondant au jour de la semaine (0 représente le dimanche, 1 représente le lundi, ..., 7 représente le dimanche)
    * tâche représente la commande ou le script shell à exécuter
    * log représente le nom d'un fichier dans lequel stocker le journal des opérations. Si la clause > log n'est pas spécifiée, cron enverra automatiquement un courriel de confirmation. Pour éviter cela, il suffit de spécifier > /dev/null.

Pour chaque unité de temps (minute/heure/...) les notations sont possibles:

    * * : à chaque unité de temps (0, 1, 2, 3, 4...)
    * 5,8 : les unités de temps 5 et 8
    * 2-5 : les unités de temps de 2 à 5 (2, 3, 4, 5)
    * */3 : toutes les 3 unités de temps (0, 3, 6, 9...)
    * 10-20/3 : toutes les 3 unités de temps, entre la dixième et la vingtième (10, 13, 16, 19)
Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple) automatisé de l'espace disque libre (commande df) à des intervalles de temps précis :

  • Tous les jours à 23h30 :
 30 23 * * * df >>/tmp/log_df.txt
  • Toutes les heures, passées de 5 minutes :
 5 * * * * df >>/tmp/log_df.txt
  • Tous les premiers du mois à 23h30 :
 30 23 1 * * df >>/tmp/log_df.txt
  • Tous les lundis à 22h28 :
 28 22 * * 1 df >>/tmp/log_df.txt
  • Du 2 au 5 de chaque mois à 10h12 :
 12 10 2-5 * * df >>/tmp/log_df.txt
  • Tous les jours pairs du mois à 23h59 :
 59 23 */2 * * df >>/tmp/log_df.txt
  • Tous les jours à 22h que les jours ouvrés :
 0 22 * * 1-5 df >>/tmp/log_df.txt
  • Toutes les 5 minutes :
 */5 * * * * df >>/tmp/log_df.txt
  • Tous les derniers jours du mois (l'antislash devant % est obligatoire en édition de crontab, contrairement à l'exécution de la commande manuellement) :
 0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >>/tmp/log_df.txt
  • Tous les derniers dimanches du mois :
  • Première solution : comparer tous les dimanches avec celui de la semaine d'après.
 0 0 * * 0 [ `/bin/date +\%d` -gt `/bin/date +\%d -d "7 day"` ] && df >>/tmp/log_df.txt
  • Deuxième solution : tester la dernière semaine tous les mois.
 0 0 25-31 1,3,5,7,8,10,12 0 my-script.sh
 0 0 24-30 4,6,9,11 0 my-script.sh
 0 0 22-29 2 0 my-script.sh
  • Troisième solution : lancer un script avec le calendrier.
 0 0 21-31 * * /bin/script.sh
Autre exemple, le script shell suivant (que l'on supposera stocké dans /home/backup sous le nom backup.cmd) exporte les enregistrements de MySQL (de la table ccmusers par exemple) dans un fichier dont le nom est ccmusers suivi de la date sous la forme jour-mois-annee-heure-minute:

 #!/bin/sh
 DATE=$(date +%d-%m-%Y-%H-%M)
 /usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql

Ainsi pour automatiser (chaque jour à 23h59) le backup de la table ccmusers de MySQL et l'appel d'une page web (chaque jour à 21h30), il suffira d'ajouter l'entrée suivante dans la table cron:

 59 23 * * * /home/backup/backup.cmd >>/dev/null
 30 21 * * * wget -O /dev/null http://example.com/mapage.html >>/dev/null


   
   


Mise en route de la téléphonie IP avec asterisk

La voix sur IP, ou « VoIP » pour Voice over IP, est une technique qui consiste à exploiter un réseau IP afin de transmettre la voix d'un point à un autre par le biais d'un télephone ip. Cette technologie permet des économies énormes dans les sièges des bureaux car le PABX ( centrale téléphonique ) qui contre très cher sera désormais remplacé par une machine disposant d'un minimum de configuration interne ( ram : 1Go ou plus , processeur : 800 Mo ou plus , disque dur : 20 Go ou plus , une machine pareil le ici au congo peux valoir moins de 500 usd ) . En plus de cela le même câblage dédié pour le réseau IP sera exploité par la téléphonie, il constitue donc des économie en terme de câblage en RJ11.

Dans cet article , toute la configuration est basée sur des logiciels libres , le système d'exploitation étant ubuntu ou une debian, encore une foi de plus une téléphonie à moindre coup.

Il est conseillé au lecteur de lire l'article pas à pas jusqu'à la fin pour déployer son IP systeme.

Première partie : installation de ubuntu

Installation de Ubuntu ou debian , cette partie ne sera pas expliquée mais vous pouvez trouver ici tout ce qu'il faut ici  : prise en main de ubuntu

Deuxième partie : Installation se asterisk

En supposant que vous etes familier à l'environnement texte de Ubuntu ou debian ; il ne vous reste qu'à tapper successivement ces commandes :

1. aptitude install asterisk
2. aptitude install asterisk-config
3. aptitude install asterisk-doc
4. aptitude install asterist-prompt-fr
5. aptitude install mpg123
6. aptitude install sox

Troisième partie : Installation de l'interface graphique

1. mkdir -p ~/downloads/asterisk-gui
2. cd ~/downloads/asterisk-gui
3. svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0 asterisk-gui
4. ./configure
5. make
6. make install
7. cp -r /etc/asterisk /etc/asterisk.backup
8. make samples
9. Edit /etc/asterisk/manager.conf to enable the web management interface and to add a user:
enabled = yes
webenabled = yes
[admin]
secret = 123456
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config


10. Edit /etc/asterisk/http.conf to enable asterisk’s mini webserver. If you are accessing from your local machine use 127.0.0.1 otherwise you might want to bind to a public ip, but be aware this is less secure.

enabled=yes
enablestatic=yes
bindaddr=127.0.0.1

11. make checkconfig

12. rm -rf /usr/share/asterisk/static-http/
13. ln -s /var/lib/asterisk/static-http/ /usr/share/asterisk/
14. /etc/init.d/asterisk restart
15. After that you should be able to login to the control panel at http://127.0.0.1:8088/gui/static/config/cfgbasic.html (replacing the IP address with whichever one you chose).

16. changer de propriété et de groupe sur:

/var/lib/asterisk/gui_backups
/var/lib/asterisk/static-http
/var/lib/asterisk/scripts

par les commandes: chown asterisk -R et chgroup asterisk -R

chown asterisk -R /var/lib/asterisk/gui_backups
chown asterisk -R /var/lib/asterisk/static-http
chown asterisk -R /var/lib/asterisk/scripts

chgrp asterisk -R /var/lib/asterisk/gui_backups
chgrp asterisk -R /var/lib/asterisk/static-http
chgrp asterisk -R /var/lib/asterisk/scripts

Quatrième partie : configuration des téléphones

Les téléphones ip ont une interface graphique qui permet la configuration . Une foi le téléphone sous tension ; branché au réseau ip via un câble RJ45 ; utiliser l'adresse ip du téléphone (marqué sur le dos du telephone ) afin d'accéder à son interface web.

Dans la partie VOIP compléter le champ serveur par l'adresse ip de la machine sur laquelle asterisk a été installée. 


Dans la partie network , mettez l'addressage en dhcp ; vous pouvez laissez aussi en static si vous voulez

Enregistrer les modifications

faites la meme operation avec les autres telephones 

Au cas ou ca ne marche pas

- GIF ( Google is your friend )
- Ecrire à Oscar Nsarhaza ( monsar04@gmail.com)
- Appellez le 00243997647154
 
Informations supplementaires

Asterisk dispose de plusieurs fonctionalités qui peuvent etre configurées
et exploitées. Dans cet article, nous nous sommes limités à la transmission juste de la voix

Vous pouvez ajouter autres fonctionalités si vous les souhaitez ;


  • Appels 3 directions
  • Appels conférence
  • Appels en attente
  • Appels en prédictif
  • Appels par noms
  • Authentification
  • Base de données interne permettant lecture et écriture
  • Bureau à distance (manager)
  • Blocage par identifiants d'appelants (nom et numéro)
  • Conversion texte-parole (synthèse vocale)
  • Dépistage d'appels
  • Détection de parole
  • Enregistrement d’appel (monitor)
  • Épeler et dicter
  • File d’attente (queue)
  • Gestion de cartes d’appels
  • Gestion de la confidentialité
  • Heure et date d’appels
  • Identification d’appelants (callerid)
  • Identification d’appelants sur appels en attentes
  • Interception d’appel (pickup)
  • Insertion de messages vocaux dans courriels
  • Intégration à différent types de bases de données (Dynamic Realtime et Static Realtime)
  • Listes noires
  • Ne pas déranger (DnD)
  • Macros
  • Menu numérique (audiotel ...)
  • Messagerie SMS
  • Messagerie vocale
           - Indicateur visuel de message en attente
           - Tonalité rythmée pour indication de message
           - Redirection des messages vocaux par courriel
           - Gestion des groupes de boites de messages
           - Interface Web pour gestion des messages
  • Musique d'attente
           - Musique d’attente sur transferts d'appels
           - Intégration flexible de la norme MP3
           - Lecture aléatoire ou linéaire
           - Contrôle du volume
  • Passerelles VoIP
  • Préposé automatique
  • Préposés téléphonique locaux et distants
  • Prise d’appels à distance
  • Protocole OSP
  • Rapports détaillé des appels (CDR)
  • Réception d’alertes au téléphone
  • Recherche d’extensions
  • Recherche de personnes
  • Répertoire téléphonique interactif
  • Routage d’appels (par appelé, par appelant …)
  • Sonneries distinctes (si supporté par les téléphones IP utilisés)
  • Support DUNDI
  • Surveillance
  • Stationnement (parking)
  • Système de menu à l’écran ADSI
  • Système de réponse automatisé interactif (IVR)
  • Transcodage
  • Transferts d’appels (aveugles et supervisés)
  • Transferts d’appels lors de non-réponses
  • Transferts d’appels lorsque le canal est occupé
  • Transmission et réception de télécopies
                                                                                                                                   
 Note importante : Si vous pensez que cet article vous a ete utile pour vos realisations, veuillez    me le faire savoir en m’écrivant a mon adresse : monsar04@gmail.com . Cela vas me               
 permettre  d’améliorer l'article en cas de problème. Merci