Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 10/07/2010, à 14: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, à 19:22)

Hors ligne

#2 Le 10/07/2010, à 14: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, à 14: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, à 15: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, à 15:07)

En ligne

#4 Le 10/07/2010, à 15: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, à 15: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, à 15:48)

Hors ligne

#6 Le 10/07/2010, à 16: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, à 07: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

En ligne

#8 Le 13/07/2010, à 19: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, à 08: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

En ligne

Haut de page ↑