mirror of
https://git.digitalstudium.com/digitalstudium/digitalstudium.com
synced 2023-12-29 08:06:35 +00:00
...
This commit is contained in:
69
content/ru/bash-lifehacks/bash-arrays-and-hashmaps.md
Normal file
69
content/ru/bash-lifehacks/bash-arrays-and-hashmaps.md
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
title: "BASH: массивы и ассоциативные массивы"
|
||||
category: bash-lifehacks
|
||||
filename: bash-arrays-and-hashmaps
|
||||
date: 2023-05-07T13:35:26.956Z
|
||||
---
|
||||
Иногда возникает необходимость использовать в bash такие структуры данных, как списки (они же массивы) и ассоциативные массивы (он же хэш-таблицы). В данной статье приведены примеры того, как с ними работать.
|
||||
<!--more-->
|
||||
## 1. Массивы
|
||||
|
||||
создание массива в bash делается просто:
|
||||
|
||||
```shell
|
||||
sample_array=(foo bar bazz)
|
||||
```
|
||||
|
||||
Чтобы добавить один или несколько новых элементов в конец массива, нужно использовать такой синтаксис:
|
||||
|
||||
```shell
|
||||
sample_array+=(six seven)
|
||||
```
|
||||
|
||||
Чтобы пройти по массиву циклом, нужно использовать такой синтаксис:
|
||||
|
||||
```shell
|
||||
for i in ${sample_array[@]}
|
||||
do
|
||||
echo $i
|
||||
done
|
||||
```
|
||||
|
||||
Чтобы получить элемент по индексу, используется такая конструкция:
|
||||
|
||||
```shell
|
||||
echo ${sample_array[0]}
|
||||
echo ${sample_array[3]}
|
||||
|
||||
# 0, 3 и т. п. - индексы элементов массива
|
||||
```
|
||||
|
||||
Чтобы обрезать массив, используется такая конструкция:
|
||||
|
||||
```shell
|
||||
sliced_array=${sample_array[@]:1} # выведет все элементы sample_array, начиная с 1-го
|
||||
another_sliced_array=${sample_array[@]:1:5} # выведет элементы sample_array с 1-го по 5-й
|
||||
```
|
||||
|
||||
## 2. Ассоциативные массивы
|
||||
|
||||
создание ассоциативного массива в bash делается так:
|
||||
|
||||
```shell
|
||||
declare -A sample_hashmap=([one]=one [two]=two [three]=three [four]=four [five]=five)
|
||||
```
|
||||
|
||||
Добавление новых элементов:
|
||||
|
||||
```shell
|
||||
sample_hashmap[foo]=bar
|
||||
```
|
||||
|
||||
Обход в цикле:
|
||||
|
||||
```shell
|
||||
for key in ${sample_hashmap[@]}
|
||||
do
|
||||
echo ${sample_hashmap[$key]}
|
||||
done
|
||||
```
|
@@ -1,129 +0,0 @@
|
||||
---
|
||||
title: "Linux: Как расширить логический том LVM"
|
||||
category: linux-lifehacks
|
||||
filename: how-to-extend-lvm-volume-on-linux
|
||||
date: 2022-05-15
|
||||
---
|
||||
### Ситуация 1: новый диск
|
||||
|
||||
#### Первый шаг: создание физического тома
|
||||
|
||||
После того, как вы присоединили диск к физическому серверу или к виртуальной машине, вам нужно набрать команду:
|
||||
|
||||
```bash
|
||||
sudo fdisk -l
|
||||
```
|
||||
|
||||
<!--more-->
|
||||
|
||||
Это нужно, чтобы убедиться, что диск распознан операционной системой, а также чтобы идентифицировать имя диска. Вывод команды будет примерно такой:
|
||||
|
||||
```plaintext
|
||||
Disk /dev/vdc: 5 GiB, 5368709120 bytes, 10485760 sectors
|
||||
Units: sectors of 1 * 512 = 512 bytes
|
||||
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||
```
|
||||
|
||||
После того, как вы идентифицировали имя диска (в нашем случае это `/dev/vdc`), вы можете создать физический том с помощью команды:
|
||||
|
||||
```bash
|
||||
sudo pvcreate /dev/vdc
|
||||
```
|
||||
|
||||
Вы увидите такой вывод:
|
||||
|
||||
```plaintext
|
||||
kostya@ubuntu-21-04:~$ sudo pvcreate /dev/vdc
|
||||
Physical volume "/dev/vdc" successfully created.
|
||||
kostya@ubuntu-21-04:~$
|
||||
```
|
||||
|
||||
#### Второй шаг: расширение группы томов
|
||||
|
||||
Чтобы увидеть список доступных групп томов, воспользуйтесь командой:
|
||||
|
||||
```shell
|
||||
vgdisplay
|
||||
```
|
||||
|
||||
Теперь можно расширить группу томов. Делается это такой командой:
|
||||
|
||||
```bash
|
||||
sudo vgextend {vg-name} {pv-name}
|
||||
```
|
||||
|
||||
В нашем случае это будет:
|
||||
|
||||
```bash
|
||||
sudo vgextend vg-example /dev/vdc
|
||||
```
|
||||
|
||||
Вы увидите такой вывод:
|
||||
|
||||
```plaintext
|
||||
kostya@ubuntu-21-04:~$ sudo vgextend vg-example /dev/vdc
|
||||
Physical volume "/dev/vdc" successfully created.
|
||||
Volume group "vg-example" successfully extended
|
||||
kostya@ubuntu-21-04:~$
|
||||
```
|
||||
|
||||
#### Третий шаг: расширение логического тома
|
||||
|
||||
Расширение логического тома делается такой командой:
|
||||
|
||||
```bash
|
||||
sudo lvextend --size +{size} {vg-name/lv-name}
|
||||
```
|
||||
|
||||
В нашем случае это будет:
|
||||
|
||||
```bash
|
||||
sudo lvextend --size +2G vg-example/lv-example
|
||||
```
|
||||
|
||||
Вы увидите такой вывод:
|
||||
|
||||
```plaintext
|
||||
kostya@ubuntu-21-04:~$ sudo lvextend --size +2G vg-example/lv-example
|
||||
Size of logical volume vg-example/lv-example changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents).
|
||||
Logical volume vg-example/lv-example successfully resized.
|
||||
kostya@ubuntu-21-04:~$
|
||||
```
|
||||
|
||||
Если же вы хотите, чтобы логичекий том использовал всё свободное место в группе томов, то наберите
|
||||
команду:
|
||||
|
||||
```bash
|
||||
sudo lvextend --extents +100%FREE vg-example/lv-example
|
||||
```
|
||||
|
||||
#### Четвёртый шаг: расширение файловой системы
|
||||
|
||||
Если у вас файловая система `xfs`, то расширение делается такой командой:
|
||||
|
||||
```bash
|
||||
sudo xfs_growfs /dev/{vg-name}/{lv-name}
|
||||
```
|
||||
|
||||
В нашем случае это будет:
|
||||
|
||||
```bash
|
||||
sudo xfs_growfs /dev/vg-example/lv-example
|
||||
```
|
||||
|
||||
В случае с файловой системой ext4 замените команду `xfs_growfs` на `resize2fs`
|
||||
|
||||
### Ситуация 2: если изменился размер существующего диска
|
||||
|
||||
Иногда может измениться размер существующего диска, например, в случае с виртуальной машиной. В таком случае, первый шаг будет отличаться, второй шаг выполняться не будет, а остальные шаги будут такими же, как в ситуации с новым диском, описанной выше. На первом шаге нужно будет не создать физический том, а расширить существующий. Делается это такой командой:
|
||||
|
||||
```bash
|
||||
sudo pvresize /dev/DISKNAME
|
||||
```
|
||||
|
||||
Например,
|
||||
|
||||
```bash
|
||||
sudo pvresize /dev/vdc
|
||||
```
|
Reference in New Issue
Block a user