Le blog de Fatiha

Une geek de plus !

Gagnez du temps avec explainshell, vos lignes de commandes shell décortiquées

 

Hier, j’ai lu sur twitter :

Je suis allée voir sur le site explainshell et j’ai été agréablement surprise. En effet, si vous tapez une ligne de commande, le site vous renvoie une explication détaillée de la commande ainsi que des options utilisées. De plus, si vous utilisez une succession de commandes séparées par des « pipes », le site le comprend aussi.

Passons à la démo :

exemple 1 commande shell

Un autre exemple (décomposé en 2 sous-commandes pour plus de lisibilité) :

exemple 2a commande shell

exemple 2b commande shell

 

Comment splitter un fichier volumineux en plusieurs sous-fichiers sous Linux ?

 

Parfois, nous avons besoin d’analyser le contenu de fichiers volumineux sous Linux. Nous utilisons alors des commandes shell telles que awk, grep, cut, … Le problème c’est que cela prend énormément de temps et énormément de ressources. Du coup il est préférable des fois de découper un fichier volumineux en plusieurs sous-fichiers d’une taille précise afin de l’analyser plus rapidement et plus facilement.

Voici la commande :

split -b100m -d monFichier partie

Cela donnera N fichiers de 100Mo chacun avec comme nom : partie1…..partieN.

En savoir plus sur la commande split.

Comment utiliser une variable shell dans awk ?

 

Merci Google encore une fois ! Je cherche depuis une bonne demi-heure comment faire pour afficher une variable shell dans awk et je tombe sur un forum ubuntu qui me donne la réponse. Je suis trop contente !

Il suffit d’utiliser l’option -v et de passer en paramètre la valeur de la variable shell que l’on souhaite utiliser.

Cf. un exemple ci-dessous :

Je parse un fichier et j’affiche la ligne qui m’intéresse ainsi que la variable shell que j’aurai créée au préalable. C’est très utile quand on manipule plusieurs fichiers et qu’on veut afficher une colonne du fichier d’origine et une colonne du fichier destination et ce en une ligne.

awk -v VAR= »$myShellVariable » ‘/^MY_PATTERN/ { print $1 « ; » VAR }’ $myFile

Source : forum Ubuntu

Commande oerr sous Linux

 

Quand vous avez une erreur Oracle et que vous souhaitez avoir une explication sur la cause de cette erreur. Vous pouvez utilisez la commande oerr sous Linux. Elle vous indique aussi comment corriger votre erreur. Ci-dessous quelques exemples :

Si vous avez les erreurs :
SP2-1503: Unable to initialize Oracle call interface
SP2-0152: ORACLE may not be functioning properly

Il vous suffira de taper les commandes pour obtenir plus d’explications :

oerr SP2 1503
01503,0, « Unable to initialize Oracle call interface\n »
// *Cause:  Indicates a library used by SQL*Plus to communicate with
//          the database failed to initialize correctly.
// *Action: Check that the Oracle environment or registry entries are
//          consistent and correct.  If using the SQL*Plus Instant Client
//          make sure the SQL*Plus and Oracle libraries are from the
//          same release. Make sure you have read access to the libraries.

oerr SP2 0152
00152,0, « ORACLE may not be functioning properly\n »
// *Cause:  Unable to initialize a session to the Oracle instance.
// *Action: Make a note of the message and the number, then contact
//          the Database Administrator.

Si vous avez des erreurs de type ORA-, vous suivez le même principe :
oerr ORA 0001
00001, 00000, « unique constraint (%s.%s) violated »
// *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
//         For Trusted Oracle configured in DBMS MAC mode, you may see
//         this message if a duplicate entry exists at a different level.
// *Action: Either remove the unique restriction or do not insert the key.

Pour pouvoir accéder à cette commande, il faut vous connecter en oracle ou bien avoir toutes les variables d’environnement positionnées (ORACLE_HOME, LD_LIBRARY_PATH…).

Comment décompresser une archive à partir d’un répertoire donné avec tar ?

 

