gladilov.org.ru 

1316 заметок с тегом

ОС

Позднее Ctrl + ↑

Хитрости BASH и тонкости его настройки

BASH (bourne again shell) — командная среда, используемая по умолчанию во многих современных Linux-дистрибутивах. Если используется ОС из семейства Linux, то, скорее всего, используется и bash. Ниже приведены команды, опции настройки и разные трюки, придающие пользователю терминала более комфортную среду для работы (в BASH).

Показать

Настройка автодополнения и поиска в ~/.inputrc

Для одинарного нажатия Tab при автодополнении в ~/.inputrc (или в /etc/inputrc для всех пользователей)

set show-all-if-ambiguous On


Вывод по клавишам и  из истории только тех команд, которые начинаются с уже набранных букв

"\e[A": history-search-backward
"\e[B": history-search-forward

Тонкости настройки ~/.bashrc

Для записи истории команд сразу, а не только при выходе из шела, необходимо добавить

shopt -s histappend
export PROMPT_COMMAND="history -a"


Для запрета записи дубликатов команд в историю

export HISTCONTROL="ignoredups"


Можно запретить логирование определённых команд

export HISTIGNORE="ls:[bf]g:exit"

Список исключений — через двоеточие, можно использовать шаблоны.


Эвристическое исправление ошибок а именах директорий

shopt -s cdspell


Звуковой сигнал при запуске оболочки

export PROMPT_COMMAND="echo -ne '\a'"

можно использовать по разнному, например — включить мигание окна KiTTY.


Для того, чтобы не разрывать многострочные команды, используется

shopt -s cmdhist


Если вписать

export HISTTIMEFORMAT='%d %h %Y %H:%M:%S '

то в истории будут записаны дата и время выполнения команды.


Использование регистронезависимых масок файлов

shopt -s nocaseglob

Тогда, к примеру

ls *.jpg

выведет не только *.jpg, но и *.JPG.

Хитрости BASH

Возврат в предыдущую директорию

cd -


При нажатии ESC и сразу за этим . (в терминологии *nix — Meta .) в строку подставится последний использованный объект. Например, если первой строкой набрано

ls /home/smbdy/logs

во второй наберите

rm ESC .

получите

rm /home/smbdy/logs


Реализация ввода пользовательского пароля с проверкой:

echo -n "Пользователь: "
read username
echo -n "Пароль: "
read -s password
echo -en "\nПовторите пароль: "
read -s password2 && echo -e "\n"
if [ "$password" != "$password2" ]; then
    echo -e "Пароли не совпадают.\nЗавершение работы." && exit 1
fi
echo -n "Всё верно, $username. Продолжаем." && echo -e "\n"


Копирование config.cfg в config.cfg-old

cp config.cfg{,-old}


Узнать, какой шел запущен

echo $0


Строка вида ^строка1^строка2 запустит предыдущую команду с заменой строки1 на строку2

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz


Переименование файла в такой-же, но с префиксом

mv long-file-name.txt prefix-!#^

Например, команда

mv file-with-long-name-typed-with-tab-completion.txt old-!#^

переименует ’file-with-long-name-typed-with-tab-completion.txt’ в файл с именем ’old-file-with-long-name-typed-with-tab-completion.txt’.


Функция быстрого переименования расширений

renamer() {
   local fn
   for fn in *."$1"; do
     mv "$fn" "${fn%.*}"."$2"
   done
}

Пример: renamer doc txt — переименует все доки в txt’шники в текущем каталоге.


Если определить функцию command_not_found_handle (), то можно обрабатывать ситуацию «команда не найдена». До выдачи сообщения о не обнаруженной команде bash поместит в $1 введенную строку и выполнит код этой функции. При этом, если функция возвращает код завершения 127, то сообщение о ненайденной команде будет выведено на экран.


Для добавления алиаса с автоприменением определяем новый алиас в ~/.bash_aliases

