НАЗВА
mount — змонтувати файлову системуБІБЛІОТЕКА
Стандартна бібліотека C ( libc, -lc)КОРОТКИЙ ОПИС
#include <sys/mount.h>
int mount(const char *джерело, const char *ціль, const char *тип_файлової_системи, unsigned long прапорці_монтування, const void *_Nullableдані);
ОПИС
mount() долучає файлову систему, яку вказано як джерело (яка часто є шляхом, який посилається на пристрій, але також може бути шляхом до каталогу або файла або фіктивним рядком), до місця (каталогу або файла), який вказано шляхом ціль. Для монтування файлових систем потрібні відповідні права доступу (Linux: можливість CAP_SYS_ADMIN). Список значень для аргументу тип_файлової_системи, підтримку яких передбачено у ядрі системи, наведено у файлі /proc/filesystems (наприклад, "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse", "tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660"). Доступ до додаткових типів можна отримати завантаженням відповідних модулів. Аргумент дані буде оброблено по-різному різними файловими системами. Типово, це рядок відокремлених комами параметрів, які може бути оброблено для файлової системи. Див. mount(8), щоб дізнатися більше про параметри, які доступні для кожного з типів файлових систем. Цей аргумент може мати значення NULL (бути порожнім), якщо параметрів не задано. Виклик mount() виконує один із декількох загальних типів дій, залежно від бітів, які вказано аргументом прапорці_монтування. Вибір дії, яку буде виконано, визначається перевіркою бітів, які встановлено в аргументі прапорці_монтування. Перевірки виконуватимуться у такому порядку:- •
- Повторно змонтувати наявне монтування: прапорці_монтування включають MS_REMOUNT.
- •
- Створити монтування-прив'язку: прапорці_монтування включають MS_BIND.
- •
- Змінити тип поширення наявного монтування: прапорці_монтування включають один з прапорців MS_SHARED, MS_PRIVATE, MS_SLAVE або MS_UNBINDABLE.
- •
- Пересунути наявне монтування до нового місця: прапорці_монтування включають MS_MOVE.
- •
- Створити монтування: прапорці_монтування не містять жодного з наведених вище прапорців.
Додаткові прапорці монтування
У наведеному нижче списку описано додаткові прапорці, які можна вказати в аргументі прапорці_монтування. Зауважте, що при виконанні деяких типів дій буде проігноровано деякі або усі з цих прапорців, як це описано нижче на цій сторінці.- MS_DIRSYNC (починаючи з Linux 2.5.19)
- Зробити зміни у цій файловій системі синхронними. (Цю властивість можна отримати для окремих каталогів або піддерев ієрархії за допомогою chattr(1).)
- MS_LAZYTIME (починаючи з Linux 4.0)
- Зменшити оновлення на диску для часових позначок inode (atime, mtime, ctime) шляхом зберігання цих змін лише в оперативній пам'яті. Часові позначки на диску буде оновлено лише за таких умов:
- •
- inode потребує оновлення через деякі зміни, які не пов'язано із часовими позначками файла;
- •
- невилучений inode буде викинуто з оперативної пам'яті;
- •
- минуло понад 24 годин з часу, коли inode було записано на диск.
- Цей параметр монтування значно зменшує у кількості дій із запису, які потрібні для оновлення часових позначок inode, особливо mtime та atime. Втім, якщо трапиться аварійне завершення роботи системи, поля atime і mtime на диску можуть розсинхронізуватися, аж до 24 годин.
- Прикладами навантаження, де цей параметр міг би дати суттєві переваги, є частий випадковий запис до попередньо розподілених на диску файлів, а також випадки, де також увімкнено параметр монтування MS_STRICTATIME. (Перевагою поєднання MS_STRICTATIME і MS_LAZYTIME є те, що stat(2) повертатиме належним часом оновлений час доступу (atime), але оновлення atime буде скинуто на диск лише у випадках з наведеного вище списку.)
- MS_MANDLOCK
- Виконати обов'язкове блокування файлів у цій файловій системі. (Обов'язкове блокування все ще має бути увімкнено на рівні окремих файлів, як це описано у fcntl(2).) Починаючи з версії Linux 4.5, цей параметр монтування потребує можливості CAP_SYS_ADMIN і ядра, яке налаштовано з використанням параметра CONFIG_MANDATORY_FILE_LOCKING. Обов'язкове блокування було повністю вилучено як застаріле у ядрах Linux 5.15, тому цей прапорець слід вважати застарілим.
- MS_NOATIME
- Не оновлювати часи доступу для файлів (усіх типів) у цій файловій системі.
- MS_NODEV
- Не дозволяти доступ до пристроїв (особливих файлів) у цій файловій системі.
- MS_NODIRATIME
- Не оновлювати час доступу для каталогів у цій файловій системі. Цей прапорець надає доступ до підмножини функціональних можливостей, що надаються MS_NOATIME; тобто, MS_NOATIME неявним чином встановлює MS_NODIRATIME.
- MS_NOEXEC
- Не дозволяти виконання програм з цієї файлової системи.
- MS_NOSUID
- Не брати до уваги біти set-user-ID і set-group-ID або можливості файла при виконанні програм з цієї файлової системи. Крім того, переходи домену SELinux потребують прав доступу nosuid_transition, що потребує можливості правил nnp_nosuid_transition.
- MS_RDONLY
- Змонтувати файлову систему в режимі тільки читання.
- MS_REC (починаючи з Linux 2.4.11)
- Використовують у поєднанні із MS_BIND для створення монтування з прив'язкою і у поєднанні із прапорцями типу поширення для рекурсивної зміни типу поширення усіх монтувань у піддереві. Див. нижче, щоб дізнатися більше.
- MS_RELATIME (починаючи з Linux 2.6.20)
- Якщо буде виконано доступ до файла у цій файловій системі, оновити час останнього доступу до файла (atime), лише якщо поточне значення atime є меншим або рівним за час останнього внесення змін до файла (mtime) або час останньої зміни стану (ctime). Цей параметр корисний для програм, зокрема mutt(1), які потребують даних щодо того, коли було прочитано файл з часу останнього внесення змін до нього. Починаючи з версії Linux 2.6.30, типовою поведінкою ядра є поведінка, яка забезпечується цим прапорцем (якщо не вказано MS_NOATIME), а для отримання традиційної семантики потрібен прапорець MS_STRICTATIME. Крім того, починаючи з версії Linux 2.6.30, час останнього доступу до файла завжди оновлюється, якщо його вік перевищує 1 день.
- MS_SILENT (починаючи з Linux 2.6.17)
- Придушити виведення певних ( printk()) повідомлень-попереджень до журналу ядра. Цей прапорець став замінником помилково названого та застарілого прапорця MS_VERBOSE (доступного з часу появи Linux 2.4.12), який мав те саме призначення.
- MS_STRICTATIME (починаючи з Linux 2.6.30)
- Завжди оновлювати час останнього доступу (atime) при доступі до файлів у цій файловій системі. (Це типова поведінка ядра до Linux 2.6.30.) Визначення цього прапорця перевизначає ефект встановлення прапорців MS_NOATIME і MS_RELATIME.
- MS_SYNCHRONOUS
- Зробити запис у цій файловій системі синхронним (наче вказано прапорець O_SYNC open(2) для усіх відкриттів файлів у цій файловій системі).
- MS_NOSYMFOLLOW (починаючи з Linux 5.10)
- Не переходити за символічними посиланням при визначенні шляхів. Попри це, символічні посилання можна буде створювати, а readlink(1), readlink(2), realpath(1) і realpath(3) працюватимуть належним чином.
- •
- Починаючи з версії Linux 2.4, прапорці MS_NODEV, MS_NOEXEC і MS_NOSUID встановлюються на рівні точки монтування.
- •
- Додатково, починаючи з Linux 2.6.16: MS_NOATIME і MS_NODIRATIME.
- •
- Додатково, починаючи з Linux 2.6.20: MS_RELATIME.
Повторне монтування наявного монтування
Наявне монтування можна повторно змонтувати, вказавши MS_REMOUNT у mountflags. Це надає вам змогу змінювати прапорці_монтування та дані наявного монтування без виконання демонтування і повторного монтування файлової системи. ціль повинна мати таке саме значення, що і у початковому виклику mount(). Аргументи джерело і тип_файлової_системи буде проігноровано. Аргументи прапорці_монтування і дані мають збігатися за значеннями з початковим викликом mount(), окрім тих параметрів, які має бути змінено. Можна змінювати такі прапорці_монтування: MS_LAZYTIME, MS_MANDLOCK, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RELATIME, MS_RDONLY, MS_STRICTATIME (результатом зміни буде зняття прапорців MS_NOATIME і MS_RELATIME) і MS_SYNCHRONOUS. Спроби змінити значення прапорців MS_DIRSYNC і MS_SILENT під час повторного монтування без питань буде проігноровано. Зауважте, що зміни до прапорців окремих суперблоків можна буде переглянути за усіма монтуваннями пов'язаної файлової системи (оскільки прапорці для окремих суперблоків спільно використовуються усіма монтуваннями). Починаючи з Linux 3.17, якщо не вказано жодного з прапорців MS_NOATIME, MS_NODIRATIME, MS_RELATIME і MS_STRICTATIME у прапорцях_монтування, дія з повторного монтування зберігатиме наявні значення цих прапорців (а не використовуватиме типове значення MS_RELATIME). Починаючи з Linux 2.6.26, прапорцем MS_REMOUNT можна скористатися у поєднанні із MS_BIND для зміни прапорців монтування окремої точки монтування. Це, зокрема, корисно для встановлення або зняття прапорця «лише читання» для монтування без зміни базової файлової системи. Визначення прапорців_монтування так:MS_REMOUNT | MS_BIND | MS_RDONLY
зробить доступ за допомогою цієї точки монтування придатним лише для читання, не впливаючи на інші точки монтування.
Створення монтування з прив'язкою
Якщо до прапорців_монтування включено MS_BIND (доступний з Linux 2.4), буде виконано монтування з прив'язкою. Монтування з прив'язкою робить файл або ієрархію каталогу видимою із іншої точки у у тій самій ієрархії каталогів. Монтування з прив'язкою можуть перетинати межі файлової системи і виходити за межі пісочниць chroot(2). Аргументи тип_файлової_системи і дані буде проігноровано. Решту бітів (окрім MS_REC, як це описано нижче) в аргументі прапорці_монтування також буде проігноровано. (Монтування з прив'язкою матиме ті самі параметри монтування, що і базове монтування.) Втім, ознайомтеся із обговоренням щодо повторного монтування вище, щоб дізнатися про спосіб зробити наявне монтування з прив'язкою придатним лише до читання. Типово, якщо каталог є змонтованим із прив'язкою, буде змонтовано лише цей каталог; якщо у ієрархії каталогів є якісь інші підлеглі монтування, їх не буде змонтовано з прив'язкою. Якщо також вказано прапорець MS_REC, буде виконано рекурсивну дію з монтування з прив'язкою: усі підлеглі монтування у підлеглій ієрархії джерело (окрім неприв'язуваних монтувань) також буде змонтовано з прив'язкою до відповідних місць у підлеглій ієрархії ціль.Зміна типу поширення наявного монтування
Якщо до прапорців_монтування включено одне зі значень MS_SHARED, MS_PRIVATE, MS_SLAVE або MS_UNBINDABLE (усі доступні з версії Linux 2.6.15), буде змінено тип поширення наявного монтування. Якщо вказано декілька з цих прапорців, результатом буде помилка. Єдиними іншими прапорцями, які може бути вказано при зміні типу поширення, є MS_REC (описано нижче) і MS_SILENT (який буде проігноровано). Аргументи джерело, тип_файлової_системи і дані буде проігноровано. Призначення прапорців типу поширення є таким:- MS_SHARED
- Зробити це монтування спільним. Події з монтування та демонтування безпосередньо під цим монтуванням поширюватимуться на інші монтування, які є учасниками групи вузлів цього монтування. Поширення тут означає, що ту саму дію з монтування або демонтування буде автоматично виконано для усіх інших монтувань у групі вузлів. І навпаки, події з монтування або демонтування, які виконуватимуться під монтуваннями вузлів, поширюватимуться до цього монтування.
- MS_PRIVATE
- Зробити це монтування приватним. Події з монтування і демонтування не поширюватимуться всередину і назовні від цього монтування.
- MS_SLAVE
- Якщо це спільне монтування, яке є учасником групи вузлів, яка містить інших учасників, перетворити його на підлегле монтування. Якщо це спільне монтування, яке є учасником групи вузлів, яка не містить інших учасників, перетворити його на приватне монтування. В інших випадках тип поширення монтування буде залишено без змін.
- Якщо монтування є підлеглим, події з монтування або демонтування поширюватимуться до цього монтування з (основної) спільної групи вузлів, учасником якої було раніше це монтування. Події з монтування і демонтування під цим монтуванням не поширюватимуться до жодного вузла.
- Монтування може бути підлеглим монтуванням іншої групи вузлів, одночасно поділяючи події з монтування і демонтування з групою вузлів, учасником якої воно є.
- MS_UNBINDABLE
- Зробити це монтування неприв'язним. Таке монтування подібне до приватного, а на додачу, це монтування не можна буде використати як монтування з прив'язкою. Коли виконується рекурсивне монтування з прив'язкою ( mount() з прапорцями MS_BIND і MS_REC) для підлеглої ієрархії каталогу, усі неприв'язні монтування у підлеглій ієрархії буде автоматично прибрано (тобто не відтворено) при відтворенні цієї підлеглої ієрархії для відтворення підлеглої ієрархії цілі.
Пересування монтування
Якщо прапорці_монтування містить прапорець MS_MOVE (доступний з версії Linux 2.4.18), пересунути підлеглу ієрархію: джерело вказує на наявне монтування, а ціль вказує нове місце, до якого має бути переміщено монтування. Пересування є атомарним: без точки підлеглу ієрархією буде демонтовано. Решту бітів у аргументі прапорці_монтування буде проігноровано, так само, як аргументи тип_файлової_системи і дані.Створення нової точки монтування
Якщо не вказано жодного з прапорців MS_REMOUNT, MS_BIND, MS_MOVE, MS_SHARED, MS_PRIVATE, MS_SLAVE і MS_UNBINDABLE у прапорцях_монтування, mount() виконає типову дію: створення монтування. Джерело вказує на джерело для нового монтування, а ціль вказує на каталог, у якому слід створити точку монтування. Для внесення змін до поведінки виклику буде використано аргументи тип_файлової_системи і дані і подальші біти, які може бути вказано у прапорцях_монтування.ПОВЕРНУТЕ ЗНАЧЕННЯ
Якщо функцію буде успішно виконано, буде повернуто нуль. Якщо станеться помилка, буде повернуто -1 і встановлено errno для позначення помилки.ПОМИЛКИ
Значення помилок, які вказано нижче, є результатом обчислення кодів помилок, які є незалежними від типу файлової системи. У кожного типу файлової системи можуть бути власні спеціалізовані коди помилок і власна спеціалізована поведінка. Див. початковий код ядра Linux, щоб дізнатися більше.- EACCES
- Компонент шляху виявився непридатним для пошуку. (Див. також path_resolution(7).)
- EACCES
- Було виконано спробу монтування придатної лише для читання файлової системи без зазначення прапорця MS_RDONLY.
- Файлова система може бути придатною лише для читання з різних причин, зокрема: файлову систему розташовано на придатному лише для читання оптичному диску; файлову систему розташовано на пристрої із фізичним перемикачем, який переведено у стан, який робить диск придатним лише для читання; реалізацію файлової системи було зібрано із підтримкою лише читання; або під час початкового монтування файлової системи було виявлено помилки, отже файлову систему позначено як придатну лише для читання і її не може бути повторно змонтовано для читання і запису (аж до виправлення помилок).
- У деяких файлових системах, замість цього, буде повернуто помилку EROFS у відповідь на спробу монтування придатної лише для читання файлової системи.
- EACCES
- Блоковий пристрій source розташовано у файловій системі, яку змонтовано з параметром MS_NODEV.
- EBUSY
- Виконано спробу насаджування нової точки монтування безпосередньо на наявну точку монтування, яку було створено у цьому просторі назв монтування із тим самим джерелом і ціллю.
- EBUSY
- джерело не може бути повторно змонтовано у режимі лише читання, оскільки на ньому усе ще зберігаються файли, які відкрито для запису.
- EFAULT
- Один із аргументів-вказівників вказує на місце поза простором адрес користувача.
- EINVAL
- джерело містить некоректний суперблок.
- EINVAL
- Було виконано спробу повторного монтування ( MS_REMOUNT), але джерело не було вже змонтовано до цілі.
- EINVAL
- Було виконано спробу пересування ( MS_MOVE), але в ієрархії монтування у джерело включено непридатні до прив'язування монтування, а ціль є монтуванням, типом поширення якого є MS_SHARED.
- EINVAL
- Було виконано спробу пересування ( MS_MOVE), але батьківське монтування монтування джерело належить до типу поширення MS_SHARED.
- EINVAL
- Було виконано спробу пересування ( MS_MOVE), але джерело не було монтуванням або було «/».
- EINVAL
- Було надіслано запит щодо дії з прив'язки ( MS_BIND), де джерело вказує на магічне посилання простору назв монтування (тобто магічне посилання /proc/[pid]/ns/mnt або монтування з прив'язкою до такого посилання), а типом поширення батьківського монтування цілі було MS_SHARED, але поширення бажаного монтування з прив'язкою може призвести до циклічних залежностей, що може заважати будь-якому вивільненню простору назв монтування.
- EINVAL
- У параметрі прапорці_монтування містилося декілька MS_SHARED, MS_PRIVATE, MS_SLAVE або MS_UNBINDABLE.
- EINVAL
- У параметрі прапорці_монтування міситься MS_SHARED, MS_PRIVATE, MS_SLAVE або MS_UNBINDABLE, а також міститься прапорець, відмінний від MS_REC або MS_SILENT.
- EINVAL
- Спроба монтування прив'язки для непридатного до прив'язки монтування.
- EINVAL
- У непривілейованому просторі назв монтування (тобто просторі назв монтування, власником якого є простір назв користувача, який було створено непривілейованим користувачем) було виконано спробу монтування з прив'язкою ( MS_BIND) без визначення ( MS_REC), яка б відкрила ієрархію файлової системи під одним з підлеглих монтувань каталогу, прив'язка якого виконується.
- ELOOP
- Під час обробки шляху виявлено забагато посилань.
- ELOOP
- Було виконано спробу пересування, а ціль є нащадком джерела.
- EMFILE
- (У випадку, коли не потрібен блоковий пристрій:) Таблицю фіктивних пристроїв переповнено.
- ENAMETOOLONG
- Довжина шляху перевищує MAXPATHLEN.
- ENODEV
- У ядрі не налаштовано тип_файлової_системи.
- ENOENT
- Шлях є порожнім або містить компонент, якого не існує.
- ENOMEM
- Ядру не вдалося розмістити у пам'яті вільну сторінку для копіювання туди назв файлів або даних.
- ENOTBLK
- джерело не є блоковим пристроєм (і пристрій є обов'язковим).
- ENOTDIR
- ціль або префікс джерела, не є каталогом.
- ENXIO
- Основний номер блокового пристрою джерело перебуває поза припустимим діапазоном.
- EPERM
- Команда, з якої викликано функцію, не має потрібних прав доступу.
- EPERM
- Було виконано спробу змінити ( MS_REMOUNT) прапорець MS_RDONLY, MS_NOSUID або MS_NOEXEC або один з прапорців «atime» ( MS_NOATIME, MS_NODIRATIME, MS_RELATIME) наявного монтування, але монтування заблоковано; див. mount_namespaces(7).
- EROFS
- Було виконано спробу монтування придатної лише для читання файлової системи без зазначення прапорця MS_RDONLY. Див. EACCES вище.
ВЕРСІЇ
Визначення MS_DIRSYNC, MS_MOVE, MS_PRIVATE, MS_REC, MS_RELATIME, MS_SHARED, MS_SLAVE, MS_STRICTATIME та MS_UNBINDABLE було додано до заголовків glibc у версії 2.12.СТАНДАРТИ
Ця функція є специфічною для Linux. Нею не слід користуватися у програмах, які підлягають портуванню на інші операційні системи.ПРИМІТКИ
Починаючи Linux 2.4, одну файлову систему може бути змонтовано до декількох точок монтування, а декілька монтувань може бути накладено на ту саму точку монтування. Аргумент прапорці_монтування може містити магічне число 0xC0ED ( MS_MGC_VAL) у верхніх 16 бітах. (Усі інші прапорці, обговорення яких можна знайти у розділі «ОПИС», займають нижні за порядком 16 бітів прапорців_монтування.) Визначення MS_MGC_VAL було необхідним у версіях ядра до 2.4, але, починаючи з Linux 2.4, вже не є необхідним — його буде проігноровано, якщо його вказано. Початковий прапорець MS_SYNC було перейменовано на MS_SYNCHRONOUS у 1.1.69, коли було додано різні MS_SYNC до <mman.h>. До Linux 2.4 спроба виконати програму із set-user-ID або set-group-ID для файлової системи, яку змонтовано з MS_NOSUID, завершиться помилкою з EPERM. Починаючи з Linux 2.4, у цьому випадку біти set-user-ID і set-group-ID буде просто без повідомлень проігноровано.Простори назв монтування
Починаючи з версії Linux 2.4.19, у Linux передбачено простори назв монтування. Простір назв монтування — це набір монтувань файлової системи, які є видимими для процесу. Простори назв монтування можуть поділятися (і, зазвичай, поділяються) декількома процесами, а зміни у просторі назв (тобто монтування і демонтування) у результаті роботи одного процесру є видимими для усіх інших процесів, які спільно використовують той самий простір назв. (Ситуацію у Linux до версії 2.4.19 можна розглядати як таку, коли один простір назв спільно використовували усі процеси у системі.) Дочірній процес, створений fork(2), матиме той самий простір назв монтування, що і батьківський; простір назв монтування зберігається у межах execve(2). Процес може отримувати приватний простір назв монтування, якщо його було створено за допомогою прапорця CLONE_NEWNS clone(2). У цьому випадку його новий простір назв буде ініціалізовано так, щоб він був копією простору назв процесу, який викликав clone(2). Також це можливе, якщо процес викликає unshare(2) із прапорцем CLONE_NEWNS, що спричиняє те, що простір монтування процесу виклику отримує приватну копію простору назв, який він раніше поділяв із іншими процесами, отже наступні монтування і демонтування з процесу виклику будуть невидимими для інших процесів (окрім дочірніх процесів, які процес виклику надалі створюватиме), і навпаки. Щоб дізнатися про простори назв монтувань, ознайомтеся із сторінкою підручника щодо mount_namespaces(7).Батьківські зв'язки між монтуваннями
У кожного монтування є батьківське монтування. Загалом, родинні зв'язки усіх монтувань визначають єдину ієрархію каталогів, яку бачать процес у просторі назв монтування. Батьківське монтування нового монтування визначається при створенні монтування. У звичному випадку батьківським монтуванням нового монтування є монтування файлової системи, яке містить каталог або файл, до якого долучено нове монтування. У випадку, коли нове монтування розташовано у стосі вище за наявне монтування, батьківським монтуванням нового монтування буде попереднє монтування, яке було у стосі у відповідному місці. Батьківський взаємозв'язок між монтуваннями можна виявити за допомогою файла /proc/[pid]/mountinfo (див. нижче)./proc/[pid]/mounts та /proc/[pid]/mountinfo
Специфічний для Linux файл /proc/[pid]/mounts надає доступ до списку точок монтування у просторі назв монтування процесу із вказаним ідентифікатором. Крім того, файл /proc/[pid]/mountinfo надає доступ до навіть ширших відомостей щодо монтувань, зокрема типу поширення та даних щодо ідентифікатора монтування, що уможливлює виявлення батьківських зв'язків між монтуваннями. Подробиці щодо цього файла наведено на сторінках підручника щодо proc(5) і mount_namespaces(7).ДИВ. ТАКОЖ
mountpoint(1), chroot(2), ioctl_iflags(2), mount_setattr(2), pivot_root(2), umount(2), mount_namespaces(7), path_resolution(7), findmnt(8), lsblk(8), mount(8), umount(8)ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Maxim V. Dziumanenko <[email protected]> і Yuri Chornoivan <[email protected]> Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ. Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: [email protected]5 лютого 2023 року |