Cela vous est forcément déjà arrivé, vous avez créé une archive à partir de la mauvaise arborescence. Le problème, c’est que c’est une archive très volumineuse (plusieurs Go)et que cela va vous prendre du temps de relancer le tar.

Dans ce cas, si vous avez la bonne version de tar, vous pouvez utilisez l’option –strip-components. Comment ça fonctionne ?

Voilà ce dont je dispose :
[fatiha@monServeur:~] tar -tvzf monArchive.tar.gz
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/test2/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/test2/test3/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/test2/test3/chemin/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:46:07 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:02 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file1
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:03 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file2
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:05 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file3
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:07 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file4

Et ce que je souhaite obtenir :
/REP_initial/……

Dans ce cas, je me positionne au niveau du bon répertoire et je lance la commande :
tar –strip-components 2 -xvf /mnt/fatiha/monArchive.tar.gz

(astuce trouvée par mon collègue Ahmed, merci !)

Comment récupérer l’architecture d’un rpm sous Linux Redhat ?

 

[fatiha@monServeur]# rpm -q –qf ‘%{NAME}-%{VERSION}(%{ARCH})\n’  php-mysql-4.1.2-2.19
php-mysql-4.1.2(i386)

Voilà ce qu’on peut trouver dans man rpm à ce sujet :

QUERY-OPTIONS
[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump] [--filesbypkg]  [-i,--info]  [--last]  [-l,--list]  [--pro­
vides] [--qf,--queryformat QUERYFMT] [-R,--requires] [--scripts] [-s,--state] [--triggers,--triggerscripts]

Ci-dessous toutes les variables que vous pouvez passer en paramètre de l’option –qf :

rpm –querytags
HEADERIMAGE
HEADERSIGNATURES
HEADERIMMUTABLE
HEADERREGIONS
HEADERI18NTABLE
SIGSIZE
SIGPGP
SIGMD5
SIGGPG
PUBKEYS
DSAHEADER
RSAHEADER
SHA1HEADER
NAME
VERSION
RELEASE
EPOCH
SERIAL
SUMMARY
DESCRIPTION
BUILDTIME
BUILDHOST
INSTALLTIME
SIZE
DISTRIBUTION
VENDOR
GIF
XPM
LICENSE
COPYRIGHT
PACKAGER
GROUP
SOURCE
PATCH
URL
OS
ARCH
PREIN
POSTIN
PREUN
POSTUN
OLDFILENAMES
FILESIZES
FILESTATES
FILEMODES
FILERDEVS
FILEMTIMES
FILEMD5S
FILELINKTOS
FILEFLAGS
FILEUSERNAME
FILEGROUPNAME
ICON
SOURCERPM
FILEVERIFYFLAGS
ARCHIVESIZE
PROVIDENAME
PROVIDES
REQUIREFLAGS
REQUIRENAME
REQUIREVERSION
CONFLICTFLAGS
CONFLICTNAME
CONFLICTVERSION
EXCLUDEARCH
EXCLUDEOS
EXCLUSIVEARCH
EXCLUSIVEOS
RPMVERSION
TRIGGERSCRIPTS
TRIGGERNAME
TRIGGERVERSION
TRIGGERFLAGS
TRIGGERINDEX
VERIFYSCRIPT
CHANGELOGTIME
CHANGELOGNAME
CHANGELOGTEXT
PREINPROG
POSTINPROG
PREUNPROG
POSTUNPROG
BUILDARCHS
OBSOLETENAME
OBSOLETES
VERIFYSCRIPTPROG
TRIGGERSCRIPTPROG
COOKIE
FILEDEVICES
FILEINODES
FILELANGS
PREFIXES
INSTPREFIXES
PROVIDEFLAGS
PROVIDEVERSION
OBSOLETEFLAGS
OBSOLETEVERSION
DIRINDEXES
BASENAMES
DIRNAMES
OPTFLAGS
DISTURL
PAYLOADFORMAT
PAYLOADCOMPRESSOR
PAYLOADFLAGS
MULTILIBS
INSTALLTID
REMOVETID
RHNPLATFORM
PLATFORM
AG_RSA
FILENAMES
FSSIZES
FSNAMES
INSTALLPREFIX
TRIGGERCONDS
TRIGGERTYPE

