Mam na serwerze plik o nazwie error.log, który muszę często skracać. Mam uprawnienia rw do pliku. Otwieranie pliku w vi> usuwanie całej zawartości> zapisywanie prac (oczywiście). Ale kiedy spróbuję poniżej
cat /dev/null > error.log
Dostaję wiadomość
File already exists.
Oczywiście na serwerze wykonano jakąś konfigurację, aby zapobiec przypadkowemu nadpisaniu plików. Czy ktoś może powiedzieć, jak mam „obciąć” plik jednym poleceniem?
linux
file
command-line
Sumeet Pareek
źródło
źródło
Odpowiedzi:
Masz
noclobber
zestaw opcji. Wygląda na to, że błąd pochodzi z csh, więc powinieneś zrobić:Jeśli się mylę i używasz basha, powinieneś zrobić:
w bash możesz również skrócić to do:
źródło
File exists
błąd, podczas gdy bash daje zupełnie innycannot overwrite existing file
błąd.>file
nie działa.> file
i>| file
?noclobber
ustawioną opcję, próba przekierowania do istniejącego pliku nie powiedzie się. Aby nadpisać określone przekierowanie, pozostawiając włączony>|
Możesz także użyć funkcji obcinania
jeśli odmówiono pozwolenia, użyj sudo
Pomoc / Podręcznik: man truncate
testowane na systemie Ubuntu Linux
źródło
To wystarczy, aby ustawić rozmiar pliku na 0:
źródło
zasługa mojego starszego kolegi:
Nie spowoduje to zepsucia plików dziennika, więc możesz go używać na przykład na syslog.
źródło
:
to polecenie nie wywołujące efektu (prawie komentarz), a następnie>
przekierowanie jak zwykle, więc to po prostu przekierowuje brak wyjścia polecenia, które nic nie robi do pliku. Jeśli noclobber jest włączony, potrzebujesz:>| filename
(bash) (i zakładam, że:>! filename
w csh przy założeniu, że csh ma:
).może również działać
źródło
dd
wyjście z wyjścia nie byłoby nawet lepsze niż zwykły czytelnyfalse
?Ponieważ sudo nie będzie działało z przekierowaniem
>
, podoba mi siętee
polecenie do tego celuźródło
error.log
, jeśli jest już zapisywalny, nie ma potrzeby używania sudo. Myślę, że drugą kwestią jest to, że przekazujesz polecenie jako argument łańcuchowy dosh
, nie wiem, jak to jest obsługiwane wewnętrznie, ale jest to kolejna warstwa złożoności / dodana przekierowanieecho ""
doda nową linię. Możesz użyćecho -n ""
do pomijania nowej liniiKażdy może spróbować tego polecenia, aby obciąć dowolny plik w systemie Linux
To na pewno zadziała w każdym formacie:
źródło
Lubię to:
cp /dev/null file
źródło
Możesz także spróbować:
echo -n > /my/file
źródło
noclobber
a następnie zadaj sobie pytanie, czy twoja odpowiedź ma w ogóle sens.