Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Comentariile sunt închise pentru Cum cream un fisier de marime fixa

Vi s-a intamplat sa aveti nevoie de un fisier de o anumita marime si sa nu stiti de unde sa il luati? Mie mi se intampla sa am nevoie de fisiere mici, medii sau mari pentru a testa viteza unei conexiuni, un timeout sau o livrare de mesaje. In majoritatea cazurilor e necesar un fisier fara „personalitate”, adica un fisier care nu poarta semnatura unui executabil, a unui fisier cu un anumit mime-type sau a unui script. Trebuie un simplu fisier neutru din toate punctele de vedere.

Pentru crearea fisierelor in Linux putem folosi doua comenzi. Prima comanda este „touch„, cu ajutorul careia putem crea un fisier gol. A doua comanda este „dd„, cu ajutorul careia putem crea un fisier de orice marime dorim.

Sa presupunem pentru inceput ca avem nevoie de un fisier de marime 0 bytes – un fisier gol. Pentru asta vom folosi comanda „touch„:

[sergiu@localhost ~]$  touch fisier.test
[sergiu@localhost ~]$  ls -al fisier.test
-rw-r--r-- 1 sergiu sergiu 0 2009-09-01 20:58 fisier.test
[sergiu@localhost ~]$

De fisiere goale rareori avem nevoie. Personal am folosit fisiere goale de doua ori. O data cand testam o aplicatie in situatia in care in directorul de lucru erau foarte multe fisiere (cateva mii), caz in care era important ca fisierele existente sa nu ocupe spatiu mai deloc. A doua situatie a fost cand eram curios cum reactioneaza Apache cand pe partitia de loguri exista spatiu disponibil dar nu mai existau inode-uri libere.

A doua varianta, comanda dd, este utila cand avem de creat fisiere mari. De fisiere mari avem nevoie tot timpul. Un exemplu ar fi pentru testarea conexiunii serverului, caz in care e bine sa cream un fisier de 10MB si sa calculam timpul mediu de download pentru a gasi viteza medie de download si implicit banda alocata. O alta situatie ar fi testarea unui client sau a unui server de mail pentru a vedea cum se comporta cu atasamente mari.

Pentru a crea un fisier de o anumita marime folosim comanda dd care primeste patru parametri:

  • if – input file, fisierul din care vor fi citite informatiile care urmeaza sa fie scrise in fisier;
  • of – output file, fisierul care il cream si care la sfarsitul comenzii va avea marimea dorita;
  • bs – block size, marimea blocului de informatii care va fi scrisa la un moment dat in fisier;
  • count contorul care ne spune cate unitati bs vor fi scrise in fisier.

Astfel, daca avem nevoie de un fisier de 10MB vom folosi ca if fisierul /dev/zero care va oferi in continuu caracterul NUL (0x00), ca of numele fisierului care ne intereseaza (ex. fisier.bin), ca bs 1048576 (echivalentul in byte pentru 1MB – 1024×1024 bytes) iar pentru count vom folosi valoarea 10, adica 10 blocuri bs sau 10 blocuri de 1MB (1048576 bytes):

[sergiu@localhost ~]$  dd if=/dev/zero of=fisier.bin bs=1048576 count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0349522 s, 300 MB/s
[sergiu@localhost ~]$  ls -alh fisier.bin
-rw-r--r-- 1 sergiu sergiu 10M 2009-09-01 21:15 fisier.bin
[sergiu@localhost ~]$

Dupa cum se poate vedea, comanda dd if=/dev/zero of=fisier.bin bs=1048576 count=10 a creat un fisier de 10MB care acum il putem folosi pentru testarea conexiunii.

Dupa cum spuneam, putem folosi fisierul /dev/zero pentru a umple un fisier cu caracterul NUL. Exista totusi situatii in care e important sa avem un fisier plin de caractere random – ex. testarea mai multor metode de comprimare. In cazul acesta putem folosi in locul fisierului /dev/zero fisierul /dev/random care la fiecare citire ne va da un caracter aleator iar rezultatul final va fi un fisier plin de caractere aleatoare. Rularea este aceeasi, diferenta constand doar in valoarea pentru parametrul if:

[sergiu@localhost ~]$  dd if=/dev/random of=fisier.bin bs=1048576 count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0349522 s, 300 MB/s
[sergiu@localhost ~]$  ls -alh fisier.bin
-rw-r--r-- 1 sergiu sergiu 10M 2009-09-01 21:15 fisier.bin
[sergiu@localhost ~]$
Linux

Comments are closed.