ฉันจะตั้งชื่อแทนล่วงหน้าสำหรับผู้ใช้ทั้งหมดได้อย่างไร


38

ฉันมี Ubuntu 14.04.2 ฉันต้องการทำให้ผู้ใช้ทุกคนมีชื่อแทนเฉพาะโดยอัตโนมัติ ฉันได้ตั้งชื่อแทนไว้ใน. bashrc ส่วนตัวของฉันแล้ว แต่ฉันไม่ต้องการคัดลอกพวกเขาไปยังผู้ใช้รายอื่นด้วยตนเอง เป็นการดีที่ควรจะตั้งค่าเหล่านี้โดยอัตโนมัติสำหรับผู้ใช้ที่เพิ่งสร้างใหม่เช่นกัน


1
โดย "preset" คุณหมายถึงคุณต้องการให้ผู้ใช้ใหม่ทั้งหมดถูกสร้างด้วยนามแฝงบางอย่างซึ่งพวกเขาสามารถกำหนดค่าใหม่ได้อย่างง่ายดายหรือไม่ หรือคุณหมายถึงคุณต้องการสร้างนามแฝงระดับโลกเช่นที่ผู้ใช้ทุกคนจะมีพวกเขาตลอดเวลา (และสามารถกำหนด / ยกเลิกการกำหนดพวกเขา ... แต่ไม่เห็นพวกเขาเมื่อพวกเขาดูไฟล์การกำหนดค่าของพวกเขาเองซึ่งพวกเขาอาจพบ befuddling)? หรืออย่างอื่น? ที่เกี่ยวข้อง: Undertanding. bashrc และ. bash_profile (ทั้งๆที่ชื่อแปลก ๆ ของมันฉันเชื่อว่าคำถามนี้และคำถามนี้คล้ายกันจริงๆ)
Eliah Kagan

คำตอบ:


50

คุณสามารถสร้างสคริปต์/etc/profile.d/เพื่อสร้างชื่อแทนสำหรับผู้ใช้ทั้งหมด:

  1. สร้างไฟล์ชื่อ00-aliases.sh(หรือชื่อแฟนซีอื่น ๆ ) ใน/etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. ใส่ชื่อแทนคุณในไฟล์นี้ ตัวอย่าง:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. บันทึกไฟล์

  4. รีสตาร์ทเทอร์มินัลที่เปิดอยู่เพื่อใช้การเปลี่ยนแปลง
  5. สนุก!

หมายเหตุบางส่วน:

  • /etc/profile~/.profileเป็นไฟล์ทั่วโลกที่ได้รับการเรียกใช้ก่อน
  • /etc/profile.d/ เป็นโฟลเดอร์ที่มีสคริปต์ที่เรียกใช้โดย /etc/profile
  • เมื่อ/etc/profileถูกเรียกว่า (เมื่อคุณเริ่ม / เข้าสู่ระบบเปลือก) จะค้นหาไฟล์ใด ๆ ในตอนจบ.shใน/etc/profile.d/และทำงานกับพวกเขาด้วยหนึ่งในคำสั่งเหล่านี้:

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • ฉันใส่00-ชื่อไฟล์ไว้ก่อนเพื่อให้สามารถเรียกใช้ได้ก่อนสคริปต์ที่เหลือ
  • คุณสามารถเพิ่มชื่อแทนได้/etc/profileแต่ไม่แนะนำให้ทำเช่นนี้

2
ทำงานได้อย่างสมบูรณ์แบบ! คุณช่วยอธิบายสั้น ๆ เกี่ยวกับวัตถุประสงค์ของ /etc/profile.d ได้ไหม
Brian Sizemore

1
@BrianSizemore: ฉันปรับปรุงคำตอบของฉันด้วยคำอธิบายเล็กน้อย คุณมีคำถามเพิ่มเติมหรือไม่
Helio

1
มันอธิบายได้ดีมาก คำอธิบายช่วยให้ฉันพัฒนาการใช้งานอื่นเช่นกัน ขอบคุณสำหรับความช่วยเหลือ!
Brian Sizemore

4
ไม่ควรใช้วิธีการในคำตอบนี้ นามแฝงใน.shไฟล์ใน/etc/profile.d/(หรือ/etc/profile) จะถูกกำหนดไว้สำหรับล็อกอินเชลล์เท่านั้นและจะไม่ทำงานในเชลล์ที่ไม่ใช่การล็อกอินแบบโต้ตอบ ซึ่งแตกต่างจากตัวแปรสภาพแวดล้อมทุบตีไม่สามารถส่งออกนามแฝงไปยังกระบวนการเด็กไม่ได้เปลือกหอยเด็ก วิธีนี้อาจดูเหมือนว่าทำงานอย่างถูกต้องหากมีการทดสอบในล็อกอินเชลล์เท่านั้นเช่นเชลล์ดั้งเดิมที่ได้รับจากการเข้าสู่ระบบในคอนโซลเสมือนหรือผ่าน SSH แต่มันล้มเหลวในเชลล์ย่อยและยังล้มเหลวในเชลล์ที่เริ่มต้นด้วยหน้าต่างเทอร์มินัล GUI
Eliah Kagan

2
@Helio คำตอบของฉันต่อUndertanding. bashrc และ. bash_profileให้สองวิธีอื่น ๆ ขึ้นอยู่กับว่าเป้าหมายคืออะไรพร้อมกับคำอธิบายโดยละเอียด ฉันไม่แน่ใจว่าคำถามนี้หรือคำถามนั้นอาจถือได้ว่าซ้ำกัน ฉันได้แสดงความคิดเห็นกับคำถามนี้เพื่อรับการชี้แจงจาก OP เกี่ยวกับความต้องการของพวกเขา คำถามนี้มีขอบเขตแคบกว่าคำถามดังกล่าวดังนั้นฉันคิดว่ามันคงจะโอเคสำหรับฉันที่จะโพสต์คำตอบสั้น ๆ ที่นี่ซึ่งครอบคลุมเนื้อหาบางส่วนในเนื้อหาที่มีความยาวของฉันที่นั่น (สำหรับตอนนี้ฉันหวังว่าจะได้รับคำตอบจาก OP ถึงความคิดเห็นของฉัน)
Eliah Kagan

6

ดังที่กล่าวไว้ที่นี่อาจเป็นการดีกว่าที่จะเพิ่มชื่อแทนส่วนกลางใน /etc/bash.bashrc:

alias foo='bar --baz'
alias baz='foo --bar'

เนื่องจากสคริปต์ใน/etc/profile.dสามารถถูกละเว้นสำหรับเชลล์ (ที่ไม่ได้ล็อกอิน) บางตัว ฉันใช้เวลาหลายชั่วโมงในการหาสาเหตุที่/etc/profile.dไม่ได้ผล

ดูเช่นhttps://askubuntu.com/a/606882/และการ ทำความเข้าใจ. bashrc และ. bash_profileเพื่อแยกความแตกต่างระหว่างเชลล์


5

นามแฝงจะทำงานเฉพาะเมื่ออยู่ภายในเชลล์ หากคุณต้องการบางสิ่งบางอย่างที่สามารถเข้าถึงได้อย่างกว้างขวางเท่าที่สามารถเรียกใช้งานได้คุณสามารถเพิ่มสคริปต์ช็อตคัทขนาดเล็กลงไป/usr/binเช่น:

#!/bin/sh
ls -l "$@"

การ"$@"ส่งผ่านข้อโต้แย้งทั้งหมดผ่านไปยังปฏิบัติการ ชื่อของสคริปต์จะเป็นชื่อของไฟล์ที่เรียกทำงานได้

ที่มา: https://unix.stackexchange.com/a/52509/15954


คำตอบนี้ดูเหมือนไม่เกี่ยวข้อง คำตอบที่ยอมรับตอบคำถามได้อย่างถูกต้องในขณะที่สิ่งนี้ดูเหมือนจะให้วิธีแก้ปัญหา
Brian Sizemore

3
@BrianSizemore ฉันมีคำถามเดียวกันของคุณ แต่สะดุดกับวิธีนี้ซึ่งเหมาะสมกว่าในกรณีของฉัน; หวังว่ามันจะช่วยคนอื่นในสถานการณ์ที่คล้ายกัน สำหรับคนจำนวนมากนามแฝงจะไม่เป็นไร
jtpereyda

1
@BrianSizemore คำตอบนี้ชี้แจงความเข้าใจผิดที่พบบ่อย (ซึ่งฉันมี) และมีประโยชน์และเกี่ยวข้องโดยตรง
a20

0

/ etc / bashrc

  • ฟังก์ชั่นทั้งระบบและชื่อแทน
  • ข้อมูลสภาพแวดล้อมจะอยู่ใน / etc / profile

คุณไม่ควรเปลี่ยนไฟล์นี้จนกว่าคุณจะรู้ว่ากำลังทำอะไรอยู่ เป็นการดีกว่ามากในการสร้างเชลล์สคริปต์ custom.sh ใน /etc/profile.d/ เพื่อทำการเปลี่ยนแปลงแบบกำหนดเองกับสภาพแวดล้อมของคุณเนื่องจากจะป้องกันไม่ให้ต้องรวมในการอัปเดตในอนาคต

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