Aller au contenu | Aller au menu | Aller à la recherche

Krusaf's Blog

samedi, juin 6 2009

Identifier des fichiers binaires sous Linux

A priori, on pourrait se baser sur la commande file qui analyse le fichier donné en paramètre pour indiquer de quel type de fichier il s'agit. Mais c'est loin d'être exploitable (pour moi en tout cas). file peut retourner énormément de type de fichier et ça finit par ne plus être exploitable.

Bref, grep (sous Linux et non Unix :/) permet de trouver les binaires via la commande : grep -LIR "" dossier Par contre il retourne aussi les fichiers vides donc suffit de les virer et on obtient la liste des binaires.

Exemple :

krusaf@zeus:~/tmp2$ ll
total 28
-rwx--x--x 1 krusaf krusaf 6266 jun  6 01:06 exe
-rw------- 1 krusaf krusaf    7 jun  6 01:05 fichier_texte
-rw------- 1 krusaf krusaf    0 jun  6 01:05 fichier_vide
-rw------- 1 krusaf krusaf 6294 jun  6 01:12 popom
-rw------- 1 krusaf krusaf   74 jun  6 01:06 source.c
-rw------- 1 krusaf krusaf   13 jun  6 01:15 toto.sh

exe est le binaire (compilation de source.c). fichier_texte est un ... fichier texte, bravo ! fichier_vide ... on s'est compris. popom contient du texte auquel j'ai concaténé le binaire exe. toto.sh est un shell.

krusaf@zeus:~/tmp2$ grep -RLI "" .
./exe
./popom
./fichier_vide

Ca me retourne bien mes fichiers binaires + le fichier vide.

Donc pour trouver seulement mes fichiers bnaires, Je vais utiliser le grep que je redirig dans un fichier. Suivi d'un find pour trouver les fichiers vides que je redirige aussi dans un fichier. Et à l'aide de ces 2 liste et d'un grep, le tour sera joué ;)

krusaf@zeus:~/tmp2$ grep -RLI "" . 2>&1 | tee /tmp/binaire_plus_vide
./exe
./popom
./fichier_vide
krusaf@zeus:~/tmp2$ find . -type f -empty 2>&1 | tee /tmp/vide
./fichier_vide
krusaf@zeus:~/tmp2$ grep -v -f /tmp/vide /tmp/binaire_plus_vide
./exe
./popom

Voilà ;)

Pour ce qui veulent une fonction, j'ai codé ça vite fait ...

krusaf@zeus:~$ cat binaire.sh

function find_binary_files ()
{
  # $1 = dossier
  dossier="$1"

  if [ -d "$dossier" ]
  then
    grep -RLI "" "$dossier" > /tmp/binaire_plus_vide.$$
    find "$dossier" -type f -empty > /tmp/vide.$$
    grep -v -f /tmp/vide.$$ /tmp/binaire_plus_vide.$$
    \rm /tmp/binaire_plus_vide.$$ /tmp/vide.$$
  fi
}
krusaf@zeus:~$ . binaire.sh
krusaf@zeus:~$ find_binary_files tmp2
tmp2/exe
tmp2/popom

vendredi, mai 8 2009

Monter un dossier via ssh

sudo apt-get install sshfs mkdir tmp sshfs login_dune_autre_machine@autre_machine:dossier_a_monter tmp

La même chose sous windows : http://www.jpfox.fr/?post/2008/09/18/233-connecter-un-dossier-a-une-unite-windows-par-ssh Pour aller plus loin (montage auto ...)

PS : toujours dans la catégorie mémento pour ma pomme ^^

jeudi, novembre 13 2008

Soutenez l'april

Je viens d'équiper le blog d'un nouveau widget concernant l'APRIL. Ils ont pour objectif actuel d'atteindre les 5000 membres avant la fin de l'année et à mon avis, ça va être chaud ;)

Mais concrètement, c'est quoi l'april ?

L'April est une association qui a pour but la promotion et la défense du logiciel libre dans l'espace francophone. À ce titre, elle entretient depuis le début des rapports étroits avec la Free Software Foundation, et traduit depuis longtemps la section philosophie du projet GNU.

Je vous invite à lire l'article sur wikipedia, car ils expliquent bien mieux que moi ;) et je vous invite vivement à adhérer ! Pour moi, ça fait déjà 2 ans ;)

Promouvoir et soutenir le logiciel libre

dimanche, novembre 9 2008

Connexion ssh sans mot de passe

Il s'agit juste d'une aide mémoire perso :)

ssh-keygen
eval `ssh-agent -s`
ssh-add
ssh-copy-id login@hostname 

Pour les explications, c'est ici.

Ripper un tas de CD sans se prendre la tête (rip_the_hell)

J'ai déjà fait un shell pour ripper un CD en mp3/ogg ou les 2. Le shell en question récupère les informations via une base cddb, pratique ^^ Et j'ai à présent créer une surcouche pour ripper en continu tout plein de CD.

