ls背后发生了什么 Down the 'ls' Rabbit Hole - - 博客频道 - CSDN.NET
Too often sysadmins are afraid to dive into the source code of our core utilities to see how they really work. We're happy to edit our scripts but we don't do the same with our command line utilities, libraries, and kernel. Today we're going to do some source diving in those core components. We'll answer the age-old interview question, "What happens when you type ls
at the command line and press enter?" The answer to this question has infinite depth, so I'll leave out some detail, but I'll capture the essence of what is going, and I'll show the source in each component as we go. The pedants in the crowd may find much to gripe about but hopefully they'll do so by posting further detail in the comments.
REQUIREMENTS
It'll be helpful if you install the source on your machine for the software we'll be looking at. Below are the commands I used to get the source for the needed packages on Ubuntu 9.10, and similar packages are available for your Linux distribution.
apt-get install linux-source apt-get source coreutils apt-get source bash apt-get source libc6 apt-get install manpages-dev
I'm using linux-source
version 2.6.31.22.35
, coreutils
(for the code to ls
) version7.4-2ubuntu1
, bash
version 3.5.21
, and libc6
version 2.10.1-0ubuntu18
, and finallymanpages-dev
to get the programmer's man
pages.
STARTING OUT - STRACE
& BASH
One of the most useful tools in the sysadmin's arsenal is strace
, a command that will show you most of the standard library and system calls a program makes while it executes. We'll use this tool extensively to figure out what code we are looking for in each component.
Let's start by strace
'ing bash
when it runs ls
. To do so, we'll start a new instance ofbash
under strace
. Note that I'll be cutting the output of strace
down a lot in the post for readability.
Read full article from ls背后发生了什么 Down the 'ls' Rabbit Hole - - 博客频道 - CSDN.NET
No comments:
Post a Comment