В прошлом все было не так.

В прошлом все было не так.

Вдругая темаЯ самоуверенно утверждал, что любая программа [которая не является частью пользовательского интерфейса ОС, например, оболочка] с именами типа exit, testили helpглупа. Я имел в виду, что такие общие имена должны быть зарезервированы для пользовательского интерфейса верхнего уровня, обычно командной оболочки или основной утилиты ОС.

Пользователь schily заметил, что helpэто команда системы контроля версий sccs, которая является неотъемлемой частью Unix с 70-х годов. sccs на самом делевключено в Единую спецификацию Unix.

Онлайн-документация sccs кажется неоднозначной. Большинство страниц перечисляют helpкак подкоманду sccs, вызываемую как sccs help <topic>. Затем идет/usr/bin/sccshelpкоманда. Нодругая страницадействительно перечисляет выделенный /usr/ccs/bin/help.

Я предполагаю, что для пользователей sccs /usr/ccs/bin/это будет в пути, который helpбыл частью многих установок Unix в течение 40 лет 1. В этом случае я бы утверждал, что даже если выбор имени команды прискорбен, sccs будет иметь приоритет, а bash должен был вызвать встроенную bash-help или что-то подобное.

Так было ли принято иметь команду ( sccs) helpв вашем пути?


1 Это звучит странно.

решение1

В прошлом все было не так.

Вы принимаете несколько несовершенную современную модель, которая не была актуальна в то время.

Но я улыбнулся и сказал: «Не волнуйся, я тебя обучу. Первая команда, которую ты выучишь, это HELP«» и начал вводить ее на консольном терминале. Так что менеджер центра обработки данных, начальник смены и операторы восьмидневной смены наблюдали, как LA100 жужжит обычный вступительный текст. Когда он закончил, они повернулись ко мне с выжидающими лицами, и я сказал добродушным тоном: «Это твоя самая важная команда!»

Начальник смены вышел вперед и изучал текст около минуты. Затем он повернулся с очень озадаченным выражением лица и спросил: «Для чего вы его используете?» Вздох.

— Майк О'Брайен (Аэрокосмическая корпорация) <neat.ai.toronto.edu!pyramid!verdix!ogccse!tektronix!aerospace.aero.org!sequent!aero!obrien> через <[email protected]> (1 марта 1989 г.).VAXen, дети мои, просто не место в некоторых местах. реком.юмор.смешной.

Довольно известно, что Unix не поставлялся с простой командой help для новичков. Это была дыра (часто обсуждаемая на форумах онлайн-дискуссий), которая была заполнена не один раз, авторами оболочки Bourne Again, а несколько раз. Mortice-Kern предоставил команду, helpкоторая искала doco для печати из с helpfileпомощью helpindex. AT&T System 5 Release 3.2 helpтоже имела команду, например:

$ помощь
help:Онлайн-справка по системе UNIX

        Описание выбора
                s стартер: общая информация
                l locate:найти команду с ключевым словом
                u использование: информация о команде
                g глоссарий: определение терминов
                r перенаправить на файл или команду
                q Выйти
       Введите выбор

То, что это было в AT&T Unix, скорее ставит крест на идее, что замена именованной команды SCCS helpнезаконна или что авторы оболочки Bourne Again были не в ногу. Но это еще не все.

От нас ожидалось, чтона самом деле используют PATH.

# PATH устанавливает начальную переменную PATH оболочки
#
#PATH=/usr/bin:/etc:/bin:/boot/grub:/boot/grup/bin:/boot/solaris/bin:/sbin:\
/usr/openwin/bin:/usr/5bin://usr/X11/bin:/usr/apache/bin:/usr/apache2/bin:\
/usr/appserver/bin:/usr/ccs/bin:/usr/dt/bin:/usr/j2se/bin:usr/local/bin:\
/usr/oasys/bin:/usr/pgadmin3/bin:/usr/proc/bin:/usr/sadm/bin:\
/usr/sadm/admin/bin:/usr/sadm/sysadm/bin:/usr/sbin:/usr/sfw/bin:\
/usr/sfw/i386-sun-solaris2.10/bin:/usr/sfw/sbin:/usr/snadm/bin:\
/usr/sunvts/bin:/usr/ucb:/usr/ucb:/usr/vmsys/bin:/usr/xpg4/bin:\
/usr/xpg6/bin
login.dfl. Sun Microsystems, Inc.. 2004-06-25.

Одна из частей современной модели заключается в том, что все собирается в одном гигантском каталоге, будь тоДэниел Дж. Бернстайн/commandили Arch Linux /usr/bin. Это, конечно, вызывает все эти головные боли с разными именами команд fastboot(которые в других моделях различались бы по нахождению в bin/и sbin/). Но тогда это была не та модель.

