Всем привет. Каждый разработчик сталкивается с тем что нужно знать кое какие команды Linux для разработке на удаленном сервере. Потому что бывают случаи когда надо развернуть web-сервер или просто что то по дебажить. Мне кажется что кажды программист должен консольные команды с помощью которых можно себе помочь. Я сейчас не говорю про тонкие настройки сервера или баз данных, просто базовые вещи которые должны помочь.
grep
grep -irn "FindText" *
— поиск текста в файлах. Флаг На самом деле флагов у grep много, подробнее узнать о них можно на просторах интернета. Это мой вариант которым я пользуюсь.
- -i — игнорирует регистр символов;
- -r — означает что поиск пройдет рекурсивно;
- -n — отображает номер строки;
- -s — можно добавить, он подавляет ошибки о файлах, которые не смог открыть;
- * — означает, что поиск будет происходить от текущего каталога
Вот еще один пример который я использую:
grep -irn --exclude=*.{js,css,svg,md,sql} --exclude-dir="tests" "on getMyFunctions(" *
- —exclude — расширение файлов в которых мы не будем искать
- —exclude-dir — папка которую мы будем игнорировать при поиске
На самом деле grep одна из первых команд которые я освоил, потому что если что то надо найти на удаленном сервере, то эта команда хорошо справляется с данной задачей.
find
find /path -type d -exec chmod 0755 {} \;
Найдет все папки в директории /path и установит им права 0755. Зачем это нужно? Если Вам надо проставить для файлов одни права, а для фалов другие. Для фаллов мы укажем флаг -type f
. Кроме этого существуют еще такие типы как символьные ссылки -type l
, устройства посимвольного ввода-вывода -type c
и блочные устройства -type b
. Простой поиск файлов find -iname "FileName"
. Улита find тоже очень мощная, и другие флаги можно найти в документации, я привожу те примеры которые я действительно использую.
mc
Midnight Commander — файловый менеджер, с помощью которого можно легко перемещаться по папкам и просматривать файлы. Не надо постоянно набирать:
- pwd — путь к каталогу в котором вы находитесь
- cd .. — перемещение по папкам
- ls -la — список файлов в каталоге
Единственная проблема которая может возникнуть, это не сохранение каталога в котором вы находитесь, это жутко не удобно. Для того что бы сохранить каталог при выходе(F10) в mc требуется добавить alias в .bash_profiles.
Для Linux: alias mc='. /usr/libexec/mc/mc-wrapper.sh
‘
MacOS: alias mc='. /usr/local/opt/midnight-commander/libexec/mc/mc-wrapper.sh'
df & dh Размер дисков и папок
df -h
— Покажет в удобном виде размер дисков в ГБ
du -sh /path/folder
— размер папки, если надо узнать размер текущего каталога пишем просто du -sh
crontab
crontab -l
— список все крон задачcrontab -e
— откроет крон задачи для редактирования, по умолчанию использует vim
screen
Очень удобная команда, если требуется запускать на сервере скрипт, который будет долго обрабатываться, а вы не хотите открывать еще одну консоль что б следить за выполнением или вовсе хотите закрыть консоль, а через некоторое время посмотреть за статусом выполнение скрипта. Для запуска просто вводим screen
создается новый скрин с своей уникальной сессией, тут мы и запускаем наш скрипт. После, для того чтобы выйти из этого режима нажимаем на клавиатуре Ctrl+A, после чего нажать D, вернемся сново к нашей консоли.
screen -r
— вернутся к свернутому скринуscreen -list
илиscreen -ls
— список запущеных скриновscreen -x n
— перейти в нужный скрин по номеруscreen -S n -X quit
— что бы убить скрин введите такую команду.
Создание пользователя и права
sudo adduser username
— добавить нового пользователя
sudo passwd username
— добавить пароль к пользователю
usermod -aG group username
— определяем пользователя к группе
chown -R username folder_name
— меняем владельца директории
chmod -R 0755 folder_name
— права на директорию
cp
Копирование файлов и директорий
cp /path/to/file/from/file.log /path/to/
Также у этой команды существует множество флагов вот некоторые из них
- —attributes-only — не копировать содержимое файла, а только флаги доступа и владельца;
- -f, —force — перезаписывать существующие файлы;
- -i, —interactive — спрашивать, нужно ли перезаписывать существующие файлы;
- -L — копировать не символические ссылки, а то, на что они указывают;
- -n — не перезаписывать существующие файлы;
- -P — не следовать символическим ссылкам;
- -r — копировать папку Linux рекурсивно;
- -s — не выполнять копирование файлов в Linux, а создавать символические ссылки;
- -u — скопировать файл, только если он был изменён;
- -x — не выходить за пределы этой файловой системы;
- -p — сохранять владельца, временные метки и флаги доступа при копировании;
- -t — считать файл-приемник директорией и копировать файл-источник в эту директорию.
rsync
Команда rsync используется для удаленного копирования или синхронизации данных.
Например синхронизация данных на локальной машине
rsync -zvh /path/to/documents /path/to/backups/
Можно добавить влаг -a что б сохранились контрольные данные о фалах что копируются. Вот список атрибутов которые можно использовать
- -v — Выводить подробную информацию о процессе копирования;
- -q — Минимум информации;
- -c — Проверка контрольных сумм для файлов;
- -a — Режим архивирования, когда сохраняются все атрибуты оригинальных файлов;
- -R — Относительные пути;
- -b — Создание резервной копии;
- -u — Не перезаписывать более новые файлы;
- -l — Копировать символьные ссылки;
- -L — Копировать содержимое ссылок;
- -H — Копировать жесткие ссылки;
- -p — Сохранять права для файлов;
- -g — Сохранять группу;
- -t — Сохранять время модификации;
- -x — Работать только в этой файловой системе;
- -e — Использовать другой транспорт, например, ssh;
- -z — Сжимать файлы перед передачей;
- —delete — Удалять файлы которых нет в источнике;
- —exclude — Исключить файлы по шаблону;
- —recursive — Перебирать директории рекурсивно;
- —no-recursive — Отключить рекурсию;
- —progress — Выводить прогресс передачи файла;
- —stat — Показать статистику передачи;
- —version — Версия утилиты.
Самое лучшее применение этой команды это копирование больших файлов на удаленный сервер
rsync -avz /path/to/folder/ root@192.168.56.102:/path/to/server/
Данные будут передаваться по ssh. Если же нам понадобится синхронизировать данные с удаленного сервера то можно воспользоваться такой командой
rsync -avzhe ssh root@192.168.33.33:/path/to/log/install.log /local/path/
На самом деле у rsync очень много способов конфигурации, про ванную команду можно спокойно написать отдельную статью