(cp f1.txt f2.txt)와 (less f1.txt > f2.txt)의 차이점은 무엇입니까

(cp f1.txt f2.txt)와 (less f1.txt > f2.txt)의 차이점은 무엇입니까

둘 다 f1.txt에서 f2.txt로 데이터를 복사한다는 것을 알고 있지만 실제 차이점은 무엇입니까?

(cp f1.txt f2.txt) 

비교:

(less f1.txt > f2.txt)

답변1

차이점은 이것이 cp인간에게 훨씬 더 명확하다는 것입니다. 이것은 최적화해야 할 첫 번째 사항 중 하나입니다.

이 사용법은 less매우 모호하며 시도해 보기 전까지는 그 효과도 분명하지 않습니다. 또 다른 대답은 작동하지 않을 것이라고 말합니다. 파일에 특정 문자가 포함되어 있고 스크립트의 일부와 같은 사용자 상호 작용 없이 명령이 작동하도록 하려는 경우입니다. 이 한도는반품모호함(이 동작을 여러 번 보았음에도 불구하고 적어도 나는 그것을 기대하지 않았습니다).

less속도가 느려지는 이유 중 하나는 데이터를 더 작은 청크로 전송하기 때문입니다. 아래에서 실행하면 1023바이트(1KiB - 1)의 64KiB 청크가 strace표시됩니다 .less

답변2

less다음과 같이 설계되었습니다.휴대용 소형 무선 호출기(예를 들어다음 페이지기능)텍스트문서. 따라서 cp(데이터 복사를 의도한 것보다) 파일 복사에 덜 최적화되어 상당한 오버헤드가 발생하여 성능이 저하될 수 있습니다.

우선, cp특수 문자(예: 제어)가 포함된 파일을 처리할 때 확인 메시지가 표시되지 않습니다.

귀하의 예에서는 cp정확하게 실행해야합니다하나프로그램( cp) .

less예제 에서 less명령은 실제로 주어진 파일의 내용만 출력 stdout하고 쉘은 stdout을 새 파일로 리디렉션하므로 실제로 두 개의 프로그램(출력용 하나, 입력용 하나)을 실행하고 있습니다.

답변3

  • 이 변형은 콘텐츠를 화면에 덤프 cp하지 않기 때문에 더 빠릅니다 .f1.txt

    $ time cp f1.txt  f2.txt
    
    real    0m0.002s
    user    0m0.004s
    sys     0m0.000s
    $ rm f2.txt
    $ time less f1.txt > f2.txt
    
    real    0m0.009s
    user    0m0.004s
    sys     0m0.000s
    

0.002 대 cp0.009 less.

  • cpless값을 기반으로 하는 umask모드로 새 파일을 생성하는 동안 원본 파일의 일부 모드 비트를 저장할 수 있습니다 .
(...) each destination file is created
with the mode bits of the corresponding source file, minus the
bits set in the umask and minus the set-user-ID and set-group-ID
bits.
  • cp타이핑 시간이 단축됩니다. 진지하게, 이는 명령줄에서 대부분의 시간을 보낼 때 중요합니다.

답변4

파일 에 대해 묻는 것이므로 사용하면 *.txt약간의 이점이 있습니다.less전처리기능 "파일 내용 표시 방법 수정". 고안된 예는 압축 파일의 내용을 출력하는 것입니다.

less compressed.txt.gz > uncompressed.txt

그러나 물론 이것은 에 의해 수행될 수 있고 아마도 수행되어야 합니다 zcat -c compressed.txt.gz > uncompressed.txt.

그러나 나는 이것이 정규화된 환경을 전처리하는 데 실용적일 것이라고 생각합니다 less(환경 변수를 확인하십시오 LESSOPEN. 일반적으로 파일을 가리킵니다 /usr/bin/lesspipe.sh).이렇게 하면 스크립트/명령이 신경 쓸 필요가 없습니다.분석하다입력 파일을 대상 파일에 쓰기.

나도 이걸 찾았어협회더 많은 사용 사례를 보여줍니다. 위에서 언급한 대로 Linux 환경을 확인하여 /usr/bin/lesspipe.sh어떤 파일 less에서 텍스트 정보를 추출할 수 있는지 확인하세요.

관련 정보