Перейти к содержимому
TelegramGitHub

Права, скрипты и архивы

Последний набор основ: кто может читать и запускать файл, как запустить скрипт, как упаковать и скачать файлы.

ls -l показывает права в начале строки:

Окно терминала
ls -l scripts/report.sh
-rw-r--r-- 1 maria staff 198 Apr 1 2024 scripts/report.sh

Разберём -rw-r--r--:

  • Первый символ — тип: - файл, d папка, l ссылка.
  • Дальше три тройки: права владельца, группы и всех остальных.
  • r — читать, w — менять, x — запускать. - — права нет.

Здесь владелец может читать и менять файл. Остальные — только читать. Запускать не может никто.

Права удобно задавать тремя цифрами: владелец, группа, остальные. r = 4, w = 2, x = 1, складываем.

РежимПраваДля чего
644rw-r--r--Обычные файлы
600rw-------Секреты: .env, SSH-ключи. Только владелец
755rwxr-xr-xСкрипты и папки
700rwx------Личные папки, например ~/.ssh
Окно терминала
chmod 600 config/app.env # только я могу читать пароли
chmod +x scripts/report.sh # разрешить запуск

С правами вы встретитесь, когда SSH откажется брать ключ: UNPROTECTED PRIVATE KEY FILE. Лечится так: chmod 600 ~/.ssh/ваш_ключ. Подробнее — в уроке SSH и ключи.

Скрипт — файл с командами. Первая строка говорит, какой программой его выполнять:

Окно терминала
cat scripts/report.sh
#!/usr/bin/env bash
# Считает число заказов в каждом файле продаж.
for f in data/sales_*.csv; do
echo "$f: $(tail -n +2 "$f" | wc -l | tr -d ' ') orders"
done

Строка #!/usr/bin/env bash называется shebang. Запустить скрипт можно двумя способами:

Окно терминала
bash scripts/report.sh # работает всегда
./scripts/report.sh # нужно право x

./ в начале значит «файл в текущей папке». Без него shell будет искать scripts/report.sh как команду.

sudo запускает одну команду от имени root. Нужен, чтобы ставить программы и менять системные файлы:

Окно терминала
sudo apt install -y htop # WSL, Ubuntu

Shell попросит ваш пароль. Символы при вводе не видны. Это нормально.

  • В WSL и Linux sudo есть.
  • На macOS программы обычно ставят через Homebrew без sudo: brew install htop.
  • В Git Bash sudo нет.
Окно терминала
tar czf logs.tar.gz logs # упаковать папку logs в архив
tar tzf logs.tar.gz # посмотреть, что внутри, не распаковывая
tar xzf logs.tar.gz # распаковать
gzip big.csv # сжать один файл → big.csv.gz
gunzip big.csv.gz # распаковать

Буквы в tar: c — create, x — extract, t — list, z — сжать через gzip, f — имя файла архива. Выгрузки данных и релизы программ часто приходят в .tar.gz или .csv.gz.

Окно терминала
curl -L -o file.csv https://example.com/file.csv # скачать в файл
curl -I https://dataengineer.ru # только заголовки ответа
curl https://api.github.com/repos/duckdb/duckdb # ответ API прямо на экран
  • -L — идти по редиректам.
  • -o — имя файла, куда сохранить.

curl — первый инструмент, чтобы проверить API. Вы уже скачали им учебные файлы.

Все задания — в папке ~/cli-practice.

Посмотрите права на scripts/report.sh. Попробуйте запустить его через ./.

Проверка: права -rw-r--r--. Запуск даёт ошибку Permission denied. В Git Bash скрипт может запуститься сразу: там chmod не нужен.

Решение
Окно терминала
ls -l scripts/report.sh
./scripts/report.sh

Разрешите запуск скрипта и запустите его.

Проверка:

data/sales_2024-01.csv: 25 orders
data/sales_2024-02.csv: 22 orders
data/sales_2024-03.csv: 28 orders
Решение
Окно терминала
chmod +x scripts/report.sh
ls -l scripts/report.sh
./scripts/report.sh

Права стали -rwxr-xr-x.

В config/app.env лежит пароль. Сделайте так, чтобы файл мог читать только владелец.

Проверка: ls -l config/app.env показывает -rw-------.

Решение
Окно терминала
chmod 600 config/app.env
ls -l config/app.env

Упакуйте папку logs в logs-backup.tar.gz. Посмотрите, что внутри архива, не распаковывая его. Потом удалите архив.

Проверка: в архиве папки logs/, logs/archive/ и три файла .log.

Решение
Окно терминала
tar czf logs-backup.tar.gz logs
tar tzf logs-backup.tar.gz
rm logs-backup.tar.gz

Проверьте, что сайт dataengineer.ru отвечает. Запросите только заголовки ответа.

Проверка: первая строка HTTP/2 200.

Решение
Окно терминала
curl -I https://dataengineer.ru

Дальше: SSH и ключи.