[{"data":1,"prerenderedAt":1875},["ShallowReactive",2],{"$fGdBwbAmenxXJ5CAk6cRxUQpveVCt8NPqSxUE9LQdGys":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":70,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":73,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":399,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":402,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":646,"mdc-jm061p-key":666,"mdc-hmdndc-key":691,"mdc--kvxfyt-key":739,"mdc--9zj8n4-key":783,"mdc--4zw1o8-key":841,"mdc--z7qfpj-key":899,"mdc-hf8jrs-key":931,"mdc--w8vwx9-key":970,"mdc-4a8zhs-key":1618,"mdc-on7efy-key":1643,"mdc--39ji3y-key":1686,"mdc--sce8hh-key":1694,"mdc-ucji6o-key":1825},{"content":4,"quizQuestionContent":40,"type":59,"pageMeta":60},[5,9,13,16,20,23,27,30,34,37],{"id":6,"value":7,"isTypeH1":8},"1873","Анализ последовательности команд Unix: создание и выполнение скрипта",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4263","Построчное выполнение","line-by-line-execution",{"id":14,"value":15,"isTypeParagraph":8},"9819","Ниже приведено последовательное объяснение каждой строки, включая смысл операторов `&&` и `>>`.\n\n```\ncd ~\n```\n\n- Происходит переход в домашний каталог текущего пользователя.\n- Символ `~` разворачивается оболочкой в путь домашней директории.\n\n```\nmkdir foo\n```\n\n- Создается директория `foo` в текущем каталоге (после `cd ~` — это `~/foo`).\n- Если директория уже существует, команда обычно завершится ошибкой (в базовом варианте без `-p`).\n\n```\ntouch bar && echo \"ls foo\" >> bar\n```\n\n- `touch bar`:\n  - создает файл `bar`, если его не было;\n  - либо обновляет временные метки, если файл уже существует.\n- `&&`:\n  - правая команда запускается только при успешном выполнении левой (то есть когда код завершения `touch` равен 0).\n- `echo \"ls foo\" >> bar`:\n  - `echo` печатает строку `ls foo` в стандартный вывод;\n  - `>> bar` перенаправляет этот вывод в файл `bar` в режиме добавления (append), то есть строка дописывается в конец файла;\n  - если файла `bar` по какой-то причине нет, он будет создан при открытии на добавление.\n\nВ итоге содержимое `bar` становится таким (как минимум одна строка, без shebang):\n\n```\nls foo\n```\n\nВажно понимать, что `touch bar` и `>> bar` могут привести к тому, что строка `ls foo` будет добавлена повторно при повторном запуске фрагмента (то есть появится несколько одинаковых строк).\n\n```\nchmod +x bar\n```\n\n- Добавляется право исполнения для файла `bar`.\n- В практическом смысле это означает, что файл можно запускать как `./bar` (при наличии прав и корректного формата исполнения).\n\n```\n./bar\n```\n\n- Выполняется файл `bar` из текущей директории.\n- Префикс `./` важен: без него оболочка ищет команду по каталогам из `PATH`, а `bar` обычно не лежит в `PATH`.\n\nОжидаемое поведение в типичном интерактивном bash-сеансе:\n- оболочка попытается запустить файл как программу;\n- если файл является обычным текстом без shebang, может произойти попытка выполнить его как сценарий оболочки;\n- выполняется команда `ls foo`, которая выводит содержимое `foo` (здесь — пусто).\n\nТаблица “что создается и меняется”:\n\n| Шаг | Команда | Изменение | Итог |\n|---|---|---|---|\n| 1 | `cd ~` | Меняется текущий каталог | Текущий каталог = home |\n| 2 | `mkdir foo` | Файловая система | Появляется `~/foo/` |\n| 3 | `touch bar` | Файловая система | Появляется `~/bar` (пустой) или обновляются метки |\n| 4 | `echo \"ls foo\" >> bar` | Содержимое файла | В `~/bar` дописывается строка `ls foo` |\n| 5 | `chmod +x bar` | Права доступа | `~/bar` становится исполняемым |\n| 6 | `./bar` | Выполнение | Печатается содержимое `~/foo/` |",{"id":17,"value":18,"anchor":19,"isTypeH2":8},"4264","Почему может работать без shebang","why-it-may-work-without-shebang",{"id":21,"value":22,"isTypeParagraph":8},"9820","Shebang — это первая строка файла вида `#!/path/to/interpreter`, которая подсказывает системе, какой интерпретатор должен выполнять сценарий. Если shebang отсутствует, система не имеет явной подсказки, чем интерпретировать текстовый файл.\n\nВ Linux при попытке выполнить “неподходящий формат” файла ядро может вернуть ошибку формата выполнения (часто это связывают с `Exec format error`). После этого поведение зависит от оболочки:\n- некоторые оболочки пытаются повторно запустить файл через интерпретатор shell (условно “прочитать как команды”);\n- другие оболочки или среды запуска могут просто показать ошибку и завершиться.",{"id":24,"description":25,"titleAlert":26,"isTypeAlertWarning":8},"659","Отсутствие shebang делает сценарий менее переносимым: в одном окружении он выполнится, а в другом — завершится ошибкой, либо будет выполнен другой оболочкой с отличающимися правилами синтаксиса.",null,{"id":28,"value":29,"isTypeParagraph":8},"9821","Пример “более надежного” варианта файла `bar`:\n\n```\n#!/bin/sh\nls foo\n```",{"id":31,"value":32,"anchor":33,"isTypeH2":8},"4265","Теория: &&, >> и chmod +x","theory-and-redirection-and-chmod",{"id":35,"value":36,"isTypeParagraph":8},"9822","Оператор `&&` реализует “условную цепочку”: правая команда выполняется только если левая завершилась успешно. Это часто используется как короткая форма вместо `if`, когда нужно продолжать работу только при успехе.\n\nОператор `>>` — это перенаправление вывода в файл в режиме добавления:\n- `>` перезаписывает файл целиком;\n- `>>` дописывает в конец.\n\nКоманда `chmod +x` меняет права доступа:\n- `x` — бит исполнения;\n- `+` — добавление бита к текущим правам.\nПри этом `chmod` не меняет содержимое файла: если в `bar` записана строка `ls foo`, то она такой и остается.\n\nСхема потока выполнения:\n\n```\ncd ~\n  |\n  v\nmkdir foo\n  |\n  v\ntouch bar  --(успех)-->  echo \"ls foo\" >> bar\n   |                      |\n   '---(ошибка)-----------'  (echo пропускается)\n  |\n  v\nchmod +x bar\n  |\n  v\n./bar  -> (часто) попытка интерпретации как shell-скрипта -> ls foo\n```",{"id":38,"value":39,"isTypeParagraph":8},"9823","Кратко: создается директория `foo` и файл `bar`, в `bar` дописывается команда `ls foo`, затем `bar` становится исполняемым и запускается; чаще всего выводится содержимое `foo` (пусто), а отсутствие shebang является потенциальной проблемой переносимости, хотя в bash нередко “работает”.",{"id":41,"options":42,"hint":56,"solution":57,"description":58},"1117",[43,46,50,53],{"id":44,"label":45,"isCorrect":8},"4596","Последовательность создает в домашней директории папку `foo`, затем создает и делает исполняемым файл `bar`, содержащий команду `ls foo`. При запуске `./bar` выполняется эта команда, что приводит к выводу на экран содержимого директории `foo` (которое является пустым). ",{"id":47,"label":48,"isCorrect":49},"4597","Последовательность создает в домашней директории папку `foo` и файл `bar`, после чего делает `bar` исполняемым. Запуск `./bar` приводит к ошибке, так как в файле отсутствует shebang (`#!/bin/bash`), и система не может определить интерпретатор для его выполнения. Этот вариант является неправильным, так как в отсутствие shebang оболочка пытается выполнить файл самостоятельно.",false,{"id":51,"label":52,"isCorrect":49},"4598","Последовательность создает в домашней директории папку `foo`, а файл `bar` создается с содержимым `ls foo`. После этого файл `bar` переименовывается в исполняемый и при запуске копирует директорию `foo`. Этот вариант неправильный, так как команда `chmod` не переименовывает файл, а изменяет его права, и содержимое `bar` не является командой копирования.",{"id":54,"label":55,"isCorrect":49},"4599","Последовательность создает директорию `foo` и файл `bar` с командой `ls -la`. После этого файл выполняется и выводит подробный список файлов в домашней директории, включая скрытые. Этот вариант неправильный, так как в файл `bar` записывается строка `ls foo`, а не `ls -la`, и команда будет выводить содержимое только директории `foo`, а не домашней.","Ключевой момент — отличать “запись строки в файл” (`>>`) от “исполнения файла” (`./bar`), а также понимать, что `chmod +x` лишь добавляет право исполнения и не добавляет интерпретатор; интерпретатор обычно задается shebang или правилами оболочки при ошибке формата выполнения.","Правильный ответ: 1 - последовательность создает в домашней директории папку `foo`, затем создает и делает исполняемым файл `bar`, содержащий команду `ls foo`. При запуске `./bar` выполняется эта команда, что приводит к выводу на экран содержимого директории `foo` (которое является пустым). ","Дан фрагмент Bash-скрипта. Что здесь происходит?\n\n```\ncd ~\nmkdir foo\ntouch bar && echo \"ls foo\" >> bar\nchmod +x bar\n./bar\n```","quizQuestion",{"title":61,"description":7,"ogTitle":62,"ogDescription":7,"ogImageUrl":63,"canonical":26,"ogLocale":64,"ogSiteName":65,"ogImageType":66,"ogImageWidth":67,"ogImageHeight":68,"ogType":69,"ogUrl":26},"Дан фрагмент Bash-скрипта. Что здесь происходит?","Анализ последовательности команд Unix","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":71,"siteUrl":72},"GOOD WEB JOB!","https://goodwebjob.ru",{"slugs":74},[75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384,387,390,393,396],{"name":76,"value":77},"Теоретические задания","theoretical-tasks",{"name":79,"value":80},"Что вернёт этот код: typeof (function(){})()","what-this-code-will-return-typeof-function",{"name":82,"value":83},"С чего начать?","where-to-begin",{"name":85,"value":86},"Почему опасно писать прямо в прототипы базовых типов?","why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":88,"value":89},"Backend","backend",{"name":91,"value":92},"Frontend","frontend",{"name":94,"value":95},"Какие логические значения в console.log будут получены?","prototype-what-logical-values-will-be-received-in-console-log",{"name":97,"value":98},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":100,"value":101}," Найти в массиве неповторяющиеся числа","find-non-repeating-numbers-in-an-array",{"name":103,"value":104},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":106,"value":107},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":109,"value":110},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":112,"value":113},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":115,"value":116},"Какое значение выведет консоль с object.property?","what-value-will-the-console-output-with-object-property",{"name":118,"value":119},"Что выведется в console.log([arr[0](), arr[0]()])?","what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":121,"value":122},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":124,"value":125},"Необходимо проверить, являются ли две строки анаграммами друг друга","checks-whether-two-strings-are-anagrams-of-each-other",{"name":127,"value":128},"Определить, является ли слово палиндромом","determines-whether-a-word-is-a-palindrome",{"name":130,"value":131},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":133,"value":134},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":136,"value":137},"Дано дерево (вложенный объект), надо найти сумму всех вершин","given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":139,"value":140},"Для каждой ветви дерева записать номер вложенности данной ветви","for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":142,"value":143},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":145,"value":146},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":148,"value":149},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":151,"value":152},"Напишите функцию, который сделает из массива объект","write-a-function-that-will-make-an-object-out-of-an-array",{"name":154,"value":155},"Что выведет console.log в результате выполнения цикла while?","what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":157,"value":158},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":160,"value":161},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":163,"value":164},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":166,"value":167},"Уникализация значений в массиве","unifying-values-in-an-array",{"name":169,"value":170},"«Расплющивание» массива","flattening-the-array",{"name":172,"value":173},"Что вернёт метод book.getUpperName()?","what-will-the-book-get-upper-name-method-return",{"name":175,"value":176},"Сжатие строк","string-compression",{"name":178,"value":179},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":181,"value":182},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":184,"value":185},"Как браузер после ввода домена понимает, откуда брать сайт?","how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":187,"value":188},"Как домен попадает в DNS в таблицу соответствия: домен – ip","how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":190,"value":191},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":193,"value":194},"Ключевые отличия TCP и UDP","key-differences-between-tcp-and-udp",{"name":196,"value":197},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":199,"value":200},"Что такое HTTP и из чего состоит?","what-is-http-and-what-does-it-consist-of",{"name":202,"value":203},"Что такое заголовки в HTTP и зачем они нужны?","what-are-http-headers-and-why-do-we-need-them",{"name":205,"value":206},"Что такое параметры в HTTP?","what-are-http-parameters",{"name":208,"value":209},"Где находится HTML-код в структуре HTTP-ответа?","where-is-the-html-code-located-in-the-http-response-structure",{"name":211,"value":212},"Что такое HTML?","what-is-html",{"name":214,"value":215},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":217,"value":218},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":220,"value":221},"Что такое cookie?","what-is-a-cookie",{"name":223,"value":224},"Кто является инициатором записи cookie в браузере?","who-initiates-the-cookie-recording-in-the-browser",{"name":226,"value":227},"Есть ли возможность с клиента (с браузера) управлять cookie?","is-it-possible-to-manage-cookies-from-the-client-browser",{"name":229,"value":230},"Лайвкодинг","livecoding",{"name":232,"value":233},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":235,"value":236},"Всё, что идет по HTTPS – оно защищено?","is-everything-that-goes-through-https-secure",{"name":238,"value":239},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":241,"value":242},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":244,"value":245},"Как браузер парсит JavaScript и изображения при рендеринге?","how-the-browser-parses-javascript-and-images-when-rendering",{"name":247,"value":248},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":250,"value":251},"Что в браузере блокирует рендеринг страницы?","what-is-blocking-the-page-rendering-in-the-browser",{"name":253,"value":254},"Что такое DOM в браузере? Что такое CSSOM?","what-is-dom-in-a-browser-what-is-cssom",{"name":256,"value":257},"Что является узлами в DOM?","what-are-nodes-in-the-dom",{"name":259,"value":260},"Из чего состоит CSSOM?","what-does-cssom-consist-of",{"name":262,"value":263},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":265,"value":266},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":268,"value":269},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":271,"value":272},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":274,"value":275},"Есть HTML код. Будет ли font-weight на span влиять?","there-is-an-html-code-will-font-weight-affect-span",{"name":277,"value":278},"Flexbox и Grid, чем отличаются друг от друга?","what-are-the-differences-between-flexbox-and-grid",{"name":280,"value":281},"Заменяют ли Flexbox и Grid друг друга?","do-flexbox-and-grid-replace-each-other",{"name":283,"value":284},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":286,"value":287},"Сборник задач","tasks",{"name":289,"value":290},"Какие способы объявления функции есть в JavaScript?","what-are-the-ways-to-declare-a-function-in-javascript",{"name":292,"value":293},"Что такое this в JavaScript?","what-is-this-in-javascript",{"name":295,"value":296},"Что такое Event Loop, как работает?","what-is-an-event-loop-and-how-does-it-work",{"name":298,"value":299},"Что будет, если вызвать typeof на необъявленной переменной?","what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":301,"value":302},"Что показывает оператор typeof в JavaScript?","what-does-the-typeof-operator-show-in-javascript",{"name":304,"value":305},"Какие типы данных существует в JavaScript?","what-types-of-data-exist-in-javascript",{"name":307,"value":308},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":310,"value":311},"Что вернет typeof для массива?","what-will-typeof-return-for-an-array",{"name":313,"value":314},"Почему оператор typeof, применённый к массиву, возвращает объект?","why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":316,"value":317},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":319,"value":320},"Что возвращает typeof для new Set в JavaScript?","what-does-typeof-return-for-new-set-in-javascript",{"name":322,"value":323},"Для чего нужен React, какие он решает проблемы?","what-is-react-used-for-and-what-problems-does-it-solve",{"name":325,"value":326},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":328,"value":329},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":331,"value":332},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":334,"value":335},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":337,"value":338},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":340,"value":341},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":343,"value":344},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":346,"value":347},"Какие существуют стратегии ветвления для работы команды? Что это такое?","what-are-the-branching-strategies-for-the-team-what-is-it",{"name":349,"value":350},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":352,"value":353},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":355,"value":356},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":358,"value":359},"Что такое алгоритмическая сложность?","what-is-algorithmic-complexity",{"name":361,"value":362},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","what-is-the-algorithmic-complexity-of-quick-sort",{"name":364,"value":365},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":367,"value":368},"Каким способом может выполняться авторизация пользователя на сайте?","how-can-a-user-be-authorized-on-a-website",{"name":370,"value":371},"В чем разница между микро- и макро-тасками в JavaScript?","what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":373,"value":374},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":376,"value":377},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":379,"value":380},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":382,"value":383},"Подготовка к тех.интервью","technical-interview",{"name":385,"value":386},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":388,"value":389},"Что такое DNS, как DNS находит нужный IP-адрес?","what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":391,"value":392},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","variables-are-declared-as-follows-specify-the-correct-statement",{"name":394,"value":395},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":397,"value":398},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",[400],{"label":382,"slug":383,"to":401},"/technical-interview/where-to-begin",{"navigationList":403,"navigationSublist":409},[404,406],{"path":401,"isActive":49,"name":82,"icon":405,"isNavbarMobileDisabled":8},"material-symbols:visibility-outline-rounded",{"path":407,"isActive":8,"name":286,"icon":408,"isNavbarMobileDisabled":49},"/technical-interview/tasks","material-symbols:task-outline",[410,417,436,445,450,545,562,569,574,617,632,637],{"title":411,"list":412,"isOpened":49},"Bash",[413,415],{"name":352,"path":414,"isActive":49},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":355,"path":416,"isActive":49},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":418,"list":419,"isOpened":49},"CSS",[420,422,424,426,428,430,432,434],{"name":262,"path":421,"isActive":49},"/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":265,"path":423,"isActive":49},"/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":268,"path":425,"isActive":49},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":271,"path":427,"isActive":49},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":274,"path":429,"isActive":49},"/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":277,"path":431,"isActive":49},"/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":280,"path":433,"isActive":49},"/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":283,"path":435,"isActive":49},"/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":437,"list":438,"isOpened":49},"Git",[439,441,443],{"name":340,"path":440,"isActive":49},"/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":343,"path":442,"isActive":49},"/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":346,"path":444,"isActive":49},"/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":446,"list":447,"isOpened":49},"HTML",[448],{"name":211,"path":449,"isActive":49},"/technical-interview/tasks/what-is-html",{"title":451,"list":452,"isOpened":49},"JavaScript",[453,455,457,459,461,463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543],{"name":94,"path":454,"isActive":49},"/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":85,"path":456,"isActive":49},"/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":232,"path":458,"isActive":49},"/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":115,"path":460,"isActive":49},"/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":118,"path":462,"isActive":49},"/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":154,"path":464,"isActive":49},"/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":157,"path":466,"isActive":49},"/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":172,"path":468,"isActive":49},"/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":391,"path":470,"isActive":49},"/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":178,"path":472,"isActive":49},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":160,"path":474,"isActive":49},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":163,"path":476,"isActive":49},"/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":79,"path":478,"isActive":49},"/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":181,"path":480,"isActive":49},"/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":289,"path":482,"isActive":49},"/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":292,"path":484,"isActive":49},"/technical-interview/tasks/what-is-this-in-javascript",{"name":295,"path":486,"isActive":49},"/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":298,"path":488,"isActive":49},"/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":301,"path":490,"isActive":49},"/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":304,"path":492,"isActive":49},"/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":307,"path":494,"isActive":49},"/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":310,"path":496,"isActive":49},"/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":313,"path":498,"isActive":49},"/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":316,"path":500,"isActive":49},"/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":319,"path":502,"isActive":49},"/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":364,"path":504,"isActive":49},"/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":370,"path":506,"isActive":49},"/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":103,"path":508,"isActive":49},"/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":121,"path":510,"isActive":49},"/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":106,"path":512,"isActive":49},"/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":136,"path":514,"isActive":49},"/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":112,"path":516,"isActive":49},"/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":139,"path":518,"isActive":49},"/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":130,"path":520,"isActive":49},"/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":142,"path":522,"isActive":49},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":148,"path":524,"isActive":49},"/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":100,"path":526,"isActive":49},"/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":151,"path":528,"isActive":49},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":124,"path":530,"isActive":49},"/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":97,"path":532,"isActive":49},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":127,"path":534,"isActive":49},"/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":169,"path":536,"isActive":49},"/technical-interview/tasks/flattening-the-array",{"name":133,"path":538,"isActive":49},"/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":175,"path":540,"isActive":49},"/technical-interview/tasks/string-compression",{"name":166,"path":542,"isActive":49},"/technical-interview/tasks/unifying-values-in-an-array",{"name":145,"path":544,"isActive":49},"/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":546,"list":547,"isOpened":49},"React",[548,550,552,554,556,558,560],{"name":322,"path":549,"isActive":49},"/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":394,"path":551,"isActive":49},"/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":325,"path":553,"isActive":49},"/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":328,"path":555,"isActive":49},"/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":331,"path":557,"isActive":49},"/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":334,"path":559,"isActive":49},"/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":397,"path":561,"isActive":49},"/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":563,"list":564,"isOpened":49},"Алгоритмы",[565,567],{"name":358,"path":566,"isActive":49},"/technical-interview/tasks/what-is-algorithmic-complexity",{"name":361,"path":568,"isActive":49},"/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":570,"list":571,"isOpened":49},"Дебаггинг",[572],{"name":337,"path":573,"isActive":49},"/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":575,"list":576,"isOpened":49},"Компьютерные сети",[577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615],{"name":184,"path":578,"isActive":49},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":388,"path":580,"isActive":49},"/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":187,"path":582,"isActive":49},"/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":190,"path":584,"isActive":49},"/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":193,"path":586,"isActive":49},"/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":196,"path":588,"isActive":49},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":199,"path":590,"isActive":49},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":202,"path":592,"isActive":49},"/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":205,"path":594,"isActive":49},"/technical-interview/tasks/what-are-http-parameters",{"name":208,"path":596,"isActive":49},"/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":214,"path":598,"isActive":49},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":217,"path":600,"isActive":49},"/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":220,"path":602,"isActive":49},"/technical-interview/tasks/what-is-a-cookie",{"name":223,"path":604,"isActive":49},"/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":226,"path":606,"isActive":49},"/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":385,"path":608,"isActive":49},"/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":235,"path":610,"isActive":49},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":238,"path":612,"isActive":49},"/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":241,"path":614,"isActive":49},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":367,"path":616,"isActive":49},"/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":618,"list":619,"isOpened":49},"Отрисовка в браузере",[620,622,624,626,628,630],{"name":247,"path":621,"isActive":49},"/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":244,"path":623,"isActive":49},"/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":250,"path":625,"isActive":49},"/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":253,"path":627,"isActive":49},"/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":256,"path":629,"isActive":49},"/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":259,"path":631,"isActive":49},"/technical-interview/tasks/what-does-cssom-consist-of",{"title":633,"list":634,"isOpened":49},"Ревью кода",[635],{"name":349,"path":636,"isActive":49},"/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":638,"list":639,"isOpened":49},"Теория вероятности",[640,642,644],{"name":373,"path":641,"isActive":49},"/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":376,"path":643,"isActive":49},"/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":379,"path":645,"isActive":49},"/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"cooperation":647,"copyright":650,"reportError":651,"socialNetwork":653},{"link":648,"title":649},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":652,"link":648},"Сообщить об ошибке",{"label":654,"socialNetworkList":655},"Мы в соцсетях:",[656,659,662],{"icon":26,"link":657,"title":658},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":660,"link":648,"title":661},"ic:baseline-telegram","Telegram",{"icon":663,"link":664,"title":665},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":667,"body":668},{},{"type":669,"children":670},"root",[671,678],{"type":672,"tag":673,"props":674,"children":675},"element","p",{},[676],{"type":677,"value":61},"text",{"type":672,"tag":679,"props":680,"children":684},"pre",{"className":681,"code":683,"language":677},[682],"language-text","cd ~\nmkdir foo\ntouch bar && echo \"ls foo\" >> bar\nchmod +x bar\n./bar\n",[685],{"type":672,"tag":686,"props":687,"children":689},"code",{"__ignoreMap":688},"",[690],{"type":677,"value":683},{"data":692,"body":693},{},{"type":669,"children":694},[695],{"type":672,"tag":673,"props":696,"children":697},{},[698,700,706,708,714,716,722,724,730,732,737],{"type":677,"value":699},"Последовательность создает в домашней директории папку ",{"type":672,"tag":686,"props":701,"children":703},{"className":702},[],[704],{"type":677,"value":705},"foo",{"type":677,"value":707},", затем создает и делает исполняемым файл ",{"type":672,"tag":686,"props":709,"children":711},{"className":710},[],[712],{"type":677,"value":713},"bar",{"type":677,"value":715},", содержащий команду ",{"type":672,"tag":686,"props":717,"children":719},{"className":718},[],[720],{"type":677,"value":721},"ls foo",{"type":677,"value":723},". При запуске ",{"type":672,"tag":686,"props":725,"children":727},{"className":726},[],[728],{"type":677,"value":729},"./bar",{"type":677,"value":731}," выполняется эта команда, что приводит к выводу на экран содержимого директории ",{"type":672,"tag":686,"props":733,"children":735},{"className":734},[],[736],{"type":677,"value":705},{"type":677,"value":738}," (которое является пустым).",{"data":740,"body":741},{},{"type":669,"children":742},[743],{"type":672,"tag":673,"props":744,"children":745},{},[746,747,752,754,759,761,766,768,773,775,781],{"type":677,"value":699},{"type":672,"tag":686,"props":748,"children":750},{"className":749},[],[751],{"type":677,"value":705},{"type":677,"value":753}," и файл ",{"type":672,"tag":686,"props":755,"children":757},{"className":756},[],[758],{"type":677,"value":713},{"type":677,"value":760},", после чего делает ",{"type":672,"tag":686,"props":762,"children":764},{"className":763},[],[765],{"type":677,"value":713},{"type":677,"value":767}," исполняемым. Запуск ",{"type":672,"tag":686,"props":769,"children":771},{"className":770},[],[772],{"type":677,"value":729},{"type":677,"value":774}," приводит к ошибке, так как в файле отсутствует shebang (",{"type":672,"tag":686,"props":776,"children":778},{"className":777},[],[779],{"type":677,"value":780},"#!/bin/bash",{"type":677,"value":782},"), и система не может определить интерпретатор для его выполнения. Этот вариант является неправильным, так как в отсутствие shebang оболочка пытается выполнить файл самостоятельно.",{"data":784,"body":785},{},{"type":669,"children":786},[787],{"type":672,"tag":673,"props":788,"children":789},{},[790,791,796,798,803,805,810,812,817,819,824,826,832,834,839],{"type":677,"value":699},{"type":672,"tag":686,"props":792,"children":794},{"className":793},[],[795],{"type":677,"value":705},{"type":677,"value":797},", а файл ",{"type":672,"tag":686,"props":799,"children":801},{"className":800},[],[802],{"type":677,"value":713},{"type":677,"value":804}," создается с содержимым ",{"type":672,"tag":686,"props":806,"children":808},{"className":807},[],[809],{"type":677,"value":721},{"type":677,"value":811},". После этого файл ",{"type":672,"tag":686,"props":813,"children":815},{"className":814},[],[816],{"type":677,"value":713},{"type":677,"value":818}," переименовывается в исполняемый и при запуске копирует директорию ",{"type":672,"tag":686,"props":820,"children":822},{"className":821},[],[823],{"type":677,"value":705},{"type":677,"value":825},". Этот вариант неправильный, так как команда ",{"type":672,"tag":686,"props":827,"children":829},{"className":828},[],[830],{"type":677,"value":831},"chmod",{"type":677,"value":833}," не переименовывает файл, а изменяет его права, и содержимое ",{"type":672,"tag":686,"props":835,"children":837},{"className":836},[],[838],{"type":677,"value":713},{"type":677,"value":840}," не является командой копирования.",{"data":842,"body":843},{},{"type":669,"children":844},[845],{"type":672,"tag":673,"props":846,"children":847},{},[848,850,855,856,861,863,869,871,876,878,883,885,890,892,897],{"type":677,"value":849},"Последовательность создает директорию ",{"type":672,"tag":686,"props":851,"children":853},{"className":852},[],[854],{"type":677,"value":705},{"type":677,"value":753},{"type":672,"tag":686,"props":857,"children":859},{"className":858},[],[860],{"type":677,"value":713},{"type":677,"value":862}," с командой ",{"type":672,"tag":686,"props":864,"children":866},{"className":865},[],[867],{"type":677,"value":868},"ls -la",{"type":677,"value":870},". После этого файл выполняется и выводит подробный список файлов в домашней директории, включая скрытые. Этот вариант неправильный, так как в файл ",{"type":672,"tag":686,"props":872,"children":874},{"className":873},[],[875],{"type":677,"value":713},{"type":677,"value":877}," записывается строка ",{"type":672,"tag":686,"props":879,"children":881},{"className":880},[],[882],{"type":677,"value":721},{"type":677,"value":884},", а не ",{"type":672,"tag":686,"props":886,"children":888},{"className":887},[],[889],{"type":677,"value":868},{"type":677,"value":891},", и команда будет выводить содержимое только директории ",{"type":672,"tag":686,"props":893,"children":895},{"className":894},[],[896],{"type":677,"value":705},{"type":677,"value":898},", а не домашней.",{"data":900,"body":901},{},{"type":669,"children":902},[903],{"type":672,"tag":673,"props":904,"children":905},{},[906,908,914,916,921,923,929],{"type":677,"value":907},"Ключевой момент — отличать “запись строки в файл” (",{"type":672,"tag":686,"props":909,"children":911},{"className":910},[],[912],{"type":677,"value":913},">>",{"type":677,"value":915},") от “исполнения файла” (",{"type":672,"tag":686,"props":917,"children":919},{"className":918},[],[920],{"type":677,"value":729},{"type":677,"value":922},"), а также понимать, что ",{"type":672,"tag":686,"props":924,"children":926},{"className":925},[],[927],{"type":677,"value":928},"chmod +x",{"type":677,"value":930}," лишь добавляет право исполнения и не добавляет интерпретатор; интерпретатор обычно задается shebang или правилами оболочки при ошибке формата выполнения.",{"data":932,"body":933},{},{"type":669,"children":934},[935],{"type":672,"tag":673,"props":936,"children":937},{},[938,940,945,946,951,952,957,958,963,964,969],{"type":677,"value":939},"Правильный ответ: 1 - последовательность создает в домашней директории папку ",{"type":672,"tag":686,"props":941,"children":943},{"className":942},[],[944],{"type":677,"value":705},{"type":677,"value":707},{"type":672,"tag":686,"props":947,"children":949},{"className":948},[],[950],{"type":677,"value":713},{"type":677,"value":715},{"type":672,"tag":686,"props":953,"children":955},{"className":954},[],[956],{"type":677,"value":721},{"type":677,"value":723},{"type":672,"tag":686,"props":959,"children":961},{"className":960},[],[962],{"type":677,"value":729},{"type":677,"value":731},{"type":672,"tag":686,"props":965,"children":967},{"className":966},[],[968],{"type":677,"value":705},{"type":677,"value":738},{"data":971,"body":972},{},{"type":669,"children":973},[974,994,1003,1026,1035,1078,1087,1207,1219,1228,1253,1262,1288,1297,1346,1351,1383,1388],{"type":672,"tag":673,"props":975,"children":976},{},[977,979,985,987,992],{"type":677,"value":978},"Ниже приведено последовательное объяснение каждой строки, включая смысл операторов ",{"type":672,"tag":686,"props":980,"children":982},{"className":981},[],[983],{"type":677,"value":984},"&&",{"type":677,"value":986}," и ",{"type":672,"tag":686,"props":988,"children":990},{"className":989},[],[991],{"type":677,"value":913},{"type":677,"value":993},".",{"type":672,"tag":679,"props":995,"children":998},{"className":996,"code":997,"language":677},[682],"cd ~\n",[999],{"type":672,"tag":686,"props":1000,"children":1001},{"__ignoreMap":688},[1002],{"type":677,"value":997},{"type":672,"tag":1004,"props":1005,"children":1006},"ul",{},[1007,1013],{"type":672,"tag":1008,"props":1009,"children":1010},"li",{},[1011],{"type":677,"value":1012},"Происходит переход в домашний каталог текущего пользователя.",{"type":672,"tag":1008,"props":1014,"children":1015},{},[1016,1018,1024],{"type":677,"value":1017},"Символ ",{"type":672,"tag":686,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":677,"value":1023},"~",{"type":677,"value":1025}," разворачивается оболочкой в путь домашней директории.",{"type":672,"tag":679,"props":1027,"children":1030},{"className":1028,"code":1029,"language":677},[682],"mkdir foo\n",[1031],{"type":672,"tag":686,"props":1032,"children":1033},{"__ignoreMap":688},[1034],{"type":677,"value":1029},{"type":672,"tag":1004,"props":1036,"children":1037},{},[1038,1066],{"type":672,"tag":1008,"props":1039,"children":1040},{},[1041,1043,1048,1050,1056,1058,1064],{"type":677,"value":1042},"Создается директория ",{"type":672,"tag":686,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":677,"value":705},{"type":677,"value":1049}," в текущем каталоге (после ",{"type":672,"tag":686,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":677,"value":1055},"cd ~",{"type":677,"value":1057}," — это ",{"type":672,"tag":686,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":677,"value":1063},"~/foo",{"type":677,"value":1065},").",{"type":672,"tag":1008,"props":1067,"children":1068},{},[1069,1071,1077],{"type":677,"value":1070},"Если директория уже существует, команда обычно завершится ошибкой (в базовом варианте без ",{"type":672,"tag":686,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":677,"value":1076},"-p",{"type":677,"value":1065},{"type":672,"tag":679,"props":1079,"children":1082},{"className":1080,"code":1081,"language":677},[682],"touch bar && echo \"ls foo\" >> bar\n",[1083],{"type":672,"tag":686,"props":1084,"children":1085},{"__ignoreMap":688},[1086],{"type":677,"value":1081},{"type":672,"tag":1004,"props":1088,"children":1089},{},[1090,1121,1146],{"type":672,"tag":1008,"props":1091,"children":1092},{},[1093,1099,1101],{"type":672,"tag":686,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":677,"value":1098},"touch bar",{"type":677,"value":1100},":\n",{"type":672,"tag":1004,"props":1102,"children":1103},{},[1104,1116],{"type":672,"tag":1008,"props":1105,"children":1106},{},[1107,1109,1114],{"type":677,"value":1108},"создает файл ",{"type":672,"tag":686,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":677,"value":713},{"type":677,"value":1115},", если его не было;",{"type":672,"tag":1008,"props":1117,"children":1118},{},[1119],{"type":677,"value":1120},"либо обновляет временные метки, если файл уже существует.",{"type":672,"tag":1008,"props":1122,"children":1123},{},[1124,1129,1130],{"type":672,"tag":686,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":677,"value":984},{"type":677,"value":1100},{"type":672,"tag":1004,"props":1131,"children":1132},{},[1133],{"type":672,"tag":1008,"props":1134,"children":1135},{},[1136,1138,1144],{"type":677,"value":1137},"правая команда запускается только при успешном выполнении левой (то есть когда код завершения ",{"type":672,"tag":686,"props":1139,"children":1141},{"className":1140},[],[1142],{"type":677,"value":1143},"touch",{"type":677,"value":1145}," равен 0).",{"type":672,"tag":1008,"props":1147,"children":1148},{},[1149,1155,1156],{"type":672,"tag":686,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":677,"value":1154},"echo \"ls foo\" >> bar",{"type":677,"value":1100},{"type":672,"tag":1004,"props":1157,"children":1158},{},[1159,1177,1195],{"type":672,"tag":1008,"props":1160,"children":1161},{},[1162,1168,1170,1175],{"type":672,"tag":686,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":677,"value":1167},"echo",{"type":677,"value":1169}," печатает строку ",{"type":672,"tag":686,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":677,"value":721},{"type":677,"value":1176}," в стандартный вывод;",{"type":672,"tag":1008,"props":1178,"children":1179},{},[1180,1186,1188,1193],{"type":672,"tag":686,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":677,"value":1185},">> bar",{"type":677,"value":1187}," перенаправляет этот вывод в файл ",{"type":672,"tag":686,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":677,"value":713},{"type":677,"value":1194}," в режиме добавления (append), то есть строка дописывается в конец файла;",{"type":672,"tag":1008,"props":1196,"children":1197},{},[1198,1200,1205],{"type":677,"value":1199},"если файла ",{"type":672,"tag":686,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":677,"value":713},{"type":677,"value":1206}," по какой-то причине нет, он будет создан при открытии на добавление.",{"type":672,"tag":673,"props":1208,"children":1209},{},[1210,1212,1217],{"type":677,"value":1211},"В итоге содержимое ",{"type":672,"tag":686,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":677,"value":713},{"type":677,"value":1218}," становится таким (как минимум одна строка, без shebang):",{"type":672,"tag":679,"props":1220,"children":1223},{"className":1221,"code":1222,"language":677},[682],"ls foo\n",[1224],{"type":672,"tag":686,"props":1225,"children":1226},{"__ignoreMap":688},[1227],{"type":677,"value":1222},{"type":672,"tag":673,"props":1229,"children":1230},{},[1231,1233,1238,1239,1244,1246,1251],{"type":677,"value":1232},"Важно понимать, что ",{"type":672,"tag":686,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":677,"value":1098},{"type":677,"value":986},{"type":672,"tag":686,"props":1240,"children":1242},{"className":1241},[],[1243],{"type":677,"value":1185},{"type":677,"value":1245}," могут привести к тому, что строка ",{"type":672,"tag":686,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":677,"value":721},{"type":677,"value":1252}," будет добавлена повторно при повторном запуске фрагмента (то есть появится несколько одинаковых строк).",{"type":672,"tag":679,"props":1254,"children":1257},{"className":1255,"code":1256,"language":677},[682],"chmod +x bar\n",[1258],{"type":672,"tag":686,"props":1259,"children":1260},{"__ignoreMap":688},[1261],{"type":677,"value":1256},{"type":672,"tag":1004,"props":1263,"children":1264},{},[1265,1276],{"type":672,"tag":1008,"props":1266,"children":1267},{},[1268,1270,1275],{"type":677,"value":1269},"Добавляется право исполнения для файла ",{"type":672,"tag":686,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":677,"value":713},{"type":677,"value":993},{"type":672,"tag":1008,"props":1277,"children":1278},{},[1279,1281,1286],{"type":677,"value":1280},"В практическом смысле это означает, что файл можно запускать как ",{"type":672,"tag":686,"props":1282,"children":1284},{"className":1283},[],[1285],{"type":677,"value":729},{"type":677,"value":1287}," (при наличии прав и корректного формата исполнения).",{"type":672,"tag":679,"props":1289,"children":1292},{"className":1290,"code":1291,"language":677},[682],"./bar\n",[1293],{"type":672,"tag":686,"props":1294,"children":1295},{"__ignoreMap":688},[1296],{"type":677,"value":1291},{"type":672,"tag":1004,"props":1298,"children":1299},{},[1300,1312],{"type":672,"tag":1008,"props":1301,"children":1302},{},[1303,1305,1310],{"type":677,"value":1304},"Выполняется файл ",{"type":672,"tag":686,"props":1306,"children":1308},{"className":1307},[],[1309],{"type":677,"value":713},{"type":677,"value":1311}," из текущей директории.",{"type":672,"tag":1008,"props":1313,"children":1314},{},[1315,1317,1323,1325,1331,1333,1338,1340,1345],{"type":677,"value":1316},"Префикс ",{"type":672,"tag":686,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":677,"value":1322},"./",{"type":677,"value":1324}," важен: без него оболочка ищет команду по каталогам из ",{"type":672,"tag":686,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":677,"value":1330},"PATH",{"type":677,"value":1332},", а ",{"type":672,"tag":686,"props":1334,"children":1336},{"className":1335},[],[1337],{"type":677,"value":713},{"type":677,"value":1339}," обычно не лежит в ",{"type":672,"tag":686,"props":1341,"children":1343},{"className":1342},[],[1344],{"type":677,"value":1330},{"type":677,"value":993},{"type":672,"tag":673,"props":1347,"children":1348},{},[1349],{"type":677,"value":1350},"Ожидаемое поведение в типичном интерактивном bash-сеансе:",{"type":672,"tag":1004,"props":1352,"children":1353},{},[1354,1359,1364],{"type":672,"tag":1008,"props":1355,"children":1356},{},[1357],{"type":677,"value":1358},"оболочка попытается запустить файл как программу;",{"type":672,"tag":1008,"props":1360,"children":1361},{},[1362],{"type":677,"value":1363},"если файл является обычным текстом без shebang, может произойти попытка выполнить его как сценарий оболочки;",{"type":672,"tag":1008,"props":1365,"children":1366},{},[1367,1369,1374,1376,1381],{"type":677,"value":1368},"выполняется команда ",{"type":672,"tag":686,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":677,"value":721},{"type":677,"value":1375},", которая выводит содержимое ",{"type":672,"tag":686,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":677,"value":705},{"type":677,"value":1382}," (здесь — пусто).",{"type":672,"tag":673,"props":1384,"children":1385},{},[1386],{"type":677,"value":1387},"Таблица “что создается и меняется”:",{"type":672,"tag":1389,"props":1390,"children":1391},"table",{},[1392,1421],{"type":672,"tag":1393,"props":1394,"children":1395},"thead",{},[1396],{"type":672,"tag":1397,"props":1398,"children":1399},"tr",{},[1400,1406,1411,1416],{"type":672,"tag":1401,"props":1402,"children":1403},"th",{},[1404],{"type":677,"value":1405},"Шаг",{"type":672,"tag":1401,"props":1407,"children":1408},{},[1409],{"type":677,"value":1410},"Команда",{"type":672,"tag":1401,"props":1412,"children":1413},{},[1414],{"type":677,"value":1415},"Изменение",{"type":672,"tag":1401,"props":1417,"children":1418},{},[1419],{"type":677,"value":1420},"Итог",{"type":672,"tag":1422,"props":1423,"children":1424},"tbody",{},[1425,1452,1485,1517,1555,1587],{"type":672,"tag":1397,"props":1426,"children":1427},{},[1428,1434,1442,1447],{"type":672,"tag":1429,"props":1430,"children":1431},"td",{},[1432],{"type":677,"value":1433},"1",{"type":672,"tag":1429,"props":1435,"children":1436},{},[1437],{"type":672,"tag":686,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":677,"value":1055},{"type":672,"tag":1429,"props":1443,"children":1444},{},[1445],{"type":677,"value":1446},"Меняется текущий каталог",{"type":672,"tag":1429,"props":1448,"children":1449},{},[1450],{"type":677,"value":1451},"Текущий каталог = home",{"type":672,"tag":1397,"props":1453,"children":1454},{},[1455,1460,1469,1474],{"type":672,"tag":1429,"props":1456,"children":1457},{},[1458],{"type":677,"value":1459},"2",{"type":672,"tag":1429,"props":1461,"children":1462},{},[1463],{"type":672,"tag":686,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":677,"value":1468},"mkdir foo",{"type":672,"tag":1429,"props":1470,"children":1471},{},[1472],{"type":677,"value":1473},"Файловая система",{"type":672,"tag":1429,"props":1475,"children":1476},{},[1477,1479],{"type":677,"value":1478},"Появляется ",{"type":672,"tag":686,"props":1480,"children":1482},{"className":1481},[],[1483],{"type":677,"value":1484},"~/foo/",{"type":672,"tag":1397,"props":1486,"children":1487},{},[1488,1493,1501,1505],{"type":672,"tag":1429,"props":1489,"children":1490},{},[1491],{"type":677,"value":1492},"3",{"type":672,"tag":1429,"props":1494,"children":1495},{},[1496],{"type":672,"tag":686,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":677,"value":1098},{"type":672,"tag":1429,"props":1502,"children":1503},{},[1504],{"type":677,"value":1473},{"type":672,"tag":1429,"props":1506,"children":1507},{},[1508,1509,1515],{"type":677,"value":1478},{"type":672,"tag":686,"props":1510,"children":1512},{"className":1511},[],[1513],{"type":677,"value":1514},"~/bar",{"type":677,"value":1516}," (пустой) или обновляются метки",{"type":672,"tag":1397,"props":1518,"children":1519},{},[1520,1525,1533,1538],{"type":672,"tag":1429,"props":1521,"children":1522},{},[1523],{"type":677,"value":1524},"4",{"type":672,"tag":1429,"props":1526,"children":1527},{},[1528],{"type":672,"tag":686,"props":1529,"children":1531},{"className":1530},[],[1532],{"type":677,"value":1154},{"type":672,"tag":1429,"props":1534,"children":1535},{},[1536],{"type":677,"value":1537},"Содержимое файла",{"type":672,"tag":1429,"props":1539,"children":1540},{},[1541,1543,1548,1550],{"type":677,"value":1542},"В ",{"type":672,"tag":686,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":677,"value":1514},{"type":677,"value":1549}," дописывается строка ",{"type":672,"tag":686,"props":1551,"children":1553},{"className":1552},[],[1554],{"type":677,"value":721},{"type":672,"tag":1397,"props":1556,"children":1557},{},[1558,1563,1572,1577],{"type":672,"tag":1429,"props":1559,"children":1560},{},[1561],{"type":677,"value":1562},"5",{"type":672,"tag":1429,"props":1564,"children":1565},{},[1566],{"type":672,"tag":686,"props":1567,"children":1569},{"className":1568},[],[1570],{"type":677,"value":1571},"chmod +x bar",{"type":672,"tag":1429,"props":1573,"children":1574},{},[1575],{"type":677,"value":1576},"Права доступа",{"type":672,"tag":1429,"props":1578,"children":1579},{},[1580,1585],{"type":672,"tag":686,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":677,"value":1514},{"type":677,"value":1586}," становится исполняемым",{"type":672,"tag":1397,"props":1588,"children":1589},{},[1590,1595,1603,1608],{"type":672,"tag":1429,"props":1591,"children":1592},{},[1593],{"type":677,"value":1594},"6",{"type":672,"tag":1429,"props":1596,"children":1597},{},[1598],{"type":672,"tag":686,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":677,"value":729},{"type":672,"tag":1429,"props":1604,"children":1605},{},[1606],{"type":677,"value":1607},"Выполнение",{"type":672,"tag":1429,"props":1609,"children":1610},{},[1611,1613],{"type":677,"value":1612},"Печатается содержимое ",{"type":672,"tag":686,"props":1614,"children":1616},{"className":1615},[],[1617],{"type":677,"value":1484},{"data":1619,"body":1620},{},{"type":669,"children":1621},[1622,1634],{"type":672,"tag":673,"props":1623,"children":1624},{},[1625,1627,1632],{"type":677,"value":1626},"Пример “более надежного” варианта файла ",{"type":672,"tag":686,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":677,"value":713},{"type":677,"value":1633},":",{"type":672,"tag":679,"props":1635,"children":1638},{"className":1636,"code":1637,"language":677},[682],"#!/bin/sh\nls foo\n",[1639],{"type":672,"tag":686,"props":1640,"children":1641},{"__ignoreMap":688},[1642],{"type":677,"value":1637},{"data":1644,"body":1645},{},{"type":669,"children":1646},[1647,1660,1673],{"type":672,"tag":673,"props":1648,"children":1649},{},[1650,1652,1658],{"type":677,"value":1651},"Shebang — это первая строка файла вида ",{"type":672,"tag":686,"props":1653,"children":1655},{"className":1654},[],[1656],{"type":677,"value":1657},"#!/path/to/interpreter",{"type":677,"value":1659},", которая подсказывает системе, какой интерпретатор должен выполнять сценарий. Если shebang отсутствует, система не имеет явной подсказки, чем интерпретировать текстовый файл.",{"type":672,"tag":673,"props":1661,"children":1662},{},[1663,1665,1671],{"type":677,"value":1664},"В Linux при попытке выполнить “неподходящий формат” файла ядро может вернуть ошибку формата выполнения (часто это связывают с ",{"type":672,"tag":686,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":677,"value":1670},"Exec format error",{"type":677,"value":1672},"). После этого поведение зависит от оболочки:",{"type":672,"tag":1004,"props":1674,"children":1675},{},[1676,1681],{"type":672,"tag":1008,"props":1677,"children":1678},{},[1679],{"type":677,"value":1680},"некоторые оболочки пытаются повторно запустить файл через интерпретатор shell (условно “прочитать как команды”);",{"type":672,"tag":1008,"props":1682,"children":1683},{},[1684],{"type":677,"value":1685},"другие оболочки или среды запуска могут просто показать ошибку и завершиться.",{"data":1687,"body":1688},{},{"type":669,"children":1689},[1690],{"type":672,"tag":673,"props":1691,"children":1692},{},[1693],{"type":677,"value":25},{"data":1695,"body":1696},{},{"type":669,"children":1697},[1698,1718,1729,1753,1765,1811,1816],{"type":672,"tag":673,"props":1699,"children":1700},{},[1701,1703,1708,1710,1716],{"type":677,"value":1702},"Оператор ",{"type":672,"tag":686,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":677,"value":984},{"type":677,"value":1709}," реализует “условную цепочку”: правая команда выполняется только если левая завершилась успешно. Это часто используется как короткая форма вместо ",{"type":672,"tag":686,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":677,"value":1715},"if",{"type":677,"value":1717},", когда нужно продолжать работу только при успехе.",{"type":672,"tag":673,"props":1719,"children":1720},{},[1721,1722,1727],{"type":677,"value":1702},{"type":672,"tag":686,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":677,"value":913},{"type":677,"value":1728}," — это перенаправление вывода в файл в режиме добавления:",{"type":672,"tag":1004,"props":1730,"children":1731},{},[1732,1743],{"type":672,"tag":1008,"props":1733,"children":1734},{},[1735,1741],{"type":672,"tag":686,"props":1736,"children":1738},{"className":1737},[],[1739],{"type":677,"value":1740},">",{"type":677,"value":1742}," перезаписывает файл целиком;",{"type":672,"tag":1008,"props":1744,"children":1745},{},[1746,1751],{"type":672,"tag":686,"props":1747,"children":1749},{"className":1748},[],[1750],{"type":677,"value":913},{"type":677,"value":1752}," дописывает в конец.",{"type":672,"tag":673,"props":1754,"children":1755},{},[1756,1758,1763],{"type":677,"value":1757},"Команда ",{"type":672,"tag":686,"props":1759,"children":1761},{"className":1760},[],[1762],{"type":677,"value":928},{"type":677,"value":1764}," меняет права доступа:",{"type":672,"tag":1004,"props":1766,"children":1767},{},[1768,1779],{"type":672,"tag":1008,"props":1769,"children":1770},{},[1771,1777],{"type":672,"tag":686,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":677,"value":1776},"x",{"type":677,"value":1778}," — бит исполнения;",{"type":672,"tag":1008,"props":1780,"children":1781},{},[1782,1788,1790,1795,1797,1802,1804,1809],{"type":672,"tag":686,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":677,"value":1787},"+",{"type":677,"value":1789}," — добавление бита к текущим правам.\nПри этом ",{"type":672,"tag":686,"props":1791,"children":1793},{"className":1792},[],[1794],{"type":677,"value":831},{"type":677,"value":1796}," не меняет содержимое файла: если в ",{"type":672,"tag":686,"props":1798,"children":1800},{"className":1799},[],[1801],{"type":677,"value":713},{"type":677,"value":1803}," записана строка ",{"type":672,"tag":686,"props":1805,"children":1807},{"className":1806},[],[1808],{"type":677,"value":721},{"type":677,"value":1810},", то она такой и остается.",{"type":672,"tag":673,"props":1812,"children":1813},{},[1814],{"type":677,"value":1815},"Схема потока выполнения:",{"type":672,"tag":679,"props":1817,"children":1820},{"className":1818,"code":1819,"language":677},[682],"cd ~\n  |\n  v\nmkdir foo\n  |\n  v\ntouch bar  --(успех)-->  echo \"ls foo\" >> bar\n   |                      |\n   '---(ошибка)-----------'  (echo пропускается)\n  |\n  v\nchmod +x bar\n  |\n  v\n./bar  -> (часто) попытка интерпретации как shell-скрипта -> ls foo\n",[1821],{"type":672,"tag":686,"props":1822,"children":1823},{"__ignoreMap":688},[1824],{"type":677,"value":1819},{"data":1826,"body":1827},{},{"type":669,"children":1828},[1829],{"type":672,"tag":673,"props":1830,"children":1831},{},[1832,1834,1839,1840,1845,1847,1852,1854,1859,1861,1866,1868,1873],{"type":677,"value":1833},"Кратко: создается директория ",{"type":672,"tag":686,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":677,"value":705},{"type":677,"value":753},{"type":672,"tag":686,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":677,"value":713},{"type":677,"value":1846},", в ",{"type":672,"tag":686,"props":1848,"children":1850},{"className":1849},[],[1851],{"type":677,"value":713},{"type":677,"value":1853}," дописывается команда ",{"type":672,"tag":686,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":677,"value":721},{"type":677,"value":1860},", затем ",{"type":672,"tag":686,"props":1862,"children":1864},{"className":1863},[],[1865],{"type":677,"value":713},{"type":677,"value":1867}," становится исполняемым и запускается; чаще всего выводится содержимое ",{"type":672,"tag":686,"props":1869,"children":1871},{"className":1870},[],[1872],{"type":677,"value":705},{"type":677,"value":1874}," (пусто), а отсутствие shebang является потенциальной проблемой переносимости, хотя в bash нередко “работает”.",1775735655417]