Πληροφορίες χρηστών και ομάδων
getlogin#
Επιστρέφει το όνομα σύνδεσης του χρήστη που συσχετίζεται με το ελέγχον τερματικό.
Η getlogin τυλίγει την ομώνυμη συνάρτηση της βιβλιοθήκης C. Σε Linux συμβουλεύεται την εγγραφή του πυρήνα για το ποιος κατέχει το τρέχον ελέγχον τερματικό - παραδοσιακά καταγεγραμμένη στο /var/run/utmp - και επιστρέφει αυτό το όνομα ως συμβολοσειρά. Απαντάει στην ερώτηση «ποιος συνδέθηκε σε αυτό το tty;», που δεν είναι η ίδια ερώτηση με «ποιος τρέχει αυτή τη διεργασία;». Μια διεργασία που έχει αλλάξει το real ή το effective UID της, ή που δεν έχει καθόλου ελέγχον τερματικό (δαίμονας, cron job, entrypoint σε container), θα δει συνήθως την getlogin να επιστρέφει την κενή συμβολοσειρά ή undef.
Σύνοψη#
my $name = getlogin;
Τι επιστρέφεται#
Μια συμβολοσειρά - το όνομα σύνδεσης που είναι καταγεγραμμένο για το ελέγχον τερματικό - ή την κενή συμβολοσειρά / undef όταν δεν υπάρχει διαθέσιμη τέτοια εγγραφή. Αντιμετωπίστε τόσο την κενή συμβολοσειρά όσο και την απροσδιόριστη τιμή ως «άγνωστο» και επιστρέψτε σε αναζήτηση βασισμένη σε UID:
my $login = getlogin || getpwuid($<) || "Kilroy";
Η χρήση του || εδώ είναι σκόπιμη: η κενή συμβολοσειρά και η undef σημαίνουν και οι δύο «καμία απάντηση» και και οι δύο πρέπει να ενεργοποιήσουν την εφεδρεία.
Καθολική κατάσταση που επηρεάζει#
Παραδείγματα#
Το κανονικό μοτίβο ποιος-είναι-αυτός-ο-χρήστης, ανθεκτικό σε αποσπασμένες συνεδρίες και αλλαγές UID:
my $login = getlogin || getpwuid($<) || "Kilroy";
print "hello, $login\n";
Σκέτη κλήση σε σενάριο προσαρτημένο σε κέλυφος:
my $name = getlogin;
print defined $name && length $name
? "tty owner: $name\n"
: "no controlling tty\n";
Contrast with getpwuid, which answers a different question
«who is the effective user running this code?»:
my $tty_user = getlogin // "";
my $proc_user = getpwuid($<);
print "tty=$tty_user proc=$proc_user\n";
# After `sudo -u bob script.pl`, tty_user is your login,
# proc_user is "bob".
Μέσα σε δαίμονα ή σε cron job δεν υπάρχει ελέγχον τερματικό, οπότε η getlogin δεν έχει τίποτα να αναφέρει:
# running from cron
my $name = getlogin;
# $name is "" or undef; always pair with a getpwuid fallback
Οριακές περιπτώσεις#
Δεν υπάρχει ελέγχον τερματικό: δαίμονες, υπηρεσίες systemd, cron jobs, entrypoints σε container, και οτιδήποτε ξεκινάει χωρίς tty βλέπουν την κενή συμβολοσειρά ή
undef. Αυτή είναι η συνηθισμένη περίπτωση εκτός διαδραστικών κελυφών - παρέχετε πάντα εφεδρεία.sudoκαιsu: ηgetloginεπιστρέφει το αρχικό όνομα σύνδεσης (τον ιδιοκτήτη του tty), όχι τον χρήστη-στόχο. Μετά απόsudo -u bob script.plπαίρνετε το δικό σας login, ενώ ηgetpwuidμε$<επιστρέφειbob. Διαλέξτε αυτό που ταιριάζει στην ερώτηση που πραγματικά κάνετε.Όχι πρωτογενής λειτουργία ταυτοποίησης: η εγγραφή που διαβάζει η
getloginμπορεί να είναι πλαστογραφημένη ή παλιά· μια διεργασία που κληρονομεί tty από άσχετη συνεδρία μπορεί να δει όνομα που δεν έχει καμία σχέση με τα δικά της διαπιστευτήρια. Ποτέ μη φιλτράρετε προνομιακή συμπεριφορά με βάση την τιμή επιστροφής. Χρησιμοποιήστε τηνgetpwuidπάνω στη$</$>αντί γι” αυτό.Κενή συμβολοσειρά έναντι
undef: οι πλατφόρμες διαφέρουν στο ποιο επιστρέφουν όταν δεν υπάρχει εγγραφή. Η εφεδρεία||χειρίζεται και τα δύο· ένας έλεγχος μόνο μεdefinedόχι.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
getpwuid- επιλύει τη$<ή τη$>σε όνομα, και είναι το σωστό δομικό στοιχείο για το «ποιος τρέχει αυτή τη διεργασία;»getpwnam- η αντίστροφη αναζήτηση όταν έχετε ήδη όνομα σύνδεσης και χρειάζεστε την εγγραφή passwdgetpwent- επαναλάβετε ολόκληρη τη βάση δεδομένων passwd όταν χρειάζεστε πάνω από μία εγγραφή$<- real UID· το φυσικό όρισμα προς τηνgetpwuidστο ιδίωμα εφεδρείας τηςgetlogin$>- effective UID· χρησιμοποιήστε αυτό αντί για$<όταν σας ενδιαφέρει η ταυτότητα υπό την οποία θα τρέξουν πραγματικά οι προνομιακές λειτουργίες