Структура, синтаксис команды. Основные cmd команды – просто о полезном
В данной статье рассматривается общий синтаксис команд оболочки (shell ) и на примере нескольких элементарных команд показывается его использование.
Формально командный синтаксис определяется так:
Utility_name
Здесь, utility_name означает имя команды или утилиты , options — принимаемые командой ключи или опции , а operands — аргументы команды. Квадратные скобки вокруг options и operands показывают, что эти параметры необязательны и могут отсутствовать.
Запишем наше «определение» более развёрнуто:
Utility_name [-a] [-b] [-c optarg] [-d|-e] [-foptarg]
Ключ представляет собой символ «минус», за которым следует одиночная буква или цифра. Несколько ключей могут быть объединены под одним символом «минус». Например, ключи -a и -b можно записать как -ab . Некоторые опции могут содержать дополнительные аргументы (как optarg в -c и -f), которые записываются за этой опцией либо сразу (-f), либо отделяются от неё пробелом или символом табуляции (-c). Если опция принимает несколько аргументов, то они записываются либо через запятую (optarg1,optarg2), либо в кавычках через пробел ("optarg1 optarg2"). Некоторые ключи могут исключать друг друга. В примере выше это -d и -e , символ вертикальной черты говорит о том, что эти ключи взаимоисключающие и использовать нужно только один из них. Если такие ключи в командной строке заданы совместно, то, как правило, действующим окажется тот, который встретился последним. Наконец, аргументы команды, если они есть, стоят после всех опций. В примере выше символ многоточия показывает, что аргументов может быть несколько. В таком случае они разделяются пробелами или табуляцией.
Для обозначения окончания опций может быть использован специальный разделитель -- . Всё, что указано после него, воспринимается командой как её аргумент, даже если он начинается с символа «минус», который в прочих случаях интерпретируется как символ опции. Например:
Command -abc -d optarg -- -operand1 operand2
Здесь -operand1 выступает как аргумент команды, а не как её опция, несмотря на то, что начинается с «минуса».
Если в качестве аргумента команды, который представляет собой имя файла, используется одиночный символ «минус», то он обозначает либо стандартный ввод, либо стандартный вывод в зависимости от контекста использования команды.
Большинство утилит, разработанных в рамках проекта GNU , поддерживают помимо «коротких» однобуквенных ключей так называемые «длинные» опции, которые представляют собой одно или несколько слов, разделённых дефисом. Предваряются «длинные» опции двумя символами «минус». Общий синтаксис с использованием «длинных» опций можно записать так:
Utility_name [--longopt1] [--logopt2=optarg1] [--longopt3 optarg2]
Правила записи аргументов опций отличаются от «коротких» тем, что совместное написание опции и её аргумента не допускается, а требуется отделение аргумента либо пробелом (как в --longopt3), либо символом «равно» (как в --longopt2). Эти формы записи являются равнозначными.
Во многих утилитах, поддерживающих «длинные» опции, как правило, существует однозначное соответствие «коротких» и «длинных» опций, то есть каждому «короткому» ключу соответствует одна «длинная» опция. Однакоб обратное утверждение далеко не всегда истинно, и «длинной» опции не всегда есть аналог среди «коротких» ключей.
Итак, покончив с скучной теорией, посмотрим, как всё это выглядит на практике.
Взаимодействие оператора с командной оболочкой упрощённо можно описать так: оператор вводит команду с клавиатуры, система производит некоторое действие, определяемое этой командой, и при наличии какого-либо вывода отображает его на экране.
Разберём такой пример диалога оператора с системой:
$ whoami bofh $ hostname -s lucky $ uname -sr FreeBSD 7.1-STABLE $ echo Hello, world. Hello, world.В данном примере знак доллара ($) означает приглашение (prompt ) командной оболочки, жирным текстом выделены команды, которые вводил оператор, а простым текстом показан вывод системы.
В первой команде (whoami) оператор пытается выяснить как его зовут, вернее под каким пользователем запущен данный сеанс работы с оболочкой. Как видно, система ответила именем пользователя bofh . Команда whoami не требует никаких параметров, у неё нет ключей и аргументов. Можно попытаться их ей передать:
$ whoami -h whoami: illegal option -- h usage: whoami $ whoami sometext usage: whoamiКак видно, утилита whoami любезно сообщила, что не знает, что за ключ -h оператор ей задал. А строка usage: whoami подсказывает командный синтаксис.
Вторая команда (hostname) позволила оператору узнать, на каком хосте запущена оболочка. При этом оператор указал ключ -s , который в данном случае предписывает утилите hostname выводить только «короткое» имя хоста, то есть без доменной части (проще говоря, до первой точки).
Выполнив третью команду (uname), оператор смог узнать, с какой операционной системой он имеет дело, а также версию ОС. Записываться ключи могут вместе, что продемонстрировано в примере выше, либо по отдельности, и тогда перед каждым ключом должен быть символ «минус»:
$ uname -s -r FreeBSD 7.1-STABLEНаконец, четвёртая команда (echo) просто напросто выводит переданные ей аргументы.
Как мы видим, команды могут иметь множество разных ключей и аргументов. Различается их количество от утилиты к утилите, различается их значение, опции могут быть «короткие» и «длинные» и т.д. Мало того, в различных операционных системах одна и та же команда может иметь разный набор ключей, что ещё больше может запутать.
Вполне естественно, что запомнить все параметры тех или иных команд не представляется возможным. Это и не нужно. Существует способ быстро освежить в памяти синтаксис и ключи той или иной команды — использование опций -h и/или --help , если утилита таковые поддерживает. Например, выше в примере команды whoami в ОС FreeBSD было показано, что эта команда не знает ни про какие ключи и к тому же довольно немногословна. В ОС GNU/Linux вывод выглядит несколько иначе и более развёрнуто:
$ whoami -h whoami: invalid option -- "h" Try `whoami --help" for more information. $ whoami --help Usage: whoami ... Print the user name associated with the current effective user ID. Same as id -un. --help display this help and exit --version output version information and exitКак правило, команда, поддерживающая «длинные» ключи, практически всегда имеет опцию --help . Но, как было сказано выше, эта опция позволяет всего лишь освежить в памяти способы использования этой команды и её параметры. О том, где найти более подробную информацию о той или иной команде, речь пойдёт в .
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
К некоторым файлам из своей структуры операционная система допускает прямое обращение пользователя с целью выполнить какое-нибудь действие, операцию. Действие будет выполнено с помощью программ, записанных в этих файлах, а указаниена такое действие называетсякомандой
Внутренние команды операционной системы
В файле COMMAND.COM описаны правила выполнения компьютером простых, наиболее часто используемых команд. Команды DOS, которые как коды записаны в файл COMMAND.COM, называютсявнутренними командами. Данные из файла COMMAND.COM загружаются в память на весь сеанс работы, поэтому к выполнению внутренних команд система приступает немедленно. Вот примеры внутренних команд DOS, коды выполнения которых описаны в файле COMMAND.COM.
Команда | Описание внутренней команды |
cd | Вывести имя текущего каталога или меняет каталог |
copy | Копировать файл или несколько файлов в указанное место |
date | Вывести текущую дату и при необходимости ее изменить |
del, erase | Удалить указанные файлы |
dir | Вывести список файлов и подкаталогов в текущем или указанном каталоге |
exit | Прекратить работу командного процессора COMMAND.COM и передать управление программе, из которой он был запущен |
md, mdir | Создать каталог или подкаталог |
path | Указать каталоги, где DOS должна отыскивать исполняемые файлы (программы) |
rd, rmdir | Удалить каталог (remove directory) |
ren, rename | Изменить имя выбранного файла или файлов |
time | Вывести системное время и при необходимости изменить его |
type | Вывести содержимое указанного файла |
verify | Проверить и сообщить результаты записи файлов на диск |
Через запятую написаны команды-дубликаты и сокращенные варианты написания. Внутренняя команда не требует уточнения, кто ее будет выполнять.
Внешние команды DOS
В комплект DOS помимо системных файлов входит большой набор программ, записанных в отдельные файлы с расширением.corn, .exe. Программа из такого файла только по требованию команды специально загружается в память с диска. На это требуется время, поэтому вызов, указание на имя файла с программой DOS, называется внешней командой DOS. Внешняя команда - это имя программы, которая будет выполнять ожидаемое действие, в команде не указывается расширение файла.
Файл COMMAND.COM принимает с клавиатуры разные команды DOS, но сам выполняет только внутренние команды и командные файлы наборов команд. Встретившись с командой, которую он не готов выполнить своими внутренними силами, файл COMMAND.COM просмотрит список путей, ведущих в каталоги, и загрузит с диска файл соответствующей программы для выполнения.
Программы выполнения внешних команд поставляются вместе с DOS, хранятся на диске в каталоге DOS как обычные файлы и совершают действия обслуживающего характера.
Подача команды
Команда - это распоряжение о выполнении действий, операций.
1. Команда общего назначения может быть набрана на клавиатуре латинскими буквами, в процессе набора ее текст отображается на экране в командной строке приглашения DOS.
2. Команда может быть закреплена за клавишей клавиатуры (горячая клавиша).
3. Команду в программах с оконным графическим оформлением можно описать, подбирая ее параметры курсором клавиатуры или мыши по графическому отображению на экране: меню, окнам, которые предоставляет программа.
Структура, синтаксис команды
Выше были приведены только имена команд, но в большинстве случаев команда только начинается с имени, а дальше должны быть записаны дополнительные элементы. Правила написания и порядок следования элементов команды называютсясинтаксисом команды.
Команда может содержать элементы четырех типов:имя команды (обязательно в начале),параметры, ключи (переключатели) изначения. Они определяют вариант выполнения команды: кто (коды какой программы, команды), над каким объектом и как проделает требуемые действия. Элементы команды разделяются пробелами.
не архивировать (d)
неизменяемый (i)
журналирование данных (j)
безопасное удаление (s)
вершина иерархического дерева (T)
запрет слияния в конце файла (t)
неудаляемый (u)
cmp - сравнивает два файла, и если они различаются, сообщает о первом байте и строке, где было обнаружено различие.
Синтаксис команды
Формат этой команды следующий:
cmp OPTIONS... FROM-FILE
Имя файла «-» означает стандартный ввод. «cmp» также использует стандартный ввод, если один из файлов не задан.
Выходной статус 0 означает, что различий не найдено, 1 - найдено, 2 - обнаружена ошибка.
Печатает различающиеся символы. Отображает контрольные символы символом «^» и буквой алфавита, а также предваряет символы с установленным высшим битом символом «-M» (обозначающим «мета»).
Ignore-initial=BYTES
Игнорирует все различия в первых BYTES байтах входных файлов. Обращается с файлами меньшими по размеру, чем BYTES байтов, как с пустыми.
Печатает все различающие символы. Отображает контрольные символы символом «^» и буквой алфавита, а также предваряет символы с установленным высшим битом символом "-M" (обозначающим «мета»).
Quite или -s или --silent
Ничего не печатает; только возвращает выходной статус, показывающий отличаются ли файлы.
Печатает смещение (десятичное) и значение (восьмеричное) всех различающихся байтов.
V или --version
Выдаёт номер версии cmp.
file - команда Unix, предназначенная для определения типа файла.
Использование
file [-zL] [-f file] file ...
Ключи
F file: Считывает из указанного файла список файлов для проверки.
L: Определяет тип файлов, указанных по ссылке.
Z: Определяет тип файлов, находящихся в сжатых файлах.
ln - команда UNIX, устанавливающая связь между файлом и именем файла. Формат команды:
ln файл1 файл2
# создаётся «жёсткая» ссылка (hard link) ln -s файл1 файл2
# создаётся «символическая» ссылка (symbolic link)
Эта команда создаёт жёсткую ссылку на файл «файл1», которая будет выглядеть как «файл2». Таким образом для файловой системы исходный файл «файл1» и ссылка на него «файл2», на самом деле физически будут являться одним и тем же файлом. Жесткие ссылки не могут указывать на файлы в других файловых системах.
mv (от англ. move) - утилита в UNIX и UNIX-подобных системах, используется для перемещения или переименования файлов или каталогов.
Использование:
Если в качестве аргументов заданы имена двух файлов, то имя первого файла будет изменено на имя второго.
Если последний аргумент является именем существующего каталога, то mv перемещает все заданные файлы в этот каталог.
Если последний аргумент не является каталогом и задано более чем два файла, то будет выдано сообщение об ошибке.
Ключи, использующиеся с mv:
–f, не запрашивать подтверждения операций.
–i, выводить запрос на подтверждение операции, когда существует файл, в который происходит переименование или перемещение.
––, завершает список ключей. Применяется для использования с файлами, имена которых начинаются на –.
rm (от англ. remove) - утилита в UNIX и UNIX-подобных системах, используемая для удаления файлов из файловой системы. Ключи, использующиеся с rm:
R - обрабатывать все вложенные подкаталоги. Данный ключ необходим, если удаляемый файл является каталогом, пусть даже пустым. Если удаляемый файл не является каталогом, то ключ -r не влияет на команду rm.
I - выводить запрос на подтверждение каждой операции удаления.
F - не возвращать код ошибочного завершения, если ошибки были вызваны несуществующими файлами; не запрашивать подтверждения операций.
rm часто является синонимом команды rm -i, то есть команда по умолчанию запрашивает
подтверждение перед удалением файлов, что позволяет предотвратить их случайное удаление. Если пользователю нужно удалить большое количество файлов без подтверждения операции, можно отменить действие ключа -i с помощью добавления ключа -f.
chmod - изменение прав доступа к файлам и папкам. Название происходит от программы ОС Unix chmod, которая, собственно, изменяет права доступа к файлам, каталогам и символическим ссылкам.
Права записываются сразу для трёх типов пользователей: владельца файла, группы, в которую он входит и для прочих пользователей. chmod может быть записан в двух форматах: в числовом и в символьном.
Для понимания сути задания прав в Unix-like системах, нужно знать представление чисел в восьмеричной и двоичной системах счисления
юзер группа остальные
111 101 101 rwx r-x r-x u g o
Пример символьной записи "rwxr-xr-x".
Примером числовой записи может служить "755", которая эквивалентна записанной выше строковой записи: каждое право имеет числовой код и может быть задано вручную:
400 - владелец имеет право на чтение;
200 - владелец имеет право на запись;
100 - владелец имеет право на выполнение;
40 - группа имеет право на чтение;
20 - группа имеет право на запись;
10 - группа имеет право на выполнение;
4 - остальные имеют право на чтение;
2 - остальные имеют право на запись;
1 - остальные имеют право на выполнение.
Суммировав эти коды можно получить символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 - все имеют право только на чтение.
Помимо стандартных "rwx" значений команда CHMOD осуществляет еще управление битами SGID , SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно.
Для SUID - вес 4000, а для SGID - 2000.
Пример chmod 4444 {имяфайла} - все имеют право только на чтение, но запускаться файл на исполнение будет с правами владельца. Для папки: установка SGID приведет к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сам каталог, а не к основной группе владельца, как это происходит по умолчанию. SUID для каталога не имеет смысла.
t-бит используется с каталогами. Когда t-бит для каталога не установлен, файл в данном
NET USER - управление учетными записями пользователей
Команда NET USER предназначена для добавления, редактирования или просмотра учетных записей пользователей на компьютерах. При выполнении команды в командной строке без параметров отображается список учетных записей пользователей Windows, присутствующих на компьютере (эта команда также хорошо работает и в Windows 10). Информация об учетных записях пользователей хранится в базе данных Windows.
Синтаксис команды NET USER
net user [имя_пользователя [пароль | *] [параметры]]
net user имя_пользователя {пароль | *} /add [параметры]
net user имя_пользователя , где
- имя_пользователя - Указывает имя учётной записи пользователя, которую можно добавить, удалить, отредактировать или просмотреть. Имя может иметь длину до 20 символов.
- пароль - Присваивает или изменяет пароль пользователя. Введите звездочку (*) для вывода приглашения на ввод пароля. При вводе с клавиатуры символы пароля не выводятся на экран.
- /domain - Выполняет операцию на контроллере основного для данного компьютера домена.
- параметры - Задает параметр командной строки для команды.
- net help команда - Отображение справки для указанной команды net.
- /delete - Удаление учетной записи пользователя.
Дополнительные параметы команды NET USER
- /active:{yes | no} - Активирует или деактивирует учетную запись. Если учетная запись не активирована, пользователь не может получить доступ к серверу. По умолчанию учетная запись активирована.
- /comment:"текст" - Позволяет добавить описание учетной записи пользователя (максимум 48 символов). Текст описания заключается в кавычки.
- /countrycode: nnn - Использует код страны, указанный для операционной системы, для реализации соответствующих языковых файлов при отображении пользовательской справки и сообщений об ошибках. Значение 0 соответствует коду страны, используемому по умолчанию.
- /expires:{дата | never} - Дата истечения срока действия учетной записи. Значение never соответствует неограниченному сроку действия. Дата указывается в формате мм/дд/гг или дд/мм/гг в зависимости от кода страны. Месяц может указываться цифрами, полностью или в сокращенном виде (тремя буквами). Год может указываться двумя ли четырьмя цифрами. Элементы даты разделяются слэшем (/) без пробелов.
- /fullname:" имя " - Полное имя пользователя (в отличии от имени учетной записи пользователя). Имя указывается в кавычках.
- /homedir: путь - Указывает путь к домашнему каталогу пользователя. Указанное место должно существовать.
- /passwordchg:{yes | no} - Указывает, может ли пользователь изменять свой пароль (по умолчанию может).
- /passwordreq:{yes | no} - Указывает, должна ли учетная запись пользователя иметь пароль (по умолчанию должна).
- /profilepath[:путь] - Указывает путь к профилю входа в систему пользователя.
- /scriptpath: путь - Путь к сценарию, используемому пользователем для входа в систему.
- /times:{время | all} - Время для входа в систему. Параметр время указывается в формате день[-день][,день[-день]],час [-час][,час [-час]], причем приращение равняется 1 часу. Название дней недели могут указываться полностью или в сокращенном виде. Часы могут указываться в 12- или 24-часовом представлении. Для 12-часового представления используются обозначения am, pm, a.m. или p.m. Значение all соответствует отсутствию ограничений на время входа в систему, а пустое значение обозначает полный запрет на вход в систему. Значения дней недели и времени разделяются запятой; несколько записей для значений дней недели и времени разделяются точкой с запятой.
- /usercomment:"текст" - Позволяет администратору добавить или изменить комментарий к учетной записи.
- /workstations:{имя_компьютера[,...] | *} - Позволяет указать до 8 компьютеров, с которых пользователь может войти в сеть. Если для параметра/workstations не указан список компьютеров или указано значение *, пользователь может войти в сеть с любого компьютера.
Примеры команды NET USER
- Для вывода списка всех пользователей данного компьютера служит команда: net user;
- Для вывода информации о пользователе "petr" служит следующая команда: net user petr;
- Для добавления учетной записи пользователя Petr с полным именем пользователя и правом на подключение с 8 до 17 часов с понедельника по пятницу используется следующая команда: net user petr /add /times:Пн-Пт,08:00-17:00/fullname:"Petr".
- Для удаления учетной записи необходимо ввести команду: net user petr /delete ;
- Для отключения учетной записи необходимо ввести команду: net user petr /active:no .
Видео - Работа с утилитой NET USER
) широко используется как стандартная нотация, но в первые дни люди экспериментировали. На некоторых машинах команда sort больше не поддерживает нотацию + . Однако различные команды (в частности, ar и tar) принимают элементы управления без символа префикса - и dd (упоминаемый Alok в комментарии) использует другое соглашение вообще.
Соглашение GNU об использовании " -- " для длинных опций (поддерживается getopt_long(3)) было изменено с использованием " + ". Конечно, программное обеспечение X11 использует одну тире перед многосимвольными опциями. Итак, все это коллекция исторических реликвий, когда люди экспериментировали с тем, как лучше всего справиться с ней.
POSIX документирует Соглашения об утилитах , за которые он работает, за исключением случаев, когда исторический прецедент сильнее.
Какие существуют стили обработки опций?
[В свое время SO 367309 содержался следующий материал в качестве моего ответа. Первоначально он был задан в 2008-12-15 02:02 FerranB , но впоследствии был закрыт и удален.]
Сколько различных типов опций вы узнаете? Я могу думать о многие, в том числе:
- Однобуквенные опции, которым предшествует одиночная тире, группируются, когда есть нет аргументов, аргумент может быть прикреплен к букве опциона или в следующем аргумент (многие, многие команды Unix, большинство команд POSIX).
- Однобуквенные опции, которым предшествует одиночная тире, группировка недопустима, аргументы должны быть присоединены (RCS).
- Однобуквенные опции, которым предшествует одиночная тире, группировка недопустима, аргументы должны быть отдельными (pre-POSIX SCCS, IIRC).
- Многобуквенные опции, которым предшествует одиночная тире, могут быть аргументы прикрепленные или в следующем аргументе (программы X11, а также Java и многие программы на Mac OS X с наследием NeXTSTEP).
- Многобуквенные опции, которым предшествует одиночная тире, могут быть сокращены (Atria Clearcase).
- Многобуквенные опции, которым предшествует одиночный плюс (устаревший).
- Многобуквенные опции, которым предшествует двойная тире; аргументы могут следовать за "=" или быть отдельными (утилиты GNU).
- Параметры без префикса/суффикса, некоторые имена имеют сокращения или подразумеваемые аргументы должны быть раздельными. (AmigaOS Shell)
Для параметров, принимающих необязательный аргумент, иногда необходимо присоединить аргумент (co -p1.3 rcsfile.c), иногда он должен следовать знаком "=". POSIX не поддерживает дополнительный аргументы осмысленно (POSIX getopt() допускает их только для последнего в командной строке).
Все разумные системы опций используют опцию, состоящую из двойной панели (" -- ") только для обозначения "конца опций" - следующие аргументы: "необязательные аргументы" (обычно имена файлов, POSIX называет их "операндами") даже если они начинаются с тир. Имейте в виду, что если для параметра -- предшествует опция, требующая аргумента, -- будет рассматриваться как аргумент опции, а не как маркер "конца опций".)
Многие, но не все программы принимают одиночную тире в качестве имени файла для обозначения стандартный вход (обычно) или стандартный вывод (иногда). Иногда, как с GNU " tar ", оба могут использоваться в одной командной строке:
... | tar -cf - -F - | ...
Первая персональная тире означает "write to stdout"; второй означает "читать файл" имена из stdin ".
Некоторые программы используют другие соглашения - то есть параметры, которым не предшествует тир. Многие из них относятся к самым старым дням Unix. Например, "tar" и "ar" оба принимают параметры без тире, поэтому:
Tar cvzf /tmp/somefile.tgz some/directory
Команда dd использует opt=value исключительно:
Dd if=/some/file of=/another/file bs=16k count=200
Некоторые программы позволяют чередовать опции и другие аргументы полностью; компилятор C, make и утилиты GNU работают без POSIXLY_CORRECT в среде - примеры. Многие программы ожидают параметры, предшествующие другим аргументам.
Обратите внимание, что git и другие команды VCS часто используют гибридную систему:
Git commit -m "This is why it was committed"
В качестве одного из аргументов есть подкоманда. Часто будут добавлены дополнительные "глобальные" параметры, которые могут быть указаны между командой и подкомандой. В POSIX есть примеры; sccs команда находится в этой категории; вы можете утверждать, что некоторые другие команды, которые запускают другие команды, также относятся к этой категории: nice и xargs spring, чтобы учесть POSIX; sudo является примером, отличным от POSIX, как и svn и cvs .
У меня нет сильных предпочтений между различными системами. когда существует несколько вариантов, а затем одиночные буквы с мнемоническим значением удобны. GNU поддерживает это, но рекомендует многобуквенные опции, которым предшествует двойная тире.
Есть некоторые вещи, на которые я возражаю. Одно из худших - одно и то же вариантная буква используется с различными значениями в зависимости от того, что другое перед ним предшествуют буквы опций. В моей книге, что нет-нет, но я знаю программного обеспечения, где это делается.
Другим нежелательным поведением является несогласованность в стиле обработки аргументы (особенно для одной программы, но также и в рамках набора программы). Любой из них требует приложенных аргументов или требует отсоединения аргументы (или разрешить либо), но не имеют некоторых параметров, требующих прилагаемый аргумент и другие, требующие отдельного аргумента. И быть что " = " можно использовать для разделения опции и аргумент.
Как и во многих, многие (связанные с программным обеспечением) вещи - последовательность важными, чем индивидуальные решения. Использование инструментов, которые автоматизируют и стандартизация обработки аргументов помогает с согласованностью.
Что бы вы ни делали, прочитайте Параметры командной строки TAOUP и рассмотрите Стандарты для интерфейсов командной строки . (Добавил (а) J F Себастьян - спасибо; Я согласен.)