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

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

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

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

例如,如果我运行这样的命令并单击系统监视器,终端将输出gnome-system-monitor,等等。谢谢。

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

答案1

我知道您更喜欢图形路线,但这是我作为 CLI 学习者的努力...

使用命令列出名称

grep '^Name=' /usr/share/applications/*.desktop > ~/Desktop/mgtl1.txt && grep -h '^Exec=' /usr/share/applications/*.desktop > ~/Desktop/mgtl2.txt && paste -d':' ~/Desktop/mgtl1.txt ~/Desktop/mgtl2.txt > ~/Desktop/mgtl3.txt && perl -p -i -e 's/\/usr\/share\/applications\///'g ~/Desktop/mgtl3.txt && perl -p -i.bak -e 's/\n/\n\n/'g mgtl3.txt && perl -p -i.bak -e 's/:/\n/'g mgtl3.txt  

将在桌面上创建四个文件,mgtl3.txt部分内容如下所示:

apport-gtk-mime.desktop  
Name=Report a problem...  
Exec=/usr/share/apport/apport-gtk -c %f

audacity.desktop  
Name=Audacity  
Exec=audacity %F

blueman-manager.desktop  
Name=Bluetooth Manager  
Exec=blueman-manager

查找任何软件的命令
启动软件。然后运行

COLUMNS=150 ps -ef > ~/Desktop/out.txt  

检查最后几行以out.txt查找相关命令。

答案2

使用 UNITY

Dash -> 搜索终端

Dash -> 更多应用 ->“查看更多结果”

Dash -> 更多应用 -> 配件

使用终端键盘快捷键:Ctrl + Alt + T

读这个http://www.ee.surrey.ac.uk/Teaching/Unix/unix1.html

答案3

我编写了这个(相当丑陋的)脚本来查找通过单击来执行正在运行的应用程序的命令。它用于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

如果您感到疑惑,我不可能只使用 PID 进行匹配,因为它/proc/$pid/exe会给出“真实”可执行文件的路径,或运行该程序的底层服务的路径。因此,如果您在“geogebra”上使用它,脚本将输出 java。或者在 Firefox 的情况下,您将获得路径/usr/lib/firefox/firefox,我猜想这是实际的 Firefox 可执行文件存在的位置,这意味着/usr/bin/firefox指向它。

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

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

相关内容