Core Developer @ NGINX, Inc.
5,8
рейтинг
14 июля 2010 в 04:03

Администрирование → Основы Linux от основателя Gentoo. Часть 1 (1/4): BASH, основы навигации перевод

Предисловие


Об этом руководстве


Добро пожаловать в первую из четырех частей обучающего руководства по основам Linux, разработанного чтобы подготовить вас к сдаче экзамена Linux Professional Institute 101. В нем вы познакомитесь с bash (стандартной оболочкой командного интерпретатора в Linux), узнаете о большинстве возможностей таких стандартных команд Linux, как ls, cp и mv, разберетесь в инодах, жестких и символьных ссылках, и многом другом. К концу этого руководства у вас сформируется некий фундамент знаний, и вы будете готовы к изучению основ администрирования Linux. К концу всего курса (8 частей), у вас будет достаточно навыков, чтобы стать системным администратором Linux и пройти сертификацию LPIC Level 1 от Linux Professional Institute, если конечно захотите.



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



Тем, кто изучал первую версию этого руководства с целью, отличной от подготовки к экзамену LPI, возможно, что вам не нужно его перечитывать. Однако, тем же, кто планирует сдавать экзамены, стоит обязательно просмотреть данную исправленную версию.



Введение в bash


Оболочка


Если вы уже использовали Linux ранее, то наверняка знаете, что после входа в систему вас приветствует приглашение, которое выглядит примерно так:



$

На практике приглашение, которое вы видите, может немного отличаться. Например, оно может содержать имя хоста, имя текущей рабочей директории, или все вместе. Не зависимо от того, как выглядит ваше приглашение, есть одна несомненная вещь: программа, которая выводит это приглашение, называется оболочка интерпретатора команд (от англ. shell — оболочка, он же командная строка или терминал — прим. пер.), и, вероятнее всего, вашей командной оболочкой будет 'bash'.



А у вас запущен bash?


Вы можете убедиться, что используете bash, набрав:



$ echo $SHELL
/bin/bash


Если строчка выше выдает ошибку, или ответ не соответствует, возможно, что вы запустили другую оболочку. В этом случае большая часть этого руководства все еще будет полезна, но было бы значительно лучше для вас переключиться на bash, ради подготовки к экзамену 101.



О bash


Bash — это акроним от Bourne-again-shell, от англ. «ещё-одна-командная-оболочка-Борна» или «рождённая-вновь-командная оболочка» (тут игра слов Bourne/born — прим. пер.), и является оболочкой по умолчанию для большинства Linux-систем. Задача оболочки получать от вас команды, через которые вы взаимодействуете с Linux-системой. После того, как вы закончили ввод команд, вы можете выйти из оболочки (exit) или закончить сеанс (logout), в этом случае вы увидите приглашение входа в систему.



Кстати, вы также можете выйти из оболочки bash нажав control-D в приглашении.



Использование «cd»


Вы, возможно, уже обнаружили, что пялиться на приглашение bash — не самое впечатляющее занятие в мире. Ну что ж, давайте узнаем как путешествовать по нашей файловой системе. В приглашении введите пожалуйста следующую команду (без $):



$ cd /

Вы только что сообщили bash, что хотите работать в директории /, также известной, как корневая; все директории в системе имеют форму дерева, и / является его вершиной, т.е. корнем (в информатике деревья растут наоборот, корень вверху, а ветки спускаются вниз — прим. пер.). cd устанавливает директорию, в которой вы в данный момент работаете, также известную как «текущая рабочая директория».



Пути


Чтобы узнать текущую рабочую директорию в bash нужно набрать:



$ pwd
/


В примере с cd, аргумент / называется путь. Он сообщает cd куда мы хотим отправиться. В частности, аргумент / это абсолютный путь, что значит, что он задает расположение относительно корня дерева файловой системы.



Абсолютные пути


Ниже несколько из них:



/dev
/usr
/usr/bin
/usr/local/bin


Как можно заметить, у всех абсолютных путей есть одна общая черта, они начинаются с /. Указывая, допустим, /usr/local/bin в качестве аргумента для cd, мы сообщаем, что хотим попасть в / директорию, затем в usr директорию внутри нее, и так далее в local и bin, вниз по дереву. Абсолютные пути всегда отсчитываются начиная от / сперва.



Относительные пути


Другой тип пути называется «относительный путь». bash, cd, и другие команды всегда интерпретируют их относительно текущей директории. Относительные пути НИКОГДА не начинаются с /. Так, если мы сначала переместимся в /usr:



$ cd /usr

То, затем мы можем использовать относительный путь local/bin, чтобы попасть в директорию /usr/local/bin:



$ cd local/bin
$ pwd
/usr/local/bin


Использование ..


Относительные пути могут также содержать одну или более ".." директории. Директория ".." специальная; она указывает на родительскую директорию. Так, продолжая с примера выше:



$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/local


Как видно, наша текущая директория теперь /usr/local. Мы смогли переместиться «назад» на одну директорию относительно текущей, где были до того.



Кроме того, мы также можем использовать ".." в существующем относительном пути, позволяющем нам переместиться в директорию «рядом» с той, в которой находимся:



$ pwd
/usr/local
$ cd ../share
$ pwd
/usr/share


Примеры относительных путей


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



$ cd /bin
$ cd ../usr/share/zoneinfo

$ cd /usr/X11R6/bin
$ cd ../lib/X11

$ cd /usr/bin
$ cd ../bin/../bin


А теперь наберите их и проверьте свои предположения. ;)



Понимание .


Перед тем как мы закончим изучение cd, есть несколько моментов, которые необходимо прояснить. Во-первых, есть еще одна специальная директория ".", которая означает «текущая директория». Хотя она и не используется с командой cd, но часто используется для выполнения программы из текущей директории, как в следующем примере:



$ ./myprog

В данном случае будет запущена исполняемая программа myprog, находящаяся в текущей рабочей директории.



cd и домашняя директория


Если бы мы хотели переместиться в нашу домашнюю директорию, то могли бы набрать:



$ cd

Без каких либо аргументов cd переместит в вашу домашнюю директорию, которая будет /root для суперпользователя, или обычно /home/username (где username — имя пользователя в системе — прим.пер.) для любого другого пользователя. Но, что если мы хотим указать файл в нашей домашней директории? Может быть мы хотим передать путь к файлу в качестве аргумента нашей программе myprog. Если файл расположен в нашей домашней директории, мы можем набрать:



$ ./myprog /home/drobbins/myfile.txt

Однако, использования абсолютного пути вроде этого, не всегда удобно. К счастью, мы можем использовать символ ~ (тильда), чтобы проделать то же самое:



$ ./myprog ~/myfile.txt

Другие домашние директории пользователей


Bash воспримет одиночную ~ как указатель на вашу домашнюю директорию, но вы также можете использовать её для указания на домашние директории других пользователей. Например, если мы хотели сослаться на файл под названием fredsfile.txt в домашней директории пользователя fred, то могли бы набрать:



$ ./myprog ~fred/fredsfile.txt

Продолжение...



Об авторах


Daniel Robbins


Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.



Chris Houser


Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.



Aron Griffis


Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

Перевод: Daniel Robbins, Chris Houser, Aron Griffis
Валентин Бартенев @VBart
карма
257,7
рейтинг 5,8
Core Developer @ NGINX, Inc.
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (50)

  • +14
    DISCLAIMER:
    1) Найденные орфографически и пунктуационные ошибки скидываем переводчику в личку. Так вы убережете и себя от минусов, в случае чего, и не зафлудите комменты.
    2) Посмотрите на время публикации, дайте переводчику выспаться и посмотреть на результат со свежей головы.
    3) Если хабравчане одобрят, по мере наличия минуток свободных, буду переводить и выкладывать дальше, разбивая каждую часть на n кусков. Мне так проще и удобнее.
    4) Учтите, что 3, 3 и 3 — это оценки переводчика за русский, литературу и английский. Последний он познал уже после, исключительно просмотром South Park и Dr. House в оригинале, также всяких киношек, и чтением манов, гайдов, букс и туториалов в огромном количестве, и, разумеется, чатом, скайпом, и прочим с англоговорящими гёлсами, тоже в немалом.
    • 0
      У меня придирка. Это не основы linux, это основы bash.
      • 0
        Баша касается только одна из 4-х частей руководства.
  • +15
    Прицепиться не к чему, всё правильно. Но скуууучно…
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Не понял о «не набранных» путях. Но вот zsh — да! И одновременно «нет», если вы пишите универсальные скрипты (где-то я помню использовал чисто zsh`овые особенности, даже не догадываясь об этом)
  • +2
    А awk и sed будут переведены? а про ФС?
    • +4
      Если публика изволит — без проблем. =)
  • НЛО прилетело и опубликовало эту надпись здесь
    • +7
      Да, тяжелые времена настали. Раньше вон у людей были гугл и яндекс, а потом их всех забанили, и про команду 'cd' они теперь могут узнать только с хабра.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Ну зачем же сразу на ЛОР кормить троллей? :) Можно скачать какую-нибудь Running Linux или спросить у поисковиков «введение в bash».
          Разумеется, ничего плохого в выложенных здесь статьях нет. С другой стороны, мне слабо верится, что для человека, откладывающего знакомство с линуксом до появления соответствующего материала на хабре, что-нибудь изменится.
          • +1
            Я ожидаю, что эти статьи будут полезны в первую очередь множеству пользователей убунты и других дружелюбных дистрибутивов, весь опыт и навык которых, возможно, сводится к использованию графического интерфейса. Причем этот опыт может быть довольно большим и долгим, и они могут считать себя более-менее знакомыми с линуксом… а тут постепенно откроют для себя «новый мир» в своей системе.
          • 0
            Вот даже в контексте данного конкретного отрывка первой части сам не раз видел: пользователи современных графических интерфейсов в дружелюбных дистрибутивах могут запросто не знать о различиях между абсолютными и относительными путями, а также впасть в замешательство при попытки запустить скрипт из текущей директорию, они не знают, что надо писать ./something
            • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Кстати, так и не понял зачем нужны ./ при запуске скрипта, использую по принципе «запомни, так надо»
              • 0
                Попробую объяснить. По сути, большинство команд, которые вы вводите в баше, обычно являются небольшими отдельными программами, утилитками. Да-да, ls, cd, pwd, mv, echo, env, kill и т.д. это все маленькие программки Они могут лежать в папках /bin, /sbin, /usr/bin, /usr/sbin, и еще в некоторых местах. Это задается переменной окружения PATH. Обычно в нее НЕ входит папка ".", поэтому получив команду, баш ищет в заданных папках соответствующую программу и не находит, ему нужно указать явно, что вы хотите выполнить программу из текущей папки. Можно конечно добавлять "." в PATH, но не стоит этого делать, как я полагаю, видимо из соображений безопасности, возможно еще каких-то.
                • +1
                  Можно было чуть проще объяснить «bash ищет команду только в PATH (исключая встроенные команды, которые он вообще не ищет)» :), но всё равно спасибо.

                  Наверное действительно из соображений безопасности — если злоумышленник напишет и как-то кинет в папку пользователю свой вариант ls (да ещё и с примитивной «стелс-технологией», не выводящей сам этот скрипт в его же выводе), то пользователь просто не заметит, что выполняется не системная программа. ls ладно ещё (хотя, например, получить права нормального юзера, а не nobody тоже интересно кому-то может быть), а вот какая-нить команда типа sudo или ssh — можно и рутовые права получить. Потому и требуется прямое указание на папку — покажи, что ты знаешь что хочешь запустить ssh именно из текущей папки (если, скажем, отлаживаешь свой ssh клиент). А к простым файлам (обычно данные) послабление, так они и через path не ищутся и коллизий быть не может (если пользователь хоть чуть-чуть знаком с основами фс)
              • 0
                в отличие от дос/вин в текущем каталоге исполняемый файл не ищется.
                • +1
                  Собственно уже года 3 как интересовало почему :) Но достаточно было произнести слово «безопасность» и сам придумал «опасные» сценарии использования фичи «первым делом ищем в текущем каталоге»
  • +2
    Отличная статья, продолжайте дальше. (-;
    Давно дженту в качестве второй системы собираюсь поставить, но как-то все не решусь, после вашего перевода, видимо, все таки поставлю. (-:
    • 0
      а может стоит funtoo поставить?)
      • 0
        Я бы продолжил список но меня забанят если я скажу название этой ОС.
        • –1
          BolgenOS? (-:
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    + за труды по переводу. Но действительно, пока скучно. В следующий раз кусок побольше выкладывайте сразу.
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Это просто замечательно! Только пожалуйста продолжайте.
  • 0
    начало достойное, ждем продолжения!
  • 0
    Банально, но великих людей интересно почитать :)
  • 0
    Это меня глаза уже подводят, или ссылки на оригинал таки нет?
    • 0
      Это пост-первод. Ссылка на оригинал есть слева от автора топика.
      • 0
        Ясно, спасибо, почитаемсс…
  • +2
    Красный носок убил просто :))
  • 0
    3-ю и 4-ю части, пожалуйста. %)
  • 0
    Самая положительная черта в gentoo — отличная документация. Спасибо за перевод!
  • 0
    Интересно, но по своему опыту знаю, что от большого объема легко устать
    Выложите весь текст слева и разбейте его на абзацы, справа поставьте пустые поля и дайте народу переводить.
    Таким образом общими усилиями будет переведен большой объем.
    И все будут рады
  • +4
    В таких статьях с надеждой ищешь чего-нибудь пока неизвестное.

    Внимательно пробежав по статье и, не обнаружив ничего нового, гордо почесываешь себя по затылку (лбу, пивному животику...) с мыслью «ах, ну да, это ж для начинающих!»

    Но самое ужасное, что иногда находишь! И никому про это не говоришь!

    :)
    • 0
      А я вот про ~username2 не знал...))) правда и с Линуксом я на ты не так долго ) даже еще и не совсем на ты… жду продолжения и всех частей!
      • 0
        Не вы один такой. =) Я вот еще всегда писал cd ~, а можно оказывается просто cd. Ну кто будет читать внимательно ман по такой «простой» команде?!
      • 0
        Еще лет 10 назад, когда про линукс мало что знал, думал, почему это в адресах часто такое:
        someserver.bla-bla/~bob/somepage.htm
        в то время еще часто такие адреса можно было встретить.
    • 0
      Солидарен! :) вот так всегда, вроде как тонну книг прочитано, миллион статей изучено. А вот прочтешь «tutorial» и тут хопа! — а этого я не знал о_О :)
  • +1
    мне кажется должно быть часть 1 из ꙭ
    • 0
      ꙭ — отличный, надо запомнить.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Давно хочу попробовать собрать, не могли бы вы поделиться какой-нибудь стоящей ссылкой на эту тему?
      • 0
        Вроде как основная ссылка: www.linuxfromscratch.org
        • 0
          Не сомневался, что получу именно это. Но всё равно спасибо.
  • 0
    Продолжайте! Очень полезно!
  • 0
    посмотрите на количество людей добавивших статью в избранное! Вы безусловно попали в яблочко, так держать! Жду не дождусь остальных частей!

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