Руководство по Командной Строке



Pdf просмотр
страница8/12
Дата26.11.2016
Размер1.9 Mb.
Просмотров2828
Скачиваний0
1   ...   4   5   6   7   8   9   10   11   12
:-)
58

Глава
10. Файловая Система /proc
Файловая система /proc является особой для GNU/Linux
. Это виртуальная файловая система и она не занимает места на вашем диске
. Это очень удобный способ получить информацию о системе, тем более,
что большинство файлов в этом каталоге читаемы для человека
(ну хорошо, с небольшой помощью).
Большинство программ реально получают информацию из файлов в /proc
, форматируют их своим способом
, а затем отображают. Так делают все программы, которые отображают информацию о процессах,
и некоторые из них мы уже видели
(top, ps и сотоварищи). /proc это также хороший источник информации о ваших аппаратных средствах
, и таким же образом некоторые программы являются только интерфейсами к информации
, содержащейся в /proc.
Существует также специальный подкаталог /proc/sys
. Он позволяет изменять некоторые параметры ядра в реальном режиме времени или отображать их
10.1.
Информация о Процессах
Если вы пролистаете содержимое каталога /proc
, вы увидите много каталогов, названиями которых являются номера
. Эти каталоги содержат информацию о все запущенных в данный момент процессах в системе
:
$ ls -d /proc/[0-9]*
/proc/1/
/proc/302/
/proc/451/
/proc/496/
/proc/556/
/proc/633/
/proc/127/
/proc/317/
/proc/452/
/proc/497/
/proc/557/
/proc/718/
/proc/2/
/proc/339/
/proc/453/
/proc/5/
/proc/558/
/proc/755/
/proc/250/
/proc/385/
/proc/454/
/proc/501/
/proc/559/
/proc/760/
/proc/260/
/proc/4/
/proc/455/
/proc/504/
/proc/565/
/proc/761/
/proc/275/
/proc/402/
/proc/463/
/proc/505/
/proc/569/
/proc/769/
/proc/290/
/proc/433/
/proc/487/
/proc/509/
/proc/594/
/proc/774/
/proc/3/
/proc/450/
/proc/491/
/proc/554/
/proc/595/
Имейте в виду
, что как пользователь, вы можете увидеть информацию только о своих собственных процессах
. Для других пользователей вы такой информации не получите. Поэтому перейдем в root и посмотрим какая информация доступна для процесса
127:
$ su
Password:
$ cd /proc/127
$ ls -l total 0
-r--r--r--
1 root root
0 Dec 14 19:53 cmdline lrwx------
1 root root
0 Dec 14 19:53 cwd -> //
-r--------
1 root root
0 Dec 14 19:53 environ lrwx------
1 root root
0 Dec 14 19:53 exe -> /usr/sbin/apmd*
dr-x------
2 root root
0 Dec 14 19:53 fd/
pr--r--r--
1 root root
0 Dec 14 19:53 maps|
-rw-------
1 root root
0 Dec 14 19:53 mem lrwx------
1 root root
0 Dec 14 19:53 root -> //
-r--r--r--
1 root root
0 Dec 14 19:53 stat
-r--r--r--
1 root root
0 Dec 14 19:53 statm
-r--r--r--
1 root root
0 Dec 14 19:53 status
$
Каждый каталог содержит одинаковые входы
. Вот краткое описание некоторых из них:
1. cmdline: этот (псевдо-) файл содержит целую командную строку, использованную для вызова процесса
. Он не отформатирован: нет пробелов между программой и ее аргументами, и нет разделителя в конце строки
. Чтобы посмотреть его, вы можете использовать: perl -ple ’s,\00, ,g’ cmdline.
2. cwd: это символическая ссылка на текущий рабочий каталог (следует из имени) процесса.
3. environ Этот файл содержит все переменные окружения, определенные для процесса, в форме VARIA-
BLE=value
. Подобно cmdline, вывод не форматирован вообще: нет разделителей между различными переменными
, и нет разделителя в конце. Единственное решение как его посмотреть: perl -pl -e
’s,\00,\n,g’ environ
4. exe: это символическая ссылка на соответствующий запущенному процессу выполняемый файл.
5. fd: этот подкаталог содержит список файловых дескрипторов, открытых процессом в данный момент.
Смотрите ниже
59

