Linux создать файл заполненный нулями

Обновлено: 05.07.2024

Философия Linux гласит - всё в системе есть файл. Мы ежедневно работаем с файлами, и программы, которые мы выполняем, - тоже файлы. В разных случаях нам может понадобиться создать в системе файлы определённого типа. Если вам интересно, какие типы файлов в Linux можно создать, смотрите отдельную статью.

Конечно, всё очень просто делается с помощью мышки и файлового менеджера. Но если вы дружите с клавиатурой, создать файл через терминал Linux намного быстрее и, как вы увидите, эффективнее. В терминале вы можете не только создавать пустые файлы, но и создавать файл с уже готовым содержимым, файлы определённого размера, и с нужными метаданными.

Как всё это делать, вы узнаете из этой статьи. Мы рассмотрим все доступные средства создания файлов в терминале Linux. Поехали!

1. Редактор nano

Самый распространённый способ создать текстовый файл в Linux - это использовать консольные текстовые редакторы. Например nano. После ввода команды открывается редактор, и вы прописываете нужный текст, например:

files

2. Редактор Vi

Тот же принцип, но программа намного серьёзнее:

files1

Если вы в первый раз столкнулись с vim, то предупрежу - это необычный редактор. Здесь есть два режима: режим вставки и командный. Переключаться между ними можно с помощью кнопки Esc. Для выхода из редактора в командном режиме наберите :q, для сохранения файла - :w. Вообще, Vim - очень полезный инструмент. Чтобы узнать побольше о его возможностях и выучить основы, выполните: vimtutor.

Понятное дело, в этом пункте можно говорить и о других редакторах, в том числе и с графическим интерфейсом. Но мы их опустим и перейдём к другим командам создания файла в Linux.

3. Оператор перенаправления >

Это, наверное, самая короткая команда для создания файла в Linux:

files2

Оператор оболочки для перенаправления вывода позволяет записать вывод любой команды в новый файл. Например, можно подсчитать md5 сумму и создать текстовый файл в Linux с результатом выполнения.

files3

Это рождает ещё несколько способов создания файла в Linux, например, выведем строку в файл с помощью команды echo:

echo "Это строка" > файл.txt

files4

Этот способ часто используется для создания конфигурационных файлов в Linux, так сказать, на лету. Но заметьте, что sudo здесь работать не будет. С правами суперпользователя выполниться echo, а запись файла уже будет выполнять оболочка с правами пользователя, и вы всё равно получите ошибку Access Denied.

Ещё тем же способом можно сделать примитивный текстовый редактор для создания файла. Утилита cat без параметров принимает стандартный ввод, используем это:

files5

После выполнения команды можете вводить любые символы, которые нужно записать в файл, для сохранения нажмите Ctrl+D.

А ещё есть утилита printf, и здесь она тоже поддерживает форматирование вывода:

printf "Это %d текстовая строка\n" 1 > файл

files6

Этот способ создать файл в Linux используется довольно часто.

4. Оператор перенаправления вывода >>

Также можно не только перезаписывать файл, а дописывать в него данные, с помощью перенаправления оператора >>. Если файла не существует, будет создан новый, а если существует, то строка запишется в конец.

echo "Это текстовая строка" > файл.txt
$ echo "Это вторая текстовая строка" >> файл.txt

files7

5. Оператор перенаправления 2>

file11

Если команда не выдает ошибок, файл будет пустым.

6. Оператор перенаправления и head

С помощью команды head можно выбрать определённый объем данных, чтобы создать текстовый файл большого размера. Данные можно брать, например, с /dev/urandom. Для примера создадим файл размером 100 мегабайт:

base64 /dev/urandom | head -c 100M > файл

7. Команда cp

Команда cp используется для копирования файлов в Linux. Но с её помощью можно и создать файл. Например, чтобы создать пустой файл, можно просто скопировать /dev/null:

cp /dev/null файл

8. touch

Вот мы и подобрались к непосредственному созданию файлов через терминал, для этого в Linux есть специальная утилита touch. Она позволяет создать пустой файл в Linux, при этом указывать дату создания, права доступа и другие метаданные.

Чтобы создать пустой файл Linux, просто наберите:

files8

Можно создать несколько пустых файлов сразу:

touch файл1 файл2

Опция -t позволяет установить дату создания. Дата указывается опцией -t в формате YYMMDDHHMM.SS. Если не указать, будет установлена текущая дата. Пример:

touch -t 201601081830.14 файл

Можно использовать дату создания другого файла:

touch -r шаблон файл

Также можно установить дату последней модификации, с помощью опции -m:

touch -m -t 201601081830.14 файл

Или дату последнего доступа:

touch -a -t 201601081830.14 файл

