Belirli bir kullanıcı adının mevcut sistemde olup olmadığını bir kabuk betiğinde nasıl bulabilirim?
/etc/passwdve /etc/shadoweksik. 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/passwdve /etc/shadoweksik. 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
ifnegatif 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.
getentolduğ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
0Kullanı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.
rootKullanı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 . LANGBunu güvenli bir şekilde yapmak için önceden ayarlayın .
Güvenmek /etc/passwdve 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.passwdveya benzeri dosyalar kullanabilir).
/etc/passwdTipik 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/passwdgö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
idda 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...