Как создать файл в Linux: 12 способов
Эти способы тестировались на дистрибутиве Ubuntu, но будут работать на любой системе Linux.
Создание пустого файла при помощи touch
Пояснение: Команда touch предназначена для того, чтобы поменять дату изменения файла на текущую. Однако ее также часто используют для создания файлов.
Создание сразу нескольких пустых файлов при помощи touch
Создание пустого файла при помощи echo
Пояснение: Команда echo предназначена для вывода на экран строки, которая в нее передается. Символ > перенаправляет вывод в файл. Соответственно мы перенаправили пустоту в файл.
Трюк для создания пустых файлов
Пояснение: символ > перенаправляет вывод, а мы ничего не выводим, просто перенаправляем пустоту в файл. Это самый короткий способ создать пустой файл.
Или лучше такой пример:
Двоеточие в начале, чтобы случайно не записать вывод предыдущей команды в файл.
Создание файла с содержимым
Пояснение: Выводим строку 123 и перенаправляем этот вывод в файл. Файл будет содержать строку 123
Создание файла путем объединения других файлов с помощью cat
Пояснение: Команда cat выводит на экран содержимое на экран, однако мы перенаправляем этот вывод в файл. Соответственно мы создали файл big_file в котором находится содержимое из трех других файлов.
Создание файла с помощью любой команды и символа >
Мы можем создать файл, с помощью команд, которые выводят что-то на экран, записав этот вывод в файл. Например ps aux выводит информацию о текущих процессах в системе. Мы просто можно записать весь вывод этой команды в файл file.txt и потом его проанализировать.
Записываем в файл справку по команде man :
Записываем в файл календарь на 2021 год
Создание фала при помощи редактора nano
Этот редактор чуть более привычный простому пользователю, чем Vim, однако он должен быть установлен в вашей системе.
Иначе вы получите ошибку о несуществующей команде Command ‘nano’ not found .
Проверить установлен ли nano в вашей системе можно с помощью следующей команды:
Результатом будет информация об установленном редакторе:
Либо сообщение об ошибке: Command ‘nano’ not found
Создание файла при помощи текстового редактора Vim
Если вы никогда не работали с этим редактором, то этот способ вам не подойдет, т.к. без пары часов за документацией Vim не освоить.
На всякий случай скажу вам способ выйти из этого редактора, т.к. даже это совершенно не очевидно: нажмите Esc , затем : затем введите q! затем нажмите Enter — это способ выхода без сохранения. Для сохранения нужно набрать x! вместо q
Создание файла определенного размера c помощью fallocate
Таким образом вы создали файл hello.txt размером 10 мегабайт.
Создание файла определенного размера с помощью dd
Создание файла-сокета c помощью команды mkfifo
После создания вам нужно установить на него права, чтобы нужные программы могли им пользоваться
Создание файла при помощи HEREDOC
Пояснение: мы сначала пишем cat << EOF > file.txt причем вместо EOF может быть любая строка, которой нет в тексте, который мы собираемся написать. Затем когда мы завершили заполнение многострочного файла, просто переходим на следующую строку и вводим EOF. В итоге содержимое нашего файла будет:
Спасибо за внимание! Если вы знаете какой-нибудь интересный и полезный способ создания фалов — напишите его в комментариях.
Linux: создание файла определённого размера
Вот несколько примеров.
С помощью утилиты dd :
$ dd of=file bs=1 count=0 seek=10M
0+0 записей считано
0+0 записей написано
скопировано 0 байт (0 B), 2,204e-05 c, 0,0 kB/c
$ ls -lh | grep file
-rw-rw-r– 1 setevoy setevoy 10M Мар 30 13:10 file
Другой способ – при помощи утилиты truncate , которая и предназначена именно для таких манипуляций с файлами:
$ touch file2
$ truncate -s 10240 file2
$ ls -lh | grep file3
-rw-rw-r– 1 setevoy setevoy 10K Мар 30 13:15 file3
С её же помощью можно и изменить размер уже созданного файла:
$ truncate -s 1024 file3
$ ls -lh | grep file3
-rw-rw-r– 1 setevoy setevoy 1,0K Мар 30 13:17 file3
Ещё один вариант при помощи dd :
$ dd if=/dev/zero of=file4 bs=1M count=10
10+0 записей считано
10+0 записей написано
скопировано 10485760 байт (10 MB), 0,0247056 c, 424 MB/c
$ ls -lh | grep file4
-rw-rw-r– 1 setevoy setevoy 10M Мар 30 13:17 file4
Файлы в Linux
В Linux всё является файлами и tty терминалы не исключение.
Или аналогичную команду
crw—w—-. 1 andrei tty 136, 1 Nov 19 12:43 /dev/pts/1
Первый символ — это тип файла.
Доступно семь типов файлов: обычные, директории, символьные, блоки, сокеты, именованые каналы, символьные ссылки
— : regular file
d : directory
c : character device file
b : block device file
s : local socket file
p : named pipe
l : symbolic link
Тип c означает character. То есть этот файл может принимать и показывать символы
drwxr-xr-x. 118 root root 8192 Jun 13 16:17 /etc
Видно, что тип файла d. То есть directory
Для просмотра дисков/блоков выполните
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 7G 0 part ├─centos-root 253:0 0 6.2G 0 lvm / └─centos-swap 253:1 0 820M 0 lvm [SWAP] sr0 11:0 1 57.7M 0 rom /run/media/andrei/VBox_GAs_6.1.10
brw-rw—-. 1 root disk 8, 0 Jun 13 16:17 /dev/sda brw-rw—-. 1 root disk 8, 1 Jun 13 16:17 /dev/sda1 brw-rw—-. 1 root disk 8, 2 Jun 13 16:17 /dev/sda2
Можно убедитсья, что тип файлов b. То есть block
? означает что должен быть один любой символ.
brw-rw—-. 1 root disk 8, 1 Jun 13 16:17 /dev/sda1 brw-rw—-. 1 root disk 8, 2 Jun 13 16:17 /dev/sda2
[12] означает что должен быть либо символ 1 либо символ 2
brw-rw—-. 1 root disk 8, 1 Jun 13 16:17 /dev/sda1 brw-rw—-. 1 root disk 8, 2 Jun 13 16:17 /dev/sda2
Когда вы хотите узнать версию системы вы можете выполнить
ls -l /etc/system-release
lrwxrwxrwx. 1 root root Jun 13 16:17 /etc/system-release -> centos-release
Тип файла l означает link то есть это не настоящий файл, а ссылка
ls -l /etc/system-release /etc/centos-release /etc/redhat-release
-rw-r—r—. 1 root root 37 Oct 23 17:53 /etc/centos-release lrwxrwxrwx. 1 root root Jun 13 16:17 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root Jun 13 16:17 /etc/system-release -> centos-release
/etc/centos-release — это настоящий (regular) файл а остальные — ссылки на него.
Если бы вы пользовались redhat то настоящим был бы redhat-release
Ещё один способ получить информацию о версии — выполнить lsb_release -d где -d означает description
Description: CentOS Linux release 7.9.2009 (Core)
Узнать расположение файла
Узнать где находится файл lsb_release можно командой which lsb_release. Чтобы сразу получить дополнительную информацию выполните
ls -lF $(which lsb_release)
-rwxr-xr-x. 1 root root 15929 Mar 27 2015 /usr/bin/lsb_release*
Опция -F означает показать тип файлов. Поэтому нам удалось увидеть * после lsb_release. * означает, что файл исполняемый.
Чтобы узнать откуда взялся файл можно воспользоваться командой rpm с опциями q (query) и f (file)
rpm -qf $(which lsb_release)
Чтобы скопировать файл в интерактивном режиме воспользуйтесь командой cp с опцией i (interactive)
interactive означает, что если файл с таким имененм существует, вас спросят прежде чем затирать его
cp -i /etc/hosts .
cp -i /etc/hosts .
cp: overwrite ‘./hosts’?
Чтобы создать директорию сразу же с поддиректорией внутри воспользуйтесь командлой mkdir с опцией p (parent)
mkdir -p sites/heiheiru
ls -l sites
total 0
drwxrwxr-x. 2 andrei andrei 6 Nov 19 13:40 heiheiru
Создать сразу несколько файлов
Если файлов нужно немного — можно просто перечислить их через пробел
touch one two three
Чтобы создать одновременно несколько файлов с именами идущими по порядку выполните touch с <>
Этим способом можно создать много файлов одной короткой командой.
touch files/file <1..5>
ls -l files
-rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file1 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file2 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file3 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file4 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file5
Чтобы скопировать директорию files в директорию sites со всем содержимым выполните
cp -R files sites
ls -l sites/files/
total 0 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file1 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file2 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file3 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file4 -rw-rw-r—. 1 andrei andrei 0 Jun 13 16:17 file5
Директория files была скопирована в директорию sites, то есть теперь у sites есть поддиректория files.
Если у вас установлена утилита tree вы можете наглядно изучить вложенность. Если нет — выполните сперва
sudo yum install tree
sites └── files ├── file1 ├── file2 ├── file3 ├── file4 └── file5 1 directory, 5 files