Однострочники bash с объяснениями

Сие опубликовал в день года

o="-vvvvvv";for i in 0 {2..7}; do c="aptitude ${o:0:$i} moo";echo "$ $c"; $c; done

Исследование коровьих супер сил aptitude в одну строку. В aptitude есть пасхальное яйцо по аналогии c apt-get, но поначалу программа пытается отнекиваться и говорит, что в ней нет пасхальных яиц. Не верьте ей.

Как это работает

o="-vvvvvv"

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

for i in 0 {2..7}

Цикл берет значения i равные 0, 2, 3 и так до 7. Это делается для того, чтобы отрезать куски нужной длины от значения переменной o.

do c="aptitude ${o:0:$i} moo"

Здесь генерируются необходимые нам строки состоящие из слова aptitude и куска строки в переменной o длинной от нуля, то i. В конце добавляется слово moo. Пара примеров строк:

aptitude moo
aptitude -v moo

и так далее до

aptitude -vvvvvv moo

echo "$ $c"

Печатаем получившуюся команду в виде строки.

$c

Выполняем получившуюся команду.

Если что-то осталось не понятным, то спрашивайте в комментариях.

Оболочка bash - горячие клавиши и поиск

Сие опубликовал в день года

Не стоит удивляться тому, что в оболочке bash присутствует большой набор горячих клавиш, который может сделать вашу работу с командной строкой значительно легче. Возможность редактировать содержимое командной строки предоставляет библиотека GNU Readline. Эту библиотеку используют также некоторые другие *nix приложения, поэтому изучение предложенных ниже горячих клавиш позволит вам улучшить свою продуктивность не только в оболочке bash.

Редактирование команд bash

