Два в одном: как пользоваться vim и nano?

Moving within a File

To move around within a file without affecting your text, you must be in the command mode (press Esc twice). The following table lists out a few commands you can use to move around one character at a time −

Sr.No. Command & Description
1

k

Moves the cursor up one line

2

j

Moves the cursor down one line

3

h

Moves the cursor to the left one character position

4

l

Moves the cursor to the right one character position

The following points need to be considered to move within a file −

  • vi is case-sensitive. You need to pay attention to capitalization when using the commands.

  • Most commands in vi can be prefaced by the number of times you want the action to occur. For example, 2j moves the cursor two lines down the cursor location.

There are many other ways to move within a file in vi. Remember that you must be in the command mode (press Esc twice). The following table lists out a few commands to move around the file −

Уменьшение логических томов[править]

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

ВНИМАНИЕ! Шаги 2 и 3 очень часто путают местами, что приводит к потере данных, хранящихся на логическом томе.

Делается это все так:

1. Размонтируем файловую систему: umount /dev/fileserver/samba

2. Уменьшаем размер файловой системы. Для этого сначала сделаем проверку самой файловой системы. Утилита resize2fs не даст изменить размер до выполнения проверки. Конечно, у нее есть ключ -f, который заставит ее это сделать, но лучше перестраховаться и все-таки выполнить проверку:

# fsck.ext4 -f /dev/fileserver/samba
 e2fsck 1.41.5 (23-Apr-2009)
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 /dev/fileserver/samba: 11/127512 files (0.0% non-contiguous), 26603/512000 blocks
 # resize2fs /dev/fileserver/samba 300M
 resize2fs 1.41.5 (23-Apr-2009)
 Resizing the filesystem on /dev/fileserver/samba to 307200 (1k) blocks.
 The filesystem on /dev/fileserver/samba is now 307200 blocks long

3. ТОЛЬКО после корректного выполнения двух предыдущих шагов уменьшаем размер логического тома:

 # lvreduce -L 300M /dev/fileserver/samba
  WARNING: Reducing active logical volume to 300.00 MB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
  Do you really want to reduce samba? [y/n]: y
  Reducing logical volume samba to 300.00 MB
  Logical volume samba successfully resized

В качестве размера тома (ключ -L), как и в случае с lvextend можно указывать и абсолютные и относительные единицы. Здесь мы также видим страшное предупреждение о потере данных. Несмотря на это (если вы не используете тестовые версии программ), ваши данные будут в целости и сохранности (скорее всего 🙂 , 100% гарантии вам все равно никто не даст).

После этого монтируем файловую систему и смотрим что поменялось:

# mount /dev/fileserver/samba /mnt/data/
# df -h
 Filesystem Size Used Avail Use% Mounted on
 /dev/mapper/fileserver-samba
            291M 11M 266M 4% /mnt/data

Итак, если вы все делаете в указанной последовательности, вашим данным скорее всего ничего не грозит. Но лучше перед уменьшением тома все-таки сделать его резервную копию. Я сам многократно уменьшал физические тома без каких-либо потерь данных, но наличие резервной копии — это наличие резервной копии :).

Saving and Exiting

There are a few ways to go about doing this. They all do essentially the same thing so pick whichever way you prefer. For all of these, make sure you are in edit mode first.

If you are unsure if you are in edit mode or not you can look at the bottom left corner. As long as it doesn’t say INSERT you are fine. Alternatively you can just press Esc to be sure. If you are already in edit mode, pressing Esc does nothing so you won’t do any harm.

  • ZZ (Note: capitals) — Save and exit
  • :q! — discard all changes, since the last save, and exit
  • :w — save file but don’t exit
  • :wq — again, save and exit

Most commands within vi are executed as soon as you press a sequence of keys. Any command beginning with a colon ( : ) requires you to hit <enter> to complete the command.

Save and exit the file you currently have open

Текстовый редактор Vim

По началу Вим оставляет весьма странные ощущения, ведь вы попросту не можете понять, как вообще работает этот редактор. То он вообще не реагирует на нажатия клавиш, то делает какие-то странные вещи. Например, вы пытаетесь написать door, а в результате получаете or да еще и в новой строке. Удалив это вы вновь пытаетесь ввести новое слово, но теперь редактор ведет себя адекватно и вы видите введенное вами слово, а потом снова какие-то непонятки.

Спустя несколько попыток разобраться, как это работает, и бесчисленное количество матерных слов ты идешь в интернет и узнаешь, что Vim — двухрежимный редактор. Писать текст здесь можно только в режиме ввода (INSERT), для перехода в который следует нажать кнопку i или Insert.

Основной же режим, для выхода в который используется Esc, здесь предназначен для ввода, как тебе на первый взгляд кажется, хоткеев. Причем состоять они могут всего из одной клавиши: w — передвигает курсор к следующему слову, 0 — в начало строки, $ — в конец строки, A переводит курсор в конец строки и переключает редактор в режим ввода, u — аналог Ctrl-Z в нормальных редакторах.

Погуглив еще немного, ты обнаруживаешь, что есть также «хоткеи» из двух и более последовательных нажатий. Такие, как, например, dd, который удаляет всю строку и dw, удаляющий слово, gg и GG, которые перемещают курсор в начало и конец документа.

Немного привыкнув, ты уже можешь кое-как прыгать между режимами и вводить эти странные хоткеи — они даже начинают казаться тебе удобными, но один вопрос все-таки тебя не покидает:

«Хоткеи» Vim действительно удобны благодаря своей лаконичности, но разве необходимость переключения между режимами не убивает все их удобство? Разве не проще нажимать пусть и требующие больше движений горячие клавиши в нормальных редакторах, чем мотаться взад-вперед между режимами? Да, может быть сорок лет назад, когда на клавиатурах не было Ctrl и Alt, это и было оправдано, но сейчас-то зачем?

Так и заканчивает знакомство с Vim среднестатистический пользователь. Некоторое время он, конечно, еще потратит на то, чтобы найти выход, но затем забудет как страшный сон и вернется к своему любимому Sublime. А уж в условиях сурового сервера и nano сойдет.

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

23 мая 2017 года вопрос «Как выйти из Vim набрал один миллион просмотров на StackOverflow»

Operation Modes

While working with the vi editor, we usually come across the following two modes −

  • Command mode − This mode enables you to perform administrative tasks such as saving the files, executing the commands, moving the cursor, cutting (yanking) and pasting the lines or words, as well as finding and replacing. In this mode, whatever you type is interpreted as a command.

  • Insert mode − This mode enables you to insert text into the file. Everything that’s typed in this mode is interpreted as input and placed in the file.

vi always starts in the command mode. To enter text, you must be in the insert mode for which simply type i. To come out of the insert mode, press the Esc key, which will take you back to the command mode.

Hint − If you are not sure which mode you are in, press the Esc key twice; this will take you to the command mode. You open a file using the vi editor. Start by typing some characters and then come to the command mode to understand the difference.

Дальше — больше

Приведенной выше информации вполне достаточно, чтобы открывать, редактировать и сохранять файлы в текстовом редакторе Vim, однако у него есть возможности, которые могут существенно упростить и ускорить работу. Стоит начать с пояснения: Vi был одним из первых визуальных текстовых редакторов, однако начиная с определенной версии программный продукт стал доступен только под коммерческой лицензией. Энтузиасты начали разрабатывать свои аналоги этого текстового редактора, одним из которых является Vim (сокращение от Vi Improved — Vi  усовершенствованный). Vim получил широкое распространение в *nix-дистрибутивах и при запуске команды vi в консоли вероятнее всего откроется именно он.

