Как работает команда 'ls' в Linux / Unix? - PullRequest
13 голосов
/ 15 октября 2008

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

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

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

Ответы [ 5 ]

38 голосов
/ 15 октября 2008

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

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

10 голосов
/ 15 октября 2008

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

4 голосов
/ 28 октября 2008

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

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

truss -afl -o ls.out / bin / ls

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

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

3 голосов
/ 01 ноября 2008

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

Я особенно рекомендую источник 4.4BSD.

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

0 голосов
/ 18 декабря 2011

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

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

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

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

...