Lire la suite...

dimanche, septembre 28 2008

La variable PS1 (prompt)

La variable d'environnement PS1 est affichée à chaque ligne de commande tapée, il s'agit du prompt de base :

krusaf@zeus:~$ 

Dans l'exemple ci-dessus, on distingue qu'elle affiche le_login@la_machine:le_chemin_courrant. Cette variable est personnalisable. Pour afficher l'exemple cité, la variable PS1 est égale à "\u@\h:\w\$ ". Sur certains systèmes, le \u \h ... ne sont pas interprétés. On pourrait également mettre : export PS1="\$USER@\$HOSTNAME:\$PWD \$ " pour obtenir le même prompt.

Il est important de précéder les caractères $ de \ pour ne pas qu'ils soient interprétés car sinon le prompt deviendrait statique (exemple) :

krusaf@zeus:~$ export PS1="$USER@$HOSTNAME:$PWD $ "
krusaf@zeus:/home/krusaf $ cd ..
krusaf@zeus:/home/krusaf $ pwd
/home
krusaf@zeus:/home/krusaf $ export PS1="\$USER@\$HOSTNAME:\$PWD \$ "
krusaf@zeus:/home $ cd
krusaf@zeus:/home/krusaf $ pwd
/home/krusaf 

Mais il est possible d'intégrer de la couleur. Il suffit de rajouter des séquences d'échappement.

Couleur : Texte-Arrière-plan

  • Noir : 30- 40
  • Rouge : 31-41
  • Vert : 32-42
  • Jaune : 33-43
  • Bleu : 34-44
  • Magenta : 35-45
  • Cyan : 36-46
  • Blanc : 37-47

Voici la variable PS1 que j'utilise : export PS1="[\033[0;32;40m\$USER\033[0m@\$HOSTNAME:\$PWD \$ "

On distingue la séquence d'échappement avec le code couleur vert en premier, suivi du login puis encore d'une séquence d'échappement pour enlever la couleur. Cela écrirait donc login en vert suivi de @la_machine:chemin_courant. une chose qui peut être pratique est de mettre le login utilisateur en vert mais pour l'admin, le mettre en rouge.

A vos claviers ;)

mercredi, août 27 2008

Installer Flash 10 rapidement sous ubuntu

Encore un petit shell pour aider les débutants ;) J'ai suivi les explications du site de Korben, rien de plus, rien de moins. Je teste évidemment tous mes shells avant d'en faire profiter.

install_flash10.shCe shell n'a par contre été testé que sur ubuntu Hardy.

mercredi, mai 14 2008

Modifier les couleurs de la commande ls

