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

Об автоматизации очистки Корзины в Linux или "страсти" по очистке Корзины через терминал


Как правило, в процессе работы очистка Корзины в Linux производится вручную по принципу "когда дойдут руки". Однако в Linux, в отличие от Windows, Корзина является (если так можно выразиться) "резиновой". То есть со временем Вы можете столкнуться с ситуацией, когда объём занимаемого в Корзине контента станет сопоставимым с объёмом доступного для записи места на Вашем жёстком диске.

Ряд пользователей считает, что удалённые файлы и каталоги нет необходимости складывать в Корзину. Как говорится, удалил – значит удалил. Но бывает и так, что данные удалены в спешке или ошибочно и к ним необходимо вернуться. В этом случае встаёт проблема как эти данные "достать обратно". Поэтому я за то, чтобы удаляемый контент, всё-таки, в Корзину складывался.

Но при "творческой" работе про необходимость очистки Корзины забывается. Например, у меня этому способствует ещё и то, что в моей системе Корзина не отображается на рабочем столе, поэтому про её существование порой просто забываю. Поэтому, со временем, и возникла Idée fixe (фр. – укоренившаяся мысль) об организации автоматической очистки Корзины через некоторое время после старта системы. По мере накопления информации о работе Корзины в Linux и способах её автоматической решение этой задачи стало напоминать мне "страсти-мордасти".

Мало кому сегодня известно, что именно так называется ранний рассказ Максима Горького в его цикле рассказов "По Руси". В рассказе писатель отсылает к русской колыбельной песни, в которой как раз слова про страсти-мордасти. Страсти-мордасти означают трудности и тяжелую жизнь маленького обыкновенного человека ... 

У кого не было необходимости проявлять любознательность в вопросах гибкой настройки системы "под себя" рассмотрение вариантов решения вопроса об автоматической очистке Корзины в Linux может превратиться в "вынос головного мозга".

Пояснение "конструкции" Корзины в Linux

Итак, в Ubuntu и Linux Mint файлы Корзины (Trash) расположены в скрытом каталоге. Если, условно говоря, под логином пользователя подразумевать user, то Корзина расположена по пути /home/user/.local/share/Trash  Для того, чтобы увидеть её полное содержимое необходимо в файловом менеджере включить отображение скрытых файлов (обычно комбинацией клавиш ctrl и h). В каталоге Trash Вы увидите 3 каталога:


Удаляемый контент помещается в каталог files. В нём могут находиться как файлы, так и каталоги. Каталог info содержит только файлы с расширением trashinfo, например, file1.trashinfo  Эти файлы можно открыть текстовым редактором и посмотреть их содержимое. Ниже для примера указано содержание файла Trash-1.png.trashinfo, соответствующего рисунку выше.

[Trash Info]
Path=/home/user/%D0%98%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/Trash-1.png
DeletionDate=2017-12-11T11:14:44

Если воспользоваться декодировщиком ссылок, то после декодирования содержание строки Path= приобретёт вид: /home/user/Изображения/Trash-1.png

Для комплекта вот Вам ещё и англоязычный декодировщик: https://www.urldecoder.org

Таким образом, файлы каталога info содержат сведения о местоположении и времени удаления каждого из объектов каталога files.

В каталог expunged помещается контент, который был удалён, но по каким-то причинам полного удаления его произведено не было. Как указывалось в оригинале, откуда и была получена такая информация, "expunged → Deleted files but for some reason unable to delete".

Для автоматической очистки Корзины через некоторое время после старта системы будет использовать скрипт sh, представляющий из себя последовательность выполняемых команд, каждая последующая из которых будет выполнена после завершения предыдущей.

Как сделать скрипт sh

Для создания скрипта sh запустите установленный у Вас текстовый редактор и впишите в него строку:  #!/bin/sh

Сохраните файл как файл с раcширением sh (например, script.sh). Пометьте его как исполняемый файл. Проще всего это сделать в менеджере файлов через его "Свойства":


Предпочитающие терминал, как правило, используют команду chmod u+x адрес_файла

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

Способы очистки Корзины через терминал

