Что делает команда "cat / tmp / dir /: 0"? - PullRequest
1 голос
/ 16 апреля 2009

Когда я выполнил команду выше, X11 открылся. Я в замешательстве. Я запускал это? Как я могу быть уверен, что я не запускаю никаких программ, когда смотрю на вещи? Я действительно ненавижу идею, что чтение текстового файла может выполнить программу. Как программируемо создавать программы, которые выполняются при выполнении простой команды cat или аналогичной команды?

Ответы [ 4 ]

3 голосов
/ 16 апреля 2009

Это звучит как поведение OSX 10.5.

launchd прослушивает сокет '/ tmp / launch-xxxxxx /: 0'. Переменная DISPLAY установлена, чтобы сообщать приложениям X о необходимости записи в этот сокет. Когда X-приложение открывает сокет, launchd автоматически запускает «X11.app», чтобы предоставить приложению дисплей.

cat'ing сокет открывает его и запускает X11.app. Я не думаю, что есть другие экземпляры такого поведения, настроенные по умолчанию.

3 голосов
/ 16 апреля 2009

Если вы запустите

file /tmp/:0

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

ls -F

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

2 голосов
/ 16 апреля 2009

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

2 голосов
/ 16 апреля 2009

машина: 0 - это дисплей Х (первый дисплей на «машине»)
Я никогда не видел / tmp /: 0, но, возможно, ваша машина настроена так, что все несопоставленные имена машин отображаются на localhost. Вы ничего не выполнили, X-сервер просто попытается интерпретировать любые команды, отправленные cat, как X-инструкции. Это как кошка на http адрес

...