alias editalias=’edit ~/.bash_aliases && source ~/.bash_aliases’


Имейте в виду, что для работы алиасов из этого файла он должен быть явно включён в вашем ~/.bashrc:

[ -f ~/.bash_aliases ] && source ~/.bash_aliases




Новая виртуальная ОСь — 28.02.2018

 ArchLabs 2018.02

Дистрибутив Linux’а от дистроделов из  Новой Зеландии —  ArchLabs Linux 2018.02, основанный на минимальной сборке  Arch Linux с оконным менеджером Openbox.

В начале 2000-х годов Филипп ’corenominal’ Ньюборо поставил цель создать простой но мощный Linux-дистрибутив, жрущий мало ресурсов и подходящий для работы на слабых компьютерах. Он создал  CrunchBang Linux, достаточно легковесный, использующий оконный менеджер  Openbox. После завершения разработки и поддержки проекта в начале 2015 года ряд пользователей Crunchbang довольно быстро «запилили» несколько проектов, среди которых были, например —  BunsenLabs Linux и #!++ CrunchbangPlusPlus. Ещё одна группа неустановленных лиц (последовалелей Crunchbang — разработчиков) вместо использования продолжительного цикла  Debian взяли за основу менее тухлые более современные пакеты Arch Linux. Так появился ArchLabs — сборка для тех, кто не осилил Арч пример, как можно настроить минимальное ДЕ из г0вна и палок. В начале команда ArchLabs подражала внешнему виду BunsenLabs, но затем дистрибутив сумел развить своё собственные оформление и стиль.

 ArchLabs

Запись и воспроизведение команд в консоли

Иногда требуется записать все, что вы вводите в терминале, для того чтобы самому запомнить, что и как делали или передать кому-то другому для анализа или обучения, или просто записать терминальную сессию вместо записи видео с захватом экрана. Все привыкли пользоватся скриншотами и записью видео с экрана. Есть даже мануалы, как делать скрины в голой консоли.

Однако существует интересный способ, как делать «видеозапись команд» в консоли без лишних телодвижений (я не говорю обо всяких доставляемых ttyrec, termrec & ipbt). Выполните в терминале, к примеру, следующие команды:

Показать

script -t 2> timing -a ttyoutput
pwd
cd /
pwd
cd -
pwd
exit

После команды exit запись с терминала прервётся и с помощью команды

scriptreplay timing ttyoutput

можно воспроизвести записанные действия и ответы системы. Для выхода можно использовать комбинацию клавиш Ctrl + D в обычном шеле или набрать exit или logout в csh (если переменная ignoreeof не задана — то Ctrl + D тоже сработает).

Для вывода списка вводимых команд без проигрывания всех действий с установленными временными интервалами достаточно ввести команду

awk '/@/' ttyoutput

А чтобы получить полный список вводимых команд и ответы интерпретатора:

awk '/./' ttyoutput

Можно даже интерактивно передавать вводмые команды, например — с помощью ключа

‒f (‒‒flush)

один пользователь вводит команды в терминал

mkfifo ttyoutput2; script -f ttyoutput2

другой — наблюдает за операциями в реальном времени с помощью

cat ttyoutput2

Сетевой обмен между удалёнными машинами можно организовать с помощью утилиты netcat.

P. S. Команды script и scriptreplay входят в пакет util-linux, поставляемый вместе с операционной системой (по крайней мере в Linux, хотя впервые утилита script появилась в системе 3.0BSD), поэтому они доступны сразу после установки системы.

P. P. S. Альтернативы — уже упоминавшиеся termrec, ipbt, ttyrec/ttyplay — имеет сходный функционал, есть утилита ttycast, осуществляющая широковещательную передачу команд терминального сеанса в реальном времени.
Также существуют такие утилиты:
TermRecord@github — пишет в html и воспроизводит в браузере.

pip install TermRecord
TermRecord -o /path/to/output_html


asciinema.org — свбодная утилита с открытым исходным кодом для записи сеансовых команд и выкладывания их в сеть.

curl -sL https://asciinema.org/install | sh
asciinema rec


showterm.io — похож на asciinema, но оперирует только с текстом.

gem install showterm
showterm
# or if you have not installed showterm, you can run the standalone
bash <(curl record.showterm.io)


monitor — утилита, перехватывающая ввод/вывод терминала и отправляющая на сайт commands.com.

curl commands.io/install-monitor-(ubuntu|macosx|redhat)
monitor -u myusername

Новая виртуальная ОСь — 26.02.2018-2

 CyanogenMod 13.0 RC1

Cвободная операционная система для мобильных устройств —  CyanogenMod 13.0 RC1. Сначала операционку (или прошивку), предназначенную для замены проприетарных предустановленных версий  Android, пилила команда Cyanogen Team, затем разработку коммерциализировали, создав контору Cyanogen Inc., закрывшуюся 31 декабря 2016 года (вероятно — поглощённую конкурентом-гигантом). Но разрабы продолжили развивать проект под новым именем  LineageOS.

 CyanogenMod

Новая виртуальная ОСь — 26.02.2018

 LineageOS 13.0

Основаная на  CyanogenMod ось для смартфонов и планшетов —  LineageOS 13.0 (на базе CyanogenMod 13, основанного на  ведроиде 6.0.1 Marshmallow). LineageOS Android Distribution разрабатывается после форка от CyanogenMod на основе его исходного кода.

 LineageOS

Сервер и клиент Debian для тестов


Для тестовых задач создал две виртуалки в  Виртуалбоксе — сервер и клиент. Обе виртуалки ставил с образа диска Debian 9.3.0 Netinst CD с архитектурой amd64). Виртуальная машина ’server’ выступает в роли DHCP-, DNS- и прокси-сервера, а также шлюза для машины ’client’. Выкладываю тут последовательность действий, чтобы потом не забыть и использовать в дальнейшем. Действия рутинные, доступны в любом мануале, но для быстроты воспроизведения собрал их здесь вместе.

Показать

Оглавление

Сервер
Софт
Автовход
Сетевые интерфейсы
Узлы
Запрет IPv6 и форвард
DHCP-сервер
DNS-сервер
Маскарадинг
Сквид

Клиент
Софт
Автовход
Сетевые интерфейсы
Узлы



Сервер. Имеет 2 сетевых интерфейса — enp0s3 (WAN — <DHCP>, сетевой мост во внешнюю сеть) и enp0s8 (LAN — 192.168.17.1/24, внутренняя сеть).

Ставлю нужный софт:

apt-get install aptitude isc-dhcp-server squid3 bind9 dnsutils sudo most fping nmap net-tools mc ccze

Перейти к оглавлению


Делаю автовход в любой консоли, для этого в файле /lib/systemd/system/getty@.service прописываю юзера для автологина

ExecStart=-/sbin/agetty --noclear -a <юзер> %I $TERM

Перейти к оглавлению


Настраиваю сетевые интерфейсы в /etc/network/interfaces

auto lo enp0s3 enp0s8

iface lo inet loopback

iface enp0s3 inet dhcp
up iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j DROP

iface enp0s8 inet static
ipaddr 192.168.17.1
netmask 255.255.255.0
broadcast 192.168.17.255

Перейти к оглавлению


Добавляю узлы в /etc/hosts:

127.0.1.1 server
192.168.17.10 client

Перейти к оглавлению


Запрещаю IPv6 в /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1


Разрешаю форвард там же

net.ipv4.ip_forward = 1

Перейти к оглавлению


Настраиваю DHCP-сервер: в файле /etc/default/isc-dhcp-server указываю

DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
DHCPDv4_PID=/var/run/dhcpd.pid
INTERFACESv4="enp9s8"

В файле /etc/dhcp/dhcpd.conf