В русскоязычном сегменте Интернет наиболее часто для очистки Корзины Linux приводится команда   rm -dfr ~/.local/share/Trash/info/* ~/.local/share/Trash/files/*

Т.е. относительно домашнего каталога пользователя ~ без дополнительных запросов удаляются файлы и каталоги в .local/share/Trash/info и .local/share/Trash/files  Для понимания команды rm -dfr запустите в терминале команду rm --help

Таким образом, в рузультате получится скрипт очистки Корзины, который можно запускать через некоторое время после старта системы:

#!/bin/sh
rm -dfr ~/.local/share/Trash/info/* ~/.local/share/Trash/files/*
zenity --info --text "Очистка Корзины произведена." 2>/dev/null --timeout=5
exit

При использовании Cinnamon задержка устанавливается так. как описано здесь. При использовании xfce команда с задержкой (Настройки – Сеансы и запуск – Автозапуск) будет иметь, например, вид

sh -c "sleep 240 && /home/user/Tools/Trash-clean.sh"

В приведенной выше команде цифра 240 соответствует числу секунд (4 минуты), по истечении которых работа команды sleep будет завершена и будет выполнен собственно сам файл sh.

Однако в случае нахождения в Корзине ранее удалённых Вами скрытых каталогов с определённым числом вложенных элементов, например,



то после выполнения указанной выше команды Вы можете обнаружить, что по факту полной очистки Корзины не произошло:




На одном из сайтов для очистки Корзины через терминал приводятся команды:

cd ~/.local/share/Trash

find . -delete

Т.е. перейти в каталог .local/share/Trash, найти и удалить всё, что там находится. После этой команды упоминаемые выше каталоги expunged, files, info будут также удалены. Правда при первой же операции удаления в Корзину данные каталоги будут вновь автоматически созданы системой.

На другом сайте автор публикации предлагает команды:

rm -rf ~/.local/share/Trash

mkdir ~/.local/share/Trash

mkdir ~/.local/share/Trash/expunged

mkdir ~/.local/share/Trash/files

mkdir ~/.local/share/Trash/info

Т.е. удалить каталог .local/share/Trash со всем его содержимым, создать его снова и далее во вновь созданном каталоге Trash создать каталоги expunged, files, info. По большому счёту данные варианты являются равнозначными.

Корзины в Linux на других дисках и съёмных носителях

Наверняка Вы заметили, что при использовании подключаемых съёмных носителей или дополнительных жёстких дисков компьютера файловые системы которых монтируются, на них создаются свои Корзины в виде скрытых каталогов .Trash-1000   1000 – это ID пользователя в системе, под которым он работает. Т.е. если Вы 1-й или единственный пользователь Linux, то с высокой степенью вероятности Ваш ID будет 1000. Для второго пользователя, который был создан позднее, ID, скорее всего, будет 1001.

На одном из моих компьютеров имеется 2 дополнительных винчестера, отформатированных как 1 раздел = 1 диск. И если для того винчестера, на котором установлена система, Корзина расположена по пути  .local/share/Trash,  то для других разделов Корзина будет соответственно по пути
  /media/user/Disk-1/.Trash-1000  и  /media/user/Disk-2/.Trash-1000

Так как в моём случае происходит автомонтирование дисков при старте системы, то у меня Корзины расположены в  ~/G-2/.Trash-1000  и  ~/N-2/.Trash-1000  (точками монтирования разделов являются каталоги G-2 и N-2). Про автомонтирование можно прочитать здесь.

Поэтому наряду с очисткой .local/share/Trash мне необходимо произвести и очистку  G-2/.Trash-1000  и  N-2/.Trash-1000

Исходя из описанного выше, возможны 2 варианта реализации, которые равнозначны. Первый вариант использует, если так можно выразиться, "мягкое" удаление, а второй – "жёсткое".

Вариант 1

#!/bin/sh
cd ~/.local/share/Trash/info
find . -delete
cd ~/.local/share/Trash/files
find . -delete
cd ~/G-2/.Trash-1000/info
find . -delete
cd ~/G-2/.Trash-1000/files
find . -delete
cd ~/N-2/.Trash-1000/info
find . -delete
cd ~/N-2/.Trash-1000/files
find . -delete
zenity --info --text "Корзина очищена." 2>/dev/null --timeout=5
exit

То есть, в каждом из разделов система последовательно "ходит" в каталоги Корзины info и files и удаляет из них содержимое. После выполнения всех операций отображается информационное сообщение "Корзина очищена.", которое автоматически исчезает через 5 секунд.

Вариант 2

#!/bin/sh
cd ~/.local/share/Trash
find . -delete
mkdir ~/.local/share/Trash/expunged
mkdir ~/.local/share/Trash/files
mkdir ~/.local/share/Trash/info
cd ~/G-2/.Trash-1000
find . -delete
mkdir ~/G-2/.Trash-1000/expunged
mkdir ~/G-2/.Trash-1000/files
mkdir ~/G-2/.Trash-1000/info
cd ~/N-2/.Trash-1000
find . -delete
mkdir ~/N-2/.Trash-1000/expunged
mkdir ~/N-2/.Trash-1000/files
mkdir ~/N-2/.Trash-1000/info
zenity --info --text "Корзина очищена." 2>/dev/null --timeout=5
exit

То есть, каждом из разделов система последовательно "ходит" в каталоги Корзины и удаляет из них всё, после чего снова создаёт каталоги expunged, files, info. После выполнения всех операций отображается информационное сообщение "Корзина очищена.", которое автоматически исчезает через 5 секунд.

Если вместо информационного сообщения по центру экрана Вы предпочитаете видеть вплывающие системные уведомления (оповещения), то вместо строки

zenity --info --text "Текст сообщения." 2>/dev/null --timeout=3

используйте строку  notify-send -i info "Текст сообщения."

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

sudo apt install libnotify-bin

А если необходимо удалить содержимое Корзины только старше N дней?

В этом случае используется более сложная конструкция команд удаления. В приведенном ниже примере сначала происходит удаление сведений о всех объектах в Корзине старше 3 дней (как указывалось выше, в каталоге info расположены только файлы, содержащие сведения о помещённых в Корзину объектах), а затем должны удаляться файлы и каталоги также старше 3 дней.

find /home/user/.local/share/Trash/info -type f -mtime +3 -exec rm -rf {} \;
find /home/user/.local/share/Trash/files -type f -mtime +3 -exec rm -rdf {} \;
zenity --info --text "Файлы старше 3 дней в Корзине удалены." 2>/dev/null --timeout=5
exit

В данном примере N=3, то есть +3 как раз и является условием выбора "старше 3 дней".

Однако в моём случае такой скрипт в отношении каталогов не сработал. То есть файлы старше 3 дней удаляются без вопросов и даже в каталогах. Но вот сами каталоги так и остаются в Корзине. Не помогло даже включение в скрипт дополнительной команды

find /home/cemea/.local/share/Trash/files -type f -mtime +3 -execdir rm -rdf {} \;

Решение вопроса было получено позднее через скрипт для собственных нужд, описанный в публикации "Очистка объектов Корзины старше N дней через bash".


воскресенье, 17 декабря 2017 г.

Google Диск. Практическая реализация синхронизации и совместной работы в Windows с папками Google Диска на ПК

Рассмотрение данного вопроса связано с выбором наиболее удачной модели совместной работы с синхронизируемыми на ПК папками с точки зрения удобства настройки и потребления системных ресурсов.

Для Google Диск всемирно известная корпорация добра выпускает десктопные клиенты синхронизации только для Windows, Mac, Android и IOS. И так как выпуск десктопного клиента для Linux Google в течение длительного времени упорно игнорирует, то данное облако долгое время оставалось вне области моих интересов.

Так с некоторых пор называют компанию Google Inc, ту самую корпорацию, которая известна по своим знаменитым продуктам – поисковику, почтовому сервису, облачному сервису, картам и многому прочему.
Назвали ее так в противовес "Корпорации зла", Microsoft Corporation, которая навязчиво предлагает лишь свои стандарты и решения. Гугл же потихоньку отбирает рынок у монополиста.
(источник: Большой вопрос.ru)


После произведённого ребрендинга десктопное приложение для персонального использования стало называться "Автозагрузка и синхронизация", а для бизнеса – "Клиент Google Диска". Предметом данной публикации является рассмотрение работы с приложением "Автозагрузка и синхронизация".

Скачанный для установки клиент представляет собой небольшой исполняемый файл installbackupandsync.exe, который впоследствии скачает и установит приложение синхронизации.

Настройка клиента

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





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



В расширенных настройках Вы можете исключить синхронизацию некоторых типов файлов по их расширению, например, tmp и bak.

Слева от ссылки "Изменить" имеется кнопка выбора папки для синхронизации с Диском, которая будет расположена за пределами пространства папки Google Диск. Например, я желаю синхронизировать с Google Диском папку Exchange, расположенную в C:\Data



Папка Google Диск расположена в папке профиля пользователя системы.


Google считает, что все имевшиеся на Диске папки (Мой Диск) до установки клиента будут синхронизироваться именно с этой папкой профиля пользователя. А все дополнительные объекты, которые будут указаны для синхронизации, расположены в папке Диска "Компьютеры".


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




Обратите внимание на предыдущий рисунок. После кнопки OK Вы видите ссылку "Изменить", нажав на которую Вы получите возможность указать не путь, предлагаемый по умолчанию  (C:\Users\папка_профиля_пользователя\Google Диск), а выбранную папку, расположение которой м.б. на другом логическом разделе (диск D, диск E и т.п.) Ниже можно настроить синхронизацию не всех папок облака Google Диск, а только некоторых.


То, что будет указано (см. рисунок выше) будет скачиваться в папку Google Диск папки профиля пользователя системы.

В системном трее (на подставке рабочего стола) работа клиента отображается значком, кликнув по которому можно поинтересоваться его настройками. Кроме того, клик по значку отобразит процесс синхронизации в подробностях. То есть какие файлы синхронизируются и сколько файлов осталось. Для больших объектов процесс синхронизации будет отображаться в процентах выполнения.


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


В спокойном состоянии (отсутствие синхронизации), что отображается значком с направленной вверх стрелочкой синего цвета (см. предыдущий рисунок), клиент потребляет неожиданно много по сравнению с другими клиентами синхронизации с облаком. Эта величина может варьироваться, но в незначительных пределах. Возможно, это обусловлено тем, что имеется 3 процесса. С точки зрения практического применения клиента какой процесс за что отвечает значения не имеет. Просто берём на заметку.



Для сранения, запущенный клиент Диска.Яндекс, судя по диспетчеру задач, в состоянии покоя ведёт себя скромнее (15-19 КБ):


Справедливости ради необходимо отметить, что когда Google совсем "успокоится", то есть в течение некоторого времени будет находиться в состоянии отсутствия активных передач, то и его потребление ресурсов становится вполне приемлемым.


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

В одной из предыдущих публикаций для этой предлагалось использовать программу Startup Delayer. Если в настройках данного ПО обратиться к свойствам объекта GoogleDriveSync, то можно увидеть, что его запуск осуществляется с ключом /autostart.



Попробуем убрать этот ключ, указать задержку запуска и перезагрузить систему.




Можно убедиться в правильности предпринятых для достижения этой цели шагов, контролируя по времени процесс запуска приложения.



 Примечание.  После 2-й или 3-й перезагрузки Вы можете наблюдать, что задержка не сработает. Обратившись в Startup Delayer к списку автозагружаемых приложений Вы можете с удивлением обнаружить, что у Вас имеется 2 записи GoogleDriveSync: настроенная на задержку и запускаемая при старте системы с нулевой задержкой, т.е. восстановленная. Это связано с тем, что такая запись автостарта с ключом /autostart присутствует в реестре. Удалите в Startup Delayer "восстановленную" запись. Изменение будет записано в реестр и больше такой ситуации повторяться не будет.

На рисунке выше видно, что вместо вертикальной стрелки вверх на значке происходит анимация, что свидетельствует о  синхронизации ПК с облаком.

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


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



Также в эти моменты будет показаны синхронизируемые в данный момент времени файлы.


Как видно на рисунке выше, синхронизация происходит в несколько потокоа, то есть одновременно обрабатываются 5 файлов. При этом число "готовых" файлов, помеченных зелёным, будет варьироваться в пределах 1-2, а число скачиваемых (загружаемых), помеченных синим анимационным кружочком, 3-4 Диспетчер задач покажет Вам, что число процессов googledrivesync.exe по сравнению с состоянием покоя также выросло.


Признаком завершения синхронизации данных является изменение состояния значка.


Совместная работа с папками общего доступа

Чтобы предоставить папку в совместное использование необходимо авторизоваться в Google Диске через браузер, выбрать папку, назначить её в совместный доступ, указать пользователя Google и определить для него необходимые права.

Выделите папку и нажмите правую кнопку мыши. В выпадающем меню кликните на "Совместный доступ".


Укажите пользователя и назначьте необходимые права. Выбор, правда, небольшой, поэтому долго думать Вам не придётся.


Другому пользователю на почту поступит соответствующее уведомление и после выполнения им необходимых действий предоставленная ему в доступ папка будет отображаться в его пространстве Google Диска. Но это ещё не означает, что он её автоматически увидит в своих синхронизируемых данных. На начальном этапе эта папка отображается в разделе "Доступные мне" (смотреть через браузер).


Чтобы включить её в состав своих синхронизируемых клиентом данных необходимо (опять же в браузере) через правый клик мыши скомандовать "Добавить на Мой Диск" или попробовать перетащить а "Мой Диск" мышкой (может зависеть от браузера) и впоследствии даже в "Мое устройство ПК".






Если теперь обратиться к настройкам клиента, то можно убедиться в том, что данная папка доступна для синхронизации на ПК в папке Google Диск.

Щёлкните по значку клиента и далее на 4 вертикальных точки. Дальше всё будет понятно интуитивно.





Эта папка (JoinedEx) будет находиться в папке Google Диск Вашего ПК и помечена как папка с совместным доступом (в рассматриваемом примере на Windows 7 – синий силуэт):


Увы, но в первом эксперименте в папку облака "Мое устройство ПК" переместить её не представилось возможным, хотя в дальнейшем в браузерах Chrome (Chromium) этот шаг осуществить получилось.


Вам необходимо будет иметь в виду, что на системном диске Windows (как правило, это C, но могут быть и варианты) необходимо иметь достаточно свободного дискового пространства для нормальной работы с Google Диском. Но если Вы внимательно читали описанное выше, то в самом начале настройки клиента имеется возможность указания другого расположения папки Google Диск на ПК. Однако эта настройка осуществляется только на начальном этапе. Если вы пожелаете всё переделать, то после деинсталляции клиента Вам придётся удалить сопутствующие ему скрытые папки и хорошо вычистить реестр.

При работе с папкой совместного доступа с правом "Перемещение и изменение" избегайте желания её переименовать, как это Вы могли делать в Диск.Яндекс или Dropbox. Как только Вы её переименуете, то изменения будут реплицированы на пространство папок Вашего респондента или всех респондентов, работающих с этой папкой. На примере ниже на своём ПК переименовываю JoinedEx в JoinedR2. Это изменение приводит к переименованию папки JoinedEx на Google Диске того, кто предоставил эту папку мне в доступ.



При этом душевный настрой работающих с данной папкой может претерпевать серьёзные изменения, переходя из состояния "я слегка сердит(а)" в состояние "я в ярости".

Для проверки совместной работы в папку JoinedEx были помещены несколько файлов:


После завершения процесса синхронизации эти же файлы отображались на Google Диске другого аккаунта:


После всех синхронизаций диспетчер задач отображал мне сначала 5, а потом 4 процесса с различающимися расходами ресурсов. Лично для меня такое непостоянство так и осталось "тайной мадридского двора".



Возвращаясь к настройкам, перейдём к последнему пункту вертикального меню слева. Как видно из рисунков ниже, здесь никаких комментариев не требуется.




Можно отметить, что назначение папок для синхронизации можно произвести через правое контекстное меню Проводника. Например, добавим папку Books fb2.




К тем папкам, которые уже синхронизируются клиентом, также применимы операции при помощи правого контекстного меню мыши:




В качестве своего ряда заключения.

Описанное выше было выполнено на виртуальной машине. На реальном ПК показатели отдельных процессов googledrivesync.exe достигали значений в 280-320 КБ. Такое потребление ресурсов наблюдалось в случае большого числа (более 9 тысяч) файлов в очереди на обработку.

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