Unix 기반 앱을 위해 애플리케이션 캐시를 어디에 두어야합니까?


10

명령 줄 응용 프로그램을 작성 중이며 임시 데이터를 파일에 저장해야합니다. 응용 프로그램이 캐시를 유닉스 기반 시스템 (이 경우 Ubuntu 12.0.4)에 저장하는 규칙이 어디에 있는지 모르겠습니까?

답변:


12

"유닉스 기반 시스템"은 모든 유닉스 기반 시스템에 적용되는 모든 종류의 일반적으로 적용 가능한 결정을하기에는 너무 일반적인 범주 입니다. 문제는 파일 시스템 구조 (그리고 "적절한"/ "전통적인"장소)는 "Unix"의 다른 풍미들 (당신이 그것을 호출 할 수 있다면) 사이에서 아주 다르게 다르다는 것입니다. 사례별로.

몇 가지 예 :

  • Ubuntu에서 64 비트 라이브러리는 / usr / lib 또는 / usr / lib / x86_64-linux /로 이동하고 32 비트 라이브러리는 / usr / lib32로 이동
  • Fedora에서 64 비트 라이브러리는 / usr / lib64로, 32 비트 라이브러리는 / usr / lib로 이동
  • Fedora는 더 이상 / lib 또는 / bin에 대한 개념이 없습니다 (동일한 / usr 디렉토리에 대한 심볼릭 링크 일뿐입니다)
  • 대부분의 Linux 배포판은 사용자 설치 소프트웨어 (패키지 관리자가 제공하지 않은 소프트웨어)를 / usr / local / (lib, bin 등, var 등 / usr / local / 내에) 설치하는 것을 선호합니다.
  • 많은 리눅스 배포판이 캐시를 위해 / var / cache를 사용하지만, 그것이 "일시적"이라면 (잃어 버렸더라도 상관 없음), / tmp에 저장 될 수 있습니다
  • 일부 "폴더의 응용 프로그램"유형 응용 프로그램은 모든 항목을 / opt의 하위 디렉토리 (특히 clickwrap 설치 프로그램)에 저장합니다.
  • 일부 앱은 사용자의 ~ 디렉토리 (보통 / home / username)의 하위 디렉토리에 설치됩니다.
  • Solaris에서 / srv가 / opt와 유사하게 사용되는 것을 보았거나 때로는 / srv가 www-root입니다.

그 대답은 Linux, BSD, Solaris, HP-UX 등의 배포판이든 모든 운영 체제에서 무엇을 저장할 것인지에 대한 정식의 사회적으로 수용 가능하며 통합 된 규칙 은 정확한 환경에 달려 있다는 것입니다 . 구체적으로 특별히:

  • 패키지는 어떻게 배포됩니까?
  • 설치하려면 사용자에게 루트 액세스 권한이 필요합니까?
  • 패키지가 이미 시스템에있는 다른 패키지 (예 : 플러그인 또는 애드온)에 종속되거나 직접 통합됩니까?
  • 패키지가 배포판의 업스트림 리포지토리에 통합되어 사용자 가 웹 사이트에서 설치 프로그램을 다운로드하지 않고도 직접 apt-get또는 같은 명령을 사용 하거나 yum설치할 수 있습니까?
  • 컴퓨터를 운영하는 각기 다른 사용자에 대해 소프트웨어에 별도의 구성이 있습니까?
  • 소프트웨어에 관리자 (루트) 만 수정할 수있는 전역 구성 설정이 있습니까?
  • 소프트웨어가 init 시스템과 통합되어야합니까 (예 : 부팅시 시작)?

모든 요소를 ​​고려하지 않고 이에 대한 정답은 없습니다. 그러나 Ubuntu 12.04의 경우 .debPPA에 배포 할 파일로 패키지를 작성 하거나 Ubuntu의 자체 패키지 리포지토리 ( main또는 universe) 에 제출 하는 경우 캐시를에 저장하는 것이 좋습니다 /var/cache. 그러나 즉 우분투 만 당신은 확실히해야 모든 배포판 또는 유닉스 기반 OS이 허용을 고려 것이라는 가정을 적용합니다.

또한 시스템의 부트에서 캐시 데이터를 저장하는 데 이점이 없다면 / tmp에도 속할 수 있다고 생각합니다.

프로그램에서 사용하는 모든 파일 유형 (공유 데이터, 실행 파일, 라이브러리, 도움말 파일, 이미지, 사운드, 웹 페이지 등)에 대해 이러한 경로 지정 규칙 문제가 발생합니다 . 따라서 캐시 파일에 대해 묻는 경우 다른 파일 형식을 처리하는 방법에 대해 궁금합니다. 당신은 순진한 가정을하고 아무도 당신과 동의하지 않기를 바라고 있습니까? 어디에 두어야하는지 제안하는 우분투 문서 나 표준을 읽지 않았다면 한 가지만 가정하는 것은 좋지 않습니다. 예를 들어, / usr / lib에서 라이브러리를 항상 고수하는 것은 다른 곳에 속하는 상황에 따라 실수가 될 수 있습니다.

또한 소프트웨어 개발자로서 가장 책임감있는 일은 최종 사용자가 파일을 저장할 위치를 결정하는 것입니다. 기본값을 설정할 수 있지만 사용자 (및 배포자)는 배포판에 맞게 빌드를 사용자 지정할 수 있으며 사용자 지정합니다.

가장 쉬운 방법은 GNU Autoconf를 사용하여 프로그램을 빌드하는 것 입니다. Autoconf는 사용자가 명령 줄 인수를 빌드 스크립트에 전달하여 다양한 "디렉토리 유형"의 경로를 기본값과 다르게 변경할 수있는 빌드 시스템입니다. 거의 모든 배포본에는 모든 Autoconf 패키지에 대한 빌드 스크립트가있어 각 유형에 대해 적절하지 않은 기존 디렉토리를 설정합니다. 캐시의 디렉토리 유형 인 sharedstatedir도 있습니다.


먼저 답변에 대해 대단히 감사드립니다. 애플리케이션의 특성 (ruby)은 정적 컨텐츠를 제공하는 API 호출을 캐시하는 것입니다. 이것은 루비 응용 프로그램이며 디스크 캐시의 응답 장소에서 읽은 내용은 /tmp폴더입니다. 귀하의 질문에 대한 답변은 (다운로드, 아니오, 아니오, 아니오, 아니오, 아니오, 아니오)입니다. 아마 대부분의 사람들이 결론을 내리는 것이 평범한 것처럼 보이지만 /tmp나는 유닉스 시스템에 익숙하지 않으며 우분투 운영 체제 기반의 규칙은 나에게 익숙하지 않습니다. 이것은 gem이 불가지론 적 디스크 캐싱 (사용자 불가지론)을 허용하는 흥미로운 아이디어를 열어줍니다. 고마워, +1
Dolphin

대부분의 Linux 배포판에 설치된 ruby ​​gem 시스템에는 gem도구 가 gem을 설치하는 매우 구체적인 디렉토리가 있습니다. 그러나 gem이 애플리케이션을 다운로드 한 디렉토리와 동일한 디렉토리 내에 런타임에 파일을 작성하는 것은 적절하지 않을 수 있습니다. 반면에 사용자로 앱을 실행하는 경우 사용자를 위해 읽기 / 쓰기 가능한 디렉토리가 필요하며 이는 권한 변경 (그룹 생성과 같이 설치시 더 많은 시스템 통합 작업이 필요함)을 의미합니다. 등) 또는 전역 읽기 / 쓰기 디렉토리 (예 : / tmp)를 사용합니다.
allquixotic

당신은 할 수 없으며, 데이터를 기록 안 /usr, /lib또는 /bin응용 프로그램에서.
ctrl-alt-delor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.