...
deploy
Details
deploy
Details
This commit is contained in:
parent
2389983607
commit
c2f72e6cce
|
@ -1 +1,2 @@
|
||||||
.hugo_build.lock
|
.hugo_build.lock
|
||||||
|
/venv/
|
|
@ -0,0 +1,68 @@
|
||||||
|
---
|
||||||
|
title: "BASH: arrays and hashmaps"
|
||||||
|
category: bash-lifehacks
|
||||||
|
filename: bash-arrays-and-hashmaps
|
||||||
|
date: 2023-05-07T13:35:26.956Z
|
||||||
|
---
|
||||||
|
Sometimes there is a need to use in BASH such structures as lists (also known as arrays) and dictionaries (also known as hashmaps and associative arrays). In this post there are some samples how to work with them.
|
||||||
|
<!--more-->
|
||||||
|
## 1. Arrays
|
||||||
|
|
||||||
|
Array creation in bash can be done this way:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sample_array=(foo bar bazz)
|
||||||
|
```
|
||||||
|
|
||||||
|
In order to add single or multiple new elements to the end of array, you should use this syntax:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sample_array+=(six seven)
|
||||||
|
```
|
||||||
|
|
||||||
|
In order to get elements on the list in a cycle, you should use this syntax:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
for i in ${sample_array[@]}
|
||||||
|
do
|
||||||
|
echo $i
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
Here is an example how to get element by its index:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
echo ${sample_array[0]}
|
||||||
|
echo ${sample_array[3]}
|
||||||
|
|
||||||
|
# 0, 3 etc. - elements' indexes
|
||||||
|
```
|
||||||
|
|
||||||
|
Array slicing:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sliced_array=${sample_array[@]:1} # will get all elements of a sample_array, starting with 1st
|
||||||
|
another_sliced_array=${sample_array[@]:1:5} # will get sample_array elements since 1st to 5th
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Hashmaps
|
||||||
|
To create hashmap in bash use this syntax:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
declare -A sample_hashmap=([one]=one [two]=two [three]=three [four]=four [five]=five)
|
||||||
|
```
|
||||||
|
|
||||||
|
This will add new key "foo" with value "bar":
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sample_hashmap[foo]=bar
|
||||||
|
```
|
||||||
|
|
||||||
|
Cycle:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
for key in ${sample_hashmap[@]}
|
||||||
|
do
|
||||||
|
echo ${sample_hashmap[$key]}
|
||||||
|
done
|
||||||
|
```
|
|
@ -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
|
|
||||||
```
|
|
|
@ -3,9 +3,8 @@ backend:
|
||||||
|
|
||||||
local_backend: true
|
local_backend: true
|
||||||
|
|
||||||
# These lines should *not* be indented
|
media_folder: "static/images" # Media files will be stored in the repo under static/images
|
||||||
media_folder: "static/images" # Media files will be stored in the repo under static/images/uploads
|
public_folder: "/images" # The src attribute for uploaded media will begin with /images
|
||||||
public_folder: "/images" # The src attribute for uploaded media will begin with /images/uploads
|
|
||||||
|
|
||||||
i18n:
|
i18n:
|
||||||
structure: multiple_folders
|
structure: multiple_folders
|
||||||
|
@ -23,7 +22,6 @@ collections:
|
||||||
view_groups:
|
view_groups:
|
||||||
- label: Year
|
- label: Year
|
||||||
field: date
|
field: date
|
||||||
# groups items based on the value matched by the pattern
|
|
||||||
pattern: \d{4}
|
pattern: \d{4}
|
||||||
- label: Category
|
- label: Category
|
||||||
field: category
|
field: category
|
||||||
|
@ -35,7 +33,7 @@ collections:
|
||||||
- label: "Category"
|
- label: "Category"
|
||||||
name: "category"
|
name: "category"
|
||||||
widget: "select"
|
widget: "select"
|
||||||
options: ["/", "linux-lifehacks", "nginx-lifehacks", "python-lifehacks", "ubuntu-lifehacks"]
|
options: ["/", "linux-lifehacks", "nginx-lifehacks", "python-lifehacks", "ubuntu-lifehacks", "bash-lifehacks"]
|
||||||
i18n: duplicate
|
i18n: duplicate
|
||||||
- label: Filename
|
- label: Filename
|
||||||
name: filename
|
name: filename
|
||||||
|
|
|
@ -8,6 +8,6 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Include the script that builds the page and powers Decap CMS -->
|
<!-- Include the script that builds the page and powers Decap CMS -->
|
||||||
<script src="https://unpkg.com/netlify-cms@^2.0.0/dist/netlify-cms.js"></script>
|
<script src="netlify-cms.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue