• Как создать маленький(только данные) образ большого раздела?

    @glaucidium Автор вопроса
    Поставил бы решением ответ от Valentin Barbolin, да он ответил не туда.

    https://www.baeldung.com/linux/clone-space-in-use-...
    Оказывается, у dd есть опция conv=sparse, которая позволит скопировать раздел в разреженный файл.
    Только перед этим надо свободное пространство на разделе забить нолями. (dd if=/dev/zero of=/mnt/sdXY/zero; rm /mnt/sdXY/zero)
    А если нужно записать разреженный образ на реальный раздел, то можно смонтировать его как loop устройство и уменьшить ФС.
    https://askubuntu.com/questions/260620/resize-dev-...
    Ответ написан
    1 комментарий
  • Линукс. Есть ли способ заполнять пути в консоли из файлового менеджера?

    @glaucidium Автор вопроса
    Получилось!

    https://github.com/gokcehan/lf/wiki/Tutorial#worki...
    Потомковый процесс не может изменить путь родительского, но он может записать путь в переменную среды. И можно забиндить на клавишу функцию, которая будет извлекать это значение.

    Как вставить значение в редактируемую строку терминала — man bash описывает это в секции bind. Это переменные READLINE_LINE, READLINE_POINT, READLINE_MARK.

    Итого:
    # Подключаем вставку путей по хоткею Ctrl-o
    PushToShell() {    
        # Делим строку на: до курсора и после и вставляем путь между ними.   
        befCurs="${READLINE_LINE:0:READLINE_POINT}"
        aftCurs="${READLINE_LINE:READLINE_POINT}"    
        READLINE_LINE="$befCurs$1$aftCurs"
        # Сдвигаем курсор на длину пути
        READLINE_POINT=$(($READLINE_POINT+$(echo -n "$1" | wc -m)))
    }
    
    FM_PastePath() {
        dir="$(mktemp -t "FM_Dir.XXXXXXXXXX")"
        file="$(mktemp -t "FM_File.XXXXXXXXXX")"    
        ranger --choosedir="$dir" --choosefile="$file" "${@:-$PWD}" #тут можно подключить любой другой ФМ.
    
        PushToShell "$([ -s "$file" ] && cat "$file" || cat "$dir")"
        rm -f "$dir"
        rm -f "$file"
    }
    
    bind -x '"\C-o":"FM_PastePath"'

    Работает независимо от наличия Иксов. И вместо ФМ, можно подключить иную дополняшку для других задач.
    Либо можно сразу работать в проге, которая позволит удобно работать с путями.

    Всем спасибо!
    Ответ написан
  • QEMU почему первый снимок всегда сохраняется без изменений?

    @glaucidium Автор вопроса
    Похоже это баг.
    Если называть снимки с буквы, то всё сохраняется как и должно.
    Ответ написан
    Комментировать
  • Как установить пароль на сетевую папку?

    @glaucidium Автор вопроса
    Вспомнил, почему раньше так не сделал:
    В общем доступе к папке видел своего юзера. Причём если сетевого ещё можно удалить, то основного нельзя. Это и смутило.
    60e5c3915aae1543143708.png
    Поэкспериментировав, понял что это окно — скорее отражение вкладки безопасность(если удалить userNet здесь, то пропадёт и там). Т.е. сюда смотреть вообще не надо.
    А на самом деле, сетевой доступ учёток настраивается в «расширенной настройке общего доступа».

    В итоге настроил так. Проверил - пускает только по userNetу, чего и добивался.
    60e5c4cac5109147784267.png
    Ответ написан
    Комментировать
  • Как получить иерархический список путей, сортированый по типу файлов и алфавиту?

    @glaucidium Автор вопроса
    Задача оказалась не тривиальной.
    Самое красивое решение, это запустить find по папкам, и вложить в -exec ему, find по файлам.

    Просто вывести список путей, с обходом в ширину.
    find /mnt/d/settingsMicro/ -type d -print -exec find "{}" -maxdepth 1 ! -type d \;


    Список путей с форматированием
    find /mnt/d/settingsMicro/ -type d -printf '%y %p/\n' -exec find "{}" -maxdepth 1 ! -type d -printf '%y %p\n' \;


    Список путей с обработкой
    find /mnt/d/settingsMicro/ -type d -exec find "{}" -maxdepth 0 -printf '%y %p/\n' \; -exec find "{}" -maxdepth 1 ! -type d -printf '%y %p\n' \;


    Ссылки по теме:
    https://stackoverflow.com/questions/12503958/recur...
    https://stackoverflow.com/questions/539583/how-do-...
    https://unix.stackexchange.com/questions/279895/ho...
    https://stackoverflow.com/questions/1086907/can-fi...
    https://github.com/tavianator/bfs - написали рекурсивный find
    Ответ написан
    Комментировать
  • Возможно ли в C# отменить Ping?

    @glaucidium Автор вопроса
    Нашёл решение. Прекрасно работает. На очистку ресурсов не проверял.
    public Task<PingReply> SendPingAsync(string host, int timeout, CancellationToken cancelToken)
            {            
                TaskCompletionSource<PingReply> tcs = new TaskCompletionSource<PingReply>();
                if (cancelToken.IsCancellationRequested)         
                    tcs.TrySetCanceled();
                else
                {
                    using (Ping ping = new Ping())
                    {
                        ping.PingCompleted += (object sender, PingCompletedEventArgs e) =>
                        {
                            if (!cancelToken.IsCancellationRequested)
                            {
                                if (e.Cancelled)                                
                                    tcs.TrySetCanceled();
                                else if (e.Error != null)                                
                                    tcs.TrySetException(e.Error);
                                else                                
                                    tcs.TrySetResult(e.Reply);
                                }                        
                        };
                        cancelToken.Register(() => {tcs.TrySetCanceled();});
    
                        ping.SendAsync(host, timeout, null);
                    }
                };
                return tcs.Task;
            }
    Ответ написан
    Комментировать
  • Как правильно организовать цикл по таскам?

    @glaucidium Автор вопроса
    Нашёл решение.
    На сколько понял из https://msdn.microsoft.com/en-us/library/mt674893.aspx, async Task метод, не имеющий return, но имеющий await автоматически выдаёт Task.

    В общем, переписал тот метод вот так, и всё заработало как надо. Логи говорят, что задачи начинаются почти одновременно, и завершаются когда приходят соответствующие ответы на реквесты. И отписка "Задачи завершены" происходит только после завершения всех задач.
    public static async Task ProcessingRequset(Tuple<string, string> address)
            {
                    HttpWebResponseLink httpWebResponseLink = new HttpWebResponseLink();
                    try
                    {
                        HttpWebResponse response = (HttpWebResponse) await GetResponseAsync(address.Item1, address.Item2);
                        httpWebResponseLink.IsHttpWebResponseTaked = true;
                        httpWebResponseLink.httpWebResponseLink = response;
                    }
                    catch (Exception e)
                    {
                        httpWebResponseLink.IsHttpWebResponseTaked = false;
                    }
    	              // логгирование и обработка результатов запроса
            }


    Также добавлю, что нашёл ещё более простой способ обработки списка долго ждущими операциями:
    var tasks = list.Select(async x =>
    {
        var y = await IOProcessing(x);
        var z = await IOProcessing(y);
        Console.WriteLine(z);
    });
    Task.WhenAll(tasks).Wait();
    Console.WriteLine(«Tasks completed»);
    Ответ написан
    Комментировать