.\" -*- coding: UTF-8 -*- .if \n(.g .ds T< \\FC .if \n(.g .ds T> \\F[\n[.fam]] .de URL \\$2 \(la\\$1\(ra\\$3 .. .if \n(.g .mso www.tmac .TH lxc-attach 1 2026-08-01 "" "" .SH "نام (NAME)" lxc-attach \- اجرای یک فرایند در داخل یک کانتینر در حال اجرا .SH "خلاصه دستور (SYNOPSIS)" 'nh .fi .ad l \fBlxc-attach\fR \kx .if (\nx>(\n(.l/2)) .nr x (\n(.l/5) 'in \n(.iu+\nxu {-n, --name \fIname\fR} [-f, --rcfile \fIconfig_file\fR] [-a, --arch \fIarch\fR] [-e, --elevated-privileges \fIprivileges\fR] [-s, --namespaces \fInamespaces\fR] [-R, --remount-sys-proc] [--keep-env] [--clear-env] [-v, --set-var \fIvariable\fR] [--keep-var \fIvariable\fR] [-u, --uid \fIuid\fR] [-g, --gid \fIgid\fR] [-- \fIcommand\fR] 'in \n(.iu-\nxu .ad b 'hy .SH "توضیحات (DESCRIPTION)" دستور \fBlxc-attach\fR دستور (\fIcommand\fR) مشخص‌شده را در داخل کانتینری که با \fIname\fR تعیین شده است اجرا می‌کند. کانتینر باید از قبل در حال اجرا باشد. .PP اگر هیچ \fIcommand\fR مشخص نشده باشد، شل پیش‌فرض فعلی کاربری که \fBlxc-attach\fR را اجرا کرده در داخل کانتینر جستجو شده و اجرا می‌شود. این کار در صورتی که چنین کاربری در کانتینر وجود نداشته باشد یا کانتینر سازوکار nsswitch کارآمدی نداشته باشد، با شکست مواجه خواهد شد. .PP نسخه‌های پیشین \fBlxc-attach\fR صرفاً به فضاهای نام (namespaces) مشخص‌شده یک کانتینر متصل می‌شدند و یک شل یا دستور تعیین‌شده را بدون تخصیص اولیه یک شبه‌ترمینال (pseudo-terminal) اجرا می‌کردند. این امر آن‌ها را در برابر جعل ورودی از طریق فراخوانی \fBioctl\fR با دستور TIOCSTI پس از جابه‌جایی میان زمینه‌های اجرایی فضای کاربر با سطوح دسترسی متفاوت آسیب‌پذیر می‌کرد. نسخه‌های جدیدتر \fBlxc-attach\fR تلاش می‌کنند تا یک جفت توصیف‌گر فایل شبه‌ترمینال را روی میزبان تخصیص دهند و پیش از اجرای شل یا دستور، هرگونه توصیف‌گر فایل استانداردی را که به ترمینال اشاره دارد، به سمت کانتینر شبه‌ترمینال متصل کنند. توجه داشته باشید که اگر هیچ‌یک از توصیف‌گرهای فایل استاندارد به یک ترمینال اشاره نکنند، \fBlxc-attach\fR تلاشی برای تخصیص شبه‌ترمینال نخواهد کرد، بلکه صرفاً به فضاهای نام کانتینر متصل شده و شل یا دستور مشخص‌شده را اجرا می‌کند. .SH "گزینه‌ها (OPTIONS)" .TP \*(T<\fB\-f, \-\-rcfile \fR\*(T>\fIconfig_file\fR مشخص کردن فایل پیکربندی جهت تنظیم قابلیت‌های مجازی‌سازی و ایزولاسیون برای کانتینر. در صورت وجود، این فایل پیکربندی حتی اگر از قبل یک فایل پیکربندی در کانتینر ایجاد‌شده (از طریق lxc-create) وجود داشته باشد، استفاده خواهد شد. .TP \*(T<\fB\-a, \-\-arch \fR\*(T>\fIarch\fR معماری‌ای را که هسته باید به نظر برسد دستور اجراشده تحت آن در حال اجراست تعیین می‌کند. این گزینه همان تنظیمات گزینه \*(T<\fBlxc.arch\fR\*(T> در فایل‌های پیکربندی کانتینر را می‌پذیرد؛ به \fB\*(T<\fIlxc.conf\fR\*(T>\fR(5) مراجعه کنید. به صورت پیش‌فرض، معماری فعلی کانتینر در حال اجرا استفاده خواهد شد. .TP \*(T<\fB\-e, \-\-elevated\-privileges \fR\*(T>\fIprivileges\fR\*(T<\fB \fR\*(T> هنگام اجرای \fIcommand\fR در داخل کانتینر، امتیازات و دسترسی‌ها را کاهش ندهد. در صورت مشخص شدن این گزینه، فرایند جدید به cgroup(های) کانتینر افزوده نخواهد شد (\fInot\fR) و پیش از اجرا قابلیت‌های خود را رها نخواهد کرد. در صورتی که نمی‌خواهید همه دسترسی‌ها ارتقا یابند، می‌توانید آن‌ها را به صورت یک فهرست جداشده با خط عمودی (pipe)، مانند \fICGROUP|LSM\fR مشخص کنید. مقادیر مجاز عبارتند از \fICGROUP\fR، \fICAP\fR و \fILSM\fR که به ترتیب نمایانگر دسترسی‌های cgroup، قابلیت‌ها و محدودیت‌ها هستند. (نماد خط عمودی باید اسکیپ شود، مثلاً \fICGROUP\e|LSM\fR یا در نقل‌قول قرار گیرد، مانند \fI"CGROUP|LSM"\fR.) \fIهشدار:\fR اگر دستور اقدام به راه‌اندازی زیرفرایندهایی کند که پس از خاتمه فرایند اصلی متصل‌شده همچنان فعال بمانند، ممکن است دسترسی‌ها و امتیازات به داخل کانتینر نشت کنند. راه‌اندازی (یا راه‌اندازی مجدد) دیمون‌ها در داخل کانتینر مشکل‌ساز است، به ویژه اگر آن دیمون زیرفرایندهای زیادی ایجاد کند مانند \fBcron\fR یا \fBsshd\fR. \fIبا احتیاط بسیار زیاد استفاده شود.\fR .TP \*(T<\fB\-s, \-\-namespaces \fR\*(T>\fInamespaces\fR فضاهای نامی را که باید به آن‌ها متصل شد به صورت یک فهرست جداشده با خط عمودی تعیین می‌کند، مانند \fINETWORK|IPC\fR. مقادیر مجاز عبارتند از \fIMOUNT\fR، \fIPID\fR، \fIUTSNAME\fR، \fIIPC\fR، \fIUSER\fR و \fINETWORK\fR. این امکان را فراهم می‌سازد که زمینه فرایند مثلاً به فضای نام شبکه کانتینر تغییر یابد در حالی که سایر فضاهای نام همانند میزبان باقی بمانند. (نماد خط عمودی باید اسکیپ شود، مثلاً \fIMOUNT\e|PID\fR یا درون نقل‌قول قرار گیرد، مانند \fI"MOUNT|PID"\fR.) \fIمهم:\fR این گزینه مستلزم \*(T<\fB\-e\fR\*(T> است. .TP \*(T<\fB\-R, \-\-remount\-sys\-proc\fR\*(T> هنگام استفاده از \*(T<\fB\-s\fR\*(T> و در صورتی که فضای نام mount گنجانده نشده باشد، این فلگ باعث می‌شود \fBlxc-attach\fR مسیرهای \fI/proc\fR و \fI/sys\fR را مجدداً متصل (remount) کند تا زمینه‌های دیگر فضاهای نام فعلی بازتاب داده شوند. برای جزئیات بیشتر لطفاً بخش \fIنکات\fR را ببینید. در صورتی که به هر حال به فضای نام mount متصل شوید، این گزینه نادیده گرفته خواهد شد. .TP \*(T<\fB\-\-keep\-env\fR\*(T> محیط فعلی را برای برنامه‌های متصل‌شده حفظ می‌کند. این رفتار پیش‌فرض فعلی است (از نسخه 0.9)، اما احتمالاً در آینده تغییر خواهد کرد زیرا ممکن است اطلاعات ناخواسته را به کانتینر نشت دهد. اگر به در دسترس بودن متغیرهای محیطی برای برنامه متصل متکی هستید، برای اطمینان از سازگاری در آینده از این گزینه استفاده کنید. علاوه بر متغیرهای محیطی فعلی، مقدار container=lxc نیز تنظیم خواهد شد. .TP \*(T<\fB\-\-clear\-env\fR\*(T> محیط را پیش از اتصال پاکسازی می‌کند تا هیچ متغیر محیطی ناخواسته‌ای به داخل کانتینر نشت نکند. متغیر container=lxc تنها متغیر محیطی خواهد بود که برنامه متصل‌شده با آن آغاز به کار می‌کند. .TP \*(T<\fB\-v, \-\-set\-var \fR\*(T>\fIvariable\fR یک متغیر محیطی اضافی تنظیم می‌کند که توسط برنامه متصل‌شده در کانتینر قابل مشاهده است. این متغیر به شکل "VAR=VALUE" مشخص می‌شود و می‌توان چندین بار آن را تعیین کرد. .TP \*(T<\fB\-\-keep\-var \fR\*(T>\fIvariable\fR یک متغیر محیطی مشخص را حفظ می‌کند. این گزینه فقط در ترکیب با \fI--clear-env\fR قابل استفاده است و می‌توان آن را چندین بار تعیین کرد. .TP \*(T<\fB\-u, \-\-uid \fR\*(T>\fIuid\fR دستور \fIcommand\fR را با شناسه کاربری (مقدار عددی) \fIuid\fR در داخل کانتینر اجرا می‌کند. .TP \*(T<\fB\-\-g, \-\-gid \fR\*(T>\fIgid\fR دستور \fIcommand\fR را با شناسه گروهی (مقدار عددی) \fIgid\fR در داخل کانتینر اجرا می‌کند. .SH "گزینه‌های عمومی (COMMON OPTIONS)" این گزینه‌ها میان بیشتر دستورات lxc مشترک هستند. .TP \*(T<\fB\-?, \-h, \-\-help\fR\*(T> نمایش پیام راهنمای کامل‌تر نسبت به حالت معمول. .TP \*(T<\fB\-\-usage\fR\*(T> نمایش پیام نحوه استفاده از دستور. .TP \*(T<\fB\-q, \-\-quiet\fR\*(T> بی‌صدا کردن و جلوگیری از نمایش پیام‌های خروجی. .TP \*(T<\fB\-P, \-\-lxcpath=\fR\*(T>\fIPATH\fR استفاده از یک مسیر جایگزین برای ذخیره کانتینر. مقدار پیش‌فرض /var/lib/lxc است. .TP \*(T<\fB\-o, \-\-logfile=\fR\*(T>\fIFILE\fR هدایت خروجی گزارش‌ها به پرونده جایگزین \fIFILE\fR. حالت پیش‌فرض عدم ثبت لاگ در فایل است. .TP \*(T<\fB\-l, \-\-logpriority=\fR\*(T>\fILEVEL\fR تنظیم اولویت ثبت گزارش‌ها روی \fILEVEL\fR. اولویت پیش‌فرض لاگ‌ها \*(T است. مقادیر مجاز عبارتند از: \*(T، \*(T، \*(T، \*(T، \*(T، \*(T، \*(T، \*(T، \*(T. توجه داشته باشید که این گزینه اولویت وقایع ثبت‌شده در پرونده لاگ جایگزین را تنظیم می‌کند و تاثیری بر وقایع ERROR چاپ‌شده در خروجی خطای استاندارد (stderr) ندارد. .TP \*(T<\fB\-n, \-\-name=\fR\*(T>\fINAME\fR استفاده از شناسه کانتینر \fINAME\fR. قالب شناسه کانتینر یک رشته الفبایی-عددی است. .TP \*(T<\fB\-\-rcfile=\fR\*(T>\fIFILE\fR مشخص کردن فایل پیکربندی جهت تنظیم قابلیت‌های مجازی‌سازی و ایزولاسیون کانتینر. در صورت وجود، این فایل پیکربندی حتی اگر از قبل یک فایل پیکربندی در کانتینر ساخته‌شده (از طریق lxc-create) وجود داشته باشد، استفاده خواهد شد. .TP \*(T<\fB\-\-version\fR\*(T> نمایش شماره نسخه برنامه. .SH "مثال‌ها (EXAMPLES)" برای اجرای یک شل جدید در داخل یک کانتینر موجود، از دستور زیر استفاده کنید: .nf \*(T< lxc\-attach \-n container \*(T> .fi .PP برای راه‌اندازی مجدد سرویس cron در یک کانتینر در حال اجرای دبیان، از دستور زیر استفاده کنید: .nf \*(T< lxc\-attach \-n container \-\- /etc/init.d/cron restart \*(T> .fi .PP برای غیرفعال کردن پیوند شبکه eth1 در یک کانتینر در حال اجرا که فاقد قابلیت NET_ADMIN است، با فرض نصب بودن ابزار \fBip\fR، از گزینه \*(T<\fB\-e\fR\*(T> جهت استفاده از قابلیت‌های ارتقایافته استفاده کنید: .nf \*(T< lxc\-attach \-n container \-e \-\- /sbin/ip link delete eth1 \*(T> .fi یا در غیر این صورت، از گزینه \*(T<\fB\-s\fR\*(T> برای استفاده از ابزارهای نصب‌شده روی میزبان در خارج از کانتینر استفاده کنید: .nf \*(T< lxc\-attach \-n container \-s NETWORK \-\- /sbin/ip link delete eth1 \*(T> .fi .SH "سازگاری (COMPATIBILITY)" اتصال کامل (شامل فضاهای نام pid و mount) به یک کانتینر نیازمند هسته نسخه 3.8 یا بالاتر، یا یک هسته وصله‌شده (پچ‌شده) است؛ لطفاً برای جزئیات به وب‌سایت lxc مراجعه کنید. در این صورت اگر از یک هسته وصله‌نشده نسخه 3.7 یا قبل‌تر استفاده شود، \fBlxc-attach\fR با شکست مواجه خواهد شد. .PP با این وجود، اگر از گزینه \*(T<\fB\-s\fR\*(T> برای محدود کردن فضاهای نامی که فرایند قرار است به آن‌ها متصل شود به یک یا چند مورد از \fINETWORK\fR، \fIIPC\fR و \fIUTSNAME\fR استفاده شود، روی هسته وصله‌نشده نسخه 3.0 یا بالاتر نیز موفقیت‌آمیز خواهد بود. .PP اتصال به فضاهای نام کاربری توسط هسته 3.8 یا بالاتر با فعال‌سازی فضای نام کاربری پشتیبانی می‌شود. .SH "نکات (NOTES)" سیستم‌فایل‌های \fI/proc\fR و \fI/sys\fR در لینوکس حاوی اطلاعاتی درباره برخی مقادیر هستند که تحت تاثیر فضاهای نام قرار دارند، مانند دایرکتوری‌هایی که بر اساس شناسه فرایندها در \fI/proc\fR نام‌گذاری شده‌اند یا اطلاعات رابط شبکه در \fI/sys/class/net\fR. فضای نام فرایندی که شبه‌سیستم‌فایل‌ها را متصل (mount) می‌کند تعیین‌کننده اطلاعات نمایش‌داده‌شده است، \fInot\fR فضای نام فرایندی که به \fI/proc\fR یا \fI/sys\fR دسترسی پیدا می‌کند. .PP اگر از گزینه \*(T<\fB\-s\fR\*(T> تنها برای اتصال به فضای نام pid یک کانتینر استفاده شود، اما به فضای نام mount آن (که حاوی \fI/proc\fR کانتینر است و نه میزبان) متصل نشود، محتویات \*(T<\fB/proc\fR\*(T> اطلاعات میزبان را بازتاب خواهد داد و نه کانتینر را. به همین ترتیب، هنگام خواندن محتویات \fI/sys/class/net\fR و اتصال تنها به فضای نام شبکه نیز همین مسئله رخ می‌دهد. .PP برای برطرف کردن این مشکل، فلگ \*(T<\fB\-R\fR\*(T> این امکان را فراهم می‌کند که \fI/proc\fR و \fI/sys\fR مجدداً متصل (remount) شوند تا زمینه فضای نام شبکه/pid فرایند متصل‌شده را بازتاب دهند. برای جلوگیری از تداخل با سیستم‌فایل واقعی میزبان، پیش از انجام این کار، فضای نام mount از اشتراک خارج خواهد شد (مانند کاری که \fBlxc-unshare\fR انجام می‌دهد) که اساساً فضای نام mount جدیدی به فرایند می‌دهد که به جز سیستم‌فایل‌های \fI/proc\fR و \fI/sys\fR، با فضای نام mount میزبان یکسان است. .PP نسخه‌های پیشین \fBlxc-attach\fR دچار مشکلی بودند که به موجب آن کاربر می‌توانست بدون قرار گرفتن در یک cgroup قابل نوشتن برای برخی زیرسیستم‌های حیاتی، به فضای نام کانتینر متصل شود. نسخه‌های جدیدتر \fBlxc-attach\fR بررسی می‌کنند که آیا کاربر در یک cgroup قابل نوشتن برای آن زیرسیستم‌های حیاتی قرار دارد یا خیر. از این رو ممکن است \fBlxc-attach\fR برای برخی کاربران به طور غیرمنتظره‌ای با شکست مواجه شود (مثلاً در سیستم‌هایی که یک کاربر غیرممتاز هنگام ورود به سیستم، در یک cgroup قابل نوشتن در زیرسیستم‌های حیاتی قرار نمی‌گیرد). با این حال، این رفتار صحیح و امن‌تر است. .SH "امنیت (SECURITY)" گزینه‌های \*(T<\fB\-e\fR\*(T> و \*(T<\fB\-s\fR\*(T> باید با احتیاط استفاده شوند، زیرا در صورت استفاده نادرست ممکن است ایزولاسیون کانتینرها را مختل کنند. .SH "همچنین ببینید (SEE ALSO)" \fBlxc\fR(7), \fBlxc-create\fR(1), \fBlxc-copy\fR(1), \fBlxc-destroy\fR(1), \fBlxc-start\fR(1), \fBlxc-stop\fR(1), \fBlxc-execute\fR(1), \fBlxc-console\fR(1), \fBlxc-monitor\fR(1), \fBlxc-wait\fR(1), \fBlxc-cgroup\fR(1), \fBlxc-ls\fR(1), \fBlxc-info\fR(1), \fBlxc-freeze\fR(1), \fBlxc-unfreeze\fR(1), \fBlxc-attach\fR(1), \fBlxc.conf\fR(5)