• Как правильно настроить IDE для работы с golang?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Прописываешь пути к установленному go:
    ( например если go установлен в папку $HOME/go )
    $ export GOROOT=$HOME/go
    $ export PATH=$PATH:$GOROOT/bin


    далее создаёшь рабочую область:
    $ export GOPATH="$HOME/work"
    $ export GOBIN="$GOPATH/bin"
    $ mkdir -p $GOPATH/src
    $ mkdir $GOBIN

    чтобы каждый раз после перезапуска терминала не прописывать переменные заново добавляем экспорты(export ...) в конец файла ~./.zshrc (для bash это ~/.bashrc)

    Теперь свои проекты на go перемещаешь в папку $HOME/work/src

    Для просмотра переменных go, используй команду:
    $ go env
    Ответ написан
    6 комментариев
  • Как дописать в строку много строк из другого файла..?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ str="45788-4rbf-77458-ik-90-98"
    $ cat IN.txt
    @96
    @97
    @98
    @99
    @100 
    
    $ str1=$(echo $str|awk -F- '{print $1"-"$2}')
    $ str2=$(echo $str|awk -F- '{print $3"-"$4"-"$5"-"$6}')
    $ awk '{print "'$str1'"$0"-'$str2'"}' IN.txt > OUT.txt
    
    $ cat OUT.txt
    45788-4rbf@96-77458-ik-90-98
    45788-4rbf@97-77458-ik-90-98
    45788-4rbf@98-77458-ik-90-98
    45788-4rbf@99-77458-ik-90-98
    45788-4rbf@100-77458-ik-90-98


    если str, str1,str2 фиксированные то можно и упростить:
    $ awk '{print "45788-4rbf"$0"-77458-ik-90-98"}' IN.txt > OUT.txt
    Ответ написан
  • Как получить переменную из bash скрипта извне?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ cat path.sh
    #!/bin/bash
    path1="путь1"
    path2="путь1"

    $ . ./path.sh
    $ rm -rf $path1 $path2
    Ответ написан
    Комментировать
  • Утилита командной строки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Комментировать
  • Какой посоветуете дешевый планшет или ноутбук для Linux (Server)?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    для домашнего не сильно требовательного сервера идеально подойдёт старенький можно и БУ-шный нетбук, графика не важна (в нетбуках она встроенная).
    плюсы: компактный, тихий, если еще жива батарея то и энергоустойчивый то есть страхование от возможных перепадов или временного пропадания напряжения, наличие клавиатуры и экрана также иногда сильно упрощает некоторые вещи.
    Ответ написан
    Комментировать
  • Как скопировать больший диск на меньший диск?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Я пробовал
    dd if=/dev/sdBIG of=/dev/sdSMALL bs=64K conv=noerror,sync
    Но система после копирования и загрузки ругается на испорченный второй раздел и требует чтобы я все починил.

    dd копирует весь диск побайтово и естественно будет ругаться на то что не может уместить 128G в 16G.
    dd просто тупо перенёс начальные 16G из 128гигового диска(sdBIG) в 16G(sdSMALL), поэтому у вас не только второй раздел будет повреждён(я так понял первый раздел у вас меньше 16G) но и данные на нём так же будут повреждены.

    Если итоговый раздел меньше чем исходный то вместо dd лучше использовать rsync.
    В начале на sdSMALL создаёте нужные разделы с учётом того чтобы туда уместились все переносимые данные. Далее можно из живой системы или примонтировав нужный раздел перенести данные:
    # rsync -aAXv --exclude={...} /откуда /куда
    --exclude - папки которые исключаем при переносе
    Как я понимаю первый раздел у вас корень, если так, то перенос из живой системы будет выглядеть примерно так:
    # rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /куда

    и на последок незабываем сделать корневой (первый) раздел загрузочным и при необходимости подправить загрузчик и fstab
    Ответ написан
    2 комментария
  • Какая есть альтернатива Adguard в линукс?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    вы просто нормальный блокировщик поставьте
    лучшим в этой области является uBlock Origin
    Ответ написан
    1 комментарий
  • Как перенести систему на другой диск большего размера?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    dd клонирует диск один в один, так что проблем не должно возникнуть
    единственное это возможно необходимо будет всё же подправить fstab:
    - если у вас используется идентификация разделов по UUID то он сменится
    - или если используется идентификация по именам(/dev/sd{a,b,c...}) и вы добавите еще диск то sda и sdb могут поменяться местами
    в любом случае система попросту не загрузится

    когда убедитесь что все нормально загружается и работает то можете расширить таблицу разделов и задействовать свободное место прибавив его к рядом стоящему разделу(проделывается с live-сd/usb):
    # parted /dev/sda resizepart 2 100%
    # e2fsck -f /dev/sda2
    # resize2fs /dev/sda2

    здесь sda2 (resizepart 2) это крайний раздел который примыкает к свободному пространству и который мы расширяем, естественно ставим свой

    п.с.
    всё описанное верно для традиционных файловых систем
    Ответ написан
    Комментировать
  • Как изменить шрифт на поддерживаемы в редакторе nano?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    как временное решение попробуйте запустить так:
    $ LANG=ru_RU.UTF-8 nano ФАЙЛ
    если надо на английском то:
    $ LANG=en_US.UTF-8 nano ФАЙЛ

    не знаю какой у вас дистрибутив, но по поводу nano версии 2.7 под Арчем проблем не наблюдается, возможно неверно собранный пакет или что-то ещё.
    Ответ написан
    Комментировать
  • Что такое емкость среза?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если по простому и коротко, то для среза:
    ёмкость(cap) - это выделенная память под элементы, при превышении размер автоматически увеличивается в два раза.
    длина(len) - это инициализированная память элементов, для превышения(добавления) нужно вручную использовать append.
    По умолчанию cap = len
    Всегда будет cap >= len
    Грубо говоря, cap выделяет память, а len инициализирует её всю или только часть .

    slice := make([]int, 2, 2) // эвивалентно slice := []int{0,0}
    fmt.Printf("len: %d, cap: %d\n", len(slice), cap(slice))
    fmt.Println(slice)
    
    slice = append(slice, 3)
    
    fmt.Printf("len: %d, cap: %d\n", len(slice), cap(slice))
    fmt.Println(slice)

    выведет:
    len: 2, cap: 2
    [0 0]
    
    len: 3, cap: 4
    [0 0 3]


    п.с.
    если конкретно по вашему примеру то в первом и во втором случае у вас инициализировано только 10 элементов которые команда fmt.Println(slice) и выводит.
    А паника при slice[11]=0 будет из за того что этот 11 элемент не инициализирован, хоть память под него и выделена, здесь необходимо использовать append.
    Ответ написан
    Комментировать
  • Почему выключенный AdBlock Plus блокирует рекламу?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Подскажите, в чём может быть проблема?

    проблема в самом AdBlock Plus, время от времени у него случаются "припадки".
    Помнится, когда пользовался им, тоже такое иногда проскакивало; в придачу частенько при первой загрузке браузера он вообще не срабатывал и все открытые страницы грузились с кучей рекламы, приходилось перезагружать браузер.
    С некоторого времени перешёл на uBlock Origin, не жалею.
    Ответ написан
    3 комментария
  • Как удалить программу со всеми конфигами в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    обычно хватает:
    $ sudo pacman -Rns пакет
    ну и ручками почистить если что осталось в хомяке

    более детально смотри арчвики - удаление пакетов
    Ответ написан
    Комментировать
  • Как внедрить golang/beego в автозагрузку (systemd, upstart, supervisor) vps linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    для systemd

    юнит:
    $ systemctl --user cat test.service
    
    # /home/admin/.config/systemd/user/test.service
    [Unit]
    After=local-fs.target network.target
    
    [Service]
    Type=simple
    ExecStart=/home/admin/code/go/bin/test
    Restart=on-failure
    RestartSec=60
    TimeoutSec=60
    
    [Install]
    WantedBy=default.target

    After - после каких сервисов или их групп запускать юнит. В данном случае запускать не раньше чем будет смонтированна локальная файловая система и доступна сеть.
    RestartSec - сколько секунд ждать между перезапуском юнит-сервиса(по умолчанию 100мс).
    TimeoutSec - сколько секунд ждать обработки start/stop запроса по истечении которых считать что процесс завершился с ошибкой (программа не успела поднятся/остановится за отведённое ей время).

    автозагрузка и запуск:
    $ systemctl --user enable test.service
    $ systemctl --user start test.service


    статус:
    $ systemctl --no-pager --full --user status test.service


    перезагрузка systemd для поиска новых или изменённых юнитов:
    $ systemctl --user daemon-reload
    проделывается после изменения описания юнитов в процессе их работы, об этом также будет выведено сообщение(в конце) при описании статуса изменённого сервиса.

    перезапуск web-сервера(после перекомпиляции):
    $ systemctl --user restart test.service

    здесь test.service(юнит-сервис) и test(веб-сервер на go) принадлежат пользователю admin (/home/admin/.config/systemd/user/test.service). В бщем кому принадлежит и кто может работать с юнит-сервисом я уже писал в одном из постов.

    п.с.
    если пользователь находится на сервере то скорее всего вам еще понадобится перевести его статус в linger, то есть чтобы он всегда подымался при старте системы(как и root):
    # loginctl enable-linger <username>
    Ответ написан
    1 комментарий
  • Доработка скрипта создания папки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    зачем такие мучения, делайте просто:
    echo "Укажите имя папки:"
    read Dir
    mkdir -p $Dir

    если нету то создаст, если есть то ничего страшного, ошибка подавится параметром -p
    Ответ написан
    2 комментария
  • Как найти фрагмент кода во всем проекте?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    попробуйте через строку поиска самого github-a что на главной странице проекта, там ищется конкретно по вашему коду
    Ответ написан
    1 комментарий
  • Что со мной не так или как установить golang в ubuntu?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    для того чтобы можно было использовать "go get ..." и "go insatall ..." необходимо установить переменную GOBIN:
    $ mkdir -p $GOPATH/bin
    $ export GOBIN=$GOPATH/bin


    п.с.
    Прописал в ~/.bashrc и ~/.profile переменные:

    достаточно и одного
    Ответ написан
  • Как в json с помощью jq добавить элемент внутрь массива?

    xotkot
    @xotkot Автор вопроса
    хорошо есть и хорошо весьма
    пока получился такой вариант:
    $ echo '{"a":1,"b":[1,2]}' | jq -c '. + {b:(.b + [3])}'
    {"a":1,"b":[1,2,3]}


    если есть ещё варианты, пишите
    Ответ написан
    Комментировать
  • Какая подкачка лучше (ZRAM, swap-раздел или swap-файл)?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    смотря от качества и количества данных с которыми вы работаете чаще всего

    если своп используется часто и много то лучше ставить его на раздел
    если своп используется не часто но много то лучше использовать файл подкачки
    если своп используется немного то можно обойтись и zram
    если своп используется относительно много но данные хорошо жмутся то здесь тоже можно обойтись zram

    можно в принципе использовать и комбинированный подход, например - использовать zram и файл подкачки для которого тоже использовать сжатие.
    Ответ написан
  • Как установить arch на флешку для запуска на любом железе?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Например, должен ли я установить драйвера на все карточки или они будут конфликтовать друг с другом и я должен ограничиться стандартной mesa?

    почему бы и нет, установить все свободные дрова на видео:
    pacman -S xf86-video-vesa xf86-video-nouveau xf86-video-intel xf86-video-ati

    или лучше сразу ставить группу xorg-drivers:
    pacman -S xorg-drivers
    в общем смотри Xorg#Driver installation

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

    Цель: флешка с arch-ем, запускающаяся на любом железе, для выполнения повседневных задач.

    Может вам просто модифицировать archiso под свои нужды. Раз настроите, соберёте и работать будет быстрее так как грузится в оперативку.
    Ответ написан
    2 комментария