Архив метки: Linux

Команда grep в операционных системах Linux позволяет производить поиск по содержимому файлов с применением различных аргументов для упрощения выполнения задачи



























Rate this post

 

Рассмотрим синтаксис.

grep [параметры] шаблон [имя файла]

Или так:

Команда | grep шаблон

Здесь под параметрами понимаются аргументы,  с помощью которых настраивается поиск и вывод на экран. Например нужно найти слово “линукс”, и не учитывать регистр при поиске. Тогда нужно использовать опцию “-i”.

Шаблон – это выражение или строка.

Имя файла – где искать.

Основные параметры:

–help. Вывести справочную информацию.

-i. Не учитывать регистр при поиске.

-V. Узнать текущую версию.

-v. Инвертированный поиск.

-s. Не выводить на экран сообщения об ошибкам. Например сообщение о несуществующих файлах.

-r. Поиск в каталогах, подкаталогах или рекурсивный grep.

-w. Искать как слово с пробелами.

-с. Опция считает количество вхождений (счетчик).

-e. Регулярные выражения.

Используем команду grep в Linux

Что касается различий между дистрибутивами Линукс, в этом случае они не играют никакой роли, поскольку интересующая вас команда grep по умолчанию доступна в большинстве сборок и применяется абсолютно одинаково. Сегодня мы бы хотели обсудить не только действие grep, но и разобрать основные аргументы, которые позволяют значительно упростить процедуру поиска.

Подготовительные работы

Все дальнейшие действия будут производиться через стандартную консоль, она же позволяет открывать файлы только путем указания полного пути к ним либо если «Терминал» запущен из необходимой директории. Узнать родительскую папку файла и перейти к ней в консоли можно так:

  1. Запустите файловый менеджер и переместитесь в нужную папку.
  2. Нажмите правой кнопкой мыши на требуемом файле и выберите пункт «Свойства».
  3. Во вкладке «Основные» ознакомьтесь со строкой «Родительская папка».
  4. Теперь запустите «Терминал» удобным методом, например, через меню или зажатием комбинации клавиш Ctrl + Alt + T.
  5. Здесь перейдите к директории через команду cd /home/user/folder, где user — имя пользователя, а folder — название папки.

Задействуйте команду cat + название файла, если хотите просмотреть полное содержимое. Детальные инструкции по работе с этой командой ищите в другой нашей статье по ссылке ниже.


 

Благодаря выполнению приведенных выше действий вы можете использовать grep, находясь в нужной директории, без указания полного пути к файлу.

Стандартный поиск по содержимому

Прежде чем переходить к рассмотрению всех доступных аргументов, важно отметить и обычный поиск по содержимому. Он будет полезен в тех моментах, когда необходимо найти простое совпадение по значению и вывести на экран все подходящие строки.

  1. В командной строке введите grep word testfile, где word — искомая информация, а testfile — название файла. Когда производите поиск, находясь за пределами папки, укажите полный путь по примеру /home/user/folder/filename. После ввода команды нажмите на клавишу Enter.
  2. Осталось только ознакомиться с доступными вариантами. На экране отобразятся полные строки, а ключевые значения будут выделены красным цветом.
  3. Важно учитывать и регистр букв, поскольку кодировка Linux не оптимизирована для поиска без учета больших или маленьких символов. Если вы хотите обойти определение регистра, впишите grep -i “word” testfile.
  4. Как видите, на следующем скриншоте результат изменился и добавилась еще одна новая строка.

1. Простой поиск в файле

Давайте рассмотрим пример в файле “/etc/passwd” для поиска строки в файле. Чтобы найти слово “system” при помощи команды grep, используйте команду:


[root@destroyer ~]# cat /etc/passwd|grep system

Пример вывода:

systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin

2. Подсчет появления слов.

В приведенном выше примере мы имеем в системе поиск слов в файл

е “/etc/passwd”. Если мы хотим знать количество или число появлений слова в файле, то используйте опцию ниже:


[root@destroyer ~]# cat /etc/passwd|grep -c system 2 [root@destroyer ~]#

Выше указанно, что слово появилось два раза в файле “/etc/passwd”.

3. Игнорировать регистрозависимые слова

Команда grep чувствительна к регистру, это означает, что он будет искать только данное слово в файле. Чтобы проверить эту функцию, создайте один файл с именем «test.txt» и с содержанием, как показано ниже:


[root@destroyer tmp]# cat test.txt AndreyEx andreyex ANDREYEX Andreyex [root@destroyer tmp]#

Теперь, если вы попытаетесь найти строку «andreyex», то команда не будет перечислять все слова «andreyex» с разными вариантами, как показано ниже:


[root@destroyer tmp]# grep andreyex test.txt andreyex [root@destroyer tmp]#

Этот результат подтверждает, что только один вариант будет показан, игнорируя остальную часть слова «andreyex» с разными вариантами. И если вы хотите игнорировать этот случай, вам нужно использовать параметр «-i» с grep, как показано ниже:


[root@destroyer tmp]# grep -i andreyex test.txt AndreyEx andreyex ANDREYEX Andreyex

4. Две разные строки внутри файла с командой grep

Теперь, если вы хотите найти два слова или строки с помощью команды grep, то вы должны задать расширенные. В следующей команде мы находим две строки «system» и «nobody» в файле /etc/passwd.


[root@destroyer ~]# grep ‘system|nobody’ /etc/passwd nobody:x:89:89:Nobody:/:/sbin/nologin systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin [root@destroyer ~]#

5. Рекурсивный поиск

Допустим, вы хотите найти слово или строку рекурсивно в любом месте каталога, тогда используйте опцию -r. Например, если вы хотите найти слово «check_oracle» рекурсивно в каталоге /etc, то используйте следующую команду:


[root@destroyer ~]# grep -r “check_oracle” /etc/ /etc/selinux/targeted/contexts/files/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /etc/selinux/targeted/modules/active/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /etc/selinux/targeted/modules/active/file_contexts.template:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]

В выводе выше мы можем иметь возможность видеть имя файла, в котором мы нашли строку, и если вы хотите убрать имя файла в конечном результате, то используйте опцию «-h», как показано ниже:


[root@destroyer ~]# grep -hr “check_oracle” /etc/ /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]#

6. Вывод команды grep.

Если вы хотите найти строку или слово в любом выводе команды, то вы должны использовать оператор «|», а затем <строка> в grep. Допустим, вы хотите найти в памяти, связанные слова вывода команды dmesg, то используйте следующую команду. [root@destroyer ~]# dmesg |grep memory [ 0.000000] Base memory trampoline at [ffff880000098000] 98000 size 19456 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] [ 0.000000] init_memory_mapping: [mem 0x3fe00000-0x4fffffff] [ 0.000000] init_memory_mapping: [mem 0x3c000000-0x4fdfffff] [ 0.000000] init_memory_mapping: [mem 0x00100000-0x4bffffff] [ 0.000000] kexec: crashkernel=auto resulted in zero bytes of reserved memory. [ 0.000000] Early memory node ranges [ 0.000000] PM: Registered nosave memory: [mem 0x0003e000-0x0003ffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff] [ 0.000000] please try ‘cgroup_disable=memory’ option if you don’t want memory cgroups [ 0.030181] Initializing cgroup subsys memory [ 0.862358] Freeing initrd memory: 23532k freed [ 1.064599] Non-volatile memory driver v1.3 [ 1.069351] crash memory driver: version 1.1 [ 1.186673] Freeing unused kernel memory: 1430k freed [ 5.567780] [TTM] Zone kernel: Available graphics memory: 480345 kiB [root@destroyer ~]#

8. Точное совпадение слова

В соответствии с примером, приведенным в пункте 7, если мы ищем Andreyex, то он будет печатать все вхождение Andreyex как «Andreyex12», «Andreyex454», «Andreyex34343», а также «Andreyex», как показано ниже:


[root@destroyer tmp]# grep Andreyex test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex [root@destroyer tmp]#

тогда, если мы хотим найти точное слово «Andreyex» вместо этого, чтобы перечислить весь вывод выше, то используйте опцию «-w», как показано ниже:


[root@destroyer tmp]# grep -w Andreyex test.txt Andreyex [root@destroyer tmp]#

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

7. Инвертирование с помощью команды grep в Linux

Допустим, если вы хотите отобразить все слова в файле, который не содержит какое-либо конкретное слово, то используйте опцию «-v». Это позволяет создать один файл с содержимым, как показано ниже:


[root@destroyer tmp]# cat test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex LinuxRoutes Linux [root@destroyer tmp]#

Если мы не хотим печатать строки, содержащие слово Linux, то используйте следующую команду.


[root@destroyer tmp]# grep -v Linux test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex

[spoiler title=”Источники”]

  • https://www.vseprolinux.ru/grep
  • https://lumpics.ru/linux-grep-command-examples/
  • https://andreyex.ru/operacionnaya-sistema-linux/polnoe-rukovodstvo-komanda-grep-v-linux/


[/spoiler]


2020-07-27T15:39:45
Linux

Что Такое Curl и Как работает Эта Команда



























Rate this post

CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.

CURL может пригодиться в случаях когда необходимо вызвать удаленный скрипт и получить результат или просто сохранить HTML код вызываемой страницы, в общем каждый может найти свое применение но смысл один это то что можно послать запросы в процессе выполнения скрипта.

Команда curl

Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:

$ curlопции ссылка

Теперь рассмотрим основные опции:

  • -# – отображать простой прогресс-бар во время загрузки;
  • -0 – использовать протокол http 1.0;
  • -1 – использовать протокол шифрования tlsv1;
  • -2 – использовать sslv2;
  • -3 – использовать sslv3;
  • -4 – использовать ipv4;
  • -6 – использовать ipv6;
  • -A – указать свой USER_AGENT;
  • -b – сохранить Cookie в файл;
  • -c – отправить Cookie на сервер из файла;
  • -C – продолжить загрузку файла с места разрыва или указанного смещения;
  • -m – максимальное время ожидания ответа от сервера;
  • -d – отправить данные методом POST;
  • -D – сохранить заголовки, возвращенные сервером в файл;
  • -e – задать поле Referer-uri, указывает с какого сайта пришел пользователь;
  • -E – использовать внешний сертификат SSL;
  • -f – не выводить сообщения об ошибках;
  • -F – отправить данные в виде формы;
  • -G – если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
  • -H – передать заголовки на сервер;
  • -I – получать только HTTP заголовок, а все содержимое страницы игнорировать;
  • -j – прочитать и отправить cookie из файла;
  • -J – удалить заголовок из запроса;
  • -L – принимать и обрабатывать перенаправления;
  • -s – максимальное количество перенаправлений с помощью Location;
  • -o – выводить контент страницы в файл;
  • -O – сохранять контент в файл с именем страницы или файла на сервере;
  • -p – использовать прокси;
  • –proto – указать протокол, который нужно использовать;
  • -R –  сохранять время последнего изменения удаленного файла;
  • -s – выводить минимум информации об ошибках;
  • -S – выводить сообщения об ошибках;
  • -T – загрузить файл на сервер;
  • -v – максимально подробный вывод;
  • -y – минимальная скорость загрузки;
  • -Y – максимальная скорость загрузки;
  • -z – скачать файл, только если он был модифицирован позже указанного времени;
  • -V – вывести версию.

Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.

Проверка Версии Curl

Прежде чем мы начнём работать с Curl, нам нужно войти в наш VPS. Если вам нужна помощь, ознакомьтесь с этим руководством по SSH.

Сначала давайте проверим её доступною версию, с помощью следующей команды:

curl –version

В выводе вы должны увидеть версию и список поддерживаемых протоколов. Теперь мы можем взглянуть на некоторые примеры команд Curl.

Основной Синтаксис Команды Curl

Итак, давайте узнаем, как пользоваться утилитой. Основной синтаксис Curl выглядит следующим образом:

curl [OPTIONS] [URL]

Самый простой пример использования Curl — для отображения содержимого страницы. Приведённая ниже команда отобразит домашнюю страницу testdomain.com.

curl testdomain.com

Эта команда отобразит полный исходный код домашней страницы домена. Если протокол не указан, Curl интерпретирует его как HTTP.

