В 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
Для внутреннего хранения файла файловая система разбивает хранилище на блоки (по 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) и очистка лишних файлов.
Следовательно правильно учитывать реальное использование диска файлом с учетом размера занимаемых им блоков.
Кроме этого есть файлы, которые не сразу удаляются, а продолжают висеть в процессах с пометкой deleted
df их размер не отображает, а du, наоборот, указывает, что они есть.
Источники:
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/
Консольные команды
• 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
• 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
ls -l - просмотреть права доступа для файла
ls -ld - посмотреть права доступа для определенного каталога.
chmod - изменить права доступа для файла или каталога.
chown newuser:newgroup newfolder - изменить владельца/группу файла или каталога
Права могу быть представлены в виде 10 символов, где:
Порядок записи разрешений всегда такой: чтение (r), запись (w), выполнение (x).
Права могут быть представлены в виде трех цифр восьмиричной системы, каждая цифра определяет наличие трех типов разрешений для трех групп.
По умолчанию на хостинге права для каталогов устанавливаются 755, для файлов - 644. Для разбора удобно представить в виде таблицы:
Запись 755 для папок означает:
- у владельца — все права: право просматривать содержимое каталога (выполнить команду ls), право записывать данные в каталог (создавать файлы и подкаталоги), право зайти в каталог (выполнить команду cd)
- у группы — нет только права на запись;
- у остальных — нет только права на запись.
Запись 644 для файлов означает:
- у владельца — нет права на выполнение;
- у группы — есть право только на чтение;
- у остальных — есть право только на чтение.
При отсутсвтвии доступа к ssh на хостинге, назначить права для файлов и каталогов можно через Панель управления - Менеджер файлов - кнопка «Атрибуты», опционально выбрав рекурсивное указание прав для всех вложенных файлов и/или каталогов.
Статья базируется на материалах ресурса https://codechick.io/tutorials/unix-linux/unix-linux-permissions , откуда можно почерпнуть более подробную информацию о правах доступа.
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'
Для копирования файлов между серверами Linux используется команда scp, входящая в пакет OpenSSH по умолчанию
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:
Готово, файл с бэкапом скопирован с одного сервера Linux на другой.
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
Готово, файл с zip архивом скопирован в директорию /var/www/user17656/data на сервере 31.41.40.4
Более быстрый вариант копирования - утилита rsync. Подробнее в материале "7z и rsync для архивирования и копирования файлов с сервера на сервер"
Если интернет соединение не стабильно и происходит обрыв закачки файла по 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:
Готово, файл бэкапа скопирован на сервер!
Используем обратную команду:
pscp username@servername:/directory/test.doc C:/documents
, где:
username@servername - имя пользователя и адрес сервера для доступа по ssh;
/directory/test.doc - путь до файла на сервере Linux, который должен быть скопирован на компьютер Windows;
C:/documents - папка, куда должен быть скопирован файл.
Пример:
Готово, файл с сервера скопирован на рабочий стол!
«…Поддержка протокола SFTP обычно обеспечивается реализацией сервера SSH». Источник: https://ru.wikipedia.org/wiki/SFTP
Поэтому качаем по протоколу ssh. Для этого вFTP клиенте FileZilla или WinSCP указываем:
Хост: sftp://ip-адрес сервера
Имя пользователя: root
Пароль
Порт:22
Данные доступа к серверу можно найти на почте (направляются при заказе VDS), либо в биллинге по кнопке «Инструкция»
Соединяемся, попадаем в каталог /root/ , из которого можно перейти на уровень выше в корневой каталог /
Выбираем нужный файл или каталог и перетаскиваем в левую колонку в директорию на Вашем компьютере.
CISHost - с нами надежно!