如何知道UI点击对应的命令行cmd?

如何知道UI点击对应的命令行cmd?

我可以从 Ubuntu 的 GUI 中单击“电影播放器​​”,但我怎么知道相应的命令行 cmd。我想从命令行运行电影播放器​​。

这不仅与电影播放器​​的后台命令有关,我还想知道当我单击菜单上的某个图标时 x-window shell 运行的所有实际命令。

非常感谢。

答案1

打开控制台并输入

ps --sort 开始时间 x

这应该会为您提供一个活动进程列表,按启动时间排序,最新进程位于底部。例如,我刚刚启动 Firefox 并得到以下信息:

19713 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.3/firefox
19718 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.3/run-mozilla.sh /usr/lib/firefox-3.6.3/firefox-bin
19722 ?        Sl     0:01 /usr/lib/firefox-3.6.3/firefox-bin
19737 pts/2    R+     0:00 ps --sort start_time x

当然ps --sort start_time x永远是最新的过程。

答案2

右键单击图标并选择“属性”。在大多数情况下,这将告诉您与其关联的命令行。

答案3

Ubuntu 的三个主要 GUI 是 Gnome、KDE ​​和 Xfce。这些项目都试图遵循 freedesktop.org 上的免费桌面标准。Xfce 似乎遵循桌面入门标准,它定义了如何处理菜单项等等。

以下说明适用于 Gnome、KDE ​​和 Xfce。

菜单项(也称为“启动器”或“桌面条目”存储在 中)/usr/share/applications

您知道此应用程序称为“电影播放器​​”,因此要找到相应的文件,请执行以下操作:

stefanl@HOST:/usr/share/applications $ grep -i "movie player" *.desktop
totem.desktop:Name=Movie Player

Grep 显示“totem.desktop”包含相应内容。由此,我知道“Movie Player”与“totem”应用程序相关联。

现在,要查看此菜单项执行的命令,请搜索Exec

stefanl@HOST:/usr/share/applications $ grep Exec totem.desktop 
Exec=totem %U

这些 Gnome/KDE/Xfce .desktop 文件的格式在 freedesktop.org 上有进一步描述桌面入门规格。 这桌面输入规范:Exec 键描述密钥的用途%U

URL 列表。每个 URL 都作为单独的参数传递给可执行程序。本地文件可以作为文件:URL 或文件路径传递。

答案4

笔记:这个答案是艺术家的回答。

此命令应显示所有目前正在运行当前用户执行的并且在过去 60 秒内启动的命令:

ps x --sort -start_time -U YOURUSERNAME -o start,command | \
awk '$1>=recently&&$1<=now' \
recently=$(date --date='60 seconds ago' +%T) now=$(date +%T) | sed 1,1d

要使用此命令,请单击图标或菜单项以执行命令,并在刚打开的程序仍在运行时执行上述命令。记得将其替换YOURUSERNAME为您当前用户的用户名。

解释

ps将显示当前正在运行的进程。参数解释ps

  • x:包括未通过终端执行的进程(实际上是tty)。添加-t '?'将显示仅有的与终端无关的进程。
  • --sort -start_time:按进程启动的时间对输出进行排序(降序)
  • -U YOURUSERNAME:更换您的用户名使用您的用户名将仅显示您的用户执行的进程。如果需要,可以删除此限制。
  • -o start,command:在输出中显示两列:进程的启动时间和执行的命令

awk用于仅显示最近执行的进程。awk参数解释:

  • $1>=recently&&$1<=now:将输出限制为过去 60 秒内执行的进程。要更改此时间范围,请修改下一个参数(recently变量赋值)
  • recently=$(date --date='60 seconds ago' +%T):将前面参数中使用的awk变量设置为60秒前的格式(时间格式)。recentlyHH:MM:SSps
  • now=$(date +%T):将awk变量设置now为当前时间(这是为了排除 24 小时前执行的、看起来像是在未来执行的进程)

我添加了sed 1,1d删除第一行输出,因为它将显示当前正在执行的命令,而显示该命令是没有意义的。

记住:对于某些程序,使用ps查找执行了哪个进程的方法无法按预期工作。例如,如果您单击 Firefox 快捷方式但 Firefox 已在运行,则不会创建新进程,也不会更改旧进程的启动时间。但是,这种方法对于许多程序来说确实相当有效。

相关内容