터치와 vi를 사용하십니까?


55

편집하기 전에 터치하여 파일을 만드는 이점이 있습니까?

touch foo
vi foo

에디터로 바로 가져가는 것보다? 처럼:

vi foo

나는 전자를 사용한 꽤 많은 튜토리얼을 보았습니다 ( touchthen vi).

답변:


111

touch파일을 먼저 사용하면 파일 시스템이 읽기 전용이거나 다른 문제가 있음을 찾기 위해 편집기에서 시간을 낭비하지 않고 실제로 파일을 작성할 수있는 능력이 있음을 확인합니다.


6
그리고 편집하기 전에 나중에 touch할 수 있습니다 . chmod +x이것은 #!/bin/bash쉘 스크립트를 작성하는 경우에 의미가 있습니다 .
Aaron McDaid 2016 년

11
또는 :w시작한 후에 가장 먼저 할 수 있습니다 vi. (그리고 :chmod +x %실행 가능하게 만들고 싶다면)
Stéphane Chazelas

26
touch여기서 실패 할 수 vi의가 :w!있지만 성공 것이다 (경우 예를 들어 file존재하지만 당신은 그것의 대표가 아니며 현재 디렉토리에 쓰기 권한이 있지만, 그것은에 대한 쓰기 권한이 없습니다). 반대로, touch성공할 수 있지만, vi:w또는 :w!당신이 파일의 소유자 인 경우 실패 할 수 있지만, 여기에 쓰기 권한이없는도 현재 디렉토리에 (당신이 그것을 해결할 수있을 것 :!chmod +w %일부 ( vi같은 구현 vim할 수있다 :w!))에 자동으로 표시됩니다 .
Stéphane Chazelas 2016 년

지금 많은 의미가 있습니다!
Fawix

4
Vim / vi는 쓰기 권한이없는 파일을 열면 다음과 같이 명확하게 나타납니다 "foo" [readonly]. 그리고 다시 삽입 모드로 들어갈 때 :Warning: Changing a readonly file.
DevSolar

25

주어진 답변 외에도 터치의 한 가지 장점은 파일을 터치하는 동안 동일한 파일을 편집하는 다른 사용자 / 터미널이 변경 사항을 저장하려고 할 때 경고를 수신한다는 것입니다.

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

이것은 자체적으로 변경하지 않았고 파일을 만졌더라도 경고합니다.


좋은 지적이므로, 사람들이 동일한 파일을 사용 / 편집하고 있는지 동시에 발견 할 수 있는지를 알 수있는 좋은 방법입니다. 다중 테넌트 환경에서이 기능의 이점을 분명히 알 수 있습니다!
Fawix

@Fawix 그러면이 답변을 업데이트해야합니다 Aswell
Kiwy

19

허용 된 답변 외에 :

그것은 그 주목할 가치가있다 touch파일 타임 스탬프를 업데이트하는 데 사용됩니다. touch존재하는 파일을 사용 하는 경우 파일 타임 스탬프를 현재 날짜 및 시간으로 업데이트합니다. 파일이 존재하지 않으면 현재 날짜 및 시간을 시간 소인으로 빈 파일을 작성합니다.

vi반면에 새 파일을 쓰지 않으면 새 파일을 만들지 않습니다.

예를 들어, 내가 입력 vi test.txt하면 메모를 입력 한 다음 입력합니다 :q!. test.txt존재하지 않을 것입니다.


허용 된 답변에 설명 된 이점은 무엇입니까?
JBentley

8

이 없으면 touch파일을 쓰라고 말할 때까지 새 파일이 존재하지 않습니다 vi.

다중 사용자 시스템을 고려하십시오 (아마도 사용자가 많은 여러 시스템이 공유하는 네트워크 마운트 파일 시스템에있는 것 같습니다). 실행 touch하면 파일이 있고 파일에 쓸 수 있으며 타임 스탬프도 업데이트됩니다. 이러한 파일을 작성하려는 다른 사용자는 자신이 해당 파일을 소유하고 있음을 알게됩니다. 이미 존재하고 다른 사용자가 삭제하거나 바꾸려고하면 최근에 수정되었다는 것을 알게 될 것이며 아마도 두 번 생각할 것입니다.


4

touch먼저 구하는 데는 아무런 이점이 없습니다 . vi파일이 없으면 작성합니다.

수락 된 답변에 따르면 편집기에서 시간을 낭비하기 전에 거기에 쓸 수 있는지 확인합니다. 사실, 이제 touch매번 타이핑하는 데 시간을 낭비하게됩니다 . 어딘가에 글을 쓸 수 없다는 것은 sudo홈 디렉토리 외부의 파일 을 기억 하거나 /tmp루트로 로그인 한 경우 얼마나 자주 작동하는지에 비해 상당히 예외적 입니다.

편집기를 열고 원하는 작업을 수행 한 다음 파일을 저장하십시오. 로도 작동하지 않으면 :w!다른 곳에 저장하고 ( :w ~/asdf) 문제를 해결하십시오. 수정되면 파일 내용을 임시 파일에서 원본으로 복사 할 수 있습니다 cat ~/asdf > /mnt/example.txt && rm ~/asdf. 우리가 사용하는 이유 cat대신은 mv이나 cp대상의 권한과 다른 속성을 사용하는 것입니다.

