เหตุใดจึงต้องใช้เปลือก ** เข้าสู่ระบบ ** เหนือเปลือกหอย ** ที่ไม่ได้ลงชื่อเข้าใช้ **


24

ฉันมีความเข้าใจพื้นฐานของdotfilesในระบบ * nix แต่ฉันยังคงสับสนเกี่ยวกับความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอินนี้

กลุ่มคำตอบที่แตกต่างกัน (รวมถึงคำซ้ำซ้อน) ได้ระบุหัวข้อย่อยต่อไปนี้แล้ว:

  • วิธีการเรียกเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือก
  • วิธีการตรวจสอบเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือก
  • ไฟล์เริ่มต้นใดบ้างที่จะถูกใช้โดยล็อกอินหรือเชลล์ที่ไม่ใช่ล็อกอิน
  • อ้างถึงเอกสาร (เช่นman bash) สำหรับรายละเอียดเพิ่มเติม

สิ่งที่คำตอบไม่ได้บอก (และบางสิ่งที่ฉันยังสับสนอยู่) คือ:

  • อะไรคือสิ่งที่ใช้กรณีของการเข้าสู่ระบบหรือไม่ใช่การเข้าสู่ระบบเปลือก? (เช่นผมกำหนดค่าเฉพาะzshrcสำหรับzshและที่มากพอสำหรับความต้องการส่วนบุคคลมากที่สุด dev, ฉันรู้ว่ามันไม่ง่ายเหมือนสิ่งที่vimrcไปvim)

  • อะไรคือเหตุผลที่จะใช้เข้าสู่ระบบในช่วงที่ไม่ได้เข้าสู่ระบบเปลือก (นอกเหนือจากการบริโภคแฟ้มเริ่มต้นที่แตกต่างกันและวงจรชีวิต)?

คำตอบ:


15

แนวคิดคือผู้ใช้ควรมี (อย่างน้อยที่สุด) หนึ่งเชลล์ล็อกอินต่อโฮสต์ (บางทีฉันควรจะพูดว่าหนึ่งล็อกอินเชลล์ต่อโฮสต์ต่อเทอร์มินัล - ถ้าคุณล็อกอินพร้อมกันผ่านโฮสต์หลายเทอร์มินัลคุณคาดว่าจะมีเชลล์ล็อกอินหลายอัน) โดยปกติแล้วนี่จะเป็นเชลล์แรกเมื่อเข้าสู่ระบบ (จึงชื่อ) ดังนั้นโครงร่างนี้อนุญาตให้คุณระบุการกระทำที่คุณต้องการให้เกิดขึ้นเพียงครั้งเดียวต่อการเข้าสู่ระบบและสิ่งที่คุณต้องการให้เกิดขึ้นทุกครั้งที่คุณเริ่มเชลล์ใหม่ (แบบโต้ตอบ)

โดยปกติทุกเปลือกอื่น ๆ ที่คุณทำงานหลังจากที่เข้าสู่ระบบในจะเป็นลูกหลาน (ลูกของเด็กของเด็กที่ ... ) ของเปลือกเข้าสู่ระบบและดังนั้นจึงจะได้รับมรดกการตั้งค่าต่างๆ (ตัวแปรสภาพแวดล้อมumaskฯลฯ ) จากเปลือกเข้าสู่ระบบ และตามความคิดที่ว่าไฟล์ที่เริ่มต้นการเข้าสู่ระบบ ( .login, .profileฯลฯ ) ควรตั้งค่าที่สืบทอดและให้.bashrc(หรือสิ่งอื่นที่คุณใช้) จัดการกับคนที่ไม่ได้ ( set, shoptไม่ใช่ส่งออกตัวแปรเปลือก ฯลฯ )

