[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/linux-shell-scripting-basics":3,"mdc-h76je5-key":821,"mdc-vfdhcd-key":832,"mdc--x401jl-key":840,"mdc-3uxgvw-key":848,"mdc--qev86w-key":856,"mdc-33pzp9-key":864,"mdc-sxmkth-key":872,"mdc--t9wdm7-key":880,"mdc-figc2g-key":888,"related-/guides/linux/linux-cron-jobs-guide,/guides/linux/linux-file-permissions-guide,/guides/linux/linux-text-processing-awk-sed":896},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":753,"code":753,"createdAt":754,"description":755,"difficulty":756,"draft":757,"estimatedTime":758,"extension":759,"faq":760,"howToSteps":773,"howToTotalTime":789,"image":753,"keywords":790,"locale":800,"meta":801,"navigation":147,"path":802,"platform":803,"related":804,"section":808,"seo":809,"severity":753,"stem":810,"summary":811,"tags":812,"twitterCreator":753,"twitterSite":753,"type":819,"updatedAt":754,"__hash__":820},"content_ru/guides/linux/linux-shell-scripting-basics.md","Освойте основы написания скриптов в Linux Shell: от первых команд до запуска",[7,8,9,10],"Bash 4.4+","Ubuntu 22.04 LTS и выше","Debian 11+","CentOS 8+/Rocky Linux 8+","FixPedia Team",{"type":13,"value":14,"toc":742},"minimark",[15,20,24,27,31,59,63,70,87,90,107,120,124,127,209,216,219,223,230,319,326,373,380,433,437,444,531,538,592,596,599,613,616,645,648,659,663,666,675,682,686,738],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23],"p",{},"Shell-скрипты позволяют автоматизировать рутину в Linux: резервное копирование, обслуживание логов, развёртывание и проверку систем. Вместо того чтобы вводить одни и те же команды каждый день, вы создаёте скрипт один раз и запускаете его за секунды. Это экономит время и снижает риск ошибок от опечаток.",[21,25,26],{},"После прочтения вы сможете создавать и запускать базовые скрипты, использовать переменные, условия и циклы, а также проверять результат и исправлять типовые ошибки.",[16,28,30],{"id":29},"требования-подготовка","Требования / Подготовка",[32,33,34,38,41,44],"ul",{},[35,36,37],"li",{},"Bash 4.4+ (входит в большинство современных дистрибутивов).",[35,39,40],{},"Любой текстовый редактор: nano, vim или VS Code.",[35,42,43],{},"Права на запись в рабочий каталог и выполнение файлов.",[35,45,46,47,51,52,51,55,58],{},"Базовое понимание командной строки: ",[48,49,50],"code",{},"cd",", ",[48,53,54],{},"ls",[48,56,57],{},"chmod",".",[16,60,62],{"id":61},"шаг-1-создать-файл-скрипта-и-добавить-shebang","Шаг 1: Создать файл скрипта и добавить shebang",[21,64,65,66,69],{},"Создайте файл с понятным именем, например ",[48,67,68],{},"hello.sh",", и добавьте первой строкой shebang — это указывает, в каком shell выполнять скрипт:",[71,72,77],"pre",{"className":73,"code":74,"language":75,"meta":76,"style":76},"language-bash shiki shiki-themes github-light github-dark","#!/bin/bash\n","bash","",[48,78,79],{"__ignoreMap":76},[80,81,84],"span",{"class":82,"line":83},"line",1,[80,85,74],{"class":86},"sJ8bj",[21,88,89],{},"Сделайте файл исполняемым:",[71,91,93],{"className":73,"code":92,"language":75,"meta":76,"style":76},"chmod +x hello.sh\n",[48,94,95],{"__ignoreMap":76},[80,96,97,100,104],{"class":82,"line":83},[80,98,57],{"class":99},"sScJk",[80,101,103],{"class":102},"sZZnC"," +x",[80,105,106],{"class":102}," hello.sh\n",[108,109,110],"blockquote",{},[21,111,112,113,116,117,58],{},"💡 Совет: Если скрипт должен работать на разных системах, проверьте путь к bash через ",[48,114,115],{},"which bash",". Для максимальной переносимости можно использовать ",[48,118,119],{},"#!/usr/bin/env bash",[16,121,123],{"id":122},"шаг-2-добавить-комментарии-и-переменные","Шаг 2: Добавить комментарии и переменные",[21,125,126],{},"Опишите цель скрипта и задайте переменные. Всегда заключайте строки с пробелами в двойные кавычки:",[71,128,130],{"className":73,"code":129,"language":75,"meta":76,"style":76},"#!/bin/bash\n# hello.sh — приветствие и информация о системе\n\nuser=\"Иван\"\ngreeting=\"Добро пожаловать, $user\"\necho \"$greeting\"\necho \"Сегодня: $(date)\"\n",[48,131,132,136,142,149,163,180,195],{"__ignoreMap":76},[80,133,134],{"class":82,"line":83},[80,135,74],{"class":86},[80,137,139],{"class":82,"line":138},2,[80,140,141],{"class":86},"# hello.sh — приветствие и информация о системе\n",[80,143,145],{"class":82,"line":144},3,[80,146,148],{"emptyLinePlaceholder":147},true,"\n",[80,150,152,156,160],{"class":82,"line":151},4,[80,153,155],{"class":154},"sVt8B","user",[80,157,159],{"class":158},"szBVR","=",[80,161,162],{"class":102},"\"Иван\"\n",[80,164,166,169,171,174,177],{"class":82,"line":165},5,[80,167,168],{"class":154},"greeting",[80,170,159],{"class":158},[80,172,173],{"class":102},"\"Добро пожаловать, ",[80,175,176],{"class":154},"$user",[80,178,179],{"class":102},"\"\n",[80,181,183,187,190,193],{"class":82,"line":182},6,[80,184,186],{"class":185},"sj4cs","echo",[80,188,189],{"class":102}," \"",[80,191,192],{"class":154},"$greeting",[80,194,179],{"class":102},[80,196,198,200,203,206],{"class":82,"line":197},7,[80,199,186],{"class":185},[80,201,202],{"class":102}," \"Сегодня: $(",[80,204,205],{"class":99},"date",[80,207,208],{"class":102},")\"\n",[21,210,211,212,215],{},"Используйте ",[48,213,214],{},"$(command)"," для подстановки вывода команды в переменную или строку.",[217,218],"in-article-ad",{},[16,220,222],{"id":221},"шаг-3-реализовать-условия-и-циклы","Шаг 3: Реализовать условия и циклы",[21,224,225,226,229],{},"Добавьте логику с помощью ",[48,227,228],{},"if"," и циклы для повторяющихся задач. Пример проверки существования файла:",[71,231,233],{"className":73,"code":232,"language":75,"meta":76,"style":76},"file=\"/tmp/test.log\"\n\nif [[ -f \"$file\" ]]; then\n  echo \"Файл $file существует.\"\nelse\n  echo \"Файл $file не найден — создаю.\"\n  touch \"$file\"\nfi\n",[48,234,235,245,249,273,286,291,302,313],{"__ignoreMap":76},[80,236,237,240,242],{"class":82,"line":83},[80,238,239],{"class":154},"file",[80,241,159],{"class":158},[80,243,244],{"class":102},"\"/tmp/test.log\"\n",[80,246,247],{"class":82,"line":138},[80,248,148],{"emptyLinePlaceholder":147},[80,250,251,253,256,259,261,264,267,270],{"class":82,"line":144},[80,252,228],{"class":158},[80,254,255],{"class":154}," [[ ",[80,257,258],{"class":158},"-f",[80,260,189],{"class":102},[80,262,263],{"class":154},"$file",[80,265,266],{"class":102},"\"",[80,268,269],{"class":154}," ]]; ",[80,271,272],{"class":158},"then\n",[80,274,275,278,281,283],{"class":82,"line":151},[80,276,277],{"class":185},"  echo",[80,279,280],{"class":102}," \"Файл ",[80,282,263],{"class":154},[80,284,285],{"class":102}," существует.\"\n",[80,287,288],{"class":82,"line":165},[80,289,290],{"class":158},"else\n",[80,292,293,295,297,299],{"class":82,"line":182},[80,294,277],{"class":185},[80,296,280],{"class":102},[80,298,263],{"class":154},[80,300,301],{"class":102}," не найден — создаю.\"\n",[80,303,304,307,309,311],{"class":82,"line":197},[80,305,306],{"class":99},"  touch",[80,308,189],{"class":102},[80,310,263],{"class":154},[80,312,179],{"class":102},[80,314,316],{"class":82,"line":315},8,[80,317,318],{"class":158},"fi\n",[21,320,321,322,325],{},"Пример цикла ",[48,323,324],{},"for"," для обработки списка:",[71,327,329],{"className":73,"code":328,"language":75,"meta":76,"style":76},"for name in Алиса Борис Виктор; do\n  echo \"Привет, $name\"\ndone\n",[48,330,331,356,368],{"__ignoreMap":76},[80,332,333,335,338,341,344,347,350,353],{"class":82,"line":83},[80,334,324],{"class":158},[80,336,337],{"class":154}," name ",[80,339,340],{"class":158},"in",[80,342,343],{"class":102}," Алиса",[80,345,346],{"class":102}," Борис",[80,348,349],{"class":102}," Виктор",[80,351,352],{"class":154},"; ",[80,354,355],{"class":158},"do\n",[80,357,358,360,363,366],{"class":82,"line":138},[80,359,277],{"class":185},[80,361,362],{"class":102}," \"Привет, ",[80,364,365],{"class":154},"$name",[80,367,179],{"class":102},[80,369,370],{"class":82,"line":144},[80,371,372],{"class":158},"done\n",[21,374,375,376,379],{},"И цикл ",[48,377,378],{},"while"," для чтения файла построчно:",[71,381,383],{"className":73,"code":382,"language":75,"meta":76,"style":76},"while IFS= read -r line; do\n  echo \"Строка: $line\"\ndone \u003C \"$file\"\n",[48,384,385,407,419],{"__ignoreMap":76},[80,386,387,389,392,394,397,400,403,405],{"class":82,"line":83},[80,388,378],{"class":158},[80,390,391],{"class":154}," IFS",[80,393,159],{"class":158},[80,395,396],{"class":185}," read",[80,398,399],{"class":185}," -r",[80,401,402],{"class":102}," line",[80,404,352],{"class":154},[80,406,355],{"class":158},[80,408,409,411,414,417],{"class":82,"line":138},[80,410,277],{"class":185},[80,412,413],{"class":102}," \"Строка: ",[80,415,416],{"class":154},"$line",[80,418,179],{"class":102},[80,420,421,424,427,429,431],{"class":82,"line":144},[80,422,423],{"class":158},"done",[80,425,426],{"class":158}," \u003C",[80,428,189],{"class":102},[80,430,263],{"class":154},[80,432,179],{"class":102},[16,434,436],{"id":435},"шаг-4-принимать-аргументы-и-проверять-коды-возврата","Шаг 4: Принимать аргументы и проверять коды возврата",[21,438,439,440,443],{},"Скрипт может получать параметры при запуске. Проверяйте их количество и используйте ",[48,441,442],{},"exit"," для завершения с кодом:",[71,445,447],{"className":73,"code":446,"language":75,"meta":76,"style":76},"#!/bin/bash\n# usage: ./greet.sh \u003Cимя>\n\nif [[ $# -lt 1 ]]; then\n  echo \"Ошибка: укажите имя.\"\n  exit 1\nfi\n\nname=\"$1\"\necho \"Здравствуйте, $name\"\n",[48,448,449,453,458,462,481,488,496,500,504,519],{"__ignoreMap":76},[80,450,451],{"class":82,"line":83},[80,452,74],{"class":86},[80,454,455],{"class":82,"line":138},[80,456,457],{"class":86},"# usage: ./greet.sh \u003Cимя>\n",[80,459,460],{"class":82,"line":144},[80,461,148],{"emptyLinePlaceholder":147},[80,463,464,466,468,471,474,477,479],{"class":82,"line":151},[80,465,228],{"class":158},[80,467,255],{"class":154},[80,469,470],{"class":185},"$#",[80,472,473],{"class":158}," -lt",[80,475,476],{"class":185}," 1",[80,478,269],{"class":154},[80,480,272],{"class":158},[80,482,483,485],{"class":82,"line":165},[80,484,277],{"class":185},[80,486,487],{"class":102}," \"Ошибка: укажите имя.\"\n",[80,489,490,493],{"class":82,"line":182},[80,491,492],{"class":185},"  exit",[80,494,495],{"class":185}," 1\n",[80,497,498],{"class":82,"line":197},[80,499,318],{"class":158},[80,501,502],{"class":82,"line":315},[80,503,148],{"emptyLinePlaceholder":147},[80,505,507,510,512,514,517],{"class":82,"line":506},9,[80,508,509],{"class":154},"name",[80,511,159],{"class":158},[80,513,266],{"class":102},[80,515,516],{"class":185},"$1",[80,518,179],{"class":102},[80,520,522,524,527,529],{"class":82,"line":521},10,[80,523,186],{"class":185},[80,525,526],{"class":102}," \"Здравствуйте, ",[80,528,365],{"class":154},[80,530,179],{"class":102},[21,532,533,534,537],{},"Проверяйте успешность команд через ",[48,535,536],{},"$?"," или прямо в условии:",[71,539,541],{"className":73,"code":540,"language":75,"meta":76,"style":76},"if cp source.txt backup.txt; then\n  echo \"Копирование успешно.\"\nelse\n  echo \"Копирование не удалось.\" >&2\n  exit 2\nfi\n",[48,542,543,560,567,571,581,588],{"__ignoreMap":76},[80,544,545,547,550,553,556,558],{"class":82,"line":83},[80,546,228],{"class":158},[80,548,549],{"class":99}," cp",[80,551,552],{"class":102}," source.txt",[80,554,555],{"class":102}," backup.txt",[80,557,352],{"class":154},[80,559,272],{"class":158},[80,561,562,564],{"class":82,"line":138},[80,563,277],{"class":185},[80,565,566],{"class":102}," \"Копирование успешно.\"\n",[80,568,569],{"class":82,"line":144},[80,570,290],{"class":158},[80,572,573,575,578],{"class":82,"line":151},[80,574,277],{"class":185},[80,576,577],{"class":102}," \"Копирование не удалось.\"",[80,579,580],{"class":158}," >&2\n",[80,582,583,585],{"class":82,"line":165},[80,584,492],{"class":185},[80,586,587],{"class":185}," 2\n",[80,589,590],{"class":82,"line":182},[80,591,318],{"class":158},[16,593,595],{"id":594},"шаг-5-протестировать-и-отладить","Шаг 5: Протестировать и отладить",[21,597,598],{},"Запустите скрипт в режиме отладки, чтобы видеть каждую выполненную команду:",[71,600,602],{"className":73,"code":601,"language":75,"meta":76,"style":76},"bash -x hello.sh\n",[48,603,604],{"__ignoreMap":76},[80,605,606,608,611],{"class":82,"line":83},[80,607,75],{"class":99},[80,609,610],{"class":185}," -x",[80,612,106],{"class":102},[21,614,615],{},"Или добавьте временно в скрипт:",[71,617,619],{"className":73,"code":618,"language":75,"meta":76,"style":76},"set -x   # включить отладку\n# ваши команды\nset +x   # отключить отладку\n",[48,620,621,631,636],{"__ignoreMap":76},[80,622,623,626,628],{"class":82,"line":83},[80,624,625],{"class":185},"set",[80,627,610],{"class":185},[80,629,630],{"class":86},"   # включить отладку\n",[80,632,633],{"class":82,"line":138},[80,634,635],{"class":86},"# ваши команды\n",[80,637,638,640,642],{"class":82,"line":144},[80,639,625],{"class":185},[80,641,103],{"class":102},[80,643,644],{"class":86},"   # отключить отладку\n",[21,646,647],{},"Проверьте:",[32,649,650,653,656],{},[35,651,652],{},"Правильность путей и прав на файлы.",[35,654,655],{},"Корректность shebang.",[35,657,658],{},"Отсутствие скрытых символов (особенно при переносе из Windows).",[16,660,662],{"id":661},"проверка-результата","Проверка результата",[21,664,665],{},"После правок запустите скрипт:",[71,667,669],{"className":73,"code":668,"language":75,"meta":76,"style":76},"./hello.sh\n",[48,670,671],{"__ignoreMap":76},[80,672,673],{"class":82,"line":83},[80,674,668],{"class":99},[21,676,677,678,681],{},"Ожидаемый вывод должен содержать приветствие, текущую дату и результаты действий, прописанных в логике. Если поведение отличается, используйте ",[48,679,680],{},"bash -x"," и проверьте коды возврата команд.",[16,683,685],{"id":684},"возможные-проблемы","Возможные проблемы",[32,687,688,698,707,719,728],{},[35,689,690,694,695,58],{},[691,692,693],"strong",{},"Permission denied"," — у файла нет прав на выполнение. Выполните ",[48,696,697],{},"chmod +x script.sh",[35,699,700,703,704,58],{},[691,701,702],{},"No such file or directory"," при запуске — проверьте shebang и наличие переносов строк (CRLF). Исправьте через ",[48,705,706],{},"dos2unix script.sh",[35,708,709,712,713,716,717,58],{},[691,710,711],{},"Скрипт выполняется в другом shell"," — без shebang запуск может пойти через текущий shell, что приведёт к ошибкам синтаксиса. Всегда указывайте ",[48,714,715],{},"#!/bin/bash"," или ",[48,718,119],{},[35,720,721,724,725,58],{},[691,722,723],{},"Переменные пустые или с пробелами"," — заключайте их в двойные кавычки внутри условий и команд: ",[48,726,727],{},"\"$var\"",[35,729,730,733,734,737],{},[691,731,732],{},"Неожиданное завершение на ошибке"," — добавьте ",[48,735,736],{},"set -e"," в начало, чтобы скрипт прерывался при первой неудачной команде, или обрабатывайте коды возврата явно.",[739,740,741],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":76,"searchDepth":138,"depth":138,"links":743},[744,745,746,747,748,749,750,751,752],{"id":18,"depth":138,"text":19},{"id":29,"depth":138,"text":30},{"id":61,"depth":138,"text":62},{"id":122,"depth":138,"text":123},{"id":221,"depth":138,"text":222},{"id":435,"depth":138,"text":436},{"id":594,"depth":138,"text":595},{"id":661,"depth":138,"text":662},{"id":684,"depth":138,"text":685},null,"2026-04-27 11:19:15","Пошаговое руководство по созданию и запуску shell-скриптов в Linux. За 10–15 минут вы освоите переменные, условия, циклы и отладку. Начните автоматизировать рутину уже сегодня.","easy",false,"10-15 мин","md",[761,764,767,770],{"question":762,"answer":763},"В чём разница между sh и bash при написании скриптов?","Bash расширяет возможности sh: добавляет массивы, расширенные шаблоны и удобный синтаксис. Для переносимости в старых системах используют sh, для новых — bash.",{"question":765,"answer":766},"Почему скрипт не запускается по двойному клику или выдаёт «Permission denied»?","У файла нет прав на выполнение. Выполните chmod +x script.sh. Также проверьте shebang в первой строке и запускайте через ./script.sh из каталога с файлом.",{"question":768,"answer":769},"Как отлаживать скрипт, если он работает не так, как ожидалось?","Запускайте с bash -x script.sh или добавьте set -x в скрипт. Используйте echo для промежуточных значений и проверяйте коды возврата через $?.",{"question":771,"answer":772},"Нужно ли всегда писать #!/bin/bash или можно обойтись без него?","Shebang обязателен для прямого запуска ./script.sh. Без него скрипт выполнится в текущем shell, что может привести к несовместимости синтаксиса и переменных.",[774,777,780,783,786],{"name":775,"text":776},"Создать файл скрипта и добавить shebang","Создайте файл с расширением .sh, добавьте первой строкой #!/bin/bash и сделайте файл исполняемым через chmod +x.",{"name":778,"text":779},"Добавить комментарии и переменные","Опишите цель скрипта комментариями, задайте переменные и используйте кавычки для строк с пробелами.",{"name":781,"text":782},"Реализовать условия и циклы","Используйте if/elif/else для ветвлений и for/while для циклов. Заключайте переменные в двойные кавычки внутри условий.",{"name":784,"text":785},"Принимать аргументы и проверять коды возврата","Через $1, $2 читайте параметры, а через $? проверяйте успешность команд. Завершайте скрипт с разными exit при ошибках.",{"name":787,"text":788},"Протестировать и отладить","Запустите скрипт с bash -x, проверьте пути и права, убедитесь, что он работает в пустом каталоге и с разными входными данными.","PT15M",[791,792,793,794,795,796,797,798,799],"linux shell scripting basics","как написать скрипт в linux","bash скрипт для начинающих","запуск shell скрипта linux","bash переменные и условия","shell скрипт автоматизация задач","bash отладка скрипта","shebang linux что это","bash цикл for while","ru_RU",{},"/guides/linux/linux-shell-scripting-basics","linux",[805,806,807],"/guides/linux/linux-cron-jobs-guide","/guides/linux/linux-file-permissions-guide","/guides/linux/linux-text-processing-awk-sed","Гайды Linux",{"title":5,"description":755},"guides/linux/linux-shell-scripting-basics","Краткое введение в написание shell-скриптов для Linux: вы научитесь создавать, запускать и отлаживать скрипты, используя переменные, условия и циклы для автоматизации типовых задач.",[803,75,813,814,815,816,817,818],"shell","scripting","automation","bash-скрипты","shell-скрипты","bash-циклы","guide","NPJ2XuIgHBGKFnuyynrWEylDyAue4_5nPM1FI9f6pCU",{"data":822,"body":823},{},{"type":824,"children":825},"root",[826],{"type":827,"tag":21,"props":828,"children":829},"element",{},[830],{"type":831,"value":763},"text",{"data":833,"body":834},{},{"type":824,"children":835},[836],{"type":827,"tag":21,"props":837,"children":838},{},[839],{"type":831,"value":766},{"data":841,"body":842},{},{"type":824,"children":843},[844],{"type":827,"tag":21,"props":845,"children":846},{},[847],{"type":831,"value":769},{"data":849,"body":850},{},{"type":824,"children":851},[852],{"type":827,"tag":21,"props":853,"children":854},{},[855],{"type":831,"value":772},{"data":857,"body":858},{},{"type":824,"children":859},[860],{"type":827,"tag":21,"props":861,"children":862},{},[863],{"type":831,"value":776},{"data":865,"body":866},{},{"type":824,"children":867},[868],{"type":827,"tag":21,"props":869,"children":870},{},[871],{"type":831,"value":779},{"data":873,"body":874},{},{"type":824,"children":875},[876],{"type":827,"tag":21,"props":877,"children":878},{},[879],{"type":831,"value":782},{"data":881,"body":882},{},{"type":824,"children":883},[884],{"type":827,"tag":21,"props":885,"children":886},{},[887],{"type":831,"value":785},{"data":889,"body":890},{},{"type":824,"children":891},[892],{"type":827,"tag":21,"props":893,"children":894},{},[895],{"type":831,"value":788},[897,1398],{"id":898,"title":899,"appliesTo":900,"author":11,"body":904,"canonical":753,"code":753,"createdAt":1346,"description":1347,"difficulty":1348,"draft":757,"estimatedTime":758,"extension":759,"faq":1349,"howToSteps":1362,"howToTotalTime":789,"image":753,"keywords":1378,"locale":800,"meta":1385,"navigation":147,"path":806,"platform":803,"related":1386,"section":808,"seo":1390,"severity":753,"stem":1391,"summary":1392,"tags":1393,"twitterCreator":753,"twitterSite":753,"type":819,"updatedAt":1346,"__hash__":1397},"content_ru/guides/linux/linux-file-permissions-guide.md","Полное руководство по установке прав доступа к файлам в Linux",[901,902,903],"Ubuntu 22.04","Debian 12","CentOS 8",{"type":13,"value":905,"toc":1333},[906,908,911,913,935,939,943,954,980,987,991,1010,1015,1054,1059,1063,1069,1107,1117,1121,1124,1205,1209,1212,1235,1245,1247,1256,1258,1301,1304,1306,1310,1330],[16,907,19],{"id":18},[21,909,910],{},"Контроль над правами доступа к файлам — ключевая часть поддержания безопасности в Linux. Правильные режимы предотвращают случайное изменение критически важных конфигурационных файлов, защищают личные данные и позволяют совместно использовать ресурсы безопасным образом. После выполнения этого руководства вы сможете быстро настраивать права, изменять владельцев и использовать расширенные ACL для тонкой грануляции доступа.",[16,912,30],{"id":29},[32,914,915,922,932],{},[35,916,917,918,921],{},"Доступ к терминалу с правами суперпользователя (",[48,919,920],{},"sudo","), если нужно изменять системные файлы.",[35,923,924,925,51,927,51,929,931],{},"Базовое знакомство с основными командами оболочки (",[48,926,54],{},[48,928,50],{},[48,930,920],{},").",[35,933,934],{},"Файловая система должна поддерживать ACL ( большинство современных дистрибутивов уже включают их).",[16,936,938],{"id":937},"пошаговая-инструкция","Пошаговая инструкция",[16,940,942],{"id":941},"шаг-1-определите-текущие-права-доступа","Шаг 1: Определите текущие права доступа",[21,944,945,946,949,950,953],{},"Прежде чем изменять что-либо, проверьте текущие права. Используйте ",[48,947,948],{},"ls -l"," для краткого просмотра или ",[48,951,952],{},"stat"," для получения полной информации.",[71,955,957],{"className":73,"code":956,"language":75,"meta":76,"style":76},"ls -l /path/to/file\n# или\nstat /path/to/file\n",[48,958,959,969,974],{"__ignoreMap":76},[80,960,961,963,966],{"class":82,"line":83},[80,962,54],{"class":99},[80,964,965],{"class":185}," -l",[80,967,968],{"class":102}," /path/to/file\n",[80,970,971],{"class":82,"line":138},[80,972,973],{"class":86},"# или\n",[80,975,976,978],{"class":82,"line":144},[80,977,952],{"class":185},[80,979,968],{"class":102},[21,981,982,983,986],{},"Вывод показывает режим доступа в виде восьмеричного числа (например, ",[48,984,985],{},"644","), владельца и группу.",[16,988,990],{"id":989},"шаг-2-измените-права-доступа-с-помощью-chmod","Шаг 2: Измените права доступа с помощью chmod",[21,992,993,994,996,997,51,1000,51,1003,51,1006,1009],{},"Команда ",[48,995,57],{}," позволяет быстро настроить режим доступа. Вы можете использовать символы (",[48,998,999],{},"u",[48,1001,1002],{},"g",[48,1004,1005],{},"o",[48,1007,1008],{},"a",") или числовые значения.",[21,1011,1012],{},[691,1013,1014],{},"Примеры:",[71,1016,1018],{"className":73,"code":1017,"language":75,"meta":76,"style":76},"# Сделать скрипт исполняемым для всех\nchmod 755 script.sh\n\n# Добавить запись только для владельца\nchmod u+x project.conf\n",[48,1019,1020,1025,1035,1039,1044],{"__ignoreMap":76},[80,1021,1022],{"class":82,"line":83},[80,1023,1024],{"class":86},"# Сделать скрипт исполняемым для всех\n",[80,1026,1027,1029,1032],{"class":82,"line":138},[80,1028,57],{"class":99},[80,1030,1031],{"class":185}," 755",[80,1033,1034],{"class":102}," script.sh\n",[80,1036,1037],{"class":82,"line":144},[80,1038,148],{"emptyLinePlaceholder":147},[80,1040,1041],{"class":82,"line":151},[80,1042,1043],{"class":86},"# Добавить запись только для владельца\n",[80,1045,1046,1048,1051],{"class":82,"line":165},[80,1047,57],{"class":99},[80,1049,1050],{"class":102}," u+x",[80,1052,1053],{"class":102}," project.conf\n",[21,1055,1056,1057,58],{},"После изменения прав проверьте результат с помощью ",[48,1058,948],{},[16,1060,1062],{"id":1061},"шаг-3-измените-владельца-и-группу-с-chown","Шаг 3: Измените владельца и группу с chown",[21,1064,1065,1068],{},[48,1066,1067],{},"chown"," изменяет владельца, группу или оба значения одновременно.",[71,1070,1072],{"className":73,"code":1071,"language":75,"meta":76,"style":76},"# Изменить владельца и группу\nchown alice:developers secret.txt\n\n# Изменить только владельца\nchown bob: secret.txt\n",[48,1073,1074,1079,1089,1093,1098],{"__ignoreMap":76},[80,1075,1076],{"class":82,"line":83},[80,1077,1078],{"class":86},"# Изменить владельца и группу\n",[80,1080,1081,1083,1086],{"class":82,"line":138},[80,1082,1067],{"class":99},[80,1084,1085],{"class":102}," alice:developers",[80,1087,1088],{"class":102}," secret.txt\n",[80,1090,1091],{"class":82,"line":144},[80,1092,148],{"emptyLinePlaceholder":147},[80,1094,1095],{"class":82,"line":151},[80,1096,1097],{"class":86},"# Изменить только владельца\n",[80,1099,1100,1102,1105],{"class":82,"line":165},[80,1101,1067],{"class":99},[80,1103,1104],{"class":102}," bob:",[80,1106,1088],{"class":102},[21,1108,1109,1110,1113,1114,931],{},"Если вам нужно изменить только группу, используйте ",[48,1111,1112],{},":"," для пропуска владельца (",[48,1115,1116],{},":wheel",[16,1118,1120],{"id":1119},"шаг-4-используйте-setfacl-для-расширенных-атрибутов","Шаг 4: Используйте setfacl для расширенных атрибутов",[21,1122,1123],{},"Для более детального контроля доступа, чем может предоставить традиционный режим, используйте ACL.",[1125,1126,1127,1152,1190],"ol",{},[35,1128,1129,1130,1112,1133],{},"Убедитесь, что файловая система смонтирована с параметром ",[48,1131,1132],{},"acl",[71,1134,1136],{"className":73,"code":1135,"language":75,"meta":76,"style":76},"mount -o remount,acl /mnt\n",[48,1137,1138],{"__ignoreMap":76},[80,1139,1140,1143,1146,1149],{"class":82,"line":83},[80,1141,1142],{"class":99},"mount",[80,1144,1145],{"class":185}," -o",[80,1147,1148],{"class":102}," remount,acl",[80,1150,1151],{"class":102}," /mnt\n",[35,1153,1154,1155,1179,1182,1183,1186,1187,58],{},"Назначьте права конкретному пользователю или группе:",[71,1156,1158],{"className":73,"code":1157,"language":75,"meta":76,"style":76},"# Предоставить пользователю bob права на чтение и запись\nsetfacl -m u:bob:rw /shared/data.txt\n",[48,1159,1160,1165],{"__ignoreMap":76},[80,1161,1162],{"class":82,"line":83},[80,1163,1164],{"class":86},"# Предоставить пользователю bob права на чтение и запись\n",[80,1166,1167,1170,1173,1176],{"class":82,"line":138},[80,1168,1169],{"class":99},"setfacl",[80,1171,1172],{"class":185}," -m",[80,1174,1175],{"class":102}," u:bob:rw",[80,1177,1178],{"class":102}," /shared/data.txt\n",[1180,1181],"br",{},"Для группового ACL используется ",[48,1184,1185],{},"g:",", для всех ",[48,1188,1189],{},"a:",[35,1191,1192,1193],{},"Проверьте применённые правила:",[71,1194,1196],{"className":73,"code":1195,"language":75,"meta":76,"style":76},"getfacl /shared/data.txt\n",[48,1197,1198],{"__ignoreMap":76},[80,1199,1200,1203],{"class":82,"line":83},[80,1201,1202],{"class":99},"getfacl",[80,1204,1178],{"class":102},[16,1206,1208],{"id":1207},"шаг-5-проверьте-результат","Шаг 5: Проверьте результат",[21,1210,1211],{},"После внесения изменений убедитесь, что права применены так, как ожидали:",[71,1213,1215],{"className":73,"code":1214,"language":75,"meta":76,"style":76},"ls -l /path/to/file\ngetfacl /path/to/file   # только для ACL\n",[48,1216,1217,1225],{"__ignoreMap":76},[80,1218,1219,1221,1223],{"class":82,"line":83},[80,1220,54],{"class":99},[80,1222,965],{"class":185},[80,1224,968],{"class":102},[80,1226,1227,1229,1232],{"class":82,"line":138},[80,1228,1202],{"class":99},[80,1230,1231],{"class":102}," /path/to/file",[80,1233,1234],{"class":86},"   # только для ACL\n",[21,1236,1237,1238,1240,1241,1240,1243,58],{},"Если что-то выглядит неправильно, проверьте права повторно и, при необходимости, скорректируйте с помощью ",[48,1239,57],{},"/",[48,1242,1067],{},[48,1244,1169],{},[16,1246,662],{"id":661},[21,1248,1249,1250,1252,1253,1255],{},"Проверьте, что файл теперь соответствует требуемым правилам доступа. Используйте ",[48,1251,948],{}," для традиционных режимов и ",[48,1254,1202],{}," для ACL. Если вы настроили права для совместного использования, проверьте их с другой учётной записи (желательно с другого терминала).",[16,1257,685],{"id":684},[32,1259,1260,1268,1282,1289],{},[35,1261,1262,1267],{},[691,1263,1264],{},[48,1265,1266],{},"chmod: невозможно выполнить операцию: файл или каталог не существует"," – удостоверьтесь, что путь корректен.",[35,1269,1270,1275,1276,51,1279,931],{},[691,1271,1272],{},[48,1273,1274],{},"chown: невозможно изменить владельца: Нет такого файла или каталога"," – проверьте орфографию пользователя/группы (",[48,1277,1278],{},"id",[48,1280,1281],{},"groups",[35,1283,1284,1285,1288],{},"**",[48,1286,1287],{},"setfacl: Ошибка: Неподдерживаемая файловая система** – убедитесь, что ACL включён в таблице монтирования (","mount -t ext4 -o remount,acl /dev/sda1`).",[35,1290,1284,1291,1293,1294,1296,1297,1240,1299,58],{},[48,1292,693],{}," при изменении системных файлов – используйте ",[48,1295,920],{}," перед любой командой ",[48,1298,57],{},[48,1300,1067],{},[1302,1303],"hr",{},[217,1305],{},[16,1307,1309],{"id":1308},"дополнительные-ресурсы","Дополнительные ресурсы",[32,1311,1312,1324],{},[35,1313,1314,1315,51,1318,51,1321],{},"Man-страницы: ",[48,1316,1317],{},"man chmod",[48,1319,1320],{},"man chown",[48,1322,1323],{},"man setfacl",[35,1325,1326,1327],{},"Официальная документация по ACL: ",[48,1328,1329],{},"https://linux.die.net/man/5/acl",[739,1331,1332],{},"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 pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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":76,"searchDepth":138,"depth":138,"links":1334},[1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345],{"id":18,"depth":138,"text":19},{"id":29,"depth":138,"text":30},{"id":937,"depth":138,"text":938},{"id":941,"depth":138,"text":942},{"id":989,"depth":138,"text":990},{"id":1061,"depth":138,"text":1062},{"id":1119,"depth":138,"text":1120},{"id":1207,"depth":138,"text":1208},{"id":661,"depth":138,"text":662},{"id":684,"depth":138,"text":685},{"id":1308,"depth":138,"text":1309},"2026-07-10 09:28:41","Узнайте, как управлять правами доступа к файлам в Linux: chmod, chown, setfacl. Пошаговая инструкция для начинающих и продвинутых пользователей за 10 минут.","medium",[1350,1353,1356,1359],{"question":1351,"answer":1352},"Как просмотреть текущие права доступа к файлу?","Используйте команду `ls -l \u003Cfile>` для просмотра краткой информации или `stat \u003Cfile>` для получения подробных данных.",{"question":1354,"answer":1355},"Что делать, если команда chmod не изменяет права?","Убедитесь, что у вас есть права владельца (`sudo`), проверьте правильность символов режима и убедитесь, что файл не имеет атрибута immutable (`chattr +i`).",{"question":1357,"answer":1358},"Как назначить владельца и группу одновременно?","Используйте `chown \u003Cuser>:\u003Cgroup> \u003Cfile>` или `chown \u003Cuser>.\u003Cgroup> \u003Cfile>` в зависимости от системы.",{"question":1360,"answer":1361},"Когда нужно использовать setfacl?","При необходимости granularного контроля доступа, например, предоставления доступа отдельным пользователям без изменения общих прав.",[1363,1366,1369,1372,1375],{"name":1364,"text":1365},"Определите текущие права доступа","Выполните `ls -l \u003Cfile>` или `stat \u003Cfile>`, чтобы увидеть текущий режим, владельца и группу.",{"name":1367,"text":1368},"Измените права доступа с помощью chmod","Для добавления/снятия прав используйте `chmod \u003Csymbol>\u003Coctal> \u003Cfile>`. Например, `chmod 755 script.sh` предоставляет чтение/исполнение всем и запись владельцу.",{"name":1370,"text":1371},"Измените владельца и группу с chown","Для изменения владельца или группы выполните `chown \u003Cuser>:\u003Cgroup> \u003Cfile>`. Если нужно изменить только владельца, укажите `:group` как `-`.",{"name":1373,"text":1374},"Используйте setfacl для расширенных атрибутов","Сначала включите ACL на файловой системе: `mount -o remount,acl /mnt`. Затем назначьте права: `setfacl -m u:bob:rwx /path/to/file`.",{"name":1376,"text":1377},"Проверьте результат","После изменений проверьте новые права: `ls -l \u003Cfile>` и `getfacl \u003Cfile>` для ACL.",[1379,57,1067,1169,1380,1381,1382,1383,1384],"Linux права доступа","режим доступа файла","установка владельца","группы в Linux","ошибки chmod","защита файлов Linux",{},[1387,1388,1389],"/guides/linux/linux-user-groups-guide","/guides/linux/linux-shell-permissions","/guides/linux/linux-file-permissions-chmod",{"title":899,"description":1347},"guides/linux/linux-file-permissions-guide","В этом руководстве вы узнаете, как настраивать и контролировать права доступа к файлам в Linux с помощью команд chmod, chown, setfacl. После прочтения вы сможете безопасно ограничивать доступ к конфиденциальным данным.",[1394,1395,57,1067,1169,1396],"Linux","permissions","безопасность","wySueEfGFlv4kqrkZB_FoYcaZO67hkT8kl3MYr_fXE0",{"id":1399,"title":1400,"appliesTo":1401,"author":11,"body":1402,"canonical":753,"code":76,"createdAt":1988,"description":1989,"difficulty":756,"draft":757,"estimatedTime":758,"extension":759,"faq":1990,"howToSteps":2000,"howToTotalTime":789,"image":753,"keywords":2019,"locale":800,"meta":2028,"navigation":147,"path":807,"platform":803,"related":2029,"section":808,"seo":2032,"severity":76,"stem":2033,"summary":2034,"tags":2035,"twitterCreator":753,"twitterSite":753,"type":819,"updatedAt":1988,"__hash__":2040},"content_ru/guides/linux/linux-text-processing-awk-sed.md","Обработка текста в Linux с помощью AWK и SED — пошаговое руководство",[901,902,903],{"type":13,"value":1403,"toc":1974},[1404,1406,1417,1419,1449,1452,1500,1502,1507,1510,1528,1531,1535,1538,1578,1594,1598,1601,1638,1642,1645,1666,1668,1670,1674,1677,1697,1708,1712,1715,1763,1778,1780,1783,1820,1822,1968,1971],[16,1405,19],{"id":18},[21,1407,1408,1409,1412,1413,1416],{},"Обработка текста — повседневная задача для системных администраторов и разработчиков. Linux предоставляет два мощных инструмента для работы с текстом: ",[691,1410,1411],{},"AWK"," и ",[691,1414,1415],{},"SED",". AWK excels в анализе полей и вычислениях, а SED shines в быстром редактировании строк. В этом гайде вы узнаете, как использовать обе утилиты для массового редактирования, фильтрации и преобразования файлов. После выполнения инструкции вы сможете автоматизировать повседневные операции с текстом с помощью простых команд в терминале.",[16,1418,30],{"id":29},[32,1420,1421,1424,1427,1437],{},[35,1422,1423],{},"Дистрибутив Linux (Ubuntu, Debian, CentOS и другие).",[35,1425,1426],{},"Доступ к терминалу с правами чтения/записи в целевых каталогах.",[35,1428,1429,1430,1412,1433,1436],{},"Утилиты ",[48,1431,1432],{},"awk",[48,1434,1435],{},"sed"," (обычно уже установлены).",[35,1438,1439,1440,51,1443,51,1446,58],{},"Пример файлов для практики: ",[48,1441,1442],{},"log.txt",[48,1444,1445],{},"data.txt",[48,1447,1448],{},"input.txt",[21,1450,1451],{},"Если какие-то утилиты отсутствуют, установите их:",[71,1453,1455],{"className":73,"code":1454,"language":75,"meta":76,"style":76},"# Для Debian/Ubuntu\nsudo apt-get install gawk sed\n\n# Для CentOS/RHEL\nsudo yum install gawk sed\n",[48,1456,1457,1462,1478,1482,1487],{"__ignoreMap":76},[80,1458,1459],{"class":82,"line":83},[80,1460,1461],{"class":86},"# Для Debian/Ubuntu\n",[80,1463,1464,1466,1469,1472,1475],{"class":82,"line":138},[80,1465,920],{"class":99},[80,1467,1468],{"class":102}," apt-get",[80,1470,1471],{"class":102}," install",[80,1473,1474],{"class":102}," gawk",[80,1476,1477],{"class":102}," sed\n",[80,1479,1480],{"class":82,"line":144},[80,1481,148],{"emptyLinePlaceholder":147},[80,1483,1484],{"class":82,"line":151},[80,1485,1486],{"class":86},"# Для CentOS/RHEL\n",[80,1488,1489,1491,1494,1496,1498],{"class":82,"line":165},[80,1490,920],{"class":99},[80,1492,1493],{"class":102}," yum",[80,1495,1471],{"class":102},[80,1497,1474],{"class":102},[80,1499,1477],{"class":102},[16,1501,938],{"id":937},[1503,1504,1506],"h3",{"id":1505},"шаг-1-установите-необходимые-инструменты","Шаг 1: Установите необходимые инструменты",[21,1508,1509],{},"Проверьте, что инструменты уже присутствуют:",[71,1511,1513],{"className":73,"code":1512,"language":75,"meta":76,"style":76},"awk --version\nsed --version\n",[48,1514,1515,1522],{"__ignoreMap":76},[80,1516,1517,1519],{"class":82,"line":83},[80,1518,1432],{"class":99},[80,1520,1521],{"class":185}," --version\n",[80,1523,1524,1526],{"class":82,"line":138},[80,1525,1435],{"class":99},[80,1527,1521],{"class":185},[21,1529,1530],{},"Если вывод показывает версию, вы готовы продолжать. В противном случае установите пакеты, как описано выше.",[1503,1532,1534],{"id":1533},"шаг-2-замена-текста-с-помощью-sed","Шаг 2: Замена текста с помощью sed",[21,1536,1537],{},"SED — идеальный выбор для быстрой замены текста.",[71,1539,1541],{"className":73,"code":1540,"language":75,"meta":76,"style":76},"# Редактирует файл напрямую\nsed -i 's/error/ok/g' log.txt\n\n# Показать результат без изменения исходного файла\nsed 's/error/ok/g' log.txt\n",[48,1542,1543,1548,1561,1565,1570],{"__ignoreMap":76},[80,1544,1545],{"class":82,"line":83},[80,1546,1547],{"class":86},"# Редактирует файл напрямую\n",[80,1549,1550,1552,1555,1558],{"class":82,"line":138},[80,1551,1435],{"class":99},[80,1553,1554],{"class":185}," -i",[80,1556,1557],{"class":102}," 's/error/ok/g'",[80,1559,1560],{"class":102}," log.txt\n",[80,1562,1563],{"class":82,"line":144},[80,1564,148],{"emptyLinePlaceholder":147},[80,1566,1567],{"class":82,"line":151},[80,1568,1569],{"class":86},"# Показать результат без изменения исходного файла\n",[80,1571,1572,1574,1576],{"class":82,"line":165},[80,1573,1435],{"class":99},[80,1575,1557],{"class":102},[80,1577,1560],{"class":102},[108,1579,1580],{},[21,1581,1582,1585,1586,1589,1590,1593],{},[691,1583,1584],{},"💡 Совет:"," Флаг ",[48,1587,1588],{},"-i"," редактирует файл на месте. На macOS синтаксис может отличаться (",[48,1591,1592],{},"sed -i ''","). Проверьтеman-page, если команда работает некорректно.",[1503,1595,1597],{"id":1596},"шаг-3-фильтрация-строк-с-помощью-awk","Шаг 3: Фильтрация строк с помощью awk",[21,1599,1600],{},"AWK позволяет фильтровать строки на основе шаблонов или значений полей.",[71,1602,1604],{"className":73,"code":1603,"language":75,"meta":76,"style":76},"# Вывести только строки, содержащие слово warning\nawk '/warning/ {print}' log.txt\n\n# Вывести строку вместе с номером строки\nawk '/warning/ {print NR \": \" $0}' log.txt\n",[48,1605,1606,1611,1620,1624,1629],{"__ignoreMap":76},[80,1607,1608],{"class":82,"line":83},[80,1609,1610],{"class":86},"# Вывести только строки, содержащие слово warning\n",[80,1612,1613,1615,1618],{"class":82,"line":138},[80,1614,1432],{"class":99},[80,1616,1617],{"class":102}," '/warning/ {print}'",[80,1619,1560],{"class":102},[80,1621,1622],{"class":82,"line":144},[80,1623,148],{"emptyLinePlaceholder":147},[80,1625,1626],{"class":82,"line":151},[80,1627,1628],{"class":86},"# Вывести строку вместе с номером строки\n",[80,1630,1631,1633,1636],{"class":82,"line":165},[80,1632,1432],{"class":99},[80,1634,1635],{"class":102}," '/warning/ {print NR \": \" $0}'",[80,1637,1560],{"class":102},[1503,1639,1641],{"id":1640},"шаг-4-удаление-пустых-строк-с-помощью-sed","Шаг 4: Удаление пустых строк с помощью sed",[21,1643,1644],{},"Удалите все пустые строки и сохраните результат:",[71,1646,1648],{"className":73,"code":1647,"language":75,"meta":76,"style":76},"sed '/^$/d' data.txt > cleaned.txt\n",[48,1649,1650],{"__ignoreMap":76},[80,1651,1652,1654,1657,1660,1663],{"class":82,"line":83},[80,1653,1435],{"class":99},[80,1655,1656],{"class":102}," '/^$/d'",[80,1658,1659],{"class":102}," data.txt",[80,1661,1662],{"class":158}," >",[80,1664,1665],{"class":102}," cleaned.txt\n",[217,1667],{},[21,1669,1112],{},[1503,1671,1673],{"id":1672},"шаг-5-комбинированный-пример-фильтрация-и-замена","Шаг 5: Комбинированный пример: фильтрация и замена",[21,1675,1676],{},"Выполните сразу несколько операций: фильтрация, замена и запись в новый файл.",[71,1678,1680],{"className":73,"code":1679,"language":75,"meta":76,"style":76},"awk '{if (length($0) > 0) {sub(/foo/, \"bar\"); print}}}' input.txt > output.txt\n",[48,1681,1682],{"__ignoreMap":76},[80,1683,1684,1686,1689,1692,1694],{"class":82,"line":83},[80,1685,1432],{"class":99},[80,1687,1688],{"class":102}," '{if (length($0) > 0) {sub(/foo/, \"bar\"); print}}}'",[80,1690,1691],{"class":102}," input.txt",[80,1693,1662],{"class":158},[80,1695,1696],{"class":102}," output.txt\n",[21,1698,1699,1700,1703,1704,1707],{},"Команда проверяет длину строки, выполняет замену ",[48,1701,1702],{},"foo"," на ",[48,1705,1706],{},"bar"," и выводит непустые строки.",[1503,1709,1711],{"id":1710},"шаг-6-сохранение-результата-и-проверка","Шаг 6: Сохранение результата и проверка",[21,1713,1714],{},"Убедитесь, что результат соответствует ожиданиям:",[71,1716,1718],{"className":73,"code":1717,"language":75,"meta":76,"style":76},"# Первые 10 строк результата\ncat output.txt | head -n 10\n\n# Количество строк в файле\nwc -l output.txt\n",[48,1719,1720,1725,1745,1749,1754],{"__ignoreMap":76},[80,1721,1722],{"class":82,"line":83},[80,1723,1724],{"class":86},"# Первые 10 строк результата\n",[80,1726,1727,1730,1733,1736,1739,1742],{"class":82,"line":138},[80,1728,1729],{"class":99},"cat",[80,1731,1732],{"class":102}," output.txt",[80,1734,1735],{"class":158}," |",[80,1737,1738],{"class":99}," head",[80,1740,1741],{"class":185}," -n",[80,1743,1744],{"class":185}," 10\n",[80,1746,1747],{"class":82,"line":144},[80,1748,148],{"emptyLinePlaceholder":147},[80,1750,1751],{"class":82,"line":151},[80,1752,1753],{"class":86},"# Количество строк в файле\n",[80,1755,1756,1759,1761],{"class":82,"line":165},[80,1757,1758],{"class":99},"wc",[80,1760,965],{"class":185},[80,1762,1696],{"class":102},[108,1764,1765],{},[21,1766,1767,1770,1771,1774,1775,1777],{},[691,1768,1769],{},"⚠️ Важно:"," Если файл ",[48,1772,1773],{},"output.txt"," уже существовал, команда ",[48,1776,1432],{}," перезапишет его. Используйте резервные копии, если нужно сохранить исходные данные.",[16,1779,662],{"id":661},[21,1781,1782],{},"После выполнения всех шагов проверьте, что операции выполнены корректно:",[32,1784,1785,1794,1804,1810],{},[35,1786,1787,1788,1790,1791,58],{},"В ",[48,1789,1442],{}," должны появиться заменённые значения ",[48,1792,1793],{},"ok",[35,1795,1796,1797,1800,1801,58],{},"Вывод ",[48,1798,1799],{},"awk '/warning/ …'"," должен содержать только строки со словом ",[48,1802,1803],{},"warning",[35,1805,1806,1809],{},[48,1807,1808],{},"cleaned.txt"," не должен содержать пустых строк.",[35,1811,1812,1814,1815,1817,1818,58],{},[48,1813,1773],{}," должен содержать строки без ",[48,1816,1702],{}," и с заменёнными ",[48,1819,1706],{},[16,1821,685],{"id":684},[1823,1824,1825,1841],"table",{},[1826,1827,1828],"thead",{},[1829,1830,1831,1835,1838],"tr",{},[1832,1833,1834],"th",{},"Симптом",[1832,1836,1837],{},"Причина",[1832,1839,1840],{},"Решение",[1842,1843,1844,1868,1887,1902,1916,1936,1952],"tbody",{},[1829,1845,1846,1852,1855],{},[1847,1848,1849],"td",{},[48,1850,1851],{},"sed: command not found",[1847,1853,1854],{},"Утилита SED отсутствует",[1847,1856,1857,1858,1860,1861,716,1864,1867],{},"Установите пакет ",[48,1859,1435],{}," (",[48,1862,1863],{},"apt-get install sed",[48,1865,1866],{},"yum install sed",")",[1829,1869,1870,1875,1878],{},[1847,1871,1872],{},[48,1873,1874],{},"awk: command not found",[1847,1876,1877],{},"AWK отсутствует",[1847,1879,1880,1881,1860,1884,1867],{},"Установите ",[48,1882,1883],{},"gawk",[48,1885,1886],{},"apt-get install gawk",[1829,1888,1889,1892,1895],{},[1847,1890,1891],{},"Замена не применяется",[1847,1893,1894],{},"Ошибка в регулярном выражении",[1847,1896,1897,1898,1901],{},"Проверьте шаблон: ",[48,1899,1900],{},"s/old/new/"," ; используйте кавычки правильно",[1829,1903,1904,1907,1910],{},[1847,1905,1906],{},"Пустые строки не удаляются",[1847,1908,1909],{},"Неверный шаблон",[1847,1911,211,1912,1915],{},[48,1913,1914],{},"sed '/^$/d'"," (точка в начале и конце)",[1829,1917,1918,1923,1926],{},[1847,1919,1920],{},[48,1921,1922],{},"awk: cmd. number out of range",[1847,1924,1925],{},"Превышение диапазона полей",[1847,1927,211,1928,1931,1932,1935],{},[48,1929,1930],{},"$0"," для всей строки или увеличьте ",[48,1933,1934],{},"FS"," если нужно больше полей",[1829,1937,1938,1941,1944],{},[1847,1939,1940],{},"Нет доступа к файлу",[1847,1942,1943],{},"Недостаточно прав",[1847,1945,1946,1947,1949,1950,1867],{},"Запустите команду с ",[48,1948,920],{}," или измените права (",[48,1951,57],{},[1829,1953,1954,1960,1963],{},[1847,1955,1956,1959],{},[48,1957,1958],{},"sed -i"," не работает на macOS",[1847,1961,1962],{},"Другой синтаксис",[1847,1964,211,1965],{},[48,1966,1967],{},"sed -i '' 's/old/new/g'",[21,1969,1970],{},"Теперь у вас есть полный набор команд для повседневной обработки текста в Linux. Экспериментируйте, комбинируйте и создавайте собственные скрипты для автоматизации рутинных задач.",[739,1972,1973],{},"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 .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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":76,"searchDepth":138,"depth":138,"links":1975},[1976,1977,1978,1986,1987],{"id":18,"depth":138,"text":19},{"id":29,"depth":138,"text":30},{"id":937,"depth":138,"text":938,"children":1979},[1980,1981,1982,1983,1984,1985],{"id":1505,"depth":144,"text":1506},{"id":1533,"depth":144,"text":1534},{"id":1596,"depth":144,"text":1597},{"id":1640,"depth":144,"text":1641},{"id":1672,"depth":144,"text":1673},{"id":1710,"depth":144,"text":1711},{"id":661,"depth":138,"text":662},{"id":684,"depth":138,"text":685},"2026-07-10 09:18:54","Быстро научитесь обрабатывать текстовые файлы в Linux с помощью AWK и SED. Пошаговое руководство за 10 минут поможет автоматизировать массовое редактирование.",[1991,1994,1997],{"question":1992,"answer":1993},"В чем основное различие между AWK и SED?","SED работает с потоком текста и редактирует его построчно, в то время как AWK обрабатывает строки, разделяя каждую из них на поля и позволяя выполнять вычисления и условный отбор.",{"question":1995,"answer":1996},"Как выполнить глобальную замену текста в файле с помощью sed?","Используйте команду `sed -i 's/old/new/g' filename`. Флаг `-i` редактирует файл напрямую, а шаблон `s/old/new/g` заменяет все вхождения.",{"question":1998,"answer":1999},"Когда лучше использовать AWK вместо SED?","Используйте AWK, когда вам нужно анализировать поля, выполнять арифметические операции или обрабатывать данные в табличном формате. SED идеально подходит для простых вставок, удалений или замен без необходимости работы с полями.",[2001,2004,2007,2010,2013,2016],{"name":2002,"text":2003},"Установите необходимые инструменты","В большинстве дистрибутивов Linux утилиты `awk` и `sed` уже установлены. Проверьте версию: `awk --version` и `sed --version`. Если они отсутствуют, установите их пакетами `gawk` или `sed`.",{"name":2005,"text":2006},"Замена текста с помощью sed","Замените все вхождения слова `error` на `ok` в файле `log.txt`:\n\n```bash\n# Редактирует файл напрямую\nsed -i 's/error/ok/g' log.txt\n# Показать результат без изменения исходного файла\nsed 's/error/ok/g' log.txt\n```",{"name":2008,"text":2009},"Фильтрация строк с помощью awk","Выведите только строки, содержащие слово `warning`:\n\n```bash\nawk '/warning/ {print}' log.txt\n```\n\nДля вывода всей строки вместе с номером строки добавьте `\nawk '/warning/ {print NR \": \" $0}' log.txt`\n",{"name":2011,"text":2012},"Удаление пустых строк с помощью sed","Удалите все пустые строки из `data.txt` и сохраните результат:\n\n```bash\nsed '/^$/d' data.txt > cleaned.txt\n```",{"name":2014,"text":2015},"Комбинированный пример: фильтрация и замена","Прочитайте `input.txt`, замените `foo` на `bar` и выведите только непустые строки:\n\n```bash\nawk '{if (length($0) > 0) {sub(/foo/, \"bar\"); print}}}' input.txt > output.txt\n```\n\nКоманда выполняет замену (`sub`) и печатает только непустые строки.",{"name":2017,"text":2018},"Сохранение результата и проверка","После выполнения команд убедитесь, что `output.txt` содержит ожидаемый контент:\n\n```bash\ncat output.txt | head -n 10\n```\n\nТакже проверьте размер файла: `wc -l output.txt`.",[2020,2021,2022,2023,2024,2025,2026,2027],"awk sed обработка текста linux","команды awk sed примеры","awk sed замена текста","awk sed редактирование файлов","awk sed массовое редактирование","awk sed фильтрация строк","awk sed удаление строк","awk sed объединение файлов",{},[2030,2031,802],"/guides/linux/linux-text-processing-awk","/guides/linux/linux-text-processing-sed",{"title":1400,"description":1989},"guides/linux/linux-text-processing-awk-sed","В этом гайде вы узнаете, как использовать AWK и SED для массового редактирования, фильтрации и преобразования текста в Linux. После выполнения инструкции вы сможете выполнять обычные текстовые операции с помощью простых команд.",[1411,1415,1394,2036,2037,2038,2039],"обработка текста","командная строка","массовое редактирование","скрипты","qT3YcUAhverm198nXZMikvqhsA4P5ZKw3b93v-173Y8"]