bash를 사용하여 /etc/export를 수정하는 실제 예는 무엇입니까?
예:
다음 규칙이 존재하고 유효한지 확인하고 싶습니다.
/export/home 2400:123::/32(rw,no_root_squash)
그것은 다음과 같아야 합니다:
- 아직 존재하지 않는 경우에만 추가하십시오(어떤 형태로든).
- 섹션이 존재하는 경우 기존 항목을 업데이트해야 합니다(예: 옵션 업데이트).
기존 파일에서 가능한 구문:
다양한 공간과 다양한 옵션
/export/home 2400:123::/32(rw,no_root_squash,no_subtree_check)
같은 줄에 여러 개 허용
/export/home 2400:123::/32(rw,no_root_squash,no_subtree_check) 2400:321::/32(rw,no_root_squash,no_subtree_check)
위의 조합 외에도.
처음에는 이를 달성하기 위해 augeas를 사용하고 싶었지만 /etc/exports 파일의 IPv6 주소에 오류가 있었습니다.
/etc/exports 파일은 스크립트를 중단하지 않고 독립적인 수정을 허용해야 합니다(이렇게 하면 문제의 규칙만 올바르고 유효한지 확인하고 나머지는 그대로 유지해야 함).
답변1
Augeas와 Puppet을 사용할 수 없다면 다음과 같이 하십시오:
if grep -qF '^/export/home' /etc/exports;then
sed -i \
's@^/export/home.*$@/export/home 2400:123::/32(rw,no_root_squash)@'\
/etc/exports
else
echo '/export/home 2400:123::/32(rw,no_root_squash)' >> /etc/exports
fi
하지만 주의하세요. 이는 모든 내보내기 규칙이 /export/home
사용자가 제공한 정의로 대체될 수 있다고 가정합니다.
답변2
Augeas의 /etc/exports 렌즈가 트렁크의 IPv6에 대해 수정되었으며 수동으로 가져올 수 있음을 발견했습니다.
https://github.com/hercules-team/augeas/blob/master/lenses/exports.aug
이 파일을 배치하여 /usr/share/augeas/lenses/
기본 렌즈에 나타나도록 하세요.