모든 시스템 관리자가 알아야 할 프로그래머는 무엇입니까?


20

이 질문 에서 영감을 얻어 시스템 관리자가 프로그래밍에 대해 얼마나 알아야합니까? 보다 구체적으로, sysadmin에 어떤 프로그래밍 도구가 유용한가요?


1
이것이 SO 질문이어서는 안됩니다. 어쨌든 이미 거기에 요청 된 것 같습니다.
Tim Matthews


2
그렇습니다. 그러나 그 질문에서 언급 한 바와 같이 SF와 SO에는 두 개의 분리 된 커뮤니티가 있습니다. 프로그래머가 시스템 관리자가 알아야 할 것보다는 시스템 관리자가 시스템 관리자가 알아야한다고 생각하는 것을 보는 것이 흥미로울 것 같습니다.
Tim

답변:


29
  • 버전 관리 . 패치를 생성하고 읽고 적용 할 수 있어야합니다. 저장소 전체 버전을 제공하는 버전 제어 시스템을 사용하는 방법과 원하는 이유를 알고 있습니다. 설명적인 변경 로그를 작성하는 방법과 원하는 이유를 알고 있습니다. 키워드 및 시간 프레임에 대한 저장소 로그를 검색하는 방법을 알고 있습니다.
  • 스크립팅 . 한 번만하고 길을 가십시오. 두 번 이상 수행하고 한 번 수행 한 다음 스크립트를 작성하십시오.
  • 디버깅 . 스택 추적을 읽는 방법과 관련 오류를 소프트웨어 지원 담당자에게보고하는 방법을 숙지하십시오. 오류를 찾는 것은 좋으며 도움이되지만 오류 를 해결 하는 방법 을 알면 코드를 읽는 데 많은 투자가 필요할 수 있습니다. 쉬운 부분을 수행하고 쉬운 부분을 수행하도록하십시오.
  • 테스트 . 지속적으로 모니터링하고 오류를 기록하십시오. 버전 관리 및 테스트와 함께 사용하면 언제 무엇이 잘못되었는지, 그리고 무엇이 바뀌 었는지에 대한 강력한 아이디어가 있습니다. 프로덕션 및 사전 프로덕션을 모두 모니터링하십시오.
  • 동료 검토 . 프로덕션 시스템의 변경 사항을 제안하고 검토하십시오. 사전 프로덕션을 테스트하고 수행해야 할 작업을 정확하게 결정하고 어떤 서비스가 오랫동안 영향을받을 수 있는지 기록하십시오. 변경 관리가 관료적 권력의 정치적 전쟁으로 악화되지 않도록하십시오.
  • 암호화 연구 . 현대 시스템 관리자가 네트워크 리소스를 담당합니다. 마지막 단계로 보안을 추가하는 것은 불가능하고 매우 비싼 제안 사이에 있습니다. 공개 키 암호화, 암호 처리 방법 및 일반적으로 암호화를 이해하는 것이 매우 중요합니다.

스크립트를 작성할 수 없거나 스크립트를 제대로 작성하지 못하는 경우에도 자동화 할시기를 인식하는 것이 매우 중요합니다.
Ether

순수 Windows 상점을위한 빠르고 쉬운 버전 관리 시스템이란 무엇입니까?
jftuga

SVN? 내 말은,이 바보를 위해 충분히 좋아 보인다 : codinghorror.com/blog/2008/04/…
jldugger

9

나는 시작할 것이다 :

  1. 언어에 상관없이 가장 기본적인 스크립트를 작성하는 방법. 자동화는 당신의 친구입니다.
  2. 디버거를 실행하는 방법 / 어떤 종류의 충돌 보고서를 읽는 방법을 아는 것 : 충돌 보고서를 알아 내고 듀스가 무엇을 더 쉽게 할 수 있는지를 묻는 사람.
  3. 버전 관리-코드뿐만 아니라 기록 또는 변경 제어를 유지할 가치가있는 모든 것.

7

시스템 관리는 프로그래밍 일뿐입니다. 구성 관리 시스템을 사용하면 전체 인프라를 분산 시스템으로 볼 수 있습니다. sysadmin으로서 귀하의 임무는이 시스템을 프로그래밍하는 것입니다.

