"다른" 손가락(/etc/passwd의 GECOS 필드)

"다른" 손가락(/etc/passwd의 GECOS 필드)

파일에는 /etc/passwd소위 GECOS fields("General Electric Comprehensive Operating System"을 나타냄) 내용이 있습니다. 즉, 다음과 같습니다.

username:password:userid:groupid:gecos:home-dir:shell 

다음 GECOS과 같이 나누어집니다.

:FullName,RoomAddress,WorkPhone,HomePhone,Others:

Others원하는 만큼 쉼표로 나누어집니다 .

:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:

페이지 에서 man chfn다음을 읽을 수 있습니다.

다른 필드는 다른 애플리케이션에서 사용하는 회계 정보를 저장하는 데 사용됩니다.

이제 애플리케이션 개발자(저는 C language, system calls및/또는 에 관심이 있습니다 bash script)에게 이 정보를 얻는 가장 좋은 방법은 무엇입니까?

환경 만 고려하면 Bash해당 finger명령이 필드를 표시할 수 없다면 others(또는 적어도 어떻게 표시할 수 있는지는 모르겠습니다), 표시할 수 있는 다른 명령은 무엇입니까? 나는 chfn보여줄 뿐만 아니라 변경도 허용한다는 것을 알고 있습니다 . 그냥 출력하려면 어떻게 해야 할까요 stdout?

답변1

내가 찾은 가장 좋은 방법은 getentLDAP/NIS 또는 로컬이 아닌 사용자의 다른 방법에서 작동하기 때문에 사용하는 것입니다.

getent passwd $UID| awk -F ":" '{print $5}'

답변2

/etc/passwd예를 들어 bash 스크립트에서는 awk/gawk를 사용하여 파일의 다섯 번째 필드를 인쇄할 수 있습니다 .

awk -F ":" '{print $5}' /etc/passwd

옵션은 -F fs입력 필드 구분 기호로 fs를 사용합니다(이 경우 :).
예를 들어 GNU awk 홈페이지 [1] .
Awk에는 문자열을 분할하는 기능이 있습니다 split()(이 경우 5번째 필드를 문자열로 사용하고 ,구분 기호로 사용함). 그것에 대한 다른 답변에서 영감을 얻으십시오 [2] ....

답변3

두 개의 중첩된 잘라내기 명령을 사용할 수 있습니다.

  • 먼저 ":"를 필드 구분자로 사용하고 필드 1과 5를 잘라냅니다. 그리고
  • 두 번째는 필드 구분 기호로 ","를 사용하여 필드 1 및 5-N을 잘라냅니다.

관련 정보