Как работает терминал? [закрыто]

Подробнее об этом вопрос . Это такие команды, как ls, cd, rm, ... приложения, если они есть, чем то, как терминал знает, где они находятся, и является ли терминал просто интерфейсом для взаимодействия с программами, это не что иное, как просто программы, просто взаимодействующие друг с другом ? Во-вторых, является ли bash единственным языком, который будет работать в терминале, если это просто программы, просто взаимодействующие друг с другом?

1
задан 13 April 2017 в 15:24

5 ответов

Терминал может использоваться для выполнения программ в данном ПУТИ - можно найти его путем выполнения echo $PATH в ударе teminal - вывод в качестве примера:

/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/wilf/.local/bin:/home/wilf/bin:/usr/games

Это установлено, когда терминал запускается - когда это использование с помощью оболочки Bash (значение по умолчанию в большом количестве систем Linux) , он проверяет ~/.bashrc перед запуском. Затем при выполнении команды она ищет путь команду и выполняется, если она находит его.

С моим примером $PATH выше, я могу поместить исполняемый сценарий в /home/wilf/.local/bin (например, extension-update от сюда ) и затем смочь выполнить его терминальный, не указывая полный путь к исполняемому файлу (например, /home/wilf/.local/bin/extension-update, /usr/bin/firefox, и т.д.)

6
ответ дан 13 April 2017 в 15:24

Терминал

Терминал является интерфейсом, в котором можно ввести и выполнить основанные на тексте команды. Это может быть намного быстрее для завершения некоторых задач с помощью Терминала, чем с графическими приложениями и меню. Другое преимущество предоставляет доступ к значительно большему количеству команд и сценариев.

задача общего терминала А устанавливания приложения может быть достигнута в рамках единственной команды, по сравнению с навигацией через Центр программного обеспечения, например.

См. это сообщение для получения дополнительной информации.

0
ответ дан 13 April 2017 в 15:24

выполнение "PS-ef" Вы видите весь процесс, включая терминальный процесс:

tthtlc    2964     1  0 08:31 ?        00:00:02 gnome-terminal

просто один только "PS", Вы видите свой собственный терминал только:

 PID TTY          TIME CMD
 2974 pts/0    00:00:00 bash
 6420 pts/0    00:00:00 ps

См. "pts/0"? Перейдите к/dev/pts:

ls -al
total 0
drwxr-xr-x  2 root   root       0 Jun 14 08:31 .
drwxr-xr-x 18 root   root    4420 Jun 14 08:31 ..
crw--w----  1 tthtlc tty  136,  0 Jun 14 09:03 0
crw--w----  1 tthtlc tty  136,  1 Jun 14 09:02 1
crw--w----  1 tthtlc tty  136,  2 Jun 14 09:02 2
crw--w----  1 tthtlc tty  136,  3 Jun 14 09:02 3
crw--w----  1 root   tty  136,  6 Jun 14 08:31 6
crw--w----  1 root   tty  136,  8 Jun 14 08:31 8
c---------  1 root   root   5,  2 Jun 14 08:31 ptmx

Здесь Вы видите, что я имею 0, 1, 2 ==> 3 созданные терминала. "терминал гнома" реализован как процесс, которые открывают stdin, stdout, и stderr на том же устройстве посимвольного ввода-вывода, как упомянуто выше. Во-первых, заметьте pid 2974 для "удара" выше? Перейдите к/proc/2974/fd для наблюдения всего открытого дескриптора файла:

/proc/2974/fd>ls -al
total 0
dr-x------ 2 tthtlc tthtlc  0 Jun 14 09:30 .
dr-xr-xr-x 8 tthtlc tthtlc  0 Jun 14 09:30 ..
lr-x------ 1 tthtlc tthtlc 64 Jun 14 09:30 0 -> /dev/pts/2
l-wx------ 1 tthtlc tthtlc 64 Jun 14 09:30 1 -> /dev/pts/2
l-wx------ 1 tthtlc tthtlc 64 Jun 14 09:30 2 -> /dev/pts/2
lrwx------ 1 tthtlc tthtlc 64 Jun 14 09:55 255 -> /dev/pts/2

Так, чтобы средство весь input/output/stderr для удара прибыло из/dev/pts драйверов устройств.

при открытии нескольких терминал гнома, и в зависимости от которого является приоритетным процессом, фактическая клавиатура будет перенаправлена к тому соответствующему процессу. т.е., если Вы делаете" strace -p <pid>", где <pid> процесс 2974 в настоящее время, в первый раз, когда Вы вводите символ в тот терминал, Вы будете сразу видеть чтение () - ниже я ввожу несколько "f":

read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1

Так, чтобы был то, как терминал работал в целом: чтение символа символом и вывода символа символами одновременно (называют "повторение") на экран одновременно. Несколько, которых терминал может выполнять одновременно, но только один будет получать прямой ввод с клавиатуры, другие, заблокируют при чтении () API.

0
ответ дан 13 April 2017 в 15:24

Терминал открывается в межпреторе оболочки по умолчанию, определенном в/etc/passwd./etc/shells, файл определяет других межпреторов оболочки, доступных с Вашим дистрибутивом Ubuntu, существуют некоторые другие zsh для одного. Оболочка может выполнить программы других языков программирования, но редко используется в качестве фактического языка программирования как C++, Python, рубин и так далее.

оболочки действительно обеспечивают доступ к встроенным командам, сценариям и приложениям и выполнят много различных программ, записанных на других языках программирования, а также, обеспечивая доступ ко многим встроенным командам, доступным в Linux, если соответствующие зависимости от языка доступны в Вашей установке.

Оболочки главным образом подобны с некоторыми различиями в командах и синтаксисе, но удар является значением по умолчанию и большинством сценариев оболочки, которые легко доступны, записаны в синтаксисе удара.

Другие оболочки, sh=Bourne оболочка, bash=Boure снова окружают, pdksh=public доменная оболочка Korn, zsh=z оболочка, csh=c оболочка, ksh=korn оболочка и несколько других. Каждый имеющий их собственную разновидность синтаксиса и команд, завершения, расширения. Но у всех есть одна общая черта, их первичная функция состоит в том, чтобы предоставить доступ к управлению, управлению, контролю и общему администрированию Linux и Ubuntu.

0
ответ дан 13 April 2017 в 15:24

Я думаю, что большинству вещей отвечают. Я просто хочу добавить.

можно запустить любое приложение от терминала. Даже нетерминальное (Приложение Как Chrome / Firefox) будет работать от терминала.

Для запуска любого приложения пользователь должен знать путь к файлу того приложения и назвать приложение с помощью того расположения файла. например

  /bin/ls 

, но для пользовательского удобства, ПУТЬ определяется. и приложение от тех путей можно назвать, не называя полный путь. вот почему можно выполнить эти команды:

ls 
cat a_simple_text_file.txt
firefox    ## this is the same as double clicking the firefox icon in your desktop

можно записать собственный сценарий оболочки и выполнить его на терминале. И можно записать программу, с помощью любого языка программирования (C, C++, Python, Java, Objective C, PHP), это может быть выполнено в терминале. каждый язык программирования имеет свой собственный способ показать вывод и взять вход и выполнение здания это сам.

" просто программы, просто взаимодействующие друг с другом. "

технически, программы не взаимодействуют друг с другом. вся программа запрашивает ОС, ОС взаимодействуют со всеми. (ОС означает Операционную систему, Ubuntu / Windows / OSX и т.д.)

, Например. Вы хотите загрузить файл с помощью Firefox. когда Вы нажимаете кнопку загрузки на сайте. Firefox будет требуемый к ОС на приложение файлового менеджера. Файловый менеджер возьмет Ваш выбор и отправит расположение файла в ОС>> Firefox. Firefox загрузит файл путем запроса, чтобы ОС для использовала другие приложения.

Теперь можно сказать, ОС является программой также. Так, программы действительно Взаимодействуют друг с другом!!

0
ответ дан 13 April 2017 в 15:24

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

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