나는 리눅스를 처음 접하는 사람 >
이며 touch
같은 효과가 있는지 궁금합니다 . 다음 두 명령이 같은 효과를 줍니까?
$ > file.txt
$ touch file.txt
그렇다면`> file.txt '를 입력하여 새 파일을 만들 수 있다는 것을 아는 것이 좋습니다.
touch
데이터가 들어있는 파일은 아무 일도 일어나지 않지만 >
파일을 지우면 사라질 것이라고 말합니다.
나는 리눅스를 처음 접하는 사람 >
이며 touch
같은 효과가 있는지 궁금합니다 . 다음 두 명령이 같은 효과를 줍니까?
$ > file.txt
$ touch file.txt
그렇다면`> file.txt '를 입력하여 새 파일을 만들 수 있다는 것을 아는 것이 좋습니다.
touch
데이터가 들어있는 파일은 아무 일도 일어나지 않지만 >
파일을 지우면 사라질 것이라고 말합니다.
답변:
모두 touch
와 >
존재하지 않는 경우 새 파일을 만듭니다. 다음 터미널 명령 touch
에서 기존 파일을 볼 때 액세스 / 최종 수정 시간이 업데이트됩니다. 그러나 >
기존 파일로 이동하면 파일이 잘리고 마지막 수정 시간이 업데이트됩니다 (액세스 시간은 아님). 참고 >
삭제되지 않습니다는 / 파일을 해제. 아이 노드는 동일하게 유지 - 이유입니다 >
/ 또는 truncate
일반적으로도 열린 파일 핸들과 로그 파일을 삭제하는 데 사용됩니다.
rick@dell:~$ > EmptyFile
rick@dell:~$ touch EmptyFile2
rick@dell:~$ ls Empty*
EmptyFile EmptyFile2
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ touch EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
주석에서 언급했듯이 touch
외부 명령이며 파일에서만 작동합니다. >
다양한 목적으로 사용되는 쉘 내장 기능입니다. 일반적으로 다음과 같이 사용되는 것을 볼 수 cat source.fil > target.fil
있습니다.
파일을 비우는 긴 형식은 다음과 같습니다.
cat /dev/null > emptyme.fil
사용 > emptme.fil
하면 파일로 아무것도 리디렉션하지 않는 간단한 형식으로 동일한 작업을 수행 할 수 있습니다.
> file.txt
로그 파일을 지우는 데 좋습니다.
ln foo bar
삭제 한 후 다시 작성해 foo
도 bar
여전히 이전 내용이 있음).
rm /var/log/nginx/access.log
nginx가 파일을 연 상태에서 링크는 0이지만 inode는 여전히 존재한다고 가정하십시오. lsof -c nginx | grep access.log
그런 다음 pid를 사용하여 ls -l /proc/<pid>/fd/ | grep access.log
cat / proc / <pid> / fd / <이전 명령의 파일 이름>`으로 이동하십시오. 이것이 오래되었지만 주석 달기. 그것이 의미가 있기를 바랍니다
둘 사이에는 상당한 차이가 있습니다. Touch
파일의 타임 스탬프에 사용되는 명령입니다. 이 >
기호는 표준 출력 리디렉터입니다.
터치 사용법
파일이 존재하지 않으면 파일이 생성됩니다.
터치 는 일반적으로 플래그를 만드는 데 사용됩니다. 예를 들어 시스템에서 두 번 사이의 모든 파일을 찾으려면 다음과 같은 명령을 사용할 수 있습니다.
$ touch -t 201609292200 starttime
$ touch -t 201609292300 endtime
그러면 다음 파일이 생성됩니다 (또는 타임 스탬프가있는 경우 변경).
-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime
이제 find를 사용하여 해당 시간에 수정 된 모든 파일 (두 파일 타임 스탬프 사이의 시간, 즉 2016 년 9 월 29 일 오후 10시에서 11시 사이)을 표시하거나 처리 할 수 있습니다.
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"
위의 find 명령의 일부 출력입니다.
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0
출력 리디렉션 사용
경로 재 지정 기호 는 표준 출력을 지정된 파일로 경로 재 지정합니다. 실패 할 수있는 경우 클로버 / 클로버 설정에 따라 Noclobber는 파일이 존재하지 않는 경우에만 파일을 생성합니다.
다음과 같은 여러 버전의 리디렉션 출력이 있습니다.
>-표준 출력을 재 지정하십시오. 기존 파일을 작성하거나 덮어 씁니다. >>-리디렉션 추가 기존 파일을 작성하거나 추가하십시오. > &-표준 출력 및 표준 오류를 모두 리디렉션합니다. >> &-표준 출력 및 표준 오류 모두 리디렉션 / 추가
find
위 의 명령을 사용 하여 지정된 시간 내에 생성 된 모든 파일의 내용을 나중에 기록하고 나중에 연구 할 수있는 파일로 리디렉션 할 수 있습니다.
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log
file.txt
존재하고 비어 있지 않으면 > file.txt
내용을 지우지 만하지 touch file.txt
않을 것이라고 언급했습니다. 그러나 아무도 언급하지 않았다 >> file.txt
위한 좋은 대용품이다 touch file.txt
- 그것은 (당신이 할 수있는 권한을 가지고 있다면 가정)이 존재하지 않는 경우 파일을 만들 것이다, 그러나 기존 파일을 절단하지 않습니다. ">"와 ">>"의 차이점
Usage of Output redirection
. 통지는 >>
= 라고 말합니다 Redirect append>
.
>> file.txt
에 대한 대안 으로 이해하지 못할 것 입니다 touch file.txt
. (당신이 언급 한 유일한 사람이야 사실 >>
전혀은 차라리 질문에서보다, 당신의 대답에서 내 댓글을 게시하는 이유입니다.)
>
셸 출력 리디렉션 연산자로, 이전 명령의 STDOUT을 이후에 언급 된 파일 설명 자로 리디렉션하는 데 사용됩니다 >
. 파일이 있으면 플래그 open(2)
와 함께 -ed가 있는 파일로 내용이 잘리고 O_TRUNC
파일이 없으면 파일이 작성됩니다.
이 리디렉션 연산자는 이전 명령이 실행되기 전에 셸에서 처리되므로 명령에 종속되지 않으며 셸 자체에서 처리됩니다.
일부 쉘 (예 zsh
:)은 다음과 같이 빈 리디렉션으로 다르게 작동합니다.
>file.txt
일반적인 해결 방법은 :
( true
) no-op 명령 을 추가하는 것입니다 .
: >file.txt
전통적으로, 주요 목적은 touch
파일을 만들지 않고 파일의 타임 스탬프를 변경하는 것입니다.
touch
인수에 언급 된 파일이 존재하지 않는 경우에만 파일을 작성하고, 그렇지 않으면 파일의 수정 시간을 현재 시간 소인으로 변경합니다. 를 사용하여 액세스 시간 및 inode 생성 시간을 변경할 수도 있습니다 touch
.
zsh
빈 리디렉션을 지원합니다- cat
파일에 대한 인수가없는 리디렉션 과 매우 유사하게 작동 합니다. 기본적으로 입력 한 내용은 EOF 문자 나 인터럽트까지 파일에 기록됩니다. 이것은 zsh
그냥 <file
파일 내용을 인쇄하는 것처럼 그냥로 동작을 반영 합니다 cat
. 이것들은 구성 가능할 수 있습니다 <file
. 파일러에서 파일을 여는 것을 보았습니다 .
EOF
(일을 같이 cat >file.txt
당신이 말한 것처럼), 어디에서 bash
바로 일을 >file.txt
충분합니다.
touch
파일의 수정 시간과 액세스 시간을 모두 업데이트합니다. 하나만 업데이트하는 옵션이 있습니다. (2) Unix / Linux / POSIX는 일반적으로 "inode creation time"을 지원하지 않습니다. 일부 파일 시스템 유형은이를 지원하지만 파일을 수정하는 것 외에는 보편적 인 방법이 없습니다. touch
사용자가 inode 생성 시간을 변경할 수 있는 화신이 있다고 언급하는 참조를 제공 할 수 있습니까 ?
file.txt
이미 존재하고 비어 있지, 그들은 분명하지 않습니다.