Интересные обсуждения
темы заинтересовавшие velkin
Стандарт иерархии файловой системы
14.12.2025
|
Лазар Бешкенадзе
|
Мне тут предложили файл конфигурации хранить в /usr/local/etc/, временные файлы в /tmp/myapp/ или /var/tmp/myapp/. Как я понимаю в этом раскладе исполняемый файл должен идти в /usr/local/bin/.
Мне это все очень не нравится и я решил все свои файлы держать, как принято в Windows, в одной директории. Пусть это будет /usr/local/myprog/. Более того, исполняемый файл я назвал myprog.exe. В своем решении я опираюсь на это:
https://man.freebsd.org/cgi/man.cgi?query=hier&sektion=7&format=html
Пока что полет нормальный но что-то niggles at the back of my mind — где-то получу проблемы. Вопрос где и какие?
-
Мне это все очень не нравится и я решил все свои файлы держать, как принято в Windows, в одной директории. Пусть это будет /usr/local/myprog/. Более того, исполняемый файл я назвал myprog.exe. В своем решении я опираюсь на это:
https://man.freebsd.org/cgi/man.cgi?query=hier&sektion=7&format=html
The actual hierarchy on a given system is defined at the system administrator's discretion.
Пока что полет нормальный но что-то niggles at the back of my mind — где-то получу проблемы. Вопрос где и какие?
-
| 14.12.2025 11 комментариев |
ЛБ>Пока что полет нормальный но что-то niggles at the back of my mind — где-то получу проблемы. Вопрос где и какие?
Для начала давай поймем вот что. Ты написал программу для личного использования и разложил её таким необычным образом? Ты собираешься распространять эту программу? Это чья-то готовая программа, которую ты таким образом поставил на свою систему?
От проясняния этих вопросов зависит дальнейший ход рассуждений.
Pzz>Ты написал программу для личного использования и разложил её таким необычным образом?
Разрабатываю я и сейчас подключается один мой друг. Возможно подключится еще один.
Pzz>Ты собираешься распространять эту программу?
Никто распространять не собирается.
Расклад как в Windows позволяет на одном компьютере держать три версии, одну stable — /usr/local/myprog/ для проходимцев из Internet, и две в разработке /home/user1/myprog/ и /home/user2/myprog/. Каждая слушает на своем порту номер которого берется из ./myprog.conf.
-
ЛБ>Расклад как в Windows позволяет на одном компьютере держать три версии, одну stable — /usr/local/myprog/ для проходимцев из Internet, и две в разработке /home/user1/myprog/ и /home/user2/myprog/. Каждая слушает на своем порту номер которого берется из ./myprog.conf.
Если программой собирается пользоваться ты и твой друг, я вообще не вижу проблем. Делайте, как вам удобно.
Если ты собираешься её распространять, она будет раздражать тем, что необычно разложена. А значит, управляясь с ней, нельзя положиться на стандартные привычки, а надо как-то о ней специально думать. Программа сама по себе должна быть ну очень полезна, чтобы я мог специально думать о ней без раздражения.
Проблемы версионирования могут разрешаться, например, так: /usr/local/myprog/1.0, /usr/local/myprog/1.1, /usr/local/myprog/1.0, /usr/local/myprog/1.1 и т.п.
Я обычно ищу конфигурационный файл где-то по-соседству с исполняемым (с его фактическим расположением). Это позволяет запускать программу прямо из сборочной директории, что удобно и полезно в процессе разработки. Но в поинсталлированной версии конфига не будет рядом с исполняемым файлом, поэтому при штатном использовании это никак не помешает.
Pzz>Если ты собираешься её распространять,
Это не для распространения.
-
Pzz>>Если ты собираешься её распространять,
ЛБ>Это не для распространения.
А почему, кстати, ты ссылаешься на мануал FreeBSD? Всё же, FreeBSD — это сейчас для утончённых ценителей, не массовый рынок.
Pzz>А почему, кстати, ты ссылаешься на мануал FreeBSD? Всё же, FreeBSD — это сейчас для утончённых ценителей, не массовый рынок.
Это разработка под FreeBSD. Мне помнится в разговоре с тобой я объяснял свой выбор:
https://rsdn.org/forum/life/9020951.1
Я не люблю пингвинов. Да, FreeBSD оказалась с проблемами, но пока все удалось обойти.
-
ЛБ>Это разработка под FreeBSD. Мне помнится в разговоре с тобой я объяснял свой выбор:
ЛБ>https://rsdn.org/forum/life/9020951.1
Да, объяснял. Тот разговор не продолжился, а потому и не запомнился.
А не продолжился потому, что мне не хочется устраивать холивар на тему Linux vs FreeBSD. Пустое это занятие.
Но в целом, твоё объяснение выгядит так: линух не люблю, почему не скажу. Из оставшегося выбираю FreeBSD, хоть он и с проблемами.
ЛБ>Пока что полет нормальный но что-то niggles at the back of my mind — где-то получу проблемы. Вопрос где и какие?
на линуксе это мог бы быть источник проблем для selinux, ну или что там во freebsd на этот счёт есть. а так пофиг.
ЛБ>Мне тут предложили файл конфигурации хранить в /usr/local/etc/, временные файлы в /tmp/myapp/ или /var/tmp/myapp/. Как я понимаю в этом раскладе исполняемый файл должен идти в /usr/local/bin/.
ЛБ>Мне это все очень не нравится и я решил все свои файлы держать, как принято в Windows, в одной директории. Пусть это будет /usr/local/myprog/. Более того, исполняемый файл я назвал myprog.exe.
Если хочешь сделать как в Windows, тогда используй папку /opt. Если кратко, то /usr/local это тот же /usr, только для себя. А вот сторонние инсталляторы не из репозиториев и портативные версии копируют в /opt. В /usr будут устанавливаться версии программ, которые пришли из репозиториев в виде пакетов таких как *.deb, *.rpm или других, в зависимости от операционки.
А вот в /usr/local скачивают исходники программы и там их сами компилируют. Это папка не для разработки в ней, а для скачивания исходников и компиляции в ней. Потому /usr/local повторяет структуру папок /usr. Но если делаешь инсталлятор или портативку как в Windows, когда программа должна оказаться как в папке Program Files, то тогда выбирай /opt.
Ну и бла бла бла. Вот тебе выжимка из гугловского ии.
https://www.google.com/ai
Хотя перед этим ещё напишу как я вижу путь к экспертности.
1. Читай книги (например, Таненбаума).
2. Пользуйся выжимками.
Или и то и другое.
Быстрые советы людей сейчас превратились вот в такой вот поиск, вместо тех же форумов с ответами, откуда ии тоже дерёт данные. А для глубокой экспертности нужно читать книги и думать в процессе.
Я к тому, что спрашивать на форуме это уже практически ушло в прошлое. Это долго и неэффективно. Не зря форумы программистов превратились в балабольство ни о чём. Потому что действительно не нужно и джуны тоже понятно почему резко стали не нужны.
Смысл давать мидлам и синьорам задание джунам, когда джуны тупо набъют его в поиске, когда мидлы и синьоры могут сами набить его в поиске. Что типа, джуны нынче такие продвинутые, а мидлы и синьоры идиоты. Вот туда и движется айтишка, не в ..пу как некоторые думают, а в высокую степень экспертности.
для чего нужна папка /opt в unix
для чего нужна папка /usr/local в unix
Но это я как бы давно знаю как пользователь. Но предположим я бы не знал, тогда напрашивается запрос.
в какую папку устанавливать программы в unix
Теперь что касается практики. Тот же Qt как раз установит себя в /opt, как и много других программ. Но файлы конфигурации своей программы на Qt не обязательно должны лежать в папке с программой. Я создавал файлы *.ini из своей программы, и выяснил, что их ещё потом надо удалять при деинсталляции.
А между тем QSettings предлагает хранить настройки в Windows, GNU/Linux, MacOS и Android в разных местах. Для Windows это реестр 32 и 64 битной ветки, а для того же GNU/Linux тоже есть папка у пользователя, ну и так далее.
В общем я веду к тому, что саму программу с библиотеками и ресурсами можно запихнуть в /opt, а настройки можно хранить где-то по умолчанию в другом месте, в котором по крайне мере будет разрешение на запись и что не придётся потом чистить деинсталлятором.
Я сейчас не буду смотреть куда та же QSettings дела у меня файлы настройки, когда не записываешь их принудительно в *.ini в папку с программой, но предположим такой запрос.
в какой папке qsetting хранит настройки в linux
Скорее всего это был $HOME/.config, проверять не буду. Но вряд ли /etc, хотя можно было бы их записывать куда угодно.
Причём заметь, всё это относилось к развёртыванию программ на компьютерах пользователей. А разрабатывать программу можно где-нибудь в $HOME/work (/home/user/work), или примонтированный диск /mnt/data00 можно виндовый, или ещё где.
Но как я уже сказал, посыл моего комментария в том, что по сути всё можно ... думаю ... нагуглить в режиме ии или ещё где. Каких-то особых фишек здесь нет чтобы их расписывать. Советы от случайных людей могут быть ещё и хуже галлюценерации.
V>Если хочешь сделать как в Windows, тогда используй папку /opt.
В своем сообщении я дал ссылку на описание стандартной иерархии в документации — у меня такая. Директории /opt нет и в корне создавать я сам ничего не буду.
-
V>>Если хочешь сделать как в Windows, тогда используй папку /opt.
ЛБ>В своем сообщении я дал ссылку на описание стандартной иерархии в документации — у меня такая. Директории /opt нет и в корне создавать я сам ничего не буду.
/opt это стандарт для распространения из нестандартных пакетов для операционки.
https://ru.wikipedia.org/wiki/FHS
https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
У тебя скорее всего основная операционка для десктопа винда, а юниксы только по работе. Я когда-то годами использовал только основной репозиторий и директория /opt мне была не нужна. Только когда мне стала нужна последняя откомпилированная версия софта, причём с сайта разработчика, а не из репозиториев я и открыл для себя папку /opt, потому что софт ставился туда.
Мораль здесь в том, что /usr/local тоже имеет стандартное предназначение, и /etc тоже имеет стандартное предназначение. Если в /usr/local был make install, то должен быть и make uninstall. Ну и всё в таком роде. Но в целом из исходников установка получается грязной и люди даже в /usr/local рекомендуют сразу компилировать установочные пакеты, которые использует текущая операционка.
В принципе Pzz тебе уже дал ответ делать как удобно, потому что распространять ты не собираешься. Это значит тебе не нужен ни /opt, ни /usr/local. И то что ты намусорил сразу в папке пользователя, а не создал в ней папку /work, /projects или что-то от себя то это тоже твоё дело.
Просто вот такое
ЛБ>Расклад как в Windows позволяет на одном компьютере держать три версии, одну stable — /usr/local/myprog/ для проходимцев из Internet, и две в разработке /home/user1/myprog/ и /home/user2/myprog/. Каждая слушает на своем порту номер которого берется из ./myprog.conf.
не имеет смысла.
Всё это нужно держать в папке с git, или отдельную для проекта, или как у меня общий монорепозиторий для всего. Внутри stable это или тег git, или просто копипаста в какую-нибудь папку версии, или сразу оба. Пример тегов или папок, 0.1, 0.2, 0.3-beta1.
Если другим людям нравится /usr/local, вот пусть и качают твой репозиторий git с твоей программой туда, это их дело. А для тебя важнее должны быть резервные копии в git твоей программы, нежели кто куда это бросает, раз ты всё равно не делаешь пакеты для распространения ни для FreeBSD, ни сторонние.
Но особо не важно, сам потом поймёшь. Я в принципе тоже много лет занимался подобной ерундой, пока не стал более продвинутым пользователем. Прямо как твои советчики, типа давайте кинем исходник в /usr/local. Ого, так ведь в инструкции написано для чего-то там не знаю для чего, но надо.
А сейчас у меня папки больше напоминают то, что видно в проектах на том же sourceforge. Первичен репозиторий git причём где-нибудь на надёжном сервере, потому что операционка на десктопе у тебя без году неделя навернётся и что будешь делать.
Вот ты пишешь, я создам /usr/local/myprog, а не /usr/local/bin, например, в целях тестирования. А вопрос, зачем пользователи сделали папку /usr/local/bin, там же и с названиями программ могут быть пересечения.
А затем, что /usr/bin из коробки внесена в системные пути, то есть программы можно запускать не набирая полный путь. А /usr/local/bin или внесена или может быть внесена вручную. То есть ты не сможешь написать myprog и чтобы у тебя программа запустилась из случайной папки вроде /usr/local/myprog.
Надо будет или создавать ярлык в уже прописанной папке для ярлыков специально для твоей программы, или писать полный путь к программе. Так вот если ты будешь использовать юниксы как десктоп лет десять, то со временем ты поймёшь для чего сделано то или это.
Потому ещё раз повторю, сейчас пока для тебя непонятны все эти ньюансы самое главное храни программу в git, синхронизируй её через сервер. Не дай программе внезапно исчезнуть.
Если хочется понять для чего сделано то или это посмотри команду PATH.
Ну моя практика показывает, что /usr/local/bin может входить, а потом со временем может и не входить. А вот /bin и /usr/bin входят сразу из коробки. Причём всё это можно изменить для текущей консоли когда угодно, да и в целом для операционки.
И раз уж затронута эта тема, то исходник копируется в /usr/local/src, а не в /usr/local. То есть должно быть /usr/local/src/myprog, а после компиляции с помощью make файлы должны распределиться по подпапкам /usr/local, таких как /usr/local/bin и так далее.
А если ты не хочешь соблюдать эту логику, и делаешь /home/user/myprog, тогда озаботься, чтобы был хоть какой-нибудь репозиторий вроде /home/user/myprog/.git и далее можно использовать .gitignore и теневую сборку, то есть непосредственный билд в /home/user/build*-myprog.
Можно, кстати, делать билды и в /usr/local, при том, что она сама может лежать где угодно. В конце концов программа твоя и специально копировать её в /usr/local/src нет смысла. В общем со временем сам поймёшь и документацию будешь читать не формально, а по назначению.
Я вот открыл сейчас твою ссылку.
https://man.freebsd.org/cgi/man.cgi?query=hier&sektion=7&format=html
Где папка /usr/local/src? Теперь я вспоминаю твой комментарий.
ЛБ>В своем сообщении я дал ссылку на описание стандартной иерархии в документации — у меня такая. Директории /opt нет и в корне создавать я сам ничего не буду.
А, ну понятно, значит по твоей логике и /usr/local/src создавать тоже не надо. Я не считаю себя каким-то экспертом, но прочитанные когда-то давно пару статеек на эту тему всё же сделали из меня больше, чем совсем уж новичка. Действуя формально и опираясь на взятый откуда-то ограниченный источник знаний ты придумал /usr/local/myprog.
В чём причина? Ну потому что вот есть документация, о которой неизвестно, что она неполная. И есть желание сделать как в винде. И получатся какая-то ерунда бесполезная как для юниксов, так и для тебя. Потому я и говорю, благодаря поиску с помощью нейронок и книг программисты вступают в эру повышенной экспертности.
Причём экспертность эта самих программистов, а не просто внешних инструментов. Проблема здесь всё та же, Почему программисты прошлого были умнее (26.05.2022). Слишком быстрый перескок на новые технологии в основе которых лежат старые технологии, причём не сложные для понимания, просто их учат не все, или лучше сказать не только лишь все.
Люди сейчас могут запустить продвинутые движки в которых накручено кучу навороченных идей. Там такая запредельная сложность и заметь это у них всё работает без понимания. Но с другой многие часто не знают даже простых идей лежащих в основе каких-нибудь хеллоу ворлдов.