Apakah ada alasan untuk menggunakan `cat` saat Anda memiliki` kurang`?

59

Dulu saya gunakan catuntuk melihat file. Kemudian saya belajar bahwa lessbiasanya lebih baik, dan suatu keharusan jika file lebih panjang dari beberapa lusin baris.

Pertanyaan saya: Apakah pernah ada alasan untuk menggunakan catbukan less? Apakah ada situasi di mana catsolusi yang lebih baik?

Ram Rachum
sumber
17
lessdan catmemecahkan masalah yang berbeda dan mereka masing-masing lebih baik daripada yang lain dalam domain masalah mereka sendiri
David Heffernan
2
Saya hanya menggunakan catuntuk mengirim output lesssetelah itu.
FUZxxl
1
Saya sering menggunakan catuntuk mencetak file yang sangat pendek ke konsol, file dalam /procdan /sysadalah kandidat yang sangat bagus. Dengan cara ini saya bisa melihat konten beberapa file secara bersamaan.
Feuermurmel

Jawaban:

20

Saya pribadi lebih suka viewuntuk konten statis atau tail -funtuk konten dinamis.

Ini tidak menjawab pertanyaan Anda. Ada pepatah "mengapa menggunakan lebih banyak jika Anda memiliki lebih sedikit" ;-)

Tetapi ada beberapa kasus di mana saya lebih suka kucing daripada kurang: Saya biasanya bekerja dengan X11-windows. Jendela-jendela ini memiliki buffer-gulir yang dapat diatur ke beberapa ratus baris.

Melakukan catuntuk - katakanlah 200 baris dan kemudian menggunakan mouse dengan scroll-bar lebih nyaman bagi saya daripada menggunakan lessdalam kasus ini.

Nils
sumber
4
Dengan viewmaksudmu biasa vim -R, atau Anda memiliki sesuatu yang lain dengan nama itu?
manatwork
Tidak - hanya vi (atau vim) dalam mode hanya baca. CentOS menetapkan alias itu secara default. Ini tidak akan memicu HIDS saat melihat file di direktori aman.
Nils
2
less +Fmelakukan apa yang tail -fdilakukannya.
legends2k
2
Sebenarnya, viewbukan alias; itu adalah tautan (ke viatau vim). vimelihat argv[0]ketika mulai (untuk melihat nama apa itu dipanggil di bawah) dan, jika itu viewatau rview, itu mengatur mode read-only (seolah-olah Anda telah mengetik vim -R).
G-Man Mengatakan 'Reinstate Monica'
91

Meskipun kedua perintah memungkinkan Anda untuk melihat konten file, tujuan aslinya sangat berbeda.

kurang memperluas kemampuan lebih . Yang terakhir ini dibuat untuk melihat konten file satu layar penuh pada suatu waktu. kurang menambah fitur seperti gerakan mundur dan manajemen memori yang lebih baik (tidak perlu membaca seluruh file sebelum dapat melihat baris pertama).

cat menyatukan file dan mencetak hasilnya pada output standar. Jika Anda hanya menyediakan satu file, Anda akan melihat konten file itu. Itu menjadi 'kuat' ketika Anda memberikan banyak file. Contoh yang baik adalah kombinasi split dan cat. Perintah pertama akan membagi file besar dalam porsi kecil. Yang kedua kemudian akan menggabungkan bagian-bagian kecil menjadi satu file.

Kembali ke pertanyaan Anda, cat akan lebih disukai dalam skrip otonom yang membutuhkan file untuk dibaca seluruhnya (atau digabungkan) tanpa interaksi. Dalam hal melihat file, saya pikir ini lebih merupakan masalah selera.

nrolans
sumber
4
lessselalu memungkinkan untuk mencari di dalam file, yang cattidak.
Bernhard
@ Brianhard: Bagaimana dengan melakukan grep pada output kucing?
user3527975
23

Saya biasanya menggunakan catketika saya harus mengetik perintah berdasarkan sesuatu di file. catlebih nyaman karena Anda dapat melihat file (jika kecil) saat Anda memiliki akses ke prompt shell. Ini juga memungkinkan untuk lapisan pipa.

Amir Rachum
sumber
3
Untuk satu file, pengalihan input standar juga dimungkinkan dan sering lebih disukai.
Pemrogram
17
Apakah ada situasi di mana kucing adalah solusi yang lebih baik?

Ketika Anda berurusan dengan lebih dari satu file dan ingin menyatukannya.

Dari halaman manual:

cat f - g
        Output f's contents, then standard input, then g's contents.
jasonwryan
sumber
15

Ada orang yang berpendapat keras bahwa satu-satunya tujuan catadalah untuk menipu kucing file enate. Untuk setiap penggunaan lainnya, ada more(atau less).

