Добро пожаловать в базу знаний

Работа с файлами

Куда устанавливаются программы в Linux'е

В Linux в соответствии со стандартом FHS для прикладных программ (https://ru.wikipedia.org/wiki/FHS) файлы одного типа и назначения помещаются в соответствующие директории,…

В Linux в соответствии со стандартом FHS для прикладных программ (https://ru.wikipedia.org/wiki/FHS) файлы одного типа и назначения помещаются в соответствующие директории, в отличие от Windows, где все файлы программы помещаются в одну папку, то есть разные типы файлов в одной программе (картинки, документация, примеры, конфигурационные фалйы, библиотеки и исполняемые файлы) при установке расфасовываются не в 1 место, а в разные в зависимости от типа файла и его предназначения.

Менеджер пакетов apt в Debian, pacman в Arch, dnf в Fedora и т.д. в основном всё кладут в /usr :
- в /usr/bin или /usr/local/bin - исполняемые файлы пакетов из репозиториев, где usr - User System Resources (аналочино Program Files в Windows)
- в /usr/local - файлы помещаемые с использованием утилиты make install
- в /usr/lib - библиотеки
- в /usr/share - разделяемые немодифицируемые данные
- в /usr/share/applications - для программ с интерфейсом «меню приложений»
В /etc - конфиги
В /bin - системные программы, наиболее важные для функционирования системы
В /var - каталоги для логов и специальных файлов
В /opt или /home - shar-ы проприетарного ПО, вручную установленные сторонние программы или вспомогательные файлы пакетов из репозиториев


Как узнать куда установилась программа:
1) при установке любого пакета список его файлов сохраняется в /var/lib/dpkg/info/<имя_пакета>.list
2) С помощью утилиты apt-file и команды apt-file find <имя>
3) #echo $PATH
/usr/local/bin:~/.local/bin:/opt/bin
4) С помощью Менеджера пакетов synaptic (если установлен графический интерфейс)

Материал скомпилирован на основе данных: https://www.linux.org.ru/forum/linux-install/15909001#comments 

Информация полезна?
0

Определение размера файлов

Для внутреннего хранения файла файловая система разбивает хранилище на блоки (по 4 Кб или 512 байт).Содержимое 1-байтового файла всё равно…

Для внутреннего хранения файла файловая система разбивает хранилище на блоки (по 4 Кб или 512 байт).
Содержимое 1-байтового файла всё равно занимает 4 КБ дискового пространства.

Поэтому есть размер файла:
ls -l file.c
df file.c
stat
Есть реальное использование диска файлом:
ls -ls file.c
du file.c
stat
Команда stat производит выборку данных из inode - структуры памяти, представляющей файл:

struct inode {
/* excluded content */
loff_t i_size; /* file size - размер файла ls -l */
struct timespec i_atime; /* access time */
struct timespec i_mtime; /* modification time */
struct timespec i_ctime; /* change time */
unsigned short i_bytes; /* bytes used (for quota) */
unsigned int i_blkbits; /* block size = 1 << i_blkbits */
blkcnt_t i_blocks; /* number of blocks used */
/* excluded content */
}

Количество inode ограничено и задается при создании файловой системы в случае с ext2fs).
Узнать число занятых inodes можно командой:

df -i

В случае превышения числа разрешенных файлов возникнет ошибка "disk quota exceeded" и сервер начнет тормозить. Соответственно, потребуется анализ занятого пространства (например, с помощью утилиты ncdu) и очистка лишних файлов.

inodes.png

Следовательно правильно учитывать реальное использование диска файлом с учетом размера занимаемых им блоков.
disk-usage1.png


Кроме этого есть файлы, которые не сразу удаляются, а продолжают висеть в процессах с пометкой deleted
df их размер не отображает, а du, наоборот, указывает, что они есть.
disk-usage2.png

Источники:

https://habr.com/ru/companies/flant/articles/354802/
https://rebrainme.com/webinars/linux-special-directories/ 
http://memoryhigh.ru/disk-quota-exceeded-ili-kak-ochistit-inodes-v-debian/

