직접 파일 읽기 VS getent

직접 파일 읽기 VS getent

다양한 쉘 스크립트에서 지원되는 데이터베이스에서 정보를 얻는 두 가지 방법을 자주 볼 수 있습니다.이름 서비스 스위치/etc/group/etc/hosts, 또는 와 같은 라이브러리 /etc/services. 하나는 getent유틸리티 프로그램이고 다른 하나는 grep기타 텍스트 처리 도구입니다. 예를 들어:

root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 


root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 

..또는:

root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~# 

root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~# 

위의 두 가지 방법 중 어떤 방법을 스크립트에 사용해야 합니까? 내 말은, 한 솔루션이 다른 솔루션보다 더 우아하거나 표준적이라는 뜻인가요?

답변1

이는 사용자 환경과 관련된 요소에 따라 많이 달라지지만 getent로컬 사용자뿐만 아니라 외부 사용자도 찾기 때문에 이 접근 방식을 선호합니다. 구체적으로 말하면, LDAP 서버에서 내 환경의 LDAP 사용자를 조회할 것이며, cat /etc/passwd그러한 서버는 유효한 사용자가 있다는 사실은커녕 내 LDAP 서버가 존재한다는 것조차 알지 못합니다. 모든 사용자가 항상 로컬인 경우 getent"10년 안에 LDAP 서버를 추가하면 다시 작성할 필요가 없습니다"라는 것 외에는 실제로 어떤 이점도 제공하지 않습니다.

답변2

getent접근 방식은 더 호환 가능하고 바람직합니다. 이러한 파일(/etc/group, /etc/hosts, /etc/services, /etc/passwd...)은 항상 해당 위치에 있는 것은 아니며 /etc사용 중인 운영 체제에 따라 다른 곳에 있을 수도 있습니다. getent항목은 어쨌든 발견됩니다(시스템에 있는 경우).

또한 @John이 말했듯 getent이 nsswitch 데이터베이스에서 모든 구성을 검색하십시오. (여러) 외부 소스에 연결하더라도 사용자는 DNS 서버 등을 통해 인증되거나 이름이 확인됩니다. getent따라서 각 조회가 모든 데이터베이스를 통과해야 하기 때문에 속도가 느려집니다.

관련 정보