motd:是英文缩写message of the day 。译文是:每日提示信息,问候报文。那你为什么要用MOTD?其实目的很简单,是提示进入系统的用户注意事项,或提示系统运行的概要信息让用户更好的了解系统。在Linux系统要实现自己的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
1 $ env | grep TERM 2 $ set | grep TERM //或用set
<ESC>[{attr};{fg};{bg}m
格式描述:
-
-
- 35 Magenta :紫红色
-
4.{bg} :表示背景色
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
用户登录时相关bash配置文件:
1)全局配置文件:
-
-
- /etc/profile
- /etc/profile.d/*.sh
- /etc/bashrc
-
-
-
- ~/.bsah_profile
- ~/.bashrc
-
交互式登录时这些bash配置文件及/etc/motd加载顺序,如图:
1 如图在centos linux 7中linux用户登录加载过程: 2 /etc/motd --> /etc/profile.d/*.sh -->/etc/profile -->/etc/bashrc --> ~/.bashrc --> ~/.bash_profile
因为/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脚本。
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
来源:博客园
作者:gageshen
链接:https://www.cnblogs.com/gageshen/p/11565980.html