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

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

5
วิธีการเรียกใช้คำสั่งที่เกี่ยวข้องกับการเปลี่ยนเส้นทางหรือท่อด้วย sudo?
ฉันกำลังพยายามติดตามสิ่งที่ฉันถือว่าเป็นแนวทางปฏิบัติที่ดีที่สุดในการใช้ sudo แทนบัญชีรูท ฉันกำลังใช้งานไฟล์ concat อย่างง่ายเช่น: sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock สิ่งนี้ล้มเหลวทางด้านขวาของ ">>" ซึ่งกำลังทำงานในฐานะผู้ใช้ปกติ การเพิ่ม sudos พิเศษก็ล้มเหลวเช่นกัน (ลักษณะการทำงานที่คาดไว้ตั้งแต่การไพพ์ไปยังคำสั่ง sudo และไม่ไปที่ไฟล์) ตัวอย่างเป็นเพียงแค่นั้น แต่มันได้รับการตรวจสอบและทดสอบภายใต้บัญชีรูท

6
ความแตกต่างระหว่าง ls -l และ ll?
ฉันค่อนข้างใหม่ในการเขียนโปรแกรมเป็นทั้งบทเรียนและบางส่วนได้รับการบอกให้ผมใช้ls -lจะมองไปที่ไฟล์ในไดเรกทอรีและคนอื่น ๆ llได้รับการพูด ฉันรู้ว่าlsเป็นรายการสั้น ๆ แต่มีความแตกต่างระหว่างอีกสองคนหรือไม่
59 shell  shell-script  ls 

5
ส่งผ่านตัวแปรเชลล์เป็น / pattern / ไปยัง awk
มีดังต่อไปนี้ในหนึ่งในฟังก์ชั่นเปลือกของฉัน: function _process () { awk -v l="$line" ' BEGIN {p=0} /'"$1"'/ {p=1} END{ if(p) print l >> "outfile.txt" } ' } ดังนั้นเมื่อเรียกว่าเป็น_process $arg, $argได้รับการส่งผ่านเป็น$1และนำมาใช้เป็นรูปแบบการค้นหา มันทำงานได้ด้วยวิธีนี้เพราะเชลล์ขยาย$1แทนรูปแบบ awk! นอกจากนี้ยังlสามารถนำมาใช้ภายในโปรแกรม awk -v l="$line"ถูกประกาศด้วย ทุกอย่างดี เป็นไปได้หรือไม่ที่จะให้รูปแบบการค้นหาเป็นตัวแปร การติดตามจะไม่ทำงาน awk -v l="$line" -v search="$pattern" ' BEGIN {p=0} /search/ {p=1} END{ if(p) print l >> "outfile.txt" …
59 shell  awk  quoting  variable 

2
> & - มีประสิทธิภาพมากกว่า> / dev / null หรือไม่
เมื่อวานนี้ผมอ่านนี้เพื่อแสดงความคิดเห็นที่บอกว่าในเปลือก (อย่างน้อยbash) "มีผลเช่นเดียวกับ">&->/dev/null ความคิดเห็นนั้นหมายถึงคู่มือ ABSเป็นแหล่งข้อมูล แต่แหล่งที่มาบอกว่า>&-ไวยากรณ์ "ปิด file descriptors" ไม่ชัดเจนสำหรับฉันว่าการกระทำสองอย่างของการปิดไฟล์ descriptor และการเปลี่ยนเส้นทางไปยังอุปกรณ์ null นั้นมีความเทียบเท่าโดยสิ้นเชิง ดังนั้นคำถามของฉันคือพวกเขา? บนพื้นผิวของมันดูเหมือนว่าการปิด descriptor เป็นเหมือนการปิดประตู แต่การเปลี่ยนเส้นทางไปยังอุปกรณ์ null กำลังเปิดประตูสู่บริเวณขอบรก! ทั้งสองดูเหมือนจะไม่เหมือนกันกับฉันเพราะถ้าฉันเห็นประตูที่ปิดฉันจะไม่พยายามโยนอะไรออกไปจากมัน แต่ถ้าฉันเห็นประตูเปิดฉันจะถือว่าฉันทำได้ ในคำอื่น ๆ ฉันสงสัยเสมอว่า>/dev/nullหมายความว่าcat mybigfile >/dev/nullจริง ๆ แล้วจะประมวลผลทุกไบต์ของไฟล์และเขียนมันเพื่อ/dev/nullที่จะลืมมัน ในทางกลับกันถ้าเชลล์พบ file descriptor ที่ปิดฉันมักจะคิดว่า (แต่ไม่แน่ใจ) ว่ามันจะไม่เขียนอะไรเลยแม้ว่าคำถามcatนั้นจะยังคงอ่านทุกไบต์ ความคิดเห็นนี้พูด>&-และ>/dev/null" ควร " เหมือนกัน แต่มันไม่ได้ดังก้องคำตอบสำหรับฉัน ฉันต้องการคำตอบที่เชื่อถือได้มากขึ้นโดยอ้างอิงถึงแกนมาตรฐานหรือแหล่งข้อมูลบางส่วนหรือไม่ ...

1
คำสั่งเดียวเพื่อเข้าสู่ระบบ SSH และเรียกใช้โปรแกรม?
มีวิธีการโครงสร้างคำสั่งเดียวเพื่อเข้าสู่ระบบผ่าน SSH ไปยังเซิร์ฟเวอร์ระยะไกลและเรียกใช้โปรแกรมบนเปลือกเข้าสู่ระบบระยะไกลหรือไม่? ในคู่มือ OpenSSH จะอ่านว่า "หากระบุคำสั่งไว้คำสั่งจะถูกดำเนินการบนรีโมตโฮสต์แทนเชลล์ล็อกอิน" ตัวอย่างเช่นssh user@server mailจะเข้าสู่เซิร์ฟเวอร์ระยะไกลแสดงสถานะกล่องจดหมายจากนั้นกลับสู่เชลล์ภายในเครื่อง มีวิธีที่จะอยู่บนเปลือกระยะไกลหลังจากการแสดงสถานะจดหมายหรือไม่? นอกจากนี้ssh user@server [command]ดูเหมือนว่าจะไม่ทำงานหากคำสั่งเป็นโปรแกรมเช่น vim หรือ mutt มีวิธีการล็อกอินเข้าสู่ remote shell และรันโปรแกรมในขณะที่อยู่ใน remote shell ในระหว่างโปรแกรมและหลังจากออกจากโปรแกรมในที่สุดก็ออกจากlogoutคำสั่งเฉพาะเท่านั้น(เหมือนในเซสชัน SSH ปกติ)? ในที่สุดฉันก็ต้องการที่จะสามารถวางคำสั่งดังกล่าวเป็นนามแฝงใน. bashrc ในพื้นที่เพื่อให้มันสามารถทำงานได้อย่างรวดเร็วเมื่อต้องการ ตัวอย่างจะเข้าสู่ระบบผ่าน SSH ไปยังเซิร์ฟเวอร์ระยะไกลและเปิด mutt บนเซิร์ฟเวอร์ระยะไกลเพื่ออ่านหรือส่งอีเมล
58 bash  shell  ssh  openssh 

3
“ rm ถูกแฮช” หมายความว่าอย่างไร
ฉันจะผ่านhttp://mywiki.wooledge.org/BashGuide/CommandsAndArgumentsและเจอสิ่งนี้: $ type rm rm is hashed (/bin/rm) $ type cd cd is a shell builtin ก่อนหน้านี้เพียงเล็กน้อยคู่มือที่แสดงรายการคำสั่งประเภทต่างๆที่เข้าใจโดย Bash: aliases, function, builtins, keyword และ executables แต่ก็ไม่ได้พูดถึง "hashed" ดังนั้นในบริบทนี้ "แฮช" หมายถึงอะไร
58 bash  shell  command 

5
cd โดยเพียงพิมพ์ชื่อไดเรกทอรี?
ฉันมีสิ่งนี้เมื่อ 20 ปีก่อนหรือฉันฝันเกี่ยวกับมัน โดยทั่วไป: ถ้าblobblobฉันพิมพ์ blobblob: command not found ยุติธรรมพอสมควร ฉันต้องการมันเพื่อให้เมื่อเปลือกของฉันได้รับข้อผิดพลาด - ไม่พบคำสั่ง - มันจะตรวจสอบเพื่อดูว่ามีไดเรกทอรีที่มีชื่อนั้น ('blobblob') หรือไม่และถ้ามันcdเป็นไดเรกทอรีนั้น ฉันแน่ใจว่ามีเหตุผลบางอย่างที่จะไม่ทำเช่นนี้หรือทำอย่างระมัดระวัง ฉันคิดว่ามันจะค่อนข้างเรียบร้อยและฉันอยากลองโดยการค้นหาว่าที่ไหนสักแห่ง (เช่นที่นี่!) ฉันไม่ทราบวิธีการเขียนโปรแกรม kinda shell ซึ่งอาจบอกเป็นนัย

5
เหตุใดอักขระ wild card * จึงแตกต่างกันระหว่างคำสั่ง zip และ rm
ฉันรวบรวมสคริปต์เพื่อดำเนินการบางอย่างกับฉัน ฉันใช้โอเปอเรเตอร์การ์ด*เพื่อใช้ฟังก์ชั่นกับไฟล์ทุกประเภท แต่มีสิ่งหนึ่งที่ฉันไม่ได้รับ ฉันสามารถunzipไฟล์ทั้งหมดในโฟลเดอร์เช่นนี้ unzip "*".zip อย่างไรก็ตามในการลบไฟล์ zip ทั้งหมดหลังจากนั้นฉันต้องทำ rm *.zip นั่นคือมันไม่ต้องการเครื่องหมายคำพูด unzip ในทางกลับกันไม่สามารถใช้งานได้หากฉันให้ * (ให้คำเตือนว่า "ไฟล์ไม่ตรงกัน") ทำไมถึงแตกต่างกัน? สำหรับฉันดูเหมือนว่าการดำเนินการเดียวกันแน่นอน หรือฉันใช้การ์ดไวด์ไม่ถูกต้อง? การแนะนำให้รู้จักกับไวด์การ์ดใน Unix นั้นไม่ได้ทำสิ่งนี้จริงๆและฉันไม่สามารถหาตำแหน่งใด ๆ ในเอกสารrmหรือzip ฉันใช้เทอร์มินัลกับ Mac (Yosemite)
58 shell  wildcards  rm  zip 

6
ปิดใช้งานเชลล์ผู้ใช้เพื่อเหตุผลด้านความปลอดภัย
เรามีบัญชีผู้ใช้หลายบัญชีที่เราสร้างขึ้นสำหรับงานอัตโนมัติที่ต้องได้รับอนุญาตอย่างละเอียดเช่นการถ่ายโอนไฟล์ข้ามระบบการตรวจสอบและอื่น ๆ เราจะล็อคบัญชีผู้ใช้เหล่านี้อย่างไรเพื่อให้ "ผู้ใช้" เหล่านี้ไม่มีเชลล์และไม่สามารถเข้าสู่ระบบได้? เราต้องการป้องกันความเป็นไปได้ที่บางคนสามารถใช้ SSH เป็นหนึ่งในบัญชีผู้ใช้เหล่านี้
58 shell  ssh  users  login 

2
grep กับตัวแปร
สมมติว่าฉันมีตัวแปร line="This is where we select from a table." ตอนนี้ฉันต้องการ grep เลือกกี่ครั้งเกิดขึ้นในประโยค grep -ci "select" $line ฉันลองมัน แต่มันใช้งานไม่ได้ ฉันก็ลอง grep -ci "select" "$line" มันยังไม่ทำงาน ฉันได้รับข้อผิดพลาดดังต่อไปนี้ grep: This is where we select from a table.: No such file or directory
58 shell  grep  string 

6
คว้าตัวอักษร [x] ตัวแรกสำหรับสตริงจากไพพ์
หากฉันมีเอาต์พุตที่ยาวมากจากคำสั่ง (บรรทัดเดียว) แต่ฉันรู้ว่าฉันต้องการเพียงแค่ [x] (สมมติว่า 8) ตัวอักษรของเอาต์พุตเป็นวิธีที่ง่ายที่สุดในการรับสิ่งนั้น ไม่มีตัวคั่นใด ๆ

7
วิธีจับคู่รูปแบบที่ไม่สนใจตัวพิมพ์เล็กกับ ls
ฉันต้องการแสดงรายการไฟล์ทั้งหมดที่ตรงกับรูปแบบที่กำหนดโดยไม่สนใจเคส ตัวอย่างเช่นฉันรันคำสั่งต่อไปนี้: ls *abc* ฉันต้องการดูไฟล์ทั้งหมดที่มี "abc" เป็นส่วนหนึ่งของชื่อไฟล์โดยไม่สนใจขนาดตัวพิมพ์ -rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt -rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt บันทึก ฉันได้ค้นหาหน้าคนสำหรับกรณี แต่ไม่พบอะไรเลย

2
คุณจะใช้การเปลี่ยนเส้นทางผลลัพธ์ร่วมกับ here-เอกสารและ cat ได้อย่างไร
สมมติว่าฉันมีสคริปต์ที่ฉันต้องการไพพ์ไปยังคำสั่งอื่นหรือเปลี่ยนเส้นทางไปยังไฟล์ (ไพพ์shสำหรับตัวอย่าง) สมมติว่าฉันใช้ทุบตี ฉันสามารถทำได้โดยใช้echo: echo "touch somefile echo foo > somefile" | sh ฉันสามารถทำสิ่งเดียวกันได้โดยใช้cat: cat << EOF touch somefile echo foo > somefile EOF แต่ถ้าฉันแทนที่ "EOF" ด้วย "EOF | sh" แค่คิดว่ามันเป็นส่วนหนึ่งของ heredoc ฉันจะสร้างมันขึ้นมาเพื่อให้catส่งออกข้อความจาก stdin แล้วไปป์ที่ตำแหน่งใด ๆ ?

11
ใช้การสัมผัสและ vi?
มีประโยชน์ในการสร้างไฟล์ด้วยการสัมผัสก่อนที่จะแก้ไข .. เช่น: touch foo vi foo เมื่อเทียบกับการได้รับมันเพื่อแก้ไขทันที? ชอบ: vi foo ฉันเห็นบทเรียนบางอย่างที่ใช้ในอดีต ( touchแล้วvi)
55 shell  vi  touch 

5
ทำไมไม่มีใครใช้เชลล์เป้าหมายที่แท้จริงเป็น / bin / sh?
ฉันสังเกตเห็นว่าโดยทั่วไปไม่มีระบบใดที่ฉันเคยทำงานด้วย/bin/shเหมือนเป็นการปฏิบัติการจริง มันเสมอ symlink ไปdash, bashในโหมด POSIX หรือสิ่งที่คล้ายกัน ทำไม? อะไรคือข้อเสียของการใช้ของจริงที่เป็นต้นฉบับ/bin/sh? (ความเร็วใบอนุญาต?)
55 shell  history  dash 

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