[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/shell-variables":3,"mdc--8kbdl6-key":1049,"mdc-p7q8cj-key":1083,"mdc-p9zcl7-key":1106,"mdc--mu8k0b-key":1123,"mdc--z5ino0-key":1148,"mdc-j2naha-key":1178,"mdc-v02jwz-key":1221,"mdc--uvo6d-key":1245,"mdc-zezbva-key":1262,"related-/guides/linux/bash-scripting-basics,/guides/linux/command-line-tips,/errors/linux/command-not-found":1299},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":982,"code":982,"createdAt":983,"description":984,"difficulty":985,"draft":986,"estimatedTime":987,"extension":988,"faq":989,"howToSteps":1002,"howToTotalTime":1017,"image":982,"keywords":1018,"locale":1029,"meta":1030,"navigation":123,"path":1031,"platform":1032,"related":1033,"section":1037,"seo":1038,"severity":982,"stem":1039,"summary":1040,"tags":1041,"twitterCreator":982,"twitterSite":982,"type":1047,"updatedAt":983,"__hash__":1048},"content_ru/guides/linux/shell-variables.md","Переменные оболочки Linux: подробное руководство по использованию",[7,8,9,10],"Bash 4.0+","Zsh 5.0+","Ubuntu 20.04+","CentOS 8+","FixPedia Team",{"type":13,"value":14,"toc":965},"minimark",[15,20,24,28,66,70,86,193,207,211,221,357,361,368,440,443,460,464,473,476,506,513,519,612,616,668,671,675,678,841,845,879,883,961],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23],"p",{},"Переменные оболочки (shell variables) — это фундаментальный механизм Linux-терминала, позволяющий хранить и повторно использовать данные: пути к файлам, настройки программ, результаты команд. Они являются основой для написания эффективных скриптов на Bash/Zsh, настройки среды разработки и автоматизации рутинных задач. Понимание работы с переменными кардинально повышает эффективность работы в командной строке.",[16,25,27],{"id":26},"требования-подготовка","Требования / Подготовка",[29,30,31,35,38,46],"ul",{},[32,33,34],"li",{},"Доступ к терминалу Linux (любого дистрибутива: Ubuntu, Fedora, Debian, Arch и т.д.).",[32,36,37],{},"Базовое знакомство с командной строкой.",[32,39,40,41,45],{},"Используемая оболочка (shell) по умолчанию — Bash (рекомендуется) или Zsh. Проверить можно командой ",[42,43,44],"code",{},"echo $SHELL",".",[32,47,48,49,52,53,52,56,52,59,52,62,65],{},"Права на выполнение стандартных команд (",[42,50,51],{},"echo",", ",[42,54,55],{},"export",[42,57,58],{},"unset",[42,60,61],{},"set",[42,63,64],{},"env",").",[16,67,69],{"id":68},"шаг-1-объявление-и-присвоение-значения-переменной","Шаг 1: Объявление и присвоение значения переменной",[21,71,72,73,77,78,81,82,85],{},"Создание переменной выполняется простым присваиванием. ",[74,75,76],"strong",{},"Крайне важно:"," вокруг знака равенства ",[42,79,80],{},"="," не должно быть пробелов. Имя переменной может содержать буквы, цифры и символ подчёркивания (",[42,83,84],{},"_","), но не может начинаться с цифры.",[87,88,93],"pre",{"className":89,"code":90,"language":91,"meta":92,"style":92},"language-bash shiki shiki-themes github-light github-dark","# Простое объявление\nGREETING=\"Привет, мир!\"\n\n# Можно присвоить результат команды (используем команду substitution)\nCURRENT_DATE=$(date +%Y-%m-%d)\nUSER_HOME=$(echo $HOME) # $HOME — уже существующая системная переменная\n\n# Пример с числом (числа в shell — это тоже строки, но для арифметики есть специальный синтаксис)\nCOUNTER=10\n","bash","",[42,94,95,104,118,125,131,152,171,176,182],{"__ignoreMap":92},[96,97,100],"span",{"class":98,"line":99},"line",1,[96,101,103],{"class":102},"sJ8bj","# Простое объявление\n",[96,105,107,111,114],{"class":98,"line":106},2,[96,108,110],{"class":109},"sVt8B","GREETING",[96,112,80],{"class":113},"szBVR",[96,115,117],{"class":116},"sZZnC","\"Привет, мир!\"\n",[96,119,121],{"class":98,"line":120},3,[96,122,124],{"emptyLinePlaceholder":123},true,"\n",[96,126,128],{"class":98,"line":127},4,[96,129,130],{"class":102},"# Можно присвоить результат команды (используем команду substitution)\n",[96,132,134,137,139,142,146,149],{"class":98,"line":133},5,[96,135,136],{"class":109},"CURRENT_DATE",[96,138,80],{"class":113},[96,140,141],{"class":109},"$(",[96,143,145],{"class":144},"sScJk","date",[96,147,148],{"class":116}," +%Y-%m-%d",[96,150,151],{"class":109},")\n",[96,153,155,158,160,162,165,168],{"class":98,"line":154},6,[96,156,157],{"class":109},"USER_HOME",[96,159,80],{"class":113},[96,161,141],{"class":109},[96,163,51],{"class":164},"sj4cs",[96,166,167],{"class":109}," $HOME) ",[96,169,170],{"class":102},"# $HOME — уже существующая системная переменная\n",[96,172,174],{"class":98,"line":173},7,[96,175,124],{"emptyLinePlaceholder":123},[96,177,179],{"class":98,"line":178},8,[96,180,181],{"class":102},"# Пример с числом (числа в shell — это тоже строки, но для арифметики есть специальный синтаксис)\n",[96,183,185,188,190],{"class":98,"line":184},9,[96,186,187],{"class":109},"COUNTER",[96,189,80],{"class":113},[96,191,192],{"class":116},"10\n",[194,195,196],"blockquote",{},[21,197,198,199,202,203,206],{},"💡 ",[74,200,201],{},"Совет:"," Всегда заключайте значение в кавычки (",[42,204,205],{},"\"","), особенно если оно содержит пробелы или специальные символы. Это предотвратит ошибки интерпретации.",[16,208,210],{"id":209},"шаг-2-чтение-и-использование-значения","Шаг 2: Чтение и использование значения",[21,212,213,214,217,218,45],{},"Чтобы получить значение переменной, поставьте перед её именем символ доллара ",[42,215,216],{},"$",". Для сложных случаев (например, чтобы отделить имя переменной от последующего текста) используйте фигурные скобки ",[42,219,220],{},"${}",[87,222,224],{"className":89,"code":223,"language":91,"meta":92,"style":92},"# Простое чтение\necho $GREETING\n# Вывод: Привет, мир!\n\n# Использование в строке с ${}\necho \"Сегодня: ${CURRENT_DATE}, пользователь: $USER\"\n# Вывод: Сегодня: 2026-02-17, пользователь: fixpedia\n\n# Конкатенация (сложение строк)\nPATH_SUFFIX=\"/myapp/bin\"\nFULL_PATH=\"/usr/local\"$PATH_SUFFIX\necho $FULL_PATH\n# Вывод: /usr/local/myapp/bin\n\n# Использование в команде\nLIST_FILE=\"filelist.txt\"\nwc -l $LIST_FILE\n",[42,225,226,231,238,243,247,252,270,275,279,284,295,309,317,323,328,334,345],{"__ignoreMap":92},[96,227,228],{"class":98,"line":99},[96,229,230],{"class":102},"# Простое чтение\n",[96,232,233,235],{"class":98,"line":106},[96,234,51],{"class":164},[96,236,237],{"class":109}," $GREETING\n",[96,239,240],{"class":98,"line":120},[96,241,242],{"class":102},"# Вывод: Привет, мир!\n",[96,244,245],{"class":98,"line":127},[96,246,124],{"emptyLinePlaceholder":123},[96,248,249],{"class":98,"line":133},[96,250,251],{"class":102},"# Использование в строке с ${}\n",[96,253,254,256,259,261,264,267],{"class":98,"line":154},[96,255,51],{"class":164},[96,257,258],{"class":116}," \"Сегодня: ${",[96,260,136],{"class":109},[96,262,263],{"class":116},"}, пользователь: ",[96,265,266],{"class":109},"$USER",[96,268,269],{"class":116},"\"\n",[96,271,272],{"class":98,"line":173},[96,273,274],{"class":102},"# Вывод: Сегодня: 2026-02-17, пользователь: fixpedia\n",[96,276,277],{"class":98,"line":178},[96,278,124],{"emptyLinePlaceholder":123},[96,280,281],{"class":98,"line":184},[96,282,283],{"class":102},"# Конкатенация (сложение строк)\n",[96,285,287,290,292],{"class":98,"line":286},10,[96,288,289],{"class":109},"PATH_SUFFIX",[96,291,80],{"class":113},[96,293,294],{"class":116},"\"/myapp/bin\"\n",[96,296,298,301,303,306],{"class":98,"line":297},11,[96,299,300],{"class":109},"FULL_PATH",[96,302,80],{"class":113},[96,304,305],{"class":116},"\"/usr/local\"",[96,307,308],{"class":109},"$PATH_SUFFIX\n",[96,310,312,314],{"class":98,"line":311},12,[96,313,51],{"class":164},[96,315,316],{"class":109}," $FULL_PATH\n",[96,318,320],{"class":98,"line":319},13,[96,321,322],{"class":102},"# Вывод: /usr/local/myapp/bin\n",[96,324,326],{"class":98,"line":325},14,[96,327,124],{"emptyLinePlaceholder":123},[96,329,331],{"class":98,"line":330},15,[96,332,333],{"class":102},"# Использование в команде\n",[96,335,337,340,342],{"class":98,"line":336},16,[96,338,339],{"class":109},"LIST_FILE",[96,341,80],{"class":113},[96,343,344],{"class":116},"\"filelist.txt\"\n",[96,346,348,351,354],{"class":98,"line":347},17,[96,349,350],{"class":144},"wc",[96,352,353],{"class":164}," -l",[96,355,356],{"class":109}," $LIST_FILE\n",[16,358,360],{"id":359},"шаг-3-экспорт-переменных-сделать-видимой-для-других-программ","Шаг 3: Экспорт переменных (сделать видимой для других программ)",[21,362,363,364,367],{},"По умолчанию переменная существует только в текущей оболочке. Чтобы она стала ",[74,365,366],{},"переменной окружения"," (environment variable) и была доступна для любых программ и скриптов, запускаемых из этой оболочки, её нужно экспортировать.",[87,369,371],{"className":89,"code":370,"language":91,"meta":92,"style":92},"# 1. Объявить\nMY_APP_CONFIG=\"/etc/myapp/config.conf\"\n# 2. Экспортировать\nexport MY_APP_CONFIG\n\n# Проверить, что переменная окружения\nenv | grep MY_APP_CONFIG\n# Вывод: MY_APP_CONFIG=/etc/myapp/config.conf\n\n# Теперь любой скрипт или программа, запущенная из этого терминала,\n# сможет прочитать $MY_APP_CONFIG.\n",[42,372,373,378,388,393,400,404,409,421,426,430,435],{"__ignoreMap":92},[96,374,375],{"class":98,"line":99},[96,376,377],{"class":102},"# 1. Объявить\n",[96,379,380,383,385],{"class":98,"line":106},[96,381,382],{"class":109},"MY_APP_CONFIG",[96,384,80],{"class":113},[96,386,387],{"class":116},"\"/etc/myapp/config.conf\"\n",[96,389,390],{"class":98,"line":120},[96,391,392],{"class":102},"# 2. Экспортировать\n",[96,394,395,397],{"class":98,"line":127},[96,396,55],{"class":113},[96,398,399],{"class":109}," MY_APP_CONFIG\n",[96,401,402],{"class":98,"line":133},[96,403,124],{"emptyLinePlaceholder":123},[96,405,406],{"class":98,"line":154},[96,407,408],{"class":102},"# Проверить, что переменная окружения\n",[96,410,411,413,416,419],{"class":98,"line":173},[96,412,64],{"class":144},[96,414,415],{"class":113}," |",[96,417,418],{"class":144}," grep",[96,420,399],{"class":116},[96,422,423],{"class":98,"line":178},[96,424,425],{"class":102},"# Вывод: MY_APP_CONFIG=/etc/myapp/config.conf\n",[96,427,428],{"class":98,"line":184},[96,429,124],{"emptyLinePlaceholder":123},[96,431,432],{"class":98,"line":286},[96,433,434],{"class":102},"# Теперь любой скрипт или программа, запущенная из этого терминала,\n",[96,436,437],{"class":98,"line":297},[96,438,439],{"class":102},"# сможет прочитать $MY_APP_CONFIG.\n",[21,441,442],{},"Можно объявить и экспортировать переменную одной командой:",[87,444,446],{"className":89,"code":445,"language":91,"meta":92,"style":92},"export API_KEY=\"secret123\"\n",[42,447,448],{"__ignoreMap":92},[96,449,450,452,455,457],{"class":98,"line":99},[96,451,55],{"class":113},[96,453,454],{"class":109}," API_KEY",[96,456,80],{"class":113},[96,458,459],{"class":116},"\"secret123\"\n",[16,461,463],{"id":462},"шаг-4-специальные-типы-переменных","Шаг 4: Специальные типы переменных",[465,466,468,469,472],"h3",{"id":467},"_41-только-для-чтения-readonly","4.1. Только для чтения (",[42,470,471],{},"readonly",")",[21,474,475],{},"После объявления такой переменной её значение нельзя изменить или удалить. Полезно для констант.",[87,477,479],{"className":89,"code":478,"language":91,"meta":92,"style":92},"readonly APP_VERSION=\"2.1.0\"\nAPP_VERSION=\"3.0.0\" # Ошибка! bash: APP_VERSION: readonly variable\n",[42,480,481,493],{"__ignoreMap":92},[96,482,483,485,488,490],{"class":98,"line":99},[96,484,471],{"class":113},[96,486,487],{"class":109}," APP_VERSION",[96,489,80],{"class":113},[96,491,492],{"class":116},"\"2.1.0\"\n",[96,494,495,498,500,503],{"class":98,"line":106},[96,496,497],{"class":109},"APP_VERSION",[96,499,80],{"class":113},[96,501,502],{"class":116},"\"3.0.0\"",[96,504,505],{"class":102}," # Ошибка! bash: APP_VERSION: readonly variable\n",[465,507,509,510,472],{"id":508},"_42-локальные-переменные-в-функциях-local","4.2. Локальные переменные в функциях (",[42,511,512],{},"local",[21,514,515,516,518],{},"Внутри функции (или скрипта) переменная, объявленная как ",[42,517,512],{},", видна только внутри этой функции/скрипта и не затирает глобальную переменную с таким же именем.",[87,520,522],{"className":89,"code":521,"language":91,"meta":92,"style":92},"GLOBAL_VAR=\"я глобальная\"\n\nmy_function() {\n    local GLOBAL_VAR=\"я локальная\"\n    echo \"Внутри функции: $GLOBAL_VAR\"\n}\nmy_function\necho \"Снаружи функции: $GLOBAL_VAR\"\n\n# Вывод:\n# Внутри функции: я локальная\n# Снаружи функции: я глобальная\n",[42,523,524,534,538,546,559,572,577,582,593,597,602,607],{"__ignoreMap":92},[96,525,526,529,531],{"class":98,"line":99},[96,527,528],{"class":109},"GLOBAL_VAR",[96,530,80],{"class":113},[96,532,533],{"class":116},"\"я глобальная\"\n",[96,535,536],{"class":98,"line":106},[96,537,124],{"emptyLinePlaceholder":123},[96,539,540,543],{"class":98,"line":120},[96,541,542],{"class":144},"my_function",[96,544,545],{"class":109},"() {\n",[96,547,548,551,554,556],{"class":98,"line":127},[96,549,550],{"class":113},"    local",[96,552,553],{"class":109}," GLOBAL_VAR",[96,555,80],{"class":113},[96,557,558],{"class":116},"\"я локальная\"\n",[96,560,561,564,567,570],{"class":98,"line":133},[96,562,563],{"class":164},"    echo",[96,565,566],{"class":116}," \"Внутри функции: ",[96,568,569],{"class":109},"$GLOBAL_VAR",[96,571,269],{"class":116},[96,573,574],{"class":98,"line":154},[96,575,576],{"class":109},"}\n",[96,578,579],{"class":98,"line":173},[96,580,581],{"class":144},"my_function\n",[96,583,584,586,589,591],{"class":98,"line":178},[96,585,51],{"class":164},[96,587,588],{"class":116}," \"Снаружи функции: ",[96,590,569],{"class":109},[96,592,269],{"class":116},[96,594,595],{"class":98,"line":184},[96,596,124],{"emptyLinePlaceholder":123},[96,598,599],{"class":98,"line":286},[96,600,601],{"class":102},"# Вывод:\n",[96,603,604],{"class":98,"line":297},[96,605,606],{"class":102},"# Внутри функции: я локальная\n",[96,608,609],{"class":98,"line":311},[96,610,611],{"class":102},"# Снаружи функции: я глобальная\n",[16,613,615],{"id":614},"шаг-5-просмотр-и-удаление-переменных","Шаг 5: Просмотр и удаление переменных",[29,617,618,626,638],{},[32,619,620,623,624],{},[74,621,622],{},"Просмотр всех переменных"," (локальных и окружения): ",[42,625,61],{},[32,627,628,631,632,634,635],{},[74,629,630],{},"Просмотр только переменных окружения",": ",[42,633,64],{}," или ",[42,636,637],{},"printenv",[32,639,640,631,643,646],{},[74,641,642],{},"Удаление переменной",[42,644,645],{},"unset ИМЯ_ПЕРЕМЕННОЙ",[87,647,649],{"className":89,"code":648,"language":91,"meta":92,"style":92},"unset GREETING\necho $GREETING # Вывод пустой строки\n",[42,650,651,658],{"__ignoreMap":92},[96,652,653,655],{"class":98,"line":99},[96,654,58],{"class":164},[96,656,657],{"class":116}," GREETING\n",[96,659,660,662,665],{"class":98,"line":106},[96,661,51],{"class":164},[96,663,664],{"class":109}," $GREETING ",[96,666,667],{"class":102},"# Вывод пустой строки\n",[669,670],"in-article-ad",{},[16,672,674],{"id":673},"шаг-6-работа-со-встроенными-и-специальными-переменными","Шаг 6: Работа со встроенными и специальными переменными",[21,676,677],{},"Оболочка предоставляет множество полезных встроенных переменных. Вот ключевые:",[679,680,681,698],"table",{},[682,683,684],"thead",{},[685,686,687,692,695],"tr",{},[688,689,691],"th",{"align":690},"left","Переменная",[688,693,694],{"align":690},"Значение",[688,696,697],{"align":690},"Пример использования",[699,700,701,717,733,751,766,781,796,811,826],"tbody",{},[685,702,703,709,712],{},[704,705,706],"td",{"align":690},[42,707,708],{},"$?",[704,710,711],{"align":690},"Код возврата последней выполненной команды (0 = успех)",[704,713,714],{"align":690},[42,715,716],{},"if [ $? -eq 0 ]; then echo \"OK\"; fi",[685,718,719,724,727],{},[704,720,721],{"align":690},[42,722,723],{},"$#",[704,725,726],{"align":690},"Количество аргументов, переданных скрипту/функции",[704,728,729,730],{"align":690},"Внутри скрипта: ",[42,731,732],{},"echo \"Аргументов: $#\"",[685,734,735,743,746],{},[704,736,737,52,740],{"align":690},[42,738,739],{},"$@",[42,741,742],{},"$*",[704,744,745],{"align":690},"Все аргументы, переданные скрипту/функции",[704,747,748],{"align":690},[42,749,750],{},"for arg in \"$@\"; do ...; done",[685,752,753,758,761],{},[704,754,755],{"align":690},[42,756,757],{},"$0",[704,759,760],{"align":690},"Имя самого скрипта или оболочки",[704,762,763],{"align":690},[42,764,765],{},"echo \"Запущен скрипт: $0\"",[685,767,768,773,776],{},[704,769,770],{"align":690},[42,771,772],{},"$$",[704,774,775],{"align":690},"PID (идентификатор процесса) текущей оболочки",[704,777,778],{"align":690},[42,779,780],{},"echo \"Мой PID: $$\"",[685,782,783,788,791],{},[704,784,785],{"align":690},[42,786,787],{},"$!",[704,789,790],{"align":690},"PID последнего фонового процесса",[704,792,793],{"align":690},[42,794,795],{},"sleep 10 & echo $!",[685,797,798,803,806],{},[704,799,800],{"align":690},[42,801,802],{},"$HOME",[704,804,805],{"align":690},"Домашний каталог текущего пользователя",[704,807,808],{"align":690},[42,809,810],{},"cd $HOME",[685,812,813,818,821],{},[704,814,815],{"align":690},[42,816,817],{},"$PWD",[704,819,820],{"align":690},"Текущий рабочий каталог",[704,822,823],{"align":690},[42,824,825],{},"echo \"Вы находитесь в: $PWD\"",[685,827,828,833,836],{},[704,829,830],{"align":690},[42,831,832],{},"$PATH",[704,834,835],{"align":690},"Список каталогов, где система ищет исполняемые файлы",[704,837,838],{"align":690},[42,839,840],{},"echo $PATH",[16,842,844],{"id":843},"проверка-результата","Проверка результата",[846,847,848,854,860,870,876],"ol",{},[32,849,850,851,45],{},"Создайте переменную: ",[42,852,853],{},"TEST_VAR=\"success\"",[32,855,856,857,45],{},"Экспортируйте её: ",[42,858,859],{},"export TEST_VAR",[32,861,862,863,866,867,45],{},"Запустите дочерний процесс (например, новый под-терминал или скрипт), который выводит ",[42,864,865],{},"echo $TEST_VAR",". Вы должны увидеть ",[42,868,869],{},"success",[32,871,872,873,45],{},"Удалите переменную: ",[42,874,875],{},"unset TEST_VAR",[32,877,878],{},"Повторите шаг 3 — вывод должен быть пустым.",[16,880,882],{"id":881},"возможные-проблемы","Возможные проблемы",[29,884,885,905,918,933,946],{},[32,886,887,894,895,897,898,901,902,45],{},[74,888,889,890,893],{},"Ошибка ",[42,891,892],{},"command not found"," при присваивании."," Причина: пробелы вокруг ",[42,896,80],{},". Решение: ",[42,899,900],{},"VAR=value",", а не ",[42,903,904],{},"VAR = value",[32,906,907,910,911,913,914,917],{},[74,908,909],{},"Переменная не видна в скрипте."," Причина: вы не экспортировали её (",[42,912,55],{},"). Решение: используйте ",[42,915,916],{},"export VAR"," перед запуском скрипта или объявите внутри скрипта.",[32,919,920,923,924,926,927,634,930,45],{},[74,921,922],{},"Пустое значение при чтении."," Причина: переменная не была объявлена, была удалена (",[42,925,58],{},") или её имя написано с ошибкой (регистр имеет значение!). Решение: проверьте имя командой ",[42,928,929],{},"echo $ИМЯ",[42,931,932],{},"env | grep ИМЯ",[32,934,935,938,939,634,942,945],{},[74,936,937],{},"Проблемы с пробелами и спецсимволами."," Причина: значение не заключено в кавычки. Решение: всегда используйте ",[42,940,941],{},"VAR=\"значение с пробелом\"",[42,943,944],{},"VAR='значение с $спецсимволом'"," (одинарные кавычки отключают подстановку).",[32,947,948,954,955,957,958,960],{},[74,949,950,953],{},[42,951,952],{},"readonly variable"," при попытке изменения."," Причина: переменная была объявлена как ",[42,956,471],{},". Решение: создайте новую переменную с другим именем или не используйте ",[42,959,471],{}," для тех, что нужно менять.",[962,963,964],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":92,"searchDepth":106,"depth":106,"links":966},[967,968,969,970,971,972,978,979,980,981],{"id":18,"depth":106,"text":19},{"id":26,"depth":106,"text":27},{"id":68,"depth":106,"text":69},{"id":209,"depth":106,"text":210},{"id":359,"depth":106,"text":360},{"id":462,"depth":106,"text":463,"children":973},[974,976],{"id":467,"depth":120,"text":975},"4.1. Только для чтения (readonly)",{"id":508,"depth":120,"text":977},"4.2. Локальные переменные в функциях (local)",{"id":614,"depth":106,"text":615},{"id":673,"depth":106,"text":674},{"id":843,"depth":106,"text":844},{"id":881,"depth":106,"text":882},null,"2026-02-17 11:43:00","Полное руководство по работе с переменными в Bash и других оболочках Linux. Узнайте о типах переменных, синтаксисе, примерах и лучших практиках. Пошаговые инструкции для начинающих и опытных.","easy",false,"15-20 мин","md",[990,993,996,999],{"question":991,"answer":992},"Как временно добавить переменную только для одной команды?","Используйте синтаксис `VAR=value command`. Например, `LANG=ru_RU.UTF-8 date`. Переменная будет доступна только для выполнения команды `date`.",{"question":994,"answer":995},"Чем отличается `export` от обычного присваивания?","Обычное присваивание (`VAR=value`) создаёт переменную только в текущей оболочке. `export VAR` делает её доступной для всех дочерних процессов (запускаемых из этой оболочки программ и скриптов).",{"question":997,"answer":998},"Как сделать переменную доступной только для чтения?","Используйте команду `readonly VAR` после её объявления. Попытка изменить такую переменную вызовет ошибку.",{"question":1000,"answer":1001},"Где хранятся системные переменные, которые видны всем пользователям?","Обычно в файлах `/etc/environment` (для всех пользователей, но без синтаксиса shell) и `/etc/profile` (с синтаксисом shell). Для текущей сессии оболочки они загружаются при входе.",[1003,1006,1009,1012,1014],{"name":1004,"text":1005},"Объявление и присвоение значения переменной","Используйте синтаксис `ИМЯ_ПЕРЕМЕННОЙ=значение` без пробелов вокруг знака `=`. Например, `MY_VAR=\"Привет, мир!\"`. Имя переменной чувствительно к регистру.",{"name":1007,"text":1008},"Чтение значения переменной","Для подстановки значения переменной в команду или строку используйте префикс `$` или `${}`. Например, `echo $MY_VAR` или `echo \"Значение: ${MY_VAR}\"`. Конструкция `${}` помогает избежать неоднозначностей.",{"name":1010,"text":1011},"Экспорт переменной в дочерние процессы","Чтобы переменная была видна в запускаемых из текущей оболочки программах и скриптах, выполните `export MY_VAR`. Можно объявить и экспортировать за один шаг: `export MY_VAR=\"значение\"`.",{"name":642,"text":1013},"Чтобы удалить переменную из текущей оболочки, используйте `unset MY_VAR`. После этого попытка обратиться к ней вернёт пустую строку.",{"name":1015,"text":1016},"Работа с переменными окружения","Просмотрите все переменные текущей оболочки командой `set`. Только экспортированные (переменные окружения) — командой `env`. Значение конкретной переменной — `echo $VARIABLE_NAME` или `printenv VARIABLE_NAME`.","PT15M",[1019,1020,1021,1022,1023,1024,1025,1026,1027,1028],"переменные оболочки linux","bash переменные примеры","как создать переменную в linux","системные переменные linux","export переменная","работа с переменными в bash","объявление переменных shell","readonly переменная linux","local переменная bash","env переменные linux","ru_RU",{},"/guides/linux/shell-variables","linux",[1034,1035,1036],"/guides/linux/bash-scripting-basics","/guides/linux/command-line-tips","/errors/linux/command-not-found","Гайды Linux",{"title":5,"description":984},"guides/linux/shell-variables","Этот гайд подробно объясняет, что такое переменные оболочки в Linux, как их создавать, изменять и использовать в командной строке и скриптах. Вы научитесь работать с пользовательскими и системными переменными, понимать их область видимости и применять их для автоматизации задач.",[1032,91,1042,1043,1044,1045,1046],"shell","скриптинг","переменные","автоматизация","terminal","guide","bTzncOf5eBC3Uxfc-WvOgu3VVs3IIbKPtVTUwB-o7AA",{"data":1050,"body":1051},{},{"type":1052,"children":1053},"root",[1054],{"type":1055,"tag":21,"props":1056,"children":1057},"element",{},[1058,1061,1067,1069,1075,1077,1082],{"type":1059,"value":1060},"text","Используйте синтаксис ",{"type":1055,"tag":42,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":1059,"value":1066},"VAR=value command",{"type":1059,"value":1068},". Например, ",{"type":1055,"tag":42,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":1059,"value":1074},"LANG=ru_RU.UTF-8 date",{"type":1059,"value":1076},". Переменная будет доступна только для выполнения команды ",{"type":1055,"tag":42,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":1059,"value":145},{"type":1059,"value":45},{"data":1084,"body":1085},{},{"type":1052,"children":1086},[1087],{"type":1055,"tag":21,"props":1088,"children":1089},{},[1090,1092,1097,1099,1104],{"type":1059,"value":1091},"Обычное присваивание (",{"type":1055,"tag":42,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":1059,"value":900},{"type":1059,"value":1098},") создаёт переменную только в текущей оболочке. ",{"type":1055,"tag":42,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":1059,"value":916},{"type":1059,"value":1105}," делает её доступной для всех дочерних процессов (запускаемых из этой оболочки программ и скриптов).",{"data":1107,"body":1108},{},{"type":1052,"children":1109},[1110],{"type":1055,"tag":21,"props":1111,"children":1112},{},[1113,1115,1121],{"type":1059,"value":1114},"Используйте команду ",{"type":1055,"tag":42,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":1059,"value":1120},"readonly VAR",{"type":1059,"value":1122}," после её объявления. Попытка изменить такую переменную вызовет ошибку.",{"data":1124,"body":1125},{},{"type":1052,"children":1126},[1127],{"type":1055,"tag":21,"props":1128,"children":1129},{},[1130,1132,1138,1140,1146],{"type":1059,"value":1131},"Обычно в файлах ",{"type":1055,"tag":42,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":1059,"value":1137},"/etc/environment",{"type":1059,"value":1139}," (для всех пользователей, но без синтаксиса shell) и ",{"type":1055,"tag":42,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":1059,"value":1145},"/etc/profile",{"type":1059,"value":1147}," (с синтаксисом shell). Для текущей сессии оболочки они загружаются при входе.",{"data":1149,"body":1150},{},{"type":1052,"children":1151},[1152],{"type":1055,"tag":21,"props":1153,"children":1154},{},[1155,1156,1162,1164,1169,1170,1176],{"type":1059,"value":1060},{"type":1055,"tag":42,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":1059,"value":1161},"ИМЯ_ПЕРЕМЕННОЙ=значение",{"type":1059,"value":1163}," без пробелов вокруг знака ",{"type":1055,"tag":42,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":1059,"value":80},{"type":1059,"value":1068},{"type":1055,"tag":42,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":1059,"value":1175},"MY_VAR=\"Привет, мир!\"",{"type":1059,"value":1177},". Имя переменной чувствительно к регистру.",{"data":1179,"body":1180},{},{"type":1052,"children":1181},[1182],{"type":1055,"tag":21,"props":1183,"children":1184},{},[1185,1187,1192,1193,1198,1199,1205,1206,1212,1214,1219],{"type":1059,"value":1186},"Для подстановки значения переменной в команду или строку используйте префикс ",{"type":1055,"tag":42,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":1059,"value":216},{"type":1059,"value":634},{"type":1055,"tag":42,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":1059,"value":220},{"type":1059,"value":1068},{"type":1055,"tag":42,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":1059,"value":1204},"echo $MY_VAR",{"type":1059,"value":634},{"type":1055,"tag":42,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":1059,"value":1211},"echo \"Значение: ${MY_VAR}\"",{"type":1059,"value":1213},". Конструкция ",{"type":1055,"tag":42,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":1059,"value":220},{"type":1059,"value":1220}," помогает избежать неоднозначностей.",{"data":1222,"body":1223},{},{"type":1052,"children":1224},[1225],{"type":1055,"tag":21,"props":1226,"children":1227},{},[1228,1230,1236,1238,1244],{"type":1059,"value":1229},"Чтобы переменная была видна в запускаемых из текущей оболочки программах и скриптах, выполните ",{"type":1055,"tag":42,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":1059,"value":1235},"export MY_VAR",{"type":1059,"value":1237},". Можно объявить и экспортировать за один шаг: ",{"type":1055,"tag":42,"props":1239,"children":1241},{"className":1240},[],[1242],{"type":1059,"value":1243},"export MY_VAR=\"значение\"",{"type":1059,"value":45},{"data":1246,"body":1247},{},{"type":1052,"children":1248},[1249],{"type":1055,"tag":21,"props":1250,"children":1251},{},[1252,1254,1260],{"type":1059,"value":1253},"Чтобы удалить переменную из текущей оболочки, используйте ",{"type":1055,"tag":42,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":1059,"value":1259},"unset MY_VAR",{"type":1059,"value":1261},". После этого попытка обратиться к ней вернёт пустую строку.",{"data":1263,"body":1264},{},{"type":1052,"children":1265},[1266],{"type":1055,"tag":21,"props":1267,"children":1268},{},[1269,1271,1276,1278,1283,1285,1291,1292,1298],{"type":1059,"value":1270},"Просмотрите все переменные текущей оболочки командой ",{"type":1055,"tag":42,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":1059,"value":61},{"type":1059,"value":1277},". Только экспортированные (переменные окружения) — командой ",{"type":1055,"tag":42,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":1059,"value":64},{"type":1059,"value":1284},". Значение конкретной переменной — ",{"type":1055,"tag":42,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":1059,"value":1290},"echo $VARIABLE_NAME",{"type":1059,"value":634},{"type":1055,"tag":42,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":1059,"value":1297},"printenv VARIABLE_NAME",{"type":1059,"value":45},[1300,2371],{"id":1301,"title":1302,"appliesTo":1303,"author":11,"body":1306,"canonical":982,"code":982,"createdAt":2313,"description":2314,"difficulty":985,"draft":986,"estimatedTime":2315,"extension":988,"faq":2316,"howToSteps":2329,"howToTotalTime":2345,"image":982,"keywords":2346,"locale":1029,"meta":2358,"navigation":123,"path":1034,"platform":1032,"related":2359,"section":1037,"seo":2363,"severity":982,"stem":2364,"summary":2365,"tags":2366,"twitterCreator":982,"twitterSite":982,"type":1047,"updatedAt":2313,"__hash__":2370},"content_ru/guides/linux/bash-scripting-basics.md","Bash скриптинг: основы для начинающих",[7,9,1304,1305],"Debian 10+","CentOS 7+",{"type":13,"value":1307,"toc":2303},[1308,1311,1315,1326,1343,1356,1372,1375,1384,1402,1406,1412,1440,1443,1468,1471,1497,1504,1576,1582,1593,1597,1600,1646,1651,1711,1716,1776,1787,1791,1794,1802,1895,1902,1960,1968,2010,2019,2023,2026,2113,2133,2137,2140,2173,2177,2245,2249,2252,2297,2300],[21,1309,1310],{},"Bash-скриптинг — основной способ автоматизации в Linux. С помощью скриптов вы объединяете команды, создаёте собственные утилиты и убираете рутинные действия. Этот гайд покажет, как создать первый скрипт, работать с переменными, условиями, циклами и функциями. Вы сможете писать простые, но эффективные скрипты сразу после прочтения.",[465,1312,1314],{"id":1313},"создание-и-запуск-первого-скрипта","Создание и запуск первого скрипта",[21,1316,1317,1318,1321,1322,1325],{},"Начнём с минимального рабочего примера. Создайте файл ",[42,1319,1320],{},"hello.sh"," и откройте его в редакторе (",[42,1323,1324],{},"nano hello.sh","). Добавьте содержимое:",[87,1327,1329],{"className":89,"code":1328,"language":91,"meta":92,"style":92},"#!/usr/bin/env bash\necho \"Привет, мир!\"\n",[42,1330,1331,1336],{"__ignoreMap":92},[96,1332,1333],{"class":98,"line":99},[96,1334,1335],{"class":102},"#!/usr/bin/env bash\n",[96,1337,1338,1340],{"class":98,"line":106},[96,1339,51],{"class":164},[96,1341,1342],{"class":116}," \"Привет, мир!\"\n",[21,1344,1345,1346,52,1349,52,1352,1355],{},"Сохраните файл (",[42,1347,1348],{},"Ctrl+O",[42,1350,1351],{},"Enter",[42,1353,1354],{},"Ctrl+X"," в nano). Сделайте его исполняемым:",[87,1357,1359],{"className":89,"code":1358,"language":91,"meta":92,"style":92},"chmod +x hello.sh\n",[42,1360,1361],{"__ignoreMap":92},[96,1362,1363,1366,1369],{"class":98,"line":99},[96,1364,1365],{"class":144},"chmod",[96,1367,1368],{"class":116}," +x",[96,1370,1371],{"class":116}," hello.sh\n",[21,1373,1374],{},"Запустите из той же директории:",[87,1376,1378],{"className":89,"code":1377,"language":91,"meta":92,"style":92},"./hello.sh\n",[42,1379,1380],{"__ignoreMap":92},[96,1381,1382],{"class":98,"line":99},[96,1383,1377],{"class":144},[21,1385,1386,1387,1390,1391,1394,1395,1398,1399,45],{},"Вывод: ",[42,1388,1389],{},"Привет, мир!",". Если видите ",[42,1392,1393],{},"Permission denied",", проверьте права через ",[42,1396,1397],{},"ls -l hello.sh"," и повторно выполните ",[42,1400,1401],{},"chmod +x",[465,1403,1405],{"id":1404},"переменные-и-аргументы-командной-строки","Переменные и аргументы командной строки",[21,1407,1408,1409,1411],{},"Переменные хранят данные для повторного использования. Объявляйте без пробелов вокруг ",[42,1410,80],{},":",[87,1413,1415],{"className":89,"code":1414,"language":91,"meta":92,"style":92},"USERNAME=\"Алексей\"\necho \"Добро пожаловать, $USERNAME!\"\n",[42,1416,1417,1427],{"__ignoreMap":92},[96,1418,1419,1422,1424],{"class":98,"line":99},[96,1420,1421],{"class":109},"USERNAME",[96,1423,80],{"class":113},[96,1425,1426],{"class":116},"\"Алексей\"\n",[96,1428,1429,1431,1434,1437],{"class":98,"line":106},[96,1430,51],{"class":164},[96,1432,1433],{"class":116}," \"Добро пожаловать, ",[96,1435,1436],{"class":109},"$USERNAME",[96,1438,1439],{"class":116},"!\"\n",[21,1441,1442],{},"Для кавычек внутри значений используйте экранирование или внешние кавычки:",[87,1444,1446],{"className":89,"code":1445,"language":91,"meta":92,"style":92},"MESSAGE=\"Он сказал: \\\"Привет!\\\"\"\n",[42,1447,1448],{"__ignoreMap":92},[96,1449,1450,1453,1455,1458,1461,1464,1466],{"class":98,"line":99},[96,1451,1452],{"class":109},"MESSAGE",[96,1454,80],{"class":113},[96,1456,1457],{"class":116},"\"Он сказал: ",[96,1459,1460],{"class":164},"\\\"",[96,1462,1463],{"class":116},"Привет!",[96,1465,1460],{"class":164},[96,1467,269],{"class":116},[21,1469,1470],{},"Аргументы делают скрипт гибким. Доступ к ним:",[29,1472,1473,1482,1487,1492],{},[32,1474,1475,52,1478,1481],{},[42,1476,1477],{},"$1",[42,1479,1480],{},"$2"," — первый, второй аргумент.",[32,1483,1484,1486],{},[42,1485,739],{}," — все аргументы как отдельные слова.",[32,1488,1489,1491],{},[42,1490,723],{}," — количество аргументов.",[32,1493,1494,1496],{},[42,1495,757],{}," — имя скрипта.",[21,1498,1499,1500,1503],{},"Пример ",[42,1501,1502],{},"greet.sh"," с проверкой аргументов:",[87,1505,1507],{"className":89,"code":1506,"language":91,"meta":92,"style":92},"#!/usr/bin/env bash\nif [ $# -eq 0 ]; then\n    echo \"Использование: $0 \u003Cимя>\"\n    exit 1\nfi\necho \"Привет, $1! Получено аргументов: $#\"\n",[42,1508,1509,1513,1535,1547,1555,1560],{"__ignoreMap":92},[96,1510,1511],{"class":98,"line":99},[96,1512,1335],{"class":102},[96,1514,1515,1518,1521,1523,1526,1529,1532],{"class":98,"line":106},[96,1516,1517],{"class":113},"if",[96,1519,1520],{"class":109}," [ ",[96,1522,723],{"class":164},[96,1524,1525],{"class":113}," -eq",[96,1527,1528],{"class":164}," 0",[96,1530,1531],{"class":109}," ]; ",[96,1533,1534],{"class":113},"then\n",[96,1536,1537,1539,1542,1544],{"class":98,"line":120},[96,1538,563],{"class":164},[96,1540,1541],{"class":116}," \"Использование: ",[96,1543,757],{"class":164},[96,1545,1546],{"class":116}," \u003Cимя>\"\n",[96,1548,1549,1552],{"class":98,"line":127},[96,1550,1551],{"class":164},"    exit",[96,1553,1554],{"class":164}," 1\n",[96,1556,1557],{"class":98,"line":133},[96,1558,1559],{"class":113},"fi\n",[96,1561,1562,1564,1567,1569,1572,1574],{"class":98,"line":154},[96,1563,51],{"class":164},[96,1565,1566],{"class":116}," \"Привет, ",[96,1568,1477],{"class":164},[96,1570,1571],{"class":116},"! Получено аргументов: ",[96,1573,723],{"class":164},[96,1575,269],{"class":116},[21,1577,1578,1579,45],{},"Запуск: ",[42,1580,1581],{},"./greet.sh Мария",[1583,1584,1587],"image-with-caption",{"alt":1585,"src":1586},"Пример bash-скрипта с переменными и аргументами командной строки","/images/guides/linux/bash-scripting-basics/bash-variables-arguments-example.png",[21,1588,1589],{},[1590,1591,1592],"em",{},"Использование переменных и аргументов в bash-скрипте",[465,1594,1596],{"id":1595},"условные-операторы-if","Условные операторы if",[21,1598,1599],{},"Условия позволяют ветвить логику. Базовый синтаксис:",[87,1601,1603],{"className":89,"code":1602,"language":91,"meta":92,"style":92},"if [ условие ]; then\n    команды\nelif [ другое_условие ]; then\n    команды\nelse\n    команды\nfi\n",[42,1604,1605,1614,1619,1629,1633,1638,1642],{"__ignoreMap":92},[96,1606,1607,1609,1612],{"class":98,"line":99},[96,1608,1517],{"class":113},[96,1610,1611],{"class":109}," [ условие ]; ",[96,1613,1534],{"class":113},[96,1615,1616],{"class":98,"line":106},[96,1617,1618],{"class":144},"    команды\n",[96,1620,1621,1624,1627],{"class":98,"line":120},[96,1622,1623],{"class":113},"elif",[96,1625,1626],{"class":109}," [ другое_условие ]; ",[96,1628,1534],{"class":113},[96,1630,1631],{"class":98,"line":127},[96,1632,1618],{"class":144},[96,1634,1635],{"class":98,"line":133},[96,1636,1637],{"class":113},"else\n",[96,1639,1640],{"class":98,"line":154},[96,1641,1618],{"class":144},[96,1643,1644],{"class":98,"line":173},[96,1645,1559],{"class":113},[21,1647,1648],{},[74,1649,1650],{},"Пример: проверка количества аргументов",[87,1652,1654],{"className":89,"code":1653,"language":91,"meta":92,"style":92},"#!/usr/bin/env bash\nif [ $# -lt 2 ]; then\n    echo \"Ошибка: нужно два аргумента.\"\n    exit 1\nfi\necho \"Аргументы: $1 и $2\"\n",[42,1655,1656,1660,1678,1685,1691,1695],{"__ignoreMap":92},[96,1657,1658],{"class":98,"line":99},[96,1659,1335],{"class":102},[96,1661,1662,1664,1666,1668,1671,1674,1676],{"class":98,"line":106},[96,1663,1517],{"class":113},[96,1665,1520],{"class":109},[96,1667,723],{"class":164},[96,1669,1670],{"class":113}," -lt",[96,1672,1673],{"class":164}," 2",[96,1675,1531],{"class":109},[96,1677,1534],{"class":113},[96,1679,1680,1682],{"class":98,"line":120},[96,1681,563],{"class":164},[96,1683,1684],{"class":116}," \"Ошибка: нужно два аргумента.\"\n",[96,1686,1687,1689],{"class":98,"line":127},[96,1688,1551],{"class":164},[96,1690,1554],{"class":164},[96,1692,1693],{"class":98,"line":133},[96,1694,1559],{"class":113},[96,1696,1697,1699,1702,1704,1707,1709],{"class":98,"line":154},[96,1698,51],{"class":164},[96,1700,1701],{"class":116}," \"Аргументы: ",[96,1703,1477],{"class":164},[96,1705,1706],{"class":116}," и ",[96,1708,1480],{"class":164},[96,1710,269],{"class":116},[21,1712,1713],{},[74,1714,1715],{},"Операторы сравнения:",[29,1717,1718,1745,1761],{},[32,1719,1720,1721,1724,1725,1728,1729,1732,1733,1736,1737,1740,1741,1744],{},"Числа: ",[42,1722,1723],{},"-eq"," (равно), ",[42,1726,1727],{},"-ne"," (не равно), ",[42,1730,1731],{},"-lt"," (меньше), ",[42,1734,1735],{},"-le"," (меньше или равно), ",[42,1738,1739],{},"-gt"," (больше), ",[42,1742,1743],{},"-ge"," (больше или равно).",[32,1746,1747,1748,1724,1750,1728,1753,1756,1757,1760],{},"Строки: ",[42,1749,80],{},[42,1751,1752],{},"!=",[42,1754,1755],{},"-z"," (пустая строка), ",[42,1758,1759],{},"-n"," (не пустая).",[32,1762,1763,1764,1767,1768,1771,1772,1775],{},"Файлы: ",[42,1765,1766],{},"-e"," (существует), ",[42,1769,1770],{},"-f"," (обычный файл), ",[42,1773,1774],{},"-d"," (директория).",[194,1777,1778],{},[21,1779,198,1780,1782,1783,1786],{},[74,1781,201],{}," Всегда заключайте переменные в двойные кавычки: ",[42,1784,1785],{},"[ -n \"$VAR\" ]",". Это предотвратит ошибки, если переменная пуста или содержит пробелы.",[465,1788,1790],{"id":1789},"циклы","Циклы",[21,1792,1793],{},"Циклы повторяют блок кода.",[21,1795,1796],{},[74,1797,1798,1799,1411],{},"Цикл ",[42,1800,1801],{},"for",[87,1803,1805],{"className":89,"code":1804,"language":91,"meta":92,"style":92},"# Перебор списка\nfor fruit in яблоко банан апельсин; do\n    echo \"Фрукт: $fruit\"\ndone\n\n# Перебор файлов .log\nfor log in *.log; do\n    echo \"Обработка $log\"\ndone\n",[42,1806,1807,1812,1837,1849,1854,1858,1863,1879,1891],{"__ignoreMap":92},[96,1808,1809],{"class":98,"line":99},[96,1810,1811],{"class":102},"# Перебор списка\n",[96,1813,1814,1816,1819,1822,1825,1828,1831,1834],{"class":98,"line":106},[96,1815,1801],{"class":113},[96,1817,1818],{"class":109}," fruit ",[96,1820,1821],{"class":113},"in",[96,1823,1824],{"class":116}," яблоко",[96,1826,1827],{"class":116}," банан",[96,1829,1830],{"class":116}," апельсин",[96,1832,1833],{"class":109},"; ",[96,1835,1836],{"class":113},"do\n",[96,1838,1839,1841,1844,1847],{"class":98,"line":120},[96,1840,563],{"class":164},[96,1842,1843],{"class":116}," \"Фрукт: ",[96,1845,1846],{"class":109},"$fruit",[96,1848,269],{"class":116},[96,1850,1851],{"class":98,"line":127},[96,1852,1853],{"class":113},"done\n",[96,1855,1856],{"class":98,"line":133},[96,1857,124],{"emptyLinePlaceholder":123},[96,1859,1860],{"class":98,"line":154},[96,1861,1862],{"class":102},"# Перебор файлов .log\n",[96,1864,1865,1867,1870,1872,1875,1877],{"class":98,"line":173},[96,1866,1801],{"class":113},[96,1868,1869],{"class":109}," log ",[96,1871,1821],{"class":113},[96,1873,1874],{"class":116}," *.log",[96,1876,1833],{"class":109},[96,1878,1836],{"class":113},[96,1880,1881,1883,1886,1889],{"class":98,"line":178},[96,1882,563],{"class":164},[96,1884,1885],{"class":116}," \"Обработка ",[96,1887,1888],{"class":109},"$log",[96,1890,269],{"class":116},[96,1892,1893],{"class":98,"line":184},[96,1894,1853],{"class":113},[21,1896,1897],{},[74,1898,1798,1899,1411],{},[42,1900,1901],{},"while",[87,1903,1905],{"className":89,"code":1904,"language":91,"meta":92,"style":92},"counter=1\nwhile [ $counter -le 5 ]; do\n    echo \"Счётчик: $counter\"\n    ((counter++))\ndone\n",[42,1906,1907,1917,1933,1945,1956],{"__ignoreMap":92},[96,1908,1909,1912,1914],{"class":98,"line":99},[96,1910,1911],{"class":109},"counter",[96,1913,80],{"class":113},[96,1915,1916],{"class":116},"1\n",[96,1918,1919,1921,1924,1926,1929,1931],{"class":98,"line":106},[96,1920,1901],{"class":113},[96,1922,1923],{"class":109}," [ $counter ",[96,1925,1735],{"class":113},[96,1927,1928],{"class":164}," 5",[96,1930,1531],{"class":109},[96,1932,1836],{"class":113},[96,1934,1935,1937,1940,1943],{"class":98,"line":120},[96,1936,563],{"class":164},[96,1938,1939],{"class":116}," \"Счётчик: ",[96,1941,1942],{"class":109},"$counter",[96,1944,269],{"class":116},[96,1946,1947,1950,1953],{"class":98,"line":127},[96,1948,1949],{"class":109},"    ((counter",[96,1951,1952],{"class":113},"++",[96,1954,1955],{"class":109},"))\n",[96,1957,1958],{"class":98,"line":133},[96,1959,1853],{"class":113},[21,1961,1962,1967],{},[74,1963,1798,1964],{},[42,1965,1966],{},"until"," (выполняется, пока условие ложно):",[87,1969,1971],{"className":89,"code":1970,"language":91,"meta":92,"style":92},"until [ $counter -gt 5 ]; do\n    echo \"Значение: $counter\"\n    ((counter++))\ndone\n",[42,1972,1973,1987,1998,2006],{"__ignoreMap":92},[96,1974,1975,1977,1979,1981,1983,1985],{"class":98,"line":99},[96,1976,1966],{"class":113},[96,1978,1923],{"class":109},[96,1980,1739],{"class":113},[96,1982,1928],{"class":164},[96,1984,1531],{"class":109},[96,1986,1836],{"class":113},[96,1988,1989,1991,1994,1996],{"class":98,"line":106},[96,1990,563],{"class":164},[96,1992,1993],{"class":116}," \"Значение: ",[96,1995,1942],{"class":109},[96,1997,269],{"class":116},[96,1999,2000,2002,2004],{"class":98,"line":120},[96,2001,1949],{"class":109},[96,2003,1952],{"class":113},[96,2005,1955],{"class":109},[96,2007,2008],{"class":98,"line":127},[96,2009,1853],{"class":113},[1583,2011,2014],{"alt":2012,"src":2013},"Примеры циклов for и while в bash-скрипте с кодом","/images/guides/linux/bash-scripting-basics/bash-loops-example.png",[21,2015,2016],{},[1590,2017,2018],{},"Использование циклов для повторения задач в bash",[465,2020,2022],{"id":2021},"функции","Функции",[21,2024,2025],{},"Функции структурируют код и избегают дублирования.",[87,2027,2029],{"className":89,"code":2028,"language":91,"meta":92,"style":92},"#!/usr/bin/env bash\n\n# Определение\nprint_time() {\n    local message=$1\n    echo \"[$(date +%H:%M:%S)] $message\"\n}\n\n# Вызов\nprint_time \"Скрипт начался\"\n# ... ваш код ...\nprint_time \"Скрипт завершён\"\n",[42,2030,2031,2035,2039,2044,2051,2064,2081,2085,2089,2094,2101,2106],{"__ignoreMap":92},[96,2032,2033],{"class":98,"line":99},[96,2034,1335],{"class":102},[96,2036,2037],{"class":98,"line":106},[96,2038,124],{"emptyLinePlaceholder":123},[96,2040,2041],{"class":98,"line":120},[96,2042,2043],{"class":102},"# Определение\n",[96,2045,2046,2049],{"class":98,"line":127},[96,2047,2048],{"class":144},"print_time",[96,2050,545],{"class":109},[96,2052,2053,2055,2058,2060],{"class":98,"line":133},[96,2054,550],{"class":113},[96,2056,2057],{"class":109}," message",[96,2059,80],{"class":113},[96,2061,2063],{"class":2062},"s4XuR","$1\n",[96,2065,2066,2068,2071,2073,2076,2079],{"class":98,"line":154},[96,2067,563],{"class":164},[96,2069,2070],{"class":116}," \"[$(",[96,2072,145],{"class":144},[96,2074,2075],{"class":116}," +%H:%M:%S)] ",[96,2077,2078],{"class":109},"$message",[96,2080,269],{"class":116},[96,2082,2083],{"class":98,"line":173},[96,2084,576],{"class":109},[96,2086,2087],{"class":98,"line":178},[96,2088,124],{"emptyLinePlaceholder":123},[96,2090,2091],{"class":98,"line":184},[96,2092,2093],{"class":102},"# Вызов\n",[96,2095,2096,2098],{"class":98,"line":286},[96,2097,2048],{"class":144},[96,2099,2100],{"class":116}," \"Скрипт начался\"\n",[96,2102,2103],{"class":98,"line":297},[96,2104,2105],{"class":102},"# ... ваш код ...\n",[96,2107,2108,2110],{"class":98,"line":311},[96,2109,2048],{"class":144},[96,2111,2112],{"class":116}," \"Скрипт завершён\"\n",[29,2114,2115,2120],{},[32,2116,2117,2119],{},[42,2118,512],{}," создаёт переменную, видимую только внутри функции.",[32,2121,2122,2123,2126,2127,2129,2130,45],{},"Функции возвращают статус через ",[42,2124,2125],{},"return"," (число 0-255) или вывод через ",[42,2128,51],{}," (строка). Для захвата вывода используйте ",[42,2131,2132],{},"result=$(function_name)",[465,2134,2136],{"id":2135},"проверка-и-отладка","Проверка и отладка",[21,2138,2139],{},"Перед использованием в продакшене протестируйте скрипт:",[846,2141,2142,2145,2156,2167],{},[32,2143,2144],{},"Запускайте с разными аргументами, включая граничные случаи (пустые строки, несуществующие файлы).",[32,2146,2147,2148,2151,2152,2155],{},"Используйте ",[42,2149,2150],{},"set -x"," в начале скрипта или запуск ",[42,2153,2154],{},"bash -x script.sh"," для пошагового вывода выполненных команд.",[32,2157,2158,2159,2162,2163,2166],{},"Добавьте ",[42,2160,2161],{},"set -e"," для автоматического выхода при ошибке любой команды и ",[42,2164,2165],{},"set -u"," для ошибки при использовании неопределённой переменной.",[32,2168,2169,2170,45],{},"Проверяйте коды возврата команд: ",[42,2171,2172],{},"if ! command; then echo \"Ошибка\"; fi",[465,2174,2176],{"id":2175},"типичные-ошибки-и-решения","Типичные ошибки и решения",[29,2178,2179,2189,2204,2220,2228,2237],{},[32,2180,2181,2185,2186,45],{},[74,2182,2183],{},[42,2184,1393],{},": файл не исполняем. Решение: ",[42,2187,2188],{},"chmod +x script.sh",[32,2190,2191,2196,2197,2200,2201,45],{},[74,2192,2193],{},[42,2194,2195],{},"No such file or directory"," при запуске: проблема в shebang. Используйте ",[42,2198,2199],{},"#!/usr/bin/env bash"," вместо ",[42,2202,2203],{},"#!/bin/bash",[32,2205,2206,2209,2210,2213,2214,901,2217,45],{},[74,2207,2208],{},"Синтаксическая ошибка в условии",": проверьте пробелы в ",[42,2211,2212],{},"[ ]"," — они обязательны: ",[42,2215,2216],{},"[ \"$a\" = \"b\" ]",[42,2218,2219],{},"[\"$a\"=\"b\"]",[32,2221,2222,2225,2226,45],{},[74,2223,2224],{},"Пустые переменные в условиях",": всегда заключайте в кавычки: ",[42,2227,1785],{},[32,2229,2230,2233,2234,45],{},[74,2231,2232],{},"Потеря аргументов при вызове функции",": передавайте явно: ",[42,2235,2236],{},"my_func \"$@\"",[32,2238,2239,631,2242,2244],{},[74,2240,2241],{},"Неверный подсчёт аргументов",[42,2243,723],{}," считает аргументы после обработки оболочкой. Если передаётся строка с пробелами в кавычках, это один аргумент.",[465,2246,2248],{"id":2247},"дальнейшие-шаги","Дальнейшие шаги",[21,2250,2251],{},"Освоив основы, изучите:",[29,2253,2254,2266,2272,2287,2290],{},[32,2255,2256,2257,52,2260,52,2263,45],{},"Обработку текста через ",[42,2258,2259],{},"grep",[42,2261,2262],{},"awk",[42,2264,2265],{},"sed",[32,2267,2268,2269,45],{},"Планирование задач через ",[42,2270,2271],{},"cron",[32,2273,2274,2275,52,2278,52,2281,52,2284,65],{},"Работу с потоками ввода-вывода (",[42,2276,2277],{},"\u003C",[42,2279,2280],{},">",[42,2282,2283],{},">>",[42,2285,2286],{},"|",[32,2288,2289],{},"Массивы и ассоциативные массивы в bash.",[32,2291,2292,2293,2296],{},"Отладку через ",[42,2294,2295],{},"trap"," и сигналы.",[21,2298,2299],{},"Эти инструменты расширят возможности ваших скриптов для сложных задач администрирования.",[962,2301,2302],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":92,"searchDepth":106,"depth":106,"links":2304},[2305,2306,2307,2308,2309,2310,2311,2312],{"id":1313,"depth":120,"text":1314},{"id":1404,"depth":120,"text":1405},{"id":1595,"depth":120,"text":1596},{"id":1789,"depth":120,"text":1790},{"id":2021,"depth":120,"text":2022},{"id":2135,"depth":120,"text":2136},{"id":2175,"depth":120,"text":2176},{"id":2247,"depth":120,"text":2248},"2026-04-04 20:14:56","Научитесь писать bash-скрипты с нуля. Создавайте, запускайте и отлаживайте скрипты для автоматизации задач в Linux. Практические примеры переменных, условий и циклов внутри.","20 мин",[2317,2320,2323,2326],{"answer":2318,"question":2319},"`#!/usr/bin/env bash` — более переносимый вариант, он ищет bash в переменной PATH. `#!/bin/bash` жёстко задаёт абсолютный путь, что может не сработать на других системах.","Какой shebang выбрать: #!/bin/bash или #!/usr/bin/env bash?",{"answer":2321,"question":2322},"Используйте `set -e` для выхода при ошибке любой команды и `set -u` для ошибки при использовании неопределённой переменной. Ловите ошибки через `trap 'обработчик' ERR`.","Как правильно обрабатывать ошибки в bash-скрипте?",{"answer":2324,"question":2325},"`[[ ]]` — расширенный тест bash, он безопаснее (не требует экранирования `\u003C`, `>`), поддерживает `&&`, `||` и шаблоны (`== pattern`). Используйте `[[ ]]` в современных скриптах.","Чем отличается `[ ]` от `[[ ]]` в условиях?",{"answer":2327,"question":2328},"Используйте `\"$@\"` для передачи всех аргументов как отдельных слов или `\"$*\"` для одной строки. Для файлов можно вызвать скрипт как `./script.sh *.txt`.","Как передать в скрипт все файлы из текущей директории?",[2330,2333,2336,2339,2342],{"name":2331,"text":2332},"Создайте файл скрипта","Создайте файл с расширением .sh, например `myscript.sh`, в нужной директории.",{"name":2334,"text":2335},"Добавьте shebang","В первую строку файла добавьте `#!/usr/bin/env bash` для указания интерпретатора.",{"name":2337,"text":2338},"Напишите команды","Добавьте команды bash, которые нужно выполнить. Начинайте с простого `echo` для теста.",{"name":2340,"text":2341},"Сделайте файл исполняемым","В терминале выполните `chmod +x myscript.sh` для установки прав на выполнение.",{"name":2343,"text":2344},"Запустите скрипт","Запустите скрипт из его директории командой `./myscript.sh` или `bash myscript.sh`.","PT20M",[2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,1401],"bash скриптинг для начинающих","как писать bash скрипты","bash скрипт примеры","основы bash linux","запуск bash скрипта","bash scripting tutorial","учить bash скрипты","bash script example","linux bash скрипты","bash команды","bash permission denied",{},[2360,2361,2362],"/guides/linux/cron-jobs-basics","/guides/linux/awk-text-processing","/guides/linux/sed-basics",{"title":1302,"description":2314},"guides/linux/bash-scripting-basics","Практическое руководство по основам bash-скриптинга. Вы освоите создание исполняемых скриптов, работу с переменными и аргументами, условные операторы, циклы и функции для автоматизации рутины в Linux.",[91,1032,2367,2368,2369,1046],"scripting","automation","cli","dnn4uiuRJB7AJQZVImHhqGVua8iOgA3oJHhF6Lpu0Wo",{"id":2372,"title":2373,"appliesTo":2374,"author":11,"body":2379,"canonical":982,"code":3079,"createdAt":3080,"description":3081,"difficulty":985,"draft":986,"estimatedTime":3082,"extension":988,"faq":3083,"howToSteps":3093,"howToTotalTime":2345,"image":982,"keywords":3106,"locale":1029,"meta":3112,"navigation":123,"path":1036,"platform":1032,"related":3113,"section":3116,"seo":3117,"severity":3118,"stem":3119,"summary":3120,"tags":3121,"twitterCreator":982,"twitterSite":982,"type":3123,"updatedAt":3080,"__hash__":3124},"content_ru/errors/linux/command-not-found.md","Ошибка «command not found» в Linux: причины и решения",[2375,2376,2377,2378],"Ubuntu","Debian","CentOS","Fedora",{"type":13,"value":2380,"toc":3064},[2381,2386,2402,2406,2411,2437,2441,2445,2508,2512,2524,2527,2534,2537,2588,2592,2652,2656,2763,2767,2771,2776,2829,2833,2877,2881,2904,2908,3015,3019,3049,3053,3058,3061],[2382,2383,2385],"h1",{"id":2384},"ошибка-command-not-found-в-linux","Ошибка «command not found» в Linux",[21,2387,889,2388,2395,2396,2401],{},[74,2389,2390,2391,2394],{},"«bash: command not found: ",[96,2392,2393],{},"команда","»"," (или ",[74,2397,2398,2399,2394],{},"«zsh: command not found: ",[96,2400,2393],{}," в Zsh) — одна из наиболее распространённых проблем в Linux-терминале. Она означает, что оболочка не смогла найти исполняемый файл указанной команды в системных путях.",[16,2403,2405],{"id":2404},"причины-возникновения-ошибки","Причины возникновения ошибки",[21,2407,2408,2409,1411],{},"Существует несколько основных причин появления ошибки ",[42,2410,892],{},[846,2412,2413,2419,2425,2431],{},[32,2414,2415,2418],{},[74,2416,2417],{},"Команда не установлена"," — необходимый пакет просто не установлен в системе",[32,2420,2421,2424],{},[74,2422,2423],{},"Неправильный PATH"," — директория с командой не добавлена в переменную окружения PATH",[32,2426,2427,2430],{},[74,2428,2429],{},"Опечатка в названии"," — команда введена с ошибкой или неверным регистром",[32,2432,2433,2436],{},[74,2434,2435],{},"Отсутствие прав на выполнение"," — файл существует, но не имеет атрибута исполнения",[16,2438,2440],{"id":2439},"диагностика-ошибки","Диагностика ошибки",[465,2442,2444],{"id":2443},"_1-проверьте-правильность-написания","1. Проверьте правильность написания",[87,2446,2448],{"className":89,"code":2447,"language":91,"meta":92,"style":92},"# Пример опечатки\n$ pyton --version\nbash: pyton: command not found\n\n# Правильный вариант\n$ python3 --version\nPython 3.10.12\n",[42,2449,2450,2455,2465,2482,2486,2491,2500],{"__ignoreMap":92},[96,2451,2452],{"class":98,"line":99},[96,2453,2454],{"class":102},"# Пример опечатки\n",[96,2456,2457,2459,2462],{"class":98,"line":106},[96,2458,216],{"class":144},[96,2460,2461],{"class":116}," pyton",[96,2463,2464],{"class":164}," --version\n",[96,2466,2467,2470,2473,2476,2479],{"class":98,"line":120},[96,2468,2469],{"class":144},"bash:",[96,2471,2472],{"class":116}," pyton:",[96,2474,2475],{"class":116}," command",[96,2477,2478],{"class":116}," not",[96,2480,2481],{"class":116}," found\n",[96,2483,2484],{"class":98,"line":127},[96,2485,124],{"emptyLinePlaceholder":123},[96,2487,2488],{"class":98,"line":133},[96,2489,2490],{"class":102},"# Правильный вариант\n",[96,2492,2493,2495,2498],{"class":98,"line":154},[96,2494,216],{"class":144},[96,2496,2497],{"class":116}," python3",[96,2499,2464],{"class":164},[96,2501,2502,2505],{"class":98,"line":173},[96,2503,2504],{"class":144},"Python",[96,2506,2507],{"class":164}," 3.10.12\n",[465,2509,2511],{"id":2510},"_2-проверьте-переменную-path","2. Проверьте переменную PATH",[87,2513,2515],{"className":89,"code":2514,"language":91,"meta":92,"style":92},"echo $PATH\n",[42,2516,2517],{"__ignoreMap":92},[96,2518,2519,2521],{"class":98,"line":99},[96,2520,51],{"class":164},[96,2522,2523],{"class":109}," $PATH\n",[21,2525,2526],{},"Типичный вывод:",[87,2528,2532],{"className":2529,"code":2531,"language":1059},[2530],"language-text","/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games\n",[42,2533,2531],{"__ignoreMap":92},[21,2535,2536],{},"Если нужная директория отсутствует, добавьте её:",[87,2538,2540],{"className":89,"code":2539,"language":91,"meta":92,"style":92},"# Временное добавление (действует до закрытия терминала)\nexport PATH=$PATH:/usr/local/myprogram/bin\n\n# Постоянное добавление (для текущего пользователя)\necho 'export PATH=$PATH:/usr/local/myprogram/bin' >> ~/.bashrc\nsource ~/.bashrc\n",[42,2541,2542,2547,2559,2563,2568,2581],{"__ignoreMap":92},[96,2543,2544],{"class":98,"line":99},[96,2545,2546],{"class":102},"# Временное добавление (действует до закрытия терминала)\n",[96,2548,2549,2551,2554,2556],{"class":98,"line":106},[96,2550,55],{"class":113},[96,2552,2553],{"class":109}," PATH",[96,2555,80],{"class":113},[96,2557,2558],{"class":109},"$PATH:/usr/local/myprogram/bin\n",[96,2560,2561],{"class":98,"line":120},[96,2562,124],{"emptyLinePlaceholder":123},[96,2564,2565],{"class":98,"line":127},[96,2566,2567],{"class":102},"# Постоянное добавление (для текущего пользователя)\n",[96,2569,2570,2572,2575,2578],{"class":98,"line":133},[96,2571,51],{"class":164},[96,2573,2574],{"class":116}," 'export PATH=$PATH:/usr/local/myprogram/bin'",[96,2576,2577],{"class":113}," >>",[96,2579,2580],{"class":116}," ~/.bashrc\n",[96,2582,2583,2586],{"class":98,"line":154},[96,2584,2585],{"class":164},"source",[96,2587,2580],{"class":116},[465,2589,2591],{"id":2590},"_3-найдите-местоположение-команды","3. Найдите местоположение команды",[87,2593,2595],{"className":89,"code":2594,"language":91,"meta":92,"style":92},"# Поиск команды в PATH\nwhich python3\n# Вывод: /usr/bin/python3\n\n# Поиск всех файлов, связанных с командой\nwhereis python3\n# Вывод: python3: /usr/bin/python3 /usr/bin/python3.10\n\n# Показать тип команды (встроенная, алиас, функция)\ntype python3\n",[42,2596,2597,2602,2610,2615,2619,2624,2631,2636,2640,2645],{"__ignoreMap":92},[96,2598,2599],{"class":98,"line":99},[96,2600,2601],{"class":102},"# Поиск команды в PATH\n",[96,2603,2604,2607],{"class":98,"line":106},[96,2605,2606],{"class":164},"which",[96,2608,2609],{"class":116}," python3\n",[96,2611,2612],{"class":98,"line":120},[96,2613,2614],{"class":102},"# Вывод: /usr/bin/python3\n",[96,2616,2617],{"class":98,"line":127},[96,2618,124],{"emptyLinePlaceholder":123},[96,2620,2621],{"class":98,"line":133},[96,2622,2623],{"class":102},"# Поиск всех файлов, связанных с командой\n",[96,2625,2626,2629],{"class":98,"line":154},[96,2627,2628],{"class":144},"whereis",[96,2630,2609],{"class":116},[96,2632,2633],{"class":98,"line":173},[96,2634,2635],{"class":102},"# Вывод: python3: /usr/bin/python3 /usr/bin/python3.10\n",[96,2637,2638],{"class":98,"line":178},[96,2639,124],{"emptyLinePlaceholder":123},[96,2641,2642],{"class":98,"line":184},[96,2643,2644],{"class":102},"# Показать тип команды (встроенная, алиас, функция)\n",[96,2646,2647,2650],{"class":98,"line":286},[96,2648,2649],{"class":164},"type",[96,2651,2609],{"class":116},[465,2653,2655],{"id":2654},"_4-проверьте-установлен-ли-пакет","4. Проверьте, установлен ли пакет",[87,2657,2659],{"className":89,"code":2658,"language":91,"meta":92,"style":92},"# Для Debian/Ubuntu\ndpkg -l | grep \u003Cназвание_пакета>\napt list --installed | grep \u003Cназвание_пакета>\n\n# Для CentOS/Fedora/RHEL\nrpm -qa | grep \u003Cназвание_пакета>\ndnf list installed | grep \u003Cназвание_пакета>\n",[42,2660,2661,2666,2689,2712,2716,2721,2741],{"__ignoreMap":92},[96,2662,2663],{"class":98,"line":99},[96,2664,2665],{"class":102},"# Для Debian/Ubuntu\n",[96,2667,2668,2671,2673,2675,2677,2680,2683,2686],{"class":98,"line":106},[96,2669,2670],{"class":144},"dpkg",[96,2672,353],{"class":164},[96,2674,415],{"class":113},[96,2676,418],{"class":144},[96,2678,2679],{"class":113}," \u003C",[96,2681,2682],{"class":116},"название_пакет",[96,2684,2685],{"class":109},"а",[96,2687,2688],{"class":113},">\n",[96,2690,2691,2694,2697,2700,2702,2704,2706,2708,2710],{"class":98,"line":120},[96,2692,2693],{"class":144},"apt",[96,2695,2696],{"class":116}," list",[96,2698,2699],{"class":164}," --installed",[96,2701,415],{"class":113},[96,2703,418],{"class":144},[96,2705,2679],{"class":113},[96,2707,2682],{"class":116},[96,2709,2685],{"class":109},[96,2711,2688],{"class":113},[96,2713,2714],{"class":98,"line":127},[96,2715,124],{"emptyLinePlaceholder":123},[96,2717,2718],{"class":98,"line":133},[96,2719,2720],{"class":102},"# Для CentOS/Fedora/RHEL\n",[96,2722,2723,2726,2729,2731,2733,2735,2737,2739],{"class":98,"line":154},[96,2724,2725],{"class":144},"rpm",[96,2727,2728],{"class":164}," -qa",[96,2730,415],{"class":113},[96,2732,418],{"class":144},[96,2734,2679],{"class":113},[96,2736,2682],{"class":116},[96,2738,2685],{"class":109},[96,2740,2688],{"class":113},[96,2742,2743,2746,2748,2751,2753,2755,2757,2759,2761],{"class":98,"line":173},[96,2744,2745],{"class":144},"dnf",[96,2747,2696],{"class":116},[96,2749,2750],{"class":116}," installed",[96,2752,415],{"class":113},[96,2754,418],{"class":144},[96,2756,2679],{"class":113},[96,2758,2682],{"class":116},[96,2760,2685],{"class":109},[96,2762,2688],{"class":113},[16,2764,2766],{"id":2765},"решения","Решения",[465,2768,2770],{"id":2769},"установка-отсутствующих-команд","Установка отсутствующих команд",[2772,2773,2775],"h4",{"id":2774},"ubuntudebian","Ubuntu/Debian",[87,2777,2779],{"className":89,"code":2778,"language":91,"meta":92,"style":92},"sudo apt update\nsudo apt install \u003Cназвание_пакета>\n\n# Пример: установка curl\nsudo apt install curl\n",[42,2780,2781,2792,2809,2813,2818],{"__ignoreMap":92},[96,2782,2783,2786,2789],{"class":98,"line":99},[96,2784,2785],{"class":144},"sudo",[96,2787,2788],{"class":116}," apt",[96,2790,2791],{"class":116}," update\n",[96,2793,2794,2796,2798,2801,2803,2805,2807],{"class":98,"line":106},[96,2795,2785],{"class":144},[96,2797,2788],{"class":116},[96,2799,2800],{"class":116}," install",[96,2802,2679],{"class":113},[96,2804,2682],{"class":116},[96,2806,2685],{"class":109},[96,2808,2688],{"class":113},[96,2810,2811],{"class":98,"line":120},[96,2812,124],{"emptyLinePlaceholder":123},[96,2814,2815],{"class":98,"line":127},[96,2816,2817],{"class":102},"# Пример: установка curl\n",[96,2819,2820,2822,2824,2826],{"class":98,"line":133},[96,2821,2785],{"class":144},[96,2823,2788],{"class":116},[96,2825,2800],{"class":116},[96,2827,2828],{"class":116}," curl\n",[2772,2830,2832],{"id":2831},"centosrhel","CentOS/RHEL",[87,2834,2836],{"className":89,"code":2835,"language":91,"meta":92,"style":92},"sudo yum install \u003Cназвание_пакета>\n# или\nsudo dnf install \u003Cназвание_пакета>\n",[42,2837,2838,2855,2860],{"__ignoreMap":92},[96,2839,2840,2842,2845,2847,2849,2851,2853],{"class":98,"line":99},[96,2841,2785],{"class":144},[96,2843,2844],{"class":116}," yum",[96,2846,2800],{"class":116},[96,2848,2679],{"class":113},[96,2850,2682],{"class":116},[96,2852,2685],{"class":109},[96,2854,2688],{"class":113},[96,2856,2857],{"class":98,"line":106},[96,2858,2859],{"class":102},"# или\n",[96,2861,2862,2864,2867,2869,2871,2873,2875],{"class":98,"line":120},[96,2863,2785],{"class":144},[96,2865,2866],{"class":116}," dnf",[96,2868,2800],{"class":116},[96,2870,2679],{"class":113},[96,2872,2682],{"class":116},[96,2874,2685],{"class":109},[96,2876,2688],{"class":113},[2772,2878,2880],{"id":2879},"arch-linux","Arch Linux",[87,2882,2884],{"className":89,"code":2883,"language":91,"meta":92,"style":92},"sudo pacman -S \u003Cназвание_пакета>\n",[42,2885,2886],{"__ignoreMap":92},[96,2887,2888,2890,2893,2896,2898,2900,2902],{"class":98,"line":99},[96,2889,2785],{"class":144},[96,2891,2892],{"class":116}," pacman",[96,2894,2895],{"class":164}," -S",[96,2897,2679],{"class":113},[96,2899,2682],{"class":116},[96,2901,2685],{"class":109},[96,2903,2688],{"class":113},[465,2905,2907],{"id":2906},"часто-встречающиеся-команды","Часто встречающиеся команды",[679,2909,2910,2923],{},[682,2911,2912],{},[685,2913,2914,2917,2920],{},[688,2915,2916],{},"Команда",[688,2918,2919],{},"Пакет (Debian/Ubuntu)",[688,2921,2922],{},"Пакет (CentOS)",[699,2924,2925,2940,2955,2970,2985,3000],{},[685,2926,2927,2932,2936],{},[704,2928,2929],{},[42,2930,2931],{},"curl",[704,2933,2934],{},[42,2935,2931],{},[704,2937,2938],{},[42,2939,2931],{},[685,2941,2942,2947,2951],{},[704,2943,2944],{},[42,2945,2946],{},"wget",[704,2948,2949],{},[42,2950,2946],{},[704,2952,2953],{},[42,2954,2946],{},[685,2956,2957,2962,2966],{},[704,2958,2959],{},[42,2960,2961],{},"git",[704,2963,2964],{},[42,2965,2961],{},[704,2967,2968],{},[42,2969,2961],{},[685,2971,2972,2977,2981],{},[704,2973,2974],{},[42,2975,2976],{},"nano",[704,2978,2979],{},[42,2980,2976],{},[704,2982,2983],{},[42,2984,2976],{},[685,2986,2987,2992,2996],{},[704,2988,2989],{},[42,2990,2991],{},"vim",[704,2993,2994],{},[42,2995,2991],{},[704,2997,2998],{},[42,2999,2991],{},[685,3001,3002,3007,3011],{},[704,3003,3004],{},[42,3005,3006],{},"python3",[704,3008,3009],{},[42,3010,3006],{},[704,3012,3013],{},[42,3014,3006],{},[16,3016,3018],{"id":3017},"профилактика","Профилактика",[846,3020,3021,3027,3037,3043],{},[32,3022,3023,3026],{},[74,3024,3025],{},"Регулярно обновляйте систему"," — это обеспечивает наличие актуальных версий пакетов",[32,3028,3029,3032,3033,3036],{},[74,3030,3031],{},"Используйте автодополнение"," — нажмите ",[42,3034,3035],{},"Tab"," для автоматического завершения команды",[32,3038,3039,3042],{},[74,3040,3041],{},"Проверяйте документацию"," — перед установкой нового ПО изучите зависимости",[32,3044,3045,3048],{},[74,3046,3047],{},"Создавайте алиасы"," — для часто используемых команд с длинными путями",[16,3050,3052],{"id":3051},"заключение","Заключение",[21,3054,889,3055,3057],{},[42,3056,892],{}," редко является серьёзной проблемой и обычно легко устраняется установкой соответствующего пакета или исправлением переменной PATH. Следуя описанным выше шагам диагностики, вы быстро найдёте и устраните причину ошибки.",[21,3059,3060],{},"Если проблема сохраняется после выполнения всех рекомендаций, проверьте журналы системы или обратитесь к документации конкретного дистрибутива Linux.",[962,3062,3063],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":92,"searchDepth":106,"depth":106,"links":3065},[3066,3067,3073,3077,3078],{"id":2404,"depth":106,"text":2405},{"id":2439,"depth":106,"text":2440,"children":3068},[3069,3070,3071,3072],{"id":2443,"depth":120,"text":2444},{"id":2510,"depth":120,"text":2511},{"id":2590,"depth":120,"text":2591},{"id":2654,"depth":120,"text":2655},{"id":2765,"depth":106,"text":2766,"children":3074},[3075,3076],{"id":2769,"depth":120,"text":2770},{"id":2906,"depth":120,"text":2907},{"id":3017,"depth":106,"text":3018},{"id":3051,"depth":106,"text":3052},"CMD_NF","2026-02-13 20:30:27","Полное руководство по устранению ошибки «bash: command not found» в Linux. Причины возникновения, методы диагностики и исправления.","15-45 мин",[3084,3087,3090],{"question":3085,"answer":3086},"Почему команда работает от root, но не работает от обычного пользователя?","Это может быть связано с разными переменными PATH для разных пользователей. Пользователь root обычно имеет `/sbin` и `/usr/sbin` в PATH, а обычный пользователь — нет.",{"question":3088,"answer":3089},"Как найти, где установлена программа?","Используйте команды `which \u003Cкоманда>` или `type \u003Cкоманда>` для поиска пути к исполняемому файлу.",{"question":3091,"answer":3092},"Команда была вчера, а сегодня нет — что могло измениться?","Возможно, вы открыли новую сессию терминала, где PATH не инициализирован корректно, или пакет был удалён/обновлён.",[3094,3097,3100,3103],{"name":3095,"text":3096},"Проверьте правильность написания команды","Убедитесь, что вы не допустили опечатку. Linux чувствителен к регистру, и `ls` ≠ `LS`.",{"name":3098,"text":3099},"Проверьте переменную PATH","Выполните `echo $PATH` и убедитесь, что нужные директории присутствуют. Добавьте путь: `export PATH=$PATH:/новый/путь`",{"name":3101,"text":3102},"Установите отсутствующий пакет","Для Ubuntu/Debian: `sudo apt install \u003Cпакет>`. Для CentOS/Fedora: `sudo yum install \u003Cпакет>` или `sudo dnf install \u003Cпакет>`.",{"name":3104,"text":3105},"Найдите местоположение команды","Используйте `which \u003Cкоманда>` или `whereis \u003Cкоманда>`, чтобы узнать, где находится исполняемый файл.",[3107,3108,3109,3110,3111],"bash command not found","команда не найдена linux","исправить command not found","path переменная linux","установить команду linux",{},[3114,3115],"/errors/linux/permission-denied","/guides/linux/basic-linux-commands","Ошибки Linux",{"title":2373,"description":3081},"medium","errors/linux/command-not-found","Ошибка «command not found» возникает, когда система не может найти исполняемый файл команды. Чаще всего это происходит из-за отсутствия пакета, неправильного PATH или опечатки в названии команды.",[1032,91,1046,892,3122],"path","error","VHUrr0qTYUO9NxM4oG1pbWjng27K23AxSa-Ql7ELRxE"]