update-alternatives(1) dpkg suite update-alternatives(1)

update-alternatives - مدیریت پیوندهای نمادین تعیین‌کننده دستورات پیش‌فرض

update-alternatives [گزینه...] دستور

دستور update-alternatives اطلاعات مربوط به پیوندهای نمادین تشکیل‌دهنده سیستم جایگزین‌ها را ایجاد، حذف، نگهداری و نمایش می‌دهد.

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

هدف سیستم جایگزین‌ها حل این مشکل است. یک نام عمومی (generic name) در سیستم‌فایل بین تمام فایل‌هایی که قابلیت‌های تعویض‌پذیر ارائه می‌دهند به اشتراک گذاشته می‌شود. سیستم جایگزین‌ها و مدیر سیستم با هم تعیین می‌کنند که این نام عمومی به کدام فایل واقعی اشاره کند. به عنوان مثال، اگر هر دو ویرایشگر متن ed(1) و nvi(1) روی سیستم نصب باشند، سیستم جایگزین‌ها باعث می‌شود که نام عمومی /usr/bin/editor به‌طور پیش‌فرض به /usr/bin/nvi اشاره کند. مدیر سیستم می‌تواند این وضعیت را تغییر دهد تا به جای آن به /usr/bin/ed اشاره کند، و سیستم جایگزین‌ها این تنظیم را تا زمانی که صریحاً درخواست نشود تغییر نخواهد داد.

نام عمومی یک پیوند نمادین مستقیم به جایگزین انتخاب‌شده نیست؛ بلکه یک پیوند نمادین به نامی در دایرکتوری جایگزین‌ها است که آن نیز به نوبه خود یک پیوند نمادین به فایل واقعیِ ارجاع‌شده است. این کار به این دلیل انجام می‌شود تا تغییرات مدیر سیستم به دایرکتوری /etc محدود شود: استاندارد سلسله‌مراتب سیستم‌فایل (FHS) دلایلی برای چرایی سودمند بودن این روش ارائه می‌دهد.

هنگامی که هر بسته‌ای که فایلی با کارکرد خاص ارائه می‌دهد نصب، تغییر یا حذف می‌شود، update-alternatives فراخوانی می‌شود تا اطلاعات مربوط به آن فایل را در سیستم جایگزین‌ها به‌روزرسانی کند. update-alternatives معمولاً از اسکریپت‌های نگهدارنده بسته دبیان فراخوانی می‌شود: postinst (پیکربندی) برای نصب جایگزین، و prerm و postrm (حذف) برای حذف جایگزین. توجه: در بیشتر موارد (اگر نگوییم همه)، هیچ عملیات دیگری از اسکریپت‌های نگهدارنده نباید update-alternatives را فراخوانی کند؛ به ویژه نه در upgrade و نه در disappear، زیرا هر اقدام دیگری از این دست ممکن است وضعیت دستی (manual) یک جایگزین را از بین ببرد، یا باعث جابه‌جایی موقت جایگزین شود، یا زمانی که چند مورد اولویت یکسانی دارند جایگزین را به کلی تغییر دهد.

اغلب سودمند است که تعدادی از جایگزین‌ها همگام‌سازی شوند تا به صورت یک گروه تغییر کنند؛ به عنوان مثال، هنگامی که چندین نسخه از ویرایشگر vi(1) نصب شده باشد، صفحه راهنمای ارجاع‌شده توسط /usr/share/man/man1/vi.1 باید با فایل اجرایی ارجاع‌شده توسط /usr/bin/vi مطابقت داشته باشد. دستور update-alternatives این کار را با استفاده از پیوندهای اصلی (master) و وابسته (slave) مدیریت می‌کند؛ هنگامی که پیوند اصلی تغییر می‌کند، تمام پیوندهای وابسته به آن نیز تغییر می‌یابند. یک پیوند اصلی و پیوندهای وابسته به آن یک گروه پیوند (link group) را تشکیل می‌دهند.

هر گروه پیوند در هر لحظه در یکی از دو حالت قرار دارد: خودکار (automatic) یا دستی (manual). هنگامی که یک گروه در حالت خودکار است، سیستم جایگزین‌ها با نصب یا حذف بسته‌ها، به‌طور خودکار تصمیم می‌گیرد که پیوندها چگونه و چه زمانی به‌روزرسانی شوند. در حالت دستی، سیستم جایگزین‌ها انتخاب مدیر سیستم را حفظ کرده و از تغییر پیوندها خودداری می‌کند (مگر زمانی که پیوندی شکسته یا خراب باشد).

