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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

4
ระบุไฟล์ที่มีอักขระที่ไม่ใช่ ASCII หรือไม่สามารถพิมพ์ได้ในชื่อไฟล์
ในไดเรกทอรีขนาด 80GB ที่มีประมาณ 700,000 ไฟล์มีชื่อไฟล์บางส่วนที่มีอักขระที่ไม่ใช่ภาษาอังกฤษในชื่อไฟล์ นอกเหนือจากการสืบค้นผ่านรายการไฟล์อย่างตั้งใจแล้ว: วิธีง่ายๆในการแสดงรายการหรือระบุชื่อไฟล์เหล่านี้คืออะไร? วิธีสร้างตัวอักษรที่ไม่ใช่ภาษาอังกฤษที่พิมพ์ได้ - ตัวอักษรเหล่านั้นที่ไม่ได้อยู่ในช่วงที่พิมพ์ได้man ascii(ดังนั้นฉันสามารถทดสอบว่าไฟล์เหล่านี้ถูกระบุ)?

5
ฉันจะฆ่าและรอให้กระบวนการส่วนหลังเสร็จสิ้นในเชลล์สคริปต์ได้อย่างไรเมื่อฉัน Ctrl + C
ฉันกำลังพยายามตั้งค่าเชลล์สคริปต์เพื่อให้ทำงานในกระบวนการแบ็คกราวน์และเมื่อฉันCtrlcเชลล์สคริปมันจะฆ่าเด็ก ๆ แล้วก็ออกไป สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ ดูเหมือนว่าkill 0 -INTสคริปต์ยังฆ่าสคริปต์ก่อนที่จะเกิดการรอดังนั้นเชลล์สคริปต์จะตายก่อนที่เด็ก ๆ จะเสร็จสมบูรณ์ ความคิดใด ๆ เกี่ยวกับวิธีการที่ฉันสามารถทำให้รอเชลล์สคริปต์สำหรับเด็กที่จะตายหลังจากที่ส่งINT? #!/bin/bash trap 'killall' INT killall() { echo "**** Shutting down... ****" kill 0 -INT wait # Why doesn't this wait?? echo DONE } process1 & process2 & process3 & cat # wait forever

1
เหตุใดจึงต้องใช้เปลือก ** เข้าสู่ระบบ ** เหนือเปลือกหอย ** ที่ไม่ได้ลงชื่อเข้าใช้ **
ฉันมีความเข้าใจพื้นฐานของdotfilesในระบบ * nix แต่ฉันยังคงสับสนเกี่ยวกับความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอินนี้ กลุ่มคำตอบที่แตกต่างกัน (รวมถึงคำซ้ำซ้อน) ได้ระบุหัวข้อย่อยต่อไปนี้แล้ว: วิธีการเรียกเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือก วิธีการตรวจสอบเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือก ไฟล์เริ่มต้นใดบ้างที่จะถูกใช้โดยล็อกอินหรือเชลล์ที่ไม่ใช่ล็อกอิน อ้างถึงเอกสาร (เช่นman bash) สำหรับรายละเอียดเพิ่มเติม สิ่งที่คำตอบไม่ได้บอก (และบางสิ่งที่ฉันยังสับสนอยู่) คือ: อะไรคือสิ่งที่ใช้กรณีของการเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือก? (เช่นผมกำหนดค่าเฉพาะzshrcสำหรับzshและที่มากพอสำหรับความต้องการส่วนบุคคลมากที่สุด dev, ฉันรู้ว่ามันไม่ง่ายเหมือนสิ่งที่vimrcไปvim) อะไรคือเหตุผลที่จะใช้เข้าสู่ระบบในช่วงที่ไม่ได้เข้าสู่ระบบเปลือก (นอกเหนือจากการบริโภคแฟ้มเริ่มต้นที่แตกต่างกันและวงจรชีวิต)?

