#!/bin/bash
##############################################################################
# СКОРОСТИ И ИСТОРИЯ
##############################################################################
CTRL+A # перемещает курсор в начало строки
CTRL+B # перемещает курсор на один символ назад
CTRL+C # останавливает текущую команду
CTRL+D # удаляет один символ назад или выходит из текущей сессии, аналогично команде exit
CTRL+E # перемещает курсор в конец строки
CTRL+F # перемещает курсор на один символ вперед
CTRL+G # отменяет текущую команду редактирования и издает звуковой сигнал терминала
CTRL+H # удаляет один символ под курсором (аналогично DELETE)
CTRL+J # аналогично RETURN
CTRL+K # удаляет (убивает) текст от курсора до конца строки
CTRL+L # очищает экран и перерисовывает строку
CTRL+M # аналогично RETURN
CTRL+N # следующая строка в истории команд
CTRL+O # аналогично RETURN, затем отображает следующую строку в файле истории
CTRL+P # предыдущая строка в истории команд
CTRL+Q # возобновляет приостановленный вывод оболочки
CTRL+R # ищет в обратном направлении
CTRL+S # ищет вперед или приостанавливает вывод оболочки
CTRL+T # меняет местами два символа
CTRL+U # удаляет текст от курсора до начала строки
CTRL+V # вводит следующий символ без изменений
CTRL+W # удаляет слово перед курсором
CTRL+X # показывает возможные варианты завершения для текущего слова
CTRL+Y # восстанавливает (вытаскивает) последний удаленный элемент
CTRL+Z # останавливает текущую команду, возобновляет с помощью fg в переднем плане или bg в фоновом режиме
ALT+B # перемещается на одно слово назад
ALT+D # удаляет следующее слово
ALT+F # перемещается на одно слово вперед
ALT+H # удаляет один символ назад
ALT+T # меняет местами два слова
ALT+. # вставляет последнее слово из последней команды. Повторное нажатие позволяет просматривать историю команд.
ALT+U # делает заглавными все символы от текущей позиции курсора до конца слова
ALT+L # делает строчными все символы от текущей позиции курсора до конца слова
ALT+C # делает заглавной букву под курсором. Курсор затем перемещается в конец слова.
ALT+R # отменяет любые изменения в команде, которую вы извлекли из истории, если вы ее редактировали.
ALT+? # показывает возможные завершения того, что было введено
ALT+^ # разворачивает строку до самого последнего совпадения из истории
CTRL+X затем ( # начинает запись макроса клавиатуры
CTRL+X затем ) # завершает запись макроса клавиатуры
CTRL+X затем E # вызывает последний записанный макрос клавиатуры
CTRL+X затем CTRL+E # вызывает текстовый редактор (указанный в $EDITOR) на текущей строке команд и затем выполняет результаты как команды оболочки
CTRL+A затем D # выходит из экрана, но не завершает его; если есть команда, она продолжит выполнение
BACKSPACE # удаляет один символ назад
DELETE # удаляет один символ под курсором
history # показывает историю команд
!! # повторяет последнюю команду
!<n> # ссылается на команду с номером 'n'
!<string> # ссылается на команду, начинающуюся с 'string'
esc :wq # выходит и сохраняет скрипт
exit # выходит из текущей сессии
##############################################################################
# ОСНОВЫ BASH
##############################################################################
env # отображает все переменные окружения
echo $SHELL # отображает используемую оболочку
echo $BASH_VERSION # отображает версию bash
bash # если вы хотите использовать bash (введите exit, чтобы вернуться к ранее открытой оболочке)
whereis bash # находит бинарный файл, исходный код и страницу руководства для команды
which bash # определяет, какая программа выполняется как 'bash' (по умолчанию: /bin/bash, может изменяться в зависимости от окружения)
clear # очищает содержимое окна (скрывает отображаемые строки)
##############################################################################
# ФАЙЛОВЫЕ КОМАНДЫ
##############################################################################
ls # перечисляет ваши файлы в текущей директории, ls <dir> для отображения файлов в конкретной директории
ls -l # перечисляет ваши файлы в 'длинном формате', который содержит точный размер файла, кто владеет файлом и кто имеет право его просматривать, и когда он был в последний раз изменен
ls -a # перечисляет все файлы в 'длинном формате', включая скрытые файлы (имя начинается с '.')
ln -s <filename> <link> # создает символическую ссылку на файл
readlink <filename> # показывает, куда указывает символическая ссылка
tree # показывает директории и поддиректории в удобочитаемом файловом дереве
mc # файловый менеджер в терминале (альтернатива ncdu)
touch <filename> # создает или обновляет (редактирует) ваш файл
mktemp -t <filename> # создает временный файл в /tmp/, который будет удален при следующей загрузке (-d для создания директории)
cat <filename> # отображает сырой контент файла (не будет интерпретироваться)
cat -n <filename> # показывает номер строк
nl <file.sh> # показывает номер строк в файле
cat filename1 > filename2 # Копирует filename1 в filename2
cat filename1 >> filename2 # объединяет тексты двух файлов
any_command > <filename> # '>' используется для выполнения перенаправлений, он установит stdout любой команды в файл вместо "реального stdout" (обычно /dev/stdout)
more <filename> # показывает первую часть файла (перемещайтесь с помощью пробела и введите q, чтобы выйти)
head <filename> # выводит первые строки файла (по умолчанию: 10 строк)
tail <filename> # выводит последние строки файла (полезно с опцией -f) (по умолчанию: 10 строк)
vim <filename> # открывает файл в текстовом редакторе VIM (VI iMproved), создаст его, если он не существует
mv <filename1> <dest> # перемещает файл в назначение, поведение изменится в зависимости от типа 'dest' (dir: файл помещается в dir; файл: файл заменяет dest (совет: полезно для переименования))
cp <filename1> <dest> # копирует файл
rm <filename> # удаляет файл
find . -name <name> <type> # ищет файл или директорию в текущей директории и всех ее поддиректориях по имени
diff <filename1> <filename2> # сравнивает файлы и показывает, где они отличаются
wc <filename> # сообщает, сколько строк, слов и символов в файле. Используйте -lwc (строки, слово, символ), чтобы вывести только одну из этих информации
sort <filename> # сортирует содержимое текстового файла построчно в алфавитном порядке, используйте -n для числовой сортировки и -r для обратного порядка.
sort -t -k <filename> # сортирует содержимое по конкретному ключевому полю, начиная с 1, используя разделитель t.
rev # меняет порядок символов в строке (hello становится olleh)
chmod -options <filename> # позволяет изменять права на чтение, запись и выполнение для ваших файлов (больше информации: SUID, GUID)
gzip <filename> # сжимает файлы с использованием алгоритма gzip
gunzip <filename> # разжимает файлы, сжатые gzip
gzcat <filename> # позволяет просматривать gzipped файл, не разжимая его
lpr <filename> # печатает файл
lpq # проверяет очередь печати
lprm <jobnumber> # удаляет что-то из очереди печати
genscript # конвертирует текстовые файлы в постскрипт для печати и предоставляет несколько опций для форматирования
dvips <filename> # печатает .dvi файлы (т.е. файлы, созданные с помощью LaTeX)
grep <pattern> <filenames> # ищет строку в файлах
grep -r <pattern> <dir> # ищет рекурсивно по шаблону в директории
head -n file_name | tail +n # Печатает n-ю строку из файла.
head -y lines.txt | tail +x # хочет отобразить все строки с x по y. Это включает в себя x-ю и y-ю строки.
sed 's/<pattern>/<replacement>/g' <filename> # заменяет шаблон в файле на значение замены, символ после s (/) является разделителем
sed -i 's/<pattern>/<replacement>/g' <filename> # заменяет шаблон в файле на значение замены на месте
echo "this" | sed 's/is/at/g' # заменяет шаблон из входного потока на значение замены
##############################################################################
# КОМАНДЫ ДИРЕКТОРИЙ
##############################################################################
mkdir <dirname> # создает новую директорию
rmdir <dirname> # удаляет пустую директорию
rmdir -rf <dirname> # удаляет непустую директорию
mv <dir1> <dir2> # переименовывает директорию из <dir1> в <dir2>
cd # переходит в домашнюю директорию
cd .. # переходит в родительскую директорию
cd <dirname> # переходит в директорию
cp -r <dir1> <dir2> # копирует <dir1> в <dir2>, включая поддиректории
pwd # показывает, где вы находитесь в данный момент
cd ~ # переходит в домашнюю директорию.
cd - # переходит в предыдущую рабочую директорию
##############################################################################
# SSH, ИНФОРМАЦИЯ О СИСТЕМЕ И СЕТЕВЫЕ КОМАНДЫ
##############################################################################
ssh user@host # подключается к хосту как пользователь
ssh -p <port> user@host # подключается к хосту на указанном порту как пользователь
ssh-copy-id user@host # добавляет ваш ssh ключ на хост для пользователя, чтобы включить вход по ключу или без пароля
whoami # возвращает ваше имя пользователя
su <user> # переключается на другого пользователя
su - # переключается на root, вероятно, потребуется sudo su -
sudo <command> # выполняет команду от имени пользователя root
passwd # позволяет изменить ваш пароль
quota -v # показывает, каков ваш диск-квота
date # показывает текущую дату и время
cal # показывает календарь месяца
uptime # показывает текущее время работы
w # отображает, кто онлайн
finger <user> # отображает информацию о пользователе
uname -a # показывает информацию о ядре
man <command> # показывает руководство для указанной команды
info <command> # показывает другую документацию для конкретной команды
help # показывает документацию о встроенных командах и функциях
df # показывает использование диска
du <filename> # показывает использование диска для файлов и директорий в filename (du -s дает только общий итог)
resize2fs # изменяет размер файловой системы ext2/ext3/ext4
last <yourUsername> # перечисляет ваши последние входы
ps -u yourusername # перечисляет ваши процессы
kill <PID> # завершает процесс с указанным ID
killall <processname> # завершает все процессы с указанным именем
top # отображает ваши текущие активные процессы
lsof # перечисляет открытые файлы
bg # перечисляет приостановленные или фоновые задания; возобновляет приостановленное задание в фоновом режиме
fg # выводит последнее задание на передний план
fg <job> # выводит задание на передний план
ping <host> # пингует хост и выводит результаты
whois <domain> # получает информацию whois для домена
dig <domain> # получает информацию DNS для домена
dig -x <host> # обратный поиск хоста
wget <file> # загружает файл
netstat # выводит сетевые соединения, таблицы маршрутизации, статистику интерфейсов, маскирующие соединения и мультикастовые членства
time <command> # сообщает время, затраченное на выполнение команды
##############################################################################
# ПЕРЕМЕННЫЕ
##############################################################################
varname=value # определяет переменную
varname=value command # определяет переменную для окружения конкретного подпроцесса
echo $varname # проверяет значение переменной
echo $ # выводит идентификатор процесса текущей оболочки
echo $! # выводит идентификатор процесса последней вызванной фоновой работы
echo $? # отображает статус выхода последней команды
read <varname> # считывает строку из ввода и присваивает ее переменной
read -p "prompt" <varname> # то же самое, что и выше, но выводит подсказку, чтобы попросить пользователя ввести значение
column -t <filename> # отображает информацию в аккуратных столбцах (часто используется с пайпом)
let <varname> = <equation> # выполняет математические вычисления с использованием операторов, таких как +, -, , /, %
export VARNAME=value # определяет переменную окружения (будет доступна в подпроцессах)
export -f <funcname> # экспортирует функцию 'funcname'
export var1="var1 value" # экспортирует и присваивает в одном выражении
export <varname> # копирует переменную Bash
declare -x <varname> # копирует переменную Bash
array[0]=valA # как определить массив
array[1]=valB # как определить массив
array[2]=valC # как определить массив
array=([2]=valC [0]=valA [1]=valB) # другой способ
array=(valA valB valC) # и еще один
${array} # отображает значение массива для этого индекса. Если индекс не указан, предполагается элемент массива 0
${#array} # для определения длины любого элемента в массиве
${#array[@]} # для определения, сколько значений в массиве
declare -a # переменные рассматриваются как массивы
declare -f # использует только имена функций
declare -F # отображает имена функций без определений
declare -i # переменные рассматриваются как целые числа
declare -r # делает переменные только для чтения
declare -x # помечает переменные для экспорта через окружение
declare -l # заглавные значения в переменной преобразуются в строчные
declare -A # делает это ассоциативным массивом
${varname:-word} # если varname существует и не пуст, вернуть его значение; иначе вернуть слово
${varname:word} # если varname существует и не пуст, вернуть его значение; иначе вернуть слово
${varname:=word} # если varname существует и не пуст, вернуть его значение; иначе установить его значение как слово и затем вернуть его значение
${varname:?message} # если varname существует и не пуст, вернуть его значение; иначе вывести varname, за которым следует сообщение, и прервать выполнение текущей команды или скрипта
${varname:+word} # если varname существует и не пуст, вернуть слово; иначе вернуть null
${varname:offset:length} # выполняет расширение подстроки. Возвращает подстроку $varname, начиная с offset и длиной до length символов
${variable#pattern} # если шаблон соответствует началу значения переменной, удаляет кратчайшую часть, которая соответствует, и возвращает остальное
${variable##pattern} # если шаблон соответствует началу значения переменной, удаляет самую длинную часть, которая соответствует, и возвращает остальное
${variable%pattern} # если шаблон соответствует концу значения переменной, удаляет кратчайшую часть, которая соответствует, и возвращает остальное
${variable%%pattern} # если шаблон соответствует концу значения переменной, удаляет самую длинную часть, которая соответствует, и возвращает остальное
${variable/pattern/string} # самая длинная совпадение с шаблоном в переменной заменяется строкой. Заменяется только первое совпадение
${variable//pattern/string} # самая длинная совпадение с шаблоном в переменной заменяется строкой. Все совпадения заменяются
${#varname} # возвращает длину значения переменной как строку символов
(patternlist) # соответствует нулю или более вхождений заданных шаблонов
+(patternlist) # соответствует одному или более вхождениям заданных шаблонов
?(patternlist) # соответствует нулю или одному вхождению заданных шаблонов
@(patternlist) # соответствует ровно одному из заданных шаблонов
!(patternlist) # соответствует всему, кроме одного из заданных шаблонов
$(UNIX command) # подстановка команд: выполняет команду и возвращает стандартный вывод
typeset -l <x> # делает переменную локальной - <x> должен быть целым числом
##############################################################################
# ФУНКЦИИ
##############################################################################
# Функция ссылается на переданные аргументы по позиции (как если бы они были позиционными параметрами), т.е. \$1, \$2 и так далее.
# $@ равно "\$1" "\$2"... "$N", где N - количество позиционных параметров. $# хранит количество позиционных параметров.
function functname() {
shell commands
}
unset -f functname # удаляет определение функции
declare -f # отображает все определенные функции в вашей сессии входа
##############################################################################
# УПРАВЛЕНИЕ ПОТОКАМИ
##############################################################################
statement1 && statement2 # логический оператор "и"
statement1 || statement2 # логический оператор "или"
-a # логический оператор "и" внутри условного выражения теста
-o # логический оператор "или" внутри условного выражения теста
# СТРОКИ
str1 == str2 # str1 совпадает со str2
str1 != str2 # str1 не совпадает со str2
str1 < str2 # str1 меньше str2 (в алфавитном порядке)
str1 > str2 # str1 больше str2 (в алфавитном порядке)
str1 \> str2 # str1 сортируется после str2
str1 \< str2 # str1 сортируется перед str2
-n str1 # str1 не пустой (длина больше 0)
-z str1 # str1 пустой (длина 0)
# ФАЙЛЫ
-a file # файл существует или его компиляция успешна
-d file # файл существует и является директорией
-e file # файл существует; то же самое, что и -a
-f file # файл существует и является обычным файлом (т.е. не директорией или другим специальным типом файла)
-r file # у вас есть разрешение на чтение
-s file # файл существует и не пуст
-w file # у вас есть разрешение на запись
-x file # у вас есть разрешение на выполнение файла или разрешение на поиск в директории, если это директория
-N file # файл был изменен с момента последнего чтения
-O file # вы владеете файлом
-G file # идентификатор группы файла совпадает с вашим (или одним из ваших, если вы находитесь в нескольких группах)
file1 -nt file2 # file1 новее file2
file1 -ot file2 # file1 старше file2
# ЧИСЛА
-lt # меньше
-le # меньше или равно
-eq # равно
-ge # больше или равно
-gt # больше
-ne # не равно
if condition
then
statements
[elif condition
then statements...]
[else
statements]
fi
for x in {1..10}
do
statements
done
for name [in list]
do
statements, которые могут использовать $name
done
for (( initialization ; ending condition ; update ))
do
statements...
done
case expression in
pattern1 )
statements ;;
pattern2 )
statements ;;
esac
select name [in list]
do
statements, которые могут использовать $name
done
while condition; do
statements
done
until condition; do
statements
done
##############################################################################
# ЦИКЛ ОБРАБОТКИ КОМАНД
##############################################################################
# Порядок поиска команд по умолчанию: функции, затем встроенные команды, а затем скрипты и исполняемые файлы.
# Существует три встроенные команды, которые вы можете использовать, чтобы переопределить этот порядок: `command`, `builtin` и `enable`.
command # удаляет поиск алиасов и функций. Выполняются только встроенные команды и команды, найденные в пути поиска
builtin # ищет только встроенные команды, игнорируя функции и команды, найденные в PATH
enable # включает и отключает встроенные команды оболочки
eval # принимает аргументы и выполняет их через этапы обработки командной строки снова
Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
BASH и
- ALEXX
- Администратор
- Сообщения: 1410
- Зарегистрирован: 21 дек 2014, 14:59
- Откуда: Королёв
- Контактная информация:
Re: BASH и
##############################################################################
# ПЕРЕНАПРАВЛЕНИЯ ВВОДА/ВЫВОДА
##############################################################################
cmd1|cmd2 # пайп; берет стандартный вывод cmd1 как стандартный ввод для cmd2
< file # берет стандартный ввод из файла
> file # направляет стандартный вывод в файл
>> file # направляет стандартный вывод в файл; добавляет в файл, если он уже существует
>|file # принудительно направляет стандартный вывод в файл, даже если установлен noclobber
n>|file # принудительно направляет вывод в файл из дескриптора файла n, даже если установлен noclobber
<> file # использует файл как стандартный ввод и стандартный вывод
n<>file # использует файл как ввод и вывод для дескриптора файла n
n>file # направляет дескриптор файла n в файл
n<file # берет дескриптор файла n из файла
n>>file # направляет дескриптор файла n в файл; добавляет в файл, если он уже существует
n>& # дублирует стандартный вывод в дескриптор файла n
n<& # дублирует стандартный ввод из дескриптора файла n
n>&m # дескриптор файла n становится копией выходного дескриптора файла
n<&m # дескриптор файла n становится копией входного дескриптора файла
&>file # направляет стандартный вывод и стандартный поток ошибок в файл
<&- # закрывает стандартный ввод
>&- # закрывает стандартный вывод
n>&- # закрывает вывод из дескриптора файла n
n<&- # закрывает ввод из дескриптора файла n
|tee <file># выводит команду как в терминал, так и в файл (-a для добавления в файл)
##############################################################################
# УПРАВЛЕНИЕ ПРОЦЕССАМИ
##############################################################################
# Чтобы приостановить задание, нажмите CTRL+Z, пока оно выполняется. Вы также можете приостановить задание с помощью CTRL+Y.
# Это немного отличается от CTRL+Z, так как процесс останавливается только при попытке прочитать ввод из терминала.
# Конечно, чтобы прервать задание, нажмите CTRL+C.
myCommand & # запускает задание в фоновом режиме и возвращает оболочку
jobs # перечисляет все задания (используйте с -l, чтобы увидеть связанный PID)
fg # переводит фоновое задание в передний план
fg %+ # переводит последнее запущенное фоновое задание
fg %- # переводит второе по времени запущенное фоновое задание
fg %N # переводит задание номер N
fg %string # переводит задание, команда которого начинается со строки
fg %?string # переводит задание, команда которого содержит строку
kill -l # возвращает список всех сигналов в системе, по имени и номеру
kill PID # завершает процесс с указанным PID
kill -s SIGKILL 4500 # отправляет сигнал для принудительного завершения процесса
kill -15 913 # завершает процесс с PID 913 с сигналом 15 (TERM)
kill %1 # где %1 - это номер задания, как указано в команде 'jobs'.
ps # выводит строку информации о текущей работающей оболочке и любых процессах, работающих под ней
ps -a # выбирает все процессы с tty, кроме лидеров сессии
trap cmd sig1 sig2 # выполняет команду, когда сигнал получен скриптом
trap "" sig1 sig2 # игнорирует эти сигналы
trap - sig1 sig2 # сбрасывает действие, выполняемое при получении сигнала, на значение по умолчанию
disown <PID|JID> # удаляет процесс из списка заданий
wait # ждет, пока все фоновые задания не завершатся
sleep <number> # ждет указанное количество секунд перед продолжением
pv # отображает индикатор выполнения для команд обработки данных. часто используется с пайпом, например |pv
yes # дает ответ "да" каждый раз, когда запрашивается ввод от скрипта/процесса
##############################################################################
# СОВЕТЫ И ХИТРОСТИ
##############################################################################
# установить псевдоним
cd; nano .bash_profile
> alias gentlenode='ssh admin@gentlenode.com -p 3404' # добавьте свой псевдоним в .bash_profile
# чтобы быстро перейти в конкретную директорию
cd; nano .bashrc
> shopt -s cdable_vars
> export websites="/Users/mac/Documents/websites"
source .bashrc
cd $websites
##############################################################################
# ОТЛАДКА SHELL ПРОГРАММ
##############################################################################
bash -n scriptname # не выполняет команды; проверяет только на синтаксические ошибки
set -o noexec # альтернатива (установить опцию в скрипте)
bash -v scriptname # выводит команды перед их выполнением
set -o verbose # альтернатива (установить опцию в скрипте)
bash -x scriptname # выводит команды после обработки командной строки
set -o xtrace # альтернатива (установить опцию в скрипте)
trap 'echo $varname' EXIT # полезно, когда вы хотите вывести значения переменных в момент выхода вашего скрипта
function errtrap {
es=$?
echo "ОШИБКА строка \$1: Команда завершилась с кодом $es."
}
trap 'errtrap $LINENO' ERR # выполняется каждый раз, когда команда в окружающем скрипте или функции завершилась с ненулевым статусом
function dbgtrap {
echo "badvar равно $badvar"
}
trap dbgtrap DEBUG # заставляет код ловушки выполняться перед каждой инструкцией в функции или скрипте
# ...секция кода, в которой возникает проблема...
trap - DEBUG # отключает ловушку DEBUG
function returntrap {
echo "Произошел возврат"
}
trap returntrap RETURN # выполняется каждый раз, когда оболочка или скрипт, выполненные с помощью . или source, завершает выполнение
##############################################################################
# ЦВЕТА И ФОНЫ
##############################################################################
# примечание: \e или \x1B также работают вместо \033
# Сброс
Color_Off='\033[0m' # Сброс текста
# Обычные цвета
Black='\033[0;30m' # Черный
Red='\033[0;31m' # Красный
Green='\033[0;32m' # Зеленый
Yellow='\033[0;33m' # Желтый
Blue='\033[0;34m' # Синий
Purple='\033[0;35m' # Фиолетовый
Cyan='\033[0;36m' # Голубой
White='\033[0;97m' # Белый
# Дополнительные цвета
LGrey='\033[0;37m' # Светло-серый
DGrey='\033[0;90m' # Темно-серый
LRed='\033[0;91m' # Светло-красный
LGreen='\033[0;92m' # Светло-зеленый
LYellow='\033[0;93m'# Светло-желтый
LBlue='\033[0;94m' # Светло-синий
LPurple='\033[0;95m'# Светло-фиолетовый
LCyan='\033[0;96m' # Светло-голубой
# Жирный
BBlack='\033[1;30m' # Черный
BRed='\033[1;31m' # Красный
BGreen='\033[1;32m' # Зеленый
BYellow='\033[1;33m'# Желтый
BBlue='\033[1;34m' # Синий
BPurple='\033[1;35m'# Фиолетовый
BCyan='\033[1;36m' # Голубой
BWhite='\033[1;37m' # Белый
# Подчеркивание
UBlack='\033[4;30m' # Черный
URed='\033[4;31m' # Красный
UGreen='\033[4;32m' # Зеленый
UYellow='\033[4;33m'# Желтый
UBlue='\033[4;34m' # Синий
UPurple='\033[4;35m'# Фиолетовый
UCyan='\033[4;36m' # Голубой
UWhite='\033[4;37m' # Белый
# Фон
On_Black='\033[40m' # Черный
On_Red='\033[41m' # Красный
On_Green='\033[42m' # Зеленый
On_Yellow='\033[43m'# Желтый
On_Blue='\033[44m' # Синий
On_Purple='\033[45m'# Фиолетовый
On_Cyan='\033[46m' # Голубой
On_White='\033[47m' # Белый
# Пример использования
echo -e "${Green}Это зеленый текст${Color_Off} и обычный текст"
echo -e "${Red}${On_White}Это красный текст на белом фоне${Color_Off}"
# опция -e обязательна, она включает интерпретацию управляющих символов
printf "${Red} Это красный текст \n"
# ПЕРЕНАПРАВЛЕНИЯ ВВОДА/ВЫВОДА
##############################################################################
cmd1|cmd2 # пайп; берет стандартный вывод cmd1 как стандартный ввод для cmd2
< file # берет стандартный ввод из файла
> file # направляет стандартный вывод в файл
>> file # направляет стандартный вывод в файл; добавляет в файл, если он уже существует
>|file # принудительно направляет стандартный вывод в файл, даже если установлен noclobber
n>|file # принудительно направляет вывод в файл из дескриптора файла n, даже если установлен noclobber
<> file # использует файл как стандартный ввод и стандартный вывод
n<>file # использует файл как ввод и вывод для дескриптора файла n
n>file # направляет дескриптор файла n в файл
n<file # берет дескриптор файла n из файла
n>>file # направляет дескриптор файла n в файл; добавляет в файл, если он уже существует
n>& # дублирует стандартный вывод в дескриптор файла n
n<& # дублирует стандартный ввод из дескриптора файла n
n>&m # дескриптор файла n становится копией выходного дескриптора файла
n<&m # дескриптор файла n становится копией входного дескриптора файла
&>file # направляет стандартный вывод и стандартный поток ошибок в файл
<&- # закрывает стандартный ввод
>&- # закрывает стандартный вывод
n>&- # закрывает вывод из дескриптора файла n
n<&- # закрывает ввод из дескриптора файла n
|tee <file># выводит команду как в терминал, так и в файл (-a для добавления в файл)
##############################################################################
# УПРАВЛЕНИЕ ПРОЦЕССАМИ
##############################################################################
# Чтобы приостановить задание, нажмите CTRL+Z, пока оно выполняется. Вы также можете приостановить задание с помощью CTRL+Y.
# Это немного отличается от CTRL+Z, так как процесс останавливается только при попытке прочитать ввод из терминала.
# Конечно, чтобы прервать задание, нажмите CTRL+C.
myCommand & # запускает задание в фоновом режиме и возвращает оболочку
jobs # перечисляет все задания (используйте с -l, чтобы увидеть связанный PID)
fg # переводит фоновое задание в передний план
fg %+ # переводит последнее запущенное фоновое задание
fg %- # переводит второе по времени запущенное фоновое задание
fg %N # переводит задание номер N
fg %string # переводит задание, команда которого начинается со строки
fg %?string # переводит задание, команда которого содержит строку
kill -l # возвращает список всех сигналов в системе, по имени и номеру
kill PID # завершает процесс с указанным PID
kill -s SIGKILL 4500 # отправляет сигнал для принудительного завершения процесса
kill -15 913 # завершает процесс с PID 913 с сигналом 15 (TERM)
kill %1 # где %1 - это номер задания, как указано в команде 'jobs'.
ps # выводит строку информации о текущей работающей оболочке и любых процессах, работающих под ней
ps -a # выбирает все процессы с tty, кроме лидеров сессии
trap cmd sig1 sig2 # выполняет команду, когда сигнал получен скриптом
trap "" sig1 sig2 # игнорирует эти сигналы
trap - sig1 sig2 # сбрасывает действие, выполняемое при получении сигнала, на значение по умолчанию
disown <PID|JID> # удаляет процесс из списка заданий
wait # ждет, пока все фоновые задания не завершатся
sleep <number> # ждет указанное количество секунд перед продолжением
pv # отображает индикатор выполнения для команд обработки данных. часто используется с пайпом, например |pv
yes # дает ответ "да" каждый раз, когда запрашивается ввод от скрипта/процесса
##############################################################################
# СОВЕТЫ И ХИТРОСТИ
##############################################################################
# установить псевдоним
cd; nano .bash_profile
> alias gentlenode='ssh admin@gentlenode.com -p 3404' # добавьте свой псевдоним в .bash_profile
# чтобы быстро перейти в конкретную директорию
cd; nano .bashrc
> shopt -s cdable_vars
> export websites="/Users/mac/Documents/websites"
source .bashrc
cd $websites
##############################################################################
# ОТЛАДКА SHELL ПРОГРАММ
##############################################################################
bash -n scriptname # не выполняет команды; проверяет только на синтаксические ошибки
set -o noexec # альтернатива (установить опцию в скрипте)
bash -v scriptname # выводит команды перед их выполнением
set -o verbose # альтернатива (установить опцию в скрипте)
bash -x scriptname # выводит команды после обработки командной строки
set -o xtrace # альтернатива (установить опцию в скрипте)
trap 'echo $varname' EXIT # полезно, когда вы хотите вывести значения переменных в момент выхода вашего скрипта
function errtrap {
es=$?
echo "ОШИБКА строка \$1: Команда завершилась с кодом $es."
}
trap 'errtrap $LINENO' ERR # выполняется каждый раз, когда команда в окружающем скрипте или функции завершилась с ненулевым статусом
function dbgtrap {
echo "badvar равно $badvar"
}
trap dbgtrap DEBUG # заставляет код ловушки выполняться перед каждой инструкцией в функции или скрипте
# ...секция кода, в которой возникает проблема...
trap - DEBUG # отключает ловушку DEBUG
function returntrap {
echo "Произошел возврат"
}
trap returntrap RETURN # выполняется каждый раз, когда оболочка или скрипт, выполненные с помощью . или source, завершает выполнение
##############################################################################
# ЦВЕТА И ФОНЫ
##############################################################################
# примечание: \e или \x1B также работают вместо \033
# Сброс
Color_Off='\033[0m' # Сброс текста
# Обычные цвета
Black='\033[0;30m' # Черный
Red='\033[0;31m' # Красный
Green='\033[0;32m' # Зеленый
Yellow='\033[0;33m' # Желтый
Blue='\033[0;34m' # Синий
Purple='\033[0;35m' # Фиолетовый
Cyan='\033[0;36m' # Голубой
White='\033[0;97m' # Белый
# Дополнительные цвета
LGrey='\033[0;37m' # Светло-серый
DGrey='\033[0;90m' # Темно-серый
LRed='\033[0;91m' # Светло-красный
LGreen='\033[0;92m' # Светло-зеленый
LYellow='\033[0;93m'# Светло-желтый
LBlue='\033[0;94m' # Светло-синий
LPurple='\033[0;95m'# Светло-фиолетовый
LCyan='\033[0;96m' # Светло-голубой
# Жирный
BBlack='\033[1;30m' # Черный
BRed='\033[1;31m' # Красный
BGreen='\033[1;32m' # Зеленый
BYellow='\033[1;33m'# Желтый
BBlue='\033[1;34m' # Синий
BPurple='\033[1;35m'# Фиолетовый
BCyan='\033[1;36m' # Голубой
BWhite='\033[1;37m' # Белый
# Подчеркивание
UBlack='\033[4;30m' # Черный
URed='\033[4;31m' # Красный
UGreen='\033[4;32m' # Зеленый
UYellow='\033[4;33m'# Желтый
UBlue='\033[4;34m' # Синий
UPurple='\033[4;35m'# Фиолетовый
UCyan='\033[4;36m' # Голубой
UWhite='\033[4;37m' # Белый
# Фон
On_Black='\033[40m' # Черный
On_Red='\033[41m' # Красный
On_Green='\033[42m' # Зеленый
On_Yellow='\033[43m'# Желтый
On_Blue='\033[44m' # Синий
On_Purple='\033[45m'# Фиолетовый
On_Cyan='\033[46m' # Голубой
On_White='\033[47m' # Белый
# Пример использования
echo -e "${Green}Это зеленый текст${Color_Off} и обычный текст"
echo -e "${Red}${On_White}Это красный текст на белом фоне${Color_Off}"
# опция -e обязательна, она включает интерпретацию управляющих символов
printf "${Red} Это красный текст \n"