.png)
중복이 아니길 바라며 검색했지만 답변을 찾을 수 없습니다.
저는 리눅스 민트를 사용하고 있습니다. 부팅 시 자동으로 마운트되는 데이터 파티션이 있습니다. 내 폴더의 이 파티션에서 심볼릭 링크를 만들었습니다 /home/user
.
문제는 내 데이터 파티션에 'www' 폴더가 있고(복원해야 하는 웹사이트의 백업임) 에 심볼릭 링크를 만들어야 한다는 것입니다 /home/user
. 또한 /var/www/html
서버에 있는 파일/폴더를 변경할 수 있도록 심볼릭 링크도 필요합니다 . 가능합니까? 가장 좋은 방법은 무엇입니까?
이전에는 'www' 폴더를 직접 유지했기 /home/user
때문에 심볼릭 링크가 하나만 필요했습니다. 하지만 이제는 별도의 데이터 파티션이 있으므로 어떻게 해야 할지 모르겠습니다. 서버에 대해 하나의 심볼릭 링크만 가질 수 있지만 새로운 정보가 추가되면 수동으로 복사/백업해야 하며, 방법이 있다면 자동으로 수행하고 싶습니다.
답변1
예, 하나의 폴더를 여러 위치에 심볼릭 링크하는 것이 가능합니다. 귀하의 질문을 이해하는 한 두 개의 심볼릭 링크가 필요합니다.
/home/user/www -> /mnt/partition/www
/var/www/html -> /mnt/partition/www
이것이 다를 경우 답변을 조정해 드리겠습니다. 그러나 일반적인 절차는 동일해야 합니다.
ln -s /mnt/partition/www /home/user/www
ln -s /mnt/partition/www /var/www/html
/mnt/partition/www
서로 동기화를 유지하는 두 개의 동일한 "폴더"에서와 같이 under /var/www/html
및 의 전체 디렉토리 구조가 필요한 경우 /home/user
바인드 마운트를 살펴보십시오.
답변2
내가 올바르게 이해했다면 다음과 같습니다(약간 추상화됨).
/data/html/xyz.html
홈 디렉토리에 링크가 있습니다:
/home/user/html -> /data/html
따라서 데이터는 실제로 별도의 파티션에 저장됩니다./data
이제 다음을 연결하여 /var/www/html의 xyz.html 파일을 사용할 수 있습니다.
/var/www/html -> /data/html
이에 대한 명령은 다음과 같습니다.
cd /home/user
ln -s /data/html .
cd /var/www
ln -s /data/html .
그러나 이 설정에는 두 가지 문제가 있습니다.
- 서버가 아래의 링크를 따르도록 설정되지 않았을 수 있습니다
/var/www
. 예를 들어 Apache는+FollowSymLinks
잠재적인 보안 위험이 있으므로 구성에 옵션이 있어야 합니다 . - 편집된 모든 변경 사항은 즉시 웹 서버에 "푸시"됩니다. 일부 개정 관리 시스템을 통해 이 작업을 수행해야 합니다. 그러면 대부분의 커밋된 자료가 웹 사이트에 게시됩니다.
위의 문제를 해결하는 방법에는 여러 가지가 있습니다. 공간이 /
모든 것을 설치하는 이유 라면 (심볼릭 링크를 따라야 할 필요성을 없애는 대신) 웹 서버 서버를 /data
만들고 거기에서 웹 서버 서버를 갖게 될 것입니다. 또한 수은을 사용하여 아래 자료를 개정 제어하고 이것을 복제하도록 할 것입니다. (또는 ) 에서 커밋할 수 있도록 기본 위치를 지정 하고 작업이 안정되면 커밋 및 푸시를 수행하여 웹 사이트에서 작업을 제공합니다./data/www
/var/www
/data/html
/data/www
/data/html
/home/user/html
답변3
Linux에서는 모든 물리적 저장소를 파일 시스템의 모든 경로에 여러 번 할당할 수 있습니다. 파일 경로는 물리적 저장소에 대한 inode(핸들/포인터)일 뿐입니다. 최소한 다음 3가지 방법으로 동일한 실제 파일/폴더를 다른 파일 시스템 경로에 매핑할 수 있습니다.
1) 장착. 전체 물리적 드라이브를 디렉토리에 마운트할 수 있는 것처럼 임의의 기존 디렉토리를 다른 위치에 마운트할 수도 있습니다(바인드 마운트). 이것은 시스템의 모든 응용 프로그램에 완전히 투명하며 어떤 프로그램도 디렉토리의 내용이 다른 위치에서 마운트되었음을 실제로 알 수 없습니다. 귀하의 경우에는 쉽게 할 수 있습니다
mount --bind /mnt/partition/www/ /var/www/html/
웹 서버는 일반적으로 기본적으로 심볼릭 링크를 따르는 것을 좋아하지 않으며 액세스해서는 안 되는 파일 시스템 부분에 대한 액세스 권한을 부여할 수 있기 때문에 이것이 가장 좋은 방법입니다.
원하는 폴더를 다른 폴더에 원하는 만큼 마운트할 수 있습니다. 원래 디렉토리는 자신이 다른 곳에 마운트되어 있다는 사실조차 인식하지 못하며 OS가 이를 처리합니다.
2) 심볼릭 링크. 심볼릭 링크는 별칭일 뿐입니다. 이것은 가장 약한 바인딩입니다. 마운팅과 달리 심볼릭 링크는 단순히 자신이 가리키는 경로를 (기본적으로 텍스트 형식으로) 포함합니다. 이는 부팅할 때마다(또는 필요할 때) 마운트할 필요가 없으며 경로가 존재하지 않을 수도 있음을 의미합니다. 또한 변경될 수도 있습니다. 대부분의 응용 프로그램은 일반 파일과 마찬가지로 작동하지만 주의 사항이 있습니다. 디렉터리 심볼릭 링크에는 들어갔다가 다시 돌아올 때 반드시 같은 위치에 도착할 필요가 없기 때문에 몇 가지 문제가 있습니다. 또한 응용프로그램은 파일/디렉토리가 링크라는 것을 인식합니다. 주기를 피하기 위해 운영 체제는 따라야 할 링크 체인의 길이를 제한합니다(매우 남용하지 않는 한 거의 문제가 되지 않습니다). 물론 원하는 만큼 많은 링크를 가질 수 있지만 원래 디렉토리는 이를 인식하지도 못합니다.
ln -s /mnt/partition/www/ /var/www/html/
ln -s /mnt/partition/www/ /home/user/www/
3) 하드 링크. 유닉스의 파일 시스템은 하드 드라이브의 물리적 위치를 가리키는 일련의 inode로 설계되었기 때문에 모든 inode는 해당 위치에 도달하는 방법에 대한 주소일 뿐입니다. 따라서 동일한 주소를 가리키는 많은 inode(동일한 파일 시스템에서)를 가질 수 있습니다. -s
스위치 켜기 명령을 사용하지 않으면 ln
하드 링크가 생성됩니다(가능한 경우). 동일한 물리적 저장소를 가리키는 모든 파일 이름은 실제로 동일합니다. "원본" 파일이 없습니다. 모두 동일한 파일이며, 동일한 항목에 대한 이름이 두 개 이상 있을 뿐입니다. 삭제하면 실제로는 inode만 제거되고(inode가 이를 가리키는 경우에만 공간을 사용 가능한 것으로 표시하므로) 한 파일을 삭제해도 다른 파일은 제거되지 않습니다. 이름만 삭제됩니다. 물론 모든 하드 링크를 제거하면 저장소를 찾을 수 있는 위치를 알려주는 inode가 없으며 결국 저장소는 손실됩니다(그러면 파일 시스템은 해당 공간을 다른 용도로 사용할 수 있습니다).
이 경우에는 도움이 되지 않습니다. 하드 링크는 동일한 파일 시스템(동일한 파티션) 내에서만 작동합니다. 모든 파티션에는 자체 물리적 주소 관리가 있기 때문입니다. 그러나 나는 완전성을 위해 이것을 포함했습니다.
따라서... 무엇이든 심볼릭 링크로 연결하고 다른 링크로 링크할 수도 있습니다(이것은 /usr/lib
일반 라이브러리 이름이 설치된 특정 버전에 링크되도록 대부분의 라이브러리가 링크되는 방식입니다). 루트 액세스 권한이 있는 경우 웹 서버에서 사용할 디렉터리를 바인드 마운트하는 것이 더 올바른 작업 방법입니다. 하드 링크가 필요하지 않을 수도 있지만 하드 링크가 존재한다는 것을 알아야 합니다.