linux怎么编写who命令
-
编写”who”命令的关键在于实现以下功能:
1. 打开文件”/var/run/utmp”,这个文件记录了当前登录到系统的用户信息;
2. 读取文件内容,并解析每个登录会话的信息;
3. 将解析后的信息输出给用户。以下是使用C语言编写”who”命令的示例代码:
“`c
#include
#include
#include
#include
#include
#includevoid show_info(struct utmp *utbufp) {
printf(“%-8.8s”, utbufp->ut_name); // 登录用户名
printf(” “);printf(“%-8.8s”, utbufp->ut_line); // 终端设备名称
printf(” “);time_t login_time = utbufp->ut_time; // 登录时间
printf(“%.12s”, ctime(&login_time) + 4);
printf(” “);#ifdef SHOWHOST
printf(“(%s)”, utbufp->ut_host); // 远程主机名
#endifprintf(“\n”);
}int main() {
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) {
perror(UTMP_FILE);
exit(1);
}while (read(utmpfd, ¤t_record, reclen) == reclen) {
show_info(¤t_record);
}close(utmpfd);
return 0;
}
“`编写完成后,将以上代码保存为”who.c”文件,然后使用以下命令进行编译和链接:
“`
$ gcc -o who who.c
“`编译完成后,通过运行生成的可执行文件”who”即可实现”who”命令的功能:
“`
$ ./who
“`运行结果将输出当前登录到系统的用户信息。
2年前 -
编写一个自定义的who命令可以通过以下步骤来完成:
1. 创建一个新的bash脚本文件。你可以使用任何文本编辑器,如vim或nano。将文件命名为who.sh。
2. 在脚本文件的开头添加#!/bin/bash,以指定脚本将在Bash shell中运行。
3. 在脚本中使用whoami命令获取当前登录用户的用户名,并将其存储在变量中。例如:
“`
current_user=$(whoami)
“`4. 使用w命令获取当前活动用户列表,并将其存储在变量中。例如:
“`
logged_in_users=$(w | awk ‘NR>2 {print $1}’)
“`
这将忽略w输出的前两行,并提取每行的第一个字段(即用户名)。5. 使用echo命令打印出当前登录用户和活动用户列表。例如:
“`
echo “当前用户:$current_user”
echo “当前活动用户:$logged_in_users”
“`6. 保存并关闭脚本文件。
7. 授予脚本文件执行权限。你可以使用chmod命令来完成。例如:
“`
chmod +x who.sh
“`现在,你可以执行该自定义的who命令。在终端中,切换到脚本文件所在的目录,并运行以下命令:
“`
./who.sh
“`脚本将输出当前登录用户和活动用户列表。你可以根据需要自定义输出的格式和内容。
2年前 -
编写Linux的who命令可以使用C语言来实现。下面是一个简单的示例代码,展示了如何编写一个基本的who命令。
“`c
#include
#include
#include
#include#define SHOWHOST
int main() {
struct utmp current_record;
int utmpfd, reclen = sizeof(current_record);if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) {
perror(UTMP_FILE);
exit(1);
}while (read(utmpfd, ¤t_record, reclen) == reclen) {
if (current_record.ut_type == USER_PROCESS) {
printf(“%-8.8s”, current_record.ut_name);
printf(” “);
printf(“%-8.8s”, current_record.ut_line);
printf(” “);
printf(“%12.12s”, ctime(¤t_record.ut_time) + 4);
printf(” “);
#ifdef SHOWHOST
printf(“(%s)”, current_record.ut_host);
#endif
printf(“\n”);
}
}
close(utmpfd);
return 0;
}
“`这段代码实际上是从utmp文件中读取用户登录信息,并将结果输出到控制台。在Linux系统中,utmp文件包含有关当前和过去登录的用户的信息。该文件通常位于`/var/run/utmp`或`/var/log/wtmp`中。
要编译这个代码,可以使用以下命令:
“`bash
gcc who.c -o who
“`然后运行生成的可执行文件:
“`bash
./who
“`该命令将显示当前登录用户的用户名、登录终端、登录时间和登录主机(如果适用)。
请注意,这只是一个简单的示例代码,可能无法处理所有情况。在实际编写who命令时,您可能需要处理更多的异常情况并添加其他功能。
2年前