참고:
그래요아니요명령줄에서 파일을 만드는 방법을 묻는 질문입니다!
나는 문서를 만드는 데 수년 동안 그것을 사용해 왔지만 touch
그 주요 용도가 다른 용도라는 것을 알지 못했습니다. 명령줄에서 파일을 생성하려는 경우 여러 가지 가능성이 있습니다.
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
나는 더 많은 것이 있다고 확신합니다.
그러나 사실 위의 명령 중 어느 것도 실제로 파일 생성을 위해 설계된 것은 아닙니다. man touch
이 명령은 파일 타임스탬프를 변경하는 데 권장됩니다 (예 : . Unix(또는 Linux)와 같은 완전한 운영 체제에는 왜 파일 생성을 위해 특별히 설계된 명령이 없습니까?
답변1
빈 파일을 만들 필요가 거의 없기 때문에 명령줄이나 셸 스크립트에 콘텐츠를 즉시 채우지 않기 때문이라고 말하고 싶습니다.
파일을 생성한 다음 I/O 리디렉션을 사용하여 한 단계로 수행할 수 있다면 파일에 쓰는 것은 전혀 이점이 없습니다.
정말로 빈 파일을 만들어 보관하고 싶은 경우에는 이보다 > "${file}"
더 간단할 수 없다고 생각합니다.
긴 이야기 짧게: 빈 파일을 만드는 것은 일반적으로 쓸모가 없기 때문에 존재하지 않으며, 만약 있었다면 이를 달성하기 위한 수많은 옵션이 이미 있을 것입니다.
그건 그렇고, touch
을 사용하는 것은 파일이 존재하지 않는 경우에만 작동하는 반면 리디렉션을 사용하는 옵션은 파일이 존재하더라도 항상 파일을 자릅니다(따라서 기술적으로 이러한 솔루션은 동일하지 않습니다). > foo
저장하기 때문에 선호되는 방법이며 fork
이식성 echo -n
이 매우 낮기 때문에 일반적으로 피해야 합니다.
답변2
Adrian Frühwirth의 답변이 정확합니다. 실제로 파일 생성을 위한 특별히 명령이 있다는 점을 추가하고 싶었습니다 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
둘 다의 본질적인 목적은 파일을 생성하는 것입니다. 그들은 더 정교한 접근 방식을 가지고 있습니다. > file
NET보다 더 나을 수 없기 때문에 이를 수행할 수 있는 간단한 프로그램은 결코 없을 것입니다 > file
.
답변3
대부분의 기본 쉘 도구는 그렇지 않습니다.디자인됨매우 특정한 목적을 위해. 가장 기본적인 쉘 도구는디자인됨목표를 달성하기 위해 다른 사람들과 상호 작용하십시오. 아니면 대부분의 도구는 목표를 달성하기 위해 어떻게 결합하든 상관없이 매우 기본적인 작업 하나만 수행한다고 말해야 할 수도 있습니다.
: >./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
만지지 마세요
: >>|./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
이 유틸리티는 install
실제로 파일 생성용으로 설계되었습니다! 파일의 내용을 전달 하거나 다른 소스 파일을 제공할 수 있습니다 /dev/stdin
(그러나 대부분의 경우 Linux 버전에서는 설치가 필요합니다) . /proc
소유권과 권한을 설정할 수 있습니다.
echo "New file" | install -o 0644 -m 452452 -g dumbass /dev/stdin /var/www/index.html
어리석은 예로서.