- Cmdline linux что это
- О файловой системе /proc
- Виртуальная файловая система /proc
- Монтирование файловой системы /proc
- Просмотр файлов /proc
- Полезная информация о системе и ядре
- Информация о процессах
- Работа с ядром посредством /proc
- Вывод
- Linux.yaroslavl.ru
- Глава 10. Файловая Система /proc
- Информация о Процессах
- Cmdline linux что это
- Откройте для себя возможности директории /proc
- Организация директории /proc
- Что внутри процесса?
- Тонкая настройка системы: /proc/sys
- Заключение
Cmdline linux что это
Библиотека сайта rus-linux.net
На главную -> MyLDP -> Тематический каталог -> Процессы в Linux
автор Sandeep Grover Sandeep Grover работает в Magma Design Automation, India — быстроразвивающейся EDA (Electronic Design Automation) компании. В свободное время занимается изучением устройства ОС Linux и надеется в будущем поучаствовать в разработке ядра этой операционной системы! Перевод на Русский: Содержание:
|
Виртуальная файловая система /proc
Файловая система /proc является механизмом для ядра и его модулей, позволяющим посылать информацию процессам ( отсюда и название /proc ). С помощью этой виртуальной файловой системы Вы можете работать с внутренними структурами ядра, получать полезную информацию о процессах и изменять установки ( меняя параметры ядра ) на лету. Файловая система /proc располагается в памяти в отличие от других файловых систем, которые располагаются на диске. Если Вы посмотрите на файл /proc/mounts ( он выводит список всех подмонтированных файловых систем подобно команде «moount» ) то увидите что-нибудь типа :
/proc контролируется ядром. Из-за того, что она предоставляет информацию контролируемую ядром, логично, что она располагается в памяти, контролируемой также ядром. Команда «ls -l» покажет, что большинство файлов в этой системе имеют нулевую длину, но посмотрев любой файл Вы получите достаточно информации. Как это может быть? Все просто — файловая система /proc как любая другая файловая система регистрируется на уровне VFS ( Virtual File System layer ). Поэтому при запросе файлов/каталогов, файловая система /proc создает эти файлы/каталоги на основании информации, содержащейся в ядре.
Монтирование файловой системы /proc
Если /proc еще не подмонтирована — Вы можете сделать это следующим образом:
mount -t proc proc /proc
Более детальную информацию Вы получите прочитав man mount.
Просмотр файлов /proc
С помощью файлов в /proc Вы можете получить информацию о состоянии ядра, процессов, параметрах компьютера и т.д. Большинство файлов в /proc содержат самую свежую информацию о системном оборудовании. Несмотря на то, что эти файлы виртуальные — их можно просмотреть любым текстовым редактором или с помощью команд «more», «less» или «cat». При попытке открытия виртуального файла текстовым редактором — этот файл создается на лету на основе информации, содержащейся в ядре. Приведу здесь некоторые интересные цифры о моей системе:
Это двухпроцессорная система. В некоторых файлах файловой системы /proc информация закодирована, однако некоторые утилиты приспособлены к этому — они выводят ее в виде понятном человеку. К этим утилитам относятся: «top», «ps», «apm» и т.д.
Полезная информация о системе и ядре
Перечислим некоторые важные файлы:
- /proc/cpuinfo — информация о процессоре ( модель, семейство, размер кэша и т.д.)
- /proc/meminfo — информация о RAM, размере свопа и т.д.
- /proc/mounts — список подмонтированных файловых систем.
- /proc/devices — список устройств.
- /proc/filesystems — поддерживаемые файловые системы.
- /proc/modules — список загружаемых модулей.
- /proc/version — версия ядра.
- /proc/cmdline — список параметров, передаваемых ядру при загрузке.
На самом деле файлов в каталоге /proc намного больше. Вы можете детально просмотреть все файлы в /proc командами «more» и read [1]. Советую Вам использовать «more» вместо «cat» потому, что некоторые файлы ( например kcore ) могут быть очень большого размера.
Информация о процессах
Файловая система /proc служит также источником информации о выполняющихся процессах. Если Вы внимательно посмотрите внутрь каталога /proc, то увидите каталоги, названия которых состоят из цифр — это и есть информация о процессах — название каталога отражает идентификатор процесса ( PID ). Внутри этих каталогов находятся файлы, содержащие важную информацию о процессах — состояние, окружение и т.д. Давайте посмотрим на какой-нибудь процесс:
Выполненная нами команда показывает, что в системе присутствует процесс mozilla, его PID 32558. Соответственно в каталоге /proc должен быть каталог с названием 32558.
В файле «cmdline» содержится информация, которой был запущен процесс. В файле «environ» находятся переменные окружения этого процесса, а также идентификатор пользователя ( UID ) и группы ( GID ) запустившего процесс, идентификатор родительского процесса ( PPID ) и текущее состояние процесса ( например «Sleeping» или «Running» ). Также в подобных каталогах находятся символические ссылки: «cwd» — ссылка к текущему рабочему каталогу процесса, «exe» — исполняемый файл процесса, «root» — ссылка к каталогу, который считается процессом корневым ( обычно это «/» ). В каталоге «fd» находятся ссылки к используемым дескрипторам файлов процессом. «cpu» доступен только на SMP ядрах Linux.
/proc/self интересный подкаталог — с его помощью приложение найдет информацию о себе. На самом деле /proc/self является символической ссылкой на каталог процесса обращающегося к /proc.
Работа с ядром посредством /proc
Большинство из рассмотренных нами файлов из каталога /proc доступны только на чтение. Тем не менее файловая система /proc предоставляет файлы для взаимодействия с ядром доступные на запись. Помещение информации в такие файлы изменяет состояние ядра и поэтому это надо делать очень аккуратно. Эти файлы нахдятся в каталоге /proc/sys.
В каталоге /proc/sys/kernel находится информация общего плана для ядра. Соответственно в /proc/sys/kernel/
Таким образом изменив файл в файловой системе /proc мы можем поменять hostname. Много данных для настройки находится в /proc/sys/kernel/. Повторюсь, невозможно в заметке рассмотреть все файлы, думаю Вам самим будет интересно повнимательней посмотреть на эти каталоги.
Еще один интересный каталог /proc/sys/net . В нем Вы можете произвести сетевые настройки, например спрятать Ваш компьютер в сети.
Запретив ответы на icmp_echos мы спрятали компьютер. Наша машина не будет отвечать на команды «ping» других компьютеров.
Вернуть прежнее состояние можно следующим образом
В каталоге /proc/sys еще много возможностей для настройки системы. Более подробная информация находится в [1] и [2].
Вывод
Файловая система /proc обеспечивает файловый интерфейс к внутренним структурам Linux. С ее помощью можно узнать полезную информацию и настроить систему. Знание этой файловой системы и умение применить эти знания — большой плюс в работе с ОС Linux.
Источник
Linux.yaroslavl.ru
Глава 10. Файловая Система /proc | ||
---|---|---|
Пред. | Часть II. Глубины Linux | След. |
Глава 10. Файловая Система /proc
Файловая система /proc является особой для GNU/Linux. Это виртуальная файловая система и она не занимает места на вашем диске. Это очень удобный способ получить информацию о системе, тем более, что большинство файлов в этом каталоге читаемы для человека (ну хорошо, с небольшой помощью). Большинство программ реально получают информацию из файлов в /proc, форматируют их своим способом, а затем отображают. Так делают все программы, которые отображают информацию о процессах, и некоторые из них мы уже видели (top, ps и сотоварищи). /proc это также хороший источник информации о ваших аппаратных средствах, и таким же образом некоторые программы являются только интерфейсами к информации, содержащейся в /proc.
Существует также специальный подкаталог /proc/sys. Он позволяет изменять некоторые параметры ядра в реальном режиме времени или отображать их.
Информация о Процессах
Если вы пролистаете содержимое каталога /proc, вы увидите много каталогов, названиями которых являются номера. Эти каталоги содержат информацию о все запущенных в данный момент процессах в системе:
Имейте в виду, что как пользователь, вы можете увидеть информацию только о своих собственных процессах. Для других пользователей вы такой информации не получите. Поэтому перейдем в root и посмотрим какая информация доступна для процесса 127:
Каждый каталог содержит одинаковые входы. Вот краткое описание некоторых из них:
cmdline: этот (псевдо-) файл содержит целую командную строку, использованную для вызова процесса. Он не отформатирован: нет пробелов между программой и ее аргументами, и нет разделителя в конце строки. Чтобы посмотреть его, вы можете использовать: perl -ple ‘s,\00, ,g’ cmdline.
cwd: это символическая ссылка на текущий рабочий каталог (следует из имени) процесса.
environ Этот файл содержит все переменные окружения, определенные для процесса, в форме VARIABLE=value. Подобно cmdline, вывод не форматирован вообще: нет разделителей между различными переменными, и нет разделителя в конце. Единственное решение как его посмотреть: perl -pl -e ‘s,\00,\n,g’ environ.
exe: это символическая ссылка на соответствующий запущенному процессу выполняемый файл.
fd: этот подкаталог содержит список файловых дескрипторов, открытых процессом в данный момент. Смотрите ниже.
maps: когда вы выводите содержимое именованной трубы (с помощью cat, например), вы можете видеть части адресного пространства процесса, которые в текущий момент отображаются в файле. Слева направо это поля: адресное пространство, связанное с этим отображением, права отображения, смещение с начала файла, где начинаются отображения, страший и младший номер (в шестнадцатиричном формате) устройства, где хранится файл отображения, номер узла файла и, последнее, имя файла. Когда устройство обозначено как 0 и нет номера узла и имени файла — это анонимное отображение. Смотрите mmap(2).
root: Это символическая ссылка на корневой каталог, используемый процессом. Обычно это будет /, но посмотрите chroot(2).
status: этот файл содержит различную информацию о процессе: название выполняемой программы, его текущее состояние, его PID и PPID, его реальные и эффективные UID и GID, использование им памяти, и другое.
Если мы выведем список каталога fd для нашего процесса 127, мы получим следующее:
Фактически, это список файловых дескрипторов, открытых процессом. Каждый открытый дескриптор обозначен символической ссылкой, именем каждого номера дескриптора, и указателем на файл, открытый этим дескриптором. [21] . Обратите также внимание на права symlinks: это — единственное место, где они имеют смысл, поскольку они представляют права, с которыми файл, соответствующий дескриптору, был открыт.
[21] Если вы помните, что рассказывалось в разделе “Переназначения и Каналы”, вы знаете, что обозначают дескрипторы 0, 1 и 2.
Источник
Cmdline linux что это
Библиотека сайта rus-linux.net
Откройте для себя возможности директории /proc
Оригинал: Discover the possibilities of the /proc directory
Автор: Federico Kereki
Дата: 15 февраля 2008
Свободный перевод: Алексей Дмитриев
Дата перевода: 2 марта 2008
Директория /proc — это странный «зверь». В действительности он не существует, хотя его можно использовать. Его файлы нулевой длины не являются ни двоичными, ни текстовыми, и все же их можно исследовать и выводить на экран. Эта своеобразная директория содержит все детали вашей Линукс-системы, включая ядро, процессы, и параметры конфигурации. Изучая директорию /proc, вы узнаете как работают команды Линукс, и даже сможете решить некоторые административные задачи.
В мире Линукс все является файлом; даже с устройствами обращаются как с файлами (в директории /dev). Хотя вы можете думать, будто «нормальные» файлы бывают либо двоичными, либо текстовыми (ну, возможно, еще файлы устройств, или конвейеров), в директории /proc содержатся файлы странного типа: виртуальные файлы. Эти файлы перечислены в списке, но не существуют на диске, операционная система создает их «на лету», когда вы пытаетесь прочитать их.
Большинство виртуальных файлов всегда датированы текущим временем, что свидетельствует об их постоянном обновлении. Сама директория /proc создается заново каждый раз, когда вы загружаете машину. Чтобы иметь возможность исследовать всю директорию, вам необходимо заручиться правами суперпользователя; некоторые файлы (относящиеся к процессам) принадлежат пользователю, запустившему процесс. И почти все файлы доступны только для чтения, немногие открытые для записи позволяют изменять параметры ядра (в основном в директории /proc/sys). Ясное дело, что нужно быть предельно внимательным, изменяя эти параметры.
Организация директории /proc
Директория /proc состоит из виртуальных каталогов и подкаталогов, в которых группируются файлы сходных типов. Работая как суперпользователь, введите команду:
и получите список, вроде вот такого:
Ресурсы для изучения директории /proc
Поиски документации по файловой системе /proc могут стать утомительным делом, так как она разбросана по всем исходникам ядра. Просматривая директорию /usr/scr/linux/Documentation, я нашел файл proc.txt, который содержит множество информации, к сожалению, несколько устаревшей — последнее обновление было в ноябре 2000 года, когда только вышла версия ядра 2.4.0. Но все равно, бродить по директории проще, чем просматривать исходные файлы на языке Си. Вы можете найти даже больше, чем хотели; например, мне попался файл laptop-mode.txt, длиной почти в 1000 строк, посвященный исключительно единственному файлу /proc/sys/vm/laptop_mode.
Пронумерованные директории (позже мы к ним вернемся) соответствуют каждому процессу, протекающему в системе, специальная символическая ссылка self указывает на текущий процесс. Некоторые из виртуальных файлов содержат информацию о «железе», в частности /proc/cpuinfo, /proc/meminfo и /proc/interrupts. Другие файлы несут информацию о файловых системах, например /proc/filesystems или /proc/partitions. Файлы в директории /proc/sys относятся к параметрам конфигурации ядра, как мы увидим позже.
Команда: # cat /proc/meminfo
выведет на экран нечто вроде:
Если вы попробуете ввести команды top или free , вы, без сомнения, встретите знакомые номера процессов. Собственно говоря, многие хорошо известные утилиты получают свою информацию именно из директории /proc. Скажем, вы желаете узнать версию вашего ядра — можете набрать uname -srv , либо перейти в источнику этих данных и набрать cat /proc/version .
Вот еще интересные файлы:
- /proc/apm: Содержит информацию про Advanced Power Management , если таковой установлен.
- /proc/acpi: Похожая директория, содержащая массу информации по более современному Advanced Configuration and Power Interface . Например, чтобы выяснить, подключен ли ваш ноутбук к розетке, можете применить команду: cat /proc/acpi/ac_adapter/AC/state , чтобы получить ответ: «on line» или «off line.»
- /proc/cmdline: Показывает параметры, переданные ядру при загрузке. В моем случае это: root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi , что сообщает мне, какой раздел диска является корневым, какой режим VGA используется, и прочее. Последний параметр относится к openSUSE’s System Configuration Profile Management .
- /proc/cpuinfo: Содержит информацию о процессоре вашей машины. На моем ноутбуке, команда cat /proc/cpuinfo выдает листинг, начинающийся с:
Это означает, что у меня один процессор, за номером 0, семейства 80686 ( 6 в графе cpu family соответствует среднему знаку числа 80636): AMD Athlon XP, работающий на частоте чуть меньше 1GHz.
Первая колонка сообщает, смонтирована ли файловая система на блочное устройство. В моем случае смонтированы разделы, отформатированные в ext2 и ext3
Еще там находятся несколько файлов, имеющих отношение к оперативной памяти. я уже упоминал /proc/meminfo, но вы увидите также /proc/iomem, который показывает, как оперативная память используется в вашей машине, и /proc/kcore, представляющий физическую память машины. В отличие от большинства других виртуальных файлов, /proc/kcore имеет размер, равный вашей оперативной памяти плюс еще немного. (Не пытайтесь просмотреть этот файл при помощи команды cat , так как его содержимое — двоичный код, который перемешает все на вашем экране). И, наконец, еще остается множество файлов и директорий, имеющих отношение к аппаратной части (железу) компьютера. Это и /proc/interrupts и /proc/irq, /proc/pci (все про PCI устройства), /proc/bus и прочие; все они содержат весьма специфичную информацию, которая не интересна большинству пользователей.
Что внутри процесса?
Как я уже говорил, директории с номерными именами представляют все текущие процессы. Когда процесс заканчивается, его субдиректория в директории /proc автоматически исчезает. Если вы откроете эти директории, пока они еще существуют, внутри вы обнаружите множество файлов, таких как:
Давайте рассмотрим наиболее важные файлы:
- cmdline: Содержит команду, запустившую процесс, со всеми своими параметрами.
- cwd: Содержит симлинк на текущую работающую директорию (current working directory — CWD), ссылку на исполняемый файл процесса, и ссылку на его корневую директорию.
- environ: Содержит все переменные среды окружения для данного процесса.
- fd: Содержит все файловые дескрипторы для данного процесса, показывая, какие файлы или устройства процесс задействует.
- maps, statm, and mem: Относятся к памяти задействованной в процессе.
- stat and status: Содержит информацию о статусе процесса.
Все вышеперечисленные файлы позволяют проводить некоторые исследования при помощи скриптового программирования. Например, если вы хотите отловить некий zombie (зомби) процесс , вы можете просканировать все номерные директории, и проверить, появляется ли «(Z) Zombie» в /status файле. Мне однажды пришлось проверять, была ли запущена некая программа; я проводил сканирование, но отслеживал вместо этого файлы /cmdline, пытаясь найти желаемую строку. (То же самое можно проделать, работая в выводом команды ps , но обсуждение этого выходит за рамки настоящей статьи). А уж если вы решите спрограммировать более удобную команду top , то вся необходимая информация прямо у вас в руках.
Тонкая настройка системы: /proc/sys
Директория /proc/sys не только содержит информацию о системе, она еще позволяет изменять параметры ядра «на лету», а также активировать или отключать свойства. (Нет сомнения, что это может оказаться вредоносным для вашей системы — считайте, что я вас предупредил!)
Чтобы определить, можно ли редактировать файл, или же он является файлом «только для чтения», воспользуйтесь командой ls -ld ; если файл имеет «W» атрибут, значит его можно каким-то образом использовать для конфигурации ядра. Для примера, вывод команды ls -ld /proc/kernel/* начинается примерно так:
Можно видеть, что файл bootloader_type не может быть изменен, а все остальные — могут. Для того, чтобы редактировать файл, применяйте команду типа: echo 10 >/proc/sys/vm/swappiness . Данный конкретный пример позволит вам подстроить виртуальную память в области страничной подкачки. Кстати, все эти изменения носят временный характер, их эффект исчезнет при перезагрузке. Чтобы произвести постоянные изменения воспользуйтесь командой sysctl и файлом /etc/sysctl.conf.
Давайте оглядим директории /proc/sys с высоты «птичьего полета».
- debug: Содержит (удивительно!) отладочную информацию. Хорошо для тех, кто занимается разработкой ядра.
- dev: Содержит параметры специфических устройств в вашей системе. Для примера просмотрите директорию /dev/cdrom.
- fs: Предлагает информацию по всем возможным аспектам файловой системы.
- kernel: Позволяет напрямую влиять на конфигурацию и работу ядра.
- net: Позволяет контролировать сетевые аспекты. Будьте осторожны, в случае ошибки вы потеряете связь с сетью!
- vm: Имеет дело с подсистемой VM (виртуальной памяти).
Заключение
Специфическая директория /proc содержит полную детализированную информацию о внутренней «интимной» деятельности Линукс и позволяет производить тонкую настройку многих аспектов ее конфигурации. Если не пожалеть времени на изучение возможностей этой директории, вы сможете улучшить свою машину. А это ли не то, чего мы все хотим?
Источник