| layout | ../../layouts/Layout.astro |
|---|---|
| title | Linux / Unix |
| description | Linux, Unix shell, популярные команды, права, процессы, сеть, отличия от macOS и Homebrew |
| category | Основы и инструменты |
| kind | questions |
| order | 19 |
| icon | /logos/linux.svg |
Что такое Linux и чем он полезен frontend-разработчику?
|
Короткий ответ Linux — семейство Unix-like operating systems на базе Linux kernel. Для frontend-разработчика он важен потому, что большая часть CI, Docker images, production servers и cloud-инфраструктуры работает именно в Linux-окружении. Полный ответ Linux — это kernel и экосистема операционных систем вокруг него. Готовые дистрибутивы, например Ubuntu, Debian или Fedora, добавляют userland utilities, package manager, init system и набор системных настроек. Frontend-разработчик обычно не администрирует Linux глубоко, но постоянно сталкивается с ним:
Например, import Практический минимум: понимать filesystem, shell, environment variables, processes, permissions, ports и package management. Этого достаточно, чтобы диагностировать большую часть проблем окружения, не превращаясь в системного администратора. |
Что такое Unix-like system?
|
Короткий ответ Unix-like system следует идеям Unix: filesystem как дерево, процессы, текстовые streams, pipes, permissions и набор маленьких утилит, которые можно комбинировать. Linux, macOS и BSD относятся к Unix-like системам, но используют разные kernels, системные утилиты и package managers. Полный ответ Unix-like называют систему, которая повторяет основные модели и пользовательские интерфейсы Unix, даже если не является оригинальной Unix-системой. Обычно это означает:
Linux, macOS и BSD поэтому ощущаются похожими: везде доступны На интервью важно не говорить, что Linux и Unix — одно и то же. Linux является Unix-like системой, но не исходным Unix. Также Unix-like не гарантирует, что любой shell script без изменений запустится во всех таких системах. |
Чем shell отличается от terminal?
|
Короткий ответ Terminal — приложение или интерфейс, который показывает текстовый ввод/вывод. Shell — программа, которая интерпретирует команды: bash, zsh, fish. Полный ответ Terminal предоставляет пользовательский интерфейс: принимает нажатия клавиш, показывает текст и связывает ввод/вывод с запущенным процессом. Современные Terminal, iTerm2, Windows Terminal и terminal в IDE являются terminal emulators. Shell — отдельная программа, которая работает внутри terminal. Она:
Например, одно окно iTerm2 может запускать Shell может работать и без визуального terminal: CI запускает non-interactive shell для выполнения scripts. Поэтому
команда, которая работает в интерактивной сессии, иногда ломается в CI: там могут не загружаться |
Что такое PATH?
|
Короткий ответ
Полный ответ
echo "$PATH"
command -v node
type -a nodeПорядок имеет значение. Если version manager добавил свою directory перед Типичные проблемы:
Добавлять current directory |
Что такое stdin, stdout и stderr?
|
Короткий ответ У процесса есть три стандартных потока: Полный ответ При запуске процесс обычно получает три открытых file descriptors:
Благодаря общему контракту программа не обязана знать, откуда пришли данные и куда уйдет результат. Ввод может поступать с клавиатуры, из файла или от другой программы, а вывод — отображаться в terminal, записываться в файл или передаваться дальше через pipe. npm run build > build.log
npm run build 2> build-errors.log
npm run build > build.log 2>&1Разделение Pipe |
Как работают pipes и redirection?
|
Короткий ответ Pipe Полный ответ Shell создает процессы и связывает их file descriptors до запуска команд. В pipeline команды обычно работают одновременно: первая пишет данные, а следующая читает их по мере поступления. ps aux | grep node
cat package.json | jq '.scripts'Основные redirections: command > output.log # перезаписать stdout
command >> output.log # дописать stdout
command 2> errors.log # записать stderr
command > all.log 2>&1 # объединить stdout и stderr
command < input.txt # передать файл в stdinНе всегда нужен В scripts важно учитывать exit codes pipeline. Без настройки shell итоговым обычно считается exit code последней
команды. В Bash |
Что делают команды pwd, ls и cd?
|
Короткий ответ
Полный ответ Каждый процесс имеет current working directory. Relative paths вычисляются относительно нее, поэтому перед запуском script полезно понимать, где именно находится shell. pwd
ls
ls -la
cd src/pages
cd ..
cd -
Важно: В scripts надежнее вычислять paths явно, особенно если script могут запускать из разных directories. Частая ошибка — предполагать, что current working directory всегда совпадает с directory самого script. |
Что делают mkdir, touch, cp, mv и rm?
|
Короткий ответ
Полный ответ Базовые операции выглядят так: mkdir -p src/pages/linux
touch notes.md
cp source.txt copy.txt
cp -R assets assets-backup
mv old-name.txt new-name.txt
rm unused.txt
rm -R generatedПолезные детали:
В automated scripts стоит использовать защитные проверки и quoted variables: test -n "$BUILD_DIR" && rm -rf -- "$BUILD_DIR"
|
Что делают cat, less, head и tail?
|
Короткий ответ
Полный ответ Команду выбирают по размеру файла и задаче: cat package.json
less README.md
head -n 20 server.log
tail -n 100 server.log
tail -f server.log
Эти utilities рассчитаны прежде всего на text data. Вывод binary file через |
Что делают find, grep и ripgrep?
|
Короткий ответ
Полный ответ
find src -type f -name "index.md"
find . -type f -mtime -1
grep -R "Docker" src/pages
grep -n "error" server.log
rg "kind: questions" src
rg --files | rg "index\.md$"Ripgrep обычно быстрее рекурсивного Для scripts полезны exit codes: |
Что такое absolute и relative path?
|
Короткий ответ Absolute path начинается от root directory, например Полный ответ Absolute path однозначно указывает location внутри текущего filesystem namespace: Relative path зависит от current working directory: Из-за этого один и тот же relative path может указывать на разные files в зависимости от места запуска команды. Это частая причина расхождений между local environment, IDE и CI. Absolute paths удобны внутри конкретной машины, но плохо переносятся между пользователями и runners. В project scripts обычно лучше строить path от repository root или directory самого script. Symlinks добавляют еще один нюанс: текстовый path и физический location могут отличаться. |
Что означают символы ., .. и ~?
|
Короткий ответ
Полный ответ Эти обозначения используются при построении paths: ./scripts/build.sh
cd ..
cd ~/projects
Поэтому поведение зависит от контекста: echo ~
echo "~"В первом случае shell раскроет home directory, во втором quoted string останется
|
Как устроены Linux permissions?
|
Короткий ответ У filesystem object есть owner, group и permissions для трех категорий: owner, group и others. Базовые права — Полный ответ Вывод Первый символ обозначает тип объекта, следующие девять — права owner, group и others. Для обычного файла:
Для directory смысл отличается:
Права проверяются вместе с owner/group процесса. Новые files получают permissions с учетом Классические permissions не покрывают все случаи: существуют ACL, capabilities, SELinux и AppArmor. Но для frontend и CI
обычно достаточно уверенно читать |
Что делают chmod, chown и chgrp?
|
Короткий ответ
Полный ответ
chmod +x ./scripts/build.sh
chmod u=rw,g=r,o= README.md
chmod 644 README.md
chmod 755 ./scripts/build.shВ numeric notation
sudo chown maxim:developers file.txt
sudo chgrp developers file.txtОбычный пользователь обычно не может произвольно передать файл другому owner. Recursive flags нужно применять осторожно: ошибка в target directory может изменить ownership большого участка filesystem. Для frontend-разработчика частый случай — сохранить executable bit у shell script в Git. Если локально выполнить
|
Для чего нужен sudo?
|
Короткий ответ
Полный ответ
Типичные случаи: sudo apt install nginx
sudo systemctl restart nginx
sudo chown maxim:developers /srv/appИспользовать Не стоит лечить На production доступ через |
Что делают ps, top, htop и kill?
|
Короткий ответ
Полный ответ
ps aux
ps aux | grep node
pgrep -af node
kill 12345 # обычно SIGTERM
kill -INT 12345 # аналог прерывания
kill -9 12345 # SIGKILL
PID может быть переиспользован после завершения процесса, поэтому перед |
Как понять, какой процесс занял port?
|
Короткий ответ На Linux используют Полный ответ Примеры диагностики: ss -ltnp | grep :3000
lsof -nP -iTCP:3000 -sTCP:LISTEN
fuser 3000/tcpВажно отличать listening socket от обычного исходящего connection. Для ошибки Socket привязан не только к port, но и к address. Процесс, слушающий После нахождения PID можно проверить команду и owner процесса, затем корректно остановить его через |
Что показывают df, du и free?
|
Короткий ответ
Полный ответ Основные команды: df -h
du -sh node_modules
du -h --max-depth=1 .
free -h
В На macOS |
Что делают uname, whoami и env?
|
Короткий ответ
Полный ответ uname -a
uname -m
whoami
env
printenv PATH
NODE_ENV=production npm run build
env -i PATH="$PATH" npm run testEnvironment может содержать tokens и passwords, поэтому его нельзя бездумно печатать в public CI logs. |
Что делают ping, curl и wget?
|
Короткий ответ
Полный ответ
ping example.comНо успешный
curl -I https://example.com
curl -v http://localhost:3000/health
curl -H 'Accept: application/json' https://api.example.com/usersС его помощью диагностируют DNS, TLS, redirects, headers, cookies, status codes и API payload.
|
Что делают ssh и scp?
|
Короткий ответ
Полный ответ Базовое подключение: ssh user@example.com
ssh user@example.com 'systemctl status app'
scp ./dist/app.tar.gz user@example.com:/tmp/app.tar.gzSSH обычно использует key pair. Private key остается у клиента, а public key добавляется на server. При первом
подключении клиент проверяет host key и сохраняет его в Для автоматизации применяют deploy keys, SSH agent и ограниченные credentials. Private keys нельзя хранить в repository или печатать в CI logs.
Прямой SSH-доступ к production может быть запрещен, но понимание protocol полезно для Git, CI и диагностики servers. |
Чем ifconfig отличается от ip?
|
Короткий ответ
Полный ответ Современные Linux-команды: ip addr
ip link
ip route
На macOS Важно разделять уровни диагностики: interface может быть поднят, но route отсутствовать; route может работать, но DNS быть сломан; DNS может разрешить имя, но application port быть закрыт. Одна команда не проверяет всю цепочку. |
Какие package managers бывают в Linux?
|
Короткий ответ Package manager зависит от дистрибутива: Debian/Ubuntu используют Полный ответ System package manager устанавливает packages из repositories дистрибутива, разрешает dependencies, проверяет signatures и ведет database установленных files. Основные семейства:
Snap и Flatpak распространяют applications в более изолированном формате, но не заменяют system packages во всех сценариях. System package manager не следует путать с |
Как работать с apt?
|
Короткий ответ
Полный ответ Базовый workflow: sudo apt update
sudo apt install git curl
apt search package-name
apt show package-name
sudo apt remove package-name
sudo apt upgrade
Для воспроизводимости важно понимать, что без version pinning одна и та же команда в разное время может установить разные versions. В production images часто фиксируют base image digest или package version там, где это оправдано. В Dockerfile обычно используют non-interactive RUN apt-get update \
&& apt-get install -y --no-install-recommends curl \
&& rm -rf /var/lib/apt/lists/*Разделение |
Чем apt отличается от apt-get?
|
Короткий ответ
Полный ответ Обе команды работают поверх той же package management системы Debian.
apt-get update
apt-get install -y --no-install-recommends curlЭто не означает, что На интервью достаточно объяснить разницу назначения: |
Чем Linux отличается от macOS?
|
Короткий ответ Linux использует Linux kernel и обычно GNU userland. macOS построена на Darwin с XNU kernel и BSD userland. Обе системы Unix-like, но отличаются utilities, filesystem behavior, services, package management и security model. Полный ответ Сходство дает общий набор concepts: filesystem tree, processes, permissions, shell и POSIX-like APIs. Поэтому frontend-разработчик может использовать похожие команды на macOS и Linux. Различия проявляются в деталях:
Практический вывод: macOS удобна как Unix-like developer environment, но не является точной копией Linux production. Критичные scripts и builds нужно проверять в том окружении, где они будут выполняться, например в Linux CI container. |
Почему sed, date и другие команды ведут себя по-разному в Linux и macOS?
|
Короткий ответ Linux часто использует GNU utilities, а macOS — BSD variants. Названия команд похожи, но flags, regular expressions и формат output могут отличаться. Полный ответ Стандарт описывает не все расширения CLI utilities. GNU и BSD implementations развивались отдельно и добавляли разные options. Например: # GNU sed
sed -i 's/old/new/g' file.txt
# BSD sed в macOS
sed -i '' 's/old/new/g' file.txtРазличаться могут Варианты решения:
Кроссплатформенность нужно выбирать осознанно: внутренний Linux-only deploy script не обязан поддерживать macOS, но project bootstrap для всей команды обычно должен. |
Чем отличаются filesystem paths в Linux и macOS?
|
Короткий ответ В Linux home directory обычно находится в Полный ответ Типичные Linux paths: Типичные macOS paths: Hardcoded absolute path почти всегда плохо переносится между машинами. В scripts используют Существенное отличие — case sensitivity. Default APFS installation macOS часто case-insensitive, поэтому
Кроме того, macOS защищает часть system directories через System Integrity Protection. Даже root не должен изменять их обычным способом. Developer tools лучше устанавливать в поддерживаемые prefixes, а не копировать binaries вручную в system locations. |
Чем отличаются launchd и systemd?
|
Короткий ответ
Полный ответ Обе системы запускают background services, следят за lifecycle и могут автоматически стартовать процессы после boot или login. Но formats и команды у них разные. В Linux с systemctl status nginx
sudo systemctl restart nginx
journalctl -u nginxВ macOS brew services start postgresqlИнструкция Frontend-разработчик сталкивается с этим при локальных databases, reverse proxies, SSR services и CI runners. |
Что такое Homebrew?
|
Короткий ответ Homebrew — package manager, популярный на macOS и доступный на Linux. Он устанавливает CLI tools, libraries и desktop applications без ручного управления archives и paths. Полный ответ Homebrew скачивает готовые bottles или собирает packages по recipes, размещает versions в собственном prefix и создает symlinks на активные executables. Основные области применения:
Homebrew не является частью macOS и не управляет самой операционной системой. Установленные tools могут конфликтовать с
system versions, поэтому важно понимать порядок Для командной воспроизводимости одного списка устных инструкций недостаточно. Можно использовать |
Для чего нужен brew install?
|
Короткий ответ
Полный ответ Примеры: brew install git
brew install jq
brew install ripgrepHomebrew находит formula, выбирает совместимый bottle для OS и architecture, скачивает dependencies и устанавливает package в Cellar. Затем executable связывается с Homebrew prefix. Если bottle недоступен, package может собираться из source, что дольше и требует build tools. После установки
|
Что такое formula, cask и tap в Homebrew?
|
Короткий ответ Formula описывает CLI tool или library. Cask описывает macOS application, font или binary package. Tap — дополнительный repository с formulae и casks. Полный ответ Formula содержит metadata, source или bottle, dependencies и инструкции установки: brew install nodeCask предназначен для applications и других macOS artifacts: brew install --cask visual-studio-codeTap подключает внешний repository: brew tap owner/repositoryПосле подключения его packages участвуют в обычном поиске и установке. Это удобно для internal tools и packages, которых нет в Homebrew core. Tap является источником executable code, поэтому подключать случайный repository небезопасно. В корпоративной среде важны review, ownership и обновление сторонних taps. |
Как обновлять пакеты через Homebrew?
|
Короткий ответ
Полный ответ Типичный workflow: brew update
brew outdated
brew upgrade
brew cleanup
Массовый upgrade может одновременно изменить Node.js, database, compiler и CLI tools. На рабочей машине безопаснее
сначала посмотреть Homebrew не заменяет lockfile приложения: package manager OS фиксирует tools окружения, а Если package временно нельзя обновлять, существуют versioned formulae и pinning, но долгосрочно лучше устранить несовместимость, а не бесконечно удерживать старую version. |
Как диагностировать проблемы Homebrew?
|
Короткий ответ Для диагностики используют Полный ответ Полезные команды: brew doctor
brew config
brew info node
brew list
brew --prefix
command -v node
Частая проблема — package установлен, но shell запускает другой executable. Тогда проверяют Не стоит исправлять Homebrew через случайный |
Где Homebrew устанавливает пакеты?
|
Короткий ответ На Apple Silicon macOS Homebrew обычно использует Полный ответ Конкретный prefix лучше узнавать командой: brew --prefix
brew --prefix nodePackages хранятся versioned directories внутри Cellar, а active executables доступны через symlinks в Shell должен добавить Homebrew prefix в brew shellenvНа Apple Silicon и Intel hardcoded path отличается, поэтому bootstrap script не должен без необходимости предполагать
Если system tool и Homebrew tool имеют одинаковое имя, порядок |
Чем Homebrew отличается от apt?
|
Короткий ответ
Полный ответ
Homebrew устанавливается в отдельный prefix и часто работает без На Linux server обычно используют native package manager, потому что он лучше интегрирован с OS lifecycle и security policy. На developer machine Homebrew удобен для одинакового набора CLI tools на macOS и Linux. Смешивание managers требует осторожности: две версии |
Когда не стоит ставить Node.js через Homebrew?
|
Короткий ответ Если проекты требуют разные версии Node.js, удобнее использовать version manager: Полный ответ Homebrew хорошо подходит, когда на machine нужна одна актуальная version Node.js. Но frontend-разработчик часто поддерживает несколько repositories с разными требованиями. Version manager позволяет:
Нужно сверять несколько источников: Если они расходятся, локальная успешная сборка не гарантирует успех CI. Homebrew можно использовать для установки самого version manager, но project runtime лучше закреплять рядом с кодом. Volta дополнительно умеет фиксировать package manager и global CLI tools, а |