cksum

Что делает команда cksum в Linux

Команда cksum в Linux — это встроенная утилита для вычисления и проверки контрольной суммы (CRC) файлов или потока данных. Она используется системными администраторами, разработчиками и инженерами DevOps для проверки целостности данных при передаче, копировании или резервном копировании.

Контрольная сумма — это уникальное числовое значение, которое создаётся на основе содержимого файла. Если хотя бы один байт в файле изменится, контрольная сумма также изменится, что позволяет легко определить факт повреждения или изменения данных.

При запуске команда cksum выводит три значения:

  1. Контрольная сумма (CRC) — число, полученное по алгоритму CRC-32.
  2. Размер файла (в байтах).
  3. Имя файла (если файл указан).

Пример простого использования:

Bash
cksum example.txt

Вывод может быть примерно таким:

Bash
4038471503 1256 example.txt

Здесь 4038471503 — контрольная сумма, 1256 — размер файла в байтах, а example.txt — имя проверяемого файла.

Основные параметры команды cksum в Linux

Хотя команда cksum в Linux имеет минимальное количество опций, она поддерживает несколько полезных параметров, совместимых с другими утилитами GNU. Рассмотрим основные из них.

1. Использование стандартного потока ввода

Если не указывать имя файла, cksum будет читать данные из стандартного ввода. Это позволяет применять команду к результату работы других программ:

Bash
echo "Hello World" | cksum

Такой приём часто используют при автоматической проверке данных в конвейерах (pipes) или при обработке логов.

Совет:
Если вы проверяете результат работы скрипта или вывода программы, перенаправление потока через cksum поможет убедиться, что данные не были искажены в процессе обработки.

2. Проверка нескольких файлов

Можно указать сразу несколько файлов:

Bash
cksum file1.txt file2.txt file3.txt

Команда вычислит контрольные суммы для каждого файла по отдельности. Это удобно при проверке содержимого больших архивов, бэкапов или пакетов перед передачей на сервер.

Совет:
Храните список контрольных сумм всех файлов проекта в отдельном .crc файле. Это ускорит проверку целостности при массовом сравнении данных.

3. Сравнение контрольных сумм

Хотя команда cksum в Linux не имеет встроенной функции проверки по ранее сохранённым значениям (в отличие от md5sum или sha256sum), её можно использовать совместно с другими инструментами:

Bash
cksum file.txt > checksum.txt
cksum -c checksum.txt

Параметр -c здесь используется в GNU-совместимых системах (например, в некоторых дистрибутивах Linux с расширенной версией cksum). Однако в классической реализации POSIX он может отсутствовать. Поэтому для проверки контрольных сумм следует применять ручное сравнение:

Bash
cksum file.txt | diff - checksum.txt

Если различий нет, значит файл не был изменён.

Практическое использование команды cksum в Linux

Рассмотрим реальные сценарии, где команда cksum в Linux применяется в системном администрировании и DevOps.

1. Проверка целостности после копирования

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

Bash
# На исходном сервере
cksum backup.tar.gz > checksum.txt

# На целевом сервере
cksum backup.tar.gz > new_checksum.txt
diff checksum.txt new_checksum.txt

Если вывод diff пуст, значит файлы идентичны. Этот метод прост и не требует установки дополнительных пакетов.

2. Интеграция с системами CI/CD

Во многих пайплайнах CI/CD важно убедиться, что артефакты сборки не были изменены. cksum можно использовать в автоматизированных скриптах:

Bash
#!/bin/bash
artifact="build/output.zip"
expected_sum=$(cat expected_checksum.txt | awk '{print $1}')
actual_sum=$(cksum "$artifact" | awk '{print $1}')

if [ "$expected_sum" != "$actual_sum" ]; then
    echo "Ошибка: контрольная сумма не совпадает!"
    exit 1
else
    echo "Контрольная сумма подтверждена."
fi

Такой скрипт быстро выявит повреждения сборки при автоматическом деплое.

3. Проверка содержимого каталогов

Можно сгенерировать список контрольных сумм для всех файлов каталога:

Bash
find /var/log -type f -exec cksum {} \; > log_checksums.txt

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

Bash
find /var/log -type f -exec cksum {} \; > new_checksums.txt
diff log_checksums.txt new_checksums.txt

Такой способ помогает отслеживать изменения в системных логах и конфигурациях.

Преимущества и особенности использования cksum

  1. Простота — команда cksum доступна во всех Unix-подобных системах без установки дополнительных пакетов.
  2. Скорость — вычисление CRC происходит быстро, даже на больших файлах.
  3. Совместимость — результаты cksum стандартизированы POSIX, что делает их одинаковыми во многих системах.
  4. Ограничение — алгоритм CRC-32 не столь надёжен, как криптографические хеши (например, SHA256). Его достаточно для проверки целостности, но не для защиты от преднамеренных изменений.
Совет:
Если вы хотите проверить не только целостность, но и подлинность файла (например, защиту от подмены), используйте sha256sum вместо cksum.

Заключительные рекомендации по работе с командой cksum в Linux

Хотя команда cksum в Linux часто недооценивается, она остаётся важным инструментом для быстрой и надёжной проверки целостности данных. Её простота делает её отличным выбором в автоматизированных скриптах, резервных копиях и при передаче файлов по сети.

Используйте cksum там, где требуется минимальная зависимость от сторонних утилит и высокая скорость проверки. В сочетании с утилитами diff, awk и find команда превращается в мощный инструмент контроля данных в Linux.

Итого:

  • Команда cksum вычисляет CRC-32 контрольную сумму.
  • Работает с файлами и стандартным вводом.
  • Подходит для проверки целостности при копировании, резервировании и автоматизации.
  • Простая, быстрая и совместимая со всеми Unix-системами.