- Как обрезать (пустые) файлы в Linux
- Перенаправление оболочки
- команда truncate
- Очистить все файлы журнала
- Выводы
- Как создать файл в Linux
- Подготовка
- Создание файла с помощью сенсорной команды
- Создание файла с помощью оператора перенаправления
- Создание файла с помощью команды cat
- Создание файла с помощью команды echo
- Создание файла с использованием Heredoc
- Создание большого файла
- Использование команды dd
- Использование команды fallocate
- Выводы
- Linux удалить файл размером 0
- Какова концепция создания файла с нулевыми байтами в Linux?
- Удаление файлов нулевого размера 0
- GNU/Linux, UNIX, Open Source → *BSD и другие системы
Как обрезать (пустые) файлы в Linux
В некоторых ситуациях вам может потребоваться обрезать (очистить) существующий файл до нулевой длины. Проще говоря, усечение файла означает удаление содержимого файла без удаления файла.
Усечение файла намного быстрее и проще, чем удаление файла , его воссоздание и установка правильных разрешений и прав собственности . Кроме того, если файл открывается каким-либо процессом, его удаление может вызвать сбой в работе программы, которая его использует.
В этом руководстве объясняется, как обрезать файлы до нулевого размера в системах Linux с помощью перенаправления оболочки и команды truncate .
Перенаправление оболочки
Самый простой и наиболее часто используемый метод обрезки файлов — использование оператора перенаправления оболочки > .
Общий формат усечения файлов с использованием перенаправления:
- : Двоеточие означает true и не выводит ничего.
- Оператор перенаправления > перенаправляет вывод предыдущей команды в данный файл.
- filename , файл, который вы хотите обрезать.
Если файл существует , он будет обрезан до нуля. В противном случае файл будет создан.
Вместо : можно также использовать другую команду, которая не выводит никаких результатов.
Вот пример использования команды cat для вывода содержимого устройства /dev/null , которое возвращает только символ конца файла:
Еще одна команда, которую можно использовать, — это echo . Параметр -n указывает echo не добавлять новую строку:
В большинстве современных оболочек, таких как Bash или Zsh, вы можете опустить команду перед символом перенаправления и использовать:
Чтобы иметь возможность обрезать файл, вам необходимо иметь права на запись в файл. Обычно для этого используется sudo , но повышенные привилегии root не применяются к перенаправлению. Вот пример:
Есть несколько решений, позволяющих перенаправлять с помощью sudo . Первый вариант может запустить новую оболочку с помощью sudo и выполнить команду внутри этой оболочки, используя флаг -c :
Другой вариант — передать вывод команде tee , повысить привилегии tee с помощью sudo и записать пустой вывод в заданный файл:
команда truncate
truncate — это служебная программа командной строки, позволяющая уменьшить или увеличить размер файла до заданного размера.
Общий синтаксис усечения файлов до нулевого размера с помощью команды truncate выглядит следующим образом:
Параметр -s 0 устанавливает нулевой размер файла.
Например, чтобы очистить журнал доступа к Nginx, вы должны использовать:
Очистить все файлы журнала
Со временем на вашем диске может появиться множество больших файлов журнала, занимающих много места на диске.
Следующая команда очистит файлы, заканчивающиеся на «.log» в каталоге /var/log :
Лучшим вариантом было бы повернуть, сжать и удалить файлы журналов с помощью инструмента logrotate .
Выводы
Чтобы обрезать файл в Linux, используйте оператор перенаправления > за которым следует имя файла.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
Источник
Как создать файл в Linux
Знание того, как создать новый файл, является важным навыком для любого, кто регулярно использует Linux. Вы можете создать новый файл либо из командной строки, либо из файлового менеджера рабочего стола.
В этом руководстве мы покажем вам различные способы быстрого создания нового файла в Linux с помощью командной строки.
Подготовка
Чтобы создать новый файл, вам необходимо иметь права на запись в родительский каталог. В противном случае вы получите сообщение об ошибке в разрешении отказано.
Если вы хотите отобразить содержимое каталога, используйте команду ls .
Создание файла с помощью сенсорной команды
Команда touch позволяет нам обновлять метки времени в существующих файлах и каталогах, а также создавать новые пустые файлы.
Самый простой и запоминающийся способ создания новых пустых файлов — использовать touch команду.
Чтобы создать новый файл, просто запустите touch команду, после которой укажите имя файла, который вы хотите создать:
Если файл file1.txt не существует, приведенная выше команда создаст его, в противном случае она изменит свои временные метки.
Чтобы создать сразу несколько файлов, укажите имена файлов через пробел:
Создание файла с помощью оператора перенаправления
Перенаправление позволяет захватывать выходные данные команды и отправлять их в качестве входных данных в другую команду или файл. Есть два способа перенаправить вывод в файл. Оператор > перезапишет существующий файл, а оператор >> добавит вывод в файл.
Чтобы создать пустой файл нулевой длины, просто укажите имя файла, который вы хотите создать, после оператора перенаправления:
Это самая короткая команда для создания нового файла в Linux.
Создавая файл с использованием перенаправления, будьте осторожны, чтобы не перезаписать важный существующий файл.
Создание файла с помощью команды cat
Команда cat в основном используется для чтения и объединения файлов, но ее также можно использовать для создания новых файлов.
Чтобы создать новый файл, выполните команду cat, за которой следует оператор перенаправления > и имя файла, который вы хотите создать. Нажмите Enter введите текст и, когда вы закончите, нажмите CRTL+D чтобы сохранить файлы.
Создание файла с помощью команды echo
Команда echo печатает строки, которые передаются в качестве аргументов в стандартный вывод, который можно перенаправить в файл.
Чтобы создать новый файл, запустите команду echo за которой следует текст, который вы хотите напечатать, и используйте оператор перенаправления > чтобы записать вывод в файл, который вы хотите создать.
Если вы хотите создать пустой, просто используйте:
Создание файла с использованием Heredoc
Здесь документ или Heredoc — это тип перенаправления, который позволяет передавать команде несколько строк ввода.
Этот метод в основном используется, когда вы хотите создать файл, содержащий несколько строк текста, из сценария оболочки.
Например, чтобы создать новый файл file1.txt вы должны использовать следующий код:
Тело heredoc может содержать переменные, специальные символы и команды.
Создание большого файла
Иногда в целях тестирования может потребоваться создать большой файл данных. Это полезно, когда вы хотите проверить скорость записи вашего накопителя или проверить скорость загрузки вашего соединения.
Использование команды dd
Команда dd в основном используется для преобразования и копирования файлов.
Чтобы создать файл с именем 1G.test размером 1 ГБ, выполните:
Использование команды fallocate
fallocate командной строки для выделения реального дискового пространства для файлов.
Следующая команда создаст новый файл с именем 1G.test размером 1 ГБ:
Выводы
В этом руководстве вы узнали, как создать новый файл в Linux из командной строки с помощью различных команд и перенаправления.
Если командная строка вам не подходит, вы можете легко создать пустой текстовый файл, используя контекстное меню в диспетчере файлов.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
Источник
Linux удалить файл размером 0
Как удалить определенный файл в Linux, если его размер равен 0. Я хочу выполнить это в crontab без каких-либо дополнительных script.
Что-то вроде этого?
Это приведет к удалению всех файлов в каталоге (и ниже), размер которого равен нулю.
Если вам нужен конкретный файл,
Поиск и удаление пустых файлов в текущем каталоге и подкаталогах:
-type f необходимо, так как также каталоги отмечены как нулевые.
Точка . (текущий каталог) – это начальный каталог поиска. Если у вас есть поиск GNU (например, не Mac OS), вы можете опустить его в этом случае:
Если файлы для поиска не указаны, используется текущий каталог (.).
Для этого вы можете использовать команду find . Мы можем сопоставлять файлы с помощью -type f и сопоставлять пустые файлы с помощью -size 0 . Затем мы можем удалить совпадения с помощью -delete .
Это работает для простой BSD, поэтому он должен быть универсально совместим со всеми вкусами. Ниже, например, в pwd ( . )
В Linux команда stat (1) полезна, когда вам не нужно найти (1):
Команда stat здесь позволяет нам просто получить размер файла, что -c %s (см. man-страницы для других форматов). Я запускаю программу stat и фиксирую ее вывод, что $( ) . Этот результат показан численно, что внешний (( )) . Если для размера указан ноль, то это FALSE, поэтому выполняется вторая часть OR. Без нуля (непустой файл) будет TRUE, поэтому rm не будет выполнен.
Для нерекурсивного удаления (с использованием du и awk):
Источник
Какова концепция создания файла с нулевыми байтами в Linux?
Если я сделаю следующее:
а затем выполнить
Я мог видеть test файл с 0 байтами в каталоге.
Но как операционная система обрабатывает концепцию 0 байтов . Если я изложу это в терминах непрофессионала:
0 Байт вообще не является памятью, следовательно, ничего не создано.
Создание файла, должно или должно по крайней мере требовать определенной памяти, верно?
Файл — это (примерно) три отдельные вещи:
- «Inode», структура метаданных, которая отслеживает, кто владеет файлом, разрешениями и списком блоков на диске, которые на самом деле содержат данные.
- Одна или несколько записей каталога (имен файлов), которые указывают на этот индекс
- Фактические блоки самих данных
Когда вы создаете пустой файл, вы создаете только индекс и запись каталога, указывающую на этот индекс. То же самое для разреженных файлов ( dd if=/dev/null of=sparse_file bs=10M seek=1 ).
Когда вы создаете жесткие ссылки на существующий файл, вы просто создаете дополнительные записи каталога, которые указывают на тот же индекс.
Я упростила вещи здесь, но вы поняли идею.
touch создаст инод и ls -i или stat покажет информацию об иноде:
Обратите внимание, что test используется 0 блоков. Для хранения отображаемых данных индекс использует несколько байтов. Эти байты хранятся в таблице inode. Посмотрите на странице ext2 пример структуры inode .
ls (или, ну, stat(2) системный вызов) сообщает вам размер содержимого файла. То, сколько места нужно файловой системе для бухгалтерии, не является частью этого, и как деталь реализации, это не то, о чем программы вообще должны заботиться или даже знать. Если сделать детали реализации видимыми, абстракция файловой системы станет менее полезной.
Сам файл не занимает никакого места, но файловая система занимает, сохраняя имя файла, местоположение, права доступа к нему и тому подобное.
Простой ответ: потому что так определено.
Более длинный ответ: это определено таким образом, потому что некоторые операции концептуально проще:
- Если файл содержит 20 букв «А» и вы удалили все буквы «А», то этот файл станет на 20 байт короче. Та же самая операция с файлом, который состоял только из «AAAAAAAAAAAAAAAAAAAA», должна была бы иметь дело со специальным случаем исчезающего файла.
- На практике, удаление последней строки текстового файла должно осуществляться в специальном случае.
- Текстовым редакторам, которые регулярно создают резервную копию, потребуется специальный код, чтобы справиться с ситуацией, когда пользователь может удалить последнюю строку, перейти к ланчу, а затем вернуться и добавить еще одну строку. Дополнительные осложнения возникают, если некоторые другие пользователи в то же время создали файл с таким именем.
Вы можете сделать больше вещей: * Файлы журнала ошибок, как правило, создаются пустыми, заполняются тогда и только тогда, когда происходит ошибка. * Чтобы узнать, сколько ошибок произошло, вы подсчитываете количество строк в лог-файлах. Если файл журнала пуст, количество ошибок равно нулю, что имеет смысл. * Иногда вы видите файлы, где весь соответствующий текст находится в имени файла, например this-is-the-logging-directory . Это препятствует тому, чтобы чрезмерные администраторы удаляли пустые каталоги после установки, и также предотвращает ошибки, когда программа или пользователь случайно создают файл, где программа хотела бы видеть каталог позже. git Программа (и другие) , как правило, игнорируют пустые каталоги, и если проект / администратор / пользователь хочет иметь запись о том , что каталог существует , даже если он не имеет никакого полезного содержания (пока), вы можете увидеть пустой файл с именем empty или empty.directory .
Никакие операции не становятся более сложными:
- Конкатенация файлов: это просто неоперация с пустым файлом.
- Поиск строки в файле: это охватывается стандартным случаем «если файл короче поискового термина, он не может содержать поисковый термин».
- Чтение из файла: программы должны иметь дело с попаданием в конец файла, прежде чем они получат то, что ожидали, поэтому снова случай файла нулевой длины не требует дополнительного мышления для программиста: он просто нажмет конец -файл с самого начала.
В случае файлов аспект «где-то записан файл» (inode и / или имя файла) стоит поверх вышеупомянутых соображений, но файловые системы не сделали бы этого, если бы пустые файлы были бесполезны.
Как правило, все вышеперечисленные причины, кроме связанных с именами файлов, относятся к последовательностям. Прежде всего это касается строк, представляющих собой последовательности символов: строки нулевой длины являются обычным явлением внутри программ. Строки обычно запрещены на уровне пользователя, если они не имеют смысла: имя файла является строкой, и большинство файловых систем не допускает пустую строку в качестве имени файла; внутренне, при создании имен файлов из фрагментов, программа может иметь пустую строку в качестве одного из фрагментов.
Источник
Удаление файлов нулевого размера 0
GNU/Linux, UNIX, Open Source → *BSD и другие системы
Как можно сделать так, чтобы удалить файлы в указанной папке и подпапках с размером = 0.
kir202
Как можно сделать так, чтобы удалить файлы в указанной папке и подпапках с размером = 0.
find /path/to/dir -type f -size 0 -delete
fly4life, четай man find :))
В man’е есть такая секция ‘EXAMPLES’, посмотри, как там предлагается удалять найденные файлы 😉
Хотя, твой вариант с ‘-delete’ мне тоже нравится больше.
Спасибо за варианты, сделал так как «myst» написал.
Еще нужно сделать так, чтобы имена файлов которые удаляются записывались в какой-нибудь файл например log.txt и внем писалось: файл «имя файла» удален из «путь где находился».
find /path/to/dir -type f -size 0 -delete -print | sed -r ’s
Файл «\2» удалён из «\1»
Genie
find /path/to/dir -type f -size 0 -delete -print | sed -r ’s
Файл «\2» удалён из «\1»
В коде ругается на «sed: illegal option —r» и создаёт файл, но он пустой.
Всё работает, но происходит интересное файл removed_files.txt создается не всегда с первого раза, вчём может быть причина? или это у меня какой-то косяк?
kir202
Всё работает, но происходит интересное файл removed_files.txt создается не всегда с первого раза, вчём может быть причина? или это у меня какой-то косяк?
А тебе надо, чтобы список дописывался в существующий файл? Тогда вместо ‘>’ надо писать ‘>>’.
Ну и рекомендуется к прочтению:
kir202
В коде ругается на «sed: illegal option —r» и создаёт файл, но он пустой.
ну дык надо писать не —r, а -r. в ман бы заглянул для разнообразия.
В коде ругается на «sed: illegal option —r» и создаёт файл, но он пустой.
и где это в моём коде ты нашёл «—r»?
Это не в коде «—r» это пишется после выполнения.
Читай «man sed». Надо писать не —r, а -r (перед r ОДНО тире)
Всё разобрался сделал по примеру «fly4life». Спасибо всем за советы.
Heavy
Читай «man sed». Надо писать не —r, а -r (перед r ОДНО тире)
Воблин. Хоть бы кто попробовал. Например:
Надеюсь, намёк не придётся объяснять по слогам ;).
Надеюсь, намёк не придётся объяснять по слогам ;).
гы. а нефиг пользоваться не-GNU sed-ом… ;))))
Источник