По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Нет, в этой статье мы не будем рассматривать основные команды, такие как ls, rm и cd. Вы не должны быть шокированы, увидев эти команды. Возможно, вы даже хорошо знакомы с ними. Особенно, если вы хорошо разбираетесь в командной строке. Эта статья для тех из вас, кто имеет некоторый опыт работы с командной строкой и знаком с основными командами (а если не знакомы – то познакомиться можно в нашей статье). Wget В Unix-подобных операционных системах команда wget загружает файлы, обслуживаемые по HTTP, HTTPS или FTP, по сети. По умолчанию он включен во все уважающие себя дистрибутивы Linux. Самый простой способ использовать wget - указать местоположение файла для загрузки по HTTP. Скачать файл http://website.com/static/images/header.jpg с помощью wget можно с помощью следующей команды: wget http://website.com/static/images/header.jpg Отличительной особенностью wget является то, что он неинтерактивный, что означает, что он может работать в фоновом режиме, пока пользователь не вошел в систему. Это позволяет вам начать поиск и отключиться от системы, позволяя wget завершить работу. Scp У вас когда-нибудь возникала проблема, когда вам нужно было получить файл с удаленного сервера на ваш локальный компьютер? Например, получение файла, загруженного пользователем, который вызвал некоторые проблемы. Вы можете скачать этот файл через командную строку, используя команду scp. Scp - сокращение от secure copy, т.е. защищенная копия. Что еще более важно, это то, что это удаленная защищенная копия. Эта команда похожа на команду cp, которую вы, вероятно, уже знаете, но источник или цель находятся в другой системе. Следующая команда копирует файл foobar.txt с удаленного сервера в локальный каталог. scp username@remotehost.com: /path/to/foobar.txt /some/local/directory Но scp также можно использовать для копирования файла из локального каталога на удаленный сервер. scp /some/local/directory/foobar.txt username@remotehost.com: /destination/path/ То же самое можно сделать с каталогами, используя опцию -r, которая рекурсивно копирует целые каталоги. ssh-keygen Команда ssh-keygen используется для генерации новой пары ключей SSH. Открытый ключ SSH, сгенерированный этой командой, может использоваться в Gitlab или Bitbucket для установления безопасного соединения. После того, как вы добавили свой SSH-ключ в Gitlab или Bitbucket, у вас не будет запрашиваться пароль каждый раз, когда вы пытаетесь отправить файлы в удаленную ветку. Чтобы сгенерировать пару ключей SSH, используйте следующую команду: ssh-keygen -t ed25519 Обратите внимание, что в приведенном выше примере мы использовали алгоритм подписи ED25519. Хотя ED25519 считается наилучшей практикой, вы всегда должны провести некоторое исследование в области различных доступных алгоритмов подписи. Генерация пары ключей SSH и ее правильная настройка в Gitlab или Bitbucket обойдутся вам максимум в десять минут, но они того стоят! CHMOD В Unix и Unix-подобных операционных системах chmod - это командный и системный вызов, который используется для изменения прав доступа к объектам файловой системы (файлам и каталогам). Мы все были в ситуации, когда у сервера не было доступа к определенному файлу из-за неправильной настройки прав доступа к файлу. Команда chmod сама по себе довольно проста, но предоставление необходимых прав доступа к файлам и каталогам - совершенно другое дело. Подробно о том как пользоваться это командой можно прочитать в нашей статье chmod 664 robots.txt chmod 775 public/images Первый пример дает права на чтение и запись пользователю и группе для файла robots.txt. Разрешение на чтение предоставляется другим для этого файла. Второй пример дает права на чтение, запись и выполнение пользователю и группе для папки public/images. Другим предоставляется разрешение на чтение и выполнение для этой папки. Tar Эта команда используется для сбора множества файлов в один архивный файл. Tar является наиболее широко используемой командой для создания сжатых архивных файлов. Давайте начнем с того, как вы можете создать архивный файл для определенного каталога: tar -cvf my-archive.tar /path/to/directory Эта команда приведет к созданию файла архива my-archive.tar, который содержит все файлы каталога /path/to/directory, созданного в текущем рабочем каталоге. Создание файла архива является первой частью. Вторая часть состоит в том, чтобы распаковать архивный файл, потому что в какой-то момент мы хотим использовать файлы в tar-файле. Вы можете распаковать файл в определенный каталог, введя следующую команду: tar -xvf my-archive.tar -C /home/myfolder/ Alias Каждый использует какие-то команды, которые слишком длинны или сложны, чтобы их можно было полностью запомнить. К счастью, вы можете создать псевдоним для этой команды, чтобы вам не пришлось запоминать всю команду. alias short-command = "Ваша обычная и очень длинная команда здесь" Хотя создание псевдонима приводит к одной проблеме: этот псевдоним является временным. Если вы создадите псевдоним таким образом, он будет доступен только для текущего сеанса терминала. Чтобы сохранить псевдонимы между сеансами, вы можете сохранить их в файле профиля конфигурации оболочки вашего пользователя. Этот файл профиля, вероятно, находится в ~/.bashrc или ~/.zshrc, если вы используете Bash или ZSH соответственно. Совет 1: Направление вывода Стандартным устройством вывода является экран. Но иногда вы не хотите выводить все на экран. В некоторых случаях вы, вероятно, предпочитаете выводить результаты некоторых команд в файл. Для целей регистрации, например. Чтобы перенаправить вывод, вы можете использовать">". В следующей команде вывод ls -al перенаправляется в файл myfile, а не на экран. ls -al> myfile Совет 2: Объединение команд Можно запустить две или более команд одновременно. Оператор точки с запятой " ; " позволяет вам сделать это. Вы можете выполнить несколько команд подряд, независимо от того, будет ли успешной каждая предыдущая команда. ls -al; pwd; Если вы хотите, чтобы вторая команда выполнялась только в том случае, если первая команда выполнена успешно, разделите команды с помощью логического оператора И, которым является &&. mkdir images && cd images Мы хотим перейти в папку с изображениями, только если нам удалось создать эту папку. И иногда вы можете захотеть выполнить вторую команду, только если первая команда не удалась. Для этого мы используем логический оператор ИЛИ, который пишется как ||.
img
Наверняка кто-то из вас хоть раз в жизни получал SMS после звонка в определенную компанию. Обычно, это просьба оценить работу операторов. Так, например, это сделано у GSM операторов. Также это может быть SMS с благодарностью за обращение от компании или же об актуальных акциях и предложениях. Сегодня я хотел бы рассказать о том, как Вы можете реализовать подобную функцию с использованием FreePBX Статья написана по мотивам существующей на данном ресурсе публикации "Оценка оператора после звонка" У данного метода есть один недостаток - для его работы нужен chan_dongle и тариф с безлимитными SMS. Для тех, у кого нет пресловутого chan_dоngle, есть другой метод, который я постараюсь объяснить. Для особо нетерпеливых прошу Вас заглянуть в контакты, возможно, я уже там появился :) В данном методе мы не будем ломать диалплан FreePBX и использовать тяжелую артиллерию в виде MySQL. Итак, приступим. Для начала открываем конфигурационные файлы, а именно: /etc/asterisk/extensions_custom.conf Вносим в него такой кусочек диалплана. В коде я дал комментарии зачем нужны некоторые части: [send-sms] exten => _.,1,NoOp(Start sms) exten => _.,n,DIAL(SIP/${EXTEN},,trg) ;опция g позволяет "проваливаться вниз". ВНИМАНИЕ агент должен использовать вашу технологию (sip или pjsip) exten => _X.,n,GotoIf($[${DIALSTATUS}=BUSY]?busy:answered) //проверяем, был ли отвечен вызов, вот здесь мы или пропускаем клиента дальше если с ним уже говорили или нет. exten => _X.,n(busy),Hangup() exten => _X.,n(answered),Goto(sms,${EXTEN},1) [sms] exten => _X.,1,NoOp(Statrt SendSms) exten => _X.,n,Answer() same => n,Set(COUNT=1); установка счетчика. По идее, он тут не нужен, но сделан на всякий аварийный случай. Вдруг заклинит и клиента заспамит смс? :) same => n,Set(RECIVER=Имя донгла в системе); если используете донгл same => n,Set(RECIPIENT=${CALLERID(num)}) same => n,Set(TEXT="Спасибо что обратились в нашу компанию Рога и копыта"); текст смс same => n,GotoIf($["${RECIPIENT:0:2}" != "79"]?end); это проверка на принадлежность к мобильным номерам. Уточните формат входящих CALLERID(num) на вашей АТС - с 7 или 8? same => n,System(/usr/sbin/asterisk -rx 'dongle sms ${RECIVER} 7${RECIPIENT:1} ${TEXT}'); тут отправка с донгла. same => n,Set(COUNT=$[${COUNT} + 1]); увеличение счетчика (который не нужен, а вдруг) same => n,GotoIf($["${COUNT}" > "1"]?end); проверка и отправка на завершение exten => _X.,n(end),Goto(macro-hangupcall,s,1); Конец Обратите внимание на пометки в диалплане. В частности, Агент должен использовать вашу технологию подключения. Входящие форматы на ваши транки, 7 или 8. Если он еще не унифицирован, то рекомендую это сделать и привести в норму стандарта E164. Если входящие у вас содержат + то, вместо ${RECIPIENT:0:2} сделайте ${RECIPIENT:0:3} На этом, настройка конфигурационного файла extensions_custom.conf закончена. Теперь открываем файл queues_post_custom.conf и вставляем туда такую строку: member=Local/4015781@send-sms/n,0,4015781,hint:4015781@ext-local Где 4015781 номер существующего Агента в очереди. После этого, закрываем файл, перезагружаем диалплан командой dialplan reload и тестируем. Применять можно, например, для отправки благодарности клиенту с напоминанием времени работы или адреса компании. Чтобы не огорчить тех, кто не использует донглы или использует GoIP или другие Gsm шлюзы, на мой взгляд, есть более "красивый" метод: Идем в один из множества веб сервисов для SMS рассылок (названия писать не буду), регистрируемся у них и берем их готовые библиотеки для доступа к API. Я покажу на примере PHP API одной известной компании: #!/usr/bin/php -q <?php #парсим данные из AGI require(′phpagi.php′); $agi = new AGI(); $phone = $agi->request[′agi_arg_1′]; text = $agi->request[′agi_arg_2′]; $sender = ′INFORM′; // !!! Замените API-ключ на свой. $apikey = ′XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ′; $url = ′https://smspilot.ru/api.php′ ′?send=′.urlencode( $text ) .′&to=′.urlencode( $phone ) .′&from=′.$sender .′&apikey=′.$apikey .′&format=json′; $json = file_get_contents( $url ); echo $json.′′; $j = json_decode( $json ); if ( !isset($j->error)) { echo ′SMS успешно отправлена server_id=′.$j->send[0]->server_id; } else { trigger_error( $j->description_ru, E_USER_WARNING ); } Используем AGI. И в представленном диалплане меняем одну строку, а именно: same => n,System(/usr/sbin/asterisk -rx 'dongle sms ${RECIVER} ${TEXT}'); тут отправка с донгла. на: same => n,AGI(sendsms.php, 7${RECIPIENT:1}, "${TEXT}") И на этом - все. Чем данный способ лучше? Могу точно сказать, что в подобных сервисах для компаний есть возможность в качестве отправителя зарегистрировать название организации – это явно плюс в копилку лояльности клиента :) Это значит, что не нужен донг и SMS клиенту приходит не с безликих цифр, а от имени вашей компании в поле отправитель. Это, безусловно, повышает доверие и лояльность получателя SMS. Надеюсь, что данный метод будет полезен и найдёт применение в ваших бизнес-процессах. Удачи!
img
Третья статья будет посвящена поиску и устранению неисправностей EtherChannels. Большинство проблем с EtherChannels происходит из-за неправильной конфигурации. Предыдущие статьи этого цикла: Устранение неполадок коммутации Cisco Траблшутинг STP (Spanning tree protocol) Case #1 В этом сценарии есть только два коммутатора и два интерфейса. Идея состоит в том, чтобы сформировать etherchannel путем объединения интерфейсов FastEthernet 0/13 и 0/14, но это не работает Сначала мы проверим, все ли интерфейсы работают. Да они все работают. Мы можем проверить, что port-channel interface был создан, но он не работает. Вот хорошая команда для проверки EtherChannel. Используйте суммарную информацию от команды show etherchannel summary, чтобы увидеть ваши port-channels. Мы видим, что коммутатор A настроен для LACP и коммутатор B для PAgP, а это никогда не будет работать. Лучшая команда для использования это show etherchannel detail. Это дает вам много информации, но нам особенно интересно узнать, настроен ли LACP для пассивного или активного режима. Интерфейсы в активном режиме будут "активно" пытаться сформировать EtherChannel. Интерфейсы в пассивном режиме будут отвечать только на запросы LACP. Вот вывод команды show etherchannel detail на коммутаторе B. Мы видим, что он был настроен для PAgP, и интерфейсы настроены для desirable режима. Если бы они были настроены на автоматический режим, мы бы увидели флаг А. SwitchB(config)#no interface po1 SwitchB(config)#interface fa0/13 SwitchB(config-if)#channel-group 1 mode passive SwitchB(config-if)#exit SwitchB(config)#interface fa0/14 SwitchB(config-if)#channel-group 1 mode passive Давайте сначала избавимся от port-channel interface. Если мы этого не сделаем, вы увидите ошибку при попытке изменить channel-group mode на интерфейсах. После изменения конфигурации мы видим, что port-channel1 поднялся. Задача решена! Извлеченный урок: убедитесь, что вы используете один и тот же режим EtherChannel с обеих сторон. Case #2 Ну что же давайте рассмотрим другую ошибку! Та же топология и EtherChannel, который не функционирует: Мы проверяем, что port-channel interface существует, но он не работает с обеих сторон. Мы также видим, что интерфейс FastEthernet 0/13 и 0/14 были добавлены к port-channel interface. Интерфейсы FastEthernet рабочие, поэтому мы знаем, что проблема не в этом. Давайте углубимся в конфигурацию EtherChannel. Мы видим, что FastEthernet 0/13 и 0/14 на коммутаторе A оба настроены на автоматический режим PAgP (из-за флага "A"). FastEthernet 0/13 и 0/14 на коммутаторе B также настроены на автоматический режим PAgP. Это никогда не сбудет работать, потому что оба коммутатора теперь пассивно ждут сообщений PAgP. SwitchB(config)#interface fa0/13 SwitchB(config-if)#channel-group 1 mode desirable SwitchB(config-if)#interface fa0/14 SwitchB(config-if)#channel-group 1 mode desirable Давайте изменим один из коммутаторов, чтобы он активно отправлял сообщения PAgP. EtherChannel сейчас работает. Проблема решена! Извлеченный урок: при использовании PAgP убедитесь, что хотя бы один из коммутаторов использует требуемый режим, или в случае LACP убедитесь, что один коммутатор находится в активном режиме. Case #3 Еще одна ситуация: EtherChannel настроен между коммутатором A и коммутатором B, но клиент жалуется, что соединение медленное ... что может быть не так? Быстрая проверка говорит нам, что port-channel interface работает. Команда show etherchannel detail дает нам много выходных данных, но она так же нам говорит, что происходит. Вы видите, что интерфейс FastEthernet 0/13 и 0/14 были настроены для port-channel, но коммутатор не смог связать их, потому что FastEthernet 0/14 настроен на 10 Мбит. Возможно, что это основная причина медленной скорости передачи данных. Мы будем использовать один из операторов для команды show. Нас интересует только то, чтобы увидеть вероятную причину, которую команда "show etherchannel detail" покажет. SwitchA(config)#interface fa0/14 SwitchA(config-if)#speed auto SwitchB(config)#interface fa0/14 SwitchB(config-if)#speed auto Давайте изменим скорость на авто. Мы должны убедиться, что FastEthernet 0/13 и 0/14 имеют одинаковую конфигурацию. Вероятно, вы увидите пару сообщений о том, что ваши интерфейсы переходят в состояние up и down. Теперь мы видим, что оба интерфейса были добавлены в port-channel... проблема решена! Извлеченный урок: убедитесь, что все интерфейсы, которые будут добавлены в port-channel, имеют одинаковую конфигурацию!
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59