/etc/profile.d의 스크립트는 무엇을합니까?


85

Linux Command Line 및 Shell Scripting Bible 에서 기본 쉘 스크립팅에 대해 읽고 있습니다.

/etc/profile파일은 Bash 셸을 시작할 때 환경 변수를 설정 한다고 말합니다 . 이 /etc/profile.d디렉토리에는 응용 프로그램 별 시작 파일이 포함 된 다른 스크립트가 포함되어 있으며이 스크립트는 시작시 셸에서 실행됩니다.

  • 이러한 파일 /etc/profile이 Bash 시작에 중요한 경우 왜이 파일의 일부가 아닌가?

  • 이러한 파일이 Bash 시작에 중요하지 않은 응용 프로그램 별 시작 파일 인 경우 왜 시작 프로세스의 일부입니까? 설정이 포함 된 특정 응용 프로그램이 실행될 때만 실행되지 않는 이유는 무엇입니까?

답변:


71

이 파일들이 Bash 시작에도 중요한 경우 왜 / etc / profile의 일부가 아닌가?

"왜 하나의 거대한 스크립트로 결합되지 않았습니까?"라는 대답은 다음과 같습니다.

  1. 그것은 스크립트를 담당하는 사람들에게 유지 보수의 악몽이 될 것이기 때문입니다.
  2. 스크립트를 독립 모듈로로드하면 전체 시스템을보다 동적으로 조정할 수 있으므로 개별 스크립트는 다른 스크립트에 영향을주지 않고 추가 및 제거 할 수 있습니다. 기타.
  3. 그것들은 / etc / profile을 통해로드되기 때문에 어쨌든 같은 방식으로 bash "profile"의 일부가됩니다.

이러한 파일이 Bash 시작에 중요하지 않은 응용 프로그램 별 시작 파일 인 경우 왜 시작 프로세스의 일부입니까? 설정이 포함 된 특정 응용 프로그램이 실행될 때만 실행되지 않는 이유는 무엇입니까?

그것은 두 가지로 나눌 더 넓은 디자인 철학 질문처럼 보입니다. 첫 번째 질문은 쉘 환경 사용의 가치와 적절성에 관한 것입니다. 긍정적 인 가치가 있습니까? 예, 유용합니다. 모든 구성 문제에 가장 적합한 솔루션입니까? 아니요, 그러나 간단한 매개 변수를 관리하는 데 매우 효율적이며 널리 인식되고 이해됩니다. 달리 말하면, 이러한 것들을 이기종으로 구성하기로 결정하면 아마도 $ PATH는 별도의 독립적 인 도구로 관리 될 수 있습니다. $ EDITOR와 같은 선호하는 도구는 어딘가에 sqlite 파일에 있고 $ LC lang 내용은 텍스트 파일에있을 수 있습니다 다른 곳에서 사용자 정의 형식 등-env 변수를 사용하지 않고/etc/profile.d갑자기 더 단순 해 보입니까? env 변수가 무엇인지, 어떻게 작동하는지, 어떻게 사용하는지, 이미 "환경" 이라고 불리는 5 가지 유비쿼터스 측면에 대해 완전히 다른 5 가지 메커니즘을 배우는 것을 이미 알고있을 것입니다 .

두 번째 질문은 "시작하기에 적절한시기입니까?"입니다. 이는 매우 효율적이지 않다는 이의를 제기합니다 (사용되거나 사용되지 않을 수있는 모든 데이터 등). 그러나:

  • 현실적으로, 데이터를 많이 사용하는 것은 아닙니다. 부분적으로 올바른 응용 프로그램을 구성하는 다른 방법이 있기 때문에 올바른 매개 변수를 가진 사람이 몇 가지 간단한 매개 변수 이상으로 사용하지 않기 때문입니다.
  • 일반적으로 호출되는 항목과 관련하여 현명하게 사용되는 경우 호출 gcc할 때마다 파일에서 기본 $ CFLAGS를 설정하는 등의 효율성이 떨어집니다. 관련된 메모리의 양은 무한대라는 것을 명심하십시오.
  • 그것은 하나 이상의 응용 프로그램과 관련 될 수있는 체계적인 것들을 포함 할 수 있으며, 쉘은 일반적인 근거 입니다.

이 목록에 더 많은 내용을 추가 할 수 있지만, 이것이 문제의 장단점에 대한 아이디어를 제공 할 수 있기를 바랍니다.


Does it have positive ... and understood.여기서 뭐라고하세요? 나는 그 단락 이외의 모든 것을 이해했습니다.
asheeshr

3
쉘 환경은 일반적으로 쉘 자체 및 기타 유비쿼터스 도구를 구성하는 데 사용됩니다. 이것이 구성을 수행 할 수있는 유일한 방법 은 아니므로 환경이 다른 옵션보다 나은지 또는 나쁜지 고려할 가치가 있습니다. "긍정적 인 가치"를 가짐으로써 환경을 사용하는 것이 최소한 WRT "간단한 매개 변수 관리"와 같은 다른 옵션보다 몇 가지 장점이있는 것 같습니다. 그 구절을 좀 더 설명하기 위해 약간의 내용을 추가하겠습니다.
goldilocks

profile.local에 행을 추가하는 것은 어떻습니까? profile.d 폴더에서 스크립트를 작성하는 것이 허용됩니까?
Avindra Goolcharan

