Что программист должен знать каждый системный администратор?

Вдохновленный этим вопросом, я спрашиваю обратное: что нужно знать о программировании системным администраторам? В частности, какие инструменты программирования полезны для системного администратора?

12 ответов

Решение
  • Контроль версий. Уметь создавать, читать и применять патчи. Знать, как использовать систему контроля версий, которая представляет широкие версии репозитория, и почему вы хотите такую. Знать, как писать описательные журналы изменений и почему вы хотите их. Знать, как искать в журналах репозитория ключевые слова и временные рамки.
  • Сценарии. Сделай что-нибудь один раз и будь на пути. Сделайте это дважды или более, сделайте это один раз, затем напишите сценарий.
  • Отладка Уметь читать трассировку стека и сообщать о соответствующих ошибках контактному лицу службы поддержки. Обнаружение ошибки приятно и полезно, но знание того, как ее исправить, может потребовать больших затрат на чтение кода. Сделайте ту часть, которая проста для вас, и пусть они сделают ту часть, которая проста для них.
  • Тестирование Мониторинг непрерывно и регистрировать ошибки. В сочетании с контролем версий и тестированием у вас есть четкое представление о том, что могло пойти не так, когда и что изменилось. Контролировать как производство, так и подготовку производства.
  • Экспертная оценка. Предлагайте и просматривайте изменения в производственных системах. Проведите тестирование на подготовительном этапе, точно определите, что необходимо сделать, и запишите, какие службы могут быть затронуты в течение длительного времени. Не позволяйте Управлению изменениями превращаться в политические битвы за бюрократическую власть.
  • Изучите криптографию. Современный системный администратор отвечает за сетевые ресурсы; добавление безопасности в качестве последнего шага находится где-то между невозможным и очень дорогим предложением. Понимание криптографии с открытым ключом, методов обработки паролей и шифрования в целом будет чрезвычайно ценно.

Я бы начал с:

  1. Как написать больше, чем самые простые сценарии, независимо от языка. Автоматизация - твой друг.
  2. Как запустить отладчик / знать, как читать отчеты о сбоях: это значительно облегчает определение отчета о сбоях и того, у кого спрашивать, что делать.
  3. Контроль версий - не только для кода, но и для всего, что стоит хранить историю или контролировать изменения.

Системное администрирование - это просто программирование. Система управления конфигурацией позволяет вам видеть всю инфраструктуру как распределенную машину. Как системный администратор, ваша задача - программировать эту машину.

Знай один текстовый редактор. Обычно vi для системных администраторов, emacs для программистов.

Знать, как писать сценарии. Выберите язык сценариев. Perl является постоянным фаворитом, как и комбо shell / sed / awk. Ruby и Python могут работать, но для многих вещей объекты - неправильная парадигма.

Уметь писать читабельную документацию.

Контроль версий. Решающее значение для поддержки файлов конфигурации и контрольных журналов.

Учитесь мыслить в терминах программирования. Понимать процедурные, объектно-ориентированные и функциональные парадигмы программирования. Они никогда не могут быть использованы, но знание их делает вас бесконечно более продуктивным.

Научитесь использовать отладчик (или более) и ведение журнала.

Научитесь пользоваться СУБД. Существует множество требований к обработке данных, которые могут быть упрощены при правильном использовании СУБД. Даже возможность переключения на роль администратора по требованию может творить чудеса.

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

Парное программирование - это хорошо. Пусть кто-нибудь еще присмотрит за вашим плечом, чтобы выучить / посоветовать / исправить.

Научитесь хотя бы проходить знакомство с кучей языков. Учите новый язык каждый год.

  • Знать, как программировать. Да, это важно: как сказал один комментатор, если вы делаете это более одного раза, то напишите сценарий - и напишите это хорошо.
  • Знать инструменты, включенные в стандартную установку операционной системы. Для администраторов UNIX это означает такие инструменты, как Korn Shell (ksh), Perl и vi. Не полагайтесь на наличие оболочки Emacs, Ruby, Tcl или C.
  • Знай сеть. Как соединяются пакеты Ethernet? Как выглядит пакет? Какие существуют типы пакетов? Познакомьтесь с такими инструментами, как tcpdump, wireshark, snoop и другими.
  • Написать переносимый код. Если код будет работать под Linux - и Tru64 - и Solaris - и OpenVMS - тогда напишите переносимый код. Даже если он будет работать только под двумя версиями UNIX - сделайте его переносимым. Но тогда, если это не должно быть портативно, не тратьте дополнительное время на это.
  • Знайте, где находится документация. Для Perl это означает perldoc, Perl Mongers, perl.org и т. Д. Для ksh это означает страницу руководства и ваши любимые книги оболочки Korn.
  • Документ, документ, документ, документ! Документируйте свой код, создавайте справочные страницы, создавайте встроенную документацию Perl и все, что подходит. Объясните, как использовать программу и почему вы ее так закодировали.
  • Знать инструменты упаковки вашей системы. Знать, как создавать RPM для Red Hat, хранилищ HP-UX или пакетов Solaris: это позволит вам создавать пакеты для ваших систем и, таким образом, интегрировать их в процесс установки.

Я программист и старший администратор / интегратор. Чтобы работать там, где я работаю, нужно знать следующие вещи:

  • Как писать сценарии оболочки (POSIX, без Bashisms), немного Perl, немного Python
  • Basic C (единая спецификация UNIX)
  • Как установить цепочку инструментов компилятора
  • Как создавать библиотеки и другие проекты OSS из исходного кода
  • Что такое Valgrind и как его использовать для выявления утечек памяти
  • Как свернуть пакеты.rpm и.deb
  • Хотя нам это не нужно, немного PHP и немного LISP не повредят

Большинство младших администраторов могут посмотреть на одного из наших программистов и сказать (с правами), да, я установил его правильно, вот где у вас есть утечка, поэтому код, который вы только что нажали, нарушает. Или "Нет, это не наша версия MySQL, посмотрите на ваш запрос здесь..."

Я думаю, что мы немного отличаемся, когда нанимаем талантливого администратора... мы наполовину ожидаем, что они (в конце концов) найдут свой путь к программированию, даже если это просто взлом чего-то, что мы используем, чтобы работать так, как им нужно для работы,

Подводя итог, можно сказать, что хорошее округление никогда не повредит вам.

Сценарии очень важны, но я бы сказал, что знание некоторых "настоящих" языков - явный бонус. Например, с пространством имен.NET System.DirectoryServices можно сделать несколько очень полезных вещей.

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

  • в linux необходимо знать bash-скриптинг - если вы знаете, как интегрировать его с perl/awk/etc, лучше. Я обнаружил, что многие задачи стали проще с его помощью.

  • Знание программирования на C/C++ очень помогает. Иногда вам нужно изменить исходный код GNU (если вы его используете) в соответствии с вашими потребностями, потому что, став продуктом GNU, не гарантирует, что вы всегда получите необходимую помощь вовремя - и много раз они написаны на C/C++.

Много-много лет назад (на самом деле Windows NT 3.1) я начинал как программист, специализирующийся на написании сервисов и даже случайных драйверов устройств. Это означает, что вы хорошо знакомы с ядром Windows. Со временем я немного устал от программирования и переключился на управление сетью. Я обнаружил, что мой опыт программирования очень важен снова и снова.

Дело не только в том, что написание скриптов на VBScript относительно безболезненно. Знание того, как работает Windows, и, в частности, как работает IP, очень помогает в устранении нечетных проблем с сервером и сетью. Также это мышление. Программисты привыкли к документации и контролю версий, и я ужасаюсь, когда я вижу, сколько администраторов Windows просто попробуют что-то посмотреть, работает ли оно, и потом беспокоятся о том, чтобы разобраться в беспорядке.

Все очень хорошо, но это не очень полезный совет - уходить и работать программистом десять лет! Однако я думаю, что это поможет большинству системных администраторов иметь некоторый опыт программирования на "жестком" языке, таком как C++ или C#. И если в вашей организации есть ручные программисты, пейте с ними!

Джон Ренни

Плохие вещи случаются, ваш код будет дольше, чем вы думаете. Сбой изящно, с полезными сообщениями об ошибках. Вам не хватит диска, оперативной памяти, процессора, времени и т. Д., Разберитесь с этим.

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

  • SQL - все работает с базами данных
  • Программирование - язык не имеет значения, если вы понимаете логику и процесс, который вы можете выучить и адаптировать к любому языку.
  • КАК ДОКУМЕНТИТЬ КОД И ИЗМЕНЕНИЯ - этот огромный. Сколько раз вы застревали, глядя на конфигурацию, пытаясь выяснить, почему, черт возьми, кто-то сделал это и на что это повлияет, если мы изменим ее обратно. Это выходит за рамки всего того, что вы кодируете или пишете, и охватывает, когда вы вносите изменения в настройки брандмауэра, чтобы обработать дополнительный случай, когда пользователь X получает электронную почту из домена Y во второй половине дня, когда идет дождь. И это может быть не вы, это может быть PFY, который решит пойти дальше и сделать это, а затем должен позвонить вам в 2 часа ночи в отпуск, потому что все сломалось отвратительным образом.
  • Системные языки - В Windows это такие вещи, как Powershell и WMI, которые позволяют вашим языкам сценариев объединяться в довольно мощные ресурсы и делать что-либо на ПК. Unix/Linux имеет свой собственный набор инструментов, о которых я не могу говорить.

Я обнаружил, что знание сценариев bash, dos batch и powershell предоставляет системному администратору среду, позволяющую делать практически все в любой популярной системе.

Знание того, как связываться с вашим LDAP и получать необходимую информацию на выбранном вами языке сценариев, является ключевым для всего: от устранения неполадок до реального активизации различных типов автоматизации (обеспечение учетных записей и ресурсов, более интеллектуальные проверки учетных записей пользователей или компьютеров).

Может показаться простым, но я видел множество магазинов, где люди не думают, что им нужен такой вид системного администрирования. Множество мест тратят большие $$$ на большие наборы административных инструментов и, насколько я могу судить, 95% того, для чего они используют инструменты, можно было бы сделать за несколько часов написания сценариев, если бы кто-нибудь знал это или знал, как сделай это.

Другие вопросы по тегам