<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Вопросы от учителей, кто впервые сталкивается с Линуксом]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=12865</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=12865&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Вопросы от учителей, кто впервые сталкивается с Линуксом».]]></description>
		<lastBuildDate>Sat, 16 Apr 2011 19:15:35 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Вопросы от учителей, кто впервые сталкивается с Линуксом]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=169213#p169213</link>
			<description><![CDATA[<div class="quotebox"><cite>dubin пишет:</cite><blockquote><p>Ну вот, теперь вопрос - как запустить любую программу из консоли?</p></blockquote></div><p>Встречный вопрос, Татьяна Викторовна, а Вы какие программы хотите запустить из консоли?</p><p>Дело в том, что запуск программ из консоли он не сложнее, чем это же делается в Виндовз.</p><p>Только давайте сначала разберемся с понятиями, а то иначе мы так и будем с Вами говорить на разных языках.</p><p>Под консолями понимается те черные экраны, на которые можно переключиться по нажатию комбинации клавиш Ctrl-Alt-F1 ... Ctrl-Alt-F6. Иначе говоря, система предоставляет изначально шесть символьных (текстовых) консолей и одну графическую консоль. Итого всего семь. На седьмую, графическую консоль можно переключиться по нажатию Ctrl-Alt-F7.</p><p>Если быть более точным, то из графической консоли на любую символьную преключаются по Ctr-Alt-Fx, а вот обратно, с символьной консоли на графическую, можно по Ctrl-F7, т.е. клавишу Alt можно не нажимать. Точно так же (по Ctrl-Fх) можно прыгать между символьными консолями. Я же сказал, нажимать Ctrl-Alt-Fx везде -- только лишь потому, что это легче запомнить.</p><p>Далее. Кроме этих семи <em>локальных</em> консоолей, система предоставляет практически неограниченное количество <em>удаленных</em> консолей. Удаленная консоль -- это экран + клавиатура, которые могут находятся в любой точке планеты. Я Вам это как раз и демонстрировал: я подключился к своему рабочему компу с одного из компов в Вашем классе. Еще раз. Таких удаленных подключений может быть очень много.</p><p>Кроме этих семи локальных и неограниченного числа удаленных консолей, система также предоставляет практически неограниченное количество <em>псевдоконсолей</em>, которые всегда существуют только &quot;на теле&quot; графической консоли. Это -- есть псевдотерминалы. Вы их можете запустить через главное меню:</p><p>Приложения / Стандартные / Терминал</p><br /><p>Идем далее. Я думаю, что Вы уже знаете, что существуют два вида программ (на самом деле их более чем два, но об этом потом как-нибудь расскажу): <em>консольные</em> программы и <em>графические</em> программы.</p><p>Из псевдоконсоли (-ей) можно запускать оба типа программ. Если программа консольная, то она будет работать в псевдоконсои. Если программа графическая, то на экране (в графической консоли) откроется еще одно окно -- собственно, окно этой программы.</p><p>В символьных консолях и удаленных символьных консолях можно запускать, как Вы уже догадались, только консольные программы. Графическая программа не заработает, т.к. для ее работы графическая среда -- отсутствует. (Тут мне следует сделать оговорку, что существуют еще и удаленные графические консоли. Но об этом я расскажу намного, на много позже.)</p><br /><p>Итак, переходим к вашему вопросу &quot;Как запустить программу?&quot;</p><p>Программа запускается элементарно -- нужно набрать ее имя и нажать клавишу Enter. Например, я нахожусь в псевдоконсоли и мне нужно запустить графический редактор gedit. Для этого я набираю в командной строке (командная строка -- это часть консоли, но это не весь экран или все окно, как это принято в Виндовз! Уловите разницу в понятиях!)<br /></p><div class="codebox"><pre><code>alex@zhevak:~$ gedit</code></pre></div><p>эту часть строки &quot;alex@zhevak:~$&quot; набирать, разумеется, не надо. На Вашем компе она будет какая-то другая. нужно набрать только слово gedit . К стати, Вы помните про клавишу табуляции?</p><p>После нажатия на Enter, консоль перестанет реагировать на команды, хотя и будет отображать символы нажимемых клавишь, а на экране появится окно редактора.</p><p>После закрытия редактора, управление вновь вернется к консоли. Консоль снова сможет принимать Ваши команды.</p><p>Но если при вызове редактора Вы в конце команды укажите знак амперсенда &amp;, то консоль, породив новы процесс, продолжит слушать команды пользователя. У Вас будет два параллельно работающих процесса: сама консоль и редактор<br /></p><div class="codebox"><pre><code>alex@zhevak:~$ gedit &amp;</code></pre></div><br /><p>Теперь же, что касается программ, которые находятся в текущем директории -- почему они не запускаются так просто, как в Виндовз?</p><p>Во многих операционных системах есть такое понятие как <em>переменные окружения</em>. Это такие переменные, которые определяют как будет выглядеть в символьной консоли подсказка ввода (например, &quot;alex@zhevak:~$&quot;), имя домашнего директория пользователя, название учетной записи, текущая кодировка, имя программы-редактора, который будет использоваться по умолчанию и т.д. Эти переменные, &quot;окружают&quot; каждую программу. Т.е. у каждой программы есть целый блок этих переменных.</p><p>Пока программа лежит на диске в виде исполняемого файла -- это просто файл. Но если мы попытаемся запустить программу, то система снабжает ее этим блоком переменных.</p><p>Переменных окружения очень много. Среди этих переменных окружения есть переменная -- PATH. В этой переменной перечислены пути, где система будет искать заданную в консоли команду или программу.</p><p>Например, мы набрали команду gedit... Что такое gedit? gedit -- это исполняемый файл. Я сказала -- файл. Отлично! Значит он существует, значит он где-то находится. Вопрос -- где? В файловой системе тысячи директориев. Где его искать? Если искать по всем-всем директориям, то мы потеряем не только время, но и вообще интерес к такой операционной системе.</p><p>Так вот, в переменной PATH указываются пути, где система может поискать заданный файл. И в случае успеха, система может создать процесс, снабдить его своим блоком переменных и передать ему (процессу) управление.</p><p>Давайте посмотрим, что у нас записано в переменной PATH. Делается это с помощью команды echo. Вот, что получилось у меня на компе:<br /></p><div class="codebox"><pre><code>alex@zhevak:~$ echo $PATH
/home/alex/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin</code></pre></div><p>Моя переменная описывает несколько путей, они разделяются знаком двоеточия (:). В Виндовсе пути разделяются знаком точка с запятой (;).</p><p>(Меня это по началу несколько коробило, но потом я понял, что это не имеет принципиального значения --чем разделять, хоть запятыми. Другое дело, что символ двоеточия в Виндовз занят для отделения имени диска от названия папок. Хотя я ушел в сторону от темы.)</p><p>Вот пути в моей переменной, каждый путь я написал в отдельной строчке:<br />/home/alex/bin<br />/usr/local/sbin<br />/usr/local/bin<br />/usr/sbin<br />/usr/bin<br />/sbin<br />/bin</p><p>Это значит, что когда я набираю gedit и нажимаю клавишу Enter, то система начинает поиски файла сначала в директории /home/alex/bin. Не найдя его там, система переходит к поиску в директории /usr/local/sbin. И так далее, пока не найдет указанный файл или не закончатся пути в переменной PATH. Во втором случае чичтема сообщит, что она не смогла найти заданную команду.</p><p>А теперь, внимание -- фокус! В системе Виндовз, поиски заданного файла (программы) начинаются с текущего директория. Если в нем нет файла, Виндовз переходит к поиску в директориях, которые казаны в переменной PATH. Линукс не делает немного по другому. Линукс вообще не ищет файл в текущем директории. Ни до, ни после поисков по путям из PATH.</p><p>Конечно, Линукс можно &quot;подогнать&quot; под Венду и сделать из него такое же дырявое ведро, но спрашивается -- зачем? А делается это очень просто. Нужно просто указать, что бы Линукс начал поиски с текущего директория. Помните, как обозначается в файловой системе текущий директорий?</p><p>Две точки (..) -- родительский директорий, одна точка (.) -- текущий. Значит, для того что бы сломать Линукс и сделать из него Венду, нам нужно в переменной PATH указать путь -- . (точка).</p><p>Т.е. моя переменная будет выглядеть так<br /></p><div class="codebox"><pre><code>.:/home/alex/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin</code></pre></div><p>Но это, я еще раз подчеркну, -- не UNIX-way. Это плохая идея.</p><p>Чтобы осознанно запускать программы из текущего директория нужно всего лишь предварять имя файла названием текущего директория. Вот, как мне нужно написать команду, чтобы запустить программу myprog из текущего директория<br /></p><div class="codebox"><pre><code>./myprog</code></pre></div><p>Всего лишь два символа. Неужели Вы согласны променять их на безопасность?</p>]]></description>
			<author><![CDATA[null@example.com (zhevak)]]></author>
			<pubDate>Sat, 16 Apr 2011 19:15:35 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=169213#p169213</guid>
		</item>
	</channel>
</rss>