하나의 텍스트 편집기를 알고 있어야합니다. 일반적으로 sysadmin의 경우 vi, 프로그래머의 경우 emacs

스크립트 작성 방법을 알고 있습니다. 스크립팅 언어를 선택하십시오. 펄은 쉘 / sed / awk 콤보와 마찬가지로 다년생 애호가입니다. 루비와 파이썬은 작동 할 수 있지만 많은 것들에 대해 객체는 잘못된 패러다임입니다.

읽을 수있는 문서를 작성하는 방법을 숙지하십시오.

버전 관리. 구성 파일 및 감사 추적을 유지 관리하는 데 중요합니다.

프로그래밍 용어로 생각하는 법을 배우십시오. 절차 적, 객체 지향 및 기능적 프로그래밍 패러다임을 이해하십시오. 이것들은 결코 사용되지 않을 수 있지만, 그것들을 아는 것은 당신을 무한히 생산적으로 만듭니다.

디버거 (또는 그 이상) 및 로깅을 사용하는 방법을 배웁니다.

RDBMS 사용법을 배우십시오. RDBMS를 올바르게 사용하여 단순화 할 수있는 많은 데이터 처리 요구 사항이 있습니다. 주문형 DBA 역할로 전환 할 수 있다고해도 놀라운 일이 아닙니다.

배포하기 전에 테스트하십시오. 테스트 중심 개발 철학을 참조하십시오.

페어 프로그래밍이 좋습니다. 다른 사람이 당신의 어깨를보고 배우고 조언하고 고치도록하십시오.

최소한 여러 언어에 익숙해 지도록 배우십시오. 매년 새로운 언어를 배우십시오.


실제 세계로 돌아가서 ... 아직도 약간의 문서를 테스트하고 작성하는 것 외에는이 작업을 수행하는 sysadmin을 만나지 못했습니다. 어쩌면 내가 잘못된 회사에서 일했을 수도 있습니다!
PowerApp101

1
그런 다음 현실의 버전이 짜증납니다. 모든 직원은 vi를 선호합니다 (저는 이맥스를 배우고 그 고문을 두 번 겪는 것을 느끼지 않습니다). 지원 목적으로 수백 개의 펄 스크립트와 십여 개의 일회용 PHP 웹 사이트가 있습니다. 모니터링을 위해 Opsview / nagios를 실행합니다. 실제로 변경 사항을 커밋 할 때 즉각적인 피드백으로 지속적으로 실행되는 양식 테스트입니다. 그래도 웹 사이트와 스크립트를 위해 더 많은 버전을 제어하고 더 나은 감사 추적을 원합니다.
jldugger

여러분은 유닉스 관리자입니까? Windows 세계에서는 많은 것들이 아직 시스템 관리자의 의식에 스며 들지 않았습니다. 날 믿으면 좋겠다.
PowerApp101

20 세기 소년으로서, 우리는 Windows 관리자가이 내용을 배우도록 발을 차 렸습니다. 그들은 아직 거기에 없지만, 내가 가입했을 때보 다 여기에 더 좋습니다. 우리가 지금 직면하고있는 더 큰 문제는 우리가 가진 기술적 문제보다는 정치 / 관리 문제입니다.
Devdas

또한 Windows 개발자에게 실마리가 있으므로 실제로 그러한 노력을 지원하고 있습니다.
Devdas