Глава
10. Файловая Система /proc
6. maps: когда вы выводите содержимое именованной трубы (с помощью cat, например), вы можете видеть части адресного пространства процесса
, которые в текущий момент отображаются в файле.
Слева направо это поля
: адресное пространство, связанное с этим отображением, права отображения,
смещение с начала файла
, где начинаются отображения, страший и младший номер (в шестнадцатиричном формате
) устройства, где хранится файл отображения, номер узла файла и, последнее, имя файла.
Когда устройство обозначено как
0 и нет номера узла и имени файла - это анонимное отображение.
Смотрите mmap(2).
7. root: Это символическая ссылка на корневой каталог, используемый процессом. Обычно это будет /,
но посмотрите chroot(2).
8. status: этот файл содержит различную информацию о процессе: название выполняемой программы,
его текущее состояние
, его PID и PPID, его реальные и эффективные UID и GID, использование им памяти
, и другое.
Если мы выведем список каталога fd для нашего процесса
127, мы получим следующее:
$ ls -l fd total 0
lrwx------
1 root root
64 Dec 16 22:04 0 -> /dev/console l-wx------
1 root root
64 Dec 16 22:04 1 -> pipe:[128]
l-wx------
1 root root
64 Dec 16 22:04 2 -> pipe:[129]
l-wx------
1 root root
64 Dec 16 22:04 21 -> pipe:[130]
lrwx------
1 root root
64 Dec 16 22:04 3 -> /dev/apm_bios lr-x------
1 root root
64 Dec 16 22:04 7 -> pipe:[130]
lrwx------
1 root root
64 Dec 16 22:04 9 ->
/dev/console
$
Фактически
, это список файловых дескрипторов, открытых процессом. Каждый открытый дескриптор обозначен символической ссылкой
, именем каждого номера дескриптора, и указателем на файл, открытый этим дескриптором
1
. Обратите также внимание на права symlinks: это - единственное место, где они имеют смысл
, поскольку они представляют права, с которыми файл, соответствующий дескриптору, был открыт
10.2.
Информация об Аппаратном Обеспечении
Кроме каталогов
, связанных с различными процессами, /proc также содержит несметное количество информации об аппаратном обеспечении вашей машины
. Список файлов каталога /proc показывает следующее
:
$ ls -d [a-z]*
apm dma interrupts loadavg mounts rtc swaps bus/
fb ioports locks mtrr scsi/
sys/
cmdline filesystems kcore meminfo net/
self/
tty/
cpuinfo fs/
kmsg misc partitions slabinfo uptime devices ide/
ksyms modules pci stat version
$
Если мы посмотрим
, например, содержимое /proc/interrupts, мы можем увидеть, что тут есть список прерываний
, используемых системой на данный момент, а также периферийных устройств, которые держат их
. Точно так же, каталог ioports содержит список адресных интервалов ввода-вывода, занятых в настоящее время
, и наконец, dma делает то же самое для каналов DMA. Поэтому, чтобы найти конфликт,
нужно смотреть содержание этих трех файлов
:
$ cat interrupts
CPU0 0:
127648
XT-PIC
timer
1:
5191
XT-PIC
keyboard
2:
0
XT-PIC
cascade
5:
1402
XT-PIC
xirc2ps_cs
8:
1
XT-PIC
rtc
10:
0
XT-PIC
ESS Solo1 12:
2631
XT-PIC
PS/2 Mouse
13:
1
XT-PIC
fpu
14:
73434
XT-PIC
ide0 1.
Если вы помните
, что рассказывалось в разделе Разд. 3.4, вы знаете, что обозначают дескрипторы 0, 1 и 2.
60

