많은 시스템이이 getent
목록에 명령을 또는 내용 쿼리 이름 서비스 와 같은 데이터베이스를 passwd
, group
, services
, protocols
...
getent passwd | cut -d: -f6
열거 할 수있는 데이터베이스에있는 모든 사용자 의 홈 디렉토리 (6 번째 콜론으로 구분 된 필드)를 나열 합니다.
사용자 이름 자체는 첫 번째 필드에 있으므로 사용자 이름 목록은 다음과 같습니다.
getent passwd | cut -d: -f1
(그렇다고해서 해당 사용자가 시스템에 로그인 할 수 있거나 홈 디렉토리가 작성되었다는 의미는 아니지만 시스템에 알려진 것으로 사용자 ID로 변환 될 수 있습니다).
열거 할 수없는 데이터베이스의 경우 가능한 각 사용자 ID를 개별적으로 시도하고 쿼리 할 수 있습니다.
getent passwd {0..65535} | cut -d: -f1,6
(여기서 uid가 65535에서 중지한다고 가정하고 (일부 시스템은 더 많은 것을 지원함) zsh의 {x..y}
괄호 확장 을 지원하는 쉘 ). 그러나 사용자 데이터베이스가 네트워크에 연결되어 있고 LDAP, NIS +, SQL과 같은 로컬 캐싱이 제한된 시스템에서는 종종 그렇게하고 싶지 않을 것입니다. )를 사용하여 모든 쿼리를 수행하십시오.
즉, 동일한 uid를 공유하는 여러 사용자가있는 경우 각 uid에 대해 하나의 항목 만 가져 오므로 다른 사용자는 놓치십시오.
당신이없는 경우 getent
할 수 있습니다 perl
.
perl -le 'while (@e = getpwent) {print $e[7]}'
...에 대한 getent passwd
( $e[0]
사용자 이름의 경우) 또는
perl -le 'for ($i=0;$i<65536;++$i) {
if (@e = getpwuid $i) {print $e[0] ": " $e[7]}}'
대한 getent passwd {0..65535}
같은 사항에 유의.
쉘에서 ~user
의 홈 디렉토리를 가져 오는 데 사용할 수 user
있지만 대부분의 쉘에서는 제한된 사용자 이름 세트 (지원되는 사용자 이름에서 허용되는 문자 목록)에 대해서만 작동합니다.~
확장 연산자에 쉘마다 다름) (등 여러 가지 껍질 bash
), ~$user
하지 작업 (당신은에 의존 할 필요가 거라고합니다 eval
사용자의 이름이 변수에 저장 될 때). 그리고 여전히 사용자 이름 목록을 얻는 방법을 찾아야합니다.
일부 쉘에는 해당 사용자 이름 목록을 가져 오기위한 지원 기능이 내장되어 있습니다.
bash
: compgen -u
열거 가능한 데이터베이스의 사용자 목록을 반환합니다.
zsh
: $userdirs
연관 배열은 사용자 이름을 홈 디렉토리에 맵핑합니다 (또한 열거 할 수있는 데이터베이스로 제한되지만 열거 할 수없는 데이터베이스 ~user
에있는 사용자를 확장하면 항목이 추가됨).$userdirs
). 그래서 당신은 할 수 있습니다 :
printf '%s => %s\n' "${(kv@)userdirs}"
홈 디렉토리를 가진 사용자를 나열합니다.
zsh
대화 형 일 때만 작동합니다 .
tcsh
, fish
및 yash
(완료 할 때 예를 들어 사용자 이름을 완료 할 수있는 세 가지 다른 포탄입니다 ~<Tab>
인수), 그러나 프로그래밍 사용자 이름의 목록을 얻을 수 있도록처럼은 보이지 않는다.