TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #35 6.36K
И снова понедельник и снова на работу. Привет, коллеги. Надеюсь все живы, здоровы.

Сегодня начнем потихоньку тыкать полезную утилиту strace. Многим она кажется пиздец очень страшной, но на самом деле всё обстоит иначе. Если научишься с ней правильно работать и понимать, сможешь отдебажить любую ошибку и сразу станешь тимлидом, а может быть и техническим директором. 😈

strace — это утилита, отслеживающая системные вызовы, которые представляют собой механизм трансляции, обеспечивающий интерфейс между процессом и операционной системой/ядром

Ну а если по русски: это полезный инструмент диагностики и отладки.

Начнем с простого. Для экспериментов нам понадобится файл HUY.txt, давай создадим его командой:

echo '12345' > HUY.txt

Опыты проводим над утилитой sed. Исследовать будем команду:

sed -i.tmp 's/1/2/' HUY.txt

Ключ -i означает редактирование файла на месте, принимает необязательный суффикс tmp. Если суффикс задан, то будет создана копия файла с предыдущим содержанием.

Команда s/// это команда замены, одного на другое. То есть в примере мы меняем (1) на (2) в файле HUY.txt

Погнали изучать кишки

strace -ye '/^open',read,write,rename,close sed -i.tmp 's/1/2/' HUY.txt

Выведет дохуя много всего, но ты не ссы, тебе нужно посмотреть только последние несколько строчек. Всё остальное не достойно твоего внимания.

Посмотрим вывод с момента открытия файла HUY.txt

1. openat(AT_FDCWD, "HUY.txt", O_RDONLY)   = 3</tmp/HUY.txt>
2. openat(AT_FDCWD, "./sedvKFsXv", O_RDWR|O_CREAT|O_EXCL, 0600) = 4 </tmp/sedvKFsXv>
3. read(3</tmp/HUY.txt>, "12345\n", 4096) = 6
4. read(3</tmp/HUY.txt>, "", 4096) = 0
5. close(3</tmp/HUY.txt>) = 0
6. write(4</tmp/sedvKFsXv>, "22345\n", 6) = 6
7. close(4</tmp/sedvKFsXv>) = 0
8. rename("HUY.txt", "HUY.txt.tmp") = 0
9. rename("./sedvKFsXv", "HUY.txt") = 0
10. close(1</dev/pts/0>) = 0

Теперь разберем построчно, что же произошло:

1. Открывается файл HUY.txt
2. Открывается временный файл sedvKFsXv
3. Из файла HUY.txt читаются 6 байт 12345\n
4. Пробует прочитать еще раз HUY.txt, вернулось 0 байт, найден конец строки
5. Закрывается файл HUY.txt
6. Записывается 6 байт 22345\n во временный файл sedvKFsXv
7. Закрывается временный файл sedvKFsXv
8. Переименовывается файл HUY.txt в HUY.txt.tmp
9. Переименовывается временный файл sedvKFsXv в HUY.txt
10. Что-то там где-то опять закрывается

Если подытожить, получилось такое:

- Считывается исходный файл HUY.txt
- Во временный файл sedvKFsXv записывается обработанный текст
- Исходный файл HUY.txt становится резервной копией HUY.txt.tmp
- Временный файл sedvKFsXv становится текущим хуем HUY.txt

Что нам дал этот эксперимент?

А дал он нам то, что всё работает. И теперь у нас есть понимание как это работает.

Допустим столкнулся ты с проблемой, что sed не смог что-то записать и ты не понимаешь почему. Запускаешь strace и смотришь почему:

write(4</tmp/sedvKFsXv>, "strace: exec: Permission denied\n", 6)  = 6

Опа, а прав на запись в папку /tmp нет, возможно какой-то лось дырявый запретил туда запись. Отдебажили, фиксим: выставляем 3 топора (chmod 777) на папку /tmp и радуемся какие мы молодцы.

Этот способ отладки ты можешь применить не только для sed, но и для своих скриптов, программ, сервисов и т.п. Как нибудь в будущем поэкспериментируем с php и Битриксом 🤡

Как-то так. Ничего же сложного? Ну вот и я про тоже. Главное не бояться и знать куда смотреть. Ну а я покажу куда смотреть и проведу тебя протоптанными дорожками.

Ладно, пойду пельмени жарить, всем хорошего понедельника! 💗

tags: #debug
—
🟢 Подпишись: @bashdays
  • 👍 145
More from @bashdays
  1. Oct 4, 2026Архивирование и хранение. Часть 2/4. Всем привет, с вами снова TagdTagd. Первая часть тут:…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →