Что значит решетка в linux

Обновлено: 05.07.2024

Командная строка Linux

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

Либо вы для вызова эмулятора терминала вы можете воспользоваться сочетанием клавиш CTRL + ALT + t.

TAB для автодополнения

При вводе команды или имени файла, обязательно используйте клавишу TAB – она автоматически допишет до вас команду или имя файла. Если при нажатии на TAB ничего не происходит, то быстро нажмите TAB два раза, чтобы увидеть все доступные варианты.

ENTER для запуска выполнения команд

Набрав команду, нажмите ENTER и после этого она запустится.

CTRL + c для прерывания выполнения программы

Если вы хотите оборвать выполнение команды, то используйте для этого сочетание клавиш CTRL + c. Если вы ввели команду, но передумали её запускать, то вместо удаления строки, можете также нажать CTRL + c.

Азы файловой системы Linux

После корня указываются папки (в Linux они называются директориями) и файлы. Одни папки могут быть вложены в другие – точно также как в Windows. Вложенные папки и файлы разделяются символом / (точно таким же как корень).

Пример указания пути до файла:

Эта запись означает, что файл book.txt находится в папке mial, а папка mial находится в папке home.

Базовые команды Linux

pwd для показа текущей рабочей директории

Откройте консоль и введите туда

У меня вывелось:

Здесь / (первый слеш) – это корень, home – это название папки (директории), далее / (второй слеш) – отделяет название вложенной папки, mial – название второй вложенной папки.

mkdir для создания новых директорий

После mkdir укажите название папки, которую вы хотите создать. Если вы укажите относительный путь, например, так:

То будет создана новая папка test1 в текущей рабочей директории, т.е. в моём случае путь до неё будет

Также можно указать абсолютный путь до папки:

ls для просмотра содержимого каталогов

Команда ls используется для вывода списка файлов и папок текущей рабочей директории:

test1 test2 test.sh Видео Документы Загрузки Изображения Музыка Общедоступные Рабочий стол Шаблоны

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

Чтобы список выглядел лучше, можно использовать команду ls с опцией -l

После команды и опций можно указать путь до папки, содержимое которой вы хотим посмотреть. Чтобы увидеть содержимое директории /var/log нужно ввести:

Для просмотра содержимого корневой директории:

cd для перехода по папкам (смены текущей рабочей директории)

Для перехода по папкам используется команда cd после которой пишется директория, в которую вы хотите перейти. Можно указывать относительный путь или абсолютный:

Символ . (одна точка) означает текущую директорию, а символ .. (две точки) означаете родительскую директорию. Следовательно, для перехода на один уровень вверх нужно набрать

cp для копирования файлов

Если вам нужно скопировать файл в другую директорию, то используется команда cp. После неё указывается файл, который нужно скопировать и затем через пробел директория, куда вы хотите поместить файл, например:

Этой командой я скопировал файл test.sh в директорию test1. Проверим

mv для переименования и перемещения файлов.

После команды mv указывается имя файла, который вы хотите переименовать или переместить. Затем через пробел пишется директория, куда вы хотите переместить файл (тогда файл будет перемещён в неё с исходным именем), или директория и новое имя файла (тогда файл будет перемещён и переименован), или только новое имя файла (тогда файл будет переименован).

Файл test.sh из каталога test1 я переместил в каталог test2:

Файл test.sh в каталоге test2 я переименовал в test2.sh :

Файл test2.sh в каталоге test2 я переместил в каталог test1 и присвоил ему имя new.txt:

rm для удаления файлов и папок

Чтобы удалить наши тестовые директории, воспользуемся командой rm. После этой команды укажите путь до файла или папки, которые нужно удалить. Если вы собираетесь удалить директорию, то используйте также опцию -r, она означает рекурсивно удалять каталоги и их содержимое. Можно указать сразу несколько файлов и (или) каталогов:

Как копировать текст в командной строке и как вставлять в командную строку Linux

Наши партнеры

