我经常发现我需要找出执行某个应用程序的命令,例如闹钟应用程序或系统监视器。但是,运行这些应用程序的许多实际 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
答案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
和多个替换。