5
  • 프로그래밍 방법을 알고 있어야합니다. 그렇습니다. 한 의견자가 말했듯이 두 번 이상 수행하면 스크립트를 작성하고 잘 작성하십시오.
  • 표준 운영 체제 설치에 포함 된 도구를 알고 있어야합니다. UNIX 관리자의 경우 이는 Korn Shell (ksh) 및 Perl 및 vi와 같은 도구를 의미합니다. 이맥스 나 루비, Tcl이나 C 쉘에 의존하지 마십시오.
  • 네트워크를 알고 있습니다. 이더넷 패킷은 어떻게 구성됩니까? 패킷은 어떻게 생겼습니까? 다른 패킷 유형은 무엇입니까? tcpdump, wireshark, snoop 등과 같은 도구에 대해 알아보십시오.
  • 이식 가능한 코드를 작성하십시오. 코드가 Linux 및 Tru64 및 Solaris 및 OpenVMS에서 실행될 경우 이식 가능한 코드를 작성하십시오. 두 가지 버전의 UNIX에서만 실행 되더라도 이식 가능하게 만드십시오. 그러나 휴대용 일 필요가 없다면 여분의 시간을 소비하지 마십시오.
  • 문서가 어디에 있는지 알고 있어야합니다. Perl의 경우 perldoc, Perl Mongers, perl.org 등을 의미합니다. ksh의 경우 맨 페이지와 좋아하는 Korn 쉘 책을 의미합니다.
  • 문서, 문서, 문서, 문서! 코드를 문서화하고 매뉴얼 페이지를 작성하고 인라인 Perl 문서를 작성하십시오. 프로그램 사용법과 왜 그렇게 코딩했는지 설명하십시오.
  • 시스템의 포장 도구를 알고 있어야합니다. Red Hat, HP-UX 저장소 또는 Solaris 패키지 용 RPM을 작성하는 방법을 숙지하십시오.이를 통해 시스템 용 패키지를 빌드하고이를 설치 프로세스에 통합 할 수 있습니다.

3

스크립팅은 필수적이지만, 일부 "실제"언어를 아는 것이 확실한 보너스라는 조언은 두 번째입니다. 예를 들어 .NET System.DirectoryServices 네임 스페이스를 사용하여 매우 유용한 작업을 수행 할 수 있습니다.


3

저는 프로그래머이자 선임 관리자 / 통합 자입니다. 내가 일하는 곳에서 일하려면 다음 사항을 알아야합니다.

  • 쉘 스크립트 (POSIX, Bashisms 없음), 작은 Perl, 작은 Python을 작성하는 방법
  • 기본 C (단일 UNIX 사양)
  • 컴파일러 툴 체인을 설치하는 방법
  • 소스에서 라이브러리 및 기타 OSS 프로젝트를 빌드하는 방법
  • Valgrind 란 무엇 이며 메모리 누수를 발견하기 위해 사용하는 방법
  • .rpm 및 .deb 패키지를 롤링하는 방법
  • 우리가 필요 하지는 않지만 작은 PHP와 작은 LISP는 아프지 않습니다.

대부분의 주니어 관리자는 프로그래머 중 한 명을보고 (권한을 가지고) 말할 수 있습니다. 예, 올바르게 설치했습니다. 여기서 누수가있는 곳이므로 방금 푸시 한 코드가 깨졌습니다. 또는 "아니요. MySQL 버전이 아닙니다. 여기에서 귀하의 질문을보십시오 ..."

우리는 영재의 관리자를 고용 할 때 우리가 다르다고 생각합니다. 우리는 그들이 궁극적으로 우리가 일하는 데 필요한 방식으로 일하는 데 사용하는 무언가를 해킹하더라도 프로그래밍 방식을 찾길 기대합니다. .

요약하면, 반올림이 결코 당신을 해치지 않을 것입니다.


1

몇 년 전 (실제로 Windows NT 3.1) 필자는 서비스 작성 및 때때로 장치 드라이버를 전문으로하는 프로그래머로 시작했습니다. 이것은 Windows 커널에 대해 잘 알고 있음을 의미합니다. 시간이 흐르면서 프로그래밍에 지루해하고 네트워크 관리로 전환했습니다. 나는 프로그래밍에 대한 나의 배경이 계속해서 귀중한 가치가 있음을 발견했다.

VBScript 스크립트 작성이 상대적으로 고통스럽지 않다는 것이 아닙니다. Windows의 작동 방식, 특히 IP의 작동 방식을 알면 이상한 서버 및 네트워크 문제를 해결하는 데 큰 도움이됩니다. 또한 사고 방식입니다. 프로그래머는 문서화 및 버전 관리에 익숙하며, Windows 관리자가 작동하는지 확인하고 나중에 혼란을 풀기 위해 걱정할 무언가를 시도하는 사람이 얼마나 많은지 저를 놀라게합니다.

