LINUX.ORG.RU

Сообщения Borifed

 

bash. Упороться по функциям: туда и обратно.

Hi, All!

Светит мне разработка некоторой системы скриптов на баше, на пару тысяч строк. Не надо сразу писать, что такое не стоит писать на баше — это условие задачи, и ставил его не я.
И решил я по такому поводу попробовать широко распространенный совет: «everything is function». А если придерживаться другой популярной концепции, «everything is local», и третьей («arrays wherever possible»), то тут возникает вопрос о передаче параметров внутрь функции, и о добыче результатов из нее.
Насколько мне известно, баш не обладает возможностями передать массив как массив — штатная передача внутрь как "${array[*]}" разворачивает массив в строку, что обесценивает оригинальную идею.
Можно передавать внутрь ссылку на массив. Но, во-первых, это только с v4.3 работает. Во-вторых, вот способ, который мне понравился больше:

#!/bin/bash

set -o nounset
set -o errexit
set -o pipefail

f1() {
    local var1="${f1_data[var1]}"
    local ttt

    local i=0
    while [[ "${f1_data[var2.$i]:-}" ]]; do
        ttt="${ttt:-} ${f1_data[var2.$i]}"
        let i=$i+1
    done

    ttt="${ttt:-} --- ${var1}"
    eval "$1='${ttt}'"

    unset f1_data
}

main() {
    local -A f1_data=(
        [var1]="v1"
        [var2.0]="bebe"
        [var2.1]="oo"
        [var2.2]="rwx"
    )
    local result_var="some default"

    f1 result_var \
        || echo "ALARM!" >&2

    echo "And the result is \"${result_var}\"!"
}

main

Т.е. непосредственно перед вызовом функции все, что ей надо, засовывается в массив с именем [function_name]_data, который обнуляется в конце работы функции. Я использовал ассоциативный массив, но это просто мне так больше нравится.

Да, и про передачу значения наружу тоже в этом же примере.
Использование eval позволяет избавиться от необходимости передавать значение наружу через echo что, в свою очередь, позволяет изящнее организовать обработку ошибок вызова функций.

Ваше мнение?

Буду благодарен за критику и советы.

 , ,

Borifed
()

Помогите определиться с будущим, пожалуйста: web или ML?

С ближайшим будущим, по крайней мере.
Мопед не мой, но моего очень хорошего знакомого, он просит у меня совета, а у меня чет не советуется. Ситуация напряженная.

Итак, мой знакомый: 35 лет — возраст, Magento-разработчик — способ зарабатывать, семья и двое детей — отягощающие обстоятельства.

Попалась ему на глаза вот эта реклама курсов по ML: https://dou.ua/calendar/27729/

А у него склонность к математике и давнее желание попробовать что-нибудь эдакое. Поднапрягся человек, что надо в голове освежил и вступительные задания сделал. Брать его туда уже согласны.

И вот тут он впал в ступор.
С одной стороны, давно хотелось и вообще — отрасль, говорят, перспективная.
С другой — цена весьма ощутимая, времени очень много потребуется, а его и так не особо (см. выше «обстоятельства»). Да и так ли перспективна новая область? Вакансий по теме, по крайней мере прямо сейчас, что-то совсем не густо. Станет ли их больше через год-два? Будут ли за это платить гуще?

Что лучше — проторенной дорогой двигаться к синьору в вебе или рискнуть и попробовать вкатиться в ML?

А сегодня последний день раздумий. Надо решаться.

Подкиньте информации для размышлений, пожалуйста.

UPDATE: Ага, я ошибся: последнее время для принятия решения — сегодня до 19:30. Высказывайтесь, пожалуйста. Мой знакомый эту тему читает.

 , , , ,

Borifed
()

Какой диск выбрать?

Собираю из имеющихся уже в наличии частей себе домашний десктоп. В качестве системного диска могу взять одно из двух. Ниже привожу данные этих двух:

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Black
Device Model:     WDC WD1003FZEX-00MK2A0
User Capacity:    1 000 204 886 016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
ATA Version is:   ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   175   170   021    Pre-fail  Always       -       2225
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       75
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       111
 10 Spin_Retry_Count        0x0032   100   253   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   253   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       65
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       12
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       62
194 Temperature_Celsius     0x0022   110   104   000    Old_age   Always       -       33
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Blue
Device Model:     WDC WD10EZEX-00BN5A0
User Capacity:    1 000 204 886 016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
ATA Version is:   ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   174   166   021    Pre-fail  Always       -       2266
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       416
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   098   098   000    Old_age   Always       -       1503
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       407
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       64
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       358
194 Temperature_Celsius     0x0022   105   099   000    Old_age   Always       -       38
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

Причем черный куплен около 2016 года, а синий около 2014.
Понятно, что черный смотрится лучше.
НО.
Когда включаю черный — он ВИБРИРУЕТ. Прямо ну очень заметно. И вибрирует постоянно, пока не уснет (если к нему не обращаться). Прямо так вибрирует, что аж стол дрожит и в клавиатуре что-то звенеть внутри начинает о_0

Систему я хочу собрать так, чтоб проработала около года — потом все равно буду ССД ставить.
Есть возможность данные постоянно бекапить на другой винт с системного. Но возиться лишний раз со слетевшей системой не хочется.

