LINUX.ORG.RU

Насколько стандартизованы консольные команды?


0

0

Всем привет.

Вопрос такой: насколько в разных клонах Linux и Unix можно ориентироваться на то, что формат вызовов команд из консоли, формат возвращаемых кодов, а также того, что выводится в стандартный вывод и поток ошибок будет схожим именно для разных клонов?

Речь идёт о таких командах, как: ls, chmod, mkdir, scp, rsync, chown, ssh.

Дело в том, что предлагают архитектуру распределённой системы, которая будет работать только на сети распределённых Linux/Unix машин, построить только на вызовах внешних, по отношению к программе команд. Вот и хочет понять, насколько это реальный или тупиковый путь.

И честно говоря пока вижу, что это тупиковая архитектура системы. С парсингом команд, его изменением и т.п.

ls, chmod - программы проекта GNU, так что они стандартизированы (если конечно не их самопальные аналоги). ssh, scp - сторонние (если я не ошибаюсь), их стандарт ничем не ограничен.

bk_ ★★ ()

Вроде это входит в компетенцию POSIX, не?

nnz ★★★★ ()
Ответ на: комментарий от bk_

> ls, chmod - программы проекта GNU, так что они стандартизированы

4.2

Они появились задолго до GNU. Что, впрочем, тоже не гарантирует, что они стандартизированы.

melkor217 ★★★★★ ()

Скорее всего, команды из GNU coreutils будут и других UNIX-подобных системах. Только ним все, кому не лень, пристраивают всякие фичи и опции, так что, стандартизированного в них немного )

melkor217 ★★★★★ ()

>ls, chmod, mkdir, chown

в разных клонах Linux

Там обычно в качестве базовых утилит стоят gnu coreutils, поэтому они везде одинаковые. Могут быть отличия в разных версиях, но сохраняется очень хорошая обратная совместимость (т.е. только новые фичи в новых версиях).

и Unix

А вот тут уже могут возникнуть проблемы. Некоторые функции у утилит GNU не входят в стандарт POSIX. И некоторые функции в аналогичных утилитах других Unix'ов —— тоже. Поэтому нужно проверять опции на POSIX-совместимость. У утилит GNU обычно есть флаги, которые заставляют их работать в режиме строгой совместимости с POSIX. Ну, бывают еще несовместимости на ровном месте (вроде существовавшей одно время проблемы с длиной имен файлов, передаваемых tar'у в Solaris, и т.п.).

Впрочем, можно попробовать собрать GNU toolchain и на других Unix'ах, и работать с ними. Хотя это получится без проблем только с некоторыми из утилит.

scp, rsync, ssh

Удостоверьтесь, что на машинах используется одна и та же реализация.

proud_anon ★★★★★ ()
Ответ на: комментарий от melkor217

> Они появились задолго до GNU. Что, впрочем, тоже не гарантирует, что они стандартизированы.

Обычно в манах программ GNU расписаны все возможности согласно стандарту POSIX, а отдельным разделом — дополнительные возможности версии GNU. Или не в манах, а в info.

Конкретно по ls, chmod и mkdir: в Gentoo информация о версиях GNU вызывается командой

man 1 имя

и ставится с пакетом sys-apps/coreutils (тянет с http://www.gnu.org/software/coreutils/), а информация о стандарте POSIX — командой

man 1p имя

и ставится с пакетом sys-apps/man-pages-posix (тянет с http://www.kernel.org/doc/man-pages/).

question4 ★★★★★ ()
Ответ на: комментарий от proud_anon

Кроме формата вызова, интересует также обработка вывода команды. Что она скажет и в каком случае, потому что это тоже надо будет парсить и обрабатывать.

Здесь есть хоть какая-то стандартизация?

junixar ()
Ответ на: комментарий от junixar

Что она скажет и в каком случае, потому что это тоже надо будет парсить и обрабатывать.

Вывод может от версии зависеть. Вы хоть объясните в общем, что у вас за задача. В некоторых случаях проще весь нужный код встроить в свое приложение, чем пользоваться сторонними утилитами. Например, при реализации простейшего файлового менеджера проще самому написать функции просмотра директорий, сортировки содержимого по алфавиту и раскраски некоторых файлов по mime. Еще пример: хотите вы убедиться, что ваш процесс запущен в единственном экземпляре, без введения всяких блокировок или введения флагов в разделяемой памяти. Вместо того, чтобы запускать утилиту ps и анализировать ее вывод, проще добавить эту несчастную страничку кода в свое приложение.

Eddy_Em ☆☆☆☆☆ ()

У рсинка емнип только одна реализация, с ним проблем быть не должно.

scp и ssh - это обычно openssh, но всётаки коммерческие юниксы могут выпендриться.

ls, chmod, mkdir, chown - придётся забыть от гнутых опциях, а их много вкусных.

Вообще, разработку такой архитектуры обязательно надо начать с написания теста, проверяющего всё-всё-всё, что понадобиться и не использовать неоттестированные возможности, иначе отладка растянется надолго. И самому пересесть на коммерческий юникс.

legolegs ★★★★★ ()
Ответ на: комментарий от junixar

> Здесь есть хоть какая-то стандартизация?

да, для многих утилит susv3 специфицирует и формат вывода.

Нужно учитывать влияние локали. Лучше всего в скрипте сразу ставить локаль C, иначе могут быть очень неожиданные сюрпризы.

dilmah ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.