linux编写who命令

不及物动词 其他 107

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    编写Linux的who命令可以通过以下步骤实现:

    1. 创建一个C语言源代码文件,命名为”who.c”
    “`shell
    $ touch who.c
    “`

    2. 打开”who.c”文件,在文件中编写代码实现who命令的功能。下面是一个基本的实现示例:
    “`C
    #include
    #include
    #include

    int main()
    {
    struct utmp *utmp_entry;
    setutent(); // 打开/重新打开utmp文件
    while ((utmp_entry = getutent()) != NULL) // 读取utmp文件中的每一个记录
    {
    if (utmp_entry->ut_type == USER_PROCESS) // 过滤出已登录用户
    {
    printf(“%-8s %-8s %-20s %s”, utmp_entry->ut_user, utmp_entry->ut_line, utmp_entry->ut_host, ctime(&(utmp_entry->ut_tv.tv_sec)));
    }
    }
    endutent(); // 关闭utmp文件
    return 0;
    }
    “`

    3. 保存并退出文件。编译”who.c”文件并生成可执行文件。
    “`shell
    $ gcc who.c -o who
    “`

    4. 将生成的可执行文件移动到系统可执行文件目录中。
    “`shell
    $ sudo mv who /usr/bin/
    “`

    现在,你可以在终端中运行”who”命令来查看已登录到系统的用户信息了。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    编写 Linux 的 who 命令是一个相对简单的任务,下面是一个基本的实现示例:

    “`bash
    #!/bin/bash

    # 获取当前所有登录用户的信息
    who | awk ‘{print “User:”, $1, “Terminal:”, $2, “Login time:”, $3, $4}’

    # 获取当前登录用户数量
    users=$(who | wc -l)
    echo “Total users logged in: $users”
    “`

    上面的代码使用了 `who` 命令输出所有登录用户的信息,并使用 `awk` 命令对输出进行格式化。脚本还计算了当前登录用户的数量,并将结果输出。

    接下来,我们来解释代码的几个关键点:

    1. `#!/bin/bash` 是脚本文件的 shebang 行,用于指定此脚本要使用的解释器。

    2. `who` 命令用于获取登录用户的信息。

    3. `awk ‘{print “User:”, $1, “Terminal:”, $2, “Login time:”, $3, $4}’` 使用 `awk` 命令对 `who` 命令的输出进行格式化。`awk` 命令将输出的每行拆分为列,通过 `$1`、`$2`、`$3`、`$4` 分别表示第一列、第二列、第三列和第四列的内容。然后使用 `print` 命令打印格式化后的信息。

    4. `users=$(who | wc -l)` 使用命令替换将 `who | wc -l` 的输出结果赋值给变量 `users`。`who | wc -l` 用于统计登录用户的数量。

    5. `echo “Total users logged in: $users”` 打印当前登录用户的数量。

    这只是一个简单的实现示例,你可以根据需求对代码进行修改和扩展。例如,你可以添加更多的信息,如 IP 地址、登录状态等,或是使用其他命令来获取数据。

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

    要编写`who`命令,需要了解`Linux`系统中的用户和登录信息。`who`命令用于显示当前登录到系统的用户信息,包括用户名、终端、登录时间等。

    编写`who`命令的大致步骤如下:

    1. 解析命令行参数
    2. 打开系统登录记录文件(通常为`/var/run/utmp`)
    3. 读取登录记录文件中的数据,并解析出相关信息
    4. 格式化并显示用户信息
    5. 关闭文件,释放资源

    下面是详细的实现步骤:

    ## 1. 解析命令行参数

    首先,需要编写代码来解析命令行参数,例如处理`-a`或`–all`等选项参数。这些选项用于显示所有用户的登录信息。

    ## 2. 打开系统登录记录文件

    登录记录文件通常存储在`/var/run/utmp`或`/var/log/wtmp`中。使用`open`函数打开该文件,并检查是否成功。

    “`c
    int fd = open(“/var/run/utmp”, O_RDONLY);
    if (fd == -1) {
    perror(“open”);
    exit(EXIT_FAILURE);
    }
    “`

    ## 3. 读取登录记录文件

    使用`read`函数从文件中读取数据,并将其存储在合适的数据结构中。登录记录文件中的每个记录都包含一个`struct utmp`结构,定义在``头文件中。可以循环读取记录,并将其存储在一个数组或链表中。

    “`c
    struct utmp buffer;
    while (read(fd, &buffer, sizeof(buffer)) == sizeof(buffer)) {
    // 处理数据
    }
    “`

    ## 4. 解析用户信息

    登录记录文件中的每个记录都包含有关用户和登录终端的信息。可以使用`struct utmp`结构体中的字段来获取这些信息,例如`ut_user`(用户名)、`ut_line`(登录终端)、`ut_tv`(登录时间)等。

    “`c
    printf(“%s %s %s\n”, buffer.ut_user, buffer.ut_line, ctime(&buffer.ut_tv.tv_sec));
    “`

    ## 5. 关闭文件和释放资源

    在完成读取和显示数据后,需要关闭登录记录文件并释放资源。

    “`c
    close(fd);
    “`

    以上是一个简单的`who`命令的实现过程。当然,实际的`who`命令还可以包含更多的功能和选项,例如显示用户登录IP地址、登录时长等信息。编写一个完整的`who`命令需要更多的代码和复杂的处理逻辑,但以上步骤应该能够帮助你入门。

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

400-800-1024

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

分享本页
返回顶部