如何随时查看Ubuntu登录时显示的详细信息?

当我登录到我的Ubuntu系统时,它显示了这个消息,我该如何随时查看它?我尝试运行`. .bashrc`,但没有起作用。
Welcome to Ubuntu 12.10 LTS (GNU/Linux 3.2.0-24-virtual x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Sat Jul 13 06:16:35 UTC 2013

  System load:  0.55              Processes:           96
  Usage of /:   8.1% of 68.74GB   Users logged in:     0
  Memory usage: 55%               IP address for eth0: 198.xx.xxx.xxx
  Swap usage:   0%                IP address for eth1: xxx.1x0.xx.xxx

  => There is 1 zombie process.

  Graph this data and manage this system at https://landscape.canonical.com/

223 packages can be updated.
134 updates are security updates.

Last login: Mon Jul  8 17:47:05 2013 

真遗憾的是,实际上没有一个标准的命令可以轻松完成这个任务。而且方法变化如此频繁,以至于被接受的答案和替代方法都已经过时了! - nealmcb
10个回答

看起来有所改变。在Ubuntu 16.04中,没有/etc/motd,但你可以使用cat /var/run/motd.dynamic代替。

1我在Ubuntu 14.04中不得不使用这种方法。 - J Smith
17请注意,/var/run/motd.dynamic只是上次运行时的缓存静态输出,在登录时显示。要实际再次查看实时输出,您需要运行生成它的脚本,这些脚本位于/etc/update-motd.d目录中(截至撰写本文时,适用于Ubuntu 16.04.4 LTS)。 - Aaron Wallentine
1从Ubuntu 19.04开始,现在是cat /var/run/motd.dynamic.new - Adam Erickson

正如多次提到的那样,位于/etc/update-motd.d目录下的脚本是在登录时显示典型输出的来源;请参阅update-motd(5)。但是,没有必要重新发明轮子,通过编写自己的脚本来依次运行每个脚本以重新创建所需的功能。相反,可以使用run-parts(8),它专门为此目的提供:
sudo run-parts /etc/update-motd.d

这类似于pam_motd(8) PAM模块的功能,在用户认证后、打开用户登录shell之前以root身份运行。
请注意,run-parts本身不需要特殊权限;然而,update-motd脚本中的一个或多个通常需要这些权限。因此,除非你在root shell中,否则在运行此命令时不要省略sudo,否则可能会出现错误并显示过时的系统信息。
[2022-09-24:为了清晰起见进行了自我编辑。--RichieD]

1这是最好的答案,因为它 a) 更新数据 b) 只运行适当的脚本 c) 打印出结果输出。 - Eddie

你可以随时在想要的时候展示这个信息 -每日一句 - 使用终端中的以下命令:

cat /etc/motd

