Лабораторная работа №2.
Любая операционная система содержит большой набор команд управления файловой системой, процессами, службами и т.д. Каждая команда имеет свой собственный набор параметров и опций, описываемый в документации к ней.Используя описание команды mv(cм. ниже) ОС Linux, разработать консольную программу, обеспечивающую синтаксический анализ переданной строки.
В случае синтаксического соответствия переданной строки правилам использования команды mv, просвести семантический анализ, в рамках которого обработать правило однократного использования каждой опции одного вида (например, одновременное использование опций "-f -u -v" корректно, а опций "-f -u --force" - нет), а также запрет одновременного использования конфликтующих опций (-f и -i всех видов; --help и остальные опции; --version и остальные опции ).
По результатам каждого анализа вывести слово "Ок" или "No". Вывод "No" должен сопровождаться информацией об ошибке в произвольной форме, позволяющей однозначно установить причину и местоположение ошибки.
Опции POSIX:
[-fi] [--]
Опции GNU (краткая форма):
[-bfiuv] [-S suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]
Если последний аргумент является именем существующего каталога, то
mv
перемещает все остальные файлы в этот каталог. В противном случае,
если задано только два файла, то имя первого файла будет изменено
на имя второго. Если последний аргумент не является каталогом и
задано более чем два файла, то будет выдано сообщение об ошибке.
Так, mv /a/x/y /b переименует файл /a/x/y в /b/y, если /b
является существующим каталогом, и в /b, если нет.
Если при переименовании
исходного_файла
в
файл_назначения,
этот
файл_назначения
существует и при этом задана опция -i или если произвести запись в
файл назначения
невозможно, а стандартным выводом является терминал и не задана опция
-f,
то
mv
спрашивает у пользователя разрешение на замену этого файла, которое
выдается на стандартный вывод ошибок, и читает ответ из
стандартного ввода. Если ответ не утвердительный, то файл пропускается.
Когда и
исходный_файл
и
файл_назначения
находятся на одной файловой системе, они являются одним и тем же
файлом (изменяется только имя файла; владелец, права доступа,
временные штампы остаются неизменными). Если же они находятся на
разных файловых системах, то
исходный_файл
копируется и затем удаляется.
mv
будет копировать время последней модификации, время доступа, идентификаторы
пользователя и группы и права доступа к файлу если это возможно. Если
копирование идентификаторов пользователя и/или группы закончилось
неудачно, то в копии файла сбрасываются биты setuid и setgid.
Если данная опция не задана, то суффикс можно также задать, используя
переменную окружения
SIMPLE_BACKUP_SUFFIX
Если не задана ни опция, ни переменная, то по умолчанию используется
суффикс ~.
Данная опция соответствует переменной version-control в Emacs.
Допустимыми значениями
МЕТОД
являются (допускаются однозначные сокращения):
MV
ИМЯ
mv - перемещает (переименовывает) файлы
ОБЗОР
mv [опции...] исходный_файл файл_назначения
mv [опции...] исходный_файл... каталог
ОПИСАНИЕ
mv
перемещает или переименовывает файлы или каталоги.
ОПЦИИ POSIX
ДЕТАЛИ ВЕРСИИ GNU
Реализация GNU
mv
(в fileutils-3.16) работает неправильно, так как там
mv
может переносить между файловыми системами только обычные файлы.
ОПЦИИ GNU
ОПЦИИ РЕЗЕРВНОГО КОПИРОВАНИЯ GNU
GNU-версии таких программ как
cp,
mv,
ln,
install
и
patch
могут, если потребуется, делать резервные копии файлов, которые будут
перезаписаны, изменены или уничтожены. При желании, резервные копии
файлов создаются с помощью опции -b. Как они будут называться,
задает опция -V. В случае, если имя файла резервной копии создается
с помощью добавления суффикса к имени исходного файла, то суффикс
указывается с помощью опции -S.
СТАНДАРТНЫЕ ОПЦИИ GNU
ОКРУЖЕНИЕ
При работе обычным образом используются значения переменных LANG, LC_ALL, LC_COLLATE,
LC_CTYPE и LC_MESSAGES. В версии GNU используются также переменные
SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL, как описано выше.
СОВМЕСТИМОСТЬ
Соответствует POSIX 1003.2, за исключением того, что иерархии каталогов
не могут быть перемещены в другую файловую систему.
ЗАМЕЧАНИЯ
Эта страница описывает версию
mv
пакета fileutils-4.0; другие версии могут иметь небольшие отличия.
Исправления и дополнения присылайте по адресу aeb@cwi.nl. Сообщения
об ошибках в этой программе присылайте по адресу
fileutils-bugs@gnu.ai.mit.edu.