{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "IT science: заметки с тегом linux",
    "_rss_description": "IT science — статьи и инструкции из мира IT",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/itscience.pro\/tags\/linux\/",
    "feed_url": "https:\/\/itscience.pro\/tags\/linux\/json\/",
    "icon": "https:\/\/itscience.pro\/pictures\/userpic\/userpic@2x.jpg?1658757154",
    "authors": [
        {
            "name": "IT science",
            "url": "https:\/\/itscience.pro\/",
            "avatar": "https:\/\/itscience.pro\/pictures\/userpic\/userpic@2x.jpg?1658757154"
        }
    ],
    "items": [
        {
            "id": "45",
            "url": "https:\/\/itscience.pro\/all\/chistim-pochtovy-server-ot-staryh-rassylok\/",
            "title": "Чистим почтовый сервер от старых рассылок",
            "content_html": "<p>Что-то много мусора накопилось в ящиках пользователей.<br \/>\nМожно удалить старые письма (рассылки), которые потеряли свою актуальность.<\/p>\n<p>Опираться будем на уникальное содержимое письма. И возраст файла.<\/p>\n<p>например, ищем строку «Return-Path: <user@domain.ru>»<br \/>\nи пусть, файл будет страше 30 дней<\/p>\n<p>получается скрипт:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">find \/var\/vmail\/ -type f -mtime +30 -exec grep -Ilr &quot;Return-Path: &lt;user@domain.ru&gt;&quot;  {} \\;<\/code><\/pre><p>где «\/var\/vmail\/» — путь к хранилищу писем<\/p>\n<p>выполнив эту команду получим список нужных нам файлов, без удаления<\/p>\n<p>а теперь, просто допишем в конец команду для удаления<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">find \/var\/vmail\/ -type f -mtime +30 -exec grep -Ilr &quot;Return-Path: &lt;user@domain.ru&gt;&quot;  {} \\; | xargs rm<\/code><\/pre><p>всё<\/p>\n",
            "date_published": "2022-09-06T10:49:01+03:00",
            "date_modified": "2022-09-06T10:48:54+03:00",
            "tags": [
                "find",
                "linux",
                "Postfix"
            ],
            "_date_published_rfc2822": "Tue, 06 Sep 2022 10:49:01 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "45",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "38",
            "url": "https:\/\/itscience.pro\/all\/podgotovka-mnogostranichnyh-tiff-dlya-nalog-ru\/",
            "title": "подготовка многостраничных TIFF для nalog.ru",
            "content_html": "<p>когда для налоговой нужно подготовить документы в формате многостраничных монохромных TIFF с разрешением 300х300 dpi приходит в помощь linux<\/p>\n<p>предположим у вас уже есть многостраничный pdf «multipage-input.pdf»<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">gs -o multipage-tiffg.tif -sDEVICE=tiffgray -r300x300 multipage-input.pdf<\/code><\/pre><p>создаём многостраничный TIFF «multipage-tiffg.tif» в оттенках серого, разрешением 300dpi<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">convert multipage-tiffg.tif -monochrome -compress lzw mono.tif<\/code><\/pre><p>далее преобразуем в монохромный документ «mono.tif»<\/p>\n",
            "date_published": "2021-06-23T17:33:08+03:00",
            "date_modified": "2021-06-23T17:33:23+03:00",
            "tags": [
                "convert",
                "gs",
                "ImageMagic",
                "linux"
            ],
            "_date_published_rfc2822": "Wed, 23 Jun 2021 17:33:08 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "38",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "20",
            "url": "https:\/\/itscience.pro\/all\/udalyaem-dublikaty-s-pomoschyu-fdupes\/",
            "title": "удаляем дубликаты с помощью fdupes",
            "content_html": "<p>Накопилось за несколько лет море фотографий, и столкнулся я с тем, что некоторые фотографии продублированы. Думал, телефон несколько раз выгрузил их на сервер, но оказалось их немало, да в разных папках и это неприятный факт, т. к. руками перелопатить миллионы фотографий — нереально... а сравнивать по содержимому процесс очень ресурсоемкий. Порывшись на просторах, нашел интересную утилитку fdupes, написал ее Андриан Лопес (Adrian Lopez), за что ему огромное спасибо. Программа сравнивает размер файла и MD5 хэш, и после сравнения начинает сверку по-байтно.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdupes \/home\/user\/photos<\/code><\/pre><p>ищет дубликаты в указанном каталоге<\/p>\n<p>-r — рекурсивный поиск<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdupes -r \/home\/user\/photos &gt; duplicate_list.txt<\/code><\/pre><p>сохранит в файле список дубликатов<\/p>\n<p>а, дальше с помощью awk отфильтруем дублирующиеся файлы для дальнейшего удаления<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">awk &#039;BEGIN{d=0} NF==0{d=0} NF&gt;0{if(d)print;d=1}&#039; duplicate_list.txt &gt; delete_list.txt<\/code><\/pre><p>а затем удаляем по списку<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">rm `cat delete_list.txt`<\/code><\/pre><p>или так<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">xargs rm &lt; delete_list.txt<\/code><\/pre>",
            "date_published": "2019-07-30T18:34:09+03:00",
            "date_modified": "2019-07-30T18:34:00+03:00",
            "tags": [
                "fdupes",
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 30 Jul 2019 18:34:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "20",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "19",
            "url": "https:\/\/itscience.pro\/all\/find-i-summarny-obem-dannyh\/",
            "title": "find и суммарный объем данных",
            "content_html": "<p>объем этих файлов, как это сделать?<br \/>\nЗадача нетривиальная, нашлось два решения (их может быть и больше)<\/p>\n<p>первое, используем du:<\/p>\n<blockquote>\n<p>find параметры_поиска -exec du -b {} + | awk ’{sum = sum+$1 }; END { print sum }’<\/p>\n<\/blockquote>\n<p>пример:<\/p>\n<blockquote>\n<p>find \/volume1\/photo\/ -maxdepth 1 -type f -exec du -b {} + | awk ’{sum = sum+$1 }; END { print sum }’<\/p>\n<\/blockquote>\n<p>второе, используем ls:<\/p>\n<blockquote>\n<p>find параметры_поиска -ls | awk ’{sum = sum+$7 }; END { print sum }’<\/p>\n<\/blockquote>\n<p>пример:<\/p>\n<blockquote>\n<p>find \/volume1\/photo\/ -maxdepth 1 -type f -ls | awk ’{sum = sum+$7 }; END { print sum }’<\/p>\n<\/blockquote>\n",
            "date_published": "2019-07-30T18:30:48+03:00",
            "date_modified": "2019-07-30T18:30:42+03:00",
            "tags": [
                "find",
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 30 Jul 2019 18:30:48 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "19",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "15",
            "url": "https:\/\/itscience.pro\/all\/kachaem-roliki-s-sayta-rossiya-k\/",
            "title": "качаем ролики с сайта Россия К",
            "content_html": "<p>Потребовалось нам скачать передачу АГОРА с сайта и пересмотреть ее в режиме offline.<\/p>\n<p>открываем ссылку<\/p>\n<blockquote>\n<p><a href=\"https:\/\/tvkultura.ru\/video\/show\/brand_id\/61882\/episode_id\/2169406\/video_id\/2182968\/\">https:\/\/tvkultura.ru\/video\/show\/brand_id\/61882\/episode_id\/2169406\/video_id\/2182968\/<\/a><\/p>\n<\/blockquote>\n<p>переходим в режим отладки Ctrl+Shift+C, выбираем закладку «Сеть» (Network)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/k1.png\" width=\"497\" height=\"242\" alt=\"\" \/>\n<\/div>\n<p>очищаем список загруженных документов, жмем в плеере play и у нас начинают появляться подгруженные файлы, в списке находим ролики с расширением ts. Да вся передача разбита на множество небольших фрагментов, по 10-15 секунд, нам надо их всех выкачать.<br \/>\nна найденном файле жмем правой клавишей и выбираем Копировать->Копировать URL (Copy->Copy link address)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/k2.png\" width=\"540\" height=\"385\" alt=\"\" \/>\n<\/div>\n<p>у нас в буфере обмена оказывается ссылка примерно такого вида:<\/p>\n<blockquote>\n<p><a href=\"https:\/\/a3569458507-s81121.cdn.ngenix.net\/_cdn_auth\/secure\/v\/vh\/vod_hls\/definst\/smil:vh\/smil\/002\/182\/968_d20190519103336.smil\/media_b1800000_pd3628000_1.ts\">https:\/\/a3569458507-s81121.cdn.ngenix.net\/_cdn_auth\/secure\/v\/vh\/vod_hls\/definst\/smil:vh\/smil\/002\/182\/968_d20190519103336.smil\/media_b1800000_pd3628000_1.ts<\/a><\/p>\n<\/blockquote>\n<p>находим последний фрагмент, перематываем ролик до конца и подгружается файл с адресом:<\/p>\n<blockquote>\n<p><a href=\"https:\/\/a3569458507-s81121.cdn.ngenix.net\/_cdn_auth\/secure\/v\/vh\/vod_hls\/definst\/smil:vh\/smil\/002\/182\/968_d20190519103336.smil\/media_b800000_pd3628000_374.ts\">https:\/\/a3569458507-s81121.cdn.ngenix.net\/_cdn_auth\/secure\/v\/vh\/vod_hls\/definst\/smil:vh\/smil\/002\/182\/968_d20190519103336.smil\/media_b800000_pd3628000_374.ts<\/a><\/p>\n<\/blockquote>\n<p>нам нужны значения от 1 до 374, а далее дело техники, я уже подготовил bash скрипт<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\n# задаем диапазон фрагментов, от 1 до 374\nfor counter in {1..374}\ndo\n   # дополняем нулями до трехзначного числа (чтобы при склейке в один файл фрагменты не перемешались)\n   foo=$(printf &quot;%03d&quot; $counter)\n   # скачиваем ролики по одному и сохраняем с дружественными именами\n   wget -O &quot;video_$foo.ts&quot; &quot;https:\/\/a3569458507-s81121.cdn.ngenix.net\/_cdn_auth\/secure\/v\/vh\/vod_hls\/definst\/smil:vh\/smil\/002\/182\/968_d20190519103336.smil\/media_b800000_pd3628000_$counter.ts&quot;\ndone\n\n# дальше с помощью ffmpeg склеиваем в один файл и сохраняем в формате mp4\nffmpeg -f concat -safe 0 -i &lt;(for f in .\/*.ts; do echo &quot;file &#039;$PWD\/$f&#039;&quot;; done) -c copy output.mp4\n\n# удаляем лишние файлы\nfind . -name &quot;*.ts&quot; -type f -delete<\/code><\/pre><p>в результате работы скрипта получается файл output.mp4, в котором находится вся передача<\/p>\n",
            "date_published": "2019-06-04T12:40:48+03:00",
            "date_modified": "2019-06-04T13:07:55+03:00",
            "tags": [
                "bash",
                "ffmpeg",
                "linux"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/k1.png",
            "_date_published_rfc2822": "Tue, 04 Jun 2019 12:40:48 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "15",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/k1.png",
                    "https:\/\/itscience.pro\/pictures\/k2.png"
                ]
            }
        },
        {
            "id": "1",
            "url": "https:\/\/itscience.pro\/all\/avtokliker-dlya-linux\/",
            "title": "автокликер для linux",
            "content_html": "<p>IMHO лучший жанр игр для нас  — idle game. По большей части это «кликеры», есть куча программ  автоматизации нажатий кнопок для Windows, а вот для Linux не нашлось, исправляем ситуацию.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/click_generator.png\" width=\"337\" height=\"236\" alt=\"\" \/>\n<\/div>\n<p>скачать можно тут: <a href=\"https:\/\/itscience.pro\/downloads\/clicks_generator.tar.gz\">https:\/\/itscience.pro\/downloads\/clicks_generator.tar.gz<\/a><\/p>\n",
            "date_published": "2019-04-03T10:58:32+03:00",
            "date_modified": "2019-04-03T10:54:50+03:00",
            "tags": [
                "click",
                "generator",
                "linux"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/click_generator.png",
            "_date_published_rfc2822": "Wed, 03 Apr 2019 10:58:32 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "1",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/click_generator.png"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171)"
}