Основы использования командной строки

Прилепляться к конкретной графической оболочке не стоит по следующим причинам:

Для начала, надо ответить на вопрос - в таком случае, что же такое линукс? Из вчерашнего разговора мы знаем, что линукс в первую очередь - сообщество, то, что мы видим - результат работы сообщества, причём эти люди частично между собой сговаривались, а частично каждый это делал для себя. Но эт' не ответ на вопрос. Когда лектор говорит о том, что линукс должен отвечать задачам ОС, о чём он говорит, если всё это являестя пользовательскими приложениями? Тут можно потеоретизировать на тему человек-машинного взаимодействия (см. первые лекции последнего семестра). То есть, есть человек, есть компьютер, человек должен управлять компьютером, и наша задача - не просто научить человека управлять компьютером, а дать ему в руки инструмент для изобретения любого решения. Лектор хочет оставить это место бездоказательным и начать сразу с утверждения. Линукс как ОС, как некий комплекс програмных средств, обеспечивающий унификацию, разделение и разграничение ресурсов для пользовательских программ, базируется на трёх принципах:

Понятно, что задачи могут выходить за рамки этого, но сейчас мы говорим не о пользовательских задачах, а об управлении системой как таковой. Лектор сразу говорит, что подробнее об этом можно прочитать в книжке МК, она почти полностью этому посвящена, там тоже есть далеко не всё, тема обширная и её необязательно всю охватывать разумом, если вы хотите познакомиться с линуксом. Её необязательно всю охватывать разумомесли вы не собираетесь пользоваться машиной больше чем точкой для интернет-браузера, точкой для прослушивания музыки и почтовым клиентом - все пункты есть в меню. А вот если вы пытаетесь линукс изучать, вам опять-таки не следует пытаться охватывать всё это разом, а пользоваться таким алгоитмом: если вы хотите решить задачу, для которой у вас недостаточно инструментов (например, у вас есть микроскоп и надо забить девятнадцать гвоздей), не пытайтесь решить задачу имеющимися инструментами (не пытайтесь все девятнадцать гвоздей забить микроскопом, ну один гвоздь разрешается забить микроскопом - чтобы убедиться, что так делать не надо), а изучите, какой интструментарий предоставляет линукс под это дело, выберите подходящий молоток и дальше получайте своё удовольтвие с молотком. Если убрать все иносказания: если вы чувствуете, что решение задаи неэффективно, это значит,что вы просто не знаете нужного инструмента. Ищите инструмент. У линукса очень богатый инструментарий, и, скорее всего, инструмент для решения вашей задачи тоже есть, только вы его ещё не освоили. В результате окажется, что, честно читая документацию в подобных случаях вы накопили багаж знаний, достаточный для решения всех своих, в том числе довольно изощрённых задач, и вам уже прямая дорога в гуру.

Чуть более формально о том, что такое интерфейс командной строки. Мы все знаем, что есть программа, шелл, интерпретатор командной строки. То есть не просто линукс с вами разговаривает, а при логине запускается много процессов, один из них - специальная прграмма, в задачи которй входит реализация интерфейса командной строки по управлению линуксом. Именно эта программа читает то, что вы вводите с клавиатуры, анализирует, выполняет соответствующие задачи, выводит результаты (свои или других программ) в виде текста. Существует несколько программ, реализующих эту парадигму, не только шелл, но и, например, клиент mysql, python. То есть, идея, что человек сидит за клавиатурой, даёт текстовую команду, эта команда исполняется, результат выводится на экран, она эксплуатировалась много раз с тех пор, как изобрели шелл.

Как выглядит команда, которую вы даёте шеллу: команды вводятся построчно, строка разбивается на слова по принципу: последовательности любых симвлов, подряд идущие и не являющиеся разделителями - это слово, а последовательности разделителей - это не слово, а промежуток между словами. Разделители - это пробел, символ табуляции и символ перевода строки (хотя заставить шелл воспринимать последний как разделитель довольно тяжело: перевод строки - управляющая клавиша, и, нажимая её, шеллу передаётся вся строчка целиком). Итак, строка, которую вы вводите, разбирается на слова, первое слово - команда, остальные слова - параметры этой команды. Надо понять, откуда это взникло. Можно было конечно придумать на каждый случай жизни специадльную команду (нарисовать розовую мышку - одна кманда, нарисовать голубую мышку - другая команда, и так далее). Но понятно, что слова быстро кончатся и команды станут выглядеть совсем ужасно, кроме того, запоминать это будет невозможно. Поэтму при работе с командной строкой осуществляется следующий принцип - команда, которая, по сути говоря, утилита, решает некоторую пользовательскую подзадачу, и все параметры (файлы, нюансы работы) передются в виде следующих слов. Пример - то, что мы видим на экране - это команда script с двумя параметрами. Последнее слово по причине того, что шелл его обработал, не является параметром команды script. Наличие символа > - это перенаправление вывода, это значит, что к тому моменту, когда команда запустится, этой группы символов уже не будет.