Прежде всего нужно понять, что Vim может работать в нескольких режимах, каждый из которых обладает своими особенностями и набором поддерживаемых функций. Сразу после запуска редактора вы окажетесь в обычном режиме (normal). Здесь можно не только перемещать курсор по тексту, но и выделять/удалять/копировать/вставлять как отдельные символы, так и целые блоки текста. Эти задачи выполняются нажатием соответствующих букв и цифр (причем регистр букв имеет значение), точка отсчета — текущее положение курсора. Рассмотрим навигацию по файлу:

  • h — смещение курсора на один символ влево;
  • j — смещение курсора на один символ вниз;
  • k – смещение курсора на один символ вверх;
  • l – смещение курсора на один символ вправо;
  • w – смещение курсора в начало следующего слова в данной строке;
  • b – смещение курсора в начало предыдущего слова в данной строке;
  • G – переместить курсор в конец файла;
  • gg – вернуться в начало файла.

Действия навигации также можно совмещать с цифрами, например, комбинация 3w сместит курсор вперед на три слова, а 5k на пять строк вверх.

Часто используемые операции c текстом:

  • x — удалить символ под курсором;
  • d — удалить символы/строки;
  • dd — удалить строку целиком;
  • D — удалить символы от текущего положения курсора до конца строки;
  • v — включить режим выделения текста;
  • y — скопировать символы/строки;
  • yy — скопировать строку целиком;
  • p — вставить символы/строки;
  • u — отменить последнее действие.

Функции удаления и копирования требуют дополнительного пояснения, ведь при нажатии d или y вроде бы ничего не происходит. Дело в том, что редактор ожидает дальнейших указаний — сколько строк символов нужно удалить/скопировать и в каком направлении от текущего положения курсора вести отсчет. Чтобы удалить пять символов вправо от курсора, нужно последовательно нажать d5l, чтобы скопировать три строки, следующие после курсора — y5j. Если имеется выделенный текст, для его копирования достаточно нажать y.

Имеется в Vim и функция поиска:

  • /шаблон — все вхождения набора символов, указанного после (слэша) будут подсвечены в тексте;
  • n — сместить курсор к следующему вхождению;
  • N — сместить курсор к предыдущему вхождению.

Другой режим работы Vim — режим редактирования. Переключиться в него можно несколькими способами:

  • i — режим вставки (INSERT), ввод начинается с позиции курсора;
  • a — режим вставки (INSERT), ввод начинается с позиции, следующей за курсором;
  • A — режим вставки (INSERT), курсор перемещается в конец текущей строки;
  • R — режим замены (REPLACE), все вводимые символы будут последовательно заменять находящиеся под курсором.

Если нужно заменить всего один символ, находящийся под курсором, достаточно нажать r и нужный символ — замена будет произведена без перехода в режим редактирования. Внизу экрана появляется соответствующий индикатор режима — INSERT или REPLACE. Вернутся в общий режим можно нажатием кнопки Esc (индикатор должен пропасть).

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

  • :q — выйти из редактора;
  • :q! — выйти из редактора без сохранения изменений в файле;
  • :w — сохранить изменения в файл;
  • :wq — сохранить изменения и закрыть редактор;
  • :r имя_файла — добавить содержимое указанного файла в редактируемый;
  • :r! команда_консоли — выполнить команду и добавить ее вывод в файл.

Set Commands

You can change the look and feel of your vi screen using the following :set commands. Once you are in the command mode, type :set followed by any of the following commands.

Sr.No. Command & Description
1

:set ic

Ignores the case when searching

2

:set ai

Sets autoindent

3

:set noai

Unsets autoindent

4

:set nu

Displays lines with line numbers on the left side

5

:set sw

Sets the width of a software tabstop. For example, you would set a shift width of 4 with this command — :set sw = 4

6

:set ws

If wrapscan is set, and the word is not found at the bottom of the file, it will try searching for it at the beginning

7

:set wm

If this option has a value greater than zero, the editor will automatically «word wrap». For example, to set the wrap margin to two characters, you would type this: :set wm = 2

8

:set ro

Changes file type to «read only»

9

:set term

Prints terminal type

10

:set bf

Discards control characters from input

Word and Character Searching

The vi editor has two kinds of searches: string and character. For a string search, the and ? commands are used. When you start these commands, the command just typed will be shown on the last line of the screen, where you type the particular string to look for.

