В Windows системный диск C:
имеет каталог program_files
, в котором каждая программа имеет свой собственный каталог.
В линуксе под /usr/
и /usr/local/
есть /bin, /etc, /share, /src
, и т. Д.
Таким образом, в Windows все файлы каждой программы сгруппированы в одном каталоге, в то время как в Linux файлы одного типа из всех программ находятся.
Я чувствую, что способ, которым Windows организует установленные программы, более логичен, чем способ Linux, и поэтому с установленными программами проще управлять вручную.
В чем преимущество того, как Linux организует файлы установленных программ? Спасибо.
У меня есть этот вопрос, когда возникает проблема Как организовать установленные программы в $ HOME для оболочки, чтобы искать их при запуске? где я пытаюсь упорядочить свои программы в $HOME
соответствии с Windows, но у меня есть некоторые проблемы с указанием путей поиска программ.
Ответы:
В Linux разные локации, как правило, в хорошем состоянии отражают некоторую логику. Например.:
/bin
содержит самые основные инструменты (программы)/sbin
содержит самые основные программы администратораОбе они содержат элементарные команды, используемые при загрузке и устранении фундаментальных неисправностей. И здесь вы видите первое отличие. Некоторые программы не предназначены для использования обычными пользователями.
Тогда взгляни
/usr/bin
. Здесь вы должны найти больший выбор команд (программ), обычно более 1000 из них. Они являются стандартными инструментами, но не так важен , как в/bin
и/sbin
./usr/bin
содержит команды, в то время как файлы конфигурации находятся в другом месте. Это разделяет как функциональные объекты (программы), так и их конфигурационные и другие файлы, но с точки зрения функциональности пользователя это удобно, поскольку наличие команд, не смешанных с чем-либо еще, позволяет просто использоватьPATH
переменную, указывающую на исполняемые файлы. Это также вносит ясность. Все, что есть, должно быть исполняемым.Взгляни на мой
PATH
,Есть ровно шесть мест, содержащих команды, которые я могу вызывать напрямую (т.е. не по их путям, а по именам их исполняемых файлов).
/home/tomas/bin
мой личный каталог в моей домашней папке для моих личных исполняемых файлов./usr/local/bin
Я объясню отдельно ниже./usr/bin
описано выше./bin
также описано выше./usr/local/games
является комбинацией/usr/local
(будет объяснено ниже) и игр/usr/games
это игры. Не следует смешивать с исполняемыми файлами утилит, они имеют свои отдельные местоположения.Сейчас к
/usr/local/bin
. Это несколько скользко, и здесь уже объяснялось: что такое / usr / local / bin? , Чтобы понять это, вам нужно знать, что папка/usr
может использоваться многими компьютерами и монтироваться из сетевого расположения. Команды там не нужны при загрузке, как отмечалось ранее, в отличие от команд/bin
, поэтому расположение может быть смонтировано на более поздних этапах процесса загрузки. Он также может быть установлен только для чтения./usr/local/bin
с другой стороны, предназначен для локально установленных программ и должен быть доступен для записи. Таким образом , в то время как многие сетевые машины могут совместно использовать общий/usr
каталог, каждый из них будет иметь свои собственные/usr/local
установки внутри общего/usr
.Наконец, взгляните на
PATH
моего пользователя root:Он содержит эти:
/usr/local/sbin
, который содержит команды администратора типа/usr/local
/usr/local/bin
, которые являются теми же, которые может использовать обычный пользователь. Опять же, их тип может быть описан как/usr/local
./usr/sbin
являются несущественными утилитами администрирования./usr/bin
являются несущественными административными и обычными пользовательскими утилитами./sbin
являются необходимыми инструментами администратора./bin
являются необходимыми инструментами администратора и обычного пользователя.источник
/home/tomasz/bin/
, см. Unix.stackexchange.com/questions/431793/…/bin
и/usr/bin
действительно нужно было избегать проблем с сетевыми/usr
каталогами, разделение/usr
и/usr/local
предназначено для разграничения между файлами (/usr
), поставляемыми поставщиком, и файлами, установленными вручную на самой машине (/usr/local
) и не имеющими ничего общего с проблемы с подключением к сети. Это точно?/usr
-OFF-а-сети ( по сравнению с/usr/local
того, ну, местный ) не неслыханным из.В настоящее время я думаю, что это историческое наследие от классического UNIX.
В первых версиях UNIX программы были не такими большими, как в наши дни. Программы часто состоят из одного исполняемого файла, который использует системные библиотеки. Итак, никто не задумывался о программах, которые будут состоять из пары собственных библиотек. Основной библиотекой была библиотека C, и каждая программа знала об этом месте.
Также среда UNIX считалась готовым продуктом (для подготовки документации). Поэтому пути к всем инструментам были исправлены.
Некоторые преимущества фиксированных путей в HDD (жесткий диск) дней присутствуют в настоящее время. Если FSH (Иерархия файловой системы) разделить на отдельные разделы диска и поместить разделы с двоичными файлами и библиотеками рядом с основными секторами жесткого диска, тогда время запуска программы будет немного меньше.
источник
/usr/bin
, статических файлов данных/usr/share
и файлов, которые могут быть изменены,/var
или/usr/var
означает, что меры безопасности могут быть использованы для обеспечения того, чтобы ничего не выполнялосьshare
илиvar
не выполнялось (используяnoexec
флаги для их монтирования); что ничто снаружи неvar
может быть изменено (в системе, использующейdm_verity
или аналогичные меры для создания подписанных носителей только для чтения); и т.д.То, что вы видите в современной Unix-подобной системе, не совсем традиционно.
Обычно, было бы довольно минимально
/
и/usr
иерархии с только системными утилитами, и программы затем устанавливаются отдельно в подкаталог/usr/local
, а затем становятся доступными путем создания символических ссылок.Очень типичной настройкой для программного обеспечения GNU было скомпилировать и установить с
Утилита хранения GNU создает символические ссылки, чтобы сделать программное обеспечение доступным по стандартному пути, без необходимости добавлять какие-либо каталоги в переменную PATH (как это делает Windows, и там накапливается cruft).
Однако в современных дистрибутивах Linux все поставляется в виде готовых пакетов, поэтому программы стали частью «системы». Поскольку менеджер пакетов заботится об установке, нет необходимости в символических ссылках, а разделение программ не имеет никакой полезной цели (но замедлит запуск программы, так как придется сканировать много небольших каталогов).
Если вы хотите установить программное обеспечение в свой домашний каталог, я предлагаю вам также использовать для этого GNU-хранилище - это позволит вам хранить ваши программы отдельно, что разумно, если вы не используете менеджер пакетов.
Моя традиционная установка для этого - это один каталог, в
~/software/DIR
который я устанавливаю программы, затем использую внутреннюю панельDIR
для создания~/software/bin
и~/software/share
т. Д. Это означает, что мне нужно только добавить~/software/bin
переменную PATH, чтобы получить все мое установленное программное обеспечение.Использование:
установить, если программа соответствует соглашениям GNU.
источник
Похоже, вы говорите о стиле разделения отдельных файлов по целям (
/usr/bin
для исполняемых файлов,/usr/lib
для библиотек), а не по пакетам приложений (компилятор C ++ в одном разделе, программы для редактирования изображений в другом). В то время как в системах Unix основная причина этого исторического события, есть и современные силы, которые склонны склонять Unix-подобные системы к этому: менеджеры пакетов, которые управляют большинством программ в системе.В Windows, исторически и до сих пор довольно часто, приложения отвечали за предоставление своего собственного установщика и, особенно, деинсталлятора, и даже сейчас часто не регистрируют себя ни в одном центральном списке приложений. В такой ситуации, как правило, для приложения лучше иметь свой «собственный» каталог для максимально возможного количества своих файлов. Это помогает избежать конфликтов с другими приложениями, хотя это не всегда работает (особенно в случае DLL ).
Unix-системы, с другой стороны, с 90-х годов, как правило, каждая имели единый принятый менеджер пакетов и группу, предоставляющую большое количество обычно используемого программного обеспечения через этот менеджер пакетов. (Официальные менеджеры пакетов для различных Unices включают
yum
иapt
для систем Linux,pkgsrc
для NetBSD иports
для FreeBSD. Часто коммерческие системы Unix также заканчиваются неофициальным, но широко распространенным менеджером пакетов, таким какbrew
для MacOS.)Эти менеджеры пакетов имеют преимущество в том, что они могут и действительно отслеживают каждый файл в системе в различных подкаталогах, которыми они «владеют». Поскольку одна группа назначает имя и местоположение каждого файла здесь, все они могут использовать небольшой набор каталогов, общих для них. Это дает различные преимущества, особенно в области совместного использования файлов между приложениями и уменьшения количества путей, необходимых для поиска библиотек и исполняемых файлов.
Тем не менее, в Unix существует давняя традиция установки «отдельного каталога на приложение», обычно под
/opt
каталогом.источник