Unix & Linux

คำถาม & คำตอบสำหรับผู้ใช้ Linux, FreeBSD และระบบปฏิบัติการ Un * x อื่น ๆ

2
การดำเนินการประเภทใด / # / - ใน“ $ {my_array [@] / # / -}”?
คำตอบที่ได้รับการยอมรับในการแปลงอาร์เรย์เป็นอาร์กิวเมนต์ของคำสั่ง? ใช้คำสั่ง Bash ต่อไปนี้: command "${my_array[@]/#/-}" "$1" ฉันพยายามที่จะคิดออกว่า/#/-ส่วนทำอย่างไร น่าเสียดายที่ฉันไม่รู้จะเรียกมันว่าอะไรดังนั้นฉันมีปัญหาในการค้นหาเอกสารใด ๆ ฉันดูในหน้า Bash man page ในอาร์เรย์และเว็บไซต์ไม่กี่แห่ง แต่ไม่พบอะไรเลย
17 bash  array 

1
ชื่อฟังก์ชันสคริปต์ Bash ที่มีเครื่องหมายโคลอนคู่ '::'
ฉันมาข้ามสคริปต์ทุบตีในวันนี้ว่ามีฟังก์ชั่นที่มีชื่อทวิภาคคู่::ในพวกเขาเช่นและfile::write() file::read()ฉันไม่เคยเห็นไวยากรณ์นี้มาก่อนในสคริปต์ Bash และเมื่อฉันเรียกใช้สคริปต์สคริปต์จะทำงานได้ดี (ทำให้ฉันประหลาดใจ) หลังจากกำจัด man page ของ Bash ในระบบของฉัน (และออนไลน์) ฉันไม่พบสิ่งใดในเอกสารที่สนับสนุนไวยากรณ์นี้สำหรับชื่อฟังก์ชัน ตัวอย่างเช่นส่วนShell Defined Functionsกำหนดไวยากรณ์สำหรับฟังก์ชั่นเปลือกที่จะ function name [()] compound-command [redirection] และจากนั้น (ที่อื่น ๆ ในคู่มือ) โทเค็นnameถูกกำหนดเป็น name A word consisting only of alphanumeric characters and underscores, and beginning with an alphabetic character or an underscore. Also referred to as an …

2
เครื่องหมายแบ็กสแลชหมายถึงคำสั่ง?
ซอฟต์แวร์ที่ฉันติดตั้งแทรกบรรทัดในโปรไฟล์ของฉันที่อ่าน: [ -s "$SOME_FILE" ] && \. "$SOME_FILE" ฉันรู้ว่า dot .มีความหมายเหมือนกันsourceดังนั้นฉันสงสัยว่านี่เป็นเพียงการจัดหาไฟล์ แต่ฉันไม่เคยเห็น\.มาก่อน มันทำอย่างอื่นได้ไหม แก้ไขเกี่ยวกับ DV:การค้นหา "backslash dot" จะนำไปสู่คำถามเกี่ยวกับการ./เรียกไฟล์ที่ปฏิบัติการได้และman sourceนำไปสู่ ​​manpage ที่\.ไม่ปรากฏขึ้น ฉันไม่รู้จะลองทำยังไงดี แก้ไข 2:ดูคำถามที่เกี่ยวข้อง เหตุใดจึงเริ่มต้นคำสั่งเชลล์ด้วยแบ็กสแลช แบ็กสแลชที่จุดเริ่มต้นของคำสั่ง เหตุใดแบ็กสแลชจึงป้องกันการขยายนามแฝง เรียกใช้คำสั่งที่มีเงาโดยนามแฝง
17 bash 

2
จะปลอดภัยหรือไม่ที่จะใช้ echo เพื่อส่งผ่านข้อมูลที่ละเอียดอ่อนไปยัง chpasswd?
ฉันพยายามที่จะตั้งค่ารหัสผ่านบัญชีผู้ใช้จำนวนchpasswdไม่มากโดยใช้ รหัสผ่านควรมีการสร้างแบบสุ่มและพิมพ์stdout(ฉันต้องเขียนพวกเขาลงหรือใส่ไว้ในการจัดเก็บรหัสผ่าน) chpasswdและยังผ่านเข้าสู่ อย่างไร้เดียงสาฉันจะทำเช่นนี้ { echo student1:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') echo student2:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') } | tee >(chpasswd) อย่างไรก็ตามฉันกังวลเกี่ยวกับการส่งรหัสผ่านใหม่เป็นอาร์กิวเมนต์บรรทัดคำสั่งไปที่echoเนื่องจากผู้ใช้รายอื่นมักมองเห็นข้อโต้แย้งในps -aux(แม้ว่าฉันจะไม่เคยเห็นechoบรรทัดใด ๆปรากฏps) มีวิธีอื่นในการเพิ่มมูลค่าให้กับรหัสผ่านที่ส่งคืนของฉันแล้วส่งผ่านเข้าไปยังchpasswd?

