gnu coreutils 찾아보는데 재밌네요.

twinwings의 이미지

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

몇 년간 리눅스를 이용하기만 했지 gnu coreutils라는게 있는줄은 부끄럽게도 몰랐습니다.

그냥 막연히 누군가 태초부터 구현해놓은줄 알았습니다. 그리고 GNU도 그걸 그대로 쓰는줄 알았는데..

gnu coreutils는 ls, cp, sync, chroot, chmod 등 시스템의 기본적인 명령어셋을 GNU OS를 위해

직접 구현해놓은 소스코드네요.

sync의 경우 실제 구현 부분이 1줄(...)이네요. 이걸 보기 전까진 sync가 시스템콜인줄도 몰랐습니다.

true같은 경우도 shell에서 처리하는줄 알았는데(cd 처럼), 이것도 아예 구현되어 있었네요.

(명령어의) chroot같은 것도 2개의 시스템콜 chroot()와 execpv()의 조합이고.

--
그리고 ps 같은 명령어도 gnu에서 직접 구현/관리 하는줄 알았는데

Procps - The /proc file system utilities
(http://procps.sourceforge.net/)

프로젝트로 따로 있었군요...

jw8704의 이미지

조언하자면..

리눅스에서 실제 물리적 장치로부터 데이터를 읽거나 쓰거나 하는 작업은 모두 커널안에 있는 함수를 이용하게됩니다.
이용하게되는 과정은 유저레벨에서 시스템 콜을 호출하여 커널내의 함수를 실행하게됩니다.

따라서 유저레벨에 있는 함수는 어떤건 정말 1줄짜리 도 있습니다. 다만 이것은 유저레벨에서 시스템 콜을 호출하기위한것일뿐 실제 어떤 작업을 하지는 않습니다.

하지만 이 유저레벨에 1줄로 정의된 함수가 어떤 시스템 콜을 하는지 알아서 커널내에 정의된 함수로 따라 가서 보면 코드가 매우 길거나 또는 여러단계의 과정을 호출하는 단계로 복잡하게 이뤄져있는것을 알수있습니다.

시스템콜은 방금 언급한 디스크엑세스외에도 다양한 서비스,기능을 위하여 구현되어있고 이것은 리눅스 커널 프로그래밍 , 디바이스 드라이버 프로그래밍 의 기초서적을 찾아보면 알수있습니다.

또한 같은 유저레벨의 프로그램이라도 , 여러개발자가 만든 다양한 버전이있습니다. 그래서 어떤 유저레벨 함수는 1줄 짜리도있지만 , 동일한 다른 버전의 함수는 10줄,100줄인것도있습니다.

유저레벨의 어떤 함수가 단일 버전으로써 존재한다고 생각하지마시고 , 그냥 여러 버전중 하나를 보신것이라고 생각하시면 될 것 같습니다.

그리고 gnu 에서 직접/관리 구현 하는 그런 개념은 없습니다.

다양한 유저레벨 , 커널레벨 개발자들이 개발을 하고 절차를 거쳐서 Commit 되거나 하여 공식적인 패키지화가 되고

업체나 다양한 사람들이 그러한 패키지와 커널을 조합하여 여러가지 이름으로 배포판을 만들어서 내놓는것입니다.

그리고 님같은 Enduser 분들은 그러한 배포판을 사용하게되는것이겠죠.

twinwings의 이미지

말씀하신 사항 다 알고 있는 부분입니다.(커널 2.7x, 3.x 버전의 일부분 뜯어봤습니다.)

그것보다 시스템 유틸리티의 많은 부분을 GNU에서 통합관리한다는 점에서 놀란 것입니다.
ls/cp/chmod와 같은 것들은 Linux가 아닌 Unix 시절부터 있었던 것일테니까요.

Quote:
gnu 에서 직접/관리 구현 하는 그런 개념은 없습니다.

이부분은 틀린 말이라고 생각됩니다.

Quote:
Send general questions or suggestions to the mailing list at: coreutils@gnu.org
Report bugs, including version and distribution variant, to the list at: bug-coreutils@gnu.org
Before sending the bug, please consult the FAQ and Mailing list archives (above).
...
...
If you would like any new feature to be included in future versions of Coreutils, please send a request to coreutils@gnu.org.

코어유틸리티에 대한 질문/제안/버그리폿 모두 GNU에서(를 통해서) 관리하고 있음을 알 수 있습니다.

물론 GNU와 관련 없는 사람이 commit 할 수 있더라도 GNU의 역할을 여기서 빼고 논한다는건 말이 안될 것 같습니다.

jw8704의 이미지

네, 그러셨군요 몰라뵈었네요^^

onion의 이미지

gentoo 를 쓰는 덕분에 어느 명령어(사실은 각 별도의 프로그램이지만) 가 어느 패키지에 소속된다는건 대충은 알고 삽니다만...

그래도 덕분에 온전히 gnu 에서 관리를 하고있다는등의 내용은 꽤 재미있었습니다.

사실 이런게 처음부터 전부 coreutils 라는걸로 묶여 있었던건 아니었죠. 역사로 따지면 비교적 최근입니다.

다른 배포판도 같을지는 모르겠습니다만.... coreutils 와 util-linux 정도면 콘솔기반의 linux 기본 명령은 거의 다 있는게 아닐까 싶네요 :D

-----새벽녘의 흡혈양파-----