Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/07/2010, à 15:29

FlyingSkaarj

Créer un fichier d'une taille spécifique (Résolu)

Bonjour à tous,

Quelqu'un connaitrait-il un moyen de créer un fichier en spécifiant sa taille comme on peut le faire sous windows avec la commande fsutil ?

Dernière modification par FlyingSkaarj (Le 13/07/2010, à 20:22)

Hors ligne

#2 Le 10/07/2010, à 15:44

ehmicky

Re : Créer un fichier d'une taille spécifique (Résolu)

Mettons pour créer un fichier de taille 357 octets :
  - En remplissant de nulls (octet de valeur x00) le fichier :

cat /dev/zero | head -c 357 > monfichier

- En le remplissant de caractères aléatoires, mais imprimables (ponctuation, chiffres et lettres)

cat /dev/urandom | tr -dc [:graph:] | head -c 357 > monfichier

Dans le deuxième exemple, tu remplacer [:graph:] par [:punct:], [:alnum:], [:alpha:], [:digit:]... pour remplir de symboles de ponctuation, de chiffres ou lettres, de lettres, de chiffres, ...

Dernière modification par ehmicky (Le 10/07/2010, à 15:45)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#3 Le 10/07/2010, à 16:05

credenhill

Re : Créer un fichier d'une taille spécifique (Résolu)

hello
avec dd

$ dd if=/dev/zero of=fichier bs=32767 count=1 2> /dev/null
$ ls -ln fichier
-rw-r--r-- 1 1000 1000 32767 2010-07-10 16:01 fichier

0n peut utiliser d'autres unités
man dd
...BLOCKS  and BYTES may be followed by the following multiplicative suffixes: c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.

Dernière modification par credenhill (Le 10/07/2010, à 16:07)

Hors ligne

#4 Le 10/07/2010, à 16:24

FlyingSkaarj

Re : Créer un fichier d'une taille spécifique (Résolu)

Merci infiniment ehmicky pour cette solution qui fonctionne à merveille ainsi que pour ta rapidité à me répondre.
Si je comprends bien on utilise une sorte de périphérique virtuel pour remplir le fichier ? Etant peu qualifié sous Linux, j'avoue avoir été surpris par cette commande.

Hors ligne

#5 Le 10/07/2010, à 16:48

FlyingSkaarj

Re : Créer un fichier d'une taille spécifique (Résolu)

Merci egalement credenhill . J'ai déja utilisé dd pour cloner un disque mais je dois t'avouer que là je suis complètement noyé. je crois que je vais m'en tenir à cat (dont d'ailleurs je ne comprends que partiellement la commande). Toutefois, tout ceci va rejoindre la collection de documents éducatifs qui m'aident à progresser sous Linux.
Merci encore à tous.

Dernière modification par FlyingSkaarj (Le 10/07/2010, à 16:48)

Hors ligne

#6 Le 10/07/2010, à 17:12

ehmicky

Re : Créer un fichier d'une taille spécifique (Résolu)

La solution de credenhill est meilleure, parce que dd est notamment conçu pour ce genre d'opérations, et il n'y a pas besoin de faire appel à deux redirections, cat et head alors que dd suffit.

Par contre, attention à cette commande qui si tu te trompes dans les arguments assignés à "if=" et "of=" peut supprimer de grosses parties de ton disque dur.

Pour l'explication de la premier commande :
  - /dev/zero est un character device, un fichier spécial qui crée un flux ininterrompu de nulls.
  - faire un cat /dev/zero va donc imprimer en sortie un flux de nulls. (Cat sert à imprimer le contenu d'un fichier)
  - ce flux est pipé (= sa sortie est redirigée vers l'entrée de) vers head, qui avec l'option -c ne retient que les N premiers octets d'un fichier, ou en l'absence de fichier comme ici, lorsqu'il est pipé par exemple, de son entrée standard, soit ici le flux de nulls.
  - ainsi N nulls sont imprimés, et ces nulls sont redirigés via "> FILE" vers FILE, qui est créé ou écrasé s'il existe déjà

Pour dd :
  - tu spécifies le fichier d'entrée avec "if=FILE" (le fichier d'où les octets sont prélevés, ici /dev/zero)
  - tu spécifies le fichier de sortie avec "of=FILE" (le fichier où ces octets sont imprimés)
  - bs=NOMBRE1 et count=NOMBRE2 indique que NOMBRE1 fois NOMBRE2 octets seront imprimés, soit ici 32767 fois 1

Voir les man pages pour plus d'info


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#7 Le 11/07/2010, à 08:36

credenhill

Re : Créer un fichier d'une taille spécifique (Résolu)

merci pour les explications

ehmicky a écrit :

Par contre, attention à cette commande qui si tu te trompes dans les arguments assignés à "if=" et "of=" peut supprimer de grosses parties de ton disque dur.

c'est vrai si dd est utilisé en root avec sudo, sinon cette commande n'est pas plus "risquée" qu'une autre

Hors ligne

#8 Le 13/07/2010, à 20:21

FlyingSkaarj

Re : Créer un fichier d'une taille spécifique (Résolu)

Messieurs, je vous tire mon chapeau et vous remercie encore pour la qualité de vos explications. C'est tout simplement magnifique à lire et à comprendre.
Je marque ce post comme résolu.

Hors ligne

#9 Le 14/07/2010, à 09:38

credenhill

Re : Créer un fichier d'une taille spécifique (Résolu)

pour remplir le fichier d'un texte plutôt que de \0, on peut utiliser:

echo | awk '{for(;;)print "remplissage"}'  | dd of=fichier  bs=1M count=1 iflag=fullblock

Hors ligne