Linux 什么脚本将接受用户名作为命令行参数,并且只显示该用户';客户信息?

Linux 什么脚本将接受用户名作为命令行参数,并且只显示该用户';客户信息?,linux,bash,unix,Linux,Bash,Unix,我正在学习编写脚本,但我似乎找不到一种方法让脚本接受用户名作为命令行参数,然后只输出该用户名的帐户信息。有人能帮我吗?因为您已经标记了这个Linux、Bash和Unix,所以您要查找的信息可能在/etc/passwd中 有关字段的信息,请尝试man 5 passwd。这是操作系统存储的有关用户的信息。更深入的信息需要进一步探索 下面是一个简单的例子: #!/bin/sh grep -E "^$1:" /etc/passwd | sed 's/\([^:]*\):\([^:]*\):\([^:]

我正在学习编写脚本,但我似乎找不到一种方法让脚本接受用户名作为命令行参数,然后只输出该用户名的帐户信息。有人能帮我吗?

因为您已经标记了这个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

因为您已经标记了这个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
为什么你不应该这么做 有几个命令行程序可以从/etc/passwd、/etc/groups和其他帐户信息(如reading.plan、.project和.pgpkey)获取信息

通常,您不希望直接使用/etc/passwd,因为可能有其他数据库(如NIS+或LDAP)在系统上维护您的帐户信息

获取有关帐户信息的软件:

finger
——几乎保证无处不在,出现在BSD 3.0中 finger是一个网络感知程序,由fingerd(8)守护进程为远程指法提供服务

`pinky-GNU coreutils的一个轻量级finger程序(我想没有网络支持)

id
–在大多数与System V兼容的环境中可用(如果我没记错的话?)

who
–显示登录信息,还将显示用户是否通过通话/写入协议接受消息,以及他们是否会在您的控制终端上接受通话
写入
请求(有关详细信息,请参阅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)手册页,
man5passwd
了解密码结构的详细信息:

为什么不应该这样做 有几个命令行程序可以从/etc/passwd、/etc/groups和其他帐户信息(如reading.plan、.project和.pgpkey)获取信息

通常,您不希望直接使用/etc/passwd,因为可能有其他数据库(如NIS+或LDAP)在系统上维护您的帐户信息

获取有关帐户信息的软件:

finger
——几乎保证无处不在,出现在BSD 3.0中 finger是一个网络感知程序,由fingerd(8)守护进程为远程指法提供服务

`pinky-GNU coreutils的一个轻量级finger程序(我想没有网络支持)

id
–在大多数与System V兼容的环境中可用(如果我没记错的话?)

who
–显示登录信息,还将显示用户是否通过通话/写入协议接受消息,以及他们是否会在您的控制终端上接受通话
写入
请求(有关详细信息,请参阅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)手册页,
man5passwd
以获取密码结构的详细信息:

在Linux上,您可以使用
getentpasswd
/etc/nsswitch.conf
中配置的后端透明地检索用户信息(例如本地
passwd
文件、NIS、LDAP等)。例如:

$ getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash
$getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash

getent
在其他一些Unix版本上不可用,例如MacOSX。

在Linux上,您可以使用
getent passwd
/etc/nsswitch.conf
中配置的后端透明地检索用户信息(例如本地
passwd
文件、NIS、LDAP等)。例如:

$ getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash
$getent passwd jsmith
jsmith:x:1234:100:John Smith,,,:/home/jsmith:/bin/bash

getent
在其他一些Unix版本上不可用,例如MacOSX。

您所说的“帐户信息”是什么意思?我正在查找用户信息。例如,用户名、他们是谁、主目录、组、磁盘使用情况和上次登录。我已经有了一个脚本,它将提取所有用户的信息,但在输入用户名后不会提取一个特定用户的信息。我不需要其他用户的信息,只需要我输入的信息。其中大部分信息都在/etc/passwd中,可以用grep和sed隔离和提取。磁盘的使用将不得不以更复杂的方式进行。du--max depth=0-h$HOME将适用于主目录(用适当的目录替换$HOME)
last$USER
将用于最后登录,在大多数情况下,这会从
/var/log/wtmp
中提取信息。感谢@Taywee的帮助。我实际上有一个脚本可以做到这一点,但它会提取所有用户的信息。我试图修改脚本,让它询问我想要的用户信息,然后只给我那个用户,而不是所有用户。我正在试图弄清楚如何操作脚本,但是非常感谢您的帮助。在处理/etc/passwd:
grep-E“^$USER:”
您所说的“帐户信息”是什么意思?我正在查找用户信息。比如,