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

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

1
ทำไม / etc / shadow ทำให้รหัสผ่านสั้นลงที่ฉันได้ตั้งค่าด้วยคำสั่ง: useradd -p
[root@P-dude dude]# useradd -p $6$Ic2PVlwi$2nf.IRWTMy0FHrPzaCjkahfu9IIxnzxPZL7yg8SsvOdbjEpoI0G8uy7AqduYKQOn2R/rnnaalRmfPMy.a0 bwong20 [root@P-dude dude]# cat /etc/shadow | grep pswayze pswayze:nf.IRWTMy0FHrPzaCjkahfu9IIxnzxPZL7yg8SsvOdbjEpoI0G8uy7AqduYKQOn2R/rnnaalRmfPMy.a0:16924:0:99999:7::: ฉันไม่แน่ใจว่าทำไมระบบลบอักขระสิบสี่ตัวแรกจากรหัสผ่านที่เข้ารหัสของฉัน รหัสผ่านใน/etc/shadowไฟล์ของฉันสั้นกว่าที่ฉันได้ให้ไว้เพื่อเป็นข้อโต้แย้งuseradd -p
21 shell  useradd 

2
มีวิธี POSIX ในการตั้งค่าอาร์กิวเมนต์ zeroth ของแอปพลิเคชันเป้าหมายหรือไม่?
ในbashคุณสามารถใช้exec -aและzshคุณสามารถผลัดกันยังตั้งARGV0ในการรันโปรแกรมที่มีการโต้แย้งข้อที่ศูนย์บาง แต่มียังเป็นวิธีที่ POSIX ของการทำเพื่อ? ตามที่แนะนำในความคิดเห็นนี้คุณสามารถสร้างลิงก์สัญลักษณ์ (ชั่วคราว) เพื่อให้ได้สิ่งนี้ แต่วิธีนี้ฉันไม่สามารถตั้งค่าอาร์กิวเมนต์ zeroth ใหม่ให้เป็นค่าใดก็ได้ตามอำเภอใจเช่นคำสั่งที่มีเส้นทางแน่นอน มีวิธีอื่นอีกไหม?

2
การตรวจสอบค่าตัวแปรสภาพแวดล้อมใน Makefile
ฉันมีเป้าหมาย Makefile ซึ่งฉันต้องตรวจสอบค่าของตัวแปรสภาพแวดล้อม แต่ฉันไม่ได้รับมันแน่นอน พยายามอย่างหนัก แต่หาไม่เจอ ความช่วยเหลือใด ๆ ที่ชื่นชม ชื่อตัวแปรสภาพแวดล้อม: ทดสอบค่าของมัน: "TRUE" test_target: ifeq ($(TEST),"TRUE") echo "Do something" endif ฉันได้รับข้อผิดพลาดต่อไปนี้: /bin/sh: -c: line 0: syntax error near unexpected token `"TRUE","TRUE"' /bin/sh: -c: line 0: `ifeq ("TRUE","TRUE")'
21 shell  make 

3
การพิมพ์คำสั่งอื่นไปยัง STDIN ปลอดภัยหรือไม่ในขณะที่คำสั่งก่อนหน้านี้กำลังเขียนไปยัง STDOUT
บางทีนี่อาจเป็นคำตอบก่อนหน้านี้ฉันยินดีต้อนรับลิงก์ไปยังคำตอบอื่น ... ถ้าฉันรันคำสั่งเชลล์ (ในbashเชลล์) เช่นต่อไปนี้: make จากนั้นในขณะที่ผลผลิตจากการmakeถูกเลื่อนโดยจากSTDOUTของmakeคำสั่งถ้าผมพิมพ์make checkและกดenterก่อนที่คำสั่งแรกเสร็จสิ้นการดำเนินการเมื่อmakeคำสั่งในที่สุดก็เสร็จสิ้นคำสั่งต่อไปmake checkจะรับสิทธิและเรียกใช้ คำถามของฉันเป็นเพียง: สิ่งนี้เป็นอันตรายหรือไม่? มีพฤติกรรมที่คาดไม่ถึงใด ๆ จากการพิมพ์ที่รวดเร็วเช่นนี้หรือไม่? ทำไมสิ่งนี้ถึงได้ผลเช่นนี้?
21 bash  shell  stdout  stdin 

6
การสร้างรหัสผ่านแบบสุ่ม ทำไมพกพานี้ไม่ได้?
ฉันต้องการสร้างรหัสผ่านแบบสุ่มและฉันชอบ: </dev/urandom tr -dc [:print:] | head -c 64 บนแล็ปท็อปของฉันซึ่งใช้งาน Ubuntu สิ่งนี้จะสร้างตัวอักษรที่พิมพ์ได้ตามที่ตั้งใจ แต่เมื่อฉันเข้าสู่เซิร์ฟเวอร์ของโรงเรียนซึ่งรัน Red Hat Enterprise Linux และเรียกใช้ที่นั่นฉันจะได้ผลลัพธ์เช่น3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�Kที่จะไม่ทำเลย เกิดอะไรขึ้นที่นี่

6
มีวิธีง่าย ๆ ในการผนวกบรรทัดต่อท้ายไฟล์นอกเหนือจาก `>> 'หรือไม่?
เมื่อเร็ว ๆ นี้ฉันกำลังสะท้อนประโยคสั้น ๆ ไปยังtree_holeไฟล์ ฉันใช้echo 'something' >> tree_holeเพื่อทำงานนี้ แต่ฉันก็มักจะกังวลว่าถ้าฉันใส่ผิด>แทนที่จะทำ>>เพราะฉันทำสิ่งนี้บ่อย ดังนั้นฉันจึงทำ bash func ทั่วโลกของตัวเองใน bashrc: function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; } export -f th แต่ฉันสงสัยว่ามีอีกวิธีที่ง่ายในการต่อท้ายบรรทัดของไฟล์ เพราะฉันอาจจำเป็นต้องใช้บ่อยครั้งในโอกาสอื่น ๆ มีผู้ใด?

5
สคริปต์ทุบตี [x $ 1 = x]
ฉันกำลังอ่านสคริปต์ทุบตีฉันไม่เข้าใจว่าเกิดอะไรขึ้น #!/bin/sh [ x$1 = x ] เกิดอะไรขึ้นกับบรรทัดที่สองและ[ x$1 = x ] หมายถึงอะไร
21 bash  shell 

4
ตรวจจับโดยอัตโนมัติเมื่อฉันพิมพ์“ vi” แต่หมายถึง“ cd”?
ประมาณ 5 ครั้งต่อวันฉันพิมพ์ "vi" เมื่อฉันหมายถึง "cd" และท้ายที่สุดเปิดไดเรกทอรีใน vi มันทำให้ฉันถั่ว ดูเหมือนว่าควรมีวิธีการตรวจสอบเมื่อฉันพิมพ์ใน "vi + directory" และเปลี่ยนเป็น "cd + directory" โดยอัตโนมัติ คิด?
21 bash  shell  alias  cd-command 

6
รับลิงก์ที่สัมพันธ์กันระหว่างสองพา ธ
ว่าฉันมีสองเส้นทาง: และ<source_path> <target_path>ฉันต้องการเปลือกของฉัน (zsh) เพื่อค้นหาโดยอัตโนมัติหากมีวิธีที่จะแสดง<target_path>จาก<source_path>เป็นเส้นทางญาติ เช่นสมมติว่า <source_path> คือ /foo/bar/something <target_path> คือ /foo/hello/world ผลที่ได้ก็คือ ../../hello/world ทำไมฉันต้องการสิ่งนี้: ฉันต้องการที่จะสร้างการเชื่อมโยงสัญลักษณ์จาก<source_path>การ<target_path>ใช้ญาติเชื่อมโยงสัญลักษณ์เมื่อใดก็ตามที่เป็นไปได้ตั้งแต่มิฉะนั้นเซิร์ฟเวอร์แซมบ้าของเราไม่ได้แสดงไฟล์ได้อย่างถูกต้องเมื่อฉันเข้าถึงไฟล์เหล่านี้บนเครือข่ายจาก Windows (ที่ผมไม่ได้เป็นผู้ดูแลระบบ SYS และ Don' ไม่มีการควบคุมการตั้งค่านี้) สมมติว่า<target_path>และ<source_path>เป็นเส้นทางที่แน่นอนต่อไปนี้จะสร้างการเชื่อมโยงสัญลักษณ์ที่ชี้ไปยังเส้นทางที่แน่นอน ln -s <target_path> <source_path> ดังนั้นมันจึงไม่ทำงานสำหรับความต้องการของฉัน ฉันต้องทำสิ่งนี้กับไฟล์หลายร้อยไฟล์ดังนั้นฉันไม่สามารถแก้ไขด้วยตนเองได้ บิวด์อินใด ๆ ที่ดูแลสิ่งนี้?
21 shell  files  zsh  symlink 

1
เหตุใด 'ไม่พบ' แสดงไฟล์นี้
ใช้findกับgrepหนึ่งสามารถค้นหาไฟล์ที่ตรงกับรูปแบบ: # find | grep error ./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html ./error_log ./includes/classes/error_log อย่างไรก็ตามการใช้findเพียงไฟล์เดียวไม่พบ: # find . -name error* ./error_log ./includes/classes/error_log ทำไมไม่findค้นหาerrors.htmlไฟล์เมื่อไม่ได้ใช้กับgrep? วิธีfindใช้ในการแสดงไฟล์นี้เช่นกัน?

4
แยกสายยาวบนตัวคั่น
ฉันสามารถใช้คำสั่งใดเพื่อแบ่งอินพุตเช่นนี้: foo:bar:baz:quux ลงในนี้ foo bar baz quux ฉันพยายามหาcutคำสั่ง แต่ดูเหมือนว่าจะใช้ได้เฉพาะกับอินพุตจำนวนคงที่เท่านั้นเช่น "ตัวอักษร 1,000 ตัวแรก" หรือ "เขตข้อมูลแรก 7" ฉันต้องทำงานกับอินพุตที่มีความยาวโดยพลการ

1
ls ใช้เวลานานในไดเรกทอรีขนาดเล็ก
ใช้ Ubuntu ฉันเปิดเทอร์มินัลแล้วทำ sudo bash cd / ls | head -n 1000 และส่งคืนไดเรกทอรีประมาณ 20 รายการ อย่างไรก็ตามถ้าฉันทำ ls และไม่ได้แปะไปที่ใด ls ก็แค่ค้างไว้ที่นั่นจนกว่าฉันจะฆ่ามันจากเทอร์มินัลอื่น อาจเกิดอะไรขึ้น แก้ไข: > type ls ls is aliased to `ls --color=auto` แก้ไข: > /bin/ls / <normal response> > /bin/ls --color=auto <hangs indefinitely> เหตุใดการระบายสีเอาต์พุตของ ls ทำให้คำสั่งนี้หยุดทำงาน
21 shell  command-line  files  ls 

4
วิธีทำความเข้าใจท่อ
เมื่อฉันใช้ไปป์ในการทุบตีฉันไม่ได้คิดถึงเรื่องนี้มากขึ้น แต่เมื่อฉันอ่านตัวอย่างรหัส C โดยใช้ system call pipe () ร่วมกับ fork () ฉันสงสัยว่าจะเข้าใจไพพ์ได้อย่างไรรวมถึงไพพ์นิรนามและไพพ์ที่มีชื่อ มักจะได้ยินว่า "ทุกอย่างใน Linux / Unix เป็นไฟล์" ฉันสงสัยว่าไพพ์เป็นไฟล์จริงหรือไม่เพื่อให้ส่วนหนึ่งเชื่อมต่อการเขียนไปยังไฟล์ไพพ์และอีกส่วนหนึ่งอ่านจากไฟล์ไพพ์หรือไม่ ถ้าใช่ไฟล์ไพพ์ของไพพ์นิรนามจะถูกสร้างขึ้นที่ไหน? ใน / tmp, / dev หรือ ... ? อย่างไรก็ตามจากตัวอย่างของ pipes ที่มีชื่อฉันยังได้เรียนรู้ว่าการใช้ไพพ์มีข้อได้เปรียบด้านพื้นที่และเวลามากกว่าการใช้ไฟล์ชั่วคราวอย่างชัดเจนอาจเป็นเพราะไม่มีไฟล์ที่เกี่ยวข้องในการใช้ไพพ์ ท่อดูเหมือนจะไม่เก็บข้อมูลเช่นเดียวกับไฟล์ ดังนั้นฉันจึงสงสัยว่าไพพ์เป็นไฟล์จริงๆ

4
ฉันจะฆ่าเธรดเฉพาะของกระบวนการได้อย่างไร
$ ps -e -T | grep myp | grep -v grep 797 797 ? 00:00:00 myp 797 798 ? 00:00:00 myp 797 799 ? 00:00:00 myp 797 800 ? 00:00:00 myp สิ่งนี้แสดงกระบวนการที่mypมี PID = 797 และสี่เธรดที่มี SPID ต่างกัน ฉันจะฆ่าเธรดเฉพาะของกระบวนการโดยไม่ฆ่ากระบวนการทั้งหมดได้อย่างไร ฉันเข้าใจว่าอาจเป็นไปไม่ได้เลยในบางกรณีเมื่อมีการอ้างอิงที่ร้ายแรงในเธรดนั้น แต่มันเป็นไปได้ในกรณีใด ๆ ? ใช่แล้วเป็นอย่างไร ฉันพยายามkill 799แล้วกระบวนการก็สิ้นสุดลง ตอนนี้ฉันไม่แน่ใจว่าเป็นเพราะมีการพึ่งพาที่ทำให้mypล้มเหลวโดยไม่มีกระบวนการ800หรือเพราะการฆ่านั้นง่ายไม่สามารถฆ่าแต่ละกระบวนการได้

6
ยูนิกซ์เทียบเท่า PowerShell?
ฉันเคยพบว่ามันน่าอึดอัดใจเมื่อคำสั่งเชลล์ที่ซับซ้อนที่เกี่ยวข้องกับการส่งออกแยกข้อความที่มีAWK โดยทั่วไปเรากำลังแปลงข้อมูลที่มีโครงสร้างเป็นข้อความแล้วแยกวิเคราะห์ข้อความอีกครั้งเพื่อกลับไปที่ข้อมูลที่มีโครงสร้าง PowerShellเป็นเชลล์ Windows ที่หลีกเลี่ยงปัญหานั้นโดยอนุญาตให้คุณไพพ์วัตถุที่พิมพ์ระหว่างคำสั่งเชลล์แทนที่จะเป็นเพียงข้อความ มี Unix shells ใดบ้างที่ใช้เชิงวัตถุแทนที่จะเป็นแบบข้อความเช่น PowerShell
21 shell 

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