# Russian translation of manpages # This file is distributed under the same license as the manpages-l10n package. # Copyright © of this file: # Alexey, 2016. # Azamat Hackimov , 2014-2017. # kogamatranslator49 , 2015. # Darima Kogan , 2014. # Max Is , 2016. # Yuri Kozlov , 2011-2019. # Иван Павлов , 2017. msgid "" msgstr "" "Project-Id-Version: manpages-l10n\n" "POT-Creation-Date: 2024-06-01 06:09+0200\n" "PO-Revision-Date: 2022-12-23 11:11+0100\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" "%100>=11 && n%100<=14)? 2 : 3);\n" "X-Generator: Lokalize 2.0\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "pivot_root" msgstr "pivot_root" #. type: TH #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "2 мая 2024 г." #. type: TH #: archlinux debian-unstable #, fuzzy, no-wrap #| msgid "Linux man-pages 6.7" msgid "Linux man-pages 6.8" msgstr "Linux man-pages 6.7" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "ИМЯ" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "pivot_root - change the root filesystem" msgid "pivot_root - change the root mount" msgstr "pivot_root - изменяет корневую файловую систему" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "LIBRARY" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Standard C library (I, I<-lc>)" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SYNOPSIS" msgstr "СИНТАКСИС" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "B<#include Esys/syscall.hE> /* Definition of B constants */\n" "B<#include Eunistd.hE>\n" msgstr "" "B<#include Esys/syscall.hE> /* определения констант B */\n" "B<#include Eunistd.hE>\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "BIB<, const char *>IB<);>\n" msgstr "BIB<, const char *>IB<);>\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I: glibc provides no wrapper for B(), necessitating the " "use of B(2)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "ОПИСАНИЕ" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "B() changes the root filesystem in the mount namespace of " #| "the calling process. More precisely, it moves the root filesystem to the " #| "directory I and makes I the new root filesystem. The " #| "calling process must have the B capability in the user " #| "namespace that owns the caller's mount namespace." msgid "" "B() changes the root mount in the mount namespace of the " "calling process. More precisely, it moves the root mount to the directory " "I and makes I the new root mount. The calling process " "must have the B capability in the user namespace that owns " "the caller's mount namespace." msgstr "" "Системный вызов B() изменяет корневую файловую систему в " "пространстве имён монтирования вызывающего процесса. Точнее говоря, он " "перемещает корневую файловую систему в каталог I и делает " "I новой корневой файловой системой. Вызывающий процесс должен " "иметь мандат B в пользовательском пространстве имён, которому " "принадлежит пространство имён монтирования вызывающего." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "The paragraph above is intentionally vague because at the time when " #| "B() was first implemented, it was unclear whether its affect " #| "on other process's root and current working directories\\(emand the " #| "caller's current working directory\\(emmight change in the future. " #| "However, the behavior has remained consistent since this system call was " #| "first implemented: B() changes the root directory and the " #| "current working directory of each process or thread in the same mount " #| "namespace to I if they point to the old root directory. (See " #| "also NOTES.) On the other hand, B() does not change the " #| "caller's current working directory (unless it is on the old root " #| "directory), and thus it should be followed by a B call." msgid "" "B() changes the root directory and the current working " "directory of each process or thread in the same mount namespace to " "I if they point to the old root directory. (See also NOTES.) On " "the other hand, B() does not change the caller's current " "working directory (unless it is on the old root directory), and thus it " "should be followed by a B call." msgstr "" "Параграф выше намеренно написан абстрактно, так как на момент первой " "реализации B() было неясно, изменится ли его влияние на другие " "процессы корня и текущие рабочие каталоги — как и на текущий рабочий каталог " "вызывающего — в будущем. Однако поведение не изменилось с момента первой " "реализации системного вызова: B() изменяет корневой каталог и " "текущий рабочий каталог каждого процесс или нити в одном пространстве имён " "монтирования на I, если они указывают на старый корневой каталог " "(смотрите ЗАМЕЧАНИЯ). С другой стороны, B() не изменяет текущий " "рабочий каталог вызывающего (если это старый корневой каталог), и поэтому он " "должен запускаться после вызова B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The following restrictions apply:" msgstr "Накладываются следующие ограничения:" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "\\[bu]" msgstr "\\[bu]" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I and I must be directories." msgstr "Аргументы I и I должны быть каталогами." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "I and I must be directories." msgid "" "I and I must not be on the same mount as the current root." msgstr "Аргументы I и I должны быть каталогами." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "I must be at or underneath I; that is, adding a " #| "nonnegative number of I to the string pointed to by I must " #| "yield the same directory as I." msgid "" "I must be at or underneath I; that is, adding some " "nonnegative number of \"I\" suffixes to the pathname pointed to by " "I must yield the same directory as I." msgstr "" "Аргумент I должен быть равен или ниже I, т. е., при " "добавлении неотрицательного количества I в строку, на которую указывает " "I, должен получаться каталог, равный I." #. type: Plain text #: archlinux debian-unstable fedora-rawhide opensuse-tumbleweed #, fuzzy #| msgid "" #| "I must be a mount point. (If it is not otherwise a mount " #| "point, it suffices to bind mount I on top of itself.)" msgid "" "I must be a path to a mount point, but can't be I<\\[dq]/\\[dq]>. " "A path that is not already a mount point can be converted into one by bind " "mounting the path onto itself." msgstr "" "Значение I должно быть точкой монтирования (если это не точка " "монтирования, то достаточно привязать монтирование I поверх самой " "себя)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The propagation type of the parent mount of I and the parent mount " "of the current root directory must not be B; similarly, if " "I is an existing mount point, its propagation type must not be " "B. These restrictions ensure that B() never " "propagates any changes to another mount namespace." msgstr "" "Тип распространения родительского монтирования I и родительского " "монтирования текущего корневого каталога не должно быть равно B; " "схожим образом, если I — существующая точка монтирования, то её тип " "распространения не должен быть B. Эти ограничения гарантируют, " "что B() никогда не распространит изменения в другие пространства " "имён монтирования." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The current root directory must be a mount point." msgstr "Текущий корневой каталог должен быть точкой монтирования." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "RETURN VALUE" msgstr "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "On success, zero is returned. On error, -1 is returned, and I is " #| "set appropriately." msgid "" "On success, zero is returned. On error, -1 is returned, and I is set " "to indicate the error." msgstr "" "При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а " "I устанавливается в соответствующее значение." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "ERRORS" msgstr "ОШИБКИ" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B() may fail with any of the same errors as B(2). " "Additionally, it may fail with the following errors:" msgstr "" "Вызов B() может завершиться любой из ошибок что и B(2). " "Кроме это, могут возвращаться следующие ошибки:" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. Reconfirmed that the following error occurs on Linux 5.0 by #. specifying 'new_root' as "/rootfs" and 'put_old' as #. "/rootfs/oldrootfs", and *not* bind mounting "/rootfs" on top of #. itself. Of course, this is an odd situation, since a later check #. in the kernel code will in any case yield EINVAL if 'new_root' is #. not a mount point. However, when the system call was first added, #. 'new_root' was not required to be a mount point. So, this #. error is nowadays probably just the result of crufty accumulation. #. This error can also occur if we bind mount "/" on top of itself #. and try to specify "/" as the 'new' (again, an odd situation). So, #. the EBUSY check in the kernel does still seem necessary to prevent #. that case. Furthermore, the "or put_old" piece is probably #. redundant text (although the check is in the kernel), since, #. in another check, 'put_old' is required to be under 'new_root'. #. type: Plain text #: archlinux debian-unstable fedora-rawhide opensuse-tumbleweed #, fuzzy #| msgid "" #| "I or I is on the current root filesystem. (This error " #| "covers the pathological case where I is I<\"/\">.)" msgid "" "I or I is on the current root mount. (This error covers " "the pathological case where I is I<\\[dq]/\\[dq]>.)" msgstr "" "Аргумент I или I находится в текущей корневой файловой " "системе (эта ошибка возникает при патологическом случае когда значение " "I равно I<\"/\">)." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I is not a mount point." msgstr "Значение I не является точкой монтирования." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "I is not underneath I." msgid "I is not at or underneath I." msgstr "Аргумент I не находится в дереве каталогов I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The current root directory is not a mount point (because of an earlier " "B(2))." msgstr "" "Текущий корневой каталог не является точкой монтирования (из-за " "предшествующего B(2))." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "The current root is on the rootfs (initial ramfs) filesystem; see NOTES." msgid "The current root is on the rootfs (initial ramfs) mount; see NOTES." msgstr "" "Текущий корень расположен на файловой системе rootfs (начальная ramfs); " "смотрите ЗАМЕЧАНИЯ." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Either the mount point at I, or the parent mount of that mount " "point, has propagation type B." msgstr "" "Точка монтирования I и её родительское монтирование имеет тип " "распространения B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I is a mount point and has the propagation type B." msgstr "" "Значение I является точкой монтирования и имеет тип распространения " "B." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I or I is not a directory." msgstr "Аргумент I или I не является каталогом." #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The calling process does not have the B capability." msgstr "Вызывающий процесс не имеет мандата B." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "STANDARDS" msgstr "СТАНДАРТЫ" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "Linux." msgstr "Linux." #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "HISTORY" msgstr "ИСТОРИЯ" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "util-linux 2.37.4" msgid "Linux 2.3.41." msgstr "util-linux 2.37.4" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NOTES" msgstr "ПРИМЕЧАНИЯ" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A command-line interface for this system call is provided by " "B(8)." msgstr "" "Интерфейсом командной строки для этого системного вызова является программа " "B(8)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "B() allows the caller to switch to a new root filesystem " #| "while at the same time placing the old root mount at a location under " #| "I from where it can subsequently be unmounted. (The fact that " #| "it moves all processes that have a root directory or current working " #| "directory on the old root filesystem to the new root filesystem frees the " #| "old root filesystem of users, allowing it to be unmounted more easily.)" msgid "" "B() allows the caller to switch to a new root filesystem while " "at the same time placing the old root mount at a location under I " "from where it can subsequently be unmounted. (The fact that it moves all " "processes that have a root directory or current working directory on the old " "root directory to the new root frees the old root directory of users, " "allowing the old root mount to be unmounted more easily.)" msgstr "" "Программа B() позволяет вызывающему переключиться в новую " "корневую файловую систему и одновременно помещает монтирование старого корня " "ниже I, откуда он может быть в последствии отмонтирован " "(фактически, она перемещает все процессы, у которых корневой каталог или " "текущий рабочий каталог расположен в старой корневой файловой системе, в " "новую корневую файловую систему, и освобождает старую корневую файловую " "систему от пользователей, облегчая её размонтирование)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "A typical use of B() is during system startup, when the " #| "system mounts a temporary root filesystem (e.g., an B), then " #| "mounts the real root filesystem, and eventually turns the latter into the " #| "current root of all relevant processes or threads. A modern use is to " #| "set up a root filesystem during the creation of a container." msgid "" "One use of B() is during system startup, when the system mounts " "a temporary root filesystem (e.g., an B(4)), then mounts the real " "root filesystem, and eventually turns the latter into the root directory of " "all relevant processes and threads. A modern use is to set up a root " "filesystem during the creation of a container." msgstr "" "Обычно, B() используется при загрузке, когда система монтирует " "временную корневую файловую систему (например, B), а затем монтирует " "настоящую корневую файловую систему, делая, тем самым, её корневой для всех " "последующих процессов или нитей. Теперь она ещё используется для настройки " "корневой файловой системы при создании контейнера." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "The fact that B() modifies process root and current working " #| "directories in the manner noted in DESCRIPTION is necessary in order to " #| "prevent kernel threads from keeping the old root directory busy with " #| "their root and current working directory, even if they never access the " #| "filesystem in any way." msgid "" "The fact that B() modifies process root and current working " "directories in the manner noted in DESCRIPTION is necessary in order to " "prevent kernel threads from keeping the old root mount busy with their root " "and current working directories, even if they never access the filesystem in " "any way." msgstr "" "Действие B() по изменению текущего рабочего каталога и корня " "процесса, раскрытое в ОПИСАНИИ, необходимо для того, чтобы не дать нитям " "ядра оставить занятым старый корневой каталог в качестве своего корня и " "текущего рабочего каталога даже, если они никогда не обращаются к файловой " "системе." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The rootfs (initial ramfs) cannot be B()ed. The recommended " "method of changing the root filesystem in this case is to delete everything " "in rootfs, overmount rootfs with the new root, attach I/I/" "I to the new I, and exec the new B(1). Helper " "programs for this process exist; see B(8)." msgstr "" "Для rootfs (начальная ramfs) нельзя вызвать B(). Рекомендуемым " "методом изменения корневой файловой системы в этом случае является удаление " "всего в rootfs, перемонтирование в rootfs нового корня, присоединение " "I/I/I к новой I и запуск нового " "B(1). Для этого существуют вспомогательные программы; смотрите " "B(8)." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "pivot_root(\\[dq].\\[dq], \\[dq].\\[dq])" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I and I may be the same directory. In particular, the " "following sequence allows a pivot-root operation without needing to create " "and remove a temporary directory:" msgstr "" "Значения I и I могут быть одним каталогом. В частности, " "разрешена следующая последовательность операции pivot-root без необходимости " "создания и удаления временного каталога:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "chdir(new_root);\n" "pivot_root(\".\", \".\");\n" "umount2(\".\", MNT_DETACH);\n" msgstr "" "chdir(new_root);\n" "pivot_root(\".\", \".\");\n" "umount2(\".\", MNT_DETACH);\n" #. type: Plain text #: archlinux debian-unstable fedora-rawhide opensuse-tumbleweed #, fuzzy #| msgid "" #| "This sequence succeeds because the B() call stacks the old " #| "root mount point (I) on top of the new root mount point at I. At that point, the calling process's root directory and current " #| "working directory refer to the new root mount point (I). " #| "During the subsequent B() call, resolution of I<\".\"> starts " #| "with I and then moves up the list of mounts stacked at I, " #| "with the result that I is unmounted." msgid "" "This sequence succeeds because the B() call stacks the old root " "mount point on top of the new root mount point at I. At that point, the " "calling process's root directory and current working directory refer to the " "new root mount point (I). During the subsequent B() " "call, resolution of I<\\[dq].\\[dq]> starts with I and then moves " "up the list of mounts stacked at I, with the result that old root mount " "point is unmounted." msgstr "" "Эта последовательность выполняется успешно, так как вызов B() " "укладывает точку монтирования старого корня (I) сверху точки " "монтирования нового корня в I. В этот момент корневой каталог и текущий " "рабочий каталог вызывающего процесса указывают на точку монтирования нового " "корня (I). При последующем вызове B() определение I<\".\"> " "начинается с I и затем перемещается вверх по списку уложенных " "монтирований в I, что в конце заканчивается размонтированием I." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Historical notes" msgstr "Исторические замечания" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "For many years, this manual page carried the following text:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "B() may or may not change the current root and the current " #| "working directory of any processes or threads that use the old root " #| "directory and which are in the same mount namespace as the caller of " #| "B(). The caller of B() should ensure that " #| "processes with root or current working directory at the old root operate " #| "correctly in either case. An easy way to ensure this is to change their " #| "root and current working directory to I before invoking " #| "B(). Note also that B() may or may not affect " #| "the calling process's current working directory. It is therefore " #| "recommended to call B immediately after B()." msgid "" "B() may or may not change the current root and the current " "working directory of any processes or threads which use the old root " "directory. The caller of B() must ensure that processes with " "root or current working directory at the old root operate correctly in " "either case. An easy way to ensure this is to change their root and current " "working directory to I before invoking B()." msgstr "" "Системный вызов B() может изменить или может не изменить текущий " "корень и текущий рабочий каталог всех процессов или нитей, которые " "используют старый корневой каталог и которые находятся в том же пространстве " "имён монтирования что и вызывающий B(). В любом случае, " "вызывающий B() должен проверить, что процессы с корневым или " "текущим рабочим каталогом старого корня работают правильно. Простым способом " "проверки является смена их корня и текущего рабочего каталога на " "I до вызова B(). Заметим, что B() может " "повлиять или может не повлиять на текущий рабочий каталог вызывающего " "процесса. Поэтому рекомендуется вызвать B сразу после " "B()." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This text, written before the system call implementation was even finalized " "in the kernel, was probably intended to warn users at that time that the " "implementation might change before final release. However, the behavior " "stated in DESCRIPTION has remained consistent since this system call was " "first implemented and will not change now." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "EXAMPLES" msgstr "ПРИМЕРЫ" #. FIXME #. Would it be better, because simpler, to use unshare(2) #. rather than clone(2) in the example below? #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The program below demonstrates the use of B() inside a mount " "namespace that is created using B(2). After pivoting to the root " "directory named in the program's first command-line argument, the child " "created by B(2) then executes the program named in the remaining " "command-line arguments." msgstr "" "Представленная ниже программа демонстрирует использование B() " "внутри пространства монтирования, которое создаётся с помощью B(2). " "После перехода (pivoting) в корневой каталог с именем из первого параметра " "командной строки, потомок, созданный B(2), выполняет программу с " "именем из оставшихся параметров командной строки." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "We demonstrate the program by creating a directory that will serve as the " "new root filesystem and placing a copy of the (statically linked) " "B(1) executable in that directory." msgstr "" "Для работы программы создадим каталог, который будет служить новой корневой " "файловой системой, и поместим копию исполняемого файла B(1) " "(скомпонованного статически) в этот каталог." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy, no-wrap #| msgid "" #| "$ B\n" #| "$ B # Show inode number of new root directory\n" #| "319459 /tmp/rootfs\n" #| "$ B\n" #| "$ B\n" #| "bbsh$ B\n" #| "bbsh$ B\n" #| "bbsh$ B\n" #| "bbsh$ B\n" #| "bbsh$ B\n" #| "busybox echo ln ls\n" #| "bbsh$ B # Compare with inode number above\n" #| "319459 /\n" #| "bbsh$ B\n" #| "hello world\n" msgid "" "$ B\n" "$ B # Show inode number of new root directory\n" "319459 /tmp/rootfs\n" "$ B\n" "$ B\n" "bbsh$ B\n" "bbsh$ B\n" "bbsh$ B\n" "bbsh$ B\n" "bbsh$ B\n" "busybox echo ln ls\n" "bbsh$ B # Compare with inode number above\n" "319459 /\n" "bbsh$ B\n" "hello world\n" msgstr "" "$ B\n" "$ B # выведем номер иноды нового корневого каталога\n" "319459 /tmp/rootfs\n" "$ B\n" "$ B\n" "bbsh$ B\n" "bbsh$ B\n" "bbsh$ B\n" "bbsh$ B\n" "bbsh$ B\n" "busybox echo ln ls\n" "bbsh$ B # сравните с номером иноды выше\n" "319459 /\n" "bbsh$ B\n" "hello world\n" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Program source" msgstr "Исходный код программы" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "/* pivot_root_demo.c */\n" "\\&\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Elimits.hE\n" "#include Esched.hE\n" "#include Esignal.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Esys/mman.hE\n" "#include Esys/mount.hE\n" "#include Esys/stat.hE\n" "#include Esys/syscall.hE\n" "#include Esys/wait.hE\n" "#include Eunistd.hE\n" "\\&\n" "static int\n" "pivot_root(const char *new_root, const char *put_old)\n" "{\n" " return syscall(SYS_pivot_root, new_root, put_old);\n" "}\n" "\\&\n" "#define STACK_SIZE (1024 * 1024)\n" "\\&\n" "static int /* Startup function for cloned child */\n" "child(void *arg)\n" "{\n" " char path[PATH_MAX];\n" " char **args = arg;\n" " char *new_root = args[0];\n" " const char *put_old = \"/oldrootfs\";\n" "\\&\n" " /* Ensure that \\[aq]new_root\\[aq] and its parent mount don\\[aq]t have\n" " shared propagation (which would cause pivot_root() to\n" " return an error), and prevent propagation of mount\n" " events to the initial mount namespace. */\n" "\\&\n" " if (mount(NULL, \"/\", NULL, MS_REC | MS_PRIVATE, NULL) == -1)\n" " err(EXIT_FAILURE, \"mount-MS_PRIVATE\");\n" "\\&\n" " /* Ensure that \\[aq]new_root\\[aq] is a mount point. */\n" "\\&\n" " if (mount(new_root, new_root, NULL, MS_BIND, NULL) == -1)\n" " err(EXIT_FAILURE, \"mount-MS_BIND\");\n" "\\&\n" " /* Create directory to which old root will be pivoted. */\n" "\\&\n" " snprintf(path, sizeof(path), \"%s/%s\", new_root, put_old);\n" " if (mkdir(path, 0777) == -1)\n" " err(EXIT_FAILURE, \"mkdir\");\n" "\\&\n" " /* And pivot the root filesystem. */\n" "\\&\n" " if (pivot_root(new_root, path) == -1)\n" " err(EXIT_FAILURE, \"pivot_root\");\n" "\\&\n" " /* Switch the current working directory to \"/\". */\n" "\\&\n" " if (chdir(\"/\") == -1)\n" " err(EXIT_FAILURE, \"chdir\");\n" "\\&\n" " /* Unmount old root and remove mount point. */\n" "\\&\n" " if (umount2(put_old, MNT_DETACH) == -1)\n" " perror(\"umount2\");\n" " if (rmdir(put_old) == -1)\n" " perror(\"rmdir\");\n" "\\&\n" " /* Execute the command specified in argv[1]... */\n" "\\&\n" " execv(args[1], &args[1]);\n" " err(EXIT_FAILURE, \"execv\");\n" "}\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " char *stack;\n" "\\&\n" " /* Create a child process in a new mount namespace. */\n" "\\&\n" " stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,\n" " MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);\n" " if (stack == MAP_FAILED)\n" " err(EXIT_FAILURE, \"mmap\");\n" "\\&\n" " if (clone(child, stack + STACK_SIZE,\n" " CLONE_NEWNS | SIGCHLD, &argv[1]) == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" "\\&\n" " /* Parent falls through to here; wait for child. */\n" "\\&\n" " if (wait(NULL) == -1)\n" " err(EXIT_FAILURE, \"wait\");\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. SRC END #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "СМОТРИТЕ ТАКЖЕ" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(2), B(2), B(2), B(2), B(4), " "B(7), B(8), B(8)" msgstr "" "B(2), B(2), B(2), B(2), B(4), " "B(7), B(8), B(8)" #. type: TH #: debian-bookworm #, no-wrap msgid "2023-02-05" msgstr "5 февраля 2023 г." #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "Linux man-pages 6.03" #. type: Plain text #: debian-bookworm fedora-40 mageia-cauldron opensuse-leap-15-6 #, fuzzy #| msgid "" #| "I must be a mount point. (If it is not otherwise a mount " #| "point, it suffices to bind mount I on top of itself.)" msgid "" "I must be a path to a mount point, but can't be I<\"/\">. A path " "that is not already a mount point can be converted into one by bind mounting " "the path onto itself." msgstr "" "Значение I должно быть точкой монтирования (если это не точка " "монтирования, то достаточно привязать монтирование I поверх самой " "себя)." #. Reconfirmed that the following error occurs on Linux 5.0 by #. specifying 'new_root' as "/rootfs" and 'put_old' as #. "/rootfs/oldrootfs", and *not* bind mounting "/rootfs" on top of #. itself. Of course, this is an odd situation, since a later check #. in the kernel code will in any case yield EINVAL if 'new_root' is #. not a mount point. However, when the system call was first added, #. 'new_root' was not required to be a mount point. So, this #. error is nowadays probably just the result of crufty accumulation. #. This error can also occur if we bind mount "/" on top of itself #. and try to specify "/" as the 'new' (again, an odd situation). So, #. the EBUSY check in the kernel does still seem necessary to prevent #. that case. Furthermore, the "or put_old" piece is probably #. redundant text (although the check is in the kernel), since, #. in another check, 'put_old' is required to be under 'new_root'. #. type: Plain text #: debian-bookworm fedora-40 mageia-cauldron opensuse-leap-15-6 #, fuzzy #| msgid "" #| "I or I is on the current root filesystem. (This error " #| "covers the pathological case where I is I<\"/\">.)" msgid "" "I or I is on the current root mount. (This error covers " "the pathological case where I is I<\"/\">.)" msgstr "" "Аргумент I или I находится в текущей корневой файловой " "системе (эта ошибка возникает при патологическом случае когда значение " "I равно I<\"/\">)." #. type: SH #: debian-bookworm #, no-wrap msgid "VERSIONS" msgstr "ВЕРСИИ" #. type: Plain text #: debian-bookworm msgid "B() was introduced in Linux 2.3.41." msgstr "Вызов B() появился в Linux 2.3.41." #. type: Plain text #: debian-bookworm msgid "B() is Linux-specific and hence is not portable." msgstr "" "Вызов B() есть только в Linux и поэтому его использование не " "переносимо." #. type: Plain text #: debian-bookworm fedora-40 mageia-cauldron opensuse-leap-15-6 #, fuzzy #| msgid "" #| "This sequence succeeds because the B() call stacks the old " #| "root mount point (I) on top of the new root mount point at I. At that point, the calling process's root directory and current " #| "working directory refer to the new root mount point (I). " #| "During the subsequent B() call, resolution of I<\".\"> starts " #| "with I and then moves up the list of mounts stacked at I, " #| "with the result that I is unmounted." msgid "" "This sequence succeeds because the B() call stacks the old root " "mount point on top of the new root mount point at I. At that point, the " "calling process's root directory and current working directory refer to the " "new root mount point (I). During the subsequent B() " "call, resolution of I<\".\"> starts with I and then moves up the " "list of mounts stacked at I, with the result that old root mount point is " "unmounted." msgstr "" "Эта последовательность выполняется успешно, так как вызов B() " "укладывает точку монтирования старого корня (I) сверху точки " "монтирования нового корня в I. В этот момент корневой каталог и текущий " "рабочий каталог вызывающего процесса указывают на точку монтирования нового " "корня (I). При последующем вызове B() определение I<\".\"> " "начинается с I и затем перемещается вверх по списку уложенных " "монтирований в I, что в конце заканчивается размонтированием I." #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "/* pivot_root_demo.c */\n" msgstr "/* pivot_root_demo.c */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Elimits.hE\n" "#include Esched.hE\n" "#include Esignal.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Esys/mman.hE\n" "#include Esys/mount.hE\n" "#include Esys/stat.hE\n" "#include Esys/syscall.hE\n" "#include Esys/wait.hE\n" "#include Eunistd.hE\n" msgstr "" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Elimits.hE\n" "#include Esched.hE\n" "#include Esignal.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Esys/mman.hE\n" "#include Esys/mount.hE\n" "#include Esys/stat.hE\n" "#include Esys/syscall.hE\n" "#include Esys/wait.hE\n" "#include Eunistd.hE\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static int\n" "pivot_root(const char *new_root, const char *put_old)\n" "{\n" " return syscall(SYS_pivot_root, new_root, put_old);\n" "}\n" msgstr "" "static int\n" "pivot_root(const char *new_root, const char *put_old)\n" "{\n" " return syscall(SYS_pivot_root, new_root, put_old);\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "#define STACK_SIZE (1024 * 1024)\n" msgstr "#define STACK_SIZE (1024 * 1024)\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static int /* Startup function for cloned child */\n" "child(void *arg)\n" "{\n" " char path[PATH_MAX];\n" " char **args = arg;\n" " char *new_root = args[0];\n" " const char *put_old = \"/oldrootfs\";\n" msgstr "" "static int /* начальная функция клонированного потомка */\n" "child(void *arg)\n" "{\n" " char path[PATH_MAX];\n" " char **args = arg;\n" " char *new_root = args[0];\n" " const char *put_old = \"/oldrootfs\";\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, fuzzy, no-wrap #| msgid "" #| " /* Ensure that \\(aqnew_root\\(aq and its parent mount don\\(aqt have\n" #| " shared propagation (which would cause pivot_root() to\n" #| " return an error), and prevent propagation of mount\n" #| " events to the initial mount namespace. */\n" msgid "" " /* Ensure that \\[aq]new_root\\[aq] and its parent mount don\\[aq]t have\n" " shared propagation (which would cause pivot_root() to\n" " return an error), and prevent propagation of mount\n" " events to the initial mount namespace. */\n" msgstr "" " /* Проверим, что \\(aqnew_root\\(aq и его родительское монтирование \n" " не имеют общего распространения (из-за чего pivot_root() вернул бы\n" " ошибку), и отключим распространение событий монтирования в\n" " первоначальное пространство имён монтирования. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (mount(NULL, \"/\", NULL, MS_REC | MS_PRIVATE, NULL) == -1)\n" " err(EXIT_FAILURE, \"mount-MS_PRIVATE\");\n" msgstr "" " if (mount(NULL, \"/\", NULL, MS_REC | MS_PRIVATE, NULL) == -1)\n" " err(EXIT_FAILURE, \"mount-MS_PRIVATE\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, fuzzy, no-wrap #| msgid " /* Ensure that \\(aqnew_root\\(aq is a mount point. */\n" msgid " /* Ensure that \\[aq]new_root\\[aq] is a mount point. */\n" msgstr " /* Проверим, что \\(aqnew_root\\(aq является точкой монтирования. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (mount(new_root, new_root, NULL, MS_BIND, NULL) == -1)\n" " err(EXIT_FAILURE, \"mount-MS_BIND\");\n" msgstr "" " if (mount(new_root, new_root, NULL, MS_BIND, NULL) == -1)\n" " err(EXIT_FAILURE, \"mount-MS_BIND\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Create directory to which old root will be pivoted. */\n" msgstr " /* Создадим каталог, в котором перейдёт старый корень. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " snprintf(path, sizeof(path), \"%s/%s\", new_root, put_old);\n" " if (mkdir(path, 0777) == -1)\n" " err(EXIT_FAILURE, \"mkdir\");\n" msgstr "" " snprintf(path, sizeof(path), \"%s/%s\", new_root, put_old);\n" " if (mkdir(path, 0777) == -1)\n" " err(EXIT_FAILURE, \"mkdir\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* And pivot the root filesystem. */\n" msgstr " /* и переведём корневую файловую систему. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (pivot_root(new_root, path) == -1)\n" " err(EXIT_FAILURE, \"pivot_root\");\n" msgstr "" " if (pivot_root(new_root, path) == -1)\n" " err(EXIT_FAILURE, \"pivot_root\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Switch the current working directory to \"/\". */\n" msgstr " /* сменим текущий рабочий каталог на «/». */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (chdir(\"/\") == -1)\n" " err(EXIT_FAILURE, \"chdir\");\n" msgstr "" " if (chdir(\"/\") == -1)\n" " err(EXIT_FAILURE, \"chdir\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Unmount old root and remove mount point. */\n" msgstr " /* размонтируем старый корень и удалим точку монтирования. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (umount2(put_old, MNT_DETACH) == -1)\n" " perror(\"umount2\");\n" " if (rmdir(put_old) == -1)\n" " perror(\"rmdir\");\n" msgstr "" " if (umount2(put_old, MNT_DETACH) == -1)\n" " perror(\"umount2\");\n" " if (rmdir(put_old) == -1)\n" " perror(\"rmdir\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Execute the command specified in argv[1]... */\n" msgstr " /* запустим команду, указанную в argv[1]... */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " execv(args[1], &args[1]);\n" " err(EXIT_FAILURE, \"execv\");\n" "}\n" msgstr "" " execv(args[1], &args[1]);\n" " err(EXIT_FAILURE, \"execv\");\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " char *stack;\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " char *stack;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Create a child process in a new mount namespace. */\n" msgstr " /* создадим дочерний процесс в новом пространстве имён монтирования. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,\n" " MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);\n" " if (stack == MAP_FAILED)\n" " err(EXIT_FAILURE, \"mmap\");\n" msgstr "" " stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,\n" " MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);\n" " if (stack == MAP_FAILED)\n" " err(EXIT_FAILURE, \"mmap\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (clone(child, stack + STACK_SIZE,\n" " CLONE_NEWNS | SIGCHLD, &argv[1]) == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" msgstr "" " if (clone(child, stack + STACK_SIZE,\n" " CLONE_NEWNS | SIGCHLD, &argv[1]) == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Parent falls through to here; wait for child. */\n" msgstr " /* предок попадает сюда; ждём потомка. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (wait(NULL) == -1)\n" " err(EXIT_FAILURE, \"wait\");\n" msgstr "" " if (wait(NULL) == -1)\n" " err(EXIT_FAILURE, \"wait\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" " exit(EXIT_SUCCESS);\n" "}\n" #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "31 октября 2023 г." #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "Linux man-pages 6.06" #. type: TH #: fedora-rawhide #, no-wrap msgid "2024-02-25" msgstr "25 февраля 2024 г." #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "Linux man-pages 6.7" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "2023-03-30" msgstr "30 марта 2023 г." #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr "Linux man-pages 6.04" #. type: TH #: opensuse-tumbleweed #, fuzzy, no-wrap #| msgid "Linux man-pages 6.7" msgid "Linux man-pages (unreleased)" msgstr "Linux man-pages 6.7"