Linux Команды (Shell Bash, Unix, SSH, PuTTY)
Список популярных Linux команд по категориям, которые нужно знать каждому разработчику.
На Windows для управления Linux сервером, используют бесплатную программу PuTTY - она самая популярная.
Файлы/Папки
| Команда | Действие |
|---|---|
| mc | Midnight Commander - что-то вроде Norton Commander. |
| ls | Показать список файлов и каталогов. |
| ls -al | Показать все файлы на сервере (даже скрытые) + размер + владельца + права на фалы + дату изменения. |
| ls -aln | Показывает UID вместо имени пользователя. |
| cd dir | Перейти в папку "dir". |
| cd | Перейти в домашний каталог. |
| pwd | Показать текущую папку (путь до текущего каталога). |
| mkdir dir | Создать папку "dir". |
| cp файл1 файл2 | Копировать файл1 в файл2. |
| cp -r папка1 папка2 | Копировать папка1 в папка2. |
| cp -rp папка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 - права доступа
| Команда | Действие |
|---|---|
| chmod 755 файл | Задает права 755 для файла |
| chmod o-r,a-w month.txt text.txt | Запретим Остальным читать и всем изменять два файла. |
| find /path/to/dir -type f -exec chmod 0644 {} \; | Укажет права 644 на все файлы на сервере |
| find /path/to/dir -type d -exec chmod 0755 {} \; | Укажет права 755 на все папки на сервере |
chown - владелец и группа
chown пользователь опции /путь/к/файлу
Опции:
-c,--changes- подробный вывод всех выполняемых изменений.-f,--silent,--quiet- минимум информации, скрыть сообщения об ошибках.--dereference- изменять права для файла к которому ведет символическая ссылка вместо самой ссылки (поведение по умолчанию).-h,--no-dereference- изменять права символических ссылок и не трогать файлы, к которым они ведут.--from- изменять пользователя только для тех файлов, владельцем которых является указанный пользователь и группа.-R, --recursive - рекурсивная обработка всех подкаталогов.-H- если передана символическая ссылка на директорию - перейти по ней.-L- переходить по всем символическим ссылкам на директории.-P- не переходить по символическим ссылкам на директории (по умолчанию).
| Команда | Действие |
|---|---|
| chown root ./dir1 | Изменим владельца папки dir1 на root. |
| chown root:root ./dir2 | Изменим владельца и группу папки dir1 на root. |
| chown -R root:root ./dir3 | Изменим владельца и группу папки dir1 и всех вложенных файлов/папок на root. |
| chown --from=root:root www-data:www-data -cR ./ | Изменим владельца и группу на www-data только у файлов/папок, владелец и группа которых root в текущем каталоге. |
SSH
| Команда | Действие |
|---|---|
| ssh user@host | Подключает к хосту "host" как "user". |
ssh user@host "echo \$HOME" | Сразу выполняет команду echo $HOME на сервере. |
|
| ssh -p port user@host | Подключает к хосту "host" на порт "port" как "user". |
| ssh-copy-id user@host | Добавит ключ на "host" для пользователя "user", при этом операция входа будет происходить без логина, а через ключ. |
Не интерактивное подключение и файл ~/.bashrc
При удаленном выполнении команды через ssh, например, ssh user@host "echo $HOME", НЕ подключается файл ~/.bashrc! Если у вас есть алиасы в этом файле, они работать не будут! И это может сыграть с вами в злую шутку в некоторых случаях.
Так происходит, потому что когда вы выполняете команду удаленно с помощью SSH, удаленная оболочка обычно запускается в неинтерактивном режиме. Когда оболочка запускается в неинтерактивном режиме, она может пропустить файлы инициализации, такие как .bashrc, чтобы обеспечить более быструю и предсказуемую среду выполнения.
.ssh/config
Чтобы постоянно не писать креды, можно создать файл .ssh/config и добавить в него конфиг удаленного подключения:
Host myhost HostName 56.30.203.178 User ubuntu Port 22 IdentityFile ~/.ssh/qa-server.key
Теперь, чтобы подключиться к серверу в консоли используем команду:
$ ssh myhost
Все возможные параметры:
Host {YOUR_HOST_KEY}
AddressFamily any
BatchMode no
CheckHostIP yes
Cipher 3des
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
ConnectTimeout 0
EscapeChar ~
ForwardAgent no
ForwardX11 no
GSSAPIAuthentication no
GSSAPIDelegateCredentials no
HostbasedAuthentication no
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_ecdsa
IdentityFile ~/.ssh/id_ed25519
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/identity
MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
PasswordAuthentication yes
PermitLocalCommand no
Port 22
Protocol 2
ProxyCommand ssh -q -W %h:%p gateway.example.com
RekeyLimit 1G 1h
RhostsRSAAuthentication no
RSAAuthentication yes
StrictHostKeyChecking ask
Tunnel no
TunnelDevice any:any
VisualHostKey no
Поиск файлов/папок/в файлах
find
Мануал: https://www.geeksforgeeks.org/find-command-in-linux-with-examples/
# Найдет все файлы/папки, которые начинаются с "Top" (регистр важен). В текущем каталоге find . -name 'Top*' # Найдет все файлы/папки, которые начинаются с 'top' (регистр не важен - Top, top, TOP) find / -iname 'Top*' # Найдет все файлы/папки, которые начинаются с 'top', а затем идут 3 любых символа find / -name 'top???' # Найдет все файлы/папки с расширением ".tex" (в домашнем каталоге ~) find ~ -name '*.tex' # Исключить директорию при поиске. find . -name '*.js' -not -path '/dir/*'
# Ищет папку с именем начинающимся с "work". find / -type d -name 'work*' # Ищет файл заканчивающийся на "work.rb". find / -type f -name '*work.rb' # Ищет все svg и png файлы по регулярке. # Note: -regex паттерн должен совпадаеть с полным именем файла # относительно указанного каталога, а не с отдельным именем файла. find / -regex ".*\.\(svg\|png\)$" # Ищет по вхождению пути. find ~/ -regex ".*/Docs/Для\ работы/.*" # Ищет файлы в каталоге /usr/local, размер которых больше 10,000 КБ $ find /usr/local -size +10000k # Ищет файлы в домашнем каталоге, размер меньше 300 байт find ~ -size -300b # Ищет пустые файлы (размер 0) find ~ -empty
# вывести все файлы в каталоге /usr/local, модифицированные в течение последних 24 часов. find /usr/local -mtime -1 # вывести все файлы в домашнем каталоге, модифицированные вчера. # Опция -daystart определяет отсчет времени с момента начала текущих суток. find ~ -mtime 1 -daystart # вывести все файлы в каталоге /usr, модифицированные в течение года: find /usr -mtime +356 -daystart # вывести все файлы в домашнем каталоге, модифицированные в период от 2 до 4 дней тому назад: find ~ -mtime 2 -mtime -4 -daystart # найти файлы, которые новее указанного файла, введите его имя в качестве аргумента опции -newer. # вывести все файлы в каталоге /etc, которые новее файла /etc/motd: find /etc -newer /etc/motd
Еще примеры: https://www.opennet.ru/docs/RUS/linux_base/node149.html
ripgrep
Это отдельный пакет https://github.com/BurntSushi/ripgrep
Установка на убунту:
$ sudo apt-get install ripgrep // или так (последняя версия) // Релизы: https://github.com/BurntSushi/ripgrep/releases $ curl -LO https://github.com/BurntSushi/ripgrep/releases/download/13.0.0/ripgrep_13.0.0_amd64.deb $ sudo dpkg -i ripgrep_13.0.0_amd64.deb
| Команда | Действие |
|---|---|
| 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 во всех файлах текущей папки. ignore-case (i) line-numbers (n) 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 "bar" grep -E "foo|bar" bar.txt # Remove all folders in current dir except "foo" and "bar" ls | grep -v -Ew 'foo|bar' | xargs rm -r # 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
Мануал: https://help.ubuntu.com/community/grep
Шпаргалки: https://devhints.io/grep https://quickref.me/grep
diff
# compare two directories diff -r directory1 directory2 # use -q option for brief output (it reports only when files differ). diff -rq directory1 directory2 # exclude internal folder `.git` from compare diff -r directory1 directory2 --exclude=.git --exclude=.idea
Информация о системе (диски, файлы, размеры)
| Команда | Действие |
|---|---|
| date | Показать время и дату |
| cal | Показать календарь |
| uptime | Проверить аптайм (время безотканой работы) |
| w | Покажет количество пользователей, которые в данный момент используют сервер |
| whoami | Покажет Ваш логин |
| finger юзер | Покажет инфу о пользователе "юзер" |
| uname -a | Информация про ядро |
| cat /proc/cpuinfo | Информация про CPU |
| cat /proc/meminfo | Информация про память |
| man команда | Покажет все о команде |
| free | Сколько памяти используется |
| whereis программа | Найдет место расположения программы |
| which программа | Определяет, что "программа" будет запущена первой |
| vmstat | Покажет загрузку процессора |
ln (ссылки)
Ссылки в Linux бывают двух типов:
Символические
Символические ссылка (symbolic или soft link) — это специальный файл, который является ссылкой на другой файл или каталог.

Символическая ссылка не содержит в себе (внутри) копии самого файла, на которую она указывает. Она является всего лишь указателем на файл. Так. если вы удалите исходный файл, мягкая ссылка не будет иметь никакой ценности, поскольку она будет указывать на несуществующий файл.
Связь между символической ссылкой и файлом является «мягкой». Если удалить символическую ссылку, то файл, на который она указывает, не удаляется.
При создании символических ссылок можно указывать относительный путь до целевого файла. В таком случае ссылка считает, что относительный путь указан относительно каталога, в котором создана сама ссылка (но не относительно каталога, из которого она была создана).
Жёсткие
Жестка ссылка (hard link) - является синонимом для файла. Когда вы создаете жесткую ссылку, создается дополнительный указатель на существующий файл, но не копия файла.

Жесткие ссылки выглядят в файловой структуре как еще один полноценный файл.
Даже если удалить оригинальный файл, жесткая ссылка все равно будет содержать данные оригинального файла. Поскольку жесткая ссылка действует как зеркальная копия исходного файла.
В Linux каждый файл имеет уникальный идентификатор - индексный дескриптор (inode). Это число, которое однозначно идентифицирует файл в файловой системе. Жесткая ссылка и файл, для которой она создавалась имеют одинаковые inode. Поэтому жесткая ссылка имеет те же права доступа, владельца и время последней модификации, что и целевой файл. Различаются только имена файлов. Фактически жесткая ссылка это еще одно имя для файла.
Жесткие ссылки появились раньше, чем символические, но сейчас уже устаревают. В повседневной работе жесткие ссылки используются редко.
Синтаксис:
ln опции исходный_файл имя_ссылки
Примеры:
«символьная» ссылка (symbolic link)
ln -s /home/pingvinus/myfile.txt mylink ls -li 792300 -rw-rw-r-- 1 kama kama 13-фев-13 13:07 myfile.txt 787622 lrwxrwxrwx 1 kama kama 13-фев-13 13:08 mylink -> /home/kama/myfile.txt # ссылка и целевой файл имеют разные inode (792300 и 787622).
«жёсткая» ссылка (hard link)
ln /home/pingvinus/myfile.txt mylink ls -li 787622 -rw-rw-r-- 2 kama kama 13-фев-13 13:19 myfile.txt 787622 -rw-rw-r-- 2 kama kama 13-фев-13 13:19 mylink # Видим что оба файла имеют одинаковый inode=787622, # так как являются фактически разными именами для одного файла (одних данных) # (inode которого 787622).
Подробнее: https://pingvinus.ru/note/ln
Архивы
tar
# Запаковать (сжать) файлы текущей папки в архив myfile.tar tar -cf myfile.tar # Запаковать (сжать) с gzip (особое сжатие на сервере) tar -czf myfile.tar.gz dir # Распаковать myfile.tar tar -xf myfile.tar # Распаковать gzip-файл tar -xzf myfile.tar.gz # Распаковать в папку dest. tar -xzf myfile.tar.gz -C dest # Сжать с использованием Gzip tar -cjf myfile.tar.bz2 # Распаковать Bzip2-файл tar -xjf myfile.tar.bz2
Пример.
Поместим папки languages, uploads (с файлами), которые находятся в папке www/wp-content/ (относительно текущей папки) в файл архива dev/dump/files.tar.gz (путь относительно текущей папки):
$ tar -cz -f dev/dump/files.tar.gz -C www/wp-content/ languages uploads
Опции:
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 -C dir : change current directory to dir before performing any operations
zip, unzip, gzip, gunzip
| Команда | Действие |
|---|---|
| gzip file | Сжать file и переименовать в его в file.gz. |
| gzip -d file.gz | Распаковать file.gz в file. Удаляет оригинал. |
| gunzip file.gz | Распаковать file.gz в file. Удаляет оригинал. |
| gunzip --keep file.gz | Распаковать file.gz в file. Сохранить оригинал. |
| gunzip -c file.gz > /other/file | Распаковать file.gz в другое место. Удаляет оригинал. |
-c используется для записи распакованных данных в STDOUT.
| Команда | Действие |
|---|---|
| man zip / man unzip | Расширенная документация. |
| zip --help или unzip --help | Справка по командам и параметрам. |
zip archive.zip filename | Сжать файл filename в архив archive.zip. |
|
zip –r archive.zip dirname | Сжать папку dirname в архив archive.zip. Пересоздаст архив если уже есть. |
|
| zip –ru archive.zip dirname | Добавить новые/Обновить изменённые файлы в archive.zip. |
zip -d file.zip "assets/*" | Удалить все файлы из папки assets/* внутри zip архива file.zip. |
|
| unzip archive.zip | Распаковать архив в текущую папку. |
| unzip archive.zip –d dirname | Распаковать архив в папку dirname. | |
| unzip -l archive.zip | Выведет список файлов в архиве. |
zip [options] [file_name.zip] [files_names] -d : Remove files from the archive -u : Update files in the archive -m : Move files into the archive -r : Recursively zip a directory -x : Exclude files from the zip (zip -r name.zip -x dirname) -v : Verbose mode - diagnostic information during compression.
Разница междe zip и gzip.
gzip сжимает контент одного файла. Не хранит информацию о названии и метаданные оригинального файла (только его контент).
zip сжимает несколько файлов или папки с файлами. Хранит информацию о каждом файле: название, дату создания/изменения и т.д.
Система, 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
Онлайн конфигуратор команды rsyncinator.app.
rsync опции источник назначение
Синхронизация папок на локальном компьютере
rsync -azvh /home/user/documents /mnt/backup_dir/
Синхронизация с удаленным сервером
rsync -azv /home/user/documents/ root@123.123.133.133:/home/
Синхронизация файлов по ssh
rsync -avzh -e ssh root@123.123.133.133:/home/ /home/user/documents/ # Или rsync -avzh --rsh=ssh root@123.123.133.133:/home/ /home/user/documents/
Порт для ssh:
rsync -avzh -e "ssh -p 22" root@123.123.133.133:/home/ /home/user/documents/
Установка прав файлы/папки при копировании (эти права будут у файлов после копирования):
Флаг -a включает --perms параметр (сохранить исходные права). Допустим нам нужно, чтобы после копирования права на файлы/папки отличались от источника. Для этого мы можем использовать параметр --chmod, в котором указать какие права якобы установлены у источника, и они будут скопированы в папку назначения.
Здесь префикс D - directory, F - file.
rsync -avzh --chmod=D777,F666 --rsh=ssh root@1.1.1.1:source/ destination/ # Другой вариант записи --chmod=777 --chmod=ugo=rwX
Исключение файлов
rsync --exclude 'file1.txt' source/ destination/
rsync --exclude 'file1.txt' --exclude 'dir1/' source/ destination/
rsync --exclude={file1.txt,dir1/} source/ destination/
rsync --exclude={'file1.txt','dir1/'} source/ destination/
rsync --exclude={'*.txt','dir1/'} source/ destination/
# list.txt here is a file where every exclude rule is on separate line
rsync --exclude-from={'list.txt'} source/ destination/
При синхронизации каталогов (папок) через rsync ВАЖНО добавлять слэш / в конце пути источника.
-
Если исходный путь НЕ содержит
/на конце, rsync создаст сам каталог (вместе с содержимым) в каталоге назначения. Но обычно мы ожидаем что будет скопированно только содержимое каталога в папку назначения. Например:# неправильно rsync -av /path/to/source /path/to/destination
Эта команда создаст папку
source(вместе с содержимым) в папке/path/to/destination- т.е. по итогу у нас появится папка/path/to/destination/source. Обычно это НЕ то что мы ожидаем! -
Если исходный путь содержит
/на конце, rsync скопирует только содержимое исходной папки в папку назначения. Например:# правильно rsync -av /path/to/source/ /path/to/destination/ # тоже правильно, но вызывает вопросы rsync -av /path/to/source/ /path/to/destination
Обе эти команды сработают одинаково и скопируют содержимое
/path/to/sourceв/path/to/destination. Обычно, именно этого мы и ожидаем.
Таким образом, всегда нужно добавлять слэш в конце источника. Его можно не добавлять, когда вы хотите создать сам каталог (вместе с содержимым) в папке назначения.
Дефолтные параметры rsync:
rsync -r -l -t -p -g -o -D
Дефолтные параметры могут отличаться в разных версиях.
--no-OPTION - Можно отключить опцию добавив префикс no- к названию опции (в короткому или длинному названию). Например: --no-perms, --no-W.
Не все опции могут иметь префикс no-, а только базовые (некоторые опции это обертки - набор базовых опций).
Еще пример: вы используете опцию -a (--archive), но вам не нужно копировать владельца -o (--owner). Вместо того чтобы превращать -a в -rlptgD, вы можете написать так -a --no-o (или -a --no-owner).
Порядок важен: если записать так: --no-r -a, то -r опция останется включенной. Нужно писать так -a --no-r.
| Опция | описание |
|---|---|
| -e | --rsh=COMMAND Указать оболочку для удаленного доступа, например, ssh. | |
| -a | --archive Режим архивирования - сохраняет все metadata и permissions оригинальных файлов. | |
| -z | --compress Сжимать файлы перед передачей. | |
| -v | --verbose Выводить подробную информацию о процессе копирования. | |
| -h | --human-readable Выводить числа в удобочитаемом формате. | |
| -q | --quiet Минимум информации. | |
| -c | --checksum Проверка контрольных сумм для файлов. | |
| -u | --update Пропустить файлы, которые новее в папке назначения. | |
| -l | --links Копировать symlinks как symlinks. | |
| -L | --copy-links Превратить symlink в папку с содержимым. | |
| -H | --hard-links Копировать жесткие ссылки. | |
| -t | --times Сохранять время модификации. | |
| -p | --perms Сохранять права для файлов. | |
| -o | --owner Сохранять владельца (super-user only). | |
| -g | --group Сохранять группу. | |
| -W | --whole-file Копировать файлы целиком. | |
| -r | --recursive Перебирать директории рекурсивно. | |
| -R | --relative Относительные пути. | |
| -b | --backup Создание резервной копии. | |
| -x | --one-file-system Работать только в этой файловой системе - не пересекать границы файловой системы. | |
| --delete | Удалять файлы которых нет в источнике. |
| --chmod=CHMOD | Пермишены файлов, которые якобы установлены на файлах источниках. |
| --exclude=PATTERN | Исключить файлы по шаблону. |
| --exclude-from=FILE | Считать паттерн исключения из указанного файла. |
| --include=PATTERN | Включить файлы по шаблону. |
| --include-from=FILE | Считать паттерн включения из указанного файла. |
| --progress | Выводить прогресс передачи файла. |
| --stats | Показать статистику передачи файлов. |
| --version | -V Версия утилиты. | |
| --dry-run | -n Запустить тестово и реально ничего не делать. | |
| --no-perms | Не сохранять permissions оригинальных файлов (когда -p указан). |
| --no-recursive | Отключить рекурсию. |
Подробнее: https://man7.org/linux/man-pages/man1/rsync.1.html
Сеть
| Команда | Действие |
|---|---|
| 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 | Загрузит указанный файл из интернета в текущую директорию на сервере |
Полезные команды
| Команда | Действие |
|---|---|
| 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 | Удалить один символ после позиции курсора.
Тест скорости интернета
wget --output-document=/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
Полезные ссылки
- Как запустить две или более команд терминала одновременно в Linux - символы
; ' && ||
Коды ошибок (общепринятый стандарт)
Команда exit в bash принимает целые числа от 0 до 255, в большинстве случаев достаточно 0 и 1, однако существуют и другие зарезервированные коды выхода, которые могут использоваться для более специфических ошибок.
В Linux Documentation Project есть таблица зарезервированных кодов выхода и того, для чего они используются.
| Exit Code Number | Meaning | Example | Comments |
|---|---|---|---|
| 1 | Catchall for general errors | let "var1 = 1/0" | Miscellaneous errors, such as "divide by zero" and other impermissible operations |
| 2 | Misuse of shell builtins (according to Bash documentation) | empty_function() {} | Missing keyword or command, or permission problem (and diff return code on a failed binary file comparison). |
| 126 | Command invoked cannot execute | /dev/null | Permission problem or command is not an executable |
| 127 | "command not found" | illegal_command | Possible problem with $PATH or a typo |
| 128 | Invalid argument to exit | exit 3.14159 | exit takes only integer args in the range 0 - 255 (see first footnote) |
| 128+n | Fatal error signal "n" | kill -9 $PPID of script | $? returns 137 (128 + 9) |
| 130 | Script terminated by Control-C | Ctl-C | Control-C is fatal error signal 2, (130 = 128 + 2, see above) |
| 255* | Exit status out of range | exit -1 | exit takes only integer args in the range 0 - 255 |
Согласно приведенной выше таблице, коды выхода 1 - 2, 126 - 165 и 255 имеют специальные значения, поэтому их следует избегать для пользовательского выхода. Завершение скрипта с кодом exit 127, может, привести к путанице при поиске неисправностей. Во многих сценариях в качестве общего выхода при ошибке используется exit 1. Поскольку код выхода 1 означает разные ошибки, он не особенно полезен при отладке.
Была попытка систематизировать номера статусов выхода, но она предназначена для программистов на языках С и С++. Аналогичный стандарт для скриптинга, возможно, будет уместен. Автор данного документа предлагает ограничить определяемые пользователем коды выхода диапазоном 64 - 113 (в дополнение к 0 - успех), чтобы соответствовать стандарту C/C++. Это позволит ограничиться 50 допустимыми кодами и упростит поиск и устранение неисправностей.
Примечание: Выполнение команды echo $? из командной строки после выхода из сценария дает результат, соответствующий приведенной выше таблице, только в bash или sh. Запуск C-shell или tcsh в некоторых случаях может дать другие значения.
Шпаргалка
Использование диска
- df -h — показать свободное и использованное пространство на подключенных файловых системах.
- df -i — показать свободные иноды на подключенных файловых системах.
- fdisk -l — показать разделы диска, их размеры и типы.
- du -ah — показать использование диска для всех файлов и директорий.
- du -sh — показать использование диска текущей директории.
- findmnt — показать точку монтирования всех файловых систем.
- mount [путь_устройства] [путь_точки_монтирования] — монтировать устройство.
Горячие клавиши
- Ctrl + C — завершить текущий процесс в терминале.
- Ctrl + Z — приостановить текущий процесс (можно возобновить с помощью fg или отправить в фон с помощью bg).
- Ctrl + W — вырезать одно слово перед курсором и скопировать.
- Ctrl + U — вырезать часть строки перед курсором и скопировать.
- Ctrl + K — вырезать часть строки после курсора и скопировать.
- Ctrl + Y — вставить из буфера обмена.
- Ctrl + R — найти последнюю команду, соответствующую введенным символам.
- Ctrl + O — выполнить найденную команду.
- Ctrl + G — выйти из истории команд без выполнения команды.
- !! — повторить последнюю команду.
- exit — выйти из текущей сессии.
Сеть
- ip addr show — показать IP-адреса и сетевые интерфейсы.
- ip address add [IP-адрес] — назначить IP-адрес интерфейсу eth0.
- ifconfig — показать IP-адреса всех сетевых интерфейсов.
- netstat -pnltu — показать активные (прослушиваемые) порты.
- netstat -nutlp — показать порты TCP и UDP и соответствующие им программы.
- whois [домен] — показать информацию о домене.
- dig [домен] — показать DNS-информацию о домене.
- dig -x host — выполнить обратное DNS-разрешение домена.
- dig -x [IP-адрес] — выполнить обратное DNS-разрешение IP-адреса.
- host [домен] — выполнить IP-запрос для домена.
- hostname -I — показать локальный IP-адрес.
- wget [файл] — загрузить файл с домена.
Информация о оборудовании
- dmesg — показать сообщения при загрузке.
- cat /proc/cpuinfo — показать информацию о процессоре.
- free -h — показать свободную и использованную память (флаг -m для отображения в МБ).
- lshw — показать информацию о конфигурации оборудования.
- lsblk — показать информацию о блочных устройствах.
- lspci -tv — показать устройства PCI в виде дерева.
- lsusb -tv — показать USB-устройства в виде дерева.
- dmidecode — показать информацию об оборудовании из BIOS.
- hdparm -i /dev/[диск] — показать информацию о данных диска.
- hdparm -T /dev/[диск] — провести тест скорости чтения диска.
- badblocks -s /dev/[диск] — проверить диск на наличие нечитаемых блоков.
Сжатие файлов
- tar cf [архив.tar] [файл] — создать архив из файла.
- tar xf [архив.tar] — распаковать архив.
- tar czf [архив.tar.gz] — создать архив tar сжатый gzip.
- gzip [файл] — сжать файл с расширением .gz.
Поиск
- grep [шаблон] [файл] — найти заданный шаблон в файле.
- grep -r [шаблон] [папка] — рекурсивно искать шаблон в директории.
- locate [имя] — найти все файлы и папки по заданному имени.
- find [/путь/к/папке] -name [a] — найти файлы, начинающиеся с [a] в указанной папке.
- find [/путь/к/папке] -size +100M — найти файлы размером больше 100 МБ в указанной папке.
Передача файлов
- scp [файл.txt] [сервер:/tmp] — безопасно скопировать файл на сервер в директорию /tmp.
- rsync -a [/ваша/папка] [/backup/] — синхронизировать содержимое папки с резервной копией.
Команды работы с файлами
- ls — показать файлы в директории.
- ls -a — показать все файлы, включая скрытые.
- pwd — показать текущую директорию.
- mkdir [папка] — создать новую директорию.
- rm [файл] — удалить файл.
- rm -r [папка] — удалить директорию рекурсивно.
- rm -rf [папка] — удалить директорию рекурсивно без подтверждения.
- cp [файл1] [файл2] — копировать содержимое файла1 в файл2.
- cp -r [папка1] [папка2] — рекурсивно копировать содержимое папки1 в папку2.
- mv [файл1] [файл2] — переименовать файл1 в файл2.
- ln -s /путь/к/[файл] [ссылка] — создать символическую ссылку на файл.
- touch [файл] — создать новый файл.
- more [файл] — показать содержимое файла постранично.
- head [файл] — показать первые 10 строк файла.
- tail [файл] — показать последние 10 строк файла.
- gpg -c [файл] — зашифровать файл.
- gpg [файл.gpg] — расшифровать файл.
- wc — вывести количество слов, строк и байт в файле.
Навигация по директориям
- cd .. — подняться на один уровень вверх в структуре директорий.
- cd — перейти в домашнюю директорию ($HOME).
- cd /путь/к/директории — перейти в указанную директорию.
Пользователи
- id — показать информацию об активном пользователе.
- last — показать последние логины в систему.
- who — показать, кто вошел в систему.
- w — показать, кто вошел и их активность.
- groupadd [группа] — добавить новую группу.
- adduser [пользователь] — добавить нового пользователя.
- usermod -aG [группа] [пользователь] — добавить пользователя в группу.
- userdel [пользователь] — удалить пользователя.
- usermod — изменить информацию о пользователе.
Установка пакетов
- yum search [ключевое_слово] — найти пакет по ключевому слову.
- yum info [имя_пакета] — показать информацию о пакете.
- yum install [имя_пакета.rpm] — установить пакет с помощью менеджера YUM.
- dnf install [имя_пакета.rpm] — установить пакет с помощью менеджера DNF.
- rpm -i [имя_пакета.rpm] — установить RPM-пакет из локального файла.
- rpm -e [имя_пакета.rpm] — удалить RPM-пакет.
- tar zxvf [исходный_код.tar.gz] — распаковать исходный код.
- cd [исходный_код] — перейти в директорию с исходным кодом.
- ./configure — настроить исходный код.
- make — собрать программу.
- make install — установить программу.
Команды работы с процессами
- ps — показать снимок активных процессов.
- pstree — показать процессы в виде дерева.
- pmap — показать карту использования памяти процессами.
- top — показать все запущенные процессы.
- kill [ID процесса] — завершить процесс по его ID.
- pkill [имя процесса] — завершить процесс по его имени.
- killall [имя процесса] — завершить все процессы с указанным именем.
- bg — показать список остановленных задач и возобновить их в фоновом режиме.
- fg — вернуть последнюю приостановленную задачу в передний план.
- fg [задача] — вернуть указанную задачу в передний план.
- lsof — показать файлы, открытые процессами.
Вход через SSH
- ssh user@host — подключиться к хосту под указанным пользователем.
- ssh host — безопасное подключение к хосту через SSH (порт по умолчанию 22).
- ssh -p [порт] user@host — подключиться к хосту, используя указанный порт.
- telnet host — подключиться к хосту через Telnet (порт по умолчанию 23).
Системная информация
- uname -r — показать информацию о системе.
- uname -a — показать информацию о версии ядра.
- uptime — показать время работы системы и среднюю нагрузку.
- hostname — показать имя хоста системы.
- hostname -i — показать IP-адрес системы.
- last reboot — показать историю перезагрузок системы.
- date — показать текущие дату и время.
- timedatectl — запросить и изменить системное время.
- cal — показать текущий месяц и день календаря.
- w — показать пользователей, вошедших в систему.
- whoami — показать имя текущего пользователя.
- finger [имя_пользователя] — показать информацию о пользователе.
Разрешения файлов
- chmod 777 [файл] — дать права на чтение, запись и выполнение для всех.
- chmod 755 [файл] — дать полный доступ владельцу, а группе и другим пользователям — права на чтение и выполнение.
- chmod 766 [файл] — дать полный доступ владельцу, а группе и другим пользователям — права на чтение и запись.
- chown [пользователь] [файл] — изменить владельца файла.
- chown [пользователь]:[группа] [файл] — изменить владельца и группу файла.
--
Использовал при написании https://ru.hostings.info/schools/komandy-dlya-putty-ssh-unix-i-linux-serverov.html
