如何以图形方式或其他方式查找应用程序的命令?

deo*_*eox 5 command-line

我经常发现我需要找出执行某个应用程序的命令,例如闹钟应用程序或系统监视器。但是,运行这些命令的许多实际 CLI 命令并不直接显而易见。我通常做的只是去 Ubuntu 软件中心,然后搜索应用程序的“通用名称”,从而找到它的包/命令名称。我想知道是否有更简单或更有效的方法来做到这一点。

我想知道是否有类似于 的命令xprop,单击打开的(图形)应用程序会在终端中输出其命令。换句话说,我对查找应用程序命令的图形方式感兴趣。

例如,如果我运行这样的命令并单击 System Monitor,终端将输出gnome-system-monitor等。谢谢。

附注。如果当前没有解决方案,我将有兴趣使用此功能编写自己的脚本。但是,我只知道基本的 bash。我意识到这可能应该放在一个单独的问题下,但我只是把它扔在那里。

deo*_*eox 0

我编写了这个(相当丑陋的)脚本来查找通过单击它来执行正在运行的应用程序的命令。它用于xprop获取“点击界面”并获取有关所选窗口的信息:

#!/bin/bash

xprop > ./tmp

chk_desk=`grep -c "_NET_WM_DESKTOP_FILE(STRING)" ./tmp` #Checks whether application has a corresponding .desktop file. The '-c' counts the number of matches.

if [ $chk_desk -ne 0 ] ; then
    desk_line=`grep "_NET_WM_DESKTOP_FILE(STRING)" ./tmp` #Extract line containing .desktop path 
    desk_path=${desk_line/"_NET_WM_DESKTOP_FILE(STRING) = "/} #Extract only the .desktop path
    desk_path=${desk_path//\"/} #Removes quotes
    exe_line=`grep "Exec=" $desk_path | head -n1`
    exe=${exe_line/"Exec="/}
else #If .desktop doesn't exist, it uses the PID to find the executable
    pid_line=`grep "_NET_WM_PID(CARDINAL)" ./tmp` 
    pid=${pid_line/"_NET_WM_PID(CARDINAL) = "/}
    exe_path=`readlink -f /proc/$pid/exe`
    exe=${exe_path/\/usr\/bin\//}
fi

echo $exe

rm ./tmp

exit 0
Run Code Online (Sandbox Code Playgroud)

如果您想知道,我不能仅使用 PID 进行匹配,因为为/proc/$pid/exe您提供了“真实”可执行文件或运行该程序的底层服务的路径。因此,如果您在“geogebra”上使用它,脚本将输出 java。或者在 Firefox 中,您将获得 path /usr/lib/firefox/firefox,我认为这是实际的 Firefox 可执行文件存在的位置,这意味着/usr/bin/firefox指向它的点。

虽然 Firefox 不是一个大问题(您可以使用“真正的”可执行文件),但对于基于 java 的应用程序,需要 .desktop 文件来获取运行实际应用程序的命令,而不是空白的 java 会话。

当然,此脚本仅在您使用 X 作为显示服务器时才有效(因为它使用 xprop)。我确信必须有一种方法可以使脚本更清晰,尽管我的主要问题是必须创建许多变量来保存行输出grep和多次替换。