Cmdline linux что это

Cmdline linux что это

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Процессы в Linux


автор Sandeep Grover

Sandeep Grover работает в Magma Design Automation, India — быстроразвивающейся EDA (Electronic Design Automation) компании. В свободное время занимается изучением устройства ОС Linux и надеется в будущем поучаствовать в разработке ядра этой операционной системы!

Перевод на Русский:
Pukhlyakov Kirill

Содержание:

  • Виртуальная файловая система /proc
  • Монтирование файловой системы /proc
  • Просмотр файлов /proc
  • Полезная информация о системе и ядре
  • Информация о процессах
  • Работа с ядром посредством /proc
  • Вывод
  • Список литературы
  • Страница отзывов

О файловой системе /proc

Ядро Linux предоставляет механизм доступа к своим внутренним структурам и позволяет изменять установки ядра во время работы ОС посредством системы /proc. Мы рассмотрим в заметке эту систему касательно архитектуры Intel x86, но основные принципы применимы к ОС 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/ находится информация о доменном имени и host имени, которую Вы можете изменить.

Таким образом изменив файл в файловой системе /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.

  • /proc/loadavg: Родственный файл, показывает среднюю загруженность процессора; его информация включает: использование CPU за последнюю минуту, за последние 5 минут, и за последние 10 минут, а также число текущих в настоящий момент процессов.
  • /proc/stat: Также выдает статистику, но относящуюся к предыщей загрузке машины.
  • /proc/uptime: Коротенький файл, содержащий два числа: сколько секунд машина работала, и сколько секунд простаивала.
  • /proc/devices: Показывает все, на данный момент сконфигурированные и загруженные, character и block устройства. /proc/ide и /proc/scsi содержат информацию о IDE и SCSI устройствах.
  • /proc/ioports: Содержит информацию о портах ввода/вывода (I/O communications) используемых этими устройствами.
  • /proc/dma: Показывает используемые Direct Memory Access каналы.
  • /proc/filesystems: Сообщает, какие файловые системы поддерживаются вашим ядром. Кусочек этого файла может выглядеть следующим образом:

    Первая колонка сообщает, смонтирована ли файловая система на блочное устройство. В моем случае смонтированы разделы, отформатированные в ext2 и ext3

  • /proc/mounts: Перечисляет все точки монтирования, используемые в вашей машине (вывод этого файла весьма смахивает на /etc/mtab). Аналогично, /proc/partitions и /proc/swaps показывают все разделы и все пространства подкачки (swap space).
  • /proc/fs: Если экспортируете файловые системы при помощи NFS , то эта директория содержит, среди своих многочисленных субдиректорий и файлов, файл /proc/fs/nfsd/exports, который показывает файловую систему открытую для доступа, и права такового доступа.
  • /proc/net: Служит для хранения сетевой информации. Описание всех файлов в этой директории займет слишком много места, скажем лишь, что она содержит /dev (каждое сетевое устройство), несколько iptables (файрволов), относящиеся к ним файлы, статистику сетей и сокетов, информацию о беспроводной связи и многое другое.
  • Еще там находятся несколько файлов, имеющих отношение к оперативной памяти. я уже упоминал /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 содержит полную детализированную информацию о внутренней «интимной» деятельности Линукс и позволяет производить тонкую настройку многих аспектов ее конфигурации. Если не пожалеть времени на изучение возможностей этой директории, вы сможете улучшить свою машину. А это ли не то, чего мы все хотим?

    Источник

    Читайте также:  Msi webcam driver windows 10
    Оцените статью