По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Изначально разработанный для Unix-систем grep, является одной из наиболее широко используемых утилит командной строки в среде Linux. grep расшифровывается как "глобальный поиск строк, соответствующих регулярному выражению и их вывод" (globally search for a regular expression and print matching lines). grep в основном ищет на основе указанного посредством стандартного ввода или файла шаблона, или регулярного выражения и печатает строки, соответствующие заданным критериям. Часто используется для фильтрации ненужных деталей при печати только необходимой информации из больших файлов журнала. Это возможно благодаря совместной работе регулярных выражений и поддерживаемых grep параметров. Здесь мы рассмотрим некоторые из часто используемых сисадминами или разработчиками команд grep в различных сценариях. Синтаксис grep Команда grep принимает шаблон и необязательные аргументы вместе со перечислять файлов, если используется без трубопровода. $ grep [options] pattern [files] Простой пример: $ grep my file.txt my_file 1. Поиск среди нескольких файлов grep позволяет выполнять поиск заданного шаблона не только в одном, но и среди нескольких файлах. Для этого можно использовать подстановочный символ *. $ sudo grep -i err /var/log/messages Как видно из вывода, утилита перед результатом искомого шаблона выводит также название файла, что позволяет определить где именно было найдено совпадение. 2. Регистронезависимый поиск grep позволяет искать шаблон без учета регистра. Чтобы указать grep игнорировать регистр используется флаг –i. $ grep -i [pattern] [file] 3. Поиск слова Иногда появляется необходимость поиска не части, а целого слова. В таких случаях утилита запускается с флагом -w. $ grep -w [pattern] [file] 4. Вывод количества совпадений Не всегда нужно выводить результат совпадения. Иногда достаточно только количества совпадений с заданным шаблоном. Эту информацию мы можем получить с помощью параметра -c. $ grep -c [pattern] [file] 5. Поиск в поддиректориях Часто необходимо искать файлы не только в текущей директории, но и в подкаталогах. grep позволяет легко сделать это с флагом -r. $ grep -r [pattern] * 6. Инверсивный поиск Если вы хотите найти что-то, что не соответствует заданному шаблону, grep позволяет сделать только это с флагом -v. $ grep -v [pattern] [file] Можно сравнить выходные резултаты grep для одного и того же шаблона и файла с флагом -v и без него. С параметром -v выводятся любые строки, которые не соответствуют образцу. 7. Вывод нумерации строк grep позволяет нумеровать совпавшие строки, что позволяет легко определить, где строка находится в файле. Чтобы получить номера строк в выходных данных. используйте параметр –n: $ grep -n [pattern] [file] 8. Ограничение вывода Результат вывода grep для файлов вроде журналов событий и т.д. может быть длинным, и вам может просто понадобиться фиксированное количество строк. Мы можем использовать -m [num], чтобы ограничить выводимые строки. $ grep -m[num] [pattern] [file] Обратите внимание, как использование флага -m влияет на вывод grep для одного и того же набора условий в примере ниже: 9. Вывод дополнительных строк Часто нам нужны не только строки, которые совпали с шаблоном, но некоторые строки выше или ниже их для понимания контекста. С помощью флагов -A, -B или -C со значением num можно выводить строки выше или ниже (или и то, и другое) совпавшей строки. Здесь число обозначает количество дополнительных печатаемых строк, которое находится чуть выше или ниже соответствующей строки. Это применимо ко всем совпадениям, найденным grep в указанном файле или списке файлов. $ grep -A[num] [pattern] [file] $ grep -B[num] [pattern] [file] $ grep -C[num] [pattern] [file] Ниже показан обычный вывод grep, а также вывод с флагом -A, -B и -C один за другим. Обратите внимание, как grep интерпретирует флаги и их значения, а также изменения в соответствующих выходных данных. С флагом -A1 grep печатает 1 строку, которая следует сразу после соответствующей строки. Аналогично, с флагом -B1 он печатает 1 строку непосредственно перед соответствующей строкой. С флагом -C1 он печатает 1 строку, которая находится до и после соответствующей строки. 10. Вывод списка файлов Чтобы напечатать только имя файлов, в которых найден образец, а не сами совпадающие строки, используйте флаг -l. $ grep -l [pattern] [file] 11. Вывод абсолютных совпадений Иногда нам нужно печатать строки, которые точно соответствуют заданному образцу, а не какой-то его части. Флаг -x grep позволяет делать именно это. $ grep -x [pattern] [file] В приведенном ниже примере файл file.txt содержит строку только с одним словом «support», что соответствует требованию grep с флагом –x. При этом игнорируются строки, которые могут содержать слова «support» с сопутствующим текстом. 12. Поиск совпадения в начале строки С помощью регулярных выражений можно найти последовательность в начале строки. Вот как это сделать. Обратите внимание, как с помощью символ каретки ^ изменяет выходные данные. Символ каретки указывает grep выводить результат, только если искомое слово находится в начале строки. Если в шаблоне есть пробелы, то можно заключить весь образец в кавычки. 13. Поиск совпадения в конце строки Другим распространенным регулярным выражением является поиск шаблона в конце строки. $ grep [options] "[string]$" [file] В данном примере мы искали точку в конце строки. Поскольку точка . является значимым символом, нужно её экранировать, чтобы среда интерпретировала точку как команду. Обратите внимание, как изменяется вывод, когда мы просто ищем совпадения . и когда мы используем $ для указания grep искать только те строки, которые заканчиваются на . (не те, которые могут содержать его где-либо между ними). 14. Использования файла шаблонов Могут возникнуть ситуации, когда у вас есть сложный список шаблонов, которые вы часто используете. Вместо записи его каждый раз можно указать список этих образцов в файле и использовать с флагом -f. Файл должен содержать по одному образцу на каждой строке. $ grep -f [pattern_file] [file_to_match] В нашем примере мы создали файла шаблона с названием pattern.txt со следующим содержимым: Для его использования используйте флаг -f. 15. Поиск по нескольким шаблонам grep позволяет задать несколько шаблонов с помощью флага -e. $ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file] 16. Указание расширенных регулярных выражений grep также поддерживает расширенные регулярные выражения (Extended Regular Expressions – ERE) или с использованием флага -E. Это похоже на команду egrep в Linux. Использование ERE имеет преимущество, когда вы хотите рассматривать метасимволы как есть и не хотите экранировать их. При этом использование -E с grep эквивалентно команде egrep. $ grep -E '[Extended RegEx]' [file] Ниже приведён пример использование ERE, для вывода не пустых и не закомментированных строк. Это особенно полезно для поиска чего-то в больших конфигурационных файлах. Здесь дополнительно использован флаг –v, чтобы НЕ выводить строки, соответствующих шаблону '^ (# | $)'. Заключение Приведенные выше примеры являются лишь верхушкой айсберга. grep поддерживает ряд вариантов и может быть очень полезным инструментом в руке человека, который знает, как его эффективно использовать. Мы можем не только использовать приведенные выше примеры, но и комбинировать их различными способами, чтобы получить то, что нам нужно. Для получения дополнительной информации можно воспользоваться встроенной системой справки Linux – man.
img
Формат файла ZIP уменьшает размер файлов, сжимая их в один файл. Этот процесс экономит дисковое пространство, шифрует данные и позволяет легко обмениваться файлами с другими. Вот как можно сжать и разархивировать файлы с помощью PowerShell. Как архивировать файлы с помощью PowerShell Начнем с сжатия некоторых файлов в ZIP-архив с помощью командлета Compress-Archive. Он берет путь к любым файлам, которые вы хотите сжать - несколько файлов разделяются запятой - и архивирует их в указанном месте назначения. Сначала откройте PowerShell, выполнив поиск в меню «Пуск», а затем введите следующую команду, заменив PathToFiles и PathToDestination на путь к файлам, которые вы хотите сжать, а также на имя и папку, в которую вы хотите перейти, соответственно: Compress-Archive -LiteralPath <PathToFiles> -DestinationPath <PathToDestination> Когда вы указываете путь назначения, обязательно укажите имя файла архива, иначе PowerShell сохранит его как .zip. Примечание. Кавычки вокруг пути необходимы только в том случае, если путь к файлу содержит пробел. В качестве альтернативы, чтобы сжать все содержимое папки и все ее подпапки, вы можете использовать следующую команду, заменив PathToFolder и PathToDestination на путь к файлам, которые вы хотите сжать, а также на имя и папку, которую вы хотите. чтобы перейти соответственно: Compress-Archive -LiteralPath <PathToFolder> -DestinationPath <PathToDestination> В предыдущем примере мы указали путь к каталогу с несколькими файлами и папками без указания отдельных файлов. PowerShell берет все внутри корневого каталога и сжимает его, а также все подпапки. Командлет Compress-Archive позволяет использовать подстановочный знак (*) для дальнейшего расширения функциональности. При использовании символа вы можете исключить корневой каталог, сжать только файлы в каталоге или выбрать все файлы определенного типа. Чтобы использовать подстановочный знак с Compress-Archive, вы должны использовать вместо этого параметр -Path, так как -LiteralPath не принимает их. Выше мы рассмотрели, как включить корневой каталог и все его файлы и подкаталоги при создании архивного файла. Однако, если вы хотите исключить корневую папку из Zip-файла, вы можете использовать подстановочный знак, чтобы исключить ее из архива. Добавляя звездочку (*) в конец пути к файлу, вы указываете PowerShell только захватить то, что находится внутри корневого каталога. Это должно выглядеть примерно так: Compress-Archive -Path C:path ofile* -DestinationPath C:path oarchive.zip Далее, скажем, у вас есть папка с кучей файлов разных типов (.doc, .txt, .jpg и так далее), Но вы хотите сжать только один тип. Вы можете указать PowerShell архивировать их, не затрагивая явно. Обозначение команды будет выглядеть так: Compress-Archive -Path C:path ofile*.jpg -DestinationPath C:path oarchive.zip Примечание. Подкаталоги и файлы корневой папки не включаются в архив этим методом. Наконец, если вам нужен архив, который сжимает файлы только в корневом каталоге и во всех его подкаталогах, вы должны использовать подстановочный знак «звезда-точка-звезда» (*. *) Для их сжатия. Это будет выглядеть примерно так: Compress-Archive -Path C:path ofile*.* -DestinationPath C:path oarchive.zip Примечание. Подкаталоги и файлы корневой папки не включаются в архив этим методом. Даже после завершения архивирования вы можете обновить существующий заархивированный файл с помощью параметра -Update. Это позволяет заменять старые версии файлов в архиве новыми версиями с такими же именами и добавлять файлы, созданные в корневом каталоге. Это будет выглядеть примерно так: Compress-Archive -Path C:path ofiles -Update -DestinationPath C:path oarchive.zip Как распаковать файлы с помощью PowerShell Помимо возможности архивировать файлы и папки, PowerShell имеет возможность разархивировать архивы. Процесс даже проще, чем их сжатие; все, что вам нужно, это исходный файл и место для данных, готовых к распаковке. Откройте PowerShell и введите следующую команду, заменив PathToZipFile и PathToDestination на путь к файлам, которые вы хотите сжать, а также на имя и папку, в которую вы хотите перейти, соответственно: Expand-Archive -LiteralPath <PathToZipFile> -DestinationPath <PathToDestination> Папка назначения, указанная для извлечения файлов, будет заполнена содержимым архива. Если папка не существовала до разархивирования, PowerShell создаст папку и поместит содержимое в нее перед разархивированием. По умолчанию, если вы пропустите параметр -DestinationPath, PowerShell разархивирует содержимое в текущий корневой каталог и использует имя файла Zip для создания новой папки. В предыдущем примере, если мы опускаем -DestinationPath, PowerShell создаст папку «Архив» по пути C:Usersuser и извлечет файлы из архива в папку. Если папка уже существует в месте назначения, PowerShell выдаст ошибку при попытке разархивировать файлы. Однако вы можете заставить PowerShell перезаписывать данные новыми, используя параметр -Force. Вы должны использовать параметр -Force только в том случае, если старые файлы больше не нужны, поскольку это необратимо заменит файлы на вашем компьютере.
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.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59