처음에 다음 줄이 있다고 가정해 보겠습니다 ~/.bash_profile
.
echo "*** THIS IS ~/.bash_profile RUNNING ***"
Linux 시스템(Ubuntu 14.04)에서는 다음을 사용하여 bash
부팅 시 로드된 파일을 확인할 수 있습니다 strace
.
strace -f bash --login 2>&1 | tee /tmp/log.strace
# type [ENTER] here, or "hello" [ENTER], then Ctrl+C to exit
grep 'bash_' /tmp/log.strace
결과는 예상대로입니다.
faccessat(AT_FDCWD, "/etc/profile.d/bash_completion.sh", R_OK) = 0 open("/etc/profile.d/bash_completion.sh", O_RDONLY) = 3 open("~/.bash_profile", O_RDONLY) = 3 read(3, "echo \"*** THIS IS ~/.bash_profil"..., 48) = 48 write(1, "*** THIS IS ~/.bash_profile RUNN"..., 40*** THIS IS ~/.bash_profile RUNNING ***
그러나 나는 이것을 통해 OSX 10.9 컴퓨터에 로그인했으며 ssh
동일한 작업을 수행해야 합니다. OSX에서는 사용할 수 없기 때문에 다음과 같이 strace
사용했습니다 .dtruss
dtruss -f bash --login 2>&1 | tee /tmp/log.dtruss
# type [ENTER] here, or "hello" [ENTER], then Ctrl+C to exit
grep 'bash_' /tmp/log.dtruss
~/.bash_profile
이상하게 도 로드된 적이 있다는 언급이 없는 것 같습니다 .
$ grep 'bash_' /tmp/log.dtruss $
bash --login
..., - 해당 OSX 시스템에서 실행하면 위의 내용이 인쇄되는 것을 볼 수 있더라도 로드해야 한다는 echo
의미입니까 ? ~/.bash_profile
!
물론, dtruss
다른 파일에 대한 액세스를 보고할지 여부는 다음과 같습니다.
$ grep 'open\|stat' /tmp/log.dtruss
41819/0xce5a2: stat64("/AppleInternal\0", 0x7FFF5CBC2A88, 0x0) = -1 Err#2
41819/0xce5a2: stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF5CBC23F8, 0x7FFF5CBC3330) = 0 0
41819/0xce5a2: open("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x0, 0x0) = 3 0
41819/0xce5a2: stat64("/usr/lib/libncurses.5.4.dylib\0", 0x7FFF5CBC2208, 0x7FFF5CBC30A0) = 0 0
...
41819/0xce5a2: open("/dev/tty\0", 0x6, 0x7FFF79D33940) = 3 0
41819/0xce5a2: open_nocancel("/usr/share/locale/en_US.UTF-8/LC_COLLATE\0", 0x0, 0x1B6) = 3 0
...
41819/0xce5a2: stat64("~/.fastlane/bin/bash\0", 0x7FFF5CBC37E0, 0x0) = -1 Err#2
41819/0xce5a2: stat64("/usr/bin/bash\0", 0x7FFF5CBC37E0, 0x0) = -1 Err#2
41819/0xce5a2: stat64("/bin/bash\0", 0x7FFF5CBC37E0, 0x0) = 0 0
41819/0xce5a2: stat64("/bin/bash\0", 0x7FFF5CBC3820, 0x0) = 0 0
...
$HOME
... 예를 들어, 검색의 일부로 해당 디렉토리에 액세스했음을 알 수 있습니다 $PATH
(실제로는PATH="~/.fastlane/bin:$PATH"
예 설정은 완전히 동일합니다 ~/.bash_profile
).
내 질문은 - 왜 이런 일이 발생합니까? 유사한 파일에 액세스할 때 보고 dtruss
하도록 사용해야 하는 특별한 호출이 있습니까 ? 아니면 Linux에서 허용되는 것과 동일한 유형의 파일 열기 추적을 ~/.bash_profile
구현하려면 OSX에서 다른 프로그램을 사용해야 합니까 ? strace
아니면 OSX에서 시작된 프로세스가 너무 달라서 별도의 프로세스로 실행되기 전에 백그라운드에서 프로세스를 "로드"합니까 ~/.bash_profile
?bash
bash