Информация полезна?
0

Команды для работы с файлами по SSH

Консольные команды • wget имя_файла(ссылка на файл) - загружает файл • tail -f /имя-файла - Просмотр вносимых изменений в файле с момента…

Консольные команды

  • • wget имя_файла(ссылка на файл) - загружает файл

• tail -f /имя-файла - Просмотр вносимых изменений в файле с момента запуска этой команды
• chattr -i/+i - Запрет/отмена запрета на редактирование файла
• grep -rl 'слово1' /путь/* - рекурсивный поиск в каталоге по ключевому слову. Для замены найденного слова1 на слово 2 добавляем:
| xargs perl -p -i -e 's/слово1/слово2/g',
• pscp c:/full/path/file.php  Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:/home/telegrambot/telebot_1 - скопировать файл на сервер из cmd Windows. Для копирования множества файлов лучше использовать WinSCP
• mc - переход в файловый менеджер
• ls -al – Показывает файлы и каталоги в текущей папке с правами, размером и датой изменения
• pwd - Отображает текущий рабочий каталог
• cd /path/ - Переход в нужный каталог
• mkdir NewFolder - Создает новый каталог с именем "NewFolder".
• rm NewFile - Удаляет файл с именем "NewFile"
• rm -f NewFile - Принудительное удаление файла с именем "NewFile"
• rm -r NewFolder - Рекурсивно удаляет каталог с именем "NewFolder"
• rm -rf NewFolder - Принудительное удаление каталога с именем "NewFolder" рекурсивно
• cp oldfile1 newfile2 - Копирует содержимое oldfile1 в newfile2
• cp -r olddir1 newdir2 - Рекурсивно копирует каталог "olddir1" в "newdir2". Dir2 будет создан, если он не существует.
• mv oldfile1 newfile2 - Переименовывает "oldfile1" в "newfile2".
• ln -s /etc/log/file logfile - Создает ярлык на файл
• touch newfile - Создает пустой файл с именем newfile

 

Работа с утилитой cat

• cat > newfile - Помещает STDIN в newfile
• cat < test2 - Выводит содержимое файла на экран

Файл STDIN (стандартный ввод) по умолчанию "связан" с клавиатурой - все что вы печатаете на клавиатуре, попадает туда.

Файл STDOUT (стандартный вывод) по умолчанию "связан" с монитором - все, что вы запишите в него, вы увидите на экране.

Различные примеры использования:  https://blog.sedicomm.com/2023/08/28/13-primerov-komandy-cat-dlya-nachinayushhih-v-linux/


Полезные команды текстового редактора nano 

Ctrl+W - Искать текст или регулярное выражение
Ctrl+K - Вырезать текущую строку и сохранить её в буфере обмена
Ctrl+U - Вставить содержимое буфера обмена в текущую строку
Ctrl+_ или Alt-G - Перейти на указанный номер строки и ряд
Alt-| или Alt-\ - переход в начало файла
Alt+? или Alt+/ - переход в конец файла
Alt+Y — Показывать подсветку синтаксиса
Alt+Shift+3 — Показывать номера строк
Alt-L - включить/выключить перенос строк
Ctrl+X - Выйти из nano

Другие команды: https://habr.com/ru/articles/106471/ 

 

Работа с текстовым редактором vi (visual editor) описана в источнике: https://docs.altlinux.org/ru-RU/archive/2.3/html-single/junior/alt-docs-extras-linuxnovice/ch02s10.html

Чтобы начать редактировать файл, нужно войти в режим -- INSERT -- . Для этого наберите Shift+i.
Чтобы выйти из этого режима, нажмите Esc .

Как выйти из текстового редактора vim:
1) :q - Выйти если не делали изменений
2) :wq - Сохранить изменения и выйти "write and quit"
3) :q! - Если изменения были, но не хотим их сохранять
4) Альтернативный способ выхода: https://youtu.be/Q1RUYQIgVKM
:!ps axuw | grep vim | grep -v grep | awk '{print $2}' |xargs kill -9

Информация полезна?
0

Права доступа к файлам/каталогам для владельца/группы/других

Основные команды ls -l - просмотреть права доступа для файла ls -ld - посмотреть права доступа для определенного каталога. chmod - изменить права…
Основные команды

ls -l - просмотреть права доступа для файла

ls -ld - посмотреть права доступа для определенного каталога.

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

chown newuser:newgroup newfolder - изменить  владельца/группу файла или каталога 

  • stat -c "%U %G" newfile - отображает владельцев, пользователей и группы файла
 
Разбор значений

Права могу быть представлены в виде 10 символов, где:

  • - первый символ определяет тип файла ("—" прочерк - обычный файл, d - это каталог);
  • - следующие три символа права user'а (пользователя/владельца);
  • - следующие три символа - права для group (группы);
  • - последние три символа - права others (других).

Порядок записи разрешений всегда такой: чтение (r), запись (w), выполнение (x).

chmod1.jpg

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

chmod2.jpg

chmod3.jpg

По умолчанию на хостинге права для каталогов устанавливаются 755, для файлов - 644. Для разбора удобно представить в виде таблицы:

chmod4.jpg

Запись 755 для папок означает:

- у владельца — все права: право просматривать содержимое каталога (выполнить команду ls), право записывать данные в каталог (создавать файлы и подкаталоги), право зайти в каталог (выполнить команду cd)

- у группы — нет только права на запись;

- у остальных — нет только права на запись.

Запись 644 для файлов означает:

- у владельца — нет права на выполнение;

- у группы — есть право только на чтение;

- у остальных — есть право только на чтение.

При отсутсвтвии доступа к ssh на хостинге, назначить права для файлов и каталогов можно через Панель управления - Менеджер файлов - кнопка «Атрибуты», опционально выбрав рекурсивное указание прав для всех вложенных файлов и/или каталогов.

chmod5.jpg

Статья базируется на материалах ресурса https://codechick.io/tutorials/unix-linux/unix-linux-permissions , откуда можно почерпнуть более подробную информацию о правах доступа.

Информация полезна?
0

Поиск и замена текста в файлах по ssh

Варианты команд  grep -rl 'cловосочетание' /var/directory/* | xargs perl -p -i -e 's/значение1/значение2/g' или find /var/directory/ -type f | xargs sed…
Варианты команд 

grep -rl 'cловосочетание' /var/directory/* | xargs perl -p -i -e 's/значение1/значение2/g'

или

find /var/directory/ -type f | xargs sed -i  's/значение1/значение2/g'

, где
в директории и во вложенных каталогах /var/directory/* ищем заданное словосочетание и везде, где нашли, заменяем в нем значение 1 на значение 2.

Пример

При смене домена остались старые пути в скриптах, тогда:

1) рекурсивно заменим домен dopusk-78.su на dopusk-79.ru

grep -rl 'dopusk-78.su' /var/www/user79101/data/www/dopusk-79.ru/* | xargs perl -p -i -e 's/8.su/9.ru/g'
2) или рекурсивно заменим домен almai.ru на alma-i.ru
find /var/www/user8678/data/www/ -type f | xargs sed -i  's/almai.ru/alma-i.ru/g'  

Информация полезна?
0

Копирование файлов по ssh между серверами Linux

Для копирования файлов между серверами Linux используется команда scp, входящая в пакет OpenSSH по умолчанию Вариант1: копирование с удаленного на локальный…

Для копирования файлов между серверами Linux используется команда scp, входящая в пакет OpenSSH по умолчанию

Вариант1: копирование с удаленного на локальный сервер

1) Подключаемся по ssh к серверу, на который должен быть скопирован файл.

2) Указываем команду:

scp username@servername:/directory/test.doc /var/directory

, где:

username@servername - имя пользователя и адрес сервера, с которого будет скачан файл;
/directory/test.doc - сам файл, который должен быть скопирован;
/var/directory - директория, куда должен быть скопирван файл.

Пример - копирование файла с Linux-сервера 31.41.44.17 на Linux-сервер s1:

scp.jpg

Готово, файл с бэкапом скопирован с одного сервера Linux на другой.

Вариант 2: копирование с локального сервера на удаленный

1) Подключаемся к серверу, с которого производится копирование
2) Указываем команду
scp /var/directory/test.zip username@servername:/directory/abc/

, где:

/var/directory/test.zipсам файл, который должен быть скопирован;

username@servername - имя пользователя и адрес удаленного сервера, на который будет закачан файл;

/directory/abc/ - директория на удаленном сервере, куда должен быть скопирван файл.

Пример - копирование файла www.zip с локального сервера на удаленный сервер 31.41.40.14

scp2.png

Готово, файл с zip архивом скопирован в директорию /var/www/user17656/data на сервере 31.41.40.4

 

Более быстрый вариант копирования - утилита rsync. Подробнее в материале "7z и rsync для архивирования и копирования файлов с сервера на сервер"



 

 

Информация полезна?
0

Копирование файлов из Windows на сервер Linux ( и наоборот ) по ssh

Как скопировать файл из Windows на сервер Linux Если интернет соединение не стабильно и происходит обрыв закачки файла по FTP,…

Как скопировать файл из Windows на сервер Linux

Если интернет соединение не стабильно и происходит обрыв закачки файла по FTP, то есть альтернативный вариант - закачать файл по ssh, используя приложение для Windows pscp.exe (аналог утилиты scp (Secure Copy) для Linux).

1. Качаем Pscp (входит в состав PuTTY): https://github.com/putty-org-ru/PuTTY/releases/download/PuTTY-0.73-RU-17/pscp.exe .

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

2. Открываем коммандную строку (cmd) Windows с правами администратора. По умолчанию откроется каталог: C:\WINDOWS\system32> .

3. Выполняем команду копирования файла с компьютера на сервер

pscp “C:/documents/test.doc” username@servername:/directory

, где:

“C:/documents/test.doc” - путь до файла на компьютере, который нужно скопировать;
username@servername<span< a="">> </span<>- имя пользователя и адрес сервера для доступа по ssh;
/directory - каталог на сервере, куда должен быть скопирован файл (Каталог должен быть предварительно создан!) .

Пример - копирование файла с компьютера Windows на севрер Linux утилита pscp:

pscp1.jpg

Готово, файл бэкапа скопирован на сервер!

Для копирования с сервера Linux на компьютер Windows

Используем обратную команду:

pscp username@servername:/directory/test.doc C:/documents

, где:

username@servername - имя пользователя и адрес сервера для доступа по ssh;
/directory/test.doc - путь до файла на сервере Linux, который должен быть скопирован на компьютер Windows;
C:/documents - папка, куда должен быть скопирован файл.

Пример:

pscp2.jpg

Готово, файл с сервера скопирован на рабочий стол!

Информация полезна?
0

Как скачать файлы с VDS по sFTP без установки FTP cервера

«…Поддержка протокола SFTP обычно обеспечивается реализацией сервера SSH». Источник: https://ru.wikipedia.org/wiki/SFTP Поэтому качаем по протоколу ssh. Для этого вFTP клиенте FileZilla или…

«…Поддержка протокола SFTP обычно обеспечивается реализацией сервера SSH». Источник: https://ru.wikipedia.org/wiki/SFTP

Поэтому качаем по протоколу ssh. Для этого вFTP клиенте FileZilla или WinSCP указываем:
Хост: sftp://ip-адрес сервера
Имя пользователя: root
Пароль
Порт:22

Данные доступа к серверу можно найти на почте (направляются при заказе VDS), либо в биллинге по кнопке «Инструкция»

sFTP1.jpg

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

sFTP2.jpg

Выбираем нужный файл или каталог и перетаскиваем в левую колонку в директорию на Вашем компьютере.

Информация полезна?
0