суббота, 28 сентября 2013 г.

Несколько полезных комбинаций клавиш для работы с консолью.

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

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

Бывает, что, написав длинную команду, вы допустили опечатку где-нибудь в середине. Довольно утомительно перемещать стрелками курсор, чтобы исправить ошибку. Гораздо удобнее использовать комбинации ALT+B, ALT+F, которые перемещают курсор на слово назад и на слово вперёд.

Удалить последнее слово в команде поможет CTRL+W. А удалить всю команду целиком - CTRL+U.

Чтобы прервать выполнение какой-либо программы, нажмите CTRL+C.
К примеру, давайте запустим команду yes. Это забавная программа бесконечно пишет в консоль символ y. Остановить её можно нажав CTRL+C.

Не обязательно пользоваться всеми вышеперечисленными командами, но CTRL+C запомнить следует.

Всем пока и удачи!

пятница, 27 сентября 2013 г.

Команда grep. Регулярные выражения.

Привет всем! Сегодня изучим команду grep, а также регулярные выражения.

Команда grep позволяет вывести все строки данного на вход файла, которые содержат некоторое слово:

grep слово имя_файла

Чтобы перейти к использованию этой команды, давайте сначала создадим файл мой_файл со следующим содержимым:


Это первая строка.
Вторая строка.
Это третья строка.
А это четвёртая.
Здесь будет несколько чисел: 100 2 35 4 38
Здесь ещё несколько: 2 3 5 21 13.
Лаллалаалааалала
А тут только одно: 123.
12345


Теперь введём в терминал:

grep строка мой_файл

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

Это первая строка.
Вторая строка.
Это третья строка.

То есть только те строки, где присутствует слово строка.
Поэкспериментируйте:

grep "2 3" мой_файл
grep 5 мой_файл
grep Здесь мой_файл
grep Это мой_файл 
grep это мой_файл
grep привет мой_файл

Как вы уже, возможно, догадались, второй аргумент может содержать пробельные символы. То есть, правильнее будет говорить, что это не слово, а подстрока (нечто лежащее внутри строки).

Скажу более, второй аргумент - это регулярное выражение! Регулярные выражения напоминают шаблоны, они тоже задают одним выражением целый набор строк.

Давайте поэтапно разберём конструкции регулярных выражений.

Символ . соответствует ровно одному любому символу. Это то же самое, что и ? в шаблонах. Попробуем:

grep ".то" мой_файл  (Если это регулярное выражение, то оно должно быть в кавычках!)

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

[] задают набор символов, аналогично как и в шаблонах:


grep "[Ээ]то" мой_файл

Если в скобках поставить ^, то это будет означать: "любой символ, кроме заданного набора". Это то же, что и ! в шаблонах:

grep "[^Ээ]то" мой_файл

А вот, что касается символа *, то он имеет совершенной иной смысл. Сама по себе звёздочка не означает какого либо символа. Она читается примерно так: "ноль или более повторений предыдущего символа". Приведу примеры:

ab*c   соответствует таким строкам: ac, abc, abbc, abbbc, abbbbc и так далее.
a[bc]*d   соответствует, например, таким: ad, abd, acd, abbd, accd, abcd, acbd, acbcd. Можно прочесть как: "Сначала a, затем любое количество символов b и c. В конце символ d"
.*   Можно прочесть как: "Любое количество любых символов". То есть, это соответствует любой строке, в том числе и пустой.

Давайте попробуем использовать звёздочку:

grep "[ал]*" мой_файл

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

grep "^З" мой_файл

Строчки, заканчивающиеся точкой, можно получить так:

grep "\.$" мой_файл   (Если мы имеем ввиду именно точку, а не любой символ, то мы должны писать \. , точно так же, как и в шаблонах)

Есть ещё пара символов.
+ - то же самое, что и звёздочка, только означает "один или более", вместо "ноль или более".
? похож на звёздочку, только читается как "один или ноль предыдущих символов", вместо "один или более предыдущих символов".

Кстати, с данными символами наоборот. Чтобы терминал их интерпретировал как управляющие нужно перед ними ставить \ (обратный слэш). Поизучайте эти символы самостоятельно.

Теперь, давайте напишем команду, которая выведет нам все строчки, которые, во-первых: не начинаются на цифру, а во-вторых: в конце записано несколько чисел, после которых возможно стоит одна точка:

grep "^[^0-9].*[0-9 ]\+.\?$" мой_файл   (примечание: диапазон задаётся так же, как и в шаблонах: знаком минус)

Разберём, что же здесь происходит.

^ - говорит нам о начале строки. Затем стоит ровно один символ, который не является цифрой: [^0-9]. Далее, ноль или более любых символов (.*). Потом, цифры и пробелы, которые встречаются один или более раз ([0-9 ]\+). Это соответствует числам,  записанным через пробелы. В конце строки у нас, возможно, есть точка (.\?$).

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

Если появилось желание углубиться в данную тему, советую почитать дополнительную информацию в интернете, а также в мануале: man regex (к сожалению, английский язык).

Всем пока и удачи в обучении!


понедельник, 23 сентября 2013 г.

Фигурные скобки. Шаблоны (Globbing).

Всем привет! Сегодня поговорим о том, что такое шаблоны и как ими пользоваться.

Давайте создадим 20 файлов с названиями file1, file2, ..., file20. Вы уже наверняка подумали о том, что это утомительное занятие. Нужно ввести аж 20 команд! Есть чуть более простой способ. Если вы читали документацию (мануал) по команде touch, то наверняка узнали, что ей можно передавать несколько аргументов, тогда она создаст файлы со всеми перечисленными названиями. Чуть лучше, но всё равно долго. Сейчас я вам покажу компактную команду, которая приводит нас к цели:

touch file{1..20}

Вуаля! Мы написали одну команду, а компьютер выполнил для нас все 20. Замечательно, не правда ли? Я посчитал, что проще не объяснять, как это работает, а показать несколько примеров:

touch {a..z}   (создаёт файлы с названиями a, b, c, ..., z)
touch {A..E}_file   (создаёт файлы с названиями A_file, B_file, C_file, D_file, E_file)
touch {A..C}{1..3} (создаст файлы с названиями из двух букв, где на первом месте будет стоять A, B или C, а на втором - одна из цифр 1, 2 или 3. Например: A1, B1, B2, C3 и так далее)

Отлично. Теперь давайте перейдём к рассмотрению шаблонов (Globbing).

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

Сначала удалим файлы вида fileX, которые были созданы в самом начале:

rm file*

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

rm *.txt   (удалит все файлы, которые заканчиваются на .txt . Читается как: любое количество любых символов, а затем .txt)
rm a*p (удалит файлы, названия которых начинаются на букву a и заканчиваются буквой p. Например aooop, aip, ap. Можно прочитать как: символ a, затем любое количество любых символов, а затем символ p)

Рассмотрим ещё один символ, который используется в шаблонах - знак вопроса:

rm ?   (удалит файлы, название которых состоит из одного символа)

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

rm abc?e   (можно прочитать как: сначала abc, затем один любой символ, затем e. Под этот шаблон подойдут, например, такие названия: abcde, abcee)

rm ???   (удалит все файлы, названия которых состоит ровно из трёх символов)

И последний элемент шаблонов - это квадратные скобки []:

rm [A-E]_file   (удалит файлы вида X_file)
rm [A-C][1-3]   (удалит файлы, которые мы создавали последними)

Как мы видим, [] очень похожи на {}. Только, чтобы указать диапазон, вместо двух точек используется минус. В квадратных скобках не обязательно должен быть диапазон значений, значения можно просто перечислить:

rm [abc]   (удалит файлы с названиями a, b и c)
rm [a-cA-D]   (удалит файлы с названиями: a, b, c, A, B, C, D)
rm a[0-3z]c   (читается как: сначала a, затем один символ из набора {0, 1, 2, 3, z}, затем символ c)

Как вы уже поняли, квадратные скобки задают набор символов, если в квадратных скобках первым символом поставить ! знак, это будет означать: "всё, кроме символов из набора". Посмотрим пример:

rm [!abc]   (удалит все файлы, кроме файлов с названием a, b и с)
rm [!a-zA-Z]*   (удалит все файлы, кроме тех, где на первом месте стоит латинская буква)

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

ls ???   (запустит ls для всех папок, которые имеют в названии ровно три символа)

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

P.S. Чтобы удалить файлы, где присутствуют символы \ (обратный слэш), [] (квадратные скобки), * (звёздочка), ? (знак вопроса) нужно брать имя файла в одинарные кавычки. Тогда все символы будут интерпретироваться так, как они написаны:

rm '[abc]'   (удалит файл с названием [abc] )

Можно также ставить перед специальными символами обратный слэш:

rm \[abc\]   ( \[ будет читаться как просто открывающаяся скобка, а \] - как закрывающаяся)

Соответственно \\ - будет считаться просто одним обратным слэшем, \? - знаком вопроса, \* - звёздочкой.

пятница, 20 сентября 2013 г.

Несколько полезных консольных команд.

В этом посте будет перечислено ещё несколько полезных консольных команд.

  1. sudo poweroff
  2. sudo reboot
  3. sudo apt-get dist-upgrade
  4. sudo apt-get install -f
  5. wget url
  6. sudo dpkg -i package.deb
1. Выключает компьютер.
2. Перезагружает компьютер.
3. Обновляет не только пакеты программ, но и саму систему.
4. Бывает ситуация, что зависимости между пакетами нарушились, эта команда пытается исправить их.
5. Команда wget позволяет скачать файл по указанной ссылке в текущую папку.
6. Иногда нужно установить программу не из репозитория, а скачать пакет и установить его. К примеру, Google Chrome нету в репозитории. По этой ссылке предлагается скачать пакет. Скачиваем его, переходим в папку где он находится, вводим команду:

sudo dpkg -i google-chrome-stable_current_i386.deb

На момент написания статьи пакет назывался так. Возможно, что у вас он будет называться по-другому. Кстати, пакеты для Ubuntu всегда имеют расширение .deb .
В качестве упражнения, предлагаю с этих пор включать и выключать компьютер только при помощь приведённых здесь команд и хотя бы по разу использовать остальные команды.

Всем пока и удачи!

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

Ещё про apt-get. Что такое sudo.

Приветствую!

Мы уже изучили, что такое опции и аргументы, поэтому теперь мы можем ответить на некоторые вопросы связанные с менеджером пакетов. Рассмотрим несколько команд:

  1. sudo apt-get install program-name
  2. sudo apt-get remove program-name
  3. sudo apt-get upgrade
  4. sudo apt-get update
Давайте пока не будет обращать внимания на слово sudo. Мы рассматривали программы, которые сами по себе являются одной командой. В этом смысле apt-get немного особенный. apt-get - это программа, которая в своём составе имеет несколько команд. install, remove, upgrade, update - это команды. Первые две требуют наличия аргумента, а вторые две - нет.

Можно это рассматривать немного с другой стороны, считать, что install, remove, upgrade, update - это опции (опции не всегда имеют вид -x), а program-name - это аргумент опций.

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

Наконец, вкратце разберём, что такое sudo. Linux очень сильно печётся о безопасности системы, мы можем видеть это на примере ввода пароля: не видно даже сколько знаков в пароле пользователя!

В Linux наложены ограничения на различные действия пользователя. К примеру, если вы захотите отредактировать какой-нибудь системный файл (тот же /etc/apt/source.list), у вас ничего не выйдет, вы можете открыть файл только для чтения.

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

Можете почитать дополнительную информацию по данным вопросам тут и тут.
Не забываем, что информацию по какой-либо команде почти всегда можно получить в мануале:

man sudo

На сегодня всё. Всем пока!

Менеджер пакетов.

В прошлый раз мы научились пользоваться текстовыми редакторами. После предыдущего урока вы должны были определиться: Vim или Nano. В своих примерах я буду использовать Vim. Чтобы открыть тот же файл в редакторе Nano, просто заменяем слово vim на nano.

Во втором уроке мы научились устанавливать и удалять приложения. Это делается с помощью команды apt-get. Давайте лучше разберёмся что такое программа.

На самом деле все программы являются командами. То есть, когда мы устанавливаем новую программу, в нашей системе появляется новая команда. Объясню более наглядно:

username@computername:~$ some-program
someprogram: команда не найдена
username@computername:~$ sudo apt-get install some-program

будем считать, что программа some-program существует в репозитории, и что мы её успешно установили, после этого команда:

username@computername:~$ some-program

должна запустить программу some-program.

Кстати, программа apt-get называется пакетным менеджером. И правильнее говорить, что мы устанавливаем не программу, а пакет. Какая разница, спросите вы? Дело в том, что программа может состоять из нескольких пакетов. Благодаря пакетному менеджеру волноваться об этом нам не приходится. Мы просим установить пакет, название которого обычно совпадает с названием программы, а apt-get устанавливает автоматически все зависимости.

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

sudo apt-get autoremove

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

Менеджер пакетов может искать пакеты не только в одном репозитории, а в нескольких сразу. В файле /etc/apt/source.list содержится список просматриваемых репозиториев. Можно посмотреть этот файл:

vim /etc/apt/source.list

Мы можем добавить туда репозиторий, который нам нужен, а затем ввести команду:

sudo apt-get update

Теперь менеджер пакетов будет учитывать и новые репозитории при поиске нужного пакета.

Более подробно о репозиториях вы можете прочитать здесь.

Всем пока и удачи в обучении!

Редактируем файлы.

Доброго времени суток!

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

Давайте напишем:

nano Мой_файл

nano - это консольный текстовый редактор. Данной командой он откроет файл с именем Мой_файл. Если такого файла не существует, то создастся новый.

Если терминал нам ответит чем-то вроде: "nano: команда не найдена", то мы знаем, что нужно делать:

sudo apt-get install nano   (установим nano)

Данный редактор крайне простой, работать в нём не сложнее, чем в программе для Windows "Блокнот". Внизу описаны подсказки горячих клавиш. Например, чтобы выйти нужно нажать CTRL+X, чтобы записать файл CTRL+O и так далее. Вы можете почитать помощь о данном редактор, нажав CTRL+G.

Существует один очень мощный текстовый редактор, который называется Vim. Он довольно популярен среди пользователей ОС Linux, так как позволяет быстро производить многие операции над текстом. Главный недостаток Vim - это то, что процесс работы в нем крайне специфичный. Чтобы научиться им свободно пользоваться, придётся довольно долго привыкать. Я не принуждаю вас использовать именно Vim для редактирования текста, но попробовать его непременно стоит:

sudo apt-get install vim

Прежде, чем начать пользоваться Vim'ом, пройдите урок на русском языке:

vimtutor ru

Урок довольно увлекательный, он отнимет у вас 20-30 минут, не больше.

Успехов в обучении!