| FILE(1) | General Commands Manual | FILE(1) |
file —
determină tipul de fișier
file
[-bcdEhiklLNnprsSvzZ0]
[--apple] [--exclude-quiet]
[--extension]
[--mime-encoding]
[--mime-type]
[-e nume-test]
[-F separator]
[-f fișier-de-nume]
[-m fișiere-magice]
[-P nume=valoare] file
... file -C
[-m fișiere-magice]
file [--help]
Această pagină de manual documentează
versiunea 5.46 a comenzii file.
file testează fiecare
argument în încercarea de a-l clasifica. Există trei
seturi de teste, efectuate în această ordine: teste ale
sistemului de fișiere, teste magice și teste lingvistice.
Primul test care
reușește provoacă imprimarea tipului de
fișier.
Tipul afișat va conține de obicei unul
dintre cuvintele
text
(fișierul conține doar caractere de imprimare și
câteva caractere de control comune și este probabil sigur de
citit pe un terminal ASCII),
executable
(fișierul conține rezultatul compilării unui program
într-o formă inteligibilă pentru un nucleu UNIX sau un
altul) sau
data care
înseamnă orice altceva (datele sunt de obicei
“binare” sau neimprimabile). Excepțiile sunt formate de
fișiere bine cunoscute (fișiere core, arhive tar) despre care
se știe că conțin date binare. Atunci când
modificați fișiere magice sau programul în sine,
asigurați-vă că
„păstrați aceste cuvinte
cheie”. Utilizatorii depind de faptul că știu
că toate fișierele ce se pot citi dintr-un director au
imprimat cuvântul “text”. Nu faceți ca Berkeley
și nu schimbați “shell commands text” în
“shell script”.
Testele sistemului de fișiere se bazează pe
examinarea răspunsului la un apel de sistem
stat(2). Programul verifică pentru a vedea
dacă fișierul este gol sau dacă este un fel de
fișier special. Orice tip de fișier cunoscut, adecvat
sistemului pe care rulați (socluri, legături simbolice sau
conducte cu nume (FIFO) pe acele sisteme care le implementează) sunt
intuite dacă sunt definite în fișierul de antet al
sistemului <sys/stat.h>.
Testele magice sunt utilizate pentru a verifica fișierele
cu date în anumite formate fixe. Exemplul canonic este un
fișier binar executabil (program compilat)
a.out, al cărui format este definit în
<elf.h>,
<a.out.h> și eventual
în <exec.h>
directorul include standard. Aceste fișiere au un
“număr magic” stocat într-un loc special,
aproape de începutul fișierului, care indică sistemului
de operare UNIX că fișierul este un executabil binar și
care dintre mai multe tipuri este acesta. Conceptul de număr magic
“” a fost aplicat prin extensie fișierelor de date.
Orice fișier cu un identificator invariabil la un mic decalaj fix
în fișier poate fi de obicei descris în acest fel.
Informațiile care identifică aceste fișiere sunt citite
din „/etc/magic” și din fișierul magic compilat
/usr/share/misc/magic.mgc sau din fișierele
din directorul /usr/share//misc/magic dacă
fișierul compilat nu există. În plus, dacă
există $HOME/.magic.mgc sau
$HOME/.magic, acestea vor fi utilizate cu prioritate
față de fișierele magice ale sistemului.
Dacă un fișier nu corespunde niciuneia dintre
intrările din fișierul magic, acesta este examinat pentru a
vedea dacă pare a fi un fișier text. Seturile de caractere
ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII (precum cele utilizate pe
sistemele Macintosh și IBM PC), UTF-8-encoded Unicode, UTF-16-encoded
Unicode și EBCDIC pot fi deosebite prin diferitele intervale
și secvențe de octeți care constituie textul imprimabil
în fiecare set. Dacă un fișier trece oricare dintre
aceste teste, setul său de caractere este raportat. Fișierele
ASCII, ISO-8859-x, UTF-8 și ASCII extins sunt identificate ca
“text” deoarece vor putea fi citite de aproape orice terminal;
UTF-16 și EBCDIC sunt doar “character data” deoarece,
deși conțin text, acesta va necesita traducere înainte
de a putea fi citit. În plus, file va
încerca să determine alte caracteristici ale fișierelor
de tip text. Dacă liniile unui fișier sunt terminate prin CR,
CRLF sau NEL, în loc de LF, standardul Unix, acest lucru va fi
raportat. Fișierele care conțin secvențe de eludare
încorporate sau suprapunere (overstriking) vor fi, de asemenea,
identificate.
Odată ce file a determinat
setul de caractere utilizat într-un fișier de tip text, acesta
va încerca să determine în ce limbă este scris
fișierul. Testele de limbă caută anumite șiruri
de caractere (cf. <names.h>)
care pot apărea oriunde în primele câteva blocuri ale
unui fișier. De exemplu, cuvântul cheie
.br indică
faptul că fișierul este cel mai probabil un fișier de
intrare troff(1), la fel cum cuvântul cheie
struct
indică un program C. Aceste teste sunt mai puțin fiabile
decât cele două grupuri anterioare, așa că sunt
efectuate la sfârșit. Rutinele de testare a limbii
testează, de asemenea, unele tipuri diverse (cum ar fi arhivele
tar(1), fișierele JSON).
Orice fișier care nu poate fi identificat ca fiind scris în oricare dintre seturile de caractere enumerate mai sus este considerat a fi “data” (de date).
--applefile să emită codul
tipului de fișier și al creatorului, așa cum este
utilizat de versiunile mai vechi ale MacOS. Codul este format din opt
litere, prima descriind tipul de fișier, iar ultima creatorul.
Această opțiune funcționează corect numai
pentru formatele de fișiere care au definită ieșirea
în stil apple.-b,
--brief-C,
--compile-c,
--checking-printout-m
pentru depanarea unui nou fișier magic înainte de a-l
instala.-d-E-e,
--exclude nume-testEMX (numai pe
EMX).--exclude-quiet--exclude, dar ignoră testele despre
care file nu știe. Aceasta este
destinată compatibilității cu versiunile mai vechi
ale file.--extension-F,
--separator separator-f,
--files-from
fișier-de-numefile. Astfel, dacă doriți să
definiți delimitatorul, trebuie să o faceți
înainte de a specifica lista de fișiere, cum ar fi:
“-F @
-f
fișier-de-nume”, în loc de:
“-f
fișier-de-nume -F
@”.-h,
--no-dereferencePOSIXLY_CORRECT nu
este definită.-i,
--mimefile să
emită șiruri de tip mime în loc de cele mai
tradiționale care pot fi citite de om. Astfel, aceasta poate spune
‘text/plain; charset=us-ascii’ în loc de
“ASCII text”.--mime-type,
--mime-encoding-i, dar imprimă numai elementul
(elementele) specificat(e).-k,
--keep-going-r.
Modelul magic cu cea mai mare valoare (consultați opțiunea
-l) apare primul.-l,
--list-k).-L,
--dereferencePOSIXLY_CORRECT.-m,
--magic-file magicfiles-N,
--no-pad-n,
--no-buffer-p,
--preserve-datefile nu le-a citit
niciodată.-P,
--parameter nume=valoare| Nume | Valoare-implicită | Explicație |
bytes |
1M | numărul maxim de octeți de citit din fișier |
elf_notes |
256 | numărul maxim de note ELF procesate |
elf_phnum |
2K | numărul maxim de secțiuni de program ELF procesate |
elf_shnum |
32K | numărul maxim de secțiuni ELF procesate |
elf_shsize |
128MB | dimensiunea maximă a secțiunii ELF procesate |
encoding |
65K | numărul maxim de octeți pentru determinarea codificării |
indir |
50 | limita de recursiune pentru magia indirectă |
name |
100 | limita numărului de utilizări pentru nume/utilizare magică |
regex |
8K | limita de lungime pentru căutările regex |
-r,
--rawfile transformă caracterele
neimprimabile în reprezentarea lor octală.-s,
--special-filesfile încearcă
doar să citească și să determine tipul
fișierelor de argumente despre care stat(2)
raportează că sunt fișiere obișnuite. Acest
lucru previne problemele, deoarece citirea fișierelor speciale
poate avea consecințe deosebite. Specificarea opțiunii
-s face ca file să
citească și fișierele argument care sunt
fișiere speciale de blocuri sau de caractere. Acest lucru este util
pentru determinarea tipurilor de sistem de fișiere ale datelor din
partițiile de disc brut, care sunt fișiere speciale de
blocuri. De asemenea, această opțiune face ca
file să nu ia în considerare
dimensiunea fișierului raportată de
stat(2), deoarece pe unele sisteme aceasta
raportează o dimensiune zero pentru partițiile de disc
brut.-S,
--no-sandbox-S
dezactivează bancul de probe (sandboxing) care este activat
implicit. Această opțiune este necesară pentru ca
file să execute programe externe de
decomprimare, adică atunci când opțiunea
-z este specificată și
decompresoarele integrate nu sunt disponibile. Pe sistemele în care
bancul de probe nu este disponibil, această opțiune nu are
niciun efect.
Notă: Această versiune Debian a fișierului a fost construită fără suport seccomp, deci această opțiune nu are niciun efect.
-v,
--version-z,
--uncompress-Z,
--uncompress-noreport-0,
--print0Dacă această opțiune este repetată
de mai multe ori, atunci file
afișează doar numele fișierului urmat de un NUL
urmat de descriere (sau ERROR: text) urmat de un al doilea NUL pentru
fiecare intrare.
--helpVariabila de mediu MAGIC poate fi
utilizată pentru a defini numele implicit al fișierului magic.
Dacă această variabilă este definită, atunci
file nu va încerca să deschidă
$HOME/.magic. file
adaugă “.mgc” la valoarea
acestei variabile, după caz. Variabila de mediu
POSIXLY_CORRECT controlează (pe sistemele
care acceptă legături simbolice) dacă
file va încerca sau nu să urmeze
legături simbolice. Dacă este activată, atunci
file urmează legătura
simbolică, altfel nu. Acest lucru este controlat și de
opțiunile -L și
-h.
file va ieși cu
0 dacă operația a avut succes sau
>0 dacă a fost
întâlnită o eroare. Următoarele erori
provoacă mesaje de diagnosticare, dar nu afectează codul de
ieșire din program (așa cum cere POSIX), cu excepția
cazului în care este specificată
-E:
$ file file.c file /dev/{wd0a,hda}
file.c: C program text
file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda: block special (3/0)
$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
/dev/hda2: x86 boot sector
/dev/hda3: x86 boot sector, extended partition table
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda6: Linux/i386 swap file
/dev/hda7: Linux/i386 swap file
/dev/hda8: Linux/i386 swap file
/dev/hda9: empty
/dev/hda10: empty
$ file -i file.c file /dev/{wd0a,hda}
file.c: text/x-c
file: application/x-executable
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file
Se consideră că acest program depășește definiția interfeței FILE(CMD) a Sistemului V, în măsura în care se poate determina din limbajul vag conținut în acesta. Comportamentul său este în mare parte compatibil cu programul System V cu același nume. Cu toate acestea, această versiune cunoaște mai multă magie, astfel încât va produce rezultate diferite (deși mai precise) în multe cazuri.
Singura diferență semnificativă între această versiune și System V este că această versiune tratează orice spațiu alb ca delimitator, astfel încât spațiile din șirurile de modele trebuie eludate. De exemplu,
>10 string language impress (imPRESS data)
într-un fișier magic existent ar trebui să fie modificat în
>10 string language\ impress (imPRESS data)
În plus, în această versiune, dacă un șir de modele conține o bară oblică inversă, aceasta trebuie să fie eludată. De exemplu
0 string \begindata Andrew Toolkit document
într-un fișier magic existent ar trebui să fie modificat în
0 string \\begindata Andrew Toolkit document
Versiunile SunOS 3.2 și ulterioare de la Sun Microsystems
includ o comandă file derivată din cea
System V, dar cu unele extensii. Această versiune diferă de
cea a Sun doar în moduri minore. Ea include extensia operatorului
‘&’, utilizat ca, de exemplu,
>16 long&0x7fffffff >0 not stripped
Pe sistemele pe care este disponibilă libseccomp
(https://github.com/seccomp/libseccomp),
file impune limitarea apelurilor de sistem doar la
cele necesare pentru funcționarea programului. Această
aplicare nu oferă niciun beneficiu de securitate atunci când
file este solicitat să decomprime
fișiere de intrare care rulează programe externe cu
opțiunea -z. Pentru a permite executarea
decompresoarelor externe, trebuie să se dezactiveze bancul de probe
utilizând opțiunea -S.
Fișierele magice au fost colectate din diverse surse, în special din USENET, și au fost completate de diverși autori. Christos Zoulas (adresa de mai jos) va colecta înregistrări suplimentare sau corectate ale fișierelor magice. O consolidare a intrărilor în fișierele magice va fi distribuită periodic.
Ordinea intrărilor în fișierul magic este semnificativă. În funcție de sistemul pe care îl utilizați, ordinea în care sunt puse împreună poate fi incorectă.
A existat o comandă file în
fiecare UNIX cel puțin de la versiunea Research
4 (pagina de manual din noiembrie 1973). Versiunea System V a
introdus o schimbare majoră semnificativă: lista
externă de tipuri magice. Aceasta a încetinit ușor
programul, dar l-a făcut mult mai flexibil.
Acest program, bazat pe versiunea System V, a fost scris de Ian Darwin ⟨ian@darwinsys.com⟩ fără să se uite la codul sursă al altcuiva.
John Gilmore a revizuit codul în detaliu, îmbunătățindu-l față de prima versiune. Geoff Collyer a găsit câteva neajunsuri și a furnizat câteva intrări magice în fișiere. Contribuții ale operatorului ‘&’ de Rob McMahon, ⟨cudcv@warwick.ac.uk⟩, 1989.
Guy Harris, ⟨guy@netapp.com⟩, a făcut multe schimbări din 1993 până în prezent.
Dezvoltarea inițială și întreținerea din 1990 până în prezent de Christos Zoulas ⟨christos@astron.com⟩.
Modificat de Chris Lowth ⟨chris@lowth.com⟩, 2000:
gestionează opțiunea -i pentru a emite
șiruri de tip mime, utilizând un fișier magic
alternativ și o logică internă.
Modificat de Eric Fischer ⟨enf@pobox.com⟩, iulie 2000, pentru a identifica codurile de caractere și a încerca să identifice limbile fișierelor non-ASCII.
Modificat de Reuben Thomas ⟨rrt@sc3d.org⟩, 2007-2011, pentru a îmbunătăți suportul MIME, a fuziona magia MIME și non-MIME, pentru a accepta directoare, precum și fișiere de magie, a aplica multe corecturi de erori, a actualiza și corecta o mulțime de numere magice, a îmbunătăți sistemul de construcție, a îmbunătăți documentația și a rescrie legăturile Python în Python pur.
Lista contribuitorilor la directorul ‘magic’ (fișiere magice) este prea lungă pentru a fi inclusă aici. Știți cine sunteți; vă mulțumim. Numeroși colaboratori sunt enumerați în fișierele sursă.
Drepturi de autor © Ian F. Darwin, Toronto, Canada, 1986-1999. Protejat de drepturile de autor standard Berkeley Software Distribution; a se vedea fișierul COPYING din distribuția sursei.
Fișierele tar.h și is_tar.c au fost scrise de John Gilmore din programul său public tar(1) și nu sunt protejate de licența de mai sus.
Vă rugăm să raportați erorile și să trimiteți corecții la sistemul de urmărire a erorilor la https://bugs.astron.com/ sau la lista de discuții la ⟨file@astron.com⟩ (vizitați mai întâi https://mailman.astron.com/mailman/listinfo/file pentru a vă abona).
Remedierea ieșirii astfel încât testele pentru fanioanele MIME și APPLE să nu fie necesare peste tot, iar ieșirea efectivă să se facă într-un singur loc. Acest lucru necesită un design. Sugestie: împingeți ieșirile posibile pe o listă, apoi alegeți ultima valoare împinsă (cea mai specifică, se speră) la sfârșit sau utilizați o valoare implicită dacă lista este goală. Acest lucru nu ar trebui să încetinească evaluarea.
Gestionarea MAGIC_CONTINUE și
imprimarea \012- între intrări este stângace și
complicată; restructurați și centralizați.
O parte din logica de codare este codificată în encoding.c și poate fi mutată în fișierele magice dacă am avea o adnotare !:charset.
Să se continue eliminarea tuturor erorilor de numere magice. Consultați Debian BTS pentru o sursă bună.
Stocarea șirurilor arbitrar de lungi, de exemplu pentru modele %s, astfel încât acestea să poată fi imprimate. Rezolvă eroarea Debian #271672. Acest lucru poate fi realizat prin alocarea șirurilor într-un grup de șiruri, stocarea grupului de șiruri la sfârșitul fișierului magic și convertirea tuturor indicatorilor de șiruri în distanțe relative din grupul de șiruri.
Adăugarea sintaxei pentru decalaje relative după nivelul curent (eroarea Debian #466037).
Fă ca «file -ki» să funcționeze, adică să ofere mai multe tipuri MIME.
Adaugă o bibliotecă zip pentru a putea arunca o privire în interiorul documentelor Office2007 pentru a imprima mai multe detalii despre conținutul acestora.
Adaugă o opțiune de imprimare a adreselor URL pentru sursele de descriere a fișierelor.
Combină căutările de scripturi și adaugă o modalitate de corelare a numelor executabile cu tipurile MIME (de exemplu, o valoare magică pentru !:mime care face ca șirul rezultat să fie căutat într-un tabel). Acest lucru ar evita adăugarea aceleiași valori magice în mod repetat pentru fiecare nou interpret hash-bang.
Atunci când un descriptor de fișier este disponibil, putem omite și ajusta memoria tampon în loc de gestionarea memoriei tampon pe care o facem acum.
Corectarea “name” și “use” pentru a verifica coerența la momentul compilării ( “name” duplicat, “use” care indică “name” nedefinit ). Fă “name” / “use” mai eficient prin păstrarea unei liste sortate de nume. Cazul special „^” pentru a inversa ordinea de biți „endianness” în analizor, astfel încât să nu trebuiască să fie eludat, și documentează-l.
Dacă decalajele specificate intern în fișier
depășesc dimensiunea memoriei tampon (variabila
HOWMANY din file.h), atunci nu căutăm
la acel decalaj, ci renunțăm. Ar fi mai bine dacă
gestionarea memoriei tampon s-ar face atunci când descriptorul de
fișier este disponibil, astfel încât să putem
căuta în jurul fișierului. Trebuie totuși
să fim atenți, deoarece acest lucru are considerente de
performanță și, prin urmare, de securitate, deoarece se
pot încetini lucrurile prin căutarea repetată.
Acum există suport pentru păstrarea unor tampoane separate și pentru a avea distanțe de la sfârșitul fișierului, dar gestionarea internă a tampoanelor necesită încă o revizuire.
Puteți obține ultima versiune a autorului original prin FTP anonim la adresa ftp.astron.com în directorul /pub/file/file-X.YZ.tar.gz.
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net
| 7 aprilie 2024 | Debian |