Основы линукс: Введение в bash
О чем статья
Прочитав эту статью, вы узнаете что такое bash (стандартный командный интерпретатор линукс), научитесь обращаться со стандартными командами: ls, cp, mv… поймете назначение инодов, жестких и символических ссылок и многое другое.
Это пособие предназначено для новичков в линукс и для тех, кто хочет повторить или усовершенствовать понимание основных принципов линукс, таких как копирование и перемещение файлов, создание ссылок, использование стандартных команд линукс наряду с перенаправлениями и пайпами. В этой статье вы найдете множество примеров, поясняющих изложенный материал. Для начинающих большинство информации окажется новой, а для более продвинутых пользователей этот материал может стать прекрасным пособием для обобщения имеющихся знаний и навыков.
Введение в bash
Shell
Если вы используете линукс, то знаете что после логина вас приветствует приглашение командного интерпретатора. Например такое:
Если после логина загружается графическая оболочка, то чтобы добраться до командного интерпретатора нужно запустить эмулятор терминала (gnome-terminal, xfce4-terminal, konsole, xterm, rxvt…) или переключиться на один из виртуальных терминалов нажав Ctrl–Alt–F1 или Ctrl–Alt–F2 и т.д.
Приглашение командного интерпретатора на вашем компьютере может отличаться от того что показано в примере. Оно может содержать имя пользователя, имя компьютера и название текущей рабочей директории. Но несмотря на все эти различия, программа которая печатает это приглашение называется «shell» (оболочка), и скорее всего в роли вашей командной оболочки выступает программа которая называется bash.
У вас запущен bash?
Проверить запущен ли bash можно следующей командой:
\$ echo \$SHELL /bin/bash
Если в результате выполнения этой команды вы получили ошибку или её вывод отличается от того что в примере, то возможно в вашей системе в качестве командной оболочки используется не bash. Несмотря на это, большая часть материала будет актуальна, но все же рекомендуем вам переключиться на bash. Сделать это можно (если bash установлен в системе) командой:
Что такое bash
Bash (акроним от «Bourne-again SHell») это стандартный интерпретатор команд на большинстве линукс систем. В его обязанности входит обработка и исполнение команд с помощью которых пользователь управляет компьютером. После того как вы завершили работу, можно завершить процесс командного интерпретатора. После нажатия клавиш Ctrl–D, команд exit или logout процесс командного интерпретатора будет завершен и на экране снова появится приглашение ввести имя пользователя и пароль.
Использование «cd»
Давайте начнем использовать bash для навигации по файловой системе. Для начала напечатайте следующую команду:
Этой командой мы указали bash-у что хотим переместиться в корневую директорию — /. Все директории в системе организованы в древовидную структуру и / это её начало (или корень). Команда cd служит для изменения текущей рабочей директории.
Чтобы узнать в каком месте файловой системы в данный момент вы находитесь (текущую рабочую директорию) наберите:
В приведенном выше примере / — аргумент команды cd — называется путь. Это место файловой системы, куда мы хотим переместиться. В данном случае / — абсолютный путь, это значит что путь указан относительно корневой директории.
Абсолютные пути
Вот несколько примеров абсолютных путей
/dev /usr /usr/bin /usr/local/bin
Как вы уже могли заметить, все эти пути объединяет то, что они начинаются с /. Указывая путь /usr/local/bin в качестве аргумента команде cd мы говорим ей перейти в корневую директорию /, затем в директорию usr, потом в local и bin. Абсолютные пути всегда начинаются с /
Относительные пути
Второй вид путей называется относительными. Bash, команда cd и другие команды отсчитывают эти пути относительно текущей директории. Относительные пути никогда не начинаются с /. Например, если мы находимся в /usr
Затем мы можем перейти в /usr/local/bin используя относительный путь
\$ cd local/bin \$ pwd /usr/local/bin
Использование «..»
Относительные пути могут содержать одну или несколько директорий «..». «..» указывает на родительскую директорию по отношению к нашей рабочей директории. Пример:
Можно добавить .. к относительному пути. Это позволит переместиться в директорию, которая находится на одном уровне с той в которой мы находимся. Пример:
Примеры с использованием относительных путей
Относительные пути могут быть довольно сложными. Вот несколько примеров. Результат выполнения команд не показан, попробуйте определить в какой директории вы окажетесь используя bash.
Рабочая директория «.»
Перед тем как закончить разговор о команде cd, следует упомянуть еще несколько вещей. Во-первых, существует ещё одна специальная директория «.», которая указывает на текущую директорию. Эта директория используется для запуска исполняемых файлов, находящихся в текущей директории.
В последнем примере myprog это исполняемый файл находящийся в текущей директории, который будет запущен на исполнение.
cd и домашняя директория пользователя
Для того чтобы перейти в домашнюю директорию, нужно набрать
Без аргумента cd переместит вас в домашнюю директорию. Для суперпользователя домашней обычно является директория /root, а для обычных пользователей — /home/username/. Но что если мы хотим указать конкретный файл, находящийся в домашней директории. Например, как аргумент к программе ‘myprog’? Можно написать:
Однако, использовать абсолютные пути к файлам не всегда удобно. Эту же операцию можно сделать при помощи
— специальное имя, указывающее в bash на домашнюю директорию пользователя.
Домашние директории других пользователей
Но что если нам нужно указать файл в домашней директории другого пользователя? Для этого после тильды нужно указать имя этого пользователя. Например, чтобы указать на файл fredsfile.txt находящийся в домашней директории пользователя fred:
Команды линукс
Введение в ls
Вероятно вы уже знакомы с командой ls, которая, вызванная без аргументов, выводит на экран список файлов хранящихся в рабочей директории:
\$ cd /usr \$ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src
Если указать опцию -a, можно будет увидеть все файлы, включая скрытые (имена которых начинаются с точки).
Подробный список директорий
После самой команды ls в качестве ее аргумента можно указать один или более файлов или директорий. Если указать имя файла, то команда ls выведет информацию только об этом файле. А если указать название директории, ls покажет все ее содержимое. Опция ‘-l’ команды ls бывает очень полезной если вы хотите кроме имен файлов узнать более подробную информацию о них (права на файл, имя владельца, время последнего изменения файла и его размер).
В следующем примере показано применение опции ‘-l’ для вывода информации о файлах хранящихся в директории /usr
В первой колонке показана информация о правах доступа к каждому файлу в списке. (Немного позже я объясню какая буква что обозначает) Следующая колонка показывает количество ссылок на каждый элемент списка. Третья и четвертая колонки — владелец и группа файла соответственно. Пятая колонка — размер. Шестая — время последнего изменения файла (‘last modified time’ или mtime). Последняя колонка — имя файла или директории (Если это ссылка, то после знака ‘–>‘ стоит имя объекта на который она ссылается).
Как посмотреть только директории
Иногда возникает потребность посмотреть информацию только о директориях, а не о всем их содержимом. С этой задачей поможет справиться опция ‘-d’, которая указывает команде выводить информацию только о директориях. Пример:
Рекурсивный список и информация о инодах
И, наконец, опция ‘-i’ используется для вывода инодов каждого объекта файловой системы.
Что такое иноды?
Каждый объект файловой системы (файл, директория…) имеет свой уникальный номер, называемый инодом (inode number). Эта информация может показаться незначительной, но понимание функции инодов поможет вам разобраться во многих операциях над файловой системой. Например, посмотрим на «.» и «..» как на ссылки, присутствующие в каждой директории. Чтобы понять что из себя представляет директория «..», узнаем инод директории /use/local
Как можем видеть, инод директории /usr/local — 5120. Теперь посмотрим какой инод у директории /usr/local/bin/.
Получается, что иноды директорий /usr/local и /usr/local/bin/.. совпадают! Это значит, что на инод 5120 ссылаются два имени: /usr/local и /usr/local/bin/.. То есть это два разных имени одной директории. Каждый инод указывает на определенное место на диске.
На этом примере видно (второй столбец), что на директорию /usr/local ссылаются 8 разных объектов файловой системы. Вот их имена:
/usr/local /usr/local/. /usr/local/bin/.. /usr/local/games/.. /usr/local/lib/.. /usr/local/sbin/.. /usr/local/share/.. /usr/local/src/..
mkdir
Давайте рассмотрим команду mkdir. Она служит для создания новых директорий. В следующем примере демонстрируется создание трех новых директорий (tic, tac, toe) в директории /tmp
По умолчанию команда mkdir не может создать вложенной структуры директорий. Поэтому, если вам нужно создать несколько вложенных одна в другую директорий (won/der/ful), то вам придется три раза поочередно вызывать эту команду:
\$ mkdir won/der/ful mkdir: cannot create directory ‘won/der/ful’: No such file or directory \$ mkdir won \$ mkdir won/der \$ mkdir won/der/ful
Упростить эту операцию можно добавив опцию ‘-p’ к команде mkdir. Эта опция позволяет создавать вложенную структуру директорий:
Чтобы узнать о возможностях этой утилиты подробнее, прочитайте справку, которая вызывается командой man mkdir. Справки есть практически ко всем командам из этого руководства (например man ls), кроме cd, т.к. она встроена в bash (для таких команд справка вызывается так: help cd)
touch
Перейдем к изучению команд cp и mv, служащих для копирования, переименования и перемещения файлов и директорий. Но перед этим создадим пустой файл в директории /tmp при помощи команды touch:
Теперь, когда у нас есть пустой файл, запишем в него текстовую строку при помощи команды echo, которая выводит переданный ей аргумент на стандартное устройство вывода (текстовый терминал в нашем случае).
\$ echo «firstfile» firstfile
Чтобы записать строку в наш файл, перенаправим в него вывод команды echo:
\$ echo «firstfile» > copyme
cat и cp
Для вывода содержимого файла на терминал используется команда cat:
\$ cat copyme firstfile
Теперь мы можем приступить к разбору базовой функциональности команды cp. Эта команда принимает два аргумента. Первый — имя уже существующего файла (‘copyme’), второй — название новой копии, которую мы хотим сделать (‘copiedme’).
\$ cp copyme copiedme
Можем убедиться, что новая копия файла имеет другой номер инода (это значит что мы получили действительно новый отдельный файл, а не просто ссылку на старый)
Теперь применим команду mv чтобы переименовать файл («copiedme» –> «movedme»). Номер инода после этой операции не меняется, а изменяется только название файла.
Номер инода не изменяется только при условии, что переименованный файл остается в пределах той файловой системы где находился исходный файл. Мы рассмотрим подробнее устройство файловых систем в одной из следующих частей этого пособия.
Команда mv позволяет не только переименовывать файлы, но и перемещать их. Например, чтобы переместить файл /var/tmp/myfile.txt в директорию /home/user нужно дать команду:
\$ mv /var/tmp/myfile.txt /home/user
Файл будет перемещен в домашнюю директорию пользователя user даже если она находится в другой файловой системе (в этом случае файл будет скопирован в новое место после чего оригинал будет удален). Как вы могли уже догадаться, перемещение файла в другую файловую систему приводит к изменению его инода. Это происходит потому, что каждая файловая система имеет свой отдельный набор инодов.
Чтобы переместить одновременно несколько файлов в одну директорию нужно написать:
\$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt /home/user
Если добавить опцию ‘-v’, на экран будет выведен отчет о проделанной операции:
Как работает bash: разбираемся в деталях
Перевели статью, которая поможет лучше понять, как работает bash, а значит, сэкономить время и уменьшить количество ошибок. Далее текст от лица автора.
Недавно я проводила рефакторинг установки для разнообразного набора приложений. Это была большая куча образов Docker, которые должны быть гибкими, но стабильными. Некоторые веб-приложения также необходимо перезапускать удобным для пользователя способом, который отображает полезные сообщения об ошибках для разработчиков различной квалификации.
Эта задача потребовала большой работы, но я уверена, что стала лучше разбираться в сценариях bash. Мне легко писать эту статью, потому что я записывала все странные мелочи, которые требовали времени на отладку.
Bash настолько странный, что не все из этих мелочей можно подробно разобрать в одной статье, поэтому в каждом разделе я даю ссылки на статьи или учебные пособия, где все эти моменты подробно расписаны.
Язык программирования, на котором писала ваша бабушка
Bash создан Брайаном Фоксом (легендарный и недооцененный парень) и выпущен в 1989 году как open source замена для Bourne Shell, вышедшей в 1976 году. Его название является аббревиатурой от Bourne Again SHell.
Как и в случае с CSS, я перестала бояться писать сценарии bash, когда узнала о нем несколько ключевых моментов: как он работает, в чем действительно хорош и как заставить его делать то, что мне нужно. Я также столкнулась с множеством глупых маленьких ошибок, которые мне просто пришлось заучить.
Написание скриптов командной оболочки — это очень весело, если вы овладеете основами! Ничто не заставит вас почувствовать себя более опытным хакером, чем написание дикого однострочника, который запускается с первой попытки.
Кстати, поскольку эта статья относится к миру Linux и операционных систем, у меня есть примечание для тех, кто занимается этими вопросами дольше меня: нормально (даже рекомендуется!) исправлять меня, если я ошибаюсь, просто будьте вежливы.
Версии
Язык сценариев оболочки, c которым большинство из нас работает в настоящее время, — это версия bash для Mac и Linux, используемая для эмуляции терминала в /bin/bash.
Debian (и, соответственно, Ubuntu и Linux Mint) теперь использует другой, но в основном совместимый язык сценариев оболочки (dash) для системных задач. Прим. переводчика: так утверждает автор статьи, но я везде вижу использование bash.
Вы также можете установить zsh в качестве основной оболочки, который в целом похож на bash, но имеет и отличия.
Из-за всех этих небольших вариаций хорошей идеей будет поместить #!/bin/bash (или какой-либо другой язык сценариев оболочки, который вы хотите использовать) вверху файлов, чтобы указать, что сценарий оболочки должен использовать конкретно этот язык, а не какой-либо еще из установленных на сервере.
Указание языка оболочки в заголовке файла сделает его поведение более предсказуемым. Например, ответы на Stack Overflow обычно предполагают, что вы используете именно bash.
Основы
Давайте сначала рассмотрим несколько фундаментальных вещей.
Сценарии оболочки, по сути, представляют собой текстовые потоки, которые передают данные между собой. Они используют философию Unix, заключающуюся в том, чтобы хорошо выполнять одну задачу и объединять крошечные инструменты в более крупные программы по принципу работы конвейера в промышленности. Результат выполнения каждый инструмента передается на вход следующему по порядку.
Синтаксис
Bash использует нестрогий синтаксис; вы можете использовать точку с запятой в конце строки, если хотите, и отступы не влияют на выполнение кода. В нестрогости синтаксиса кроется ловушка. Синтаксис bash важен и очень специфичен. Вдобавок, по сравнению с другими языками, ошибки в синтаксисе трудно диагностировать.
Например, можно получить ошибку “[grep isn’t a valid command”, если забыть поставить пробел внутри квадратных скобок [] или “Unexpected end of file”, когда вы забыли точку с запятой после <>.
При определении переменной пробел между переменной и знаком = и между знаком = и значением приводит к разным результатам. Существует важное различие между одинарными кавычками и двойными.
Синтаксические ошибки всегда выглядят как логические ошибки, что затрудняет выявление опечаток.
Структура
Сценарии оболочки понимают операторы управления выполнением: операторы if, циклы while, циклы for, операторы case и так далее.
Отличие bash от других языков — это условия и области видимости. Однако, поскольку bash в большей степени ориентирован на однострочные и одноразовые сценарии, условия используются не так часто, как в других языках.
Вот пример однострочника, который использует управление выполнением без каких-либо операторов if:
Примечание: \ обозначают перенос строки, tac похож на cat, но выводит файл в обратном порядке.
Это выглядит уродливо, но эффективно, и иллюстрирует сильные и слабые стороны сценариев оболочки.
Сценарий bash может быть очень кратким и трудным для чтения. Вы можете многое сделать в несколько строк, но когда что-то сломается, может быть трудно понять, почему. Это благословение и проклятие. С большой силой появляется огромный потенциал, чтобы все испортить.
Что такое поток? Что такое команда?
Каждая команда — это программа, которая делает одну вещь. Grep, например, ищет вещи и возвращает строки. Запросы и файлы подаются на вход, найденные строки идут с выхода.
Вы можете подумать: «Да ладно, именно так работает все программирование», но в данном случае все немного сложнее, и это особенно важно понять.
Входы и выходы передаются от команды к команде в виде текстовых потоков. Есть три места, куда эти потоки идут и откуда берутся:
Это называется «поток», потому что строки выводятся в разных точках выполнения команды/функции, а не в конце, как вы могли бы подумать.
Вы отправляете текст на стандартный вывод с помощью таких команд, как printf и echo. Неопытный программист может думать, что это просто команды для вывода сообщений отладки, как в Python или JavaScript. Это не так.
Потоки позволяют объединять команды и функции. Хороший способ проиллюстрировать это — объяснить, как работают функции.
Зачем нужно ставить #!/bin / bash в начале файла сценария?
Я сделал Баш скрипты раньше, и все они работали нормально без этого в начале. Какой смысл в этом? Будет ли все по-другому?
8 ответов
это соглашение, поэтому оболочка *nix знает, какой интерпретатор запускать.
например, старые ароматы ATT по умолчанию ш (оболочка Борна), в то время как более старые версии BSD по умолчанию csh (оболочка C).
за ним должен следовать путь к файлу исполняемого интерпретатора (который BTW может быть даже относительным, но чаще всего абсолютный.)
ваша точка зрения об этом «работает» даже без shebang только потому, что программа, о которой идет речь, является сценарием оболочки, написанным для той же оболочки, что и та, которую вы используете. Например, вы можете очень хорошо написать файл javascript, а затем поставить #! /usr/bin/js (или что-то подобное), чтобы иметь оболочку javascript сценарий.»
операционная система принимает оболочку по умолчанию для запуска сценария оболочки. поэтому, упоминая путь оболочки в начале скрипта, вы просите ОС использовать эту конкретную оболочку. Это также полезно для мобильность.
каждый дистрибутив имеет оболочку по умолчанию. Bash является значением по умолчанию для большинства систем. Если вы работаете в системе с другой оболочкой по умолчанию, сценарии могут работать не так, как предполагалось, если они написаны специально для Bash.
добавлять #!/bin/bash как первая строка вашего скрипта, сообщает ОС, чтобы вызвать указанный shell для выполнения следующих команд сценарий.
#! часто называют «хэш-Банг», «она-Банг»или» Ша-Банг».
Это называется shebang. Он состоит из знака и восклицательного знака (#!), за которым следует полный путь к интерпретатору, например /bin / bash. Все скрипты под UNIX и Linux выполняются с помощью интерпретатора, указанного в первой строке.
Это может быть полезно для тех, кто использует другую систему, которая не имеет эту библиотеку легко доступны. Если это не объявлено, и у вас есть некоторые функции в скрипте, которые не поддерживаются этой системой, вы должны объявить #/bin/bash. Я столкнулся с этой проблемой раньше на работе, и теперь я просто включаю ее в качестве практики.
Основы работы с командной оболочкой bash в Linux
Командная оболочка Bash является одним из нескольких главных компонентов в дистрибутивах Linux. Она позволяет читать и запускать команды, выполнять скрипты, работать с файлами. Наличие Bash не менее важно для полноценного функционирования операционных систем семейства Linux, чем ядро или рабочее окружение.
Рассмотрим, как и для чего был создан программный продукт, разберем его преимущества, области применения и расскажем о начале работы с Bash. Обзор будет полезен всем, кто начинает свое практическое знакомство с Linux, а также тем, кто хочет иметь под рукой удобную шпаргалку с основным функционалом командного интерпретатора.
Что такое Bash
Bash (Bourne again shell или «возрождённый» shell) – это модифицированная версия программной оболочки Bourne-shell (sh или «Оболочка Борна»). Она является командным процессором, работающим интерактивно в текстовом окне. Bash нужен для приема команд пользователя и их отправки операционной системе для последующей обработки.
Bash – это универсальный инструмент для выполнения различных задач, который в некоторых случаях позволяет избежать установки специализированного программного обеспечения. Одновременно, это скриптовый язык программирования, позволяющий создавать сценарии для автоматизации различных операций.
История создания
Предшественница Bash – Bourne-shell (sh, «Оболочка Борна») была одной из первых оболочек для операционных систем Unix. Ее создал в 1978 году британский ученый Стивен Борн, давший Bourne-shell свое имя.
Изначально оболочка sh обладала относительно небольшим набором функций. Но в 1987 году Bourne-shell заинтересовался программист Брайан Фокс, сумевший доработать и значительно расширить ее функционал. В 1989 году Брайан создал бета-версию Bash и продолжал поддерживать свое детище вплоть до 1993 года.

Основные команды, правила их написания и прочие особенности Bash были перенесены из sh. Прочие возможности, включая историю, позаимствованы из Korn Shell и C Shell (других вариаций Bourne-shell). Bash практически полностью соответствует стандартам POSIX.
Сегодня оболочка Bash предустановлена в большей части дистрибутивов Unix/Linux. Взаимодействие оболочки и операционной системы обеспечивается с помощью специальной программы – терминала (например, lxterm, xterm, eterm, gnome-terminal).
Синтаксис
Правила написания Bash представляют собой расширенный синтаксис Bourne-shell. Узнать подробности про основы взаимодействия с оболочкой, а также спецификации конкретных команд можно в руководстве Bash Reference Manual, распространяемом GNU. Это полезная шпаргалка для начинающих, позволяющая быстрее сориентироваться в оболочке.
Пример скрипта
Ниже рассмотрен пример самого простого скрипта, выводящего надпись «Hello world».
Данный сценарий состоит из двух строк, где первая указывает операционной системе, что файл должен запускаться при помощи оболочки Bash. Во второй строчке указывается действие – его и должен выполнить скрипт. Это действие должно напечатать в окне терминала соответствующую надпись.
Отличие Bash от Bourne-shell
Bash в Linux способна выполнять практически все важные сценарии Bourne-shell без внесения дополнительных изменений. Исключение составляют те, где необходимо ссылаться на спецпеременные Bourne-shell или, где применяются ее встроенные команды.
В синтаксисе Bash применяются приемы из Korn Shell и C Shell:
Используя консоль Bash в качестве интерактивного интерпретатора, можно прибегать к автодополнению названий файлов, программ, переменных и команд нажатием клавиши Tab (↹).
Для чего нужен Bash
Основные преимущества
На данный момент разработано множество различных вариаций Bourne-Shell. Но, по сравнению с ними, командный интерпретатор Bash обладает рядом преимуществ.
Примечание. Чем новее интерпретатор, тем больше функций он предоставляет. Узнать версию Bash в Linux можно командой:
Примеры применения
Как работать с Bash
Рассмотрим, как пользоваться Bash на примере подключения к веб-серверу (где находятся файлы сайта) с установленным дистрибутивом Linux через протокол SSH с нуля.
Для этого можно воспользоваться любым предпочитаемым способом. В данном случае рассматривается веб-сервер с Ubuntu, хотя в других дистрибутивах принцип остается тем же.
1. После успешного ввода логина и пароля программа Терминал Linux в автоматическом режиме запустит Bash. Собственно, пользователь уже подключится к системе и увидит приглашение на ввод команд.
2. Приглашение отображается относительно стандартно и имеет следующий вид:

3. Когда приглашение выполнено, терминал автоматически поставит пробел и будет находиться в ожидании ввода команд. На предложенном изображении была нажата кнопка «Enter». В следующей строчке введена команда «cd» перейти в существующий каталог «/opt». Еще ниже отображается результат вывода – рабочей папкой стала «/opt» и это показано в приглашении.
4. Командная строка Linux позволит запускать любое установленное в системе приложение. Как правило, каталоги со списком исполняемых программ расположены в папках «/bin, /usr/bin». Проверяемые каталоги интерпретатор сохраняет в переменной «$PATH». Просмотреть их список можно командой:
5. Далее можно воспользоваться командой «ls» и добавить к ней один из каталогов, найденных в «$PATH», чтобы увидеть список доступных программ. Например:
6. Если приложение консольное, Bash произведет его запуск в терминале. Ниже показан пример запуска редактора Nano.
7. Bash также позволяет осуществлять запуск приложений в фоновом режиме. Для запуска в фоне, после ввода названия программы в конце следует добавить знак амперсанда (&).
Здесь строка «[2] 23258» – это номер и PID процесса. При этом nano находится в фоновом режиме. Вернуться к нему можно командой «fg» (добавив номер задачи, если их запущено несколько) или «jobs».
Поскольку в фоне может работать достаточно много команд, проверить номер требуемой можно командой «bg». Она отобразит список активных задач.
Заключение
Помимо вышеперечисленного в этой статье, интерпретатор имеет множество полезных встроенных команд. С их помощью можно выполнять весь спектр работы с веб-сервером. Часть этих команд используется для работы со строками и массивами текстовых данных в консольном окружении ОС семейства Unix.
Оптимальное решение для размещения сайтов любого профиля и посещаемости — виртуальный сервер от Eternalhost. Оперативная техподдержка 24/7 и реально работающая бесплатная защита от DDoS.















