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

3
ฉันจะรับข้อมูลเพิ่มเติมเกี่ยวกับ open pipes ได้อย่างไรแสดงใน / proc ใน Linux
ใน Linux ถ้าคุณเข้าไปขุด/proc/<pid>/fdบ่อยครั้งคุณจะเห็นผลลัพธ์เช่น: lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668] lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669] l-wx------ 1 root …
53 linux  pipe 

10
การขยายไฟล์ที่บินผ่านไปป์
ฉันสามารถทำให้ unzip หรือโปรแกรมที่คล้ายกันทำงานบนเอาต์พุตมาตรฐานได้หรือไม่ สถานการณ์คือฉันกำลังดาวน์โหลดไฟล์ zip ซึ่งควรจะคลายซิปทันที ปัญหาที่เกี่ยวข้อง: ฉันจะไพพ์ไฟล์ที่ดาวน์โหลดไปยังเอาต์พุตมาตรฐานใน bash ได้อย่างไร


3
ฉันจะจัดการช่องว่างในชื่อไฟล์เมื่อใช้ xargs ในการค้นหาผลลัพธ์ได้อย่างไร
หนึ่งในวิธีปฏิบัติทั่วไปของฉันคือการใช้ greps กับไฟล์ทุกประเภทเช่นหาไฟล์ HTML ทั้งหมดที่มีคำว่า "rumpus" อยู่ในนั้น ฉันจะใช้มัน find /path/to -name "*.html" | xargs grep -l "rumpus" บางครั้งจะกลับมาไฟล์ที่มีช่องว่างในชื่อของมันเช่นfind my new file.htmlเมื่อxargsผ่านสิ่งนี้ไปยังgrepฉันได้รับข้อผิดพลาด: grep: /path/to/bad/file/my: No such file or directory grep: new: No such file or directory grep: file.html: No such file or directory ฉันสามารถดูสิ่งที่เกิดขึ้นที่นี่: ไปป์หรือxargsคือการรักษาพื้นที่เป็นตัวคั่นระหว่างไฟล์ แต่สำหรับชีวิตของฉันฉันไม่สามารถหาวิธีป้องกันพฤติกรรมนี้ได้ สามารถใช้find+ ได้xargsหรือไม่ หรือฉันต้องใช้คำสั่งที่แตกต่างอย่างสิ้นเชิง?
28 find  grep  pipe  xargs 

4
วิธีการ stderr ท่อโดยไม่ต้องท่อ stdout
ฉันจะไพพ์สตรีมข้อผิดพลาดมาตรฐานโดยไม่ต้องไพพ์สตรีมออกมาตรฐานได้อย่างไร ฉันรู้ว่าคำสั่งนี้ใช้งานได้ แต่มันก็เขียนมาตรฐาน Command 2>&1 | tee -a $LOG ฉันจะได้รับเพียงข้อผิดพลาดมาตรฐานได้อย่างไร หมายเหตุ: สิ่งที่ฉันต้องการคือการเขียนสตรีม stderr ไปยังบันทึกและเขียนทั้ง stderr และ stdout ไปที่คอนโซล
24 unix  pipe  ksh  stderr 

1
คำสั่งเชลล์ทำงานช้าลงเมื่อใช้ไพพ์รวดเร็วด้วยไฟล์ระดับกลาง
ไม่มีใครเข้าใจความแตกต่างอย่างมากในเวลาประมวลผลเมื่อใช้ไฟล์ระดับกลางหรือเมื่อใช้ไพพ์? ฉันกำลังแปลง tiff เป็น pdf โดยใช้เครื่องมือมาตรฐานบนเดเบียนเซิร์ฟเวอร์บีบสด วิธีมาตรฐานในการทำเช่นนี้คือการแปลงเป็น ps ก่อน ไม่มีท่อ: root@web5:~# time tiff2ps test.tif > test.ps real 0m0.860s user 0m0.744s sys 0m0.112s root@web5:~# time ps2pdf13 -sPAPERSIZE=a4 test.ps > test.pdf real 0m0.667s user 0m0.612s sys 0m0.060s ด้วยท่อ: root@web5:~# time tiff2ps test.tif | ps2pdf13 -sPAPERSIZE=a4 - > test.pdf real 1m6.098s user 0m15.861s …