И вот меня гложут сомнения... То ли обезопаситься и поставить синий системным, то ли поменять корпусу ноги на резиновые (а то и сам корпус на более тяжелый — благо, давно собираюсь) и все же поставить системным черный.
Корпус сейчас Aerocool PGS VS-9W — не такой устойчивый и жесткий, как хотелось бы, дырка на дырке. Хочется Fractal Design Define R6 USB-C Black безо всяких там ненужных окошек.
А вы как считаете?

Я вот не понимаю, чего это черный так дрожит, что аж я сам дрожу. Неужели это для него нормально?

 ,

Borifed
()

Load Balancing: NGINX vs Envoy

Hi All,

Наткнулся на статью-сравнение:
https://www.loggly.com/blog/benchmarking-5-popular-load-balancers-nginx-haproxy-envoy-traefik-and-alb/

В статье по ссылке нжинкс показывает хорошие результаты для чистого HTTP (который уже не актуален в живой природе), но сильно проигрывает Envoy по HTTPS (который как раз актуален).

Означает ли все это, что пора выкидывать любимый NGINX?

Был у кого-нибудь опыт подобной замены? Поделитесь, пожалуйста.

 , ,

Borifed
()

Зачем тут плюс?

Скрипт взят с Mutt - ArchWiki. Подскажите, пожалуйста, зачем во второй снизу строчке в конце строки плюс?

#!/bin/sh

## In KB.
CACHE_LIMIT=51200

cd "$1" 2>/dev/null
[ $? -ne 0 ] && exit

[ $(du -s . | cut -f1 -d'	') -lt $CACHE_LIMIT ] && exit
while IFS= read -r i; do
	rm "$i"
	[ $(du -s . | cut -f1 -d'	') -lt $CACHE_LIMIT ] && exit
done <<EOF
$(find . -type f -exec ls -rt1 {} +)
EOF

 

Borifed
()

DNS flood. И как автоматом рулить файрволлом?

Офис, гейт на линуксе. Там же почта и днс. Канал наружу очень слабенький. Уже несколько дней валится бешеное (по меркам нашего канала) количество явно левых днс-запросов с разнообразных адресов. Типа такого:

[root@proxy ~]# tcpdump -ni ext0 dst host [my_server_ip] and dst port domain
05:56:34.761700 IP 76.174.73.27.38588 > [my_server_ip].domain: 14319+ [1au] ANY? . (28)

Сервер начинает честно отвечать негодяям, в итоге канал наружу забивается полностью:
[root@proxy ~]# tcpdump -ni ext0 src host [my_server_ip] and src port domain
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ext0, link-type EN10MB (Ethernet), capture size 96 bytes
05:58:37.149059 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS b.root-servers.net.,[|domain]
05:58:37.149667 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS m.root-servers.net.,[|domain]
05:58:37.150200 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS k.root-servers.net.,[|domain]
05:58:37.150578 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS i.root-servers.net.,[|domain]
05:58:37.150961 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS g.root-servers.net.,[|domain]
05:58:37.151332 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS e.root-servers.net.,[|domain]
05:58:37.151702 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS c.root-servers.net.,[|domain]
05:58:37.152072 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS a.root-servers.net.,[|domain]
05:58:37.152469 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS l.root-servers.net.,[|domain]
05:58:37.152847 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS j.root-servers.net.,[|domain]
05:58:37.153219 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS h.root-servers.net.,[|domain]
05:58:37.153589 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS f.root-servers.net.,[|domain]
05:58:37.153959 IP [my_server_ip].domain > 166.137.144.11.47537: 26997 13/13/2 NS d.root-servers.net.,[|domain]

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

Вопросы:
1. Какого хрена?! В смысле, зачем кому-то устраивать весь этот цирк?
2. Как банить негодяев автоматом? Чует мое сердце, должен быть способ, и не один.
Помогите, пожалуйста. Фак тут посмотрел, ответа не нашел.

Borifed
()

Как новичку задавать поменьше [глупых] вопросов?

Привет. Я новичок в линуксе. Мне нужно научиться его использовать — я админ и мне добавилось несколько серверов под линуксом. Моих навыков сейчас хватает только на зайти туда по ссш и в ви поправить нагугленные конфиги. Из-за каждой мелочи приходится дергать народ на всяких форумах и читать тонны не относящегося к делу (из-за того, что даже сформулировать правильно задачу я не могу).
Ощущается очень острая нехватка систематических знаний. Где их взять?
Многочисленные книги типа «Линукс для идиотов» со второй страницы (и до последней) описывают графический интерфейс, использование браузера и смену картинки на заставке, а меня интересует консоль и администрирование. Ну и базы, теории нигде не встретил.
Где прочесть про идеологически верные подходы к решению типовых задач сисадмина? В ФАКах и вики собраны надерганные мелочи, и нигде я пока не встретил чего-то такого типа «библии линукса».
Вот хотел я понять перл — купил книжку с верблюдом и остался доволен.
Нет ли похожего руководства по линуксу?
С техническим английским все в порядке, если что.

Перемещено tazhate из general

Borifed
()

RSS подписка на новые темы