# Процессы Ресурсы Цикл разработки ПО Waterfall RUP Agile Kanban Управление Архитектура Ресурсы ПО для Архитектора Кто архитекторы? Архитектурные слои язык Archimate GAP-анализ SOA Типы интеграции Vision (Концепция) Проектное решение ESB Микросервисы и service mesh HTTP/REST RPC DDD Анализ Ресурсы ПО для Аналитика Кто аналитики? Бизнес-процесс Требования Уровни и типы Источники Стейкхолдеры Нотации Сервисы DevOps CI/CD/CDP VM и Docker Контракты API Оценка задачи git Frontend Apache Регулярка Linux Тестирование Ресурсы QA и QC Цикл тестирования Уровни тестирования Виды тестирования Баг-репорт Тестирование требований Тест-анализ и тест дизайн Интеграционное, API, E2E Тест план Метрики качества Автотесты Selenium XPATH Нагрузочное Данные Ресурсы MDM Big data Об информации SQL intro MongoDB intro Библиотека Системная инженерия Станислав Лем Экстраполяция в будущее Политэкономия Сознание, интеллект

/ АНАЛИЗ АРХИТЕКТУРА ДАННЫЕ DevOps: + DevOps + Frontend + Apache web-server + Регулярные выражения + git + Javascript + Perl + Python + Ruby + Rust + Полезности в Windows - Linux | Почерпнуть мудрость | Права, пользователи и группы | crontab | iptables | ssh | Консоль: основы | Консоль: состояние системы | Консоль: работа с пакетами | Консоль: железо | Консоль: сеть | Консоль: архивы | Консоль: разное | tips & tricks | useful apps Gaming Библиотека ПРОЦЕССЫ ТЕСТИРОВАНИЕ
Linux
latest update of the page: 07-03-2024, 20:57 UTC
how sudo works
Почерпнуть мудрость
Права, пользователи и группы

Права на файлы/папки в текущем положении можно посмотреть командой ls -l

Выглядят они, например, так: rwx rwx r-x

  • Первая группа из трех символов обозначает права доступа владельца файла или директории
  • Вторая группа из трех символов обозначает права доступа на файл или директорию для системной группы
  • Третья группы из трех символов обозначает права доступа на файл или директорию для всех остальных
  • r — read, то есть право доступа на чтение файла или директории;
  • w — write, то есть право на изменение и удаление файла или директории;
  • x — eXecute, то есть право на запуск файла как программы или вход в директорию.
  • в третей колонке идет имя владельца файла
  • в четвертой колонке идет название группы

Если пользователь не владелец файла, но входит в группу, то у него будут права на файл или директорию этой самой группы.

Изменение прав доступа в относительном режиме

Для изменения прав доступа в относительном режиме в символьном представлении, например: chmod go+rw [filename]
Здесь мы дали группе (g) и владельцу (o) права чтения (r) и записи (w).
Общая форма — chmod personOperatorRights имя_файла

Person:
u — user, пользователь, владелец файла или директории.
g — group, группа файла или директории.
o — other, все другие.
a — all, то есть все вместе взятые, и владелей и группа, и все остальные.

Operator:
+ — "плюс", добавляем нужные права
- — "минус", удаляем нужные права
= — "равно", устанавливаем нужные права

Rights: r/w/x

Изменение прав доступа в абсолютном режиме

Для изменения прав доступа в абсолютном режиме в числовом представлении, например: chmod 745 [filename]
Разберём что здесь делается.
Каждая цифра обозначает определенную группу:
Первая цифра — права для владельца,
вторая цифра — права для группы,
третья цифра — права для остальных.
Установлено правило, что:
r — это 4,
w — это 2,
x — это 1.
Просто прибавляем цифры:
Таким образом, команда chmod 745 [filename] означает что файлу [filename] мы присвоили следующие права:
Права владельца: 7 = 4+2+1 = rwx
Права группы: 4 = 4 = r
Права остальных: 5 = 4+1 = rx

все права на файл
все права на папку рекурсивно (с подпапками и файлами)
chmod 777 <имя файла> chmod -R go=rwX,u=rwX sharan

Изменение владельца файла/каталога

Для изменения владельца или группы у файла или каталога есть команда chown:

  • sudo chown [имя_нового_владельца]:[имя_новой_группы] [имя_файла_или_директории]
  • sudo chown :[имя_новой_группы] [имя_файла_или_директории]
  • sudo chown [имя_нового_владельца] [имя_файла_или_директории]
  • sudo chown -R [имя_нового_владельца]:[имя_новой_группы] [имя_файла_или_директории]

Вся информация о пользователях сохраняется в файлах: /etc/passwd, /etc/shadow и /etc/group.

Основные команды для манипуляций:

  • whoami — узнать имя текущего пользователя;
  • groups — узнать в каких группах состоит текущий пользователь;
  • passwd [username] — сменить пароль пользователю;
  • id [username] — посмотреть id пользователя и групп, в которых он состоит;
  • groupadd — создать группу;
  • useradd — создать пользователя и добавить его в какую-то группу;
  • usermod — модифицировать пользователя;
  • gpasswd -d USER GROUP — пользователь USER будет удален из группы GROUP
  • Примеры:
  • useradd -G admins,ftp,www,developers jerry — создать пользователя jerry и добавить его во вторичные (-G) группы
  • usermod -a -G ftp tony — существующего пользователя tony добавить во вторичную (-G) группу
  • useradd -g developers tony — создать пользователя tony и добавить его в первичную (-g) группу (initial login group / primary group)

crontab
# Для root sudo EDITOR="nano" crontab -e # Для конкретного пользователя sudo EDITOR="nano" -u progforce crontab -e
Например, выполнение скрипта каждые 2 минуты: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin */2 * * * * perl /home/progforce/Desktop/pearl/logoworks_mongo.pl Ещё примеры: # выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily 5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1 # выполнять 1 числа каждого месяца в 14 часов 15 минут 15 14 1 * * $HOME/bin/monthly # каждый рабочий день в 22:00 0 22 * * 1-5 echo "Пора домой" | mail -s "Уже 22:00" john 23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д." 5 4 * * sun echo "Выполняется в 4:05 в воскресенье" 0 0 1 1 * echo "С новым годом!" 15 10,13 * * 1,4 echo "Эта надпись выводится в понедельник и четверг в 10:15 и 13:15" 0-59 * * * * echo "Выполняется ежеминутно" 0-59/2 * * * * echo "Выполняется по четным минутам" 1-59/2 * * * * echo "Выполняется по нечетным минутам" */5 * * * * echo "Прошло пять минут" Выполнение команды после перезагрузки системы: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin @reboot perl /home/progforce/Desktop/pearl/logoworks_mongo.pl
Если есть проблема "crontabs/myusername/: fdopen: Permission denied" то: sudo usermod -aG crontab myusername Затем разлогиниться и залогиниться.
iptables

# List the rules in a chain or all chains iptables --list

# to add rule to iptable for accessing 48666 port iptables -I INPUT -p tcp --dport 48666 -j ACCEPT # to delete rule from iptable, use same command but change -I to -D iptables -D INPUT -p tcp --dport 48666 -j ACCEPT

# To block an IP Address with iptables: iptables -A INPUT -s 11.22.33.44 -j DROP # to unblock: iptables -D INPUT -s 11.22.33.44 -j DROP

# Save changes in iptables: iptables-save

Если у вас Linux-сервер с открытым SSH на стандартный порт, то посмотрите сколько попыток подключений происходит ежедневно

grep 'authentication failures' /var/log/auth.log N.B. дефолтные права у этого файла лога -rw-r----- 1 syslog adm
Что же делать? Куда бежать?
Простая защита SSH от брут-форса:

# установить TARPIT для iptables apt-get install module-assistant xtables-addons-source
module-assistant prepare
module-assistant auto-install xtables-addons-source
depmod -a

ЕСЛИ вышеприведённое failed, то: sudo apt-get install xtables-addons-dkms

# Первое правило проверяет наличие в динамическом списке ip-адреса отправителя, и запись об этом адресе должна быть "старше" 20 секунд. Иначе — TARPIT.
# Второе правило разрешает обращение на 22-й порт и заносит IP-адрес в динамический список.
# дефолтный таймаут TARPIT — 600 секунд iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j TARPIT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

# теперь после защиты, можно открыть SSH iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

# сохранить изменения iptables-save
iptables-save > /etc/iptables.conf

Автоматическая запись и восстановление правил nano /etc/network/interfaces после строчки "iface lo inet loopback" добавляем следующие строки: pre-up iptables-restore < /etc/iptables.conf post-down iptables-save > /etc/iptables.conf Теперь при отключении машины правила сами будут сохраняться, а при включении — восстанавливаться.

ssh

A Secure Shell (SSH) tunnel consists of an encrypted tunnel created through an SSH protocol connection. Users may set up SSH tunnels to transfer unencrypted traffic over a network through an encrypted channel.


Установить постоянное соединение через server.com к машине в его подсети, перенаправив её порт 8080 на наш локальный 28080: ssh -f -L 28080:192.168.99.86:8080 user@server.com -N -f запрашивает ssh идти фоном до начала выполнения команды. Используется, если ssh будет запрашивать пароли или пассфразу, но пользователь хочет чтобы это было в фоне
-L перенаправляет порты (согласно одной из схем с картинки выше)
-N говорит о том, что никакую команду выполнять удалённо не надо. Используется когда нужно просто наблюдать (warding) за портом

Удалённо выполнить какую-нибудь команду (результат будет показан в консоли): ssh user1@local_server 'play /usr/share/sounds/gaim/arrive.wav'

Копирование файлов через SSH

  • Копирование локального SourceFile на удалённый хост: scp SourceFile user@host:/directory/TargetFile
  • Копирования SourceFile с удалённого хоста: scp user@host:/directory/SourceFile TargetFile
  • Копирования SourceFile с удалённого хоста, при условии что ssh на нём настроен на другой порт: scp -P port user@host:/directory/SourceFile /directory/TargetFile
  • Копирование SourceFolder с удалённого хоста внутрь локального TargetFolder (на локальном хосте получится, что SourceFolder будет находиться внутри TargetFolder): scp -r user@host:/directory/SourceFolder TargetFolder

Установка правильных прав на юзерскую папку с gnu gpg

sudo chown -R ${USER}:${USER} ~/.gnupg chmod -R go-rwx ~/.gnupg

Как сгенерировать открытый/закрытый SSH-ключ в Linux

    Если вы часто используете ssh для подключения к удаленному хосту, одним из способов обеспечения безопасности соединения является применение открытого/закрытого SSH-ключа, так как при этом по сети не передается никакой пароль и система устойчива к атакам методом "грубой силы".
    Создать открытый/закрытый SSH-ключ в Linux очень просто.
  1. Посмотреть, не сгенирован ли уже ssh-ключ можно так: cat ~/.ssh/id_rsa.pub
  2. Генерируем ключ одним из способов:
    • ssh-keygen -t rsa (ключ будет использоваться автоматически, "дефолтный" ключ)
    • ssh-keygen -t rsa -C "ivan.ivanov@maildomain.com"
    Эта команда запросит расположение и название файлов (по умолчанию это будут id_rsa и id_rsa.pub) для хранения пары ключей (закрытый/открытый) и пассфразу. Можно просто нажимать ENTER для того чтобы использовать каталог по-умолчанию и не использовать пассфразу.
  3. Загрузите файл id_rsa.pub в домашнюю директорию вашего удаленного хоста (предполагается, что удаленный хост работает под Linux). Подключитесь к удаленному хосту с помощью SSH и переместите открытый ключ в его целевую директорию с помощью команд: cat id_rsa.pub >> ~/.ssh/authorized_keys rm id_rsa.pub
  4. Оставаясь на удаленном хосте, откройте конфигурационный файл SSH sudo nano /etc/ssh/sshd_config и убедитесь, что следующие атрибуты имеют корректные значения: RSAAuthentication yes PubkeyAuthentication yes PasswordAuthentication no
  5. И последнее, перезапустите сервер SSH на удаленном хосте: sudo /etc/init.d/ssh reload

  6. На этом все. Теперь вы можете соединяться со своим удаленным хостом с помощью команды: ssh -i /path-to-private-key username@remote-host-ip-address
