리눅스에서 가장 보편적 인 스크립팅 언어는 무엇입니까?


24

우리는 Linux 시스템 용 스크립트를 작성하고 있으며, 가장 보편적으로 사용되는 Linux 스크립팅 언어가 무엇인지에 대한 논쟁이있었습니다. 배쉬, SH, 포 식스? 뭐?


3
나는 추측 할 것이다 sh.
Blender

대상 배포 목록이 있습니까? 아니면 강제 / 바람직하지 않은 배포판이 실행되어야합니까?

4
"sh"? 무슨 "sh"? 톰슨 껍질? 본 쉘? /bin/sh시스템 X 또는 Y 에서와 같이 bash, ksh, pdksh, ash, zsh ? POSIX sh 사양, SUSv3, SUSv4 sh 사양, LSB sh 사양? "sh"자체는 아무 의미가 없습니다.
Stéphane Chazelas

1
소프트웨어 빌드 및 스크립트 용인 경우 시스템 간 컴파일 문제를 해결하려는 Autotools를 확인하십시오.
Lie Ryan

1
@sch 가장 휴대하기 쉬운 공통 교차점입니다. 유닉스 셸에 익숙하지 않은 사람들이 귀하의 의견에 의해 오도되는 경우, POSIX 사양은 이름을 감수해야 할 거의 모든 현대 셸 과 오늘날 고대 적이 지 않은 드문 sh부적합 sh(예 : Bourne)으로 구현됩니다. 확장 및 변형 목록이 계속 늘어날 수 있지만 목표가 "유니버설"이거나 이식성이라면 반대 방향으로 진행해야합니다. Gilles의 답변은 자세한 내용을 자세히 다룹니다.
jw013

답변:


38

모든 유닉스 계열 운영 체제에서 사용할 수있는 두 가지 프로그래밍 환경이 있으며 Turing-complete이고 Bourne / POSIX 쉘 제품군 인 awksh 를 호출 할 수 있습니다. AWK는 텍스트 처리 (보다 전문화 된 유틸리티를 보완 함)를 지향하는 반면 sh는 프로그램을 구성하기위한 풀 언어를 지향합니다. Sh는 Linux 및 유닉스 세계 에서 보편적 인 스크립팅 언어입니다.

POSIX의 표준은 쉬 자체 및 관련 유틸리티의 필수 기능을 정의합니다. 대부분의 유닉스 계열 시스템은 POSIX 1003.1-2004 (일명 Open Unix v3, 일명 Open Group Base Specification 이슈 6)를 준수합니다 . 이 표준의 최신 버전은 POSIX 1003.1-2008 (일명 Open Unix v4, 일명 Open Group Base Specification Issue 7)입니다.

모든 Linux 및 유닉스 또는 유닉스 계열 시스템에는 경로에 Bourne 스타일 쉘이 있으며 /bin/sh, 비 앤티크 시스템에는 POSIX 호환 쉘이 있습니다 (때때로 버그가 발생하지 않음). 모든 최신 유닉스 계열 시스템 (Linux 포함)은 shebang을 지원 하므로 /bin/sh첫 번째 행이 인 경우 자동으로 스크립트를 실행 #!/bin/sh합니다. sh다른 위치에 있는 POSIX 시스템 이 있습니다 (일반적으로 Unix와 같은 것으로 생각하지 않는 OS의 에뮬레이션 계층).

임베디드 Linux 시스템에는 모든 POSIX 기능을 구현하지 않는 제거 된 BusyBox 시스템이있을 수 있습니다. BusyBox에는 적은 공간을 차지하는 시스템을 수용 할 수있는 많은 컴파일 타임 옵션이 있으므로 미리 예상 할 사항을 알기가 어렵 기 때문에 스크립트를 특정 장치에 맞게 조정해야합니다. BusyBox는 sh 및 여러 유틸리티의 가장 일반적인 작은 풋 프린트 구현입니다. 또 다른 문제는 안드로이드에서 쉘 환경이 획기적으로 줄어드는 것입니다 (나중 버전은 빈약함).

