/etc/environment 구문은 어디에 문서화되어 있나요?

/etc/environment 구문은 어디에 문서화되어 있나요?

/etc/environment.conf의 정확한 구문을 알고 싶습니다. 나는 이것이 일반적인 쉘 스크립트가 아니라는 것을 알고 있지만 작은 따옴표와 큰 따옴표는 정확히 어떻게 처리됩니까?

파일의 앞부분에 정의된 환경 변수를 사용하여 이후 변수를 정의할 수 있나요?

탈출은 어떻게 이루어지나요? 값에 공백이 있으면 어떻게 되나요?

또한 - 파일은 언제 처리되나요? 온라인 상충되는 정보는 시스템 시작 시, 사용자가 로그인할 때마다 또는 두 가지 모두에서 처리된다고 말합니다.

온라인에서 이러한 세부정보를 찾을 수 없습니다. 누군가 나에게 권위 있는 문서를 알려줄 수 있습니까?

중요하다면 특히 Ubuntu(Debian)에 관심이 있습니다.

답변1

이상해요, 제가 전에 이것을 테스트해 본 적이 있어요. 이 행동은 좀... 이상해요.

이러한 설정은 다음 위치에 있습니다 /etc/environment.

FOO1=bar
FOO2="bar"
FOO3="bar
FOO4=bar"
FOO5='bar'
FOO6='bar"
export FOO7=bar
FOO8=bar bar bar
#FOO9=bar
FOO10=$PATH
FOO11="foo#bar"

다음 환경 변수가 주어지면:

FOO1=bar
FOO2=bar
FOO3=bar
FOO4=bar"
FOO5=bar
FOO6=bar
FOO7=bar
FOO8=bar bar bar
FOO10=$PATH
FOO11=foo

다시 말해서:

  • 선행을 건너뜁니다 export(7).
  • 값이 작은따옴표 또는 큰따옴표로 시작하는 경우 값과 후행 작은따옴표 또는 큰따옴표가 제거됩니다. (2, 5)
  • ...그러나 따옴표가 일치하지 않거나 따옴표가 누락되어도 상관없습니다(3, 6).
  • 따옴표가 없어도 공백을 특별히 처리하지 않습니다. (8)
  • ...여기에 표시하기 어려운 후행 공백도 없지만 테스트했습니다(8).
  • #(9)로 시작하는 줄은 무시됩니다.
  • #...그리고 따옴표 사이에 있더라도 a에서 줄을 자릅니다 . (11)
  • 변수 확장을 지원하지 않습니다(10)

에서 읽었 pam_env.so으므로 로그인하길 원합니다.pam_env맨페이지, 또는environment매뉴얼 페이지, 그러나 따옴표 처리에 대해서는 언급하지 않습니다. 테스트 외에도 코드의 동작을 구문 분석해야 합니다.라스케즈의 답변다음으로 연결.

나는 쉘 시작 파일에 넣은 할당을 수락하여 둘 다에서 동일한 작업을 수행하려고 한다고 생각합니다 export FOO="bar bar"(후행 공백이 없는 경우). 단지 for 의 구문이 훨씬 더 간단하다는 것뿐입니다 /etc/environment(제 생각에는 어리석을 정도로).

/etc/environment변수 확장 등도 지원되지 않습니다. 위에서 언급했듯이 $PATH파일의 값은 $PATH디렉토리 목록이 아닌 텍스트로 끝납니다.

위에 링크된 매뉴얼 페이지에도 설명되어 있으며 pam_env.conf구문이 더 풍부하고 변수 확장이 가능합니다. 그러나 여전히 쉘 구문은 아닙니다.

관련된:

답변2

파일 /etc/environment을 읽는 사람은 다음과 같습니다.pam_env불행하게도 공식 문서에는 다음과 같이 형식이 명확하지 않습니다.

구문은 별도의 줄에 있는 간단한 KEY=VAL 쌍입니다. bash 호환성을 위해 내보내기 지시문을 지정할 수 있지만 무시됩니다. 이는 다양한 서비스에 다양한 환경이 필요한 경우에 유용합니다.

정말 궁금하다면 실제 구문 분석 논리는 다음에서 찾을 수 있습니다._parse_env_file기능PAM 소스에서. 구체적으로:

  /* now we try to be smart about quotes around the value,
     but not too smart, we can't get all fancy with escaped
     values like bash */
    if (key[i] == '=' && (key[++i] == '\"' || key[i] == '\'')) {
        for ( t = i+1 ; key[t] != '\0' ; t++)
            if (key[t] != '\"' && key[t] != '\'')
                key[i++] = key[t];
            else if (key[t+1] != '\0')
                key[i++] = key[t];
        key[i] = '\0';
    }

답변3

두 번째, 네 번째, 다섯 번째 질문에 답변해 드리겠습니다.

이 파일에 대한 설명서는 다음 위치에 있습니다.맨 페이지(man 5 pam_env.conf).

/etc/environment이후에 읽혀지며 pam_env.conf사용자 man 5 pam_env.conf가 로그인할 때 이 파일을 읽음을 나타냅니다.

기본적으로 파일 key=value의 행만 /etc/environment. 매뉴얼 페이지에는 이 파일을 사용하여 /etc/security/pam_env.conf존재하지 않는 다른 변수로 환경 변수를 설정할 수 있다고 명시되어 있습니다.

매뉴얼 페이지에서 다음 정보를 확인하세요 /etc/security/pam_env.conf.

각 줄 은 변수 이름으로 시작하며, 각 변수에는 두 가지 가능한 옵션이 있습니다 DEFAULT. 값이 제공되지 않으면 빈 문자열로 가정하여 관리자가 변수 값을 일부 기본값으로 설정할 수 있습니다. 이 옵션은 사용할 값이 있는 경우 해당 값을 입력해야 함을 나타냅니다(기본값 무시). 사용되지 않는 경우 가정되며 재정의되지 않습니다.OVERRIDEDEFAULTOVERRIDEpam_envOVERRIDE""

VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]]

(존재하지 않을 수도 있는) 환경 변수는 ${string}이 구문을 사용하여 값에 사용될 수 있으며, (존재하지 않을 수도 있는) PAM_ITEM 도 이 구문을 사용하여 값에 사용될 HOME수 있습니다 . 문자는 리터럴 값으로 사용하기 위해 백슬래시로 이스케이프될 수 있습니다. 값은 백슬래시로 구분될 수 있습니다 . 이스케이프는 지원되지 않습니다. 사용하려는 많은 환경 변수는 모듈이 호출될 때 설정되지 않았을 수 있습니다. 예를 들어 다음은 여러 번 사용되지만 많은 PAM 애플리케이션에서는 필요할 때 사용할 수 없습니다. 특수 변수는 사용자 의 passwd 항목 값으로 확장됩니다.SHELL@{string}$@"""${HOME}@{HOME}@{SHELL}

/etc/environment 파일은 설정할 환경 변수를 지정합니다. 파일은 별도의 줄에 간단한 NAME=VALUE 쌍으로 구성되어야 합니다. pam_env(8) 모듈은 pam_env.conf 파일 다음에 오는 파일을 읽습니다.

셸(예: bash 또는 zsh) 구성 파일을 사용하거나 유사한 환경 변수를 설정할 수도 있습니다.

관련 정보