Belirli bir kullanıcı adının mevcut sistemde olup olmadığını bir kabuk betiğinde nasıl bulabilirim?
/etc/passwd
ve /etc/shadow
eksik. OS X'in Directory Services veya Linux'u aynı şekilde Active Directory entegrasyonuyla düşünün.
Belirli bir kullanıcı adının mevcut sistemde olup olmadığını bir kabuk betiğinde nasıl bulabilirim?
/etc/passwd
ve /etc/shadow
eksik. OS X'in Directory Services veya Linux'u aynı şekilde Active Directory entegrasyonuyla düşünün.
Yanıtlar:
Bunun için kullanılacak en temel araçlardan biri muhtemelen id
.
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
Hangi üretir
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
if
negatif sonuç denetleyicisine ihtiyacım olursa ne olur ?
id -u $1 1>/dev/null 2>&1; echo $?
boru için kullanılabilir
getent
Bu komut, / etc dosyaları ve LDAP, AD, NIS / Sarı Sayfalar, DNS ve benzeri gibi çeşitli uzak servisler tarafından desteklenebilen veritabanları için giriş toplamak üzere tasarlanmıştır.
Bir kullanıcı adının şifre adlandırma servislerinden biri tarafından bilinip bilinmediğini anlamak için, sadece şunu çalıştırın:
getent passwd username
Bu, işletim sistemine ve uygulamaya bağlı olarak grup, toplantı sahipleri ve diğerleri ile de çalışır.
getent
olduğu halde getent
, Mac OS X'te yok
finger
Çıktısını ayrıştırın finger -m <username>
. Kullanıcı bulunamadıysa hata kodu yok, ne yazık ki, ancak bulunmazsa, hata çıktısı yazılır. Şimdiye kadar sakınca yok.
finger -ms <username> 2>&1 1>/dev/null | wc -l
0
Kullanıcı bulunursa yazdırır (çünkü hata çıkışı olmaz), aksi takdirde daha büyük sayılar.
chown
Çalıştır (herhangi bir kullanıcı olarak, şaşırtıcı bir şekilde):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
Olarak başarısız olursa root
, hesap adı geçersiz.
root
Kullanıcı olmayan olarak başarısız olursa , Operasyon için izin verilmeyen veya geçersiz kullanıcı (veya eşdeğeri) için olası yerelleştirilmiş çıktıyı ayrıştırın . LANG
Bunu güvenli bir şekilde yapmak için önceden ayarlayın .
Güvenmek /etc/passwd
ve benzeri olmak isteyeceğinizi söyleyebilirim (örneğin /etc/shadow
, Gölge tabanlı sistemler için; konu dışı bir yan notta, bazı benzer sistemler /etc/master.passwd
veya benzeri dosyalar kullanabilir).
/etc/passwd
Tipik olarak, bir kullanıcı var olup olmadığını mutlak yetkili karar olarak işlenir. Bu sayfada açıklanan diğer yöntemlerden herhangi birini kullanıyorsanız ve bu diğer yöntemler mevcut bir kullanıcıyı işaret ediyor, ancak /etc/passwd
göstermiyorsa, kullanıcının en yaygın standardın tanımına göre sistemde uygun bir şekilde bulunmadığını söyleyebilirim. yazılım muhtemelen güveniyordu.
Bu, kullanılabilecek diğer bazı seçeneklerin karışımına eklemek için başka bir şekilde atacağım.
ls -l /home | grep ^customUserName$<BR>
echo $?
Açıkça, "customuserName" öğesini kontrol etmek istediğiniz kullanıcının adıyla değiştirin. Sisteminizin kullandığı buysa, / home ile / users değerini değiştirin. Bu, belirli bir kullanıcı için giriş dizini oluşturulmamışsa / etc / passwd içindeki tüm kullanıcıları bulamayabilir; yalnızca kullanıcıları (yani, / etc / passwd içine metin satırları alırsanız) ve giriş dizinleri girmiyorsa oluşabilir. Bir kişi giriş yapana kadar / yapılmadığı sürece alın
id
da getent
"düzgün bir şekilde" bulunmadığı, özellikle de OP açıkça adlandırma hizmetleri olduğunu belirttiğinde, neden bir kullanıcı tarafından belirtildiğini anlamadım. dikkat edilmesi gereken.
if id -u "$1" >/dev/null 2>&1; then
...