Файлы в Linux

Содержание
Введение: Типы файлов в Linux
Семь типов файлов
-c character
-d directory
-b block
Узнать версию системы
Узнать расположение файла
Переместить файлы, но не директории
touch, >…: Создать один или несколько файлов
: >: Очистка файла
noclobber: Запрет перезаписи
rm: Удаление файла
stat: Информация о файле
Узнать количество строк
cat, echo: Объединение файлов
truncate: Создать файл определённого размера
Узнать кодировку файла
Изменить кодировку файла
chown: Изменить владельца файла
diff: Сравнить файлы
find: Поиск файлов
Обрезать mp3
Связанные статьи

Типы файлов в Linux

В Linux всё является файлами и tty терминалы не исключение.

Выполните

ls -l $(tty)

Или аналогичную команду

ls -l /dev/pts/1

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. То есть этот файл может принимать и показывать символы

Если выполнить

ls -ld /etc

drwxr-xr-x. 118 root root 8192 Mar 28 11:33 /etc

Видно, что тип файла d. То есть directory

Для просмотра дисков/блоков выполните

lsblk

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

Если выполнить

ls -l /dev/sda*

brw-rw----. 1 root disk 8, 0 Mar 28 11:33 /dev/sda brw-rw----. 1 root disk 8, 1 Mar 28 11:33 /dev/sda1 brw-rw----. 1 root disk 8, 2 Mar 28 11:33 /dev/sda2

Можно убедитсья, что тип файлов b. То есть block

? означает что должен быть один любой символ.

ls -l /dev/sda?

brw-rw----. 1 root disk 8, 1 Mar 28 11:33 /dev/sda1 brw-rw----. 1 root disk 8, 2 Mar 28 11:33 /dev/sda2

[12] означает что должен быть либо символ 1 либо символ 2

ls -l /dev/sda[12]

brw-rw----. 1 root disk 8, 1 Mar 28 11:33 /dev/sda1 brw-rw----. 1 root disk 8, 2 Mar 28 11:33 /dev/sda2

Когда вы хотите узнать версию системы вы можете выполнить

ls -l /etc/system-release

lrwxrwxrwx. 1 root root Mar 28 11:33 /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 Mar 28 11:33 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root Mar 28 11:33 /etc/system-release -> centos-release

/etc/centos-release - это настоящий (regular) файл а остальные - ссылки на него.

Если бы вы пользовались redhat то настоящим был бы redhat-release

Ещё один способ получить информацию о версии - выполнить lsb_release -d где -d означает description

lsb_release -d

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)

redhat-lsb-core-4.1-27.el7.centos.1.x86_64

Чтобы скопировать файл в интерактивном режиме воспользуйтесь командой 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 newfile

Можно сделать это с помощью echo

echo "" newfile
echo -n newfile

Либо с помощью >, но этот вариант мне не нравится, так как на моей Ubuntu приходится делать CTRL + C

> newfile

Задать дату

touch -d '15 July 1975' newfile
stat newfile

File: newfile Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 1851125 Links: 1 Access: (0644/-rw-r--r--) Uid: (26167/avorotyn) Gid: ( 2999/sshusers) Access: 1975-07-15 00:00:00.000000000 +0200 Modify: 1975-07-15 00:00:00.000000000 +0200 Change: 2022-06-15 10:05:27.686885410 +0300 Birth: -

Создать сразу несколько файлов

Если файлов нужно немного - можно просто перечислить их через пробел

touch one two three

Чтобы создать одновременно несколько файлов с именами идущими по порядку выполните touch с {}

Этим способом можно создать много файлов одной короткой командой.

touch files/file{1..5}
ls -l files

-rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file1 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file2 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file3 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file4 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file5

Чтобы скопировать директорию files в директорию sites со всем содержимым выполните

cp -R files sites
ls -l sites/files/

total 0 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file1 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file2 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file3 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file4 -rw-rw-r--. 1 andrei andrei 0 Mar 28 11:33 file5

Директория files была скопирована в директорию sites, то есть теперь у sites есть поддиректория files.

Если у вас установлена утилита tree вы можете наглядно изучить вложенность. Если нет - выполните сперва

sudo yum install tree

tree sites

sites └── files ├── file1 ├── file2 ├── file3 ├── file4 └── file5 1 directory, 5 files

Создать ссылку можно командой ln, символьную ссылку ln -s

Как очистить файл в linux

Чтобы удалить содержимое файла используйте

: > имя_файла

noclobber: Запрет перезаписи файла

С помощью noclobber можно запретить перезапись существующих файлов.

echo "ABC" > sample
cat sample

ABC

echo "DEF" > sample
cat sample

DEF

set -o noclobber
set -o | grep noclobber

noclobber on

echo "GHI" > sample

zsh: file exists: sample

Обойти запрет можно добавив | после >

echo "GHI" >| sample
cat sample

GHI

Отключить запрет на перезапись

set +o noclobber

Как удалить файл в linux

rm имя_файла

Информация о файле

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

stat newfile

File: newfile Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 1851125 Links: 1 Access: (0644/-rw-r--r--) Uid: (26167/avorotyn) Gid: ( 2999/sshusers) Access: 2022-06-15 09:53:28.402613374 +0300 Modify: 2022-06-15 09:53:28.402613374 +0300 Change: 2022-06-15 09:53:28.402613374 +0300 Birth: -

Узнать количество строк в файле linux

Чтобы подсчитать сколько всего строк в файле today.log используйте

wc -l today.log

282608 today.log

Объединение файлов

Для объединения файла one с файлом two достаточно выполнить

cat one two

Объединить можно сразу несклько файлов.

Рассмотрим три файла one , two , three следующего содержания

one

Cool bookstore: Book24

two

Best hotels: Booking.com

three

Official Samsung Store: Samsung

Объединим их и проверим результат - он появится в консоли как и в случае двух файлов

cat one two three

Cool bookstore: Book24
Best hotels: Booking.com
Official Samsung Store: Samsung

Теперь объедими файлы в один новый файл big

cat one two three > big
vi big

Cool bookstore: Book24 Best hotels: Booking.com Official Samsung Store: Samsung

К новому файлу big мы можем дописать в конец файл one

cat big one

Cool bookstore: Book24
Best hotels: Booking.com
Official Samsung Store: Samsung
Cool bookstore: Book24

echo

Те же действия можно выполнить с помощью команды echo

Создать файл определённого размера

Создадим файл 10M.txt размером в 10 Mb

truncate -s 10M /usr/share/10M.txt

Узнать кодировку файла

Предположим вы только что создали файл one.txt

touch one.txt

Чтобы узнать его кодировку выполните

file -i one.txt

one.txt: inode/x-empty; charset=binary

Напишите, что-то в файле и снова проверьте кодировку

echo heihei.ru < one.txt
file -i one.txt

one.txt: text/plain; charset=us-ascii

Убедитесь, что команда file -i опеределила разные кодировки binary и us-ascii

У вас может быть не us-ascii а другой вариант

Добавим в файл кириллические символы

echo добро << one.txt
file -i one.txt

one.txt: text/plain; charset=utf-8

Смена кодировки

Предположим у вас есть файл файл.html в неправильной кодировке.

Менять кодировку файлов можно следующим способом:

iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile

Пример:

cat файл.html | iconv -f cp1251 -t utf-8 > новый.html

В одну сторону. Потом открываем, редактируем, закрываем.

cat новый.html | iconv -f utf-8 -t cp1251 > файл.html

Конвертировать UTF-8 файл в SHIFT-JIS файл

iconv -f UTF-8 -t SHIFT-JIS utf-8-file > shift-jis-file
file -i shift-jis-file

shift-jis-file: text/plain; charset=unknown-8bit

touch sample echo "Привет" > sample file -i sample

sample: text/plain; charset=utf-8

iconv -f UTF-8 -t Windows-1251 sample > windows-1251-file
file -i windows-1251-file

windows-1251-file: text/plain; charset=iso-8859-1

Как вариант можно использовать convmv

Если у вас возникли проблемы с кодировкой на сайте советую прочитать статью «Сайт в неверной кодировке»

Изменить владельца файла

Допустим у вас есть файл one владельцами которого являются пользователь user и группа group

-rwx------. 1 user group 21012480 Dec 1 16:49 one

Чтобы изменить владельцев на andrei и heihei выполните

chown andrei:heihei one

-rwx------. 1 andrei heihei 21012480 Dec 1 16:49 one

Разделы про поиск и сравнение файлов теперь в отдельных статьях.

В статье /dev/urandom можно узнать о том как создать файл со случайным именем

Обрезать mp3

ffmpeg -i original.mp3 -vn -acodec copy -ss 00:00:00 -to 00:30:00 part_01.mp3

Похожие статьи
Файлы
Linux
Bash
Директории
Ссылки
Изучить свободное место на диске
Объединить файлы
Объединить .pdf файлы
diff: сравнение файлов
find: поиск файлов основы
find: продвинутый поиск файлов
wget: скачивание файлов
rename: переименовать файлы
SCP: обмен файлами;
Архивация/Распаковка
tree: просмотр директорий
convert
Изображение баннера

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: