저는 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
. b
512 바이트 블록입니다. 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
꽤 충분합니다!