Файлы в Linux
Типы файлов в 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 Dec 12 23:30 /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 Dec 12 23:30 /dev/sda brw-rw----. 1 root disk 8, 1 Dec 12 23:30 /dev/sda1 brw-rw----. 1 root disk 8, 2 Dec 12 23:30 /dev/sda2
Можно убедитсья, что тип файлов b. То есть block
? означает что должен быть один любой символ.
ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 Dec 12 23:30 /dev/sda1 brw-rw----. 1 root disk 8, 2 Dec 12 23:30 /dev/sda2
[12] означает что должен быть либо символ 1 либо символ 2
ls -l /dev/sda[12]
brw-rw----. 1 root disk 8, 1 Dec 12 23:30 /dev/sda1 brw-rw----. 1 root disk 8, 2 Dec 12 23:30 /dev/sda2
Когда вы хотите узнать версию системы вы можете выполнить
ls -l /etc/system-release
lrwxrwxrwx. 1 root root Dec 12 23:30 /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 Dec 12 23:30 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root Dec 12 23:30 /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 Dec 12 23:30 file1 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file2 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file3 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file4 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file5
Чтобы скопировать директорию files в директорию sites со всем содержимым выполните
cp -R files sites
ls -l sites/files/
total 0 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file1 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file2 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file3 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 file4 -rw-rw-r--. 1 andrei andrei 0 Dec 12 23:30 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