เคยมีเหตุผลที่จะใช้ `cat 'เมื่อคุณมี` น้อยลง' หรือไม่?


59

ฉันเคยใช้catเพื่อดูไฟล์ จากนั้นฉันได้เรียนรู้ว่าlessโดยปกติแล้วจะดีกว่าและเป็นสิ่งที่จำเป็นถ้าไฟล์มีความยาวมากกว่าสองสามแถว

คำถามของฉัน: มีเหตุผลที่จะใช้catแทนlessหรือไม่? มีสถานการณ์ใดบ้างที่catทางออกที่ดีกว่า


17
lessและcatแก้ปัญหาที่แตกต่างกันและพวกเขาแต่ละคนดีกว่าคนอื่นในโดเมนปัญหาของตัวเอง
เดวิด Heffernan

2
ฉันใช้catเพื่อไปป์เท่านั้นมันจะถูกส่งออกไปlessหลังจากนั้น
FUZxxl

1
ฉันมักจะใช้catพิมพ์ไฟล์ที่สั้นมากไปยังคอนโซลไฟล์ใน/procและ/sysเป็นตัวเลือกที่ดีมาก วิธีนี้ฉันสามารถดูเนื้อหาของไฟล์หลายไฟล์พร้อมกัน
Feuermurmel

คำตอบ:


20

ฉันชอบviewเนื้อหาแบบคงที่หรือtail -fเนื้อหาแบบไดนามิก

แต่นี่ไม่ได้ตอบคำถามของคุณ มีคำว่า "ทำไมต้องใช้มากขึ้นถ้าคุณมีน้อยลง" ;-)

แต่มีบางกรณีที่ฉันชอบแมวน้อย: ฉันมักจะทำงานกับ X11-windows หน้าต่างเหล่านี้มีตัวเลื่อนบัฟเฟอร์ซึ่งสามารถตั้งค่าได้หลายร้อยบรรทัด

ทำcatเพื่อ - สมมติว่า 200 บรรทัดแล้วใช้เมาส์กับแถบเลื่อนสะดวกสบายกว่าที่ฉันใช้lessในกรณีเหล่านี้


4
ตามviewปกติvim -Rแล้วคุณมีชื่ออื่นอีกไหม?
จัดการ

ไม่ - เพียงแค่ vi (หรือ vim) ในโหมดอ่านอย่างเดียว CentOS ตั้งค่านามแฝงนั้นตามค่าเริ่มต้น สิ่งนี้จะไม่ทริกเกอร์ HIDS เมื่อดูไฟล์ในไดเรกทอรีที่ปลอดภัย
นิลส์

2
less +Fทำในสิ่งที่tail -fไม่
legends2k

2
จริงๆแล้วviewไม่ใช่นามแฝง มันคือลิงค์ (ไปยังviหรือvim) viดูargv[0]เมื่อมันเริ่มต้น (เพื่อดูว่ามันถูกเรียกภายใต้ชื่อ) และถ้าเป็นviewหรือrviewว่ามันจะตั้งโหมดอ่านอย่างเดียว (เช่นถ้าคุณพิมพ์vim -R)
G-Man

91

แม้ว่าทั้งสองคำสั่งอนุญาตให้คุณดูเนื้อหาของไฟล์ได้ แต่จุดประสงค์ดั้งเดิมของไฟล์นั้นแตกต่างกันมาก

น้อยขยายขีดความสามารถของมากขึ้น หลังถูกสร้างขึ้นเพื่อดูเนื้อหาของไฟล์หนึ่งหน้าจอในเวลา เพิ่มคุณสมบัติน้อยลงเช่นการเคลื่อนไหวย้อนหลังและการจัดการหน่วยความจำที่ดีขึ้น (ไม่จำเป็นต้องอ่านไฟล์ทั้งหมดก่อนที่จะเห็นบรรทัดแรก)

cat เชื่อมไฟล์และพิมพ์ผลลัพธ์บนเอาต์พุตมาตรฐาน หากคุณระบุเพียงไฟล์เดียวคุณจะเห็นเนื้อหาของไฟล์นั้น มันจะกลายเป็น 'มีประสิทธิภาพ' เมื่อคุณให้หลายไฟล์ ตัวอย่างที่ดีคือการรวมกันของการแยกและแมว คำสั่งแรกจะแบ่งไฟล์ขนาดใหญ่ในส่วนเล็ก ๆ ส่วนที่สองจะต่อกันส่วนเล็ก ๆ ลงในไฟล์เดียว