비 임베디드 Linux 시스템은 거의 항상 대시 또는 bash를가 집니다 /bin/sh. 대시는 POSIX 기능을 거의 구현하지 않는 작고 빠른 셸입니다. Bash는 더 많은 기능을 갖춘 더 큰 쉘입니다.

비 임베드 Linux 시스템은 거의 항상 Bash를로 설치합니다 /bin/bash. 따라서 임베디드 Linux 시스템에서 이식성을 위해 bash를 사용할 수 있다고 가정 할 수 있습니다. bash의 유용한 추가 기능 중에는 배열, 도트 파일을 편리하게 처리하는 기능 pipestatus, 파이프 라인의 모든 명령의 반환 상태를 얻는 변수, 파일 시간에 대한 추가 비교 연산자 및 (최근 버전에서는) 정규식 일치가 있습니다. .

쉘 프로그래밍의 특징 중 하나는 sh프로그램을 사용하는 것이 아니라 많은 유틸리티를 사용한다는 것입니다 . Linux에서 대부분의 파일 조작 및 텍스트 처리 유틸리티는 GNU coreutils입니다 (내장 시스템에서는 보통 BusyBox에서 제공).

Linux 이외의 이식성이 필요한 경우 POSIX를 사용하는 것이 가장 좋습니다. 다른 유닉스 변형에는 bash가 설치되어 있지 않을 수 있습니다 (bash는 OSX에서 표준 설치의 일부이지만 * BSD 및 대부분의 상업용 유니스에서는 옵션 패키지입니다). Linux 및 OSX 이외의 거의 모든 유닉스 변형 (예 : * BSD 및 상업용 유니스)에는 최소한 pdksh 와 같은 Korn 쉘 버전이 있습니다. bash의 편리한 확장 중 많은 부분이 ksh에서 제공되므로 둘 다에서 실행할 수있는 스크립트를 작성하는 것이 유용 할 수 있지만 알 수없는 시스템에서 bash 또는 ksh가있는 위치를 감지하는 것은 약간의 고통이 될 수 있습니다.

껍질은 모든 것을 할 수는 없습니다. 좀 더 정교한 언어가 필요한 경우, 가장 일반적인 두 가지 선택은 Perl과 Python입니다. Perl은 전통적인 스크립팅 언어이며 임베디드 리눅스 시스템이 부족한 시스템은 거의 없지만 파이썬은 우분투를 위해 권장되는 스크립팅 언어로 부분적으로 향상되었습니다. 비 Linux 환경에서 Perl은 OSX 및 OpenBSD의 기본 설치의 일부입니다. 선택 사항이지만 FreeBSD에 매우 일반적으로 설치되며 선택 사항이지만 종종 NetBSD에 설치됩니다.


1
페도라와 RHEL 시스템에서는이 모든 것이 필요하다.
Ignacio Vazquez-Abrams 1

대부분이 모든 것에 동의합니다. 몇 가지 다른 강조점 : * 일부 배포판은 BusyBox 기반이지만 반드시 포함되지는 않습니다 (알파인 하나를 사용합니다). ( 거의 대답 "거의 항상"이라고 말합니다.) * BSD는 기본적으로 bash를 가정 할 수없는 대규모 유닉스 계열 시스템입니다. * 대시는 bash가 할 수있는 거의 모든 것을 할 수 있으며 때로는 더 많은주의가 필요합니다. * 좀 더 복잡한 언어가 필요하다면, 펄과 파이썬이 가장 일반적인 선택이지만, awk는 훨씬 더 보편적이며 많은 목적에 적합합니다. 또한 일반적으로 과소 평가됩니다. 그러나 Perl과 Python보다 가볍습니다.
dubiousjim

2
그러나 공정한 경고-FreeBSD는 얼마 전에 Perl을 기본 설치에서 삭제했습니다. 그 외에도, 기본 설치에 Perl이없는 다른 배포판을 모르겠습니다.
TC1

