Làm cách nào để đọc mã nguồn của các lệnh shell?


158

Tôi muốn đọc mã nguồn thực tế mà các lệnh linux được viết. Tôi đã có được một số kinh nghiệm khi sử dụng chúng và bây giờ tôi nghĩ đã đến lúc tương tác với máy của mình ở mức độ sâu hơn.

Tôi đã tìm thấy một số lệnh ở đây http://directory.fsf.org/wiki/GNU . Thật không may, tôi không thể tìm thấy các lệnh cơ bản như 'ls' mà dường như tôi đủ dễ dàng để bắt đầu.

Làm thế nào chính xác để tôi đọc mã nguồn của các lệnh shell đơn giản như 'ls'? Tôi đang chạy trên Ubuntu 12.04


1
Truy cập ví dụ: ftp.gnu.org/pub/gnu/coreutils Bạn có thể duyệt mã trực tuyến. Mở một trong các tài liệu lưu trữ và kiểm tra thư mục src.
Haile

Xin chào, tôi cũng tìm thấy một tiện ích, đó là linux-linux. Bạn có thể tìm thấy nó ở đây
acgtyrant 16/12/14

1
lskhông phải là một phần của Linux, nó là một phần của Gnu. Gnu chạy trên Linux và các hạt nhân khác.
ctrl-alt-delor

3
Tôi thấy giao diện github dễ đọc mã hơn, github.com/coreutils/coreutils/blob/master/src/ls.c
zyxue

Câu trả lời:


168

Tất cả các lệnh cơ bản này là một phần của coreutilsgói.

Bạn có thể tìm thấy tất cả thông tin bạn cần ở đây:

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

Nếu bạn muốn tải xuống nguồn mới nhất, bạn nên sử dụng git:

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

Để cài đặt git trên máy Ubuntu của bạn, bạn nên sử dụng apt-get (git không được bao gồm trong cài đặt Ubuntu tiêu chuẩn):

sudo apt-get install git

Sự thật được nói, ở đây bạn có thể tìm thấy nguồn cụ thể cho lslệnh:

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

Chỉ 4984 dòng mã cho một lệnh 'đủ dễ dàng' vì ls... bạn vẫn thích đọc nó chứ ?? Chúc may mắn! : D


2
CHÚA ƠI! Tôi nghĩ rằng nó dễ dàng hơn một chút ... Chà con đường dài hơn và khó hơn dự kiến ​​:-)
Luigi Tiburzi

21
Hãy thử nguồn chocat . Chỉ có 767 dòng.
vẽ Noakes

3
Only 4984 code lines ...- Có vẻ như trong 4 năm và 3 tháng lsđã trở thành một dòng 57 phức tạp hơn.
sherrellbc

3
Tôi nhớ một lần tôi đã cố gắng để hiểu tại sao wcnhanh hơn nhiều so với chương trình Java tương đương. Vì vậy, tôi đã xem mã ... OMG có được tối ưu hóa cho việc đọc đĩa, đệm đầu vào, v.v hay không :)
ysla

@ yǝsʞǝlA Tôi không thành thạo C; Làm thế nào để bạn biết những gì nó tối ưu hóa cho? Bạn có thể cho tôi một ví dụ?
Abdul

127

Liên kết trực tiếp đến nguồn cho một số chương trình phổ biến trong coreutils:

Danh sách đầy đủ ở đây.


4
Cảm ơn cho danh sách với số lượng dòng. :)
Gowtham Gopalakrishnan

Bạn có sukhông
Aaron Esau

@Drew, bạn có biết nếu có các lệnh shell thực sự được viết bằng shell script không?
Rafael


5

Trên thực tế, nhiều nguồn lành mạnh hơn được cung cấp bởi http://suckless.org xem tại sbasekho lưu trữ của họ :

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

Chúng rõ ràng hơn, thông minh hơn, đơn giản hơn và không cần thiết, ví dụ như ls.cchỉ có 369 LỘC

Sau đó, sẽ dễ hiểu mã GNU phức tạp hơn.


1

CoreUtils được đề cập trong các bài đăng khác KHÔNG cho thấy việc triển khai thực sự của hầu hết các chức năng mà tôi nghĩ bạn tìm kiếm. Trong hầu hết các trường hợp, nó cung cấp giao diện người dùng cho các chức năng thực tế lấy dữ liệu, có thể tìm thấy ở đây:

Nó được xây dựng dựa trên Gnulib với mã nguồn thực tế trong thư mục con lib


1

Bạn có thể có nó trên github bằng lệnh

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

Bạn có thể tìm thấy tất cả các mã nguồn trong thư mục src.

Bạn cần phải cài đặt git .

Mọi thứ đã thay đổi kể từ năm 2012, lsmã nguồn hiện có 5309 dòng


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

Bạn sẽ có thể sử dụng một lệnh như thế này trên ubfox để thu thập nguồn cho gói, bạn có thể bỏ qua sudogiả định việc tải xuống của bạn đến một vị trí bạn sở hữu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.