กลับไปที่คำถามของคุณแมวควรเป็นที่ต้องการในสคริปต์อัตโนมัติที่ต้องการให้ไฟล์อ่านทั้งหมด (หรือตัดแบ่ง) โดยไม่มีการโต้ตอบ ในแง่ของการดูไฟล์ฉันคิดว่ามันเป็นคำถามของรสนิยม


4
lessอนุญาตให้ค้นหาในไฟล์ซึ่งcatไม่ได้
Bernhard

@ เบอร์นาร์ด: แล้วทำ grep กับ cat output ล่ะ?
user3527975

23

ฉันมักจะใช้catเมื่อฉันต้องการพิมพ์คำสั่งตามสิ่งที่อยู่ในไฟล์ catสะดวกกว่าเนื่องจากคุณสามารถดูไฟล์ (หากมีขนาดเล็ก) ในขณะที่คุณสามารถเข้าถึงเชลล์พรอมต์ นอกจากนี้ยังช่วยในการซับท่อ


3
สำหรับไฟล์เดียวการเปลี่ยนเส้นทางอินพุตมาตรฐานก็เป็นไปได้และมักจะดีกว่า
AProgrammer

17
มีสถานการณ์ใดบ้างที่แมวเป็นทางออกที่ดีกว่า?

เมื่อคุณจัดการมากกว่าหนึ่งไฟล์และต้องการที่จะเชื่อมต่อพวกเขา

จากหน้าคน:

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

15

มีคนที่โต้เถียงอย่างรุนแรงว่าจุดประสงค์เพียงอย่างเดียวของcatการทำไฟล์ en catคือ สำหรับการใช้งานอื่น ๆ จะมีmore(หรือless)

แต่สิ่งนี้ล้มเหลวในการคำนึงถึงข้อเท็จจริงที่สำคัญcatอย่างหนึ่งนั่นคือตัวละครตัวหนึ่งพิมพ์น้อยลง ฉันใช้คำสั่งเหล่านั้นบ่อยครั้งที่ตัวละครตัวเดียวที่น้อยกว่านั้นเป็นเกมง่ายๆ

อีกเหตุผลคือเมื่อคุณต้องการสร้างไฟล์ ฉันมักจะคัดลอกและวางข้อความจากเว็บเป็นไฟล์เช่นนี้ (แสดงพร้อมท์คำสั่ง):

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

นั่นคือผมเปิดไฟล์filenameสำหรับการเข้าถึงเขียนวางเนื้อหาและปิดกระแสโดยการกด-Ctrl Dทั้งlessมิได้moreสามารถทำเช่นนั้นและเร็วกว่าการเปิดบรรณาธิการ


4
ถ้าคุณใช้ zsh เป็นเปลือกคุณสามารถตั้งขึ้นเพื่อให้$<filename(ที่$เป็นพรอมต์) เรียก $ เพจเจอร์กับ stdin filenameเชื่อมต่อกับ catนั่นคือตัวละครแม้แต่น้อยที่จะพิมพ์กว่า
Kevin Cathcart

@ เควินดีใจที่รู้ แต่ฉันเป็นผู้ใช้ทุบตี
Konrad Rudolph

2
ใน Mac OS X ฉันใช้pbpaste > filenameและฉันเชื่อว่า X มีบางอย่างที่คล้ายกัน ฉันยังคงใช้catสำหรับการสร้างไฟล์อย่างรวดเร็วไม่ใช่แค่การวาง
cobbal

@cobbal Hehe ฉันไม่เคยคิดถึงเรื่องนี้แม้ว่าจะใช้pbcopy/ pbpasteเพื่อจุดประสงค์อื่น
Konrad Rudolph

1
จริงๆแล้วมันมีตัวละครน้อยกว่าสองตัว - คุณต้องกดqเพื่อออกless: D
Martin von Wittich

9

บางครั้งคุณไม่ต้องการเลขที่ไม่และเพียงต้องการไฟล์ที่สมบูรณ์ดังนั้นคุณต้องการใช้lesscat


4

ฉันใช้catเพื่อgrepไฟล์ (หลาย)

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

ฉันรู้ว่าgrepรองรับชื่อไฟล์ แต่ถ้าคุณ grepping ไฟล์เดียวกันสำหรับคำค้นหาที่แตกต่างกันการแก้ไขคำสั่งที่คำค้นหาเป็นสิ่งสุดท้ายในบรรทัดนั้นง่ายกว่าแล้วต้องกด ctrl + ลูกศร - คีย์ผ่านบรรทัด


4

cat สามารถใช้เพื่อเชื่อมไฟล์ไบนารีหลายไฟล์ให้เป็นไฟล์ใหญ่:

cat data.001 data.002 data.003 > bigdata.dat

3

ฉันใช้less -FXซึ่งทำให้lessทำงานเหมือนcatเมื่อไฟล์สามารถแสดงบนหน้าจอเดียว จากless(1)manpage:

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

2

ฉันเดาว่าเพราะตอนนี้ความแปรปรวนของความแปรปรวนของ Unix หลายคนไม่จำเป็นต้องบริหารระบบของพวกเขา เมื่อสิ่งต่างๆเกิดขึ้นคุณอาจจะสามารถรีบูตและเข้าสู่ระบบของคุณในสิ่งที่เรียกว่าสภาพแวดล้อมที่ถูก จำกัด

คุณได้รับบรรทัดคำสั่งและการเข้าถึงชุดเล็ก ๆ ของสิ่งที่ถือว่าเป็นคำสั่งที่มีประโยชน์ที่มีขนาดเล็กและมักจะเชื่อมโยงแบบคงที่ คุณอาจได้รับ vi เป็นเอดิเตอร์หรือแม้แต่ ed ที่เล็กกว่า แต่ไม่ใช่ emacs หรือ vim คุณจะได้รับแมว แต่ไม่น้อย แนวคิดคือการให้เครื่องมือเพียงพอที่จะซ่อมแซมระบบของคุณโดยไม่ต้องใช้ทรัพยากรมากเกินไปเนื่องจากทรัพยากรเหล่านั้นอาจได้รับการกำหนดค่าไม่ถูกต้องหรือหมดไป คำสั่งน้อยกว่าสถานการณ์เหล่านั้นจะฟุ่มเฟือย


2

และlessไม่ได้ติดตั้งไว้ล่วงหน้าในการกระจาย GNU / Linux ทั้งหมด (เช่น Gentoo) catมีอยู่ทั่วไป


2

การcatอยู่บนหน้าจอ ทุกอย่างlessหายไป

ชี้แจงโดย / สำหรับ Volker Siegel:

ผลลัพธ์ของการcatอยู่บนหน้าจอ ทุกอย่างที่แสดงโดยlessหายไปหลังจากปิด


1

อาจมีปัญหาในการเพิ่มสิทธิ์เนื่องจากภายใน 'น้อยกว่า' คุณสามารถกด 'v' เพื่อแก้ไขไฟล์หรือ '!' เพื่อส่งคำสั่งเชลล์

คุณอาจต้องการอนุญาตให้ผู้ใช้บางรายดูไฟล์ที่ superuser สามารถอ่านได้เท่านั้น แต่ไม่อนุญาตให้ผู้ใช้เหล่านั้นแก้ไขไฟล์หรือใช้สิทธิ์ superuser โดยทั่วไป คุณสามารถทำได้โดยการแก้ไข '/ etc / sudoers' เพื่อให้พวกเขาใช้ 'sudo / bin / cat / etc / importantfile' คุณไม่ต้องการอนุญาตให้ 'sudo / usr / bin / less / etc / importantfile' เพราะพวกเขาสามารถใช้ 'v' เพื่อแก้ไขไฟล์หรือใช้ '!' เพื่อเปิดเปลือกด้วยสิทธิ์ superuser เต็ม

แน่นอนผู้ใช้สามารถใช้ 'sudo / bin / cat / etc / importantfile | น้อย 'และยังคงใช้' น้อย 'โดยไม่มีความเสี่ยงด้านความปลอดภัย


1

ทั้งสองแตกต่างกัน lessเป็นเพจเจอร์ที่ไม่ได้มาตรฐาน ( moreคือหนึ่งมาตรฐาน) ใช้สำหรับการดูข้อความในขณะที่catเป็นยูทิลิตี้มาตรฐานที่ใช้สำหรับเชื่อมต่อชนิดและจำนวนของสตรีมข้อมูลเป็นหนึ่งเดียว

พวกเขาอาจดูเหมือนจะทำสิ่งเดียวกันภายใต้สถานการณ์บางอย่าง แต่แล้วอีกครั้งดังนั้นสาธารณูปโภคอื่น ๆ


0

เพื่อความสะดวก. แมวมี 3 ตัวอักษรในขณะที่มาก / น้อยมี 4 ตัวอักษร และการพิมพ์แมวต้องการเพียงมือซ้ายของคุณเท่านั้น


1
เหตุใดการใช้มือซ้ายจึงได้เปรียบ? ฉันไม่ใช้เมาส์บนเทอร์มินัล ...
แบร์นฮาร์ด

0

ในแง่ของวิธีการแสดงตัวอักษรบนหน้าจอlessสามารถทำสิ่งที่catสามารถทำได้ และอีกมากมาย

แต่มีเหตุผลที่ดีมากที่จะใช้แมวในบางกรณี:
lessมันซับซ้อนเกินไปที่จะทำให้เกิดปัญหาง่ายๆ ฉันมีตัวเลือกมากมายจนยากที่จะหาสิ่งที่catเกี่ยวข้องในหน้าคน


ต้องการแสดงแท็บในMakefile?

ในตัวเลือกแรกคือman cat คำอธิบายไม่เป็นประโยชน์: แต่ชื่อตัวเลือกที่ยาวเพียงเสียงขวา: -A
-vET
--show-all

และcat -A Makefileทำในสิ่งที่ฉันต้องการ


lessตอนนี้ไปพบว่าสำหรับ


0

ทั้ง 'น้อย' และ 'มากกว่า' จะทำงานเหมือนกับ 'cat' หากเอาต์พุตไม่ใช่เทอร์มินัล (tty) สำหรับไพพ์และไฟล์พวกเขาทั้งสองจะไม่เปลี่ยนเลขหน้า

ฉันคิดว่ามันปลอดภัยที่จะบอกว่า 'cat' ปรากฏอยู่เสมอในระบบ Unix ทุกประเภทที่คุณจะพบ การปรากฏตัวของ 'น้อย' และ / หรือ 'มากขึ้น' ในระบบใด ๆ ที่สามารถคาดเดาได้น้อย

ในสคริปต์ดังนั้นหากคุณต้องการเพียงการดำเนินการที่ไม่แบ่งหน้า 'cat' จะต้องมีอยู่ทุกที่ที่สคริปต์ของคุณถูกใช้บนระบบ Unix


1
มันปลอดภัยที่จะสมมติว่าmoreจะมีให้เห็นตามที่กำหนดโดย Single Unix Specification
Kusalananda

น่าเศร้าในขณะที่มันอาจได้รับคำสั่งเช่นนั้น แต่ในประสบการณ์ของฉันมันไม่ได้อยู่เสมอ เป็นที่น่าสังเกตว่ามีระบบคล้าย Unix จำนวนมากที่ไม่ได้อ้างว่าเป็น Unix ฉันคิดว่าคน ๆ หนึ่งค่อนข้างมั่นใจได้ว่าจะมีตัวตนอยู่lessหรือmoreไม่ แต่ฉันคิดว่าตัวเองไม่สามารถไว้ใจคนใดคนหนึ่งหรือว่ามันเป็นการนำไปใช้ที่ 'จริง' ... รุ่นน้ำหนักเบาน้อยที่สุด
user208007

-1

การวางท่อโดยใช้แมวผ่าน grep มีประโยชน์:

cat <filename> | grep -i "string of interest"

4
ไม่ต้องพูดถึงว่าgrepใช้ชื่อไฟล์เป็นอาร์กิวเมนต์หรือคุณสามารถใช้การเปลี่ยนเส้นทาง ท่อมีราคาแพง
Chris Down

25
ขอแสดงความยินดีคุณได้รับรางวัล 'ไร้ประโยชน์จากการใช้แมว'!
ThatGraemeGuy

4
@TimKennedy - "เมื่อคุณได้มีless" อยู่ในชื่อคำถาม ...
คริสลง

5
upvoted ฉันทำสิ่งนี้เป็นประจำ หากฉันต้องการ grep ไฟล์หลายครั้งสำหรับคำค้นหาที่แตกต่างกันนี้จะง่ายกว่า grep ต้องการgrep [search term] [filename]ดังนั้นจึงเป็นเรื่องยากที่จะแก้ไขข้อความค้นหาหากฉันใช้ประวัติเทอร์มินัล โดยการไพพ์ถึง grep คำค้นหาคือสิ่งสุดท้ายในบรรทัดและง่ายต่อการแก้ไข
ชื่อปลอม

10
คุณยังสามารถมีการสั่งซื้อที่คุณต้องการโดยไม่ต้องใช้cat: และ< [filename] grep [search term] < filename tail -n 1000 | grep patternการเปลี่ยนเส้นทางสามารถไปที่ใดก็ได้ในบรรทัดคำสั่ง
camh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.