Модель затем иллюстрируется следующим образом:несколько вариантов команды ls, которые я обсуждали такими вопросами, как "Скрипт Nexenta bash использует /usr/sun/bin/sed вместо /usr/bin/sed". Естьвесь грузкаталогов команд и то, какое подмножество из них будет указано в значении PATHпеременной среды и в каком порядке, определяетиндивидуальность операционной системычто человек видит.

Путь поиска команд может включать (и в некоторой степени может включать) такие вещи, как:

  • /binи /usr/bin/— традиционные, предшествующие формальной стандартизации, общие наборы инструментов; с точки зрения постформальной стандартизации, команды, которые соответствуютОпределение интерфейса System VиРуководство по переносимости X/Openверсия 3
  • /sbinи /usr/sbin/— инструменты системного администрирования
  • /etc/и /usr/etc/— больше инструментов системного администрирования (да, Вирджиния, исполняемые файлы когда-то входили в /etc/.)
  • /5binи /usr/5bin/— каталог совместимости System V (ie 5) с инструментами AT&T Unix System 5, совместимыми с
  • /usr/ucb/— Каталог совместимости с UCB (т.е. BSD) с инструментами, совместимыми с BSD
  • /usr/mbin//usr/bin— варианты инструментов , поддерживающие многобайтовые наборы символов
  • /usr/rbin/— инструменты, доступные администратором некоторым «ограниченным» оболочкам
  • /usr/lbin/— локально устанавливаемые инструменты, предшественники/usr/local/bin/
  • /usr/amdahl/bin/и /usr/sun/bin/— инструменты поставщика операционной системы, в более общем смысле принимающие форму и из которых можно провести параллель/usr/${OEM}/bin/usr/local/bin
  • /usr/games/— игры
  • /usr/ccs/bin— различные инструменты разработчика, как вы заметили
  • /usr/xpg4/bin/— каталог с командами, которые ведут себя способами, предписаннымиРуководство по переносимости X/Openвыпуск 4
  • /usr/xpg6/bin/— каталог с командами, которые ведут себя способами, предписанными условнымРуководство по переносимости X/Openвыпуск 6, более известный как POSIX.1:2001 илиЕдиная спецификация Unixверсия 3
  • /opt/sfw/bin/— создан путем установки компакт-диска дополнительных утилит от Sun, теперь известного какКомпакт-диск SunFreeware Companion
  • /opt/csw/bin/OpenCSWи инструменты Blastwave
  • /opt/SUNWspro/bin/— команды из набора инструментов Sun Workshop (теперь известного как Oracle Developer Studio), SUNWпредставляющие собой (оригинальный) биржевой код Sun и sproобозначающие старое название продукта SunPro
  • /usr/local/bin/— материалы, предоставленные третьими лицами, которые не используют /optподкаталоги или CSW

Операционные системы Sun/Oracle и их производные с открытым исходным кодом на пике своей карьеры были, пожалуй, самыми экстремальными примерами таких операционных систем с множественной личностью. (С тех пор Oracle удалила несколько из этих каталогов, включая /usr/ucbи /usr/ccs.) Но некоторые из вышеперечисленных каталогов взяты из AIX и других. /usr/amdahl/binНапример, из UTS.

То, какую программу запускать из заданного имени команды, зависело от того, какую личность выбирали. Идея о том, что для любого заданного имени команды должна быть только одна программа, была глупой. В конце концов, дифференциация команд с одинаковыми именами была тем, что PATHбылодля.

Понятия строгого старшинства не существовало.

Многие команды жили и умирали довольно быстро. Билл Джой создал iulкоманду как предшественник ul, например. У BSD тоже когда-то была greekкоманда.

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

Для начала,sh самбыли по-разному оболочками Thompson, Mashey, Bourne и Korn в течение десятилетия с небольшим. Идея о том, что внешняя ifкоманда оболочки Thompson не позволяла оболочке Bourne иметь ifключевое слово, была, конечно, смехотворной.

Обратите внимание, что механизм оболочки AT&T Korn (после 2005 г., ksh93q) для включения дополнительных встроенных команд, включение в /opt/ast/binзначение PATH, поддерживает идею о том, что встроенные команды могут вытеснять внешние команды с такими же именами.исвязана с идеей, что от человека ожидают использования PATHдля контроля личности. ( astкстати, это расшифровывается как AT&T Software Technology).

дальнейшее чтение

  • Американская телефонная и телеграфная компания. «Основы для пользователей системы UNIX: команда help».Unix System V, версия 3.2: руководство пользователя. Prentice-Hall. 1989. стр. 2–23 и далее.
  • Дэвид Фидлер, Брюс Х. Хантер, Стивен Г. Кочан и Патрик Х. Вуд (1986). « /usr— Таинственный справочник».Администрирование систем UNIX. Hayden Book Company, ISBN 9780810462892. стр. 54 и далее.
  • XPG.Стандарты, среды и макросы. Страницы руководства Oracle Solaris. Oracle. 2014.
  • XPG4.Стандарты, среды и макросы. Страницы руководства SunOS. Oracle. 2004.
  • Майкл Р. Олт (1996). Спутник системного администратора UNIX. Wiley. ISBN 9780471111443.
  • if.Руководства. Проект Etsh.
  • Странность в скрипте оболочки ksh93 («команда -p mkdir t» не выполняется)
  • https://news.ycombinator.com/item?id=7278408
  • Джонатан де Бойн Поллард (2017).Улучшенная страница руководства дляul. Предложения.

