Làm cách nào tôi có thể đặt trước các bí danh cho tất cả người dùng?


38

Tôi có Ubuntu 14.04.2. Tôi muốn làm cho nó để tất cả người dùng tự động có một bộ bí danh cụ thể. Tôi có các bí danh của mình được đặt trong .bashrc cá nhân của mình, nhưng tôi không muốn phải sao chép thủ công chúng vào những người dùng khác. Lý tưởng nhất là nó cũng sẽ tự động thiết lập những thứ này cho người dùng mới được tạo.


1
Theo "cài đặt trước", bạn có nghĩa là bạn muốn tất cả người dùng mới được tạo với một số bí danh nhất định, sau đó họ có thể dễ dàng cấu hình lại? Hoặc bạn có nghĩa là bạn muốn tạo bí danh toàn cầu, sao cho tất cả người dùng sẽ có chúng mọi lúc (và có thể xác định lại / xác định chúng ... nhưng không nhìn thấy chúng khi họ xem qua các tệp cấu hình của riêng mình mà họ có thể tìm thấy hoang mang)? Hay cái gì khác? Liên quan: Hoàn thành .bashrc và .bash_profile (mặc dù tiêu đề kỳ lạ của nó, tôi tin rằng câu hỏi đó và câu hỏi này thực sự khá giống nhau).
Eliah Kagan

Câu trả lời:


50

Bạn có thể tạo một tập lệnh /etc/profile.d/để tạo bí danh cho tất cả người dùng:

  1. Tạo một tệp có tên 00-aliases.sh(hoặc bất kỳ tên ưa thích nào khác) trong /etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. Đặt bí danh của bạn trong tập tin này. Thí dụ:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. Lưu các tập tin

  4. Khởi động lại bất kỳ thiết bị đầu cuối mở để áp dụng các thay đổi.
  5. Thưởng thức!

Một số lưu ý:

  • /etc/profilelà một tập tin toàn cầu được chạy trước đó ~/.profile.
  • /etc/profile.d/ là một thư mục chứa các tập lệnh được gọi bởi /etc/profile
  • Khi /etc/profileđược gọi (khi bạn bắt đầu / đăng nhập shell), nó sẽ tìm kiếm bất kỳ tệp nào kết thúc .shbằng /etc/profile.d/và chạy chúng bằng một trong các lệnh sau:

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • Tôi đang đặt 00-trước tên tệp để thực hiện trước phần còn lại của tập lệnh.
  • Bạn cũng có thể thêm bí danh của mình vào /etc/profile, nhưng điều này không được khuyến khích.

2
Hoạt động hoàn hảo! Bạn có thể cho tôi một lời giải thích ngắn gọn về mục đích của /etc/profile.d là gì không?
Brian Sizemore

1
@BrianSizemore: Tôi đã cập nhật câu trả lời của mình với một vài lời giải thích. Bạn có câu hỏi nào nữa không?
Helio

1
Điều này giải thích nó rất tốt. Việc làm rõ cũng giúp tôi phát triển các ứng dụng khác. Cảm ơn vì sự giúp đỡ!
Brian Sizemore

4
Phương pháp trong câu trả lời này không nên được sử dụng. Bí danh trong .shcác tệp trong /etc/profile.d/(hoặc /etc/profile) sẽ chỉ được xác định cho các vỏ đăng nhập và chúng sẽ không hoạt động trong các vỏ không đăng nhập tương tác. Không giống như các biến môi trường, bash không thể xuất bí danh cho các tiến trình con, thậm chí không phải là bash shell con. Phương pháp này có vẻ hoạt động chính xác nếu nó chỉ được thử nghiệm trong các vỏ đăng nhập, chẳng hạn như vỏ ban đầu thu được bằng cách đăng nhập vào bảng điều khiển ảo hoặc qua SSH, nhưng nó bị lỗi trong các vỏ con của chúngcũng bị lỗi trong các vỏ được khởi động bởi các cửa sổ thiết bị đầu cuối GUI.
Eliah Kagan

2
@Helio Câu trả lời của tôi cho Undertanding .bashrc và .bash_profile đưa ra hai phương pháp khác, tùy thuộc vào mục tiêu là gì, cùng với giải thích chi tiết. Tôi không chắc nếu câu hỏi này hoặc câu hỏi đó có thể được coi là trùng lặp. Tôi đã nhận xét về câu hỏi này để được OP làm rõ về nhu cầu của họ. Câu hỏi này có phạm vi hẹp hơn câu hỏi này vì vậy tôi cho rằng sẽ ổn khi tôi đăng một câu trả lời ngắn ở đây bao gồm một số tài liệu trong bài dài của tôi ở đó. (Hiện tại, tôi hy vọng sẽ nhận được câu trả lời của OP cho nhận xét của tôi.)
Eliah Kagan

6

Như đã chỉ ra ở đây , có lẽ tốt hơn để thêm các bí danh toàn cầu vào /etc/bash.bashrc:

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

, bởi vì các tập lệnh trong /etc/profile.dcó thể được bỏ qua cho các shell nhất định (không đăng nhập). Tôi đã mất nhiều giờ để tìm ra lý do tại sao /etc/profile.dkhông làm việc.

Xem ví dụ: https://askubfox.com/a/606882/Hiểu .bashrc và .bash_profile để biết sự khác biệt giữa các shell.


5

Một bí danh sẽ chỉ hoạt động trong khi bên trong vỏ. Nếu bạn muốn một cái gì đó có thể truy cập rộng rãi như một tệp thực thi, bạn có thể thêm một tập lệnh tắt nhỏ vào /usr/bin, ví dụ:

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

Các "$@"vượt qua tất cả các đối số thông qua để thực thi. Tên của kịch bản sẽ là tên của tệp thực thi.

Nguồn: https://unix.stackexchange.com/a/52509/15954


Câu trả lời này dường như không liên quan. Câu trả lời được chấp nhận trả lời chính xác câu hỏi trong khi điều này dường như cung cấp một cách giải quyết.
Brian Sizemore

3
@BrianSizemore Tôi có câu hỏi tương tự của bạn nhưng tình cờ tìm thấy giải pháp này phù hợp hơn trong trường hợp của tôi; hy vọng nó sẽ giúp những người khác trong tình huống tương tự. Đối với nhiều người, bí danh sẽ ổn.
jtpereyda

1
@BrianSizemore Câu trả lời này làm rõ một quan niệm sai lầm phổ biến (mà tôi cũng có) và rất hữu ích và liên quan trực tiếp.
a20

0

/ etc / bashrc

  • Hệ thống chức năng rộng và bí danh
  • Công cụ môi trường đi vào / etc / profile

KHÔNG nên thay đổi tập tin này trừ khi bạn biết bạn đang làm gì. Sẽ tốt hơn nhiều khi tạo tập lệnh shell custom.sh trong /etc/profile.d/ để thực hiện các thay đổi tùy chỉnh cho môi trường của bạn, vì điều này sẽ ngăn chặn nhu cầu hợp nhất trong các bản cập nhật trong tương lai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.