Amusez-vous bien.

Merci Olivier pour cette astuce :)

Comment modifier le format de la date d’un ls sous Linux ?

 

Avec mon collègue, nous avons cherché à modifier le format de la date affichée par la commande :

ls -ltr

[fatiha@monServeur]$ ls -ltr
total 0
-rw-r–r–    1 root     root            7 May 30 14:14 test
-rw-r–r–    1 root     root            7 May 30 14:14 test1
-rw-r–r–    1 root     root            7 May 30 14:14 test2

En effet, voulant ensuite parser et concaténer le résultat, nous souhaitions un format plus simple du style YYYYMMDD.

Comment faire dans ce cas ? Il suffit d’ajouter un paramètre à la commande ls.

[fatiha@monServeur]$ ls -ltrh  –time-style= »+%Y%m%d »
total 0
-rw-r–r– 1 root root 7 20130530 test
-rw-r–r– 1 root root 7 20130530 test1
-rw-r–r– 1 root root 7 20130530 test2

Pour en savoir plus sur le format des dates, tapez « man date » sous linux.

Comment afficher la liste des répertoires sous Linux à partir du répertoire courant ?

 

Depuis le répertoire courant, cela donne :

ls -Rl | egrep « ^d »

Le petit ^signifie « commence par ». On recherche donc toutes les lignes commençant par d avec la commande ls (lister). d voulant dire directory ou répertoire en français. L’option -R indique qu’il faut parcourir aussi les sous-répertoires, … c’est l’option récursive. La commande egrep est utilisée lorsqu’on veut faire des recherches avec des expressions régulières en paramètre.

Nous pouvons bien sûr rediriger les résultats dans un fichier :

ls -Rl | egrep « ^d » > /home/fatiha/listeDeTousLesRepertoires

Nous pouvons aussi facilement les compter avec la commande wc :

ls -Rl | egrep « ^d » | wc -l

Exemple sur mon ordi :

[fatiha@localhost ~]$ ls -Rl | egrep « ^d » | wc -l
2205

Vous pourrez voir apparaître quelques erreurs au cas où vous n’auriez pas le droit de lister le contenu d’un répertoire « Permission denied », exemple :

ls: cannot open directory ./Téléchargements/android-sdk-linux: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-hdpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-ldpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/bin/res/drawable-mdpi: Permission denied
ls: cannot open directory ./workspace/HelloFedora/gen/com: Permission denied

Dans ce cas, soit vous changez les droits, soit vous redirigez les erreurs lors du lancement de la ligne de commande. Cela donnerait :

ls -Rl 2>/dev/null | egrep « ^d » | wc -l

Vous souhaitez afficher uniquement le nom du répertoire, c’est possible en utilisant la commande awk et en lui disant de n’afficher que la 9e colonne :

ls -Rl 2>/dev/null | egrep « ^d » | awk ‘{ print $9 }’

Vous pouvez classer les noms par ordre alphabétique avec la commande sort :

ls -Rl 2>/dev/null | egrep « ^d » | awk ‘{ print $9 }’ | sort

nmap : Quels sont les ports ouverts sur votre blog ?

 

Votre blog est-il un minimum sécurisé ? C’est en lisant un article publié sur Linuxaria que je me suis posée la question. Cela concerne plus précisément les blogs hébergés sous Linux et utilisant le serveur web apache.

Je lance la commande nmap sous Linux comme proposé sur leur site :

nmap -sV monsite.com

nmap_detection_service_version

Et j’analyse tranquillement le résultat. En effet, le site linuxaria indique que des programmes malveillants peuvent utiliser le port 25 par exemple pour lancer des campagnes de spamming en utilisant votre propre site ! Je suis rassurée, le port 25 de mon blog est fermé.

A vous de faire le test sur votre site ou votre blog. Alors, quel est le résultat ?

Source : linuxaria