Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Linux. ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 37

Автор ΠœΠ°Ρ€ΠΊ ΠœΠΈΡ‚Ρ‡Π΅Π»Π»

НиТС описана ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΈ ΡΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π½Π° устройствС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи.

1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ пустой Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π’Π€Π‘. Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы послС Π΅Π΅ монтирования.

ΠŸΡ€ΠΎΡ‰Π΅ всСго ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ dd. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 512 Π±Π°ΠΉΡ‚ΠΎΠ²) ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π›ΡƒΡ‡ΡˆΠΈΠΉ источник Π±Π°ΠΉΡ‚ΠΎΠ² для копирования β€” устройство /dev/zero.

Π€Π°ΠΉΠ» disk-image Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10 ΠœΠ±Π°ΠΉΡ‚ создаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

% dd if=/dev/zero of=/trap/disk-image count=20480

20480+0 records in

20480+0 records out

% ls -l /tmp/disk-image

-rw-rw---- 1 root root 10485760 Mar 8 01:56 /trap/disk-image

2. Π’олько Ρ‡Ρ‚ΠΎ созданный Ρ„Π°ΠΉΠ» Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ слСдуСт ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму. ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ созданы ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ структуры, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ хранСния Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

Ѐайловая систСма ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ. Команда mke2fs создаСт Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму Ρ‚ΠΈΠΏΠ° ext2 (Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ТСстких дисках Linux-систСм). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π»ΠΎΡ‡Π½Ρ‹ΠΌΠΈ устройствами, ΠΎΠ½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅:

% mke2fs -q /tmp/disk-image

mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09

disk-image is not a block special device.

Proceed anyway? (y,n) y

ΠžΠΏΡ†ΠΈΡ -q подавляСт Π²Ρ‹Π²ΠΎΠ΄ статистики Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ„Π°ΠΉΠ» disk-image содСрТит Π½ΠΎΠ²ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ это Π±Ρ‹Π» ТСсткий диск Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ 10 ΠœΠ±Π°ΠΉΡ‚.

3. Π‘ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму с использованиСм устройства ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи. Для этого Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ mount, ΡƒΠΊΠ°Π·Π°Π² Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π·Π° диска Π² качСствС устройства монтирования. НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ -ΠΎ loop=устройство_ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ_связи. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это Π΄Π΅Π»Π°ΡŽΡ‚. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с устройством ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° создаСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /tmp/virtual-fs, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ станСт Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ монтирования Π’Π€Π‘.

% mkdir /tmp/virtual-fs

% mount -ΠΎ loop=/dev/loop0 /tmp/disk-image /tmp/virtual-fs

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Π· диска смонтирован ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ТСсткому диску Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ 10 ΠœΠ±Π°ΠΉΡ‚.

% df -h /tmp/virtual-fs

Filesystem Size Used Avail Use% Mounted on

/tmp/disk-image 9.7M 13k 9.2M 0% /tmp/virtual-fs

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΎΠ²ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

% cd /tmp/virtual-fs

% echo 'Hello, world!' > test.txt

% ls -l total 13

drwxr-xr-x 2 root root 12288 Mar 8 02:00 lost+found

-rw-rw---- 1 root root 14 Mar 8 02:12 test.txt

% cat test.txt

Hello, world!

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ lost+found автоматичСски добавляСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ mke2fs.[21]

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Π΅Π΅ слСдуСт Π΄Π΅ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

% cd /tmp

% umount /tmp/virtual-fs

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Ρ„Π°ΠΉΠ» disk-image ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π’Π€Π‘. МоТно Π΄Π°ΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ ΡΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΌ β€” вся файловая систСма Π±ΡƒΠ΄Π΅Ρ‚ воссоздана Π² Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Π€Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с нуля, Π° ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно с устройства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска. Если Π² систСмС Π΅ΡΡ‚ΡŒ IDE-дисковод CD-ROM, Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ имя устройства Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ /dev/hda. Имя устройства для SCSI-дисковода Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ: /dev/scd0. Π’ систСмС ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ символичСская ссылка /dev/cdrom. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ устройство Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΎ Π·Π° дисководом CDROM, просмотритС Ρ„Π°ΠΉΠ» /etc/fstab.

Достаточно ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС устройства Π² Ρ„Π°ΠΉΠ». Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска, вставлСнного Π² дисковод. НапримСр:

% cp /dev/cdrom /tmp/cdrom-image

Вакая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько ΠΌΠΈΠ½ΡƒΡ‚, Π² зависимости ΠΎΡ‚ Смкости ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ΠΈ скорости дисковода.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ отсутствии самого накопитСля Π² дисководС. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ монтирования ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /mnt/cdrom:

% mount -ΠΎ loop=/dev/loop0 /tmp/cdrom-image /mnt/cdrom

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ€Π°Π· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы находится Π½Π° ТСстком дискС, доступ ΠΊ Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΊ исходному ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диску. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков файловая систСма ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ iso9660.

6.6. ΠŸΡΠ΅Π²Π΄ΠΎΡ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ mount Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ список всСх смонтированных Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. Одна ΠΈΠ· строк выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

none on /dev/pts type devpts (rw,gid=5,mode=620)

Она ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ файловая систСма ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° devpts смонтирована Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /dev/pts. Π­Ρ‚Π° файловая систСма Π½Π΅ связана Π½ΠΈ с ΠΊΠ°ΠΊΠΈΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ устройством, создаСтся ядром Linux ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму /proc (ΠΎ Π½Π΅ΠΉ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² Π³Π»Π°Π²Π΅ 7, ''Ѐайловая систСма /proc").

Подобно ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ /dev ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /dev/pts содСрТит ссылки Π½Π° устройства, Π½ΠΎ создаСтся ядром динамичСски. Π•Π³ΠΎ "Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅" мСняСтся, отраТая состояниС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ систСмы. ВсС записи этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ псСвдотСрминалам. ОБ Linux создаСт псСвдотСрминал для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Π½Π΅Π³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /dev/pts. ΠŸΡΠ΅Π²Π΄ΠΎΡ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹ Π²Π΅Π΄ΡƒΡ‚ сСбя Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ устройствам: ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ тСкст, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. НомСр псСвдотСрминала являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΅Π³ΠΎ записи Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /dev/pts.

6.6.1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с псСвдотСрминалом

Π£Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ устройство Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΎ Π·Π° процСссом, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ps. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π² ΠΎΠΏΡ†ΠΈΠΈ -ΠΎ столбСц tty, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСссов, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ строки ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°:

% ps -o pid,tty,cmd

  PID TTY   CMD

28832 pts/4 bash

29287 pts/4 ps -o pid,tty,cmd

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ соотвСтствуСт псСвдотСрминал 4.

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ псСвдотСрминала Π΅ΡΡ‚ΡŒ запись Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /dev/pts:

% ls -l /dev/pts/4

crw--w---- 1 samuel tty 136, 4 Mar 8 02:56 /dev/pts/4

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ псСвдотСрминал β€” это символьноС устройство, Π° Π΅Π³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ являСтся Π²Π»Π°Π΄Π΅Π»Π΅Ρ† процСсса, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» создан псСвдотСрминал.

Π‘ псСвдотСрминалом ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ символы, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Π° ΠΏΡ€ΠΈ записи Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ псСвдотСрминала, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ps -o pid,tty,cmd. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ Π½Π°ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° псСвдотСрминал. НапримСр, Ссли Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ 7, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

% echo "Hello, other window!" > /dev/pts/7

Заданная строка отобразится Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠΊΠ½Π΅. Когда Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ, запись 7 исчСзнСт ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /dev/pts.

Если ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ps Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ Π² тСкстовом Ρ€Π΅ΠΆΠΈΠΌΠ΅, окаТСтся, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ соотвСтствуСт ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ устройство, Π° Π½Π΅ псСвдотСрминал:

% ps -ΠΎ pid,tty,cmd

  PID TTY  CMD

29325 tty1 -bash

29353 tty1 ps -o pid,tty,cmd

6.7. Ѐункция ioctl()

БистСмный Π²Ρ‹Π·ΠΎΠ² ioctl() β€” это ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ срСдство управлСния Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ устройствами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся дСскриптор Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΎΠ³ΠΎ устройства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” это ΠΊΠΎΠ΄ запроса, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Π Π°Π·Π½Ρ‹ΠΌ устройствам ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ запросы. Π’ зависимости ΠΎΡ‚ запроса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ioctl() ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

МногиС ΠΊΠΎΠ΄Ρ‹ запросов пСрСчислСны Π½Π° man-страницС ioctl_list. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ioctl() Π½ΡƒΠΆΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ устройства. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, эти вопросы выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ нашСй ΠΊΠ½ΠΈΠ³ΠΈ, Π½ΠΎ всС ΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Листинг 6.2. (cdrom-eject.c) Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ΠΈΠ· дисковода

#include <fcntl.h>

#include <linux/cdrom.h>

#include <sys/ioctl.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <unistd.h>


int main(int argc, char* argv[]) {

 /* ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° устройства, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. */

 int fd = open(argv[1], O_RDONLY);

 /* Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ΠΈΠ· дисковода. */

 ioctl(fd, CDROMEJECT);

 /* Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°. */

 close(fd);

 return 0;

}

Π’ листингС 6.2 прСдставлСна короткая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска ΠΈΠ· дисковода CD-ROM. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: имя дисковода CD-ROM. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» устройства ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ioctl() с ΠΊΠΎΠ΄ΠΎΠΌ запроса CDROMEJECT. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π΅ <linux/cdrom.h> ΠΈ слуТит устройству ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск ΠΈΠ· дисковода.