怎么编写Linux的自带的who命令

worktile 其他 17

回复

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

    编写Linux自带的who命令需要了解如何编写Shell脚本。下面我将为你提供一个编写who命令的示例:

    “`shell
    #!/bin/bash
    # 获取当前登录系统的用户信息

    # 使用who命令获取当前登录用户信息,并将结果保存到临时文件
    who > /tmp/who_tmp

    # 逐行读取临时文件,提取需要的信息并输出
    cat /tmp/who_tmp | while read line; do
    username=$(echo $line | awk ‘{print $1}’) # 提取用户名
    terminal=$(echo $line | awk ‘{print $2}’) # 提取终端
    login_time=$(echo $line | awk ‘{print $3, $4}’) # 提取登录时间

    echo “用户名: $username”
    echo “终端: $terminal”
    echo “登录时间: $login_time”
    echo “————————”
    done

    # 删除临时文件
    rm /tmp/who_tmp
    “`

    保存以上代码到一个文件(例如:mywho.sh),然后在终端中执行以下命令给予脚本执行权限:

    “`shell
    chmod +x mywho.sh
    “`

    接下来,你可以在终端中运行这个脚本,执行who命令并输出结果。

    “`shell
    ./mywho.sh
    “`

    以上代码实现了一个简单的who命令,它获取当前登录系统的用户信息,并依次输出用户名、终端和登录时间。你可以根据自己的需求进行进一步的修改和扩展。

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

    编写Linux自带的who命令涉及到了系统底层的操作,需要使用C语言进行编写。下面是编写Linux的自带who命令的步骤:

    1. 创建一个新的C文件:首先,使用任意文本编辑器创建一个新的C文件,比如说`mywho.c`。

    2. 引入头文件:在C文件的开头,需要引入一些头文件,它们定义了我们需要使用的各种数据类型和函数。对于who命令,需要引入以下头文件:
    “`c
    #include
    #include
    #include
    #include
    #include
    #include
    “`

    3. 实现主函数:在C文件中定义一个主函数`main()`,它是程序的入口点。主函数可以为空,但在这里我们需要调用一些其他的函数来完成who命令的功能。

    4. 打开utmp文件:utmp文件记录了当前登录到系统的用户信息。我们需要使用`open()`函数来打开utmp文件,并获取一个文件描述符。

    “`c
    int utmp_fd = open(UTMP_FILE, O_RDONLY);
    if(utmp_fd == -1) {
    perror(“open”);
    exit(EXIT_FAILURE);
    }
    “`

    5. 从utmp文件中读取记录:使用`read()`函数从utmp文件中读取记录,并将其存储在utmp结构体中。

    “`c
    struct utmp current_record;
    int record_size = sizeof(current_record);
    while(read(utmp_fd, &current_record, record_size) == record_size) {
    // 对utmp记录进行处理
    }
    “`

    6. 处理utmp记录:对于每个utmp记录,可以从中提取出用户的登录名、登录时间等信息,并输出到屏幕上。

    “`c
    if(current_record.ut_type == USER_PROCESS) {
    printf(“%-8.8s”, current_record.ut_name); // 用户登录名
    printf(” %-8.8s”, current_record.ut_line); // 终端设备名
    printf(” %20.20s”, ctime((time_t*)&current_record.ut_tv.tv_sec)); // 登录时间
    printf(“\n”);
    }
    “`

    7. 关闭utmp文件:当所有的utmp记录都被处理完毕后,使用`close()`函数关闭utmp文件。

    “`c
    if(close(utmp_fd) == -1) {
    perror(“close”);
    exit(EXIT_FAILURE);
    }
    “`

    8. 编译和运行:使用C编译器将C文件编译成可执行文件。

    “`bash
    gcc mywho.c -o mywho
    “`

    然后,运行编译后的可执行文件即可。

    “`bash
    ./mywho
    “`

    通过以上步骤,你就可以实现一个简单的Linux自带的who命令。当然,这只是一个简单的示例,实际的who命令可能还有其他更复杂的功能和参数。要实现完整的who命令,你可能还需要处理一些其他的情况,比如说系统重启时的utmp记录信息等。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    编写Linux自带的who命令需要对Linux系统的用户信息进行查询并展示,下面是编写who命令的方法和操作流程:

    **1. 准备工作**
    编写who命令前,需要了解Linux系统中用户信息的获取和展示方式。Linux系统中的用户信息存储在/etc/passwd文件中,可以使用一些系统调用函数(如getpwent函数)来获取用户的登录名、用户ID、组ID、用户的真实姓名等信息。此外,Linux系统也提供了一些工具函数(如strftime函数)来格式化时间信息。

    **2. 创建who命令文件**
    首先,在Linux系统中选择一个合适的目录创建who命令文件,可以使用touch命令创建一个空的文件:
    “`shell
    touch who.c
    “`

    然后,编辑who.c文件:
    “`shell
    vim who.c
    “`

    **3. 添加头文件和函数原型**
    在who.c文件开头,添加必要的头文件和函数原型:
    “`c
    #include
    #include
    #include
    #include
    #include #include

    void print_user_info(struct passwd* pwd, struct utmp* utmp_entry);
    “`

    **4. 定义函数print_user_info**
    根据用户信息结构体passwd和utmp_entry,定义函数print_user_info来打印用户信息:
    “`c
    void print_user_info(struct passwd* pwd, struct utmp* utmp_entry) {
    char* user_id = itoa(utmp_entry->ut_user);
    char* user_name = pwd->pw_name;
    char* terminal_name = utmp_entry->ut_line;
    char* login_time = ctime((time_t*)&(utmp_entry->ut_tv.tv_sec));
    char* host_name = utmp_entry->ut_host;

    printf(“%-10s %-10s %-15s %-20s %-20s\n”, user_name, user_id, terminal_name, login_time, host_name);
    }
    “`

    **5. 定义main函数**
    在main函数中,调用系统函数获取用户信息和登录信息,并输出结果:
    “`c
    int main(int argc, char* argv[]) {
    struct passwd* pwd;
    struct utmp* utmp_entry;

    // 打开utmp文件
    FILE* utmp_file = fopen(“/var/run/utmp”, “r”);
    if (utmp_file == NULL) {
    perror(“Failed to open /var/run/utmp”);
    exit(EXIT_FAILURE);
    }

    // 遍历utmp文件中的每一个utmp_entry
    while ((utmp_entry = getutent()) != NULL) {
    // 只处理TYPE_USER进程
    if (utmp_entry->ut_type == USER_PROCESS) {
    // 根据utmp_entry中的ut_user字段,获取passwd结构体
    pwd = getpwuid(utmp_entry->ut_user);
    if (pwd == NULL) {
    perror(“Failed to get passwd struct”);
    exit(EXIT_FAILURE);
    }

    // 打印用户信息
    print_user_info(pwd, utmp_entry);
    }
    }

    // 关闭utmp文件
    fclose(utmp_file);

    return EXIT_SUCCESS;
    }
    “`

    **6. 编译和安装who命令**
    编译who.c文件并生成可执行文件:
    “`shell
    gcc who.c -o who
    “`

    将生成的who可执行文件复制到/usr/bin目录下,使其作为系统命令:
    “`shell
    cp who /usr/bin
    “`

    **7. 测试**
    在终端中运行who命令:
    “`shell
    who
    “`

    会输出当前登录系统的用户信息,包括用户名、用户ID、终端名、登录时间和主机名等。

    以上就是编写Linux自带的who命令的方法和操作流程。编写该命令需要一定的系统编程知识和Linux系统的用户信息获取方法。参考该过程,可以编写其他类似的命令或工具。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部