Как найти команду приложения, графически или иным образом?

Я часто нахожу, что мне нужно выяснить команду для выполнения определенного приложения, такого как приложение будильника или системный монитор. Однако многие из реальных команд CLI для их запуска не очевидны. Обычно я просто захожу в Ubuntu Software Center, затем ищу «общее имя» приложения и, следовательно, нахожу его имя пакета / команды. Я хотел бы знать, есть ли более легкий или более эффективный способ сделать это.

Мне было интересно, есть ли команда, подобная xprop, где нажатие на открытое (графическое) приложение выведет его команду в терминал. Другими словами, меня интересует графический способ поиска команды приложения.

Например, если я выполню такую ​​команду и нажму на системный монитор, терминал выдаст gnome-system-monitor и т. Д. Спасибо.

PS. Если решение в данный момент недоступно, мне было бы интересно написать собственный скрипт с этой функциональностью. Однако я знаю только базовый bash. Я понимаю, что это, вероятно, должно идти под отдельным вопросом, но я просто выбрасываю его туда.

5
задан 8 March 2013 в 09:39

3 ответа

с использованием UNITY

Dash -> Поиск терминала

Dash -> Дополнительные приложения -> «Просмотреть дополнительные результаты»

Dash -> Дополнительные приложения -> Аксессуары [ 114]

с помощью сочетания клавиш терминала: Ctrl + Alt + T

прочитайте это http://www.ee.surrey.ac.uk/Teaching/Unix/unix1.html

0
ответ дан 8 March 2013 в 09:39

Я написал этот (довольно уродливый) скрипт, чтобы найти команду для запуска запущенного приложения, щелкнув по нему. Он использует 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 дает вам путь к «реальному» исполняемому файлу или базовому сервису, на котором выполняется программа. Так что, если вы используете его, скажем, «геогебра», скрипт выведет вместо этого java. Или в случае с Firefox вы получите путь /usr/lib/firefox/firefox, который, как я полагаю, там, где существует настоящий исполняемый файл firefox, что означает, что /usr/bin/firefox указывает на него.

Хотя Firefox не является большой проблемой (вы можете использовать «настоящий» исполняемый файл), для приложений на основе Java необходим файл .desktop, чтобы получить команду для запуска реального приложения, а не пустой сеанс Java.

Этот скрипт, конечно, будет работать, только если вы используете X в качестве сервера дисплея (так как он использует xprop). Я уверен, что должен быть способ сделать скрипт более чистым, хотя моя главная проблема заключалась в том, чтобы создать много переменных для хранения строковых выходных данных grep и множественных подстановок.

0
ответ дан 8 March 2013 в 09:39

Я знаю, что Вы предпочитаете графический маршрут, но вот мое усилие как ученик материала 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
ответ дан 8 March 2013 в 09:39

Другие вопросы по тегам:

Похожие вопросы: