Hvad er AR-filformatet?
Arkivformatet .ar stammer helt tilbage fra Unix Version 1 (1971), udviklet hos Bell Labs som det oprindelige Unix-arkiveringsværktøj. En .ar-fil sammenkæder flere medlemsfiler, hver forudgået af en fast 60-byte ASCII-header, der registrerer medlemmets navn, ændringstidspunkt, rettigheder og størrelse i bytes. Ethvert arkiv begynder med den 8-byte lange «magic string» !<arch> efterfulgt af et enkelt linjeskift (0x0A).
Formatet gemmer som standard medlemmerne ukomprimeret. Der findes to hovedvarianter:
- BSD-varianten (brugt på macOS) udvider lange filnavne inline efter hver medlemsheader.
- System V/GNU-varianten (brugt på Linux) gemmer lange navne i et specielt
//-medlem og foranvender en/-symbolindeksindgang for effektiv opslag ved link-tid.
I dag støder man oftest på .ar som statiske .a-biblioteker på Linux og macOS, hvor ar-værktøjet fra GNU binutils er standardimplementeringen. Debian .deb-pakker er også ar-arkiver - hvis man omdøber en .deb og udpakker den, afsløres de indre control.tar- og data.tar-medlemmer. Almindelige ar-kommandoer: ar rcs libfoo.a *.o opretter et arkiv, ar t archive.ar viser medlemmerne, og ar x archive.ar udpakker dem.
Sikkerhed og tryghed
RISIKO: LOWAR-arkiver i sig selv er containere uden eksekverbar semantik - de kan ikke automatisk køre kode. Medlemmerne indeni kan dog være kompilerede objektfiler eller eksekverbare filer, der kan være ondsindede. Når du udpakker et ar-arkiv fra en upålidelig kilde, bør du inspicere de udpakkede filer, før du kører dem. Statiske biblioteker, der linkes ind i dine binære filer, bliver en del af disse; et manipuleret statisk bibliotek er en angrebsvektor i forsyningskæden (f.eks. kompromitterede toolchain-arkiver). Bekræft altid kontrolsummer, når du downloader toolchain-arkiver, der indeholder .a/.ar-biblioteker.
Formatdetaljer
kort fortalt- Debian-pakke (.deb) - En .deb-fil er et ar-arkiv, der indeholder control.tar.* og data.tar.* medlemmer; ar-containeren er gennemsigtig for slutbrugere (dpkg håndterer den).
- .a statisk bibliotek (samme format, anden filendelse) - På Linux/macOS er .a den konventionelle filendelse for statiske biblioteker i ar-format; .ar er mindre almindelig, men identisk.
Programmer der åbner AR-filer
Tekniske detaljer
dyb specifikation| Magic bytes | 21 3C 61 72 63 68 3E 0A - ASCII-streng !<arch> plus linjeskift (0x0A) ved offset 0 |
| MIME-type | application/x-archive |
| Header-størrelse pr. medlem | 60 bytes (felter med fast bredde, ASCII-kodet) |
| Header-feltlayout | Filnavn 16 B, ændringstidspunkt 12 B, UID 6 B, GID 6 B, mode 8 B, størrelse 10 B, magic 2 B |
| Medlemsjustering | 2-byte grænse; medlemmer med ulige længde udfyldes med et enkelt linjeskiftstegn (0x0A) |
| Komprimering | Ingen som standard - medlemsfiler gemmes ordret og ukomprimeret |
| Integritetskontrol | Ingen kontrolsummer pr. medlem eller på arkivniveau i ar-formatet |
| Grænse for filnavne | 16 tegn i fast header; ubegrænset via BSD inline-udvidelse eller System V // medlemstabel |
| Formatvarianter | BSD (macOS): inline udvidede navne; System V/GNU (Linux): // medlemstabel til lange navne |
| GNU-symbolindeks | GNU ar foranvender et / symboltabel-medlem til .a-arkiver for effektiv symbolopslag ved link-tid |
| Understøttelse af tynde arkiver | GNU «thin archives» bruger magic 21 3C 74 68 69 6E 3E 0A (!<thin>) og gemmer filstier, ikke data |
| Primære anvendelser | .a statiske biblioteker (Linux, macOS), .deb Debian-pakker, .ipk OpenWrt-pakker |
| Platforme | Linux, macOS, FreeBSD, Solaris, AIX, Windows (MinGW/Cygwin/WSL) |
| Udgivet | 1971 (Unix v1, as the original Unix archiver) |
| Seneste version | POSIX.1-2017 specifies the format; GNU ar (binutils) is current implementation |
| Åben standard | Ja · royaltyfri |
| Specifikation | pubs.opengroup.org |
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om AR-filer.