Сайт | Скачать | Видео | Wiki

Автор Тема: Скрипт по автоматическому переносу "горячих модулей" в базу (modules)  (Прочитано 23155 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
А ведь еще один модуль со временем обновится - другой нет...
Посмотрел - после обновления, все обновления прилетели в modules (так как оттуда подключены соответствующие pfs)

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1708
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Давно смотрю на эту тему.
Это уже было в Симпсонах)
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
CheckColdModules.pfs
Только сейчас заметил :) Надо было назвать CheckHotModules (Cold - холодный, Hot - горячий)  - ну да ладно, пусть будет так :)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Обнаружил логическую ошибку:
for i in ${!listnumber
  • }

do
k=${listnumber[$i]}
let "k = k-1"
listnumber[$i]=$k
done
Смысл в том, чтобы уменьшить все элементы массива на единицу. Возможно, переделаю. Жду наводящих подсказок :)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Что-то подходящее нашёл:
Цитата
Рассмотрим теперь несколько иной подход к перебору массивов. Вместо того, чтобы перебирать элементы, мы можем перебирать индексы массива:

for i in ${!allThreads
  • }; do

  ./pipeline --threads ${allThreads[$i]}
done


Разберём то, что здесь происходит. Как мы уже видели, конструкция вида ${allThreads
  • } представляет собой все элементы массива. При добавлении сюда восклицательного знака мы превращаем эту конструкцию в ${!allThreads
  • }, что приводит к тому, что она возвращает индексы массива (от 0 до 7 в нашем случае).
Т.е. сначала перебираем индексы массива, потом в теле цикла извлекаем элемент по индексу, уменьшаем его на единицу и присваиваем опять массиву (по индексу) Хотя от уменьшения на единицу можно оказаться, если ntf -k позволяет начать нумерацию с нуля (у меня с единицы):
ntf -3 "gtk-yes|yes да|1
Как видим, цифра в конце указывет на номер варианта и ntf возвращает номер варианта, и если можно начать нумерацию с нуля, то тогда уменьшать на единицу элементы массива не придётся - вообщем подумаю :)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
for i in ${!listnumber
  ???
ой там уже есть восклицательный знак, тогда вопрос отпадает - совсем запутался, логика не нарушена  :)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Итог - пользуюсь очень редко, поэтому в создании модуля не вижу смысла (но пусть будет). Создал в домашней папке скрипт hot_modules.sh с содержимым и изредка запускаю  :)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Немного переделал скрипт:
Код
SYS_DIR="/mnt/home/`egrep -o "(^| )dir=[^ ]+" /proc/cmdline | cut -d= -f2`"
str=$(ls -1 /mnt/.* |egrep '.pfs:$')
if [[ -z "$str" ]]; then
exit # Модулей не найдено
fi
array1=( $(ls -1 /mnt/.* |egrep '.pfs:$' |sed 's/\/mnt\/.//' |sed 's/:$//') )
k=0
for i in ${array1[@]}
do
FileName="${SYS_DIR}/modules/$i"
if [ ! -f $FileName ]; then
array[$k]=$i
let "k = k+1"
fi
done
[ "$k" = "0" ] && exit # Модулей не найдено
k=1
VAR="true|"
str=""
for i in ${array[@]}
do
str="${str}${VAR}${i}|${k}="
let "k = k+1"
done
st=( $(echo $str | sed 's/=$//') )
variant=`ntf -k "$st" "Список модулей" "Отметьте галочками нужные модули"`
if [[ -z "$variant" ]]; then
exit
fi
listvariant=($variant)
for i in ${!listvariant[@]}
do
k=${listvariant[$i]}
let "k = k-1"
listvariant[$i]=$k
done
for i in ${listvariant[@]}
do
modules=( $(losetup -a | grep "${array[$i]}" | awk '{print $3}' | sed 's/(//' | sed 's/)//') )
cp $modules "${SYS_DIR}/modules/"
done
+ повесил на него горячую клавишу (Win + M)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Вопрос к Ddshurick. Можно ли сделать скрипт (который в предыдущем посте) сделать как-то красивее/удобнее. Конечно, это не ваши проблемы, но хотелось бы услышать мнение эксперта.

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
сделать как-то красивее/удобнее.
убрать bash-изм

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Вопрос к Ddshurick. Можно ли сделать скрипт (который в предыдущем посте)
Начните с
Код
losetup | awk '/optional/ {print $6}'
получите и модули, и путь к ним.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
losetup | awk '/optional/ {print $6}'
Он покажет модули, находящиеся в optional, а мне нужен список "горячих" модулей

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
парсить вывод aufs-n

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
парсить вывод aufs-n
Зачем? Если уже есть механизм получения cписка горячих модулей:
ls -1 /mnt/.* |egrep '.pfs:$' |sed 's/\/mnt\/.//' |sed 's/:$//'

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Как тут определить где лежит сам модуль?