Вопрос

Я хотел бы точно знать, как работает команда «Is» в Linux и Unix.

Насколько я знаю, ls выполняет разветвление и exec для оболочки Linux/Unix, а затем получает выходные данные (текущего дерева файлов.например/home/ankit/).Мне нужно более подробное объяснение, так как я не уверен, что происходит после вызова fork.

Может ли кто-нибудь подробно объяснить функциональность команды «ls»?

Это было полезно?

Решение

ls не разветвляется.Оболочка разветвляется и выполняется для запуска любой не встроенной команды, и одна из команд, которую она может выполнять, — ls.

ls использует opendir() и readdir() для обхода всех файлов в каталоге.Если ему требуется дополнительная информация об одном из них, он вызывает stat().

Другие советы

В дополнение к ответу в книге «Язык программирования C» (K&RC) они привели небольшой пример того, как реализовать ls.Они очень хорошо объяснили используемые структуры данных и функции.

Чтобы понять, что делает ls, вы можете взглянуть на исходный код OpenSolaris: https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c.

Если это вас утомляет, в Solaris вы начинаете с использования truss, чтобы просмотреть системные вызовы, которые выполняет ls, и понять, что он делает.Используя ферму, попробуйте:

ферма -afl -o ls.out /bin/ls

затем посмотрите вывод в ls.out

Я считаю, что трассировка эквивалентна ферме в Linux.

Если вы действительно хотите понять детальное устройство ls, посмотрите исходный код.Вы можете перейти по ссылке tpgould на исходный код Solaris или легко найти исходный код в Интернете в любом дистрибутиве Linux или BSD.

Я особенно рекомендую исходный код 4.4BSD.

Насколько я помню, ls начинается с анализа множества параметров, а затем начинается с файлов или каталогов, перечисленных в командной строке (по умолчанию — «.»).Подкаталоги обрабатываются путем рекурсии в процедуру списка каталогов.Я не помню никаких fork() или exec().

Это старая ветка, но я все равно комментирую, потому что считаю, что ответ, за который проголосовали и который был принят, частично неверен.@Mark говорит, что ls встроен в оболочку, поэтому оболочка не выполняется и не разветвляется.Когда я изучал документ TLDP на Bash (я прикрепил ссылку) »лс" не указан как встроенная команда.

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_01_03.html

Встроенные команды Bash:

псевдоним, привязка, встроенная, команда, объявление, эхо, включение, помощь, пусть, локальный, выход из системы, printf, чтение, покупка, тип, набор текста, ulimit и unalias.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top