Глава
10. Файловая Система /proc
15:
80234
XT-PIC
ide1
NMI:
0
$ cat ioports
0000-001f : dma1 0020-003f : pic1 0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu
0170-0177 : ide1 01f0-01f7 : ide0 0300-030f : xirc2ps_cs
0376-0376 : ide1 03c0-03df : vga+
03f6-03f6 : ide0 03f8-03ff : serial(auto)
1050-1057 : ide0 1058-105f : ide1 1080-108f : ESS Solo1 10c0-10cf : ESS Solo1 10d4-10df : ESS Solo1 10ec-10ef : ESS Solo1
$ cat dma
4: cascade
$
Или проще
, использовать команду lsdev, которая получает информацию из этих трех файлов и сортирует ее по периферийным устройствам
, что, несомненно, более удобно.
2
:
$ lsdev
Device
DMA
IRQ
I/O Ports
------------------------------------------------ cascade
4 2
dma
0080-008f dma1 0000-001f dma2 00c0-00df
ESS
1080-108f 10c0-10cf 10d4-10df 10ec-10ef fpu
13 00f0-00ff ide0 14 01f0-01f7 03f6-03f6 1050-1057
ide1 15 0170-0177 0376-0376 1058-105f keyboard
1 0060-006f
Mouse
12
pic1 0020-003f pic2 00a0-00bf rtc
8 0070-007f serial
03f8-03ff
Solo1 10
timer
0 0040-005f vga+
03c0-03df xirc2ps_cs
5 0300-030f
$
Полная распечатка файлов была бы слишком длинной
, тем не менее приведем описание некоторых из них:

cpuinfo
: этот файл содержит, соответственно своему названию, информацию о процессоре(рах) в вашей машине

modules
: этот файл содержит список модулей, которые используются ядром в данный момент, а также процент использования для каждого модуля
. Фактически, это та же самая информация, которую предоставляет команда lsmod

meminfo
: этот файл предоставляет информацию о загрузке памяти на момент запроса. Более аккуратно форматированный вид этой же информации можно получить командой free

apm
: если у вас портативный компьютер, то вывод этого файла предоставит вам информацию о состоянии батарей
. Вы сможете увидеть куда подключен AC, текущую загрузку батарей, и, если APM
BIOS вашего ноутбука поддерживает это
(к сожалению это не всегда так), то вы сможете увидеть
2.
lsdev
- это часть пакета procinfo.
61

Глава
10. Файловая Система /proc еще и сколько времени в минутах батареи смогут проработать
. Файл не очень читаем, поэтому лучше использовать вместо него команду apm
, которая предоставит информацию в "человекочитаемом" виде.

bus
: этот подкаталог предоставит вам информацию о всех периферийных устройствах, найденных на различных шинах вашего компьютера
. Информация внутри него редко вообще читаема, и главным образом с ней имеют дело и умеют форматировать внешние утилиты
, такие как: lspcidrake, lspnp, и др
10.3.
Подкаталог
/proc/sys
Задача этого каталога
- сообщать о различных параметрах ядра и позволять замену некоторых из них в реальном режиме времени
. В противоположность всем другим файлам каталога /proc, некоторые файлы этого каталога могут быть записаны
, но только под root
Список каталогов и файлов был бы слишком большим
, тем более что их наличие преимущественно зависит от конкретно вашей системы
, а большинство файлов будет использоваться только для очень специализированных приложений
. Тем не менее, приведем три обычных случая использования этого подкаталога
:
1. Разрешение роутинга: Даже если заданное по умолчанию ядро от Mandrake Linux может роутить, вы должны явно позволить ему это делать
. Для этого нужно под root напечатать следующее:
$ echo 1 >/proc/sys/net/ipv4/ip_forward
Замените
1 на 0, если вы хотите запретить роутинг.
2. Предотвращение подмены IP: имитация IP состоит в том, чтобы заставить интерфейс поверить в то
, что пакет, пришедший из мира, является его собственным, вышедшим из него пакетом. Эта техника очень часто используется кракерами
3
, но вы можете заставить ядро предотвращать такие вторжения
. Вам только нужно написать:
$ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter и все типы таких атак становятся невозможными
3. Увеличение размера таблицы открытых файлов и таблицы inode: Размер таблицы открытых файлов и таблицы inode является динамическим под GNU/Linux . Значений по умолчанию обычно достаточно,
но они могут быть недостаточными если ваша машина
- нагруженный сервер (например, сервер баз данных
). Реально, первым препятствием может стать тот факт, что процессы больше не смогут открывать файлы по той причине
, что таблица полна, поэтому вам нужно увеличить ее размер. В то же время вам нужно будет увеличить и размер таблицы inode. Вот две строчки, которые решают эту проблему
:
$ echo 8192 >/proc/sys/fs/file-max
$ echo 16384 >/proc/sys/fs/inode-max
Чтобы это выполнялось при каждой загрузке системы
, вы можете добавить все эти строки в /etc/rc.d/
rc.local и таким образом избежать их набора каждый раз заново
, но есть и другое решение, состоящее в том
, чтобы заполнить файл /etc/sysctl.conf, смотрите sysctl.conf(5).
3.
Но не хакерами
!
62