Как пользоваться curl?

Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.

Загрузка файлов

Самая частая задача – это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:

curl https://raw.githubusercontent.com/curl/curl/master/README.md


Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:

curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md


А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md


Если загрузка была неожиданно прервана, вы можете ее возобновить:

curl -# -C – -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz


Если нужно, одной командой можно скачать несколько файлов:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README


Еще одна вещь, которая может быть полезной администратору – это загрузка файла, только если он был изменен:

curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Данная команда скачает файл, только если он был изменен после 21 декабря 2017.

Ограничение скорости

Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:

curl –limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz


Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:

curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md

Передача файлов

Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:

curl -T login.txt ftp://speedtest.tele2.net/upload/


Или проверим отправку файла по HTTP, для этого существует специальный сервис:

curl -T ~/login.txt http://posttestserver.com/post.php


В ответе утилита сообщит где вы можете найти загруженный файл.

Отправка данных POST

Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:

curl -d “field1=val&fileld2=val1″http://posttestserver.com/post.php


Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:

curl -F “password=@pass;type=text/plain” http://posttestserver.com/post.php


Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.

Передача и прием куки

Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:

curl -c cookie.txt http://posttestserver.com/post.php

Затем можно отправить cookie curl обратно:

curl -b cookie.txt http://posttestserver.com/post.php

Передача и анализ заголовков

Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:

curl -I https://losst.ru


А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:

curl -I –хедер ‘If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT’ https://losst.ru


Аутентификация curl

Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:

curl -u ftpuser:ftppass -T – ftp://ftp.testserver.com/myfile_1.txt

Точно так же будет выполняться аутентификация на серверах HTTP.

Использование прокси-сервера

Если вы подключены через прокси-сервер, нужно указать его команде curl при помощи следующих опций (в данном примере имя сервера proxy.yourdomain.com, порт 8080, имя пользователя user, пароль qwerty1234):

$ curl -x proxy.yourdomain.com:8080 -U user:qwerty1234 -O http://yourdomain.com/yourfile

Если ваш прокси-сервер не требует аутентификации, опцию -U user:qwerty1234 указывать не нужно.

Команды Curl для HTTP

Curl также можно использовать c прокси-сервером. Если вы находитесь за прокси-сервером, прослушивающим порт 8090 на sampleproxy.com, загрузите файлы, как показано ниже:

curl -x  sampleproxy.com:8090 -U username:password -O http:// testdomain.com/testfile.tar.gz

В приведённом выше примере вы можете выбросить -U username:password, если прокси-сервер не требует метода аутентификации.

Типичный HTTP-запрос всегда содержит заголовок. Заголовок HTTP отправляет дополнительную информацию об удалённом веб-сервере вместе с фактическим запросом. С помощью инструментов разработчика в браузере вы можете посмотреть сведения о заголовке, а проверить их можно с помощью команды curl.

Пример ниже демонстрирует, как получить информацию о заголовке с веб-сайта.

curl -I www.testdomain.com

Используя curl, вы можете сделать запрос GET и POST. Запрос GET будет выглядеть следующим образом:

curl http://mydomain.com

А вот пример запроса POST:

curl –data “text=Hello” https://myDomain.com/firstPage.jsp

Здесь text=Hello — это параметр запроса POST. Такое поведение похоже на HTML-формы.

Вы также можете указать несколько методов HTTP в одной команде curl. Сделайте это, используя опцию –next, например:

curl –data “text=Hello” https://myDomain.com/firstPage.jsp –next https://myDomain.com/displayResult.jsp

Команда содержит запрос POST, за которым следует запрос GET.

Каждый HTTP-запрос содержит агент пользователя, который отправляется как часть запроса. Он указывает информацию о браузере клиента. По умолчанию запрос содержит curl и номер версии в качестве информации об агенте пользователя. Пример вывода показан ниже:

“GET / HTTP/1.1” 200 “_” ”curl/7/29/0”

Вы можете изменить дефолтную информацию об агенте пользователя, используя следующую команду:

curl -I http://mydomain.com –-user-agent “My new Browser”

Теперь вывод будет выглядеть так:

“GET / HTTP/1.1” 200 “_” ”My new Browser”

Команда Curl и Cookies

Утилиту можно использовать для проверки того, какие файлы cookie загружаются по URL. Допустим вы зашли на https://www.samplewebsite.com, вы можете вывести и сохранить файлы cookie в файл, а затем получить к ним доступ, используя команду cat или редактор Vim.

Вот пример такой команды:

curl –cookie-jar Mycookies.txt https://www.samplewebsite.com /index.html -O

Точно так же, если у вас есть файлы cookie в файле, вы можете отправить их на сайт. Вот, как это будет выглядеть:

curl –cookie Mycookies.txt https://www. samplewebsite.com

Curl и FTP

Утилита поддерживает FTP! Вы можете использовать её для загрузки файлов с удалённого сервера.

curl -u username:password -O ftp://sampleftpserver/testfile.tar.gz

В приведённой выше команде ftp://sampleftpserver — это FTP-сервер, который принимает соединения. Вы можете не указывать имя пользователя и пароль для анонимных FTP-соединений. Введите команду и посмотрите, как заполняется индикатор выполнения.

Вы также можете загружать файлы с помощью этой команды:

curl -u username:password -T testfile.tar.gz ftp://sampleftpserver

Опять же таки, мы можем пропустить имя пользователя и пароль для анонимных FTP-соединений.

Ограничение Скорости Скачивания

Скачивая или загружая данные с помощью Curl, вы не можете знать, насколько большим будет вывод. Вы можете ограничить скорость скачивания, чтобы убедиться, что Curl не ограничивает пропускную способность канала. 

Команда ниже ограничивает скорость скачивания до 100К:

curl –limit-rate 100K http://testdomain.com/samplefile.tar.gz -O

Скачивание нескольких файлов

Следующая команда позволит вам скачать info.html с http://yoursite.com и about.html c http://mysite.com в один прием:

$ curl -O http://yoursite.com/info.html/info -O http://mysite.com/about.html/about

Если использовать curl вместе с командой xargs, можно скачивать файлы в соответствии со списком URL, заданном в файле (в данном примере listurls.txt):

$ xargs -n 1 curl < listurls.txt

Отправка файлов cookie на сайт

Полученные в предыдущем примере файлы cookie можно использовать в дальнейших запросах к тому же самому сайту:

$ curl –cookie cookies.txt https://itproffi.ru

Изменение разрешения имен

Если вы веб-разработчик и хотите протестировать локальную версию сайта, прежде чем загружать его на сервер, при помощи опции —resolve можно указать curl выполнять разрешение имени вашего сайта на адрес локального узла, например:

$ curl –resolve www.yourdomain.com:80:localhost http://www.yourdomain.com/

Таким образом, при запросе на http://www.yourdomain.com curl будет запрашивать сайт с локального узла, а не использовать DNS или файл /etc/hosts.

Подключение библиотеки CURL в PHP

Для того чтобы использовать библиотеку CURL ее соответственно нужно подключить.

Примечание!В качестве примера мы будем использовать PHP 5.4.39 на Windows 7, а в качестве Web-сервера у нас будет выступать Apache 2.2.22.

Первое что нужно сделать, это скопировать библиотеки ssleay32.dll, libeay32.dll, libssh2.dll они расположены в директории с PHP, в системный каталог Windows, а именно в C:WindowsSystem32.

Затем в php.ini подключить библиотеку php_curl.dll, т.е. раскомментировать следующую строку

Библиотека не подключена

>;extension=php_curl.dll

Библиотека подключена

extension=php_curl.dll

Все, перезапускаем Apache, вызываем функцию phpinfo() и в случае успешного подключения у Вас должен появиться раздел curl

Если его нет, то это означает только одно, что библиотека не загрузилась, самая распространенная причина этого небыли скопированы вышеперечисленные DLL в системный каталог Windows.

Пример CURL – запрашиваем удаленную страницу для вывода на экран

В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.

У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.

Код test_curl.php

Код test.php

Заголовок 1н1>»;
break;
case 2:
echo «Заголовок 2н2>»;
break;
case 3:
echo «Заголовок 3н3>»;
break;
}
}
?>

В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3).

Пример CURL – вызываем удаленный скрипт и получаем результат

Сейчас давайте попробуем вызвать скрипт и получить результат, для того чтобы потом его обработать, для примера давайте использовать метод POST. Названия файлов оставим такими же.

Код test_curl.php

Код test.php

И если мы запустим test_curl.php то на экран у нас выведется 111, т.е. 1.11 полученное в результате обращения к удаленному скрипту, умноженное на 100.

А теперь давайте поговорим о функциях и константах к ним.

Часто используемые функции CURL и константы

  • curl_init — Инициализирует сеанс;
  • curl_close — Завершает сеанс;
  • curl_exec — Выполняет запрос;
  • curl_errno — Возвращает код ошибки;
  • curl_setopt — Устанавливает параметр для сеанса, например:

    • CURLOPT_HEADER – значение 1 означает, что необходимо вернуть заголовки;
    • CURLOPT_INFILESIZE — параметр для указания ожидаемого размера файла;
    • CURLOPT_VERBOSE — значение 1 означает что CURL будет выводить подробные сообщения о всех производимых операциях;
    • CURLOPT_NOPROGRESS – отключение индикатора прогресса операции, значение 1;
    • CURLOPT_NOBODY – если Вам не нужен документ, а нужны только заголовки, то поставьте значение 1;
    • CURLOPT_UPLOAD — для закачки файла на сервер;
    • CURLOPT_POST – выполнить запрос методом POST;
    • CURLOPT_FTPLISTONLY — получение списка файлов в директории FTP сервера, значение 1;
    • CURLOPT_PUT — выполнить запрос методом PUT, значение 1;
    • CURLOPT_RETURNTRANSFER — возвратить результат, не выводя в браузер, значение 1;
    • CURLOPT_TIMEOUT – максимальное время выполнения в секундах;
    • CURLOPT_URL – указание адреса для обращения;
    • CURLOPT_USERPWD — строка с именем пользователя и паролем в виде [username]:[password];
    • CURLOPT_POSTFIELDS – данные для POST запроса;
    • CURLOPT_REFERER — задает значение HTTP заголовка «Referer: »;
    • CURLOPT_USERAGENT —  задает значение HTTP заголовка «User-Agent: »;
    • CURLOPT_COOKIE — содержимое заголовка «Cookie: », который будет отправлен с HTTP запросом;
    • CURLOPT_SSLCERT- имя файла с сертификатом в формате PEM;
    • CURLOPT_SSL_VERIFYPEER – значение 0, для того чтобы запретить проверку сертификата удаленного сервера (по умолчанию 1);
    • CURLOPT_SSLCERTPASSWD — пароль к файлу сертификата.

  • curl_getinfo — Возвращает информацию об операции, вторым параметром может выступать константа для указания, что именно нужно показать, например:

    • CURLINFO_EFFECTIVE_URL — последний использованный URL;
    • CURLINFO_HTTP_CODE — последний полученный код HTTP;
    • CURLINFO_FILETIME — дата модификации загруженного документа;
    • CURLINFO_TOTAL_TIME — время выполнения операции в секундах;
    • CURLINFO_NAMELOOKUP_TIME — время разрешения имени сервера в секундах;
    • CURLINFO_CONNECT_TIME — время, затраченное на установку соединения, в секундах;
    • CURLINFO_PRETRANSFER_TIME — время, прошедшее от начала операции до готовности к фактической передаче данных, в секундах;
    • CURLINFO_STARTTRANSFER_TIME — время, прошедшее от начала операции до момента передачи первого байта данных, в секундах;
    • CURLINFO_REDIRECT_TIME — время, затраченное на перенаправление, в секундах;
    • CURLINFO_SIZE_UPLOAD — количество байт при закачке;
    • CURLINFO_SIZE_DOWNLOAD — количество байт при загрузке;
    • CURLINFO_SPEED_DOWNLOAD — средняя скорость закачки;
    • CURLINFO_SPEED_UPLOAD — средняя скорость загрузки;
    • CURLINFO_HEADER_SIZE — суммарный размер всех полученных заголовков;
    • CURLINFO_REQUEST_SIZE — суммарный размер всех отправленных запросов;
    • CURLINFO_SSL_VERIFYRESULT — результат проверки SSL сертификата, запрошенной с помощью установки параметра CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD — размер загруженного документа, прочитанный из заголовка Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD — размер закачиваемых данных;
    • CURLINFO_CONTENT_TYPE — содержимое полученного заголовка Content-type, или NULL в случае, когда этот заголовок не был получен.

Подробнее о функциях CURL и константах к ним можете посмотреть на официальном сайте PHP — php.net

На этом все, для начинающих я думаю достаточно Удачи!

POST запрос с помощью CURL

Давайте напишем наш первый скрипт, который отправит данные методом POST на какую-нибудь страницу и посмотрит, что отобразилось на этой странице.

Сначала нам нужен файл, который бы принял наши данные и что-то вывел на страницу. Я расположил его по адресу https://intop24.ru/demo/curl/post.php. В нем содержится следующий код:

if (isset($_POST) && sizeof($_POST) > 0) { print_r($_POST); }

Теперь попробуем передать туда какие-то данные:

$url = “https://intop24.ru/demo/curl/post.php”; $post_data = array ( “foo” => “bar”, “query” => “Nettuts”, “action” => “Submit” ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Указываем, что у нас POST запрос curl_setopt($ch, CURLOPT_POST, 1); // Добавляем переменные curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;

Результат можно посмотреть здесь: curl_post.php

Отправка файла с помощью CURL

Смысл здесь абсолютно такой же, как и в запросе POST.

Файл, который примет данные: https://intop24.ru/demo/curl/upload_file.php.

print_r($_FILES); print_r($_POST);

Теперь попробуем передать туда какие-то данные:

$upload = ‘test_file.jpg’; $postdata = array( ‘name’ => ‘German’, ’email’ => ‘krutovgerman2007@ya.ru’, ‘message’ => ‘Какое-то сообщение от пользователя German’, ‘upload’ => “@”.$upload ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ‘https://intop24.ru/demo/curl/upload_file.php’); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $output = curl_exec($ch); if ($output === FALSE) { // Тут-то мы о ней и скажем echo “cURL Error: ” . curl_error($ch); return; } print_r($output); curl_close($ch);

Результат можно посмотреть здесь: curl_post_file.php

Загрузка файла – это тот же самый POST-запрос, однако перед путем к файлу стоит знак “@”, что и обозначает, что нужно это передать не как $_POST, а как $_FILES.

HTTP аутентификация с помощью CURL

Довольно полезная штука.

$url = “https://www.site.com/”; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Указываем имя и пароль curl_setopt($ch, CURLOPT_USERPWD, “krutovgerman2007@yandex.ru:mypassword”); // Если перенаправление разрешено curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // То сохраним наши данные в cURL curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);

[spoiler title=”Источники”]

  • https://info-comp.ru/obucheniest/450-php-curl.html
  • https://losst.ru/kak-polzovatsya-curl
  • https://www.hostinger.ru/rukovodstva/chto-takoe-curl/
  • https://ITProffi.ru/komanda-curl-sintaksis-primery-ispolzovaniya/
  • https://intop24.ru/article_20.php


[/spoiler]


2020-07-27T15:39:45
Linux

Как Переименовать Файл в Linux: Пошаговое Руководство



























Rate this post

В основной форме вам нужно дать имя старого файла с последующим новым именем файла в команде mv для того, чтобы переименовать файл в Linux. Допустим, у вас есть файл с именем «andreyex.txt», и вы хотите переименовать его в «Linuxroutes.txt». Используйте следующую команду:


[root@destroyer]# mv andreyex.txt Linuxroutes.txt

Описанный выше метод называется относительным методом, так как мы даем на команду из каталогов, где файлы расположены. В случае, если вы не хотите идти в каталога, то можно использовать следующую команду с указанием полного пути файла. Этот метод называют как абсолютный путь.


[root@destroyer]# mv /tmp/mann/andreyex.txt /tmp/mann/Linuxroutes.txt

Полный вывод для переименования файла в Linux

В случае, если вы хотите узнать информацию о переименовании. То вы должны использовать опцию -v вместе с командой mv, как показано ниже:


[root@destroyer]# mv -v andreyex.txt Linuxroutes.txt `andreyex.txt’ -> `Linuxroutes.txt’ [root@destroyer]#

В командной строке выше выводиться информация, которая подтверждает, что файл «andreyex.txt» был переименована в «Linuxroutes.txt».

Интерактивное переименования файлов в Linux

Вы можете сделать операцию переименования файла интерактивно, система запрашивает подтверждение перед тем, как переименовать файл в Linux в случае, если файл уже существует в месте назначения.


[root@destroyer]# mv -i andreyex.txt Linuxroutes.txt mv: overwrite `Linuxroutes.txt’? y [root@destroyer]#

Переименование или перемещение файла только тогда, когда исходный файл обновляется:

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

mv -u /tmp/Linuxroutes.dat /tmp/mann/Linuxroutes.dat

Переименование нескольких файлов:

В случае, если вы хотите переименовать несколько файлов за один раз, то вы должны использовать команду rename. Допустим, у вас есть файлы с расширением «.txt» и вы хотите переименовать его в расширение «.dat».


[root@destroyer]# ll total 20 -rw-r–r– 1 root mmadmin 18 May 27 14:36 1.txt -rw-r–r– 1 root mmadmin 18 May 27 14:36 2.txt -rw-r–r– 1 root mmadmin 18 May 27 14:36 3.txt -rw-r–r– 1 root mmadmin 18 May 27 14:37 4.txt -rw-r–r– 1 root mmadmin 18 May 27 14:36 Linuxroutes.txt[root@destroyer]# rename .txt .dat *.txt [root@destroyer]# ll total 20 -rw-r–r– 1 root mmadmin 18 May 27 14:36 1.txt -rw-r–r– 1 root mmadmin 18 May 27 14:36 2.txt -rw-r–r– 1 root mmadmin 18 May 27 14:36 3.txt -rw-r–r– 1 root mmadmin 18 May 27 14:37 4.txt -rw-r–r– 1 root mmadmin 18 May 24 12:22 Linuxroutes.dat [root@destroyer]#

Как Переименовать Файл в Linux с Помощью Команды mv

Команда mv (сокращенно от «move») является одной из самых простых команд. Однако она выполняет две очень важные задачи при работе с файлами в Linux. Первая задача — перемещает файлы из одного места в другое, а вторая — переименовывает один или несколько файлов через терминал.

В первую очередь давайте посмотрим, как c помощью mv можно переименовать файл в Linux.

Для начала, мы обратимся к нашему серверу через командную строку, используя SSH (англ). Если вам нужны дополнительные инструкции по SSH, рекомендуем прочитать это руководство.

Чтобы получить доступ к нашему серверу, введите в свой терминал следующее:

ssh vash-user@vash-server

Если вместо сервера мы используем локальный компьютер, то нам придётся открыть терминал из главного меню.

Также нам важно узнать, как работает команда mv. Для этого мы запускаем команду, которая вызовет справку:

mv –help

Базовый синтаксис команды mv выглядит следующим образом:

mv [опция] [ИСХОДНЫЙ_ФАЙЛ]…[ДИРЕКТОРИЯ]

Вот список самых популярных опций mv:

  • -f – не показывать сообщение перед перезаписью файла.
  • -i – показывать предупреждающие сообщения перед перезаписью файла.
  • -u – перемещать файл, только если он новый или не существует в месте назначения.
  • -v – показать, что делает команда.

И параметры:

[ИСХОДНЫЙ_ФАЙЛ] — исходное местоположение файла

[МЕСТО_НАЗНАЧЕНИЯ] — каталог назначения.

Переименование Файла в Linux с Помощью Команды mv

Если мы хотим переименовать файл, мы можем сделать это так:

mv staroje_nazvanije_faila1 novoje_nazvanije_faila1

Допустим, что мы находимся в каталоге и у нас есть файл с именем file1.txt. Мы хотим изменить имя этого файла на file2.txt. В таком случае наша команда будет выглядеть так:

mv file1.txt file2.txt

Всё очень просто. Однако, если вы не в каталоге, вам нужно будет немного расширить команду. Вот её пример:

cd /home/user/docs/files mv file1.txt file2.txt

Как Переименовать Несколько Файлов с Помощью Команды mv

Команда mv может переименовать только один файл, но её можно использовать с другими командами для переименования нескольких файлов.

Давайте возьмём циклы find, for, или while и переименуем несколько файлов.

Например, чтобы изменить расширение всех файлов .txt на расширение .pdf, мы будем использовать следующую команду:

for f in *txt; do mv — “$f” “${f%.txt}.pdf” done

Она создаст цикл (for), который найдёт все файлы с расширением .txt, и заменит каждое расширение .txt на .pdf. Наконец, команда завершит цикл (done).

Если вам нужны более продвинутые функции, тогда стоит ознакомиться с ещё одной командой — rename. О ней и пойдёт речь дальше.

Переименование файла

Переименование файла myfile1.dat в файл myfile2.dat:

mv myfile1.dat myfile2.dat

Переименование файла с указанием пути до файла:

mv /home/pingvinus/myfile1.dat /home/pingvinus/myfile2.dat

Переименование директории

Переименование директории /home/pingvinus/mydir1 в директорию /home/pingvinus/mydir2. Справедливо, если /home/pingvinus/mydir2 не существует.

mv /home/pingvinus/mydir1 /home/pingvinus/mydir2

Если /home/pingvinus/mydir2 существует, то, выполнив команду:

mv /home/pingvinus/mydir1 /home/pingvinus/mydir2

директория mydir1 будет перемещена внутрь директории /home/pingvinus/mydir2. То есть mydir1 будет в результате находиться по адресу /home/pingvinus/mydir2/mydir1.

Переименование и перемещение

Если в качестве файла назначения указан новый путь и новое имя файла, то файл будет перемещен и переименован. Например, следующая команда перемещает файл myfile1.dat в директорию /home/pingvinus/dir и переименовывает его в myfile2.dat:

mv /home/pingvinus/myfile1.dat /home/pingvinus/dir/myfile2.dat

Как Переименовать Файл в Linux с Помощью Команды Rename

С утилитой rename у вас будет немного больше контроля. Многие конфигурации Linux включают её по умолчанию. Но, если она не установлена, вы можете быстро это сделать с помощью простой команды.

Если вы используете Debian, Ubuntu, LinuxMint и их производные:

sudo apt install rename

Если же вы пользователь CentOS 7 или RHEL:

sudo yum install rename

Команда для установки rename в Arch Linux:

yay perl-rename ## or yaourt -S perl-rename

Теперь мы можем начать использовать команду rename. Её основной синтаксис выглядит так:

rename ‘s/staroje-nazvanije/novoje-nazvanije/’ files

Команда выглядит сложнее, чем есть на самом деле.

В примере ниже мы создадим новую папку с именем filetorename и 5 файлов, используя для этого команду touch.

mkdir filetorenamecd filetorenametouch file{1..5}.txtls

С помощью последней команды ls вы можете просмотреть созданные вами файлы.

Если мы хотим переименовать только один файл с названием file1.txt, мы напишем следующую строку:

rename ‘s/file1/newfile1/’ file1.txt

Если же мы хотим изменить расширение всех файлов, например, на .php. Мы могли бы сделать это так:

rename ‘s/.txt/.php/’ *.txtls

Также мы можем указать другой каталог, где находятся файлы, которые вы хотите переименовать.

rename ‘s/.txt/.php/’ ФАЙЛ/ПУТЬ

Важно отметить, что rename использует регулярное выражение Perl, а это означает широкие возможности команды.

Наконец, неплохо было бы узнать опции команды. Для того, чтобы посмотреть весь их список, введите в терминале команду:

rename –help

Распространённые примеры использования команды rename:

  • Преобразовать имена файлов в верхний регистр:rename ‘y/a-z/A-Z/’ *
  • Преобразовать имена файлов в нижний регистр:rename ‘y/A-Z/a-z/’ *
  • Заменить пробелы в именах файлов символами подчёркивания:rename ‘y/ /_/’ *

Изменение расширения файлов

Массово изменить расширение .html на .php у всех html-файлов.

rename ‘s/.html/.php/’ *.html

По умолчанию rename не перезаписывает существующие файлы. Чтобы существующие файлы перезаписывались, используется опция -f:

rename -f ‘s/.html/.php/’ *.html

Замена пробелов на подчеркивание

Заменить все символы пробелов в имени файлов на символ подчеркивания:

rename ‘y/ /_/’ *

Конвертация имен файлов в строчные буквы

rename ‘y/A-Z/a-z/’ *

Конвертация имен файлов в прописные буквы

rename ‘y/a-z/A-Z/’ *

Показать, что именно будет переименовано, но не переименовывать

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

Например, мы хотим изменить расширение у файлов с .jpeg на .jpg. Используем опцию -n, чтобы просто вывести какие файлы будут переименованы:

rename -n ‘s/.jpeg$/.jpg/’ * class=”line”>

Полное описание команд mv и rename можно получить, выполнив в терминале команды:

man mv man rename

Как Удалить Утилиту Remove

Если вы больше не хотите, чтобы команда rename была установлена в вашей системе, удалите её с помощью диспетчера ПО или из терминала.

Для Debian, Ubuntu, Linux Mint и производных:

sudo apt remove rename

Для CentOS и RHEL:

sudo yum remove rename

Вот и всё, rename удалено с вашей машины Linux.

Команда rename для переименования файла Linux

Для воплощения данной задумки в жизнь юзер системы может воспользоваться командой под названием «rename». Как и её аналоги, она тоже разработана для этих целей, но имеет за собой более обширный функционал. С её помощью легко выполнить массовое переименование документов Линукс. В отдельно взятых случаях это действительно необходимо.

Как выглядит синтаксическая структура команды:

 rename опции старое_имя новое_имя файлы

Какие функции программы могут потребоваться пользователю Linux:

  • –v – демонстрация перечня файлов, которые были обработаны.
  • –n – запуск пробного режима (теста) для более подробного изучения специфики команды. Это означает, что заданные манипуляции не будут реализованы на практике.
  • -f – опция для принудительной перезаписи файлов, которые уже наличествуют в системе.

И сразу же рассмотрим на примере. Допустим, нужно поменять название для всех txt файлов из каталога в .doc:

$ rename ’s.txt/.doc/’ *.txt

Примечание: наличие символа «*» в заданной команде подразумевает переименование всех файлов, которые содержатся в каталоге.

Способ 1: pyRenamer

К сожалению, программное обеспечение pyRenamer не поставляется в стандартном наборе предустановок дистрибутива. Однако, как и все в Linux, его можно скачать и установить из официального репозитория. Команда для загрузки и установки следующая:

sudo apt install pyrenamer

После ее ввода укажите пароль и нажмите Enter. Далее необходимо будет подтвердить выполняемые действия. Для этого введите букву «Д» и нажмите снова Enter. Останется лишь подождать загрузки и установки (не закрывайте «Терминал» до завершения процесса).

После установки программу можно будет запустить, предварительно совершив поиск по системе с ее названием.

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

Давайте рассмотрим работу по переименованию файлов в программе:

  1. Открыв программу, вам необходимо проложить путь к директории, где находятся файлы, которые нужно переименовать. Делается это в левом рабочем окне (1). После определения директории в правом рабочем окне (2) будут показаны все файлы, находящиеся в ней.
  2. Далее необходимо перейти во вкладку «Substitutions».
  3. В этой вкладке вам нужно поставить галочку рядом с пунктом «Replace», чтобы поля для ввода стали активными.
  4. Теперь можно приступать к переименованию файлов в выбранной директории. Рассмотрим на примере четырех файлов «Безымянный документ» с порядковым числом. Допустим, нам необходимо заменить слова «Безымянный документ» на слово «Файл». Для этого нужно в первое поле ввести заменяемую часть имени файла, в данном случае «Безымянный документ», а во второе фразу, которая будет заменять — «Файл».
  5. Чтобы просмотреть, что получится в итоге, можно нажать кнопку «Preview» (1). Все изменения отобразятся в графе «Renamed file name» в правом рабочем окне.
  6. Если изменения вас устраивают, вы можете нажать кнопку «Rename», чтобы применить их к выбранным файлам.

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

На самом деле с помощью pyRenamer можно выполнить намного больше действий с файлами. Не только заменить одну часть имени на другую, но и, используя шаблоны во вкладке «Patterns», задать переменные, и, управляя ими, видоизменять названия файлов как угодно. Но подробно инструкцию нет смысла расписывать, так как при наведении курсора на активные поля высветится подсказка.

Способ 2: Терминал

К сожалению, не всегда получается переименовать файл с помощью специальных программ с графическим интерфейсом. Порою может возникнуть ошибка или что-то подобное, мешающее выполнению данной задачи. Но в Линуксe есть куда более одного способа выполнения поставленной задачи, поэтому переходим прямиком в «Терминал».

Команда mv

Команда mv в Линуксе отвечает за перемещение файлов из одной директории в другую. Но по своей сути перемещение файла схоже с переименованием. Так, используя эту команду, если переместить файл в ту же папку, в которой он находится, при этом задав новое имя, получится его переименовать.

Теперь давайте подробно разберемся с командой mv.

Синтаксис и опции команды mv

Синтаксис выглядит следующим образом:

mv опция оригинальное_имя_файла имя_файла_после_переименования

Чтобы пользоваться всеми возможностями данной команды, необходимо изучить ее опции:

  • -i — запрашивать разрешении при замене существующих файлов;
  • -f — заменять существующий файл без разрешения;
  • -n — запретить замену существующего файла;
  • -u — разрешить замену файла, если в нем присутствуют изменения;
  • -v — показать все обработанные файлы (список).

После того как мы разобрались со всеми особенностями команды mv, можно приступать непосредственно к самому процессу переименования.

Примеры использования команды mv

Сейчас будет рассмотрена ситуация, когда в папке «Документы» находится файл с именем «Старый документ», наша задача переименовать его в «Новый документ», используя для этого команду mv в «Терминале». Для этого нам необходимо вписать:

mv -v “Старый документ” “Новый документ”

Примечание: чтобы операция прошла успешно, необходимо нужную папку открыть в «Терминале» и только после этого проводить все манипуляции. Открыть папку в «Терминале» можно при помощи команды cd.

Пример:


Как можно видеть на изображении, нужный нам файл получил новое имя. Обратите внимание, что в «Терминале» указана опция «-v», которая строчкой ниже вывела подробный отчет о выполненной операции.

Также, используя команду mv, можно не только переименовать файл, но и попутно переместить его в другую папку. Как говорилось выше, данная команда именно для этого и нужна. Чтобы это сделать надо, помимо указания имени файла, прописать путь к нему.

Допустим, вы хотите из папки «Документы» переместить файл «Старый документ» в папку «Видео» попутно переименовав его в «Новый документ». Вот как будет выглядеть команда:

mv -v /home/user/Документы/”Старый документ” /home/user/Видео/”Новый документ”

Важно: если имя файла состоит из двух и более слов, его необходимо заключать в кавычки.

Пример:


Примечание: если к папке, в которую вы собираетесь переместить файл, попутно переименовав его, у вас нет прав доступа, необходимо выполнять команду через суперпользователя, прописав в начале «super su» и введя пароль.

Команда rename

Команда mv хороша, когда необходимо переименовать один файл. И, безусловно, замены ей в этом не найти — она лучшая. Однако, если необходимо переименовать множество файлов или же заменить лишь часть имени, то фаворитом становится команда rename.

Синтаксис и опции команды rename

Как и с прошлой командой, для начала разберемся с синтаксисом rename. Выглядит он следующим образом:

rename опция ‘s/старое_имя_файла/новое_имя_файла/’ имя_файла

Как можно заметить, синтаксис намного сложнее, чем у команды mv, однако он позволяет выполнять больше действий с файлом.

Теперь давайте рассмотрим опции, они следующие:

  • -v — показать обработанные файлы;
  • -n — предварительный просмотр изменений;
  • -f — принудительно переименовать все файлы.

Теперь давайте рассмотрим наглядные примеры данной команды.

Примеры использования команды rename

Допустим, в директории «Документы» у нас есть множество файлов с названием «Старый документ num», где num — это порядковый номер. Наша задача, используя команду rename, во всех этих файлах изменить слово «Старый» на «Новый». Для этого нам необходимо выполнить следующую команду:

rename -v ‘s/Старый/Новый/’ *

где, «*» — все файлы в указанной директории.

Примечание: если вы хотите провести изменение в одном файле, то вместо «*» пропишите его имя. Не забывайте, если имя состоит из двух и более слов, то его необходимо брать в кавычки.

Пример:


Примечание: с помощью данной команды можно запросто изменить расширения файлов, указав изначально старое расширения, записав его, например, в виде «.txt», а затем новое, например, «.html».

С помощью команды rename также можно менять регистр текста имени. Например, мы хотим файлы с именем «NEW FILE (num)» переименовать в «new file (num)». Для этого нужно прописать следующую команду:

rename -v ‘y/A-Z/a-z/’ *

Пример:


Примечание: если необходимо поменять регистр в имени файлов на русском, то используйте команду «rename -v ‘y/А-Я/а-я/’ *».

Способ 3: Файловый менеджер

К сожалению, в «Терминале» не всякий пользователь сможет разобраться, поэтому будет разумно рассмотреть способ переименования файлов с использованием графического интерфейса.

Взаимодействие с файлами в Linux хорошо осуществлять при помощи менеджера файлов, будь то Nautilus, Dolphin или любой другой (зависит от дистрибутива Linux). Он позволяет визуализировать не только файлы, но и директории, а также каталоги, выстраивая их иерархию в том виде, который более понятен неопытному пользователю. В таких менеджерах легко сможет сориентироваться даже новичок, который только-только установил себе Linux.

Переименовать файл при помощи файлового менеджера просто:

  1. Для начала вам необходимо открыть сам менеджер и перейти в ту директорию, где расположен файл, нуждающийся в переименовании.
  2. Теперь необходимо навести курсор на него и нажать левую кнопку мыши (ЛКМ), чтобы выделить. После чего клавишу F2 или правую клавишу мыши и выбрать пункт “Переименовать”.
  3. Под файлом появится форма для заполнения, а само имя файла станет выделенным. Вам остается лишь ввести необходимое название и нажать клавишу Enter для подтверждения изменений.

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


[spoiler title=”Источники”]

  • https://andreyex.ru/operacionnaya-sistema-linux/polnoe-rukovodstvo-pereimenovat-fajl-v-linux/
  • https://www.hostinger.ru/rukovodstva/kak-pereimenovat-fail-linux/
  • https://pingvinus.ru/note/rename-files
  • https://www.vseprolinux.ru/kak-pereimenovat-fajl-v-linux
  • https://lumpics.ru/how-to-rename-a-file-in-linux/


[/spoiler]


2020-07-27T15:39:45
Linux

Команда ls является одной из наиболее важнейшим инструментов командной строки, вы должны научиться, чтобы ориентироваться в файловой системе



























Rate this post

lsВыводит список файлов в директории.

Синтаксис

ls опциидиректория

директория — задает директорию, содержимое которой нужно вывести. Если вместо директории указать файл, то будет выведена информация о данном файле.

Если директория не указана, то выводится содержимое текущей директории.

Команда ls linux

Как обычно, в таких статьях сначала нам нужно понять синтаксис команды, чтобы вы знали как правильно ее использовать. На самом деле, синтаксис очень прост, вы набираете саму команду, а после нее путь к папке, содержимое которой хотите посмотреть. Если вы запустите команду без пути, то она выдаст содержимое текущего каталога:

$ lsопции/путь/к/папке

Опции команды указывают как именно и в каком виде нужно выводить информацию на экран, а путь, это та папка, которую нужно отобразить. Рассмотрим основные опции утилиты:

  • -a – отображать все файлы, включая скрытые, это те, перед именем которых стоит точка;
  • -A – не отображать ссылку на текущую папку и корневую папку . и ..;
  • –author – выводить создателя файла в режиме подробного списка;
  • -b – выводить Escape последовательности вместо непечатаемых символов;
  • –block-size – выводить размер каталога или файла в определенной единице измерения, например, мегабайтах, гигабайтах или килобайтах;
  • -B – не выводить резервные копии, их имена начинаются с ~;
  • -c – сортировать файлы по времени модификации или создания, сначала будут выведены новые файлы;
  • -C – выводить колонками;
  • –color – включить цветной режим вывода, автоматически активирована во многих дистрибутивах;
  • -d – выводить только директории, без их содержимого, полезно при рекурсивном выводе;
  • -D – использовать режим вывода, совместимый с Emacs;
  • -f – не сортировать;
  • -F – показывать тип объекта, к каждому объекту будет добавлен один из специализированных символов */=>@|;
  • –full-time – показывать подробную информацию, плюс вся информация о времени в формате ISO;
  • -g – показывать подробную информацию, но кроме владельца файла;
  • –group-directories-first – сначала отображать директории, а уже потом файлы;
  • -G – не выводить имена групп;
  • -h – выводить размеры папок в удобном для чтения формате;
  • -H – открывать символические ссылки при рекурсивном использовании;
  • –hide – не отображать файлы, которые начинаются с указанного символа;
  • -i – отображать номер индекса inode, в которой хранится этот файл;
  • -l – выводить подробный список, в котором будет отображаться владелец, группа, дата создания, размер и другие параметры;
  • -L – для символических ссылок отображать информацию о файле, на который они ссылаются;
  • -m – разделять элементы списка запятой;
  • -n – выводить UID и GID вместо имени и группы пользователя;
  • -N – выводить имена как есть, не обрабатывать контролирующие последовательности;
  • -Q – брать имена папок и файлов в кавычки;
  • -r – обратный порядок сортировки;
  • -R – рекурсивно отображать содержимое поддиректорий;
  • -s – выводить размер файла в блоках;
  • -S – сортировать по размеру, сначала большие;
  • -t – сортировать по времени последней модификации;
  • -u – сортировать по времени последнего доступа;
  • -U – не сортировать;
  • -X – сортировать по алфавиту;
  • -Z – отображать информацию о расширениях SELinux;
  • -1 – отображать один файл на одну строку.

Это были все основные параметры команды ls, которые нам может когда-либо понадобиться использовать. Их очень много, но на деле будут нужны только некоторые из них, вы их быстро запомните, а все остальные сможете всегда найти в этой статье или на странице справки man ls. А теперь давайте рассмотрим несколько примеров использования команды ls linux.

Использование ls в Linux

Как вы уже поняли, ls – это сокращение от list, эта команда представляет из себя аналог команды dir для Linux. Самый простой способ использовать команду, запустить ее без параметров и посмотреть содержимое текущей папки:

ls


Чтобы посмотреть список файлов в папке linux для точно заданной папки, вам нужно указать путь к ней. Например, смотрим содержимое корневой папки:

ls /


Или папки /bin:

ls /bin/


По умолчанию включен цветной вывод, поэтому вы видите столько различных цветов. Например, исполняемые файлы обозначаются салатовым, а ссылки голубым. Теперь посмотрим содержимое домашней папки снова, только на этот раз в виде списка с максимальным количеством информации:

ls -l


Тут вывод уже разделен на отдельные колонки, в первой колонке указаны права доступа к файлу в формате владелец группа остальные. Следующая колонка – это тип файла или папки, дальше владелец и группа, затем размер, дата создания и последний параметр – имя. Если вы еще хотите знать кто создал файл, можно использовать опцию author:

ls -l –author


Колонка создателя будет добавлена после группы. Дальше размер. Он выводится в байтах, килобайтах или еще в чем-то и нам не совсем понятно что там происходит, поэтому добавьте опцию -h чтобы выводить размер в более удобном виде:

ls -lh


Для папок размер выводится не сумой всех размеров всех файлов, а всего лишь то место, которое занимает сама папка, поэтому давайте посмотрим пример с файлами:

ls -l Фото
ls -lh Фото

Если вы хотите видеть скрытые файлы, а в домашней папке их просто море, то используйте опцию -a:

ls -a


Или смотрим скрытые файлы без ссылок на текущую и родительскую папку:

ls -A


Теперь нас будет интересовать сортировка. Сначала отсортируем файлы по размеру:

ls -lSh Фото


Обратите внимание, что файлы расположены от большего к меньшему. Теперь мы можем включить обратный порядок:

ls -lShr


С помощью опции -r мы вывели файлы в обратном порядке. Теперь отсортируем по алфавиту:

ls -lX


Или сортируем по времени последней модификации:

ls -lt


Обратите внимание на колонку времени, действительно, самые новые файлы будут вверху списка. Если вы хотите посмотреть какие метки SELinux присвоены файлу, необходимо использовать опцию -Z:

ls -lZ


Но это возможно только в системах, где установлена надстройка SELinux. Если вы хотите рекурсивно вывести содержимое всех папок, используйте опцию -R:

ls -lR /usr/


Если же вам нужно список папок и файлов в директории через запятую, что можно использовать -m:

ls -m


Особенности утилиты LS Linux

Перед использованием такой команды необходимо тщательно изучить особенности синтаксиса. www.vseprolinux.ru/komanda-ls

Это дает возможность пользователю правильно применить команду при решении различных задач.
Синтаксис ls Линукс весьма простой. Первоначально требуется ввести сам у команду, а далее – указать путь к файлу или определенной папке, содержимое которой требует изучения.

Общий синтаксис выглядит так:
$ ls (опции)/(путь к папке)

Рубрика «опции» укажет, в каком именно виде должна быть выведена требуемая информация. Она в последующем отображается на экране вашего монитора. «Путь к папке» — это своеобразный адрес месторасположения данных, которые пользователь желает увидеть.
Опции, которыми можно воспользоваться с помощью команды LS Linux:

  • «-а». После введения отображаются все файлы. Вам будут показаны даже скрытые данные, перед которыми система установила точку.
  • «-А». Опция дает возможность не отображать ссылку на исследуемую папку, которая также корневой (. и ..).
  • «—author». На экран выводится информация о создателе определенного файла. Режим – подробный список.
  • «-b». Вместо напечатанных символов отображается Escape-последовательность.
  • «—block-size». На экране монитора показан размер папки или файла. Единица измерения может быть различной – мегабайты, гигабайты или килобайты.
  • «-В». Такая опция даёт возможность не выводить резервные копии. Стоит отметить, что их имена начинаются со знака «~».
  • «-с». После введения появляется возможность сортировки файлов – по времени создания или модификации. Первоначально отображаются новые файлы.
  • «-С». Информация будет выведена в виде колонок.
  • «—color». Эта опция позволяет запустить цветной режим ввода. Стоит заметить, что в большинстве дистрибутивов она активирована в автоматическом режиме.
  • «-d». На экран будут выведены только директории. Вы не увидите их содержимое. Опцию актуально использовать при необходимости рекурсивного вывода.
  • «-D». Опция позволяет использовать режим, который совместим с Emacs.
  • «-f». Здесь исключена вероятность сортировки файлов и папок.
  • «-F». Будет показана разновидность исследуемого объекта. Они зачастую дополнены различными вспомогательными символами – *, /, =, >, @, | и иными.
  • «—full-time». Такая опция позволяет отобразить подробную информацию о файле или директории. Данные о времени отображены в формате ISO.
  • «-g». Показывается подробная информация об исследуемом объекте, но нет данных о владельце.
  • «—group-directories-first». После введения первоначально отображаются директории, а фалы находятся внизу списка.
  • «-G». Эта опция даёт возможность не показывать названия групп.
  • «-h». Позволяет посмотреть размеры папок. Формат удобен для чтения.

Вышеописанный список опций неполный. Их большое количество, но зачастую на деле используются лишь некоторые. Более подробно изучить функционал утилиты LS Linux можно в категории «справка».

Особенности использования команды

Как понятно из вышесказанного, данная утилита имеет широкие возможности. Стоит рассмотреть некоторые примеры использования LS Linux:

  • Запуск программы без введения параметров для просмотра содержимого текущей папки. Для этого потребуется ввести команду «$ ls».
  • Просмотр списка файлов в определенной папке. Для этого потребуется указать путь к ней. Если нужно изучить содержимое корневой папки, стоит ввести «$ ls/». Когда требуется посмотреть содержимое определённой папки (к примеру, /ХХХ), стоит ввести команду «$ ls/ХХХ/».
  • Просмотр прав доступа к определенному файлу. Для этих целей в командной строке нужно ввести «$ ls -l —autor».
  • Просмотр размера файла в максимально удобном виде (в байтах, мегабайтах, килобайтах, гигабайтах). Необходимо ввести команду «$ ls –lh».
  • Просмотр скрытых файлов. Нужно заметить, что практически в каждой папке их большое количество. Стоит в командной строке ввести команду «$ ls -a».
  • Сортировка фалов по размеру. Для этого вводится команда «$ ls –lSh».
  • Сортировка по алфавиту. Нужно ввести команду «$ ls –lX».
  • Сортировка по последней модификации. Вводится команда «$ ls –lt».
  • Просмотр отметок на файле, которые были присвоены SELinux. Для этого вводится команда «$ ls –lZ».
  • Рекурсивный просмотр содержимого всех папок. Необходимо ввести команду «$ ls -lR /usr/».
  • Просмотр файлов и папок в определённой директории через запятую. Для выполнения поставленной задачи нужно ввести «$ ls -m».

Утилита ls весьма сложная и местами непонятная, но функционал ее весьма редко используется полностью. С простыми задачами справится новичок без определенных навыков.
 

Список ключей для команды ls.

Для повседневной работы, одни из самых используемых ключей для команды ls:

  • -l — вывод подробной информации о содержимом каталога в виде списка;
  • -a (—all) — вывод информации о всех имеющихся объектах явных и скрытых;
  • -A (—allmost-all) — вывод информации о всех имеющихся явных и скрытых объектах (за исключением объектов «.» и «..»);
  • -d (—directory) — вывод информации о директории без вывода его содержимого;
  • -F — к объектам являющимся каталогами добавит в конце символ слеш «/», к объектам являющимися исполняемыми файлами добавляется «*», к объектам являющимися символьными ссылками — «@»;
  • -r (—reverse) — данные ключи меняют сортировку на обратную;
  • -i — отображение номера индексных дескрипторов объектов;
  • -S — сортировка объектов по размеру от большого к меньшему;
  • -Sr — сортировка объектов по размеру от меньшего;
  • -t — сортировка объектов по времени модификации файлов;
  • -R (—recursive) — вывод информации об имеющихся объектах в том числе и объектах во вложенных каталогах.

Способы работы с командой ls и ее ключи, упоминаемые в статье это далеко не весь список. Если вы желаете использовать всю мощь этой на первый взгляд простой команды, то как уже упоминалось ранее, более подробную информацию можно получить при вызове встроенного мануала $ man ls .

Получение сведений о файлах и каталогах

Файловая система для каждого из своих базовых объектов (файлов и каталогов) хранит около четырёх десятков информационных полей. Подавляющее большинство из этих полей ФС использует для поддержания собственной работоспособности. По сути, когда пользователь работает с ФС, он просто использует любезно предоставленные самой же ФС возможности и информацию. При этом видит всё «как на ладони», всё как есть. Единственным скрытым (а точнее, «замаскированным») компонентом в представлении ФС является оборудование. Которое представлено теми же самыми файлами с соответствующими им свойствами и атрибутами.

Что представляет собой тот или иной файл, т. е. какой доступ к нему предоставлен, какими «связями» он обладает, когда был создан и/или изменён. А также многое другое, позволяет узнать команда ls с ключом -l. Когда нужно «навести справки» о каком-либо объекте ФС, использовать нужно именно её:

$ ls -l /bin/gzip -rwxr-xr-x 3 root root 101560 апр 28 2017 /bin/gzip

Нет необходимости подробно останавливаться на синтаксисе и перечисления всех доступных опций и их описании. Поскольку это простая справочная информация, доступная из соответствующего справочного руководства: man ls. А вот сам вывод команды из приведённого примера стоит рассмотреть более внимательно. Он разбит на секции, каждая из которых является отдельным атрибутом файла. В данном выводе в первой секции представлен режим доступа к файлу. Во второй — количество жёстких ссылок на данный файл. В третьей и четвертой — информация о владельце и группе. В данном случае root, к которым принадлежит файл. Следующая секция отображает размер файла в байтах. Далее следует дата последнего изменения файла — 28 апреля 2017 г., последняя секция — имя самого файла. Что касается каталогов, то для них всегда имеется как минимум две жесткие ссылки: первая — из родительского каталога, а вторая — это «псевдокаталог» «.» внутри самого этого каталога.

Как правильно интерпретировать вывод команды ls?

Первое, что может ввести в заблуждение при изучении вывода команды ls -l, так это первая секция данных. Состоящая из набора десяти символов и показывающая режимы доступа к файлу. Для вышеприведённого примера первый символ «-» указывает, что это файл. А в случае с каталогом вместо него выводится символ «d». Следующие девять символов представляют собой три группы, отражающих режимы доступа к файлу. Первая группа (первые три символа «rwx») показывают, какие права доступа выставлены на данный файл для его владельца. Следующая группа символов — «r-x» — показывает режим доступа для группы, к которой принадлежит файл. Ну а третья («r-x») — права доступа для всех остальных пользователей.

В полях, отображающих владельца и группу вместо символьных имён могут быть также и цифровые идентификаторы. Такое бывает, когда соответствующие записи были удалены из файлов /etc/passwd или /etc/group. Также это может быть признаком возникновения ошибки в базах данных LDAP или NIS. Конечно, если таковые используются.

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

Особенности использования команды ls

Когда команда ls обрабатывает не «обычные» файлы, а специальные файлы устройств (хотя это тоже самые обычные файлы). То для них она выводит несколько иную информацию:

$ ls -l /dev/tty0 cr–w—- 1 root tty 4,0 фев 28 14:27 /dev/tty0

Вместо размера файла выводится старший и младший номера (4, 0) устройства tty0 – это первая виртуальная консоль, управляемая драйвером устройства 4, который является драйвером терминала.

Когда нужно узнать для определённого файла не только количество указывающих на него жестких ссылок, но и сами эти ссылки. То целесообразно использовать опцию -i, которая выводит номер индексного дескриптора для файла:

$ ls -li ‘Рабочий стол’ 3276880 ‘Рабочий стол’

Номер индексного дескриптора — это индекс той самой таблицы, в которой содержатся записи всех файловых систем. В свою очередь, на дескрипторы ссылаются файловые записи каталогов. Таким образом, у жёстких ссылок, ссылающихся на один и тот же файл, будут одинаковые номера. Зная номер индексного дескриптора определённого файла, можно найти в системе все ссылающиеся на него жесткие ссылки, используя команду find:

$ find точка_монтирования -xdev -inum индексный_дескриптор

Данный пример — лишь одно из важных практических применений команды ls. Следует также отметить некоторые особенно полезные опции команды ls:

-a – отображает все файлы и каталоги. Включая скрытые (имена которых начинаются с точки), а также «всевдокаталоги» с именами «.» и «. .»;

-t – отображает результаты в отсортированном (по времени изменения файлов) порядке. А опция -tr то же, но в обратном порядке;

-F – выделяет каталоги и исполняемые файлы в общем выводе;

-h – отображает размеры файлов и каталогов в «человекопонятных» единицах, к примеру 4k или 10M;

-R – рекурсивный вывод, выполнение которого прерывается нажатием сочетания клавиш .

Иногда возникает путаница в использовании опций -l и —d. Дело в том, что опция -d предназначена для дополнения работы опции -l (которая выводит подробную информацию об атрибутах). Когда необходимо получить атрибуты именно конкретного каталога:

$ ls -ld ~/htdocs drwxrwxr-x 12 john john 4096 фев 11 12:56 /home/john/htdocs

Еще полезные примеры ls

Вывод файлов по дате изменения, вверху будут самые новые файлы

ls -lat /home

Вывод файлов по дате изменения, вверху будут самые старые файлы

ls -latr /home

Отсортировать файлы по размеру

ls -alS /home

Вывести список только каталогов:

ls -d -1 /home

1. Вывод имен скрытых файлов/директорий

По умолчанию команда не отображает имена скрытых файлов и директорий. Однако, вы можете активировать механизм вывода информации об этих элементах файловой системы с помощью параметра -a. Таким образом, для вывода имен всех файлов/директорий из текущей директории (включая скрытые файлы и директории, имена которых начинаются с символа точки “.”) достаточно выполнить следующую команду:

ls -a

2. Удаление информации о текущей (.) и родительской (..) директориях из вывода

При использовании параметра -a, кроме всего прочего, осуществляется вывод информации о текущей и родительской директориях (элементы “.” и “..” соответственно). Если вам не нужна эта информация, вы можете использовать вместо упомянутого параметра параметр -A.


3. Вывод информации о файлах и директориях в обратном порядке

По умолчанию ls сортирует имена файлов и директорий в алфавитном порядке. Но если вам понадобится, вы можете организовать вывод имен элементов директории в обратном порядке. Для этого вам придется использовать параметр -r.

ls -r

А это пример вывода:


1. ls без параметров

ls без опций отображает список файлов и каталогов в чистом формате, где мы не сможем просматривать такие детали, как типы файлов, размер, дата и время изменения, разрешения и ссылки и т. д.

# ls 001.pcap Desktop Downloads index.html install.log.syslog Pictures Template anaconda-ks.cfg Documents fbcmd_update.php install.log Music Public Videos

2. ls с параметром -l

Здесь, ls -l (l — символ, а не единица) показывает файл или каталог вместе с его размером, а также дату и время изменения, права и владельца.

# ls -l total 176 -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap -rw——-. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads -rw-r–r–. 1 root root 21262 Aug 12 12:42 fbcmd_update.php -rw-r–r–. 1 root root 46701 Jul 31 09:58 index.html -rw-r–r–. 1 root root 48867 Jul 31 02:17 install.log -rw-r–r–. 1 root root 11439 Jul 31 02:13 install.log.syslog drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos

3. Просмотр скрытых файлов

Показ всех файлов, включая скрытые, которые начинаются с «.»

# ls -a . .bashrc Documents .gconfd install.log .nautilus .. .cache Downloads .gnome2 install.log.syslog .netstat.swp 0001.pcap .config .elinks .gnome2_private .kde .opera anaconda-ks.cfg .cshrc .esd_auth .gtk-bookmarks .libreoffice Pictures .bash_history .dbus .fbcmd .gvfs .local .pki .bash_logout Desktop fbcmd_update.php .ICEauthority .mozilla Public .bash_profile .digrc .gconf index.html Music .pulse

4. Перечисление файлов с удобным отображением размера

С опцией -lh, ls показывает размеры в удобном формате.

# ls -lh total 176K -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap -rw——-. 1 root root 1.6K Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Documents drwxr-xr-x. 4 root root 4.0K Aug 16 02:55 Downloads -rw-r–r–. 1 root root 21K Aug 12 12:42 fbcmd_update.php -rw-r–r–. 1 root root 46K Jul 31 09:58 index.html -rw-r–r–. 1 root root 48K Jul 31 02:17 install.log -rw-r–r–. 1 root root 12K Jul 31 02:13 install.log.syslog drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Music drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Public drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4.0K Jul 31 02:48 Videos

5. Перечисление файлов и директорий с символом «/» в конце

Использование опции -F с командой ls добавит символ «/» в конце каждого каталога.

# ls -F 0001.pcap Desktop/ Downloads/ index.html install.log.syslog Pictures/ anaconda-ks.cfg Documents/ fbcmd_update.php install.log Music/ Public/

6. Перечисление файлов в обратном порядке

Следующая команда ls с опцией -r выводит файлы и каталоги в обратном порядке.

# ls -r Videos Public Music install.log fbcmd_update.php Documents 0001.pcap Templates Pictures install.log.syslog index.html Downloads Desktop

7. Рекурсивный список подкаталогов

ls с опцией -R выведет очень длинный список деревьев каталогов. Смотрите пример вывода команды.

# ls -R total 1384 -rw——-. 1 root root 33408 Aug 8 17:25 anaconda.log -rw——-. 1 root root 30508 Aug 8 17:25 anaconda.program.log ./httpd: total 132 -rw-r–r– 1 root root 0 Aug 19 03:14 access_log -rw-r–r–. 1 root root 61916 Aug 10 17:55 access_log-20120812 ./lighttpd: total 68 -rw-r–r– 1 lighttpd lighttpd 7858 Aug 21 15:26 access.log -rw-r–r–. 1 lighttpd lighttpd 37531 Aug 17 18:21 access.log-20120819 ./nginx: total 12 -rw-r–r–. 1 root root 0 Aug 12 03:17 access.log -rw-r–r–. 1 root root 390 Aug 12 03:17 access.log-20120812.gz

8. Обратный порядок вывода

С помощью комбинации -ltr список будет сортироваться по дате последнего изменения от старых к новым.

# ls -ltr total 176 -rw-r–r–. 1 root root 11439 Jul 31 02:13 install.log.syslog -rw-r–r–. 1 root root 48867 Jul 31 02:17 install.log -rw——-. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents -rw-r–r–. 1 root root 46701 Jul 31 09:58 index.html -rw-r–r–. 1 root root 21262 Aug 12 12:42 fbcmd_update.php drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap

Показать скрытые файлы

По умолчанию команда ls не показывает скрытые файлы. Что их показать, используется опция -a:

ls -a

Понятный размер файлов

Вывести размер файлов в понятном формате (опция -h):

ls -lh

Обозначить директории

У команды ls есть очень полезная опция -F, про которую не все знают. Она добавляет к именам файлов дополнительные обозначения, по которым сразу понятно что это за файл. Например, для директорий она добавляет символ /, и в списке файлов сразу видно где директории а где обычные файлы.

ls -lF

Список файлов в одну колонку

Вывести список в одну колонку:

ls -1

Вывести только файлы с определенным расширением

Выведем файлы только с расширением .txt:

ls *.txt

Выведем файлы с определенными расширениями (.html, .php и .txt):

ls *.{html,php,txt}

Файлы, начинающиеся на определенную букву

Показать только файлы, имена которых начинаются на одну из букв указанного множества (a, d, u и x):

ls [adux]*

Список файлов с сортировкой по времени

Выведем список файлов с сортировкой по времени последнего изменения файла. Более свежие файлы располагаются сверху.

ls -lt

Сортировка по времени, но в обратном порядке:

ls -ltr

[spoiler title=”Источники”]

  • https://pingvinus.ru/note/cmd-ls
  • https://losst.ru/komanda-ls-linux
  • http://linux-user.ru/komandy-v-linux/kak-polzovatsya-komandoj-ls-v-linukse/
  • https://world-hello.ru/linux/bash/commands/ls.html
  • https://ITProffi.ru/komanda-ls-prosmotr-atributov-fajlov/
  • http://rus-linux.net/MyLDP/consol/linux-ls-command.html
  • https://mordeniuss.ru/15-basic-ls-command-examples-in-linux/


[/spoiler]


2020-07-27T15:39:45
Linux

Что такое DNS простыми словами



























5/5 — (1 голос)

 

DNS расшифровывается как Domain Name System. Это глобальное распределенное хранилище ключей и значений. Сервера по всему миру могут предоставить вам значение по ключу, а если им неизвестен ключ, то они попросят помощи у другого сервера.

Вот и все. Правда. Вы или ваш браузер запрашивает значение для ключа www.example.com, и получает в ответ 1.2.3.4.

Как изменить DNS

Чтобы переопределить DNS заходим в раздел «Центр управления сетями» классической панели управления.


Далее кликаем пункт «Изменение параметров адаптера» и щелкаем активное подключение. Щелкаем его правой кнопкой, переходим к пункту «Свойства».


Выбираем протокол TCP/IPv4, снова щелкаем «Свойства».


Выбираем альтернативный адрес DNS.


Базовые штуки

Большой плюс DNS в том, что это публичная услуга, и можно потыкать в сервера если хочется разобраться. Давайте попробуем. У меня есть домен petekeen.net, который хостится на машине web01.bugsplat.info. Команды, используемые ниже, можно запустить из командной строки OS X (ой, то есть macOS, — прим. пер.).

Давайте взглянем на маппинг между именем и адресом:

$ dig web01.bugsplat.info

Команда dig это такой швейцарский армейский нож для DNS-запросов. Крутой, многофункциональный инструмент. Вот первая часть ответа:

>; <<>> DiG 9.7.6-P1 <<>> web01.bugsplat.info ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51539 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

Здесь есть только одна интересная деталь: информация о самом запросе. Говорится, что мы запросили запись и получили ровно один ответ. Вот:

>;; QUESTION SECTION: ;web01.bugsplat.info. IN A

dig по-умолчанию запрашивает A-записи. A это address (адрес), и это один из фундаментальных видов записей в DNS. A содержит один IPv4-адрес. Есть эквивалент для IPv6-адресов —  AAAA. Давайте взглянем на ответ:

>;; ANSWER SECTION: web01.bugsplat.info. 300 IN A 192.241.250.244

Тут говорится, что у хоста web01.bugsplat.info. есть один адрес A: 192.241.250.244. Число 300 это TTL, или time to live (время жизни). Столько секунд можно держать значение в кэше до повторной проверки. Слово IN означает Internet. Так сложилось исторически, это нужно для разделения типов сетей. Подробнее об этом можно почитать в документе IANA’s DNS Parameters.

Оставшаяся часть ответа описывает сам ответ:

>;; Query time: 20 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Jul 19 20:01:16 2013 ;; MSG SIZE rcvd: 56

В частности, здесь говорится, как долго сервер откликался, какой у сервера IP-адрес (192.168.1.1), на какой порт стучался dig  (53, DNS-порт по-умолчанию), когда запрос был завершен и сколько байтов было в ответе.

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

Но в этом примере не видно, что DNS-сервер 192.168.1.1 связался с кучей других серверов чтобы ответить на простой вопрос: «куда указывает адрес web01.bugsplat.info?». Давайте запустим трейс чтобы узнать о всей возможной цепочке, которую пришлось бы пройти dig’у, если бы информация не был закэширована:

$ dig +trace web01.bugsplat.info ; <<>> DiG 9.7.6-P1 <<>> +trace web01.bugsplat.info ;; global options: +cmd . 137375 IN NS l.root-servers.net. . 137375 IN NS m.root-servers.net. . 137375 IN NS a.root-servers.net. . 137375 IN NS b.root-servers.net. . 137375 IN NS c.root-servers.net. . 137375 IN NS d.root-servers.net. . 137375 IN NS e.root-servers.net. . 137375 IN NS f.root-servers.net. . 137375 IN NS g.root-servers.net. . 137375 IN NS h.root-servers.net. . 137375 IN NS i.root-servers.net. . 137375 IN NS j.root-servers.net. . 137375 IN NS k.root-servers.net. ;; Received 512 bytes from 192.168.1.1#53(192.168.1.1) in 189 ms info. 172800 IN NS c0.info.afilias-nst.info. info. 172800 IN NS a2.info.afilias-nst.info. info. 172800 IN NS d0.info.afilias-nst.org. info. 172800 IN NS b2.info.afilias-nst.org. info. 172800 IN NS b0.info.afilias-nst.org. info. 172800 IN NS a0.info.afilias-nst.info. ;; Received 443 bytes from 192.5.5.241#53(192.5.5.241) in 1224 ms bugsplat.info. 86400 IN NS ns-1356.awsdns-41.org. bugsplat.info. 86400 IN NS ns-212.awsdns-26.com. bugsplat.info. 86400 IN NS ns-1580.awsdns-05.co.uk. bugsplat.info. 86400 IN NS ns-911.awsdns-49.net. ;; Received 180 bytes from 199.254.48.1#53(199.254.48.1) in 239 ms web01.bugsplat.info. 300 IN A 192.241.250.244 bugsplat.info. 172800 IN NS ns-1356.awsdns-41.org. bugsplat.info. 172800 IN NS ns-1580.awsdns-05.co.uk. bugsplat.info. 172800 IN NS ns-212.awsdns-26.com. bugsplat.info. 172800 IN NS ns-911.awsdns-49.net. ;; Received 196 bytes from 205.251.195.143#53(205.251.195.143) in 15 ms

Информация выводится в иерархической последовательности. Помните как dig вставил точку . после хоста, web01.bugsplat.info? Так вот, точка . это важная деталь, и она означает корень иерархии.

Корневые DNS-сервера обслуживаются различными компаниями и государствами по всему миру. Изначально их было мало, но интернет рос, и сейчас их 13 штук. Но у каждого из серверов есть десятки или сотни физических машин, которые прячутся за одним IP.

Итак, в самом верху трейса находятся корневые сервера, каждый определен с помощью NS-записи. NS-запись связывает доменное имя (в данном случае, корневой домен) с DNS-сервером. Когда вы регистрируете доменное имя у регистратора типа Namecheap или Godaddy, они создают NS-записи для вас.

В следующем блоке видно, как dig выбрал случайный корневой сервер, и запросил у него A-запись для web01.bugsplat.info. Видно только IP-адрес корневого сервера (192.5.5.241). Так какой именно корневой сервер это был? Давайте узнаем!

$ dig -x 192.5.5.241 ; <<>> DiG 9.8.3-P1 <<>> -x 192.5.5.241 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2862 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;241.5.5.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 241.5.5.192.in-addr.arpa. 3261 IN PTR f.root-servers.net.

Флаг -x заставляет dig провести обратный поиск по IP-адресу. DNS отвечает записью PTR, которая соединяет IP и хост, в данном случае — f.root-servers.net.

Возвращаясь к нашему начальному запросу: корневой сервер F вернул другой набор NS-серверов. Он отвечает за домен верхнего уровня info. dig запрашивает у одного из этих серверов запись A для web01.bugsplat.info, и получает в ответ еще один набор NS-серверов, и потом запрашивает у одного из этих серверов запись A для web01.bugsplat.info.. И, наконец, получает ответ!

Уф! Сгенерировалось бы много трафика, но почти все эти записи были надолго закэшированы каждым сервером в цепочке. Ваш компьютер тоже кэширует эти данные, как и ваш браузер. Чаще всего DNS-запросы никогда не доходят до корневых серверов, потому что их IP-адреса почти никогда не изменяются («Наверно все таки речь идет о большом TTL для записей в их базе. Если у DNS сервера IP адрес вообще ни разу не изменялся, то это не означает, что его база навечно закеширована» — прим. от rrrav). Домены верхнего уровня com, net, org, и т.д. тоже обычно сильно закэшированы.

Другие типы

Есть еще несколько типов, о которых стоит знать. Первый это MX. Он соединяет доменное имя с одним или несколькими почтовыми серверами. Электронная почта настолько важна, что у нее есть свой тип DNS-записи. Вот значения MX для petekeen.net:

$ dig petekeen.net mx ; <<>> DiG 9.7.6-P1 <<>> petekeen.net mx ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18765 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;petekeen.net. IN MX ;; ANSWER SECTION: petekeen.net. 86400 IN MX 60 web01.bugsplat.info. ;; Query time: 272 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Jul 19 20:33:43 2013 ;; MSG SIZE rcvd: 93

Заметьте, что MX-запись указывает на имя, а не на IP-адрес.

Еще один тип, который вам скорее всего знаком, это CNAME. Расшифровываетя как Canonical Name (каноническое имя). Он связывает одно имя с другим. Давайте посмотрим на ответ:

$ dig www.petekeen.net ; <<>> DiG 9.7.6-P1 <<>> www.petekeen.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16785 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.petekeen.net. IN A ;; ANSWER SECTION: www.petekeen.net. 86400 IN CNAME web01.bugsplat.info. web01.bugsplat.info. 300 IN A 192.241.250.244 ;; Query time: 63 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Jul 19 20:36:58 2013 ;; MSG SIZE rcvd: 86

Сразу видно, что мы получили два ответа. Первый говорит, что www.petekeen.net указывает на web01.bugsplat.info. Второй возвращает запись A для того сервера. Можно считать, что CNAME это псевдоним (или алиас) для другого сервера.

Зачем нужны DNS-серверы

Система доменных имен функционирует не в виртуальном пространстве, а установлена и работает на определенных физических устройствах. Информация о доменах хранится в форме DNS-записей на множестве специальных компьютерах с соответствующим программным обеспечением. Каждое такое устройство называется сервер доменных имен, а также NS-сервер или DNS-сервер.


Назначение DNS-сервера

  • Хранение информации о доменах и предоставление ее по запросам;
  • Кэширования DNS-записей из остальных DNS-серверов.

Классификация серверов

Учитывая функции DNS-сервера, их можно поделить на несколько видов. При этом, сервер-преобразователь или «резолвер» (от англ. Resolver, «преобразователь»), непосредственно конвертирующий доменные имена в IP-адреса, может одновременно принадлежать к двум и более типам.

Ниже представлены определения основных типов DNS-серверов.

  • Авторитативный — DNS-сервер, который отвечает за определенную зону.
  • Первичный (Мастер) — сервер, уполномоченный вносить изменения в зону. Как правило, в зоне находится только один первичный сервер.
  • Вторичный (Слейв) — сервер без права применять изменения в зоны, получающий от «мастера» только уведомления об изменениях. В зоне может находиться неограниченное количество слейвов.
  • Кэширующий — отвечает за обслуживание пользователей. Он принимает рекурсивные запросы, а затем обрабатывает их с использованием нерекурсивных запросов или передает на вышестоящий сервер. Большинство серверов, работающих непосредственно с пользователями, является именно кэширующими.
  • Перенаправляющий (Прокси, Балансирующий) — кэширующий сервер, который не отдает данные напрямую, а перенаправляет запросы на связанную с ним цепь кэширующих серверов. Благодаря этому перераспределяется общая нагрузка и уменьшается вероятность даунтайма.
  • Корневой (Рут) — авторитативный сервер в корневой зоне. В мире расположено 13 таких серверов, их домены находятся в зоне root-servers.net.
  • Регистрирующий — принимает информацию об обновлениях от пользователей.

Кэширование

Чтобы понимать, как работает DNS-сервер, нужно детально рассмотреть, как в нем происходит процесс кэширования.

При обращениях к любому сайту (даже при переходе на внутренние страницы), серверам необходимо проверять связь домена и IP-адреса. Однако, посещаемый ресурс может храниться довольно далеко, поэтому постоянные запросы на первичный DNS-сервер могут сильно снизить скорость загрузки страниц.

Решить проблему со скоростью обработки запросов позволяет ближайший к компьютеру пользователя DNS-сервер, который становится кэширующим. На нем сохраняется информация о ранее отправленных запросах на IP-адреса. При следующем обращении на один и тот же сайт, данные по его адресу будут поступать оперативно, за счет их наличия в кэше.

Однако, для кэширования нужен источник, с которого будут поступать данные о сайте. Им являются первичные и вторичные DNS-сервера. Это означает, что при регистрации домена владелец сайта должен указывать адрес DNS-сервера, где будет сохранена информация о домене.

Как правило, для работы домена достаточно сохранить свои данные на двух DNS-серверах — первичном и вторичном. Хотя, гораздо лучше указывать большее их количество. Это повысит надежность работы веб-адреса, поскольку при отсутствии доступа к одному DNS-серверу, можно будет обработать запрос на следующем.

Когда и зачем возникает необходимость менять DNS-сервер

По умолчанию DNS-сервер назначается вашим провайдером, но бывают случаи перегрузки, когда конкретному сервису обращается слишком много клиентов. Из-за этого скорость загрузки и передачи пакетов данных может существенно падать. Также некоторые DNS-серверы имеют ограничения в связи с законодательством государства, в котором ведут свою деятельность. Случается, что правительства блокируют даже мировые социальные сети и мессенджеры. В отдельных случаях смена DNS может разрешить доступ к заблокированным ресурсам, а также увеличить скорость загрузки файлов и контента.

Принцип работы DNS-сервера — направить пользователя по правильному адресу интернета

Режим работы DNS

Серверы DNS могут работать в двух режимах:

  1. Итеративный, если сервер отвечает за ту зону для который пришел запрос он присылает ответ, а если нет то он присылает адрес другого сервера, к которому нужно обратиться с запросом.
  2. Рекурсивный, в этом режиме DNS-сервер сам отправляет необходимые запросы всем DNS серверам пока не найдет необходимый сервер, получит от него ответ и этот ответ возвращается к клиенту.

Инфраструктура DNS

Два режима работы необходимы, потому что в системе DNS используются два типа серверов. DNS серверы, которые хранят информацию об отображении доменных имен в ip-адресах, работают в интеративном режиме, так как к этим серверам, особенно к корневым серверам или серверам первого уровня, приходит большое количество запросов, и у них не хватит производительности для работы в рекурсивном режиме.


И есть серверы, которые занимаются разрешением имен для клиентов Эти серверы работают в рекурсивном режиме, получают запрос от клиента, выполняют поиск в дереве серверов DNS, получают ответ и возвращают его клиенту.


Сервер разрешения имен DNS

Сервер разрешения имен находится в локальной сети, он предоставляется либо вашим провайдером, либо вашей организации. Часто адреса таких серверов компьютеры получают автоматически, вместе с ip- адресом по протоколу DHCP.

Другой вариант это использовать открытый сервер разрешения имен, которые предоставляют некоторые компании. Например, широко известен общедоступный DNS сервер компании Google с адресом 8.8.8.8, который может использовать кто угодно. Зачем может понадобиться использовать открытый сервер, вместо серверов вашей локальной сети? Некоторые такие серверы, например, сервер компании Яндекс с таким адресом 77.88.8.7 блокирует контент для взрослых.

Кэширование

После того, как DNS resolver нашел ip-адрес для некоторого доменного имени, он записывает его в кэш, с одной стороны это хорошо так как повышают производительность работы, с другой стороны администратор зоны может поменять ip-адрес для некоторого компьютера, и если он у нас сохранен в кэше, то об изменении мы узнаем только через некоторое время.


Иногда, это время может составлять несколько дней или даже недель в зависимости от настроек DNS resolver. Поэтому не удивляйтесь, если вы внесли изменения в DNS записи, но они пока не видны.

Типы ответов DNS

В DNS есть два типа ответов:

  • Авторитетный или как пишется в утилите nslookup windows —  authoritative «заслуживающий доверие», это ответ, который получен от DNS сервера, который ответственный за данную зону. Ответ получен из конфигурационных файлов на диске сервера, и точно является актуальным.
  • Неавторитетный (non-authoritative) или «не заслуживающий доверия ответ», это ответ который получен от сервера, который не является ответственным за эту зону. Как правило, это DNS resolver, который закэшировал полученный ранее ответ. С момента создания записи в кэше данные могли измениться, поэтому ответ называется не заслуживающим доверия, но как правило в кэше находятся верные данные.

Протокол DNS

Протокол DNS использует модель клиент-сервер, причем в качестве клиента может выступать, как клиент DNS, так и сервер DNS, которые работают в рекурсивном режиме. В этом случае сервер DNS пересылают запросы другим серверам DNS и выступает в качестве клиента. Взаимодействие ведется в режиме запрос-ответ, соединение не устанавливается, используется протокол UDP, номер порта 53.

Формат пакета DNS

Пакет DNS состоит из двух частей заголовок и данные. Заголовок свою очередь состоит из шести полей.


  • Первое поле это идентификатор запроса, любое целое число должно быть одинаково в запросе и ответе.
  • Поле флаги мы его рассмотрим подробнее.
  • И четыре поля, которые указывают сколько у нас данных в пакете. Количество DNS запросов, количество DNS ответов, количество ответов об авторитетных серверах и количество дополнительных ответов.
  • В поле данных у нас содержится информация о запросах DNS, где мы указываем доменное имя компьютера для которого хотим узнать ip-адрес.
  • Ответов DNS в которых содержится ip-адрес необходимого нам компьютера.
  • Поле авторитетные серверы используется ветеративном режиме работы, здесь указываются ip-адреса серверов, которые отвечают за интересующую нас DNS зону.
  • И в поле дополнительной информации указываются некоторые дополнительные записи, которые могут быть нам полезны.

В одном и том же DNS пакете может быть несколько запросов DNS и несколько ответов, в том числе несколько ответов на один запрос, если одному доменному имени соответствует несколько ip-адресов.

Флаги

Поле флаги состоит из нескольких полей:

  1. Поле QR — тип операции запрос (0) или ответ (1).
  2. Поле OPCODE (4 бита) — тип запроса, но на практике используются только 0-стандартный запрос.
  3. Флаг AA указывает, является полученный ответ авторитетным (1) или нет (0).
  4. Флаг TC говорит о том был пакет обрезан (1) или не был (0).
  5. Флаг RD указывается только в запросах, если этот флаг установлен, клиент просит сервер работать в рекурсивном режиме.
  6. Флаг RA используется только в ответах, с помощью этого флага сервер сообщает, что он может работать в рекурсивном режиме.
  7. Флаг Z зарезервирован для будущего использования.
  8. RCODE (4 бита) последние четыре бита это статус выполнение операции, статус 0 говорит о том что операция прошла успешно, любые другие коды говорят о том что произошла какая-то ошибка.

Формат запроса DNS

Формат DNS запроса очень простой, содержит имя, тип и класс записи.

Например, имя www.yandex.ru, тип записи 1, (запись типа A) отображение доменного имени в ip- адрес. В системе DNS также используются другие типы записей. Класс записи 1 (IN, Интернет) код единица, других классов записей в системе DNS сейчас не используется.


Формат ответа DNS

Формат DNS ответа более сложный, первые три поля точно такие же имя, тип записи и класс записи. Затем указывается время жизни, это время на которые запись может сохранить в кэше DNS resolver, затем указывается длина данных и собственно данные ответа.


Пример, ответа DNS имя www.yandex.ru, запись типа A, класс записи интернет, время жизни 90 секунд, однако администратор DNS resolver  может принудительно установить другое время жизни. Длина данных измеряется в байтах, 4 байта и ip-адрес сервера www.yandex.ru.


Типы записей DNS

До сих пор мы рассматривали единственное применение системы dns это определение IP-адреса по доменному имени компьютера, но кроме этого DNS выполняет много других функций, которые необходимы для работы сети интернет. Для их реализации используются разные типы записей DNS.

Каждая запись dns по-английский (Resource Record, RR) имеет тип записи и класс записи. Тип записей говорит о том для чего эта запись предназначена, а класс указывает в каких сетях эта запись может использоваться. Сейчас DNS применяется только в сетях интернет, поэтому в классе записи вы почти всегда увидите IN, сокращение от интернета.

Записи, которые используются для определения ip адреса компьютера (IPv4) по доменному имени имеют тип A, для адресов IPv6 используется тип запись 4 раза (AAAA ).

Запрос записей разных типов

В утилите nslookup можно указать тип записи, который вы запрашиваете с помощью ключа минус type, например если вы укажете -type=A, нужно узнать Ipv4 адрес для доменного имени www.yandex.ru, то получите адреса ip версии 4.

А если указать тип записей четыре раза A, то получим адрес IPv6 для того же самого доменного имени.

DNS псевдонимы

Для одного и того же IP-адреса можно задавать несколько доменных имен. Есть два варианта, как это можно сделать.

  • Первый вариант использовать DNS запись типов CNAME (Canonical Name каноническое имя) эта запись определяет псевдоним для доменного имени. Например, доменное имя ftp.zvondozvon.ru является псевдонимом www.zvondozvon.ru, то есть два этих имени указывают на один и тот же IP-адрес. Канонических имен для одного и того же доменного имени можно создавать очень много. Для того чтобы такие имена работали необходимо, чтобы для доменного имени на которые они указывают существовала запись, которая определяет IP-адрес для этого доменного имени.

  • Альтернативный способ, создать большое количество A записей, которые указывают на один и тот же ip адрес. Но это не всегда удобно, например если вы хотите поменять IP адрес, то вам придется менять его в разных местах. С другой стороны на применение записей типа CNAME есть ряд технических ограничений со стороны системы DNS например, нельзя определять цепочки из канонических имен, которые ссылаются друг на друга, о других ограничениях можно подробно посмотреть в документах RFC, которые описывают работу DNS.

Адрес почтового сервера

Система DNS активно используются при работе электронной почты предположим, что мы хотим отправить электронное письмо на некоторый адрес в домене gmail.com, но как мы узнаем адрес почтового сервера, который принимает почту для этого домена?

Это можно сделать с помощью DNS. Для этого в DNS есть запись специального типа MX (Mail eXechange), например для домена gmail.com есть целых пять записей типа MX, которые задают пять серверов, принимающие почту в домене Google.

Запись MX содержит два поля. Первое поле это приоритет, а второе это адрес сервера принимающего почту для данного домена. Чем ниже значение, тем более высокий приоритет. Самый высокий приоритет у сервера, у которого значение приоритета пять и самый низкий приоритет у сервера со значением 40. Таким образом, при отправке электронной почты сначала будет выбираться сервер с наименьшим приоритетом, если по каким-либо причинам он будет недоступен, следующий сервер и так далее.

Адреса сетевых сервисов

Для некоторых типов сервисов интернет, можно указывать не только IP адрес, но и порт на котором этот сервис работает. Для этого используются DNS записи типа SRV (Service record). Структуры этой записи достаточно сложны, вместо доменного имени указывается строка с описанием сервисов в специальном формате (_сервис._протокол.имя.-˃ приоритет вес порт имя).

Например, если мы хотим узнать на каком компьютере и на каком порту работает jabber сервер работающий по протоколу tcp в домене example.com мы получим вот такую запись (0 5 5269 xmpp.example.com). Проще всего разбирать её с конца. Сервис работает на компьютере с доменным именем xmpp.example.com порт 5269, приоритет 0, вес 5. Так же как и с почтовыми серверами, чем меньше значение приоритета, тем более высокий приоритет у сервера.

Резервный jabber сервер для этого домена работает на компьютере backup_xmpp.xample.com порт 5269 приоритет 20, вес 0. Вес используются для распределения нагрузки между разными серверами, которые имеют один и тот же приоритет.

Делегирование ответственности

В DNS важным понятием является делегирование ответственности. Информация о компьютерах входящая в ту или иную доменную зону хранится на DNS сервере, который отвечает за работу этой зоны. Но нам необходимо знать, какие серверы отвечают за ту или иную зону.

Записи серверов имен

Для этого используются dns-записи типа NS (Name Server). Например, за доменную зону yandex.ru отвечают серверы ns1.yandex.ru и ns2.yandex.ru, а за доменную зону urfu.ru отвечает целых 3 сервера. Записи типа ns задаются на домене более высокого уровня в нашем случае на сервере, который отвечает за зону ru. Именно этот сервер содержит записи ns для домена yandex.ru и для домена urfu.ru.

Но нам недостаточно знать только доменные имена dns-серверов, необходимо знать их IP адреса. Для этого используются «приклеенные» записи А, которые указывают IP-адреса. Вся остальная информация о делегированных доменных зонах хранится на этих dns серверах.

Определение имени по IP-адресу

Кроме определения ip адреса по компьютеру, по доменному имени, система dns может использоваться для обратной задачи определения доменного имени компьютера по его IP адресу. Для этого используются специальные зоны, называются обратные (reverse) или реверсивные.

Реверсивная зона содержит записи типа PTR (Pointer), которые ставят в соответствии IP-адрес компьютера доменному имени. Однако из-за технических ограничений DNS не может работать напрямую с IP адресами, поэтому для обратных зон был придуман обходной путь, представлять IP адрес в виде доменного имени. Для этих целей создан специальный домен in-addr.arpa и в этом домене IP адреса записываются в обратном порядке, например адрес 77.88.55.66 в обратной зоне будет записан следующим образом 66.55.88.77.in-addr.arpa.

Видео про типы записей DNS