@AvindraGoolcharan 다른 배포판에서는 이런 종류의 구성표를 사용할 수 있습니다. profile.d에 의해 그 내용이 공급되기 때문에 디렉토리에만 작동 /etc/profile포탄에 의해 지정되는 등 시작 파일 (의 호출을 참조로 떠들썩한 파티로 man bash); 편집 /etc/profile하면 비활성화 할 수 있습니다 /etc/profile.d. /etc/profile.local아마도 SUSE 발명품 인 것 같습니다 /etc/profile. 그러나 SUSE 이외의 시스템으로 옮기고 다른 조정을하지 않으면 아무것도 사용되지 않습니다.
goldilocks

알았어, 분명해. 예, 우리는 직장에서 SUSE를 사용합니다. / etc / profile. 훨씬 더 나은 내기 인 것 같습니다.
Avindra Goolcharan

13

이러한 파일은 응용 프로그램에 따라 다르지만 응용 프로그램을 시작할 때가 아니라 셸을 시작할 때 제공됩니다. 구성 디렉토리는 다른 많은 위치에서 발견되는 것과 같은 이유로 여기에 사용됩니다. 이를 통해 응용 프로그램 또는 소프트웨어 패키지가 구성을 수정할 수 있습니다. 사용자가 수정할 수있는 단일 구성 파일을 관리 / 업데이트하려고하는 여러 패키지가 번거롭고 지저분하기 때문에 분할 구성이 없으면 불가능합니다.

또한 참고 사항 /etc/profile은 배쉬뿐만 아니라 모든 쉘에서 제공됩니다. bash 특정 구성 파일은 bashrc이며 대화식 쉘 전용입니다.


3
두 번째 단락은 흥미 롭습니다. 다른 쉘은 다른 구문을 지원하므로 중요한 공통 구문이 필요합니다. bash와 sh는 사실이지만 자체 글로벌 로그인 시작 스크립트가있는 csh 또는 tcsh와 같은 다른 사람들에게는 그렇게 생각하지 않습니다. 많은 시스템에서 / bin / sh는 / bin / bash에 대한 링크 일뿐입니다. 그러나 bash는 sh로 호출 될 때 동작을 posix 호환으로 수정합니다. 따라서 /etc/profile.d의 스크립트 작성자는 posix 서브 세트 외부에서 bash 확장을 사용하지 않도록주의해야한다고 생각할 것입니다.
sootsnoot

리눅스에는 두 가지 주요 쉘 유형에 대해 별도의 .csh 및 .sh 파일이 있습니다.
stark

0

jordanm의 답변 이 잘못되었습니다. /etc/profile모든 쉘이 제공하는 것은 아닙니다. 당신이 지적하는 것처럼,에 의해 공급되지 않고 csh, tcsh- 나는 확실하지 않다 zsh. shKorn Shell ( ksh) 및 BASH ( bash) 와 같은 Bourne shell ( ) 파생물 이 제공합니다 . csh을 사용합니다 /etc/login. Borne Shell 파생 상품을 독점적으로 사용하는 사람들은 다른 쉘을 잊어 버리는 경향이 있습니다. 그들은 /etc/profile"모든 사용자들"에게 적용되기를 기대하는 것에 무언가를 추가 하고 이상한 C 쉘 사용자 (그리고 우리는 이상한 로트)가 그들이 구성한 것들을 가지고 있지 않을 때 놀랍니다 /etc/profile.

그럼에도 불구하고 사람들은 다른 Borne Shell 파생 쉘이 존재하는 것을 잊는 경향이 있습니다. 그들이 사용하는 경우 bash또는 ksh, 그들은 구문을 추가 부담 /etc/profile변수를 정의하고 같은 줄에 수출 말처럼 즉, Bourne 쉘에서 유효하지 않습니다. 그런 다음 스크립트를 수행 #!/bin/sh하고 구문을 질식시킵니다. /etc/profileBourne Shell 호환 구문을 준수해야합니다.

마찬가지로 bash 구문을 원할 경우 .profile사용 .bash_profile하십시오. 약간 추가 입력이 가능하지만 한 번에 추가로 입력하는 추가 입력입니다. 참조 ${HOME}~기타 등등. 유닉스의 일부 특징, cron 작업은 아래 sh에서 실행되고 각 줄 Makefile은에서 처리 sh되므로 여러 가지 유형의 UNIX에서 작업하는 경우 .profileBourne 쉘과의 호환성 을 유지하기 위해 실제로 지불합니다 . SysAdmin으로서 .profileBourne Shell과 호환되도록 수정하여 누군가를 도와 준 횟수를 알 수 없습니다 .

리눅스에서, 당신이 그것을 실행할 때 /bin/sh의 링크 /bin/bash이며, 그것을 실행하는 데 사용 된 경로를 보이며, 이론적으로 Bourne Shell이 ​​지원하는 것으로 만 제한됩니다. 마찬가지로 viLinux에서는 실제로 vim다시 제한적입니다. 때때로 "블리드 스루"기능이 나타납니다. 때때로 vimvi뭔가 할 것입니다 vim것을 지원 vi하지하지의 저자가 있기 때문에 vim"VI 이전 버전과의 호환성"모드에서이 기능의 사용을 중지하는 것이 잊어 버렸습니다. bash척하는 것이 sh비슷한 "블리드 스루"기능을 가지고 있다면 놀라지 않을 것 입니다. 일부 기능이 "Linux의 Borne Shell에서 작동"하지만 System V 또는 BSD 기반 UNIX (AIX, OpenBSD 등)에서는 작동하지 않더라도 놀라지 않을 것입니다.


"Linux에서"에 /bin/sh링크되어 /bin/bash있습니까? 그것은 건전한 진술입니다.
41754
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.