По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Привет, сегодня расскажем что такое база данных и SQL. У современных баз данных куча нюансов - погнали разбираться. Представь - собираешь ты деньги на подарок корешу, и записываешь на бумажке, кто сколько скинул. Табличка с денежками организована, разделена по именам и сумме долга, и имеет удобную структуру - ну вот оно, это и есть база данных! Ага, теперь, перемещаемся в цифровое пространство и заводим целый эксель файл для этого дела. Стало удобнее, можно редактировать, сортировать и даже данные удалять! Круто! Но достаточно ли этого для роста этой базы данных? Нет. Со временем данных становится так много, что админам приходится связывать их друг с другом, а тут одним эксель файлом уже не обойтись. Представим, решили вы сделать свой аналог ютуба, как будете хранить инфу о пользователях? Список юзеров, там, каналы, кто на что подписан, лайки и вот это все. Сложить это все в одну таблицу? Будет неудобно и медленно работать. Очевидно, надо разделить сущности на несколько таблиц - юзеры, каналы и видосы: Теперь свяжем данные между собой и добавим информацию о том, кто создал канал, и на каком канале залили видео. Ага, получились связанные таблицы. Связанные, от слова связь. А связь, это по-английски relation. А в айти тусовке они так и называются - реляционные базы данных, и это один самых распространенных типов баз данных. Еще есть нереляционные базы данных, о них подробнее можно прочитать в этой статье про NoSQL. Уф, ну теперь с данными стало гораздо удобнее работать, и мы избежали большой таблицы с повторяющимися строчками, разбив все на несколько табличек. Такой процесс еще называется нормализацией, когда мы избавляемся от избыточных данных. Ну и как раз для этого мы ввели в каждой таблице специальное поле - ID, которое идентифицирует каждую запись. Этот айди называется Primary Key, он же “первичный ключ”. А в таблице которая будет на него ссылаться, он будет называться Foreign Key, или по-русски “внешний ключ”. Нырнем в детали и поговорим про типы связей между таблицами. Первый тип называется “Один-ко-многим” или “многие-к-одному” (One-to-Many или Many-to-One). В нашем примере, у каждого видео может быть только один канал, где оно выложено, но на одном канале может быть много видео, поэтому в двух последних строках ID канала у нас повторяется, верно? Отношения «один-ко-многим» также можно рассматривать как отношения «многие-к-одному», в зависимости от того, с какой стороны вы на это смотрите. Второй тип связей называется “один-к-одному” (One-to-One) - классические табличные отношения. Вообще, это редко используемый тип связи, обычно его делают для безопасности. Это как если на нашем аналоге ютуба, мы разрешили бы создавать только один канал одному пользователю и в таблице с каналами ID создателя не могло повторяться. Такое себе, согласен? В таком случае вообще можно было бы обойтись и одной таблицей. Ну и третий тип связей, это “многие ко многим” (Many-to-many). Это когда у нас появляется промежуточная таблица связей, которая как бы соединяет два отношения “один ко многим”, которые мы обсудили в начале разбора типов связей. Давайте сделаем таблицу с лайками балалайками, где будем хранить ID пользователей и ID видео, к которым они поставили лайк: А вот так они связан: каждый пользователь может поставить лайк каждому видео. Теперь вопрос - а где все это хранить? Не в экселе же. И тут на сцену выходит термин СУБД, она же система управления базами данных - это программа, которая позволяет создавать, редактировать и администрировать реляционную базу. Ну и для управления всей этой петрушкой используется язык структурированных запросов, SQL (Structured Query Language) эскюэль или сиквел, как иногда его называют за рубежом. Он очень простой и понятный, вот смотри - чтобы найти названия всех видео с одного канала, нам нужно выполнить следующий запрос: SELECT name FROM videos WHERE channel_id = 201 То есть мы буквально говорим: выбери (SELECT) имена из (FROM) таблицы видео, где (WHERE) айдишник (ID) канала равен 201. Если вы хотите взять данные из нескольких таблиц и объединить результат, то нужно использовать в запрос параметр JOIN (от английского соединить). Вот такая упрощающая жизнь админам аналогия с разговорным языком. Так, SQL конечно позволяет добавлять, удалять и изменять данные и сами таблицы. Но важно не забывать про схему базы данных (Database schema), которая служит для описания структуры таблицы, ее полей и ограничений. Прикол в том, что если вам потребуется добавить или убрать столбец в таблице, то это изменение коснется вообще всех данных в таблице, таким образом если мы добавляем новый столбец, то он теперь будет присутствовать в каждой строке. Окей, а для чего вообще нужны ограничения? Для целостности твоих данных. Помнишь мы рассказали про первичный и внешний ключ? Так вот, благодаря им мы можем удостовериться, что в таблицу не попадет запись, которая ссылается на несуществующий айдишник. Или различные ограничения полей, которые не дадут записать дублирующие или пустые данные в нашу базу (Not NULL и Unique). И еще: транзакции. Эта штука, которая позволяет как бы склеить несколько SQL запросов в один. Ну вот представь такую задачку: вставить данные в первую таблицу, а во второй указать ID вставленной записи. Если ты делаешь это без использования транзакций, а во время второго этапа у тебя отвалится интернет, то первая запись попадет в базу, а вторая нет. Ага, появляется интернет, и ты с улыбкой на лице идешь снова выполнить эти запросы, только на этот раз получишь ошибку, что такая запись уже есть, ибо первая то уже в базе! А в случае использования транзакций, при получении ошибки, мы откатимся до того момента, который был до начала транзакции. А еще все эти радости помогают реляционным БД (базам данных) соответствовать так называемым требованиям ACID, которые нужны для сохранности данных - это очень важно в банковской отрасли, или любой другой, где целостность и сохранность данных супер важны. Давай разберемся с аббревиатурой: Atomicity — атомарность, или же проще говоря, непрерывность: это как раз про транзакции, которые мы обсудили только что. Либо операция выполняется целиком, либо никак. Consistency — согласованность: данные, записываемые в таблицу должны соответствовать всем выставленным правилам и ограничениям, помнишь, мы говорили про первичный и внешний ключи, а также про уникальность? Isolation — изолированность: если вы гоняете тонну транзакций одновременно, они не должны пересекаться и влиять друг на друга. Это очень важно для высоконагруженных баз Durability — надежность: если мы получили подтверждение, что транзакция выполнена, то значит наши данные в сохранности, даже если после этого произошел сбой. Ну и в качестве примеров таких баз данных назовем: Microsoft SQL Server, Oracle Database, MySQL, MariaDB и PostgreSQL.
img
Команды Linux могут показаться пугающими на первый взгляд, если вы не привыкли использовать терминал. Для выполнения операций и процессов в вашей системе Linux существует огромное количество команд. Независимо от того, являетесь ли вы новичком в Linux или опытным пользователем, полезно иметь список общих команд под рукой. В этом руководстве вы найдете часто используемые команды Linux, а также загружаемую шпаргалку (так называемый cheatsheet) с синтаксисом и примерами. Скачать PDF Список команд Linux Важное замечание: В зависимости от настроек вашей системы для выполнения некоторых из приведенных ниже команд может потребоваться запуск sudo. Информация об оборудовании Показать сообщения, которые выводило ядро во время загрузки: dmesg Показать информацию о процессоре: cat /proc/cpuinfo Показать свободную и использованную память с: free -h Список информации о конфигурации оборудования: lshw Показать информацию о блочных устройствах: lsblk Показать устройства PCI в древовидной схеме: lspci -tv Отображение USB-устройств в виде древовидной диаграммы: lsusb -tv Показать информацию об оборудовании из BIOS: dmidecode Показать информацию о диске: hdparm -i /dev/disk Провести тест скорости чтения на устройстве/диске: hdparm -tT /dev/[device] Проверка на нечитаемые блоки на устройстве/диске: badblocks -s /dev/[device] Поиск Поиск определенного паттерна в файле: grep [pattern] [file_name] Рекурсивно искать паттерн в каталоге: grep -r [pattern] [directory_name] Найти все файлы и каталоги, связанные с конкретным именем: locate [name] Вывести список имен, начинающиеся с указанного символа a в указанном месте /folder/location, с помощью команды find: find [/folder/location] -name [a] Просмотр файлов, размер которых превышает указанный размер + 100M в папке: find [/folder/location] -size [+100M] Файлы Список файлов в каталоге: ls Список всех файлов (включая скрытые): ls -a Показать каталог, в котором вы сейчас работаете: pwd Создать новый каталог: mkdir [directory] Удалить файл: rm [file_name] Удалить каталог рекурсивно: rm -r [directory_name] Рекурсивно удалить каталог без подтверждения: rm -rf [directory_name] Скопировать содержимое одного файла в другой файл: cp [file_name1] [file_name2] Рекурсивно скопировать содержимое одного файла во второй файл: cp -r [directory_name1] [directory_name2] Переименовать имя_файла1 в имя_файла2: mv [file_name1] [file_name2] Создать символическую ссылку на файл: ln -s /path/to/[file_name] [link_name] Создать новый файл: touch [file_name] Показать содержимое файла: more [file_name] Показать первые 10 строк файла: head [file_name] Показать последние 10 строк файла: tail [file_name] Зашифровать файл: gpg -c [file_name] Расшифровать файл: gpg [file_name.gpg] Показать количество слов, строк и байтов в файле: wc Навигация Подняться на один уровень вверх в структуре дерева каталогов: cd .. Перейти в каталог $ HOME: cd Изменить местоположение на указанный каталог: cd /chosen/directory Сжатие файлов Заархивировать существующий файл: tar cf [compressed_file.tar] [file_name] Извлечь заархивированный файл: tar xf [compressed_file.tar] Создайте сжатый gzip tar-файл: tar czf [compressed_file.tar.gz] Сжать файл с расширением .gz: gzip [file_name] Передача файлов Скопировать файл в каталог сервера через ssh: scp [file_name.txt] [server/tmp] Синхронизировать содержимое каталога с резервным каталогом: rsync -a [/your/directory] [/backup/] Пользователи Показать подробности об активных пользователях: id Показать последние системные логины: last Показать, кто в данный момент вошел в систему: who Показать, какие пользователи вошли в систему и их активность: w Добавить новую группу: groupadd [group_name] Добавить нового пользователя: adduser [user_name] Добавить пользователя в группу: usermod -aG [group_name] [user_name] Удалить пользователя: userdel [user_name] Изменить информацию о пользователе: usermod Установка пакета Список всех установленных пакетов с yum: yum list installed Найти пакет по связанному ключевому слову: yum search [keyword] Показать информацию и краткую сводку о пакете: yum info [package_name] Установить пакет с помощью менеджера пакетов >YUM: yum install [package_name.rpm] Установить пакет с помощью менеджера пакетов >DNF: dnf install [package_name.rpm] Установить пакет с помощью менеджера пакетов >APT: apt-get install [package_name] Установить пакет .rpm из локального файла: rpm -i [package_name.rpm] Удалить пакет .rpm: rpm -e [package_name.rpm] Установить программное обеспечение из исходного кода: tar zxvf [source_code.tar.gz] cd [source_code] ./configure make make install Процессы Показать снимок активных процессов: ps Показать процессы в древовидной диаграмме: pstree Показать карту использования памяти процессами: pmap Показать все запущенные процессы: top Завершить процесс Linux с заданным идентификатором: kill [process_id] Завершить процесс с определенным именем: pkill [proc_name] Завершите все процессы, помеченные как proc: killall [proc_name] Список и сводка остановленных заданий в фоновом режиме: bg Перевод последней фоновой задачи в активный режим: fg Перевод конкретной задачи в активный режим: fg [job] Список файлов, открытых запущенными процессами: lsof Системная информация Показать информацию о системе: uname -r Показать информацию о релизе ядра: uname -a Показать, как долго работает система, включая среднюю нагрузку: uptime Показать имя хоста системы: hostname Показать IP-адрес системы: hostname -i История перезагрузки системы: last reboot Показать текущее время и дату: date Запрос и изменение системных часов: timedatectl Показать текущий календарь (месяц и день): cal Список залогиненых пользователей: w Показать текущего пользователя: whoami Показать информацию о конкретном пользователе: finger [username] Использование диска Показать свободное и использованное пространство на смонтированных системах: df -h Показать свободные иноды (inode) на смонтированных файловых системах: df -i Показать разделы диска, размеры и типы: fdisk -l Показать использование диска для всех файлов и каталогов: du -ah Показать использование диска в каталоге, в котором вы находитесь: du -sh Показать целевую точку монтирования для всей файловой системы: findmnt Смонтировать устройство: mount [device_path] [mount_point] SSH Подключиться к хосту как пользователь: ssh user@host Подключиться к хосту через SSH порт по умолчанию 22: ssh host Подключиться к хосту, используя определенный порт: ssh -p [port] user@host Подключиться к хосту через telnet порт по умолчанию 23: telnet host Разрешение файлов Назначить права на чтение, запись и выполнение всем: chmod 777 [file_name] Дать владельцу право на чтение, запись и выполнение, а также разрешение на чтение и выполнение для группы и других пользователей: chmod 755 [file_name] Назначить полное разрешение владельцу, а также разрешение на чтение и запись для группы и других пользователей: chmod 766 [file_name] Изменить владельца файла: chown [user] [file_name] Изменить владельца и групповое владение файлом: chown [user]:[group] [file_name] Сеть Список IP-адресов и сетевых интерфейсов: ip addr show Назначить IP-адрес интерфейсу eth0: ip address add [IP_address] Отображение IP-адресов всех сетевых интерфейсов: ifconfig Показать активные (прослушиваемые) порты: netstat -pnltu Показать порты tcp и udp и их программы: netstat -nutlp Показать больше информации о домене: whois [domain] Показать DNS информацию о домене: dig [domain] Обратный поиск по домену: dig -x host Обратный поиск IP-адреса: dig -x [ip_address] Поиск IP для домена: host [domain] Показать локальный IP-адрес: hostname -I Скачать файл из домена с помощью команды wget: wget [file_name] Сочетания клавиш Linux Убить процесс, запущенный в терминале: Ctrl + C Остановить текущий процесс: Ctrl + Z Вырезать одно слово перед курсором и добавить его в буфер обмена: Ctrl + W Вырезать часть строки перед курсором и добавить ее в буфер обмена: Ctrl + U Вырезать часть строки после курсора и добавить ее в буфер обмена: Ctrl + K Вставить из буфера обмена: Ctrl + Y Вызвать последнюю команду, которая соответствует предоставленным символам: Ctrl + R Запустите ранее вызванную команду: Ctrl + O Выйти из истории команд без выполнения команды: Ctrl + G Запустить последнюю команду еще раз: !! Выйти из текущей сессии: exit Заключение Чем чаще вы используете команды Linux, тем лучше вы их запомните. Не переживайте о запоминании их синтаксиса - используйте наш шпаргалку. А больше материалов про Linux можно найти в нашем разделе.
img
Иногда, системному администратору необходимо отключить интерфейс, не прибегая к переключению и удалению кабеля. Проще говоря, мы должны иметь возможность решать, какие порты будут включены, а какие отключены. В Cisco используются интерфейсные подкоманды для административного включения и отключения порта: команда shutdown (отключить) и команда no shutdown (включить). Команду no shutdown является неотъемлемой частью при настройке сетевых устройств (чаще всего используют сокращенные команды "shut" и "no shut"). Ниже показан пример 1 отключения интерфейса с помощью команды shutdown. В этом примере на коммутаторе SW-1 имеется рабочий интерфейс F0 / 1. Пользователь подключается к консоли и отключает интерфейс. IOS генерирует сообщение журнала событий каждый раз, когда интерфейс переходит из одного состояния в другое, и сообщения журнала появляются на консоли, как показано в примере: Чтобы включить интерфейс, необходимо выполнить ту же последовательность команд, но вместо команды shutdown использовать команду no shutdown. Прежде чем использовать команды shutdown/no shutdown, используйте команды show, которые отображают состояние интерфейса . Команда show interfaces <номер порта> status выводит одиночное сообщение о состоянии интерфейса. Если интерфейс выключен, то выводится на экран статус интерфейса как "disabled". Команда show interfaces (без ключевого слова status) выводит на экран детализированную информацию о состоянии порта. Информация, выведенная с использованием этой команды, состоит из двух частей. Первая часть отображает фразу "administratively down". Она выделена в сообщении журнала в примере 2. Здесь показаны примеры использования этих команд. Обратите внимание, что в обоих примерах используется параметр F0/1 (сокращение от Fast Ethernet0/1). Этот параметр позволяет выводить сообщения только о состоянии порта F0/1. Удаление настроек с помощью команды no С помощью некоторых команд конфигурации IOS (но не всех) можно вернуться к настройкам по умолчанию, введя команду no <команда>. Что это значит? Давайте рассмотри несколько примеров : Если вы ранее настроили скорость 100 Mb/s на интерфейсе, команда no speed на том же интерфейсе, вернет настройки скорости по умолчанию (включится режим speed auto). Так же и с командной настройки дуплекса: ранее произведенные настройки дуплекса, переводящие порт в режим duplex half или duplex full, можно отменить командой no duplex, введенной на том же интерфейсе. Эта команда возвращает настройки по умолчанию - duplex auto. Если вы произвели настройку описания, используя команду description , то чтобы вернуться к состоянию по умолчанию, удалить описание вообще, используйте команду no description. В примере 3 показан этот процесс. В этом примере порт F0/2 коммутатора SW-1 был предварительно настроен со скоростью 100 Mb/s, режим дуплекса - duplex half, и описанием Link to BUH и отключен (shutdown). Все это отображено в листинге примера. (Для лучшего понимания работы команд, часть листинга была удалена)
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59