These two commands differ only in the direction where the search takes place −

  • The command searches forwards (downwards) in the file.

  • The ? command searches backwards (upwards) in the file.

The n and N commands repeat the previous search command in the same or the opposite direction, respectively. Some characters have special meanings. These characters must be preceded by a backslash (\) to be included as part of the search expression.

Sr.No. Character &Description
1

^

Searches at the beginning of the line (Use at the beginning of a search expression).

2

.

Matches a single character.

3

*

Matches zero or more of the previous character.

4

$

End of the line (Use at the end of the search expression).

5

Starts a set of matching or non-matching expressions.

6

<

This is put in an expression escaped with the backslash to find the ending or the beginning of a word.

7

>

This helps see the ‘<‘ character description above.

The character search searches within one line to find a character entered after the command. The f and F commands search for a character on the current line only. f searches forwards and F searches backwards and the cursor moves to the position of the found character.

The t and T commands search for a character on the current line only, but for t, the cursor moves to the position before the character, and T searches the line backwards to the position after the character.

Командный и визуальный режимы Vim

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

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

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

Такая команда заменит первое встреченное в текущей строке слово Windows на Linux. Чтобы заменить все слова Windows на Linux в текущей строке можно использовать модификатор g:

А вместо искомого слова использовать регулярное выражение:

Операцию замены можно расширить на весь файл указав перед командой знак процента:

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

Или на текст между двумя метками:

Удобнее всего использовать командный режим сочетании с визуальным. Последний представляет собой режим выделения, которого не было в редакторе Vi. Работает он так: вы переходите на строку, с которой хотите начать выделение текста, затем нажимаешь v (или Shift+V для построчного выбора) и выделяете текст с помощью любых стандартных команд перемещения (например, } чтобы выделить текущий абзац). Затем вы можете либо выполнить команду редактирования (например, d, чтобы удалить выделенный текст), либо перейти в командный режим и выполнить над ним более сложную операцию.

Визуальный режим Vim

Вторая из наиболее часто используемых команд — :g. Это встроенный grep, с помощью которого можно искать строки и выполнять над ними действия. Например, следующая команда удалит все строки, содержащие Windows во всем файле:

А такая команда удалит все пустые строки (содержащие только пробелы):

Следующая команда удалит пустые строки (не содержащие ни одного символа) в HTML-таблице:

/,/

/g/^$/d

Строки можно перемещать, например, чтобы переместить все строки, содержащие «Windows», в конец файла, набирай:

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

С ее помощью удобно вставлять в текст содержимое других файлов или вывод команд Unix. Например, так можно вставить в текст содержимое файла todo.txt:

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

Если добавить к r восклицательный знак — она вставит в текст вывод указанной команды:

Когда ты пишешь статью в «Хакер» с кучей цитат из вывода команд, такая функция становится просто незаменимой.

Vim позволяет не только читать вывод команд Unix, но и отправлять текст им на вход. Например, следующая команда отсортирует строки с 1 по 10 с помощью sort:

Отсортировать весь файл:

Прогнать файл через форматтер fmt:

Конечно же, все это работает в том числе в визуальном режиме.

Увеличение и уменьшение группы томов[править]

Следующая возможность LVM — это возможность дополнять группу томов новыми физическими томами (например, если уже не хватает имеющихся) и выводить из группы не нужные больше физические тома (например, скорая поломка диска или замена оборудования). Лично я видел на форумах, что некоторые таким образом даже переносят работающую систему с одного диска на другой.

Давайте вернемся к нашему примеру. Допустим нам перестало хватать места в нашей группе томов и мы ее хотим дополнить новыми физическими томами. Делается это командой vgextend:

 # vgextend fileserver /dev/sdb6
  Volume group "fileserver" successfully extended
 # vgdisplay fileserver
  --- Volume group ---
  VG Name fileserver
  System ID
  Format lvm2
  Metadata Areas 3
  Metadata Sequence No 5
  VG Access read/write
  VG Status resizable
  MAX LV 0
  Cur LV 1
  Open LV 1
  Max PV 0
  Cur PV 3
  Act PV 3
  VG Size 1.99 GB
  PE Size 4.00 MB
  Total PE 510
  Alloc PE / Size 75 / 300.00 MB
  Free PE / Size 435 / 1.70 GB
  VG UUID SZLgLK-b9V8-RiZV-gH5i-N0pA-2ppf-axLqfO

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

