COREDUMPCTL(1) coredumpctl COREDUMPCTL(1)

coredumpctl - بازیابی و پردازش گزارشهای تخلیه حافظه هسته

coredumpctl [OPTIONS...] {COMMAND} [PID|COMM|EXE|MATCH...]

coredumpctl ابزاری است که می‌تواند برای بازیابی و پردازش تخلیه‌های حافظه (core dump) و فراداده‌هایی که توسط systemd-coredump(8) ذخیره شده‌اند به کار رود.

دستورات زیر پشتیبانی می‌شوند:

list

تخلیه‌های حافظه ثبت‌شده در ژورنال را که با مشخصات تعیین‌شده مطابقت دارند فهرست می‌کند. اگر هیچ دستوری مشخص نشود، این حالت پیش‌فرض ضمنی است.

خروجی به گونه‌ای طراحی شده که برای انسان خوانا باشد و شامل جدولی با ستون‌های زیر است:

TIME

برچسب زمانی خرابی (crash)، همان‌طور که توسط کرنل گزارش شده است.

افزوده شده در نسخه 233.

PID

شناسه پردازشی که دچار خرابی شده است.

افزوده شده در نسخه 233.

UID, GID

شناسه‌های کاربر و گروه پردازشی که دچار خرابی شده است.

افزوده شده در نسخه 233.

SIGNAL

سیگنالی که در صورت وجود، موجب خرابی پردازش شده است.

افزوده شده در نسخه 233.

COREFILE

اطلاعاتی درباره این که آیا تخلیه حافظه ذخیره شده است یا خیر، و اینکه آیا هنوز قابل دسترسی است: "none" به این معنی است که تخلیه حافظه ذخیره نشده است، "-" به این معنی است که در دسترس نبوده است (برای نمونه به این دلیل که پردازش با یک سیگنال خاتمه نیافته است)، "present" به این معنی است که پرونده تخلیه حافظه توسط کاربر فعلی قابل دسترسی است، "journal" به این معنی است که تخلیه حافظه در "journal" ذخیره شده است، "truncated" مشابه یکی از دو حالت قبلی است، اما تخلیه حافظه بیش از حد بزرگ بوده و به طور کامل ذخیره نشده است، "error" به این معنی است که پرونده تخلیه حافظه قابل دسترسی نیست، به احتمال زیاد به دلیل مجوزهای ناکافی، و "missing" به این معنی است که تخلیه حافظه در یک پرونده ذخیره شده بود، اما این پرونده از آن زمان حذف شده است.

افزوده شده در نسخه 233.

EXE

مسیر کامل به فایل اجرایی. برای ردگیری پشته (backtrace) اسکریپت‌ها، این نام مفسر است.

افزوده شده در نسخه 233.

شایان ذکر است که محدودیت‌های متفاوتی بر روی داده‌های ذخیره‌شده در ژورنال و پرونده‌های تخلیه حافظه ذخیره‌شده در /var/lib/systemd/coredump اعمال می‌شود، نمای کلی را در systemd-coredump(8) ببینید. بنابراین کاملاً ممکن است که یک تخلیه حافظه خاص همچنان در ژورنال فهرست شده باشد در حالی که پرونده تخلیه حافظه متناظر با آن قبلاً حذف شده است.

افزوده شده در نسخه 215.

info

اطلاعات تفصیلی درباره آخرین تخلیه حافظه یا تخلیه‌های حافظه منطبق با مشخصات تعیین‌شده ثبت‌شده در ژورنال را نمایش می‌دهد.

افزوده شده در نسخه 215.

dump

آخرین تخلیه حافظه منطبق با مشخصات تعیین‌شده را استخراج می‌کند. تخلیه حافظه روی خروجی استاندارد نوشته خواهد شد، مگر اینکه یک فایل خروجی با --output= مشخص شده باشد.

افزوده شده در نسخه 215.

debug

یک اشکال‌زدا (debugger) را روی آخرین تخلیه حافظه منطبق با مشخصات تعیین‌شده فراخوانی می‌کند. به‌طور پیش‌فرض، gdb(1) به کار خواهد رفت. این مورد را می‌توان با استفاده از گزینه --debugger= یا متغیر محیطی $SYSTEMD_DEBUGGER تغییر داد. از گزینه --debugger-arguments= برای ارسال آرگومان‌های خط فرمان اضافی به اشکال‌زدا استفاده کنید.

افزوده شده در نسخه 239.

گزینه‌های زیر پشتیبانی می‌شوند:

-h, --help

یک متن راهنمای کوتاه را چاپ کرده و خارج می‌شود.

--version

یک رشته نسخه کوتاه را چاپ کرده و خارج می‌شود.

--no-pager

خروجی را به یک صفحه‌بند (pager) هدایت نمی‌کند.

--no-legend

راهنما (legend)، یعنی سرستون‌ها و پاورقی حاوی نکات راهنما را چاپ نمی‌کند.

--json=MODE

