답변:
touch
파일을 먼저 사용하면 파일 시스템이 읽기 전용이거나 다른 문제가 있음을 찾기 위해 편집기에서 시간을 낭비하지 않고 실제로 파일을 작성할 수있는 능력이 있음을 확인합니다.
:w
시작한 후에 가장 먼저 할 수 있습니다 vi
. (그리고 :chmod +x %
실행 가능하게 만들고 싶다면)
touch
여기서 실패 할 수 vi
의가 :w!
있지만 성공 것이다 (경우 예를 들어 file
존재하지만 당신은 그것의 대표가 아니며 현재 디렉토리에 쓰기 권한이 있지만, 그것은에 대한 쓰기 권한이 없습니다). 반대로, touch
성공할 수 있지만, vi
의 :w
또는 :w!
당신이 파일의 소유자 인 경우 실패 할 수 있지만, 여기에 쓰기 권한이없는도 현재 디렉토리에 (당신이 그것을 해결할 수있을 것 :!chmod +w %
일부 ( vi
같은 구현 vim
할 수있다 :w!
))에 자동으로 표시됩니다 .
"foo" [readonly]
. 그리고 다시 삽입 모드로 들어갈 때 :Warning: Changing a readonly file.
주어진 답변 외에도 터치의 한 가지 장점은 파일을 터치하는 동안 동일한 파일을 편집하는 다른 사용자 / 터미널이 변경 사항을 저장하려고 할 때 경고를 수신한다는 것입니다.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
이것은 자체적으로 변경하지 않았고 파일을 만졌더라도 경고합니다.
허용 된 답변 외에 :
그것은 그 주목할 가치가있다 touch
파일 타임 스탬프를 업데이트하는 데 사용됩니다. touch
존재하는 파일을 사용 하는 경우 파일 타임 스탬프를 현재 날짜 및 시간으로 업데이트합니다. 파일이 존재하지 않으면 현재 날짜 및 시간을 시간 소인으로 빈 파일을 작성합니다.
vi
반면에 새 파일을 쓰지 않으면 새 파일을 만들지 않습니다.
예를 들어, 내가 입력 vi test.txt
하면 메모를 입력 한 다음 입력합니다 :q!
. test.txt
존재하지 않을 것입니다.
touch
먼저 구하는 데는 아무런 이점이 없습니다 . vi
파일이 없으면 작성합니다.
수락 된 답변에 따르면 편집기에서 시간을 낭비하기 전에 거기에 쓸 수 있는지 확인합니다. 사실, 이제 touch
매번 타이핑하는 데 시간을 낭비하게됩니다 . 어딘가에 글을 쓸 수 없다는 것은 sudo
홈 디렉토리 외부의 파일 을 기억 하거나 /tmp
루트로 로그인 한 경우 얼마나 자주 작동하는지에 비해 상당히 예외적 입니다.
편집기를 열고 원하는 작업을 수행 한 다음 파일을 저장하십시오. 로도 작동하지 않으면 :w!
다른 곳에 저장하고 ( :w ~/asdf
) 문제를 해결하십시오. 수정되면 파일 내용을 임시 파일에서 원본으로 복사 할 수 있습니다 cat ~/asdf > /mnt/example.txt && rm ~/asdf
. 우리가 사용하는 이유 cat
대신은 mv
이나 cp
대상의 권한과 다른 속성을 사용하는 것입니다.
또한 고급 명령 줄 사용법의 경우 문제를 해결하는 동안 (또는 , 또는 ) 사용 vi
하여 Ctrl+로 백그라운드 를 작성 하고 마지막 으로 다시 쓰기 명령을 실행할 수 있습니다.Z:suspend
:sus
fg
편집 : / u / G-Man 의 의견 에 따라 게시물이 개선되었습니다 . 감사!
/mnt/example.txt
세계 읽을 수 있어야 것이 아니라, 당신의 umask가 (22)와 같은 허용 값으로 설정되어, 다음 /tmp/asdf
것입니다 세계 읽을 수. 시스템에 다른 사람이있는 경우 파일의 임시 사본을 읽을 수 있습니다. (2) 파일 /mnt/example.txt
에 쓰기 가능한 파일 은 아니지만 시스템에 악의적 인 사용자가있는 경우 파일 을 이동 / 복사하기 전에 파일의 임시 사본을 읽고 수정 된 버전으로 바꿀 수 있습니다. 올바른 위치로 돌아갑니다. … (계속)
/tmp
이를 방지 할 수 있습니다.) (3) 명령 mv /tmp/asdf /mnt/example.txt
은 전류를 완전히 파괴 /mnt/example.txt
하고로 대체합니다 /tmp/asdf
. 당신은 대체하려는 내용 의 /mnt/example.txt
와 컨텐츠 의를 /tmp/asdf
. 사용하여 mv
, 당신은 설정 /mnt/example.txt
같은 갖는 속성 으로 /tmp/asdf
아마도 세계 읽을 소유를 -. 그것은 더 나은 수 있습니다 cp /tmp/asdf /mnt/example.txt
또는 cat /tmp/asdf > /mnt/example.txt
. … PS (4) (또는 짧게)를 vi
입력하여 일시 중단 할 수 있습니다 . :suspend
:sus
/tmp
않지만 ~/
대신에 쓰지 않는 것에 대한 변명은 없습니다 . 나는 또한 그것이 속성을 대체 할 것이라고 생각하지 않았다. 감사합니다. 내 게시물을 편집하겠습니다. :)
특히 사용하기 위해 vi
, 당신이 그것을 편집하기 전에 파일을 만들 필요 없다 : vi
새로운 파일을 생성하고 저장하는 데 사용할 수 있습니다. 그러나 파일이 존재해야하는 호출 컨텍스트가 있습니다. 예를 들어, 내 시스템 (OS X)에서 다음과 같이 적절한 GUI 편집기 (파일 유형으로 결정)를 시작할 수 있습니다.
open foo.txt
이것은 foo.txt
TextEdit 또는 emacs에서 열리 거나 텍스트 파일에 대해 선택한 편집기로 지정한 항목을 열고 프로세스를 분리하여 프롬프트를 즉시 다시 표시합니다. ( open bar.py
파이썬 편집기 등의 IDLE에서 열 수 있습니다.) 또는 명시 적으로 emacs를 요청할 수 있습니다.
open -a emacs foo.txt
그러나 open
파일이 이미 존재해야합니다. 그렇지 않으면 오류가 발생합니다. 따라서 emacs
다음과 같은 쉘 기능 으로 정의 해야했습니다.이 기능 은 존재하지 않는 경우에도 GUI emacs foo
를 시작 하도록 쓸 수 있습니다.emacs
foo
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
vi는 파일을 사용자로 편집하는 데 사용되는 반면, touch는 파일에 타임 스탬프를 설정할 수 있으며 주로 스크립트 등에서 사용됩니다.
파일을 작성하는 다른 방법은 다음과 같습니다.
>newfile.txt
zsh
경우 cat >newfile.txt
와 동일하며 Ctrl + D를 눌러야합니다.
touch
할 수 있습니다 .chmod +x
이것은#!/bin/bash
쉘 스크립트를 작성하는 경우에 의미가 있습니다 .