cat sthとcat < sthの違い

cat sthとcat < sthの違い

cat sth私は両方ともcat < sthまったく同じ出力を提供することに気づきました。彼らは同じですか?

答え1

彼らはまったく同じではありません。重要な場合、リダイレクト方法はしばしばより迷惑で曖昧な結果をもたらします(もちろんこれはおそらく望むものかもしれません)。

$ cat < /proc/self/maps
$ cat /proc/self/maps
55c61257e000-55c61258a000 r-xp 00000000 fd:00 1180143                    /usr/bin/cat
...

またはgrep、検索プログラムを試してみてください。

$ grep "grep" /proc/self/exe
Binary file /proc/self/exe matches
$ grep "grep" < /proc/self/exe
$

sudoちょっとしたチートですが、アクセス権のあるコマンドを実行するために使用すると、この問題が発生する可能性が最も高いですroot

$ sudo cat < /etc/shadow
bash: /etc/shadow: Permission denied
$ sudo cat /etc/shadow
root:!::0:99999:7:::
....

答え2

cat彼の仕事は欺くenateはすべてをインポートしてstdoutに印刷しますが、通常は単一のファイルの内容を印刷するために使用されます(もちろん、ファイルの内容をリンクしてstdoutに書き込みます)。 stdout(標準出力)は、単にプログラムが通常書き込む出力データです。 (一部のプログラム(例dd:)は、引数が特に指定しない限り、出力データをstdoutに書き込みます。エラーが発生したときにプログラムが書き込む標準エラーチャネル、stderrもあります。)

catstdin(標準入力)または引数として渡されたファイルからデータを取得できます。

あなたがしなければならないcat sthのは、ファイルのすべての内容を標準出力に書き込むように指示する単一の引数を使用して呼び出すことです。より多くのファイル名を追加し、リンクされ、標準出力に書き込まれるファイルの内容を表示できます。catsthcatsth

cat < sthを呼び出す前にstdinをファイルの内容に変更してくださいcat。その後、すべてを標準入力から読み込み、標準出力に書き込みます。sthcatcat

どちらの場合も、catファイルの内容がsth標準出力に書き込まれます。これについてもっと読むことができます。ここまた、man cat端末に入力して、catその機能を説明するマニュアルページを読むこともできます。

の内容は、sthログインしたユーザーが読み取り(ターミナルにログインしたユーザーは、必ずしもグラフィックセッションにログインしたユーザーである必要はありません(存在する場合))、プログラムで使用できます。他の権限を前に書き、sudoそれを実行しているユーザーの権限として読みます。ログインしているユーザーと切り替えたユーザーsudo(必ずしもそうである必要はなく、root別々に指定できます)が読み取ろうとするファイルへのアクセス権が異なる場合があり、結果が異なる場合があります。

答え3

特定のファイル印刷の場合は、catorを使用するのと同じように有効ですsth。コマンドは、コマンドライン引数として指定されたすべてのファイルを印刷するように設計されているためです(場合:文字列を引数として受け取り、ファイルを開きます)。指定されたファイルは標準入力を印刷します(この場合、シェルは標準入力を開いて接続してリダイレクトに従います)。cat sthcat <sthcatcat sthcatsthcat <sthsthcat

したがって、どちらの場合も同じ動作が特定されますcat。標準入力またはコマンドライン引数のいずれかを許可するように設計されたコマンドではまったく機能しない可能性があります。他の場合は、標準入力を介してデータをインポートするとコマンドがファイル名にアクセスできないため、動作が若干異なる場合があります。

$ grep -H foo sth
sth:foo

$ grep -H foo <sth
(standard input):foo

関連情報