گروه‌های پیوند زمانی که برای نخستین بار به سیستم معرفی می‌شوند در حالت خودکار هستند. اگر مدیر سیستم در تنظیمات خودکار سیستم تغییری ایجاد کند، در اجرای بعدی update-alternatives روی گروهِ پیوندِ تغییریافته این موضوع شناسایی شده و گروه به‌طور خودکار به حالت دستی تغییر وضعیت می‌دهد.

هر جایگزین دارای یک اولویت (priority) است. هنگامی که یک گروه پیوند در حالت خودکار قرار دارد، اعضای گروه به جایگزین‌هایی اشاره خواهند کرد که بالاترین اولویت را دارند.

هنگام استفاده از گزینه --config، دستور update-alternatives تمام انتخاب‌های موجود برای گروه پیوندی را که name داده‌شده نام جایگزین اصلی آن است، فهرست می‌کند. انتخاب فعلی با یک علامت «*» مشخص می‌شود. سپس از شما خواسته می‌شود که انتخاب خود را برای این گروه پیوند وارد کنید. بسته به انتخاب انجام‌شده، ممکن است گروه پیوند دیگر در حالت خودکار (auto) نباشد. برای بازگشت به حالت خودکار باید از گزینه --auto استفاده کنید (یا می‌توانید دوباره --config را اجرا کرده و موردی را که به عنوان خودکار علامت‌گذاری شده انتخاب کنید).

اگر می‌خواهید پیکربندی را به‌صورت غیرتعاملی انجام دهید، می‌توانید به جای آن از گزینه --set استفاده کنید (به بخش زیر مراجعه کنید).

بسته‌های مختلفی که فایل یکسانی را ارائه می‌دهند باید این کار را به صورت همکارانه (cooperatively) انجام دهند. به عبارت دیگر، در چنین حالتی استفاده از update-alternatives برای تمام بسته‌های مربوطه اجباری است. جایگزین کردن فایلی در بسته‌ای که از سازوکار update-alternatives استفاده نمی‌کند ممکن نیست.

از آنجا که سازوکار عملکرد update-alternatives پیچیدگی‌های خاص خود را دارد، تعریف چند اصطلاح مشخص به درک عملکرد آن کمک می‌کند.

نام عمومی (یا پیوند جایگزین)
نامی مانند /usr/bin/editor که از طریق سیستم جایگزین‌ها به یکی از چندین فایل با عملکرد مشابه ارجاع می‌دهد.
نام جایگزین (alternative name)
نام یک پیوند نمادین در دایرکتوری جایگزین‌ها.
جایگزین (یا مسیر جایگزین)
نام یک فایل خاص در سیستم‌فایل، که می‌توان با استفاده از سیستم جایگزین‌ها از طریق یک نام عمومی به آن دسترسی داشت.
دایرکتوری جایگزین‌ها (alternatives directory)
دایرکتوری‌ای که به‌طور پیش‌فرض /etc/alternatives است و پیوندهای نمادین را در بر دارد.
دایرکتوری مدیریتی (administrative directory)
دایرکتوری‌ای که به‌طور پیش‌فرض /var/lib/dpkg/alternatives است و اطلاعات وضعیت update-alternatives را نگهداری می‌کند.
گروه پیوند (link group)
مجموعه‌ای از پیوندهای نمادین مرتبط که قرار است به صورت یک گروه به‌روزرسانی شوند.
پیوند اصلی (master link)
پیوند جایگزینی در یک گروه پیوند که نحوه پیکربندی سایر پیوندهای گروه را تعیین می‌کند.
پیوند وابسته (slave link)
پیوند جایگزینی در یک گروه پیوند که با تنظیمات پیوند اصلی کنترل می‌شود.
حالت خودکار (automatic mode)
هنگامی که یک گروه پیوند در حالت خودکار است، سیستم جایگزین‌ها اطمینان حاصل می‌کند که پیوندهای موجود در گروه به جایگزین دارای بالاترین اولویت متناسب با آن گروه اشاره کنند.
حالت دستی (manual mode)
هنگامی که یک گروه پیوند در حالت دستی قرار دارد، سیستم جایگزین‌ها هیچ تغییری در تنظیمات مدیر سیستم ایجاد نخواهد کرد.

