unlink와 rm의 차이점은 무엇입니까?


64

링크 해제가 rm보다 빠릅니까?


9
"조기 최적화는 프로그래밍에서 모든 악 (또는 적어도 대부분)의 근원입니다." -Donald
chris

답변:


68

둘 다 unlink()시스템 호출 인 동일한 기본 기능에 대한 랩퍼 입니다.

Userland 유틸리티 간의 차이점을 측정합니다.

rm(1):

  • 더 많은 옵션.
  • 더 많은 피드백.
  • 정신 검사.
  • 위의 결과로 단일 호출의 경우 조금 느려집니다.
  • 동시에 여러 개의 인수로 호출 할 수 있습니다.

unlink(1):

  • 위생 검사가 적습니다.
  • 디렉토리를 삭제할 수 없습니다.
  • 재발 할 수 없습니다.
  • 한 번에 하나의 인수 만 취할 수 있습니다.
  • 단순성으로 인해 단일 통화에 대해서는 한계가 있습니다.
  • rm(1)여러 개의 인수 를 제공 하는 것과 비교할 때 속도가 느 립니다.

다음과 같은 차이점을 보여줄 수 있습니다.

$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'

$ touch $(seq 1 100)
$ time rm $(seq 1 100)

real    0m0.048s
user    0m0.004s
sys     0m0.008s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done

real    0m0.207s
user    0m0.044s
sys     0m0.112s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done

real    0m0.167s
user    0m0.048s
sys     0m0.120s

그러나 우리가 시스템 unlink(2)기능 에 대한 불충분 한 호출에 대해 이야기하고 있다면 , 지금은 아마도 당신이 설명하고 있지 않을 것입니다.

unlink()디렉토리와 파일 모두 에서 시스템 을 수행 할 수 있습니다 . 그러나 디렉토리가 다른 디렉토리 및 파일의 부모 인 경우 해당 부모에 대한 링크는 제거되지만 자식은 매달려 있습니다. 어느 것이 이상적이지 않습니다.

편집하다:

unlink(1)과 의 차이점을 명확히했습니다 unlink(2). 시맨틱은 여전히 ​​플랫폼마다 다릅니다.


이것은 유닉스 파일 시스템에서 디렉토리를 제거하고 그 아래의 모든 파일을 항상 포함하는 파일 / 디렉토리의 수에 비례하는 작업이 될 것입니까? 다른 디렉토리 / 파일의 상위 디렉토리를 연결 해제하면 언제 발생합니까? 결코 지워지지 않고이 공간을 영원히 잃어 버렸습니까?
Marcin

6
기술적으로 모든 파일 시스템이 아닌 경우 고아 디렉토리 / 파일을 남겨 둘 수 있습니다. 이 문제를 해결하려면 일반적으로 파일 시스템 복구 도구를 실행해야합니다. 유닉스 / 리눅스에서 이러한 도구는 'fsck'라고하며 다른 파일 시스템에 대한 일부 변형입니다. 그들이 무언가를 복구한다면 그들은 보통 'lost + found'라는 디렉토리에 그것을 남겨 둘 것입니다
ConcernedOfTunbridgeWells

1
옳은. rm은 트리의 맨 아래부터 되풀이됩니다. 다음을 통해 방법을 보여줄 수 있습니다 mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1.. 부모 디렉토리를 연결 해제하면 fsck가 불일치를 발견 할 때까지 하위 디렉토리에서 소비 한 공간이 손실됩니다.
Dan Carley

1
무슨 소리 야? $ mkdir -p 1/2/3 $ unlink 1 unlink :`1 '을 unlink 할 수 없습니다 : "memory"leak을 일으키는 디렉토리가 fsck를 요구합니까? 있을 것 같지 않게!
Thomas

1
Linux 및 FreeBSD 맨 페이지 모두 디렉토리에서 unlink ()를 실행하려고 할 때 실패한다고 명시합니다.
Thomas

8

POSIX 스펙 레벨에서, rm 이하는 것은 unlink 가하는 것보다 훨씬 더 엄격하게 지정됩니다 .

스크립트가 OS에서 실행되어야하는 경우 결과의 이식성은 rm을 사용하는 것이 좋습니다.


4

제거의 느린 부분은 unlink () 시스템 호출의 사용자 공간 준비가 아니라 파일 시스템 코드 및 디스크 항목입니다.

즉, 속도 차이가 중요한 경우 파일 시스템에 데이터를 저장해서는 안됩니다.

unlink는 rm "light"입니다. rm에는 더 많은 기능이 있지만 동일한 기능을 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.