UNIX tty команда и файловая команда? - PullRequest
3 голосов
/ 15 сентября 2010

Я новичок в UNIX, и когда я читал книгу о UNIX, я столкнулся с двумя проблемами, которые я не понимал. Буду очень признателен за вашу помощь.

1) Найдите справочную страницу для команды file, а затем используйте ее для всех файлов в каталоге / dev. Можете ли вы сгруппировать эти файлы в две категории?

2) Запустите команду tty и запишите имя устройства вашего терминала. Теперь используйте это имя устройства (/ dev / pst / 6) в команде cp / etc / passwd / dev / pts / 6. что ты наблюдаешь?

1 Ответ

10 голосов
/ 15 сентября 2010

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

Чтобы прочитать страницу руководства по команде file, просто наберите ...

man file

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

file /dev/*

... это сделает то, что задал вопрос, и вызовет файл со списком файлов в подкаталоге / dev /. Список на самом деле готовится программой-оболочкой, в которую вы набираете текст, которая затем выполняет файловую программу и передает ей список. file затем выводит некоторое описание файлов. На моем компьютере, где [SHELL-PROMPT] будет отличаться на вашем компьютере, я набрал файл / dev / * и часть вывода выглядела так:

[SHELL-PROMPT] file /dev/*
...lots of stuff...
/dev/cevt:      character special (255/176)
/dev/console:   character special (5/1)
/dev/core:      symbolic link to `/proc/kcore'
/dev/cpqci:     character special (10/209)
/dev/cpqhealth: directory
/dev/crom:      character special (255/180)
...lots of stuff...
/dev/md8:       block special (9/8)
/dev/md9:       block special (9/9)
/dev/mem:       character special (1/1)
/dev/mice:      character special (13/63)
/dev/mouse0:    character special (13/32)
/dev/mptctl:    character special (10/220)
/dev/net:       directory
/dev/nflog:     character special (36/5)
/dev/null:      character special (1/3)
/dev/parport0:  character special (99/0)
...lots of stuff...

В левой колонке есть запись файловой системы для каждой комбинации каталогов / файлов (известная как путь), а файл описывает содержимое справа. Эти описания могут не иметь большого смысла, но вы можете видеть, что некоторые шаблоны: некоторые записи являются «специальными для блоков», другие «специальными символами», некоторые являются каталогами, что подразумевает, что вы можете найти больше файлов под ними (т.е. ls /dev/net/*). Цифры после «специальных» файлов являются просто идентификаторами операционной системы, чтобы отличать упомянутые файлы. Суть в том, что ввод и вывод с некоторых устройств, подключенных к компьютеру, становится возможным, как если бы это был файл в файловой системе. Эта «файловая» абстракция используется в качестве общей модели для ввода и вывода. Таким образом, / dev / tty, например, является tty - или терминальным - устройством. Любые данные, которые вы пытаетесь прочитать оттуда, на самом деле будут взяты с клавиатуры, которую вы используете для ввода в оболочку (в простом случае), и все, что вы там напишите, станет видимым в том же терминале, в который вы печатаете. / dev / null - еще один интересный: вы можете читать и писать из него, но это воображаемая вещь, которая никогда не предоставляет данные (просто указывает на условие конца файла и выбрасывает любые данные, записанные в него). Вы можете продолжить чтение из / dev / random, и оно будет выдавать случайные значения каждый раз ... хорошо, если вам нужны случайные числа или содержимое файла для шифрования или какой-либо статистической работы.

2) Запустите команду tty и запишите имя устройства вашего терминала. Сейчас использую это имя устройства (/ dev / pst / 6) в команда cp / etc / passwd / dev / pts / 6. что ты наблюдаешь?

Набрав «tty», вы можете запросить устройство, представляющее ваш терминал ...

[SHELL-PROMPT] tty
/dev/pts/11

Но я просто сказал, что / dev / tty - это другое имя для той же вещи, поэтому обычно не нужно использовать программу "tty", чтобы найти это более конкретное имя. Тем не менее, если вы создадите пару окон терминала для своего хоста и введете tty в каждом, вы увидите, что каждая оболочка подключена к отдельному псевдо-терминальному устройству. Тем не менее, каждая оболочка - и программа, запускаемая из оболочки - может по умолчанию также ссылаться на свое собственное устройство ввода-вывода терминала как / dev / tty ... это удобное контекстно-зависимое имя. Команда ...

cp /etc/passwd /dev/pts/6

... где вы заменяете 6 на то, что действительно сообщала ваша программа tty (например, 11 в моем случае), делает то же самое, что и ...

cp /etc/passwd /dev/tty

... он просто читает содержимое файла / etc / passwd и выводит его на экран. Теперь проблема в том, что / etc / password для обычного человека выглядит большим количеством непонятного мусора - неудивительно, что вы не можете понять, что происходит. Попробуйте вместо этого ...

echo "i said hello" > /tmp/hello.file
cp /tmp/hello.file /dev/tty

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

(Если вы вошли в систему в двух окнах терминала, вы можете даже зайти в одну оболочку и скопировать файл на устройство / dev / pts / NN, о котором сообщает другая оболочка, эффективно отправив сообщение в другое окно. может даже обойти файл и echo 'boo' > /dev/tty/NN. У вас будут права на это, только если один и тот же ИД пользователя зарегистрирован в обоих окнах.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...