Linux Команды (Unix, SSH, PuTTY)

Список популярных Linux команд по категориям, которые нужно знать каждому разработчику.

На Windows для управления Linux сервером, используют бесплатную программу PuTTY - она самая популярная.

Файлы/Папки

Команда Действие
mc Midnight Commander - что-то вроде Norton Commander.
ls Показать список файлов и каталогов.
ls -al или ll Показать все файлы на сервере (даже скрытые) + размер + владельца + права на фалы + дату изменения.
cd dir Перейти в папку "dir".
cd Перейти в домашний каталог.
pwd Показать текущую папку (путь до текущего каталога).
mkdir dir Создать папку "dir".
cp файл1 файл2 Копировать файл1 в файл2.
cp -r папка1 папка2 Копировать папка1 в папка2.
mv папка1 папка2 Переименовать / переместить папку.
mv файл1 файл2 Переименовать / переместить файл.
rm file Удалить файл с именем file.
rm -r dir Удалить папку "dir".
rm -f file Удалить форсированно file.
rm -rf dir Удалить форсированно каталог dir *.
rm -rf folder/* Опустошить папку folder.
touch filename Создать файл и с именем filename.
> filename Очистка файла. > access.log.
cat (concatenate) объединяет файлы.
cat filename Показать контент файла filename.
cat filename | less Показать контент файла filename + скроллинг.
cat filename | grep 'искомая строка' Выведет строки файла, включающие искомую строку.
cat > filename Создает файл с написанным контентом (ctrl+d для завершения).
cat >> filename Дополнить файл.
echo "hello" > filename Записать hello в файл.
echo "hello" >> filename Дополнить файл текстом hello.
more filename Показать содержимое файла.
less filename +G Показать последние строки файла.
head filename Показывает первые 10 строк из файла.
tail filename Показывает последние 10 строк из файла.
tail -f filename Показывает содержимое file по мере роста, начинает с последних 10 строк.
Пример записи текста в файл
cat > filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
[Ctrl+D]

Использование оператора >> будет добавлять данные в конце файла, а использование > будет перезаписывать содержимое файла, если оно уже существует.

Также важно знать, что по умолчанию echo добавляет символ новой строки в конце. Его можно подавить с помощью флага -n:

echo -n "hello" >> filename

Занимаемое место

Команда Действие
df Покажет информацию об использовании диска.
df -h Тоже что df только для людей (в M, GB).
du Покажет информацию об использовании диска файлами и папками.
du -sh * Посчитать занимаемое место всех папок в указанной.
du -sh * | sort -hr Отсортировать по убыванию.
du -sh dir Узнать размер папки dir.

Подробнее

Процессы

Команда Действие
ps Показывает текущие активные процессы
top Показывает все процессы
kill процесс Убивает процесс с id "процесс"
killall проц Убивает все процессы с именем проц
bg Показывает список фоновых задач, а также остановленных
bg процесс Продолжит выполнение остановленного процесса в фоне

Права доступа к файлам

Команда Действие
chmod 755 файл Задает права 755 для файла
find /path/to/dir -type f -exec chmod 0644 {} Укажет права 644 на все файлы на сервере
find /path/to/dir -type d -exec chmod 0755 {} Укажет права 755 на все папки на сервере

SSH

Команда Действие
ssh user@host Подключает к хосту "host" как "user"
ssh -p port user@host Подключает к хосту "host" на порт "port" как "user"
ssh-copy-id user@host Добавит ключ на "host" для пользователя "user", при этом операция входа будет происходить без логина, а через ключ

Поиск файлов/папок/в файлах

find

Команда Действие
find / -type d -name 'work*' Ищет папку с именем начинающимся с work.
find / -type f -name '*work.rb' Ищет файл заканчивающийся на work.rb.
find / -regex ".*\.\(svg\|png\)$" Ищет все svg и png файлы по регулярке.
find ~/ -regex ".*/Docs/Для\ работы/.*" Ищет по вхождению пути.
find -name '*.js' -not -path '/dir/*' Исключить директорию.
locate файл Найдет все файлы с именем "файл".

Мануал: https://www.geeksforgeeks.org/find-command-in-linux-with-examples/

ripgrep

Команда Действие
rg -i "hello" /sys/ ripgrep - аналог grep. Искать слово hello во всех файлах папки /sys/ (регистронезависимый поиск).
rg -ig access.log "/api/wp" Поиск подстроки "/api/wp" в файле access.log

grep

grep [options] pattern [file...]

Примеры:

# Ищет "слово" в "файле".
grep 'слово' file

# Поиск по регулярке
grep "\<[A-Za-z].*\>" file

# Искать слово hello во всех файлах папки /sys/.
grep -r hello /sys/

# Искать слово text во всех файлах текущей папки.
grep -inIR "text"
# Case insensitive: match any line in foo.txt
# that contains "bar"
grep -i bar foo.txt

# match any line in bar.txt that contains
# either "foo" or "oof"
grep -E "foo|oof" bar.txt

# match anything that resembles a URL in
# foo.txt and only print out the match
grep -oE "https?:\/\/((\w+[_-]?)+\.?)+" foo.txt

# can also be used with pipes:
# match any line that contains "export" in
# .bash_profile, pipe to another grep that
# matches any of the first set of matches
# containing "PATH"
grep "export" .bash_profile | grep "PATH"

# follow the tail of server.log, pipe to grep
# and print out any line that contains "error"
# and include 5 lines of context
tail -f server.log | grep -iC 5 error

# can also be used with pipes:
# match any line that contains "export" in
# .bash_profile, pipe to another grep that
# matches any of the first set of matches
# containing "PATH"
grep "export" .bash_profile | grep "PATH"

Find all files containing specific text (string) on Linux.

# search pattern in all files:
grep -rnw '/path/to/somewhere/' -e 'pattern'

# only search through those files which have .c or .h extensions:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"

# exclude searching all the files ending with .o extension:
grep --exclude=\*.o -rnw '/path/to/somewhere/' -e "pattern"

# exclude the dirs dir1/, dir2/ and all of them matching *.dst/:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/search/' -e "pattern"

Опции:

# Matching options:

-r, --recursive             # All files recursively
							# follow symlinks only if they are on the command line, but
							# skip symlinks that are found recursively.
-R, --dereference-recursive # All files recursively (follow all symlinks).
-e, --regexp=PATTERN
-f, --file=FILE
-i, --ignore-case     # Forgets about case sensitivity
-v, --invert-match
-w, --word-regexp     # Ищем конкретное слово
-x, --line-regexp
-I                    # Skip binary files

# Pattern options:

-G, --basic-regexp    # basic regular expression (default)
-E, --extended-regexp # extended regular expression
-P, --perl-regexp     # perl compatible regular expression
-F, --fixed-strings   # list of fixed strings

# Output Options:

-n, --line-number     # Show the line numbers of the matches
-c, --count           # print the count of matching lines. suppresses normal output
	--color[=WHEN]    # applies color to the matches. WHEN is never, always, or auto
-m, --max-count=NUM   # stop reading after max count is reached
-o, --only-matching   # only print the matched part of a line
-q, --quiet, --silent
-s, --no-messages     # suppress error messages about nonexistent or unreadable files

Source: https://stackoverflow.com/questions/16956810/how-to-find-all-files-containing-specific-text-string-on-linux

Мануал: https://help.ubuntu.com/community/grep

Шпаргалки: https://devhints.io/grep https://quickref.me/grep

Информация о системе (диски, файлы, размеры)

Команда Действие
date Показать время и дату
cal Показать календарь
uptime Проверить аптайм (время безотканой работы)
w Покажет количество пользователей, которые в данный момент используют сервер
whoami Покажет Ваш логин
finger юзер Покажет инфу о пользователе "юзер"
uname -a Информация про ядро
cat /proc/cpuinfo Информация про CPU
cat /proc/meminfo Информация про память
man команда Покажет все о команде
free Сколько памяти используется
whereis программа Найдет место расположения программы
which программа Определяет, что "программа" будет запущена первой
vmstat Покажет загрузку процессора

Архивы

Команда Действие
tar cf myfile.tar Запаковать "файлы" в архив myfile.tar
tar xf myfile.tar Распаковать myfile.tar
tar czf myfile.tar.gz dir Сжать с использованием Gzip (особое сжатие на сервере)
tar xzf myfile.tar.gz Распаковать Gzip-файл
tar cjf myfile.tar.bz2 Сжать с использованием Gzip
tar xjf myfile.tar.bz2 Распаковать Bzip2-файл
gzip myfile Сжать myfile и переименовать в его в myfile.gz
gzip -d myfile.gz Распаковать myfile.gz в myfile
zip archive.zip filename Сжать файл filename в архив archive.zip.
zip –r archive.zip dirname Сжать папку dirname в архив archive.zip.
zip -d file.zip "assets/*" Удалить все файлы из папки assets/* внутри zip архива file.zip
unzip archive.zip Распаковать архив в текущую папку
unzip –d dirname archive.zip Распаковать архив в папку dirname
zip --help или unzip --help Справка по командам и параметрам
man zip или man unzip Расширенная документация
tar [options] [archive-file] [file or directory to be archived]

Options:
-c : Creates Archive
-x : Extract the archive
-f : creates archive with given filename
-t : displays or lists files in archived file
-u : archives and adds to an existing archive file
-v : Displays Verbose Information
-A : Concatenates the archive files
-z : zip, tells tar command that creates tar file using gzip
-j : filter archive tar file using tbzip
-W : Verify a archive file
-r : update or add file or directory in already existed .tar file

Система, Apache, MySQL и База данных

Команда Действие
echo $PATH Показать все системные пути в переменной $PATH
apachectl restart Перезапуск сервера Apache
apachectl startssl Запуск сервера Apache
apachectl stop Выключение сервера Apache
/usr/local/etc/rc.d/mysql-server restart Перезапуск MySQL
mysqldump -u юзер_БД -p пароль_БД имя_БД > /путь/file.sql Создать копию базы данных бд.sql
mysql -u юзер_БД -p пароль_БД -D имя_БД < /путь/file.sql Импортировать бд.sql в базу данных mysql на сервере
exit Выйти из системы
reboot Перезапуск сервера
alias wpcli='php7.1 /usr/local/bin/wp' Создает алиас wpcli для команды php7.1 /usr/local/bin/wp. Работает только на время сессии.
alias -p Показать все существующие алиасы.
unalias wpcli Удаляет алиас wpcli

Копирование

scp (ssh)

Копирование файла с удаленного хоста на локальный хост:

$ scp username@from_host:file.txt /local/directory/

Копирование файла с локального хоста на удаленный хост:

$ scp file.txt username@to_host:/remote/directory/

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

$ scp -r username@from_host:/remote/directory/  /local/directory/

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

$ scp -r /local/directory/ username@to_host:/remote/directory/

Копирование файла с удаленного хоста на удаленный хост:

$ scp username@from_host:/remote/directory/file.txt username@to_host:/remote/directory/
Заметки:
  • Хост может быть IP или имя домена. После нажатия Enter будет предложено ввести пароль SSH.

  • Хотя на этой странице рассматривается SCP Linux, инструкции будут работать и на Mac с помощью "Терминала". Вы также можете использовать WinSCP для выполнения этой задачи на ПК/сервере Windows.

  • При копировании исходного файла в целевой файл, который уже существует, SCP заменит содержимое целевого файла. Поэтому будьте осторожны.
  SCP options
–r Рекурсивное копирование целых каталогов. Обратите внимание, будет следование по символическим ссылкам, встречающиеся при обходе дерева.
-C Включить сжатие. Передает флаг -C в ssh для включения сжатия.
-P port - Указывает порт для подключения к удаленному хосту. Обратите внимание, что эта опция записывается с большой буквы 'P'.
-p Сохраняет mtime, atime, modes оригинального файла.
-q Тихий режим: отключает индикатор выполнения, а также warning'и и диагностические сообщения от ssh.
-o ssh_option - Может использоваться для передачи опций ssh в формате, используемом в ssh_config.
-v Развернутый режим. Печать отладочных сообщений о ходе выполнения. Это полезно при отладке проблем с подключением, аутентификацией и конфигурацией.
-l limit - Ограничивает используемую пропускную способность, указывается в Кбит/с.

rsync

rsync опции источник назначение
Синхронизация папок на локальном компьютере
rsync -azvh /home/user/documents /mnt/backup_dir/
Синхронизация с удаленным сервером
rsync -azv /home/user/documents/ root@123.123.133.133:/home/
Синхронизация файлов по ssh
rsync -avzhe ssh root@123.123.133.133:/home/ /home/user/documents/

другой порт для ssh:

rsync -avzhe "ssh -p 22" root@123.123.133.133:/home/ /home/user/documents/
Опция описание
-v Выводить подробную информацию о процессе копирования.
-q Минимум информации.
-c Проверка контрольных сумм для файлов.
-a Режим архивирования, когда сохраняются все атрибуты оригинальных файлов.
-R Относительные пути.
-b Создание резервной копии.
-u Не перезаписывать более новые файлы.
-l Копировать символьные ссылки.
-h Выводить числа в удобочитаемом формате.
-L Копировать содержимое ссылок.
-H Копировать жесткие ссылки.
-W Копировать файлы целиком.
-p Сохранять права для файлов.
-g Сохранять группу.
-t Сохранять время модификации.
-x Работать только в этой файловой системе.
-e Использовать другой транспорт, например, ssh.
-z Сжимать файлы перед передачей.
--delete Удалять файлы которых нет в источнике.
--exclude Исключить файлы по шаблону.
--include Включить файлы по шаблону.
--recursive Перебирать директории рекурсивно.
--no-recursive Отключить рекурсию.
--progress Выводить прогресс передачи файла.
--stat Показать статистику передачи.
--version Версия утилиты.
--dry-run Ничего не делать фактически.

Подробнее: https://unihost.com/help/ru/how-to-use-rsync-to-sync-local-and-remote-files-and-directories/

Сеть

Команда Действие
ping хост Показывает пинг до хоста
whois dom.com Показывает WHOIS о домене "dom.com"
dig dom.com Показывает на каких DNS находится домен "dom.com"
dig -x host Реверсивно искать host
wget myfile Закачивает на компьютер файл myfile
wget -c file Если закачка была остановлена, то эта команда может ее продолжить
wget https://www.mysite.com/myfile.zip Загрузит файл из интернета (по адресу https://www.mysite.com/myfile.zip) в текущую директорию на сервере

Полезные команды

Команда Действие
cd - Вернуться в предыдущую директорию. Пример.
pushd / popd Сохранить и вернуться к директории. Пример.
history Показать историю всех команд. HISTTIMEFORMAT="%Y-%m-%d %T " в ~/.bashrc, чтобы добавить время напротив каждой команды когда она была использована. Пример.
tail -f /path/to/file Показать конец файла и вотчить его изменения.
truncate -s 0 /path/to/file Опустошить файл.
{command} | column -t Отобразить результат в виде колонок.
which {command} Например which php покажет путь до бинарного файла или ссылки на него который отвечает за команду. Пример.
sudo !! Повторяет последнюю команду с префиксом sudo.
exit Разлогиниться / выйти.

Комбинации клавиш

Команда Действие
Middle Mouse Вставить выделение.
Ctrl C Прекратить текущую команду.
Ctrl D Выйти из системы\сменить пользователя (вместо этого можно использовать команду exit).
Ctrl U Удаляет строку.
Ctrl Z Остановка текущей команды и продолжить с fg или bg.
Ctrl R Поиск по истории комманд.
Ctrl A Перейти к началу строки.
Ctrl ← \ Alt B Перевести курсор в начало предыдущего слова.
Ctrl → \ Alt L Перемещение курсора в конец слова.
Ctrl W Вырезать слово перед крусором.
Ctrl Y Вставить ранее вырезанный текст.
Ctrl K Удалить все после курсора.
Ctrl Y Вернет текст назад.
Ctrl U Удалить всю строку.

Менее полезные

Команда Действие
Alt T Поменять местами слова перед курсором.
Ctrl T Поменять местами символы перед курсором.
Alt U Перевести слово после курсора в ВЕРХНИЙ регистр.

Ctrl D / Delete | Удалить один символ после позиции курсора.

Полезные ссылки

--

Использовал при написании https://ru.hostings.info/schools/komandy-dlya-putty-ssh-unix-i-linux-serverov.html