![rm filename.txt를 호출하면 어떻게 되나요?](https://linux55.com/image/127043/rm%20filename.txt%EB%A5%BC%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%90%98%EB%82%98%EC%9A%94%3F.png)
에서 영감을 받다이것우편 엽서,
호출하면 디스크 공간이 더 확보되나요 rm insert_filename
?
링크된 UNIX Stackexchange 게시물에는 다음과 같이 나와 있습니다. "파일이 연결 해제되었습니다. 데이터는 여전히 디스크에 있지만 링크가 제거되었습니다. 예전에는 데이터를 검색할 수 있었지만 이제는 메타데이터가 지워져 복구할 수 없습니다. .
디렉토리를 탐색하고 rm
대용량 파일을 호출하면 나중에 시스템에 비디오와 더 많은 용량의 파일을 저장할 수 있다는 의미입니까? rm
액세스할 수 있는 디스크 공간을 모두 채우면 "ed" 파일을 덮어쓰게 됩니까? (저는 컴퓨터를 끄거나 켤 때 또는 사용자가 잠시 컴퓨터를 떠날 때와 같이 때때로 오래된 파일을 정리하는 Java의 가비지 수집과 같은 일부 시스템을 구상하고 있습니다.)
시스템 메시지:
저는 리퍼브 Lenovo ThinkPad T420 노트북에서 Ubuntu 16.04 LTS를 실행하고 있습니다.
답변1
연결된 질문이 이미 문제의 대부분의 측면을 다루고 있으므로 짧은 대답입니다.
디렉터리를 찾아 큰 파일을 호출하면
rm
나중에 시스템에 비디오와 더 큰 파일을 저장할 수 있다는 의미입니까?
예, 이전에 삭제된 파일이 차지했던 공간은 이제 나중에 링크 수가 0이 되는 경우 대용량 파일을 포함하여 파일 시스템에 다른 데이터를 저장하는 데 사용할 수 있습니다 rm
(AB의 의견에 따라).
자세히 설명하면, 액세스하려는 파일이 rm
실행 중인 프로세스에서 로 참조되는 경우 /proc/$PPID/fd/$fd
, 여기서 $PPID
및 $fd
은 각각 프로세스 ID와 파일 핸들 번호이며, 파일 ed의 공간은 rm
프로세스가 종료되고 링크 수가 도달할 때까지 사용할 수 없습니다. 영. (지적해 주신 AB님께 감사드립니다)
또 다른 시나리오는 디스크의 다른 곳에 삭제된 파일에 대한 하드 링크가 있다는 것입니다. rm
링크 수가 1씩 줄어들지만 추가 공간을 확보하지는 않습니다.
즉, rm
삭제된 파일이 차지하는 공간은 삭제 후 링크 수가 0이 되어야만 재사용할 수 있습니다. 이 정보는 Links
명령 출력의 필드를 통해 얻을 수 있습니다 stat
. 이 필드가 실행 1
되기 전에 표시되는 경우에만 rm
삭제된 파일이 차지했던 공간을 즉시 사용할 수 있게 됩니다.
rm
액세스할 수 있는 디스크 공간을 모두 채우면 "ed" 파일을 덮어쓰게 됩니까?
덮어쓰는 시기는 디스크의 위치와 파일 시스템 구성 방식에 따라 다르지만 일반적으로 "파일"은 모든 디스크 공간을 사용하기 전에 덮어쓰여집니다.
답변2
"디스크 공간 있음"이 무엇을 의미하는지 모르겠습니다.
이것은 주제 질문의 기초이기 때문에 통찰력 있는 메타 질문입니다.
파일 "링크 해제"가 무엇을 의미하는지 이해하려면 파일 "링크"가 무엇을 의미하고 "파일"이 무엇인지 이해하는 것이 도움이 됩니다. 믿거나 말거나, "문서"는 세 명의 시각 장애인과 코끼리와 같아서 사람마다 다른 의미를 갖습니다.
대답은 파일 시스템에 따라 다릅니다. Windows에서는 NTFS를 사용할 수 있고, Linux에서는 ext3을 사용할 수 있습니다. 내 대답은 Linux 측으로 제한하고 사용되는 파일 시스템(예: ext3)을 추가로 제한하겠습니다.인덱스 노드설명 파일을 사용하면 대부분의 기본 컴퓨터에서 이 작업을 수행합니다.
이러한 파일 시스템은 원시 디스크 공간을 블록으로 구성합니다. 블록 사이에는 인덱스 노드를 포함하는 블록이 흩어져 있습니다. 각 inode에는 파일에 대한 정보(소유권, 권한, 사용되는 데이터의 위치 및 크기)가 들어 있습니다.
파일 시스템은 사용을 기다리는 inode로 가득 차 있습니다. 과거에는 파일 시스템을 생성할 때 아이노드 개수가 고정되어 있었고, 아이노드가 부족하면 새 파일을 생성할 수 없기 때문에 "공간 부족"이 발생했습니다. 오늘날 이는 일반적으로 동적으로 처리됩니다.
파일 시스템은 모든 inode의 위치, 사용 중인 inode, 아직 할당되지 않은 블록을 추적합니다. "디스크 공간 소유"는 어떤 inode에도 할당되지 않은 블록을 소유한다는 의미입니다.
새 파일을 만들 때 실제로는 다음 두 가지 작업을 수행합니다.
- 사용되지 않은 인덱스 노드에서 인덱스 노드 가져오기
- 이름을 지어주세요
이 첫 번째 단계는 혼자서는 할 수 없습니다. inode를 직접 조작할 수는 없습니다. 운영 체제에는 이 작업을 수행할 수 있는 기능이 없습니다. 이름으로 파일을 만들고 엽니다. inode 세부 정보는 커널에 보관됩니다.
두 번째 단계를 반복할 수 있습니다.왜냐하면(1): inode에 이름을 얼마든지 할당할 수 있습니다. 이름을 파일에 연결하기 때문에 이 단계를 "연결"이라고 합니다. 링크를 제거하면 프로세스를 되돌릴 수 있습니다.RM(1).다른 이름도 있습니다:풀리다(1).이제 "del" 대신 "rm"이라고 불리는 이유를 아실 것입니다. 파일을 삭제하는 것이 아니라 링크를 삭제하는 것입니다.
그럼 언제 파일을 삭제하나요? 파일을 만드는 것의 반대는 무엇입니까?
- 인덱스 노드와 해당 이름 사이의 링크 제거
- 인덱스 노드 삭제
먼저 삭제 링크를 수행하십시오. 그러나 인덱스 노드를 사용되지 않은 힙에 배치하려면 다음 두 가지 제한 사항을 충족해야 합니다.
- 인덱스 노드에는 여러 이름이 있으므로 이름이 연결되지 않을 때까지 사용됩니다. 그게 내 뜻이야링크가 0으로 떨어지면일부 문서에서 이 문제가 발생할 수 있습니다.
- inode가 열려 있을 수 있으므로(프로그램이 이를 사용 중임) 운영 체제는 이를 참조하는 파일 설명자가 없을 때까지(어떤 프로그램에서도 파일이 열려 있지 않을 때) 사용되지 않은 힙에 inode를 넣지 않습니다.
인덱스 노드에 연결된 이름이 없으면 폐기되는 것은 시간 문제일 뿐입니다. inode는 연결된 이름으로만 참조할 수 있으므로 이름 없이 새 링크를 만들거나 파일을 열 수 없습니다. 같은 이름의 파일을 열려고 하면 새 파일만 생성됩니다.다른inode를 만들고 이름을 여기에 연결합니다.
많은 사람들이 처음 이런 현상을 접했을 때 혼란스러워하고, "실행 중인 프로세스에서 사용 중인 대용량 파일을 삭제"하여 디스크 공간을 확보할 수 없으면 좌절감을 느낍니다. 프로그램이 사용하고 있던 파일이 갑자기 사라진다면 어떤 일이 일어날지 상상해 보면 더 이해가 됩니다. 또는 Windows에서 "파일이 이미 다른 프로그램에 열려 있기 때문에 삭제할 수 없습니다."라는 이해할 수 없는 오류가 발생한 경우. inode를 사용하면 파일이 다른 프로그램에서 열릴 때 삭제되지 않기 때문에 해당 메시지를 받을 수 없습니다.