Unix 실행 파일 열기/읽기 [닫기]

Unix 실행 파일 열기/읽기 [닫기]

Unix 실행 파일을 읽을 수 있는 기본 방법(추가 항목을 설치하거나 다운로드하지 않고)이 있습니까? 파일을 읽어서 내용을 확인하고 그 파일로 무엇을 할 수 있는지 이해하면 됩니다.

제가 정말로 하고 싶은 것은 무선 진단 앱이 무엇을 하는지 이해하는 것입니다.어떻게그게했다. 저는 Mac용 네트워크 진단 응용 프로그램을 직접 구축하려고 합니다. 그래서 무선 진단 응용 프로그램(위치: /System/Library/CoreServices/Applications/Wireless Diagnostics.app)의 내용을 읽고 싶었고 응용 프로그램에서 실행 파일을 찾아서 무엇이든 수집할 수 있는지 확인했습니다. 그것이 내가 없애고 싶은 것입니다.

답변1

쉘 프롬프트에서 실행할 수 있는 명령에 대해 이야기하고 있다면 매뉴얼 페이지가 있어야 합니다:

$ man someprogram

이와 같은 결과가 나오면 No manual entry for fooGNU를 사용해 볼 수 있습니다 info.

$ info someprogram

모든 Unix 및 Unix 계열 운영 체제에 GNU 정보가 있는 것은 아니지만 많은 운영 체제에 GNU 정보가 있으며 일반적으로 man기본 페이지보다 특정 명령에 대한 더 많은 정보를 제공합니다.

명령 이 있고 info명령을 모르는 경우 No menu item 'someprogram' in node '(dir)Top'화면 하단과 같은 내용이 표시됩니다. Q나가기 를 누르 세요 info.

이러한 시스템에서 프로그램은 일반적으로 일부 패키지 관리자가 소유하거나 패키지 관리자에게 프로그램을 요청할 수 있습니다. 예를 들어, 당신이 에 관심이 있고 someprogram해당 명령으로 쉘을 사용하고 있다고 가정하겠습니다 which. 후자를 사용할 수 없는 경우 실행 파일의 경로를 수동으로 제공할 수 있습니다 /usr/bin/someprogram.

RPM 기반 Linux(RHEL, Fedora, CentOS...)

먼저 프로그램이 속한 패키지를 찾으십시오.

$ rpm -qf `which someprogram`
somepackage-1.2.3-4

그런 다음 RPM에 패키지를 요청하십시오.

$ rpm -qi somepackage
Name      : somepackage
Version   : 1.2.3
Release   : 4
...etc...

DEB 기반 Linux(Debian, Ubuntu, Mint...)

이 모드는 RPM과 동일합니다. 먼저 파일 소유자가 누구인지 확인하세요.

$ dpkg -S `which someprogram`
somepackage: /usr/bin/someprogram

그런 다음 패키지 자체에 대해 물어보십시오.

$ dpkg -s somepackage
Package: somepackage
Essential: no
Status: install ok installed
...etc...

맥 OS X

"기본" OS X 패키지 관리자는 모든 목적에 유용하지는 않지만 시도해 볼 가치가 있는 숨겨진 운영 체제 기능입니다. 패턴은 위와 동일합니다.

$ pkgutil --file-info `which someprogram`
volume: /
path: /usr/bin/someprogram
pkgid: com.example.bundles.somepackage
pkg-version: 1.2.3
...etc...

그런 다음 추가 정보를 얻으십시오 somepackage.

$ pkgutil --pkg-info com.example.bundles.somepackage
$ pkgutil --files com.example.bundles.somepackage
...etc...

타사 패키지 관리자 중 하나를 설치한 경우(스스로 만든,맥 포트, 또는펑키 재즈) 자신이 소유한 패키지에 대한 정보를 가져오는 유사한 명령이 있습니다.

이러한 시스템 외부에 설치된 프로그램을 다루고 있다면 아마도 내부 메커니즘을 사용하여 자신에 대한 모든 것을 알려주는 GUI 프로그램을 다루고 있을 것입니다. (상자, 도움말 등에 대해)

FreeBSD

전통적으로 BSD는 공식 패키지 관리자를 사용하지 않았지만 지난 몇 년 동안 FreeBSD는 천천히 사용하는 방향으로 나아갔습니다.pkg, PkgNG라고도 합니다.

또한 위 시스템과 사용 패턴이 동일합니다.

$ pkg which `which someprogram`
/usr/bin/someprogram was installed by package somepackage-1.2.3-4
$ pkg info somepackage
somepackage-1.2.3-4
Name :           somepackage
Version :        1.2.3-4
...etc...

아마도 언젠가는 FreeBSD 시스템에 설치된 대부분의 프로그램이 설치를 통과하게 될 것이지만 pkg, 오늘은 그렇지 않을 것입니다.

프로그램을 통해 설치한 경우포트, 설치된 포트를 확인할 수 있으며 다음을 통해 원하는 것을 얻을 수 있습니다.

 $ cd /usr/ports
 $ ls -d */somepackage
 net/somepackage
 $ cat net/somepackage/pkg-descr

답변2

od -tx1 somefile | less파일의 바이너리(16진수) 덤프를 찾아볼 수 있습니다. 파일에 무엇이 있는지 알려주지만, 물론 사람이 읽을 수 있는 언어로 되어 있지는 않습니다. 일반적으로 바이너리 실행 파일은 사람이 읽을 수 없습니다. 대부분의 사람들은 대본을 읽지도 못합니다.

여러 가지 방법으로 실행 파일에서 정보를 얻을 수 있습니다.

  • file myprogram어떤 유형의 기계에 적합한지 등 어떤 유형의 파일인지 알려줍니다.
  • ./myprogram --help일부 사용 정보가 표시될 수 있습니다. 그러나 이는 프로그램 작성자가 준수할 수도 있고 준수하지 않을 수도 있는 계약이지 의무가 아닙니다. 이것이 유효한 옵션이 아니라고 ./myprogram --help불평하는 경우 , , 또는 인수 없이 프로그램을 실행하는 등의 다른 옵션을 제안할 수 있습니다.--help./myprogram -h./myprogram -help./myprogram -?
  • ldd myprogram, 동적으로 링크된 실행 파일의 경우 로드되는 라이브러리를 알려줍니다.
  • strings myprogram파일의 ASCII 인쇄 가능 문자로 구성된 모든 비트를 나열합니다. 이 모든 것이 의미가 있는 것은 아닙니다. 파일에는 인쇄 가능한 문자인 바이트 시퀀스와 의미 있는 문자열을 구별하는 것이 없기 때문입니다.
  • objdump -d myprogram실행 파일을 분해하거나 적어도 시도해 보세요.

실제로, 기대하는 정보를 얻을 수 있는 마법 같은 방법은 없습니다. ( myprogram --help이 특별한 경우의 출력이 요구 사항을 충족 하지 않는 한) 존재하지 않습니다 . 실행 파일은 사람이 아닌 컴퓨터가 읽을 수 있도록 만들어졌습니다.

관련 정보