Tetapi ini gagal untuk memperhitungkan satu fakta yang cukup penting: catadalah satu karakter yang kurang diketik. Saya menggunakan perintah-perintah itu begitu sering sehingga satu karakter kurang adalah no-brainer.

Alasan lain adalah ketika Anda ingin membuat file. Saya sering menyalin dan menempelkan teks dari web ke file seperti ini (command prompt ditampilkan):

$ cat > filename
<Cmd-V>
<Ctrl-D>
$

Artinya, saya membuka file filenameuntuk akses tulis, tempel konten dan tutup aliran dengan menekan Ctrl- D. Baik lessjuga morebisa melakukan itu, dan itu lebih cepat dari membuka editor.

Konrad Rudolph
sumber
4
Jika Anda menggunakan zsh sebagai shell, Anda dapat mengaturnya sehingga $<filename(di mana $ada prompt) memanggil $ PAGER dengan stdin terhubung filename. Itu bahkan lebih sedikit karakter untuk diketik daripada cat.
Kevin Cathcart
@Kevin Senang tahu tapi saya pengguna bash.
Konrad Rudolph
2
Di Mac OS X, saya menggunakan pbpaste > filename, dan saya percaya X memiliki sesuatu yang serupa. Saya masih menggunakan catuntuk membuat file cepat, hanya saja tidak untuk menempel.
cobbal
@cobbal Hehe, saya tidak pernah memikirkan itu meskipun saya menggunakan pbcopy/ pbpasteuntuk tujuan lain.
Konrad Rudolph
1
Sebenarnya kurang dua karakter - Anda harus menekan quntuk keluar less: D
Martin von Wittich
9

Terkadang Anda tidak menginginkan pagination yang berfungsi lessdan hanya menginginkan file lengkap sehingga Anda akan menggunakannya cat.

Mike Brentlinger
sumber
4

Saya gunakan catuntuk grep(banyak) file.

cat <filename1> [<filename2> <filename3>] | grep -i "string of interest"

Saya tahu grepmendukung nama file, tetapi Jika Anda memilih file yang sama untuk istilah pencarian yang berbeda, mengedit perintah di mana istilah pencarian adalah hal terakhir pada baris lebih mudah maka harus ctrl + tombol panah kembali melalui baris.

Nama palsu
sumber
4

cat dapat digunakan untuk menggabungkan beberapa file biner menjadi satu file besar:

cat data.001 data.002 data.003 > bigdata.dat
Michał Šrajer
sumber
3

Saya menggunakan less -FX, yang membuat lessberperilaku seperti catketika file dapat ditampilkan pada satu layar. Dari halaman less(1)manual:

-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.

sumber
2

Saya kira, karena varian Unix yang sekarang sangat kebal, banyak orang tidak perlu mengelola sistem mereka (dengan vengence). Ketika segalanya berubah, Anda mungkin hanya bisa reboot dan memasuki sistem Anda dalam apa yang disebut lingkungan terbatas.

Anda mendapatkan baris perintah dan akses ke satu set kecil dari apa yang dianggap perintah yang berguna yang kecil dan biasanya terhubung secara statis. Anda mungkin mendapatkan vi sebagai editor atau bahkan ed yang lebih kecil, tetapi bukan emacs atau vim. Anda akan mendapatkan kucing, tetapi tidak kurang. Idenya adalah untuk memberi Anda cukup alat untuk memperbaiki sistem Anda tanpa mengambil terlalu banyak sumber daya karena sumber daya tersebut mungkin tidak dikonfigurasi dengan benar, atau semua digunakan. semakin sedikit perintah pada situasi itu berlebihan.

Paddy3118
sumber
2

Dan lesstidak diinstal sebelumnya pada semua distribusi GNU / Linux. (mis. Gentoo) catada di mana-mana, mungkin.

xin
sumber
2

The catmenginap pada layar. Semuanya lessmenghilang.

Klarifikasi oleh / untuk Volker Siegel:

Output cattetap di layar. Semuanya ditampilkan oleh lessmenghilang setelah ditutup.

PERASAAN KAGUM
sumber
1

Mungkin ada masalah dengan eskalasi hak istimewa, karena dalam 'kurang' Anda dapat menekan 'v' untuk mengedit file atau '!' untuk mengirim perintah shell.

Anda mungkin ingin mengizinkan beberapa pengguna untuk melihat file yang hanya bisa dibaca oleh pengguna super, tetapi tidak mengizinkan pengguna untuk mengedit file atau menggunakan hak akses pengguna super secara umum. Anda dapat melakukan ini dengan mengedit '/ etc / sudoers' untuk memungkinkan mereka menggunakan 'sudo / bin / cat / etc / importantfile'. Anda tidak ingin mengizinkan 'sudo / usr / bin / less / etc / importantfile', karena mereka dapat menggunakan 'v' untuk mengedit file, atau menggunakan '!' untuk meluncurkan shell dengan hak superuser penuh.

