Я часто нахожу, что мне нужно выяснить команду для выполнения определенного приложения, такого как приложение будильника или системный монитор. Однако многие из реальных команд CLI для их запуска не очевидны. Обычно я просто захожу в Ubuntu Software Center, затем ищу «общее имя» приложения и, следовательно, нахожу его имя пакета / команды. Я хотел бы знать, есть ли более легкий или более эффективный способ сделать это.
Мне было интересно, есть ли команда, подобная xprop
, где нажатие на открытое (графическое) приложение выведет его команду в терминал. Другими словами, меня интересует графический способ поиска команды приложения.
Например, если я выполню такую команду и нажму на системный монитор, терминал выдаст gnome-system-monitor
и т. Д. Спасибо.
PS. Если решение в данный момент недоступно, мне было бы интересно написать собственный скрипт с этой функциональностью. Однако я знаю только базовый bash. Я понимаю, что это, вероятно, должно идти под отдельным вопросом, но я просто выбрасываю его туда.
с использованием UNITY
Dash -> Поиск терминала
Dash -> Дополнительные приложения -> «Просмотреть дополнительные результаты»
Dash -> Дополнительные приложения -> Аксессуары [ 114]
с помощью сочетания клавиш терминала: Ctrl + Alt + T
прочитайте это http://www.ee.surrey.ac.uk/Teaching/Unix/unix1.html
Я написал этот (довольно уродливый) скрипт, чтобы найти команду для запуска запущенного приложения, щелкнув по нему. Он использует 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
и множественных подстановок.
Я знаю, что Вы предпочитаете графический маршрут, но вот мое усилие как ученик материала 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
для соответствующей команды.