@waltaki

Что представляет из себя директория /proc, /tmp?

Здравствуйте.

У меня ряд вопросов, насчёт этого.

1) Если /proc не хранит информация не на диске, не в рам - то где вообще? Не понимаю(
2) Например я в bash. Возможно ли как-то получить мой вывод, смотря в папку /proc процесса bash?
3) Если папка /tmp хранится в ОЗУ, могу ли я там хранить свои временные файлы для мгновенного доступа?

4) Как можно реализовать подобное: Есть файл, в который постоянно пишется информация, чтобы он не занимал много места, я ставлю условный лимит в 10000кб, когда файл начинает весить больше, то разница будет стёрта из начала файла. Например файл (огр. в 10байт): f.test
1234567890
Я например в него пишу echo 10 >> f.test,
теперь в файле:
3456789010
Такое возможно реализовать, без крон задач?

Подскажите, просто интересно))
  • Вопрос задан
  • 2561 просмотр
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
1) Если /proc не хранит информация не на диске, не в рам - то где вообще? Не понимаю(

/proc это вообще абстракция. Ядро системы знает какие процессы сейчас запущены и хранит это в памяти. А в /proc визуализирует это, предоставляя некий интерфейс в виде "все есть файл". Просто нужно понимать, что это не ext2/ext3/ext4 эмулируемый в памяти, это именно procfs

2) Например я в bash. Возможно ли как-то получить мой вывод, смотря в папку /proc процесса bash?

да, можете подключиться к вашему stdout, который собственно/proc/<PID>/fd/1
можно посмотреть как вы подключились и куда смотрит ваш /proc/<PID>/fd/1 (скорее всего в какой-нить /dev/pts/0) и оттуда тоже смотреть.

3) Если папка /tmp хранится в ОЗУ, могу ли я там хранить свои временные файлы для мгновенного доступа?

Да. Только нужно помнить, что tmpfs не ограничен, то есть чем больше туда кладешь, тем меньше свободного ОЗУ остается

4) Как можно реализовать подобное: Есть файл, в который постоянно пишется информация, чтобы он не занимал много места, я ставлю условный лимит в 10000кб, когда файл начинает весить больше, то разница будет стёрта из начала файла.

Нужно понимать, что стереть 10 байт из начала файла нельзя, потому что нужно сдвинуть содержимое всего файла. Другими словами - файл целиком придется перезаписать.
Поэтому применяют другой способ - log rotate - когда идет запись в файл, проверяется его размер. Если он превысил значение, файл переименовывается (например в file.log.1) и открывается новый файл file.log
Можно контролировать сколько файлов может быть в списке и не забывать переименовываьт все файлы, чтобы они соответствовали порядку. Но этим нужно заниматься тому, кто пишет в файл.
Ответ написан
@Karpion
tmpfs обычно хранится в оперативке, но при нехватке памяти может свопиться на диск. Главное её свойство - это отсутствие транзакционных методов работы, необходимых нормальной файловой системе - это даёт скорость, а надёжность там не нужна, ибо при ребуте она чистится.
Хранить там свои файлы - можно и нужно. Но надо помнить: "при ребуте она чистится".

procfs не хранится нигде, а генерится на лету. Поясняю очень приблизительно:

Когда команда ls смотрит обычную файловую систему (обращается в директории, которую обслуживает обычная файловая система), то драйвер файловой системы читает некое хранилище - обычно HDD/SSD. И там лежат имена файлов - их можно найти программой типа diskedit (если Вы заете, что это такое).

Когда команда ls смотрит корень procfs - то драйвер procfs не читает никаких носителей, а запускает внутри себя команду ps (любители корректных формулировок сейчас закидают меня тапками). ps читает список запущенных процессов (который, вообще-то, хранится в памяти - в данных ядра) и передаёт его драйверу procfs. А драйвер procfs на основе этой информации формирует список номеров процессов.

Если команда ls смотрит в поддиректорию procfs - то драйвер procfs берёт информацию из данных ядра конкретно про этот процесс; эта информация тоже лежит в памяти, тоже в данных ядра.

Собственно, разница в том, что драйвер обычной файловой системы читает данные как они лежат - потому делает это строго в монопольном режиме, никто другое не имеет права их трогать. А драйвер procfs работает с данными, которые ядро в любой момент может поменять - и потому не читает их из места хранения, а запрашивает через "кладовщика" - через того же, через кого эти данные запрашивает программа ps и её "родственники".

А есть ещё одна интересная файловая система: devfs для директории /dev ...
Ответ написан
Комментировать
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
1)в озу tmpfs
2)не понял вопроса
3)можешь,если есть права
4)а вот это не знаю/не умею ,будет срать в в своп,и если винт не ssd то будут тормоза
у меня /tmp и кеш браузера смонтирован в оперативку
Ответ написан
@Vitsliputsli
1) в /proc обычно монтируют виртуальную файловую систему дающую доступ к различной информации и ресурсам, предоставляемым ядром.
2) можно, при наличии прав, смотрите устройства tty, или что-то вроде этого.
3) можете при наличии прав.
4) лимиты операционной системы и файловой системы не контролируют содержимое файлов. Но в зависимости от задачи, можно решить, например, с помощью pipe, или ротацией.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы