Linux - uniqcle/DevOps GitHub Wiki
Welcome to the Linux wiki!
nano ~/.bashrc
alias project='/var/www/yii2.loc/project' # Устанавливаем alias
unalias project # Удаляем alias
//Обязательно переоткрыть терминал
ls
ls # Выводит список содержимого директории
ls -a # вывод информации обо всех файлах
ls -l # получить более подробный список файлов
ls -h # выводит числовые значения (соответствующие размерам файлов) в формате в удобочитаемом виде
cd (change directory)
pwd # текущее местонахождение
cd ~ # переход в домашнюю директорию.
cd .. # На уровень вверх
cd -- # шаг назад
Переход по строке
Ctrl + A # в начало строки
Ctrl + E # в конец строки
Alt + B # на слово назад
Alt + F # на слово вперед
Ctrl + F # на слово вперед / Если не работают стрелочки в к-л терминале
Ctrl + B # на слово назад /аналогично
Ctrl + K # вырезаем от курсора до конца строки
Ctrl + U # вырезаем от курсора до начала строки
Alt + Backspace # вырезаем слово слева от курсора
Alt + D или Alt + Delete # вырезаем справа от курсора
Ctrl + Y # вставка
Clear = Ctrl +L
History # просмотр истории
Размер папки
du -sh [путь] # Размер папки
du -sh * # Размер всех папок в текущей
mkdir (make directory)
mkdir # Создание
mkdir назвПапки # Создание папки
cd !$ #Перемещение в эту же созданную папку
mkdir app/css/button -p # Создание дерева каталогов. Обязат. с тегом –p (создание если нет родительского каталога)
mkdir app/{js,css} -p
mkdir test1 test2 # Также можно так.
cp (copy)
cp -r НазвПапки НазвПапки # Копирование папки
rmdir (remove directory)
rmdir назвПапки # Удаление только пустую папку
rm -rf назвПапки # Удаление непустую папку.
rmdir -p test42/subdir # Для рекурсивного удаления директорий
file
file namefile.png # определяет тип файла
touch
touch index.html main.css common.js # Создание пустого файла/файлов
rm
rm BigBattle.txt # Удаление файла навсегда
find . -name "*.log" -print | xargs rm # Удаление файлов в текущей директ. если rm -rf * выдает ошибку argument too long...
cp
cp названФайла пунктНазнач #Копирование файла
cp css/* . #Копирование всех файлов в css в текущую директорию .
# копирования множества файлов в одну директорию.
# В этом случае последний аргумент (аргумент, указывающий на цель) должен быть представлен путем к директории
cp file42 file42.copy dir42/
cp -i SinkoDeMayo file42 # Для предотвращения перезаписи существующих файлов
cp: переписать "file42"? n
mv
mv index.html app # Перемещение файла index.html в папку app
mv index1.html index2.html # Переименование файлов
head
head /etc/passwd # вывод первых десяти строк файла
head -4 /etc/passwd # вывода первых n строк файла
tail
tail /etc/services # вывод последних десяти строк файла
cat
cat /etc/resolv.conf # копирует данные из стандартного потока ввода в стандартный поток вывода
cat part1 part2 part3 # объединение файлов в рамках файла большего объема
cat > winter.txt # создания txt-файлов.
# После ввода последней строки текста нажмите и удерживайте клавишу Ctrl и одновременно с этим кратковременно нажмите клавишу d
cat winter.txt > cold.txt # копирование файлов
Точка с запятой (;)
Все команды с наборами аргументов будут выполнены последовательно, причем командная оболочка будет ожидать завершения исполнения каждой из команд перед исполнением следующей команды.
# Исполняются поочередно, как будто с новой строки. Command2 ожидает выполнения Command1
echo command1; echo command2
Двойной амперсанд (&&)
Интерпретирует символы && как логический оператор "И". Если 1-я команда завершится удачно, то выполнится 2-ая.
rm fil1.txt && apt-get update
apt-get update
Двойная вертикальная черта (||)
Представляет логическую операцию "ИЛИ". 2я команда исполнится, если 1-ая не исполнится
rm afsdffd || echo hello
hello
Экранирование специальных символов ()
echo hello \; world
hello ; world
echo \\ \# \" \' \&
\ # " ' &
Обратный слэш в конце строки
Строка команды, заканчивающаяся обратным слэшем, продолжается в следующей строке. Командная оболочка не будет интерпретировать символы перехода на новые строки и отложит исполнение операции раскрытия команды и ее исполнение до момента чтения новой строки команды без обратного слэша в конце.
echo Данная строка команды \
> разделена на три \
> части
Данная строка команды разделена на три части
$HOSTNAME, $USER, $UID, $SHELL и $HOME # Стандартные переменные окружения
$PATH # Устанавливает путь где ищутся бинарные файлы
varName=544 # Создаем переменную окружения
echo $varName # Выводим переменную окружения
export MyVar # экспортируем $MyVar в дочерние командные оболочки
env # проверка переменных окружения какие есть
env > ~/environment # экспорт переменных окружения в файл ~/environment
*(звездочка) любая комбинация символов
ls file*
file12 fileab file34
? соответствует ровно одному символу имени файла
ls file4?
file45
[] любые символы находящиеся в скобках
ls file[a]bc
fileabc
ls file[a-z]bc
fileabc
grep фильтрация строк текста, содержащих (или не содержащих) определенную подстроку.
cat count | grep one # файл count содержит подстроку one
grep one count # аналогично, только без cat
grep -i one count # фильтрация без учета регистра
grep -v one count # не содержит заданную подстроку
tr преобразование символов
cat count | tr 'w' 'D' # Преобразует символы w в D
cat count | tr 'a-z' 'A-Z' # Преобразует все символы нижн. регистра в верхние
cat count | tr -d 'w' # Удаление заданного символа
wc подсчет строк, слов и символов
wc count # все подсчитывает
wc -l count # подсчет строк
wc -w count # подсчет слов
wc -c count # подсчет символов
sort сортирует строки файла в алфавитном порядке
sort count
uniq
sort count | uniq # удаляет повторяющиеся строки из отсортированного списка строк
sort count | uniq -c # подсчет повторяющихся строк
sed (расшифровывается как stream editor - редактор потока данных) позволяет выполнять различные операции редактирования при обработке потока данных с задействованием регулярных выражений
cat count | sed 's/one/three/g' # меняет one на three g глобально
cat count | sed '/one/d' # удаляет заданную строку со вхождением one
find <папка> -name "<файл>" поиск файлов в указанной папке
find / > allfiles.txt # поиск всех файлов и запись их в файл
find . -name "*.conf" # поиск файлов с расширением .conf в текущей директории (и всех поддиректориях)
grep "<строка>" file поиск строки в файле
grep "hello" file.txt # Найти hello в файле file.txt
grep -c "hello" file.txt # Найти кол-во сколько раз встречается hello
grep -r "hello" folder # Найти строчку во всех файлах в папке
grep -r -c "hello" folder # Сколько раз встречается строка в папке
Утилиты даты и времени
date
time
cal # Выведет календарь на текущий месяц
cal 2 2019 # Выведет за февраль 2019
zip - gzip
# zip
zip name_archive name_file1 name_file2 # Имя архива и файлы, кот. будут входить
unzip name_archive # Распаковываем, архив при этом не удаляется
# gzip (через промежуточный tar)
tar [назв_архива.tar] [file1] [file2] # Предварительно помещаем в 1 файл. tar это не архив
gzip назв_архива.tar # Теперь упаковываем
gunzip назв_архива.tar.gz # При распаковке исходный файл удалит
# gzip (напрямую)
tar -czf [name.tar.gz] [file1] [file] # Сразу создает gz. -create zip file
tar -xzf [name.tar.gz] # Распаковывает gzip
#bz2
tar -cjf [name.tar.bz2] * # Упаковываем все файлы
tar -xjf [name.tar.bz2] # Распаковываем
wget скачивание файлов
wget [ссылка] # скачивание файла в текущую папку
wget -P [путь] [ссылка] # скачивание файла в путь
wget -c [путь] [ссылка] # Возобновление загрузки файла, если была прервана
wget -O name_pic.jpg [ссылка] # Cкачать файл и сохранить под данным именем
wget -r -l [5] [ссылка] # Рекурсивное скачивание файлов (по умолч.5)
wget -r -l 1 -A jpg, png [ссылка] # Скачивание файлов определенного типа
sudo apt-get install программа # Установка программ через терминал
sudo apt-get remove программа # Удаление программ через терминал
sudo apt-get update # Обновление ссылок на пакеты
sudo apt-get upgrade # Обновление установленных пакетов
sudo apt-get install --only-upgrade программа # Обновление отдельной программы
ssh login@address -p port # Команда входа
Client
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
Server
~/.ssh/authorized_keys # Здесь внесен публич. ключ клиента
Генерация ключей SSH
ssh-keygen # Создание ключа на клиенте
ls ~/.ssh # Просмотр ключей (id_rsa, id_rsa.pub)
ssh-add # Сообщить системе о ключе
cat id_rsa.pub # Открываем публичный ключ и копируем его содержимое
nano ~/.ssh/authorized_keys # Заходим на сервер и вносим сюда публичный ключ клиента
также добавление pub ключа можно сделать так
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
На сервер scp -P порт путь_на_клиенте логин@адрес_сервера:путь_на_сервере
scp text.txt root@185.178.46.21:/var/www/ # копирование text.txt на сервер
scp -r stepic username@server:~/ # скопирует на сервер папку stepic вместе с содержимым
С сервера scp -P порт логин@адрес_сервера:путь_на_сервере путь_на_клиенте
scp root@185.178.46.21:/var/www/www-root/data/www/zoosat.ru/test.txt . # Копир. в текущую папку с сервера
ps # посмотреть ваши процессы
top # отслеживать процессы в реальном времени
top -u <имя пользователя> # отслеживать процессы этого пользователя
kill <номер процесса> # завершить процесс с этим номером
kill -9 <номер процесса> # “убить” процесс с этим номером
free -h # информация об оперативной памяти
nproc # количество ядер процессора
Вход
vim
vim файл
Главные команды
:q # выход
:help <команда> # справка
vimtutor # автотуториал!
2 Режима Insert и Normal
Esc # переход в normal
i # переход в Insert
Перемещение
# По символам
Стрелочки
h,j,k,l
# По словам
w, W # в начало следующего слова
e, E # в конец
b, B # в начало предыдущего
# По файлу
gg # начало файла
G # конец
:21<Enter> # перейти к строке 21
Удаление
x # символ под курсором
X # символ до курсора
dе # удалить до конца текущего слова
d$ # удалить до конца строки
d5w # удалить пять слов
dd # удалить строку
Копирование
yy # Копирование
p # Вставка
Поиск и замена
/<текст> # искать <текст> вперед
?<текст> # назад
n # следующий элемент
N # предыдущее
:%s/<что ищем>/<на что меняем>/<флаги> # флаги: g – много замен, с – подтверждение
Отмена/возврат
u # отменить последнее действие
<Ctrl+r> # вернуть отмененное действие
Работа с файлом
:w # сохранить изменения
:wq # сохранить и выйти
:q! # выйти без сохранения
:w <файл> # сохранить изменения в <файл>
Создаем программу
vim first.sh
#!/bin/bash # С помощью чего исполняем
echo "Hello, world!"
Запускаем программу
chmod +x first.sh # Ставим права на выполнение
./first.sh # Запускаем
bash first.sh # или так
Запись (перезапись) значения
<имя>=<значение>
path=~/Docs
Чтение
path2=$path/file1.txt # path2=~/Docs/file1.txt
echo “Path is $path2” # Path is ~/Docs/file1.txt
echo “Path is ${path}2” # Path is ~/Docs2
Передача аргументов скрипту
./script.sh arg1 arg2 arg3 ...
# Обработка внутри скрипта
$1 # первый аргумент
$2 # второй аргумент
….
$0 # имя скрипта
$# # количество аргументов
var1=$1
var2=$2
echo "Переменная 1 = $var1"
echo "Переменная 2 = $var2"
if [[ условие ]]
then
# действия, если условие истинно
fi
if [[ условие ]]
then
# действия, если условие истинно
еlse
# действия, если условие ложно
fi
if [[ условие1 ]]
then
# действия, если условие1 истинно
elif [[ условие2 ]]
then
# действия, если условие1 ложно,
# но условие2 истинно
еlse
# действия, если оба условия ложны
fi
# Условия (строки)
-z <строка> # строка пуста
-n <строка> # строка не пуста
<стр1> == <стр2> # строки равны
<стр1> != <стр2> # строки не равны
# Условия (строки)
== # равно
!= # не равно
< # меньше
> # больше
# Условия (числа)
-eq # равно
-ne # не равно
-lt # меньше
-le # меньше или равно
-gt # больше
-ge # больше или равно
# Условия (файлы)
-e <путь> # путь существует
-f <путь> # это файл
-d <путь> # это директория
-s <путь> # размер файла больше 0
-x <путь> # файл исполняемый
# Условия (логические)
! # отрицание логического выражения
&& # логическое «И»
|| # логическое «ИЛИ»
case переменная in
знач1)
# действия, если переменная==знач1
;;
знач2)
# действия, если переменная==знач2
;;
*)
# действия, если переменная
# не равна ни одному из вариантов
;;
esac
for переменная in список_значений
do
# действия, каждый раз переменная
# принимает следующее значение
# из списка
done
break # прервать выполнение
сontinue # перейти на след. значение
#!/bin/bash
for i in 1 2 3 4 5
do
file_name=file${i}.txt
if [[ -e $file_name ]]
then
continue
fi
echo "Creating file $file_name"
touch $file_name
done
while [[ условие ]]
do
# действия, пока условие истинно
done
read # переменная. записать введенное пользователем значение в переменную
#!/bin/bash
again=yes
while [ "$again" = "yes" ]
do
echo "Please enter your name:"
read name
echo "Your name is $name"
echo "Do you wish to continue? (yes/no)"
read again
done
VirtualBox -> Настройки -> Сеть -> Дополнительно -> Проброс портов
Добавляем новое правило
Порт гостя - это порт, на котором работает веб-сервер внутри виртуальной машины. По-умолч., apache работает на 80 порту
Порт хоста - выбираем самостоятельно, главное не попасть в уже используемые. Например, 8081
Остальные поля можно оставить пустые.
После того, как прописали в файле hosts сайты, доступ к нему может быть site.ru:порт
Vagrantfile
должен находиться в папке с проектом. В нем инструкции по установке окружения. Установить Ubuntu, nginx, php7.0 и т д.
Для написания Vagrantfile используют сервис https://puphpet.com/
# MACHINES
# Internal Identifier
m1 # ID машины, с которой будем работать в консоле с помощью команд Vagrant. Лучше кратко называть
# Hostname
machine1.puphpet # Имя машины, отображаемое в VirtualBox
# IP Address
192.168.56.101 # IP адрес Виртуалки. Обычно для VirtualBox этот IP
# Memory
2048 # Добавляем память в мб
# FORWARDED PORTS
Оставляем по-умолчанию
# SHARED FOLDERS
# Folder Source Связываем папки
C:/m2/www # Папка на host-машине
# Folder Target
/var/www # Папка на guest-машине
Оставляем по-умолч., можно добавить некоторые пакеты
Оставляем по-умолч.
Оставляем по-умолч.
Оставляем по-умолч.
Оставляем по-умолч.
Позволяет указывать DNS-сервера для локально. машины. Но бывает из-за нее проблемы, поэтому лучше убрать
Оставляем по-умолч.
Оставляем по-умолч.
Снимаем галочку
# VIRTUAL HOSTS VHOST1
# Server Name
project2.loc # Имя для веб-сайта
# Server Aliases
www.project2.loc # Алиас
# Document Root
/var/www/project2.loc/ # Папка, в которой находятся файлы проекта
# Port
80 # Порт, на котором работает веб-сервер. Оставляем по-умолч.
# VIRTUAL HOST DIRECTORY/LOCATION/FILES DIRECTIVES
# Path
/var/www/project2.loc/
Остальные настройки по-умолч.
Оставляем по-умолч. Спец. программа, чтобы делать защещенные соединения для сайтов
Оставляем по-умолч.
Оставляем по-умолч. Это требуется установщику
Оставляем по-умолч.
Оставляем по-умолч.
# Version
5.7 # Версия MySql
# Root Password
root
# USERS USER1
# Username
remoteadmin # Создадим дополнит. пользователя
# Password
123456
# DATABASES
Создавать БД не будем
# GRANTS
# User
remoteadmin # Дадим пользователю дополнит. права
# Privileges
ALL
Оставляем по-умолч.
Далее скачиваем архив puphpet.zip
с Vagrantfile
-
Распаковываем архив и содержимое папки
0UGhr0
переносим в проект project2 -
Проверить пользователя и группу на www-data в файле 0UGhr0/puphpet/config.yaml (где 0UGhr0 - папка из архива конфигуратора):
...
synced_folder:
folder1:
owner: www-data
group: www-data
...
-
Переходим в папку с проектом
cd C:\m2\www\project2\
-
Поднимаем виртуальную машину
vagrant up
vagrant global-status # Просмотр список запущенных виртуальных машин
vagrant halt [id] # Остановка машины
vagrant up [id] # Запуск машины
vagrant ssh # Зайти на сервер
vagrant destroy [id] # удалить виртуалку
searchd # Запустить Sphinx search
searchd --stop # Остановить Sphinx search
indexer --all # Выполнить индексацию
indexer --rotate --all # Переиндексация без переустановки демона
searchd --status # Статус Sphinx search
searchd --help # Помощь по командам
Sphinx решает проблемы производительности
sudo add-apt-repository ppa:builds/sphinxsearch-rel22 //Добавляем репозиторий
sudo apt-get update //Выполняем обновление
sudo apt-get install sphinxsearch //Установка
sudo service sphinxsearch start //Запускаем процесс
Она запускает индексы, но для того, чтобы сфинкс знал какие индексы создавать необходимо сконфигурировать
- Открываем папку
/etc/sphinxsearch
в нейsphinx.conf
- Сохраняем старый под другим именем
mv sphinx.conf sphinx_old.conf
- Создаем новый
nano sphinx.conf
source news_content
{
type = mysql
sql_host = localhost
sql_user = yii2user
sql_pass = 111111
sql_db = yii2advanced
sql_port = 3306
sql_query = \
SELECT id, content \
FROM news
#sql_query = \
#SELECT id, content, status, content as content_attribute \
#FROM news
#sql_attr_uint = status
#sql_attr_string = content_attribute
}
index idx_news_content
{
source = news_content
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
charset_type = sbcs
}
searchd
{
listen = localhost:9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinxsearch/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
}
- Останавливаем процесс Sphinx перед процедурой создания индекса
sudo service sphinxsearch stop
- Запускаем индекс
sudo indexer --all
Возможно будут возникать Warnings, лучше обновиться до 3-й версии Sphinx'a
- Запускаем процесс
sudo service sphinxsearch start
https://github.com/yiisoft/yii2-sphinx
- Устанавливаем
В папке с проектом запускаем composer require --prefer-dist yiisoft/yii2-sphinx
- Настраиваем
Подключаем проект к программе Sphinx
frontend/config/main-local.php
'components' => [
'sphinx' => [
'class' => 'yii\sphinx\Connection',
'dsn' => 'mysql:host=127.0.0.1;port=9306;dbname=yii2advanced',
'username' => 'yii2user',
'password' => '111111',
],
...
],
...
source bx_content
{
type = mysql
sql_host = localhost
sql_user = user
sql_pass = !PassWord!2020
sql_db = bitrixdb
sql_port = 3306
sql_query = SELECT NAME FROM b_iblock_element;
#sql_query = \
#SELECT id, content, status, content as content_attribute \
#FROM news
#sql_attr_uint = status
#sql_attr_string = content_attribute
}
index idx_bx_content
{
# source = bx_content
# path = path = /var/lib/sphinxsearch/data
# docinfo = extern
# charset_type = sbcs
#main settings
type = rt
path = /var/lib/sphinxsearch/data/bitrix
docinfo = inline
#choose appropriate type of morphology to use
#morphology = lemmatize_ru_all, lemmatize_en_all, stem_enru
morphology = stem_enru, soundex
#these settings are used by bitrix:search.title component
dict = keywords
prefix_fields = title
infix_fields=
min_prefix_len = 2
#all fields must be defined exactly as followed
rt_field = title
rt_field = body
rt_attr_uint = module_id
rt_attr_string = module
rt_attr_uint = item_id
rt_attr_string = item
rt_attr_uint = param1_id
rt_attr_string = param1
rt_attr_uint = param2_id
rt_attr_string = param2
rt_attr_timestamp = date_change
rt_attr_timestamp = date_to
rt_attr_timestamp = date_from
rt_attr_uint = custom_rank
rt_attr_multi = tags
rt_attr_multi = right
rt_attr_multi = site
rt_attr_multi = param
}
searchd
{
listen = 127.0.0.1:9312
listen = 127.0.0.1:9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinxsearch/searchd.pid
##max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinxsearch/data/
binlog_max_log_size = 512M
binlog_flush = 2
rt_flush_period = 3600
}