Mini astuces

Ici vous trouverez des mini-astuces pour vous simplifier la vie : d'un script bash de 10 lignes pour lancer mpc et sa liste de lecture préférée aux raccourcis claviers de divers programmes. Aux trucs pour pas se faire chier quand on s'emmerde et qu'on a plus rien à coder !

Code

Erreurs C++

Il arrive souvent que les messages d'erreurs des compilateurs C++ ne soient pas évident pour les néophytes (ce qui est mon cas du moins). Cette page listera donc certains messages d'erreurs avec des explications et solutions possible :

  • undefined reference to `vtable
    Une fonction abstraite n'est pas implémentée.
  • error: multiple types in one declaration
    Oublie du ";" qui ferme la class

Taille de code (ligne & octet)

Fait la liste de tous les fichiers .c et .h et donne leur taille en ligne et en octet plus le total

find . -iname "*\.[ch]" -exec wc -lc '{}' \+
 105 2228 ./bdd.c
  10  189 ./bdd.h
  41  938 ./mysql/plop.c
   8  262 ./temps.c
  12  202 ./temps.h
  63 1190 ./sqlite.c
  20  479 ./sqlite.h
  30  609 ./mysql.c
   9  248 ./mysql.h
  64 1915 ./sqlite/bdd.c
  14  272 ./sqlite/bdd.h
 376 8532 total

Trouver une fonction dans du code

De manière générale

Vous avez plusieurs fichiers de code et vous recherchez une fonction particulière, vous connaissez sa signature, mais vous ne savez pas où elle se trouve.
grep peut vous aider !

grep mafonction *.c

Exemple :

furet@clubnix9 ~/bidon/trunk/src $ grep fillInitData *.c
conf.c: * \fn void fillInitData(log *infos)
conf.c:void fillInitData(log *infos){
main.c:         fillInitData(infos);

Il est même possible de coupler ça avec find, si plusieurs niveaux de dossiers :

find . -name "*\.[ch]" -exec grep -nH --color '{}' \;

La commande ultime :D

En C

Les fonctions précédentes fonctionnent bien évidement, mais il est également possible d'utiliser cscope qui est spécialement prévu pour ça.

Trouver le bon exemple

Dans votre dossier de sources vous cherchez un exemple de l'utilisation d'une fonction X. Oula chercher dans tous les fichiers c'est long, mais nous avons vu comment les choisir. Mais vous être encore plus fainéant que ça, vous voulez avoir le fichier le plus court. La commande ultime de la mort qui tue !

find . -iname "Makefile.am" -exec grep -q "check_PROGRAM" {} \; -printf "%s %h/%f\n" |sort -n 

find . -iname "Makefile.am" ne demande que les fichiers Makefile.am

-exec grep -q "check_PROGRAM" '{}' \; cherche la chaine "check_PROGRAM" dans les fichiers trouvés en n'affichant rien "-q"

-printf "%s %h/%f\n" Pour chaque fichier ou grep a réussit sa recherche imprime : la taille en octet ("%s") les dossiers menant au fichier ("%h") et le nom du fichier ("%f")

ESIEE

Vous trouverez dans ces pages des astuces pour vous faciliter la vie sur les postes de l'ESIEE.

Accèder au web depuis les labos d'élec

Voilà on peut avoir besion d'aller voir de la documentation en ligne sur le LF356 depuis un labo d'élec où mozilla n'est pas configuré et il hors de question d'utiliser ie6. C'est simple il suffit de configurer le proxy correctement. Pour cela une fois mozilla lancé :
=> Edition
=>préférences
+ Avancé
|_ proxies

Là il faut remplir les champs suivants :
1- cocher configuration manuelle du proxy
2- Remplir la case Proxy HTTP avec "cache.esiee.fr"
3- remplir la case port avec "3128"
4- clicker sur la case : utliser ces paramètres pour SSL, FTP et Gopher

Valider et recharger la page.

Chargement automatique de l'environement pour l'assemblage

Pour pouvoir assembler des fichiers .s (68000) avec la commande assembleur (et faire plein d'autres choses, notamment lire la doc de la 5201), il faut à chaque fois charger l'environnement à l'aide de la commande source /user/info_lib/.5201_env , ce qui peut être fastidieux au bout de la 100ème fois, surtout quand on oublie un _ ou un . une fois sur deux.

Pour que l'environnement soit chargé automatiquement au démarrage de la console, il suffit de coller cette commande dans un fichier appelé .cshrc à la racine de votre session (nedit ~/.cshrc)
ensuite on est tranquille jusqu'en I5 !

Connexions SSH

ce tutoriel explique comment se connecter au club en ssh aux noobs.

Introduction

SSH ça veut dire Secure Shell, et c'est un protocole de communication sécurisé (c'est écrit dessus).
Une fois qu'on est connecté en SSH sur une machine, c'est (presque) comme si on avait un terminal sur la dite machine. Donc par exemple si je me connecte en ssh au club avec mon login, j'ai accès à tous mes documents, je peux compiler avec gcc, faire du latex, bref c'est trop l'éclate quoi.
Avec SSH, on peut :

  • se connecter de l'esiee sur une autre machine de l'esiee
  • se connecter du Club*Nix sur une machine de l'esiee
  • se connecter de l'esiee sur le club
  • se connecter de l'extérieur au club

et donc vous aurez déduis qu'on peut se connecter au club de chez soi, puis à l'esiee du club, c'est à dire se connecter à l'esiee de chez soi, ce qui est tout bonnement wonderful.
Bien sur, pour faire tout ça faut avoir un compte au club nix et à l'esiee...

Comment ça marche

Oh c'est pas bien dur ma petite dame. Supposons que t'aies un terminal linux devant toi, ben tu tapes :

user@ordi ~ $ man ssh

et tu lis !

bon, ensuite tu as compris que basiquement, pour se connecter en ssh faut faire :

user@ordi ~ $ ssh <ton login>@<le host>

allez, mise en pratique :

connexions dans l'école

cas n°1 : se connecter au smig

Tout d'abord il faut connaitre le nom d'une machine, qui sert de host. Il y a entre autres "acmeX", "geminiX", où X est un chiffre entre 1 et 12.
quand je serais re à l'école je ferai une liste plus complète des pc sshables
ensuite par exemple ça donne ça :

coco@clubnix9 ~ $ ssh vandonr@acme6
The authenticity of host 'acme6 (147.215.186.75)' can't be established.
RSA key fingerprint is ec:23:4b:d6:8b:4e:5e:6e:b9:a0:6a:d9:00:03:31:6f.
Are you sure you want to continue connecting (yes/no)?

Là t'ecris yes et tu pose pas de questions.

ensuite tu tapes ton mot de passe (le mot de passe du compte avec lequel tu essayes de te connecter, on voit pas les lettres c'est normal), tu fais entrée, et hop :

coco@clubnix9 ~ $ ssh vandonr@acme6
The authenticity of host 'acme6 (147.215.186.75)' can't be established.
RSA key fingerprint is 3d:a0:a9:0b:9e:1a:96:3a:e9:b4:47:25:f9:4a:39:25.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'acme7,147.215.186.75' (RSA) to the list of known hosts.
Password:
Last login: Wed Apr 16 16:50:29 2008
acme6:~>

et voilà, amuse toi bien, ça marche pareil du club ou de l'esiee.

cas n°2 : se connecter au club

C'est le même principe, sauf qu'il y a pas le choix pour la machine, c'est clubnix101.
ça donne ça :

acme7:~> ssh coco@clubnix101
The authenticity of host 'clubnix101 (147.215.81.101)' can't be established.
RSA key fingerprint is 39:f2:a3:7f:46:2b:0c:04:1b:13:ec:21:e5:83:fc:28.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'clubnix101,147.215.81.101' (RSA) to the list of known hosts.
Password:
Last login: Tue Apr 29 22:17:03 2008 from <chez moi>
coco@clubnix9 ~ $

allez, maintenant plus dur :

connexions de l'exterieur

Seule la connexion au club nix est possible de l'exterieur. Pour ça le host n'est plus le nom d'une machine, mais clubnix.esiee.fr.
ça donne donc :

user@ordi ~ $ ssh coco@clubnix.esiee.fr

sinon...

sous Windows

sous windows, on peut accéder au club nix en ssh, notement avec :

  • FileZilla, pour les échanges de fichiers
  • cygwin, si on a installé les bons packages
  • PuTTY

qui sont des logiciels libres et gratuits, giyf.

  • Avec FileZilla
    C'est pas bien dur, c'est du clickodrome :
    ctrl + S (gestionnaire de sites) -> Nouveau Site
    et puis il suffit de remplir les champs hôte, port, sélectionner le type de serveur : SSH (SFTP), type d'identification normale, remplir les champs login et mot de passe et c'est parti !

  • Avec cygwin
    comme sous linux

  • Avec PuTTY
    Remplir les champs Host Name et Port, sauvegarder en default settings si on veut pas les retaper à chaque fois, puis open.
    Ensuite on rentre l'utilisateur et le mot de passe et on est au club.

    Les commandes utiles en ssh

    cp
    à faire

    à retenir :

  • de l'esiee :
    ssh user@host
    où host est le nom d'une machine
    le host du club est clubnix101.
  • de chez soi :
    ssh user@clubnix.esiee.fr
    (host clubnix@esiee.fr)
  • Imprimer en 5000 depuis les PC du clubs

    Si vous voulez imprimer en 5000, c'est le moment de réviser la commande lp. Si on combine ça avec ssh et scp, on peut facilement imprimer depuis n'importe quel ordi connecté sur le réseau de l'ESIEE. Il faut savoir aussi que les ordis sur lesquels on peut se ssh sont les ordis allumés sous Linux. On a aussi besoin que ces ordis aient la bonne imprimante ajoutée (ps5003a). Pour rappel, la commande lp s'utillise comme ça:

    $ lp -d <imprimante> -o <option[=valeur]> <fichier texte, pdf, ou ps>

    J'ai rajouté les options car il y en a des intéressantes comme Stapling qui permet de choisir la position des agrafes (les valeurs possible sont: "Off", "LL", "LR", "MB", "ML", "MR", "MT", "SS", "UL" et "UR"). Vous pouvez regardez les options et leurs valeurs actuelles avec la commande lpoption ou lpoption -l pour voir aussi toutes les valeurs possibles. Attention: une partie des options disponibles changent en fonction de l'imprimante.

    Bref, trêve de bavardages, voici le script:

    1. #!/bin/bash
    2.  
    3. # http://redsymbol.net/articles/unofficial-bash-strict-mode/
    4. set -euo pipefail
    5. IFS=$'\n\t'
    6.  
    7. if [ $# -lt 2 ]; then
    8. echo "Usage: $0 <file> <login> [lp options]"
    9. exit 1
    10. fi
    11.  
    12. if [ ! -f "$1" ]; then
    13. echo "No such file: '$1'"
    14. exit 1
    15. fi
    16.  
    17. FILE=$1
    18. LOGIN=$2
    19.  
    20. shift
    21. shift
    22.  
    23. MIMETYPE="$(file -b --mime-type "$FILE")"
    24.  
    25. if [[ ! ("$MIMETYPE" =~ ^text || "$MIMETYPE" == "application/pdf" || $MIMETYPE == "application/postscript") ]]; then
    26. echo "Warning: printing supported only with pdf, ps or text files."
    27. echo "Found: $MIMETYPE"
    28. echo "Continuing anyway..."
    29. echo
    30. fi
    31.  
    32. BASENAME="$(basename "$FILE")"
    33.  
    34. echo "Destination file? [default='~/$BASENAME']"
    35. read DESTINATION
    36.  
    37. if [ -z "$DESTINATION" ]; then
    38. DESTINATION="~/$BASENAME"
    39. fi
    40.  
    41. echo "Trying 5008 computers"
    42. for i in a b c d e f g h i j k l m; do
    43. HOST="pc5008${i}.esiee.fr"
    44. if scp "-o" "ConnectTimeout=1" "$FILE" "$LOGIN@$HOST:$DESTINATION"; then
    45. ssh "-o" "ConnectTimeout=1" "$LOGIN@$HOST" "lp -d ps5003a $@ $DESTINATION"
    46. break
    47. fi
    48. done

    Les lignes 4 et 5 mettent Bash en mode "strict" (non officiel). Il s'agit d'options très sympas pour que le le langage soit plus strict et donc de sauver des heures de debugging. Pour plus d'informations sur comment ça marche, allez voir le site.

    Les lignes de 7 à 18 vérifient simplement les arguments passés en ligne de commande et stockent le nom du fichier à imprimer et le login ESIEE.

    Pour les shift ligne 20 et 21, cela permet décaler les arguments: l'argument 1 disparaît, l'argument 2 devient l'argument 1, l'argument 3 devient l'argument 2, etc…

    De la ligne 23 à 30 le script vérifie que le fichier est bien un fichier texte, pdf ou postscript mais affiche seulement un warning si ça n'est pas le cas.

    De la ligne 32 à la ligne 39 le script récupère le nom de fichier (enlève le chemin s'il y est) et propose de spécifier un autre chemin pour stocker le fichier sur la machine distante

    Le cœur du script est situé entre les lignes 41 à 48. On va essayer de scp le fichier sur toutes les machines situées en 5008 (pc5008a, pc5008b, pc5008c, etc…) et si jamais ça marche, on lance la commande lp via ssh, avec les options rajoutées via la ligne de commande, qui sont représentées par la variable $@ (ce qui explique l'intérêt des deux shift) et on sort de la boucle.

    Tadaa ! La magie (qui n'est pas vraiment de la magie en fait) est faite !

    Installer git dans sa home

    ssh machinesmig

    wget http://clubnix.fr/redmine/projects/smigtools/repository/revisions/master...
    chmod +x installgit.sh
    ./installgit.sh

    à ajouter dans cshrc :

    setenv PATH /user/votrelogin/usr/bin:$PATH

    vous pouvez maintenant git clone depuis n'importe quel pc du smig.

    Proxy SOCKS avec SSH

    Le problème est le suivant : à l'ESIEE, dans la plupart des sous-réseaux on ne peut pas dialoguer avec l'extérieur de l'école, le seul moyen étant de passer par le proxy HTTP avec lequel on ne peut bien sûr faire que du HTTP.
    Heureusement, le Club*Nix est là !

    Proxy SOCKS

    Le proxy SOCKS, au contraire du proxy HTTP permet de faire passer n'importe quel protocole. Il est très facile d'en créer avec OpenSSH, avec la commande ci-dessous.

    ssh -D 10000 user@clubnix101.esiee.fr

    OpenSSH va écouter sur le port 10000 et transférer tout ce qui arrive dessus via un tunnel SSH vers clubnix101.

    Utilisation du proxy

    Il s'agit maintenant de configurer nos applis pour qu'elles utilisent le proxy. Les environnements de bureau Gnome et KDE peuvent être configurés pour utiliser un proxy SOCKS, mais je vais ici présenter une technique plus globale.

    Tsocks

    Tsocks est une librairie permettant d'utiliser de manière transparente un proxy SOCKS. Après l'avoir installée de la manière appropriée à votre distribution, il faut éditer le fichier de configuration /etc/tsocks.conf afin d'indiquer l'emplacement de notre proxy.

    server = 127.0.0.1
    server_port = 10000

    Le fonctionnement ensuite est simple, tsocks <commande> permet de lancer un programme qui verra ses connexions réseaux redirigées de manière transparente.
    Afin que tous les programmes l'utilisent, on peut rajouter la librairie à la variable d'environnement LD_PRELOAD, la commande tsocks on remplit cet office. Si celle-ci ne donne rien comme chez moi, on pourra utiliser :

    export LD_PRELOAD=$LD_PRELOAD:/usr/lib/libtsocks.so

    (à adapter selon l'emplacement de la librairie) .

    Radio derrière le proxy ESIEE et les horribles glitches des neiges

    Notre cher furet vous a expliquer comment accèder au web depuis les labos d'élec. Pendant les longues heures passé en TP et projets ça aide. Mais c'est encore mieux si on peut avoir la radio. En attaquant directement le stream sur le serveur avec votre logiciel préféré (mplayer), vous entendez d'horrible glitch toutes les 10 secondes. D'après paulez se serait du au proxy squid de l'école.

    Cool nous n'avons pas se problème au club puisque nous pouvons directement accéder a l'extérieur.

    => Tunnel ssh

    ssh -NTL 1025:ta_radio:son_port trax@clubnix101

    => Ecouter la radio

    mplayer http://localhost:1025/rest_de_l_adresse

    Git

    Vous en avez marre de chercher comment amend un commit qui date d'il y a deux semaine?
    Voici une liste (non exhaustive) des commande qui sauvent la vie (ou 3 jours de dev dont 2 a chercher la bonne commande sur internet)

    Domaine: 

    Affichage de logs en "graphique"

    Une petite commande sympa qui permet d'avoir un aperçu rapide de vos commit (et voir si vous faites des sacs de noeud avec vos branchs)

    $ git log --graph --oneline --all --decorate

    si vous voulez le rajouter en tant qu'alias:

    $ git config --global --add alias.tree "log --graph --oneline --all --decorate"
    $ git tree

    Et si vous voulez un format personnalisé, vous pouvez regarder dans le man de git-log
    pour obtenir par exemple le nom de l'auteur et de la date en plus:

    $ git log --graph --decorate --pretty=format:'%C(auto)%h %C(yellow)[ %C(bold magenta)%cn%C(reset)%C(yellow)|%C(bold white)%ar%C(reset)%C(yellow)]%C(reset)%C(auto) %d%n %s'

    %C(yellow), %C(reset) %C(auto) ... : pour la couleur
    %h : hash du commit
    %cn : nom de l'auteur
    %ar : date du commit
    %d : la décoration (nom des branch qui apparaissent (peut nécessiter le --decorate))
    %n : nouvelle ligne
    %s : message du commit

    Affichage des commit ayant ajouté ou supprimé des fichiers

    De manière simple:
    ajout d'un fichier (première fois qu'il est versionné)

    git log --name-status --reverse -- "sourceFile.c" |head

    suppression d'un fichier (dernière fois qu'il est versionné)

    git log --name-status -- "sourceFile.c" |head

    (attention toutefois, si vous n'avez pas un "D" à côté du nom (par exemple un "M") le fichier existe toujours)

    et de manière compliqué:
    pour avoir une vue global de tous les ajout/suppression:
    affiche (en jaune) le hash du commit suivi des fichier ayant été supprimé (rouge) et ajouté (vert)

    git log --name-status --pretty=format:"%C(yellow)%H%Creset" --diff-filter=AD |GREP_COLORS="mt=32" egrep --color=always "^A.*$|^" |GREP_COLORS="mt=31" egrep --color=always "^D.*$|^"

    Amend d'anciens commit

    commit 589a5252b92bda5c9ab8ddde54ee96b3c185d947
    Author: Nepta <nepta23@gmail.com>
    Date:   Fri Jul 26 09:04:26 2013 +0000
     
        added labyrinth test
     
    commit af07bcf4c1f1b60834f466c2996bdf1690f92867
    Author: Nepta <nepta23@gmail.com>
    Date:   Fri Jul 26 07:02:07 2013 +0000
     
        fix pathFinding algorithm

    oups, vous avez oublié de rajouter le fichier de test du labyrinth?
    ici, c'est le dernier commit donc un simple amend suffit:

    $git add labyrinthTest.c
    $git commit --amend

    vous vous êtes rendu compte qu'en faite l'algo est pas fixé du tout ...
    la solution: fixer le code, crée un nouveau commit, stash des éventuels changement non encore commiter, rebase et enfin poper ce qui à été stasher

    $nano algo.c
    $git add algo.c
    $git commit -m  "fix pathFinding algorithm"
    $git stash
    $git rebase --onto af07bc~1 af07bc
    $git stash pop

    (source : http://www.haypocalc.com/blog/index.php/ )

    De la couleur dans git

    Un peu de couleurs pour égailler vos longue soirées à coder

    $ git config --global --add color.ui true
    $ git status

    Historique de la journée

    En fin de journée, ça peut être intéressant de savoir ce qui à été fait dans un projet:

    $ git shortlog --since=yesterday

    va vous donner un petit récapitulatif des commit de la journée, utile a faire en fin de journée pour savoir ce que les autres ont fait, ou même se rappeler ce vous avez fait dans la journée

    (et l'alias:)

    $ git config --global --add alias.today shortlog --since=yesterday

    Mémento Git

    Bonjour à tous,

    Suite à l'intro sur Git que nous avons donné le 24 octobre dernier, voici comme promis en fichier joint un petit mémento des commandes de base.
    Un tutoriel plus approfondi et détaillé arrive dans les prochains mois (normalement avant janvier).

    Bien sûr, si vous avez la moindre question n'hésitez pas à passer au club ou à rentrer en contact avec nous via notre page facebook !

    Bons commits et à bientôt,

    Kidon.

    Fichier attachéTaille
    PDF icon GIT Memento.pdf173.21 Ko

    compter le nombre d'occurence d'une expression

    $ git grep --color=never -c 'expression' |cut -d ':' -f2 |paste -sd+ |bc

    petit explicatif:

    $ git grep --color=never -c 'expression'

    permet de compter le nombre d’occurrence de 'expression' dans le repo courant
    ensuit, un peu de traitement assez simple, on récupère juste les nombres (nombre d'occurence du mot)

    cut -d ':' -f2

    et enfin, pour faire la somme de tout ça, nous utilisons `bc`, une calculatrice, manque juste a rajouter un '+' entre chaque nombre et ramener ça sur une seul ligne
    chose faire par `paste` (-s pour tout mettre sur une ligne, et -d+ pour remplacer les séparateur par des `+`)

    paste -sd+ |bc

    maintenant un peu plus complexe, je veux pouvoir juste faire:

    $ git count 'expression'

    juste faire un alias ne suffira pas, j'ai besoin d'un paramètre qui devra se placer au début de la ligne...

    l'astuce, faire une fonction:
    (ref: http://stackoverflow.com/questions/3321492/git-alias-with-positional-par...)

    $ git config --global --add alias.count '!f() { git grep --color=never -c $1 |cut -d ':' -f2 |paste -sd+ |bc; }; f'

    LaTeX

    Choisir la bonne font

    Voici un site qui répertorie par catégorie diverse fontes LaTeX :
    http://www.tug.dk/FontCatalogue/

    Je doit avouer que certaines fontes manuscrites (handwritten) sont très réalistes et peuvent être facilement utilisés pour faire passer des documents numériques pour des documents écrits à la main... (cf les profs qui n'acceptent que les notes de cours manuscrites en DST !)

    Logiciels Libres

    Logiciels alternatifs

    Pour ceux qui commencent dans le monde du Libre il peut être intéressant de connaitre les logiciels de remplacement des versions propriétaires (ou quelques logiciels qui peuvent être intéressant) :

    • Internet Explorer : Firefox, Epiphany, Konqueror
    • Outlook : Thunderbird, Evolution
    • Matlab : Octave, Scilab
    • Microsoft Office : OpenOffice, GOO
    • Photoshop : The Gimp, Krita
    • Windows media player : Mplayer, VLC
    • Solitaire/Freecell : Kpatience

    Editeurs de texte graphique :

    • xemacs (pas pour debutant)
    • gedit
    • kate

    Lecteur média :

    • Amarok
    • Mplayer (excellent mais pas d'interface graphique complete)
    • VLC
    • rythmebox
    • banshee
    • Songbird
    • Clementine

    Dessin vectoriel :

    • Inkscape
    • Dia
    • OpenOffice Draw

    Messagerie

    Ici vous trouverez toutes les infos pour papoter, librement, avec les autres membres du club. A vos claviers !

    IRC

    Un salon IRC est à disposition du club, tout le monde peut s'y connecter. Cependant certains pseudos sont enregistrés, donc enregistrez le votre si vous pas qu'il soit pris par quelqu'un d'autre.

    server : irc.rezirc.net
    server : irc.freenode.net
    canal : #clubnix

    Jabber

    Un serveur Jabber est mis à disposition par le club. Pour s'y connecter, il faut être membre du club. Utiliser le mot de passe/login habituel.

    serveur : clubnix.fr
    port : 5222 (TLS)
    salon : clubnix@conference.clubnix.fr (ouvert à tous qu'ils soient ou pas inscrits sur le serveur du club )

    Multimédia

    Extraire le son d'une vidéo

    Plusieurs mannière sont possible :

    mplayer -dumpaudio votre_fichier_video

    Mplayer va enregisitrer le résultat dans stream.dump
    Cepandant dans certains cas le fichier n'est pas lisible (cf man)

    Cette option vous permet également d'enregistrer votre radio préférées.

    ffmpeg -i votre_fichier_video ma_musique.wav

    Faire une miniature de site web avec CutyCapt et ImageMagick

    Voici comment générer des miniatures de site web en ligne de commande avec CutyCapt et convert :

    Installation des outils

    sudo apt-get install imagemagick cutycapt

    Récupération de la capture d'écran

    cutycapt --url=http://www.clubnix.fr --out=clubnix.png

    Génération de la miniature

    # Exemple pour une miniature de 200x200
    convert clubnix.png -resize "200x200^" -gravity NorthWest -crop 200x200+0+0 +repage mini.png

    Résultat :

    Miniature du site web www.clubnix.fr

    Fichier attachéTaille
    Image icon clubnix-mini.png33.34 Ko

    Système

    Vous trouverez ici quelques astuces pouvant être utiles pour un administrateur système.

    Authentification SSH automatique par clé

    Il peut vite devenir très fatiguant de taper son mot de passe à chaque connexion à distance en SSH, surtout lorsque, pour une raison ou une autre, on désire se connecter sur l'ensemble des ordinateurs des salles info au même moment.
    Heureusement, le mot de passe n'est pas le seul moyen d'authentification possible lorsqu'on utilise SSH, qui peut également utiliser l'authentification par clé. Celle-ci a l'avantage d'être bien plus difficile à brute-forcer qu'un simple mot de passe en plus d'éviter d'avoir à le rentrer à chaque fois.
    Le principe est simple, il s'agit de générer une paire clé publique/clé privée, la clé publique étant ajoutée à la liste des clés autorisées sur les ordinateurs sur lesquels on désire se connecter. La clé privée doit être conservée avec précaution, car c'est elle qui est utilisée par SSH pour vérifier l'authenticité de la connexion.
    Maintenant que le principe est en place, procédons.
    Générons la paire clé publique/clé privée à l'aide la commande ssh-keygen :

    [toto@gen2 ~]$ ssh-keygen
    Generating public/private rsa key pair.
     
    Enter file in which to save the key (/home/toto/.ssh/id_rsa): Created directory '/home/toto/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/toto/.ssh/id_rsa.
    Your public key has been saved in /home/toto/.ssh/id_rsa.pub.
    The key fingerprint is:
    b8:e4:ca:37:b9:ef:0d:84:35:17:2d:7c:05:72:66:59 toto@gen2

    Il faut ensuite ajouter la clé publique aux clés autorisées sur le serveur distant.

    ssh-copy-id user@host

    Si la commande ssh-copy-id n'existe pas, il est possible d'utiliser la commande suivante :

    cat ~/.ssh/id_rsa.pub | ssh user@host "cat - >> ~/.ssh/authorized_keys"

    Et voilà !

    Bench Apache

    C'est bien connu, quand on fait quelque chose, c'est pour avoir la plus grosse.
    Pour tester les performances de votre serveur web fraîchement installé et configuré, il existe un petit utilitaire fourni par Apache.
    Celui-ci se trouve dans le paquet apache2-utils sous Debian, et apache-tools sous Gentoo.

    La syntaxe est la suivante :
    ab [options] [http[s]://]hostname[:port]/path
    Quelques options utiles :
    -n : nombre total de requêtes
    -c : nombre de requêtes simultanées

    Pour tester une page avec une requête POST (dans le cas d'un formulaire par exemple) il faut mettre le contenu de la requête post dans un fichier, puis utiliser les paramètres suivant :

    cat login=toto&mdp=titi > post
    ab -p post -T 'application/x-www-form-urlencoded' -n 5000  -c 100 http://host:port/page

    La possibilité de générer les données au format GNUPlot vous permettra de pousser au bout le concours en faisant de jolis graphes.

    Changer de fond toutes les n secondes

    1. j=0
    2.  
    3. for i in `find ~/.fluxbox/backgrounds -maxdepth 1 -type f`
    4. do
    5. nom[$j]=$i
    6. j=$[$j+1]
    7. echo $j $i
    8. done
    9.  
    10.  
    11. while true
    12. do
    13. fbsetbg -f ${nom[$[$RANDOM %$j]]}
    14.  
    15. sleep 5s
    16. done

    ligne 5 : crée le tableau avec toutes les images (chemin)
    ligne 7 : incrémente j

    Comment avoir bash sur les pcs du SMIG?

    C'est très simple il suffit de taper bash dans une console afin de charger le Bourne Again SHell. Mais alors comment on sort de bash ? et bien il suffit d'entrer la commande suivante : exit. Pour charger bash à chaque fois que tu te connectes sur un pc, il suffit d'ajouter la ligne suivante à ton .cshrc, qui est situé à la racine de ton compte (~/.cshrc) exec bash. Pour cela il existes 2 méthodes : ouvrir le .cshrc avec n'importe quel éditeur de texte (surtout pas avec open office) et rajouter la ligne ; ou alors pour les feignants :
    echo exec bash >> .cshrc
    A moins que tu préfère le C-like Shell, bash est quand même plus agréable à utiliser.

    Configuration

    Vous trouverez ici quelques exemples de configuration qui peuvent servir de point de départ pour configurer aux petits oignons son système.

    Xterm

    Mon fichier de configuration pour xterm (~/.Xdefaults)

    XTerm*saveLines:2000
    XTerm*background:black
    XTerm*foreground:green
    XTerm*font:10x20
    XTerm*jumpScroll: off
    XTerm*scrollKey: on
    XTerm*scrollTtyOutput: off
    XTerm*rightScrollBar: on
    XTerm*scrollBar: on

    nano

    Ma conf de nano
    A mettre dans le fichier ~/.nanorc
    .nanorc

    unset autoindent
    set const
    set smooth
    set nohelp
    set nowrap
    set tabsize 4
    set multibuffer
     
    syntax "default"
    color cyan      "#.*"
    color cyan start="/\*" end="\*/"
    color green "//.*"
     
     
    syntax "Java source" "\.java"
    color brightblue start="/\*\*" end="\*/"
    color brightred "\<(boolean|byte|char|double|float|int|long|new|short|this|transient|void|public)\>"
    color red "\<(if|else|while|do)\>"
    color brightblack "\<(break|case|catch|continue|default|finally|for|return|switch|throw|try)\>"
    color cyan "\<(abstract|static|private|class|extends|final|implements|import|instanceof|interface|native|package)\>"
    color brightcyan "\<(true|false|null)\>"
    color brightcyan "public.*\{"
    color brightcyan "private.*\{"
    color blue start="/\*" end="\*/"
    color brightblue "/\*"
    color brightblue "\*/"
    color green "//.*"
    color cyan "\([^\)]*\(" "\([^)]*\)" "\)[^\(]*\)"
     
     
    syntax "Code C" "\.c|\.php"
    #color cyan	"\((.+?)\)"
     
    color cyan "\([^)]*\)"
    color cyan      "#.*"
    color brightred     "\<(int|long|char|float|void)\>"
    color red       "\<(unsigned|signed|struct|typedef)\>"
    color red       "\<(if|else|for|while|do|switch)\>"
    color brightblue    "\<(printf|scanf)\>"
    color brightred     "\<(\;|PRINTF)\>"
    color magenta       "\<(0|1|2|3|4|5|6|7|8|9)\>"
    color brightblack       "(==|!=|%|&)"
    color brightblack       "\<(return|case|break|default)\>"
    color brightblue    start="/\*" end="\*/"
    color brightgreen   "##"
    color green		"INFO"
    color green "//.*"
     
     
    syntax "LaTeX"      "\.tex"
    color cyan          "\\documentclass|\\begin|\\end"
    color brightred     "\\usepackage"
    color magenta       "\\author|\\title|\\date|\\maketitle"
    color brightblack   "\\and"
    color brightgreen   "%.*"
    color brightblue    "\<(abstract|article|letter|book|report|document)\>"
    color brightcyan			start="\\section|\\subsection|\\subsubsection" end="\}"
     
     
    syntax "code Cpp" "\.cpp"
    color blue start="/\*" end="\*/"
    color cyan      "#.*"
    color red     "\<(int|long|char|float|void)\>"
    color red       "\<(unsigned|signed|struct|typedef)\>"
    color brightred       "\<(if|else|for|while|do|switch)\>"
    color green "//.*"

    Détacher un processus

    Vous avez lancé une commande, elle prend plus de temps que prévu et vous aimeriez vous déconnecter de la machine tout en la laissant tourner en arrière plan ?

    Voici comment faire avec Bash ou Zsh. Tout d'abord mettre en pause le processus courant en appuyant sur Control + z. Le processus est alors suspendu. Vous pouvez le relancer au premier plan en tapant fg (foreground) ou en arrière plan en tapant bg (background).

    Il suffit donc le relancer en arrière plan. Mais en l'état actuel si vous vous déconnectez il sera tué car attaché à votre shell, qui sera passé de vie à trépas lors de votre connexion.
    Pour éviter cela il faut demander au shell de renier le processus fils en tapant disown -h (ou simplement disown avec zsh).

    Maintenant vous pouvez vous déconnecter et laisser tourner votre processus pendant ce temps-là.

    Rebonds SSH

    Il peut arriver que pour vous connecter à une machine à distance via SSH, vous soyez obligé de passer par une ou plusieurs machines de rebond avant de pouvoir atteindre votre but.
    Le faire une fois ça va, par contre plusieurs fois devient fastidieux.

    Ce merveilleux outil qu'est SSH vous propose donc une solution pour le faire automatiquement ! Il vous faudra tout de même installer netcat (commande nc) sur les serveurs de rebond.

    Supposons que vous vouliez vous connecter à la machine m1 en passant par m2 puis m3, il suffit d'ajouter les lignes suivantes à la configuration de SSH dans ~/.ssh/config :

    Host m1
    ProxyCommand ssh -q m3 nc m1 22
     
    Host m3
    ProxyCommand ssh -q m2 nc m3 22

    Bien sûr dans ce cas les noms m1, m2 et m3 sont résolubles sur toutes les machines concernées (pour faire simple).
    Pour ne pas avoir à taper plusieurs mots de passe de suite je vous conseille de configurer l'authentification par clé successivement sur chaque machine.

    Reboot on panic

    Linux n'est pas infaillible, et parfois le kernel panique. Or si cela arrive sur un serveur dont la disponibilité est importante, il est plutôt utile que le serveur rédemarre tout seul au lieu de devoir le faire physiquement.

    Pour ce faire il faut modifier le paramètre noyau kernel.panic à l'aide de la commande sysctl.
    sysctl -w kernel.panic=60
    La valeur de cette variable donnant le temps en secondes avant le rédemarrage du système après un kernel panic. Pour que cette valeur soit configurée à chaque démarrage, il suffit d'ajouter la ligne suivante au fichier /etc/sysctl.conf.

    # Reboot on panic
    kernel.panic = 60

    Spécial gentoo

    Nom du paquet auquel appartient un binaire

    Pour récupérer le nom du paquet (atom) auquel appartient un fichier sur votre système, vous pouvez utiliser :

    qfile le_bin

    qfile fait parti de portage-utils

    Il est aussi possible d'utiliser

    equery belongs le_bin

    equery fait partie de gentoolkit

    à noter que portage-utils est écrit en C alors que equery est en python. Je vous laisse juge du plus rapide.

    Tunnel inverse SSH

    Problèmatique : vous êtes sur une machine non accessible directement de l'extérieur, et pourtant, vous voulez pouvoir vous y connecter depuis l'extérieur.

    Moyens : Vous avez un accès SSH sur une autre machine accessible depuis l'extérieur.

    Solution : le tunnel SSH inverse. Il s'agit d'ouvrir un tunnel sur la machine accessible depuis l'extérieur vers votre machine. Comme cela en vous connectant sur la machine ouverte vous pourrez ensuite rejoindre la vôtre (fermée).

    Cela se fait de la façon suivante :

    screen ssh -NTR 1025:localhost:22 host.name

    Cette commande ouvre un tunnel sur la machine distante host.name qui relie le port 1025 sur cette machine au port 22 sur la machine locale.

    Si vous appuyez sur Control+C ou quittez votre terminal, le tunnel sera fermé. Pour le conserver, il est judicieux de lancer la commande précédente dans un screen.

    Il suffit ensuite d'utiliser la commande suivante pour accéder à votre machine.

     ssh user@localhost -p 1025

    Note : le port de départ du tunnel (1025 ici) doit être supérieur à 1024 car en tant qu'utilisateur vous ne disposez pas des privilèges pour écouter sur un port inférieur ou égal à 1024.

    ldapsearch les mails des membres du club

    ldapsearch -h ldapix -b "ou=People,dc=clubnix,dc=org" | grep "^mail:" | cut -d" " -f2 | sort

    de quelqu'un en particulier :

    ldapsearch -h ldapix -b "ou=People,dc=clubnix,dc=org" "uid=login" | grep "^mail:" | cut -d" " -f2

    Useless

    Bouffer du proce

    $ yes

    (paquet coreutils vous devriez l'avoir celui ci)

    Seul utilité trouvé pour l'instant
    hot-babe

    Cette fonctionnalité peut être très utile si tu veux répondre oui ou autre chose aux questions d'un programme.

    Comment dessiner une vache en caractères ASCII

    c'est très simple sous debian :

    apt-get moo

    sous gentoo

    emerge moo

    Comment fermer sa session après un temps donné

    sleep 10m && kill -9 -1

    Attention ne pas faire :

    sleep 10m ; kill -9 -1

    Script qui dit de la marde

    A mettre dans le un fichier .sh et faire "sh lefichier.sh &"
    Ne surtout pas oublier le "&"
    Après un petit clear, et amusez vous en regardant votre meilleurs ami crier au hack de session

    1. phrase_cult[0]="et ben t'es moche !!!"
    2. phrase_cult[1]="tu pu du cul !!!"
    3. phrase_cult[2]=" 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 "
    4. phrase_cult[3]=" laisser les lumière allumées ça tue des poingouin "
    5. phrase_cult[4]=" plop les gens "
    6. phrase_cult[5]=" kikoo lol shinny bisounours "
    7. phrase_cult[6]=" et bip bip bip les gens "
    8. phrase_cult[7]=" 33cl c'est trois fois rien ! "
    9. phrase_cult[8]=" find . -not -wholename \"~/root/down/gmp/*\" -iname \"*\.[ch]\" -exec grep -qi \"sdlnet\" \; -printf \"%s %h/%f\n\" | sort -n "
    10. phrase_cul[9]=" vim .nanorc "
    11.  
    12. while [ true ]
    13. do
    14. sleep $[$RANDOM % 180 + 30]
    15. echo ${phrase_cult[$RANDOM % 10]}
    16. done

    emacs

    Quelques asctuces bien pratiques pour apprendre à mieux utiliser le seul et unique vrai éditeur exsitant (|| !)

    Enjoliver son Emacs sous Gentoo

    Après avoir lancé "emerge emacs" et Emacs lui-même en mode X11, vous trouvez que sa police fait années 80 ? Pas de panique ! Il suffit de relancer l'emerge après avoir ajouté les USE flags xft pour le support des fontes anti-aliasées et gconf, qui comble de la perfection, permettra à Emacs d'utiliser la police système, si vous utilisez un environnement de bureau ami avec Gconf bien entendu, comme Gnome ou Xfce.
    Et voilà ! Emacs semble rentré dans le XXIème siècle !

    Redéfinir des commandes sous emacs

    Cas général

    Dans le fichier de configuration :

    (global-set-key [\C-x\C-v] `compile)

    Evidement il est possible d'utiliser la même commande (M-x global-set-key) dans emacs, mais les changement ne seront plus effectif la prochaine fois qu'il sera ouvert.

    La commande inverse existe également : M-x global-unset-key

    Les touches simples

    Vous avez, dans un élant de folie, fait correspondre la touche espace à une commande et ne pouvez donc plus taper de caractère espace. La solution m'a été donné par bob2 sur #emacs@irc.freenode.net

    < bob2> M-x global-set-key
    < bob2> space
    < bob2> self-insert-command

    Relier emacs au monde extérieur : aka faire des copier coller

    Marre de devoir utiliser votre souris pour faire des clic mollette ou faire des copier dans l'EDITOR ? Il peut également être utilisé pour récupérer une selection qui dépasse une page écran ou passer du texte depuis n'importe quel logiciel.
    xclip qui lave plus blanc que blanc est la solution !

    xclip est un petit utilitaire en ligne de commande qui permet d'utiliser le press-papier.

    Très simple à utiliser pour faire une copie en console par exemple :

     
    echo "plop" | xclip -i 

    Donc sous emacs sélectionner votre région puis :

    M-| xclip -i

    Pour coller :

    C-u M-! xclip -o
    Domaine: 

    shell

    (2*42+7)/44 ?? et en console

    echo $[(2*42+7)/44]

    Ca c'est pour les newbies (renvoie la valeur entière)

    Pour les crapeaux il y a :

    echo "(2*42+7)/44" | bc -l

    (Renvoie un nombre a virgule flottante)

    Ou par exemple :

    echo "scale=1000;4*a(1)"|bc -l

    (calcul les 1000 première décimale de pi, cf man)
    Avec un peu plus de décimales ça peut faire des trucs sympa avec hot-babe (cf astuce manger du proce)

    scale est la variable qui fixe la précision en nombre de décimale.

    bc propose également une invite de commande plus intuitive que de faire des echo.

    Calendrier dans la console

    Utiliser cal du package util-linux

    $ cal
         juin 2008      
    di lu ma me je ve sa
     1  2  3  4  5  6  7
     8  9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30

    Convertir format d'image

    Un des utilitaire du paquet imagemagick
    Pour convertir tous les .gif du répertoire courant en png par exemple :

    mogrify -format png *.gif

    Il y a aussi convert.

    convert *.jpg result.pdf

    Créer un pdf nommé result qui contient une image jpg par page, dans l'odre alphanumérique. Pratique pour réaliser des fichiers pdf à partir de scan...

    Envoyer un mail en bash (et telnet)

    Il y a bien sur la commande mail (du package mailx)

    Mais peut mieux faire :D
    À partir de maintenant ça pourrait presque se retrouver dans la rubrique lokis (s/lokis/useless/)

    Utilisation de telnet et des fifos. Oui il y a plus simple mais ça permet de comprendre comment fonctionne tout ça

    Création des fichiers de pile

    1. $ mkfifo in
    2. $ mkfifo out

    Premier script bash

    1. (while [ true ]
    2. do
    3. cat in
    4. done)|telnet mail.esiee.fr 25 > out

    Oula mais qu'est-ce que ça fait tout ça ?
    while [true] <= boucle infinie
    cat in <= lit tout ce qu'il y a dans in pour le transmette dans le tube | telnet mail.esiee 25
    telnet mail.esiee 25 >out ouvre une connexion sur mail.esiee.fr sur port 25 (smtp) et redirige la sortie dans le tube de sortie.

    Jusque là rien de bien méchant.

    Il ne reste plus qu'à envoyer ce qu'il faut dans le fichier "in".

    1. HELO MAN
    2. MAIL FROM:<trax@esiee.fr>
    3. RCPT TO:<givernao@esiee.fr>
    4. DATA
    5. le contenu du mail
    6. .
    7.  
    8. QUIT
    • Oui il n'y a qu'un seul et unique "L" à hello.
    • l'adresse de l'expéditeur, qui en l’occurrence n'existe pas mais ça ne dérange pas le serveur mail
    • l'adresse du destinataire, là c'est plus embêtant si elle n'existe pas
    • Balise annonçant le corps du mail
    • Corps du message, pour ajouter un sujet, modifier l'adresse de réponse, changer la date du mail... Voir entête MIME
    • Un point "." entre deux retours à la ligne signifie la fin du mail
    • Ne pas oublier de dire au revoir au serveur ;)

    Eviter les rm -fr * désatreux

    $ > -i

    Crée un fichier nommé "-i"

    $ rm -fr *
    rm: détruire fichier régulier vide `plop'?

    Tout bêtement ça fait :

    rm -fr -i plop

    Kicker quelqu'un d'une machine

    Bien évidement il faut avoir les droits pour (rien de mieux qu'être root pour ça)

    pkill -5 -u lokis

    pkill envoie le signal donnée au processus choisis

    • -5 : envoie le signal 5 (on peut faire plus brutale avec le signal 9)
    • -u lokis : sélectionne l'utilisateur lokis

    En somme ça envoie le signal 5 à tous les processus de lokis
    Tous ses programme se ferme y compris sa session :)

    Le shell en couleur c'est plus plus mieux

    Voici une petite fonction bash qui permet d'afficher les principales couleurs de base à savoir noir, rouge, vert, jaune, violet, cyan et blanc.

    Mais il faut comprendre comment il est possible de mettre des couleurs en bash.
    on commence toujours par une séquence d'échappement : \e[ (ou \033[); il faut aussi indiquer qu'on termine la séquence avec le caractère "m" (sans les quotes).
    Exemple :

    echo -e "\e[0;33m blabla"

    devrait afficher blabla en jaune (enfin jaune c'est approximatif). Ici 0;33 correspond à la couleur jaune justement.

    Sans plus attendre le script qui affiche les couleurs de base :

    black='\e[0;30m' # Black - Regular
    red='\e[0;31m' # Red
    green='\e[0;32m' # Green
    yellow='\e[0;33m' # Yellow
    blue='\e[0;34m' # Blue
    purple='\e[0;35m' # Purple
    cyan='\e[0;36m' # Cyan
    white='\e[0;37m' # White
    bldblack='\e[1;30m' # Black - Bold
    bldred='\e[1;31m' # Red
    bldgreen='\e[1;32m' # Green
    bldyellow='\e[1;33m' # Yellow
    bldblue='\e[1;34m' # Blue
    bldpurple='\e[1;35m' # Purple
    bldcyan='\e[1;36m' # Cyan
    bldwhite='\e[1;37m' # White
    ublack='\e[4;30m' # Black - Underline
    ured='\e[4;31m' # Red
    ugreen='\e[4;32m' # Green
    uyellow='\e[4;33m' # Yellow
    ublue='\e[4;34m' # Blue
    upurple='\e[4;35m' # Purple
    ucyan='\e[4;36m' # Cyan
    uwhite='\e[4;37m' # White
    bblack='\e[40m'   # Black - Background
    bred='\e[41m'   # Red
    bgreen='\e[42m'   # Green
    byellow='\e[43m'   # Yellow
    bblue='\e[44m'   # Blue
    bpurple='\e[45m'   # Purple
    bcyan='\e[46m'   # Cyan
    bwhite='\e[47m'   # White
    rst='\e[0m'    # Text Reset
     
    function colors
    {
        echo -e "\t 0\t 1\t 4\t"
        echo -e "30\t ${black}black${rst}\t ${bldblack}black${rst}\t\
    ${ublack}black${rst}\t ${bblack}black${rst}"
        echo -e "31\t ${red}red${rst}\t ${bldred}red${rst}\t\
    ${ured}red${rst}\t  ${bred}red${rst}"
        echo -e "32\t ${green}green${rst}\t ${bldgreen}green${rst}\t\
    ${ugreen}green${rst}\t  ${bgreen}green${rst}"
        echo -e "33\t ${yellow}yellow${rst}\t ${bldyellow}yellow${rst}\t\
    ${uyellow}yellow${rst}\t  ${byellow}yellow${rst}"
        echo -e "34\t ${blue}blue${rst}\t ${bldblue}blue${rst}\t\
    ${ublue}blue${rst}\t  ${bblue}blue${rst}"
        echo -e "35\t ${purple}purple${rst}\t ${bldpurple}purple${rst}\t\
    ${upurple}purple${rst}\t  ${bpurple}purple${rst}"
        echo -e "36\t ${cyan}cyan${rst}\t ${bldcyan}cyan${rst}\t\
    ${ucyan}cyan${rst}\t  ${bcyan}cyan${rst}"
        echo -e "37\t ${withe}white${rst}\t ${bldwhite}white${rst}\t\
    ${uwhite}white${rst}\t  ${bwhite}white${rst}"
    }

    On peut le mettre dans son .bashrc et taper colors au prompt pour voir la liste des couleurs.
    Évidemment j'aurais plus faire une fonction plus jolie, mais bon pas envie.

    Comment lire le "tableau" :
    En haut nous avons la fonte utilisée : 0 pour normal, 1 pour gras, 4 pour souligné et rien pour la couleur de fond.
    Au début de chaque ligne le numéro correspondant à la couleur.
    Enfin la séquence "\e[0m" permet de remmettre le formatage du texte à zéro.

    Lister les id existants

    getent passwd |cut -f3 -d: | sort -n

    Qui est loggé sur la machine

    Trois commandes au choix

    finger
    who
    users
    w 

    J'ai une petite préférence pour finger (package netkit-fingerd)
    "w" permet de savoir qui fait quoi

    Remplacer dans des fichiers

    Utiliser

    replace plop bonjour plip salut -- lefichier

    qui remplacera plop par bonjour et plip par salut.
    Bien sur il n'est pas obligé de mettre deux paires ; il est également possible d'en mettre plus que deux.

    Combiné avec la commande find ça peut donner un truc intéressant :)

    find . -iname "*\.[ch]" -exec replace furet trax -- '{}' \; 

    Mais replace c'est quand même pour les petits joueurs : les presque crapeaux utiliseront sed qui accepte les expressions régulière

    find . -iname "*\.[ch]" -exec sed -i"s/furet/trax" -- '{}' \; 
    • -i :remplace directement dans le fichier
    • "s/furet/trax/" : remplace furet par trax

    Se reveiller en musique

    TUUUUUUUUUUUUTE TUUUUUUUUUUUUUUUTE TUUUUUUUUUUUUTE

    Qu'est ce que ça peut être désagréable de se faire reveiller par le son argneux du reveil offert par votre maman (histoire que vous soyez en cours le matin), Par contre se faire reveiller par Korn ça permet de commencer une bonne journée :

    Solutiion :
    Utiliser cron (gentoo conseil vixie-cron)

    Il faut savoir que cron a un accès très réduit au variables d'environnement

    Utiliser

    crontab -e

    Pour se reveiller a 10h tous les matins

    #min | hour | (jour du mois) | mois | (jour de la semaine)
    0 10 * * * /usr/bin/playsound /home/trax/Desktop/zikC/era/era1/01_-_Ameno_remix.flac

    Verrouiller un tty ou un terminal graphique

    On utilise vlock, qui a beaucoup d'avantages par rapport à ses concurents.
    On verrouille donc sont tty avec la commande suivante :

    0 furet@woodstock ~ $ vlock
    This TTY is now locked.
     
    Please press [ENTER] to unlock.
    furet's Password:
    vlock: Authentication failure
    root's Password:

    Pour déverrouiller le tty il suffit d'entrer son password et le tour est joué.
    Note :

  • Le root peut déverrouiller le tty
  • Cette astusce marche aussi avec des terminaux graphiques comme xterm, gnome-term, konsole… mais présente un intérêt moindre, à moins d'être fan des openroot xterm…
  • rm sans faire de bêtises

    Effacer un fichier n'est pas un gros soucis depuis une interface graphique. Par contre depuis la console c'est une autre histoire puisque les fichiers sont définitivement perdus, sans passer par la case cobeille. Je vous propose donc une commande rm un peu plus sûre, qui va déplacer les éléments dans le /tmp/ (ou tout autre dossier considéré comme dossion “poubelle”) plutôt que de les supprimer sans merci, de façon journalisée.

    Le script

    Le bash c'est pas mon truc. Cette fois, ce sera du perl. Pour cela il faut vérifier que perl soit bien installé (pas forcément besoin d'une version récente). On peut le vérifier par la commande suivante :

    $ perl -v

    Le script est fourni en pièce jointe.
    Personnellement, redéfinir la commande rm ne me plaît pas trop, j'ai donc nommé le script “rl”, qui est tout aussi facile à tapper que rm et qui a le mérite de conserver ma commande rm en cas de bug caché de rl.

    Par défaut rl déplace les éléments dans /tmp, qui se vide à chaque démarrage. Pour changer ce dossier, il faut modifier la ligne 5 du script :

    my $trash="/tmp";

    Pour faire référence à la home de l'utilisateur pour changer le dossier de destination (le dossier poubelle), je conseille de préférer l'écriture “/home/vulpo/Trash” plutôt que “~/vulpo/Trash”, cette syntaxe n'étant pas géré par le script. Exemple :

    my $trash=”/home/vulpo/Trash”

    Bien sûr, il faut posséder les droits d'accès en écriture sur ce dossier.

    Utilisation

    Le script se lance comme un programme ordinaire. Cependant, pour pouvoir lancer le script seulement en tappant :

    $ rl dossiersaeffacer

    Il faut que le PATH sache où trouver le script (normal, me direz-vous). La commande suivante indique les dossiers connus du PATH, séparés par ':' :

    $ echo $PATH

    Si un des dossiers connus du PATH vous est accessible, par exemple si vous avez les droits root pour écrire dans le dossier /usr/bin, c'est là qu'il faudra déplacer le script rl.
    Si aucun des dossiers n'est accessible, vous devez étendre le PATH sur un autre dossier. On peut par exemple ajouter le dossier ~/Scripts au PATH, où seront déposés tous vos scripts.

    $ mkdir ~/Scripts
    $ export PATH=~/Scripts:$PATH

    Puis déplacer rl dans le dossier ~/Scripts.
    Ne pas oublier de disposer des bons droits pour le script :

    $ chmod /usr/bin/rl 755 #dans le cas où rl est dans /usr/bin

    Sans quoi bash peut ne pas réussir à exécuter le script.

    Exemples

    L'exécution du script est tout à fait banale. Exemples :

    $ rl fichier #fonctionne aussi avec sudo
    $ rl test/* #le script accepte les wildcards
    $ rl -v test/fichier #l'option -v pour activer le mode verbose (affichage)
    $ rl -h #affiche l'aide

    Conclusion

    Rl est plus sécurisé que rm parce qu'il ne supprime pas les dossiers, et qu'il propose une gestion des fichiers journalisée. Si le dossier de destination n'est pas le /tmp, ou que le système n'est pas destiné à être redémarré régulièrement, il peut être judicieux d'archiver automatiquement le dossier poubelle, en couplant le script avec un cron par exemple.
    Si jamais vous trouvez des bugs ou si vous avez des conseils sur le design du code, je suis tout à fait intéressé !

    Domaine: 
    Fichier attachéTaille
    Plain text icon Script perl rl. A renommer en "rl".1.73 Ko

    telnet

    Pourquoi ?

    Comment utiliser les protocoles les plus courant avec telnet.
    Pleins de raisons, en voici deux qui me semble pas trop mauvaise :

    1. Comprendre comment ça fonctionne
    2. Si si mine de rien de temps en temps ça permet de dépanner

    Sinon la plupart du temps utiliser un client qui va bien est bien plus simple.

    Comment ?

    J'utilise le telnet du paquet netkit-telnetd
    Vous pouvez aussi vous faire le votre dans n'importe quel langage, il existe d'ailleurs tout ce qu'il faut sur ce site pour faire ça.

    Comment je sais tout ça ?

    La première source d'information sont les rfc (documentation officiel des protocoles)
    Pour ceux qui n'aiment pas la langue de Shakespear un site présentant quelques rfc traduite en dans celle de Molière.
    abdrfc.free.fr

    Et sinon il aussi possible d'utiliser sont client habituel (par exemple firefox pour http, irssi pour irc...) et de voir ce qu'ils se racontent avec les serveurs en question.

    Pour cela soit émuler un serveur avec telnet... Un peu plus compliqué. Un coup on joue le serveur => regarde ce que le client dit, un coup on joue le client en envoyant ce qu'avait envoyé au "vrai client" au coup précédent.

    Ou beaucoup plus simple utiliser un sniffer : Wireshark (anciennement Ethreal) ou tcpdump

    HTTP en telnet

    Comment telecharger une page :

    1. $ telnet clubnix.fr 80
    2. GET / HTTP/1.1
    3. Host:clubnix.fr

    Vous l'aurez compris le "/" à la ligne 2 correspond à l'index de la base du site, pour avoir la page de ce tuto il aurait fallu mettre "/node/182"

    Envoyer un formulaire

    Méthode POST

    1. $ telnet clubnix.fr 80
    2. POST /~trax/php/plop.php HTTP/1.1
    3. Host: clubnix.fr
    4.  
    5. plop=salut

    (ne pas oublier le saut de ligne a la ligne 4)

    Méthode GET

    1. telnet clubnix.fr 80
    2. Trying 147.215.81.100...
    3. Connected to clubnix.fr.
    4. Escape character is '^]'.
    5. >GET http://clubnix.fr/~trax/php/plop.php?plop=bonjour HTTP/1.1
    6. >Host:clubnix.fr
    7. >

    IRC avec telnet

    S'identifier

    1. $ telnet irc.rezirc.net 6667
    2. USER plop les gens trax
    3. NICK trax

    Envoyer rejoindre un salon

    1. JOIN #clubnix

    (sans / devant le JOIN)

    Envoyer un message sur un salon

    1. PRIVMSG #clubnix :plop les gens

    (les ":" servent a dire qu'il y aura plus d'un mot envoyé, pas mal de serveur font passer la phrase entière quand même)

    Envoyer un message a un utilisateur

    1. PRIVMSG le_nick :ramènes toi sur jabber !!!

    Quitter un salon

    1. PART #clubnix :bye touS le monde

    Quitter le serveur

    1. QUIT

    Quitter

    1. PRIVMSG le_nick :ramene toi sur jabber !!!!

    Pour plus d'information voir la rfc 1459

    Mail (smtp) avec telnet

    1. Le protocole utilisé pour envoyer un mail est le smtp => première chose à faire : trouver un serveur smtp qui veuille bien de vous. Vous pouvez prendre celui de votre FAI, de votre école , ou demander a votre meilleurs (et seul ami) google. Attention certains serveurs ont une liste limité d'ip : si vous êtes chez moos et essayez d'utiliser le smtp de mamadou, il vous jettera !
    2. Vous avez votre serveur et il vous aime bien. Le protocole smtp utilise le port 25

      1. $ telnet smtp.nexitepas.fr 25
      2. Trying 147.215.1.3...
      3. Connected to mail.esiee.fr.
      4. Escape character is '^]'.
      5. 220 smtp.nexitepas.fr

      Sympa ça cause

    3. Commencer par les politesses d'usage : dire bonjour

      1. >HELO MAN
      2. 250 mail.esiee.fr

      (les lignes précédés d'un ">" sont celles que vous devez taper, les autres sont les réponses du serveur)

      Oui il n'y a qu'un "L" a HELO
      MAN ou n'importe quoi

    4. Qui suis-je ? Et à qui envoie t on le mail ?

      1. >MAIL FROM:<trax@clubnix.fr>
      2. 250 2.1.0 Ok
      3. >RCPT TO:<trax@clubnix.fr>
      4. 250 2.1.5 Ok

      MAIL FROM : adresse de l'expéditeur
      RCPT TO : adresse du destinataire

    5. Corps du message :

      1. >DATA
      2. 354 End data with <CR><LF>.<CR><LF>
      3. >bonjour les gens,
      4. >ceci est un mail test
      5. >@+
      6. >trax
      7. >.
      8. 250 2.0.0 Ok: queued as 1C6A719A25

      La ligne 2 vous indique que pour finir l'envoie du mail il faudra insérer un retour chariot retour a la ligne un point "." et encore le couple chariot retour a la ligne
      (en gros appuyer sur enter "." enter")

      Le serveur répond à la ligne 8 qu'il a bien enregistrer votre mail sous le numéro de série "1C6A719A25"

    6. Finir par une dernière politesse : dire au revoir !

      1. >QUIT
      2. 221 2.0.0 Bye

    Pour plus d'information lire les rfc qui vont bien ! (pour commencer RFC 821)