저는 사람들에게 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 1033c
1033바이트 파일을 찾고 있다는 의미입니다.
! -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바이트 파일이 하나만 있기 때문입니다(공평하게 말하면 실제로는 그럴 수 있지만 실제로는 일반적으로 파일의 정확한 크기를 알 수 없습니다.)