А была ли жизнь до консоли?

А была ли жизнь до консоли?

Давным-давно не было персональных компьютеров. А были большие машины, на которых работали одновременно десятки людей. У каждой машины были терминалы, которые ставились на тогда еще 25-пиновые COM-порты. Передача данных через такой порт была крайне медленной, а потому о графической среде просто не знали. Как не знали о манипуляторе «мышь». На каждого пользователя был один текстовой дисплей и одна клавиатура. Часто пользователи находились в разных концах страны. Но как-то работать все-таки было надо, и для этого были созданы правила:
  1. Каждый пользователь, независимо от своего родного языка, географического местоположения и ширины канала связи, должен иметь все (ну или почти все) возможности, которые предоставляет компьютер.
  2. Каждый пользователь должен тратить минимальное время на выяснение где находится и как называется та или иная программа. При этом у него не должно возникать необходимости общения с другими пользователями.
  3. Каждый пользователь не должен иметь возможность совершения противоправных действий.
  4. Админ (здесь он называется root) это тоже пользователь, а потому все вышеперечисленное относится и к нему, т.е. он должен иметь возможность для любого конфигурирования компьютера из любой точки земного шара(понятно, при наличии в этой точке доступа к сети) на практически любом канале связи.
«И стала консоль…» Пожалуй, этими словами можно начинать любую книгу о UNIX, ведь идеологически UNIX и консоль неразделимы. А что можно сделать с любой консоли? Прочесть, удалить и запустить файл или директорию. Вот из этого минимума и складывается практически вся работа. Но столь небольшое количество возможностей легко позволяет выполнить все требования.
Итак, самое главное, что должен знать любой человек при начале работы с UNIX (или его клоном), это организация его файловой системы. Она строится независимо от любых физических устройств, как-то винчестеров, сменных дисков, сетевых устройств и др. В ней все представляется файлами и каталогами. И все файлы и каталоги лежат на своих местах. В Linux (в других клонах это может незначительно различаться, но здесь и далее я буду давать примеры только из Linux) есть корневой каталог, который обозначается /. В нем расположены каталоги первого уровня.
    /bin — каталог исполняемых файлов и ярлыков к ним /sbin — то же самое, только исполнять эти файлы имеет право только root /root — домашний каталог root'а /home — там расположены домашние каталоги других пользователей /boot — каталог в котором расположены файлы, необходимые для загрузки /mnt — каталог подмонтированных устройств (об этом позже) /usr — второй уровень иерархии /tmp — всякий мусор /lib — разделяемые библиотеки /var — изменяемые переменные (всякий мусор, только в отличие от /tmp, принадлежащий root'у)
Набор системных директорий:
    /dev — директория устройств /proc — директория файловой системы proc /etc — директория для файлов конфигурации
Если вы знаете, что где лежит, то вы можете этим спокойно управлять. Например, моя видеокарта Riva TNT2 находится в директории /dev и называется /dev/nvidia1.


«Стой, кто идет! Моя будет стрелять!»

