четверг, 24 мая 2018 г.

Доступ к контенту на Диске Яндекс на временной основе

На Диске Яндекс (Яндекс Диск) файлы и папки можно предоставлять в доступ. При этом предоставленная информация будет находиться в доступе до тех пор, пока не будет владельцем удалена (её содержание или ссылка на контент).

У меня, в частности, возникла необходимость предоставлять данную информацию на временной основе. То есть через определённое время она должна быть удалена в автоматическом режиме без участия пользователя.

Для чего это было сделано? Во-первых, у меня есть респондент, который до сих пор так и не научился скачивать файлы с файлообменных ресурсов. Удивительно, но встречаются и такие люди. Во-вторых, – в силу использования Диском Яндекс так называемой дедупликации файлов, при наличии где-то на диске такого же контента, который мной запланирован к размещению, данный контент будет "загружен" практически моментально, что имеет несомненный плюс при размещении файлов большого объёма.

Вариант решения этой задачи заключается в создании заданий, выполнение которых происходит по расписанию.

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

В Linux и Windows задача решается различными способами и описывается отдельно для каждой из систем.


Практические шаги в Linux

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

2. Назначается задание на удаление содержащегося в каталоге временного контента.

Для файлового менеджера Thunar может быть использовано удаление по расписанию командой правого контекстного меню.

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

#!/bin/bash
rm /home/user/DiskYandex/Temp/file.mp4
exit

#!/bin/bash
rm -R /home/user/DiskYandex/Temp/folder4
exit

#!/bin/bash
rm /home/user/DiskYandex/Temp/file.mp4
rm -R /home/user/DiskYandex/Temp/folder4
exit

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

#!/bin/bash
rm '/home/user/DiskYandex/Temp/Моё видео.mp4'
exit

#!/bin/bash
rm '/home/user/DiskYandex/Temp/Моя папка'
exit

Примечание. Если у Вас демон синхронизации запускается в процессе старта системы и работает постоянно, то в чтении пункта 3 нет необходимости.

3. Создаётся пользовательское задание, в процессе выполнения которого запускается исполняемый файл, осуществляющий запуск демона синхронизации Диска Яндекс и его последующую остановку. При этом процесс происходит в фоновом режиме без отображения на экране монитора. Примером содержания такого файла является:

#!/bin/bash
yandex-disk start
sleep 180
yandex-disk stop
exit

Команда sleep 180 устанавливает количество секунд (180), в течение которых будет выполняться работа демона синхронизации до его остановки по команде yandex-disk stop. Величина в 3 минуты (180 секунд) выбрана из соображений того, что за это время процесс Яндекс Диска гарантировано пересчитает имеющиеся данные даже в случаях кратковременного пропадания соединения. Такие случае наблюдались при запуске Яндекс Диска с индикатором, когда в поле состояния высвечивалась надпись "Нет связи". Однако не позднее 1-2 минут соединение восстанавливалось.  
Команда exit остановит выполнение исполняемого файла, после чего соответствующий ему процесс будет автоматически удалён из системы.

Если для своих задач Вы используете несколько учётных записей Яндекс Диска, то перед запуском демона синхронизации необходимо удалить текущие настройки и записать необходимые, то есть того пользователя, под именем которого будет производиться синхронизация с Диском Яндекс. Пример содержания такого файла на моей системе:

#!/bin/bash
rm -R /home/cemea/.config/yandex-disk
cp -R /home/cemea/Tools/configs/Yandex/03/yandex-disk /home/cemea/.config
yandex-disk start
sleep 180
yandex-disk stop && exit

4. После этого останется только необходимость периодического удаления потерявших актуальность строк в файле пользовательских заданий. Для редактирования своего файла пользовательских заданий cron выполните команду crontab -e

Операции можно полностью автоматизировать. Как это сделать читайте после описания практических шагов в Windows или перейдите по ссылке.


Практические шаги в Windows

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

2. По причине того, что в Windows мне так и не удалось организовать независимую работу клиента Яндекс Диска для разных учётных записей, то единственным способом является удаление временного контента через планировщик Windows.

Для этого можно создавать файлы bat, которые и будут запускаться по расписанию. Примеры таких файлов bat приведены ниже.

Для удаления файла:

@echo off
del C:\Users\spinner\YandexDisk\video.mp4 /q
timeout /t 1 /nobreak
exit

Для удаления папки:

@echo off
rd "C:\Users\spinner\YandexDisk\Shared\Folder" /s /q
timeout /t 1 /nobreak
exit

При использовании имён, содержащих пробелы, используются кавычки:

@echo off
del "C:\Users\spinner\YandexDisk\Shared\Моё видео.mp4" /q
timeout /t 1 /nobreak
exit

