คำถามติดแท็ก cat

cat เป็นยูทิลิตี้ Unix มาตรฐานที่ใช้สำหรับการต่อไฟล์หรือพิมพ์ไฟล์เฉพาะบนเอาต์พุตมาตรฐาน

2
ควรใช้ cat, dd, pv หรือโพรซีเดอร์อื่นเพื่อคัดลอกซีดี / ดีวีดีดีกว่าไหม
พื้นหลัง ฉันกำลังคัดลอกซีดี / ดีวีดีข้อมูลบางส่วนไปยังไฟล์ ISO เพื่อใช้งานในภายหลังโดยไม่จำเป็นต้องใช้ไดรฟ์ ฉันกำลังมองหาวิธีการทางอินเทอร์เน็ตและฉันพบมาก: ใช้ในcatการคัดลอกสื่อ: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html cat /dev/sr0 > image.iso การใช้ในddการทำเช่นนั้น (เห็นได้ชัดว่าใช้กันอย่างแพร่หลายมากที่สุด): http://www.linuxjournal.com/content/archiving-cds-iso-commandline dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso ใช้pvเพื่อทำสิ่งนี้ให้สำเร็จ: ดูman pvข้อมูลเพิ่มเติมแม้ว่านี่คือส่วนที่ตัดตอนมา: Taking an image of a disk, skipping errors: pv -EE /dev/sda > disk-image.img Writing an image back to a disk: pv disk-image.img > /dev/sda Zeroing a …
22 linux  dd  cat  disk-image  pv 

2
น้อยกว่า file1 file2 | แมว - ทำไมจึงใช้งานได้
เมื่อฉันใช้less file1 file2ฉันจะได้รับทั้งไฟล์ที่แสดงใน "less buffer viewer" แต่less file1 file2 | catพิมพ์เนื้อหาของไฟล์ทั้งสองต่อท้าย stdout จะทราบได้อย่างไรว่าควรแสดง "โปรแกรมดูบัฟเฟอร์น้อย" หรือสร้างเอาต์พุตไปยัง stdout สำหรับคำสั่งถัดไป มีกลไกอะไรที่ใช้ในการทำสิ่งนี้?
21 pipe  cat  less 

2
Ctrl + D สำหรับสิ้นสุดอินพุตบรรทัดของเทอร์มินัล
ถ้าฉันทำ $ cat > file.txt ข้อความCtrl- DCtrl-D คำถามที่ 1: ถ้าฉันไม่กด Enter ทำไมฉันต้องกดCtrl- Dสองครั้ง? ถ้าฉันทำ $ cat > file.txt pa bam pshhh Ctrl-Z [2]+ Stopped cat > file.txt $ cat file.txt $ cat > file.txt pa bam pshhh Ctrl-Z [2]+ Stopped cat > file.txt $ cat file.txt pa bam pshhh ทำไมไฟล์ที่มี …

2
เหตุใดคำสั่งนี้จึงสร้างไฟล์ขนาดใหญ่มหาศาล
ฉันกำลังทดลองวันนี้ด้วยการดำเนินการผนวกและในความอยากรู้ของฉันวิ่งนี้ (ที่file1.txtไม่ว่างเปล่าและfile2.txtว่างเปล่า): $ cat file1.txt >> file2.txt >> file1.txt เมื่อฉันเห็นมันใช้เวลาซักพักฉันก็กดCtrl+ Cเพื่อจบมัน จากนั้นfile1.txtมีขนาดหลายร้อย MB การสลับชื่อไฟล์ไม่ได้ให้ผลเช่นเดียวกัน เฉพาะเมื่อไฟล์อยู่ในลำดับนี้จะเกิดการเปลี่ยนเส้นทางไม่สิ้นสุด เกิดอะไรขึ้นที่ทำให้เกิดสิ่งนี้

3
ฉันจะเชื่อมไฟล์ทั้งหมดในไดเรกทอรีที่กำหนดตามวันที่ที่ฉันต้องการไฟล์ใหม่ล่าสุดอยู่ด้านบนได้อย่างไร
และด้วยไฟล์ที่เก่าที่สุดที่ด้านล่าง? นอกจากนี้หากฉันทำเช่นนี้เป็นไปได้ไหมที่จะตัดส่วนหัวที่ซ้ำซ้อนที่อยู่ในไฟล์ HTML แต่ละไฟล์ ฉันเห็นตัวเองเชื่อมไฟล์ HTML จำนวนมากเข้าด้วยกันและมันก็เป็นการดีที่จะลดขนาดไฟล์ของไฟล์ที่ดีที่สุดลงเล็กน้อย


3
tee + cat: ใช้เอาต์พุตหลายครั้งแล้วต่อผลลัพธ์ที่ต่อกัน
ถ้าผมเรียกคำสั่งบางอย่างเช่นechoฉันสามารถใช้ผลจากคำสั่งว่าในคำสั่งอื่น ๆ teeที่มีหลาย ตัวอย่าง: echo "Hello world!" | tee >(command1) >(command2) >(command3) ด้วย cat ฉันสามารถรวบรวมผลลัพธ์ของคำสั่งต่าง ๆ ได้ ตัวอย่าง: cat <(command1) <(command2) <(command3) ฉันต้องการที่จะสามารถทำทั้งสองสิ่งในเวลาเดียวกันเพื่อที่จะสามารถteeเรียกคำสั่งเหล่านั้นในผลลัพธ์ของสิ่งอื่น (ตัวอย่างเช่นที่echoฉันเขียน) แล้วรวบรวมผลลัพธ์ทั้งหมดของพวกเขาในผลลัพธ์เดียวด้วยcat. มันเป็นสิ่งสำคัญที่จะให้ผลในการสั่งซื้อที่นี้หมายถึงเส้นในการส่งออกของcommand1, command2และcommand3ไม่ควรพัน แต่ได้รับคำสั่งเป็นคำสั่งที่มี (ที่มันเกิดขึ้นกับcat) อาจจะมีตัวเลือกที่ดีกว่าcatและteeแต่ผู้ที่เป็นคนที่ฉันรู้เพื่อให้ห่างไกล ฉันต้องการหลีกเลี่ยงการใช้ไฟล์ชั่วคราวเนื่องจากขนาดของอินพุตและเอาต์พุตอาจมีขนาดใหญ่ ฉันจะทำสิ่งนี้ได้อย่างไร PD: ปัญหาอื่นคือสิ่งนี้เกิดขึ้นในลูปซึ่งทำให้การจัดการไฟล์ชั่วคราวหนักขึ้น นี่คือรหัสปัจจุบันที่ฉันมีและใช้งานได้กับ testcase เล็ก ๆ แต่มันสร้างลูปไม่สิ้นสุดเมื่ออ่านและเขียนจาก auxfile ด้วยวิธีที่ฉันไม่เข้าใจ somefunction() { if [ $1 -eq 1 ] then …
18 pipe  cat  tee  concurrency 

2
ผลลัพธ์ที่ไม่คาดคิดทดสอบลูปแบ็คอนุกรมโดยใช้ echo และ cat
ดังนั้นฉันจึงมีพอร์ตอนุกรม RS232 มาตรฐานที่วนกลับมาเองโดยใช้สายจาก Tx ถึง Rx ฉันกำลังทดสอบลูปแบ็คด้วยการรันechoและcatในสองเทอร์มินัลแยกกัน: cat /dev/ttyS1 echo "hi" > /dev/ttyS1 ปัญหาของฉันอยู่กับผลลัพธ์ ฉันคาดหวังว่าจะได้เห็น "สวัสดี" หนึ่งตัวบนแมวที่วิ่งอยู่ แต่กลับได้รับสิ่งนี้: hi [2 newlines] hi [4 newlines] hi [8 newlines] hi [16 newlines] hi [32 newlines] hi ... และอื่น ๆ จนผม+ctrlc cat หลังจากขัดจังหวะแมวถ้าฉันเรียกใช้อีกครั้งมันจะไม่ส่งออก "hi" จนกว่าฉันจะรันเสียงสะท้อนครั้งที่สอง เป็นเรื่องปกติหรือไม่ ความคิดใดที่ว่าทำไมฉันถึงเห็นพฤติกรรมนี้ แก้ไข : โดยการขึ้นบรรทัดใหม่ผมหมายถึง 0x0AASCII ไม่มีการขึ้นบรรทัดใหม่ในเอาต์พุตนี้
18 cat  serial-port  echo 

4
ทำไม cat x >> x loop
คำสั่ง bash ต่อไปนี้จะเข้าสู่วง infinte: $ echo hi > x $ cat x >> x ฉันเดาได้ว่าcatอ่านต่อไปxหลังจากเริ่มเขียนไปยัง stdout แล้ว อย่างไรก็ตามสิ่งที่น่าสับสนคือการทดสอบการใช้งานแมวของฉันแสดงพฤติกรรมที่แตกต่าง: // mycat.c #include <stdio.h> int main(int argc, char **argv) { FILE *f = fopen(argv[1], "rb"); char buf[4096]; int num_read; while ((num_read = fread(buf, 1, 4096, f))) { fwrite(buf, 1, num_read, stdout); fflush(stdout); …

3
ทำไมเครื่องหมายน้อยกว่าไม่ทำงานแทนแมวในทุบตี?
ฉันได้ยินเกี่ยวกับ "การใช้แมวที่ไร้ประโยชน์" และพบคำแนะนำบางอย่าง แต่ผลลัพธ์ต่อไปนี้ไม่มีอะไรในเปลือก bash ของฉัน < filename การใช้แมวทำงานได้ตามที่คาดหวัง cat filename ฉันใช้ Fedora Core 18 และ GNU ทุบตีรุ่น 4.2.45 (1) แก้ไข: การใช้งานที่ด้านหน้าของไปป์ไม่ทำงานเช่นกัน < filename | grep pattern ในขณะที่ใช้แมวทำงานตามที่คาดไว้ cat filename | grep pattern แก้ไข 2: เพื่อชี้แจงฉันรู้ว่าฉันสามารถใช้สิ่งนี้ grep pattern < filename แต่ฉันอ่านที่นี่/programming/11710552/useless-use-of-catว่าฉันยังสามารถใช้หน้าคำสั่ง มันไม่ทำงานต่อหน้าคำสั่งแม้ว่า

6
วิธีทำให้ bash ใส่พรอมต์บนบรรทัดใหม่หลังจากคำสั่ง cat?
สิ่งที่ฉันได้รับ: host:~ user$ cat example.txt some texthost:~ stas$ สิ่งที่ฉันต้องการได้รับ: host:~ user$ cat example.txt some text host:~ stas$ มีวิธีที่ฉันสามารถcatประพฤติเช่นนี้หรือไม่? ฉันใช้ทุบตีใน Mac OS X
17 bash  osx  prompt  cat 

1
ทำให้โปรแกรมอ่านเป็นครั้งแรกจากไปป์แล้วจากคีย์บอร์ด
interactiveพิจารณาโปรแกรมโต้ตอบ ฉันต้องเรียกใช้โปรแกรมนี้บ่อยครั้งและทุกครั้งที่ฉันเรียกใช้คำสั่งแรก ๆ นั้นเหมือนกัน เห็นได้ชัดว่าการพิมพ์คำสั่งเหล่านั้นซ้ำแล้วซ้ำอีกเป็นความเจ็บปวด ฉันได้เก็บคำสั่งเหล่านั้น (คั่นด้วยการขึ้นบรรทัดใหม่) cmdในแฟ้ม ตอนนี้ฉันสามารถทำได้cat cmd | interactiveเพื่อเรียกใช้คำสั่ง ปัญหาคือเมื่อcmdอ่านเสร็จแล้วจะinteractiveได้รับ EOF และออก สิ่งที่ฉันต้องการทำคือinteractiveอ่านจากไปป์ก่อน (เห็นได้ชัดว่าinteractive < cmdยอมรับได้) และเมื่อได้รับ EOF ให้เริ่มอ่านจากแป้นพิมพ์แทน
17 command-line  pipe  cat  stdin 

3
การอ่านอย่างต่อเนื่องจากไปป์ที่มีชื่อ (cat หรือ tail -f)
ฉันได้กำหนดค่าrsyslogให้บันทึกเหตุการณ์การบันทึกบางอย่างไปที่/dev/xconsole: *.*;cron.!=info;mail.!=info |/dev/xconsole /dev/xconsoleเป็นชื่อไปป์ ( fifo) cat /dev/xconsoleถ้าผมต้องการที่จะเห็นสิ่งที่จะถูกบันทึกไว้ที่ฉันสามารถทำได้ ฉันกำลังแปลกใจที่จะเห็นว่าคำสั่งcat /dev/xconsoleไม่เสร็จสมบูรณ์หลังจากที่ได้อ่านไฟล์ tail -fแต่แทนที่จะทำหน้าที่เป็น กล่าวอีกนัยหนึ่งทั้งสองคำสั่งทำงานเหมือนกัน: cat /dev/xconsole tail -f /dev/xconsole ใครช่วยอธิบายหน่อยได้ไหมว่าเพราะอะไร มีความแตกต่างระหว่างสองคนนี้ไหม?
16 pipe  cat  tail  fifo 

7
เหตุใดจึงมีความแตกต่างในเวลาดำเนินการของเสียงก้องและแมว?
การตอบคำถามนี้ทำให้ฉันถามคำถามอื่น: ฉันคิดว่าสคริปต์ต่อไปนี้ทำสิ่งเดียวกันและอันที่สองควรเร็วกว่ามากเพราะการใช้ครั้งแรกcatที่ต้องการเปิดไฟล์ซ้ำไปซ้ำมา แต่อย่างที่สองเปิดไฟล์เท่านั้น เพียงครั้งเดียวและเพียงแค่ก้องตัวแปร: (ดูหัวข้อการปรับปรุงสำหรับรหัสที่ถูกต้อง) ครั้งแรก: #!/bin/sh for j in seq 10; do cat input done >> output ประการที่สอง: #!/bin/sh i=`cat input` for j in seq 10; do echo $i done >> output ในขณะที่อินพุตประมาณ 50 เมกะไบต์ แต่เมื่อฉันลองครั้งที่สองมันก็ช้าเกินไปเพราะการสะท้อนตัวแปรiเป็นกระบวนการที่ยิ่งใหญ่ ฉันยังมีปัญหากับสคริปต์ที่สองเช่นขนาดของไฟล์ที่ส่งออกต่ำกว่าที่คาดไว้ ฉันยังตรวจสอบหน้า man ของechoและcatเปรียบเทียบ: echo - แสดงบรรทัดข้อความ cat - เชื่อมไฟล์และพิมพ์บนเอาต์พุตมาตรฐาน แต่ฉันไม่ได้รับความแตกต่าง ดังนั้น: ทำไมแมวถึงเร็วขนาดนี้และเสียงก้องช้าในบทที่สอง? …

3
วิธีอ่านไฟล์ dash
ฉันจะอ่านไฟล์เส้นประจากเทอร์มินัลอื่นนอกเหนือจากการลบด้วย ./ ตัวอย่างเช่นการอ่าน- fileเราสามารถอ่านได้โดย cat ./-file_name ถาม:มีวิธีอื่นในการทำสิ่งเดียวกันหรือไม่?
15 bash  cat 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.