La commande ls accepte l'option -color qui permet de repérer plus facilement les fichiers en fonction de leurs types. La commande ls --color permet d'activer les couleurs simplement (sans parler d'un éventuel alias). (Des alias existent par défaut sur ubuntu dans le fichier ~/.bashrc)


Jusque là tout va bien mais parfois les couleurs ne sont pas des plus aisées à lire lorsque son écran est à contre jour. Bref,on peut les modifer sans trop de difficultés.

Pour obtenir la configuration courante :
$ dircolors -p > ~/.ls_couleur

La commande dircolors permet de lister la configuration des couleurs. Vous pouvez éditer le fichier ~/.ls_couleur que nous venons de créer.

Il existe deux façons d'associer une couleur à un fichier. La première consiste à déterminer une couleur en fonction du type de fichier. Les types valides sont les suivants :

NORMAL
: il ne s'agit pas d'un type mais plus exactement de la valeur par défaut

FILE
: fichier normal

DIR
: répertoire

LINK
: lien symbolique

FIFO
: tuyaux

SOCK
: socket

BLK
: fichier périphérique en mode bloque

CHR
: fichier périphérique en mode caractères

ORPHAN
: lien symbolique orphelin (pointant vers un fichier inexistant)

EXEC
: fichier possédant une permission d'exécution

FILE
00 # Fichiers normaux sans attribut spécifique

DIR
01;34 # Répertoire en gras, couleur bleue

.tar
01;31 # Fichiers TAR en gras, couleur rouge

.tgz
01;31 # idem

.arj
01;31 # idem

Les codes d'attributs :

00=aucun, 01=gras, 04=souligné, 05=clignotant, 07=inversé, 08=caché

Les couleur d'avant plan :

30=noir, 31=rouge, 32=vert, 33=jaune, 34=bleu, 35=magenta, 36=cyan, 37=blanc

Les codes de couleurs d'arrière plan :

40=noir, 41=rouge, 42=vert, 43=jaune, 44=bleu, 45=magenta, 46=cyan, 47=blanc

Il est possible de combiner plusieurs de ces codes comme dans notre exemple pour obtenir plus de couleurs (gras + couleur).

Une fois le fichier de configuration personnalisé, il faut le faire interpréter par l'utilitaire dircolors. Ainsi, nous pourrons obtenir la définition de la variable d'environnement LS_COLORS dont ls se sert.

Tapez la commande suivante :

$ dircolor ~/.ls_couleur

$ LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;33:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.deb=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.mpg=01;37:*.avi=01;37:*.gl=01;37:*.dl=01;37:';

$ export LS_COLORS

Et le tour est joué !

$ eval `dircolors ~/.ls_couleur`

Cette ligne devra être incluse dans votre fichier .profile (ou .bashrc ou ncore .bash_profile selon votre distribution/configuration).



jeudi, février 21 2008

La commande pax

Tout le monde ou presque connaît la commande tar et gzip. Oui elles sont pratiques et très utilisées. Cependant, quant-on travaille dans des environnements très hétérogènes, on se heurte régulièrement à des problèmes de compatibilités des différents formats :

  • Le tar sun n'est pas compatible avec le tar GNU
  • Un fichier créé avec un tar GNU 1.14 a de fortes chances d'être mal "détarré" par un tar GNU 1.13
  • ...

Mais il existe une solution méconnue : la commande pax ! Cette commande permet de créer des archives et assure la compatibilité même entre différents systèmes (SUN,linux ...).

Exemple type :

krusaf@ares:~$ pax -w photoblog > /tmp/test.pax 
krusaf@ares:~$ cd /tmp
krusaf@ares:/tmp$ ls photoblog
ls: photoblog: Aucun fichier ou répertoire de ce type
krusaf@ares:/tmp$ cat test.pax | pax -r
krusaf@ares:/tmp$ ls photoblog/
00014.jpg           blog_panorama_aubrac.jpeg     _MG_0313.xcf
00014.xcf           blog_saut_de_la_mounine.jpeg  _MG_0386.xcf
00048.xcf           blog_ttiffouille.jpeg         _MG_0393.xcf
00085.xcf           GuiGui2.jpg                   _MG_0474.jpeg
blog_00014.jpg      GuiGui.jpg                    _MG_0474.xcf
blog_00048.jpeg     IMG_0015.CR2                  Moto.jpg
blog_00085.jpeg     IMG_0015.jpeg                 panorama_aubrac.xcf
blog_IMG_0015.jpeg  IMG_0120_2.jpeg               pont_st_pierre.jpeg
blog_MG_0313.jpeg   IMG_0120_2.xcf                pont_st_pierre.xcf
blog_MG_0386.jpeg   IMG_0120.xcf                  result.xcf
blog_MG_0393.jpeg   IMG_0132.jpeg                 ttiffouille.jpeg
blog__MG_0474.jpeg  IMG_0132.xcf                  ttiffouille.xcf

samedi, novembre 24 2007

GPG Error & APT

En ayant fait un "sudo apt-get update", vous êtes peut-être tombé sur l'erreur suivante :

W: GPG error: http://download.tuxfamily.org feisty Release: Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 2D6CFB44DD800CD9
W: Vous pouvez lancer « apt-get update » pour corriger ces problèmes.

Ce n'est qu'un problème de signature qui peut être facilement arrangé en ajoutant la signature au système apt (on peut dire ça comme ça ? )

La clé est affichée dans le message d'erreur : 2D6CFB44DD800CD9 Pour ajouter la clé, voici la commande à taper :

krusaf@ares:~$ gpg --recv-key 2D6CFB44DD800CD9
gpg: requête de la clé DD800CD9 du serveur hkp subkeys.pgp.net
gpg: clé 81836EBF: clé publique « Treviño (3v1n0) <trevi55@gmail.com> » importée
gpg: 3 marginale(s) nécessaires, 1 complète(s) nécessaires, modèle
de confiance PGP
gpg: profondeur: 0  valide:   2  signé:   0
confiance: 0-. 0g. 0n. 0m. 0f. 2u
gpg: la prochaine vérification de la base de confiance aura lieu le 2011-10-09
gpg: Quantité totale traitée: 1
gpg:               importée: 1

Par défaut, ça marhe chez moi mais vous aurez peut-être besoin de spécifier le serveur de clé :

krusaf@ares:~$ gpg --keyserver pgpkeys.mit.edu --recv-key 8BB73F9E1D59E694
gpg: requête de la clé 1D59E694 du serveur hkp pgpkeys.mit.edu
gpg: clé 1D59E694: clé publique « Cyril Lavier (Davromaniak) <cyril.lavier@gmail.com> » importée
gpg: Quantité totale traitée: 1
gpg:               importée: 1

II ne reste plus qu'a ajouter la clé au niveau d'apt :

krusaf@ares:~$ gpg -a --export 2D6CFB44DD800CD9 | sudo apt-key add -
OK

- page 1 de 2