거의 동일한 2개가 있습니다 grep
.
[Alex@localhost tmp]$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
AlexL:x:500:500::/home/AlexL:/bin/bash
user1:x:501:501:user1 12345:/home/user1:/bin/bash
그리고
[AlexL@localhost tmp]$ grep /bin/*sh /etc/passwd
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:AlexL:x:500:500::/home/AlexL:/bin/bash
/etc/passwd:user1:x:501:501:user1 12345:/home/user1:/bin/bash
두 번째 쿼리에서는 각 행에 대해 일치하는 파일 이름 접두사를 얻습니다. 동일한 결과를 얻으려면 -h
옵션을 2nd 에 넣어야 한다는 것을 알고 있지만 grep
내 질문은 다음과 같습니다.
왜 다른 출력을 반환합니까? 내용을 더 추가해야 하나요?
이 작업에는 /etc/passwd
실제 사용자(데몬 및 시스템 사용자 없음)로부터의 검색이 포함됩니다.
사용: CentOS 6.4, grep Gnu 버전 2.6.3
답변1
지각이 확장될 것입니다 /bin/*sh
. 그렇다면 당신이 실제로 하고 있는 일은
grep /bin/bash /bin/dash /bin/rbash /bin/rzsh /bin/sh /bin/zsh /etc/passwd
즉 ,,,,,, 등의 /bin/bash
파일에서 문자열을 검색합니다 ./bin/dash
/bin/rbash
/bin/rzsh
/bin/sh
/bin/zsh
/etc/passwd
(의 출력과 비교하십시오 echo /bin/*sh /etc/passwd
.)
여러 파일을 검색해야 하므로 grep
해당 문자열이 발견된 파일을 보고합니다.
원하는 것은 검색어를 인용하여 셸에서 확장되지 않도록 하고 올바른 정규식을 사용하는 것입니다.
grep '/bin/.*sh' /etc/passwd