Linux中创建自己的MOTD[通俗易懂]

Linux中创建自己的MOTD[通俗易懂]1)什么是MOTDmotd:是英文缩写messageoftheday。译文是:每日提示信息,问候报文。那你为什么要用MOTD?其实目的很简单,是提示进入系统的用户注意事项,或提示系统运行的概

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 1)什么是MOTD

  motd:是英文缩写message of the day 。译文是:每日提示信息,问候报文。那你为什么要用MOTD?其实目的很简单,是提示进入系统的用户注意事项,或提示系统运行的概要信息让用户更好的了解系统。在Linux系统要实现自己的MOTD,首先需要认识/etc/motd文件。

  •   /etc/motd文件是什么?

    在linux世界中“一切皆文件”,/etc/motd也是众多文件之一;那它有什么特别之处?/etc/motd文件作用是:每次系统登陆时,通过终端展示一些消息给登陆用户,如向用户提示欢迎信息,或提示使用系统的注意事项等等信息像公告板一样为所有用户提示信息。然而在/etc/motd文件只能添加静态信息,而如果你想在用户登录时对提供动态的系统信息,如IP地址、系统负载等时,/etc/motd就无能为力了。但在/etc/motd显示静态信息内容时,可以对静态文字增加颜色,以达到对重点信息内容的突出显示。

  此外,作为ssh访问系统用户必须配置/etc/ssh/sshd_config文件。

1 vim  /etc/ssh/sshd_config
2 ……
3 PrintMotd yes           #远程用户登录时是否打印/etc/motd文件信息           
4 ……         

 

