>
주의하십시오 :

명령 줄에서 파일을 만드는 방법을 묻는아니요입니다!

<시간>

touch 를 사용하고 있습니다  주요 목적이 다른 것임을 주목하지 않고 몇 년 동안 파일을 작성해 주셔서 감사합니다. 커맨드 라인에서 파일을 만들고 싶다면 다음과 같은 많은 가능성이 있습니다.

touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar

더 많은 것이있을 것입니다.

그러나 실제로 위의 명령 중 어느 것도 실제로 파일을 작성하도록 설계되지 않았습니다. 예를 들어, man touch  이 명령은 파일 타임 스탬프를 변경하기위한 것입니다. 왜 유닉스 (또는 리눅스)만큼 OS가 완벽한 파일 생성 전용 명령을 가지고 있지 않습니까?

  • 답변 # 1

    명령 줄이나 셸 스크립팅에서 즉시 내용을 채우지 않는 빈 파일을 만들 필요가 거의 없기 때문입니다.

    한 번에 파일을 만들 수 있으면 먼저 파일을 만든 다음 I/O 리디렉션을 사용하여 파일에 쓰면 아무런 이점이 없습니다.

    당신이 정말로 빈 파일을 만들고 그것을 남기고 싶은 경우에 나는 > "${file}" 를 주장 할 것이다  더 짧고 우아 할 수는 없습니다.

    TL;DR: 빈 파일을 만드는 것이 가장 쓸모가없고, 이미이 목표를 달성하는 데 사용할 수있는 수많은 옵션이 있기 때문에 존재하지 않습니다.

    touch 를 사용하는 사이드 노트  파일이 존재하지 않는 경우에만 작동하지만 리디렉션을 사용하는 옵션은 파일이 존재하더라도 항상 파일을 자릅니다 (기술적으로는 솔루션이 동일하지 않음). 와이즈 비즈   > foo 를 저장하기 때문에 선호되는 방법입니다  그리고 fork  휴대가 매우 어렵 기 때문에 일반적으로 피해야합니다.

  • 답변 # 2

    아드리안 프 루히 르트의 대답은 옳습니다. 방금 파일을 작성하기 위해 특별히 작성된 명령이 있다는 것을 추가하고 싶었습니다. echo -n .

    mktemp
    
    

    와이즈 비츠 의 작업은 특정 이름으로 파일을 만드는 것이 아니라 단순히파일을 만드는 것입니다. 그러나 이미 말했듯이 주어진 이름으로 파일을 작성하는 명령을 제공하는 훨씬 더 효율적이고 우아한 방법이 무의미합니다.

    그것도, 당신은 또한 NAME mktemp - create a temporary file or directory SYNOPSIS mktemp [OPTION]... [TEMPLATE] DESCRIPTION Create a temporary file or directory, safely, and print its name. TEM‐ PLATE must contain at least 3 consecutive 'X's in last component. If TEMPLATE is not specified, use tmp.XXXXXXXXXX, and --tmpdir is implied. Files are created u+rw, and directories u+rwx, minus umask restric‐ tions.  그리고 mktemp  두 가지 모두 파일을 작성하는 것이 필수적입니다. 그들은 더 정교한 접근 방식을 가지고 있습니다. 무엇 truncate 을 수행하는 간단한 프로그램이 없을 것입니다  그것은 fallocate 보다 더 나은 방법이 없기 때문에 않습니다 .

  • 답변 # 3

    대부분의 기본 쉘 도구는 특정 목적을 위해설계되지않습니다. 대부분의 기본 셸 도구는 다른 사람과 상호 작용하여 목적을 달성하기 위해설계합니다. 또는 목표를 달성하기 위해 도구를 결합하는 방법에 관계없이 대부분의 도구는 하나의 매우 기본적인 작업 만 수행한다고 할 수 있습니다.

    > file
    
    

    빈 파일을 생성합니다. 또는 기존 파일을 원하는대로 자릅니다. 당신은 할 수 있습니다 :

    > file
    
    

    당신이 아닌 한 후자의 경우를 피하기 위해 :

    : >./file
    
    

    set -o noclobber 와 비슷한 동작을 얻을 수 있습니다  포함 :

    : >|./file
    
    
    touch 를 제외하고  파일의 수정 시간이 수정되지 않아 업데이트되지 않습니다.

    데모
    : >>./file
    : >>|./file
    
    
    출력
    :
    
    
    터치하지 않음
    mkdir test ; cd $_
    touch touch.file 
    : >null.file
    echo >echo.file
    ls -l
    
    
    출력
    -rw-r--r-- 1 mikeserv mikeserv 1 Apr 10 14:52 echo.file
    -rw-r--r-- 1 mikeserv mikeserv 0 Apr 10 14:52 null.file
    -rw-r--r-- 1 mikeserv mikeserv 0 Apr 10 14:52 touch.file
    
    

  • 답변 # 4

    유틸리티 : >>|./echo.file ls -l  실제로 파일을 만들도록 설계되었습니다! -rw-r--r-- 1 mikeserv mikeserv 1 Apr 10 14:52 echo.file -rw-r--r-- 1 mikeserv mikeserv 0 Apr 10 14:52 null.file -rw-r--r-- 1 mikeserv mikeserv 0 Apr 10 14:52 touch.file 를 통해 파일의 내용을 전달할 수 있습니다  (대부분의 경우 리눅스의 대부분의 경우 install 가 필요합니다.  다른 소스 파일을 제공하십시오. 소유권과 권한을 설정할 수 있습니다.

    /dev/stdin
    
    
    어리석은 예로서

    .

    /proc

관련 자료

  • 이전 linux - openmpi 및 줄에서 파일 읽기
  • 다음 security - chsh는 사용자가 다른 사용자의 쉘을 변경하지 못하게하는 방법은 무엇입니까?