ฉันจะเปลี่ยนจากเชลล์ที่ไม่รู้จักเป็นทุบตีได้อย่างไร


41

ฉันประหลาดใจที่ฉันไม่พบคำถามนี้บนไซต์แล้ว ดังนั้นวันนี้$ขึ้นมาหลังจากที่ฉันเข้าสู่ระบบในฐานะผู้ใช้ใหม่ username@computername:~$นี่คือที่ไม่คาดคิดเพราะผู้ใช้หลักของฉันเริ่มต้นกับพรอมต์

ดังนั้นฉันจะเปลี่ยนจากเชลล์อื่นนี้เป็นทุบตีได้อย่างไร


8
เพียงเพราะ$ขึ้นมามากกว่าusername@computername:~$ไม่ได้หมายความว่ามันจะไม่ทุบตี การจัดรูปแบบที่ถูกต้องของพรอมต์นั้นถูกกำหนดโดยตัวแปร PS1 ซึ่งสามารถตั้งค่าหรือปรับแต่งต่างกันสำหรับผู้ใช้ที่แตกต่างกัน
frabjous

3
@mouche Re: @frabjous echo $SHELLเพื่อค้นหาว่าเชลล์ปัจจุบันของคุณคืออะไร
xenoterracide

1
@mouche @frabjous และเริ่มต้นด้วย $ เป็นเรื่องธรรมดาสำหรับทุบตีเปลือกหอยทุบตีที่ไม่ใช่อย่าง zsh ใช้% ออกจากกล่องฉันเชื่อว่าเปลือกหอยอื่นใช้สิ่งอื่น ๆ
xenoterracide

1
@mouche /bin/shบ่อยครั้งที่ไม่ได้มีความหมายอะไรมาก ฉันพิมพ์ls -l /bin/shเพื่อดูว่ามันคือ symlink ในบางกรณีการเชื่อมโยงกับบางสิ่งบางอย่างเปลี่ยนพฤติกรรมของมันฉันไม่คิดว่าทุบตีเป็นอย่างนั้น
xenoterracide

3
@xenoterracide - ใช้bashเป็น/bin/sh ปิดการใช้งานคุณสมบัติทุบตีจำนวนมาก (มันจะเข้าสู่โหมดการปฏิบัติตาม POSIX)
Chris Down

คำตอบ:


61

สมมติว่าเชลล์ที่ไม่รู้จักรองรับการรันคำสั่งสัมบูรณ์คุณสามารถลอง: /bin/bash

chsh(1)ในการเปลี่ยนเปลือกเริ่มต้นผมจะใช้ ตัวอย่างการใช้งาน:chsh -s /bin/bash $USER


1
chsh เปลี่ยนเชลล์อย่างถาวรหรือเพียงแค่สำหรับเซสชันปัจจุบัน?
Mouche

10
@mouche อย่างถาวร; มันเปลี่ยนการเข้าของคุณใน/etc/passwd
Michael Mrozek

@mouche chsh(1)จะอนุญาตให้เปลี่ยนเป็นเชลล์ที่ระบุไว้ใน/etc/shells(และมีให้เลือกใช้) chsh -lแสดงรายการทางเลือก ระวังnologinมีการกำหนดบางอย่าง (เช่น) สำหรับบัญชีที่ไม่ควรใช้ในการเข้าสู่ระบบ (เป็นวิธีที่ดีในการล็อคตัวเอง) อาจมีการเพิ่มเติมเฉพาะที่สำหรับการใช้งานพิเศษ
vonbrand

19

bashคุณพิมพ์ใน ถ้าคุณอยากให้เรื่องนี้จะมีการเปลี่ยนแปลงอย่างถาวรเปลือกเริ่มต้นโดยการแก้ไข/bin/bash/etc/passwd

นี่คือตัวอย่างบางส่วนจากฉัน/etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

เขตข้อมูลสุดท้ายประกอบด้วยเชลล์การแก้ไขฟิลด์หลังจากเชลล์สุดท้าย:เป็นเชลล์ที่ถูกต้องหรือไม่ถูกต้องจะทำงาน /bin/falseและ/sbin/nologinทั้งคู่หมายความว่าผู้ใช้ไม่มีเชลล์การเข้าสู่ระบบจริงแม้ว่า pam จะไม่ถูกตั้งค่านี่ไม่ได้หมายความว่าพวกเขาไม่สามารถเข้าสู่ระบบได้ (ฉันรายงานข้อผิดพลาดในเรื่องนี้ใน Arch Linux เพราะคุณสามารถเข้าสู่ระบบแบบกราฟิกโดยไม่ต้อง เชลล์ล็อกอิน) /bin/bashและ/bin/zshเป็นทั้งเชลล์ที่ใช้ได้ดู/etc/shellsรายการของเชลล์ที่ใช้ได้บนระบบ นี่คือของฉัน/etc/shellsถ้าคุณสนใจ

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

ใช่คุณสามารถใช้chshหรือusermodทำสิ่งเดียวกันได้โปรดจำไว้ว่าไฟล์เหล่านี้เป็นเพียงไฟล์ข้อความที่มีโครงสร้างและ TIMTOWTDI


11
คุณอาจต้องการใช้chshแทนการแก้ไขด้วยตนเองpasswd
Michael Mrozek

@Michael มีวิธีที่แตกต่างกันประมาณ 5 (POOMA) ในการเปลี่ยนเชลล์ใน/etc/passwdฉันไม่ได้รู้สึกว่าต้องการรายการใด ๆ ของพวกเขาเพราะฉันมักจะทำมันด้วยตนเอง chsh และ usermod สามารถทำได้ทั้งคู่
xenoterracide

การยุ่งกับไฟล์การกำหนดค่าเป็น Bad Idea (TM) ข้อผิดพลาดอาจทำให้ระบบใช้ไม่ได้ ใช่มันมักจะเป็นเพียง / วิธีที่เร็วที่สุด แต่แล้วก็ทำมันด้วยความระมัดระวัง
vonbrand

12

หากchshหรือแก้ไขด้วยตนเองการกำหนดค่าจะไม่ทำงาน แต่สคริปต์ ~ / .profile จะถูกเรียกใช้เมื่อเข้าสู่ระบบให้เพิ่มบรรทัดนี้:

exec /bin/bash --login

หลังจากดูไประยะหนึ่งแล้วนี่เป็นคำตอบที่ฉันต้องการ ขอบคุณ!
PearsonArtPhoto

ความคิดที่ดีเป็นพิเศษถ้าเปลือกเลือกแหล่งที่มาที่ไฟล์ในการเริ่มต้น ...
vonbrand

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