동일한 명령의 변형은 동일/유사한 결과를 반환합니다.

동일한 명령의 변형은 동일/유사한 결과를 반환합니다.

저는 사람들에게 Linux와 윤리적인 해킹 기술을 가르치기 위해 고안된 게임을 제공하는 공용 서버를 개발 중입니다. (지금까지) 각 레벨의 목표는 다음 레벨에 대한 SSH 비밀번호를 찾고 이 작업을 수행하는 데 유용할 수 있는 다양한 명령을 제안하는 것입니다. 저는 현재 다음과 같은 목표가 나열된 수준에서 작업하고 있습니다.

The password for the next level is stored in a file somewhere under the 
inhere directory and has all of the following properties:
     human-readable
     1033 bytes in size
     not executable

권장되는 명령은 다음과 같습니다: ls, cd, cat, file, du, find

Unix 및 Linux StackExchange에서 이 연습과 관련된 두 가지 별도의 질문/답변을 찾았습니다. 이것들을 찾을 수 있습니다여기그리고여기. 두 명령 세트 모두 기본적으로 동일한 정보를 출력합니다. 예를 들어 첫 번째 링크부터 허용되는 답변과 출력은 다음과 같습니다.

bandit5@bandit:~/inhere$ find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII                          
./maybehere07/.file2: ASCII text, with very long lines

나는 이 명령을 조금 사용해보기로 결정했기 때문에 먼저 명령에서 grep을 제거한 다음 다시 실행했습니다. 그런 다음 실행할 수 없는 스위치와 파일 명령을 제거하고 다시 실행했습니다.

bandit5@bandit:~/inhere$ find . -type f -size 1033c ! -executable -exec file {} +                                       
./maybehere07/.file2: ASCII text, with very long lines

bandit5@bandit:~/inhere$ find . -type f -size 1033c                                                                     
./maybehere07/.file2

이 명령의 가장 짧은 버전이 내가 찾고 있는 정확한 정보를 반환한다는 것은 분명합니다. Unix 및 Linux StackExchange의 위 두 번째 링크는 위 명령의 가장 짧은 버전과 동일한 정보를 반환하는 더 길고 정확한 명령입니다.

유사한 상황에서 출력을 검색하는 데 이러한 긴 명령이 유용합니까? 이러한 긴 명령은 더 짧은 명령이 분석할 수 없는 출력을 구문 분석하는 동안 찾는 답변의 범위를 좁힐까요?

답변1

귀하의 질문에 대답하자면(비추천에도 불구하고) 그렇습니다. 처음에 명령을 작성한 사람이 사용 가능한 모든 정보를 사용하려고 했기 때문입니다. 질문에는 파일이 human-readable, 1033 bytes in size, 및 이라고 나와 있습니다 not executable. 원래 명령은 다음과 같습니다.

find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII

이제 그것을 부분으로 나누어 보겠습니다.

-type f(디렉토리가 아닌) 파일을 찾고 있다는 의미입니다.

-size 1033c1033바이트 파일을 찾고 있다는 의미입니다.

! -executable실행 불가능한 파일을 찾고 있다는 의미입니다.

-exec file {} +find로 찾은 모든 파일에 대해 file 명령을 실행하려고 함을 나타냅니다.

| grep ASCII여기서는 이전 명령의 출력을 grep으로 파이프하여 ASCII가 포함된 줄만 검색합니다.

저는 각각 1033바이트 file1의 바이너리 데이터로 구성된 3개의 파일을 만들었습니다. file2이는 여러분이 찾고 있는 파일 file3의 복사본 file1이지만 실행 가능으로 표시되어 있습니다. 이 디렉터리에서 제안된 명령의 출력은 다음과 같습니다.

jon@jon-HP-Pavilion-15-Notebook-PC:~/temp$ find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII
./file2: ASCII text, with very long lines
jon@jon-HP-Pavilion-15-Notebook-PC:~/temp$ find . -type f -size 1033c ! -executable -exec file {} +
./file2: ASCII text, with very long lines
./file1: data
jon@jon-HP-Pavilion-15-Notebook-PC:~/temp$ find . -type f -size 1033c
./file2
./file1
./file3

보시다시피, 이러한 명령은 여러 파일에 대해 매우 다르게 동작합니다. 테스트 환경에서 동일하게 보이는 이유는 1033바이트 파일이 하나만 있기 때문입니다(공평하게 말하면 실제로는 그럴 수 있지만 실제로는 일반적으로 파일의 정확한 크기를 알 수 없습니다.)

관련 정보