Во времена бурной моей юности хитом ©1 среди компьютерных игр был Quake (тот самый, первый, безо всяких номеров и дополнительных слов в названии). И вот парадокс: сообщество его поклонников, едва успев образоваться, дало трещину, рассевшись на две непримиримо враждующие партии: "трактористов" и "мышевиков". Первые предпочитали гонять своего электронного аватара по готическим подземельям исключительно при помощи клавиатуры; вторые, соответственно, допускали использование мыши для поворотов и (или) прицеливания. Ненавидели представители обеих группировок друг друга истово; почему - объяснить толком никто не мог.

Очень странно, но в компьютерном мире борьба идеологий - явление повсеместное. Веб-программистов, предпочитающих JavaScript, высмеивают фанаты PHP. Художники, сидящие за Макинтошами, свысока посматривают на "этих писишников". И уж конечно, линуксоиды и сторонники Windows пребывают в состоянии перманентной лютой дружбы.

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


Давайте попробуем оставить в стороне предвзятость (если у кого-то из наших читателей она ещё сохранилась) и заглянем в нутро операционной системы Linux невооружённым, объективным и пристальным глазом. Нет, приступать к ручной сборке ядра мы прямо сейчас не будем, но первый шаг в этом направлении сделаем. Совсем не обязательно, что каждому захочется пройти всю дорогу до конца, однако с начальным её отрезком очень полезно познакомиться.

Речь на сей раз пойдёт у нас с вами о командной строке - том самом жупеле, которым пугают на ночь маленьких непослушных "квакеров" и "анрылистов". В среде не слишком продвинутых пользователей Windows сложилось устойчивое мнение, что так называемая командная строка есть жуткое проклятие, доставшееся компьютерному миру от времён машины PDP-11 с телетайпным выводом, и что узколобые юниксоиды держатся за эту строку, как заигравшиеся масоны за свои мастерки и молоточки, - из чистого упрямства и нежелания взглянуть в глаза окружающей действительности. "Какое, милые, у нас тысячелетье на дворе? - спрашивают малопродвинутые пользователи Windows у администраторов UNIX- и Linux-серверов. - Давно пора переходить на графический интерфейс! Сколько можно спать?"

Зловещая сила предвзятости такова, что она искажает зрение человека не слабее андерсоновского зеркала троллей. Раз графический интерфейс управления системой появился после текстового, значит, первый прогрессивней второго; командную строку пора сдать в утиль и мгновенно перейти на роскошные административные интерфейсы с анимированными кнопками и выпадающими меню! Мгновенно! Вот как на этой замечательной систе.


Кстати, а вы никогда не задумывались над тем, почему печально известный BSoD - Blue screen of death, "синий экран смерти" - продолжает упорно отображаться в текстовом режиме, а не в виде очередного красивенького окошечка? Да очень просто: когда система сваливается в состояние кататонического ступора, именно текстовый режим (самый элементарный режим отображения, который поддерживает каждая видеокарта хотя бы стандарта CGA) остаётся последним пределом обороны. Зажатая в тиски критического сбоя, с перебитыми межпроцессными связями, система из последних сил тянется к тому каналу вывода, который требует для своего поддержания минимальных ресурсов. И через этот канал доносит до нас информацию о сбое, которую смогла, погибая, зафиксировать. Такой вот цифровой героизм.

А в мире Linux место подвигу есть всегда. Работа в режиме командной строки для администратора этой системы - дело совершенно привычное. Очень важно понимать, что это не бравада, не нарочитый способ выразить своё превосходство над "мышевиками" из оппозиционного лагеря. Хотя порой и не без этого, конечно. Но смысл управления системой из командной строки - именно в минимизации расходов ресурсов на сам интерфейс управления. Потому что ресурсы эти могут пригодиться для совсем других задач, где без них действительно не обойтись. Другой аргумент в пользу командной строки - отсутствие сбоев в интерфейсе администрирования, поскольку интерфейс как таковой и сам отсутствует.

Так повелось ещё со времён не слишком быстрых машин, на которых выполнялись параллельно по несколько вычислительных задач: так было в семидесятые и восьмидесятые годы в мире UNIX, и эта идеология органично перекочевала в Linux. Администрирование здесь по-прежнему может осуществляться минимальными средствами. Пыльный поцарапанный системный блок с 386-м процессором, винчестером на 40 Гбайт и 16 Мбайт оперативки, стоящий где-нибудь под столом в серверной комнате крупной конторы, вполне может оказаться брандмауэром этой самой конторы - компьютером, на который возложен контроль за безопасностью соединений с внешним миром. И со своей задачей он будет прекрасно справляться. При этом не понадобятся даже клавиатура, мышь и монитор: системщик будет при необходимости менять конфигурацию брандмауэра, запуская сеанс связи с ним со своей личной рабочей станции.

Однако довольно лирических отступлений; перейдём к делу. А именно - к первому знакомству с той самой командной строкой, о которой каждый наверняка хотя бы наслышан. Теперь нам ясно, что способность управлять системой при помощи текстовых инструкций важна в силу своей надёжности и доступности. Давайте же обретём эту способность!

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

Если же нет, и вместо экрана текстового вы видите перед собой явно графический, со всякими рисунками и выпадающими менюшками, значит, при установке системы вы оставили в покое опцию "графический вход", активированную по умолчанию. Страшного в этом ничего нет, просто понадобится совершить дополнительное движение - сойти с парадного крыльца и постучаться с чёрного хода. Как свой, а не в качестве гостя.

Говоря о чёрных ходах, я не имею в виду проложенные "троянцами" туннели: речь идёт именно о способах текстового входа в систему, которые остаются доступными всегда - даже если вследствие какого-то крупного сбоя видеокарта вообще откажется работать с графикой, хотя бы и в режиме 640х480х16. Чаще всего проблемы с видеокартами (самыми свежими, как правило) возникают в Linux сразу после установки, если тот видеорежим, который пользователь указал при инсталляции как предпочтительный (какой-нибудь 1600х1200х16М) карточка поддерживать отказывается наотрез. Вот тут запустить текстовую консоль, проникнуть в систему, почитать лог-файлы и продиагностировать сбой - именно то, что необходимо сделать. Представляете, насколько легче дышалось бы в Windows, если бы после появления очередного BSoD можно было бы запустить сеанс MS-DOS без перезагрузки? Мечты, мечты. В Windows такое, к сожалению, невозможно в принципе; почему именно, мы с вами как-нибудь разберёмся.

Итак, текстовая консоль. Отыщите на клавиатуре две первые клавиши из знаменитой комбинации Ctrl+Alt+Del и нажмите их, а третьей - вместо Del - пусть будет калвиша F2. Нажали? Что-нибудь изменилось на экране?

Если вместо красочной многоцветной картинки перед вами появился чёрный экран с парой строк текста в левом верхнем углу - добро пожаловать на порог Linux. Если такой же экран вы наблюдали с самого начала, удостоверьтесь в том, что этот от него отличается: наберите, например, после приглашения localhost login: имя пользователя - да хоть что-нибудь - и попереключайте режимы: Ctrl+Alt+F2, Ctrl+Alt+F1, Ctrl+Alt+F3. Всё это - различные виртуальные консоли для входа в одну и ту же, истинно многопользовательскую систему. Ну так войдём же!

localhost login: root
password: (набираем здесь указанный при установке пароль. )

И вот в итоге - если пароль верно набран - перед нами отрывается, наконец, легендарная Командная Строка:

Посмотрим, что тут можно сделать.

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

То, что поле, перед которым мигает курсор, помечено решёткой, означает по умолчанию: "Внимание! Вы работаете в режиме root, будьте осторожны!" Ведь суперпользователь обладает здесь абсолютными привилегиями, и любое его неловкое действие может иметь самые тяжкие последствия. А если вместо решётки стоит знак доллара - всё в порядке, резвитесь; много напортачить не удастся. Внешний вид приглашения командной строки можно менять и настраивать под себя, но этим мы займёмся не скоро. Пока - о насущном.

Первое "слово" в приглашении - то, что стоит перед собачкой - это логин пользователя, работающего с данной командной строкой. За собачкой стоит сетевое имя компьютера. Поскольку мы поставили систему на домашней машине, никакой сети нет, используется значение по умолчанию - localhost. Далее через пробел указано наименование той директории, в которой мы прямо сейчас находимся; точнее, её относительное название. Давайте посмотрим, что тут есть?