5
ส่งผ่านไพพ์ไปยังคำสั่งที่ต้องการชื่อไฟล์
ว่าฉันมีคำสั่งfooที่ใช้อาร์กิวเมนต์ชื่อไฟล์: foo myfile.txt. น่ารำคาญfooไม่อ่านจากอินพุตมาตรฐาน แทนที่จะเป็นไฟล์จริงฉันต้องการส่งผ่านผลลัพธ์ของคำสั่งอื่น (ในความเป็นจริงpvซึ่งจะจับไฟล์และส่งมิเตอร์วัดความคืบหน้าเป็นผลข้างเคียง) มีวิธีที่จะทำให้สิ่งนี้เกิดขึ้นหรือไม่? ดูเหมือนจะไม่มีอะไรในกระเป๋าของฉัน ( fooในกรณีนี้คือสคริปต์ PHP ซึ่งฉันเชื่อว่าประมวลผลไฟล์ตามลำดับ) ฉันใช้ Ubuntu และ Bash แก้ไขขออภัยสำหรับคำอธิบายปัญหาที่ไม่ชัดเจนเล็กน้อย แต่นี่เป็นคำตอบที่ฉันต้องการ: pv longfile.txt | foo /dev/stdin ชัดเจนมากตอนนี้ที่ฉันเห็นมัน
19 bash  pipe  command 

4
นับจำนวนไบต์ piped จากกระบวนการหนึ่งไปยังกระบวนการอื่น
ฉันใช้เชลล์สคริปต์ที่ท่อข้อมูลจากกระบวนการหนึ่งไปยังกระบวนการอื่น process_a | process_b ไม่มีใครรู้วิธีหาจำนวนไบต์ที่ถูกส่งระหว่างโปรแกรมทั้งสอง? ทางออกเดียวที่ฉันสามารถนึกได้ในขณะนี้คือการเขียนโปรแกรม c ขนาดเล็กที่อ่านจาก stdin, เขียนไปยัง stdout และนับจำนวนข้อมูลที่ถ่ายโอนทั้งหมด, จัดเก็บจำนวนในตัวแปรสภาพแวดล้อมเช่น: process_a | count_bytes | process_b ไม่มีใครมีวิธีแก้ปัญหา neater?
17 bash  shell  pipe 

1
การจับภาพ STDERR และ STDOUT ไปยังไฟล์โดยใช้ที
ฉันไม่มีความชัดเจนว่าการสั่งซื้อที่ดีที่สุดคือการจับภาพทั้งSTDERRและไปยังแฟ้มเดียวกันโดยใช้STDOUT teeฉันรู้ว่าถ้าฉันต้องการไปป์กับไฟล์ฉันต้องแมป filehandle หลังจากเปลี่ยนเส้นทางคือ find . >/tmp/output.txt 2>&1 นี้จะสั่งให้เปลือกที่จะส่งSTDOUTไป/tmp/output.txtแล้วจะส่งSTDERRไปSTDOUT(ซึ่งขณะนี้ส่งไปยัง/tmp/output.txt) ความพยายามที่จะดำเนินการ2>&1ก่อนที่จะเปลี่ยนเส้นทางไฟล์จะไม่มีผลที่ต้องการ อย่างไรก็ตามเมื่อฉันต้องการใช้ pipe teeควรเป็น: find . |tee /tmp/output.txt 2>&1 # or find . 2>&1 |tee /tmp/output.txt # ?
16 linux  unix  redirect  pipe 

3
เปลี่ยนเส้นทางเอาต์พุตของ mysqldump ไปยัง scp
ฉันทำงานกับ linux pro เมื่อหลายปีก่อนซึ่งทำเคล็ดลับได้ดี เขาสามารถทำmysqldump แต่เปลี่ยนเส้นทางออกกับการเชื่อมต่อ SCP / SSH มากกว่าการเขียนไปยังดิสก์ พวกเราใช้ความเงียบเล็กน้อยที่ฉันเคยทำงาน แต่ฉันจำไม่ได้ว่าจะทำเช่นนี้อีกต่อไป ตอนนี้ฉันประสบกับปัญหาที่ฮาร์ดไดรฟ์ในเซิร์ฟเวอร์ของฉันอยู่ในช่วงขาสุดท้ายและสำหรับการใช้งานแบบเข้มข้นเพื่อการติดตั้งอย่างถาวรเป็นแบบอ่านอย่างเดียว ฉันหวังว่าจะใช้การใช้เล่ห์เหลี่ยมบรรทัดคำสั่งนี้เพื่อยังคงสามารถสำรองฐานข้อมูลของฉันไปยังเซิร์ฟเวอร์ใหม่เนื่องจากการเขียนดัมพ์ไปยัง diska nd ถ่ายโอนท้องถิ่นมันชัดเจนจากคำถาม นี่เป็นเคล็ดลับเล็ก ๆ น้อย ๆ ที่เป็นไปได้จริงหรือ? ถ้าเป็นไวยากรณ์คืออะไร? ฉันได้รับรู้ตั้งแต่เนื่องจากปัญหาระบบไฟล์แบบอ่านอย่างเดียวฉันพบว่าฉันไม่สามารถเชื่อมต่อกับ mysql เพื่อถ่ายโอนข้อมูลได้ แต่ฟีดของคุณกลับมาเยี่ยมมากและหวังว่าจะใช้กับคนอื่นในอนาคต

3
บน Linux ฉันจะดูได้อย่างไรว่าไฟล์มีกระบวนการมากแค่ไหน?
หากฉันมีคำสั่ง piped เช่น cat myfile | processor_application โดยที่ processor_application เป็นสิ่งที่อ่านจาก standard in, ใน chunks, ไปจนถึง process, เป็นไปได้ไหมที่จะเห็นว่า cat file มีมาไกลแค่ไหน? อาจใช้ lsof หรือไม่ ขอบคุณ!
13 linux  pipe  lsof 

1
ฉันจะส่งออกท่อของ uptime / df ไปยังขดได้อย่างไร
ฉันต้องการส่งเอาต์พุตuptimeและdfคำสั่งไปยังเว็บแอปโดยใช้ cURL ฉันเหนื่อย: uptime | curl http://someurl.com -T - แต่ดูเหมือนจะไม่ส่งข้อมูล วิธีที่เหมาะสมในการส่งเอาต์พุตของคำสั่งไปยัง cURL เป็นพารามิเตอร์ POST คืออะไร? (หรือว่าถ้ามันง่ายกว่านี้)
10 linux  curl  wget  pipe 

4
วิธีการไพพ์ข้อมูลเพื่อการเชื่อมต่อ SFTP?
ftp สนับสนุนput "|..." "remote-file.name"คำสั่งเพื่อไพพ์ข้อมูลไปยังการเชื่อมต่อ ftp มีบางอย่างที่คล้ายกันสำหรับ sftp หรือไม่ ใน SFTP ฉันได้รับข้อผิดพลาดต่อไปนี้: sftp 'jmw@backupsrv:/uploads' sftp> put "| tar -cx /storage" "backup-2012-06-19--17-51.tgz" stat | tar -cv /storage: No such file or directory ดังกล่าวข้างต้นไคลเอนต์ sftp ไม่ชัดเจนรันคำสั่ง ฉันต้องการใช้คำสั่ง pipe เพื่อเปลี่ยนเส้นทางสตรีมไฟล์ไปยัง sftp โดยตรง (เนื่องจากมีพื้นที่ไม่เพียงพอที่จะสร้างไฟล์สำรองข้อมูลบนดิสก์เดียวกันก่อนที่จะอัปโหลดไปยังเซิร์ฟเวอร์ sftp)
9 ssh  sftp  pipe 

2
ท่อ Linux, ข้อความเตือน, stdout
นี่อาจเป็นสถานที่ที่ดีที่สุดในการถามคำถามในรูปแบบที่ง่ายที่สุด ฉันกำลังเขียนสคริปต์ซึ่งใช้คำสั่งผลลัพธ์และวางลงในตัวแปร หลังจากดีบักบางฉันพบคำสั่งเมื่อข้อผิดพลาดไม่ได้ stdout แต่ไปยังคอนโซล (หรือผนัง) ดูตัวอย่างด้านล่าง: เมื่อคำสั่งรันได้สำเร็จ root@local# apcaccess status APC : 700 VERSION : xxxxx BATTSTAT : AC เมื่อคำสั่งผิดพลาด root@local# apcaccess status apcupsd @ localhost: Connection Refused. root@local# apcaccess status | grep -i version apcupsd @ localhost: Connection Refused. ฉันสังเกตเห็นเมื่อฉันพยายามที่จะไพพ์คำสั่งผ่านสถานะ apcaccess ของ grep ' grep -i version 'ฉันจะได้รับหมายเลขเวอร์ชั่นในการดำเนินการที่ประสบความสำเร็จ …
3 linux  pipe  stdout 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.