我正在学习编写脚本,我似乎无法找到一种方法来让脚本接受用户名作为命令行参数,然后只为该用户名的帐户信息提供输出。任何人都可以帮助我吗?
答案 0 :(得分:3)
有几个命令行程序可以从/ etc / passwd,/ etc / groups和其他帐户信息中获取信息,例如阅读.plan,.project和.pgpkey
通常,您不希望直接使用/ etc / passwd,因为可能有其他数据库(如NIS +或LDAP)在系统上维护您的帐户信息。
为您提供有关帐户信息的软件:
finger
- 几乎保证会出现在各处,出现在BSD 3.0中
finger是一个网络感知程序,由fingerd(8)守护程序提供远程指法服务。
`pinky - 一个轻量级的手指程序(我认为没有网络支持)是GNU coreutils的一部分
id
- 适用于大多数System V兼容环境(如果我没记错的话?)
who
- 显示登录信息,如果用户通过通话/写入协议接受消息,以及他们是否接受您控制终端上的talk
write
请求,也会显示有关详细信息,请参阅mesg(1)
这是一种快速而肮脏的方式,仅限于本地使用:
#!/bin/bash
user="$1"
awk -F: '/^'$user'/ { print "Login: " $1 " UID: " $3 " GID: " $4 \
" GECOS: " $5 " Home Directory: " $6 " Shel: " $7 }' /etc/passwd
您也可以从用户的主目录访问.plan等。
阅读passwd(5)手册页man 5 passwd
以获取密码结构的详细信息:
答案 1 :(得分:1)
由于您已标记此Linux,Bash和Unix,因此您要查找的信息可能位于/ etc / passwd中。
尝试使用man 5 passwd
获取有关字段的信息。这是操作系统参考用户存储的信息。更深入的信息需要进一步探讨。
一个简单的例子如下:
#!/bin/sh
grep -E "^$1:" /etc/passwd | sed 's/\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\)/Username: \1\nUID: \3\nGID: \4\nComments: \5\nHome: \6\nShell: \7/'
它为我提供了这个示例输出:
% /tmp/username.sh taylor
Username: taylor
UID: 1001
GID: 100
Comments:
Home: /home/taylor
Shell: /bin/zsh
答案 2 :(得分:1)
在Linux上,您可以使用getent passwd
透明地从/etc/nsswitch.conf
中配置的后端(例如本地passwd
文件,NIS,LDAP,...)中检索用户信息。例如:
$ getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash
但是, getent
在某些其他Unix版本上不可用,例如Mac OS X.