#script -t 1.script 2>1.script.time

Здесь - пример того, как люди используют историю как записную книжку. Решётка вначале означает комментарий. Эта команда не выполнилась. Но она сохранилась в истории.

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

По этому примеру видно ещё одно: среди параметров есть параметры двух видов: ключи и содержательные параметры. Содержательные параметры - имена объектов, строки, какая-то информация, которая может быть разной. Ключи - специального вида параметры, они обычно начинаются на -, наличие которых в командной строке означает, что команда будет выполняться примерно также, но с некоторыми нюансами. Например, -t заставляет команду script выводить время, а 1.script - содержательный параметр - имя файла, с которым команда будет работать.

Во всей этой замечательной нашей речи мы опустили одно: что же делает команда script. Она протоколирует все действия, то есть откладывает в файл и команды, которые мы выводим, и результат, который мы получаем. Нужна для того, чтобы писать примеры.

Давайте вместо команды script будем использовать команду ls, которая показывает список файлов в текущем каталоге. В частности, если звёзды сложились удачно (при наличии алиаса и сответствующего терминала), то она будет все объекты цветом выделять. Но это необязательно. Если вызвать /bin/ls, то раскраски не будет.

$ /bin/ls
DirDir  File

Обратите внимание, что если просто выводить названия файлов и каталогов на экран, непонятно, кто из них каталог, а кто файл. Есть ключ -F, который после каталога рисует "/", чтобы мы видели, что это каталог. Вот типичный пример работы ключа, который модифицирует работу программы. Тот параметр, который вы передаёте, никакому объекту не соответствует: это не файл, ни имя; лектор даже затрудняется сказать, что означает буква F. Зато с этим ключом несколько изеняется поведение программы.

$ ls -F
DirDir/  File

Если указать -s, то можно увидеть ещё и размер объектов. Каталог здесь имеет размер 4 блока, а файл 0, потому что он пустой.

$ ls -F -s
итого 4
4 DirDir/  0 File

Для ключей соблюдается(по возможности) принцип аббревиативности - вместо полных назхваний ключей используется одна буква, с ним как-то связанная. С ключом -F эта связь неочевидна (от слова classiFy), а вот -s означает size. Принцип аббревиативности нужен вот зачем: когда вы используете много разных ключей, вам нужно меньше нажимать на клавиатуру. Например, команда ls -F -s и так небольшая, но её можно ещё сократить, поскольку однобуквенные ключи могут прилипать друг к другу: ls -Fs. Мы ставим один общий минус, а дальше перечисляем все однобуквенные ключи. Достинсмтво однобуквенных ключей - их быстро набирать. Недостатков два: во-первых, их надо помнить. Это при том, что заняты и большие, и маленькие буквы. Например, ключ -a (all) показывает все объекты в директории.

$ ls -a
.  ..  DirDir  File  .FileFile

Ключ -A (almost all) выводит почти все объекты, за исключением . и .. которые есть в любом каталоге, и смотреть на них совершенно необязательно.

$ ls -A
DirDir  File  .FileFile

Во-вторых, через некоторое время алфавит заканчивается. Когда ключей много или кни используются редко, то используется полнословная нотация, когда ключи начинаются с двух минусов (тем самым мы не отступаем от правила, что ключи начинаются на минус), и тогда идёт полное название параметра.

$ ls --all
.  ..  DirDir  File  .FileFile
$ ls --almostr-all
DirDir  File  .FileFile

Надо учитиывать, что это соглашения, и они могут не выполняться, то есть никто вам не мешает написать программу, которая не будет работать с ключами. Есть несколько таких программ (dd, ps, tar), они были написаны давно, когда этого соглашения не было.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

20

1

1

1

1

ConstantinYershow, DmitryChistikov, VsevolodKrishchenko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex