По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
В этой статье мы рассмотрим IPv6 (Internet Protocol version 6), причины, по которым он нам нужен, а также следующий аспект: различия с IPv4. Пока существует Интернет, используется протокол IPv4 для адресации и маршрутизации. Однако проблема с IPv4 заключается в том, что у нас закончились адреса.
Так что же случилось с IPv4? Что же пошло не так? У нас есть 32 бита, которые дают нам 4 294 467 295 IP-адресов. Когда появился Интернет, мы получили сети класса А, В или С. Класс С дает нам блок из 256 IP-адресов, класс B - это 65.535 IP-адресов, а класс A даже 16 777 216 IP-адресов. Крупные компании, такие как Apple, Microsoft, IBM и др. имеют одну или несколько сетей класса А. Но действительно ли им нужно 16 миллионов IP-адресов? Большинство из этих IP-адресов не были использованы.
Поэтому мы начали использовать VLSM, чтобы использовать любую маску подсети, которая нам нравится, и создавать более мелкие подсети, а не только сети класса A, B или C. У нас также имеется NAT и PAT, следовательно, мы имеем много частных IP-адресов за одним публичным IP-адресом.
Тем не менее интернет вырос так, как никто не ожидал 20 лет назад. Несмотря на все наши крутые трюки, такие как VLSM и NAT/PAT, нам нужно было больше IP-адресов, и поэтому родился IPv6.
А что случилось с IPv5? Хороший вопрос ... IP-версия 5 была использована для экспериментального проекта под названием "Протокол интернет-потока". Он определен в RFC, если вас интересуют исторические причины: http://www.faqs.org/rfcs/rfc1819.html
IPv6 имеет 128-битные адреса по сравнению с нашими 32-битными IPv4-адресами. Имейте в виду, что каждый дополнительный бит удваивает количество IP-адресов. Таким образом мы переходим от 4 миллиардов к 8 миллиардам, 16,32,64 и т. д. Продолжайте удвоение, пока не достигнете 128-битного уровня. Просто вы увидите, сколько IPv6-адресов это даст нам:
340,282,366,920,938,463,463,374,607,431,768,211,456;
Можем ли мы вообще произнести это? Давайте попробуем вот это:
340 - ундециллионов;
282 - дециллионов;
366 - нониллионов;
920 - октиллионов;
938 - септиллионов;
463 - секстиллионов;
463 - квинтильонов;
374 - квадрильонов;
607 - триллионов;
431 - биллионов;
768 - миллионов;
211 - тысяч;
456.
Это умопомрачительно... это дает нам достаточное количество IP-адресов для сетей на Земле, Луне, Марсе и остальной Вселенной. IPv6-адреса записываются в шестнадцатеричном формате.
IPv4 и IPv6 несовместимы друг с другом, поэтому многие протоколы были обновлены или заменены для работы с IPv6, вот некоторые примеры:
OSPF был обновлен с версии 2 (IPv4) до версии 3 (IPv6);
ICMP был обновлен до версии ICMP 6;
ARP был заменен на NDP (Neighborhood Discovery Protocol).
Заголовок пакета IPv6 содержит адреса источника и назначения, но по сравнению с IPv4 он стал намного проще:
Вместо того чтобы уже добавлять все поля в заголовок, заголовок IPv6 использует "следующий заголовок", который ссылается на необязательные заголовки. Поскольку заголовок намного проще, маршрутизаторам придется выполнять меньше работы.
А как насчет маршрутизации? Есть ли разница между IPv4 и IPv6? Давайте рассмотрим варианты маршрутизации:
Static Routing;
RIPng;
OSPFv3;
MP-BGP4;
EIGRP.
Вы все еще можете использовать статическую маршрутизацию, как и в IPv4, ничего нового здесь нет. RIP был обновлен и теперь называется RIPng или RIP Next Generation.
OSPF для IPv4 на самом деле является версией 2, а для IPv6 у нас есть версия 3. Это отдельный протокол, он работает только на IPv6. Есть только незначительные изменения, внесенные в OSPFv3.
BGP (Border Gateway Protocol) - это протокол маршрутизации, который объединяет Интернет вместе.MP-BGP расшифровывается как Multi-Protocol BGP, и он может маршрутизировать IPv6. EIGRP также поддерживает IPv6.
Просто имейте в виду, что OSPF и EIGRP поддерживают IPv6, но это отдельные протоколы. Если у вас есть сеть с IPv4 и IPv6, вы будете запускать протокол маршрутизации для IPv4 и еще один для IPv6. Запуск IPv4 и IPv6 одновременно называется двойным стеком.
Поскольку эти два протокола несовместимы, в будущем будет происходить переход с IPv4 на IPv6. Это означает, что вы будете запускать оба протокола в своей сети и, возможно, однажды вы сможете отключить IPv4, так как весь интернет будет настроен на IPv6.
Давайте взглянем на формат IPv6-адреса: 2041:0000:140F:0000:0000:0000:875B:131B
Во-первых, он шестнадцатеричный и гораздо длиннее, чем IPv4-адрес. Существует восемь частей, состоящих из 4 шестнадцатеричных цифр каждая, поэтому 128-битный адрес может быть представлен 32-битными шестнадцатеричными символами. Если вы забыли, как работает шестнадцатеричный код, взгляните на таблицу ниже:
В шестнадцатеричной системе счисления мы считаем от 0 до F точно так же, как мы считали бы от 0 до 15 в десятичной системе счисления:
A = 10;
B = 11;
C = 12;
D = 13;
E = 14;
F = 15.
Использование шестнадцатеричного кода помогает сделать наши адреса короче, но ввод адреса IPv6 - это все еще большая работа. Представьте себе, что вы звоните другу и спрашиваете его, может ли он пинговать IPv6-адрес 2041:0000:140F:0000:0000:0000:875B:131B, чтобы узнать, может ли он достучаться до своего шлюза по умолчанию.
Чтобы облегчить нам работу с такими адресами, можно сделать IPv6-адреса короче. Вот пример:
Оригинальный: 2041: 0000:140F:0000:0000:0000:875B:131B
Сокращенный: 2041: 0000:140F:: 875B:131B
Если есть строка нулей, вы можете удалить их, заменив их двойным двоеточием (::). В приведенном выше IPv6-адресе удалены нули, сделав адрес немного короче. Вы можете сделать это только один раз.
Мы можем сделать этот IPv6 адрес еще короче используя другой трюк:
Сокращенный: 2041: 0000:140F:: 875B:131B;
Еще короче: 2041:0:140F:: 875B:131B
Если у вас есть блок с 4 нулями, вы можете удалить их и оставить там только один ноль.
Мы также можем удалить все впередистоящие нули:
Оригинальный: 2001:0001:0002:0003:0004:0005:0006:0007;
Сокращенный: 2001:1:2:3:4:5:6:7
Подытожим небольшие правила:
Строку нулей можно удалить, оставив только двоеточие (::). Вы можете сделать только это однажды.;
4 нуля можно удалить, оставив только один ноль. Впередиидущие нули могут быть удалены в пределах одного блока.;
Вы не можете удалить все нули, иначе ваше устройство, работающее с IPv6 не поймет, где заполнить нули, чтобы снова сделать его 128-битным.;
Вычисление префикса IPV6 мы пропустим, так как ресурсов, рассказывающих об этом в сети Интернет, специальных книгах полно. Нет смысла повторяться.
Потребуется некоторое время, чтобы привыкнуть к IPv6-адресации и поиску префиксов, но чем больше вы этим занимаетесь, тем дальше становиться проще. В оставшейся части этой статьи мы еще немного поговорим о различных типах адресации IPv6. IPv4-адреса организованы с помощью "системы классов", где класс A, B и C предназначены для одноадресных IP-адресов, а класс D-для многоадресной передачи. Большинство IP-адресов в этих классах являются публичными IP-адресами, а некоторые-частными IP-адресами, предназначенными для наших внутренних сетей. Нет такой вещи, как классы для IPv6, но IANA действительно зарезервировал определенные диапазоны IPv6 для конкретных целей. У нас также есть частные и публичные IPv6-адреса. Первоначально идея IPv4 заключалась в том, что каждый хост, подключенный к Интернету, будет иметь общедоступный IP-адрес. Каждая компания получит сеть класса А, В или С, и сетевые инженеры в компании будут дополнительно подсоединять ее так, чтобы каждый хост и сетевое устройство имели общедоступный IP-адрес.
Проблема, однако, заключается в том, что адресное пространство IPv4 было слишком маленьким, и выдавать полные сети A, B или C было не очень разумно. Даже если вам требуется только небольшое количество IP-адресов, вы все равно получите сеть класса C, которая дает вам 254 пригодных для использования IP-адреса. Компания, которой требуется 2.000 IP-адресов, получит класс B, который дает вам более 65.000 IP-адресов.
Поскольку у нас заканчивались IP-адреса, мы начали использовать такие вещи, как VLSM (избавляясь от идеи класса A, B, C) и настраивали частные IP-адреса в наших локальных сетях, а вместо этого использовали NAT/PAT. Протокол IPv6 предлагает два варианта для одноадресной рассылки:
Global Unicast;
Unique Local.
Раньше существовал третий диапазон адресов, называемый "site local", который начинался с FEC0:: / 10. Этот диапазон изначально предназначался для использования во внутренних сетях, но был удален из стандарта IPv6.
Global Unicast передачи IPv6 похожи на публичные IPv4-адреса. Каждая компания, которая хочет подключиться к интернету с помощью IPv6, получит блок IPv6-адресов, которые они могут дополнительно разделить на более мелкие префиксы, чтобы все их устройства имели уникальный IPv6-адрес. Зарезервированный блок называется префиксом глобальной маршрутизации.
Поскольку адресное пространство IPv6 настолько велико, каждый может получить префикс глобальной маршрутизации. Давайте посмотрим, как назначаются префиксы IPv6-адресов. Допустим, компания получает префикс 2001:828:105:45::/64. Как они его получили?
Мы пройдемся по этой картине сверху вниз:
IANA отвечает за распределение всех префиксов IPv6. Они будут назначать реестрам различные блоки. ARIN - для Северной Америки, RIPE -для Европы, Ближнего Востока и Центральной Азии. Всего таких реестров насчитывается 5. IANA присваивает 2001: 800:: /23 RIPE и 2001: 0400::/23 ARIN (и многие другие префиксы).;
ISP, который попадает под реестр RIPE, запрашивает блок пространства IPv6. Они получают от них 2001: 0828:: / 32, которые в дальнейшем могут использовать для клиентов.;
ISP дополнительно подсоединит свое адресное пространство 2001:0828::/32 для своих пользователей. В этом примере клиент получает префикс 2001:828:105::/48.;
IANA зарезервировала определенные диапазоны адресов IPv6 для различных целей, точно так же, как это было сделано для IPv4. Первоначально они зарезервировали IPv6-адреса, которые с шестнадцатеричными 2 или 3 являются global unicast адресами. Это можно записать как 2000:: / 3. В настоящее время они используют все для global unicast рассылки, которая не зарезервирована для других целей.
Некоторые из зарезервированных префиксов являются:
FD: Unique Local;
FF: Multicast;
FE80: Link-Local.
Обсудим префиксы local и link-local
В моем примере клиент получил 2001: 828:105:: / 48 от провайдера, но прежде чем я смогу что-либо сделать с этим префиксом, мне придется разбить на подсети его для различных VLAN и point-to-point соединений, которые у меня могут быть. Подсети для IPv6 - это примерно то же самое, что и для IPv4, но математика в большинстве случаев проще. Поскольку адресное пространство настолько велико, почти все используют префикс /64 для подсетей. Нет смысла использовать меньшие подсети.
При использовании IPv4 у нас была часть "сеть" и "хост", а класс A, B или C определяет, сколько битов мы используем для сетевой части:
Когда мы используем подсети в IPv4 мы берем дополнительные биты от части хоста для создания большего количества подсетей:
И, конечно, в результате у нас будет меньше хостов на подсеть. Подсети для IPv6 используют аналогичную структуру, которая выглядит следующим образом:
Префикс global routing был назначен вам провайдером и в моем примере клиент получил его 2001:828:105::/48. Последние 64 бита называются идентификатором интерфейса, и это эквивалентно части хоста в IPv4.
Это оставляет нас с 16 битами в середине, которые я могу использовать для создания подсетей. Если я хочу, я могу взять еще несколько битов из идентификатора интерфейса, чтобы создать еще больше подсетей, но в этом нет необходимости.
Используя 16 бит, мы можем создать 65.536 подсетей ...более чем достаточно для большинства из нас. И с 64 битами для идентификатора интерфейса на подсеть, мы можем иметь восемнадцать квинтиллионов, четыреста сорок шесть квадриллионов, семьсот сорок четыре триллиона, семьдесят четыре миллиарда, семьсот девять миллионов, пятьсот пятьдесят одну тысячу, шестьсот с чем-то хостов на подсеть. Этого должно быть более чем достаточно!
Использование 64-битного идентификатора интерфейса также очень удобно, потому что он сокращает ваш IPv6-адрес ровно наполовину!
Допустим, наш клиент с префиксом 2001: 828: 105:: / 48 хочет создать несколько подсетей для своей внутренней сети. Какие адреса мы можем использовать?
16 бит дает нам 4 шестнадцатеричных символа. Таким образом, все возможные комбинации, которые мы можем сделать с этими 4 символами, являются нашими возможными подсетями. Все, что находится между 0000 и FFFF, является допустимыми подсетями:
2001:828:105:0000::/64;
2001:828:105:0001::/64;
2001:828:105:0002::/64;
2001:828:105:0003::/64;
2001:828:105:0004::/64;
2001:828:105:0005::/64;
2001:828:105:0006::/64;
2001:828:105:0007::/64;
2001:828:105:0008::/64;
2001:828:105:0009::/64;
2001:828:105:000A::/64;
2001:828:105:000B::/64;
2001:828:105:000C::/64;
2001:828:105:000D::/64;
2001:828:105:000E::/64;
2001:828:105:000F::/64;
2001:828:105:0010::/64;
2001:828:105:0011::/64;
2001:828:105:0012::/64;
2001:828:105:0013::/64;
2001:828:105:0014::/64;
И так далее.
Всего существует 65 535 возможных подсетей, поэтому, к сожалению, я не могу добавить их все в статью...теперь мы можем назначить эти префиксы различным соединениям типа point-to-point, VLAN и т. д.
Если вы новичок в Linux или даже "опытный" боец - без разницы. Ниже приведены все самые важные команды, которые должен знать, каждый кто работает в этой системе. Эти команды также работают в командной строке MacOS.
Основные команды терминала Linux
Linux включает в себя большое количество команд, но мы выбрали 37 наиболее важных для представления здесь. Изучите эти команды, и вы почувствуете себя намного комфортнее при работе в командной строке Linux.
Приведенный ниже список представлен в алфавитном порядке. Позиция команды в списке не отражает ее полезности или простоты. Подробную информацию об использовании команды можно посмотреть см. в встроенном справочнике. Команда man, - сокращение от manual, - которая запустит справочник, тоже рассматривает в нашем руководстве.
1. alias
Команда alias позволяет задать собственное название команде или нескольким командам. Затем при запуске указанного имени выполняется команда или несколько команд, указанных в alias.
alias cls=clear
Данная команда создает псевдоним, называемый cls, который ссылается на команду clear. При вводе cls экран будет очищен так же, как если бы вы ввели clear. Указанный псевдоним экономит очень мало нажатий, но, если вы часто переходите между командной строкой Windows и Linux, вы можете ввести команду Windows cls на компьютере Linux, который не понимает данную команду. Ну что же, теперь поймет.
Псевдонимы могут быть гораздо более сложными, чем этот пример. Вот псевдоним pf (для процесса поиска), который немного сложнее. Обратите внимание на использование кавычек вокруг последовательности команд. Это необходимо, если в последовательности команд есть пробелы. Этот псевдоним использует команду ps для перечисления выполняемых процессов, а затем передает их команде grep. Команда grep выполняет поиск записей среди выходных данных ps, которые соответствуют параметру командной строки $1.
alias pf="ps -e | grep $1"
Итак, если нужно найти PID процесса shutter или вообще проверить, запущен ли данный процесс, то можно использовать данный псевдоним как указано ниже:
pf shutter
Следует отметить, что псевдонимы удаляются при закрытии окна терминала, в котором они были созданы. Чтобы сохранить псевдонимы нужно добавить их в файл .bash_aliases в домашней директории.
2. cat
Команда cat (сокращение от concatenate) выводит содержимое файла в окно терминала. Это намного быстрее чем открывать файл в редакторе, а также исключает случайное изменение файла. Чтобы просмотреть содержимое файла .bash_log_out, нужно запустить следующую команду находясь в домашней папке.
cat .bash_logout
Если длина файла превышает количество строк в окне терминала, текст будет проноситься слишком быстро для чтения. Чтобы управлять количеством выводимых строк, вывод команды cat можно передать команде less. С помощью этой команды можно прокрутить файл вперед и назад с помощью клавиш вверх и вниз, клавиш PgUp и PgDn, а также клавиш Home и End. Введите q, чтобы выйти из less.
cat .bashrc | less
3. cd
Команда cd меняет текущую директорию на указанную в качестве параметра. Другими словами, данная команда помогает перемещаться по файловой системе.
Чтобы перейти в каталог, который находится в текущей директории, достаточно ввести команду cd и название папки, куда нужно переместиться.
cd work
Чтобы перейти в любой другой каталог файловой системы следует указать полный путь к нужной директории, который должен начинаться на /.
cd /usr/local/bin
Чтобы быстро переместиться к домашней директории используйте символ тильда "~" в качестве названия каталога.
cd ~
Еще один трюк: чтобы перейти в родительскую директорию или же на каталог выше, в качестве названия каталога достаточно набрать две точки "..".
cd ..
Представьте, что вы находитесь в каком-то каталоге. В родительском каталоге же есть несколько других папок. Чтобы сэкономить время можно сразу набрать .. и название каталога, в который нужно перейти:
cd ../games
4. chmod
Команда chmod позволяет управлять правами на файлы или папки. Эти права включают в себя право на чтение, запись и запуск. Если вывести список папок и файлов командой ls с ключом -l, то можно увидеть что-то подобное:
-rwxrwxrwx
Первый символ это "-", и означает файл, если бы было "d" - означало бы директорию. Дальше идет строка из трех групп, каждая из которых состоит из трех букв. Слева направо: первые три означают права владельца на файл, следующие три - права группы, а последняя группа - права других. А буквы же означают: r - read (чтение), w - write (запись), x - execute (выполнение).
Если вместо буквы дефис "-", то у соответствующего объектов нет права, которое заменено на "-".
Другой способ задать права - это заменить буквы тремя цифрами. Левая цифра означает права владельца, средняя - группы, правая - других. А значения цифр перечислены ниже:
0: No permission - Нет прав;
1: Execute permission - право на выполнение;
2: Write permission - право на запись;
3: Write and execute permissions - право на запись и выполнение;
4: Read permission - право на чтение;
5: Read and execute permissions - право на чтение и выполнение;
6: Read and write permissions - право на чтение и запись;
7: Read, write and execute permissions - право на чтение, запись и выполнение.
Рассмотрим файл example.txt. Как видим во всех трех группах указаны буквы. Это означает, что все имеют все права на этот файл.
Чтобы задать пользователю все права (цифра 7), группе право на чтение и запись (цифра 6), а остальным - чтение и выполнение (цифра 5), нужно ввести следующую команду:
chmod 765 example.txt
5. chown
Данная команда позволяет менять владельца файла и группу, владеющую файлом. Просматривая наш файл example.txt, в описании файла можем увидеть dave dave. Первый из них указывает на имя владельца файла, который в данном случае является пользователем dave. Вторая запись показывает, что название группы владельца также дэйв. Каждый пользователь имеет группу по умолчанию, которая создается при создании пользователя. Этот пользователь является единственным членом этой группы. Это показывает, что файл не является общим для других групп пользователей.
Для изменения владельца или группы файла, или обоих сразу можно использовать функцию chown. Необходимо указать имя владельца и группу, разделенные символом ":". Команду нужно запускать в привилегированном режиме, используя sudo. Чтобы сохранить в качестве владельца файла dave, а mary установить в качестве владельца группы, используйте следующую команду:
sudo chown dave:mary example.txt
Чтобы изменить и владельца, и группу файла, нужно выполнить следующую команду:
sudo chown mary:mary example.txt
6. curl
Команда curl позволяет получать информацию или файла с указанного url или адреса в интернете.
Данная команда может не быть предустановлена. Чтобы установить данный пакет в системе Ubuntu и других системах семейства Debian введите команду apt-get. Для других дистрибутивов нужно использовать соответствующий менеджер пакетов.
sudo apt-get install curl
Предположим, что требуется скачать один файл из репозитория GitHub. Официально поддерживаемого пути для этого нет. Вы вынуждены клонировать весь репозиторий. Однако с помощью curl мы можем получить нужный файл.
Эта команда извлекает файл для нас. Обратите внимание, что для сохранения файла необходимо указать его имя с помощью ключа -o (output). Если этого не сделать, содержимое файла просто отобразиться в окне терминала, но не сохранится на компьютере.
curl https://raw.githubusercontent.com/torvalds/linux/master/kernel/events/core.c -o core.c
Если не хотите, чтобы выводилась информация о загрузке, команду нужно запустить с ключом -s (silent).
curl -s https://raw.githubusercontent.com/torvalds/linux/master/kernel/events/core.c -o core.c
7. df
Команда df показывает размер, используемое и доступное место на подключенных файловых системах компьютера.
Двумя наиболее полезными опциями являются опции -h (human readable) и -x (исключить). Первый параметр позволяет отображать размеры в Мб или Гб, а не в байтах. Опция исключения позволяет указать df не выводить указанные файловые системы. Например, squashfs, вымышленная файловая система, которая создается при установке приложения с помощью команды snap.
df -h -x squashfs
8. diff
Команда diff сравнивает содержимое двух файлов и выводит отличия между ними. Данная команда имеет много опция, позволяющих регулировать отображением согласно вашим нуждам.
Ключ -y (side by side) позволяет выводить отличающиеся строки напротив друг друга. Параметр -w указывает максимальную длину строк, чтобы избежать переводы строк. Команда -suppress-common-lines предотвращает отображение совпадающих строк, позволяя сфокусировать внимание только на отличиях.
diff -y -W 70 alpha1.txt alpha2.txt --suppress-common-lines
9. echo
Команда echo выводит строку в окно терминала.
echo A string of text
С помощью этой команды можно выводить значения переменных сред, таких как $USER, $HOME, $PATH. В данных переменных храниться имя пользователя, название домашнего каталога и путь, по которому система ищет вводимые пользователем команды.
echo $USER
echo $HOME
echo $PATH
В скриптах данная команда используется для отображения хода выполнения или результата выполнения скрипта.
10. exit
Команда exit инициирует выход из окна терминала, выход из скрипта или отключение SSH соединения.
exit
11. find
С помощью команды find можно вести поиск файлов по системе. Для этого команде нужно передать место, откуда начинать поиск и название искомого файла. В данном примере "." означает текущий каталог, а параметр -name указывает команде искать файлы, название которых соответствует шаблону.
Можно также использовать маски, где * означает любой символ любое количество раз, а ? означает один любой символ. В данном примере мы будем искать файл, в название которого включено слово "*ones*". Это могут быть bones, stones, lonesome.
find . -name *ones*
Как мы видим, команда вывела список совпадений, среди которых также папка Ramones. Мы можем ограничить поиск только среди файлов. Для этого команде find нужно передать ключ -type со значением f, что означает файл.
find . -type f -name *ones*
Если нужно чтобы поиск велся независимо от регистра, то нужно передать ключ -iname.
find . -iname *wild*
12. finger
Команда finger предоставляет короткий дамп информации о пользователе, включая время последнего входа пользователя в систему, домашний каталог пользователя и полное имя учетной записи пользователя.
13. free
Команда free предоставляет сводку использования памяти на компьютере. Это выполняется как для основной оперативной памяти (RAM), так и для swap памяти. Для обеспечения вывода данных в удобном для понимания виде используется параметр -h (человек). Без этой опции цифры представлены в байтах.
free -h
14. grep
Утилита grep выполняет поиск строк, соответствующих переданному шаблону. Когда мы рассматривали команду alias, мы использовали grep для поиска среди вывода другой программы - ps. Команда grep также может искать среди содержимого файлов. Здесь мы ищем слово "train" во всех текстовых файлах текущего каталога.
grep train *.txt
На выводе мы получим название всех файлов, содержащих слово train, а также строку, где искомое слово подсвечено.
Более подробно обо всех возможностях данной утилиты можно узнать в руководстве man, а также в нашем материале про команду grep.
15. Groups
Данная команда позволяет узнать членом каких групп является указанный пользователь
groups dave
groups mary
16. gzip
Данная команда сжимает файлы. По умолчания, она удаляет исходный файл, оставляя только сжатую версию. Чтобы сохранить оба файла используйте ключ -k.
gzip -k core.c
17. head
Команда head выводит первые 10 строк файла. Если требуется просмотреть меньшее или большее количество строк, используйте параметр -n (number). В этом примере head запускается со значением по умолчанию. Затем мы повторяем команду, запрашивая только пять строк.
head -core.c
head -n 5 core.c
18. history
Команда history содержит список ранее введенных в командной строке команд. Можно повторить любую команду из истории, введя восклицательный знак "!" и номер команды из списка.
!188
Два восклицательных знака повторно выполнят предыдущую команду.
19. kill
Команда kill позволяет завершить процесс из командной строки. Для этого необходимо указать идентификатор процесса (PID), который нужно завершить. Не рекомендуется принудительно завершать процессы. Для этого нужно иметь вескую причину. В этом примере мы сделаем вид, что программа shutter заблокирована.
Чтобы узнать PID процесса shutter выполним команду:
ps -e | grep shutter
Получив таким образом идентификатор процесса можно перейти к завершение данного процесса.
kill 1692
20. less
Команда less позволяет просматривать файлы без открытия в редактора. Его быстрее запускать, а также нет возможности случайно изменить файл. С less можно прокрутить файл вперед и назад с помощью клавиш вверх и вниз, клавиш PgUp и PgDn и клавиш Home и End. Нажмите клавишу "Q", чтобы выйти из режима "less".
Чтобы просмотреть файл командой less, введите следующую команду
less core.c
Команде less также можно передать вывод других команд. Чтобы просмотреть весь список файлов жесткого диска командой less нужно выполнить следующую команду:
ls -R / | less
"/" позволяет вести поиск вниз по файлу, а "?" - вверх.
21. ls
Команда ls, пожалуй, самая первая команда, с которой имеют дело, начиная пользоваться системой Linux. Она показывает список файлов и папок в указанной директории. По умолчанию, данная команда выводит содержимое текущей директории. Она имеет очень много полезных опций, с которыми настоятельно рекомендует познакомиться в его руководстве. Ниже рассмотрены некоторые из них.
Вывод содержимого текущей директории
ls
Вывод списка файлов и каталогов в текущей директории с подробной информацией.
ls -l
Для вывода списка в удобочитаемом варианте используется ключ -h.
ls -lh
Для вывода всех файлов и папок, включая скрытые используется следующая команда:
ls -lha
22. man
Команда man запускает руководство по конкретной команде. Так как данная команда использует команду less для вывода, то можно воспользоваться возможностями данной команды для поиска.
Например, просмотрим руководство по команде chown
man chown
Для прокрутки используйте клавиши вверх и вниз, PgUp и PgDn. Для выходя из руководства нажмите q.
23. mkdir
Данная команде позволяет создавать новый файл в системе. Команде mkdir нужно передать название нового файла. Если же файл нужно создать за пределами текущей папки, то нужно указать и путь к месту, где нужно создать её.
Чтобы создать две новые папки с названиями invoices и quotes введите:
mkdir invoices
mkdir quotes
Чтобы создать папку 2020 внутри папки invoices введите:
mkdir invoices/2109
Если нужно создать папку, но нет родительской папки для неё, то можно использовать параметр -p (parents) для автоматического создания всех родительских папок. На примере ниже мы создаем папку 2020 в папке yearly, которая находится внутри папки quotes. Но директория yearly еще не создана, но мы указываем команде mkdir попутно создать все нужные папки.
mkdir -p quotes/yearly/2019
24. mv
Эта команда позволяет перемещать файлы и папки из каталога в каталог, также используется для переименования файлов.
Для перемещения файла необходимо указать mv, текущий путь к файлу и путь к пункту назначения. В этом примере мы перемещаем файл apache.pdf из каталога "~/Document/Ukulele" и помещаем его в текущий каталог, обозначенный символом точка ".".
mv ~/Documents/Ukulele/Apache.pdf
Чтобы переименовать файл, "переместите" его в файл с новым именем.
mv Apache.pdf The_Shadows_Apache.pdf
Для перемещения файла с новым названием используйте следующую команду:
mv ~/Documents/Ukulele/Apache.pdf ./The_Shadows_Apache.pdf
25. passwd
Данная команда позволяет устанавливать или менять пароль пользователя. Чтобы поменять свой пароль просто введите passwd.
Также можно менять пароль другого пользователя, но для этого команда должна быть запущена с повышенными правами. При этом система попросит два раза ввести новый пароль.
sudo passwd mary
26. ping
Эта команда, наверное, известна всем, кто пользуется компьютером. Ну почти всем. Она позволяет проверить доступность удаленного хоста, чаще всего используется для выявления неполадок в сети. Для использования этой команды достаточно передать IP адрес или название хоста.
ping 192.168.4.18
В системе Linux данная команда выполняется бесконечно. Завершить выполнение команды можно комбинацией клавиш Ctrl+C.
Теперь поясним вывод команды:
Устройство с IP адресом 192.168.4.18 отвечает на наши запросы и посылает пакеты размером 64 байт
Номера пакетов ICMP позволяет определить не потерялся ли пакет в пути
TTL означает время жизни пакета. При каждом проходе через очередной маршрутизатор TTL уменьшается на одну единицу. Если TTL достигнет нуля пакет сбрасывается. Данный механизм предотвращает петли в сети.
Значение time показывает время за которое запрос прошел путь от хоста инициатора до адресата и обратно. Чем меньшее значение, тем лучше.
Чтобы послать конкретное число запросов используется ключ -c
ping -c 5 192.168.4.18
А параметр -a позволяет услышать ответы на запросы ping.
ping -a 192.168.4.18
27. ps
Данная команда выводит список процессов, запущенных в системе. Если запустить её без параметров, то она отобразить процессы запущенные в данной сессии.
ps
Чтобы отобразить процессы, запущенные конкретным пользователем, используется ключ -u с именем пользователя в качестве значения. Список может быть длинным, поэтому целесообразно передать вывод команде less.
ps -u dave | less
Чтобы увидеть все процессы запустите команду с ключом -e.
ps -e | less
28. pwd
Данная команда выводит полный путь к текущей папке. Другими словами показывает директорию в которой находится пользователь в данное время.
pwd
29. shutdown
Эта команда позволяет перезагрузить машину или вовсе завершить работу системы. Если запустить команду без параметров, то она через минуту она завершить работу системы.
Чтобы завершить работы системы немедленно используется параметр now
shutdown now
Также можно запланировать завершение работы системы и послать уведомление всем пользователям. Для планирования нужно передать команде время завершения работы. Можно указать как в минутах с текущего момента, например, +90, так и точное время. Далее идет текст уведомления для пользователей.
shutdown 23:00 Shutdown tonight at 23:00, save your work and log out before then!
Чтобы отменить завершение работы нужно ввести команду:
shutdown -c
30. ssh
Команда ssh используется для подключения к удаленной Linux машине и входа в свой аккаунт. Для подключения нужно ввести имя пользователя и IP или имя хоста. В данном примере пользователь mary выполняет вход в машину с адресом 192.168.4.23. После установки соединения система просит пользователя ввести пароль.
ssh mary@192.168.4.23
Затем она выполняет команду w чтобы узнать вывести список пользователей, которые тоже работает в данной системе. Перед ее именем можно увидеть pts/1 - это означает виртуальный терминал, то есть терминал не подключенный к машине напрямую.
Чтобы завершить сессию она вводит команду exit.
w
exit
31. sudo
Команда sudo требуется при выполнении действий, требующих прав пользователя root или суперпользователя, таких как изменение пароля другого пользователя.
sudo passwd mary
32. tail
Команда tail выводит последние 10 строк файла. Если требуется просмотреть меньшее или большее количество строк, используется параметр -n (number). В этом примере tail запущен со значением по умолчанию. Затем мы повторяем команду, запрашивая только пять строк.
tail core.c
tail -n 5 core.c
33. tar
С помощью команды tar можно создать архивный файл (также называемый tarball), который может содержать множество других файлов. Это значительно упрощает распространение файлов. Её также можно использовать для извлечения файлов из архива. Обычно команде tar указывается, что надо сжать файлы при архивации. Но если не требуется сжатие, архивный файл создается без сжатия.
Для создания архивного файла необходимо указать утилите tar, какие файлы следует включить в архивный файл, а также название архивного файла. На примере ниже мы заархивируем все файлы, которые находятся в папке Ukulele.
Для этого нужно передать команде tar опцию -c (create) и -v (verbose). Ключ verbose визуализирует процесс архивации, показывая какой файл в текущий момент архивируется. Затем передается ключ -f за которым следует название архива. В нашем случае он называется songs.tar.
tar -cvf songs.tar Ukulele/
По мере их добавления файлов в архив они отображаются в окне терминала.
Существует два способа сообщить tar о необходимости сжатия архивного файла. Первый - с опцией -z (gzip). Это позволяет tar использовать утилиту gzip для сжатия архива после его создания.
Обычно в этом случае к названию архива добавляется еще ".gz". Это позволяет знать, какие команды нужно передать tar для правильного извлечения файлов.
tar -cvzf songs.tar.gz Ukulele/
В данном случае процесс архивации занимает больше времени, так как приходится еще и сжимать файлы.
Чтобы создать архив при этом сжать файлы так, чтобы итоговый объем архива был меньше используется ключ -j (bzip).
tar -cvjf songs.tar.bz2 Ukulele/
Как и в случае с gzip, процесс архивации займет заметно больше времени.
Если нужно заархивировать большое число файлов, целесообразно использовать либо ключ -z, либо ключ -j. Следует отметить, чтоб при первом варианте получите приемлемое сжатие с разумно скоростью, а второй вариант займет больше времени, но размер окажется намного меньше, как и видно на скриншоте ниже.
Для извлечения файлов из архива команде нужно передать те же ключи, с тем лишь отличием, что вместо -c используется -x (extract).
tar -xvf songs.tar
Для извлечения файлов из gzip или bzip архива к параметрам добавляется ключ -z или -j соответственно.
tar -xvzf songs.tar.gz
tar -xvjf songs.tar.bz2
34. top
Команда top в реальном времени отображение данные о состоянии системы. В верхней части экрана отображается сводка.
В первой строке отображается время и продолжительность работы компьютера, количество пользователей, вошедших в систему, а также среднее значение нагрузки за последние одну, пять и пятнадцать минут.
Во второй строке показано количество задач и их состояния: запущенные, остановленные, в режиме ожидания и зависшие (зомби).
Зомби процессы в Linux это дочерний процесс многопоточного приложения, которое было уничтожено или неожиданно завершено, оставив после себя повисший процесс.
В третьей строке отображается информация о ЦП:
us - это время ЦП, затрачиваемое на выполнение процессов для пользователей в "пользовательском пространстве";
sy - это время ЦП, затрачиваемое на выполнение системных процессов "пространства ядра";;
ni - это время ЦП, затраченное на выполнение процессов с заданным вручную значением;
id - время простоя ЦП;
wa - это время, затрачиваемое процессором на ожидание завершения операций ввода-вывода.;
hi - время ЦП, потраченное на обслуживание аппаратных прерываний;
si - время ЦП, потраченное на обслуживание прерываний программного обеспечения;
st - потерянное из-за работы виртуальных машин ("украденное время").
В четвертой строке отображается общий объем физической памяти, а также количество свободной, используемой и буферизованной или кэшированной памяти.
В пятой строке отображается общий объем файла подкачки, а также количество свободной, используемой и доступной памяти (с учетом памяти, которая, как ожидается, может быть восстановлена из кэш-памяти).
Чтобы отображать информацию в более понятном для человека виде нужно нажать клавишу E.
Названия же столбцов означают следующее:
PID - идентификатор процесса;
USER - имя пользователя запустившего процесс;
PR - приоритет процесса;
NI - приоритет присвоенный командой nice;
VIRT - виртуальная память, которую использует процесс;
RES - физическая память, занятая процессом;
SHR - общий объем распределенной памяти;
S - текущий статус процесса. Об этом чуть ниже;
%CPU - процент используемого времени ЦП;
%MEM - процент ОЗУ используемого процессом;
TIME+ - продолжительность работы процесса;
COMMAND - название команды запустившего процесс.
Статус процесса может быть одним из следующих:
D - непрерываемый сон;
R - запущен;
S - в режиме ожидания;
T - остановлен;
Z - зависшие процессы.
35. uname
Данная команда предоставляет различную информацию о системе, на которой работаете. Для этого используются соответствующие ключи.
-a - отображает всю информацию;
-s - отображает тип ядра;
-r - отображает версию ядра;
-v - отображает версию системы.
36. w
Данная команда показывает список пользователей, залогинившихся в в систему.
37. whoami
Эта команда показывает под каким именем сейчас пользователь работает в системе.
whoami
Итоги
Вот и весь набор базовых инструментов. Обучение Linux - это все равно, что учиться чему-либо еще. Вам понадобится какая-то практика, прежде чем привыкнуть к этим командам. Но когда уже станете на "ты" с этими утилитами, начнется путь к мастерству.
В 2013 году, вместе с бета – релизом Asterisk 12 астериск - комьюнити был представлен новый API, который получил гордое название - ARI (Asterisk REST Interface). Что это и как им пользоваться, если вы любите php - рассказываем в статье.
Зачем Asterisk нужен новый API?
Все мы привыкли, что Asterisk имеет два интерфейса: Asterisk Manager Interface (AMI) и Asterisk Gateway Interface (AGI). AMI это асинхронный интерфейс, который используется для управления вызовами, инициацией звонков и всем, что попадает под определение «call control». AGI, в свою очередь, предоставляет синхронный интерфейс манипуляции одним каналом, являясь своего рода «прослойкой» между диалпланом и внешними скриптами. Важно отметить, что на время выполнения, AGI блокирует поток.
В связке, оба интерфейса неплохо справляются с задачами, связанными с различного рода манипуляциями с каналами и диалпланом Asterisk. Но разработка сложного и многоуровневого приложения может стать по настоящему трудной задачей для разработчика, в которой придется задействовать AGI и AMI одновременно.
Именно в этот момент на помощь приходит ARI (Asterisk REST Interface). Отметим, что ARI не заменяет AGI или AMI. Новый интерфейс позволяет разработчикам заменить управление на уровне диалплана внешними приложениями (скриптами). Тем самым, ARI упрощает жизнь разработчикам бизнес – приложений, которые используют Asterisk в качестве коммуникационной платформы.
ARI дает девелоперам высокоуровневый REST интерфейс, через который доступно управление базовыми операциями Asterisk, например, такими как каналы, мосты (бриджи), конечные устройства, управление медиа – потоками, записью разговоров и так далее. Информация об этих объектах передается в асинхронном режиме событиями JSON поверх WebSocket.
Только представьте: раньше, чтобы овладеть подобным набором инструментов, вам необходимо было иметь навыки программирования на C и разработать свой собственный модуль и внедрить в Asterisk. С использованием ARI, приложения могут быть написаны на вашем любимом языке, будь то Python, Ruby, PHP или JavaScript! Для удобства, ниже мы привели библиотеки и ссылки на них для различных языков программирования:
Библиотека
Язык программирования
Ресурс
ari4java
Java
https://github.com/l3nz/ari4java
ari-py
Python
https://github.com/asterisk/ari-py
AsterNET.ARI
C#/.NET
https://asternetari.codeplex.com/
node-ari-client
JavaScript (node)
https://github.com/asterisk/node-ari-client
phpari
PHP
http://www.phpari.org/
Подведем итог: новый интерфейс ARI дает новые возможности не только для Asterisk комьюнити, но и для разработчиков бизнес приложений. От слов к делу, переходим к настройке.
Настройка phpari
Поскольку ARI это технология, базирующаяся на WebSocket, первым делом необходимо внести некоторые настройки в файл http.conf, который находится в директории /etc/asterisk/:
cd /etc/asterisk/
vim http.conf
Приводим файл к следующему виду:
[general]
enabled = yes
bindaddr = 127.0.0.1
Далее, «сетапим» файл ari.conf, открыв его командой vim ari.conf:
[general]
enabled = yes
pretty = yes
[имя_вашего_пользователя]
type = user
read_only = no
password = пароль_для_пользователя
В секции [имя_вашего_пользователя], укажите юзернейм, а в секции password его соответствующий пароль. Перегружаем Asterisk:
asterisk –rv
core restart now
Теперь мы установим phpari. Установку будем производить с помощью composer:
Если у вас не установлен composer, вы можете скачать его по этой ссылке.
Открываем для редактирования файл composer.json и добавляем в него следующий код:
{
"require": {
"php": ">=5.3.9",
"educoder/pest": "1.0.0",
"devristo/phpws": "dev-master",
"greenfieldtech-nirs/phpari": "dev-master"
}
}
После чего запускаем команду:
composer install
Необходимая библиотека будет загружена. Переходим в директорию /vendor/greenfieldtech-nirs/phpari и открываем для редактирования файл phpari.ini:
cd /vendor/greenfieldtech-nirs/phpari
vim phpari.ini
Редактируем следующим образом:
[general]
debug=0
logfile=console ; #если хотите логировать ARI в консоль, то оставьте данное поле без изменений. Если хотите логировать в файл, то укажите полный путь к нему;
[asterisk_ari]
username= имя_вашего_пользователя
password= пароль_для_пользователя
host=IP_адрес_Asterisk
port=8088
endpoint=/ari
transport=ws ; #нешфированный транспорт, wss для шифрования;
Отлично. Теперь давайте соберем простенький .php скрипт, который будет показывать активные каналы. Для этого, в директории, где у нас находится скачанная библиотека phpari и соответственно директория /vendor, создаем файл ari.php и наполяем его следующей конфигурацией:
require_once "vendor/autoload.php";
$ariCon = new phpari();
print_r($ariCon->channels()->channel_list());
Сохраняем. Сделайте 1 активный вызов на вашем Asterisk (например, позвонив с софтфона на софтфон). Переходим в консоль, и даем команду на выполнение этого скрипта:
php ari.php
Если все сделано правильно, в консоли мы увидим JSON – ответ, в котором будут переданы параметры активного канала: context, exten, caller, accountcode и прочие.
Как вызвать приложение?
Вызвать приложение из диалплана очень просто. Для этого, необходимо использовать Stasis:
exten => _XXXX,1,Stasis(ваше_приложение)
Что именно умеет ARI?
Кратко поговорим о том, какие именно операции умеет совершать ARI:
Метод
Путь
Описание
GET
/channels/{channelId}
Получить информацию о канале с channelId
POST
/channels/{channelId}
Создать канал с указанным channelId
DELETE
/channels/{channelId}
Удалить (Hang Up) канал
POST
/channels/{channelId}/continue
Возврат в диалплан (выход из скрипта)
POST
/channels/{channelId}/continue
Возврат в диалплан (выход из скрипта)
POST
/channels/{channelId}/answer
Ответить на канал
POST
/channels/{channelId}/mute
"Замьютить" канал
DELETE
/channels/{channelId}/mute
"Снять мьют" с канала
POST
/channels/{channelId}/hold
Поставить вызов на удержание
DELETE
/channels/{channelId}/hold
Снять вызов с удержания
POST
/channels/{channelId}/play
Воспроизвести медиа файл
POST
/channels/{channelId}/record
Начать запись
GET
/bridges
Лист всех активных мостов (бриджей)
GET
/bridges
Лист всех активных мостов (бриджей)
POST
/bridges/{bridgeId}/addChannel
Добавить канал к бриджу
POST
/bridges/{bridgeId}/removeChannel
Удалить канал с бриджа
GET
/endpoints
Список оконечных устройств
GET
/endpoints/{tech}
Список оконечных устройств, которые функционируют по указанной технологии
GET
/endpoints/{tech}/{resource}
Детальная информация по оконечному устройству
GET
/sounds
Список звуков
GET
/sounds/{soundId}
Список звуков