ファイルリスト:lsとechoの違い*

ファイルリスト:lsとechoの違い*

ディレクトリに何千ものファイルがある光沢のあるファイルシステムでは、入力するたびにファイルが一覧ls表示されるまで膨大な遅延が発生します。ファイルリストを必要とする他のコマンドでも同じことが起こります。ただし、入力するとecho *ファイル名をすばやく知ることができます。

lsファイルシステムにアクセスする同様のコマンドと比較して、機械的/内部的な違いは何ですかecho *?次はどうなりますか?

ベストアンサー1

lsファイル名をきれいにリストする操作が必要です。また、名前のレンダリング方法(色または他のファイル形式を表す)に関する情報が必要であり、各ディレクトリエントリに関連するメタデータの詳細も含めることができます。以下はCygwinのインストール例です。

cd /bin
ls
[.exe                 cygpstoedit-0.dll       mpost.exe
__pycache__           cygptexenc-1.dll        msgtool.exe
a2ping                cygraqm-0.dll           msxlint.exe
a5toa4                cygraw_r-16.dll         mv.exe
acyclic.exe           cygraw-16.dll           named-rrchecker.exe
addftinfo.exe         cygreadline7.dll        namei.exe
...

直接的な関係はありませんが、実験してみると、ls最も長いファイル名の長さによって列の幅が異なることがわかります。これを行うには、lsファイル名が出力される前に各ファイル名を読み、考慮する必要があります。最新バージョンでは、ls「奇妙な」ファイル名と一重引用符の中にスペースを含むファイル名が表示されることがあります。 (個人的には設定でこの機能を無効にしますQUOTING_STYLE=literal。)

echoそれ自体は賢いものではありませんが、シェルは*ファイル名の英数字リストに展開し、そのリストを直接単語に渡しますecho。これは次のディレクトリですecho

cd /bin
echo *
[.exe __pycache__ a2ping a5toa4 acyclic.exe addftinfo.exe addr2line.exe adhocfilelist afm2pl.exe afm2tfm.exe aleph.exe allcm allec allneeded animate apropos ar.exe arara arch.exe arlatex as.exe ascii.exe ash.exe autosp.exe awk axohelp.exe b2sum.exe banner.exe base32.exe...

lsあなたが見るのは、シェルがきれいなリストを生成するために実行される処理よりもはるかに速くファイル名のリストを抽出することです。 GNUではls表示処理を無効にできますls -f。 (man ls実際に何をしているのか確認してください。)

おすすめ記事