단일 프로그램 편집 및 재컴파일

단일 프로그램 편집 및 재컴파일
whereis pwd
pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz

바이너리 폴더의 비밀번호

type pwd
pwd is a shell builtin

그렇다면 외부 비밀번호에 대해 몇 가지 실험을 수행하는 것이 무해하지 않을까요? 단지 원리를 보여주기 위해 "Hello Shell!"을 추가하는 것과 같나요?

pwd 출처는 어디인가요? 보통 배포판(저는 Debian을 사용하고 있습니다)을 통해 얻나요, 아니면 어떻게든 설치하거나 다운로드하나요? C언어인가요? gcc를 사용하여 다른 파일처럼 컴파일하고 결과(적절한 chmod 포함)를 경로에 포함된 폴더에 저장합니까? 업그레이드는 어떻습니까? 아시다시피 저는 여기서 큰 그림을 놓치고 있습니다.

(그런데 헤더 파일은 관련이 없는 것 같습니다. 인쇄/현재 작업 디렉토리가 아닌 비밀번호로 pwd를 사용합니다.)

답변1

외부 암호에 대한 실험을 수행하는 것이 무해하지 않습니까?

이것은 아무런 목적도 없는 나쁜 내기입니다 /bin/pwd. 보안상의 이유로 쉘 스크립트, 특히 일반적으로 루트에서 실행되는 스크립트에서 외부 프로그램에 대한 전체 경로를 제공하는 것이 좋습니다.

그래도 사용자 정의 항목을 안전하게 작성하여 pwd홈 디렉토리에 배치할 수 있습니다. 패키지를 사용하는 경우자동화된 회의, 일반적으로 홈 디렉터리에 설치될 패키지를 구성하는 데 충분합니다.

$ ./configure --prefix=$HOME

--prefix=$HOME/pwd-test갈등의 가능성을 피하기 위해 이렇게 말할 수 있습니다 .

패키지의 빌드 시스템이 올바르게 설정되어 있는 한, 이렇게 구성하면 make install루트가 아니어도 작성하는 모든 파일은 사용자가 제공한 접두사 아래에 있어야 한다고 안전하게 말할 수 있습니다.

pwd 출처는 어디인가요?

pwd의 일부입니다coreutils. 당신은 다음과 같은 것을 찾을 것입니다데비안 패키지 검색 엔진.

보통 distro를 통해 얻나요? (저는 Debian을 사용하고 있습니다)

배포 소스 코드를 다운로드하지 않았을 수도 있지만 이는 데비안 배포판의 일부로 간주됩니다. 6개의 디스크로 나누어져 있습니다(!)소스 DVD 세트, 약 25GB를 차지하므로 대부분의 사람들이 다운로드하지 않습니다.

그러나 전체 데비안 배포판을 다시 빌드하거나 파생 배포판을 만들려고 하지 않는 한 지금 다운로드해서는 안 됩니다.주문 음식이 단계에서는 다운로드하는 것이 더 나은 생각일 수 있습니다.

어떻게든 설치하거나 다운로드하셨나요?

apt-get예, 설치 패키지의 소스 코드를 사용할 수도 있습니다 . 하나 있다전체 장존재하다아파트 가이드이 점에 대해서.

(문서는 "오래됨"으로 표시되어 있지만 대체 문서가 없습니다.)

C언어인가요?

아마도 그렇습니다.

gcc를 사용하여 다른 파일처럼 컴파일하고 결과(적절한 chmod 포함)를 경로에 포함된 폴더에 저장합니까?

아마도 gcc를 직접 실행하지 않고 표준 configure ; make ; make install댄스를 수행할 것입니다. 데비안 패키지 검색 페이지에서 소스 tarball을 다운로드하면 빌드 지침이 포함된 tarball에서 INSTALL또는 파일을 찾을 수 있습니다.README

업그레이드는 어떻습니까?

그들은 어디에 있나요? 패키지 검색 엔진은 필요한 소프트웨어 버전을 찾는 데 도움이 되며 apt-get바이너리를 추적하는 것처럼 소스 코드의 변경 사항을 추적하는 데도 도움이 됩니다.

나는 여기서 큰 그림을 놓치고 있다.

당신은 한 번 살펴보고 싶을 수도 있습니다데비안 문서, 그 다음에.

헤더는 관련이 없는 것 같습니다. 인쇄/현재 작업 디렉토리가 아닌 비밀번호의 pwd입니다. )

예. C 프로그래머가 사용자 데이터베이스에 액세스하기 위한 유틸리티 헤더입니다. man 3 getpwent인터페이스를 통해 무엇을 사용할 수 있는지 이해하는 방법에 대해 이야기해 보세요 .

답변2

Linux에서는 pwd일반적으로 다음과 같이 수행됩니다.coreutils팩. 이 웹사이트나 배포판의 소스 코드 저장소(이것은 데비안이다).

일반적인 방법으로 이 패키지의 다른 도구를 컴파일 할 수 있습니다 pwd. 소스 코드의 압축을 풀고 다음을 수행합니다.

./configure
make

pwd필요한 경우 소스 코드를 수정하고 다시 컴파일할 수 있습니다( 의 C 코드 src/pwd.c). 그러나 전 할겁니다아니요coreutils배포판 복사본에 직접 수정한 내용을 설치하는 것이 좋습니다.

이를 "플레이"하려면 홈 디렉터리 어딘가에 설치하고 경로(또는 테스트 사용자의 경로)에 추가하세요. 수행 중인 작업을 정확히 알고 있고 작업을 실행 취소하는 방법을 알고 있는 경우에만 배포/패키지 관리자가 관리하는 실행 파일을 덮어씁니다.

이것은 구체적이지 않습니다 coreutils. 배포판에서 제공하는 모든 오픈 소스 패키지(제공하지 않는 패키지도 포함)를 사용하여 이 작업을 수행할 수 있습니다. 그러나 배포판에서 관리하는 파일을 수정하지 말라는 경고는 낮은 수준의 "시스템" 패키지에 더 중요합니다. 시스템을 완전히 망칠 가능성이 높기 때문입니다.

답변3

이유 /bin/pwd와 내장

/bin/pwd현재 디렉터리를 인쇄하는 데 사용되는 독립형 실행 파일입니다. 대부분의 쉘에는 pwd다음 두 가지 이유로 내장 기능이 있습니다 .

  • 이는 일반적이고 간단한 작업입니다. 내장된 작업이 더 빠릅니다.
  • 몇몇 쉘은 현재 디렉토리의 심볼릭 링크를 추적합니다. 고려하다:

    $ pwd
    /home/gilles
    $ ln -s /tmp sym       # Create a symlink /home/gilles/sym -> /tmp
    $ cd sym
    $ pwd
    /home/gilles/sym       # the directory tracked by the shell
    $ /bin/pwd
    /tmp                   # the "real" location of the current directory
    $ pwd -P               # pwd -P also shows the "real" location
    /tmp
    $ cd ..
    $ pwd
    /home/gilles           # The shell stripped one level off its current directory
    $ set -P               # Turn off symlink following (in bash)
    $ cd sym
    $ pwd
    /tmp
    $ cd ..
    $ pwd
    /
    

/bin/pwd일부 스크립트는 쉘이 실행할 수 있는 기호 링크를 피하기 위해 명시적으로 호출됩니다 . /bin/pwd다른 작업을 수행하도록 재정의하면 작업이 중단될 수 있습니다.

소스를 어디서 찾을 수 있나요?

Debian 및 그 파생물(Ubuntu 및 그 파생물 포함)과 dpkg 및 APT를 사용하여 패키지를 조작하는 기타 시스템에서는 다음을 실행하여 파일이 어떤 패키지에 있는지 확인할 수 있습니다.

dpkg -S /bin/pwd

coreutils파일이 패키지에서 제공되는 것을 볼 수 있습니다 .

일반적으로 이 바이너리 패키지가 어떤 소스 패키지에서 빌드되었는지 확인하려면 여기에서 dpkg -s coreutils또는 apt-cache show coreutils; 를 실행하면 aptitude show coreutils줄이 표시되지 않습니다. Source:이는 소스 패키지가 바이너리 패키지와 동일한 이름을 가지고 있음을 의미합니다(항상 그런 것은 아닙니다). , 주로 소스 패키지가 여러 바이너리 패키지로 분할된 경우).

소스 코드를 얻으려면 소스 패키지 이름을 알 필요조차 없습니다. 빨리 달려

apt-get source coreutils

그러면 패키지의 소스 코드가 다운로드되고 압축이 풀립니다 coreutils.

당신은 또한 볼 수 있습니다

워렌 영그리고인주의 답변으로 인해 몇 가지 추가 포인트가 발생합니다.

관련 정보