Ответы пользователя по тегу bash
  • Можно ли добавить cron через bash скрипт?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Если задание ни разу вообще не добавлялось, то можно так добавить для root:
    echo -e '0 */8 * * * команда_на_исполнение' | sudo crontab -

    но уже следующее задание или запускалось командой sudo crontab -e, надо добавлять так:
    sudo sh -c "echo '0 */8 * * * команда_на_исполнение' >> /var/spool/cron/crontabs/root"
    и перезапуск cron
    sudo /etc/init.d/cron restart
    Ответ написан
    Комментировать
  • Нужно написать скрипт, который добавляет текст в предпоследнюю строку. Как это реализовать?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Многие sed советуют, но sed имеет баги и если рядом будут файлы с похожим контентом, он поменяет и в них тоже всё...

    Лучше AWK пользовать для этих целей.
    Ответ написан
    Комментировать
  • Как автоматически запускать баш скрипт при включении пк?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Вам уже почти всё написали...
    Забыли только добавить ещё и Supervisor.

    Вполне гибкий инструмент.
    Ответ написан
    Комментировать
  • Как на Убунте добавить в файл host через bash?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Если в зоне действия текущего Пользователя, т.е. в зоне Домашнего каталога /home/ваше_имя_Пользователя, то, например, если файл лежит в каталоге Документы:
    echo '127.0.0.1 site.com' >> Документы/myfile.sh

    А если надо добавить в файл в зоне действия root (корень ФС например), например ваш файл myfile.sh лежит в /etc, то правильно так:
    sudo sh -c "echo '127.0.0.1 site.com' >> /etc/myfile.sh"
    Ответ написан
  • Скрипт запуска Postgresql в cron после старта отправляет SIGTERM. В терминале все ок. В чем проблема?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Как правило и чаще всего, ошибки в работе Cron связаны с неправильной пропиской в планировщике пути до скрипта.
    Нужно прописывать абсолютно полный путь!
    Ответ написан
  • Почему в большинстве примеров скриптов для bash, начинаются со знака $?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Режим Пользователя:
    user@local_nework_pc_mame:-$ - где user это ваше имя пользователя в системе и, когда вы работаете из под него, то отображается $

    Если вы наберёте:
    sudo -i - то попадаете в Режим Суперпользователя:
    root@user:-# - вы перешли в режим Суперпользователя и поэтому отображается #

    И кто Вам мешает пользоваться режимами выделения?!
    Или разного рода командами?!
    Команды работают от местоположения курсора:
    Удалить слово вперед          Ctrl+D
    Удалить слово назад	      Ctrl+W
    Удалить до конца строки     Ctrl+K
    Удалить до начала строки   Ctrl+U
    Вставить удаленное             Ctrl+Y

    А, если выполнить в Терминале команду:
    bind -p | grep -v 'self\|not bound\|do-' - то увидите ооочень много чего полезного...

    Ооочень полезные команды для работы с текстом в Терминале
    "\C-g": abort
    "\C-x\C-g": abort
    "\e\C-g": abort
    "\C-j": accept-line
    "\C-m": accept-line
    "\C-b": backward-char
    "\eOD": backward-char
    "\e[D": backward-char
    "\C-h": backward-delete-char
    "\C-?": backward-delete-char
    "\C-x\C-?": backward-kill-line
    "\e\C-h": backward-kill-word
    "\e\C-?": backward-kill-word
    "\e\e[D": backward-word
    "\e[1;3D": backward-word
    "\e[1;5D": backward-word
    "\e[5D": backward-word
    "\eb": backward-word
    "\e<": beginning-of-history
    "\C-a": beginning-of-line
    "\eOH": beginning-of-line
    "\e[1~": beginning-of-line
    "\e[H": beginning-of-line
    "\e[200~": bracketed-paste-begin
    "\C-xe": call-last-kbd-macro
    "\ec": capitalize-word
    "\C-]": character-search
    "\e\C-]": character-search-backward
    "\C-l": clear-screen
    "\C-i": complete
    "\e\e": complete
    "\e!": complete-command
    "\e/": complete-filename
    "\e@": complete-hostname
    "\e{": complete-into-braces
    "\e~": complete-username
    "\e$": complete-variable
    "\C-d": delete-char
    "\e[3~": delete-char
    "\e\\": delete-horizontal-space
    "\e-": digit-argument
    "\e0": digit-argument
    "\e1": digit-argument
    "\e2": digit-argument
    "\e3": digit-argument
    "\e4": digit-argument
    "\e5": digit-argument
    "\e6": digit-argument
    "\e7": digit-argument
    "\e8": digit-argument
    "\e9": digit-argument
    "\C-x\C-v": display-shell-version
    "\el": downcase-word
    "\e\C-i": dynamic-complete-history
    "\C-x\C-e": edit-and-execute-command
    "\C-x)": end-kbd-macro
    "\e>": end-of-history
    "\C-e": end-of-line
    "\eOF": end-of-line
    "\e[4~": end-of-line
    "\e[F": end-of-line
    "\C-x\C-x": exchange-point-and-mark
    "\C-f": forward-char
    "\eOC": forward-char
    "\e[C": forward-char
    "\C-s": forward-search-history
    "\e\e[C": forward-word
    "\e[1;3C": forward-word
    "\e[1;5C": forward-word
    "\e[5C": forward-word
    "\ef": forward-word
    "\eg": glob-complete-word
    "\C-x*": glob-expand-word
    "\C-xg": glob-list-expansions
    "\e^": history-expand-line
    "\e#": insert-comment
    "\e*": insert-completions
    "\e.": insert-last-argument
    "\e_": insert-last-argument
    "\C-k": kill-line
    "\e[3;5~": kill-word
    "\ed": kill-word
    "\C-n": next-history
    "\eOB": next-history
    "\e[B": next-history
    "\en": non-incremental-forward-search-history
    "\ep": non-incremental-reverse-search-history
    "\C-o": operate-and-get-next
    "\C-x!": possible-command-completions
    "\e=": possible-completions
    "\e?": possible-completions
    "\C-x/": possible-filename-completions
    "\C-x@": possible-hostname-completions
    "\C-x~": possible-username-completions
    "\C-x$": possible-variable-completions
    "\C-p": previous-history
    "\eOA": previous-history
    "\e[A": previous-history
    "\C-q": quoted-insert
    "\C-v": quoted-insert
    "\e[2~": quoted-insert
    "\C-x\C-r": re-read-init-file
    "\C-r": reverse-search-history
    "\e\C-r": revert-line
    "\er": revert-line
    "\C-@": set-mark
    "\e ": set-mark
    "\e\C-e": shell-expand-line
    "\C-x(": start-kbd-macro
    "\e&": tilde-expand
    "\C-t": transpose-chars
    "\et": transpose-words
    "\C-x\C-u": undo
    "\C-_": undo
    "\C-u": unix-line-discard
    "\C-w": unix-word-rubout
    "\eu": upcase-word
    "\C-y": yank
    "\e.": yank-last-arg
    "\e_": yank-last-arg
    "\e\C-y": yank-nth-arg
    "\ey": yank-pop
    Ответ написан
    Комментировать
  • Почему перестали работать алиасы команд из .bashrc?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Чтобы после перегруза работали они, надо всего лишь после добваления алиаса, активировать изменения командой:
    . ~/.bashrc

    Т.е., если например вы добавили алиас:
    echo -e "alias ar='sudo apt autoremove'" >> ~/.bashrc

    после этого сразу же выполнить:
    . ~/.bashrc

    Или сразу одной командой:
    echo -e "alias ar='sudo apt autoremove'" >> ~/.bashrc; . ~/.bashrc


    И теперь, всегда после перегруза будут работать алиасы.
    Ответ написан
  • Как сделать bash скрипт который устанавливает lamp сервер?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Установка L.A.M.P. (P - Mariadb-Server) скриптом в Ubuntu 20.04 (для других Linux ОС меняете apt install и sudo apt update; sudo apt full-upgrade на соответствующее из вашей ОС)

    Через Терминал создаёте в редакторе (например в nano) например файл lamp:
    nano lamp

    spoiler
    #!/bin/bash
    
    ## Добавление репозитария PHP для установки последней версии 7.4.xxx
    cd /etc/apt/sources.list.d; echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | sudo tee php.list > /dev/null; sudo apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 4F4EA0AAE5267A6C; cd
    
    ## Делаем паузу в 10 сек, чтобы файл php.list в /etc/apt/sources.list.d создался и был итегрирован в систему
    sleep 10
    
    ## Обновляем сведения о репозитариях и апгрейдим систему
    sudo apt update; sudo apt full-upgrade
    
    ## Установка L.A.M.P.
    sudo apt install apache2 mariadb-server-10.3 php libapache2-mod-php php-mysql php-cgi php-gd php-zip php-xml php-xmlrpc php-curl php-json php-mbstring php-cli
    sudo ufw allow in 80/tcp ## открываем порт 80
    sudo a2enmod rewrite; sudo sed -i "s/AllowOverride None/AllowOverride All/" /etc/apache2/apache2.conf; sudo systemctl restart apache2
    
    ## Выход из установки
    exit

    Сохраняете его:
    Ctrl+O -> Enter
    Выходите из nano:
    Ctrl+X

    Снова в Терминале делаете его исполняемым:
    nano +x lamp

    Запускаете скрипт на установку L.A.M.P.:
    ./lamp
    Ответ написан
  • Почему не подгружаются alias не из под рута?

    smorman
    @smorman
    When In Rome do as The Romans do...
    А почему не в ~/.bashrc?

    Добавляй так:
    echo -e "alias host='python3 /home/sanderu/host.py'" >> ~/.bashrc; . ~/.bashrc


    Будет работать и от пользователя, и от root
    Ответ написан
    2 комментария
  • Почему не запускается .sh по крону?

    smorman
    @smorman
    When In Rome do as The Romans do...
    А
    #!/bin/bash

    первой строкой где?
    И скрипт ещё исполняемым сделать надо.
    Ответ написан
  • Есть ли ресурс со скриптами быстрой установки различных Linux-серверов?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Если .deb-дистр, то можно так L.A.M.P. установить, через Tasksel:

    sudo apt install tasksel; sudo tasksel install lamp-server


    И...
    Что мешает самому написать скрипт?!

    Манов на просторах по установке любого сервака шквал!
    Берёшь ман и по нему пишешь свой скрипт в 6 сек!
    Ответ написан
  • Как передать задачу в cron из скрипта?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Если ты так добавляешь задание и при этом до этого момента ни разу и никогда задание в cron не добавлялось, то файлик этот будет просто с оной записью, но без атрибутов и он не выполняется в последствии планировщиком. Т.е. файл мёртвый!

    Правильно надо так:
    sudo echo -e '* * * * * rm -rf /home/user/testfolder' | sudo crontab -


    Почему с sudo?
    Таким образом задание пишется в /var/spool/cron/crontabs/root
    А если без sudo, то в /var/spool/cron/crontabs/твоё_имя_пользователя_в_системе

    А если уже добавлялось, или, вручную, через редактор командой sudo crontab -e, или, как выше я описываю, то после первого такого добавления уже можно добавлять задание командой правильно так:
    sudo sh -c "echo '* * * * * rm -rf /home/user/testfolder' >> /var/spool/cron/crontab/root"


    Но в этом случае обязательно перезагрузить планировщик командной:
    sudo /etc/init.d/cron restart
    Иначе задание не будет работать...

    Или добавляй всё руками через редактор:
    sudo crontab -e
    Сохраняешь, выходишь и всё сразу готово к употреблению!
    Ответ написан
    Комментировать