@echo off
rd "C:\Users\spinner\YandexDisk\Shared\Моя папка" /s /q
timeout /t 1 /nobreak
exit

Команды timeout /t 1 /nobreak и exit соответствуют "заснуть на 1 секунду" и "завершить работу файла bat". Хотя можно обойтись и без timeout /t 1 /nobreak.


Полная автоматизация в Linux

Следует отметить, что описанная выше реализация лично для меня представилась не совсем удобной. Так, после назначения задания на удаление через Thunar требовалось вызывать на редактирование файл пользовательских заданий cron и добавлять кратковременный запуск демона Диска Яндекс.

Во-первых, когда на временный доступ назначается много контента, то внесение изменений в пользовательское задание cron (добавление данных и удаление данных, потерявших актуальность) превращается в деятельность "процесс ради процесса". А во-вторых, – как быть в случае, если синхронизация с Диском Яндекс не запущена (запускается вручную) или производится с использованием независимых учётных записей (несколько Дисков Яндекс на компьютере)?

1. Автоматизация процесса удаления данных.

Для автоматизации процесса потребуется много поработать с клавиатурой. Хотя это и "тоскливо", но утешением будет служить то, что это будет сделано только 1 раз.

Эта задача решается просто. В каталоге временных данных создаются каталоги, соответствующие числу месяца, до которого предоставляемые в доступ данные будут доступны. Например, 01, 05, 14, 28, 31. В эти каталоги заранее записываются данные и в дальнейшем синхронизируются с соответствующими папками облака Диска Яндекс.

Для осуществления операции удаления пишется 31 исполняемый файл задания. Примеры:

#!/bin/bash
trash=~/Yandex/Shared/01
if [ -d $trash ]
then
rm -rdf ~/Yandex/Shared/01
else
sleep 1
fi
sleep 5 && exit

#!/bin/bash
trash=~/Yandex/Shared/14
if [ -d $trash ]
then
rm -rdf ~/Yandex/Shared/14
else
sleep 1
fi
sleep 5 && exit

Пояснения:

~/Yandex/Shared/14 – путь к проверяемому каталогу Диска Яндекс. Сам проверяемый каталог 14 расположен в каталоге временных данных Shared, предоставленный в общий доступ. Знак ~/ соответствует расположению "в домашнем каталоге пользователя".

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

Если такого каталога не существует, то задание "засыпает" на 1 секунду (sleep 1), после чего будет инициирован процесс завершения работы задания.

В каталог с номером  помещаются те данные, которые должны быть удалены тем числом месяца, которое совпадает с номером каталога.

Если данные представляются из себя контент очень большого объёма, то имеет смысл сначала его синхронизировать с другим каталогом, а уже затем перекладывать в выбранный каталог. Это объясняется тем, чтобы избежать недоразумений, если Вы уведомите о наличии контента, а сам контент не успеет синхронизироваться с Диском Яндекс.

2. Создание исполняемого файла, осуществляющего запуск демона синхронизации Диска Яндекс и его последующую остановку (см. п.3 выше). Если у Вас демон синхронизации запускается в процессе старта системы и работает постоянно, то в создании файла нет необходимости.

3. Внесение заданий в cron.

Здесь тоже придётся поработать, но сделать только 1 раз.

Создать задание на запуск демона Яндекс Диска для каждой даты.
Создать задание на запуск процедуры удаления файла для каждой даты.

Например, 14 и 31 числа каждого месяца в 22:24 запускается демон Яндекс Диска, а в 22:25 производится удаление соответствующего каталога.

24 22 14 * * /home/cemea/Tools/configs/Yandex/demon.sh
25 22 14 * * /home/cemea/Tools/configs/Delete/del14
24 22 31 * * /home/cemea/Tools/configs/Yandex/demon.sh
25 22 31 * * /home/cemea/Tools/configs/Delete/del31

Если применяется синхронизация с Яндекс Диском для нескольких учётных записей, то дополнительно создаётся задание на проверку наличия запущенного Диска.Яндекс (demoncheck.sh). Если он запущен, то выдаётся команда на его остановку (yandex-disk stop). Проверка планируется за 1 минуту до запуcка синхронизации под необходимой учётной записью. Например:

23 22 14 * * /home/cemea/Tools/configs/Yandex/demoncheck.sh
24 22 14 * * /home/cemea/Tools/configs/Yandex/demon.sh
25 22 14 * * /home/cemea/Tools/configs/Delete/del14
23 22 31 * * /home/cemea/Tools/configs/Yandex/demoncheck.sh
24 22 31 * * /home/cemea/Tools/configs/Yandex/demon.sh
25 22 31 * * /home/cemea/Tools/configs/Delete/del31

Задание проверки наличия запущенного демона Диска Яндекс.

#!/bin/bash
yd=/tmp/yandex-disk-*
if [ -d $yd ]; then
yandex-disk stop
else
sleep 1
fi && exit

Пояснения.

В процессе работы демона Диска Яндекс в каталоге /temp в наличии имеется каталог с длинным именем yandex-disk-...

В частности, для различных учётных записей у меня создавались каталоги:

yandex-disk-24adc70426bc...
yandex-disk-7b990dc3d61d...
yandex-disk-e0b822b1c9f6...




При остановке демона Диска Яндекс такие каталоги автоматически удалялись системой.

Задание проверяет существование в каталоге /temp каталога, в имени которого присутствует yandex-disk- . Если такой каталог существует, будет выдана команда остановки демона Диска Яндекс. Если такой каталог отсутствует, то задание на 1 секунду "заснёт", а потом будет осуществлено завершение его работы.


четверг, 17 мая 2018 г.

Меню Thunar: создать список содержимого каталога

При наведении порядка в своих данных возникла необходимость для многих каталогов создавать перечень содержащихся в нём файлов и/или каталогов.

Так как для большого числа каталогов каждый раз прописывать в терминале команду ls 'путь к каталогу'>list.txt показалось мне занятием малопроизводительным, то появилась идея попытаться запускать такую команду из контекстного меню Thunar (менеджер файлов оболочки xfce).

Запустите Thunar и перейдите в меню "Правка" – "Особые действия".



Чтобы добавить действие, нажмите на "плюсик", как показано выше.

В следующих двух окнах выбора указываются операция и условия её применимости к папкам или конкретным файлам.



В окне "Основное" в поле "Имя" введите имя, которое будет отображаться в правом контекстном меню Thunar и соответствовать созданию списка содержания каталога. В поле "Команда" введите команду:  ls %F>list.txt

Примечание. В приведенном примере список содержания каталога создаётся в файле list.txt  Вы можете указать своё наименование создаваемого файла. Список создаётся в формате plain text.

В окне "Условия появления" уберите галочку в поле "Текстовые файлы" и поставьте её в поле "Каталоги".

Вернитесь в окно "Основное", нажмите на кнопку "Без значка" и выберите значок, который будет отображаться в правом контекстном меню Thunar слева от выбранного Вами названия действия. Например, мной установлен один из стандартных значков каталога.


При выделении каталога и вызове через правое контекстное меню созданного особого действия создаётся файл list.txt, который будет расположен в том же каталоге, в котором расположен каталог, для которого создаётся список его содержимого.

В частности, при вызове созданного особого действия для каталога Шаблоны моей системы в корне домашнего каталога был создан файл list.txt с содержанием:

Readme.txt
Веб-страница.html
Документ.odt
Презентация.odp
Скрипт оболочки.sh
Таблица.ods

вторник, 15 мая 2018 г.

Улучшить отзывчивость интерфейса при тяжелых дисковых операциях в Linux Mint и Ubuntu

Публикация описывает личный опыт применения изложенных на форуме рекомендаций участника с ником slant под заголовком "Mint 18 c ядром 4.13+ – переходим на bfq (улучшаем отзывчивость интерфейса при тяжелых дисковых операциях)". Теоретическое обоснование заимствовано из указанного выше источника. Некоторые речевые обороты изменены.

Представьте, что у вас две программы хотят одновременно читать или писать на диск. Какой из них дать преимущество? А что будет в это время делать вторая? За эти вопросы в системе отвечает так называемый планировщик дисковых операций (ввода-вывода) – подробности.

В Linux Mint по умолчанию используется планировщик cfq, доступны также deadline и none. В принципе, cfq справляется, но бывают случаи, когда система всё же "встаёт колом" – например при копировании с накопителей "флэш", или по гигабитной сети, особенно если диски hdd и не слишком "шустрые".

С целью решения этой проблемы создан планировщик bfq, который способствует гарантированному доступу к диска каждого из процессов, осуществляя управление ресурсами  в очереди запросов ввода-вывода.

То есть при интенсивных дисковых операциях "тормоза" в графическом окружении должны уйти в прошлое, что может способствовать повышению скорости запуска программ и снижению нагрузки на жёсткий диск. Основное преимущество использования этого планировщика проявляется в сценарии "параллельный доступ к множеству мелких файлов на hdd". Для SSD, по словам авторов алгоритма, его применение также будет эффективно.

В настройках в Linux Mint и Ubuntu всё связанное с этим планировщиком полностью выключено. А вот пользователи Manjaro наслаждаются его возможностями "из коробки". Как пишет автор, "будем исправлять несправедливость".

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

Внимание. Для осуществления настройки необходимо наличие ядра 4.13 или новее. Для определения действующей версии ядра запустите uname -r

