2009-04-16 5 views
1

Когда я сделал команду выше, X11 открылся. Я недоумеваю. Я его запустил? Как я могу быть уверен, что я не запускаю какую-либо программу, когда смотрю на вещи? Я действительно ненавижу идею, что чтение текстового файла может выполнять программу. Как можно программировать выполнение программ, выполняемых при выполнении простой команды cat или аналогичной команды?Что делает команда «cat/tmp/dir /: 0»?

+0

Так что же произошло? Вы были в текстовом терминале, и Х начал? Почему вы выполняли эту команду? – Zifre

+0

@ Zifte: Я прочитал, что вещь: 0 соответствует дисплею, а X хранит свои файлы в/tmp /. Поэтому было логично проверить, как все работает. Я ждал, чтобы прочитать хороший код, но у меня открылся только экран. –

+0

Вы набрали 'cat/tmp /: 0'? Я предполагаю, что начальный $ - это приглашение вашей оболочки? –

ответ

3

Если запустить

file /tmp/:0 

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

ls -F 

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

2

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

+0

Можете ли вы уточнить «послал кошка»? Я думаю, вы имеете в виду «cat X> Y», но в приведенном выше списке нет перенаправления –

+0

. Было бы, если бы он послал некоторые из них! –

+0

Возможно, ваше наблюдение правильное. Я перепроверил tmp, и я мог только найти: 0 один дир глубже. Я изменил вопрос соответствующим образом. Спасибо! –

2

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

+0

Я играл с X-сервером. Поэтому вы, вероятно, правы, что он работает. –

3

Это похоже на поведение OSX 10.5.

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

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