@ TC1 Perl은 NetBSD에서 항상 선택 사항이었습니다. OpenBSD의 기본 시스템에 있습니다.
Gilles 'SO- 악마 그만'

@dubiousjim Linux (임베디드가 아니거나 실제로는 대략적인 근사치)와 OSX 만 기본 설치에 bash가 있습니다. * BSD에는 pdksh 또는 mksh가 있고 상업용 유니스에는 ATT ksh가 있습니다.
Gilles 'SO- 악마 그만'

11

주문 가능 상태 :

  1. sh, 그러나 POSIX 지정 시설을 고수하십시오.
  2. bash, shebang에서 명시 적으로 지정하는 것을 잊지 마십시오. 대신 대시가 발생할 수 있습니다.
  3. 파이썬. 거의 모든 사람이 사용합니다.
  4. 펄. 그러나 당신은 그것을 쓸 수 있습니다.

그 후에는 그저 할 수있는 일이 많지 않기 때문에 아무도 신경 쓰지 않습니다.


10
나는 PERL을 파이썬 앞에 두었다. 그것은 대부분의 리눅스 시스템에서 기본적으로 설치된다.
terdon

4
펄은 # 3입니다. 그리고 당신은 그것을 작성 보너스를 얻을! :)
워렌 영

2
@ignacio perl은 # 4이고 python은 # 3입니다. 그 이유는 분명하다. 파이썬은 펄의 진화라고 생각합니다.
bagavadhar

5
@ashwin : 아뇨, 파이썬은 펄의 진화가 아니고 심지어 펄도 아닙니다. perl은 sysadmins의 sysadmins 언어입니다. 파이썬은 프로그래머를위한 프로그래머의 언어입니다. 그 차이는 매우 중요합니다. 둘 다 용도가 있으며 사용 사례가 많이 겹칠 수 있지만 일부 작업의 경우 perl이 더 나은 선택이고 다른 경우에는 Python이 분명히 우수합니다.
cas

1
루비와 PHP는 Perl에서 영감을 받았습니다. 파이썬은 물리학 실험의 결과로 슈퍼 콜 리더에서 안티-펄스를 만들었습니다. (나는 파이썬에 대해 아무것도 없다. 플러스와 마이너스, 플러스와 마이너스.)
Warren Young

4

일반적으로, 나는 sh....하지만 말할 것이다 .하지만 리눅스를 지정한 이후로, bash모든 리눅스 시스템에 있다고 보장된다.

Linux 이외의 이식성에 신경 쓸 필요가없고 (소형 배포판이나 플라스틱 상자 라우터와 같은 임베디드 Linux 장치에서 실행할 필요가없는 경우) 다음과 같은 중요한 개선 사항을 활용할 수도 있습니다. 그것은 일반 이상을 제공합니다 sh. 그렇지 않으면를 사용하십시오 sh.

bash(그리고 sh), 리눅스에 대한 다음으로 "보편적"스크립트 언어의 일부 방언 것 awk일반적으로 중 - mawkgawk. 평범한 괴짜를 고수하고 괴짜주의를 피한다면 스크립트는 거의 모든 Linux 시스템에서 잘 작동해야합니다 (작은 배포판이나 임베디드 장치에서는 누락 될 수 있음). 대부분의 리눅스 시스템은 모두해야합니다 mawkgawk사용할 수를하지만, 일부 배포판 (예를 들어 데비안)에 mawk기본적으로 설치되어있는 경우 설치해야 gawk당신이 그것을 원하는 경우 자신을.

다음은 perl. 기본 펄 언어 인 AFAIK는 모든 일반 Linux 배포판에 기본적으로 설치되므로 좋은 선택입니다. 더 운 좋게도 perl5 릴리스와 버전 비 호환성이 거의 없습니다 (perl 5.12 또는 5.14 일 수 있지만 약 15 년 동안 사용되지 않는 모호한 기능을 제거하기 위해 마침내 돌아 왔습니다 ... 사용하지 말라고 경고합니다) 코딩 스타일이 정말로 이상하고 10 년이 넘는 "하지 말 것"경고를 무시하고 싶지 않다면 펄 스크립트는 거의 모든 곳에서 잘 실행될 것입니다. 언어는 견고하고 강력하고 모든 것을 할 수 awksed더 많은 작업을 수행 할 수 있습니다. 약간의 노력만으로도sh일반적으로 외부 명령을 실행하고 출력을 사용 / 파이핑하는 것도 좋습니다. 표준 펄 라이브러리는 기본 사항 이상을 다루는 매우 포괄적입니다.

perl의 유일한 문제점은 생각할 수있는 모든 것을 수행 할 수있는 방대한 CPAN 모듈 라이브러리가 있다는 것입니다. . 일반적으로 품질이 매우 높기 때문에 그냥 사용하는 습관을 들이기 쉽습니다. 그러나 사용하는 경우 반드시 설치해야합니다. 많은 CPAN 모듈은 Linux 용으로 사전 패키지되어 있으며 나머지는 cpan 도구 (또는 dh-make-perldebian / ubuntu / etc에 CPAN 모듈을 .deb 패키지로 변환하기 위해) 와 함께 쉽게 설치할 수 있습니다.

나는 python다음 에 말할 수 있기를 원 하지만 실제로는 할 수 없습니다. 파이썬에 대해 좋아하는 것이 많지만 기본적으로 많은 Linux 시스템에 포함되어 있지 않으며 솔직히 버전 호환성 (파이썬 자체와 "표준"라이브러리 모두에 해당)은 완전한 혼란입니다. 일부 배포판은 엉망을 분류하는 데 큰 노력을 기울이고 일부는 그렇지 않습니다. python은 기본적으로 프로그래머가 sysadmins와는 달리 프로그래머가 작성한 언어이며 코드가 설치 되는 시스템 이 전혀 중요 하다고 생각하지 않는 것 같습니다 . 정말 특별 하기 때문에 기존 시스템에 통합하는 것과 같은 지루한 것들에 신경 쓸 필요가 없습니다.

(비록 여기서 잘못된 아이디어를 얻지 마십시오. 저는 파이썬을 언어로 정말 좋아합니다. 버전과 의존성 관리가 PITA라는 사실을 싫어합니다. 모호한 것을 찾기 위해 수동으로 사냥하는 시대로 20 년 이상 거슬러 올라갑니다. 독점적 인 * nix에서 무언가를 컴파일하고 실행하기위한 코드 및 패치 비트)


나는 이것이 이전 게시물입니다 알지만,이 문제를 회피하는 가장 좋은 방법은 지정하는 것입니다 오두막의 버전 (예를 들어 /usr/bin/python2, /usr/bin/python3).
Isiah Meadows 2018

1

나는 ksh93 또는 심지어 POSIX 풍미를 따르라고 제안하고 항상 bash / zsh를 사용하여 실행할 수 있습니다.

그리고 데비안 기반 배포판은 mawk를 기본 awk로 사용하지 않습니다. mawk가 훨씬 빠르므로 gawk 추가를 피하십시오.


0

강타하지 않습니다. 대시 또는 애쉬처럼 POSIX에 가까운 곳에 씁니다. 그것은 가장 보편적 일 것입니다. 가까운 경쟁자 인 것도 없다고 생각합니다. (그리고 이것은 저의 의견 중 하나가 불평하는 것처럼 "의견"이 아닌 사실적인 질문으로 보입니다.)

sh보다 조금 더 강력한 것이 필요하다면 (예를 들어, 실제 연관 배열을 원한다면) awk를 사용하십시오. gawk 확장 기능을 피하십시오. awk에는 여러 버전이 있지만 공유 코어가 많이 있습니다. 거의 sh만큼 광범위하게 사용할 수 있습니다.


1
awk-on-Linux는 보편적으로 괴짜입니다. 기본적으로 다른 변형이있는 배포판을 생각할 수 없습니다.
Ignacio Vazquez-Abrams

5
지원하지 않는 Linux 변형은 bash무엇입니까?
Jonathan Leffler

1
확실히 bash리눅스 박스에 설치하고 실행할 수 있지만, 많은 데비안 사용자는 설치 만하고 설치 dash를 선호하지 않습니다 bash.
윌리엄 퍼셀

6
@WilliamPursell bash 패키지는 데비안에서 필수 태그로 지정되어 있습니다 (즉, 시스템을 손상시킬 것이라는 경고와 함께 제거를 위해 농구대를 거쳐야합니다). Bash는 임베디드 시스템이 아닌 Linux 시스템에서 보편적입니다.
Gilles 'SO- 악마 그만'

1
@JonathanLeffler : 반대로 포함 된 제품에는 Busybox 만있을 수 있습니다.
기계 달팽이

0

가용성은 다음 순서로 어딘가에 있다고 말할 것입니다.

  1. 어 wk
  2. Perl (BSD를 포함하지 않고 * nix를 아직 보지 못했습니다)

파이썬은 좋은 언어처럼 들리지만, 우분투는 아마도 기본 설치에서 제공되는 OS를 사용하지 않았습니다.


0

여기 전문가가 이미 결정에 도움이되는 훌륭한 제안을 제공했다고 생각합니다. 다른 쉘의 유용성과 가용성은 다른 게시물에 잘 설명되어 있습니다.

다른 말로, 내가 당신이라면 스크립트로 달성하려는 목표를 고려할 것입니다. 모든 도구에는 고유 한 장점과 단점이 있습니다. 따라서 파이썬을 주로 사용하지만 모든 경우에 파이썬을 사용하지는 않습니다.

몇 가지 시나리오를 생각하고 유용한 도구를 언급 할 수 있습니다.

FTP 파일 간; 그들을 처리; 이메일 알림을 보냅니다. 등등

이 경우는 쉘 (예를 들어, 배쉬)을 고수하고 다양한 유틸리티를 사용하는 것이 좋을 것이다 (예를 들어 ftp, cronmail). 이것은 많은 대기업에서 일반적인 사용 사례입니다.

빠른 텍스트 처리

다시 한번, 껍질. 이 grep경우 awk,, sed등 의 유틸리티 paste가 매우 편리합니다.

짓다

C / C ++ 도메인에서이를위한 범용 도구는 make입니다. Java 세계는 Apache ANT를 선호합니다.

배포 및 원격 제어

쉘 또는 파이썬 중 하나입니다. 예를 들어, scprsync각각 파일을 파일을 복사하거나 동기화에 매우 유용 할 것이다.

반면에 파이썬에는라는 매우 유용한 모듈이 fabric있습니다. 이는 파일 복사, 일부 프로세스 중지, 서버 구성 등과 같은보다 복잡한 작업에 유용합니다. 또한 Python은 모듈을 제공하는데,이 모듈 pip은 관련 패키지를 다운로드하여 설치하여 지정된 종속성을 해결할 수 있습니다.

(위의 제안은 쉘 기능 에 중점을 두지 않고 사용 가능한 다른 유틸리티에 중점을 둡니다 .)


-1

Perl은 FreeBSD, NetBSD 또는 DragonflyBSD 기반이 아닙니다. 죄송합니다. OpenBSD는 기본 설치에 Perl을 가지고 있습니다. OS X는 현재 인증 된 UNIX이며 일부 수준에서 일종의 BSD 변형으로 생각 될 수 있으며 Perl, Python 및 Ruby가 기본으로 제공됩니다.

많은 독점적 인 UNIX 사용자는 기본적으로 Perl을 가지고 있지 않습니다 (예 : Solaris, AFAIK, HP-UX 또는 IBM AIX 모두).


Solaris 누락 Perl에 대한 귀하의 진술이 올바르지 않습니다. Perl은 2005 년 (Solaris 10)부터 Solaris의 필수 핵심 구성 요소입니다.
jlliagre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.