Re: How does "ls" command work in Linux in detail?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



System calls are what make everything possible in user space,
processes themselves depend on kernel for everything from file
handling to memory allocation etc.

To understand system calls, the following article is very useful:
http://www.ibm.com/developerworks/linux/library/l-system-calls/

Also robert love's book goes a long way in documenting system calls
and their usage:
http://oreilly.com/catalog/9780596009588

and, the glibc manual ofcourse:
http://www.gnu.org/software/libc/manual/

As a note, Many system calls are wrapped by the GNU C library at a
higher level so the calls being made such as printf are not always the
same as the actual system calls being made (say read/write for
example) - kernel doesn't know and doesn't care about printf!

Regards,
Joel


On Thu, Dec 3, 2009 at 1:38 PM, Daniel (Youngwhan) Song
<breadncup@xxxxxxxxx> wrote:
> Thanks, Manish,
>
> It is great useful to know system call and the library's role in linux.
>
> Thanks!
>
> Best Regards,
> Daniel (Youngwhan) Song
>
>
>
> On Wed, Dec 2, 2009 at 9:15 PM, Manish Katiyar <mkatiyar@xxxxxxxxx> wrote:
>>
>> On Thu, Dec 3, 2009 at 10:23 AM, Daniel (Youngwhan) Song
>> <breadncup@xxxxxxxxx> wrote:
>> > Thanks, Greg and Manish,
>> >
>> > What I am trying to understand is not only for "ls" itself. I just
>> > wanted to
>> > know how general command such like "ps", "top", or something like that
>> > works
>> > in linux. Also, I wanted to know the path from user-level application to
>> > how
>> > it accesses to kernel resources.
>> >
>> > I guess I could understand roughly about the mechanism of an application
>> > in
>> > linux, but I feel to study more. If you know some resources I need to
>> > dig
>> > into and share of it, it would be great helpful to me.
>>
>> Hi Daniel,
>>
>> Then you would need to learn about system calls and do google search
>> about how they work. Each of the unix commands call some set of system
>> calls underneath which actually does the job in kernel space. What you
>> see in the output of strace are the system calls made to kernel.
>>
>> searching for "system calls" in google will give you plethora of results.
>>
>> HTH
>>
>> >
>> > Thanks,
>> >
>> > Best Regards,
>> > Daniel (Youngwhan) Song
>> >
>> >
>> >
>> > On Wed, Dec 2, 2009 at 8:36 PM, Manish Katiyar <mkatiyar@xxxxxxxxx>
>> > wrote:
>> >>
>> >> On Thu, Dec 3, 2009 at 9:18 AM, Daniel (Youngwhan) Song
>> >> <breadncup@xxxxxxxxx> wrote:
>> >> > Thanks, krushnaal and Greg,
>> >> >
>> >> > By looking at the Greg's strace, it gives me great insight of the
>> >> > command.
>> >> >
>> >> > So, It looks like it calls a library which can be in glib(?), and the
>> >> > library actually calls kernel device drivers like console or
>> >> > something
>> >> > like
>> >> > that, and they were communicating each other back and forth, and
>> >> > finally, it
>> >> > outputs the result of "ls" onto the screen. Is my understanding
>> >> > correct?
>> >>
>> >> Actually what you have told is true for any command and is not limited
>> >> to "ls". If you want to know how ls works you will need to understand
>> >> a little about how files are stored on disk and how they are indexed.
>> >> And then you can try to read about readdir(), opendir(),stat() system
>> >> calls and finally implement your own "ls" :-)
>> >>
>> >>
>> >> >
>> >> > Best Regards,
>> >> > Daniel (Youngwhan) Song
>> >> >
>> >> >
>> >> >
>> >> > On Wed, Dec 2, 2009 at 7:41 PM, Greg Freemyer
>> >> > <greg.freemyer@xxxxxxxxx>
>> >> > wrote:
>> >> >>
>> >> >> On Wed, Dec 2, 2009 at 9:12 PM, Daniel (Youngwhan) Song
>> >> >> <breadncup@xxxxxxxxx> wrote:
>> >> >> > Hi,
>> >> >> >
>> >> >> > Could somebody explain me how exactly "ls" command work in
>> >> >> > Unix/Linux?
>> >> >> >
>> >> >> > When we type "ls" command in linux shell, what does
>> >> >> > process/procedure
>> >> >> > work
>> >> >> > with linux library or linux kernel, and how exactly does it show
>> >> >> > directory
>> >> >> > information to the standard output (1)?
>> >> >> >
>> >> >> > Thanks in advance.
>> >> >> >
>> >> >> > Best Regards,
>> >> >> > Daniel Song
>> >> >> >
>> >> >>
>> >> >> read the source of course, but a very handy shortcut is:
>> >> >>
>> >> >> # strace ls
>> >> >>
>> >> >> The key part with a couple comments is:
>> >> >>
>> >> >> # Get the directory entries
>> >> >> open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
>> >> >> fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)
>> >> >> getdents64(3, /* 53 entries */, 32768)  = 1744
>> >> >> getdents64(3, /* 0 entries */, 32768)   = 0
>> >> >> close(3)                                = 0
>> >> >>
>> >> >> # Verify stdout is a character device
>> >> >> fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
>> >> >>
>> >> >> # map stdin into memory.  (Not sure why, see the source)
>> >> >> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
>> >> >> -1,
>> >> >> 0) = 0xb73ff000
>> >> >>
>> >> >> # write the directory entries to stdout and wrap-up
>> >> >> write(1, "bin  Desktop  Documents  Downloa"..., 91bin  Desktop
>> >> >> Documents  Download  Music  Pictures  Public  public_html  Templates
>> >> >> Videos
>> >> >> ) = 91
>> >> >> close(1)                                = 0
>> >> >> munmap(0xb73ff000, 4096)                = 0
>> >> >> close(2)                                = 0
>> >> >> exit_group(0)                           = ?
>> >> >>
>> >> >> Greg
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Thanks -
>> >> Manish
>> >> ==================================
>> >> [$\*.^ -- I miss being one of them
>> >> ==================================
>> >
>> >
>>
>>
>>
>> --
>> Thanks -
>> Manish
>> ==================================
>> [$\*.^ -- I miss being one of them
>> ==================================
>
>

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux