Каковы отношения между кодом командной строки и высокоуровневым кодом языка?

[118351] № [12403]/etc/vfstab[12404] используется [119020]Solaris[119021], но он специфичен для всех [119022]SVR4[119023] систем.[12405] Это эквивалент [119024]UNIX-es/Linux/*BSD [119557]/etc/fstab[12406]. На самом деле, в старой [119026]SunOS[119027] 4.x также использовалась [119028]/etc/fstab[119029].[12407]Вот небольшой список известных эквивалентов для [119030]/etc/fstab[119031], используемых другими проприетарными операционными системами:[12408]IBM AIX[119560] (3.x и 4.x): [119561]/etc/filesystems[12409]HP-UX[119564] (до 9.x): [119565]/etc/checklist[12410]Solaris[119568] (начиная с 2.x): [119569]/etc/vfstab[12411]Sco Unix[119572]: [119573]/etc/vfstab[12412]Edit[119041]: исправление ответа в связи с основным вопросом (идентификация ОС).[118360]: [119569]/etc/vfstab[12412]Edit[119041]: исправление ответа в связи с основным вопросом (идентификация ОС).
1
14.08.2014, 01:13
2 ответа

Вы правы, говоря, что, открывая терминал, вы используете оболочку. Основная задача оболочки - помочь вам запустить исполняемые программы.

Так что же такое исполняемый файл? Введите ls и нажмите return. Он должен распечатать файлы в текущем каталоге. Теперь похоже, что оболочка запускает какую-то встроенную команду под названием ls , верно? Неправильный! Фактически он создает новый процесс Linux , который запускает исполняемую программу / usr / bin / ls .

Так почему он записал список файлов в оболочку? Программа ls ничего не знает о оболочке. Фактически, он понятия не имеет, куда он собирается писать. Программист заставил программу записать список во что-то, называемое стандартным выходом . Затем оболочка использовала уловку Linux под названием pipe , чтобы распечатать список на терминал.

Интересно, что оболочка также может заставить этот стандарт распространяться и в других местах. Например, при вводе ls> /tmp/ls.out печать на терминал не выполняется. Фактически он отправляет список в файл в каталоге / tmp . Что еще интереснее, набрав ls | less заставляет оболочку запускать программу ls , а также программу less и направляет стандарт из из ls в стандарт в из минус . Ни одна из этих программ ничего не знала о оболочке, и, фактически, оболочка не знала о том, как работают программы: если программа была написана стандартным способом, все будет просто работать.

Теперь перейдем к случаю node.js . Опять же, оболочка только что запустила программу node.js . Если вы не укажете аргументы, эта программа попытается прочитать из стандарта в точно так же, как less . Поскольку вы ничего не передавали по конвейеру, оболочка просто подключила клавиатуру, так что все, что вы набираете, отправляется на узел . Оболочка также подключила стандартный выход к терминалу, так что все, что пишет узел , отправляется на терминал, как мы видели ls . В результате создается впечатление, что оболочка теперь понимает JavaScript, но не так. Он действительно просто понимает выполнение программ и перенаправление ввода / вывода (по крайней мере, в этом случае). JS выполняет узел .

1
27.01.2020, 23:17

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

Изучить немного ассемблерного языка - не так много, просто достаточно, чтобы написать подпрограмму с добавлением чисел. Смотреть - это сделать свое дело, пройдя через него в отладчике. Узнайте, что указатели - это не более чем машинные адреса, а строка - это действительно последовательность ячеек памяти, завершенных ячейкой с 0 в ней (оговорка: в некоторых языках).

Как только вы это знаете, помня об этом, когда вы пишете на языках более высокого уровня, вы можете сделать лучшее, что вы можете сделать, чтобы получить целостный образ всей системы. Вы сразу поймете, почему некоторые вещи медленнее других и почему другим требуется больше памяти.

Как только вы поймете языки программирования, взгляните на реализацию в командной оболочке . Опять же, ненадолго, просто чтобы увидеть, что это программа, как и другие программы, только ее вход и выход - это другие команды . Посмотрите, как она разбирает командную строку, и в конце концов вы 'поймете', почему имена файлов с пробелами в них вызывают столько хлопот.

Дополнительно загляните внутрь современного системного демона и посмотрите, как он использует скрипты оболочки, программы и системные вызовы для достижения чего-то (Постарайтесь не быть слишком шокированы тем, как это все выглядит шатко)

Все это требует времени, но я твердо убежден, что вы не можете получить наполовину полезное впечатление о такой сложной системе, как современный компьютер, не вложив в это значительное время. Гораздо чаще можно отказаться от наполовину неправильной, вводящей в заблуждение модели мышления (спросите любого, кто хоть один день работал в техподдержке). Также маловероятно, что вы когда-нибудь поймете все, что находится в стеке, но ничего страшного - никто не понимает весь стек, используемый сегодня для вычислений. Человеческий мозг слишком медленный и слишком ценный, чтобы попробовать подобный трюк.

4
27.01.2020, 23:17

Теги

Похожие вопросы