linux怎么编写who命令

fiy 其他 31

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    编写”who”命令的关键在于实现以下功能:

    1. 打开文件”/var/run/utmp”,这个文件记录了当前登录到系统的用户信息;
    2. 读取文件内容,并解析每个登录会话的信息;
    3. 将解析后的信息输出给用户。

    以下是使用C语言编写”who”命令的示例代码:

    “`c
    #include
    #include
    #include
    #include
    #include
    #include

    void 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); // 远程主机名
    #endif

    printf(“\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, &current_record, reclen) == reclen) {
    show_info(&current_record);
    }

    close(utmpfd);
    return 0;
    }
    “`

    编写完成后,将以上代码保存为”who.c”文件,然后使用以下命令进行编译和链接:

    “`
    $ gcc -o who who.c
    “`

    编译完成后,通过运行生成的可执行文件”who”即可实现”who”命令的功能:

    “`
    $ ./who
    “`

    运行结果将输出当前登录到系统的用户信息。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    编写一个自定义的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年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    编写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, &current_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(&current_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年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部