Консоль: основы
получить список файлов/каталогов в текущем положении ls
получить список ВСЕХ (a) файлов/каталогов в текущем положении, используя длинный (l) формат ls -la
“зайти” в каталог cd <имя каталога>
поиск в истории ввода консоли history или CTRL-R и ввести что ищешь
найти файлы, начиная с корня (/), название которых начинается c my
найти директории (-type d) с именем abc d, начиная с корневой (/)
найти все файлы, начиная с текущей директории, используя регулярку
Смотреть подробнее в Википедии
find / -name 'my*' find / -type d -name 'abc d' find . -type f -regex ".*\.\(jpg\|png\|JPG\|PNG\)"
найти файлы, в которых встречается выражение
найти файлы, в которых НЕ встречается выражение
Подробнее: grep всё, что можно
grep -l "www.google.com" *.conf grep -L "www.google.com" *.conf
запуск perl-скрипта perl filename.pl
запуск python-скрипта python filename.py
синхронизация каталогов rsync -r -u --progress --delete "/home/progforce/source/" /media/progforce/flash/target/
Консоль: состояние системы
Краткая информация о свободных RAM и SWAP:
-m — в МБ
-t — со строчкой total (всего)
free -t -m
получить список запущенных процессов
получить список запущенных процессов для всех юзеров
найти процесс “opera” без учёта регистра
убить процесс
убить процесс не спрашивая у него разрешения
ps -A ps aux ps -A | grep -i "opera" kill <# of process> kill -9 <# of process>
Информация об использовании процессами RAM и CPU top htop
Информация о файловой системе (список дисков, свободное/использованное пространство и т.п.) df
Консоль: работа с пакетами
обновить список пакетов (packages), которые у нас прописаны /etc/apt/sources.list apt-get update
установка package (пакета) вместе с его зависимостями, если таковые имеют место быть apt-get install <packagename>
посмотреть информацию о пакете (package) apt-get show <packagename>
список установленных packages (пакетов) dpkg -l dpkg -l | grep -i <pattern>
деинсталляция packages (пакетов) apt-get remove <packagename>
деинсталляций packages (пакетов) с удалением настроек
Посмотреть список пакетов, для которых было проделано remove, но не удалены все следы
Удалить все следы всех таких удалённых пакетов
apt-get purge <packagename> aptitude search ~c aptitude purge ~c
удалить неиспользуемые packages (пакеты) apt-get autoremove
стереть старые загруженные архивные файлы package’ей apt-get autoclean
Обновить релиз ubuntu (из -proposed репозитория) sudo do-release-upgrade -p
Консоль: железо
получить список подключённого “железа” lspci -k
Поискать среди железа дискретную видеокарту lspci | grep -E "VGA|3D" -A2
Посмотреть информацию о процессоре, выводится поядрённо)) cat /proc/cpuinfo
Посмотреть информацию о количестве оперативной памяти cat /proc/meminfo
Посмотреть информацию о конкретных "планках" оперативной памяти sudo dmidecode --type 17
ремаунт диска с RW свойствами,в данном случае флешки sudo mount -o remount,rw /media/username/fleshkaname
Консоль: сеть
узнать что “висит” на 27017 порту lsof -iTCP | grep 27017
поиск определённого открытого порта в подсети nmap -v -p27017 192.168.88.1/24 --open
Посмотреть все порты что СЛУШАЕТ, например MongoDB sudo lsof -iTCP -sTCP:LISTEN | grep -i mongo
смотреть открытые порты sudo netstat -nlp
скачать файл
Подробнее: wget на 12 примерах
wget mellarius.ru/font_artmodernap.otf
Консоль: архивы
unpack tar.xz tar -xpJf [archive_filename.tar.xz]
unpack tar.xz — specific file only tar -xpJf [archive_filename.tar.xz] usr/lib/opera/lib_extra/libffmpeg.so
unpack tar.gz tar -xzvf [archive_filename.tar.gz]
Консоль: разное
Добавить в глобальную переменную PATH путь до директории какого-то приложения PATH=$PATH:~/Android/Sdk/tools
показать путь до файла (ссылки), который выполняется при использовании указанной команды [command] which [command]
“Наблюдать” файл в реальном времени, чаще всего нужно для разного рода логов серверов для отлова сообщений об ошибках
С подсветкой строк, включающих слово error и warning
tail -c 10000 -f ~/work/merchantz/Merchantz/server.log tail -c 10000 -f ~/work/merchantz/Merchantz/server.log.* | perl -pe 's/.*(error|warning).*/\e[1;31m$&\e[0m/ig'
узнать код клавиши xev | grep keycode
всплывающее уведомление в углу экрана notify-send -u low "Заголовок" "Тело сообщения с низкой важностью" notify-send -u normal "Заголовок" "Тело сообщения средней важности" notify-send -u critical "Заголовок" "Тело сообщения критической важности"
Запуск bin-файлов
Простой bin файл не запустить стандартным двойным кликом, а только простыми командами в терминале
Первой командой мы даём файлу права на исполнение, а второй уже непосредственно запускаем.
chmod +x file.bin ./file.bin
Запуск sh-файлов
//sh файл это скрипт, специально написанный для операционной системы Linux. Процесс его запуска похож на запуск bin файла:
//первой командой задаём права на выполнение, 1-3 команды это различные варианта запуска файла
chmod +x file.sh ./file.sh sh filename.sh bash filename.sh
Установка TrueType-шрифтов для всех пользователей системы * создать /usr/share/fonts/truetype/ sudo mkdir /usr/share/fonts/truetype/ * скопировать шрифты в этот каталог cp путь/до/шрифта /usr/share/fonts/truetype * обновить кэш шрифтов sudo fc-cache -fv
Установка шрифтов для текущего пользователя # в своём “родном” каталоге создать каталог .fonts/ mkdir .fonts # скопировать файлы со шрифтами в этот каталог cp путь/до/шрифта ~/.fonts # обновить кэш шрифтов fc-cache -fv
Удобная подстановка и прокрутка команд в консоли по нажатию TAB Нужно поправить системный файл /etc/inputrc, вписав в него предпоследней строкой следующее: TAB: menu-complete
"\e[A": history-search-backward
"\e[B": history-search-forward
rename files to lowercase
doesn't actually rename the files, but show you what it would have done
rename 'y/A-Z/a-z/' * rename -n 'y/A-Z/a-z/' *
случайное число от 0 до 32767 echo $RANDOM
GODMODE su
tips & tricks

