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

/ АНАЛИЗ АРХИТЕКТУРА ДАННЫЕ 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: 13-03-2023, 18:49 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
FTP- и HTTP-клиент = cURL curl -i https://httpbin.org/get?answer=42
скачать файл
Подробнее: 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://www.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 помогает художникам