| 3CPIO(1) | 3cpio | 3CPIO(1) |
نام (NAME)
3cpio - ابزار پیشرفته استخراج، بازپک کردن و ساخت آرشیوهای cpio و initramfs
خلاصه دستور (SYNOPSIS)
3cpio --count ARCHIVE
3cpio {-c|--create} [-v|--debug] [-C DIR] [--data-align ALIGNMENT] [ARCHIVE] < manifest
3cpio {-e|--examine} [--raw] ARCHIVE
3cpio {-t|--list} [-v|--debug] [-P LIST] ARCHIVE [pattern...]
3cpio {-x|--extract} [-v|--debug] [-C DIR] [-P LIST] [-p] [-s NAME] [--to-stdout] [--force] [-F] ARCHIVE [-F|--file ARCHIVE...] [pattern...]
3cpio {-V|--version}
3cpio {-h|--help}
توضیحات (DESCRIPTION)
برنامه 3cpio ابزاری برای مدیریت فایلهای cpio مربوط به initramfs برای کرنل لینوکس است. قالب بافر initramfs https://www.kernel.org/doc/html/latest/driver-api/early-userspace/buffer-format.html کرنل لینوکس بر پایه قالبهای cpio از نوع newc یا crc است. چندین آرشیو cpio را میتوان به یکدیگر متصل کرد و آخرین آرشیو میتواند فشردهسازی شود. بسته به اینکه چه پشتیبانیهایی در کرنل لینوکس کامپایل شده باشد، میتوان از الگوریتمهای فشردهسازی مختلفی استفاده کرد. 3cpio برای فایلهای cpio در initramfs طراحی شده است و پشتیبانی از سایر قالبهای cpio به آن اضافه نخواهد شد.
قالبهای فشردهسازی زیر پشتیبانی میشوند: bzip2، gzip، lz4، lzma، lzop، xz، zstd.
حالتها (MODES)
--count ARCHIVE
-c, --create [ARCHIVE]
-e, --examine ARCHIVE
Start
End
Size
Compression
Extracted size
-t, --list ARCHIVE [pattern...]
-x, --extract [-F|--file] ARCHIVE [-F|--file ARCHIVE] [pattern...]
-V, --version
-h, --help
گزینهها (OPTIONS)
--data-align ALIGNMENT
آرشیو cpio حاصل ممکن است بسیار تکهتکه (fragmented) شود، که میتواند منجر به افت کارایی هنگام خواندن/استخراج ایمیج از دستگاههایی با ورودی/خروجی تصادفی کُند (مانند دیسکهای مکانیکی) شود.
نکته: استفاده از این گزینه مشخصات cpio newc را کمی تغییر میدهد تا با تزریق بایتهای صفر پس از نام فایل، تراز قطعه داده فراهم شود. این بایتهای صفر در فیلد namesize لحاظ میشوند، اما برخی برنامهها ممکن است تنها یک کاراکتر پایانی صفر (و تراز ۴ بایتی) را انتظار داشته باشند. تا زمانی که اندازه از PATH_MAX فراتر نرود، GNU cpio و Linux initramfs بدون مشکل با آن کار میکنند.
دستور زیر را میتوان برای تعیین اندازه بهینه انتقال فایلسیستم استفاده کرد (که در آن $path مسیری است که آرشیو cpio در آن نوشته خواهد شد):
stat --file-system -c "%s" -- "$path"
-C DIR, --directory=DIR
--make-directories: پوشههای والد مورد نیاز را در صورت لزوم ایجاد میکند. این گزینه فقط در حالت --extract در نظر گرفته میشود.
-P LIST, --parts LIST
N
N-
N-M
-M
-p, --preserve-permissions
--raw
-s NAME, --subdir=NAME
--to-stdout
-v, --verbose
--debug
--force
مانیفست (MANIFEST)
هنگام ساخت آرشیوهای initrd cpio، قالب مانیفست زیر استفاده خواهد شد. مانیفست یک قالب متنی است که خط به خط تجزیه میشود.
اگر خطی با #cpio شروع شود، بهعنوان نشانگر بخش برای شروع یک cpio جدید تفسیر میشود. فشردهسازی را میتوان با افزودن دونقطه و بهدنبال آن قالب فشردهسازی و سطح فشردهسازی اختیاری مشخص کرد. مثال برای cpio فشردهشده با Zstandard با سطح فشردهسازی ۹:
#cpio: zstd -9
تمام خطوطی که با # شروع میشوند به جز #cpio (توضیح داده شده در بالا) بهعنوان توضیحات (کامنت) در نظر گرفته شده و نادیده گرفته میشوند.
هر عنصر در خط با تب (tab) جدا میشود و انتظار میرود یکی از انواع فایلهای زیر باشد:
<location> <name> file <mode> <uid> <gid> <mtime> <filesize> <location> <name> dir <mode> <uid> <gid> <mtime> <location> <name> block <mode> <uid> <gid> <mtime> <major> <minor> <location> <name> char <mode> <uid> <gid> <mtime> <major> <minor> <location> <name> link <mode> <uid> <gid> <mtime> <target> <location> <name> fifo <mode> <uid> <gid> <mtime> <location> <name> sock <mode> <uid> <gid> <mtime>
نوع fifo همچنین به عنوان لوله نامگذاریشده (named pipe) شناخته میشود (به fifo(7) مراجعه کنید).
در صورتی که عنصری خالی یا برابر با - باشد، به عنوان مشخصنشده در نظر گرفته شده و از فایل ورودی استخراج میشود.
<location>
<name>
<mode>
<uid>
<gid>
<mtime>
<filesize>
<major>
<minor>
<target>
محدودیتها: فایلها نمیتوانند با # شروع شوند (به عنوان کامنت در نظر گرفته میشوند)، برابر با - باشند (به عنوان مشخصنشده در نظر گرفته میشوند)، یا شامل کاراکتر تب باشند (با تب تفکیک میشوند). انتظار نمیرود این محدودیتهای فایل مانیفست در عمل مشکلی ایجاد کنند.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
SOURCE_DATE_EPOCH
وضعیت خروج (EXIT STATUS)
0
1
2
مثالها (EXAMPLES)
فهرست کردن تعداد آرشیوهای cpio موجود در یک فایل initramfs:
$ 3cpio --count /boot/initrd.img 4
بررسی محتوای initramfs cpio در یک سیستم Ubuntu 24.04:
$ 3cpio --examine /boot/initrd.img Start End Size Compr. Extracted 0 B 148 kB 148 kB cpio 147 kB 148 kB 13.3 MB 13.1 MB cpio 13.1 MB 13.3 MB 55.2 MB 41.9 MB cpio 41.7 MB 55.2 MB 62.0 MB 6.74 MB zstd 15.6 MB
همچنین یک قالب خروجی ماشینخوان در دسترس است:
$ 3cpio --examine --raw /boot/initrd.img 0 148480 148480 cpio 147350 148480 13275136 13126656 cpio 13125632 13275136 55215104 41939968 cpio 41692226 55215104 61956920 6741816 zstd 15616306
این initramfs cpio از سه آرشیو cpio فشردهنشده و به دنبال آن یک آرشیو cpio فشردهشده با Zstandard تشکیل شده است.
فهرست کردن محتوای initramfs cpio در یک سیستم Ubuntu 24.04:
$ 3cpio --list /boot/initrd.img . kernel kernel/x86 kernel/x86/microcode kernel/x86/microcode/AuthenticAMD.bin kernel kernel/x86 kernel/x86/microcode kernel/x86/microcode/.enuineIntel.align.0123456789abc kernel/x86/microcode/GenuineIntel.bin . usr usr/lib usr/lib/firmware usr/lib/firmware/3com usr/lib/firmware/3com/typhoon.bin.zst [...]
اولین cpio فقط شامل میکروکد AMD است. دومین cpio فقط شامل میکروکد Intel است. سومین cpio شامل فایلهای میانافزار (firmware) و ماژولهای کرنل است.
استخراج محتوای initramfs cpio در زیرپوشه initrd در یک سیستم Ubuntu 24.04:
$ 3cpio --extract -C initrd /boot/initrd.img $ ls initrd bin cryptroot init lib lib.usr-is-merged run scripts var conf etc kernel lib64 libx32 sbin usr
ایجاد یک آرشیو cpio مشابه سایر ابزارهای cpio با استفاده از دستور find:
$ cd inputdir && find . | sort | 3cpio --create ../example.cpio
به دلیل پشتیبانی از قالب فایل مانیفست، 3cpio میتواند بدون نیاز به کپی کردن فایلها در یک دایرکتوری موقت، آرشیوهای cpio ایجاد کند. مثالی برای ایجاد مستقیم یک ایمیج cpio میکروکد اولیه با استفاده از فایلهای نصبشده روی سیستم:
$ cat manifest - kernel dir 755 0 0 1751654557 - kernel/x86 dir 755 0 0 1752011622 /usr/lib/firmware/amd-ucode kernel/x86/microcode /usr/lib/firmware/amd-ucode/microcode_amd_fam19h.bin kernel/x86/microcode/AuthenticAMD.bin $ 3cpio --create amd-ucode.img < manifest $ 3cpio --list --verbose amd-ucode.img drwxr-xr-x 2 root root 0 Jul 4 20:42 kernel drwxr-xr-x 2 root root 0 Jul 8 23:53 kernel/x86 drwxr-xr-x 2 root root 0 Jun 10 10:51 kernel/x86/microcode -rw-r--r-- 1 root root 100684 Mar 23 22:42 kernel/x86/microcode/AuthenticAMD.bin
مثالی برای ایجاد یک ایمیج initrd شامل یک cpio میکروکد اولیه فشردهنشده و به دنبال آن یک cpio فشردهشده با Zstandard:
$ cat manifest #cpio - kernel dir 755 0 0 1751654557 - kernel/x86 dir 755 0 0 1752011622 /usr/lib/firmware/amd-ucode kernel/x86/microcode /usr/lib/firmware/amd-ucode/microcode_amd_fam19h.bin kernel/x86/microcode/AuthenticAMD.bin #cpio: zstd -9 / /bin /usr /usr/bin /usr/bin/bash # This is a comment. Leaving the remaining files as task for the reader. $ 3cpio --create initrd.img < manifest $ 3cpio --examine initrd.img Start End Size Compr. Extracted 0 B 101 kB 101 kB cpio 101 kB 101 kB 786 kB 685 kB zstd 1.45 MB $ 3cpio --list --verbose initrd.img drwxr-xr-x 2 root root 0 Jul 4 20:42 kernel drwxr-xr-x 2 root root 0 Jul 8 23:53 kernel/x86 drwxr-xr-x 2 root root 0 Jun 10 10:51 kernel/x86/microcode -rw-r--r-- 1 root root 100684 Mar 23 22:42 kernel/x86/microcode/AuthenticAMD.bin drwxr-xr-x 2 root root 0 Jun 5 14:11 . lrwxrwxrwx 1 root root 7 Mar 20 2022 bin -> usr/bin drwxr-xr-x 2 root root 0 Apr 20 2023 usr drwxr-xr-x 2 root root 0 Jul 9 09:56 usr/bin -rwxr-xr-x 1 root root 1446024 Mar 31 2024 usr/bin/bash
همچنین ببینید (SEE ALSO)
bsdcpio(1), cpio(1), lsinitramfs(8), lsinitrd(1)
حق نشر (COPYING)
کپیرایت
© 2024-2026 Benjamin Drung.
استفاده
آزاد از این
نرمافزار
تحت شرایط
مجوز ISC مجاز
است.
نویسندگان (AUTHORS)
Benjamin Drung
| 2026-02-15 | 3cpio 0.5.1 |