或者,更好一些:
for i in /etc/update-motd.d/*; do if [ "$i" != "/etc/update-motd.d/98-fsck-at-reboot" ]; then $i; fi; done

如果你想每次打开终端时都看到这条消息,只需将上述行之一插入到~/.bashrc文件的末尾(可以使用gedit ~/.bashrc命令打开该文件)。
引用: /etc/motd是Unix类系统上的一个文件,其中包含一条“每日消息”,用于以比发送电子邮件消息更高效的方式向所有用户发送相同的消息。
了解更多信息:http://en.wikipedia.org/wiki/Motd_(Unix) 相关链接:如何更新/etc/motd?

相同,但错误信息更短(因为/etc/update-motd.d的内容会不时更改): for i in /etc/update-motd.d/*; do $i 2>/dev/null; done - luis_js
4很遗憾,你不能再使用cat /etc/motd命令了,正如其他人所指出的。而且它已经改变了两次。(为什么没有一个标准的命令来做这个呢?唉) - nealmcb

Ubuntu在登录时运行这个:
/usr/bin/landscape-sysinfo

你可以简单地通过终端运行以下命令:
landscape-sysinfo

4有趣。但那只是完整motd的一部分。 - nealmcb

如果您想要刷新并显示motd,请尝试:
run-parts /etc/update-motd.d/

1谢谢你强调这可以在没有sudo的情况下完成。显然,这是在登录时完成的,不需要sudo。:) - nonrectangular
1@nonrectangular:当“在登录时完成”时,上述命令的等效操作是在系统为您打开用户shell之前以root身份运行。run-parts本身不需要root权限;它只是一个方便的工具,用于运行一些分组到一个命名目录中的脚本。然而,其中的脚本可能需要一些特权;通常情况下,50-landscape-sysinfo就是这样一个与本问题相关的情况。因此,我建议使用sudo或者在root shell中运行。但是,如果您不介意看到错误消息或过时的系统信息,那么您可以不必担心这些琐事:没有什么会出错的。 :) - RichieD

你还没有启用静默模式。如果你启用了静默模式登录,之前解决方案中的答案将不起作用。
你可以在/var/run/motd.dynamic/run/motd.dynamic中看到上次以非静默模式登录时生成的motd消息。这两个文件指向相同的inode,意味着它们是硬链接。
如果你没有以静默模式登录,那么一旦登录后,信息就是静态的。如果你是第一个登录系统且有.hushlogin文件的用户,该文件将不会生成。如果有一个没有.hushlogin文件的用户,当你尝试访问时,你将看到过期的内容。
我能想到的最好的方法是通过执行touch ~/.hushlogin来创建一个.hushlogin文件。
编辑你的.bashrc文件,并按照@Radu Rădeanu的指示添加内容。
for i in /etc/update-motd.d/*; do if [ "$i" != "/etc/update-motd.d/98-fsck-at-reboot" ]; then $i; fi; done

所以每当你运行. .bashrc时,你将看到新的消息而不是静态消息。
注意:.bashrc会在所有非登录交互式shell中执行,因此当你通过输入bash打开一个交互式shell时,你将看到这些消息。

看起来这个输出是由位于文件夹/etc/update-motd.d的脚本生成的; 如果你进入那个目录,你可以运行不同信息的各个单独脚本;或者你可以查看脚本的源代码,看它实际运行了哪些命令来获取那些信息,而这些命令似乎会在不同版本中有所变动(使用cat,或者一个文本编辑器,比如nanopicoemacsvim等)。
举个例子:
$ ll /etc/update-motd.d/
total 44
drwxrwxr-x   2 root root 4096 Feb 25 21:27 ./
drwxr-xr-x 110 root root 4096 Feb 25 21:33 ../
-rwxr-xr-x   1 root root 1220 Oct 22  2015 00-header*
-rwxr-xr-x   1 root root 1157 Jun 14  2016 10-help-text*
-rwxr-xr-x   1 root root  334 Jan 12 14:30 51-cloudguest*
-rwxr-xr-x   1 root root   97 May 24  2016 90-updates-available*
-rwxr-xr-x   1 root root  299 Jul 22  2016 91-release-upgrade*
-rwxr-xr-x   1 root root  111 May 11  2017 97-overlayroot*
-rwxr-xr-x   1 root root  142 May 24  2016 98-fsck-at-reboot*
-rwxr-xr-x   1 root root  144 May 24  2016 98-reboot-required*
-rwxrwxr-x   1 root root 1204 Jan 15 19:11 99-one-click*

此信息截至本文撰写时与Ubuntu 16.04.4 LTS版本相符。


我猜这是由PAM管理的,通过/etc/pam.d/login查找motd(每日消息)。
你可以使用cat /etc/motd生成该消息的静态部分。 我没有你展示的动态部分,所以无法帮助你。

亚伦·沃伦丁的答案指引我找到了解决方案。 “看起来输出是由位于文件夹/etc/update-motd.d中的脚本生成的。如果你进入该目录,可以依次运行各个脚本以获取不同的信息。” 在文件夹/etc/update-motd.d中的每个脚本应该按照它们在名称中的数字顺序依次运行,在登录时会执行。作为一个示例,我的脚本如下:
10-header 30-sysinfo  32-site  35-motd  98-autoreboot-warn

你可以分别运行它们来显示它们的数据。例如:
cd /etc/update-motd.d
sudo ./10-header  or  sudo ./30-sysinfo**

你可以像这样一起运行它们:
sudo /etc/update-motd.d/10-header ; sudo /etc/update-motd.d/30-sysinfo ; ... 使用分号(;)符号来连接命令。
但是谁想要把所有的东西都打出来呢,我最后把那个长长的链接命令字符串变成了一个shell脚本。
切换到bin目录:
cd /bin

创建一个文件,我把它叫做"clr",因为我也用它来清屏,你可以随意命名:
sudo touch clr

使您的脚本可执行:
sudo chmod +x clr

我用nano编辑我的,你可以使用你喜欢的编辑器。
sudo nano clr

然后,将之前的长命令字符串添加到您的文件中,记得使用您自己的 motd 文件,而不是我的,因为它们会有所不同:
清除;sudo /etc/update-motd.d/10-header;sudo /etc/update-motd.d/30-sysinfo;sudo /etc/update-motd.d/;sudo /etc/update-motd.d/32-site;sudo /etc/update-motd.d/35-motd;sudo /etc/update-motd.d/98-autoreboot-warn
保存并在需要时运行它,以查看最新更新的 motd。请注意,我在我的命令中添加了 "clear;",这样当我键入 "clr" 时,它将清除我的屏幕并显示更新的统计信息。
我想这就是我能提供的全部内容,希望对某人有所帮助。

你可以运行landscape-sysinfo来获取系统信息。
/usr/lib/update-notifier/update-motd-updates-available

有关数据包的信息。

显然,这只适用于已安装了Landscape的用户。这是一款商业工具(对于那些不知道的人来说并非免费)。 - aenw
我收到了两个错误消息:find: ‘/var/lib/apt/lists/partial’: Permission deniedmktemp: failed to create file via template ‘/var/lib/update-notifier/tmp.XXXXXXXXXX’: Permission denied - nealmcb