Как мне прочитать исходный код команд оболочки?

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

Я нашел несколько команд здесь http://directory.fsf.org/wiki/GNU. К сожалению, я не смог найти базовые команды, такие как "ls", которые мне кажутся достаточно простыми для начала.

Как именно я могу прочитать исходный код простых команд оболочки, таких как 'ls'? Я работаю на Ubuntu 12.04

Ответ 1

Все эти основные команды являются частью пакета coreutils.

Здесь вы можете найти всю необходимую информацию:

http://www.gnu.org/software/coreutils/

Если вы хотите загрузить последний источник, вы должны использовать git:

git clone git://git.sv.gnu.org/coreutils

Чтобы установить git на ваш компьютер Ubuntu, вы должны использовать apt-get (git не входит в стандартную установку Ubuntu):

sudo apt-get install git

По правде говоря, здесь вы можете найти конкретный источник для команды ls:

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

Только 4984 строк кода для команды "достаточно легко" как ls... вы все еще заинтересованы в ее чтении? Удачи!: D

Ответ 2

Прямые ссылки на источник для некоторых популярных программ в coreutils:

  • cat (767 строк)
  • chmod (570 строк)
  • cp (2912 строк)
  • cut (831 строка)
  • date (570 строк)
  • df (1718 строк)
  • du (1112 строк)
  • echo (272 строки)
  • head (1070 строк)
  • hostname (116 строк)
  • kill (312 строки)
  • ln (651 строка)
  • ls (4954 строки)
  • md5sum (878 строк)
  • mkdir (306 строк)
  • mv (512 строк)
  • nice (220 строк)
  • pwd (394 строки)
  • rm (356 строк)
  • rmdir (252 строки)
  • shred (1325 строк)
  • tail (2301 строк)
  • tee (220 строк)
  • touch (437 строк)
  • wc (801 строк)
  • whoami (91 строка)

Полный список здесь.

Ответ 3

ls является частью coreutils. Вы можете получить его с помощью git:

git clone git://git.sv.gnu.org/coreutils

Вы найдете coreutils, перечисленные с другими пакетами (прокрутите вниз) на на этой странице.

Ответ 4

На самом деле более зрелые источники предоставляются http://suckless.org в своем репозитории sbase:

git clone git://git.suckless.org/sbase

Они более ясны, умнее, проще и непритязательны, например ls.c имеет всего 369 LOC

После этого будет проще понять более сложный код GNU.

Ответ 5

Посетите, например:

http://ftp.gnu.org/pub/gnu/coreutils/

Вы можете просматривать код онлайн. Откройте один из архивов и проверьте папку src.

Ответ 6

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

Он основан на Gnulib с фактическим исходным кодом в Lib-подкаталога

Ответ 8

Вы можете получить его на GitHub с помощью команды

git clone https://github.com/coreutils/coreutils.git

Вы можете найти все исходные коды в папке src.

Вам нужно установить git.

С 2012 года все изменилось, исходный код ls теперь содержит 5309 строк.

Ответ 9

    cd ~ && apt-get source coreutils && ls -d coreutils*     

Вы должны иметь возможность использовать такую ​​команду на ubuntu для сбора источника для пакета, вы можете опустить sudo при условии, что вы загрузите его в свое местоположение.