Thêm người dùng vào hệ thống * chỉ khi nó không tồn tại *


47

Tôi đã chạy useradd {user}lệnh để thêm người dùng vào hệ thống của mình, mặc dù tôi có kế hoạch chạy nó trong môi trường tự động và cuối cùng nó có thể được chạy lại, mặc dù người dùng đã tồn tại.

Có cách nào để tôi có thể chạy cái này chỉ khi người dùng không tồn tại? Người dùng không có một thư mục nhà.


adduserthường được ưa thích trên các hệ thống Debian / Ubuntu.
Faheem Mitha

@FaheemMitha Trong các tập lệnh tự động, có lẽ tốt hơn là sử dụng nhất quán hơn useradd.
Chàng trai với chiếc mũ

Câu trả lời:


69

id -u somename trả về mã thoát không bằng 0 khi người dùng không tồn tại.

Bạn có thể kiểm tra nó khá đơn giản ... ( &>/dev/nullchỉ thay thế đầu ra / cảnh báo bình thường)

id -u somename &>/dev/null || useradd somename 

1
Theo cách di động: "id -u somename> / dev / null 2> & 1 || saddame useradd"
Tristan

13

thử đi:

useradd {user} || echo "User already exists."

hoặc thậm chí này:

useradd {user} || true

Điều này sẽ lưu kiểm tra vì nó không an toàn nếu người dùng đã tồn tại.
CoverosGene

8

Trừ khi bạn chỉ có một số ít hệ thống, nếu không bạn sẽ hỏi sai câu hỏi. Câu trả lời không phải là chạy useradd, mà thay vào đó, hãy để công việc này thành một giải pháp quản lý cấu hình như con rối hoặc đầu bếp. Điều này sẽ cho phép các định nghĩa người dùng của bạn được tập trung và ngăn bạn chạy các vòng lặp và sử dụng ssh với người dùng root để định cấu hình hệ thống của bạn. Bạn sẽ luôn có các hệ thống trong trạng thái cấu hình đã biết.

Tài liệu cho con rối có sẵn tại http://docs.puppetlabs.com

Một ví dụ trong con rối:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}

4
Con rối là một dự án tuyệt vời, nhưng bạn không thể đưa ra giả định về những gì OP thực sự yêu cầu :)
rahmu

1
OP đã giải thích mục tiêu rất rõ ràng - tự động và có thể được chạy lại ngay cả khi người dùng tồn tại (idempotency). Đây là những trường hợp sử dụng chính xác cho một công cụ quản lý cấu hình. Khi ai đó không biết rằng các công cụ đã tồn tại để giải quyết những vấn đề này, họ có xu hướng đặt câu hỏi liên quan đến việc giải quyết một vấn đề rất cụ thể, tập trung hẹp khi có một khái niệm lớn hơn để nắm bắt.
Aaron Brown

Tôi đã sử dụng Chef.
tarnfeld

1
Đầu bếp sẽ chỉ thêm người dùng nếu người dùng không tồn tại. Đó là sự bình đẳng là gì, vì vậy tôi không hiểu câu hỏi (1,5 năm nay).
Aaron Brown

4

useradd sẽ không thêm người dùng nữa nếu nó đã tồn tại, họ dự định đảm bảo số uid và thông tin đăng nhập uid là duy nhất. Nếu bạn dự định chạy qua một đợt, hãy đảm bảo rằng các uids đang được sử dụng là duy nhất; useradd sẽ phàn nàn về các mục có vấn đề và bạn cần nắm bắt các lỗi / stderr để xem tài khoản người dùng nào gặp sự cố khi vào hệ thống tài khoản (/ etc / passwd, nhóm, bóng).

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.