또한 고급 명령 줄 사용법의 경우 문제를 해결하는 동안 (또는 , 또는 ) 사용 vi하여 Ctrl+로 백그라운드 를 작성 하고 마지막 으로 다시 쓰기 명령을 실행할 수 있습니다.Z:suspend:susfg

편집 : / u / G-Man 의 의견 에 따라 게시물이 개선되었습니다 . 감사!


3
일부 보안 문제는 여기에 있습니다 : 파일이있는 경우 (1) /mnt/example.txt세계 읽을 수 있어야 것이 아니라, 당신의 umask가 (22)와 같은 허용 값으로 설정되어, 다음 /tmp/asdf 것입니다 세계 읽을 수. 시스템에 다른 사람이있는 경우 파일의 임시 사본을 읽을 수 있습니다. (2) 파일 /mnt/example.txt에 쓰기 가능한 파일 은 아니지만 시스템에 악의적 인 사용자가있는 경우 파일 을 이동 / 복사하기 전에 파일의 임시 사본을 읽고 수정 된 버전으로 바꿀 수 있습니다. 올바른 위치로 돌아갑니다.   … (계속)
G-Man

3
(계속)… (스티커 비트를 설정하면 /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
G-Man

@ G-Man 이것들은 좋은 지적입니다. 나는 5 분 동안 파일을 훔치는 사람이 특히 두려워하지 /tmp않지만 ~/대신에 쓰지 않는 것에 대한 변명은 없습니다 . 나는 또한 그것이 속성을 대체 할 것이라고 생각하지 않았다. 감사합니다. 내 게시물을 편집하겠습니다. :)
Luc

3

이점이 없습니다. vi존재하지 않는 경우 파일을 만듭니다.


1

vi 시각적 텍스트 편집기입니다 (vi = visual) 어쨌든 "ed"에 비해 시각적입니다. 한 번에 한 줄의 텍스트 만보고 변경할 수 있습니다.

touch명령은 기존 파일의 타임 스탬프를 업데이트하거나 파일이없는 경우 새 파일을 만듭니다. 타임 스탬프에 크게 의존하는 것을 테스트하는 데 좋습니다.

파일이 텍스트 파일이거나 아직 존재하지 않는 경우 vi로 파일을 연 다음 vi에 명령 :wq을 실행하면 해당 파일을 터치하는 것과 같은 결과가 나타납니다. 이것이 두 명령이 전혀 비슷한 유일한 방법입니다.


1

특히 사용하기 위해 vi, 당신이 그것을 편집하기 전에 파일을 만들 필요 없다 : vi새로운 파일을 생성하고 저장하는 데 사용할 수 있습니다. 그러나 파일이 존재해야하는 호출 컨텍스트가 있습니다. 예를 들어, 내 시스템 (OS X)에서 다음과 같이 적절한 GUI 편집기 (파일 유형으로 결정)를 시작할 수 있습니다.

open foo.txt

이것은 foo.txtTextEdit 또는 emacs에서 열리 거나 텍스트 파일에 대해 선택한 편집기로 지정한 항목을 열고 프로세스를 분리하여 프롬프트를 즉시 다시 표시합니다. ( open bar.py파이썬 편집기 등의 IDLE에서 열 수 있습니다.) 또는 명시 적으로 emacs를 요청할 수 있습니다.

open -a emacs foo.txt

그러나 open파일이 이미 존재해야합니다. 그렇지 않으면 오류가 발생합니다. 따라서 emacs다음과 같은 쉘 기능 으로 정의 해야했습니다.이 기능 은 존재하지 않는 경우에도 GUI emacs foo를 시작 하도록 쓸 수 있습니다.emacsfoo

function emacs () 
{ 
    if [ -n "$1" -a ! -e "$1" ]; then
        /usr/bin/touch "$1";
    fi;
    open -a emacs "$@"
}

0

vi는 파일을 사용자로 편집하는 데 사용되는 반면, touch는 파일에 타임 스탬프를 설정할 수 있으며 주로 스크립트 등에서 사용됩니다.

파일을 작성하는 다른 방법은 다음과 같습니다.

>newfile.txt

1
POSIX 사양에 지정되어 있지 않기 때문에 신뢰할 수 없습니다. 예를 들어, In의 zsh경우 cat >newfile.txt와 동일하며 Ctrl + D를 눌러야합니다.
Adam Katz 2016 년

@AdamKatz 좋은 지적; 조언을 주셔서 감사합니다.
James Youngman

0

그의 주요 작업은 파일 타임 스탬프를 변경하는 것입니다.
Ofc는 또한 현재 타임 스탬프를 가진 파일을 생성 한 다음 파일을 편집 할 수 있습니다.

VI는 텍스트 편집, 열기, 저장, 파일 편집 등을 수행하는 텍스트 편집기입니다.

모두 사용자와 habbit의 풍미입니다.


0

touch 명령 은 현재 시간 소인으로 파일의 날짜와 시간을 변경합니다.
파일이 존재하지 않으면 날짜와 시간으로 새 파일을 작성합니다.

vi 편집기 는 파일이 존재하지 않으면 파일을 편집하는 데 사용되며 파일을 저장하지 않으면 새 파일을 만듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.