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)
blank

相关推荐

  • visual studio code使用方法_vscode自定义代码块

    visual studio code使用方法_vscode自定义代码块snippet,也即代码片,指的是能够帮助输入重复代码模式,比如循环或条件语句,的模板。本文即旨于详实地介绍如何在vscode中设置snippet。

  • Java 集合详解

    Java 集合详解Java集合详解1.集合了解集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。集合的长度可变。2.集合层次关系观看上图需要注意一下实线边框的是实现类折线边框的是抽象类点线边框的是接口2.1Collection接口Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产…

  • 文本分类算法之–KNN算法的简介「建议收藏」

    文本分类算法之–KNN算法的简介「建议收藏」1、KNN算法的简介kNN算法就是找到k个最相似的样本,这些样本所在的类,就是当前文档的所属的类。如下图:绿色圆圈表示你想分类的文本,其他是已知类别的样本。图中其他形状和绿色圆圈的距离代表了相似度。如果k=3,就是取3个最相似的文本,那么1个蓝色框,2红色三角被选中,因为红色三角多,则绿色圆圈所属的类就是红色三角所在的类。如果k=5,3个蓝色框和2个红色三角选中,那么就属于蓝色框所

  • 《关于VirtualBox在桥接模式下无法联网 解决方案》

    《关于VirtualBox在桥接模式下无法联网 解决方案》博主遇到了这个问题,百度了大半天还是没有解决到,可能是由于下面链接的文章的标题关键词比较偏,很难精确的定位到此文章,于是博主就决定总结归纳了一下,希望对大家有所帮助。。经过无数次的百度,早已厌倦粘贴党,问牛答马党,错误党,大大的浪费了大家的时间,于是博主开了这篇文章..我们在VBOX上面安装了Linux之后,VBOX默认网络设置是使用NAT模式的,这种方式宿

  • upx脱壳工具_攻防世界simple_unpack_逆向之旅003「建议收藏」

    upx脱壳工具_攻防世界simple_unpack_逆向之旅003「建议收藏」攻防世界simple_unpack_逆向之旅003前言一、使用exeinfoPE查看该文件二、使用upx脱壳2.使用ida打开脱壳处理后的文件总结前言先给出题目的链接:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=0&id=5077&page=1题目说是个加了个壳的二进制文件一、使用exeinfoPE查看该文件如上图所示,检测到了upx的壳。二、使用upx脱壳指

  • JS兼容性处理

    JS兼容性处理

发表回复

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

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