Я пытаюсь изучать команды UNIX, и я играю в эту игру, чтобы учиться, и я действительно застрял на данный момент. Я нахожусь на сервере через ssh, и каталог полон случайных файлов и папок, а пароль для следующего уровня находится внутри одного из файлов. Мне сказали, что файл имеет следующие атрибуты:
- человек читаемый
- 1033 байта
- неисполняемый
Я предполагаю, что я должен использовать find
команду, и я попытался, find ! -executable
но это вернуло загрузку файлов. Единственная читаемая человеком справка, которую я могу найти в руководстве или онлайн, - это распечатка файлов в удобочитаемом формате. Так я там немного растерялся?
Также я попытался, find ~ -size 1033b
но это ничего не вернуло. Но когда я попробовал, find ~ -size -1033b
он вернул каждый файл в каталоге.
command-line
find
Ник Корин
источник
источник
Ответы:
Чтобы отфильтровать понятные человеку имена файлов, вы можете использовать
[:print:]
( печатное ) имя класса символов . Вы найдете больше о таких классах в руководстве дляgrep
.Во-вторых, «читабельное» требование может относиться к содержимому файла, а не к его имени. Другими словами, вы будете искать текстовые файлы. Это немного сложнее. Как предложено в комментарии @D_Bye, вам следует использовать
file
команду для определения типа содержимого файла. Но было бы не очень хорошо запускатьfile
после канала, потому что это усложнило бы задачу отображения имени файла. Вот что я предлагаю:Вот кратко, как
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
программы, ища строки, содержащие «текст» . (Убедитесь сами, какfile
выглядит типичный вывод команды.)grep
не выводит отфильтрованный текст, потому что у него есть-q
(тихая) опция. Что он делает, так это просто изменяет свой статус выхода либо0
(который представляет «true» - отфильтрованный текст был найден), либо на 1 (что означает «ошибка» - текст «text» не появился в выходных данныхfile
).grep
передается дальше,sh
кfind
и действует как конечный результат всей «-exec sh -c 'file $0 | grep -q text' {} \;
» тест.-print
команда выполняется (т.е. печатается имя проверенного файла).источник
find . -type f -size 1033c
также будет возвращать точно такой же ответ.Обратите внимание, что я использовал
c
вместоb
размера файла.b
для блоков 512 байт.c
для фактических байтов.источник
-readable
означает человекочитаемый (то есть не бинарный)find
вfile
.все, что я написал, было:
и получил файл. Видимо, читабельная часть должна была отбросить тебя.
источник
источник
Я думаю, что для игры правильный синтаксис:
Вы получаете возврат, в котором перечисляется, из чего состоит каждый файл. Это сработало очень хорошо для того, что вы пытаетесь достичь в игре Бандит. Реальная кривая шара для этой задачи состоит в том, что каждый файл начинается с - (дефис).
источник
file ./-*
образом.Я думаю, что это лучший фактический ответ, который охватывает все 3 условия
Но, как говорили многие, исполняемый и читабельный человек должны были отбросить нас, поэтому использование
вполне достаточно!
источник