Следующая операция, которую тоже можно делать с LVM — это уменьшение группы томов. Прежде чем вывести физический том из группы — его необходимо освободить от данных. Первое, что тут следует сделать в данном случае — это убедиться, что дискового пространства, которое останется в группе, хватит для размещения этих данных. Разработчики LVM пока не владеют методами размещения данных в астральном пространстве, но работа над этим ведется :). Итак, посмотреть это можно командой pvscan:

 # pvscan
 PV /dev/sdb1 VG fileserver lvm2 [476.00 MB / 176.00 MB free]
 PV /dev/sdb5 VG fileserver lvm2 [476.00 MB / 476.00 MB free]
 PV /dev/sdb6 VG fileserver lvm2 [1.06 GB / 1.06 GB free]

Здесь мы видим, что реально сейчас используется только первый физический том — /dev/sdb1. И еще мы тут видим один интересный аспект работы LVM: если какой-то логический том можно разместить на отдельном физическом целиком — LVM выберет именно этот путь.
Кстати, под словом free команда pvscan подразумевает не свободное от данных пространство, а пространство не выделенное в логические тома.
Итак, для освобождения физических томов от данных и размещения их на других физических томах той же группы есть команда pvmove:

 # pvmove /dev/sdb1
 /dev/sdb1: Moved: 100.0%

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

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

Вывод команды pvscan теперь выглядит вот так:

 # pvscan
  PV /dev/sdb1 VG fileserver lvm2 [476.00 MB / 476.00 MB free]
  PV /dev/sdb5 VG fileserver lvm2 [476.00 MB / 476.00 MB free]
  PV /dev/sdb6 VG fileserver lvm2 [1.06 GB / 788.00 MB free]

Как мы видим, теперь наш логический том «уехал» на другой раздел диска. Причем этот том смонтирован и с ним в этот момент могут работать пользователи.

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

# vgreduce fileserver /dev/sdb1
 Removed "/dev/sdb1" from volume group "fileserver"
# pvscan
 PV /dev/sdb5 VG fileserver lvm2 [476.00 MB / 476.00 MB free]
 PV /dev/sdb6 VG fileserver lvm2 [1.06 GB / 788.00 MB free]
 PV /dev/sdb1               lvm2 

Теперь мы видим, что наш физический том /dev/sdb1 «осиротел» и больше не принадлежит ни одной группе.

Other ways to view files

vi allows us to edit files. If we wanted, we could use it to view files as well, but there are two other commands which are a bit more convenient for that purpose. The first one is cat which actually stands for concatenate. It’s main purpose is to join files together but in it’s most basic form it is useful for just viewing files.

cat <file>

If you run the command cat, giving it a single command line argument which is the file we just created, you will see it’s contents displayed on the screen, followed by the prompt.

If you accidentally run cat without giving it a command line argument you will notice that the cursor moves to the next line and then nothing happens. Because we didn’t specify a file, cat instead reads from something called STDIN (which we’ll learn about in the section ‘Piping and redirection’ which defaults to the keyboard. If you type something then hit <enter> you will see cat mirror your input to the screen. To get out of here you may press <Ctrl> + c which is the universal signal for Cancel in Linux.

In fact, whenever you get in trouble you can generally press <Ctrl> + c to get yourself out of trouble.

  1. cat firstfile
  2. here you will see
  3. whatever content you
  4. entered in your file

This command is nice when we have a small file to view but if the file is large then most of the content will fly across the screen and we’ll only see the last page of content. For larger files there is a better suited command which is less.

less <file>

less allows you to move up and down within a file using the arrow keys. You may go forward a whole page using the SpaceBar or back a page by pressing b. When you are done you can press q for quit.

Have a look at the file you just created now using both these commands.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector