====== chmod ======
__groupes:__
u The user who owns the file (you !)
g The group the file belongs to
o The other users
a All of the above (an abbrevation for ugo)
__permissions:__
r Read
w Write
x Execute
__Exemple:__
$ chmod a+rw test.txt
====== Rechercher un fichier ======
__OS:__ Mandrake 10.0
__Commande:__
Incluant les sous répertoires:
$ find . -name 'session.xsl'
Incluant les sous répertoires et n'affichant que les fichiers contenant le terme "monTexte":
$ find . -name '*.xmap' -exec grep monTexte '{}' -H ';'
Ou encore:
$ grep monTexte -H `find . -name '*.xmap' `
Effacer des fichiers selon leurs noms:
$ find . -name '.svn' -exec rm -rf {} \;
Trouver les fichiers créés/modifiés depuis 20 jours:
for i in {0..20}; do find . -ctime $i -type f; done
====== Rechercher un terme dans un fichier ======
__OS:__ Mandrake 10.0
__Commande:__
Affiche les noms de fichiers et la ligne
$ grep 'monTexte' *.txt
N'afficher que les noms de fichiers
$ grep -l 'monTexte' *.txt
En incluant les sous-répertoires
$ grep -r 'monTexte' *.txt
__grep récursif sous Unix / Solaris__
find . -type f -print | xargs grep monTexte
====== Déplacer un fichier/dossier ======
__OS:__ Mandrake 10.0
__Commande:__
mv [OPTION]... SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
====== Créer un lien symbolique ======
__OS:__ Mandrake 10.0
Créer un lien symbolique, à peu près équivalant à un raccourcis sous windows.
__Commande:__
ln -s /home/nicolas/applications/realplayer/realplay /usr/bin/realplay
avec /home/nicolas/applications/realplayer/realplay = fichier source
et /usr/bin/realplay = lien symbolique
====== Faire un allez-retour facile entre deux dossiers ======
__OS:__ Linux
De temps en temps, sous le shell, il est nécessaire de se déplacer dans un dossier pour faire une action rapide, puis de revenir dans le dossier de départ.
On est tenté par faire:
$ cd /le/nouveau/dossier
$ ...
$ cd /le/dossier/de/depart
Cela oblige à écrire le chemin du dossier de départ.
En fait, il y a plus efficace avec les commandes pushd et popd:
$ pushd /le/nouveau/dossier
$ ...
$ popd
pushd nous déplace dans le dossier, comme cd, mais en même temps, garde le dossier de départ en mémoire pour la commande popd qui nous ramène dans celui-ci.
__Note:__
Un moyen encore plus simple est d'utiliser
cd -
qui fait revenir dans le dossier précédent
====== Monter le disque dur contenant Windows ======
__OS:__ Linux
__Commande:__
mount -t ntfs /dev/hda1 /mnt/windows/
- Pour Windows XP, le type est ntfs
- Le premier disque dur est /dev/hda
- Le répertoire monté est /mnt/windows
====== Créer une archive compressée ======
__OS:__ Linux
__Commande:__
tar czvf monarchive.tar.gz mondossier
__Ex:__
tar czvf unigeDB.tar.gz ./unigeDB/
__Décompression:__
Pour un fichier tar.gz
tar xvzf nom_du_fichier.tar.gz
Pour un fichier tar bz2
tar xvjf nom_du_fichier.tar.bz2
x = extract, z = gzip, j = bzip2
__Sous Solaris:__
Décompresser une archive tar.gz:
gtar -zxf nom_du_fichier.tar.gz
====== Synchroniser du contenu entre deux dossiers ======
__OS:__ Linux
__Problème:__
Comment synchroniser facilement le contenu de deux dossiers, en mettant à jour le deuxième à partir du premier ?
En ne tenant compte que des fichiers .class par exemple ?
__Commande:__
[user@alaxoscom.yourwebhostingmysql.com dossierRacine] rsync -rv --include "*/" --include="*.class" --exclude="*" ./ ../../../dossierRacine/
* descend dans le répertoire courant: ./
* exclut tous les fichiers, sauf ceux du type *.class
Simuler une mise à jour du balladeur IAUDIO depuis le pc:
rsync -rvtun --modify-window=1 /home/rodn/Musique/MUSIC/ /media/IAUDIO/MUSIC/
rsync -rvtun --modify-window=1 /media/IAUDIO/MUSIC/ /home/rodn/Musique/MUSIC/
Puis réellement faire la mise à jour:
rsync -rvtu --modify-window=1 /home/rodn/Musique/MUSIC/ /media/IAUDIO/MUSIC/
rsync -rvtu --modify-window=1 /media/IAUDIO/MUSIC/ /home/rodn/Musique/MUSIC/
//(= sans l'option n)//
//l'option --modify-window=1 permet de détecter les différence de temps des fichiers de manière moins précise (defaut = 0), ce qui permet de gérer certains problèmes entre les différents systèmes de fichier//
Faire ensuite de même en inversant les chemins (balladeur --> pc)
__Copier un dossier contenant des liens symboliques__
utiliser l'option **-a** qui copie le dossier en temps qu'archive
rsync -avz /path/to/folder1 /path/to/folder2
__Problème de l'heure d'été/hiver:__
En fonction du type de filesystem, il peut arriver que certains disques montrent des différences d'une heure entre des fichiers synchronisés après un passage à l'heure d'hiver/d'été. Dans ce cas, la synchronisation en fonction du temps ne peut plus se faire.
Une manière de régler le problème est de mettre à jour les heures des fichiers en utilisant le script suivant:
#!/usr/bin/perl
use strict;
my $offset = shift() + 0;
die "Usage: $0 OFFSET_SECONDS\n" unless $offset;
while (<>) {
chomp;
my $mtime = (stat $_)[9];
next unless $mtime;
$mtime += $offset;
utime $mtime, $mtime, $_;
}
qui se lance de cette manière:
find . -type f ! -newer /tmp/cmpfile | shifttime.pl 3600
A noter que la mise à jour du temps peut être faite dans l'autre sens avec -3600
====== Monter une clé USB ======
__OS:__ Mandrake 10.1
__Commande:__
mount -t vfat /dev/sda /mnt/cleusb/
* La majorité des clés USB utilise le système de fichier fat
* La clé est reconnue comme un périphérique SCSI, et est donc accessible sous /dev/sda
====== Savoir quelles sont les partitions disponibles à monter ======
__OS:__ Linux
__Problème:__
Après création d'une nouvelle partition, comment savoir à quel "fichier" elle correspond, de manière à la monter ?
__Commande:__
fdisk -l /dev/hda
Ce qui donne par exemple:
Disk /dev/hda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1095 8795556 7 HPFS/NTFS
/dev/hda2 1096 4865 30282525 f W95 Ext'd (LBA)
/dev/hda5 3061 4865 14498631 83 Linux
/dev/hda6 1096 1217 979902 82 Linux swap / Solaris
/dev/hda7 1218 2190 7815591 83 Linux
/dev/hda8 2191 3060 6988243+ 83 Linux
Partition table entries are not in disk order
====== Décoder un texte en base64 ======
__OS:__ Linux
__
Problème:__
Comment lire un string encodé un base64 ?
__Solution:__
Une commande existe sous Linux pour encoder un fichier binaire de manière à ce que le résultat ne contienne que des caractères ASCII imprimables.
Cela permet par exemple d'envoyer un fichier binaire par email. (il ne peut y avoir que des caractères ASCII dans le contenu d'un mail)
Il s'agit de:
uuencode -m file_to_encode.txt
A l'inverse, pour décoder une chaîne de caractères encodée en base64, on peut utiliser:
uudecode file_to_decode.txt
__Astuce:__
uuencode -m rajoute avant le résultat codé un signal de début d'encodage et des signes '=' après le résultat.
Pour décoder une chaîne de caractères base64, on peut:
- créer un fichier to_decode.txt
- coller les caractères encodés
- ajouter une ligne signal en début
- ajouter une ligne avec les signes '=' à la fin
- utiliser uudecode
Ex de fichier to_decode.txt
begin-base64 644 to_decode.txt
Q2UgdGV4dGUgZXN0IGVuY29k6SBlbiBiYXNlNjQK
---
$uudecode to_decode.txt
$less to_decode.txt
__Solution alternative en Python:__
python -c "print __import__('base64').b64decode('c2FsdXQ=')"
====== Modifier l'encodage d'un fichier ======
__OS:__ Linux
__Problème:__
Comment modifier l'encodage d'un fichier, par exemple modifier index.php encodé en UTF-8 vers index_iso.php encodé en ISO 8859-1
__Commande:__
user@alaxoscom.yourwebhostingmysql.com:~$ iconv -f UTF-8 -t ISO8859-1 -o index_iso.php index.php
-f 'from'
-t 'to'
__Modification récursive du contenu d'un dossier:__
Au moyen d'un script:
#!/bin/bash
# à lancer dans le répertoire dans lequel on veux modifier l'encodage des fichiers
# Eventuellement, rajouter l'option -name "*.extension" à la commande find
for i in `find . -type f`
do
iconv -f ISO8859-1 -t UTF-8 $i > temp.tmp && cat temp.tmp > $i && rm temp.tmp
done
====== Repérer les caractères non ASCII dans un fichier ======
__OS:__ Linux
__Problème:__
Comment repérer dans un fichier les caractères qui ne sont pas des caractères ASCII ?
__Solution:__
En utilisant une option de //cat//:
cat -v my_file.txt | grep "M-"
====== Remplacer des caractères UTF-8 affichés en ISO-8859-1 dans un fichier ======
__OS:__ Linux
__Problème:__
Comment remplacer des caractères UTF-8 affichés en ISO-8859-1 dans un fichier ?
C'est à dire comment retrouver les caractères accentués dans un fichier contenant des caractères tels que à , é, è et autres ê ?
__Solution:__
En utilisant le script suivant:
#!/bin/bash
#two chars to replace
sed -i 's/Ã /à/g' $1 # this one may be confused with a word ending by í
sed -i 's/á/á/g' $1
sed -i 's/â/â/g' $1
sed -i 's/ä/ä/g' $1
sed -i 's/ã/ã/g' $1
sed -i 's/é/é/g' $1
sed -i 's/è/è/g' $1
sed -i 's/ê/ê/g' $1
sed -i 's/ë/ë/g' $1
sed -i 's/ẽ/ẽ/g' $1
sed -i 's/ì/ì/g' $1
sed -i 's/î/î/g' $1
sed -i 's/ï/ï/g' $1
sed -i 's/Ä©/ã/g' $1
sed -i 's/ò/ò/g' $1
sed -i 's/ó/ó/g' $1
sed -i 's/ô/ô/g' $1
sed -i 's/ö/ö/g' $1
sed -i 's/õ/õ/g' $1
sed -i 's/ù/ù/g' $1
sed -i 's/ú/ú/g' $1
sed -i 's/û/û/g' $1
sed -i 's/ü/ü/g' $1
sed -i 's/Å©/ũ/g' $1
#one char to replace
sed -i 's/Ã/í/g' $1
====== Copie de sauvegarde rapide d'un fichier (saveback) ======
__OS:__ Linux, Solaris
__Problème:__
Comment faire une sauvegarde rapide et conserver les versions d'un fichier que l'on modifie régulièrement ?
__Commande:__
user@alaxoscom.yourwebhostingmysql.com:~$ saveback fichier.txt
-> crée une copie fichier.txt.01, puis fichier.txt.02, etc...
__Script 'saveback':__
#!/bin/csh -f
# script to backup a file.
# foo -> foo.dd where dd are two decimal digits
# Author: Dominique Petitpierre, University of geneva
# History:
# 1999.08.25: created
# To do:
# - see if it is not better to use "mv" than "cp -p"
# - should we check on writeability of the directory?
set Cmd=$0
set Cmd=$Cmd:t
if ($#argv != 1) then
echo Usage: $Cmd:q file
exit 1
endif
set f=$1:q
set i=1
set Suffix=0$i
set Lastsuffix="00"
while (-e $f:q.$Suffix )
set Lastsuffix=$Suffix
@ i++
if ($i < 10 ) then
set Suffix=0$i
else
set Suffix=$i
endif
end
if ($Lastsuffix == "00" || ! { cmp -s $f:q $f:q.$Lastsuffix } ) then
cp -p $f:q $f:q.$Suffix
endif
====== Surveiller les nouvelles lignes dans un fichier ======
__OS:__ Linux, Solaris
__Problème:__
Comment surveiller si de nouvelles lignes apparaissent dans un fichier (ex: fichier de logs)
__Commande:__
~$ tail -f /path/to/file
ou
~$ less /path/to/file
et faire "Shift + f"
Autre solution pour surveiller plusieurs fichiers dans le même terminal, installer le programme //multitail//:
~$ multitail /path/to/file1 /path/to/file2
====== Indenter un fichier XML ======
__OS:__ Linux
__Problème:__
Comment indenter correctement un fichier XML mal formaté ?
__Commande:__
~$ xmlindent -w bad_formatted_file.xml
====== Remplacer les tabulations par des espaces dans un fichier ======
__OS:__ Linux
__Problème:__
Comment remplacer l'ensemble des tabulations par 4 espaces dans un fichier ?
__Commande:__
~$ expand -t 4 my_file.txt > _tmp_ && mv _tmp_ my_file.txt
et de manière récursive:
~$ find . ! -type d ! -name _tmp_ -exec sh -c 'expand -t 4 {} > _tmp_ && mv _tmp_ {}' \;