2
ทำไม mv จึงเร็วกว่า cp มาก ฉันจะกู้คืนจากคำสั่ง mv ที่ไม่ถูกต้องได้อย่างไร
ฉันลากและวางโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่งโดยไม่ได้ตั้งใจใน FileZilla ~/big_folder ~/some_other_folder โฟลเดอร์ที่ถูกย้ายมีขนาดใหญ่มาก มันมีไฟล์หลายแสนไฟล์ (node_modules, ไฟล์รูปภาพขนาดเล็ก, โฟลเดอร์จำนวนมาก) สิ่งที่แปลกมากคือหลังจากที่ฉันปล่อยเมาส์การเคลื่อนไหวก็เสร็จสิ้น โฟลเดอร์ "big_folder" ถูกย้ายไปที่ "some_other_folder" ~/some_other_folder/big_folder (ไม่มีbig_folderใน~/หลังจากที่ย้าย) จากนั้นฉันก็ตระหนักถึงข้อผิดพลาดและลองย้ายกลับ แต่มันล้มเหลวทั้งใน FileZilla และเทอร์มินัล จากนั้นฉันต้องcp -rคัดลอกไฟล์กลับเพราะมีรหัสฝั่งเซิร์ฟเวอร์ที่เข้าถึงไฟล์เหล่านั้น~/big_folder และจะต้องรอตลอดไป ... ฉันควรทำอย่างไรดี? BTW นี่คือผลลัพธ์จาก FileZilla (เป็นความล้มเหลวในการเคลื่อนย้ายกลับ): Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder' Status: /root/big_folder -> /root/some_other_folder/big_folder Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder' Command: mv "big_folder" "/root/big_folder" Error: mv /root/some_other_folder/big_folder …
17 cp  mv 

5
มีตัวดำเนินการ "in" ใน bash / bourne หรือไม่?
ฉันกำลังมองหาโอเปอเรเตอร์“ in” ที่ใช้งานได้เช่นนี้: if [ "$1" in ("cat","dog","mouse") ]; then echo "dollar 1 is either a cat or a dog or a mouse" fi เห็นได้ชัดว่ามันเป็นคำสั่งที่สั้นกว่าเมื่อเปรียบเทียบกับพูดโดยใช้การทดสอบหลาย ๆ แบบหรือ

4
ทำไมการทดแทนประวัติทุบตียังเปิดใช้งานโดยค่าเริ่มต้น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว ไม่มีใครรู้ว่าทำไมทุบตียังคงมีการเปิดใช้งานการทดแทนประวัติโดยค่าเริ่มต้น? ฉัน.bashrcรวมset +Hมาหลายปีแล้ว แต่คนอื่นบางคนยังคงถูกกัดโดยคุณลักษณะนี้ เมื่อพิจารณาว่าทุกคนใช้เทอร์มินัลพร้อมคุณสมบัติคัดลอกวางและทุบตีคอมไพล์ด้วยการแทนที่readlineไลบรารีและประวัติถูกเปิดใช้งานโดยค่าเริ่มต้นในเชลล์แบบโต้ตอบเท่านั้นมีเหตุผลใด ๆ ที่มีคุณสมบัตินี้หรือไม่ ไม่มีสคริปต์ใด ๆ ที่มีอยู่จะใช้งานไม่ได้แม้ว่าจะถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับเชลล์ทั้งหมด ลองใช้วิธีนี้หากคุณไม่ทราบว่าทำไมการทดแทนประวัติเสีย: $ set +H # disable feature history substitution $ echo "WTF???!?!!?" WTF???!?!!? $ set -H # enable feature history substitution $ echo "WTF???!?!!?" echo WTF???echo WTF???!?!!? WTF???echo WTF???!?!!? (เห็นได้ชัดว่าสถานที่มีปัญหาที่สำคัญถ้ามันถูกปิดใช้งานโดยค่าเริ่มต้นสำหรับการเขียนสคริปต์ทั้งหมดและมีคุณสมบัติที่มีอยู่เพื่อตรวจสอบผลลัพธ์ก่อนที่จะดำเนินการ: shopt -s histverify.) ดูสิ่งนี้ด้วย: …

