How do I read the source code of shell commands?

LinuxCommandGnu Coreutils

Linux Problem Overview


I would like to read the actual source code which the linux commands are written with. I've gained some experience using them and now I think it's time to interact with my machine at a deeper level.

I've found some commands here http://directory.fsf.org/wiki/GNU. Unfortunately I wasn't able to find basic commands such as 'ls' which seems to me easy enough to begin.

How exactly do I read the source code of the simple shell commands like 'ls'? I'm running on Ubuntu 12.04

Linux Solutions


Solution 1 - Linux

All these basic commands are part of the coreutils package.

You can find all information you need here:

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

If you want to download the latest source, you should use git:

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

To install git on your Ubuntu machine, you should use apt-get (git is not included in the standard Ubuntu installation):

sudo apt-get install git

Truth to be told, here you can find specific source for the ls command:

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

Only 4984 code lines for a command 'easy enough' as ls... are you still interested in reading it?? Good luck! :D

Solution 2 - Linux

Direct links to source for some popular programs in coreutils:

Full list here.

Solution 3 - Linux

ls is part of coreutils. You can get it with git :

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

You'll find coreutils listed with other packages (scroll to bottom) on this page.

Solution 4 - Linux

Actually more sane sources are provided by <http://suckless.org> look at their sbase repository:

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

They are clearer, smarter, simpler and suckless, eg ls.c has just 369 LOC

After that it will be easier to understand more complicated GNU code.

Solution 5 - Linux

CoreUtils referred to in other posts does NOT show the real implementation of most of the functionality which I think you seek. In most cases it provides front-ends for the actual functions that retrieve the data, which can be found here:

It is build upon Gnulib with the actual source code in the lib-subdirectory

Solution 6 - Linux

You can have it on github using the command

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

You can find all the source codes in the src folder.

> You need to have git installed.

Things have changed since 2012, ls source code has now 5309 lines

Solution 7 - Linux

BSD distributions are actually a nice way of reading the source code, by using their repositories, since it is all packed into one place, and you can view how historically the source code has evolved, or changed. So why not use BSD repos , such as NetBSD or OpenBSD for this task.

Solution 8 - Linux

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

You should be able to use a command like this on ubuntu to gather the source for a package, you can omit sudo assuming your downloading to a location you own.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLuigi TiburziView Question on Stackoverflow
Solution 1 - LinuxZagoraxView Answer on Stackoverflow
Solution 2 - LinuxDrew NoakesView Answer on Stackoverflow
Solution 3 - LinuxDenys SéguretView Answer on Stackoverflow
Solution 4 - LinuxhurufuView Answer on Stackoverflow
Solution 5 - LinuxslashmaisView Answer on Stackoverflow
Solution 6 - LinuxRMPRView Answer on Stackoverflow
Solution 7 - Linuxmohamad.waelView Answer on Stackoverflow
Solution 8 - LinuxAaron Peter SamuelView Answer on Stackoverflow