Mouse pointer acceleration

Ввести Unicode символ: CTRL+SHIFT+u -> [ввести номер] -> [Enter]

Звук и ALSA

С недавнего времени на домашнем компе начались "хрипы" и "залагивания" звука в играх, при проигрывании файлов мультимедиа (музыка, фильмы) и просмотре ютуба.
Покопался в интернетах и нашёл вот такое решение, которое мне помогло.
Сначала удаляем Pulseaudio и всю связанную с ним хурму, ибо в нём как раз и проблема:
sudo apt-get purge pavumeter paman pavucontrol paprefs pulseaudio-module-raop pulseaudio-esound-compat pulseaudio-module-x11 gstreamer0.10-pulseaudio pulseaudio-utils
ALSA'е нужно указать какую звуковую карту использовать.
Смотрим какие звуковые карты у нас есть: lspci -nn | grep -i audio У меня так: 00:03.0 Audio device [0403]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller [8086:0c0c] (rev 06) 00:1b.0 Audio device [0403]: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller [8086:8c20] (rev 05)
Редактируем файл настроек ALSA'ы: sudo nano /etc/modprobe.d/alsa-base.conf вставим туда следующее, где vid/pid взято из информации которую мы получили выше: options snd-hda-intel index=0 model=auto vid=8086 pid=8c20 options snd-hda-intel index=1 model=auto vid=8086 pid=0c0c Глобальный переключатель громкости у меня пропал, ибо мы удалили PulseAudio, но зато прекратились хрипы и "лагание".
Громкость можно регулировать посредством alsamixer

warning: No support for locale: en_US.utf8

sudo dpkg-reconfigure locales sudo update-locale LANG=en_US.UTF-8

useful apps

GRUB-customizer

sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt-get update sudo apt-get install grub-customizer

simplescreenrecorder — запись видео с экрана

Установка: sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder sudo apt-get update sudo apt-get install simplescreenrecorder sudo apt-get install simplescreenrecorder-lib:i386 запускается командой simplescreenrecorder

Adminer

Скачать версию с сайта https://adminer.org/
скопировать в /var/www/html
выставить права: sudo chmod 744 /var/www/html/adminer-4.2.2.php открыть в браузере localhost/adminer-4.2.2.php

Opera

# устанавливаем Opera'у sudo add-apt-repository 'deb http://deb.opera.com/opera-stable/ stable non-free' wget -qO- http://deb.opera.com/archive.key | sudo apt-key add - sudo apt-get update sudo apt-get install opera-stable

WACOM — графические планшеты

Подключение

X.Org X server — Wacom input driver xserver-xorg-input-wacom Installing Wacom drivers

Настройка

xsetwacom xsetwacom Linux command examples
Linux Wacom HOW TO
Подключение графического планшета Wacom Pro в Linux или как bash помогает художникам