Чтобы посмотреть, действительно ли задаётся информация, которую вы указали, используйте команду stat:

files9

9. Утилита dd

Это утилита для копирования данных из одного файла в другой. Иногда необходимо создать файл определённого размера в Linux, тогда можно просто создать его на основе /dev/zero или /dev/random, вот так:

dd if=/dev/zero of=

files10

Параметр if указывает, откуда брать данные, а of - куда записывать, count - необходимый размер. Ещё можно указать размер блока для записи с помощью bs, чем больше размер блока, тем быстрее будет выполняться копирование.

Создание специальных файлов в Linux

В Linux, кроме выше рассмотренных обычных текстовых и бинарных файлов, существуют ещё и специальные файлы. Это файлы сокетов и туннелей. Их нельзя создать обычными программами, но для этого существуют специальные утилиты, смотрите подробнее в статье, ссылку на которую я дал вверху.

Выводы

Это были все возможные команды для создания файла в Linux. Если вы знаете другие, которые следовало бы добавить в статью - поделитесь в комментариях.

Как быстро создать пустой и непустой текстовый файл в Linux через терминал?


3,728 4 4 золотых знака 18 18 серебряных знаков 54 54 бронзовых знака

Существует N-ое количество способов создания текстовых файлов, мы приведём два основных, которые, на наш взляд, самые быстрые с точки зрения клавиатурного ввода, и несколько других.

Под фразой «при вводе» подразумевается, что нужно ввести команду в терминал и нажать клавишу Enter .

Создание пустых файлов

При вводе этой команды в текущей директории будет создан пустой файл с именем a .

Можно вводить без пробела:

Более читаемый вариант, помогает не ошибиться и не записать случайно результат предыдущей команды в файл:

Можно создать сразу сколь угодно файлов:

Хотя так удобней (о touch будет далее):

Создание файлов с текстом

При вводе этой команды в текущей директории будет создан файл с именем h , содержащий текст blablabla и один перевод строки.

Можно вводить без пробела вокруг оператора > :

Выводимый контекст можно заключить в кавычки, а можно и не заключать, даже если он содержит пробелы:

Все три вышеперечисленные команды дают одинаковый результат (кроме имён файлов, естественно).

Также можно провернуть такую штуку:

При вводе этой команды в текущей директории будут созданы два пустых файла: m и n ; и файл o , содержащий текст 123 и один перевод строки.

Иными словами, результат всех команд, которые что-нибудь выводят, можно запихнуть в файл .

Ман по man 'у . При вводе этой команды в текущей директории будет создан файл с именем p , содержащий мануал по команде man .

Календарик на 2000 год .

Другие способы создания файлов

Создание пустого файла с помощью touch

При вводе этой команды в текущей директории будет создан пустой файл с именем q .

Если быть точным, то touch это команда, основное назначение которой изменить время последнего изменения или последнего доступа файла, если же файл не существует, то она создает его. Цитата.

Создание файла «с текстом» с помощью cat

При вводе этой команды в текущей директории будет создан пустой файл с именем r и терминал перейдёт в режим конкатенации вводимых строк к концу содержимого этого файла. То есть мы можем сразу же начать заполнять файл текстом. Сохранение набранного текста будет происходит построчно по нажатию клавиши Enter . Иными словами, по нажатию клавиши Enter будет выполняться конкатенация.

Можно вводить без пробела:

Пример

  • Вводим cat>s — в текущей директории создан пустой файл с именем s .
  • Набираем 123 — этого текста ещё не будет в файле.
  • Нажимаем Enter — текст 123 записался в файл и курсор, как в терминале, так и в файле, перешёл на новую строку.

На строку выше вернуться нельзя.

Выйти из режима конкатенации можно с помощью Ctrl+D (EOF — End Of File) в начале строки. Если вы уже начали набирать строку, Ctrl+D не закончит ввод файла, но запишет набранную часть строки без символа конца строки. Так вы можете записывать строки частями. Для выхода с незавершённой строкой можно нажать Ctrl+D дважды, тогда последняя строка в файле не будет иметь символа конца строки (EOL — End Of Line).

Создание файла с помощью редактора.

Очевидно, что мы можем исользовать редактор типа nano , vi , vim , etc для создания файла.

Пример

  1. Вводим nano t — открывается редактор nano в терминальном режиме.
  2. Вводим 123 и нажимаем Ctrl + O (не ноль, а буква), а затем Enter — в текущей директории создался файл с именем t , содержащий текст 123 и один перевод строки.
  3. Чтобы выйти и редактора нажимаем Ctrl + X (внизу редактора подсказки).

Создание файла с данными через dd

Полезно иногда создавать файл определенного размера с нулями

или случайными байтами

Создается файл из 100 блоков по 10 мегабайт - 1 ГБ.

Выделение места под файл средствами файловой системы

Такие команды работают быстерее dd потому как сами данные не записываются, а просто выделяется область диска

fallocate резервирует место под файл на диске, а truncate обрезает файл или добавляет до нужного размера, резервируя место на диске.

При создании файлов таким образом в них могут содержаться куски удаленных рание файлов на некоторых системах.

есть файл file.avi 10GB
надо заполнить место, занимаемое им, нулями.
единственное, что приходит в голову, использовать dd с чтением из /dev/zero и записью в этот файл. но можно ли быть уверенным, что писать будет в те же сектора на жестком диске или файл сократится до 0 байт и, когда пойдет запись в него, будет сделано новое выделение места?

буду благодарен за любую идею

спасибо :)

> есть файл file.avi 10GB
> надо заполнить место, занимаемое им, нулями.
> единственное, что приходит в голову, использовать dd с чтением из /dev/zero и
> записью в этот файл. но можно ли быть уверенным, что писать
> будет в те же сектора на жестком диске или файл сократится
> до 0 байт и, когда пойдет запись в него, будет сделано
> новое выделение места?

Нельзя быть уверенным
> буду благодарен за любую идею

rm -P, а потом dd
> спасибо :)

> rm -P, а потом dd

мне бы только заполнить файл нулями, удалять нельзя. а если пересоздавать заново, то надо заранее озаботиться о сохранении всех прав (ntfs). тоже не знаю, как это сделать.
вообщем, вариант, в принципе, вполне рабочий, можно осилить, только лишние операции будут, а если учесть, что там много гигабайт, то это затянется. поэтому и хотелось просто "пробежаться" по файлу нулями и все.

> rm -P, а потом dd

гм, кстати, у меня в rm нет такого ключа (-P). однако :( (Slackware)
сначала в нете почитал про этот ключ, а только потом попробовал у себя.

это из FreeBSD

-P Overwrite regular files before deleting them. Files are
overwritten three times, first with the byte pattern 0xff,
then 0x00, and then 0xff again, before they are deleted.

> ну или shred

dd if=/dev/zero of=/fail bs=1M count=500
ты это имел ввиду?

>> ну или shred
> dd if=/dev/zero of=/fail bs=1M count=500
> ты это имел ввиду?

Надо полагать он имел в виду shred. Или wipe c параметром -R и др. Типа такого.

Каждый, кто пользуется командной строкой Linux, встречался со списками полезных советов. Каждый знает, что повседневные дела вполне можно выполнять эффективнее, да только вот одно лишь это знание, не подкреплённое практикой, никому не приносит пользы.

Как выглядят типичные трудовые будни системного администратора, который сидит на Linux? Если абстрагироваться от всего, кроме набираемых на клавиатуре команд, то окажется, что команды эти постоянно повторяются. Всё выходит на уровень автоматизма. И, если даже в работе есть что улучшать, привычка противится новому. Как результат, немало времени уходит на то, чтобы делать так, как привычнее, а не так, как быстрее, и, после небольшого периода привыкания – удобнее. Помнить об этом, сознательно вводить в собственную практику новые полезные мелочи – значит профессионально расти и развиваться, значит – экономить время, которое можно много на что потратить.

image


Перед вами – небольшой список полезных приёмов работы с командной строкой Linux. С некоторыми из них вы, возможно, уже знакомы, но успели их позабыть. А кое-что вполне может оказаться приятной находкой даже для знатоков. Хочется надеяться, что некоторые из них будут вам полезны и превратятся из «списка» в живые команды, которыми вы будете пользоваться каждый день.

Вывод результатов работы команд в виде таблицы

Иногда вывод результатов работы команд выглядит как мешанина из беспорядочных строк. Найти то, что надо, в таких данных можно, но работать с ними неудобно. Например – что-то подобное можно получить в ответ на команду mount . Хорошо бы то же самое вывести в виде таблицы. И это не только возможно, но ещё и очень просто:




Результаты работы команды mount, оформленные в виде таблицы

По умолчанию команда формирует табличное представление, ориентируясь на пробелы между словами. А что, если в качестве разделителей используются другие символы, вроде двоеточий? Например – в выводе cat /etc/passwd ?

Упорядочить можно и такие данные – достаточно указать символ-разделитель с параметром –s . Например, ниже приведена команда для символа «:».




Отформатированный вывод /etc/passwd

Многократный повтор команды до её успешного завершения

Если вы погуглите на эту тему, то обнаружите, что многие задают вопрос о том, как повторять команду до тех пор, пока она не будет успешно выполнена. Например, такое может быть полезным при пинге сервера до тех пор, пока он не откликнется, при проверке выгрузки файлов, или при опросе некоего URL до тех пор, пока он не окажется доступен.

Решить подобную задачу поможет цикл while true . Выглядит всё это так:



Команда будет повторяться до её успешного завершения

В этом примере конструкция >/dev/null 2>&1 перенаправляет вывод программы в /dev/null , включая и Standard Error, и Standard Out.

Вероятнее всего, это – один из самых полезных приёмов работы с командной строкой Linux.

Сортировка процессов по используемой памяти




Отсортированный список процессов

Сортировка процессов по использованию ресурсов CPU

Сортировка процессов по использованию CPU делается так:




Отсортированный список процессов

Для того, чтобы вывести сведения об архитектуре, используйте команду getconf LONG_BIT .

Одновременный просмотр нескольких лог-файлов

Для просмотра лог-файлов вполне подходит команда tail , но иногда может понадобиться одновременная работа с несколькими подобными файлами. Для решения этой задачи подойдёт консольный инструмент multitail , который поддерживает выделение текста, фильтрацию и многие другие полезные возможности.



Работа с multitail

Установить эту утилиту, если вы её у себя не найдёте, можно командой apt-get install multitail .

Возврат к предыдущей директории

Для того, чтобы вернуться к предыдущей директории, просто наберите cd –.

Мониторинг с регулярными интервалами

Использование утилиты watch (например, watch df –h ) поможет организовать наблюдение за выводом любой команды. Например, можно наблюдать за объёмом свободного пространства, и за тем, как он меняется.

Пожалуй, вы сами сможете найти подходящие сценарии для использования этой команды.

Продолжение выполнения программы после окончания сессии

Когда вы запускаете любую программу в фоне и закрываете консоль, программа тоже завершит работу. А что, если надо, чтобы программа работала и после закрытия оболочки?

Для того, чтобы этого добиться, можно воспользоваться командой nohup , название которой расшифровывается как «no hang-up». Выглядит это так:


Пожалуй, эта команда – одна из тех, о которой забывают чаще всего, открывая по несколько окон терминала только ради исполняющихся в них команд.



Команда nohup

В примере, показанном на рисунке выше, в текущей директории будет создан файл nohup.out , содержащий вывод команды:



Файл nohup.out

Полезная штука, согласны?

Автоматический ответ yes или no

Предположим, вы хотите автоматизировать процесс, который требует от пользователя постоянно отвечать yes . Сделать это можно, используя команду yes :


Возможно, вместо этого вы решите автоматизировать отрицательные ответы. Тут поможет такая конструкция:




Автоматизация ответа YES

Создание файла заданного размера

Создавать файлы заданного размера можно, используя команду dd :


Вышеприведённая команда создаст файл размером 10 Мб, заполненный нулями.



Создание файла заданного размера

Выполнение последней команды с root-привилегиями

Иногда можно забыть ввести sudo перед командой, которой нужны root-привилегии. Вводить всё заново нет нужды – достаточно воспользоваться такой командой:




Выполнение последней команды с root-привилегиями

Создание протокола терминальной сессии

Для того, чтобы записать в файл всё, что было выведено в окне терминала, можно воспользоваться командой script .

После выхода из сессии протокол будет записан в файл typescript .

Замена пробелов на знаки табуляции

Вот команда, которая позволяет заменить пробелы на знаки табуляции:


На самом деле, она универсальна и умеет работать с любыми символами.

Замена строчных букв на прописные

А вот – пример вышеописанной команды для замены строчных букв в файле с текстом на прописные:

image



Замена строчных букв в файле на прописные

Автоматическое формирование списка аргументов для команд: xargs

Утилита xargs , пожалуй, достойна звания одной из самых полезных возможностей командной строки Linux. Её можно использовать для передачи вывода некоей команды в качестве аргумента для другой. Например, вот как можно выполнить поиск .jpg-файлов и сжать их, или сделать с ними что-нибудь ещё:


Или, возможно, у вас имеется файл со списком URL, и вы хотите загрузить ресурсы по этим адресам, или ещё как-то их обработать:


Тут надо учитывать, что вывод первой команды передаётся в качестве аргумента в конце команды xargs . Если при конструировании второй команды надо явно указать место, куда должны попасть выходные данные первой, достаточно воспользоваться парой фигурных скобок, <> и параметром –i для замены аргумента в нужном месте:




Команда xargs

Итоги

Полезности для командной строки Linux – тема невероятно обширная. Поэтому любой список, подобный нашему, можно пополнять очень и очень долго. Например, много неожиданного скрыто в командах awk и sed . Пожалуй, главное – чтобы такие вот списки шли в дело.

Читайте также: