
次のコマンドはLinuxで何をしますか?
ls * > file1
現在のディレクトリのすべてのファイル名を新しいファイルにコピーしますか?
答え1
これは、現在のディレクトリとサブディレクトリ(再帰的ではなく現在のディレクトリより1レベル下)にあるすべてのファイルを一覧表示し、プログラムの標準出力を次の名前のファイルにリダイレクトしますls
。file1
答え2
現在のディレクトリに隠されていないすべての名前を一度に1行ずつリストし、そのリストを新しいファイルに書き込むには、次のようにlist
します。
ls >list
これにより、現在のディレクトリのすべての名前が一覧表示され、名前が記録されますlist
。リストにはファイル自体の名前が含まれていますlist
。
隠し名前を含める場合ls -a
(またはアイテムをls -A
含めたくない場合)を使用してください。.
..
一度作成されたファイルは、list
ファイル名に改行文字が含まれていないことを保証できない限り、目で読む以外はほとんど役に立ちません。
表示されるコマンドには、実際のコマンドの機能を考慮する前にシェルが実行するいくつかの部分が含まれています。このコマンドの最終結果は、シェルの現在の状態、現在のディレクトリにあるファイルの名前と種類、出力ファイルと現在のディレクトリに対する権限によって異なります。
file1
まず、リダイレクトするアクションを実行します。その名前のファイルがすでに存在する場合、そのファイルは切り捨てられ(空になり)、そうでなければ作成されます。シェルは後でコマンドの標準出力ストリームをこのファイルにリンクし、すべてのコマンドの出力はここに保存されます。名前がディレクトリに対応する場合、書き込み禁止ファイルに対応する場合、または現在のディレクトリに対する権限のために出力ファイルを生成できない場合、
file1
シェルはエラーメッセージを表示します。この場合、その時点でのコマンド処理も停止する。シェルがコマンドを実行する前に、すべての引数を見つける必要があります(
>
次の引数file1
はいいえコマンドのパラメータls
)。この場合、コマンドラインには引用符のないワイルドカードパターンが含まれ、*
シェルはそれをパターンと一致する名前に置き換えます。デフォルトでは、*
現在のディレクトリに隠されていないすべての名前が一致します。ユーザーは、パターンが隠された名前と一致するようにさまざまなシェルオプションを設定したり、ファイル名のグロービングにパターンをまったく考慮しないようにこの設定を変更できます。パターンがどの名前とも一致しない場合、デフォルトではリテラル
*
文字に展開されません。これは、現在のシェルに設定されているシェルオプションによって異なります。他の可能性としては、パターンが完全に削除されるか、シェルがエラーメッセージを発行し、その時点でコマンドの処理を停止することがあります。ls
シェルは、最終的に現在定義されているエイリアス、シェル関数、および組み込みユーティリティを探します。に対応する名前がない場合は、ls
変数の値にリストされているディレクトリで実行可能ファイルを見つけようとしますPATH
。その実行可能ファイルがない場合、シェルはエラーメッセージを表示し、コマンドの処理を停止します。一部のシェルでは、代替スペルを提案するさまざまなフックを実行して処理を続行できます。みんな知ってるユーザーに正しいパッケージなどをインストールするように指示またはアドバイスします。ls
*
コマンドが見つかると、すべての可能な拡張(現在のシェルセッションの設定に従って)が引数として提供され、コマンドはそのアクションを実行します。ls
標準コマンドで解析すると仮定すると、各引数がls
順番にリストされます。これには、ディレクトリではなく名前を出力する操作が含まれます。コンテンツすべてのディレクトリパラメータ。引数がディレクトリへのシンボリックリンクの場合、そのディレクトリの内容も出力されます。*
コマンドラインからダッシュで始まるものとして解析されると、ls
次のように解釈できます。オプションファイル名の代わりに。これによりコマンドの結果が変わる可能性があります。ファイル名のグロービングがオフになっているため、拡張されずに残り、
*
現在のディレクトリに名前が付けられたファイル(通常またはその他)がない場合、コマンドは標準エラーストリームにエラーメッセージを発行します。*
ls
*
一致するものがないために削除され、一致しないパターンを削除するようにシェルが設定されている場合、このコマンドls
は現在のディレクトリの内容を一覧表示します(出力が生成されない可能性があります)。最初のステップで処理されたリダイレクトのために、標準出力ストリームでコマンドによって生成されたすべての出力はこのファイルに保存されます。