Проблема с именами хостов ARP

При использовании -execdir вместо -exec выполняется команда из каталога find , который в настоящее время проходит, что делает эту проблему немного проще:

find. -mindepth 2 -maxdepth 2 -type d -execdir застежки -молнии -r {} .zip {} ';'

Обратите внимание, что последовательность {} интерпретируется find как текущее имя файла и является относительным при использовании -execdir .

-121--174030-

Проверьте, пуст ли $ SSH _ CLIENT , а также $ ДИСПЛЕЯ . Например:

[[ -z $DISPLAY && -z $SSH_CLIENT && $XDG_VTNR -eq 1 ]] && exec startx

Либо используйте $ SSH _ CONNECTION или $ SSH _ TTY

-121--85868-

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

Эмулятор терминала

То, что вы описываете:

окно, где я могу ввести команды для linux

, на самом деле не bash, по крайней мере, не сам по себе. Вы просматриваете эмулятор терминала , который запускает оболочку (вероятно, /bin/bash ).

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

консоль Linux (a.k.a. «текстовый режим»)

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

Оболочка

Эмулятор терминала может запускать любую понравившуюся программу командной строки. По умолчанию выполняется только интерактивная оболочка (например, bash, sh, csh, ksh и т.д.). Итак, что такое оболочка?

Проще говоря, оболочка - это программа командной строки, как и любая другая. Если запускать в интерактивном режиме (то есть не запускать предварительно запрограммированный сценарий оболочки), он представляет вам подсказку (обычно что-то вроде type _ outcast: ~ $ ), а затем принимает всё, что вы наберете, и интерпретирует его в соответствии с собственным набором правил (языком). Каждая оболочка немного отличается, но большинство общих оболочек в целом похожи.

Что происходит при вводе команды?

При вводе команды (например, ls -l ) и нажатии Enter оболочка просматривает введенную последовательность и решает, что делать. В этом случае выполняется поиск программы с именем ls в переменной $ PATH , а при ее обнаружении она запускается в дочернем процессе ( fork () и exec () система вызывает , если требуется знать внутренние элементы) с предоставленным аргументом ( -l ).

Выходные данные команды (известные как stdout или «standard output», также stderr или «standard error») по умолчанию подключаются к терминалу, что позволяет просмотреть выходные данные программы. Аналогично, по умолчанию также подключается stdin («стандартный ввод»), что позволяет вводить входные данные в интерактивные программы. (Иногда программа принимает более непосредственное управление терминалом, что является промежуточной темой программирования.)

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

Как насчет всех этих модных цветов и меню?

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

Другими словами, здесь нет существенно нового вуду. Моя система в начале 80-х годов (задолго до появления Windows) понимала коды ANSI и отображала похожие диалоги, когда мой терминал был просто монитором 80x25 цвета (EGA).

Так что же изменилось?

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

1
07.08.2018, 18:04
1 ответ

arp опрашивает вашу систему, чтобы определить, как она может преобразовывать IP-адреса в имена хостов. Если вы используете переключатель -n, он откажется от этого и просто покажет IP-адреса без какого-либо преобразования в имена хостов.

Как и большинство инструментов в Linux, arpиспользует NS (Переключатель службы имен )для поиска. Если вы straceсвою команду arp, вы можете увидеть, как она просматривает эти вещи:

$ strace -s 2000 arp -a
...
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 5

Просмотрев этот файл, arpобнаружит, как он должен искать имена хостов.

$ grep hosts: /etc/nsswitch.conf
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

Это говорит о том, что сначала необходимо просмотреть файлы, а затем обратиться к DNS. 2-й... Слово filesздесь означает использование системного файла /etc/hosts. Вы можете узнать, как это будет делать NS, используя команду getent hosts.

Пример

Например, на моей виртуальной машине CentOS 7:

$ arp -a
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
gateway (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
$ arp -an
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

Если мы обратимся к getentв поисках IP-адреса 10.0.2.2:

$ getent hosts 10.0.2.2
10.0.2.2        gateway

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

.
$ more /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3

ПРИМЕЧАНИЕ. У:arpне остается другого выбора, кроме как показать вам вопросительный знак, потому что он не смог найти никакого имени для использования.

1
27.01.2020, 23:43

Теги

Похожие вопросы