Глава
11. Файлы Загрузки: init sysv
Традиционно для UNIX есть две схемы загрузки системы
: схема BSD и схема “System V ”, обе получившие название после того
, как были представлены в UNIX (соотв. Berkeley Software Distribution и AT&T UNIX Sys- tem V
). Схема BSD более простая, но схема System V , хотя и менее понятная сразу (после прочтения этой главы вы измените свое мнение
), определенно более гибкая в использовании.
11.1.
В Начале Был init
Когда система стартует
, а после этого ядро конфигурирует все и монтирует корневую файловую систему,
она выполняет команду /sbin/init
1
. init это отец всех процессов в системе, и он также отвечает за перевод системы в нужный
runlevel. Мы рассмотрим runlevel в следующем разделе.
Конфигурационнный файл init это /etc/inittab
. У этого файла есть собственная страница руководства
(inittab(5)), но мы все-таки опишем здесь несколько конфигурационных настроек.
Первая строка
, на которую нужно обратить внимание это:
si::sysinit:/etc/rc.d/rc.sysinit
Эта инструкция сообщает init что /etc/rc.sysinit должен быть выполнен при инициализации системы
(si (System Init) стоит раньше всего другого. Для того, чтобы определить runlevel по умолчанию, init ищет строку с ключевым словом initdefault
:
id:5:initdefault:
Для этого случая init знает
, что по умолчанию runlevel 5. Кроме того он знает, что для входа в runlevel 5,
он должен запустить команду
:
l5:5:wait:/etc/rc.d/rc 5
Как вы могли заметить
, синтаксис каждого runlevel одинаков.
init также отвечает за перезагрузку
(respawn) некоторых программ, которые являются единственным процессом
, способным к перезапуску. Это случай, например, для всех login программ , которые запускаются в каждой из
6-ти виртуальных консолей.
2
. Для второй виртуальной консоли это выглядит так:
2:2345:respawn:/sbin/mingetty tty2 11.2.
Режимы Выполнения
(runlevels)
Все файлы
, имеющие отношение к загрузке находятся в каталоге /etc/rc.d. Вот список файлов:
$ ls /etc/rc.d init.d/
rc.local*
rc0.d/
rc2.d/
rc4.d/
rc6.d/
rc*
rc.sysinit*
rc1.d/
rc3.d/
rc5.d/
В начале
, как мы видим, запускается файл rc.sysinit. Этот файл отвечает за установки базовой конфигурации машины
: тип клавиатуры, конфигурация некоторых устройств, проверка файловой системы и т
.д.
Затем запускается скрипт rc
, с желаемым номером runlevel в качестве аргумента. Как мы видим, runlevel это простое целое число
, и для каждого runlevel имеется соответствующий rc.d каталог. В обычной инсталляции
Mandrake Linux вы можете увидеть
6 определенных runlevel:

0: полная остановка машины;

1:
single-user (однопользовательский) режим; используется в случае серьезных проблем или для восстановления системы
;
1.
Теперь вы видите
, что размещение /sbin на отличной от корневой файловой системе - очень плохая идея :-)
2.
Таким образом
, вы можете, если нужно, добавлять или удалять виртуальные консоли, максимум до 64, изменяя этот файл и следуя синтаксису
. Но не забудьте, что X тоже запускается в виртуальной консоли! Так что оставьте хотя бы одну для него
63

