zoukankan      html  css  js  c++  java
  • Linux

    前言

    • 为啥写这篇?因为听 grep、sed 教程的时候有这个命令
    • 栗子
    • 加上工作中,运维给我排查问题的时候也用到了,感觉挺重要,先了解为敬!

    命令作用

    • 显示上次登录用户的列表
    • 这个是在 Linux 下的 last 命令,跟 Mac 下有点不同

    语法格式

    last [options] [<username>...] [<tty>...]

    参数说明

    参数 含义
    -<num> 显示多少行
    -a, --hostlast  last在最后一列中显示主机名
    -d, --dns 将IP号转换回主机名
    -f, --file <file> <读取特定文件而不是 /var/log/wtmp
    -F, --fulltimes  打印完整的登录和注销时间和日期 
    -i, --ip 以数字和点表示法显示ip编号
    -n, --limit <number> 限制要显示的行数
    -R, --nohostname 不显示hostname字段
    -s, --since <time> 显示指定时间以来的行
    -t, --until <time> 显示指定时间之前的行
    -p, --present <time> 显示在指定时间出现的人员
    -w, --fullnames 显示完整的用户名和域名
    -x, --system 显示系统关闭条目和运行级别更改
    -h, --help 帮助
    -V, --version 版本

    查看列表说明

    • 第一列:用户名
    • 第二列:终端位置,pts/0 (伪终端) 意味着从 SSH 或 telnet 的远程连接的用,.tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户
    • 第三列:登录的 IP 或终端名,用户通过本地终端连接则显示空,除了重启活动,内核版本会显示在状态中
    • 第四列:登录开始时间
    • 第五列:结束时间
    • 第六列:持续时间,still logged in 表示仍然在线

    显示5行,将 host 放在最后一列,打印完整的时间日期,并将 ip 转成主机名

    last -5 -a -d -F

    可以看到不加 -F,时间一列的区别 

    不显示 hostname

    last -R

    显示5行,显示完整的用户名和主机名,并只显示从 2021-06-04 17:33:00 开始到现在的信息

    last -5 -w -s 202106041733300

    显示5行,并只显示在 2021-06-06 00:00:00 之前的信息

    last -5 -t 20210606000000

    last 命令的数据源

    执行 last 命令时,默认读取  /var/log/wtmp  文件

    • 它是一个二进制文件,记录每个用户的登录系统次数和持续时间、注销、系统重启、停机等事件
    • 它是永久记录这些信息的,系统运行时间增加,文件也会越来越大
    • 因为它本身是一个二进制文件,所以无法直接 cat 查看,因此诞生了 last 命令来查看

    还有另外一个命令,lastb

    • 它是读取 /var/log/btmp 文件,记录登录系统失败的每个用户
    • 当然,用 last -f 读取这个文件也是一样效果的

     /var/run/utmp 

    • 它比较重要,记录着当前正在登录系统的每个用户
    • 它的数据结构和 /var/log/wtmp 的数据结构一样

     /var/log/lastlog 

    • 记录着每个用户最后登录系统的信息
    • 它的数据结构和 /var/run/utmp 、 /var/log/wtmp 不一样

    last -f /var/log/wtmp

    last -f /var/log/wtmp

    等价于只敲 last

    last -f /var/log/btmp

    last -f /var/log/btmp

    • 和 lastb 查出来用户列表信息是一样的
    • 本地用户直接 ssh 登阿里云
    • 因为阿里云没有 polo 这个用户,所以连不上
    • 然后系统就自动记录 polo 用户登录系统失败了

    last -f /var/run/utmp

    last -f /var/run/utmp 

    当前就一个 root 用户登录,加上一个系统信息

    last -f /var/log/lastlog

    last -f /var/log/lastlog

    直接用 last -f 好像并不会显示信息,应该是因为读取的文件的数据结构不一致的原因

    lastlog

    lastlog

    后面查了下,可以直接用 lastlog 查看  /var/log/lastlog 

    实际工作场景:因为某些用户的链接数太多导致无法再连接,此时需要断开用户已存在的终端链接

    通过 last 找到用户的终端信息,然后用 fuser kill 掉

    last
    fuser -k /dev/pts/0 

    • 这里就踩了个坑,如果直接敲 pts/0 会报错, 因为路径不对,需要加上根路径 /dev/pts/0 
    • 杀掉当前终端链接文件后,我的 ssh 连接就自动退掉了

    重新 ssh 连接服务器,查看之前的登录信息

    fuser 命令详解文章

     https://www.cnblogs.com/poloyy/p/14846179.html

    通过 fuser 批量杀掉同一个用户的终端链接

    fuser -k $(last -w | grep name | awk '{print "/dev/"$2}')

    自己换掉 name

    直接 ps -ef 去删掉

    ps -ef|grep name | awk '{print $2}' | xargs kill -9

      

  • 相关阅读:
    27. Remove Element
    列表变成字典
    1. Two Sum
    CVPR2019:What and How Well You Performed? A Multitask Learning Approach to Action Quality Assessment
    959. Regions Cut By Slashes
    118. Pascal's Triangle
    loj3117 IOI2017 接线 wiring 题解
    题解 NOI2019 序列
    题解 省选联考2020 组合数问题
    题解 Educational Codeforces Round 90 (Rated for Div. 2) (CF1373)
  • 原文地址:https://www.cnblogs.com/poloyy/p/14851710.html
Copyright © 2011-2022 走看看