При входе система задаст вам несколько вопросов. Будьте внимательны, от ответов на них зависит ваша дальнейшая судьба. Вот эти вопросы
login:
password:
Чтобы бесконечно долго не пытаться отгадать правильные ответы, следует попросить подсказки у рута (root'а). Кстати, попытки отгадать правильные ответы для других людей вообще-то противозаконны.
И вы попадаете в систему. Началом является ваш домашний каталог, который называется
/home/name
иногда
/home/group/name
Если вы зашли в графическом режиме, то к вашим услугам рабочий стол X Window (не путать с известным плагиаторским названием). Если нет, то консольное приглашение или shell (названий у нее много, но сейчас популярен bash — Borne Again SHell). Поскольку консоль важнее, то сначала о ней.

Работа в конcольном режиме

Базовый набор команд состоит из:
cd <директория>         Сменить текущую директорию на

                        требуемую, двумя точками обозначается

                        директория нижнего уровня, одной — 

                        текущая

ls <директория>         Просмотреть список файлов, по 

                        умолчанию выбирается текущая

cp <файл> <файл>  Копировать файл

rm <файл>               Удалить файл

mv <файл> <файл>  Переместить файл

mkdir <директория> Создать директорию

pwd Указать текущую директорию
Причем писать название команды до конца не обязательно, достаточно нажать клавишу <Tab> и shell допишет название сам. Если этого не произошло, это означает, что есть более чем одна команда с таким началом. Нажмите <Tab> еще раз и увидите весь этот список. Если дважды нажать <Tab> в начале строки, то увидите список всех команд, правда shell сначала поинтересуется, работать ли ему. Ведь список такой большой, а shell программа ленивая.
Прочтя этот список, многие захотят испытать ту или иную команду. Но не все команды предназначены для простых смертных, и они у вас не запустятся. Те, которые запустятся, могут не заработать, поскольку у них недостаточно информации для работы. Чтобы узнать все требования выбранной команды есть команда man, это сокращение от manual. Из ее названия понятно, что она возвращает описания команды. Наберите man <команда> и получите ответы на все вопросы. Но команда man имеет более широкое применение, нежели простое описание команд, она говорит также и о системных вызовах и многом другом, что может потребоваться уже программисту. Существуют man-страницы и на русском языке, также можно найти практически все man-страницы в интеренете на сайте www.linuxdocs.ru.
Например:
rm -r  Удаление файлов и директорий

rm -f  Удаление без глупых вопросов

Те, кто работал с DOS (я вообще то с ним имел дело всего пару раз), легко привыкнут набирать команды с клавиатуры. Однако разница не только в названиях отдельных команд. Самая главная разница заключается в том, что shell, вообще-то, не всегда интересуется названием вашего текущего каталога. Часто это название приходится ему напоминать. Например, при запуске исполняемого файла. Если просто набрать abvgd, то shell поищет в каталоге /sbin, затем в /bin, затем в /usr/sbin, заглянет в /usr/bin, может еще куда, затем плюнет на это дело и выругается. Надо набрать. /abvgd (обратите внимание на точку перед слэшем).
Другой серьезной разницей являются имена файлов. Здесь различаются строчные и прописные буквы, запрещен пробел, а перед названием директории стоит не обратный слэш \, а прямой /. Здесь также разрешены длинные имена файлов, до 256 символов, и отсутствует ограничение на длину полного имени (это имя файла вместе с именами всех директорий).
Скучающие по Norton Commander могут набрать mc, и, о чудо, увидеть пару голубых панелей. А на них кучу файлов с непонятными атрибутами. Если название файла начинается с точки, то это скрытый файл, то же самое относится и к директориям. Если перед названием стоит *, то файл исполняемый (звездочка не входит в название, это атрибут). После названия файла или директории идут имя владельца, имя группы владельца и атрибуты (это 3 восьмизначные цифры). Атрибуты регулируют права чтения, записи и исполнения и меняются командой chmod <файл> <новые параметры> (это сокращение от change mode). Для директории исполнение означает получение списка ее содержимого, а чтение — открытие. Каждая цифра получается как «чтение“*4+“запись“*2+“исполнение», каждый параметр принимает значение 0 или 1. Первая цифра означает права владельца, вторая его группы, третья — прочие. Атрибут 666 означает права на чтение и запись для всех, но запрет на исполнение. root имеет неограниченные права.
В аргументах большинства команд входящие в название файлов буквы и цифры можно заменять специальными символами — $ (заменитель одного любого символа), * (заменитель любого количества любых символов), {1-3}(заменитель обозначенных символов). Будьте осторожны с употреблением этих символов!
Примечание: несколько лет тому назад на моего научного руководителя (он в тот момент был root'ом) в Университете нашло непонятное забвение, и он в каталоге /mnt кафедрального сервера набрал следующую команду:
rm -rf *
После этого 3 диска стали девственно чистыми. Самым страшным итогом этого происшествия стала гибель архивов порнухи двух групп. А это 17 человек!
Помимо обычных файлов в каталоге могут быть еще и линки (link). Если вам знакомо такое понятие как ярлык (а кому оно сейчас не знакомо), то линк — это обобщение ярлыка. Обобщение это состоит в том, что если ярлыки служат для удобства пользователей, то линки могут использоваться еще и программами. Существует два типа линков — мягкие (soft) и жесткие (hard). Жесткие линки неотличимы самого файла, и любое изменение жесткого линка эквивалентно изменению файла. Нельзя удалить файл, если на него указывает хоть один жесткий линк. Мягкие ссылки больше похожи на ярлыки, поскольку их можно оставлять везде, тогда как для жестких есть ограничения. Жесткий линк получается командой ln <файл>, а мягкий ln -s <файл>. Если файл открыт программой, то это эквивалентно наличию жесткого линка.
Windows — операционная система многозадачная, это означает, что она работает и глючит одновременно. (Когда я набирал предыдущую фразу в Word'е, у него перекосило шрифты.) Для UNIX мультизадачность означает немного другое. Вы можете запустить несколько процессов, переключаться между ними, менять приоритеты, и многое другое. Если процесс не понравится, его можно убить, только надо иметь в виду, что у каждого процесса имеется владелец. И ему могут не понравиться ваши действия. А поскольку простой пользователь может убивать только свои процессы, то всеобщим убийцей является root. Получить список процессов можно командой ps.
Для организации многозадачности в UNIX предусмотрено 2 режима foreground и background. Отличаются они тем, что foreground работает с клавиатурой, в то время как background доступа к ней не имеет. Командами для доступа к этим режимам являются fg и bg с номером процесса. Если у вас открыта только одна консоль (а не 2 или 3), то бэкграундные процессы посылают свой вывод только на нее. Выглядит это жутковато, мало кто способен разобраться в мешанине букв, цифр и других символов. Но есть масса облегчителей (я не придумал это слово, а прочел на банке с соком) работы, например команды < и >. Это команды ввода/вывода в файл. С их помощью вы можете отправить вывод в файл (например, на другую консоль или иное устройство). Команда служит для отправления вывода одного процесса на вход другого. Если после команды стоит символ &, то она автоматически исполняется в бэкграунде.
Для управления процессами также служит команда kill, особенно полезно знать ее версию killall. Применение этой команды root'ом может привести к немедленной перезагрузке. Она посылает системные вызовы процессам, сам вызов определяется ключом, который пишется между командой и номером процесса.
Тупоконечники против остроконечников, зенитчики против спартачей, поклонники Intel против сторонников AMD — это противостояние вечно. Есть оно и среди пользователей Linux. Это вечное противоборство текстовых редакторов vi и emacs. Многие, поработав с Word, удивляются, как можно готовить тексты без графического режима. «Можно!» — отвечают им и те и другие. Это мощнейшие из известных мне текстовых редакторов, во много раз превосходящие Office XP по возможностям. И не просто отвечают, а пишут книги о любимом редакторе, и разгромные статьи о противном. Количество ругани, выплеснутой в этом противостоянии, явно превосходит новомодное выяснение «кто тут производительнее». Редактор emacs имеет собственный язык программирования elisp, умеет работать с TeX, HTML и другими языками подготовки текста. Насчет HTML я не знаю, но ничего лучше для TeX просто не существует. Широко известен (и много лет развивается) макропакет для emacs, который представляет собой личного психотерапевта. Редактор vi не имеет собственного языка программирования, но система его команд способна подключать компиляторы C/C++, Java, FORTRAN, Perl и многое другое, даже с синтаксической подсветкой. Я не могу описать все возможности этих языков, это тема для нескольких отдельных книг, благо они написаны. Недавно появился emacs и для Windows.
Отгремевшая же недавно Великая Броузерная Война никак не задела пользователей Linux. Microsoft не удосужился сделать текстовую версию своего IE с открытыми кодами. А создатели lynx удосужились! Ходить по сети можно и в текстовом режиме. Есть версия для Windows по адресу http://jim.spath.com/lynx_win32/. Или можно посмотреть под виндами, как выглядит паутина для юниксовой консоли, просто зайдя в Библиотеку Мошкова http://lib.ru. А когда зайдете, то помимо художественной и не очень литературы найдете там лучшую подборку книг по UNIX.