Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2020

Подсказки к практикуму 5

Про форматирование wiki

Самое главное, что следует помнить при работе с wiki-страницами:

https://kodomo.fbb.msu.ru/wiki/Users/somestudent/pr3

Ещё более правильный способ: сделать сначала ссылку на основной странице, а потом перейти по этой ссылке (см. п. 3 в инструкции). На открывшейся странице будет гиперссылка, ведущая к редактору кода новой страницы, по этой гиперссылке и надо пройти.

Команды history и exit

Команда history показывает вам последние 500 команд, которые вы выполняли.

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

Чтобы команда history работала корректно, необходимо приучить себя, закончив работу на kodomo, не закрывать окно, а выполнять команду exit.

Права пользователей на файл

Выдача команды ls -l

(Здесь вертикальная черта — это "зл малое", а не "ай большое" или знак конвейера)

В выдаче команды ls -l каждая строка посвящена одному файлу. Пример такой строки:

drwxr-xr-x 4 sas preps    96 Oct  1 16:25 term1

Здесь первое d показывает, что это не обычный файл, а директория (для обычного файла строка начинается с дефиса -)

Напоминаю, что слова "директория", "папка", "фолдер" и "каталог" — синонимы, обозначают одно и то же

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

Буква w на третьей позиции показывает, что пользователь sas (владелец этого файла) может менять содержимое этой директории (убирать и добавлять файлы в ней). Дефис на шестой позиции показывает, что другие члены группы preps это делать не могут, а дефис на девятой — что это не могут делать пользователи, не входящие в группу preps.

Буквы x на четвёртой, седьмой и десятой позициях показывают, что все пользователи могут входить в эту директорию (т.е. делать её активной).

Вообще позиции 2,3,4 показывают права владельца, 5,6,7 — права членов группы, за исключением владельца, а 8,9,10 — права всех остальных пользователей системы. Как правило, на позициях 2,5,8 может стоять либо r, либо -, на позициях 3,6,9 — w либо -, на позициях 4,7,10 — x либо -. Буква r означает право на чтение (read), буква w — право на запись (изменение, удаление, write), буква x для директорий — право на вход, для обычных файлов — право на исполнение как программы (execution).

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

Как менять права на файл

Владелец файла может поменять права на него. Команды:

chmod +r <имя файла>
chmod +w <имя файла>
chmod +x <имя файла>

дадут (сразу всем пользователям) права на, соответственно, чтение, изменение, исполнение файла (для директории вместо права на исполнение, как всегда, право на вход).

Команды:

chmod -r <имя файла>
chmod -w <имя файла>
chmod -x <имя файла>

отнимут соответствующие права (тоже сразу у всех).

Если хотите поменять права не всем, то перед + или - надо поставить букву u для себя (user), g для группы (group) и o для остальных (other). Например, команда:

chmod o-r mysecrets

сделает файл (или каталог) mysecrets недоступным для просмотра всем, кроме членов группы-владельца.

chmod u-w valuable-info.txt

закроет вам файл valuable-info.txt на запись. После этого вы (пока снова не откроете его с помощью u+w) не сможете его случайно изменить или стереть. Это бывает полезно.

Не меняйте права на свою домашнюю директорию и вообще ни на какую директорию из пути к credits! Такое может вылиться в невозможность проверить ваши домашние задания!

Что такое сценарий

Сценарий по-английски script и в устной речи чаще всего именуется "скрипт". Но в курсовых, отчётах, презентациях, на постерах и т.п. надо таки писать "сценарий".

Сценарий — это исполняемый текстовый файл, каждая строка которого представляет собой команду bash. Делается он так: в любом тестовом редакторе открываете или заводите файл (например, script.sh), пишете команды, сохраняете, а затем делаете исполняемым командой

chmod +x script.sh

Чтобы запустить сценарий, необходимо в командной строке прописать путь к нему, абсолютный или относительный. Например, если файл со сценарием script.sh лежит в текущей директории, то так:

./script.sh

Просто краткое имя не сработает!

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

Объяснение следующее. Кто-нибудь (злоумышленник?) может создать исполняемый файл с именем, например, ls. Допустим, что файлы можно исполнять по краткому имени. Тогда пользователь, который перешел в папку с файлом ls, запустит этот файл на исполнение, сам того не желая, просто попытавшись выполнить команду ls.

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

— ИР

Про расширения

С точки зрения системы совершенно неважно, как называется файл со сценарием, его имя может и не заканчиваться на .sh.

Но настоятельно рекомендуется давать файлам со bash-сценариями имена, кончающиеся либо на .sh, либо на .bash. Вообще часть имени файла после последней точки называется "расширение". В командной строке Linux правильные расширения нужны прежде всего самому пользователю, чтобы ориентироваться в своих файлах. Но есть и другие преимущества правильных расширений, в частности, некоторые редакторы выделяют цветом некоторые ключевые слова и комментарии в правильно названных сценариях, что помогает их редактировать. Во многих графических интерфейсах (в частности, в Windows) расширение подсказывает системе, что делать с файлом при обращении к нему.

Комментарии в сценарии

Строка, начинающаяся со знака # (решётка, она же диез) при исполнении сценария будет проигнорирована. Это используется прежде всего для написания комментариев, а также для быстрого изменения туда-обратно поведения сценария (добавляя решётку в начало, выключаем строку так, чтобы её можно было потом быстро включить обратно).

Текстовые и бинарные файлы

Любой файл надо представлять себе в виде последовательности битов (то есть позиций, принимающих два значения, например 0 и 1).

Файлы делятся на текстовые и бинарные. Содержимое текстовых файлов естественным образом разбивается на байты, то есть группы по 8 бит в каждой. Поскольку (почти) каждому байту соответствует символ, содержимое текстовых файлов можно просматривать глазами и править руками. Бинарные файлы — это все остальные.

Большинство файлов, с которыми приходится иметь дело в биоинформатике — текстовые. Текстовые файлы могут иметь разный формат, например fasta — для хранения биологических последовательностей вместе с их кратким описанием, PDB — для хранения пространственных структур биомолекул, HTML — для страниц с гипертекстом (чаще всего это веб-страницы, доступные через интернет) и т.д. Файлы, с которыми обычно работают программы MS-Word, MS-Excel и многие другие — бинарные. Также бинарными являются большинство файлов с изображениями, в форматах JPEG, PNG, GIF (но не все, например формат PostScript — текстовый).

Имеется некоторая путаница в терминологии. "Текстовыми" часто называют частный случай текстовых файлов, а именно файлы с расширением "txt"; как правило это файлы без какого-то особого формата, предназначенные исключительно для чтения человеком. Аналогично, когда говорят "бинарный файл", иногда имеют в виду исполняемый файл с программой на машинном языке.

Программы less, grep, wc, а также все текстовые редакторы предназначены для работы с текстовыми файлами (можете попробовать и с бинарными, но ничего хорошего, скорее всего, не получится). В частности, не получится нормально работать этими программами с графическим файлом или с файлом с расширением docx, созданном в MS-Word.

Конец строки в текстовых файлах

Текстовый файл — это последовательность байтов. Тем не менее, при просмотре его (например, через less) мы видим содержимое разбитым на строки. Это происходит потому, что есть специальный байт, указывающий на конец строки, в Linux это 00001010 в двоичной записи (0A в шестнадцатиричной, числовое значение десять). Сам этот байт не отображается, но все последующие символы пишутся с новой строки.

К сожалению, в текстовых файлах, созданных под Windows или Mac, признаки конца строки другие. В частности, под Windows в конце каждой строки находятся два байта 0D 0A (часто их обозначают CR LF) подряд, это называется кодировкой DOS. Из-за этого если созданный под Windows текстовый файл перебросить на Linux-машину, не все программы будут воспринимать его правильно, а именно, первый из этих двух байтов будет восприниматься как (невидимая) буква, "прилипшая" к концу каждой строки. Особенно это вредно для сценариев (байт 0D, он же CR, он же \r, воспринимается как часть команды). К счастью, редактор nano умеет избавляться от этих байтов при сохранении файла (есть и другие способы).

Историческая причина возникновения двух байтов в конце строки такая: когда-то мониторов не было и файлы печатались исключительно на бумаге через принтер. Байт 0D (Carriage return, CR) служил командой принтеру на "возврат каретки", то есть перевод печатающей головки к левому краю листа, а байт 0A (Line feed, LF) — командой протянуть бумагу на одну строку вперёд. В принципе можно было (да и сейчас можно) сделать одну операцию без другой. При создании UNIX (которому наследует Linux) было решено в файлах заменить два байта на один 0A, имея в виду, что при выводе на экран он будет командой сразу и сменить строку, и продолжить печать с крайней левой позиции

Редакторы

Каждый из трёх редакторов можно запустить командой <название редактора> <имя файла>, например nano new.txt. Файл может быть как уже существующий, так и новый.

nano

При работе в nano внизу экрана видна подсказка по доступным командам. Понимать её надо так: если написано, например, ^A, то имеется в виду одновременное нажатие клавиш Ctrl и A (то есть Ctrl+A), а если написано M-A, то имеется в виду Alt+A. В частности, выход из редактора — это Ctrl+X. В некоторых ситуациях nano задаёт вопросы, например про имя файла. Утвердительный ответ — это просто Enter. Но вообще соображайте по смыслу предлагаемых опций, всё достаточно интуитивно. Подробнее можно почитать здесь.

mcedit

При работе с mcedit внизу экрана тоже видна подсказка из 10 возможных команд с числами перед ними. Эти числа — номера функциональных клавиш (F1, F2, ..., F10, самый верхний ряд стандартной клавиатуры). Если на вашем ноутбуке функциональные клавиши отсутствуют или плохо доступны, то вместо F1 можно последовательно нажать сначала Esc, потом 1, вместо F2Esc потом 2 и т.д. (вместо F10 работает два раза Esc).

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

Преимуществом mcedit можно считать то, что в нём обычно невидимый байт CR (он же \r, шестнадцатиричный код 0D), который появляется в конце каждой строки в файле, сделанном под Windows, виден как ^M. Тем самым файл в кодировке DOS сразу можно отличить от файла в кодировке Linux.

vim

Первое, что надо знать про vim — как из него выйти.

Дело в том, что иногда можно открыть файл в vim'е случайно. Например, если у вас открыт файл в программе less, то клавиша v откроет тот же файл в редакторе по умолчанию. А на kodomo редактор по умолчанию — это как раз vim...

Так вот, чтобы выйти из vim, надо нажать последовательно клавиши Esc : q ! Enter. Это будет выход без сохранения изменений в файле. Если вы внесли какие-то изменения и хотите их сохранить при выходе, то надо нажать Esc и затем два раза Shift+Z.

Второе, что надо знать — что у vim несколько режимов, главные из которых — командный режим и режим вставки. Когда вы запускаете vim, он оказывается в командном режиме, в котором просто набирать текст нельзя (каждая клавиша — это какая-нибудь команда, а вовсе не вставка буквы). Чтобы перейти в режим вставки, нужно нажать клавишу i.

Прежде чем осваивать vim, настоятельно рекомендуется настроить его на более удобный стиль (иначе это будет на порядок труднее).

Про самую базовую настройку Vim написано здесь. Написано было для предыдущего курса, но я думаю, что вы сможете все правильно интерпретировать :-)

Если решите осваивать, то советую начать с vimtutor. Это команда, которая создаст в текущей папке файл с ознакомительными заданиями и откроет его в Vim для редактирования. Запускать можно без аргументов.