ความคิดอื่นคือไฟล์การเริ่มต้นการเข้าสู่ระบบ (และพวกเขาเท่านั้น) ควรทำ "ยกหนัก" คือการกระทำที่ใช้ทรัพยากรมาก ตัวอย่างเช่นคุณอาจต้องการให้กระบวนการบางอย่างทำงานในพื้นหลังเมื่อใดก็ตามที่คุณลงชื่อเข้าใช้ (แต่มีเพียงหนึ่งสำเนาเท่านั้น) คุณอาจต้องการให้ข้อมูลสถานะบางอย่าง (เช่นdfหรือwho) ปรากฏขึ้นเมื่อคุณเข้าสู่ระบบ แต่ไม่ใช่ทุกครั้งที่คุณเริ่มเชลล์เชิงโต้ตอบใหม่ โดยเฉพาะถ้าคุณมีการโต้ตอบโปรแกรม / กล่องโต้ตอบ (เช่นที่ต้องการข้อมูลจากคุณ) ที่คุณต้องการเรียกใช้ทุกครั้งที่คุณลงชื่อเข้าใช้คุณอาจไม่ต้องการให้มันทำงานทุกครั้งที่คุณเริ่มเชลล์ใหม่ ตัวอย่างเมื่อยี่สิบปีก่อน Solaris ล็อกอินคุณเข้าสู่เชลล์เดี่ยวที่ไม่ใช่กราฟิกและไม่ใช่หน้าต่าง (ผมเชื่อว่ามันมีการเปลี่ยนแปลงตั้งแต่นั้น.) มันเป็นงานของ.loginหรือ.profile(หรืออะไรก็ตาม) เพื่อเริ่มระบบ windowing startxมีคำสั่งเช่น (สิ่งนี้มีประโยชน์ส่วนหนึ่งเพราะมีหลายระบบหน้าต่างที่มีผู้ใช้ที่แตกต่างกันมีการตั้งค่าที่แตกต่างกันผู้ใช้บางคนใช้ระบบที่แตกต่างกันในสถานการณ์ที่แตกต่างกันและเรามีกล่องโต้ตอบใน.profileคำถามที่ถามว่า เห็นได้ชัดว่าคุณไม่ต้องการให้มันทำงานทุกครั้งที่คุณเปิดหน้าต่างใหม่หรือพิมพ์sh.

เป็นเวลานานแล้วที่ข้าใช้สิ่งอื่นนอกเหนือจากbash กรณีขอบ (ตัวอย่างเช่นฉันเขียนสคริปต์ด้วย#!/bin/shดังนั้นในบางระบบสคริปต์ของฉันทำงานด้วยdashและในคนอื่น ๆ ที่ทำงานด้วยbashในโหมด POSIX สองสามครั้งต่อปีที่ฉันเรียกใช้csh/ tcshสำหรับสองสามนาทีเพื่อดูว่ามันจัดการบางสิ่งบางอย่างหรือ ตอบคำถาม) หากคุณใช้เชลล์หลาย ๆ ตัว (เช่นbashและzsh) ทุกวันรูปแบบของคุณอาจแตกต่างกัน หากเชลล์หลักของคุณ (ตามที่กำหนดไว้/etc/passwd) คือbashคุณอาจต้องการเรียกใช้zshล็อกอินเชลล์และจากนั้นอาจเรียกเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบบางzshสังกัด คุณควรหลีกเลี่ยงการใช้ล็อกอินเชลล์ที่อยู่ใต้เชลล์ล็อกอินอื่นที่เป็นประเภทเดียวกัน

ตามที่ระบุไว้ในความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอิน? แอปพลิเคชัน OS X Terminal รันเชลล์ล็อกอินดังนั้นผู้ใช้ทั่วไปจะมี“ เชลล์ล็อกอิน” หลายรายการพร้อมกัน นี่เป็นโมเดลที่แตกต่างจากที่ฉันได้อธิบายไว้ข้างต้นและอาจต้องการให้ผู้ใช้คิดใหม่ว่าเขาทำอะไรใน.loginหรือ.profileไฟล์ (หรืออะไรก็ตาม) ฉันไม่ทราบว่านักพัฒนา OS X ได้บันทึกเหตุผลของพวกเขาสำหรับการตัดสินใจออกแบบนี้หรือไม่ แต่ฉันสามารถจินตนาการถึงสถานการณ์ที่สิ่งนี้จะเป็นประโยชน์ มีเวลาที่ฉันเปิดหน้าต่างเชลล์จำนวนหนึ่งเมื่อฉันลงชื่อเข้าใช้เป็นประจำและฉันจะตั้งค่าให้เป็นสีข้อความและพื้นหลังที่แตกต่างกัน (โดยเขียน ANSI escape sequences ไปที่หน้าจอ) เพื่อช่วยฉันติดตามสิ่งที่อยู่ สีเทอร์มินัลเป็นตัวอย่างของสิ่งที่ไม่ได้สืบทอดโดย children-of-children แต่ยังคงอยู่ภายในหน้าต่าง ดังนั้นนี่คือสิ่งที่คุณต้องการทำทุกครั้งที่คุณเริ่มหน้าต่างเทอร์มินัลใหม่ แต่ไม่ใช่ทุกครั้งที่คุณเริ่มเชลล์เชิงโต้ตอบใหม่

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