В процессе осуществления настройки потребуется 2 перезагрузки системы.

Примечание. По тексту для редактирования конфигурационных файлов указана команда sudo xed, так как экспериментальная проверка произведена на Linux Mint. В Ubuntu тестового редактора xed не существует и вместо него используется gedit. Поэтому пользователям Ubuntu вместо sudo xed следует вводить sudo gedit. По устоявшейся ещё с ранней Ubuntu привычке в своей системе всегда ввожу sudo gedit, а для сопоставления команде gedit команды xed был использован материал этой публикации.

1. Включить в ядре поддержку bfq, запустив  sudo xed /etc/default/grub  и добавив в строку GRUB_CMDLINE_LINUX_DEFAULT параметр scsi_mod.use_blk_mq=1

Например,
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash scsi_mod.use_blk_mq=1"

2. sudo update-grub && shutdown -r now

3. sudo modprobe bfq && sudo xed /etc/udev/rules.d/60-scheduler.rules

Так как изначально файл 60-scheduler.rules в системе отсутствует, то он будет создан и передан на редактирование в текстовый редактор. В окне редактора вписать:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"

Сохранить изменения.

4. sudo udevadm control --reload && sudo udevadm trigger

5. sudo xed /etc/initramfs-tools/modules

Вписать строку bfq и сохранить.

Содержание файла должно быть:

# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
bfq

6. sudo update-initramfs -u && shutdown -r now

7. После перезагрузки выполнить команду cat /sys/block/sda/queue/scheduler

Должно быть выдано: [bfq] none

Отменить изменения

1) sudo rm /etc/udev/rules.d/60-scheduler.rules

2) Убрать из  /etc/default/grub  параметр scsi_mod.use_blk_mq=1, т.е. вернуть к виду, например, GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

После этого обновить загрузчик sudo update-grub

понедельник, 14 мая 2018 г.

Эмблемы для каталогов Linux. Свой набор 3 – RSS2

Для собственных нужд был создан набор эмблем RSS2 для каталогов. Несмотря на то, что набор эмблем предназначен для окружения xfce, он может быть использован в Cinnamon или MATE.

Состав набора включает 6 значков RSS2.


Для добавления в систему эмблем набора RSS2 можно использовать приёмы, описанные в этих публикациях: вариант 1 или вариант 2.

Скачать набор значков RSS2.

понедельник, 30 апреля 2018 г.

Эмблемы для каталогов Linux. Свой набор 2 – recyclers

Для собственных нужд мной был создан набор эмблем для каталогов Recyclers. Несмотря на то, что набор эмблем предназначался для окружения xfce, он может быть использован в Cinnamon или MATE.

Состав набора включает 5 эмблем Корзины.


Первоначально одна из эмблем была использована для изменения значка файлов и каталогов, удаляемых по расписанию через Thunar (подробности). В дальнейшем состав набора был дополнен другими эмблемами.

Для добавления в систему эмблем набора Recyclers можно использовать приёмы, описанные в этих публикациях: вариант 1 или вариант 2.

Скачать набор значков Recyclers.

пятница, 27 апреля 2018 г.

Runtu: включить уведомления об обновлениях

Мейнтейнеры сборки Runtu не включили в неё графического отображения о наличии обновлений системы. Периодически проверять наличие обновлений через соответствующий пункт главного меню для меня оказалось не совсем удобным.

Для включения графического отображения о наличии уведомлений об обновлениях сначала установите интервал проверки обновлений.


Установите службу, уведомляющую о доступности обновлений, update-notifier


После этого уведомления об обновлениях будут отображаться как в оригинальной Ubuntu:





среда, 18 апреля 2018 г.

Автоочистка файла .bash_history


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


Принятое решение задачи сводится к удалению существующего и созданию нового файла .bash_history на периодической основе – раз в месяц.

Создаю исполняемый файл del-bash-hist.sh (или просто del-bash-hist) со следующим содержанием:

#!/bin/bash
rm /home/user/.bash_history
> /home/user/.bash_history
exit

В данном исполняемом файле: 

user – домашний каталог пользователя системы;

rm /home/user/.bash_history – удаление файла .bash_history;

> /home/user/.bash_history – создание пустого файла .bash_history;

exit – команда выхода.

Создание пустого файла .bash_history может быть осуществлено одной из трёх равнозначных по получаемому результату команд:

> /home/user/.bash_history

cp /dev/null /home/user/.bash_history

cat /dev/null > /home/user/.bash_history

Выбор конкретной команды зависит от Вашего предпочтения.

После создания файла назначаю ежемесячное задание на его выполнение. О создании пользовательского задания, выполняемого через cron, читайте здесь.

Примечание. Если Вы намерены не чистить файл, а только ограничить его размер, то читайте эту публикацию.