私は人々に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 では、この演習に関連する 2 つの別々の質問/回答を見つけました。これらを見つけることができますここそしてここ。両方のコマンドセットは基本的に同じ情報を出力します。たとえば、最初のリンクから受け入れられる答えと出力は次のようになります。
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 の上の 2 番目のリンクは、上記のコマンドの最短バージョンと同じ情報を返すより長く正確なコマンドです。
同様の状況で出力を取得するためにこれらの長いコマンドが役に立ちますか?これらの長いコマンドは、より短いコマンドが分析できない出力を解析しながら検索する回答の範囲を絞り込みますか?
ベストアンサー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バイトのファイルが1つしかないためです(公平に言えば実際にはそうかもしれませんが、実際にはファイルの正確なサイズがわかりません)。