'Technical Note/OS X'에 해당되는 글 2건

Technical Note/OS X

문제:

PATH 정보를 조회해보니, git과 관련된 bin 디렉토리가 경로의 마지막에 포함되어 있다.


  $ echo $PATH

  ..(중략)..:/usr/local/git/bin


얼마 전 .bash_profile을 정리하면서,

추가적으로 정의하는 PATH 경로는 아래처럼 PATH의 앞 부분에 추가하도록 했었다.

  $ export PATH=새패스:$PATH


어딘가에서 추가되었다면 앞 부분에 있는 게 당연한데,

마지막에 정의되어 있는 것이 이상해 어디서 정의됐는지 파일을 뒤적여봤다.

그리고, /etc/paths.d/git 파일에 정의되어 있는 걸 발견했다.


/etc/paths.d 는 처음 들어 생소한 데다,

/etc/paths 도 자세히 확인해본 적이 없어 잘 모르겠다.


/etc/paths와 /etc/paths.d 의 차이가 뭘까?

PATH는 어떻게 초기화되고 있는 걸까?



해결책:


두 파일 모두 시스템의 초기 PATH를 정의하기 위한 목적으로 사용된다.


/etc/paths 를 조회해보면 각 경로가 아래처럼 라인 단위로 정의되어 있는데,


  /usr/bin

  /bin

  /usr/sbin

  /sbin

  /usr/local/bin


위에서부터 순서대로 각 라인 단위로 PATH 변수에 추가된다.


  /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin


처럼 말이다.



/etc/paths.d 는 디렉토리다.

여기에 초기화 시 필요한 PATH를 파일 단위로 추가할 수 있고,

각 파일에 정의되어 있는 경로가 마찬가지로 라인 단위로 PATH 변수에 추가된다.


/etc/paths.d 에 여러 파일이 존재한다면,

파일 이름의 오름차순 순으로 추가된다.


PATH 경로에 /usr/local/git/bin 이 추가되어 있었던 이유는,

/etc/paths.d/git 파일 내에 해당 경로가 포함되어 있었기 때문이다.



하지만, 사실 /etc/paths 가 시스템의 초기 PATH 정보를 가지고 있는 건 아니다.

직접 /etc/paths 파일을 삭제해보거나 수정해보면 알 수 있는데,

파일을 삭제하더라도 시스템의 중요 경로는 PATH 변수에 정의되어 있다.

(테스트 해보려면, 어드민 권한으로 paths를 삭제하고 새 터미널을 띄워보면 된다)



PATH가 초기화되는 방식을 여러모로 확인해봤다.

맥 OS X 레오파드부터는, /usr/libexec/path_helper 에서부터 PATH가 설정되는데,

전체적인 프로세스는 아래와 같다. (라고 추측한다)


  1. 로그인 쉘이 시작되면 /etc/profile 을 실행한다.

  2. /etc/profile 에서는 /usr/libexec/path_helper 를 실행한다.

  3. path_helper는 /etc/paths 로부터 초기 PATH를 설정한다.

      한 라인 당 하나씩 순서대로 추가한다.

  4. 다음으로 /etc/paths.d 디렉토리에 있는 각 파일로부터 PATH를 설정한다.

      파일 이름의 오름차순 순으로, 각 파일에 정의된 순서대로 추가한다.

  5. 만약, 시스템에 필요한 중요한 경로가 PATH에 누락되어 있다면 추가한다.

      이 떄, 이미 추가되어 있는 것들을 제외하고 추가한다.

      /usr/bin:/bin:/usr/sbin:/sbin 가 PATH에 추가된다.



5번의 항목은, /etc/paths 를 삭제하거나 수정해보면 테스트해볼 수 있는데,

/etc/paths 에서 중요 경로가 누락된 경우, 아래와 같이 초기화된다.


  /etc/paths에서 설정한 경로:/etc/paths.d에서 설정한 경로:중요 경로 중 누락된 것



따라서, 실제 초기화 시점의 PATH를 변경하고자 한다면,

path_helper가 실행되기 전인 /etc/profile 에서 초기화하는 게 가장 좋은 방법이다.



Technical Note/OS X

https://github.com/ghughes/fruitstrap


Install and debug iPhone apps without using Xcode. Designed to work on unjailbroken devices.



Requirements


Mac OS X. Tested on Snow Leopard only.

You need to have a valid iPhone development certificate installed.

Xcode must be installed, along with the SDK for your iOS version.

1
블로그 이미지

zzikjh