2)如何显示静态MOTD

   如果想在用户登陆时显示静态内容信息,只需要修改/etc/motd文件。同时还可在/etc/motd文件中还可以添加颜色及背景色,让原本静态内容更加生动更具提示效果。要想实现上述效果,必须在静态信息内容前加上<ESC>[{attr};{fg};{bg}m 来提示xterm虚拟终端怎样来显示内容。

  •  显示虚拟终端类型
1 $ env | grep TERM
2 $ set | grep TERM              //或用set
  • 提示终端添加颜色及背景的语句格式 
<ESC>[{attr};{fg};{bg}m

  格式描述:
    1.<ESC>  :可以在vim中输入Ctrl+V后再按ESC。

    2.{attr} :表示属性,包括下划线,加粗等属性。 

      • 0     Reset All Attributes (return to normal mode)   :恢复通用模式
      • 1     Bright (usually turns on BOLD)  :加粗
      • 2     Dim
      • 3     Underline  :下划线
      • 5     Blink  
      • 7     Reverse
      • 8     Hidden

     3.{fg} :表示字体颜色

      • 30 Black      :黑色
      • 31 Red        :红色
      • 32 Green     :绿色
      • 33 Yellow     :黄色
      • 34 Blue        :蓝色
      • 35 Magenta :紫红色
      • 36 Cyan       :青色
      • 37 White      :白色

    4.{bg} :表示背景色

      • 40 Black           :黑色
      • 41 Red             :红色
      • 42 Green          :绿色
      • 43 Yellow          :黄色
      • 44 Blue             :蓝色
      • 45 Magenta      :紫红色
      • 46 Cyan            :青色
      • 47 White           :白色

  案例:      

1 [root@ecs-elk  ~]#vim /etc/motd
2 
3 ^[[0;31;40m Welcome to Huawei Cloud Service ^[[0;37;40m
4 
5 
6 [root@ecs-elk  ~]#

 

 

3)如何显示动态MOTD

   静态内容在提示公共信息上有效,但当用户登录系统时更多是需要了解系统运行状态及一些系统信息。自然就需要显示动态的信息内容。比如ip地址、硬盘占用、进程数等。那么怎么来实现上述动态的内容?那么首先看看linux用户登录及加载bash配置文件过程:

  用户登录时相关bash配置文件:

    1)全局配置文件:      

      • /etc/profile
      • /etc/profile.d/*.sh
      • /etc/bashrc

    2)个人配置文件:   

      • ~/.bsah_profile
      • ~/.bashrc

   那么当一个linux用户在交互式登录时这些bash配置文件及/etc/motd加载顺序:  

1 #交互式登录,/etc/motd和shell加载配置文件过程
2 /etc/motd -->/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

  登录式shell加载配置文件过程:如使用su –  tom

1 #如命令: su  - tom
2 #登录式shell加载配置文件过程
3 /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

  非登录式shell加载配置文件过程:如使用 su tom

1 #如命令: su tom
2 #非登录式shell加载配置文件过程
3 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

 

  但在测试用户在交互式登录时bash配置文件及/etc/motd加载顺序,出现如下偏差如图:

Linux中创建自己的MOTD[通俗易懂]

   之后查看相关bash配置文件,发现/etc/profile配置文件文中调用/etc/profile.d/*.sh,而用于验证的echo显示命令位于配置文件末尾。故产生认知错误。

  注:验证时 最好仔细看一下相关配置文件 并将验证的echo命令位于配置文件前面位置。否则会可能带来认知错误。

   

  综述:

    因为/etc/motd只能显示静态内容,所以想要实现MOTD动态信息必须通过上述linux用户登录时相关bash配置文件,并在相关bash配置文件中添加可执行脚本命令来实现动态信息。例如编写一个shell脚本文件,并将该脚本在/etc/profile配置文件中执行。

 1 [root@db57 ~]# vim /usr/src/scripts/system_info.sh
 2 #!/bin/bash
 3   
 4 date=`date "+%F %T"`
 5 head="System's date is: $date"
 6   
 7 kernel=`uname -r`
 8 hostname=`echo $HOSTNAME`
 9 
10 echo
11 echo "++++++++++++++++++++++++++"
12 echo "$head"
13 echo "--------------------------"
14 printf "Kernel :\t%s\n" $kernel
15 printf "HostName:\t%s\n" $hostname
16 
17 [root@db57 ~]#chmod +x /usr/src/scripts/system_info.sh
18 [root@db57 ~]#tail -1 /etc/profile
19 /usr/src/scripts/system_info.sh

 

注1:在实现动态信息中除了使用shell脚本外,也可以使用python脚本。

注2:摘自《Linux服务器安全策略配置-SSH与动态MOTD(一)》 https://yq.aliyun.com/articles/560280

    如果你使用过Debian/Ubuntu分发版,你可能已经发现,Ubuntu默认就已经有一个动态的MOTD信息提示(通过SSH或本地登录时显示系统当前的一些信息)。在RHEL/CentOS中不可能实现像在Debian/Ubuntu中这样的功能,因为RHEL/CentOS并没有提供与之相关的任何脚本。我们可以通过环境变量文件,如/etc/profile、/etc/bashrc等,将需要执行的命令或脚本添加到这些文件末尾,这样当每次用户登陆时,系统就会读取这些文件,执行文件里定义好的脚本。除此之外,也可以结合使用crontab计划任务,将预先准备好的脚本,如系统监控,异常信息收集通过crontab在后台定期执行,并把收集到的信息重定向写到/etc/motd文件中。在用户登录系统时,就可以显示这些系统监控、异常处理信息了。

    在Ubuntu中,提供了一组脚本在目录/etc/update-motd.d/中,在用户登录时,按照脚本名字前缀的数字(00-99)顺序执行,并将这些脚本的输出保存到文件/run/motd.dynamic中,最终用户成功登录后,在登录的屏幕界面中打印出来。

 

 

小结:

/etc/motd文件可实现静态MOTD内容;动态MOTD需通过脚本在linux用户登录的bash配置文件执行,Ubuntu中提供了/etc/update-motd.d/目录来实现动态MOTD。

 

引出问题:

1)xterm虚拟终端,及颜色内容显示

2)linux用户的交互式登录;登录式shell和非登录式shell

3)printf命令

 

 

参考:

http://ju.outofmemory.cn/entry/139743

https://blog.51cto.com/7424593/1922111

https://www.linuxjournal.com/article/8603

https://www.cnblogs.com/justart/p/7688624.html

https://segmentfault.com/a/1190000015684318

https://blog.csdn.net/dreams_deng/article/details/77196444

https://yq.aliyun.com/articles/560280

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168380.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 时序数据库 日志_mysql恢复数据库

    时序数据库 日志_mysql恢复数据库1.基础1.1时序数据的定义什么是时间序列数据(TimeSeriesData,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。对时序数据进行建模的话,会包含三个重要部分,分别是:主体,时间点和测量值。套用这…

  • lambda表达式用法_使用lambda表达式定义函数

    lambda表达式用法_使用lambda表达式定义函数一、Lamabda表达式定义二、Lamabda表达式语法三、C#中Lamabda使用场景四、J

  • Codeblocks中文字体反转[通俗易懂]

    Codeblocks中文字体反转[通俗易懂]codeblocks输入中文字体,出现这样的情况:属于字体的设置问题,将字体栏中的@符号去掉即可。

  • 扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」

    扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)文章目录扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)理论讲解KF和EKF模型对比雅可比矩阵计算计算实例应用实例线性模型CV模型:CA模型非线性模型CTRV模型:CTRV实例(python)smalldemo抛物线demo飞机高度demoC++实例参考文献我们上篇提到的卡尔曼滤波是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布

  • idea注释模版配置(吐血推荐!!!)[通俗易懂]

    idea注释模版配置(吐血推荐!!!)[通俗易懂]idea注释模版配置idea作为越来越多程序员使用的开发工具,平时的代码注释也非常的关键,下面介绍一下类上注释和方法上注释,方便大家的开发配置,同时也为自己以后配置留一份记录(毕竟每次换环境都需要重新配置一遍)1、新建类的时候自动添加类注释(1)按照上图的提示,找到位置1的FileandCodeTemplates(2)选择右侧的Files选项卡,选择位置2的Class(如果需要设置接口和枚举的注释模版,只需要选择Interface和Enum,按照步骤3配置一下就ok了)(3)在

  • 由华为裁员传闻引发的思考:年轻人如何避免中年危机?「建议收藏」

    由华为裁员传闻引发的思考:年轻人如何避免中年危机?「建议收藏」看到这个话题,让我想起来之前在知乎上看到的一句话,找了半天当时的截图,没找到。最后在QQ留言板上找到了:这句话确实是让人细思极恐,时间再也没有童年那么漫长了,变得越来越快。20岁时,你可以没有钱,买不起iphone4送给女朋友。总说莫欺少年穷,是因为你有大把的未来去提高自己,同时提高自己的经济实力。不然的话。30岁时,你舍不得给老婆买iphone8。40岁时,你的妻子就会因为压力迅速苍老,然后你的…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号