-v (verbose)를 사용하면 명령이 느려 집니까?


34

이 질문에서 : bash에서 디렉토리를 삭제하지 않고 디렉토리의 모든 파일과 하위 디렉토리를 제거하는 방법은 무엇입니까? 폴더 자체가 아닌 폴더의 모든 파일을 삭제하는 방법을 묻습니다.

Matt 의 exelent answer에는 'rm'명령에 -v 플래그를 사용하는 것이 포함됩니다.

rm -rfv dontDeleteMe && mkdir dontDeleteMe

내가 남긴 명령은 위의 명령이었습니다. 확실히 유용하지만 'rm'의 -v 플래그 및 / 또는 일반적으로 명령 줄을 통해 수행되는 작업의 속도가 느려 집니까?

.txt 파일 (약 100.000 개)이있는 폴더가 있습니다.이 파일은 지금 몇 번 나 자신을 위해 만들고 삭제하고 다시 만들었습니다. 파일 브라우저에서 rm을 사용하는 경우가 있고, 위와 같이 rm 명령을 사용하는 것이 느리다는 느낌이 들었습니다. -v 플래그는 이것과 관련이 있습니까?

답변:


37

예, -v 플래그는 명령을 느리게합니다.

대부분의 소프트웨어 (또는 명령)가 플래그가 제공되는지 확인한 다음 플래그와 관련된 많은 코드를 실행합니다. -v 플래그의 경우 , 플래그없이 건너 뛴 출력 명령 ( echo또는 같은 printf)을 실행할 수 있습니다.

이는 프로세서에 대한 더 많은 명령 사이클과 더 많은 실행 시간을 의미합니다.

메시지를 읽거나 필요로하지 않을 경우 -v 플래그를 사용하지 않는 것이 좋습니다.

반면 CLI는 명령을 입력하고 Enter키를 누르는 데 필요한 시간이 포함되어 있지 않다고 가정 할 때 GUI보다 빠릅니다 .

에서 수퍼 유저의이 블로그 이 이미지는 잘 속도 저하를 설명

여기에 이미지 설명을 입력하십시오

해당 특정 명령의 경우 시간 명령의 결과는 다음과 같습니다.

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

이것은 100000 개의 빈 파일을 포함하는 디렉토리로 수행되었습니다.


9
"에코 명령"에 대해서는 말하지 않겠습니다. 대부분의 프로그램은 스크립트를 bash하지 않으므로 echo를 호출 하지 않습니다 . 문제는 그들이 stdout (또는 stderr )에 쓰고 있다는 것입니다. 즉, 시간이 걸리고 (I / O 비용이 많이 드는) I / O 작업을 수행하고 있으며 시스템 호출이 필요합니다 (더 많은 컨텍스트 전환을 의미하므로 더 많은 캐시 미스 등).
Bakuriu

23
stdout에 쓰는 데있어 주요 문제점은 해당 컨텐츠의 실제 렌더링입니다. stdout을 파일로 리디렉션하거나 /dev/null, 터미널 에뮬레이터에 텍스트를 표시 할 때 성능이 거의 저하되지 않습니다.
Jacob Krall

그래프에서 볼 수 있듯이 인간의 관점에서 응답 시간에 대해 이야기하는 경우 시간 차이는 무시할 수 있습니다. 따라서 명령을 보는 사람의 효율성이 걱정되면 관련이 없습니다. 많은 수의 파일 또는 컴퓨터 시간이 중요한 많은 반복 실행 (예 : 바쁜 웹 서버 또는 고대 컴퓨터)에만 관련이 있습니다.
Paddy Landau

SSH를 통해 원격 시스템에서 명령을 실행할 때 가장 큰 영향을 줄 수 있습니다. 상세 로깅은 호스트에서 콘솔로 전송해야하는 수십 메가 바이트의 트래픽을 쉽게 생성 할 수 있습니다. SSH를 통해 실행 한 스크립트에서 과도한 콘솔 로깅을 제거한 후 10 배 정도의 속도 향상을 경험했습니다.
Sergey

5

왜 자신을 찾으십시오 : 시간을 사용하십시오.

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
이것은 실제로 질문에 대답하지 않습니다. 각 명령의 단일 실행간에 1ms의 차이는 많은 요인으로 인해 발생할 수 있습니다. -v출력 을 생략 했거나 디렉토리가 비어있는 경우에도 명확하지 않습니다 .

속도 저하는 추가 실행 명령이 아니라 파일이나 터미널에 쓰는 과정에서 발생합니다. time' pretty much redirects the output to / dev / null '.
Cole Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.