یک گروه از جایگزین‌ها را به سیستم اضافه می‌کند. link نام عمومی برای پیوند اصلی است، name نام پیوند نمادین آن در دایرکتوری جایگزین‌هاست، و path مسیر جایگزینی است که برای پیوند اصلی معرفی می‌شود. آرگومان‌های پس از --slave شامل نام عمومی، نام پیوند نمادین در دایرکتوری جایگزین‌ها و مسیر جایگزین برای یک پیوند وابسته است. می‌توان صفر یا چند گزینه --slave را که هر کدام با سه آرگومان دنبال می‌شوند مشخص کرد. توجه داشته باشید که جایگزین اصلی باید وجود داشته باشد، در غیر این صورت فراخوانی با شکست مواجه می‌شود. با این حال، اگر جایگزین وابسته وجود نداشته باشد، پیوند جایگزین وابسته متناظر به سادگی نصب نمی‌شود (البته همچنان یک هشدار نمایش داده خواهد شد). اگر یک فایل واقعی در جایی که باید پیوند جایگزین نصب شود از قبل وجود داشته باشد، نگه‌داشته می‌شود مگر اینکه از --force استفاده شود.

اگر نام جایگزینِ مشخص‌شده از قبل در سوابق سیستم جایگزین‌ها موجود باشد، اطلاعات ارائه‌شده به عنوان یک مجموعه جدید از جایگزین‌ها برای آن گروه اضافه خواهد شد. در غیر این صورت، یک گروه جدید در حالت خودکار همراه با این اطلاعات اضافه می‌شود. اگر گروه در حالت خودکار باشد و اولویت جایگزین تازه اضافه‌شده بالاتر از هر جایگزین نصب‌شده دیگری برای این گروه باشد، پیوندهای نمادین به‌روزرسانی می‌شوند تا به جایگزین جدید اشاره کنند.

برنامه path را به عنوان جایگزین برای name تنظیم می‌کند. این دستور معادل --config است اما غیرتعاملی بوده و بنابراین در اسکریپت‌ها قابل استفاده است.
یک جایگزین و تمامی پیوندهای وابسته مرتبط با آن را حذف می‌کند. name نامی در دایرکتوری جایگزین‌هاست و path نام فایل مطلق است که name می‌تواند به آن پیوند داشته باشد. اگر name در واقع به path پیوند داده شده باشد، name به‌روزرسانی خواهد شد تا به جایگزین مناسب دیگری اشاره کند (و گروه دوباره به حالت خودکار بازگردانده می‌شود)، یا اگر جایگزین دیگری باقی نمانده باشد حذف خواهد شد. پیوندهای وابسته مرتبط نیز به همین ترتیب به‌روزرسانی یا حذف خواهند شد. اگر پیوند در حال حاضر به path اشاره نکند، هیچ پیوندی تغییر نمی‌یابد؛ فقط اطلاعات مربوط به آن جایگزین حذف می‌شود.
تمامی جایگزین‌ها و همه پیوندهای وابسته مرتبط با آن‌ها را حذف می‌کند. name نامی در دایرکتوری جایگزین‌ها است.
دستور --config را روی تمامی جایگزین‌ها فراخوانی می‌کند. می‌توان آن را به‌طور مفیدی با --skip-auto ترکیب کرد تا تمام جایگزین‌هایی که در حالت خودکار پیکربندی نشده‌اند بررسی و پیکربندی شوند. جایگزین‌های خراب یا شکسته نیز نمایش داده می‌شوند. بنابراین یک روش ساده برای رفع تمام جایگزین‌های شکسته، فراخوانی دستور زیر است: yes '' | update-alternatives --force --all.
گروه پیوند مرتبط با جایگزین name را به حالت خودکار تغییر وضعیت می‌دهد. در این فرآیند، پیوند نمادین اصلی و وابسته‌های آن به‌روزرسانی می‌شوند تا به جایگزین‌های نصب‌شده با بالاترین اولویت اشاره کنند.
اطلاعات مربوط به گروه پیوند را نمایش می‌دهد. اطلاعات ارائه‌شده شامل حالت گروه (خودکار یا دستی)، پیوندهای اصلی و وابسته، جایگزینی که پیوند اصلی در حال حاضر به آن اشاره دارد، سایر جایگزین‌های در دسترس (و جایگزین‌های وابسته متناظر آن‌ها)، و جایگزین دارای بالاترین اولویت که هم‌اکنون نصب شده است می‌باشد.
تمام نام‌های جایگزین اصلی (آن‌هایی که یک گروه پیوند را کنترل می‌کنند) و وضعیت آن‌ها را فهرست می‌کند (از نسخه 1.15.0). هر خط شامل حداکثر ۳ فیلد است (که با یک یا چند فاصله از هم جدا شده‌اند). فیلد اول نام جایگزین، فیلد دوم وضعیت (یا auto یا manual) و فیلد آخر شامل انتخاب فعلی در جایگزین است (توجه: این فیلد نام فایل است و ممکن است حاوی فاصله باشد).
پیکربندی جایگزین‌ها را از ورودی استاندارد در قالبی که توسط --get-selections تولید می‌شود خوانده و آن‌ها را بر این اساس مجدداً پیکربندی می‌کند (از نسخه 1.15.0).
اطلاعات مربوط به گروه پیوند را مانند --display اما در قالبی قابل تجزیه توسط ماشین نمایش می‌دهد (از نسخه 1.15.0، به بخش «قالب پرس‌وجو (QUERY FORMAT)» در زیر مراجعه کنید).
تمام مقصدهای گروه پیوند را نمایش می‌دهد.
جایگزین‌های موجود برای یک گروه پیوند را نشان داده و به کاربر اجازه می‌دهد تا به‌صورت تعاملی مشخص کند که از کدام‌یک استفاده شود. گروه پیوند به‌روزرسانی می‌شود.
پیام راهنمای نحوه استفاده را نمایش داده و خارج می‌شود.
اطلاعات نسخه را نمایش داده و خارج می‌شود.

دایرکتوری جایگزین‌ها را زمانی که لازم است با حالت پیش‌فرض تفاوت داشته باشد مشخص می‌کند. مقدار پیش‌فرض آن «/etc/alternatives» است.
دایرکتوری مدیریتی را زمانی که باید متفاوت از حالت پیش‌فرض باشد مشخص می‌کند. اگر DPKG_ADMINDIR تنظیم نشده باشد، مقدار پیش‌فرض آن «/var/lib/dpkg/alternatives» خواهد بود.
دایرکتوری نصبی را که پیوندهای جایگزین در آن ایجاد می‌شوند مشخص می‌کند (از نسخه 1.20.1). اگر DPKG_ROOT تنظیم نشده باشد، مقدار پیش‌فرض آن «/» است.
دایرکتوری ریشه را مشخص می‌کند (از نسخه 1.20.1). این کار همچنین دایرکتوری‌های جایگزین‌ها، نصب و مدیریت را متناسب با آن تنظیم می‌کند. اگر DPKG_ROOT تنظیم نشده باشد، مقدار پیش‌فرض آن «/» است.
فایل لاگ را زمانی که باید با حالت پیش‌فرض (/var/log/alternatives.log) متفاوت باشد مشخص می‌کند (از نسخه 1.15.0).
امکان جایگزینی یا حذف هر فایل واقعیِ نصب‌شده در مکانی که باید پیوند جایگزین نصب یا حذف شود را فراهم می‌سازد.
از اعلان پیکربندی برای جایگزین‌هایی که به درستی در حالت خودکار پیکربندی شده‌اند صرف‌نظر می‌کند. این گزینه فقط همراه با --config یا --all کاربرد دارد.
هیچ پیامی تولید نمی‌کند مگر اینکه خطایی رخ دهد.
توضیحات و پیام‌های بیشتری درباره اقدامات در حال انجام تولید می‌کند.
پیام‌های باز هم بیشتری (مفید برای اشکال‌زدایی) درباره اقدامات در حال انجام ارائه می‌دهد (از نسخه 1.19.3).

0
عملیات درخواستی با موفقیت انجام شد.
2
هنگام تجزیه خط فرمان یا انجام عملیات مشکلی رخ داده است.

در صورت تنظیم بودن و عدم تعیین گزینه‌های --instdir یا --root، به عنوان دایرکتوری ریشه سیستم‌فایل استفاده خواهد شد.
در صورت تنظیم بودن و عدم تعیین گزینه --admindir، به عنوان دایرکتوری مدیریتی پایه استفاده خواهد شد.

/etc/alternatives/
دایرکتوری پیش‌فرض جایگزین‌ها. می‌توان آن را با گزینه --altdir تغییر داد.
/var/lib/dpkg/alternatives/
دایرکتوری مدیریتی پیش‌فرض. می‌توان آن را با گزینه --admindir تغییر داد.

قالب --query از یک قالب مسطح شبیه به RFC822 استفاده می‌کند. این خروجی از n + 1 بند (stanza) تشکیل شده است که در آن n تعداد جایگزین‌های موجود در گروه پیوند مورد پرس‌وجو است. نخستین بند شامل فیلدهای زیر است:

نام جایگزین در دایرکتوری جایگزین‌ها.
نام عمومی جایگزین.
هنگامی که این فیلد وجود داشته باشد، خطوط بعدی شامل تمام پیوندهای وابسته مرتبط با پیوند اصلی جایگزین خواهند بود. در هر خط یک پیوند وابسته قرار دارد. هر خط شامل یک فاصله، نام عمومی جایگزین وابسته، یک فاصله دیگر، و مسیر پیوند وابسته است.
وضعیت جایگزین (شامل auto یا manual).
مسیر بهترین جایگزین برای این گروه پیوند. اگر هیچ جایگزینی در دسترس نباشد، این فیلد نمایش داده نمی‌شود.
مسیر جایگزینی که هم‌اکنون انتخاب شده است. همچنین می‌تواند مقدار ویژه none را بگیرد که در صورت عدم وجود پیوند استفاده می‌شود.

سایر بندها جایگزین‌های موجود در گروه پیوند مورد پرس‌وجو را شرح می‌دهند:

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

$ update-alternatives --query editor
Name: editor
Link: /usr/bin/editor
Slaves:
 editor.1.gz /usr/share/man/man1/editor.1.gz
 editor.fr.1.gz /usr/share/man/fr/man1/editor.1.gz
 editor.it.1.gz /usr/share/man/it/man1/editor.1.gz
 editor.pl.1.gz /usr/share/man/pl/man1/editor.1.gz
 editor.ru.1.gz /usr/share/man/ru/man1/editor.1.gz
Status: auto
Best: /usr/bin/vim.basic
Value: /usr/bin/vim.basic
Alternative: /bin/ed
Priority: -100
Slaves:
 editor.1.gz /usr/share/man/man1/ed.1.gz
Alternative: /usr/bin/vim.basic
Priority: 50
Slaves:
 editor.1.gz /usr/share/man/man1/vim.1.gz
 editor.fr.1.gz /usr/share/man/fr/man1/vim.1.gz
 editor.it.1.gz /usr/share/man/it/man1/vim.1.gz
 editor.pl.1.gz /usr/share/man/pl/man1/vim.1.gz
 editor.ru.1.gz /usr/share/man/ru/man1/vim.1.gz

با گزینه --verbose، دستور update-alternatives گزارش‌های مفصلی درباره فعالیت‌های خود در کانال خروجی استاندارد تولید می‌کند. در صورت بروز مشکل، update-alternatives پیام‌های خطا را در کانال خطای استاندارد منتشر کرده و وضعیت خروج ۲ را برمی‌گرداند. این پیام‌های عیب‌یابی باید خودتوضیح‌دهنده باشند؛ اگر آن‌ها را چنین نیافتید، لطفاً این مورد را به عنوان باگ گزارش کنید.

چندین بسته وجود دارند که ویرایشگر متنی سازگار با vi ارائه می‌دهند، مانند nvi و vim. اینکه کدام‌یک استفاده شود توسط گروه پیوند vi کنترل می‌شود که شامل پیوندهایی برای خود برنامه و صفحه راهنمای مرتبط با آن است.

برای نمایش بسته‌های موجود که vi را ارائه می‌دهند و تنظیمات فعلی آن، از عملیات --display استفاده کنید:

update-alternatives --display vi

برای انتخاب یک پیاده‌سازی خاص از vi، این دستور را به عنوان کاربر ریشه اجرا کرده و سپس یک شماره را از فهرست انتخاب کنید:

update-alternatives --config vi

برای بازگشت به حالتی که در آن پیاده‌سازی vi به‌طور خودکار انتخاب شود، این دستور را به عنوان کاربر ریشه اجرا کنید:

update-alternatives --auto vi

ln(1)، FHS (استاندارد سلسله‌مراتب سیستم‌فایل).

2026-03-06 1.23.7-dirty