Fichiers / Dossiers

Convertir un fichier Windows en Linux et inversement

Problème de lecture / exécution d'un fichier sous Linux créer sous Windows.

Sous Windows (DOS), les lignes de fichier se terminent par les caractères spéciaux "\r\n".
Sous UNIX, les lignes de fichier se terminent par les caractères spéciaux "\n".

Les caractères spéciaux permettant le retour chariot étant différents sous Windows (DOS) et sous Linux (UNIX), il faut penser à les convertir.

Différentes méthodes permettent de le faire.

Avec la commande sed :

$ sed -i 's/\r//g'  /nom_du_fichier

Sinon, le caractère "\r" est représenté par "^M" qui s'obtient par la séquence de touches suivantes : "CTRL-V" + "CTRL-M"

$ sed -i 's/^M//' /nom_du_fichier

Avec la commande tr :

$ tr -d '\r' < /mon_fichier_source > /mon_fichier_destination

A l'inverse, convertir un fichier UNIX vers DOS

$ sed 's/$/^M/' /nom_du_fichier

 

Source : http://www.commentcamarche.net/faq/5978-sed-conversion-retours-chariots-...

Rendre un fichier exécutable

Pour rendre un fichier exécutable

$ sudo chmod +x ./nom_du_fichier

Etiquettes: 

Afficher la somme MD5 d'un fichier

Pour afficher la somme MD5 d'un fichier afin d'en assurer son intégrité, il suffit d'utiliser la commande md5sum.

Exemple avec le fichier "test.txt" :

$ cat test.txt
ceci est une ligne
$

Calcul de la somme MD5 du fichier "test.txt" :

$ md5sum test.txt
2f378979d16de47b9d439149be5623db  test.txt
$

Modification du fichier "test.txt" :

$ echo "une nouvelle ligne" >> test.txt
$ cat test.txt
ceci est une ligne
une nouvelle ligne
$

Re-calcul de la somme MD5 du fichier "test.txt" :

$ md5sum test.txt
5c69442bc1b1084b60a81190a75c6a0e  test.txt
$

Après modification du fichier, la somme MD5 du fichier n'est plus la même.

Il est également possible d'enregistrer la somme MD5 d'un fichier dans un fichier :

$ md5sum test.txt > test.md5
$ cat test.md5
5c69442bc1b1084b60a81190a75c6a0e  test.txt
$

De cette manière, il est possible de controler la somme MD5 d'un fichier :

Utilisation de la commande md5sum avec l'option -c et le fichier contenant la somme MD5 en paramètre.

$ md5sum -c test.md5
test.txt: OK
$

Attention : Les 2 fichiers (celui à controler et celui contenant la somme MD5) doivent être au même endroit.

Si le fichier à controler a été altéré :

$ md5sum -c test.md5
test.txt: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
$

Etiquettes: 

BASH: Gérer des fichiers dont les noms comportent des espaces

Sous Unix, les fichiers comportant des espaces dans le nom sont très compliqués à gérer sachant que l'espace est interprété comme étant un séparateur.

Voici un exemple qui permet d'afficher la somme MD5 d'une liste de fichiers dont les noms comportent des espaces.

 # ls -1
20160524 leclerc 1264.pdf             
20160528 boulanger 3290.pdf           
20160528 cofiroute 620.pdf            
20160529 la mie caline 790.pdf        
20160529 le marché aux fleurs 2050.pdf
20160601 cordonnerie leclerc 1000.pdf
20160601 leclerc 990.pdf              
20160601 pharmacie 3830.pdf          

Les 8 fichiers ci-dessus comportent tous des espaces dans leurs noms.

 # while read f; do md5sum "$f"; done <<< $(ls)

57709e696d14838ceeff6500728d1569  20160524 leclerc 1264.pdf
9f870fb12e598c7345cb74c6db15afee  20160528 boulanger 3290.pdf
5bb71357967db84baf6ed4a5fb56c552  20160528 cofiroute 620.pdf
690471607356b9ea798d3d44d69f478d  20160529 la mie caline 790.pdf
519a250059f5d8bc93af22d2ae02512f  20160529 le marché aux fleurs 2050.pdf
a08e6094bc01a34c508761ebbdae6418  20160601 cordonnerie leclerc 1000.pdf
c8f36624113710939365dd0a4daeb30c  20160601 leclerc 990.pdf
387ce36eaa18d383bd1950ee17a4fdff  20160601 pharmacie 3830.pdf

La commande read, dans la boucle while, interprète correctement les noms de fichiers provenant de la commande ls.

warningNe pas oublier les 3 chevrons vers la gauche "<<<" entre la commande ls et la boucle while

Etiquettes: 

Chiffrer / Déchiffrer des fichiers

mcrypt & mdecrypt sont des programmes qui permettent de chiffrer / déchiffer des fichiers avec un mot de passe.

Le programme mcrypt créé un nouveau fichier portant l'extension .nc avec des permissions 0600

Pour l'installer :

$ sudo apt-get install mcrypt

Pour chiffrer un fichier

$ mcrypt monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
 
File monFichier was encrypted.
$ ls -l monFichier*
-rw-r--r-- 1 ronan ronan   0 2011-11-05 15:24 monFichier
-rw------- 1 ronan ronan 109 2011-11-05 15:24 monFichier.nc
$

Pour chiffrer un fichier et supprimer le fichier source

$ mcrypt -u monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
 
File monFichier was encrypted.
$ ls -l monFichier*
-rw------- 1 ronan ronan 109 2011-11-05 15:24 monFichier.nc
$

Pour chiffrer un fichier avec une compression gzip

$ mcrypt -z monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
 
File monFichier was encrypted.
$ ls -l monFichier*
-rw-r--r-- 1 ronan ronan   0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 141 2011-11-05 15:31 monFichier.gz.nc
$

Lister tous les algorithmes utilisable par mcrypt

$ mcrypt --list
cast-128 (16): cbc cfb ctr ecb ncfb nofb ofb
gost (32): cbc cfb ctr ecb ncfb nofb ofb
rijndael-128 (32): cbc cfb ctr ecb ncfb nofb ofb
twofish (32): cbc cfb ctr ecb ncfb nofb ofb
arcfour (256): stream
cast-256 (32): cbc cfb ctr ecb ncfb nofb ofb
loki97 (32): cbc cfb ctr ecb ncfb nofb ofb
rijndael-192 (32): cbc cfb ctr ecb ncfb nofb ofb
saferplus (32): cbc cfb ctr ecb ncfb nofb ofb
wake (32): stream
blowfish-compat (56): cbc cfb ctr ecb ncfb nofb ofb
des (8): cbc cfb ctr ecb ncfb nofb ofb
rijndael-256 (32): cbc cfb ctr ecb ncfb nofb ofb
serpent (32): cbc cfb ctr ecb ncfb nofb ofb
xtea (16): cbc cfb ctr ecb ncfb nofb ofb
blowfish (56): cbc cfb ctr ecb ncfb nofb ofb
enigma (13): stream
rc2 (128): cbc cfb ctr ecb ncfb nofb ofb
tripledes (24): cbc cfb ctr ecb ncfb nofb ofb
$

Chiffrer un fichier en utilisant l'algorithme "DES"

$ mcrypt -a des monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
 
File monFichier was encrypted.
$ ls -l monFichier*
-rw-r--r-- 1 ronan ronan  0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$

Obtenir des infos sur le fichier chiffré

$ file monFichier.nc
monFichier.nc: mcrypt 2.5 encrypted data, algorithm: des, keysize: 8 bytes, mode: cbc,
$

Déchiffrer un fichier

$ ls -l monFichier*
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$ mcrypt -d monFichier.nc
Enter passphrase:
File monFichier.nc was decrypted.
$ ls -l monFichier*
-rw------- 1 ronan ronan  0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$

Ou en utilisant le programme mdecrypt

$ ls -l monFichier*
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$ mdecrypt monFichier.nc
Enter passphrase:
File monFichier.nc was decrypted.
$ ls -l monFichier*
-rw------- 1 ronan ronan  0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$

Etiquettes: 