Tentu saja, pengguna dapat menggunakan 'sudo / bin / cat / etc / importantfile | kurang 'dan masih menggunakan' kurang ', tanpa risiko keamanan.

bgvaughan
sumber
1

Keduanya berbeda. lessadalah pager non-standar ( moreadalah pager standar), digunakan untuk melihat teks, sementara catmerupakan utilitas standar, digunakan untuk menggabungkan semua jenis dan jumlah aliran data menjadi satu.

Mereka mungkin terlihat melakukan hal yang sama dalam beberapa keadaan, tetapi sekali lagi, begitu juga utilitas lain.

Kusalananda
sumber
0

Untuk kenyamanan. kucing memiliki 3 karakter sementara lebih / kurang memiliki 4 karakter. Dan mengetik kucing hanya membutuhkan tangan kiri saja.

lamwaiman1988
sumber
1
Mengapa hanya menggunakan tangan kiri Anda keuntungan? Saya tidak menggunakan mouse di terminal ...
Bernhard
0

Dalam hal cara menunjukkan karakter di layar, lessdapat melakukan apa yang catbisa dilakukan; Dan banyak lagi.

Tapi ada alasan yang sangat baik untuk menggunakan cat untuk beberapa kasus:
lesshanya terlalu rumit untuk membuangnya pada masalah yang sangat sederhana. Saya memiliki begitu banyak pilihan sehingga sulit untuk menemukan yang catterkait di halaman manual.


Ingin menampilkan tab dalam Makefile?

Dalam man cat, opsi pertama adalah -A.
Deskripsi adalah tidak membantu: -vET.
Tapi nama pilihan lama terdengar tepat: --show-all.

Dan cat -A Makefilemelakukan apa yang saya butuhkan.


Sekarang, cari untuk itu less.

Volker Siegel
sumber
0

Baik 'kurang' dan 'lebih' akan bekerja persis seperti 'cat' jika outputnya bukan terminal (tty), seperti untuk pipa dan file, keduanya akan kembali ke tidak ada pagination.

Saya pikir aman untuk mengatakan bahwa 'cat' selalu ada di sistem Unix-type yang akan Anda temukan. Kehadiran 'kurang' dan / atau 'lebih' pada sistem apa pun kurang dapat diprediksi.

Karena itu, dalam skrip, jika Anda hanya memerlukan operasi non-pagination, 'cat' pasti akan hadir di mana pun skrip Anda digunakan pada sistem tipe Unix.

pengguna208007
sumber
1
Yah, aman untuk menganggap bahwa moreakan tersedia, mengingat itu diamanatkan oleh Spesifikasi Unix Tunggal.
Kusalananda
Sedihnya, sementara itu mungkin dimandatkan seperti itu, tetapi dalam pengalaman saya itu tidak selalu ada. Perlu dicatat bahwa ada sejumlah sistem mirip Unix yang tidak mengklaim sebagai Unix. Saya pikir seseorang dapat cukup percaya diri bahwa salah satu lessatau moreakan hadir, tapi saya pikir seseorang tidak dapat mempercayai yang tertentu, juga bahwa itu adalah implementasi 'benar' ... sering satu sama lain, kadang-kadang mereka ' kembali versi ringan minimal.
user208007
-1

Piping cat melalui grep berguna:

cat <filename> | grep -i "string of interest"
RobW
sumber
4
Belum lagi yang grepmenggunakan nama file sebagai argumen, atau Anda bisa menggunakan pengalihan. Pipa itu mahal.
Chris Down
25
Selamat, Anda memenangkan penghargaan 'penggunaan kucing yang tidak berguna'!
ThatGraemeGuy
4
@TimKennedy - "kapan Anda dapat less" ada dalam judul pertanyaan ...
Chris Down
5
Terpilih. Saya melakukan ini secara teratur. Jika saya ingin mengambil file beberapa kali untuk istilah pencarian yang berbeda, ini lebih mudah. grep ingin grep [search term] [filename]Oleh karena itu, lebih sulit untuk mengedit istilah pencarian jika saya menggunakan riwayat terminal. Dengan mem-pipkan ke grep, istilah pencarian adalah hal terakhir di telepon, dan lebih mudah diedit.
Nama Palsu
10
Anda masih dapat memiliki pemesanan yang Anda inginkan tanpa menggunakan cat: < [filename] grep [search term]dan < filename tail -n 1000 | grep pattern. Pengalihan bisa cukup banyak di mana saja di baris perintah.
camh