Архив рубрики: Без рубрики

Установка Ventoy на флэшку из Linux

= Зачем нужен Ventoy

Ventoy делает флэшку загрузочной, создаёт на ней папку для iso-файлов с установочными и просто live-дисками операционных систем (Linux, Windows и т.д.), при включении компьютеров открывает меню с их списком и запускает загрузку выбранного образа. Это позволяет не перезаливать всю флэшку через UnetBootin или Balena Etcher, а просто скопировать нужный iso-файл на флэшку.

ПРЕДУПРЕЖДЕНИЕ: если что-то перепутать, то можно случайно потерять данные на других дисках!

Порядок установки Ventoy на флэшку из Linux:

$ sha256sum ventoy-1.0.99-linux.tar.gz 
467cdd188a7f739bc706adbc1d695f61ffdefc95916adb015947d80829f00a3d  ventoy-1.0.99-linux.tar.gz
  • Распаковать архив
  • В командной строке перейти в папку со скриптом Ventoy2Disk.sh
  • Подключить к компьютеру флэшку, на которую будем устанавливать
  • Запустить gparted, найти путь к нужной флэшке (например /dev/sdb)
  • Закрыть gparted (больше он не нужен)
  • В терминале запустить установку Ventoy следующей командой:
$ sudo bash Ventoy2Disk.sh -i /dev/sdb
[sudo] пароль для user: 

**********************************************
      Ventoy: 1.0.99  x86_64
      longpanda admin@ventoy.net
      https://www.ventoy.net
**********************************************

Disk : /dev/sdb
Size : 14 GB
Style: MBR


Attention:
You will install Ventoy to /dev/sdb.
All the data on the disk /dev/sdb will be lost!!!

Continue? (y/n) y

All the data on the disk /dev/sdb will be lost!!!
Double-check. Continue? (y/n) y

Create partitions on /dev/sdb by parted in MBR style ...
Done
Wait for partitions ...
partition exist OK
create efi fat fs /dev/sdb2 ...
mkfs.fat 4.1 (2017-01-24)
success
Wait for partitions ...
/dev/sdb1 exist OK
/dev/sdb2 exist OK
partition exist OK
Format partition 1 /dev/sdb1 ...
mkexfatfs 1.3.0
Creating... done.
Flushing... done.
File system created successfully.
mkexfatfs success
writing data to disk ...
sync data ...
esp partition processing ...

Install Ventoy to /dev/sdb successfully finished.

$

Linux — Монтирование обычного файла как диска

  • создать файл
    python3 -c «for _ in range(1000000000): print(«00000000″)» > filedisk
    ^CTraceback (most recent call last):
    File «», line 1, in
    KeyboardInterrupt
  • parted
    parted filedisk
    (parted) mklabel gpt
    (parted) mkpart primary ext4 1MB 500MB
    (parted) print

    Размер сектора (логич./физич.): 512B/512B
    Таблица разделов: gpt
    Флаги диска:
    Номер Начало Конец Размер Файловая система Имя Флаги
    1 1049kB 500MB 499MB ext4 primary
  • fdisk
    fdisk -lu filedisk
  • losetup 1
    sudo losetup /dev/loop101 filedisk
  • gparted отформатировать раздел внутри файла
    gparted /dev/loop101
  • losetup 2
    sudo losetup -d /dev/loop101
    sudo losetup -o 1048576 /dev/loop101 filedisk
  • fsck
    sudo fsck -fv /dev/loop101
  • mount
    sudo mount /dev/loop101 mounted/
  • umount
    sudo umount mounted
    sudo losetup -d /dev/loop101

Просмотр картинок из датасета mnist через matplotlib (Python)

Имеем установленные модули matplotlib и tensorflow, хотим посмотреть на картинки из датасета mnist. Код:

import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
import matplotlib.pyplot as plt
for i in range(20):
    data = x_train[i]
    plt.imshow(data)
    plt.show()

В результате будут нарисованы в виде графиков matplotlib первые 20 цифр из тренировочного датасета

bash несколько способов генерации случайных чисел

# RANDOM_NUMBER=`perl -e 'print int rand 10000000, "\n"; '`
RANDOM_NUMBER=`python3 -c "import random; print(str(random.randint(1, 999999999)).zfill(10))"`


$ jot -r 1 0 100
54
$ jot -r 1 0 100
7
$ jot -r 1 0 100
48

Python + Orange

# ​https://orange3.readthedocs.io/projects/orange-data-mining-library/en/latest/tutorial/classification.html Документация по работе с моделями Orange для классификации из кода на Python
# ​https://stackoverflow.com/questions/63060587/deploying-orange-3-models рецепт по загрузке готовой модели из файла 

>>> import Orange
>>> iris = Orange.data.Table('Iris')  # Загрузка данных для модели, имя файла
>>> iris  # как выглядят загруженные данные
[[5.1, 3.5, 1.4, 0.2 | Iris-setosa],
 [4.9, 3.0, 1.4, 0.2 | Iris-setosa],
 [4.7, 3.2, 1.3, 0.2 | Iris-setosa],
 [4.6, 3.1, 1.5, 0.2 | Iris-setosa],
 [5.0, 3.6, 1.4, 0.2 | Iris-setosa],
 ...
]
>>> iris.domain  # колонки загруженной таблицы
[sepal length, sepal width, petal length, petal width | iris]
>>> tr = Orange.classification.TreeLearner()  # выбор типа классификатора
>>> classifier = tr(iris)  # обучение модели на загруженных данных
>>> printed_tree = classifier.print_tree()  # просмотр, чему модель на данных научилась (не обязательно смотреть)
>>> for i in printed_tree.split('\n'):
...   print(i)
...
       [50.  0.  0.] petal length ≤ 1.9
       [ 0. 50. 50.] petal length > 1.9
       [ 0. 49.  5.]     petal width ≤ 1.7
       [ 0. 47.  1.]         petal length ≤ 4.9
          [0. 2. 4.]         petal length > 4.9
          [0. 0. 3.]             petal width ≤ 1.5
          [0. 2. 1.]             petal width > 1.5
          [0. 2. 0.]                 sepal length ≤ 6.7
          [0. 0. 1.]                 sepal length > 6.7
       [ 0.  1. 45.]     petal width > 1.7
>>> iris[2]  # просмотр произвольной записи из данных для обучения
[4.7, 3.2, 1.3, 0.2 | Iris-setosa]
>>> classifier(iris[2])  # предсказание класса для записи из данных для обучения
0  # индекс предсказанного класса
>>> classifier(iris)  # предсказание классов для всех записей из данных для обучения
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int64)
>>> classifier([1,1,1,1])  # предсказание по произвольным значениям от пользователя
0  # индекс предсказанного класса
>>> classifier([3,3,3,3])
2
>>> classifier([3,3,3,0])
1
>>> classifier([3,0,3,0])
1
>>> classifier([3,0,0,0])
0
>>>

Cron добавление заданий

Для редактирования заданий текущего пользователя:

crontab -e

Формат записи:

minute hour day_of_month month day_of_week command_to_execute

Допустимые значения:

  • minute 0-59
  • hour 0-23
  • day_of_month 1-31
  • month 1-12
  • day_of_week 0-7 (0 и 7 — воскресенье)

Управление другим пользователем:

sudo crontab -u username -e

Просто посмотреть:

crontab -l

Проверка, запущен ли cron:

sudo systemctl status cron

Запуск задания каждые 5 минут:

*/5 * * * *

Выполнить задание при включении компьютера:

@reboot