S C O Сетевая файловая система (NFS) Производная от LACHMAN SYSTEM V NFS Руководство администратора системы версия 1.1.0 The Santa Cruz Operation, Inc. Глава 1 Введение ───────────────────────────────────────────────────────────── О сетевой файловой системе (NFS) Роль операционной системы в NFS Об этом руководстве Структура руководства Соглашения, принятые в руководстве О сетевой файловой системе (NFS) ───────────────────────────────────────────────────────────── Сетевая файловая система SCO NFS является программным продук- том, позволяющим производить монтирование каталогов в сети и трактовать удаленные файлы как локальные. NFS разработана корпо- рацией Sun Microsystems в качестве стандарта обмена данными между различными машинами и операционными системами. При поддержке кор- порации Lachman Associates система NFS была реализована в опера- ционной среде UNIX. Как администратор системы, вы несете ответственность за наст- ройку NFS, решение сетевых проблем, добавление новых машин и новых пользователей. Для решения этих задач в системе UNIX имеет- ся набор обслуживающих команд. Администратор NFS может пользо- ваться как системными, так и дополнительными утилитами. Роль операционной системы в NFS ───────────────────────────────────────────────────────────── В отличие от большинства ныне распространяемых операционных систем, в системе UNIX с самого начала не подразумевалось сущест- вование сетей. Такое игнорирование вопроса породило ряд неудобств во взаимодействии ОС UNIX с ныне существующими высокопроизводи- тельными сетями: * В системе UNIX не предусматривается выдача полномочий более высокого уровня для критических данных или услуг. В резуль- тате не вся семантика ОС поддерживается через сеть. Так, например, не всегда следует доверять нулевому коду иденти- фикации пользователя (root). * Семантика исполнения команд в ОС UNIX сложна. Так, напри- мер, в этой системе пользователь может удалять открытый файл, даже если файл еще не появился, не будучи закрыт др. пользователем. В сети машина клиента может не иметь прав собственности на открытый файл. В этом случае файл удаляет- ся сервером. * Если в ОС UNIX машина приостанавливает выполнение операции, она записывает все связанные с ней приложения. Если работу прерывает функционирующий в сети клиент или сервер, он не влияет на действия связанных с ним соседей. Обработка оши- бок узла в сети представляет сложность для любой системы, а для ОС UNIX в особенности. Существует система протоколов, предусматривающих ответственность каждого клиента за завер- шение своей работы. При создании сетевой версии ОС UNIX - System V NFS - во всех случаях, где это только возможно, сохранена совместимость с ос- новной версией. Различия связаны со следующими ситуациями: * Собрать сетевые услуги в сетевой системе оказалось предпоч- тительным, чем сделать это в распределенной ОС. * Облегчение восстановления системы после сбоя как с точки зрения реализации, так и с точки зрения администрирования. Об этом руководстве ───────────────────────────────────────────────────────────── Данное руководство посвящено рассмотрению проблем администри- рования самих по себе. Полные сведения об инсталляции содержатся в руководстве "NFS Release and Installation Notes". Перед чтением данного руководства вам следует ознакомиться с основными сетевыми концепциями и с пользовательским представлени- ем об NFS, изложенным в "NFS Programmer's Guide". Структура руководства Настоящее руководство состоит из двух глав: * Глава 1 "Введение" описывает NFS в общих чертах и в отноше- нии к операционной системе. В ней изложены соглашения и форматы, принятые в руководстве. * Глава 2 "NFS: Сетевая файловая система" описывает NFS с точки зрения системного администратора. Здесь представлена информация о работе NFS, настройке серверов и клиентов, об отладке NFS. Соглашения, принятые в руководстве Имена каталогов и файлов в тексте даны курсивом. Первое появление термина в тексте так же выделяется курсивом. Переменные и параметры команд даются курсивом. Вводимые команды выделяются шрифтом. Элементы командной строки, заключенные в квадратные скобки ( [ ] ), являются необязательными. Многоточие (...) означает, что в командной строке может поя- виться более одного элемента. Названия нажимаемых клавиш заключаются в угловые скобки. Так, например, управляющая клавиша обозначается . Ответы системы даются разрядкой. Заглавные буквы в скобках, например (NC), следующие за именем команды, hostname(NC), относятся к разделу справочного руководс- тва "SCO NFS Reference Guide", содержащему полные сведения о ко- манде. Глава 2 NFS: Сетевая файловая система ───────────────────────────────────────────────────────────── Введение в NFS Взаимодействие файлов Взаимодействие процессов Настройка сервера NFS Выдача разрешения на экспорт Проверка файла /etc/hosts Настройка клиента NFS Проверка файла /etc/default/filesys Монтирование удаленной файловой системы Запуск и останов NFS Отладка NFS Общие сведения Сбой удаленного монтирования Зависание программ Замедленность работы Ошибки в результате проверки порядковых номеров Добавление нового пользователя Несовместимость с удаленными файловыми системами Отсутствие суперпользователя в сети Операции над файлами, которые не поддерживаются Невозможность доступа к удаленным устройствам Невозможность доступа к файловым системам другого типа Невозможность доступа к косвенным файловым системам Обработка отклонений таймера в пользовательских программах Введение в NFS ───────────────────────────────────────────────────────────── В этой главе NFS описывается с точки зрения системного адми- нистратора. Обсуждается механизм функционирования системы, вопро- сы, связанные с настройкой серверов и клиентов, отладкой NFS. В NFS сервер экспортирует разделяемые каталоги, а клиенты монтируют эти каталоги, чтобы иметь возможность работы с содержа- щимися в них файлами. В последующих подразделах описываются общие принципы взаимодействия файлов и процессов в этой работе. Подроб- ности относительно того, что может произойти в результате монти- рования клиентом удаленной файловой системы, см. в разделе "Сбой удаленного монтирования". Взаимодействие файлов Для того, чтобы экспортировать каталог, сервер должен прове- рить права доступа к нему в файле /etc/exports. Кроме того, сер- вер должен располагать именами и адресами всех клиентов (файл /etc/hosts). Для того, чтобы смонтировать каталог, клиенту нужно иметь в файле /etc/default/filesys перечень всех удаленных файловых сис- тем и узлов, через которые он сможет обращаться к каталогам. Ко- манда mount(NADM) автоматически добавляет запись о смонтированном каталоге в файл клиента /etc/mnttab(F), а команда umount автома- тически удаляет запись о демонтированном каталоге. Взаимодействие процессов С реализацией функций NFS связаны две работающие на удалении программы - mountd(NADM) и nfsd(NADM). Запрос клиента на монтиро- вание запускает функцию mountd, которая проверяет в файле сервера /etc/exports права доступа клиента и возвращает указатель на фай- ловую систему. По завершении монтирования любое обращение к ка- талогу точки монтирования и к содержимому его подкаталогов будет обрабатываться процессом nfsd в серверной системе. Запросы на об- ращение к файлам клиента (отложенная запись или чтение с продви- жением) обрабатываются процессами biod (см. nfsd(NADM)) у клиен- та. Настройка сервера NFS ───────────────────────────────────────────────────────────── Настройка сервера NFS включает выдачу разрешения машине на экспортирование файловой системы и проверку файла /etc/hosts. Во всех приводимых в разделе примерах имя сервера - jupiter. Выдача разрешения на экспорт Выдача разрешения машине на экспортирование файловой системы включает в себя следующие шаги: 1. Зарегистрируйтесь как суперпользователь. 2. Вставьте в файл /etc/exports имя точки монтирования экс- портируемой файловой системы. Например: /usr/man # экспорт на любую машину /usr2 venus earth mars # экспорт только на эти машины Синтаксис и структуру файла см. в разделе exports(NF). Обратите внимание на то, что сервер NFS может экспортиро- вать только свои собственные файловые системы. 3. Убедитесь в том, что процесс /etc/mountd запущен. Он за- пускается из файла загрузки NFS, имеющего имя /etc/nfs. 4. Убедитесь в том, что на серверной машине работает несколь- ко процессов nfsd. Их число зависит от числа запросов кли- ентов, обрабатываемых сервером параллельно, что в свою очередь определяется быстродействием и объемом памяти сер- верной машины. Найдите в тексте файла /etc/nfs строки, подобные следующим: if [-f /etc/exports] then echo " nfsd(x4)\c" nfsd 4 fi В этом примере запускаются четыре процесса nfsd. Обратите внимание на то, что вы можете запустить nfsd в любое время, задав как суперпользователь: # /etc/nfsd 4 После выполнения указанных шагов сервер NFS будет в состоянии экспортировать поименованную файловую систему. Проверка файла /etc/hosts Имя, сетевой адрес и псевдонимы каждого host'а (главной маши- ны) содержатся в файле /etc/hosts. В случае отсутствия этой ин- формации зарегистрируйтесь как суперпользователь и отредактируйте файл. Пример содержимого файла: 102.6.3.76 jupiter 192.9.1.20 earth 176.2.5.42 venus 142.9.7.36 mars Синтаксис и структуру файла см. в разделе hosts(NF). Настройка клиента NFS ───────────────────────────────────────────────────────────── Настройка клиента NFS подразумевает проверку файла /etc/default/filesys и монтирование удаленных файловых систем. Во всех приводимых ниже примерах клиент имеет имя earth. Проверка файла /etc/default/filesys В файле /etc/default/filesys клиент проверяет упоминание о тех или иных удаленных файловых системах и каталогах, именуемых точками монтирования, через которые клиент обращается к нужным данным. Вам следует убедиться в том, что вся информация о файло- вой системе, включая права доступа, имеется в этом файле. В слу- чае отсутствия той или иной информации отредактируйте файл. Вам следует также с помощью команды mkdir создать точки монтирования, отсутствующие пока в файловой системе. Пример содержимого файла: bdev=jupiter:/usr/man mountdir=/usr/man \ fsck=no rcfsck=no rcmount=yes \ mount=no fstyp=NFS nfsopts="soft,rsize=1024,wsize=1024" Запись файла описывает следующее: * Удаленным монтируемым ресурсом является jupiter:/usr/man (bdev=имя). * Этот ресурс должен быть смонтирован в каталоге /usr/man (mountdir=имя). * Его не нужно проверять с помощью fsck(ADM) (fsck=значение). * Его не нужно проверять с помощью fsck при монтировании обычными процедурами начального запуска (rcfsck=значение). * Его следует монтировать автоматически при переходе системы в многопользовательский режим (rcmount=значение). * Пользователи не должны иметь возможность монтировать эту файловую систему по желанию (mount=no). * Файловая система имеет тип NFS (fstyp=значение). Описание синтаксиса и структуры файла /etc/default/filesys см. в разделе filesys(3). Монтирование удаленной файловой системы Следующий текст заменяет содержимое раздела с тем же именем: Любая экспортированная файловая система может быть смонтиро- вана на удалении на машине, имя которой включается в содержимое файла /etc/exports для этой системы. На той машине, где монтиру- ется файловая система, суперпользователь исполняет команду mount. Например: mount -r -f NFS,soft jupiter:/usr/man /usr/jupiter.man Пример иллюстрирует использование опции soft (мягкое монтиро- вание), при которой клиент не повторяет операцию монтирования в том случае, если сервер не отвечает на первый запрос. По умолча- нию принимается "жесткое" (hard) монтирование. Мягкое монтирова- ние рекомендуется для каталогов с пометкой "только для чтения". Для того, чтобы убедиться в том, что файловая система монти- руется в нужном месте, используйте команду mount без аргументов. Результатом выполнения команды будет отображение перечня смонти- рованных файловых систем. Запуск и останов NFS ───────────────────────────────────────────────────────────── NFS запускается из командного файла, вызываемого по init(M) при переходе системы в многопользовательский режим (уровень ис- полнения 2). Эта возможность закладывается автоматически во время инсталляции путем привязки файла /etc/nfs к /etc/rc2.d/S89nfs. Для создания функциональной сети вам нужно запустить NFS по мень- шей мере на одном сервере и по меньшей мере на одном из клиентов каждого сервера. Для останова NFS в узле зарегистрируйтесь как суперпользова- тель и введите следующую команду: # /etc/nfs stop После останова ресурсы NFS перестанут быть доступными с любо- го другого узла. NFS закрывается автоматически при переходе сис- темы на уровни исполнения 0, 1 или 6. Отладка NFS ───────────────────────────────────────────────────────────── Большинство проблем, связанных с функционированием сетевой системы System V NFS, лежат в одной из четырех следующих облас- тей: 1. Методы управления сетевым доступом или архитектурные огра- ничения не позволяют выполнить операцию. 2. Программы клиента или их окружение не работают должным об- разом. 3. Программы сервера или их окружение не работают должным об- разом. 4. Сеть работает некорректно. Чтобы вести отладку NFS, вам следует ознакомиться с принципа- ми работы NFS, а также именами и функциями различных процессов и файлов БД: biod (см. nfsd(NADM)) управляющий процесс в NFS mount(NADM) монтирование файловой системы mountd(NADM) запрос к серверу на монтирование NFS nfsd(NADM) управляющий процесс в NFS rpcinfo(NADM) отчетная информация по RPC showmount(NADM) сведения о всех удаленных монтирова- ниях filesys(F) формат таблицы команд монтирования файловых систем mnttab(NF) формат таблицы смонтированных файло- вых систем exports(NF) экспортируемая файловая система rmtab(NF) формат таблицы файловых систем, смонтированных на удалении В качестве примера рассмотрим запрос на монтирование, сделан- ный с клиентской машины: # mount -f NFS krypton:/usr/src /krypton.src Серверная машина krypton по этому запросу должна будет соз- дать выход на каталог /usr/src. Этот выход затем передается ядру через системную функцию mount(NS). Ядро просматривает каталог /krypton.src и, если все правильно, привязывает этот выход к ка- талогу в записи монтирования. С этого момента все запросы файло- вой системы к каталогу и его подкаталогам подаются через соот- ветствующий выход на сервер krypton. Таким образом система и должна работать. Общие сведения При возникновении сетевых или серверных проблем программы, обращающиеся к удаленным файлам, которые смонтированы "жестким" способом, завершаются по-другому, нежели те программы, которые обращаются к удаленным файлам, смонтированным мягко. Смонтирован- ные "жестко" удаленные файловые системы побуждают программы пов- торять свои попытки обращения до тех пор, пока сервер не ответит вновь. Удаленные файловые системы, смонтированные мягко, возвра- щают ошибки. В первом случае программы зависают в ожидании ответной реак- ции сервера. При этом в конце концов NFS выводит на консоль сле- дующее сообщение: server not responding (сервер не отвечает) Во втором случае программа получает сообщение об ошибке, если пытается обратиться к файлу, чей сервер "мертв". Если клиент в NFS терпит неудачу, первым делом он должен про- верить работоспособность сервера. С места клиента введите следую- щую команду: # rpcinfo -p имя_сервера Будет выведен перечень программ, версий, протоколов и номеров портов, подобный следующему: program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100017 1 tcp 1024 rexd 100005 1 udp 1027 mountd 100003 2 udp 2049 nfs 100024 1 udp 1039 status 100024 1 tcp 1025 status 100021 1 tcp 1026 nlockmgr 100021 1 udp 1051 nlockmgr 100020 1 udp 1054 llockmgr 100020 1 tcp 1028 llockmgr 100021 2 tcp 1032 nlockmgr Вы можете также использовать rpcinfo для проверки работоспо- собности сервера mountd: # rpcinfo -u имя_сервера mountd Команда возвращает: program 100005 version 1 ready and waiting (программа 100005 версии 1 готова и находится в состоянии ожидания) Если эти шаги заканчиваются неудачей, чтобы проверить рабо- тоспособность сервера, попытайтесь зарегистрироваться на его кон- соли. Если сервер действует, но клиентская машина не может связать- ся с ним, проверьте работоспособность линий Ethernet между двумя машинами. Если сервер и сеть работоспособны, проверьте клиентские про- цессы при помощи ps. Должны работать процесс nfscint и несколько процессов biod. Например, команда: # ps -ef выведет информацию о процессах nfscint и biod. Наиболее общие типы сбоев рассматриваются в последующих раз- делах. Раздел "Сбой удаленного монтирования" посвящен описанию шагов, предпринимаемых при сбое удаленного монтирования. В разде- лах "Зависание программ" и "Замедленность работы" описываются серверы, не реагирующие на монтирование файловых систем. Сбой удаленного монтирования В данном разделе мы рассмотрим проблемы, имеющие отношение к монтированию удаленных файловых систем. Если по какой-либо причи- не команда mount не срабатывает, выполните одно из действий, опи- санных ниже. Команда mount принимает параметры либо из командной строки, либо из файла /etc/default/filesys. (См. раздел mount(NADM).) В примере, который мы рассмотрим, предполагается, что аргументы со- держатся в командной строке, однако методика отладки годится и для другого случая. Рассмотрим взаимосвязь между различными компонентами запроса на монтирование. В качестве примера возьмем строку: mount -f NFS krypton:/usr/src /krypton.src В процессе монтирования удаленной файловой системы mount про- ходит следующие шаги: 1. Команда mount открывает файл /etc/mnttab и проверяет, не было ли произведено это монтирование ранее. 2. Команда mount разбивает первый аргумент на имя host-машины krypton и имя удаленного каталога /usr/src. 3. Затем команда превращает имя host-машины в адрес протокола Internet. 4. Команда получает от программы отображения портов машины krypton номер порта для mountd. 5. Вызывается процесс mountd с передачей ему имени /usr/src. 6. Процесс mountd считывает содержимое /etc/exports (для krypton) в поисках имени экспортируемой файловой системы, содержащей /usr/src. 7. Процесс mountd запускает функцию nfs_getfh(NS) для получе- ния выхода на файл /usr/src. 8. Выход на файл возвращается клиенту. 9. На машине клиента команда mount запускает системную функ- цию mount(NS), передавая ей выход на файл и имя /krypton.src. 10. Команда проверяет, является ли инициировавший ее выполне- ние пользователь суперпользователем, а файл /krypton.src каталогом. 11. Команда mount вызывает statfs(S) для сервера krypton'а (nfsd). 12. Команда открывает файл /etc/mnttab и добавляет в него за- пись. Любой из указанных шагов может закончиться неудачно. Рассмот- рим описание сбоев, связанных с выводом сообщений об ошибках. mount: can't open /etc/mnttab (не могу открыть /etc/mnttab) В файле /etc/mnttab хранится таблица смонтированных файловых систем. Этот файл уже должен существовать. Он создается при загрузке системы и автоматически коррек- тируется каждой командой mount и umount. mount: /dev/nfsd is already mounted, sys_name is busy, or allowable number of mount points exceeded (/dev/nfsd уже смонтирован, системное_имя занято или превышено допустимое число точек монтирования) Сообщение говорит о попытке монтирования уже смонтиро- ванной файловой системы. Все запросы на монтирование к NFS, заканчивающиеся выдачей этого сообщения, адресу- ются к имени /dev/nfsd (побочный продукт реализации). mount: name or name, no such file or directory (нет такого файла или каталога) Пропущена одна из компонент командной строки (-f NFS или krypton в нашем случае). Команда mount предполага- ет локальное монтирование, если флаг -f не указан или если указанный каталог согласно файлу /etc/default/filesys не обозначает файловую систему типа NFS. В более простом случае сообщение появляется, если ука- занная локальная точка монтирования не является одним из существующих каталогов. mount: can't open /etc/default/filesys (не могу открыть /etc/default/filesys) Команда mount обратилась за информацией к файлу /etc/default/filesys, но такого файла не оказалось. Как системный администратор, вы должны создать этот файл. sys_name not in hosts database (системное_имя отсутствует в БД hosts) Системное имя в команде mount, оканчивающееся двоето- чием, отсутствует в файле /etc/hosts. Проверьте напи- сание имени host-машины и расположение двоеточия в ко- манде mount. mount: directory argument name must be a full path name (указанное имя каталога должно включать в себя полный путь) Второй аргумент команды mount является именем катало- га. Он должен представлять собой полное имя пути к файлу, начинающееся с наклонной черты (/). mount: ... server not responding(1); RPC_PMAP_FAILURE - RPC_TIMED_OUT (сервер не отвечает: отказ программы отображения пор- тов) Сервер, к которому монтирование имеет отношение, отк- лючен или программа отображения портов зависла. Попы- тайтесь зарегистрироваться на серверной машине; если попытка удастся, это будет означать, что проблема кро- ется в программе отображения портов. В качестве супер- пользователя протестируйте программу на серверной ма- шине командой: # rpcinfo -p host-имя Результатом будет список зарегистрированных программ. Если в списке все в порядке, удалите программу из сис- темы и перезапустите ее. Перезапуск программы отобра- жения портов - дело ответственное, ибо при этом теряют свой смысл все зарегистрированные услуги и все связан- ные с ними процессы должны быть также перезапущены. Для того, чтобы получить идентификаторы portmap и др. процессов, в качестве суперпользователя введите следу- ющую команду: # ps -ef Удаляйте процессы командой: # kill -9 идентификатор_portmap идентификатор_процесса1 идентификатор_процесса2 Запустите процессы вновь командами: # /etc/portmap # /etc/mountd # /etc/nfsd Другой альтернативой в том случае, если это возможно, может стать перезагрузка сервера. Такая перезагрузка не должна иметь вредных последствий для клиентов сис- темы, кроме тех случаев, когда они приостановлены в ожидании ответа сервера. Если сервер работоспособен, но на нем нельзя произвес- ти rlogin, проверьте связь клиента по линиям Ethernet, повторив попытку на другой машине. Проверьте также подключение сервера. mount: ... server not responding: RPC_PROG_NOT_REGISTERED (сервер не отвечает: программа не зарегистрирована) Это означает, что команда mount связалась с программой отображения портов, но процесс управления монтировани- ем mountd не был зарегистрирован. Убедитесь в том, что файл /etc/mountd существует и запущен. mount: /dev/nfsd or name, no such file or directory (нет такого файла или каталога) Не существует либо удаленный каталог на сервере, либо локальный каталог. mount: access denied for sys_name:name (по указанному имени доступ невозможен) Клиентская машина, на которой предпринималась попытка монтирования, отсутствует в экспортном списке сервера для монтируемой файловой системы. Список экспортируе- мых файловых систем можно получить, задав команду: # showmount -e host_имя Если искомая файловая система отсутствует в списке или если имя машины отсутствует в пользовательском списке для файловой системы, проверьте запись о файловой сис- теме в файле /etc/exports на сервере. Если имя файло- вой системы появляется в файле /etc/exports, но не от- ражается в сообщении команды showmount, это говорит о сбое в процессе mountd. Подробности см. в разделе exports(NF). mount: name: no such file or directory (нет такого файла или каталога) Удаленный файл на сервере не является каталогом. mount: not superuser Команда mount может использоваться только суперпользо- вателем, поскольку она действует на файловую систему всей машины. Зависание программ Если программы зависают при работе с файлами, причиной может быть неработоспособность сервера. На консоли может появиться сле- дующее сообщение: NFS server sys_name not responding, still trying (сервер NFS с указанным системным именем не отвечает, попро- буйте еще) Сообщение содержит имя неработающего сервера. Если клиентская машина полностью прекратила отвечать, про- верьте серверы, с которых монтировались файловые системы. Если один из них неработоспособен, клиентские машины перейдут в состо- яние зависания. Когда сервер восстановит свою работоспособность, программы автоматически продолжат выполнение. Если неработоспособен сервер, смонтированный мягко, другие работы не пострадают. Программы, которые по истечении тайм-аута попытаются вновь обратиться к удаленным файлам, потерпят неудачу, но это не отразится на других файловых системах. Если остальные клиенты данного сервера функционируют правиль- но, проверьте связь по линиям Ethernet и подключение сервера. Замедленность работы Если обращение к удаленным файлам обрабатывается необычно медленно, проверьте сервер командой: # ps -ef Если сервер функционирует и другие клиенты получают ответ за приемлемое время, проверьте работу процессов поблочного ввода-вы- вода на клиентской машине с помощью команды ps -ef. Если процессы не активны или находятся в состоянии зависания, удалите их из системы. Во-первых, найдите их идентификаторы: # ps -ef│grep biod Затем удалите их командой: # kill -9 pid1 pid2 pid3 pid4 Перезапустите процессы: # /etc/biod 4 Для того, чтобы проверить, не находятся ли процессы в состоя- нии зависания, используйте команду ps, а затем скопируйте файл большого размера. Следующая команда ps покажет использование про- цессами biod времени центрального процессора; если они не загру- жают ЦП, значит они зависли. Если biod функционирует правильно, проверьте связь по линиям Ethernet. С помощью команд nfsstat -c и nfsstat -s проконтроли- руйте объем ретрансмиссии, производимой клиентом. 5%-й размер ретрансмиссии уже считается высоким. Чрезмерная ретрансмиссия обычно свидетельствует о неисправности платы Ethernet, о несов- местимости соединений или плат клиента и сервера. Ошибки в результате проверки порядковых номеров Об ошибке в данных свидетельствует сообщение следующего типа: Copy Protection Violation ! Duplicate Serial Number(s) detected on 123.4.567.007 Product(s) att00001 shutting down. (Нарушение защиты при копировании ! Дублирование порядковых номеров, Продукт завершил работу.) Это свидетельствует о том, что в одно и то же время работают две копии одной программы. Добавление нового пользователя ───────────────────────────────────────────────────────────── Добавление нового пользователя подразумевает добавление запи- си в соответствующие файлы паролей, а для локальной регистрации - создание главного каталога на машине нового пользователя. Общие сведения об этом см. в руководстве администратора ODT-OS. В сетевой среде добавление нового пользователя подразумевает добавление новой записи в файл паролей на каждую машину локальной сети. Каждый пользователь и группа имеют уникальный код идентифи- кации по всей сети. Серверная машина должна иметь запись для каж- дого пользователя на каждой клиентской машине, пользующейся услу- гами сетевой файловой системы. Код идентификации пользователя должен быть уникальным числом. Система знает о том, что пользователь с данным кодом идентифика- ции связан с конкретным регистрационным именем; поэтому регистра- ционному имени должен соответствовать один и тот же код идентифи- кации пользователя во всех файлах паролей тех машин, которые завязаны в локальный домен. Несовместимость с удаленными файловыми системами ───────────────────────────────────────────────────────────── В удаленных файловых системах некоторые моменты могут реали- зовываться по-разному. Подобная несовместимость и пути ее преодо- ления будут рассмотрены в данном разделе. Отсутствие суперпользователя в сети В сетевой среде сервер экспортирует принадлежащие ему файло- вые системы, чтобы клиенты могли на удалении производить их мон- тирование. Если пользователем на клиентской машине становится суперпользователь, он не имеет привилегий доступа к смонтирован- ным на удалении файловым системам. Рассмотрим действия, выполняе- мые на серверной машине пользователем с именем jsbach: ────────────────────────────────────────────────────────────── / │ $ cd │ $ touch test1 test2 │ $ chmod 777 test1 │ $ chmod 700 test2 │ $ ls -l test* │ -rwxrwxrwx 1 jsbach 0 Mar 21 16:12 test1 │ -rwx------ 1 jsbach 0 Mar 21 16:12 test2 │ Суперпользователь на клиентской машине пытается обратиться к удаленной файловой системе, находящейся на серверной машине, предполагая воспользоваться положенными суперпользователю приви- легиями: ────────────────────────────────────────────────────────────── / │ $ su │ Password: │ # cd /usr2/jsbach │ # touch test1 │ # touch test2 │ touch: test2: Permission denied │ # ls -l test* │ -rwxrwxrwx 1 jsbach 0 Mar 21 16:16 test1 │ -rwx------ 1 jsbach 0 Mar 21 16:12 test2 │ Проверяя права доступа к смонтированной на удалении файловой системе, сервер отнесет суперпользователя, работающего на клиент- ской машине, к категории "прочие". Эта проблема обычно возникает при выполнении программы уста- новки кода идентификации root. Программы, выполняющиеся под этим кодом идентификации, не смогут обращаться к файлам и каталогам, если соответствующее разрешение не распространяется на "прочих" пользователей. Код идентификации пользователя root на клиентской машине отображается на -2 (или 65534). Другим аспектом этой проблемы является то, что право собс- твенности на удаленно-монтированные файлы иногда не поддается пе- редаче, особенно если они находятся на сервере, который не разре- шает пользователям исполнять команду chown. Поскольку пользова- тель root трактуется как "прочий" при удаленных обращениях, толь- ко на сервере он может изменять право собственности на удаленные файлы. Рассмотрим в качестве примера пользователя, пытающегося исполнить команду chown по отношению к новой программе a.out со сменой кода идентификации на root. Попытка закончится неудачей, как видно из следующего: ────────────────────────────────────────────────────────────── / │ $ chmod 4777 a.out │ $ su │ Password: │ # chown root a.out │ a.out: Not owner │ Для передачи прав собственности вам следует сначала либо за- регистрироваться на сервере под именем root, либо перенести файл в файловую систему, расположенную на машине пользователя (напри- мер, в каталог /usr/tmp, обычно принадлежащий локальной машине). Операции над файлами, которые не поддерживаются В удаленных файловых системах не поддерживается блокировка каталога на уровне файла. Кроме того, по отношению к удаленным файлам, с которыми рабо- тают несколько клиентов одновременно, не обеспечивается режим за- мены и запись малыми порциями. Невозможность доступа к удаленным устройствам В сетевой файловой системе не допускается обращение к удален- но-монтированному устройству, любому другому посимвольному и блочному специальному устройству, а также к поименованным кана- лам. Невозможность доступа к файловым системам другого типа В сетевой файловой системе не разрешается обращение к файло- вой системе другого типа, нежели тип вашей родной системы. Допус- тим, вы запустили NFS под UNIX'ом. Вы не сможете при этом обратиться к DOS-овской файловой системе с машины, работающей в операционной среде UNIX. Невозможность доступа к косвенным файловым системам В сетевой файловой системе не разрешается обращаться к файло- вой системе косвенным образом. Так, например, нельзя воспользо- ваться промежуточной серверной машиной для обращения к файловой системе на третьей серверной машине. Все виды обращений в NFS должны направляться от сервера к клиенту. Обработка отклонений таймера в пользовательских программах Поскольку архитектура NFS, пусть незначительно, но отличается от более ранних версий систем XENIX и UNIX, пользователям следует знать о тех местах, где их программы могут несостыковаться между собой. Таймеры на сервере NFS и на клиентской машине могут работать не синхронно, поскольку в каждой машине поддерживается свое вре- мя. Это может привести к возникновению проблем. Рассмотрим следу- ющий пример. Во многих программах предполагается, что ныне существующий файл не может быть создан в будущем. Например, команда ls -l вы- водит результаты в двух основных формах, определяющихся возрастом файла: ────────────────────────────────────────────────────────────── / │ $ date │ Sat Apr 12 15:27:48 GMT 1986 │ $ touch file2 │ $ ls -l file* │ -rw-r--r-- 1 jsbach 0 Dec 27 1984 file │ -rw-r--r-- 1 jsbach 0 Apr 12 15:27 file2 │ Первая форма вывода команды включает год, месяц и день пос- ледней модификации файла, если она производилась более 6 месяцев назад. Вторая форма включает месяц, день, часы и минуты последней модификации файла, если она имела место менее 6 месяцев назад. Команда ls вычисляет возраст файла путем простого вычитания времени модификации файла из текущего времени. Если результат превышает шесть месяцев, файл является "старым". Предположим, что таймер на сервере показывает "Apr 12 15:30:31" или на 3 минуты вперед по сравнению с показаниями тай- мера на локальной машине: ────────────────────────────────────────────────────────────── / │ $ date │ Apr 12 15:27:31 GMT 1986 │ $ touch file3 │ $ ls -l file* │ -rw-r--r-- 1 jsbach 0 Dec 27 1983 file │ -rw-r--r-- 1 jsbach 0 Apr 12 15:26 file2 │ -rw-r--r-- 1 jsbach 0 Apr 12 1986 file3 │ Отклонение текущего времени от времени модификации заставляет команду ls "думать", что новый файл был создан давно. В общем случае пользователям следует помнить о том, что прик- ладные программы, использующие локальное время и/или временные метки файловой системы, при работе с удаленными файлами будут иметь проблемы с отклонениями в показаниях таймеров. N A D M Команды управления сетевой системой Команды ───────────────────────────────────────────────────────────── Управление функционированием сети (NADM) Intro введение в команды управления работой и обслужи- ванием ONC fsirand включение генерации случайных номеров инодов (ин- дексов) lckclnt создание клиентских выходов для администратора защиты lockd сетевой блокирующий процесс mount монтирование и демонтирование файловой системы и удаленных ресурсов mountd сервер монтирований в среде NFS nfs запуск/останов NFS nfsclnt создание клиентских выходов на NFS nfsd сервисные процессы в NFS nfsstat статистика сетевой файловой системы nmountall массовое монтирование и демонтирование файловых систем passmgmt работа с файлами паролей pcnfsd процесс опознавания связи pc-nfs и буферизации вывода на печать portmap точка подключения DARPA к преобразователю про- граммных номеров RPC rexd сервер удаленного исполнения на базе RPC rpcinfo отчет о работе RPC showmount показ всех удаленных монтирований statd монитор состояния сети intro ───────────────────────────────────────────────────────────── введение в команды управления работой и обслуживанием ONC Описание: В этом разделе содержится информация, касающаяся функциониро- вания и обслуживания ONC. Описываются команды запуска и останова сетевой файловой системы (NFS), монтирования и демонтирования файловых систем в среде NFS, сервисные программы на базе RPC, а также различные процессы и утилиты, связанные с NFS/ONC. fsirand ───────────────────────────────────────────────────────────── включение генерации случайных номеров инодов (индексов) Синтаксис: fsirand [-p] special Описание: По этой команде устанавливается генерация случайных номеров инодов (индексов) для устройства special. Благодаря этому усили- вается защита файловых систем, экспортируемых под управлением NFS. Команда fsirand должна использоваться только в отношении не- монтированной файловой системы, прошедшей предварительную провер- ку с помощью команды fsck (ADM). Единственное исключение касается корневой файловой системы в однопользовательском режиме с услови- ем, что после выполнения команды система будет немедленно пере- загружена. Опции: -p Вывод сгенерированных номеров всех индексов, без внесе- ния изменений в них. См. также: fsck(ADM) lckclnt ───────────────────────────────────────────────────────────── создание клиентских выходов для администратора защиты Синтаксис: lckclnt [ nclienthandles ] Описание: Команда lckclnt назначает транспортные окончания (без уста- новления логического соединения), которые используются для созда- ния клиентских выходов. Программы администратора защиты получают клиентские выходы на время работы RPC. Nclienthandles - количество выделенных клиентских выходов. Значение этого параметра ограничивает число параллельно выполняе- мых операций администратора защиты (по работе с клиентами) и должно основываться на ожидаемой нагрузке. Если возникает потреб- ность в дополнительных клиентских выходах, можно запустить больше процессов lckclnt. Количество клиентских выходов, доступных прог- раммам администратора защиты, складывается из числа клиентских выходов, выделенных каждой lckclnt-программе. Удаление lckclnt-процесса сократит число клиентских выходов на то коли- чество, которое изначально было создано этим процессом. Файлы: /dev/inet/udp устройство UDP См. также: kclt_create(NS) lockd ───────────────────────────────────────────────────────────── сетевой блокирующий процесс Синтаксис: /etc/lockd [-d debuglevel] [-t timeout] [-g graceperiod] [-h hashsize] [-l k2utimeout] Описание: Lockd обрабатывает блокирующие запросы, посланные либо ло- кально ядром, либо с удаления другим блокирующим процессом. Lockd -процесс пересылает блокирующие запросы, касающиеся удаленных данных, серверному процессу, используя для этого пакет RPC/XDR. Затем lockd обращается к услугам монитора состояния statd (NADM). Ответ на запрос не будет послан ядру до тех пор, пока не будет получен ответ от монитора состояния и серверного блокирующего процесса. Если либо монитор, либо серверный процесс не доступны, ответ на блокирующий запрос, касающийся удаленных данных, откла- дывается до освобождения всех процессов. По возвращении сервер делает паузу (grace period), ожидая от всех клиентских lockd-процессов запуска подтверждающих запросов. Lockd-процессы, с другой стороны, извещаются монитором statd о возобновлении сервера и немедленно перевыставляют ранее выданные блокирующие запросы. Если lockd-процессу не удается сохранить ра- нее выставленную блокировку на серверном конце, он посылает выз- вавшему его процессу сигнал SIGUSR2. Команду lockd следует запустить как можно раньше, еще при переходе из однопользовательского режима в многопользовательский, чтобы не дать возможности другим процессам воспользоваться стан- дартной блокировкой, принятой в System V. Если в стандартном сис- темном коде захвата записей имеются активные или приостановленные блокировки, lockd пытается передать их процессу пользовательского уровня. Это делается для того, чтобы блокировки активных процес- сов не разрушались при запуске программ администратора защиты. Опции: -t timeout lockd использует значение timeout (таймаут; в секундах) вместо соответствующего значения по умолчанию (5 секунд) в качестве величины ин- тервала ретрансмиссии блокирующего запроса удаленному серверу. -d debuglevel lockd имеет расширенные внутренние возможнос- ти в области формирования отчетов. Уровень 2 соответствует сигнализированию о существенных событиях. Уровень 4 сообщает о внутреннем состоянии и совокупном трафике. -g graceperiod lockd использует значение graceperiod (в се- кундах) вместо соответствующего значения по умолчанию (45 секунд). -h hashsize lockd использует значение hashsize (размер хеш-таблицы; в ячейках) вместо соответствую- щего значения по умолчанию (29). -l k2utimeout lockd использует значение k2utimeout (в се- кундах) в качестве интервала ретрансмиссии запросов ядра, обращенных к администратору защиты, вместо соответствующего значения по умолчанию (2 секунды). Это значение является величиной таймаута, используемого для локаль- ных блокирующих запросов. См. также: fcntl(S), lockf(S), signal(S), statd(NADM) MOUNT-1 mount, umount ───────────────────────────────────────────────────────────── монтирование и демонтирование файловой системы и удаленных ресурсов Синтаксис: /etc/mount [[-r] [-f fstyp] special directory] /etc/mount [-r] [-c] [-d resource directory] /etc/umount special directory /etc/umount [-d] resource Описание: Файловые системы, отличные от корневой, являются "сменными" в том смысле, что они могут быть как доступны для пользователей, так и недоступны. Команда mount объявляет системе о том, что уст- ройство special (специальное блочное) или resource (удаленный ре- сурс) доступны пользователям из каталога точки монтирования. Каталог (directory) должен уже существовать; его имя становится именем корня вновь смонтированного устройства special. Команда mount с аргументами добавляет запись в таблицу монти- рованных устройств, /etc/mnttab, команда umount удаляет эту за- пись. Команда mount без аргументов выводит содержимое всей табли- цы. Та же команда с неполным списком аргументов обращается за недостающими аргументами к файлу /etc/default/filesys (special, -d resource, directory, -d directory). Опции: -r Устройство special или ресурс resource монтируется толь- ко для чтения. Если устройство или ресурс объявлены как защищенные от записи или доступные только для чтения, использование этого флага обязательно. -d Resource является удаленным ресурсом, монтируемым или демонтируемым в указанном каталоге. -c Означает, что удаленный ввод-вывод не кешируется в ло- кальном буферном пуле. Ключ -c используется в сочетании с ключом -d. -f fstyp Тип монтируемой файловой системы. Если аргумент fstyp опущен, по умолчанию принимается тип "root". Если тип - "NFS", то вслед за аргументом типа системы, в той же строке, могут указываться опции сетевой файловой сис- темы, разделенные запятыми. Такими опциями являются: soft возвращение ошибки в случае отсутствия реакции серве- ра. rsize=n установка размера буфера чтения равным n байт (по умолчанию = 8192). wsize=n установка размера буфера записи равным n байт (по умолчанию = 8192). timeo=n установка длительности исходного таймаута NFS в деся- тых долях секунды. retrans=n установка количества ретрансмиссий NFS. port=n установка номера серверного порта. nosuid игнорирование битов setuid и setgid (установки поль- зовательского и группового кодов идентификации) во время исполнения. bg выполнение монтирования в фоновом режиме. Рекоменду- ется для автоматического монтирования во время на- чальной загрузки системы. special Специальное устройство блочного типа, монтируемое в каталоге directory. Если тип системы - "NFS", аргумент special имеет форму hostname:/pathname (имя_машины:/имя_ пути). resource Имя удаленного ресурса, монтируемого в каталоге directory. directory Каталог монтирования устройства special или ресур- са resource. (Этот каталог уже должен существовать.) Команда umount сообщает системе о том, что файловую систему, смонтированную ранее как special или resource, следует сделать недоступной. Если список аргументов команды неполон, пропущенные аргументы выбираются из файла /etc/default/filesys. Команда mount может использоваться любым пользователем для просмотра перечня смонтированных файловых систем и ресурсов. Мон- тировать и демонтировать файловые системы разрешено только супер- пользователю. Файлы: /etc/mnttab таблица монтирования /etc/default/filesys таблица файловых систем Пример: Рассмотрим команду монтирования корневой файловой системы, находящейся на удаленной машине test, в точке монтирования mnt: mount -f nfs,soft,rsize=1024,wsize=1024 test:/ /mnt См. также: setmnt(ADM), mountd(NADM), nfsd(NADM), showmount(NADM), mount (NS), mnttab(NF) Диагностика: Если системная функция mount(NS) не срабатывает, команда mount выводит соответствующее диагностическое сообщение. Предуп- реждающее сообщение выдается в том случае, если файловая система, подлежащая монтированию, уже смонтирована, но под другим именем. Монтирование удаленного ресурса не удается в том случае, если ре- сурс недоступен. Команда umount не срабатывает, если устройство или ресурс не были смонтированы или если они заняты. Устройство или ресурс счи- тается занятым, если оно содержит открытый файл или рабочий ката- лог некоторого пользователя. Предупреждения: Физическое удаление дискеты со смонтированной файловой систе- мой из дисковода до исполнения команды umount приводит к разруше- нию файловой системы. mountd ───────────────────────────────────────────────────────────── сервер монтирований в среде NFS Синтаксис: /etc/mountd Описание: Mountd является сервером, который отвечает на вопросы, касаю- щиеся монтирования файловых систем. На основании информации файла /etc/exports, описанного в exports(NF), он определяет, какие фай- ловые системы доступны тем или иным машинам и пользователям. Он также располагает данными о том, кем из клиентов были смонтирова- ны файловые системы. Эта информация выводится по команде showmount(NADM). См. также: exports(NF), services(ADMN), showmount(NADM) /etc/nfs ───────────────────────────────────────────────────────────── запуск/останов NFS Синтаксис: /etc/nfs start /etc/nfs stop Описание: Команда /etc/nfs используется для запуска или останова работы программного обеспечения сетевой файловой системы. Сетевая файло- вая система запускается автоматически в момент начальной загрузки ОС, если файл /etc/nfs привязан к /etc/rc2.d/Sname (по умолчанию в качестве "name" используется 72nfs). Останов NFS производится автоматически в момент прекращения работы ОС, если /etc/nfs при- вязан к /etc/rc0.d/Kname (здесь по умолчанию в качестве "name" используется 66nfs). Файл /etc/nfs перед использованием можно настроить на конк- ретную инсталляцию. В процессе настройки допускается корректиров- ка следующих элементов: PATH Стандартный путь может корректироваться в том слу- чае, если команды, запускаемые /etc/nfs, записаны в разных каталогах. PROCS Переменная "PROCS" содержит список разделенных про- белами идентификаторов процессов, подлежащих удале- нию во время выполнения функции stop. Если на самом деле процессов больше, список может быть расширен. Daemons В этой точке запускаются стандартные процессы NFS. (Про- В эту же секцию можно включить и любые дополнитель- цессы) ные процессы и команды. Те из стандартных процес- сов, которые не нужны, могут быть исключены совсем или их вызов может быть закомментирован. Если перед запуском NFS загружался транспортный уровень сети, то после закрытия системы этот уровень следует отключить. См. также: domainname(NC), portmap(NADM), mountd(NADM), nfsd(NADM), rexd (NADM), lockd(NADM), statd(NADM), sh(C) nfsclnt ───────────────────────────────────────────────────────────── создание клиентских выходов на NFS Синтаксис: nfsclnt [ nclienthandles ] Описание: Команда nfsclnt назначает транспортные окончания (без уста- новления логического соединения), которые используются для созда- ния клиентских выходов. Программы клиента сетевой файловой систе- мы получают клиентские выходы на время работы RPC. Nclienthandles - количество выделенных клиентских выходов. Значение этого параметра ограничивает число параллельно выполняе- мых операций клиента сетевой файловой системы и должно основы- ваться на ожидаемой нагрузке. Если возникает потребность в допол- нительных клиентских выходах, можно запустить больше процессов nfsclnt. Количество клиентских выходов, доступных программам кли- ентов NFS, складывается из числа клиентских выходов, выделенных каждой nfsclnt-программе. Удаление nfsclnt-процесса сократит чис- ло клиентских выходов на то количество, которое изначально было создано этим процессом. Файлы: /dev/inet/udp устройство UDP См. также: kclt_create(NS) nfsd, biod ───────────────────────────────────────────────────────────── сервисные процессы в NFS Синтаксис: /etc/nfsd [nservers] /etc/biod [nservers] Описание: Команда nfsd запускает процессы на сетевом сервере по запро- сам, поступающим с клиентских выходов. Nservers - количество про- цессов, запускаемых по запросам. Значение этого аргумента определяется ожидаемой нагрузкой на сервер. Команда biod, поданная клиентом NFS, запускает nservers про- цессов асинхронного ввода-вывода блоками, которые выполняют чте- ние и запись блоков в буферном кеше клиента. См. также: mountd(NADM), exports(NF) nfsstat ───────────────────────────────────────────────────────────── статистика сетевой файловой системы Синтаксис: nfsstat [ -csnrz ] Описание: Команда nfsstat выводит статистическую информацию, касающуюся сетевой файловой системы (NFS) и интерфейса ядра с удаленными процедурами (RPC). Она также может использоваться для сброса ука- занной информации. По умолчанию, если опции не указаны, выполня- ется команда nfsstat -csnr Другими словами, выводится все и не сбрасывается ничего. Опции: -c Вывод клиентской информации (информации по NFS и RPC в клиентском разрезе). Может использоваться в сочетании с опциями -n и -r для вывода клиентской информации по NFS и RPC в отдельности. -s Вывод информации по серверу. Работает подобно опции -c. -n Вывод информации по NFS (полной - по клиентам и по серверу). Может использоваться в сочетании с опциями -c и -s для вывода информации по клиентам и по серверу в отдельности. -r Вывод информации по RPC. Работает подобно опции -n. -z Обнуление (сброс) статистики. Может использоваться в сочетании с любой из вышеуказанных опций для обнуления тех или иных подразделов статистики после их вывода. Для того, чтобы работать с этой опцией, пользователь должен иметь разрешение на запись в /dev/kmem. Файлы: /unix список системных имен /dev/kmem память ядра См. также: nfs(NADM) nmountall, numountall ───────────────────────────────────────────────────────────── массовое монтирование и демонтирование файловых систем Синтаксис: /etc/nmountall /etc/numountall Описание: Команда nmountall предназначена для монтирования файловых систем NFS на основании информации файла /etc/default/filesys. Настоятельно рекомендуем использовать опцию bg для тех файловых систем, которые монтируются автоматически в момент начальной заг- рузки ОС. Эта мера поможет избежать зависания процесса загрузки при попытке монтирования файловой системы на очень медленно рабо- тающем или остановленном сервере. Команда numountall вызывает демонтирование всех смонтирован- ных в сети файловых систем. Процессы, работавшие в этих системах (имеющие там открытые файлы или рабочие каталоги), удаляются пос- редством посылки серии сигналов. Первым посылается сигнал SIGHUP. Секундой позже посылается сигнал SIGTERM. Наконец, еще одну се- кунду спустя посылается сигнал SIGKILL. Обе эти команды могут выполняться только под управлением су- перпользователя. Файлы: Рассмотрим формат таблицы файловых систем. Строки, открываю- щиеся символом "#", содержат комментарии; поля, как правило, разделяются пробелами. Обратите внимание на то, что запись, не умещающаяся в одной строке, в местах разбиения на несколько строк содержит символы "обратная наклонная черта". Пример: bdev=nfs2:/\ # Первое поле содержит имя удаленного каталога (системы, под- # лежащей монтированию). # mountdir=/nfs/nfs2\ # Второе поле содержит имя каталога - точки монтирования (уже # существующего). # mount=prompt mountflags=\ # Содержимое этих полей говорит о том, что перед монтировани- # ем NFS должна выдать подсказку, а также о том, что при мон- # тировании файловой системы командами mnt(NADM) и umnt(NADM) # флаги не используются. # fsck=no fsckflags=rcfsck=no\ # Содержимое этих полей служит указанием NFS не производить # очистки и проверки удаленной файловой системы. # desc="The Root Filesystem of machine NFS2"\ # Вышеуказанное поле содержит краткое описание смонтированной # файловой системы. # rcmount=yes fstyp=NFS\ # Вышеуказанные поля содержат указание смонтировать файловую # систему во время инициализации NFS, а также тип файловой # системы. # nfsopts="soft,wsize=1024,rsize=1024,nosuid" # Специальные опции NFS, # подробнее о них см. в mount(NS). Обратите внимание на то, что пустые строки в файле /etc/default/filesys игнорируются. На практике наша запись таблицы файловых систем может выгля- деть следующим образом: bdev=nfs2:/ mountdir=/nfs/nfs2 \ mount=prompt mountflags= \ fsck=no fsckflags= rcfsck=no \ desc="The Root Filesystem of machine NFS2" \ rcmount=yes fstyp=NFS \ nfsorts="bg,soft,wsize=1024,rsize=1024,nosuid" См. также: mount(NADM), umount(NADM), fuser(NADM) и signal(S), filesys(F) в "Справочном руководстве программиста" и в "Справоч- ном руководстве пользователя", соответственно. Диагностика: Процесс nmountall, прежде чем выполнить команды монтирования, выводит их на экран. Процесс numountall выводит список идентификаторов тех процес- сов, которым он посылает сигналы. Приводится также перечень де- монтируемых файловых систем. Замечания: Информация в третьем столбце появляется только в том случае, если файловая система была смонтирована как "read-only" (только для чтения). passmgmt ───────────────────────────────────────────────────────────── работа с файлами паролей Синтаксис: passmgmt -a опции имя passmgmt -m опции имя passmgmt -d имя Описание: Команда passmgmt корректирует содержимое файлов паролей. Она имеет дело с файлами /etc/passwd и /etc/shadow. Если файл shadow отсутствует, изменения записываются только в файл /etc/passwd. Команда с параметром -a добавляет в файлы, содержащие пароли регистрации, запись о пользователе с указанным именем. При этом для нового пользователя не создается никакого каталога и вход в систему остается заблокированным (поле passwd содержит значение "LK") до тех пор, пока для установки пароля не будет исполнена команда passwd(C). Команда с параметром -m модифицирует в файлах, содержащих па- роли регистрации, запись о пользователе с указанным именем. При этом могут корректироваться поля: имени в записи файла /etc/shadow и все поля (за исключением пароля) в записи файла /etc/passwd. Исправлены будут значения только тех полей, которые указаны в командной строке. Если файл /etc/shadow отсутствует, все исправления делаются в файле /etc/passwd. Команда с параметром -d удаляет из файлов запись о пользова- теле с указанным именем. При этом никакие файлы из принадлежащих пользователю удалены не будут; их нужно удалять вручную. Имя пользователя должно быть уникальным. Опции команды: -c комментарии Краткое описание входа в систему. Может со- держать до 128 символов. -h начальный_каталог Собственный каталог пользователя с ука- занным именем. Содержит до 256 символов (по умолчанию, "/usr/имя"). -u uid Код идентификации пользователя с указанным именем. По умолчанию равен следующему сво- бодному коду после 100. Если опция -o не указана, код идентификации должен быть уни- кальным. -o Разрешение использования неуникального кода идентификации пользователя. Используется только с опцией -u. -g gid Групповой код идентификации пользователя с указанным именем. По умолчанию равен 1. -s shell Оболочка регистрации пользователя с указан- ным именем. Указывается полное имя програм- мы, исполняемой при регистрации пользовате- ля в системе. Максимальная длина имени - 256 символов. Умолчание интерпретируется как /bin/sh. -l logname Замена имени пользователя на logname (толь- ко для опции -m). Общий размер каждой регистрационной записи, как существующей, так и новой, не должен превышать 511 байт. Файлы: /etc/passwd /etc/shadow /etc/opasswd /etc/oshadow См. также: passwd(C) Диагностика: Команда passmgmt возвращает одно из следующих значений: 0 УСПЕХ. 1 В разрешении отказано. 2 Неверный синтаксис команды. Отображается формат команды passmgmt. 3 Неверное использование аргумента с опцией. 4 Код идентификации уже задействован. 5 Несогласованность паролей в файлах (иначе гово- ря, имя присутствует в файле /etc/passwd и от- сутствует в файле /etc/shadow, и наоборот). 6 Непредвиденный отказ. Файлы не изменились. 7 Непредвиденный отказ. Файлы отсутствуют. 8 Файлы заняты. Повторите попытку позже. 9 Имя не существует (если указаны опция -m или -d), уже существует (опция -a), logname уже существу- ет (опции -m -l). Замечание: Символы "кавычки" и интерпретируются как разделители по- лей. pcnfsd ───────────────────────────────────────────────────────────── процесс опознавания связи pc-nfs и буферизации вывода на пе- чать Синтаксис: /etc/pcnfsd [-d] [-s spooldir] Описание: Процесс pcnfsd обрабатывает запросы, связанные с опознаванием связи и буферизацией вывода и поступающие от клиентов MS-DOS, ко- торые работают в сети Sun Microsystem's PC-NFS. Как сами запросы, так и ответы на них пересылаются с помощью пакета RPC/XDR. По по- лучении запроса на опознавание связи pcnfsd обращается к файлу паролей сервера и проверяет совпадение пароля, посланного клиен- том MS-DOS, с паролем локальной машины. Клиенту посылается сооб- щение о приеме или отказе. В случае успеха возвращается также па- ра значений uid/gid (пользовательский код/групповой код). Если указанный в запросе регистрационный счет не существует, связь не опознается. Буферизация вывода состоит из двух этапов: инициализация бу- ферного пространства и запуск вывода. Когда сервер получает зап- рос на инициализацию, имя каталога буферизации составляется из spooldir и имени клиентской машины. Этот путь сообщается клиенту. Клиент монтирует каталог. Когда буферный файл (spool file) будет готов для вывода, серверу будет послан запрос на запуск вывода. Сервер перешлет файл подсистеме буферизации вывода. Опции: -d Включить режим отладки. На консольный терминал возвращается информация о состоянии. -s spooldir Значение spooldir используется в качестве ба- зового каталога буферизации вместо /usr/spool/lp/pcnfsd. См. также: lp(C), passwd(C), getpwent(C) portmap ───────────────────────────────────────────────────────────── точка подключения DARPA к преобразователю программных номеров RPC Синтаксис: /etc/portmap Описание: Portmap является сервером, который преобразует программные номера RPC в номера портов протокола DARPA. Он обслуживает все обращения к RPC. Сервер RPC при запуске сообщает процессу portmap номер прос- лушиваемого порта, а также номера тех программ, которые он гото- вится обслужить. Если клиенту нужно обратиться к RPC с конкретным номером программы, он сначала должен войти в контакт с процессом portmap на серверной машине и определить номер порта связи с па- кетами RPC. См. также: rpcinfo(NADM) Замечания: Если portmap дает отказ, все серверы должны быть перезапуще- ны. rexd ───────────────────────────────────────────────────────────── сервер удаленного исполнения на базе RPC Синтаксис: /etc/rexd Описание: Rexd является сервером RPC, обслуживающим выполнение удален- ных программ. Если программы неинтерактивные, дескрипторы стан- дартных файлов привязываются непосредственно к TCP-соединениям. Интерактивные программы используют псевдотерминалы, подобные про- токолам регистрации rlogin(C). Этот процесс может воспользоваться услугами NFS для монтирования тех файловых систем, которые указа- ны в запросе на удаленное исполнение. Файлы: /dev/ttypn псевдотерминалы, используемые в интерактивном режиме /etc/passwd зарегистрированные пользователи /tmp/rexd.log регистрация ошибок и событий См. также: mount(NADM), on(NC), rex(NS), exports(NF) Диагностика: Диагностические сообщения обычно выводятся на консоль и возв- ращаются запрашивающему. Замечания: Позаботьтесь особо об управлении доступом. rpcinfo ───────────────────────────────────────────────────────────── отчет о работе RPC Синтаксис: rpcinfo -p [host] rpcinfo -u host программа [версия] rpcinfo -t host программа [версия] Описание: Команда делает запрос к серверу RPC и сообщает все полученные сведения. Опции: -p Обратиться к преобразователю номеров портов на главную машину (host) и вывести список всех зарегистрированных RPC-программ. Если аргумент host не указан, использу- ется имя, возвращаемое hostname(NC). -u Вызвать процедуру 0 указанной программы на указанной host-машине с помощью UDP и сообщить о полученном от- вете. -t Вызвать процедуру 0 указанной программы на указанной host-машине с помощью TCP и сообщить о полученном от- вете. -b Передать сообщение процедуре 0 указанной программы указанной версии с помощью UDP и сообщить о всех отве- тивших host-машинах. Аргумент "программа" может быть либо именем, либо числом. Если указана версия программы, rpcinfo пытается обратиться именно к этой версии. В противном случае rpcinfo приступит к перебору номеров всех зарегистрированных версий программы, включая даже несуществующую версию с номером 0. Если таковые обнаруживаются, rpcinfo выбирает информацию по версии с наивысшим номером. Следует заметить, что номер версии требуется для опции -b. Примеры: Чтобы получить информацию по всем услугам RPC, зарегистриро- ванным на машине, введите команду: rpcinfo -p имя_машины Файлы: /etc/rpc имена для номеров RPC-программ См. также: rpc(NF), portmap(NADM) showmount ───────────────────────────────────────────────────────────── показ всех удаленных монтирований Синтаксис: /etc/showmount [-a] [-d] [-e] [host] Описание: Команда showmount выводит список всех клиентов, которые вы- полняли удаленное монтирование файловой системы на host-машине. Эта информация поставляется сервером mountd(NADM) и сохраняется в файле /etc/rmtab. Если аргумент host не указан, используется имя, возвращаемое hostname(NC). Опции: -d Вывести список каталогов, смонтированных клиентами на удалении. -a Вывести список всех удаленных монтирований в формате: hostname:directory где hostname - имя клиента, а directory - корень мон- тированной файловой системы. -e Вывести список экспортированных файловых систем. См. также: rmtab(NF), mountd(NADM), exports(NF) Замечания: Если клиент прерывает свою работу аварийно, соответствующая ему запись из списка не удаляется до перезагрузки и демонтирова- ния файловой системы. statd ───────────────────────────────────────────────────────────── монитор состояния сети Синтаксис: /etc/statd [-d debuglevel] Описание: Statd - промежуточная версия монитора состояния сети. Для вы- полнения функций блокировки и восстановления компонентов NFS statd взаимодействует с lockd(NADM). Информация о состоянии сбоя/восстановления сохраняется в ка- талоге /etc/sm. Файл record содержит имена машин (клиентов) для всех отслеживаемых систем. Файл recover содержит аналогичные име- на для тех систем, которые еще не уведомлены об отказе statd, а файл state - номер текущей версии statd. Опции: -d debuglevel Команда statd имеет расширенные внутренние возможности в области формирования отче- тов. Уровень 2 соответствует сигнализиро- ванию о существенных событиях. Уровень 4 сообщает о внутреннем состоянии и совокуп- ном трафике. Файлы: /etc/sm/record /etc/sm/recover /etc/sm/state См. также: lockd(NADM), statmon(NF) N C Сетевые команды Команды ───────────────────────────────────────────────────────────── Сетевые команды (NC) Intro введение в команды ONC hostname получение имени текущей главной ЭВМ mnt монтирование и демонтирование файловой системы on исполнение удаленной команды rpcgen компилятор протокола RPC intro ───────────────────────────────────────────────────────────── введение в команды ONC Описание: Команды этого раздела представляют собой средства эффективно- го использования сетевой файловой системы (NFS). Описываются ко- манды монтирования файловой системы, исполнение команд в удален- ных системах, а также компиляция команд RPC. hostname ───────────────────────────────────────────────────────────── получение имени текущей главной ЭВМ Синтаксис: hostname [nameofhost] Описание: Команда hostname выводит имя текущей главной ЭВМ, отображае- мое перед подсказкой "login". Суперпользователь может задавать имя машины в виде аргумента; обычно это делается в файле запуска /etc/rc.local. См. также: gethostname(SLIB) mnt, umnt ───────────────────────────────────────────────────────────── монтирование файловой системы Синтаксис: /usr/bin/mnt [-urant] [каталог] /usr/bin/umnt каталог Описание: Команда mnt открывает всем пользователям, не являющимся су- перпользователем, доступ к функциональным возможностям команды mount(ADM) по монтированию выбранных файловых систем. Суперполь- зователь может описывать порядок монтирования в записях файла /etc/default/filesys. Требования к файловой системе - те же, что и для команды mount(ADM). Команда umnt демонтирует файловую систему, смонтированную ра- нее в указанном каталоге. Mnt запускается из /etc/rc с флагами -r, -n и -a для монтиро- вания файловых систем при входе в многопользовательский режим. Флаг -a используется при автозагрузке системы. В обычной команд- ной строке ни один из этих флагов не нужен. Флаг -n означает монтирование всех файловых систем, которым в файле /etc/default/filesys соответствуют fstyp="NFS" и rcmount="yes". Для файловых систем этого типа bdev определяется как: bdev=hostname:/pathname В то же время rcfsck должно быть = "no", а cdev может вообще отсутствовать. Флаг -t отображает содержимое /etc/default/filesys. С флагом -u команда mnt действует подобно umnt. Опции: Запись, описывающая файловую систему в /etc/default/filesys, может содержать следующие опции: bdev=/dev/устройство Имя блочного устройства, ассоцииро- ванного с файловой системой. cdev=/dev/устройство Имя устройства посимвольного ввода- вывода, ассоциированного с файловой системой. mountdir=/каталог Каталог, в котором монтируется фай- ловая система. desc=имя Строка, описывающая файловую систе- му. passwd=строка Необязательный пароль, запрашивае- мый в момент ввода команды монтиро- вания. Не может быть простой стро- кой; должен иметь формат /etc/passwd. (См. Замечания.) fsck=yes,no,dirty,prompt "Yes/no" означает явное указание то- го, запускать ли или не запускать fsck. Если указано "dirty", fsck запускается только в том случае, когда файловая система требует очистки. Если указано "prompt", вы- бор делает пользователь. По умолча- нию принимается "dirty". fsckflags=флаги Флаги, передаваемые fsck. rcfsck=yes,no,dirty,prompt Походит на fsck, но используется только с флагом -r. maxcleans=n Число циклов повторной очистки фай- ловой системы. По умолчанию - 4. mount=yes,no,prompt "Yes/no" означает разрешение/нераз- решение монтирования файловой сис- темы. Если указано "prompt", реше- ние остается за пользователем. rcmount=yes,no,prompt Если "yes", то при входе в много- пользовательский режим файловая система монтируется под управлением /etc/rc2. Если "no", файловая сис- тема никогда не будет монтироваться под управлением /etc/rc2. Если ука- зано "prompt", при загрузке будет выдано приглашение смонтировать файловую систему. mountflags=флаги Флаги, передаваемые команде mount. prep=yes,no,prompt Prepcmd исполнять, соответственно, всегда, никогда или по запросу пользователя. prepcmd=команда Произвольная команда shell'а, запу- скаемая сразу после проверки пароля и перед fsck. init=yes,no,prompt Initcmd исполнять, соответственно, всегда, никогда или по запросу пользователя. initcmd=команда Необязательная, произвольная коман- да shell, запускаемая сразу после успешного монтирования. fstyp=тип Тип файловой системы. Возможные значения - NFS, S51K, XENIX и DOS. nfsopts=опции Опции для файловых систем типа NFS. Возможные опции описаны в разделе mount(NADM). Все значения, содержащие в себе пробелы, знаки табуляции или символы перехода на новую строку, должны заключаться в двойные кавычки ("). Единственными обязательными значениями в файле /etc/default/filesys являются bdev и mountdir. Опции prepcmd и initcmd могут использоваться для выполнения той или иной команды до и после монтирования файловой системы. Так, например, опция initcmd может использоваться для посылки почты в корневую файло- вую систему, невзирая на время монтирования данной системы. Команда mnt без аргументов пытается смонтировать все файловые системы с параметрами mount=yes или mount=prompt. Примеры: Рассмотрим пример содержимого файла /etc/default/filesys: bdev=/dev/root cdev=/dev/rroot mountdir=\ / desc="The Root Filesystem" rcmount=no mount=no bdev=/dev/u cdev=/dev/ru mountdir=/u rcmount=yes \ fsckflags=-y desc="The User Filesystem" bdev=/dev/x cdev=/dev/rx mountdir=/u rcmount=no \ mount=yes fsckflags=-y desc="The Extra Filesystem" Из всех вышеописанных систем только система /x может монтиро- ваться пользователем. Файлы: /etc/default/filesys Информация о файловых системах См. также: mount(ADM), default(F) Диагностика: Команда mnt не срабатывает, если файловая система, подлежащая монтированию, уже смонтирована под другим именем. Активные файловые системы не могут быть демонтированы коман- дой umnt. Файловая система является активной, если она содержит открытый файл или рабочий каталог хотя бы одного из пользовате- лей. Замечания: В файловой системе реализуется некоторый уровень проверки данных, однако явно запорченные системы монтировать все-таки не следует. Для того, чтобы присвоить файловой системе пароль, админист- ратор системы должен воспользоваться командой passwd(C) с опцией -f. Дополнительные сведения: Mnt является расширением AT&T System V, распространением ко- торой занимается Santa Cruz Operation. on ───────────────────────────────────────────────────────────── исполнение удаленной команды Синтаксис: on [-i] [-n] [-d] host команда [аргумент]... Описание: Программа on используется для выполнения команд в другой сис- теме, но в условиях, подобных той среде, в которой запускается программа. При этом передаются значения всех переменных среды, а текущий рабочий каталог запоминается. Для этого рабочая файловая система должна быть либо смонтирована на host-машине, либо экс- портирована на нее. Относительные имена путей будут воспринимать- ся адекватно, если они целиком входят в текущую файловую систему; использование абсолютных имен может вызвать проблемы. Стандартный ввод, вывод и ошибки команды on посылаются в со- ответствующие файлы удаленной команды. Опции: -i Интерактивный режим: эхо-сопровождение удаленного вы- полнения и обработка специальных символов. Эта опция нужна для тех программ, в которых предполагается об- щение с терминалом. Все терминальные характеристики и размеры окон передаются. -n Без ввода: удаленная программа считывает конец файла. Пример: запуск команд на фоне управления заданиями. -d Режим отладки: вывод сообщений в ходе выполнения. См. также: rexd(NADM), exports(NF) Диагностика: unknown host Имя host-машины не найдено cannot connect to server Host-машина или сервер бездейству- ют can't find . Проблема с поиском рабочего ката- лога can't locate mount point Проблема с поиском текущей файло- вой системы rpcgen ───────────────────────────────────────────────────────────── компилятор протокола RPC Синтаксис: rpcgen вх_файл rpcgen -h [-o вых_файл] [вх_файл] rpcgen -c [-o вых_файл] [вх_файл] rpcgen -m [-o вых_файл] [вх_файл] rpcgen -l [-o вых_файл] [вх_файл] rpcgen [-s транспорт]* [-o вых_файл] [вх_файл] Описание: Rpcgen является средством создания Си-программы, реализующей протокол RPC. На вход компилятора поступает файл на языке RPCL (Язык удаленных процедурных вызовов). Как правило, компилятор из одного файла на входе (первый вариант) генерирует четыре выходных файла. Если входной файл имеет имя proto.x, генерируемые файлы именуются следующим образом: proto.h - файл заголовков, proto_xdr.c - процедуры XDR, proto_svc.c - разделы, имеющие отно- шение к серверу, а proto_clnt.c - к клиентам. Все остальные варианты вызова компилятора связаны с созданием только одного выходного файла. К рассмотрению каждого из вариан- тов мы перейдем ниже. Все выходные файлы перед интерпретацией rpcgen проходят обра- ботку Си-препроцессором cpp(CP), поэтому директивы cpp во входном файле rpcgen допустимы. Каждому типу выходного файла соответству- ет специальный символ cpp: RPC_HDR, RPC_XDR, RPC_SVC и RPC_CLNT. Rpcgen, кроме того, сам выполняет некоторую предварительную обработку входных данных. Любая строка, открывающаяся символом "%", передается сразу в выходной файл, без интерпретации. Отдельные XDR-процедуры можно настраивать, не определяя их тип. При этом rpcgen будет предполагать существование процедуры с именем, состоящим из имени неопределенной структуры и приставки xdr_. Настоятельно рекомендуем вам, прежде чем приступить к исполь- зованию утилиты rpcgen, прочитать главы, посвященные RPC и XDR, в "Руководстве программиста SCO NFS". Опции: -c Компиляция процедур XDR. -h Компиляция определений данных на Си (файл заголовков). -o вых_файл Указание имени выходного файла. По умолчанию использу- ется файл стандартного вывода (только для режимов -c, -h, -s). -l Получение разделов, имеющих отношение к клиенту. -s транспорт Получение разделов, имеющих отношение к серверу, с ис- пользованием указанного транспортного протокола. Под- держиваемые типы транспортного протокола: udp и tcp. При использовании нескольких протоколов опция вызывает- ся несколько раз. -m Получение разделов, имеющих отношение к серверу, без создания процедуры main(). Используется в том случае, если пользователь создает свою собственную процедуру main(). Использование: Краткое описание синтаксиса RPCL Элементарные типы данных [unsigned] char [unsigned] short [unsigned] int [unsigned] long unsigned float double void bool Если не считать типа bool (булевы данные), во всем остальном RPCL подобен Си. В выходном файле заголовков rpcgen преобразует определения bool в определения int (точнее говоря, в определения bool_t, ко- торые операцией #define описаны как int). Кроме того, тип void может появиться только в определениях union и program. Для типов с приставкой unsigned допустимо использование аббревиатуры uchar, ushort, uint и ulong. Определения В RPCL разрешены только три типа определений: * простое_определение имя_типа идентификатор_объекта Пример: long a; * определение_с_указателем имя_типа *идентификатор_объекта Пример: char *b; * векторное_определение имя_типа идентификатор_объекта[размер] ("размер" может быть целой или символьной константой) Пример: opaque c[10]; По сравнению с Си, определения в языке RPCL имеют где сокра- щенную, где расширенную форму. Ограничения касаются невозможности описания многомерных массивов или вложенных указателей (хотя их можно определить с помощью оператора typedef). Два расширения: * Данные типа opaque описываются как вектор: opaque идентификатор_объекта[размер] В соответствии с протоколом будет создан объект указанного размера (в байтах). Обратите внимание на то, что размер в байтах не равен размеру в символах, поскольку символы в XDR размещаются в 32 битах каждый. Определения типа opaque ком- пилируются в выходном файле заголовков в описания массивов символов. * Строки описываются особо, по типу векторного определения: string идентификатор_объекта[максимальный_размер] Если максимальный размер не указан, длина строки практичес- ки не ограничивается. Строковые определения преобразуются в: char *идентификатор_объекта Описания типов Rpcgen используется для генерации процедуры XDR и/или файла заголовков, описывающего типы данных из входного файла. Для каж- дого описываемого zetype утилита rpcgen создает соответствующую процедуру XDR, именуемую xdr_zetype и обязательную для создания RPC-программ. Существуют шесть способов описания типа: описание_типа: typedef перечислимый_тип-def структура-def массив_переменной_длины-def размеченное_объединение-def программа-def Первые три очень похожи на своих тезок в Си. Вместе с тем в Си отсутствует формальный механизм описания массивов переменной длины, а XDR-объединения совершенно не похожи на соответствующие объекты в Си. Вложенность описаний типов в XDR не допускается. Например, следующая запись для rpcgen будет непонятна: struct dontdoit { struct ididit { int oops; } sorry; enum ididitagain { OOPS, WHOOPS } iapologize; }; Оператор typedef в XDR выглядит следующим образом: typedef: typedef имя_типа идентификатор_объекта ; "Идентификатор объекта" является именем нового типа, в то время как "имя_типа" относится к исходному типу. Например: typedef longa; Синтаксис описания перечислимого типа: перечислимый_тип-def: enum идентификатор_типа { список_типов }; список_типов: символьный_идентификатор [=присваивание] символьный_идентификатор [=присваивание], список_типов (в правой части оператора, после знака равенства может распо- лагаться целая или символьная константа) Если явного присваивания нет, неявно будет присвоено значение предыдущего элемента перечисления, увеличенное на 1. Первый эле- мент по умолчанию имеет нулевое значение. Структуры: структура-def: struct идентификатор_структуры { список_описаний }; список_описаний: описание; описание; список_описаний Массивы переменной длины: массив_переменной_длины-def: array идентификатор_массива { unsigned идентификатор_длины ; векторное_определение ; }; Описание массива переменной длины похоже на описание структу- ры. Пример: array mp_int { unsigned len; short val[MAX_MP_LENGTH]; }; Эта запись преобразуется компилятором в: struct mp_int { unsigned len; short *val; }; typedef struct mp_int mp_int; Размеченное объединение: размеченное_объединение-def: union идентификатор_объединения switch (описание_дискриминан- та) { список_случаев [default: описание;] }; список_случаев: case идентификатор_случая : описание; case идентификатор_случая : описание; список_случаев описание_дискриминанта: описание Описание объединения похоже на пересечение Си-объединения с Си-переключателем. Пример: union net_object switch (net_kind kind) { case MACHINE: struct sockaddr_in sin; case USER: int uid; default: string whatisit; }; Эта запись преобразуется компилятором в: struct net_object { net_kind kind; union { struct sockaddr_in sin; int uid; char *whatisit; } net_object; }; typedef struct net_object net_object; Обратите внимание на то, что имя объединяющей компоненты в выходной структуре совпадает с именем самого типа. Описания программ: программа-def: program идентификатор_программы { список_версий }=номер_программы; список_версий: версия версия список_версий версия: version идентификатор_версии { список_процедур }=номер_версии; список_процедур: описание_процедуры описание_процедуры список_процедур описание_процедуры: имя_типа идентификатор_процедуры(имя_типа)=номер_процедуры; Описания программ не похожи ни на что из ранее виденного ва- ми, поэтому нам ничего больше не остается, как прибегнуть к при- меру. Предположим, что нам нужно создать механизм (серверный) по- лучения или установки даты. Его описание может выглядеть следую- щим образом: program DATE_PROG { version DATE_VERS { date DATE_GET(timezone) = 1; void DATE_SET(date) = 2; /* время по Гринвичу */ } = 1; } = 100; В файле заголовков эта запись будет иметь следующий вид: #define DATE_PROG 100 #define DATE_VERS 1 #define DATE_GET 1 #define DATE_SET 2 Если вы используете rpcgen для компиляции серверных процедур, вам необходимо ознакомиться с некоторыми важными моментами. Сер- вер взаимодействует с вашими локальными процедурами через Си-функцию, имя которой совпадает с именем в описании программы, но записывается строчными буквами и оканчивается номером версии. Рассмотрим локальную процедуру реализации DATE_GET: date * /* всегда возвращает указатель на результаты */ date_get_l(tz) timezone *tz; /* всегда получает указатель на аргументы */ { static date d; /* должна быть статической! */ /* * получение даты * и сохранение ее в d */ return(&d); } Имя процедуры совпадает с именем, объявленным в #define, но записывается строчными буквами и оканчивается номером версии. XDR рекурсивно освобождает аргумент после получения результатов из локальной процедуры, поэтому всю необходимую вам информацию из аргумента следует скопировать между обращениями. При этом XDR не манипулирует вашими результатами. Вам следует позаботиться об их сохранении самим. Вывод правил компиляции заголовков Правила преобразования суффиксов в make(C) при компиляции процедур XDR и заголовков (по условию файлы протоколов RPCL имеют расширение .x): .SUFFIXES:.x .x.c: rpcgen -c $< -o $@ .x.h: rpcgen -h $< -o $@ Пример: Рассмотрим программу example, в которой описываются данные трех типов: const NFS_PORT = 2059; enum nfsstat { NFS_OK=0 }; struct gnumbers { long g_assets; long g_liabilities; }; Утилита rpcgen, вызванная без аргументов, создает файл заго- ловков example.h и файл XDR с именем example_xdr.c. example.h #define NFS_PORT 2059 enum nfsstat { NFS_OK = 0, }; typedef enum nfsstat nfsstat; bool_t xdr_nfsstat(); struct gnumbers { long g_assets; long g_liabilities; }; typedef struct gnumbers gnumbers; bool_t xdr_gnumbers(); example_xdr.c #include #include "infile.h" bool_t xdr_nfsstat (xdrs, objp) XDR *xdrs; nfsstat *objp; { if (!xdr_enum(xdrs, (enum_t *)objp)) { return (FALSE); } return (TRUE); } bool_t xdr_numbers (xdrs, objp) XDR *xdrs; gnumbers *objp; { if (!xdr_long(xdrs, &objp->g_assets)) { return (FALSE); } if (!xdr_long(xdrs, &objp->g_liabilities)) { return (FALSE); } return (TRUE); } См. также: "Руководство программиста SCO NFS" Замечания: В программных определениях могут встретиться совпадающие име- на, при этом сфера действия имен четко не разграничивается. Избе- жать подобных ситуаций поможет использование уникальных идентификаторов для программ, версий, процедур и типов. Вложенность также не поддерживается. Чтобы сымитировать эф- фект вложенности, объявление структур можно производить на верх- нем уровне с тем, чтобы использовать их имена внутри других про- цедур. N F Форматы файлов в сети Команды ───────────────────────────────────────────────────────────── Форматы файлов в сети (NF) Intro Введение в форматы сетевых файлов exports Экспортируемые файловые системы mnttab Таблица монтированных файловых систем rmtab Таблица файловых систем, смонтированных на удалении rpc БД номеров программ RPC statmon Структуры файлов и каталогов statd intro ───────────────────────────────────────────────────────────── Введение в форматы сетевых файлов, используемых в командах ONC Описание: В данном разделе освещаются форматы различных файлов. Струк- турные определения форматов приводятся в соответствующих местах. Обычно эти структуры содержатся в файлах заголовков под каталога- ми /usr/include/rpc, /usr/include/rpcsvc или /usr/include/sys/fs/ nfs. exports ───────────────────────────────────────────────────────────── Экспортируемые файловые системы Синтаксис: /etc/exports Описание: Файл /etc/exports описывает файловые системы, экспортируемые клиентам NFS. Он создается администратором системы с помощью текстового редактора и обрабатывается процессом mountd(NADM) каж- дый раз по получении запроса на монтирование. Файл содержит список файловых систем и netgroups(NF) или имен тех машин, которым разрешено удаленное монтирование каждой файло- вой системы. Имена файловых систем выравниваются по левому краю и сопровождаются списком идентификаторов, разделенных пробелами. Имена выбираются из /etc/netgroups и затем из /etc/hosts. Файло- вая система без списка идентификаторов экспортируется всем. Сим- волом "#" в файле открываются комментарии, продолжающиеся до кон- ца строки. Строки, открывающиеся пробелом, являются строками продолжения. Пример: /usr clients # экспортируется моим клиентам /usr/local # экспортируется всем /usr2 paris peoria phoenix # экспортируется только на ука- # занные машины Файлы: /etc/exports Замечания: Способ идентификации удаленной системы определяется механиз- мом пересылки данных по локальной сети. См. также: mountd(NADM) mnttab ───────────────────────────────────────────────────────────── Таблица монтированных файловых систем Синтаксис: #include Описание: Mnttab находится в каталоге /etc и содержит в себе таблицу устройств, смонтированных командой mount(NADM), следующей струк- туры: struct mnttab { char mt_dev[32]; char mt_filsys[32]; short mt_ro_flg; time_t mt_time; char mt_fstyp[16]; char mt_mntopts[64]; }; Каждая запись имеет длину 150 байт: * первые 32 байта представляют собой дополненный пустыми сим- волами идентификатор места монтирования специального файла; * следующие 32 байта представляют собой дополненный пустыми символами идентификатор корня монтируемого специального файла; * следующие 6 байт содержат привилегии записи/чтения по отно- шению к монтированному специальному файлу и дату монтирова- ния; * следующие 16 байт представляют собой дополненный пустыми символами идентификатор типа файловой системы; * следующие 64 байта составляют строку опций команды mount; Опции mount нужны только для файловой системы типа NFS. Максимальное число записей таблицы mnttab определяется значе- нием системного параметра NMOUNT, находящимся в файле /etc/master.d/kernel и описывающим число разрешенных к монтирова- нию специальных файлов. См. также: mount(NADM), setmnt(ADM) rmtab ───────────────────────────────────────────────────────────── Таблица файловых систем, смонтированных на удалении Описание: Rmtab находится в каталоге /etc и содержит перечень всех кли- ентов, выполнявших на своих машинах монтирование удаленных файло- вых систем. При монтировании удаленной файловой системы формиру- ется запись в таблице rmtab, принадлежащей той машине, которая обслуживает данную файловую систему. Таблица представляет собой совокупность строк формы: host_имя:каталог Данная таблица используется для сохранения информации между сбоями и читается только процессом mountd(NADM). Процесс mountd имеет собственную таблицу, используемую для обработки запросов, поступающих от таких программ, как showmount(NADM) и shutdown(ADM). Файлы: /etc/rmtab См. также: showmount(NADM), mountd(NADM), mount(NADM), shutdown(ADM) Замечания: Хотя информация, содержащаяся в таблице rmtab, близка к исти- не, назвать ее точной на 100% пожалуй нельзя. rpc ───────────────────────────────────────────────────────────── БД номеров программ RPC Синтаксис: /etc/rpc Описание: Файл rpc содержит доступные пользователю идентификаторы, ко- торые могут использоваться вместо номеров программ RPC. Каждая строка заключает в себе следующую информацию: имя сервера для программы rpc номер программы rpc псевдонимы Элементы записи разделяются между собой любым количеством пробелов и/или символов табуляции. Символом "#" открываются ком- ментарии; вся оставшаяся строка процедурами не интерпретируется. Рассмотрим пример файла /etc/rpc: # #rpc 87/12/02 3.9 RPCSRC # portmapper 100000 portmap sunrpc rstat_svc 100001 rstatd rstat rup perfmeter rusersd 100002 rusers nfs 100003 nfsprog mountd 100005 mount showmount walld 100008 rwall shutdown etherstatd 100010 etherstat rquotad 100011 rquotaprog quota rquota sprayd 100012 spray 3270_mapper 100013 rje_mapper 100014 selection_svc 100015 selnsvc database_svc 100016 rexd 100017 rex alis 100018 sched 100019 llockmgr 100020 nlockmgr 100021 x25.inr 100022 statmon 100023 status 100024 bootparam 100026 keyserv 100029 keyserver Файлы: /etc/rpc См. также: getrpcent(NS) statmon, current, backup, state ───────────────────────────────────────────────────────────── Структуры файлов и каталогов statd Синтаксис: /etc/sm/record, /etc/sm/recover, /etc/sm/state Описание: Файлы /etc/sm/record и /etc/sm/recover генерируются процессом statd. Каждое host-имя в /etc/sm/record представляет собой имя машины, управляемой процессом statd. Каждое host-имя в /etc/sm/recover представляет собой имя машины, на которую ссыла- ется процесс statd при восстановлении. Файл /etc/sm/state генерируется процессом statd для записи номера его версии. Этот номер увеличивается на единицу при каждом сбое или восстановлении. См. также: statd(NADM), lockd(NADM) N S Функции сетевой системы Команды ───────────────────────────────────────────────────────────── Функции сетевой системы (NC) Intro Введение в функции сетевой системы bindresvport Установить связь с гнездом dbm Подпрограммы БД getdomainname Получить/установить имя текущего домена gethostent Получить сведения о главной сетевой машине getrpcent Получить сведения об RPC getrpcport Получить номер порта RPC kclt_create Создать клиентские выходы для ядра mount Смонтировать файловую систему nfs_getfh Получить выход на файл NFS nfs_svc Управляющие процессы в NFS rex Протокол удаленного выполнения intro ───────────────────────────────────────────────────────────── Введение в функции сетевой системы Синтаксис: #include Описание: Настоящий раздел посвящен описанию всех гнездовых системных функций, используемых в NFS версии V. Некоторые из этих функций содержатся в библиотеке интерфейса RPC, именуемой librpc. Осталь- ные функции имеют специальное назначение и используются в отдель- ных программах. Работа с такими функциями встроена в сами прог- раммы. Некоторые из функций не возвращают никакой информации в случае нормального выполнения. Они предоставляют ядру пользова- тельский контекст для выполнения или использования ресурсов, бо- лее доступных на пользовательском уровне. Большинство функций возвращают от одной до нескольких ошибок. Состояние ошибки опре- деляется по возвращаемому по "otherwise" значению функции. Почти всегда оно равно -1; исключения описываются отдельно. Если функции переданы обычные аргументы, все возвращаемые ко- ды и значения имеют целый тип. Код ошибки также хранится во внеш- ней переменной errno, которая не очищается в случае успешного за- вершения. Значение этой переменной следует проверять только при возникновении ошибки. Стандартные коды ошибок см. на странице, посвященной intro(S). Файлы: /usr/lib/librpc.a См. также: intro(S), perror(S) Список функций: Имя Страница Описание kclt_create kclt_creat(NS) создание клиентских выходов для ядра nfs_getfh nfs_getfh(NS) получение выхода на файл nfs_svc nfs_svc(NS) сервисный процесс NFS async_daemon nfs_svc(NS) процесс блочного ввода-вы- вода через NFS bindresvport ───────────────────────────────────────────────────────────── Установить связь с гнездом Синтаксис: #include #include bindresvport(sd,sin) int sd; struct sockaddr_in *sin; Описание: Функция bindresvport используется для установления связи меж- ду дескриптором гнезда и привилегированным портом IP с номером в диапазоне 0 - 1023. В случае успеха подпрограмма возвращает 0, в противном случае -1, а причина ошибки определяется по значению переменной errno. К привилегированному порту может подключиться только пользо- ватель root, все остальные пользователи потерпят неудачу. dbminit, fetch, store, delete, firstkey, nextkey ───────────────────────────────────────────────────────────── Подпрограммы БД Синтаксис: typedef struct { char *dptr; int dsize; } datum; dbminit(file) char *file; datum fetch(key) datum key; store(key,content) datum key,content; delete(key) datum key; datum firstkey() datum nextkey(key) datum key; dbmclose() Описание: Все указанные функции работают в базе данных с парами значе- ний "ключ-содержимое". Они способны манипулировать с очень боль- шими (в миллиард блоков) базами данных и адресоваться к ключевым данным за одно или два обращения к файловой системе. Доступ к функциям открывается через опцию загрузчика -ldbm. "Ключи" (keys) и "содержимое" (contents) описываются типом datum. Этому типу соответствует строка размером dsize, на которую указывает указатель dptr. Допустимы как строки в формате ASCII, так и произвольные двоичные данные. База данных располагается в двух файлах. Один файл представляет собой каталог с битовым мас- сивом и расширением .dir. Вся остальная информация содержится во втором файле с расширением .pag. Для того, чтобы база данных стала доступной, она должна быть открыта функцией dbminit. К моменту вызова этой функции файлы с расширениями .dir и .pag должны существовать. (Пустая БД создает- ся с пустыми файлами.) После открытия к данным, хранящимся под ключом, открывается доступ по fetch; запоминаются под ключом они с помощью store. Ключ (и связанное с ним содержимое) удаляется подпрограммой delete. Разрешен простой перебор всех ключей, хранящихся в базе, в практически произвольном порядке с помощью функций firstkey и nextkey. Функция firstkey возвращает первый ключ в БД. Для любого ключа в БД функция nextkey возвращает следующее по порядку значе- ние ключа. Программа перебора ключей в БД: for (key=firstkey(); key.dptr!=NULL; key=nextkey(key)) Закрытие БД производится функцией dbmclose. БД должна закры- ваться перед открытием новой. Диагностика: Все функции, возвращающие значения типа int, сообщают об ошибках отрицательными значениями. Код возврата, равный 0, озна- чает успех. Подпрограммы, возвращающие значения типа datum, сооб- щают об ошибках нулевым значением указателя dptr. Замечания: Файл .pag может содержать пустоты, поэтому его видимый размер почти в четыре раза превышает фактический. В предыдущих системах для этих пустот создавались реальные файловые блоки. Такие файлы не копируются обычными средствами (cp, cat, tp, tar, ar) без за- полнения пустот. Указатели dptr, возвращаемые этими подпрограммами, адресуют к статической памяти, которая изменяется при последующих обращени- ях. Сумма длин значений в паре "ключ/содержимое" не должна превы- шать размер внутреннего блока (1024 байта). Более того, все пары "ключ/содержимое", связанные в цепочку, должны помещаться в одном блоке. Функция store возвращает ошибку в том случае, если диско- вый блок заполнен неделимыми данными. Функция delete физически не освобождает файловое пространс- тво, хотя и делает его доступным для последующего использования. Порядок расположения ключей, выдаваемых функциями firskey и nextkey, определяется алгоритмом хеширования, и ничем иным. getdomainname, setdomainname ───────────────────────────────────────────────────────────── Получить/установить имя текущего домена Синтаксис: getdomainname(name,namelen) char *name; int namelen; setdomainname(name,namelen) char *name; int namelen; Описание: Функция getdomainname возвращает имя домена для текущего про- цессора, ранее установленное функцией setdomainname. Параметр namelen описывает размер массива name. Возвращаемое имя дополня- ется пустыми символами. Функция setdomainname присваивает домену главной машины имя name, имеющее длину namelen. Вызов этой функции доступен только суперпользователю и обычно используется только при начальной заг- рузке системы. Назначение доменов состоит в создании видимости двух работаю- щих сетей, объединяемых общим host-именем. Различие между сетями проводится по имени домена. Возвращаемое значение: В случае успеха возвращается нулевое значение. В противном случае возвращается -1 и код ошибки, запоминаемый в глобальной переменной errno. Ошибки: [EFAULT] Параметр name связан с неверным адресом. [EPERM] Пользователь, вызвавший функцию, не является суперпользователем. Эта ошибка имеет отноше- ние только к функции setdomainname. Замечания: Длина имени домена ограничена 64 символами. gethostent, gethostbyaddr, gethostbyname, sethostent, endhostent ───────────────────────────────────────────────────────────── Получить сведения о главной сетевой машине Синтаксис: #include struct hostent *gethostent() struct hostent *gethostbyname(name) char *name; struct hostent *gethostbyaddr(addr,len,type) char *addr; int len,type; sethostent(stayopen) int stayopen endhostent() Описание: Функции gethostent, gethostbyname и gethostbyaddr возвращают указатель на объект, имеющий следующую структуру и описывающий строку в главной сетевой БД /etc/hosts: struct hostent { char *h_name; /* официальное host-имя */ char **h_aliases; /* список псевдонимов */ int h_addrtype; /* тип адреса */ int h_length; /* длина адреса */ char *h_addr; /* адрес */ }; Элементы структуры: h_name Официальное имя главной машины. h_aliases Массив альтернативных имен главной машины, оканчивающийся нулем. h_addrtype Тип возвращаемого адреса; в настоящее время всегда AF_INET. h_length Длина адреса в байтах. h_addr Указатель на сетевой адрес для главной машины. Функция gethostent считывает следующую строку файла, в случае необходимости открывая этот файл. Функция sethostent открывает и переходит к началу файла. Если флаг stayopen имеет ненулевое значение, главная БД не будет зак- рываться после каждого вызова функции gethostent. Функция endhostent закрывает файл. Функции gethostbyname и gethostbyaddr последовательно прос- матривают файл с самого начала в поисках имени или адреса главной машины. Файлы: /etc/hosts Диагностика: По достижении конца файла или в случае появления ошибки возв- ращается нулевой указатель. Замечания: Вся информация сохраняется в статической области, поэтому в целях сохранения ее необходимо скопировать. Адрес может иметь только формат Internet. getrpcent, getrpcbyname, getrpcbynumber ───────────────────────────────────────────────────────────── Получить сведения об RPC Синтаксис: #include struct rpcent *getrpcent() struct rpcent *getrpcbyname(name) char *name; struct rpcent *getrpcbynumber(number) int number; setrpcent(stayopen) int stayopen endrpcent() Описание: Функции getrpcent, getrpcbyname и getrpcbyaddr возвращают указатель на объект, имеющий следующую структуру и описывающий строку в БД номеров программ RPC /etc/rpc: struct rpcent { char *r_name; /* имя сервера для rpc-программы */ char **r_aliases; /* список псевдонимов */ long r_number; /* номер rpc-программы */ }; Элементы структуры: r_name Имя сервера для данной RPC-программы. r_aliases Список альтернативных имен RPC-программы, окан- чивающийся нулем. r_number Номер RPC-программы для данной функции. Команды работают следующим образом: Getrpcent считывает следующую строку из файла, открывая файл в случае необходимости. Функция setrpcent открывает файл и возвращается к его началу. Если флаг stayopen установлен (non-zero), сетевая БД не будет закрываться после каждого обращения к getrpcent. Endrpcent закрывает файл. Getrpcbyname и getrpcbynumber последовательно просматривают файл с самого начала в поисках имени или номера RPC-программы. Файлы: /etc/rpc имя_домена/rpc.bynumber См. также: rpc(NF), rpcinfo(NADM) Диагностика: В случае достижения конца файла или возникновения ошибки возвращаемый указатель имеет нулевое значение. Замечания: Вся информация сохраняется в статической области, поэтому в целях сохранения ее необходимо скопировать. getrpcport ───────────────────────────────────────────────────────────── Получить номер порта RPC Синтаксис: int getrpcport(host, prognum, versnum, proto) char *host; int prognum, versnum, proto; Описание: Функция getrpcport возвращает номер порта для версии versnum RPC-программы prognum, выполняющейся на машине host и использую- щей протокол proto. Если с распределителем портов нет связи или если программа prognum не зарегистрирована, функция возвращает 0. Если программа prognum зарегистрирована с номером версии, отлича- ющимся от versnum, функция вернет ее номер порта. kclt_create ───────────────────────────────────────────────────────────── Создать клиентские выходы для ядра Синтаксис: #include kclt_create(nfd, fds, trans, tsdu, pgm, vers) int nfd; int *fds; int trans; int tsdu; ulong pgm; ulong vers; Описание: Функция kclt_create используется при создании клиентских вы- ходов для ядра RPC. В настоящее время различают два типа клиентов ядра RPC: NFS и администратор защиты. Nfd - число файловых дескрипторов в массиве fds. Nfd контро- лирует число клиентских выходов, создаваемых с использованием данных файловых дескрипторов и остальных аргументов. Trans ис- пользуется в качестве "транспортного идентификатора". Он отражает различия в транспортных и протокольных версиях, параллельно рабо- тающих на host-машине. Значения для trans еще не были определены, поэтому в trans следует занести 1. Tsdu - максимальная единица передачи данных по транспортному протоколу. Pgm и vers использу- ются при инициализации новых клиентских выходов. Они являются частью заголовка RPC-вызова. Кроме того, аргументы trans, pgm и vers используются для внутренней идентификации клиентских выхо- дов. См. также: nfsclnt(NADM) mount ───────────────────────────────────────────────────────────── Смонтировать файловую систему Синтаксис: #include #include int mount(spec, dir, mflag, fstyp, char *spec, *dir; int mflag, fstyp; caddr_t dataptr; int datalen; Описание: Функция mount требует, чтобы сменная файловая система, содер- жащаяся в специальном файле устройства блочного типа spec, монти- ровалась в каталоге dir. Spec и dir являются указателями на пути поиска соответствующих файлов. Fstyp - номер типа файловой систе- мы. Системная функция sysfs(S) может использоваться для его опре- деления. Если в mflag флаг MS_FSS сброшен, по умолчанию тип файловой системы - корневая. Если флаг установлен, тип системы содержится в fstyp. Кроме того, если в mflag установлен флаг MS_DATA, параметры монтирования будут переданы системе через ар- гументы dataptr и datalen. Если же флаг MS_DATA сброшен или любой из аргументов dataptr и datalen содержит ноль, это означает от- сутствие дополнительной информации. В стандартной ситуации ло- кального монтирования dataptr имеет значение NULL. При монтирова- нии файловой системы типа NFS dataptr указывает на структуру, описывающую соответствующие опции монтирования. В случае успешного завершения файл dir станет корневым ката- логом смонтированной файловой системы. Младший бит mflag используется для управления выдачей разре- шения на запись в смонтированную файловую систему; если он равен 1, запись запрещена, в противном случае запись будет регулиро- ваться правами доступа к конкретному файлу. С функцией mount может работать только суперпользователь. Она предназначена для использования только в утилите mount(NADM). Функция mount завершается неудачно, если имеет место хотя бы один из следующих случаев: [EPERM] Исполнительный код идентификации пользователя не принадлежит суперпользователю. [ENOENT] Один из указанных файлов не существует. [ENOTDIR] Компонента префикса имени файла не является ка- талогом. [EREMOTE] Устройство spec удаленное и не может быть смон- тировано. [ENOLINK] Path указывает на удаленную машину и связь с этой машиной больше не активна. [EMULTIHOP] Компоненты имени пути path требуют связи с нес- колькими удаленными машинами. [ENOTBLK] Spec не является специальным устройством блочно- го типа. [ENXIO] Устройство, связанное с файлом spec, не сущест- вует. [ENOTDIR] Файл dir не является каталогом. [EFAULT] Spec или dir указывают за пределы выделенного процессу адресного пространства. [EBUSY] Каталог dir является точкой монтирования, чьим- нибудь текущим рабочим каталогом или же занят по другой причине. [EBUSY] Устройство, связанное с именем spec, уже смонти- ровано. [EBUSY] Таблица монтирований исчерпана. [EROFS] Устройство spec защищено от записи, а массив mflag требует разрешения на запись. [ENOSPC] Состояние файловой системы, описанное в супер- блоке, отлично от FsOKAY, а массив mflag требует разрешения на запись. [EINVAL] Суперблок имеет плохое значение magic number или же значения fstyp или mflag являются недопусти- мыми. См. также: sysfs(S), fs(F), mount(NADM) Диагностика: В случае успешного выполнения возвращается нулевой код. В противном случае, возвращается -1, а errno указывает на ошибку. nfs_getfh ───────────────────────────────────────────────────────────── Получить выход на файл NFS Синтаксис: #include nfs_getfh(fdes, fhp) int fdes; fhandle_t *fhp; Описание: Функция nfs_getfh возвращает выход на файл, открытый с деск- риптором fdes. Этим выходом пользуется только процесс монтирова- ния NFS, для пользователей он должен быть недоступен. См. также: mountd(NADM) nfs_svc, async_daemon ───────────────────────────────────────────────────────────── Управляющие процессы в NFS Синтаксис: nfs_svc(tep, addr, tsdu, buf) int tep; int addr; int tsdu; char *buf; async_daemon() .ft B Описание: Благодаря этим двум системным функциям процессы ядра могут иметь пользовательский контекст. Функция nfs_svc запускает процесс управления сетевой файловой системы, ожидающий ответа на транспортном конце tep. Этот транс- портный конец обычно связан с файловым дескриптором, возвращаемый функцией t_open(): AF_INET (в терминологии 4.2BSD) или SOCK_DGRAM (протокол UDP/IP), что определяется версией транспортного прото- кола локальной сети. С другой стороны транспортный конец должен быть связан с портом межсетевого взаимодействия 2049. Addr - мак- симальный размер удаленного адреса, обрабатываемого транспортным протоколом. Buf - адрес буфера, имеющего размер NFS_MAXDATA (обычно 8192 байта), внутри процесса пользовательского уровня. Этот буфер используется в локальной файловой системе программой getdents(S). Функция возвращает управление только после удаления процесса из системы. Функция async_daemon соответствует сетевому процессу, занима- ющемуся обработкой результатов асинхронного ввода-вывода для кли- ента сетевой файловой системы. Управление после нее никому не пе- редается. rex ───────────────────────────────────────────────────────────── Протокол удаленного выполнения Синтаксис: #include Описание: Сервер удаленного исполнения команд. Допускается указание ра- бочего каталога и параметров среды выполнения команды, а также переопределение стандартного ввода и вывода команды. Возможно осуществление интерактивного ввода-вывода для тех программ, кото- рые запускаются с терминалов. Работает только с протоколом TCP. Информация о RPC: Код (номер) программы: REXPROG подпрограммы xdr: int xdr_rex_start(xdrs, start); XDR *xdrs; struct rex_start *start; int xdr_rex_result(xdrs, result); XDR *xdrs; struct rex_result *result; int xdr_rex_ttymode(xdrs, mode); XDR *xdrs; struct rex_ttymode *mode; int xdr_rex_ttysize(xdrs, size); XDR *xdrs; struct rex_ttysize *size; процессы: REXPROC_START Принимает структуру rex_start, запускает исполнение ко- манды и возвращает структуру rex_result. REXPROC_WAIT Аргументов не имеет, ожидает завершения выполнения ко- манды, возвращает структуру rex_result. REXPROC_MODES Принимает структуру rex_ttymode и пересылает режимы ра- боты терминала. REXPROC_WINCH Принимает структуру ttysize и пересылает информацию о размерах окна. версии: REXVERS_ORIG Первоначальная версия структуры: struct B_sgttyb { char bsg_ispeed; /* скорость ввода */ char bsg_ospeed; /* скорость вывода */ char bsg_erase; /* символ стирания */ char bsg_kill; /* символ удаления */ short bsg_flags; }; struct tchars { char t_intrc; /* прерывание */ char t_quitc; /* выход */ char t_startc; /* запуск вывода */ char t_stopc; /* останов вывода */ char t_eofc; /* конец файла */ char t_brkc; /* разделитель ввода */ }; struct ltchars { char t_suspc; /* сигнал остановки процесса */ char t_dsuspc; /* отложенный сигнал остановки процесса */ char t_rprntc; /* повторный вывод строки */ char t_flushc; /* вывод потоком (ключи) */ char t_werasc; /* стирание слова */ char t_lnextc; /* следующий символ */ }; #define REX_INTERACTIVE 1 /* интерактивный режим */ struct rex_start { char **rst_cmd; /* список команд и аргумен- тов */ char *rst_host; /* имя рабочего каталога host'а */ char *rst_fsname; /* имя каталога файловой системы */ char *rst_dirwithin; /* каталог внутри файловой системы */ char **rst_env; /* список параметров выполне- ния */ ushort rst_port0; /* порт для stdin */ ushort rst_port1; /* порт для stdin */ ushort rst_port2; /* порт для stdin */ ulong rst_flags; /* опции - см. #define выше */ }; struct rex_result { int rlt_stat; /* целочисленный код состоя- ния */ char *rlt_message; /* строка сообщения */ }; struct rex_ttymode { struct B_sgttyb basic; /* флаги для терминала в UNIX версии Berkeley */ struct tchars more; /* прерывание, удаление и т.д. */ struct ltchars yetmore; /* специальные символы в Berkeley */ ulong andmore; /* режимы Berkeley */ }; struct ttysize { int ts_lines; /* количество строк на экране терминала */ int ts_cols; /* количество столбцов на экране терминала */ }; См. также: on(NC), rexd(NADM)