1
แยกเครื่อง VirtualBox ออกโดยสิ้นเชิง
ฉันต้องการใช้ VirtualBox เพื่อติดตั้งซอฟต์แวร์บางส่วนที่ไม่ควรเข้าถึงคอมพิวเตอร์แม่ข่ายของฉัน (และในทางกลับกัน) อย่างไรก็ตามฉันยังนึกภาพถึงความเป็นไปได้ที่จะพยายามทำสิ่งที่ "อันตราย" มากขึ้นเช่นการพยายามหาช่องโหว่แบบ zero-day และดูว่าพวกเขาสามารถทำอะไรได้บ้าง เครื่องเสมือนสามารถแยกได้จากโฮสต์อย่างไร ฉันควร (หรือสามารถฉัน?) ตั้งค่าไฟร์วอลล์ระหว่างผู้เข้าพักและโฮสต์หรือ? แอดออนเป็นความเสี่ยงด้านความปลอดภัยหรือไม่? สิ่งที่เกี่ยวกับไดเรกทอรีที่ใช้ร่วมกัน? ตอนนี้เครื่องแขกกำลังเรียกใช้การทดสอบ GNU / Linux Debian

2
วิธีการตรวจสอบว่าเคอร์เนล Linux เปิดใช้งาน“ Retpoline” หรือไม่
สำหรับช่องโหว่ด้านความปลอดภัย "Spectre" นั้นมีการแนะนำ "Retpoline" เพื่อเป็นวิธีการลดความเสี่ยง อย่างไรก็ตามฉันได้อ่านโพสต์ที่กล่าวถึง: หากคุณสร้างเคอร์เนลโดยไม่มีCONFIG_RETPOLINEคุณจะไม่สามารถสร้างโมดูลที่มี retpoline และคาดหวังให้โหลด - เนื่องจากสัญลักษณ์ thunk ไม่ได้ถูกส่งออก หากคุณสร้างเคอร์เนลด้วย retpoline คุณสามารถโหลดโมดูลที่ไม่ได้สร้างด้วย retpoline ได้สำเร็จ ( ที่มา ) มีวิธีที่ง่ายและธรรมดา / ทั่วไป / แบบครบวงจรในการตรวจสอบว่าเคอร์เนล "Retpoline" เปิดใช้งานหรือไม่? ฉันต้องการทำสิ่งนี้เพื่อให้ผู้ติดตั้งของฉันสามารถใช้งานบิลด์โมดูลของเคอร์เนลที่จะติดตั้งได้

1
งาน“ ปฏิเสธที่จะหยุด” ในการระงับได้อย่างไร
เมื่อวานเมื่อปิดแล็ปท็อปของฉันมันไม่ได้เข้าสู่โหมดสแตนด์บายทันที ตามบันทึกมันพยายาม แต่งานปฏิเสธที่จะหยุด: Freezing of tasks failed after 20.005 seconds (1 tasks refusing to freeze, wq_busy=0): สิ่งนี้ดำเนินต่อไปอีกสองสามชั่วโมงจนกระทั่งระบบหยุดทำงานจริง syslogก็เต็มไปด้วยข้อความเช่นในคำถามนี้เพราะsystemdได้พยายามอีกครั้งและอีกครั้ง สิ่งนี้จะเกิดขึ้นได้อย่างไร? เหตุใดตัวกำหนดตารางเวลาไม่สามารถหยุดกำหนดเวลาแอปพลิเคชันนั้นได้ แล้วมันจะแข็งตัวอย่างมีประสิทธิภาพหรือไม่ ฉันอ่านว่ามีหลายSTOPคำสั่งหนึ่งในนั้นถามอย่างดีและหนึ่งในนั้นบังคับให้หยุด เหตุใดจึงsystemdไม่ใช้สิ่งนี้หรือเหตุใดจึงไม่ทำงานที่นี่
17 debian  kill  suspend 

3
ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็น `fi 'ที่ไม่คาดคิด
ฉันไม่ได้ต้องการคำตอบ แต่ถ้ามีคนสามารถชี้ให้ฉันไปที่วรรณกรรมหรือตัวอย่าง ฉันต้องการที่จะคิดออก เมื่อฉันเรียกใช้สคริปต์ฉันได้รับข้อผิดพลาด: ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด fi ฉันได้อนุมานได้ว่าปัญหาของฉันของฉันอยู่ในifคำสั่งโดยการทำของฉันifงบแสดงความคิดเห็นและการเพิ่มซึ่งจะแสดงชื่อที่อยู่ในนั้นecho "$NAME"/etc/ เมื่อฉันทำการเปลี่ยนแปลงให้ลบออก#จากifและfiเพิ่ม#ใน wc -c "$NAME"ฉันได้รับข้อผิดพลาดทางไวยากรณ์ที่ฉันระบุไว้ข้างต้น ฉันได้เพิ่ม;ระหว่าง]นั้น ฉันได้ย้ายไปthenยังบรรทัดถัดไปโดยไม่มีความละเอียด #!/bin/bash for NAME in /etc/* do if [ -r "$NAME" -af "$NAME" ] then wc -c "$NAME" fi done
17 bash 

2
การแก้ไขไฟล์ข้อความด้วย Vim ไม่ได้อัพเดต tail -f
ฉันใช้ในการชมการปรับปรุงเกี่ยวกับไฟล์ที่เรียกว่าtail -f a.txta.txt หากฉันอัปเดตไฟล์โดยใช้บางอย่างเช่นls -a >> a.txtในคอนโซลเสมือนที่สองการเปลี่ยนแปลงจะแสดงตามเวลาจริงในไฟล์แรก หากฉันอัพเดตไฟล์โดยใช้ Vim ในคอนโซลเสมือนที่สองการเปลี่ยนแปลงจะไม่แสดงในอันแรก ฉันไม่ได้คาดหวังว่ามันจะกระตุ้นให้มีการอัพเดทในหน้าต่างนั้น - แต่ทำไมการอัพเดทนี้ถึงไม่ได้ว่าเทอร์มินัลกำลังเรียกใช้tail -fคำสั่ง?
17 files  vim  tail 

1
`<CMB m` หรือคลิกขวาที่บานหน้าต่าง tmux ทำอะไร
ฉันเป็นtmuxผู้ใช้ปกติและฉันมักจะใช้กับset -g mouse onและviผูก เมื่อเวลาผ่านไปฉันสังเกตเห็นพฤติกรรมที่ฉันไม่สามารถหาเอกสารได้ง่าย โดยพื้นฐานแล้วในtmuxเซสชันที่มีหลายบานหน้าต่างแยกย่อยการคลิกขวาที่บานหน้าต่างหรือการกดปุ่มนั้น&lt;C-b&gt;mดูเหมือนว่าจะ "เลือก" บานหน้าต่างนั้นด้วยการสลับสี bg / fg บนตัวคั่นบานหน้าต่าง มีอะไรเกิดขึ้นจริงที่นี่และฉันจะใช้ฟังก์ชันนี้ได้อย่างไร
17 tmux 

4
วิธีหยุดสคริปต์ไม่ให้ทำงานหากไม่ใช่รูท (และ echo“ ไม่ทำงานเหมือนรูท! กำลังออกจาก…”)
นี่คือที่มาของฉัน: #!/bin/bash echo "Running script to free general cached memory!" echo ""; echo "Script must be run as root!"; echo ""; echo "Clearing swap!"; swapoff -a &amp;&amp; swapon -a; echo ""; echo "Clear inodes and page file!"; echo 1 &gt; /proc/sys/vm/drop_caches; echo ""; มันล้างแคชและสิ่งต่าง ๆ และมันก็สะท้อนให้เห็นว่ามันจะต้องทำงานเหมือนรูทในเครื่อง ฉันเพียงต้องการให้สคริปต์หยุดทำงานหากตรวจพบว่าไม่ได้ถูกเรียกใช้งานในฐานะรูท ตัวอย่าง: "Running script …

5
ตัวแปรเช่น $ 0 และ $ 1 ตัวแปร shell / environment หรือไม่
มีตัวแปรในเปลือกเหมือน$0, $1, $2, $?ฯลฯ ฉันพยายามพิมพ์เชลล์และตัวแปรสภาพแวดล้อมโดยใช้คำสั่งต่อไปนี้: set แต่ตัวแปรเหล่านี้ไม่ได้อยู่ในรายการ ดังนั้นโดยทั่วไปแล้วตัวแปรเหล่านี้ไม่ถือว่าเป็นตัวแปรเชลล์ / สิ่งแวดล้อมใช่ไหม (แม้ว่าจะส่งออกคุณต้องนำหน้าพวกเขาด้วย$เช่นคุณทำกับตัวแปรเชลล์ / สภาพแวดล้อม)
17 shell 

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