私はUNIXコマンドを習得しようとしていて、このゲームをプレイして習得しているのですが、今は本当に行き詰まっています。私はsshを介してサーバーにいて、ディレクトリにはランダムなファイルとフォルダーがいっぱいで、次のレベルのパスワードはファイルの1つにあります。このファイルには次の属性があると聞いています。
私はfind
コマンドを使用する必要があると思いますが、find ! -executable
を試しましたが、ファイルのロードが返されました。マニュアルまたはオンラインで人間が読める唯一のヘルプは、ファイルサイズを人間が読める形式で出力することです。そこで少し迷っていますか?
また、find ~ -size 1033b
を試しましたが、何も返りませんでした。しかし、find ~ -size -1033b
を試したところ、ディレクトリ内のすべてのファイルが返されました。
人間が読めるファイル名を除外するには、[:print:]
(printable)文字クラスの名前を利用できます。そのようなクラスの詳細については、grep
のマニュアルを参照してください。
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
考え直してみると、「人間が読める」要件は、ファイルの名前ではなく、コンテンツを参照している可能性があります。つまり、textファイルを検索することになります。それはもう少しトリッキーです。 @D_Byeがコメントで提案したように、file
コマンドを使用してファイルのコンテンツタイプを判別する必要があります。ただし、パイプの後にfile
を実行することはお勧めしません。ファイル名を表示するタスクが複雑になるためです。これが私が提案するものです:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
これは、file
- partがどのように機能するかを簡単に示したものです。
-exec
述語は、以前のすべての条件を満たす(タイプ、サイズ、実行不可)FILENAME
ごとにsh -c 'file -b $0 | grep -q text' FILENAME
を実行します。sh
)がこの短いscript:file -b $0 | grep -q text
を実行し、$0
をファイル名に置き換えます。file
プログラムは、各ファイルのコンテンツタイプを決定し、この情報を出力します。 -b
オプションは、テストされた各ファイルの名前を出力しません。grep
file
プログラムからの出力をフィルタリングし、 "text"を含む行を検索します。 (file
コマンドの典型的な出力がどのように見えるか、実際に見てください。)grep
は-q
(quiet)オプションが指定されているため、フィルタリングされたテキストを出力しません。これは、exit statusを0
(「true」を表す-フィルターされたテキストが見つかった)または1(「error」を意味する)に変更するだけです。テキスト "text"は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
ファイルを取得しました。どうやら人間が読める部分はあなたを捨てることでした。
私はゲームについては正しい構文だと思います:
file ./*
各ファイルの構成をリストしたリターンが返されます。それはあなたがBanditゲームで達成しようとしていることに対して本当にうまくいきました。このタスクの実際の曲線ボールは、各ファイルが-(ハイフン)で始まることです。
find . -readable -size 1033c \! -executable
これが3つの条件すべてをカバーする最良の実際の答えだと思います
find inhere/ -type f -size 1033c ! -executable |xargs file | grep text
しかし、多くの人々が言ったように、実行可能で人間が読めるものは私たちを捨てるので、
find inhere/ -type f -size 1033c
十分です!