خروجی را قالب‌بندی‌شده به صورت JSON نمایش می‌دهد. یکی از موارد زیر را می‌پذیرد: "short" (برای کوتاه‌ترین خروجی ممکن بدون هیچ فاصله یا شکست خط اضافی)، "pretty" (برای نسخه‌ای خواناتر از همان خروجی، همراه با فاصله‌گذاری و شکست خط) یا "off" (برای خاموش کردن خروجی JSON، که حالت پیش‌فرض است).

-1

تنها اطلاعات جدیدترین تخلیه حافظه را نمایش می‌دهد، به جای اینکه تمام تخلیه‌های حافظه شناخته‌شده را فهرست کند. معادل با --reverse -n 1.

افزوده شده در نسخه 215.

-n INT

حداکثر تعداد مدخل‌های مشخص‌شده را نمایش می‌دهد. پارامتر مشخص‌شده باید یک عدد صحیح بزرگ‌تر یا مساوی با 1 باشد.

افزوده شده در نسخه 248.

-S, --since

تنها مدخل‌هایی را چاپ می‌کند که پس از تاریخ مشخص‌شده هستند.

افزوده شده در نسخه 233.

-U, --until

تنها مدخل‌هایی را چاپ می‌کند که تا پیش از تاریخ مشخص‌شده هستند.

افزوده شده در نسخه 233.

-r, --reverse

خروجی را معکوس می‌کند تا جدیدترین مدخل‌ها اول نمایش داده شوند.

افزوده شده در نسخه 233.

-F FIELD, --field=FIELD

تمام مقادیر ممکن داده‌ای را که فیلد مشخص‌شده در مدخل‌های تطبیق‌یافته تخلیه حافظه در ژورنال به خود می‌گیرد، چاپ می‌کند.

افزوده شده در نسخه 215.

-o FILE, --output=FILE

تخلیه حافظه را در FILE می‌نویسد.

افزوده شده در نسخه 215.

--debugger=DEBUGGER

از اشکال‌زدای داده‌شده برای دستور debug استفاده می‌کند. اگر داده نشود و $SYSTEMD_DEBUGGER تنظیم نشده باشد، آنگاه gdb(1) استفاده خواهد شد.

افزوده شده در نسخه 239.

-A ARGS, --debugger-arguments=ARGS

مقادیر ARGS مشخص‌شده را به عنوان آرگومان‌های خط فرمان اضافی به اشکال‌زدا ارسال می‌کند. در صورتی که ARGS حاوی فاصله خالی باشد، آن را به درستی در نقل‌قول قرار دهید. (بخش مثال‌ها را ببینید.)

افزوده شده در نسخه 248.

--file=GLOB

یک الگوی فایل (file glob) را به عنوان آرگومان می‌پذیرد. در صورت تعیین، coredumpctl بر روی پرونده‌های ژورنال مشخص‌شده منطبق با GLOB به جای مسیرهای پیش‌فرض ژورنال سیستمی و زمان اجرا عمل خواهد کرد. می‌تواند چندین بار مشخص شود، که در این صورت پرونده‌ها به طور مناسب درهم‌آمیخته (interleaved) خواهند شد.

افزوده شده در نسخه 246.

-D DIR, --directory=DIR

از پرونده‌های ژورنال در پوشه مشخص‌شده DIR استفاده می‌کند.

افزوده شده در نسخه 225.

--root=ROOT

از دایرکتوری ریشه ROOT هنگام جستجو برای تخلیه‌های حافظه استفاده می‌کند.

افزوده شده در نسخه 252.

--image=image

مسیری به یک پرونده ایمیج دیسک یا گره دستگاه بلوکی (block device node) را می‌پذیرد. در صورت تعیین، تمامی عملیات بر روی سیستم فایل موجود در ایمیج دیسک اشاره‌شده اعمال می‌شود. این گزینه شبیه به --root=، اما روی سیستم‌فایل‌های ذخیره‌شده در ایمیج‌های دیسک یا دستگاه‌های بلوکی عمل می‌کند. ایمیج دیسک باید یا فقط شامل یک سیستم فایل باشد یا مجموعه‌ای از سیستم فایل‌ها در یک جدول پارتیشن GPT بر اساس UAPI.2 Discoverable Partitions Specification[1]. برای اطلاعات بیشتر درباره ایمیج‌های دیسک پشتیبانی‌شده، سوئیچ هم‌نام systemd-nspawn(1) را ببینید.

افزوده شده در نسخه 252.

--image-policy=policy

یک رشته خط‌مشی ایمیج را طبق systemd.image-policy(7) به عنوان آرگومان می‌پذیرد. این خط‌مشی هنگام کار با ایمیج دیسک مشخص‌شده از طریق --image= اعمال می‌شود، بالا را ببینید. اگر مشخص نشود، پیش‌فرض آن خط‌مشی "*" است، یعنی تمام سیستم فایل‌های شناسایی‌شده در ایمیج استفاده می‌شوند.

-q, --quiet

پیام‌های اطلاعاتی درباره عدم دسترسی به پرونده‌های ژورنال و تخلیه‌های حافظه احتمالی در حال انجام (in-flight) را سرکوب می‌کند.

افزوده شده در نسخه 233.

--all