option domain-name "<домен>";
option domain-name-servers 192.168.17.1, 4.2.2.2;
subnet 192.168.17.0 netmask 255.255.255.0 {
  range 192.168.17.10 192.168.17.50;
  option routers 192.168.17.1;
}

и перезагружаю сервис

systemctl restart isc-dhcp-server.service

Перейти к оглавлению


Настройка DNS-сервера — в работе
Перейти к оглавлению


Настраиваю маскарадинг:

iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
iptables -t nat -A POSTROUTING -o enp0s3 -s 192.168.17.0/24 -j MASQUERADE
iptables -A FORWARD -i enp0s3 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp0s3 -o enp0s8 -j REJECT

Перейти к оглавлению


Делаю бэкап /etc/squid/squid.conf в /etc/squid/backup-squid.conf, затем прописываю настройки сквида:

acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 443
acl CONNECT method CONNECT
acl MyNet src 192.168.17.0/24
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow MyNet
http_access deny all
http_port 192.168.17.1:3128 transparent
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
cache_mem 512 MB
maximum_object_size_in_memory 512 KB
cache_dir ufs /var/squid_cache 1024 16 256
maximum_object_size 2 MB
https_port 192.168.17.1:3128 transparent ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/root/keys/squid.pem key=/root/keys/squid.key
sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all
always_direct allow all

coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320

создаю директорию для кэша сквида и дэ-начу весь траф с внутренней сети на прокси:

mkdir -p /var/squid_cache
chmod o+w /var/squid_cache
iptables -t nat -A PREROUTING -i enp0s8 ! -d 192.168.17.0/24 -p tcp -m multiport --dport 80,443 -j DNAT --to 192.168.17.1:3128

Перейти к оглавлению


Клиент. Имеет 1 сетевую — enp0s3 (LAN — <DHCP>, внутренняя сеть).

Ставлю софт:

apt-get install aptitude dnsutils sudo most fping nmap net-tools mc ccze

Перейти к оглавлению


Делаю автовход в любой консоли (по аналогии с сервером), для этого прописываю автологинящегося пользователя в файле /lib/systemd/system/getty@.service:

ExecStart=-/sbin/agetty --noclear -a <юзер> %I $TERM

Перейти к оглавлению


Настраиваю сетевой интерфейс в /etc/network/interfaces

auto lo enp0s3 enp0s3

iface enp0s3 inet dhcp
up iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j DROP

Перейти к оглавлению


Добавляю узлы в /etc/hosts:

127.0.1.1 client
192.168.17.1 server

Перейти к оглавлению


Новая виртуальная ОСь — 16.02.2018

 Bio-Linux 8.0.7

Основаный на бубунте 14.04 специализированный дистрибутив для биоинформационных исследований, являющийся системой для научной обработки и анализа биологических данных —  Bio-Linux 8.0.7. Дистрибутив создан с целью предоставления бесплатной вычислительной платформы для для разворачивания биоинформатических рабочих станций и первоначально разработан  Центром экологической биоинформатики британского Совета по исследованиям окружающей среды, затем проект передан Экологическому центру «Омикс Синтез».

 Bio-Linux

Сделал просто:

Показать

взял с сайта разработчика OVA-файл для  VirtualBox’а, импортировал, подправил свойства виртуалки, загрузил, локализовал, добавил русский язык. Создал пользователя, настроил hostname, снял скрин.


Задача решена

Новая виртуальная ОСь — 15.02.2018

 DNALinux 0.50p

Linux-дистрибутив с софтом для исследований по биоинформатике —  DNALinux 0.50p. Дистрибутив родом из  Аргентины, основан на Live-CD  SLAX, который, в свою очередь, основан на  Slackware 10.1 (следующая версия 0.592 — на  Xubuntu 8.04). Создатели —  Genes Digitales и  Университет Насьональ де Кильмес.

 DNALinux

Делал так:

Показать

