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もあります。)
cat
stdin(標準入力)または引数として渡されたファイルからデータを取得できます。
あなたがしなければならないcat sth
のは、ファイルのすべての内容を標準出力に書き込むように指示する単一の引数を使用して呼び出すことです。より多くのファイル名を追加し、リンクされ、標準出力に書き込まれるファイルの内容を表示できます。cat
sth
cat
sth
cat < sth
を呼び出す前にstdinをファイルの内容に変更してくださいcat
。その後、すべてを標準入力から読み込み、標準出力に書き込みます。sth
cat
cat
どちらの場合も、cat
ファイルの内容がsth
標準出力に書き込まれます。これについてもっと読むことができます。ここまた、man cat
端末に入力して、cat
その機能を説明するマニュアルページを読むこともできます。
の内容は、sth
ログインしたユーザーが読み取り(ターミナルにログインしたユーザーは、必ずしもグラフィックセッションにログインしたユーザーである必要はありません(存在する場合))、プログラムで使用できます。他の権限を前に書き、sudo
それを実行しているユーザーの権限として読みます。ログインしているユーザーと切り替えたユーザーsudo
(必ずしもそうである必要はなく、root
別々に指定できます)が読み取ろうとするファイルへのアクセス権が異なる場合があり、結果が異なる場合があります。
答え3
特定のファイル印刷の場合は、cat
orを使用するのと同じように有効ですsth
。コマンドは、コマンドライン引数として指定されたすべてのファイルを印刷するように設計されているためです(場合:文字列を引数として受け取り、ファイルを開きます)。指定されたファイルは標準入力を印刷します(この場合、シェルは標準入力を開いて接続してリダイレクトに従います)。cat sth
cat <sth
cat
cat sth
cat
sth
cat <sth
sth
cat
したがって、どちらの場合も同じ動作が特定されますcat
。標準入力またはコマンドライン引数のいずれかを許可するように設計されたコマンドではまったく機能しない可能性があります。他の場合は、標準入力を介してデータをインポートするとコマンドがファイル名にアクセスできないため、動作が若干異なる場合があります。
$ grep -H foo sth
sth:foo
$ grep -H foo <sth
(standard input):foo