CLI 및 Streams

3143 단어 devopslinuxbashcli

소개하다.
Bash와 같은 nix셸에 익숙하지 않은 사람들에게streams의 밑바닥 프레임워크는 약간 모호한 것 같다.더욱이 이들 시설에 대한 확고한 이해가 어떤 가치 주장인지는 분명하지 않다.본고에서 나는 30년 전에 누군가가 나에게 알려주기를 바라는 메시지를 전달하려고 노력할 것이다. 그때 나의 *nix셸 여행이 시작되었다.

시냇물
명령을 입력할 수 있는 셸, 작성할 수 있는 셸 프로그램, 'ls' 명령 등을 포함한 모든 프로그램에는 세 가지 표준 입출력 흐름이 있는데, 통상적으로 stdin, stdout, stderr라고 부른다.이러한 흐름에는 항상 파일 설명자 번호 0, 1, 2가 할당됩니다.이러한 흐름의 목적은 두 가지입니다.
  • 실행 중인 프로세스(프로그램)와 파일 사이의 루트 정보.
  • 실행 중인 두 프로세스 사이의 루트 정보입니다.
  • 이런 특정한 흐름은 반이중으로 이루어진다. 이것은 모든 흐름이 한 방향에서만 데이터 흐름을 진행할 수 있다는 것을 의미한다.

    흐르는 내용
    stdin은 데이터를 프로세스로 이동하는 데 사용되며, stdout과 stderr는 데이터를 프로세스에서 이동하는 두 채널입니다.stdout는 모든 것이 순조롭게 진행되는 상황에서 프로그램에서 얻을 수 있는 정보에 사용되며, stderr는 오류에 대한 정보에 사용됩니다.모든 흐름은 일련의 바이트를 전달한다.이 바이트가 텍스트, 이진, JSON, XML 등인지 여부는 발송자와 수신자의 관심사일 뿐이다.그게 중요해.

    CLI
    Bash와 같은 셸을 상호 작용으로 사용할 때 앞서 언급한 세 가지 흐름 연결은 다음과 같습니다.

  • 셸의 stdin은 터미널 프로그램에 연결되어 있으며 터미널 프로그램은 Enter 키를 눌렀을 때 입력한 문자열을 입력합니다.

  • 셸의 stdout와 stderr도 터미널 프로그램에 연결되어 있으며, 터미널 프로그램은 이 흐르는 출력을 터미널 창에 출력해서 읽을 수 있도록 합니다.
  • 필요에 따라 이 흐름을 다시 정할 수 있다.

    하위 프로세스
    명령을 내릴 때 어떤 일이 일어날지 봅시다.
    /bin/ls
    
    셸에서kernel fork () 호출을 호출해서 하위 프로세스를 만듭니다. 이 하위 프로세스는 현재 사용하고 있는 상호작용 셸과 같습니다. fork () 호출 자체의 반환 값만 보존합니다.이곳의 주요 의미는 stdin, stdout, stderr가 현재 사용하고 있는 셸과 같은 단점에 연결되어 있다는 것입니다.명령줄이 '/bin/ls' 로 시작하기 때문에, 이 하위 프로세스는kernel exec () 호출을 호출해서'/bin/ls' 프로그램을 덮어씁니다. 즉, 하위 프로세스는 '/bin/ls' 가 되고, 부모 프로세스의 흐름 분배를 보존합니다.현재, "/bin/ls"는 파일 원본 정보를 추적하고, 생성된 일련의 텍스트 문자를 stdout에 보냅니다. stdout가 터미널 프로그램에 인쇄될 것을 기억할 수 있습니다.

    파일로 리디렉션
    "/bin/ls"출력을 파일에 저장하려면 "/bin/ls"stdout을 다음 파일로 리디렉션할 수 있습니다.
    1>ls-output.txt /bin/ls
    
    여기서 나는 명령의 첫머리에 방향을 바꿀 것이다.명령 뒤에 배치할 수도 있습니다.명령줄이 더 복잡하고 여러 명령이 관련될 때만 위치가 중요해진다.
    이번에는 상호작용 셸에서 파일 'ls output.txt' 를 만들고 하위 프로세스의 표준 출력 흐름에 연결합니다."/bin/ls"가 동작을 수행할 때, 결과는 "ls output.txt"파일에 기록됩니다.터미널 프로그램은 이 리셋에 어떤 방식으로도 참여하지 않습니다.이것은 관건적인 개념이다.

    자동화
    터미널 프로그램을 사용하는 것은 단지 데이터를 케이스로 옮기고 옮기는 많은 방법 중의 하나일 뿐이다. 비록 상호작용에 있어서 이것은 매우 편리한 방법이지만.상호작용 명령을 입력해서 자동화를 실현하려면 자동화는 매우 간단할 것입니다.이것은 아마도 명령줄에서 어떻게 조작을 집행하는지 배우는 가장 중요한 원인일 것이다.

    결론
    표준 흐름을 이해하는 것은 *nix 시스템에서 셸 프로그래밍을 하는 핵심이다.흐르는 작업 방식에 대한 자신감이 생기면 Bash (또는 다른 셸) 를 사용하여mashup 프로그램을 신속하게 만들 수 있습니다.이것은 자동화의 관건이며, 이것은 Bash가 제공한 가장 큰 가치 주장일 수 있다.

    좋은 웹페이지 즐겨찾기