주의하십시오 :
나는 하지 명령 줄에서 파일을 만드는 방법을 물어!
나는 touch
주된 목적이 다른 것임을 주목하지 않고 몇 년 동안 파일을 만드는 데 사용 해 왔습니다 . 커맨드 라인에서 파일을 만들고 싶다면 다음과 같은 많은 가능성이 있습니다.
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
그리고 더 많은 것이 있다고 확신합니다.
그러나 사실 위의 명령 중 어느 것도 실제로 파일을 작성하도록 설계되지 않았습니다. 예를 man touch
들어이 명령은 파일 타임 스탬프를 변경하기위한 것입니다. 왜 유닉스 (또는 리눅스)만큼 완벽한 OS가 파일을 만들기위한 명령을 가지고 있지 않은가?
답변
명령 줄이나 셸 스크립팅에서 즉시 내용을 채우지 않는 빈 파일을 만들 필요가 거의 없기 때문입니다.
한 번에 파일을 작성할 수 있으면 먼저 파일을 작성한 다음 I / O 재 지정을 사용하여 파일에 쓰면 아무런 이점이 없습니다.
실제로 빈 파일을 만들고 남기고 싶은 경우에는 > "${file}"
더 짧고 우아 할 수 없다고 주장합니다 .
TL; DR : 빈 파일을 만드는 것이 가장 자주 사용되지 않기 때문에 존재하지 않으며 이미이 목표를 달성하는 데 사용할 수있는 수많은 옵션이있는 경우.
참고로, touch
파일이 존재하지 않는 경우에만 작동하는 반면 리디렉션을 사용하는 옵션은 파일이 존재하더라도 항상 파일을 자릅니다 (기술적으로는 솔루션이 동일하지 않음). > foo
그것은을 절약 할 수 있기 때문에 선호되는 방법입니다 fork
그리고 echo -n
그것은 매우 인자를 취하지이기 때문에 일반적으로 피해야한다.
답변
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
보다 나은 방법이 없기 때문에 어떤 일을하는 간단한 프로그램은 결코 없을 것 > file
입니다.
답변
대부분의 기본 쉘 도구는 특별한 목적을 위해 설계 되지 않았습니다 . 대부분의 기본 쉘 도구는 다른 사람과 상호 작용하여 목적을 달성 하도록 설계되었습니다 . 또는 목표를 달성하기 위해 도구를 결합하는 방법에 관계없이 대부분의 도구는 하나의 매우 기본적인 작업 만 수행한다고 할 수 있습니다.
: >./file
빈 파일이 생성됩니다. 또는 기존 파일을 원하는대로 자릅니다. 당신은 할 수 있습니다 :
set -o noclobber
다음과 같은 경우가 아니면 후자의 경우를 피할 수 있습니다.
: >|./file
다음과 비슷한 동작을 얻을 수 있습니다 touch
.
: >>./file
: >>|./file
그거 빼고 :
이 수정되지 않기 때문에 파일의 modtime 업데이트되지 않습니다.
데모
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
답변
이 유틸리티 install
는 실제로 파일을 작성하도록 설계되었습니다! 파일의 내용을 통해 /dev/stdin
(대부분의 경우 Linux의 대부분의 경우 /proc
마운트 해야 함 ) 다른 소스 파일을 제공 할 수 있습니다. 소유권과 권한을 설정할 수 있습니다.
echo "New file" | install -o 0644 -m 452452 -g dumbass /dev/stdin /var/www/index.html
바보 같은 예입니다.