Глава
11. Файлы Загрузки: init sysv

2: multi-user (многопользовательский) режим, без поддержки сети;

3: Мulti-user (многопользовательский) режим с поддержкой сети;

4: неиспользуемый;

5: такой же как и 3, но, кроме всего, запускает графический интерфейс для входа в систему (login);

6: перезагрузка.
Давайте посмотрим
, например, на содержимое каталога rc5.d:
$ ls rc5.d
K15postgresql@
K60atd@
S15netfs@
S60lpd@
S90xfs@
K20nfs@
K96pcmcia@
S20random@
S60nfs@
S99linuxconf@
K20rstatd@
S05apmd@
S30syslog@
S66yppasswdd@
S99local@
K20rusersd@
S10network@
S40crond@
S75keytable@
K20rwhod@
S11portmap@
S50inet@
S85gpm@
K30sendmail@
S12ypserv@
S55named@
S85httpd@
K35smb@
S13ypbind@
S55routed@
S85sound@
Как вы видите
, все файлы в этом каталоге это символические ссылки, и все они имеют специфический вид.
Их общий вид такой
:

S обозначает
Start сервиса, а K обозначает Kill (остановку) сервиса. Скрипты запускаются в возрастающем порядке номеров
, а если два скрипта имеют одинаковый номер, тогда действует алфавитный порядок.
Мы также видим
, что каждая символическая ссылка указывает на соответствующий скрипт в каталоге
/etc/rc.d/init.d
(кроме local), скрипт, который отвечает за контроль особого сервиса.
Когда система отправляется в заданный runlevel, все начинается с запуска K ссылок в таком порядке: rc ищет куда указывает ссылка
, затем вызывает соответствующий скрипт с одним аргументом stop. Затем запускаются S скрипты
, используя тот же метод, не учитывая того факта, что скрипт вызван с аргументом start
Итак
, не учитывая всех остальных скриптов, мы можем видеть, что когда система переходит в runlevel
5, сначала запускается K15postgresql, то есть /etc/rc.d/init.d/postgresql stop. Затем K20nfs, затем
K20rstatd
, и так до последнего; потом, запускаются все S скрипты: первым S05apmd, который вызывает
/etc/rc.d/init.d/apmd start
, и так далее.
Вооружившись всем этим
, вы можете создать свой собственный целый runlevel за несколько минут, или предотвратить запуск или остановку сервиса путем удаления соответствующей символической ссылки
(есть также программы с интерфейсом для выполнения этого, в особенности drakxservices и chkconfig ;
бывшая графическая программа
)
64

Глава
12. Сборка и инсталляция свободного програмного обеспечения
Меня часто спрашивают о том
, как установить свободное программное обеспечение из исходников
1
. Сам процесс компилирования программного обеспечения действительно прост
, так как действия, необходимые для этого
, обычно одинаковы, независимо от того, какое программное обеспечение вы устанавливаете. Цель этого документа состоит в том
, чтобы провести новичка шаг за шагом и объяснять ему значение каждого перемещения
. Я предполагаю, что читатель имеет минимальные знания по использованию системы UNIX
(например о том, как использовать команды ls или mkdir).
Это руководство является просто руководством
, но ни как не справочником. Именно поэтому в конце приведено несколько ссылок
, по которым вы можете найти ответы на вопросы, которые у вас могут возникнуть по ходу чтения этого раздела
. Разумеется, это руководство может быть улучшено, поэтому любые замечания и исправления по его содержанию принимаются
12.1.
Введение
Различие между свободным программным обеспечением и коммерческим программным обеспечением состоит в доступности исходников
2
. Это значит, что свободное программное обеспечение поставляется как архив файлов исходного кода
. Это может смутить новичков, так как перед тем, как использовать свободное программное обеспечение
, его прийдется откомпилировать.
Большинство свободного программного обеспечения существует в откомпилированном виде
. Вы можете просто установить пре
-компилированные бинарники
3
Некоторое свободное программное обеспечение не распространяется в виде бинарников
. Кроме того, если вы используете экзотическую операционную систему или экзотическое
“железо” - многие программы будут доступны только в виде исходников.
Более того
, компилируя программное обеспечение самостоятельно, вы можете отключить ненужные вам опции или наоборот
, включить только интересующие вас, или даже расширить функциональность компилируемой программы в соответствии со своими нуждами
12.1.1. Требования
Для сборки программного обеспечения вам потребуются
:

компьютер с работающей операционной системой
,

базовые знания по использованию вашей операционной системы
,

некоторое количество свободного места на вашем диске
,

компилятор
(обычно для языка программирования C ) и архиватор (tar),

некоторое количество провизии
(в особо тяжелых случаях дело может затянуться). Настоящие хакеры едят пиццу
, а не quiches (что-то типа пирога с овощами и мясом).

чего нибудь попить
(из тех же соображений). Настоящие хакеры пьют содовую – и кофеин.

Телефонный номер вашего друга
, который занимается перекомпиляцией ядра каждую неделю,

много терпения для того
, чтобы это сделать!
Компиляция программ из исходников вообщем не представляет проблем
, но в случае, если вы к этому еще не привыкли
, то вас может отпугнуть любое незначительное препятствие.
1.
Словом
“исходник” обозначается понятие “исходный код программы”. Мы вводим этот термин в переводе для того
, чтобы не строить сложных предложений.
2.
Это не совсем верно
, так как некоторое коммерческое программное обеспечение тоже доступно в исходных кодах
. Но в этом случае пользователю запрещается использовать или изменять код коммерческого програмного обеспечения
3.
Словом
“бинарник” обозначается понятие “бинарный файл”, по аналогии с исходником. В данном случае под бинарником подразумевается бинарный файл
, полученный из исходного кода программы путем компиляции. Это понятие мы применяем для упрощения структуры предложений в этой главе
, хотя отдаем себе отчет в том, что это
“жаргонное” выражение.
65

Глава
12. Сборка и инсталляция свободного програмного обеспечения
12.1.2. Компиляция
12.1.2.1. Принципы
Для того
, чтобы транслировать исходный код в бинарный файл, необходимо выполнить компиляцию
(compilation) (обычно это делают из исходных кодов на языках C или C++ , которые являются самыми распространенными языками программирования
(под UNIX ) в сообществе свободного программного обеспечения
). Некоторые свободные программы написаны на языках, которые не требуют компиляции
(например, perl или shell ), но им все-таки обычно необходима некоторая настройка.
Компиляция кода на C выполняется с помощью C компилятора
, чаще всего gcc, это свободный компилятор
, разработанный в рамках проекта GNU (http://www.gnu.org/). Полное компилирование программного продукта
- это комплексная задача, которая включает в себя последовательную компиляцию множества различных исходных файлов
(так проще для программистов - они могут помещать различные части своей работы в отдельных файлах
). Для того чтобы было проще делать такие повторяющиеся операции
, существует утилита с названием make.
12.1.2.2. Четыре шага компиляции
Чтобы понять как происходит компиляция
(между прочим, это поможет в решении возникающих проблем
), вы должны знать четыре шага компиляции. Объект постепенно конвертируется из текстового файла
, написанного на языке, который понятен для квалифицированного человека (то есть язык C ), в язык
, который понятен для машины (или в некоторых случаях, частично, для очень квалифицированного человека
). gcc выполняет последовательно четыре программы, каждая из которых делает один из упомянутых шагов
:
1. cpp: На первом шаге происходит замена директив условной компиляции на чистые инструкции C .
Это называется препроцессором
( preprocessor). Как правило, это вставка заголовков (#include) или определение макрокоманд
(#define). В конце этой стадии генерируется чистый код на C .
2. cc1 : На этом шаге код на C конвертируется в код на языке ассеблера
(assembly language).
Сгенерированный код зависит от конечной архитектуры
3. as: На этом шаге происходит генерация кода из языка ассемблера в объектный код


Поделитесь с Вашими друзьями:
1   ...   4   5   6   7   8   9   10   11   12


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал