Як прочитати вихідний код команд оболонки?


158

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

Я знайшов тут деякі команди http://directory.fsf.org/wiki/GNU . На жаль, я не зміг знайти основні команди, такі як 'ls', що мені здається досить легким для початку.

Як саме я читаю вихідний код простих команд оболонки типу "ls"? Я працюю на Ubuntu 12.04


1
Відвідайте, наприклад: ftp.gnu.org/pub/gnu/coreutils Код можна переглядати в Інтернеті. Відкрийте один з архівів і перевірте, чи папка src.
Хайле

Привіт, я теж знаходжу утиліти, це util-linux. Ви можете знайти його тут
акгент

1
lsне є частиною Linux, це частиною Gnu. Gnu працює на Linux та інших ядрах.
ctrl-alt-delor

3
Я вважаю інтерфейс github простішим для читання коду, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Відповіді:


168

Усі ці основні команди є частиною 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
О БОЖЕ МІЙ! Я подумав, що це трохи простіше ... Ну шлях довший і
важший,

21
Спробуйте джерело дляcat . Всього 767 рядків.
Дрю Ноакс

3
Only 4984 code lines ...- Здається, за 4 роки і 3 місяці lsстало ще 57 рядків складнішими.
sherrellbc

3
Я пам'ятаю, як одного разу я намагався зрозуміти, чому wcце набагато швидше, ніж еквівалентна програма Java. Тому я подивився на код ... OMG оптимізовано для читання дисків, буферизації входів тощо тощо
yǝsʞǝla

@ yǝsʞǝlA Я не знаю С; як ти скажеш, для чого це оптимізується? Чи можете ви надати мені приклад?
Абдул

127

Прямі посилання на джерело для деяких популярних програм у 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 рядок)

Повний список тут.


4
Дякуємо, що перерахували кількість рядків. :)
Gowtham Gopalakrishnan

У вас є su?
Аарон Ісав

@Drew, чи маєте ви уявлення, чи є команди оболонки, написані насправді в скрипті оболонки?
Рафаель


5

Насправді більше розумних джерел надає http://suckless.org, перегляньте їх sbaseсховище:

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

Вони чіткіші, розумніші, простіші і безрезультатні, наприклад ls.c, усього 369 LOC

Після цього буде простіше зрозуміти складніший код GNU.


1

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

Він побудований на Gnulib з фактичним вихідним кодом у підкаталозі lib


1

Ви можете мати його на github за допомогою команди

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

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

Потрібно встановити git .

Все змінилося з 2012 року, lsвихідний код наразі нараховує 5309 рядків


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

Ви повинні мати можливість використовувати таку команду на ubuntu, щоб зібрати джерело для пакету, ви можете опустити sudoприпущення, що ви завантажуєте його у місце, де ви є власником.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.