Linux 내장 명령의 소스 코드를 보는 방법은 무엇입니까? [복사]

Linux 내장 명령의 소스 코드를 보는 방법은 무엇입니까? [복사]

ping내가 아는 한, grepor 또는 같은 명령을 실행하면 lsLinux 운영 체제는 해당 명령 이름을 찾기 위해 디렉터리를 검색합니다 /bin. 또한 대부분의 Linux 명령이 C로 작성된다는 것도 알고 있습니다.

ping실제 C에서 OR이 어떻게 ls작성되는지 보고 싶었습니다 . 그런데 cat파일을 사용 하면 cat /bin/ping바이너리 형식이기 때문에 가비지 데이터를 뱉어냅니다.

그렇다면 C로 작성된 명령을 볼 수 있는 방법이 있습니까?

답변1

어떤 패키지가 명령을 제공하는지 아는 것이 도움이 됩니다. 예를 들어, 많은(전부는 아님!) Linux 배포판에서 이 ls명령은 GNU 패키지에서 제공됩니다 coreutils. 다음 링크를 통해 이러한 명령의 소스를 찾을 수 있습니다.coreutils 웹 페이지.

ping명령은 패키지에서 제공됩니다 iputils. 소스를 찾을 수 있습니다.여기.


대부분의 배포판은 어떤 패키지가 특정 파일을 소유하는지 확인하는 메커니즘을 제공합니다. 예를 들어 Ubuntu에서는 dpkg-query아래와 같이 사용할 수 있습니다 .

$ dpkg-query -S /bin/ls
coreutils: /bin/ls

Red Hat/Fedora/CentOS/etc에 해당하는 명령은 다음과 같습니다.

$ rpm -qf /bin/ls
coreutils-8.32-33.fc35.x86_64

관심 있는 파일을 제공하는 패키지를 알고 있다면 일반적으로 배포판에서 제공하는 해당 소스 패키지를 찾아 소스 코드를 찾을 수 있습니다. 우분투의 경우 다음을 방문할 수 있습니다.https://packages.ubuntu.com/이름으로 패키지를 찾으면 iputils다음과 같이 됩니다.여기, 패키지를 빌드하는 데 사용된 소스를 다운로드할 수 있는 링크를 찾을 수 있습니다.

Fedora 패키지의 경우 다음을 방문하세요.https://packages.fedoraproject.org/패키지를 검색해 보세요. 이 경우 파일을 읽어야 합니다 spec(예:이것은 iputils에서 가져온 것입니다.) 출처를 어디서 찾을 수 있는지 알아보세요.

Ubuntu 또는 Fedora 이외의 시스템을 사용하는 경우 유사한 메커니즘을 사용할 수 있습니다. 대부분의 배포판은 이름별로 소스 패키지를 다운로드하기 위한 명령줄 도구도 제공합니다.

답변2

라고 말하면 cat /bin/pingC 소스 코드에서 컴파일된 명령의 바이너리 코드를 보려고 하는 것입니다. 이 명령에 대한 C 소스 코드를 찾아야 합니다. 보다쉘 명령의 소스 코드를 읽는 방법은 무엇입니까?더 많은 정보를 알고 싶습니다.

답변3

Linux에서는 다음을 포함하여 바이너리 명령을 분석하는 몇 가지 방법이 있습니다.

  1. 파일, 파일 형식을 결정합니다.
  2. ldd는 공유 객체 종속성을 인쇄합니다.
  3. ltrace, 라이브러리 호출 추적기.
  4. Hexdump는 파일 내용을 ASCII, 10진수, 16진수 또는 8진수로 표시합니다.
  5. 문자열, 인쇄 파일의 인쇄 가능한 문자열입니다.
  6. readelf는 ELF 파일에 대한 정보를 표시합니다.
  7. objdump는 대상 파일의 정보를 표시합니다.
  8. strace는 시스템 호출과 신호를 추적합니다.
  9. nm, 개체 파일의 기호를 나열합니다.
  10. gdb, GNU 디버거.

관련 정보