cron 작업을 통해 정기적으로 데이터를 수신하는 텍스트 파일이 홈 디렉토리에 있습니다. cron 작업은 동적 데이터를 제공하기 때문에 파일 내용을 비우도록 cron 작업을 설정하려고합니다 (파일이 여전히 존재해야 함). cron에 대한 도움이 필요하지 않습니다. 파일을 비우는 데 도움이되는 명령 만 있습니다.
cron 작업을 통해 정기적으로 데이터를 수신하는 텍스트 파일이 홈 디렉토리에 있습니다. cron 작업은 동적 데이터를 제공하기 때문에 파일 내용을 비우도록 cron 작업을 설정하려고합니다 (파일이 여전히 존재해야 함). cron에 대한 도움이 필요하지 않습니다. 파일을 비우는 데 도움이되는 명령 만 있습니다.
답변:
가장 간단한 방법 :
> filename
이것은 덜 명백한 방법이며 다른 사람들이 쉘 스크립트에서 읽을 수 없을 수도 있지만 필요한 전부입니다.
>
실제로는 실제로 명령이 아니기 때문에 (bash 내장) 다음을 사용할 수 없습니다.
sudo > filename
해당 파일에 대한 권한이없는 경우 그러나 당신은 사용할 수 있습니다 :
sudo bash -c "> filename"
sudo crontab -e
root가 아닌 cron 작업을 추가하는 데 사용 하십시오. 또는 파일 권한을 755가 아닌 766 (또는 666)으로 변경하십시오 sudo chmod 766 filename
. 상세 정보 : codex.wordpress.org/Changing_File_Permissions
truncate filename
빈 출력을 파일로 리디렉션하는 것보다 약간 깨끗하고 간단하며와 관련된 문제가 발생하지 않습니다 sudo
.
truncate -s 0 filename
실제로 트릭을 만들 수 있습니다. 답변으로 추가 할 수 있습니다.
이를 위해 만들어진 도구가 있습니다.
truncate -s 0 filename
그러면 내용이 지워지지 만 여전히 같은 파일이됩니다 ( 아이 노드 는 동일하게 유지됨 ).
일부 프로그램은 "inode로"파일에 대한 핸들을 보유하기 때문에 중요합니다. 파일을 삭제하고 다시 작성하는 순진한 방법을 사용하여 파일을 "비운"다고 가정하십시오. 일부 프로그램은과 같은 일반적인 방법으로 더 이상 표시되지 않더라도 이전 파일 (이전 내용 포함)에 대한 핸들을 계속 보유 할 수 있습니다 ls
.
이 답변의 끝에 자세한 내용으로 연결되는 링크가 있습니다.
다른 방법으로는 기억하기 쉬울 것입니다.
echo -n > filename
이것은 또한 동일한 inode를 유지합니다.
그 모두를 참고 truncate
하고 echo -n
의해 정의되지 않은 POSIX .
POSIX 준수 사용 cat /dev/null
:
cat /dev/null > filename
또 다른 방법으로, 더 모호하고 아마도 껍질에 구애받지 않을 것입니다.
> filename
자를 파일에 쓰기 위해 루트 권한이 필요한 경우 다음 줄이 예상대로 작동하지 않습니다.
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
sudo가 실행되기 전에 셸에서 리디렉션을 수행하기 때문입니다. 즉, 파일에 대한 쓰기 액세스는 sudo에 의해 부여 된 권한이 아니라 쉘을 실행하는 사용자의 권한을 사용하여 수행됩니다.
해결 방법은 다음과 같이 sudo 권한을 사용하여 실행 된 쉘로 리디렉션을 연기하는 것입니다.
sudo sh -c "echo -n > filename"
사용하여 truncate
사용자가 쓰기 권한이 쉘에 의해 수행되지 않기 때문에 이러한 해결 방법을 필요로하지 않지만로 truncate
하는 sudo는 권한을 사용하여 sudo는에 의해 실행된다.
sudo truncate -s 0 filename
파일이 삭제 된 경우에도 파일을 열린 상태로 유지하는 프로그램에 대한 자세한 내용은 다음을 읽을 수 있습니다.
이를 자동화하기 위해 logrotate를 사용할 수 있습니다. 비 우려는 파일의 구성 파일을 만들고 다른 설정을 추가하면 매일 선택한 기준에 따라 또는 파일이 더 큰 경우 등을 기준으로 매일 자동으로 비울 수 있습니다.
logrotate를 구성하는 방법을 여기에서 살펴보십시오 : http://linuxcommand.org/man_pages/logrotate8.html
echo "" > foo_file
, 그것의 모든 내용 그 일을하는 간단한 방법을 대체한다 foo_file을 함께 "" 이 경우에 그것을 만들기, 비 웁니다.
cat /dev/null > foo_file
null 장치를 읽고 파일을 전혀 덮어 쓰지 않는을 사용할 수도 있습니다 .
tail -n +1000 file.txt > file.txt
1000 줄을 제거하고 파일에 최신 줄을 유지해야합니다 (무엇을 추적하기 위해 최근 레코드가 필요한지 알 수 없음).