아래 명령은 최소 비밀번호 사용 기간이 1일이 아닌 사용자 목록을 제공합니다. 이것은 잘 작동합니다.
awk -F: '$4 < 1 {print $1}' /etc/shadow
이 목록을 가지고 실행하고 싶습니다 ...
chage -m 1 $p
여기서 $p는 각 행의 사용자 이름입니다.
일반적으로 나는 이 목록을 파일에 저장한 다음 그것에 대해 while 루프를 실행합니다. 모든 사용자의 최소 비밀번호를 1일로 변경하는 전체 명령은 아래를 참조하세요.
mkdir ./tmp
awk -F: '$4 < 1 {print $1}' /etc/shadow > ./tmp/usernamelist
while read p; do
chage -m 1 $p
done <./tmp/usernamelist
rm -rf ./tmp/usernamelist
파일을 저장하지 않고 논리적으로 동일한 작업을 수행할 수 있는 방법이 있습니까? 이것이 모범 사례입니까?
파이프 명령을 사용하여 이를 수행하는 방법이 있다고 생각하지만 올바른 구조화 방법을 찾을 수 없습니다.
답변1
파이프를 사용하거나
awk -F: '$4 < 1 {print $1}' /etc/shadow |
while read p; do
chage -m 1 "$p"
done
또는 프로세스로 교체
while read p; do
chage -m 1 "$p"
done < <(awk -F: '$4 < 1 {print $1}' /etc/shadow)
답변2
awk -F: '$4 < 1 {print $1}' /etc/shadow | xargs -r -L 1 chage -m 1
-L 1
awk 출력의 각 행이 별도의 출력으로 전달되는지 확인하십시오.차그전화해서 -r
확인해보세요차그awk가 아무것도 인쇄하지 않으면 run이 실행되지 않습니다(물론 이 경우에는 가능성이 낮습니다).