Tambahkan pengguna ke sistem * hanya jika tidak ada *

47

Saya telah menjalankan useradd {user}perintah untuk menambahkan pengguna ke sistem saya, meskipun saya berencana untuk menjalankan ini dalam lingkungan otomatis, dan mungkin akhirnya dijalankan lagi, meskipun pengguna sudah ada.

Apakah ada cara saya bisa menjalankan ini hanya jika pengguna belum ada? Pengguna tidak memiliki folder rumah.

tarnfeld
sumber
adduserumumnya lebih disukai pada sistem Debian / Ubuntu.
Faheem Mitha
@FaheemMitha Dalam skrip otomatis, mungkin lebih baik menggunakan yang lebih konsisten useradd.
The Guy with The Hat

Jawaban:

69

id -u somename mengembalikan kode keluar non-nol ketika pengguna tidak ada.

Anda dapat mengujinya dengan cukup sederhana ... ( &>/dev/nullhanya menekan output / peringatan normal)

id -u somename &>/dev/null || useradd somename 
Peter.O
sumber
1
Dalam cara yang portabel: "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristan
13

coba ini:

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

atau bahkan ini:

useradd {user} || true
sebaszw
sumber
Ini menyimpan cek karena gagal dengan aman jika pengguna sudah ada.
CoverosGene
8

Kecuali jika Anda hanya memiliki sedikit sistem, Anda mengajukan pertanyaan yang salah. Jawabannya bukan menjalankan useradd sama sekali, tetapi sebaliknya menyerahkan pekerjaan ini ke solusi manajemen konfigurasi seperti boneka atau koki. Ini akan memungkinkan definisi pengguna Anda untuk terpusat dan mencegah Anda berjalan untuk loop dan menggunakan ssh dengan pengguna root untuk mengkonfigurasi sistem Anda. Anda akan selalu memiliki sistem dalam kondisi konfigurasi yang diketahui.

Dokumentasi untuk boneka tersedia di http://docs.puppetlabs.com

Sebagai contoh dalam wayang:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
Aaron Brown
sumber
4
Wayang adalah proyek yang hebat, tetapi Anda tidak dapat membuat asumsi tentang apa yang sebenarnya ditanyakan OP :)
rahmu
1
OP menjelaskan tujuannya dengan sangat jelas - otomatis dan dapat dijalankan kembali meskipun pengguna ada (idempotensi). Ini adalah kasus penggunaan yang tepat untuk alat manajemen konfigurasi. Ketika seseorang tidak menyadari bahwa alat sudah ada untuk memecahkan masalah ini, mereka cenderung untuk mengajukan pertanyaan yang melibatkan penyelesaian masalah yang sangat spesifik, fokus sempit ketika ada konsep yang lebih besar untuk dipahami.
Aaron Brown
Saya sudah menggunakan Chef.
tarnfeld
1
Chef hanya akan menambah pengguna jika pengguna tidak ada. Itulah idempotensi, jadi saya tidak mengerti pertanyaannya (1,5 tahun sekarang).
Aaron Brown
4

useradd tidak akan menambahkan pengguna lagi jika sudah ada, itu bermaksud untuk memastikan nomor uid dan login uid unik. Jika Anda berencana untuk menjalankannya melalui batch, pastikan uids yang digunakan unik; useradd akan mengeluh untuk entri yang bermasalah dan Anda perlu menangkap kesalahan / stderr untuk melihat akun pengguna yang memiliki masalah masuk ke sistem akun (/ etc / passwd, grup, shadow).

Nikhil Mulley
sumber