Юникс Кунг-Фу

За что мы любим Юник­со­по­доб­ные ОС? Ну, за вся­кое, но не в послед­нюю оче­редь за их отлич­ные команд­ные стро­ки. Конеч­но, мож­но писать скрип­ты или даже неболь­шие про­грам­ки на Пер­ле али Питоне, но если надо быст­ро что-то авто­ма­ти­зи­ро­вать, то луч­ше все­го писать какой-нибудь one-liner типа:

cat file | grep something | sed ‘s/thing/otherthing/’ | awk ‑F «|» ‘{print $1}’ | sort | uniq | wc ‑l

И всё тут пре­крас­но, но здесь совер­шен­но отсут­ству­ет услов­ное ветв­ле­ние — а это ино­гда полез­но.

Напри­мер, мож­но ска­зать вот так:

cd directory; rm ‑rf *

Что будет, если cd directory обло­мит­ся, пото­му что этой дирек­то­рии нет? Нач­нёт выпол­нять­ся rm ‑rf в ТЕКУЩЕЙ дирек­то­рии — что может иметь ката­стро­фи­че­ские послед­ствия.

Как это­го избе­жать? Очень про­сто. Надо ска­зать вот так:

cd directory && rm ‑rf *

В дан­ном слу­чае rm ‑rf выпол­нит­ся ТОЛЬКО если cd directory будет успеш­но выпол­нен.

Рабо­та­ет это очень про­сто — если понять, что дан­ное выра­же­ние пред­став­ля­ет собой не боль­ше, чем усло­вие с Сиш­ным син­так­си­сом. && — это опе­ра­тор AND. Любая коман­да при завер­ше­нии рабо­ты выда­ёт код воз­вра­та (exit status). Если коман­да завер­ши­лась успеш­но, воз­вра­ща­ет­ся код 0, он же явля­ет­ся TRUE. Опе­ра­тор && под­ра­зу­ме­ва­ет что ОБЕ части усло­вия долж­ны воз­вра­щать TRUE, поэто­му если пер­вое усло­вие вер­ну­ло TRUE, надо про­ве­рять вто­рое. Если же пер­вое вер­ну­ло FALSE, то нет смыс­ла про­ве­рять вто­рое (прин­цип мини­ма­ли­за­ции про­вер­ки усло­вий https://en.wikipedia.org/wiki/Short-circuit_evaluation).

Соот­вет­ствен­но, мож­но вывер­нуть это наизнан­ку, если исполь­зо­вать опе­ра­тор || (сиречь OR) меж­ду коман­да­ми. В таком слу­чае вто­рая часть выра­же­ния будет выпол­не­на толь­ко в том слу­чае, если пер­вая вер­нёт FALSE — ибо в соот­вет­ствии с прин­ци­пом мини­ма­ли­за­ции нет смыс­ла про­ве­рять вто­рую часть усло­вия, где усло­вия объ­еде­ни­ны через OR — ибо пер­вая уже вер­ну­ла TRUE.

Напри­мер, вот так:

cd test|| mkdir test

Дирек­то­рия test будет созда­на толь­ко в том слу­чае, если её нет (cd вер­нёт ошиб­ку).

Так­же мож­но объ­еди­нять усло­вия, исполь­зуя тот же Сиш­ный син­так­сис.

(cd directory && rm ‑rf *) || echo «Cannot delete files»

Если мож­но зай­ти в дирек­то­рию и уда­лить там фай­лы, то ниче­го не высве­тит­ся. Но если нель­зя, будет ска­за­но, что нель­зя.

Дан­ные коман­ды рабо­та­ют в bash и C‑shell. BSD-шный sh не про­ве­рял, но думаю, что там тоже будет рабо­тать.

Ответка

В ответ на бан анти­ви­ру­са Кас­пер­ско­го на ком­пью­те­рах, при­над­ле­жа­щих МО США (https://experimenter.org/2017/06/29/kaspersky_banned_in_dod/) рос­сий­ские зако­но­да­те­ли пред­ло­жи­ли послать всё нерос­сий­ское анти­ви­рус­ное ПО в том же направ­ле­нии?

«Ко вто­ро­му квар­та­лу 2019 года чинов­ни­ки наме­ре­ны зако­но­да­тель­но обес­пе­чить пред­уста­нов­ку оте­че­ствен­ных анти­ви­рус­ных про­грамм на все пер­со­наль­ные ком­пью­те­ры, вво­зи­мые и созда­ва­е­мые на тер­ри­то­рии Евразий­ско­го эко­но­ми­че­ско­го сою­за.»

Подроб­нее на РБК:
http://www.rbc.ru/technology_and_media/03/07/2017/5958d9c29a7947e1a748af1a

Не вполне понят­но, чем всё это закон­чит­ся. «Обес­пе­чить пред­уста­нов­ку» не зна­чит ведь запре­та поль­зо­ва­ни­ем дру­гих анти­ви­ру­сов?

А то как-то слиш­ком наг­ло полу­ча­ет­ся. «Слу­шай­те свои «Вален­ки» и не выпенд­ри­вай­тесь». И пле­вать, что анти­вирь Кас­пер­ско­го напи­сан настоль­ко кри­во, что раз в два дня акку­рат­ней­шим обра­зом вешал мне комп так, что тре­мя паль­ца­ми он не под­ни­мал­ся. Что там ещё есть? Дох­тур Веб? Ниче­го про него не ска­жу — не поль­зо­вал­ся.

Или это про­сто в Кас­пер­ском занес­ли куда надо? Что­бы обес­пе­чить про­да­жи сво­е­го кри­во­го про­дук­та?

И вооб­ще, это какие-то полу­ме­ры. Вин­до­уз-то не заба­ни­ли. Как не заба­ни­ли Ворд, Эксель, и проч.

Касперского забанили в США

В акт о воен­ном бюд­же­те США на 2018 год вне­сен запрет на исполь­зо­ва­ние про­дук­ции «Лабо­ра­то­рии Кас­пер­ско­го» на обо­ру­до­ва­нии, при­над­ле­жа­ще­му МО США. Озву­чен­ная при­чи­на — «работ­ни­ки ком­па­нии потен­ци­аль­но под­вер­же­ны дав­ле­нию со сто­ро­ны пра­ви­тель­ства Рос­сии».

https://www.bleepingcomputer.com/news/government/senate-gets-ready-to-ban-kaspersky-products-as-fbi-interviews-companys-us-employees/

О том, что при­мер­но такое и будет, я уже дога­ды­вал­ся, когда сам пере­шёл на аме­ри­кан­ский анти­ви­рус «Симан­тек» http://nlothik.livejournal.com/797195.html

Увы, ком­пью­те­ры теперь неот­де­ли­мы от поли­ти­ки. Даже наобо­рот. Учи­ты­вая коли­че­ство кибер­войск с обо­их сто­рон и кубо­мет­ры напи­сан­но­го воен­но­го соф­та для кибе­р­атак на про­тив­ни­ка о каком-то отсут­ствии поли­ти­ки в ком­пью­тер­ной сфе­ре смеш­но гово­рить.