Как создать пустой файл из командной строки?
Используйте команду touch
:
The touch utility sets the modification and access times of files to the
current time of day. If the file doesn't exist, it is created with
default permissions.
Пример:
touch newfile
> newfile
Также создаст пустой файл. Если файл уже существует, он будет усечен (опустошен). Чтобы сохранить содержимое файла, используйте >>
для добавления, как в:
>> file
Даже если файл существует, его содержимое останется нетронутым.
Редактирование: Если у вас нет содержимого для ввода, то это быстрее:
user@host$ :> newfile
user@host$ :>> new_or_existing_file
Примечание. :
- это команда здесь. Она не является частью приглашения.
cat /dev/null > file1.ext
точный способ также существует другой способ
echo "" > file2.ext
Разница в том, что file1.ext будет нулевым байтом, а file2.ext - одним байтом. Вы можете проверить это с помощью
ls -l file*.*
Команда
echo -n > file
создает пустой файл, если ваша версия echo
поддерживает переключатель -n.
Или вы можете использовать printf
printf '' > file
] В общем, создание любого обычного файла 1 файл в Linux включает open (2)
, openat (2)
,и системные вызовы creat (2)
(в частности, с флагами O_CREAT
). Это означает, что если вы вызовете любую утилиту командной строки, которая выполняет эти системные вызовы, вы можете создать новый пустой файл.
Чаще всего новое имя файла создается примерно так:
touch / tmp / new_file
: > / tmp / new_file
true> / tmp / new_file
> / tmp / new_file
(только оболочка bash) touch - это отдельная утилита. Его первоначальная цель - обновить время доступа и изменения файла, однако, если файл не существует, он будет создан. Также обратите внимание, что имя файла -
обрабатывается особым образом, поэтому, если вы хотите создать файл с буквальным названием -
, вам придется заключить его в одинарные или двойные кавычки.
Напротив, >
- это оператор перенаправления оболочки для потока stdout . Оператор >
специально вызывает системный вызов openat ()
с флагами O_WRONLY | O_CREAT | O_TRUNC
. Это означает, что если имя файла не существует - оно будет создано, а если оно есть - данные будут усечены (и, следовательно, удалены, поэтому >
следует использовать с осторожностью). В большинстве современных оболочек true
или :
является встроенным, поэтому выполнение :> / tmp / new_file
будет более эффективным, хотя и незначительно по сравнению с touch /tmp/new_file[1171797 visible.
Но, конечно, на этом не заканчивается. Как уже упоминалось, все, что может выполнять системные вызовы open ()
, openat ()
и create ()
, создаст файл. Следовательно, мы можем сделать:
true | dd of = / tmp / newfile
truncate --size 0 /tmp/new_filename.txt
cp / dev / null / tmp / null_file
true | tee / tmp / some_other_file
mktemp
или tempfile
(для создания временных файлов, которые не должны существовать между перезагрузками!) Конечно, все вышеупомянутые утилиты не создают файлы исключительно . Но они выполняют необходимый системный вызов, что позволяет нам адаптировать команды.
Конечно, на уровне программирования или написания сценариев мы также можем захотеть создать файл, особенно в целях повышения эффективности (поскольку вызов внешних команд, таких как touch
из сценария Perl или Python потребуют дополнительных ресурсов).
Однострочный текст Python:
$ python -c 'import sys,os;f=sys.argv[1];os.utime(f,None) if os.path.exists(f) else open(f,"a").close' myfile.txt
Мы можем сделать его короче с помощью этого:
$ python -c 'import sys,os;f=sys.argv[1];'$'\n''with open(f,"a"): os.utime(f,None)' mysecondfile.txt
И в Perl:
$ perl -e 'open(my $fh,">","/tmp/perlfile")'
1 Для других типов файлов, таких как жесткие / программные ссылки, символьные или блочные специальные устройства, каталог, именованные каналы или сокеты, требуются совершенно другие системные вызовы.
Использование редактора vim
вы также можете создать пустой файл.
vim filename
Затем сохраните
:wq