Scroll to navigation

FILE(1) General Commands Manual FILE(1)

NUME

filedetermină tipul de fișier

SINOPSIS

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=valoarefile ... file -C [-m fișiere-magice] file [--help]

DESCRIERE

Această pagină de manual documentează versiunea 5.45 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. test care reușește provoacă imprimarea tipului de fișier.

Tipul afișat va conține de obicei unul dintre cuvintele (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), (fișierul conține rezultatul compilării unui program într-o formă inteligibilă pentru un nucleu UNIX sau un altul) sau 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 indică faptul că fișierul este cel mai probabil un fișier de intrare troff(1), la fel cum cuvântul cheie 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).

OPȚIUNI

Face ca comanda file 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.
, --brief
Nu precede liniile de ieșire cu nume de fișiere (mod scurt).
, --compile
Scrie un fișier de ieșire magic.mgc care conține o versiune pre-analizată a fișierului sau directorului magic.
, --checking-printout
Provoacă o imprimare de verificare a formei analizate a fișierului magic. Aceasta este de obicei utilizată împreună cu opțiunea -m pentru depanarea unui nou fișier magic înainte de a-l instala.
Afișează informații interne de depanare la ieșirea de eroare standard.
În cazul erorilor din sistemul de fișiere (fișier care nu a fost găsit etc.), în loc să trateze eroarea ca pe o ieșire obișnuită, așa cum impune POSIX, și să meargă mai departe, emite un mesaj de eroare și iese.
, --exclude nume-test
Exclude testul numit în nume-test din lista de teste efectuate pentru a determina tipul de fișier. Numele valide ale testelor sunt:
apptype
Tipul de aplicație EMX (numai pe EMX).
ascii
Diverse tipuri de fișiere text (acest test va încerca să ghicească codificarea textului, indiferent de valoarea opțiunii ‘encoding’).
encoding
Diferite codificări ale textului pentru testele soft-magic.
tokens
Ignorată pentru compatibilitate cu versiunile anterioare.
cdf
Afișează detaliile fișierelor de documente compuse (Compound Documents Files)..
compress
Verifică dacă există fișiere comprimate și caută în interiorul acestora.
csv
Verifică fișierele care conțin valori separate prin virgulă.
elf
Afișează detaliile fișierului ELF, cu condiția ca testele soft-magic să fie activate și ca elf-magic să fie găsit.
json
Examinează fișierele JSON (RFC-7159) prin analizarea lor pentru conformitate.
soft
Consultă fișierele magice.
simh
Examinează fișierele de bandă SIMH.
tar
Examinează fișierele tar prin verificarea sumei de control a antetului tar de 512 octeți. Excluderea acestui test poate oferi o descriere mai detaliată a conținutului prin utilizarea metodei soft-magic.
text
Un sinonim pentru ‘ascii’.
Ca --exclude, dar ignoră testele despre care file nu știe. Aceasta este destinată compatibilității cu versiunile mai vechi ale file.
Afișează o listă separată prin bare oblice de extensii valide pentru tipul de fișier găsit.
, --separator separator
Utilizează șirul specificat ca separator între numele fișierului și rezultatul fișierului returnat. Valoarea implicită este ‘:’.
, --files-from fișier-de-nume
Citește numele fișierelor care urmează să fie examinate din fișier-de-nume (unul pe linie) înainte de lista de argumente. Fie fișier-de-nume, fie cel puțin un argument de nume de fișier trebuie să fie prezent; pentru a examina intrarea standard, utilizați ‘-’ ca argument de nume de fișier. Rețineți că fișier-de-nume este derulat și numele de fișiere incluse sunt procesate atunci când este întâlnită această opțiune și înainte de orice procesare ulterioară a opțiunilor. Acest lucru permite procesarea mai multor liste de fișiere cu diferite argumente de linie de comandă la aceeași invocare file. 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 @”.
, --no-dereference
Această opțiune face ca legăturile simbolice să nu fie urmărite (pe sistemele care acceptă legături simbolice). Aceasta este opțiunea implicită dacă variabila de mediu POSIXLY_CORRECT nu este definită.
, --mime
Determină comanda file 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-encoding
La fel ca -i, dar imprimă numai elementul (elementele) specificat(e).
, --keep-going
Nu se oprește la prima potrivire, continuă. Potrivirile ulterioare vor fi precedate de șirul ‘„\012-”’. Dacă doriți o linie nouă, consultați opțiunea -r. Modelul magic cu cea mai mare valoare (consultați opțiunea -l) apare primul.
, --list
Afișează o listă de modele și valoarea acestora sortate descrescător în funcție de valoarea magic(5) care este utilizată pentru potrivire (a se vedea și opțiunea -k).
, --dereference
Această opțiune face ca legăturile simbolice să fie urmate, la fel ca opțiunea cu nume similar din ls(1) (pe sistemele care acceptă legături simbolice). Aceasta este opțiunea implicită dacă este definită variabila de mediu POSIXLY_CORRECT.
, --magic-file magicfiles
Specifică o listă alternativă de fișiere și directoare care conțin magic. Aceasta poate fi un singur element sau o listă separată prin două puncte (:). Dacă un fișier magic compilat este găsit alături de un fișier sau director, acesta va fi utilizat în locul său.
, --no-pad
Nu completează numele fișierelor astfel încât acestea să se alinieze în ieșire.
, --no-buffer
Forțează ca ieșirea standard să fie golită (flushed) după verificarea fiecărui fișier. Acest lucru este util numai dacă se verifică o listă de fișiere Aceasta este destinată utilizării de către programele care doresc o ieșire de tip fișier dintr-o conductă.
, --preserve-date
Pe sistemele care acceptă utime(3) sau utimes(2), încearcă să păstreze timpul de acces al fișierelor analizate, pentru a pretinde că file nu le-a citit niciodată.
, --parameter nume=valoare
Definește diverse limite ale parametrilor.
1M numărul maxim de octeți de citit din fișier
256 numărul maxim de note ELF procesate
2K numărul maxim de secțiuni de program ELF procesate
32K numărul maxim de secțiuni ELF procesate
128MB dimensiunea maximă a secțiunii ELF procesate
65K numărul maxim de octeți pentru determinarea codificării
50 limita de recursiune pentru magia indirectă
50 limita numărului de utilizări pentru nume/utilizare magică
8K limita de lungime pentru căutările regex
, --raw
Nu transformă caracterele neimprimabile în \ooo. În mod normal, file transformă caracterele neimprimabile în reprezentarea lor octală.
, --special-files
În mod normal, file î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.
, --no-sandbox
Pe sistemele în care libseccomp (https://github.com/seccomp/libseccomp) este disponibilă, opțiunea -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.

Această versiune Debian a fișierului a fost construită fără suport seccomp, deci această opțiune nu are niciun efect.

, --version
Afișează versiunea programului și iese.
, --uncompress
Încearcă să caute în interiorul fișierelor comprimate.
, --uncompress-noreport
Încearcă să caute în interiorul fișierelor comprimate, dar raportează informații numai despre conținut, nu și despre comprimare.
, --print0
Emite un caracter nul ‘\0’ după sfârșitul numelui fișierului. Frumos pentru ieșirea cut(1). Acest lucru nu afectează separatorul, care este în continuare afișat.

Dacă 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.

Imprimă un mesaj de ajutor și iese.

MEDIU

Variabila 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.

FIȘIERE

/usr/share/misc/magic.mgc
Lista de numere magice compilată implicit.
/usr/share/misc/magic
Directorul care conține fișierele magice implicite.

STARE DE IEȘIRE

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:

  • Un fișier nu poate fi găsit
  • Nu există permisiunea de a citi un fișier
  • Tipul fișierului nu poate fi determinat

EXEMPLE

$ 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

CONSULTAȚI ȘI

hexdump(1), od(1), strings(1), magic(5)

CONFORMAREA CU STANDARDELE

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

SECURITATE

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.

DIRECTORUL MAGIC

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ă.

ISTORIC

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ă.

NOTIFICARE JURIDICĂ

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.

ERORI

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).

DE FĂCUT

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.

DISPONIBILITATE

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.

TRADUCERE

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

21 mai 2023 Debian