저는 UNIX 명령을 배우려고 노력 중이며 배우기 위해이 게임을하고 있습니다. 나는 ssh를 통해 서버에 있고 디렉토리는 임의의 파일과 폴더로 가득 차 있으며 다음 레벨의 비밀번호는 파일 중 하나 안에 있습니다. 파일에 다음과 같은 특징이 있다고 들었습니다.
- 인간이 읽을 수있는
- 1033 바이트
- 비 실행
나는 find명령을 사용해야한다고 생각하고 시도 find ! -executable했지만 많은 파일을 반환했습니다. 매뉴얼이나 온라인에서 찾을 수있는 사람이 읽을 수있는 유일한 도움말은 사람이 읽을 수있는 파일 크기를 인쇄하는 것입니다. 그래서 나는 거기서 조금 길을 잃었습니까?
또한 나는 시도 find ~ -size 1033b했지만 아무것도 반환하지 않았습니다. 그러나 시도했을 때 find ~ -size -1033b디렉토리의 모든 파일을 반환했습니다.
답변
사람이 읽을 수있는 파일 이름을 필터링하기 위해 [:print:]( 인쇄 가능 ) 문자 클래스 이름 을 사용할 수 있습니다 . 해당 클래스에 대한 자세한 내용은에 대한 매뉴얼을 참조하십시오 grep.
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
다시 한 번 생각하면 “사람이 읽을 수있는”요구 사항은 파일 이름 대신 파일 내용을 참조 할 수 있습니다. 즉, 텍스트 파일을 검색하는 것 입니다. 좀 더 까다 롭습니다. 주석에서 @D_Bye가 제안한 것처럼 file명령을 사용하여 파일 내용 유형을 결정해야합니다. 그러나 file파일 이름을 표시하는 작업이 복잡해 지므로 파이프 다음 에 실행하는 것은 좋지 않습니다 . 내가 제안하는 것은 다음과 같습니다.
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
다음은 file-part의 작동 방식입니다.
-exec술어가 실행sh -c 'file -b $0 | grep -q text' FILENAME각각FILENAME만족 이전의 모든 조건 (종류, 사이즈, 비 실행).- 그 파일 각각에 대해, 쉘은 (
sh)이 짧은 실행 스크립트를 :file -b $0 | grep -q text, 대체$0파일 이름으로. - 그만큼
file프로그램은 각각의 파일의 콘텐츠 타입을 결정하고,이 정보를 출력한다. 이-b옵션은 테스트 된 각 파일의 이름을 인쇄하지 못하게합니다. grep출력을 필터링합니다.file“text”가 포함 된 행을 검색하여 프로그램에서 . (일반적인file명령 출력 결과를 참조하십시오 .)- 그러나 (quiet) 옵션이 제공
grep되므로 필터링 된 텍스트를 출력하지 않습니다-q. 그것이하는 것은 종료 상태를 변경하는 것입니다. 중 하나에0( “true”로 표현 – 필터링 된 텍스트가 발견되었다) 또는 1 (- 텍스트 “오류”를 의미하는 “텍스트” 의 출력에 표시되지 않았다file). - 에서 나오는 참 / 거짓 종료 상태
grep로 더 전달sh에find전체 “의 최종 결과의 역할을-exec sh -c 'file $0 | grep -q text' {} \;“테스트. - 경우에는 위의 테스트는 반환 사실 ,
-print(즉, 테스트 파일의 이름이 인쇄되어 있습니다) 명령이 실행됩니다.
답변
find . -type f -readable -size 1033c ! -executable
파일 크기 c대신 사용 했습니다 b. b512 바이트 블록입니다. c실제 바이트입니다.
답변
내가 쓴 것은 다음과 같습니다.
find -size 1033c ! -executable
파일을 얻었습니다. 분명히 사람이 읽을 수있는 부분은 당신을 버리는 것이 었습니다.
답변
find . -readable -size 1033c \! -executable
답변
나는 게임을 생각하지만 올바른 구문은 다음과 같습니다.
file ./*
각 파일이 구성된 것을 나열한 리턴을 얻습니다. 그것은 당신이 Bandit 게임에서 달성하려는 것에 정말 효과적이었습니다. 이 작업의 실제 곡선은 각 파일이-(하이픈)으로 시작한다는 것입니다.
답변
나는 이것이 3 가지 조건 모두를 포괄하는 가장 실제적인 대답이라고 생각합니다.
find inhere/ -type f -size 1033c ! -executable |xargs file | grep text
그러나 많은 사람들이 말했듯이 실행 파일과 사람이 읽을 수있는 것은 우리를 버려야했습니다.
find inhere/ -type f -size 1033c
꽤 충분합니다!