К сожалению, установки на жёсткий диск не предусмотрено (по крайней мере — быстрой и доступной не профессионалам), поэтому скрин снял с  VBox-виртуалки, запущеной прямо с Live-CD без UEFI. В загруженной системе залогинился рутом, поменял имя хоста (был ’slax’), создал юзера soul, от рута запустил KDE командой startx (так как у новых пользователей оформление графической среды не настроено и выглядит беднее). Для локализации KDE скачал файлы kde-i18n-ru-3.3.2-noarch-1.tgz, kde-i18n-ru-3.3.2-noarch-1.tgz.asc и kde-i18n-ru-3.3.2-noarch-1.txt с сайта с репами slackware, причём предустановленный браузер Konqueror и консольный wget (с ключём -no-check-certificate) с HTTPS работать отказались, выдавая всё время ошибки. Пришлось качать на ББ, затем аплоадить на мой сайт и скачать уже с него в виртуалку, выключив перенаправление на https. После запуска в консоли команды

installpkg kde-i18n-ru-3.3.2-noarch-1.tgz

(можно ставить и через утилиту pkgtool) кеды научились в русский интерфейс. Затем по Alt + F2 запустил команду

kdesu -c 'cd /home/soul/ && konsole -ls' -u soul

Выполнив нужные мне действия и команды, снял скрин (консоль юзера soul’а в root’овой графической среде).


Задача решена

Новая виртуальная ОСь — 11.02.2018

 Easy OS 0.7 (Pyro)

Ещё один дистрибутив от основателя проекта  Puppy Linux Барри Каулера —  Easy OS 0.7 (Pyro).

 EasyOS

Последовательность установки:

Показать

Создал в  виртуалбексе, сразу с UEFI. Скачал архив easy-0.7-amd64.img.gz, распаковал из него easy-0.7-amd64.img. Это образ загрузочного доска, но с одним разделом (монтируется при загрузке как sda1). Этот образ конвертирую в VDI-формат

VBoxManage convertdd easy-0.7-amd64.img easy-0.7-amd64.vdi

затем изменяю его размер до 1 гигабайта

VBoxManage modifyhd easy-0.7-amd64.vdi --resize 1000


Подцепив «раздутый» образ к виртуальной машине (система при загрузке пишет, что не найден раздел sda2 и вываливается в командную оболочку), через fdisk создаю второй раздел и перезагружаю виртуалку. Система при загрузке отформатировала sda2 в ext4 для хранения там юзердаты. Последующие шаги повторяют предыдущую ОС (Quirky)...


Задача решена

Новая виртуальная ОСь — 10.02.2018

 Quirky 8.4 (Xerus)

Дистрибутив от основателя проекта  Puppy Linux, Барри Каулера, выпущенный для обкатки новых идей и создания окружения для повседневного личного использования —  Quirky 8.4 (Xerus).

 Quirky

Ставил так:

Показать

Поставил в  Virtualbox’е, сначала без UEFI, затем с UEFI. Разметил разделы на винте, во втором случае программа установки пошла дальше после предупреждения о необходимости установки системного загрузчика (GRUB/GRUB2, LILO, XorBoot, Plop или что-то типа такого). Для установки GRUB подсунул образ диска в виртуалку с дебианом, от рута выполнил install-grub /dev/sdb. После этого система загрузилась с этого образа винта.

При попытке локализовать систему выпадала ошибка при установке пакета langpack-20130524.pet. Оказалось — он хостится на SoulrceForge, который недоступен из российского Крыма. Пришлось скачать через VPN на свой сайт и установить из локальной копии. Там же разместил JPEG-файл, содержащий просто чёрный фон — для размещения в качестве обоев рабочего стола, так как в стандартной поставке в /usr/share/backgrounds/ нет тёмного однотонного фона. Небольшая настройка эмулятора терминала sakura — и...


Задача решена

Ранее Ctrl + ↓
Наверх