Ctrl + a – перейти на начало командной строки,
Ctrl + e – перейти в конец командной строки,
Ctrl + k – удалить от курсора до конца командной строки,
Ctrl + u – удалить от курсора до начала командной строки,
Ctrl + w – удалить от курсора до начала слова,
Ctrl + y – вставить слово или текст который был вырезано с использованием одного из подходящих сочетаний клавиш,
Ctrl + xx – переместиться между началом командной строки и текущим положением курсора (работает в обе стороны),
Alt + b – переместить курсор на одно слово назад (или переместиться на начало текущего слова),
Alt + f – переместиться вперен на одно слово (или к... Читать целиком.

Изменить размер MTU в Debian

Сие опубликовал в день года

Стандартный MTU (Maximum Transmission Unit, то есть максимальный блок передаваемых за раз данных) составляет 1500 байт, однако может быть увеличен до числа в диапазоне 1501 - 9198, что зависит от производителя оборудования. Чтобы увеличение MTU прошло успешно, заданный размер должен поддерживаться оборудованием на обоих концах кабеля.

Тестирование

Чтобы убедиться, что ваше оборудование поддерживает большие пакеты, можно воспользоваться утилитой ping. Для тестирования на MacOS используйте команду:

ping -D -s 8184 ip.add.re.ss

В Linux:

ping -M do -s 8972 ip.add.re.ss

В Windows:

ping -f -l 9000 ip.add.re.ss

В *nix системах ping не включает заголовки ICMP (8 байт) и TCP (20 байт), поэтому мы должны вычесть их самостоятельно. Что касается MacOS, то в этом случае реализация ping не позволяет передавать больше 8192 байт, а также мы должны дополнительно вычесть 28 байт.

Возможные результаты

Если вы забыли включить jumbo frames/9k MTU на вашем клиентском устройстве, то получите следующий вывод:

PING ip.add.re.ss (ip.add.re.ss): 8184 data bytes
ping: sendto: Message too long

Если вы увеличили размер MTU на клиенте, но не на конечной... Читать целиком.

Изменить txqueuelen в Linux

Сие опубликовал в день года

Как изменить txqueuelen (длину очереди передачи) для сетевого устройства в Linux? Какое значение необходимо установить для сетей с высокими задержками или высокими скоростями для массового распределения трафика от интерактивных сервисов?

Вы можете установить длину очереди передачи устройства с помощью команды ifconfig или ip. Значение txqueuelen нужно выбирать из следующих соображений:

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

Увеличить параметр txqueuelen на значение между 1000 и 20000 в зависимости от интерфейса:

ifconfig ${interface} txqueuelen ${size}

Например:

ifconfig eth1 txqueuelen 10000
ifconfig eth0 txqueuelen 5000

Также можно использовать утилиту ip:

ip link set ${interface} txqueuelen ${size}

Например:

ip link set eth1 txqueuelen 10000
ip link set eth0 txqueuelen 5000

Чтобы необходимые значения устанавливались при старте системы добавьте в файл /etc/rc.local строки вида:

/sbin/ifconfig eth1 txqueuelen 10000

или

/sbin/ip link set eth1 txqueuelen 10000

iperf в Debian - тест скорости сети

Сие опубликовал в день года

Утилита iperf используется для измерения пропускной способности сети. С помощью iperf можно тестировать пропускную способность как протокола TCP, так и протокола UDP. Для осуществления тестирования пользователь должен запустить как серверную часть (для приема и отбрасывания трафика), так и клиентскую (для генерирования трафика). Мы будем говорить об iperf версии 2 в Debian Linux.

Таким образом утилита iperf позволяет загрузить канал между клиентом и сервером на полную и посмотреть его максимальную пропускную способность в момент тестирования. К примеру, если вы арендовали VPS-сервер, то вы можете проверить соответствует ли пропускная способность сети сервера заявленной вашим хостинг-провайдером. Это не значит, что ваши сайты будут открываться с полученной скоростью, так как iperf тестирует именно максимальную скорость канала, а не скорость работы программ установленных на вашем сервере.

Для того, чтобы провести тестирование скорости сети, вам нужно запустить на одном компьютере серверную часть, а на другом клиентскую. Стоит учитывать, что трафик идет от клиента к серверу. Утилита... Читать целиком.

grep - поиск в Linux, примеры

Сие опубликовал в день года

1. Немного про grep

Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.

2. Базовый синтаксис команды grep

Ниже представлены примеры использования grep с базовым синтаксисом:

grep 'word' filename
grep 'word' file1 file2 file3
grep 'string1 string2'  filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName

3. Как использовать grep для поиска в файлах

Попробуем найти пользователя "vasya" в файле passwd. Для поиска в файле /etc/passwd информации о пользователе "vasya" необходимо использовать следующую команду:

grep vasya /etc/passwd

Пример результата:

vasya:x:1000:1000:vasya,,,:/home/vasya:/bin/bash

Также мы можем попросить grep... Читать целиком.

Debian список установленных пакетов

Сие опубликовал в день года

Чтобы получить список пакетов, установленных в системе, воспользуйтесь командой

sudo dpkg --get-selections "*" > ~/my_packages.txt

Затем этот файл можно скопировать на новую систему и установить пакеты из списка:

sudo dpkg --set-selections < my_packages.txt
sudo apt-get -u dselect-upgrade

Конечно, это относится к дистрибутивам Linux, основанным на Debian.

xd - быстрая навигация по директориям

Сие опубликовал в день года

xd - это умная альтернатива для cd которая ускоряет навигацию по директориям в терминале. Вы можете перейти в директорию только по первым буквам в названии или первым буквам директорий в пути. Например, если вы хотите перейти в директорию /usr/local/etc, то вы можете набрать команду xd ule и xd переведет вас в эту директорию или покажет список альтернатив которые подходят под данный набор символов. Список альтернатив нумеруется и для перехода по одному из путей достаточно нажать клавишу с подходящей цифрой.

xd очень гибкая утилита. Директории могут быть проигнорированы с использованием директив в конфигурационном файле xd. Вы можете указать начинать подбор директорий с корневой директории или с текущей. Если начать путь с символа /, то поиск будет осуществляться с корневой директории сервера, если с . (точка), то относительно домашней директории аккаунта, а если с 0 (ноль), то относительно текущей директории.

Установка:

aptitude install xd

и это только половина дела. Фактически xd только ищет пути подходящие под набор... Читать целиком.

Использование cURL и заголовка host для обхода балансировщика нагрузки

Сие опубликовал в день года

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

Основная проблема в том, что если вы обратитесь к domain.tld, то попадете на балансировщик нагрузки и затем будете направлены на случайный бэкенд. Но мы хотим подключиться к определенному серверу напрямую, поэтому требуется использовать его IP-адрес. Например, так:

curl 'http://10.1.2.28:81/'

Однако из-за того, что серверы используют виртуальные хосты основанные на доменных именах, то в ответ мы получим ошибку 404. Трюк в том, чтобы передавать заголовок Host:

curl --header 'Host: domain.tld' 'http://10.1.2.28:81/'

Это позволит нам запросить нужный виртуальный хост на нужном бэкенде.

Как добавлять, редактировать или удалять задания cron в пакетном режиме

Сие опубликовал в день года

Установка заданий cron в пакетном режиме

Указывая имя файла в качестве аргумента для команды cron вы можете установить новые задания cron из текстового файла. Как это сделать показано ниже.

Прежде всего вам необходимо создать текстовый файл со всеми необходимыми заданиями cron.

cat cronjobs.txt

* * * * * echo How are you? > q.txt
* * * * * echo I am OK. > a.txt

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

crontab cronjobs.txt

Обратите внимание, что эта команда полностью перезапишет все существующие задания. Стоит предварительно сохранить задания cron:

crontab -l > currentjobs.txt

Редактирование crontab в пакетном режиме.

Вы можете редактировать crontab в пакетном режиме используя несколько методов (к примеру, с использованием sed).

Пример: изменить перенаправление вывода с перезаписи (>) на добавление (>>) для всех заданий в cron.

crontab -l

* * * * * echo How are you? > q.txt
* * * * * echo I am OK. > a.txt

crontab -l | sed 's/>/>>/' | crontab -
crontab -l

* * * * * echo How are you? >> q.txt
* * * * * echo I am OK. >> a.txt

Удалить все задачи для текущего пользователя.

Команда... Читать целиком.

Наверх