Команда dir - если кто-то помнит ещё о такой со времён MS-DOS - тут сработает. Но правильнее (да и короче) использовать всё-таки команду ls, сокращённую от "list", "список". Она нам, строго говоря, тоже ничего не даст: в домашней директории root пока что пусто. Хотя. Давайте выполним эту команду с параметром -a, чтобы отобразить и скрытые файлы (те, имена которых начинаются с точки).

Ого! Оказывается, даже у только-только появившегося на виртуальный свет пользователя домашняя директория уже полна служебными конфигурационными файлами для различных стандартных программ Linux. Нам пока нет резона углубляться в предназначение этих файлов, но зато мы можем узнать абсолютный путь к тому месту, в котором находимся, исполнив команду pwd:

Вот и первое открытие: домашний каталог суперпользователя располагается на втором уровне вложенности (первый уровень - это /, называемый корневым; не надо путать его и каталог суперпользователя /root!). Путешествовать по дереву каталогов можно способом, опять-таки известным со времён MS-DOS:

Корневой каталог содержит ссылки на все важнейшие папки системы. Так, в /bin и /sbin хранятся программы - в основном, системные утилиты, в /usr - прочие программы, в /var - системные логи и почтовые ящики, в /home - директории непривилегированных пользователей, в /tmp - временные файлы. Что такое /dos-c и /dos-d? Это ссылки на разделы FAT32, которые я при инсталляции Linux создал на этапе разметки диска. Ссылки указывают, соответственно, на диски C и D ОС Windows. И они доступны из Linux, что любопытно, а вот файлы Linux из-под Windows не видны! Посмотрим, что у нас на C.

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

(Кстати, если вы точно помните, что при установке системы отводили раздел под FAT32 и как-то его именовали, а сейчас он не виден в корневой директории, не отчаивайтесь. Мы его увидим. Для этого потребуется освоить систему чуть глубже, но у нас всё обязательно получится).

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

И давайте теперь научимся корректно покидать систему. Для завершения работы от имени пользователя root исполните команду, гм, "заткнись немедленно!":

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

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.




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


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


На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd выводит на экран сведения о текущей рабочей директории, потом команда whoami показывает данные о пользователе, под которым вы вошли в систему.

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


Командная строка — отличный инструмент, но команды в неё приходится вводить каждый раз, когда в них возникает необходимость. Что если записать набор команд в файл и просто вызывать этот файл для их выполнения? Собственно говоря, тот файл, о котором мы говорим, и называется сценарием командной строки.

Как устроены bash-скрипты

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


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

Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:


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

Установка разрешений для файла сценария

Сохраните файл, дав ему имя myscript , и работа по созданию bash-скрипта почти закончена. Сейчас осталось лишь сделать этот файл исполняемым, иначе, попытавшись его запустить, вы столкнётесь с ошибкой Permission denied .


Попытка запуска файла сценария с неправильно настроенными разрешениями

Сделаем файл исполняемым:


Теперь попытаемся его выполнить:


После настройки разрешений всё работает как надо.


Успешный запуск bash-скрипта

Для вывода текста в консоль Linux применяется команда echo . Воспользуемся знанием этого факта и отредактируем наш скрипт, добавив пояснения к данным, которые выводят уже имеющиеся в нём команды:


Вот что получится после запуска обновлённого скрипта.


Теперь мы можем выводить поясняющие надписи, используя команду echo . Если вы не знаете, как отредактировать файл, пользуясь средствами Linux, или раньше не встречались с командой echo , взгляните на этот материал.

Использование переменных

Переменные позволяют хранить в файле сценария информацию, например — результаты работы команд для использования их другими командами.

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

Существуют два типа переменных, которые можно использовать в bash-скриптах:

  • Переменные среды
  • Пользовательские переменные

Переменные среды

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


Обратите внимание на то, что мы можем использовать системную переменную $HOME в двойных кавычках, это не помешает системе её распознать. Вот что получится, если выполнить вышеприведённый сценарий.


Использование переменной среды в сценарии

А что если надо вывести на экран значок доллара? Попробуем так:


Система обнаружит знак доллара в строке, ограниченной кавычками, и решит, что мы сослались на переменную. Скрипт попытается вывести на экран значение неопределённой переменной $1 . Это не то, что нам нужно. Что делать?

В подобной ситуации поможет использование управляющего символа, обратной косой черты, перед знаком доллара:


Теперь сценарий выведет именно то, что ожидается.


Использование управляющей последовательности для вывода знака доллара

Пользовательские переменные

В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.

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

Вот что получится после запуска такого сценария.


Пользовательские переменные в сценарии

Подстановка команд

Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её переменным, что позволяет использовать эту информацию где угодно в файле сценария.

Сделать это можно двумя способами.

  • С помощью значка обратного апострофа «`»
  • С помощью конструкции $()


При втором подходе то же самое записывают так:


А скрипт, в итоге, может выглядеть так:


В ходе его работы вывод команды pwd будет сохранён в переменной mydir , содержимое которой, с помощью команды echo , попадёт в консоль.


Скрипт, сохраняющий результаты работы команды в переменной

Математические операции

Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b)) :


Математические операции в сценарии

Управляющая конструкция if-then

В некоторых сценариях требуется управлять потоком исполнения команд. Например, если некое значение больше пяти, нужно выполнить одно действие, в противном случае — другое. Подобное применимо в очень многих ситуациях, и здесь нам поможет управляющая конструкция if-then . В наиболее простом виде она выглядит так:


А вот рабочий пример:


В данном случае, если выполнение команды pwd завершится успешно, в консоль будет выведен текст «it works».

Воспользуемся имеющимися у нас знаниями и напишем более сложный сценарий. Скажем, надо найти некоего пользователя в /etc/passwd , и если найти его удалось, сообщить о том, что он существует.


Вот что получается после запуска этого скрипта.


Поиск пользователя

Здесь мы воспользовались командой grep для поиска пользователя в файле /etc/passwd . Если команда grep вам незнакома, её описание можно найти здесь.

Управляющая конструкция if-then-else

Для того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией if-then-else . Вот как она устроена:


Если первая команда возвратит ноль, что означает её успешное выполнение, условие окажется истинным и выполнение не пойдёт по ветке else . В противном случае, если будет возвращено что-то, отличающееся от нуля, что будет означать неудачу, или ложный результат, будут выполнены команды, расположенные после else .

Напишем такой скрипт:


Его исполнение пошло по ветке else .


Запуск скрипта с конструкцией if-then-else


Если первая команда вернёт ноль, что говорит о её успешном выполнении, выполнятся команды в первом блоке then , иначе, если первое условие окажется ложным, и если вторая команда вернёт ноль, выполнится второй блок кода.


В подобном скрипте можно, например, создавать нового пользователя с помощью команды useradd , если поиск не дал результатов, или делать ещё что-нибудь полезное.

Сравнение чисел

В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.

n1 -eq n2 Возвращает истинное значение, если n1 равно n2 .
n1 -ge n2 Возвращает истинное значение, если n1 больше или равно n2 .
n1 -gt n2 Возвращает истинное значение, если n1 больше n2 .
n1 -le n2 Возвращает истинное значение, если n1 меньше или равно n2 .
n1 -lt n2 Возвращает истинное значение, если n1 меньше n2 .
n1 -ne n2 Возвращает истинное значение, если n1 не равно n2 .

В качестве примера опробуем один из операторов сравнения. Обратите внимание на то, что выражение заключено в квадратные скобки.


Вот что выведет эта команда.


Сравнение чисел в скриптах

Сравнение строк

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

str1 = str2 Проверяет строки на равенство, возвращает истину, если строки идентичны.
s tr1 != str2 Возвращает истину, если строки не идентичны.
str1 < str2 Возвращает истину, если str1 меньше, чем str2 .
str1 > str2 Возвращает истину, если str1 больше, чем str2 .
-n str1 Возвращает истину, если длина str1 больше нуля.
-z str1 Возвращает истину, если длина str1 равна нулю.

Вот пример сравнения строк в сценарии:


В результате выполнения скрипта получим следующее.


Сравнение строк в скриптах

Вот как работа с этими операторами выглядит в коде:


Вот результаты работы скрипта.


Сравнение строк, выведенное предупреждение

Обратите внимание на то, что скрипт, хотя и выполняется, выдаёт предупреждение:


Для того, чтобы избавиться от этого предупреждения, заключим $val2 в двойные кавычки:


Теперь всё работает как надо.


Сравнение строк

Ещё одна особенность операторов «>» и «<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:


Сохраним его, дав имя myfile , после чего выполним в терминале такую команду:


Она отсортирует строки из файла так:


Команда sort , по умолчанию, сортирует строки по возрастанию, то есть строчная буква в нашем примере меньше прописной. Теперь подготовим скрипт, который будет сравнивать те же строки:


Если его запустить, окажется, что всё наоборот — строчная буква теперь больше прописной.


Команда sort и сравнение строк в файле сценария

В командах сравнения прописные буквы меньше строчных. Сравнение строк здесь выполняется путём сравнения ASCII-кодов символов, порядок сортировки, таким образом, зависит от кодов символов.

Команда sort , в свою очередь, использует порядок сортировки, заданный в настройках системного языка.

Проверки файлов

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

-d file Проверяет, существует ли файл, и является ли он директорией.
-e file Проверяет, существует ли файл.
-f file Проверяет, существует ли файл, и является ли он файлом.
-r file Проверяет, существует ли файл, и доступен ли он для чтения.
-s file П роверяет, существует ли файл, и не является ли он пустым.
-w file Проверяет, существует ли файл, и доступен ли он для записи.
-x file Проверяет, существует ли файл, и является ли он исполняемым.
file1 -nt file2 Проверяет, новее ли file1 , чем file2 .
file1 -ot file2 Проверяет, старше ли file1 , чем file2 .
-O file Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.
-G file Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.

Эти команды, как впрочем, и многие другие рассмотренные сегодня, несложно запомнить. Их имена, являясь сокращениями от различных слов, прямо указывают на выполняемые ими проверки.

Опробуем одну из команд на практике:


Этот скрипт, для существующей директории, выведет её содержимое.


Вывод содержимого директории

Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.

Итоги

Сегодня мы рассказали о том, как приступить к написанию bash-скриптов и рассмотрели некоторые базовые вещи. На самом деле, тема bash-программирования огромна. Эта статья является переводом первой части большой серии из 11 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.

    — здесь речь идёт о том, как начать создание bash-скриптов, рассмотрено использование переменных, описаны условные конструкции, вычисления, сравнения чисел, строк, выяснение сведений о файлах.

— тут раскрываются особенности работы с циклами for и while.

— этот материал посвящён параметрам командной строки и ключам, которые можно передавать скриптам, работе с данными, которые вводит пользователь, и которые можно читать из файлов.

— здесь речь идёт о дескрипторах файлов и о работе с ними, о потоках ввода, вывода, ошибок, о перенаправлении вывода.

— этот материал посвящён сигналам Linux, их обработке в скриптах, запуску сценариев по расписанию.

— тут можно узнать о создании и использовании функций в скриптах, о разработке библиотек.

— эта статья посвящена работе с потоковым текстовым редактором sed.

— данный материал посвящён программированию на языке обработки данных awk.

— тут можно почитать об использовании регулярных выражений в bash-скриптах.

Этичный хакинг и тестирование на проникновение, информационная безопасность

Возникло желание написать мануал о консоли, базовых командах и азах файловой системы Linux. Когда я начинал своё знакомство с Linux именно такой инструкции мне не хватало. Надеюсь, абсолютным новичкам, которых пугают консольные команды, она поможет «влиться» в число умеющих использовать командную строку Linux.

Командная строка Linux

В зависимости от вашего Linux, ярлык для открытия консоли может быть вынесен на рабочий стол,


добавлен в избранные команды,


доступен в контекстном меню при клике правой кнопкой мыши в области рабочего стола.


Либо вы для вызова эмулятора терминала вы можете воспользоваться сочетанием клавиш CTRL + ALT + t.


TAB для автодополнения

При вводе команды или имени файла, обязательно используйте клавишу TAB – она автоматически допишет для вас команду или имя файла. Если при нажатии на TAB ничего не происходит, то быстро нажмите TAB два раза, чтобы увидеть все доступные варианты. Если варианты не выводятся, то это верный признак того, что: 1) вы неправильно начали вводить имя команды, 2) программа, которую вы намереваетесь запустить, ещё не установлена.

ENTER для запуска выполнения команд

Набрав команду, нажмите ENTER и после этого она запустится.

CTRL + c для прерывания выполнения программы

Если вы хотите оборвать выполнение команды, то используйте для этого сочетание клавиш CTRL + c. Если вы ввели команду, но передумали её запускать, то вместо удаления строки, можете также нажать CTRL + c.

↑ (курсорная клавиша вверх) для просмотра истории команд

Если вы хотите повторить выполнение команды, то клавишами ↑ и ↓ вы можете пролистать историю ранее введённых команд, выбрать любую из них для повторного выполнения, отредактировать перед запуском.

Азы файловой системы Linux

Если нужно прочитать какие-то данные или сохранить информацию в файл из консоли, нужно уметь указывать путь до файла. В файловой система Linux нет такого понятия как буквы дисков. Там используется понятие «корень». Обозначается корень символом /

После корня указываются папки (в Linux они называются директориями) и файлы. Одни папки могут быть вложены в другие – точно также как в Windows. Вложенные папки и файлы разделяются символом / (точно таким же как корень).

Пример указания пути до файла:

Эта запись означает, что файл book.txt находится в папке mial, а папка mial находится в папке home.

Базовые команды Linux

pwd для показа текущей рабочей директории

Откройте консоль и введите туда

У меня вывелось:

Здесь / (первый слеш) – это корень, home – это название папки (директории), далее / (второй слеш) – отделяет название вложенной папки, mial – название второй вложенной папки.

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

mkdir для создания новых директорий

После mkdir укажите название папки, которую вы хотите создать. Если вы укажите относительный путь, например, так:

То будет создана новая папка test1 в текущей рабочей директории, т.е. в моём случае путь до неё будет

Также можно указать абсолютный путь до папки:

ls для просмотра содержимого каталогов

Команда ls используется для вывода списка файлов и папок текущей рабочей директории:

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

Чтобы список выглядел лучше, можно использовать команду ls с опцией -l

После команды и опций можно указать путь до папки, содержимое которой вы хотим посмотреть. Чтобы увидеть содержимое директории /var/log нужно ввести:

Для просмотра содержимого корневой директории:

cd для перехода по папкам (смены текущей рабочей директории)

Для перехода по папкам используется команда cd после которой пишется директория, в которую вы хотите перейти. Можно указывать относительный путь или абсолютный:

Символ . (одна точка) означает текущую директорию, а символ .. (две точки) означаете родительскую директорию. Следовательно, для перехода на один уровень вверх нужно набрать

cp для копирования файлов

Если вам нужно скопировать файл в другую директорию, то используется команда cp. После неё указывается файл, который нужно скопировать и затем через пробел директория, куда вы хотите поместить файл, например:

Этой командой я скопировал файл test.sh в директорию test1. Проверим

mv для переименования и перемещения файлов.

После команды mv указывается имя файла, который вы хотите переименовать или переместить. Затем через пробел пишется директория, куда вы хотите переместить файл (тогда файл будет перемещён в неё с исходным именем), или директория и новое имя файла (тогда файл будет перемещён и переименован), или только новое имя файла (тогда файл будет переименован).

Файл test.sh из каталога test1 я переместил в каталог test2:

Файл test.sh в каталоге test2 я переименовал в test2.sh:

Файл test2.sh в каталоге test2 я переместил в каталог test1 и присвоил ему имя new.txt:

rm для удаления файлов и папок

Чтобы удалить наши тестовые директории, воспользуемся командой rm. После этой команды укажите путь до файла или папки, которые нужно удалить. Если вы собираетесь удалить директорию, то используйте также опцию -r, она означает рекурсивно удалять каталоги и их содержимое. Можно указать сразу несколько файлов и (или) каталогов:

Для понимания иерархии файловой системы рекомендуется ещё одна статья для новичков «Структура директорий Linux. Важные файлы Linux».

Как копировать текст в командной строке и как вставлять в командную строку Linux

Привычные сочетания клавиш Ctrl+c и Ctrl+v в терминале имеют другое действие. Для копирования нужно использовать Ctrl+Insert, а для вставки Shift+Insert.

Читайте также: