Skip to content

Latest commit

 

History

History
425 lines (331 loc) · 30.1 KB

File metadata and controls

425 lines (331 loc) · 30.1 KB

Bash

Описание

Bash (Bourne again shell, каламбур «Born again» shell — «возрожденный» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.

Представляет собой командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом (или сценарием). Как и все Unix-оболочки, он поддерживает автодополнение имен файлов и каталогов, подстановку вывода результата команд, переменные, контроль над порядком выполнения, операторы ветвления и цикла. Ключевые слова, синтаксис и другие основные особенности языка были заимствованы из sh. Другие функции, например, история, были скопированы из csh и ksh. Bash в основном соответствует стандарту POSIX, но с рядом расширений.

Горячие клавиши

Сочетание Описание
Tab Автодополнение строки за курсором
!! Повторить последнюю команду
Ctrl+a Перемещает курсор в начало строки (эквивалентно клавише Home)
Ctrl+b Перемещает курсор на один символ назад (эквивалентно клавише ←)
Ctrl+r Поиск по набранным ранее командам
Ctrl+c Посылает сигнал SIGINT текущему заданию, который обычно (но не всегда) прекращает и закрывает его
Ctrl+d Удаляет текущий символ (только если есть текст на текущей строке) (эквивалентно клавише Delete)
Ctrl+e Перемещает курсор в конец строки (эквивалентно клавише End)
Ctrl+f Перемещает курсор на один символ вперед (эквивалентно клавише →)
Ctrl+l Очищает содержимое экрана (эквивалентно команде clear)
Ctrl+o Выполняет найденную команду в истории, и выбирает следующую строку относительно текущей строки в истории для того, чтобы отредактировать
Ctrl+q Возобновить вывод процесса
Ctrl+s Приостановить вывод процесса (stop)
Ctrl+t Обмен местами соседних символов
Ctrl+u Очищает содержание строки до курсора и копирует его в буфер обмена экземпляра bash (kill ring)
Ctrl+w Убирает слово до курсора и копирует его в буфер обмена экземпляра bash (kill ring)
Ctrl+z Посылает сигнал SIGTSTP текущему заданию, который приостанавливает его выполнение, и возобновляет прием команд. Для возобновления его выполнения в фоновом режиме можно ввести команду bg. Для того, чтобы вернуть его из фонового режима или приостановки, можно выполнить fg
Ctrl+/ Прервать текущий процесс с дампом памяти (core dump), послав ему сигнал
Alt+> переход к последней команде в истории
Alt+b (назад) перемещает курсор назад на одно слово (эквивалентно клавише Ctrl+←)
Alt+d Сокращает слово после курсора
Alt+f (вперед) перемещает курсор вперед на одно слово (эквивалентно клавише Ctrl+→)
Alt+t Меняет два слова перед курсором местами
Alt+. Добавляет последний аргумент предыдущей команды
Alt+c Заменить букву под курсором на заглавную
Alt+l Заменить букву под курсором на строчную
Ctrl+x Ctrl+x Переносит курсор к началу строки от текущей позиции, и обратно
Ctrl+x Ctrl+e Редактирует текущую строку в программе $EDITOR, или vi, если не предопределено
Ctrl+x Ctrl+v Вывод на экран информации о версии текущего экземпляра bash

Системная информация

Команда Описание
arch отобразить архитектуру компьютера
uname -r отобразить используемую версию ядра
hdparm -i /dev/hda вывести характеристики жесткого диска
cat /proc/cpuinfo отобразить информацию о процессоре
cat /proc/meminfo проверить использование памяти
cat /proc/net/dev показать сетевые интерфейсы и статистику по ним
cat /proc/mounts отобразить смонтированные файловые системы
date вывести системную дату

Выключение, перезагрузка и выход из системы

Команда Описание
shutdown -h now остановить систему
shutdown -h hours:minutes & запланировать остановку системы на указанное время
shutdown -c отменить запланированную по расписанию остановку системы
shutdown -r now перегрузить систему
reboot перегрузить систему
logout выйти из системы

Файлы и директории

Команда Описание
cd /home перейти в директорию '/home'
cd перейти в домашнюю директорию
pwd показать текущую директорию
ls отобразить содержимое текущей директории
ls -l показать детализированое представление файлов и директорий в текущей директории
ls -a показать скрытые файлы и директории в текущей директории
tree показать дерево файлов и директорий, начиная от корня (/)
mkdir dir1 создать директорию с именем 'dir1'
mkdir -p /tmp/dir1/dir2 создать дерево директорий
rm -f file1 удалить файл с именем 'file1'
rmdir dir1 удалить директорию с именем 'dir1'
rm -rf dir1 удалить директорию с именем 'dir1' и рекурсивно все ее содержимое
mv dir1 new_dir переименовать или переместить файл или директорию
cp file1 file2 сопировать файл file1 в файл file2
cp dir/* . копировать все файлы директории dir в текущую директорию
cp -a dir1 dir2 копировать директорию dir1 в директорию dir2
ln -s file1 lnk1 создать символическую ссылку на файл или директорию
ln file1 lnk1 создать "жесткую" (физическую) ссылку на файл или директорию
touch -t 0712250000 fileditest модифицировать дату и время создания файла, при его отсутствии, создать файл с указанными датой и временем (YYMMDDhhmm)

Поиск файлов

Команда Описание
find / -name file1 найти файлы и директории с именем file1. Поиск начать с корня (/)
find / -user user1 найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)
find /home/user1 -name "*.bin" Найти все файлы и директории, имена которых оканчиваются на '. bin'. Поиск начать с '/ home/user1'
find /usr/bin -type f -atime +100 найти все файлы в '/usr/bin', время последнего обращения к которым более 100 дней
find /usr/bin -type f -mtime -10 найти все файлы в '/usr/bin', созданные или измененные в течении последних 10 дней
whereis halt показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу 'halt'
which halt отображает полный путь к файлу 'halt'

Дисковое пространство

Команда Описание
df -h отображает информацию о смонтированных разделах с отображением общего, доступного и используемого пространства
ls -lSr | more выдает список файлов и директорий рекурсивно с сортировкой по возрастанию размера и позволяет осуществлять постраничный просмотр
du -sh dir1 подсчитывает и выводит размер, занимаемый директорией 'dir1'
du -sk * | sort -rn отображает размер и имена файлов и директорий, с сортировкой по размеру

Пользователи и группы

Команда Описание
useradd user1 создать пользователя user1
useradd -c "Nome Cognome" -g admin -d /home/user1 -s /bin/bash user1 создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell'а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome
userdel -r user1 удалить пользователя user1 и его домашний каталог
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 изменить атрибуты пользователя
passwd сменить пароль
chage -E 2005-12-31 user1 установить дату окончания действия учетной записи пользователя user1
groupadd group_name создать новую группу с именем group_name
groupdel group_name удалить группу group_name
groupmod -n new_group_name old_group_name переименовать группу old_group_name в new_group_name

Выставление/изменение полномочий на файлы

Команда Описание
ls -lh просмотр полномочий на файлы и директории в текущей директории
chmod ugo+rwx directory1 добавить полномочия на директорию directory1 ugo(User Group Other)+rwx(Read Write eXecute) - всем полные права. Аналогичное можно сделать таким образом "chmod 777 directory1"
chmod go-rwx directory1 отобрать у группы и всех остальных все полномочия на директорию directory1
chown user1 file1 назначить владельцем файла file1 пользователя user1
chown -R user1 directory1 назначить рекурсивно владельцем директории directory1 пользователя user1
chgrp group1 file1 сменить группу-владельца файла file1 на group1

Архивирование и сжатие файлов

Команда Описание
gunzip file1.gz разжимает файл 'file1.gz'
gzip file1 сжимает файл 'file1'
gzip -9 file1 сжать файл file1 с максимальным сжатием
rar a file1.rar test_file создать rar-архив 'file1.rar' и включить в него файл test_file
rar a file1.rar file1 file2 dir1 создать rar-архив 'file1.rar' и включить в него file1, file2 и dir1
unrar x file1.rar распаковать rar-архив
tar -cvf archive.tar file1 создать tar-архив archive.tar, содержащий файл file1
tar -tf archive.tar показать содержимое архива
tar -cvfz archive.tar.gz dir1 создать архив и сжать его с помощью gzip
tar -xvfz archive.tar.gz разжать архив и распаковать его
zip file1.zip file1 создать сжатый zip-архив
unzip file1.zip разжать и распаковать zip-архив

APT - средство управление пакетами (Debian, Ubuntu и тп)

Команда Описание
apt-get install package_name установить / обновить пакет
apt-get update получить обновленные списки пакетов
apt-get upgrade обновить пакеты, установленные в систему
apt-get remove package_name удалить пакет, установленный в систему с сохранением файлов конфигурации
apt-get purge package_name удалить пакет, установленный в систему с удалением файлов конфигурации
apt-get clean удалить загруженные архивные файлы пакетов
apt-get autoclean удалить старые загруженные архивные файлы пакетов

Просмотр содержимого файлов

Команда Описание
cat file1 вывести содержимое файла file1
tac file1 вывести содержимое файла file1 в обратном порядке
more file1 постраничный вывод содержимого файла file1
less file1 постраничный вывод содержимого файла file1, но с возможностью пролистывания в обе стороны (вверх-вниз), поиска по содержимому и т.п.
head -2 file1 вывести первые две строки файла file1
tail -2 file1 вывести последние две строки файла file1

Манипуляции с текстом

Команда Описание
grep Aug /var/log/messages из файла '/var/log/messages' отобрать и вывести строки, содержащие "Aug"
grep ^Aug /var/log/messages из файла '/var/log/messages' отобрать и вывести строки, начинающиеся на "Aug"
grep Aug -R /var/log/* отобрать и вывести строки, содержащие "Aug", во всех файлах, находящихся в директории /var/log и ниже
sed 's/stringa1/stringa2/g' example.txt в файле example.txt заменить "string1" на "string2", результат вывести
sed '/^$/d' example.txt удалить пустые строки из файла example.txt
sed '/ *#/d; /^$/d' example.txt удалить пустые строки и комментарии из файла example.txt
sed -e '1d' result.txt удалить первую строку из файла example.txt
sed -n '/string1/p' отобразить только строки содержашие "string1"
sed -e 's/ *$//' example.txt удалить пустые символы в в конце каждой строки
sed -e 's/string1//g' example.txt удалить строку "string1" из текста не изменяя всего остального
sed -n '1,8p;5q' example.txt взять из файла с первой по восьмую строки и из них вывести первые пять
sed -e 's/0*/0/g' example.txt заменить последовательность из любого количества нулей одним нулем
cat -n file1 пронумеровать строки при выводе содержимого файла
cat example.txt | awk 'NR%2==1' при выводе содержимого файла, не выводить четные строки файла
echo a b c | awk '{print $1}' вывести первую колонку. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции
echo a b c | awk '{print $1,$3}' вывести первую и треью колонки. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции
sort file1 file2 отсортировать содержимое двух файлов
sort file1 file2 | uniq -u отсортировать содержимое двух файлов, отображая только уникальные строки (строки, встречающиеся в обоих файлах, не выводятся на стандартное устройство вывода)
sort file1 file2 | uniq -d отсортировать содержимое двух файлов, отображая только повторяющиеся строки
comm -1 file1 file2 сравнить содержимое двух файлов, не отображая строки принадлежащие файлу 'file1'
comm -3 file1 file2 сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах

Сеть

Команда Описание
ifconfig eth0 показать конфигурацию сетевого интерфейса eth0
ifup eth0 активировать (поднять) интерфейс eth0
ifdown eth0 деактивировать (опустить) интерфейс eth0
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 выставить интерфейсу eth0 ip-адрес и маску подсети
route -n вывести локальную таблицу маршрутизации
hostname отобразить имя компьютера
host www.yandex.ru разрешить имя www.yandex.ru хоста в ip-адрес и наоборот
ip link show отобразить состояние всех интерфейсов
netstat -tupn отображает все установленные сетевые соединения по протоколам TCP и UDP без разрешения имен в ip-адреса и PID'ы и имена процессов, обеспечивающих эти соединения
netstat -tupln отображает все сетевые соединения по протоколам TCP и UDP без разрешения имен в ip-адреса и PID'ы и имена процессов, слушающих порты
tcpdump tcp port 80 отобразить весь трафик на TCP-порт 80 (обычно - HTTP)
traceroute www.ya.ru Трассировка маршрута до указанного хоста (www.ya.ru), аналог tracert в Windows. В некоторых дистрибутивах установлен по-умолчанию только traceroute6 и придется доустанавливать вручную.

Мониторинг и отладка

Команда Описание
top отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (с автоматическим обновлением данных)
ps -eafw отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (единожды)
ps -e -o pid,args --forest вывести PID'ы и процессы в виде дерева
pstree отобразить дерево процессов
kill -9 98989 "убить" процесс с PID 98989 "на смерть" (без соблюдения целостности данных)
kill -TERM 98989 Корректно завершить процесс с PID 98989
lsof -p 98989 отобразить список файлов, открытых процессом с PID 98989
lsof /home/user1 отобразить список открытых файлов из директории /home/user1
strace -f -e open ls > /dev/null вывести вызовы бибилотек
last reboot отобразить историю перезагрузок системы
last user1 отобразить историю регистрации пользователя user1 в системе и время его нахождения в ней
free -m показать состояние оперативной памяти в мегабайтах
tail /var/log/dmesg вывести десять последних записей из журнала загрузки ядра
tail /var/log/messages вывести десять последних записей из системного журнала

Прочие команды

Команда Описание
apropos …keyword выводит список комманд, которые так или иначе относятся к ключевым словам. Полезно, когда вы знаете что делает программа, но не помните команду
man ping вызов руководства по работе с программой, в данном случае, - ping
whatis …keyword отображает описание действий указанной программы
wget -r www.example.com загружает рекурсивно содержимое сайта www.example.com
wget -c www.example.com/file.iso загрузить файл www.example.com/file.iso с возможностью останова и продолжения в последствии
ldd /usr/bin/ssh вывести список библиотек, необходимых для работы ssh
alias hh='history' назначить алиас hh команде history

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

Пользователи

# Добавить администратора
sudo adduser admin2
sudo usermod -aG sudo admin2
cp -a /home/sysopr/.ssh /home/admin2/.ssh

# Рекурсивно сменить владельца папки
sudo chown -R sysopr:sysopr dir_name

Доступ

# Создание пары ключей для авторизации
# https://beget.com/ru/articles/ssh_by_key
# https://kb.site5.com/shell-access-ssh/how-to-convert-ssh-keys-to-ppk-format/

# Убрать ошибку "unable to resolve host host_name"
# Добавить в "/etc/hosts" строку "127.0.0.1 host_name"

# Доступ из WinSCP
sudo visudo -f /etc/sudoers.d/winscp
# Добавить строку "sysopr    ALL=NOPASSWD: /usr/lib/sftp-server"

# Исправить зависание Git Bash
# https://ru.stackoverflow.com/a/662653
touch ~/.ssh/config
# Host *
# ServerAliveInterval 120
chmod 600 ~/.ssh/config

Файлы

# Удалить временные файлы macOS
find . -name '~$*' -type f -delete -print
find . -name '._*' -type f -delete -print
find . -name '.DS_*' -type f -delete -print

# Переименовать файлы "*-en.srt" -> "*.srt"
for f in *-en.srt; do mv "$f" "$(echo "$f" | sed s/-en.srt/.srt/)"; done
# Переименовать файлы "any_folder/*-en.srt" -> "*.srt"
for f in */*-en.srt; do mv "$f" "$(echo "$f" | sed s/-en.srt/.srt/)"; done

# Заменить строки в файле
sed -i '' 's/old_string/new_string/g' 'file.txt'

Supervisor

# https://djbook.ru/examples/62/
sudo apt-get install supervisor

# Создать конфиг для проекта
cd /etc/supervisor/conf.d/
touch myproject.conf

# Позволить пользователю запускать без sudo
# [unix_http_server]
# file=/var/run/supervisor.sock   ; (the path to the socket file)
# chmod=0700                      ; sockef file mode (default 0700)
# chown=sysopr:sysopr             ; socket file uid:gid owner
sudo service supervisor reload

# Перезапуск проекта
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status myproject
sudo supervisor restart myproject

SSL

# Установка Certbot
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo pip install cryptography
sudo pip install paramiko

# Использование Certbot
sudo certbot --nginx
# Добавить в Cron строку "0 0 1 * * root certbot renew —quiet"

Прочее

# Обновить все пакеты
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo apt-get autoclean

# Обновление Cron
# Файл "/etc/crontab"
sudo service cron reload

# Архивация каждого файла по маске
sudo gzip *.sql

# Узнать кто занял порт
netstat -vanp tcp | grep 8000
sudo lsof -i tcp:8000

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