모두 잘하지만, 10 년 동안 프로그래머로 일하고 떠나라고 말하는 것은 매우 유용한 조언이 아닙니다! 그러나 대부분의 시스템 관리자가 C ++ 또는 C #과 같은 "하드"언어로 프로그래밍 경험을 쌓는 데 도움이 될 것이라고 생각합니다. 그리고 당신이 당신의 조직에 길들이기 프로그래머가 있다면 그들과 함께 술을 마시십시오!

존 레니


1

나쁜 일이 발생하면 코드가 생각보다 오래 걸릴 것입니다. 유용한 오류 메시지와 함께 정상적으로 실패합니다. 디스크, 램, CPU, 시간 등이 부족하여 처리하십시오.

너무 낙관적이지 마십시오. 백만 건의 문제가 생산에서 너무 자주 발생한다는 것입니다.


1

여기에 모든 설명과 함께, 나는 sysadmin이라고 말하지 않을 것입니다. 그러나 몇 가지 Windows / Linux 서버를 구축하고 관리한다는 사실은 뭔가를 인정해야합니다.

  • 리눅스에서 bash 스크립팅은 반드시 알아야합니다. perl / awk / etc와 통합하는 방법을 알고 있다면 더 좋습니다. 나는 그것을 사용함으로써 많은 작업이 쉬워 졌다는 것을 알았습니다.

  • C / C ++로 프로그래밍하는 것은 많은 도움이됩니다. GNU 제품이 되었기 때문에 GNU 소스 코드 (사용하는 경우)를 필요에 맞게 수정해야 할 경우가 있습니다.


0
  • SQL-모든 것이 데이터베이스와 작동
  • 프로그래밍-언어를 배우고 모든 언어에 적응할 수있는 논리와 프로세스를 이해하는 한 언어는 중요하지 않습니다.
  • 코드와 변경 사항을 문서화하는 방법-이것은 엄청납니다. 도대체 누군가가 왜 이런 짓을했는지, 그리고 다시 바꾸면 어떤 영향을 미치는지 알아 내려고하는 구성을보고있는 몇 번이나 갇혀있었습니다. 이것은 사용자가 코드 나 스크립트를 넘어서는 것입니다. 이것은 사용자 X가 화요일 오후 비가 오는 오후 오후에 도메인 Y로부터 이메일을받을 때 프린지 사례를 처리하기 위해 방화벽 설정을 변경할 때 다룹니다. 그리고 당신이 아닐 수도 있습니다. PFY가 될 수도 있습니다.하기로 결정하고 휴가를 마치고 새벽 2시에 전화를 걸어야합니다. 모든 것이 끔찍한 방식으로 일어났습니다.
  • 시스템 언어-Windows의 경우 스크립트 언어가 매우 강력한 리소스로 연결되어 PC에서 무엇이든 할 수있게 해주는 Powershell 및 WMI와 같은 기능입니다. 유닉스 / 리눅스는 내가 말할 자격이없는 툴을 가지고 있습니다.

0

문제 해결에서 다양한 유형의 자동화 (계정 및 리소스 프로비저닝, 사용자 또는 컴퓨터 계정에 대한보다 지능적인 검사)를 실제로 강화하는 데 이르기까지 LDAP에 바인딩하고 원하는 스크립팅 언어로 필요한 정보를 검색하는 방법을 아는 것이 중요합니다.

기본적으로 보일지 모르지만 사람들이 이런 종류의 시스템 관리가 필요하지 않다고 생각하는 빵 가게를 많이 보았습니다. 많은 곳에서 많은 관리 도구 세트에 $$$를 쓰고, 내가 알 수있는 한, 도구를 사용하는 것의 95 %는 누군가 알고 있거나 방법을 알고 있다면 몇 시간의 스크립팅으로 수행되었을 수 있습니다. 해.


0

bash, dos batch 및 powershell 스크립트를 아는 것은 시스템 관리자에게 인기있는 시스템에서 무엇이든 할 수있는 프레임 워크를 제공한다는 것을 알았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.