решение2

В PWB/UNIX и System III была /usr/bin/helpподдержка SCCS, в основном для сообщений об ошибках SCCS, хотя это былорасширяемыйа отдельные сайты могли бы добавлять справку по другим командам или сообщениям об ошибках.

помощь(1)из Системы III:

.SH NAME
help \- ask for help
.SH SYNOPSIS
.B help
[\^args\^]
.SH DESCRIPTION
.I Help\^
finds information to explain a message from a command or explain the use of
a command.
Zero or more arguments may be supplied.
If no arguments are given,
.I help\^
will prompt for one.
.PP
The arguments may be either
message numbers (which normally appear in parentheses following messages)
or command names,
of one of the following types:
.PP
.RE 
.RS 10
.TP 10
type 1
Begins with non-numerics, ends in numerics.
The non-numeric prefix is usually an abbreviation for the program or
set of routines which produced the message
(e.g., \fBge6\fP, for message 6 from the
.I get\^
command).
...
.SH FILES
.PP
.TP 20
/usr/lib/help
directory containing files of message text.

и заканчивая восхитительно самореферентным

.SH DIAGNOSTICS
Use
.IR help (1)
for explanations.

/usr/src/cmd/sccs/sccs.mkбыло следующее:

INSDIR = /usr/bin
#   Directory where executable SCCS commands are stored

help:   help.o $(LIBDIR)/comobj.a
    $(CC) $(LDFLAGS) -o help help.o $(LIBDIR)/comobj.a $(LIBES)
    cp $(TESTDIR)/help $(INSDIR)


HELPDIR = help.d
#   Directory containing SCCS help files.
PUB_HELPLIB = /usr/lib/help
#   Public directory where help files are stored.

helpfiles:
    -mkdir $(PUB_HELPLIB)
    cp $(HELPDIR)/ad $(PUB_HELPLIB)/ad
    cp $(HELPDIR)/bd $(PUB_HELPLIB)/bd
    ...

решение3

SCCS был написан еще в 1972 году (то есть SCCS сегодня исполнилось 46 лет), но трудно найти информацию о SCCS до версии 4.0, которая была опубликована 18 февраля 1977 года. Версия SCCS 4.0 определенно включала эту helpкоманду. Более старые версии SCCS использовали двоичный формат файла истории, который несовместим с текущей SCCS.

bashПрежде чем я напишу больше о SCCS, позвольте мне дать краткую информацию :

bashнеудобная для пользователя оболочка, поскольку она реализует множество глупых встроенных функций вместо реализации ksh93метода для встроенных функций, которые не перечислены в стандарте. ksh93реализует встроенную функцию с именем builtin, которая позволяет настроитьпуть поискадля встроенных. Основная проблема с такими тупыми встроенными функциями заключается в том, что они находятся с максимальным предпочтением и не могут быть легко деактивированы. Однако расширенные встроенные функции ksh93 обычно вообще не находятся по умолчанию, поскольку они требуют от пользователя настройки, PATHкоторая включает/usr/ast/bin.

Вернемся к SCCSповедению UNIX:

Любой разработчик на UNIX обычно имеет/usr/ccs/binв его PATHкакccsозначает что-то похожее наСистема компиляции C. В этом каталоге хранятся такие программы, какcc, as, size, strip, nm, m4, make, SCCS, yacc...

/usr/bin/sccshelpбыло введено Oracle при попытке сделать Solaris похожим на Linux, и многим пользователям UNIX это изменение не понравилось.

Если вы хотите ознакомиться с официальной онлайн-документацией по SCCS, я рекомендую вам ознакомиться со следующими ссылками:

http://sccs.sourceforge.net/

в особенности:http://sccs.sourceforge.net/man/index.html

За последние 12 лет он был существенно переписан, и, кстати, с тех пор я являюсь его сопровождающим.

В то время как оригинальная подсистема SCCS была написана Марком Дж. Рохкиндом из AT&T, Эрик Оллман из BSD написалкоманда sccsв 1980 году и упростили использование SCCS.

Так что если вы живете в мире AT&T, все команды находятся в/usr/ccs/binв то время как во вселенной BSD вы вызываетеsccs <subcommand>

Отвечая на ваш вопрос:да, это было/является обычным делом для разработчиков иметь команду sccs help в PATHдаже несмотря на то, что команда интерфейса SCCS sccsтипична в/usr/bin

Связанный контент