"ls -l バイト数」と「wc -c」

可能なシナリオがありますか?

ls -l file.txt

表示されるバイト数は次のとおりです。

wc -c file.txt

スクリプトはこれら2つの値の比較を見つけました。その理由は何ですか?同じファイルのバイト数が異なる可能性がありますか?

ベストアンサー1

はい、そのような例があります。

の場合シンボリックリンクGNUを使用するLinuxシステムでは、lsリンクls -lのサイズが出力され、wc -c実際のファイルが解析され、そのファイルのバイト数が読み取られます。以下ではls -l29バイトが報告され、wc実際のファイルでは172バイトが報告されていることがわかります。

$ ls -l /etc/resolv.conf                                                                                                 
lrwxrwxrwx 1 root root 29 1月  17  2016 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
$ wc -c /etc/resolv.conf                                                                                                 
172 /etc/resolv.conf
$ wc -c /var/run/resolvconf/resolv.conf                                                                                  
172 /var/run/resolvconf/resolv.conf
$ ls -l /var/run/resolvconf/resolv.conf                                                                                  
-rw-r--r-- 1 root root 172 1月  15 15:49 /var/run/resolvconf/resolv.conf

の場合仮想ファイルシステム例えば/proc または、/sysそこにある多くのファイルのサイズがゼロであるように見えますls -l。ファイルシステムには、/devキャラクターデバイス、ブロックデバイスなど、さまざまな特殊ファイルがあります。wc -cこのファイルをぶら下げてls -l表示します。プライマリ番号とセカンダリ番号サイズではなく

名前付きパイプ0bytesとして報告されますが、パイプの内容は実際に読み取られるため、技術的に名前付きパイプにどれだけのデータがあるかを知らせますls -cwc -c

$ mkfifo named.pipe                                                                                                      
$ echo "This is a test" > named.pipe &
[1] 2129
$ ls -l named.pipe
prw-rw-r-- 1 xieerqi xieerqi 0 1月  16 08:40 named.pipe|
$ wc -c named.pipe
15 named.pipe
[1] + Done                 echo "This is a test" >named.pipe 

一般ファイルの場合、サイズは同じでなければなりません。


ls -lとの重要なポイントwc -cと動作方法も異なります。実際に読み取るためにファイルを開きます(wc -cたとえば、実行するとわかるように)。その項目に対してのみ呼び出しを行います。これはまた、サイズがゼロで表される理由を説明します。これらのファイルは「実際」ではないか、実際にはハードドライブ/ SSDに保存されていないため、計算できません。代わりに読んでくださいstrace wc -c /etc/passwdls -lstat()/proc ls -lwc -cコンテンツファイルのサイズを確認してサイズを計算します。

最後に、ls -lアイテムをインタラクティブにリストするためのツールです。スクリプトにはあまり適していません。実際にデータを読み取る必要がある場合は、wc -c代わりに使用してください。

これは、ファイルサイズをスクリプト化して推定するのに最適なオプションではありませんls。実際、これは一般的な慣行です。ls出力解析の防止du -b ファイルのサイズを調べるために使用します。

おすすめ記事