1
อะไรคือ scrollback และ scrollback buffer?
อะไรคือ "scrollback" และ "scrollback บัฟเฟอร์" ในโปรแกรมเช่นbashและscreenและวิธีการทำพวกเขาเกี่ยวข้องกับ TTY ที่โปรแกรมถูกเรียกใช้และ stdin / stdout / stderr? นี่คือคำจำกัดความเดียวของ "scrollback" ที่ฉันพบจนถึงตอนนี้ (ในarchlinux wiki ): Scrollback เป็นฟังก์ชั่นที่นำมาใช้ในคอนโซลข้อความเพื่อให้ผู้ใช้กลับไปดูบรรทัดข้อความที่เลื่อนออกจากหน้าจอ สิ่งนี้เกิดขึ้นได้โดยบัฟเฟอร์ที่สร้างขึ้นสำหรับวัตถุประสงค์นี้ระหว่างอะแดปเตอร์วิดีโอและอุปกรณ์แสดงผลเท่านั้น บัฟเฟอร์ scrollback แต่นี่ทำให้เกิดคำถามเพิ่มเติมสำหรับฉัน: มันหมายความว่า "ฟังก์ชั่น" ใน "subroutine" หรือใน "คุณสมบัติ"? มีมาตรฐาน Unix หรือ API สำหรับบัฟเฟอร์การเลื่อนนี้หรือไม่? ใน "สแต็ค" ของโปรแกรมเช่นvimเปิดตัวในscreenเปิดตัวในbashเปิดตัวในsshเปิดตัวเทอร์มินัลอีมูเลเตอร์โปรแกรมใดบ้างที่ควบคุมการเลื่อนบัฟเฟอร์? ฉันยังใช้screenในการถ่ายโอนข้อมูล scrollback ไปยังแฟ้ม ไฟล์นี้มีพื้นที่สีขาวจำนวนมากที่ด้านบนและดูเหมือนว่า "มุมมอง" ตัวจำลองเทอร์มินัลของฉันแสดงให้ฉันเห็นว่าเป็นเพียงไม่กี่บรรทัดด้านล่างของบัฟเฟอร์ นี่เป็นสาเหตุที่โปรแกรมอย่างเช่นvim"ล้าง" หน้าต่างเทอร์มินัลทั้งหมดของฉันเพราะได้รับการเข้าถึงชั่วคราวกับบัฟเฟอร์การเลื่อนกลับของพาเรนต์เชลล์หรือไม่? หรือไม่vimใช้ buffer scrollback …

3
ดำเนินการคำสั่งในการเข้าสู่ระบบของผู้ใช้
ในระบบเดสก์ท็อป Linux ฉันต้องการรันคำสั่งเมื่อผู้ใช้ล็อกอิน หลังจากอ่านโพสต์อื่นฉันพยายามแทรกคำสั่ง~/.bashrcแต่ไม่สำเร็จ ยิ่งกว่านั้นระบบใช้ส่วนต่อประสานกราฟิกสำหรับการล็อกอินของผู้ใช้ดังนั้นคำสั่งไม่ควรเกี่ยวข้องกับการเริ่มต้นของเชลล์ ฉันพยายามเพิ่มคำสั่งต่อท้ายหนึ่งในสคริปต์ที่/etc/profile.dไม่มีผลลัพธ์ มีวิธีอื่นในการทำเช่นนี้หรือไม่? ไฟล์ใดบ้างที่ระบบอ่านหลังจากเข้าสู่ระบบ?
23 shell  scripting  login 



2
ลบไฟล์ทั้งหมดที่เริ่มต้นด้วยเครื่องหมายคำถาม
ฉันมีโฟลเดอร์ที่มีไฟล์ประมาณ 4k ไฟล์เหล่านี้บางไฟล์เริ่มต้นด้วย aa ?หรือ!ตัวอักษร ฉันต้องการลบ แต่ไม่สามารถหานิพจน์ที่จะทำ: rm -f ./?* เพียงลบทุกอย่าง ฉันสามารถใช้grepls และไปป์xargsและย้ายไฟล์ไปยังโฟลเดอร์อื่น แต่ฉันหวังว่าจะมีวิธีที่เหมาะสมในการทำเช่นนี้ ต้องการความช่วยเหลือทั้งใน?และ!ไฟล์

3
bash shell - ssh สคริปต์ระยะไกลจับเอาท์พุทและรหัสออก?
ฉันต้องการใช้เชลล์เพื่อเรียกใช้สคริปต์บนเซิร์ฟเวอร์ระยะไกล ฉันต้องการจับเอาท์พุทของสคริปต์นั้น (ข้อความบันทึกของมัน) และรหัสทางออกที่ส่งคืน ถ้าฉันทำสิ่งนี้: ssh user@server /usr/local/scripts/test_ping.sh echo "$?" ฉันได้รับรหัสทางออก แต่ไม่สามารถจับข้อความบันทึกระยะไกลได้ ถ้าฉันทำสิ่งนี้: local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh) echo "$?" LOG "${RESULTS}"; ฉันได้รับการบันทึกผลลัพธ์ของฉันโดยใช้ฟังก์ชั่น LOG แต่ไม่สามารถรับรหัสทางออกที่ถูกต้องได้ฉันถือว่ารหัสที่ฉันได้รับคือรหัสจากการมอบหมาย varianble ฉันต้องการใช้ฟังก์ชั่น LOG ของฉันต่อไปเพื่อเก็บเอาท์พุททั้งหมดในขณะที่ฟอร์แมตและส่งสิ่งต่าง ๆ ไปยังไฟล์ syslog และหน้าจอสำหรับฉัน ฉันจะจับผลลัพธ์ใน var AND เพื่อรับรหัสทางออกที่ถูกต้องจากสคริปต์ระยะไกลได้อย่างไร
23 bash  shell  ssh  remote 

6
วิธีที่ดีที่สุดในการรวบรวมตัวอย่างแบบสุ่มจากกลุ่มของไฟล์
สมมติว่ามีไดเรกทอรีเก็บไฟล์ข้อมูล 300 ไฟล์ ฉันต้องการสุ่มเลือกไฟล์ 200 ไฟล์และย้ายไปไว้ในไดเรกทอรีอื่น มีวิธีการทำภายใต้ Unix / Linux?

4
สี่งานพร้อมกัน…ฉันจะทำอย่างไร
ฉันมีรูปภาพ PNG จำนวนหนึ่งอยู่ในไดเรกทอรี ฉันมีแอปพลิเคชันชื่อ pngout ที่ฉันเรียกใช้เพื่อบีบอัดรูปภาพเหล่านี้ แอปพลิเคชันนี้ถูกเรียกใช้โดยสคริปต์ที่ฉันทำ ปัญหาคือสคริปต์นี้ทำทีละครั้งสิ่งนี้: FILES=(./*.png) for f in "${FILES[@]}" do echo "Processing $f file..." # take action on each file. $f store current file name ./pngout -s0 $f R${f/\.\//} done การประมวลผลครั้งละหนึ่งไฟล์ใช้เวลานาน หลังจากเรียกใช้แอพนี้ฉันเห็นว่าซีพียูเพียง 10% ดังนั้นฉันจึงค้นพบว่าฉันสามารถแบ่งไฟล์เหล่านี้ออกเป็น 4 แบทช์แต่ละแบทช์ในไดเรกทอรีและไฟ 4 จากสี่หน้าต่างเทอร์มินัลสี่กระบวนการสี่ดังนั้นฉันมีสี่อินสแตนซ์ของสคริปต์ของฉันในเวลาเดียวกัน งานใช้เวลา 1/4 ของเวลา ปัญหาที่สองคือฉันเสียเวลาในการแบ่งภาพและแบทช์และคัดลอกสคริปต์ไปยังสี่ไดเรกทอรีเปิด windows terminal 4, bla …

5
การกู้คืนจากการตั้งค่าเชลล์ของรูทเป็นไฟล์ที่ไม่ดี
สมมติว่าฉันได้ทำสิ่งไร้สาระเช่นใช้ 'chsh' เพื่อเปลี่ยนเชลล์ของผู้ใช้รูทเป็นไฟล์พา ธ ที่ไม่ดี การล็อกอินเข้าสู่บัญชีรูทในอนาคตจะล้มเหลวโดยทันทีการอ้างถึง / bin / สิ่งที่ไม่ถูกค้นพบและบูตคุณกลับไปที่หน้าจอเข้าสู่ระบบ นอกเหนือจากโหมดการกู้คืนหรือการแทรก LiveCD เพื่อแก้ไข / etc / passwd ตัวเลือกของฉันสำหรับการกู้คืนระบบของฉันคืออะไร? สมมติว่า (เพื่อความสนุก?) ว่าไม่มีผู้ใช้รายอื่นในวงล้อ คิด?
23 shell  users  login 

8
วิธีไพพ์เอาต์พุตจากกระบวนการหนึ่งไปยังอีกกระบวนการ แต่จะดำเนินการเฉพาะถ้ากระบวนการแรกมีเอาต์พุตหรือไม่?
ฉันสามารถเขียนคำสั่งนี้ไปยังอีเมลเฉพาะในกรณีที่มีการส่งออกจากmailq | grep? mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -s 'dd' email@email เป็นไปได้ไหมในหนึ่งบรรทัด? ดูที่ตรวจสอบว่าไพพ์ว่างเปล่าและรันคำสั่งกับข้อมูลหากไม่ได้เป็นตัวพิมพ์ใหญ่กว่าการส่งอีเมล
23 shell  pipe 

4
วิธีการแยกร้อยไฟล์ซอร์สโค้ด HTML ในเปลือก?
ฉันมีไฟล์ซอร์สโค้ด html สองสามร้อย ฉันต้องการแยกเนื้อหาของ<div>องค์ประกอบเฉพาะจากแต่ละไฟล์เหล่านี้ดังนั้นฉันจะเขียนสคริปต์เพื่อวนรอบแต่ละไฟล์ โครงสร้างองค์ประกอบเป็นดังนี้: <div id='the_div_id'> <div id='some_other_div'> <h3>Some content</h3> </div> </div> ใครสามารถแนะนำวิธีการที่ฉันสามารถแยก div the_div_idและองค์ประกอบลูกและเนื้อหาทั้งหมดจากไฟล์โดยใช้บรรทัดคำสั่ง linux?

5
การเพิ่มตัวเลขจากผลลัพธ์ของ grep
ฉันเรียกใช้คำสั่งต่อไปนี้: grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}' และฉันได้รับผลลัพธ์ต่อไปนี้: 1 4 0 8 ฉันต้องการเพิ่มตัวเลขแต่ละตัวให้เป็นตัวแปรนับที่รันอยู่ มีเวทมนต์ที่ใครบางคนสามารถช่วยฉันสร้างได้หรือไม่?
23 bash  shell  grep 

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