Comparer les fichiers de deux dossiers distants

Comment savoir si les fichiers présents dans le dossier "DOSSIERX" du serveur "SERVEURA" sont exactement les mêmes que ceux présents dans le dossier "DOSSIERY" du serveur "SERVEURB" ?

Grâce à la commande sha256sum et une connexion ssh correctement configurée.

Exécuter le commande suivante sur le serveur "SERVEURA".

$ find /DOSSIERX -type f -exec sha256sum {} \; | ssh SERVEURB 'cd /DOSSIERY && sha256sum --quiet -c -'

Idem, mais en excluant un dossier de la recherche (.git par exemple):

$ find /DOSSIERX -type f -not -path */.git/* -exec sha256sum {} \; | ssh SERVEURB 'cd /DOSSIERY && sha256sum --quiet -c -'

 

Etiquettes: 

Connaitre la taille d'un dossier

Pour connaitre la taille d'un dossier :

$ sudo du -hs /nom_du_dossier

Etiquettes: 

Copier des fichiers résultant d'une recherche avec find

Rechercher tous les fichiers *.jpg présents dans le répertoire ~/images (sous-répertoires inclus) et les copier dans le répertoire imagesJPG.

$ find ~/images -name '*.jpg' -print0 | xargs -I '{}' -0 cp {} ~/imagesJPG/

L'option -print0 de la commande find et -0 de la commande xargs permet de prendre en compte les fichiers comportant des espaces dans leurs noms.

Etiquettes: 

Créer un fichier d'une taille précise

La commande dd permet de créer des fichiers d'une taille bien précise.

Créer un fichier vide de 1 Mo (1024 blocs de 1Ko):

$ dd if=/dev/zero of=zzz bs=1k count=1024
1024+0 enregistrements lus
1024+0 enregistrements écrits
1048576 octets (1,0 MB) copiés, 0,0108743 s, 96,4 MB/s
 
$ ls -l zzz
-rw-r--r-- 1 r.quennec mkpasswd 1,0M 23 mai   10:53 zzz
$

Créer un fichier avec des données aléatoires de 1 Mo (1024 blocs de 1Ko):

$ dd if=/dev/urandom of=zzz bs=1k count=1024
1024+0 enregistrements lus
1024+0 enregistrements écrits
1048576 octets (1,0 MB) copiés, 0,239581 s, 4,4 MB/s
 
$ wc zzz
   4074   23182 1048576 zzz
$

Etiquettes: 

Lire un fichier PDF en ligne de commande

Lire un fichier PDF en ligne commande est possible grâce à la commande less

$ less Verne-Le_tour_du_monde_en_80_jours.InLibroVeritas.net_oeuvre18616.pdf
Jules Verne
   
LE TOUR DU
MONDE EN
QUATRE-VINGTS
JOURS
   
- Collection Romans / Nouvelles -
   
Retrouvez cette oeuvre et beaucoup d'autres sur
http://www.inlibroveritas.net
   
^L^LTable des matières
LE TOUR DU MONDE EN QUATRE-VINGTS JOURS......................1
I - DANS LEQUEL PHILEAS FOGG ET PASSEPARTOUT
S'ACCEPTENT RÉCIPROQUEMENT L'UN COMME
MAÎTRE, L'AUTRE COMME DOMESTIQUE...............................2
II - OU PASSEPARTOUT EST CONVAINCU QU'IL A ENFIN
TROUVE SON IDEAL......................................................................8
III - OU S'ENGAGE UNE CONVERSATION QUI POURRA
COUTER CHER A PHILEAS FOGG.............................................12
IV - DANS LEQUEL PHILEAS FOGG STUPEFIE
PASSEPARTOUT, SON DOMESTIQUE.......................................21
V - DANS LEQUEL UNE NOUVELLE VALEUR APPARAÎT
SUR LA PLACE DE LONDRES
...................
$

Etiquettes: 

Modifier le propriétaire d'un fichier ou d'un dossier

Pour modifier le propriétaire d'un fichier ou d'un dossier

$ sudo chown root /u

change le propriétaire de /u en « root ».

$ sudo chown root:staff /u

même chose en changeant également le groupe en « staff ».

$ sudo chown -hR root /u

change le propriétaire de /u et ses sous-fichiers en « root ».

OPTIONS

Changer le propriétaire et/ou le groupe de chaque FICHIER en PROPRIÉTAIRE et/ou GROUPE. Avec l’option --reference, modifier le propriétaire et le groupe de chaque fichier en celui du FICHIER-R.

       -c, --changes
              utiliser le mode bavard en ne signalant que les modifications

       --dereference
              affecter la cible de chaque lien  symbolique  (comportement  par
              défaut) plutôt que le lien symbolique lui-même

       -h, --no-dereference
              modifier  les  liens symboliques au lieu des fichiers référencés
              (utile seulement sur  les  systèmes  permettant  de  changer  le
              propriétaire d’un lien symbolique)

       --from=PROPRIETAIRE_COURANT:GROUPE_COURANT
              changer  le  propriétaire  et/ou  le  groupe  de  chaque fichier
              seulement s’il y a concordance avec  le  propriétaire  et/ou  le
              groupe  courant spécifié. Les deux peuvent être omis, auquel cas
              la concordance n’est pas requise pour le paramètre non spécifié

       --no-preserve-root
              ne pas traiter « / » de manière spéciale (par défaut)

       --preserve-root
              ne pas opérer récursivement sur « / »

       -f, --silent, --quiet
              supprimer la plupart des messages d’erreur

       --reference=FICHIER-R
              utiliser le propriétaire et le groupe du FICHIER-R  au  lieu  de
              valeurs explicites PROPRIÉTAIRE:GROUPE

       -R, --recursive
              modifier récursivement fichiers et répertoires

       -v, --verbose
              afficher un diagnostic pour chaque fichier traité

       Les  options  suivantes  modifient  la  façon  dont  est  parcourue  la
       hiérarchie lorsque l’option -R est également spécifiée. Si  plus  d’une
       option est spécifiée, seule la dernière est prise en compte.

       -H     si  un  paramètre de la ligne de commande est un lien symbolique
              vers un répertoire, le parcourir

       -L     parcourir  chaque  lien  symbolique  rencontré   menant   à   un
              répertoire

       -P     ne parcourir aucun lien symbolique (par défaut)

       --help afficher l’aide-mémoire et quitter

       --version
              afficher le nom et la version du logiciel et quitter

       Le  propriétaire  n’est  pas modifié s’il n’est pas spécifié. Le groupe
       reste inchangé s’il n’est pas spécifié, sauf si cela est  implicitement
       demandé avec un « : » suivant un PROPRIÉTAIRE symbolique, auquel cas il
       sera modifié en ce nom de propriétaire. Le PROPRIÉTAIRE  et  le  GROUPE
       peuvent être numériques ou symboliques.
Etiquettes: 

Modifier les permissions d'un fichier ou d'un dossier

Pour modifier les permissions d'un fichier ou d'un dossier

$ sudo chmod 777 ./nom_du_fichier

modifie les permissions pour le fichier

$ sudo chmod 777 ./nom_du_dossier

modifie les permissions pour le dossier

$ sudo chmod -R 777 ./nom_du_dossier

modifie les permissions pour le dossier et tous les fichiers du dossier

Les permission sont données dans l'ordre user - groupe - autre

La lecture = 4

L'écriture = 2

L'exécution = 1

Tous les droits = 7

Etiquettes: 

Quelques commandes pour les dossiers

Pour connaitre le nom du dossier courant, saisir dans une console la commande :

$ pwd

Pour se rendre dans son répertoire personnel saisir dans une console l'une des 2 commandes suivantes:

$ cd

$ cd ~

Pour retourner au dossier précédent :

$ cd -

Rechercher les dossiers modifiés dans les dernières 24 heures et lister leurs contenus :

$ find /dossier_origine/* -mtime 0 -type d -exec ls -lht {} \;

l'option -mtime permet de spécifier le nombre de période de 24 heures.
l'option -type d permet d'indiquer que la recherche s'effectue uniquement sur les dossiers.
l'option -exec ls -lht {} \; permet d'exécuter la commande ls pour chaque dossier trouvé.

Etiquettes: 

Remplacer les espaces dans les noms de fichiers par des underscores

Le principe est simple. La commande find recherche tous les fichiers comportant un espace puis exécute pour chaque fichier trouvé la commande rename qui remplace tous les espaces par des underscores.

$ find ./ -depth -name "* *"  -exec rename 's/ /_/g' "{}" \;

Etiquettes: 

Renommer un fichier

Pour renommer un fichier, il suffit d'utiliser la commande mv.

Exemple :

$ mv ./foo ./bar

Cette commande va renommer le fichier foo en bar.

Voici une petite astuce bien sympa qui consiste à renommer un fichier en y ajoutant une extension quelconque.

$ mv ./foo{,.txt}

Cette commande va donc renommer le fichier foo en foo.txt

Supprimer le résultat d'une recherche (console)

En utilisant l'option -delete

$ sudo find /mon-repertoire -name mon-document -delete

ou en utilisant l'option -exec et la fonction rm

$ sudo find /mon-repertoire -name mon-document -exec rm {} \;

la chaine de caractère "{}" est remplacée par le résultat de la recherche

ou en combinant les commandes find, xargs et rm

$ find /mon-repertoire -name '*.txt' -print0 | xargs -0 rm -f
$ find /mon-repertoire -name '*.txt' -print0 | xargs -I '{}' -0 rm -f {}

L'option -print0 de la commande find et -0 de la commande xargs permet de prendre en compte les fichiers comportant des espaces dans leurs noms.

Synchroniser des dossiers et des fichiers

Documentation Ubuntu

La synchronisation de dossiers et/ou de fichiers se fait via le programme RSYNC

$ sudo rsync -av --del /source_a_sauvegarder/    /destination_de_la_sauvegarde/


-a : préserve l'intégralité des dossiers et fichiers

-v : verbose (affiche le détail à l'écran)

--del : supprime les fichiers et dossiers de destination qui ne sont plus dans source


rsync via SSH

$ rsync -a /source/ login@serveur.org:/destination/

Transfert de fichiers via SCP

SCP (Secure Copy Protocol) est un protocole permettant le transfert de fichiers en toute sécurité d'une machine locale vers une machine distante et inversement. Tous les transferts de fichiers sont effectués via le protocol SSH.


Transférer le fichier local file1.txt vers le répertoire courant de la machine distante 192.168.1.100

$ scp ./file1.txt user@192.168.1.100:./

Transférer le fichier file1.txt de la machine distante vers le répertoire courant de la machine locale

$ scp user@192.168.1.100:./file1.txt ./

Transférer tout le répertoire local /var/test vers le répertoire /tmp de la machine distante 192.168.1.100

$ scp -r /var/test user@192.168.1.100:/tmp/

Transférer un fichier via SSH

SSH permet d'utiliser des pipelines de commandes, et d'utiliser des tubes d'entrées/sorties comme toute autre commande, a ceci prêt que la redirection se fait vers, ou depuis la machine distante.

Celà peut, entre autre, servir à transférer des fichiers:

$ ssh serveur "cat fichier_distant" > fichier_local

L'utilité d'une telle commande est discutable, la commande scp faisant exactement la même chose.

Maintenant, imaginons un fichier de plusieurs mégas, et une bande passante assez limitée:

$ ssh serveur "gzip -c fichier_distant" > fichier_local.gz

ici, le serveur compresse le fichier, la commande écrit le fichier compressé sur le client.

On peut pousser encore plus loin, si l'on ne veut pas récupérer un fichier gzipé, mais diminuer quand même l'utilisation de la bande passante:

$ ssh serveur "gzip -c fichier_distant" |gunzip > fichier_local

Etiquettes: 

VIM : Supprimer les caractères BOM dans un fichier encodé en UTF-8

Pour supprimer les caractères BOM d'un fichier encodé en UTF-8, il suffit de l'ouvrir avec l'éditeur vim et d'exécuter la commande :set nobomb

Pour finir, enregistrer les modifications avec la commande :wq.

Etiquettes: