以前はcat
を使用してファイルを表示していました。次に、less
の方が通常は優れており、ファイルが数十行を超える場合は必須であることがわかりました。
私の質問:cat
の代わりにless
を使用する理由はありますか? cat
がより良い解決策となる状況はありますか?
個人的には、静的コンテンツにはview
を好むか、tail -f
動的コンテンツ用。
しかし、これはあなたの質問に答えません。 「少ないのにもっと使う理由」という言葉があります;-)
しかし、私は猫よりも猫を好む場合があります。私は通常X11-windowsで作業します。これらのウィンドウには、数百行に設定できるスクロールバッファがあります。
cat
を実行する-200行としましょう。これらの場合、less
を使用するよりも、スクロールバーでマウスを使用する方が快適です。
どちらのコマンドでもファイルの内容を表示できますが、元の目的はまったく異なります。
lessは more の機能を拡張します。後者は、ファイルの内容を一度に1画面ずつ表示するために作成されました。 lessは、後方への移動やより良いメモリ管理などの機能を追加します(最初の行を表示する前にファイル全体を読み取る必要はありません)。
catはファイルを連結し、結果を標準出力に出力します。ファイルを1つだけ指定すると、そのファイルのコンテンツが表示されます。複数のファイルを提供すると、「強力」になります。良い例は split とcatの組み合わせです。最初のコマンドは、大きなファイルを小さな部分に分割します。 2つ目は、小さな部分を1つのファイルに連結します。
あなたの質問に戻りますが、catは、対話なしでファイルを完全に(または連結して)読み取る必要がある自律スクリプトで推奨されます。ファイルの表示に関しては、好みの問題だと思います。
私は通常、ファイル内の何かに基づいてコマンドを入力する必要があるときにcat
を使用します。 cat
は、シェルプロンプトにアクセスしながらファイル(小さい場合)を表示できるため、より便利です。パイプライニングも可能です。
猫がより良い解決策となる状況はありますか?
複数のファイルを処理していて、それらを連結したい場合。
Manページから:
cat f - g
Output f's contents, then standard input, then g's contents.
cat
の唯一の目的はファイルをconcatenateすることであると激しく主張する人々がいます。他のすべての用途には、more
(またはless
)があります。
しかし、これは1つの非常に重要な事実を考慮に入れていません:cat
はタイプするのに1文字少ないです。私はこれらのコマンドを頻繁に使用するので、1文字少ないほど簡単です。
別の理由は、ファイルを作成するときです。 Webから次のようなテキストをファイルにコピーアンドペーストすることがよくあります(コマンドプロンプトを表示):
$ cat > filename
<Cmd-V>
<Ctrl-D>
$
つまり、書き込みアクセス用にファイルfilename
を開き、コンテンツを貼り付けて、を押してストリームを閉じます Ctrl-D。 less
もmore
もそれができず、エディタを開くよりも高速です。
場合によっては、less
が行うページ付けが不要で、cat
を使用するために完全なファイルが必要な場合があります。
私は_less -FX
_を使用します。これにより、ファイルを1つの画面に表示できる場合、less
はcat
のように動作します。 less(1)
マンページから:
_-F or --quit-if-one-screen
Causes less to automatically exit if the entire file can be dis-
played on the first screen.
-X or --no-init
Disables sending the termcap initialization and deinitialization
strings to the terminal. This is sometimes desirable if the
deinitialization string does something unnecessary, like clear-
ing the screen.
_
cat
〜grep
(複数)ファイルを使用しています。
cat <filename1> [<filename2> <filename3>] | grep -i "string of interest"
私はgrep
がファイル名をサポートしていることを知っていますが、異なるファイルに対して同じファイルをgrepする場合、行の最後にある検索用語であるコマンドを編集する方が、Ctrl +矢印キーで戻る必要があります。この線。
cat
を使用すると、複数のバイナリファイルを1つの大きなファイルに連結できます。
cat data.001 data.002 data.003 > bigdata.dat
cat
は画面に残ります。すべてless
が消えます。
Volker Siegelによる/の明確化:
cat
の出力は画面に残ります。 less
で表示されるものはすべて閉じた後に消えます。
また、less
はすべてのGNU/Linuxディストリビューションにプリインストールされているわけではありません。 (Gentooなど)cat
はどこにでもあります。
Unixバリアントの多様性のために、多くの人がシステムを管理する必要はありません(積極的に)。物事が激しくなったとき、リブートして、制限された環境と呼ばれる環境でシステムに入ることができるかもしれません。
コマンドラインを取得し、小さく、通常は静的にリンクされている便利なコマンドと見なされる小さなセットにアクセスします。エディターとしてviを取得したり、小さなedを取得したりすることはできますが、emacsやvimは取得できません。あなたは猫を手に入れるでしょうが、それ以下ではありません。これらのリソースは正しく構成されていないか、すべて使用されている可能性があるため、リソースを使いすぎずにシステムを修復するのに十分なツールを提供するという考え方です。それらの状況下でのより少ないコマンドは不必要です。
2つは異なります。 less
は非標準のページャー(more
は標準のページャー)であり、テキストの表示に使用されます。一方、cat
は、データストリームのタイプと数を1つに連結するために使用される標準ユーティリティです。
状況によっては同じことをするように見えるかもしれませんが、他のユーティリティもそうです。
'less'内で 'v'を押してファイルまたは '!'を編集できるため、特権の昇格に問題がある可能性があります。シェルコマンドを送信します。
一部のユーザーには、スーパーユーザーのみが読み取り可能なファイルの表示を許可し、それらのユーザーによるファイルの編集や一般的なスーパーユーザー権限の使用は許可しないようにすることができます。 「/ etc/sudoers」を編集して「Sudo/bin/cat/etc/importantfile」を使用できるようにすることで、これを行うことができます。 「sudo/usr/bin/less/etc/importantfile」を許可したくないのは、「v」を使用してファイルを編集したり、「!」を使用したりできるためです。完全なスーパーユーザー権限でシェルを起動します。
もちろん、ユーザーは 'Sudo/bin/cat/etc/importantfile |セキュリティリスクなしで、より少ない」と「より少ない」を使用します。
猫をgrepでパイプすると便利です。
cat <filename> | grep -i "string of interest"
便宜上。猫は3文字ですが、多かれ少なかれ4文字です。そして、猫を入力すると、左手だけが必要になります。
'less'と 'more'はどちらも、出力がターミナル(tty)でない場合、 'cat'とまったく同じように機能します。パイプとファイルに関しては、どちらも改ページなしに戻ります。
「猫」は、Unixタイプのシステムでは常に存在すると言っても安全だと思います。どのシステムにも「少ない」または「多い」、あるいはその両方が存在することは予測できません。
したがって、スクリプトでは、ページ分割以外の操作のみが必要な場合、Unixタイプのシステムでスクリプトが使用されている場所には必ず「cat」が存在します。
画面に文字を表示する方法については、less
はcat
ができることを実行できます。そして、はるかに。
しかし、いくつかのケースで猫を使用する非常に良い理由があります:less
は複雑すぎるであり、非常に単純な問題に適用できます。私には、manページでcat
関連のオプションを見つけるのが難しいほど多くのオプションがあります。
タブをMakefile
に表示しますか?
man cat
、最初のオプションは-A
。
説明は役に立ちません:-vET
。
しかし、長いオプション名はちょうどいいように聞こえます:--show-all
。
そしてcat -A Makefile
必要なことを行います。
さて、less
を探しましょう。