تمام پرونده‌های ژورنال موجود در /var/log/journal/ (به استثنای فضاهای نام ژورنال) را به جای تنها پرونده‌های محلی بررسی می‌کند.

افزوده شده در نسخه 250.

یک تطبیق می‌تواند یکی از موارد زیر باشد:

PID

شناسه پردازش (PID) پردازشی که حافظه آن تخلیه شده است. یک عدد صحیح است.

افزوده شده در نسخه 215.

COMM

نام فایل اجرایی (منطبق با COREDUMP_COMM=). نباید شامل اسلش باشد.

افزوده شده در نسخه 215.

EXE

مسیر فایل اجرایی (منطبق با COREDUMP_EXE=). باید حداقل شامل یک اسلش باشد.

افزوده شده در نسخه 215.

MATCH

فیلتر تطبیق عمومی journalctl، باید شامل یک علامت مساوی ("=") باشد. به journalctl(1) مراجعه کنید.

افزوده شده در نسخه 215.

در صورت موفقیت، 0 برگردانده می‌شود؛ در غیر این صورت، یک کد شکست غیر صفر برگردانده می‌شود. پیدا نشدن هیچ تخلیه حافظه منطبقی به عنوان شکست تلقی می‌شود.

$SYSTEMD_DEBUGGER

استفاده از اشکال‌زدای داده‌شده برای دستور debug. گزینه --debugger= را ببینید.

افزوده شده در نسخه 239.

مثال 1. فهرست کردن تمام تخلیه‌های حافظه یک برنامه

$ coredumpctl list /usr/lib64/firefox/firefox
TIME       PID  UID  GID SIG     COREFILE EXE                         SIZE
Tue ...   8018 1000 1000 SIGSEGV missing  /usr/lib64/firefox/firefox     -
Wed ... 251609 1000 1000 SIGTRAP missing  /usr/lib64/firefox/firefox     -
Fri ... 552351 1000 1000 SIGSEGV present  /usr/lib64/firefox/firefox 28.7M

ژورنال شامل سه مدخل مربوط به /usr/lib64/firefox/firefox است، و تنها آخرین مدخل هنوز دارای یک پرونده تخلیه حافظه در دسترس است (در فضای ذخیره‌سازی خارجی روی دیسک).

توجه داشته باشید که coredumpctl برای بازیابی مدخل‌های مربوطه از ژورنال نیاز به دسترسی به پرونده‌های ژورنال دارد. بنابراین، یک کاربر غیرممتاز معمولاً فقط اطلاعات مربوط به برنامه‌های دچار خرابی‌شدهٔ همان کاربر را می‌بیند.

مثال 2. فراخوانی gdb روی آخرین تخلیه حافظه

$ coredumpctl debug

مثال 3. استفاده از gdb برای نمایش اطلاعات کامل ثبات‌ها از آخرین تخلیه حافظه

$ coredumpctl debug --debugger-arguments="-batch -ex 'info all-registers'"

مثال 4. نمایش اطلاعات درباره یک تخلیه حافظه منطبق‌شده با PID

$ coredumpctl info 6654
           PID: 6654 (bash)
           UID: 1000 (user)
           GID: 1000 (user)
        Signal: 11 (SEGV)
     Timestamp: Mon 2021-01-01 00:00:01 CET (20s ago)
  Command Line: bash -c $'kill -SEGV $$'
    Executable: /usr/bin/bash
 Control Group: /user.slice/user-1000.slice/...
          Unit: user@1000.service
     User Unit: vte-spawn-....scope
         Slice: user-1000.slice
     Owner UID: 1000 (user)
       Boot ID: ...
    Machine ID: ...
      Hostname: ...
       Storage: /var/lib/systemd/coredump/core.bash.1000.....zst (present)
  Size on Disk: 51.7K
       Message: Process 130414 (bash) of user 1000 dumped core.
                Stack trace of thread 130414:
                #0  0x00007f398142358b kill (libc.so.6 + 0x3d58b)
                #1  0x0000558c2c7fda09 kill_builtin (bash + 0xb1a09)
                #2  0x0000558c2c79dc59 execute_builtin.lto_priv.0 (bash + 0x51c59)
                #3  0x0000558c2c79709c execute_simple_command (bash + 0x4b09c)
                #4  0x0000558c2c798408 execute_command_internal (bash + 0x4c408)
                #5  0x0000558c2c7f6bdc parse_and_execute (bash + 0xaabdc)
                #6  0x0000558c2c85415c run_one_command.isra.0 (bash + 0x10815c)
                #7  0x0000558c2c77d040 main (bash + 0x31040)
                #8  0x00007f398140db75 __libc_start_main (libc.so.6 + 0x27b75)
                #9  0x0000558c2c77dd1e _start (bash + 0x31d1e)

مثال 5. استخراج آخرین تخلیه حافظه /usr/bin/bar در فایلی با نام bar.coredump

$ coredumpctl -o bar.coredump dump /usr/bin/bar

systemd-coredump(8), coredump.conf(5), systemd-journald.service(8), gdb(1)

1.
UAPI.2 Discoverable Partitions Specification
systemd 261.2