Ответы пользователя по тегу bash
  • Использовать ли Python, когда можно обойтись bash?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Учить /bin/sh
    И вот почему

    На /bin/sh можно реализовать бОльшую часть админских задач, привлекая питон (хотя я вот привлекаю Perl - мне он нравится больше) только тогда, когда реально необходимо, когда скажем реализация на /bin/sh становится громоздкой и самому тебе через месяц непонятной...
    Ответ написан
    7 комментариев
  • Можно ли на bash сделать так, и если да то как?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Суть очень простая.
    Взять текущую дату, высчитать диапазон равный неделе (date это умеет)
    Найти все файлы с датой создания такой-то и датой изменения не больше такой-то (это умеет find)
    И для каждого из них выполнить поиск-и-замену (это умеет sed), ну для эстетства можно сначала grep нужной строки, если нет, sed не вызывать.

    bash тут нужен собственно только чтобы все это в кучку свести.
    Ответ написан
    Комментировать
  • Bash - Как сравнивать время?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Все операции с "временем" - это операции с целым беззнаковым числом, где время выражено в виде числа секунд с 1 января 1970 года.
    _cacrl=`date -r $cadir/$crlfile +%s`
    _oldcrl=`date -r $storedir/$crlfile +%s`
    
    if [ $_cacrl -gt $_oldcrl ]; then
      echo "Banzai"
    fi

    Сравнить время создания двух файлов, если второй новее - сделать что-то
    Ответ написан
    Комментировать
  • Bash как экранировать символы?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Потому что консоль при обработке ввода еще раз обрабатывает экранирование.

    sed 's/5/\\\\n/' - при обработке ввода четыре символа \\\\ превращаются в два (каждый первый - экранирующй, каждый второй - экранируемый). При обработке команды два символа \\ превращаются в один. Вопрос экранирования пожалуй один из самый запутанных - иногда приходится экранировать по два и даже три раза!
    Ответ написан
    1 комментарий
  • Почему bash не видит переменную?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Потому что скриптовые языки очень строги по синтаксису. В tcsh такая конструкция проканала бы. В Bourne-shell based - не канает. Только
    count=20
    и никак иначе
    Ответ написан
    Комментировать
  • Как написать на bash программу (исполнимый файл), которая меняет каталог?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER

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


    Смеетесь, да? Ну удлинится запуск шелла на пару микросекунд - неужто заметите?
    Ответ написан
  • Как в Linux Mint в bash скрипте выполнить команду от имени root по ssh?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Массовое обновление конфигов обычно делается средствами удаленного развертывания - Chef, Puppet. Делать это через ssh, да еще при логине рутом... Если прям нужно именно так, то я бы сделал немного по-другому - создал на каждом серваке юзера, обычного юзера, настроил аутентификацию по ключу, дал ему через sudo права на выполнение некоего скрипта... Механика выходит довольно сложная, Puppet наверное проще будет настроить :)
    Ответ написан
    Комментировать
  • Можно ли запретить запуск ПО на centos?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Можно client.sh доработать таким образом, чтобы он искал запущенную копию и, если нашел, тихо клеил боты с диагностикой, что тапки уже заняты :) Поскольку он видимо графический, можно диагностику даже через какое-нибудь окошко выдавать :)

    UPD: Самый простой способ:
    var1=`ps -ax | grep client-process-name | grep -v grep`
    if [ $#var1 -ne 0 ]; then
       echo 'Тапки заняты!'
       exit 100
    fi
    Ответ написан
  • Как показать Ubuntu Server где установлена Samba?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Это как раз пример того, что будет, если начать в пакетном дистрибе работать, как в source-based. Поставил бубунту - забудь про сборку из исходников!

    Придется решить задачу по ручному вынесению самбы (и скорее всего повторному вводу в домен) и установке ее из пакетов с подсовыванием соответствующим образом правленого конфига от старой.

    Своих юзеров у самбы может и не быть - если система настроена на использованием доменных учеток через sssd или через winbindd. Свои учетки - это адЪ.

    OMG, да она еще и domain master? Она единственный контроллер домена или же есть еще винда? Если она единственный DC, то нужно быть очень осторожным - база юзеров у самбы хранится в /var/lib/samba (или что-то такое, там много файлов с расширением .tdb). Если эту базу продудонить - все юзера потеряют свои RID-ы и им перестанут быть доступны профили...
    Ответ написан
  • Как прописать окружение для пользователя linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    1. Чем не нравится приглашение? Это стандартное приглашение /bin/sh - да-да, это оно и есть. А что Вы ожидали увидеть? Не нравится - его можно перенастроить, раскрасить и вообще перелопатить так, что никто не узнает.
    2. Не надо так делать. Переходя в рута, Вы отключаете нафиг практически все (ну не все, но подавляющую часть) защитные механизмы и убить систему одной командой. На тестовом компе ничего в этом страшного конечно нет, но это формирует нехорошую привычку - и однажды Вы так сделаете на работающем сервере...

    Сделать так можно через sudo, но я все же настоятельно рекомендую запрос пароля не отключать.
    Ответ написан
  • Как редактировать конфигурационные файлы в Linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Нет.

    Единого стандарта на конфигурационные файлы нет.

    Да, в большинстве случаев, это просто var = value со знаком # в качестве комментария. Но в качестве комментария может быть и ; и // и даже /* */, а в качестве переменных куски кода на С, PHP, Perl или даже виндовые ini-файлы (с секциями в квадратных скобках). Кроме того, это вовсе даже не обязательно могут быть текстовые файлы, а вполне могут оказаться db- или sqlite- базы данных (как например в sendmail)
    Ответ написан
    Комментировать
  • Как настроить крон для бекапов?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Ну, у меня давно-давно, года наверное с 2000 работает велосипед. Писался он для FreeBSD, но после небольшой доработки взлетел на линухе. Правда он решает задачку посложнее - копировать весь указанный каталог (или БД, правда понимает только мускл) в точку А, причем в точке А предыдущая информация может как затираться так и не затираться.
    Собственно bash по крону запускать бессмысленно - простую команду можно непосредственно записать в кронтаб, сложную - в файл скрипта и имя этого файла - в кронтаб. Где кронтаб? В /etc как правило есть файл crontab, но это "корневой" кронтаб, который я обычно избегаю править. В /etc/cron.d можно создавать файлы типа
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    */30 8-17 * * 1-5 root /usr/sbin/my.super.script

    Пример немного нетривиальный и означает он, что по рабочим дням (1-5) с 8 до 17 часов раз в полчаса (*/30) будет запускаться my.super.script
    Ответ написан
    Комментировать
  • Зачем параметр -s в linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    В любой команде UNIX могут быть совершенно произвольные ключи. Их смысл целиком и полностью задается разработчиком. Разработчик может дать им какое угодно название, части ключей дать короткие имена, а части длинные, использовать стандарт GNU (--keyname=keyvalue) или же getopt (-keyname=keyvalue), а то и вовсе стандарт DOS (/keyname:keyvalue) - и ничего тут не поделаешь :) Внутри неких крупных проектов (например GNU) есть некое внутреннее соглашение о формировании параметров, ключей и т.д., но общего соглашения среди всех разработчиков нет и быть не может :)
    Ответ написан
    2 комментария
  • Всем привет, промогите разобраться с скриптом для Linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Банальный синтаксис. После case нет esac, после do нет done. Или это неполный скрипт? Для проверки файла вот есть такая фигня - проверяет наличие, то, что это файл (а не каталог, например) и то, что он не нулевого размера:
    check_fileread()
    {
      if [ ${#1} -ne 0 ]; then
        if [ ! -r $1 ]; then
          echo "File $1 cannot read (does not exist, access denied)"
          exit 55
         elif [ ! -s $1 ]; then
           echo "File $1 is empty (has zero size)"
           exit 56
        fi
      fi
    }
    Ответ написан
    Комментировать
  • Где можно найти соответствие управлявших символов и формой их записи?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Escape-последовательности, про которые Вы пишете, задаются в termcap или terminfo и очень даже запросто могут быть там переопределены. Есть некий стандарт (man termcap, man terminfo), но его как всегда придерживаться никто не обязал.
    Ответ написан
    Комментировать
  • Разница между sh, dash, bash и т.д?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    /bin/sh - Это Bourne Shell версии 1.0
    /bin/bash - Это Bourne Shell версии 2.0

    Соответственно в баше работает все написанное для /bin/sh. Отличаются они тем, что читают разные файлы при старте. /bin/sh - читает .profile. /bin/bash - читает .bash_profile.

    Если учетка для себя (или вообще для пользователя) - ставьте bash. Если для автомата - /bin/sh, так проще
    Ответ написан
    Комментировать
  • Какие есть современные методики обучения администрированию linux и bash-скриптам?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Есть только одна методика обучения всему и вся, в том числе и администрированию - делать. Ставить виртуалку, придумывать задачи - и делать. Ну или для хардкорщиков - ставить bare-metal. ЛЮбые курсы могут стоить денег - ведь их кто-то должен вести, да?
    Ответ написан
    8 комментариев