Linux에서 yes 명령을 사용하는 방법

‘yes’ 명령어는 겉보기에는 매우 단순해 보일 수 있지만, 이 가이드에서는 리눅스와 macOS 환경에서 이 명령어를 어떻게 활용하여 자동화된 작업을 수행하고 숨겨진 유용성을 발견할 수 있는지 자세히 살펴보겠습니다.

‘yes’ 명령어의 소개

리눅스와 macOS를 포함한 유닉스 계열 운영체제에서 ‘yes’ 명령어는 가장 기본적인 명령어 중 하나입니다. 단순함은 사용법이 매우 쉽고, 초기 구현 또한 간단하다는 것을 의미합니다. 실제로, System 7 Unix에서 처음 공개된 이 명령어의 소스 코드는 켄 톰슨이 작성했으며, 단 6줄의 코드로 이루어져 있습니다.

그러나 이 간단한 명령어가 무시할 만한 것은 아닙니다. 다양하고 흥미로운 방식으로 활용할 수 있습니다.

‘yes’ 명령어의 기능

명령어 프롬프트에서 매개변수 없이 ‘yes’를 입력하면, 이 명령어는 마치 사용자가 ‘y’를 입력하고 엔터 키를 계속해서 누르는 것과 같은 동작을 합니다. 매우 빠른 속도로 이 과정을 반복하며, 사용자가 Ctrl+C를 눌러 중단할 때까지 멈추지 않습니다.

yes

실제로 ‘yes’ 명령어는 원하는 메시지를 반복적으로 출력하는 데에도 활용할 수 있습니다. 예를 들어, ‘yes’ 다음에 공백과 원하는 문자열을 입력한 후 엔터 키를 누르면, 해당 문자열이 계속해서 출력됩니다. 이는 ‘yes’ 명령어를 사용하여 ‘yes’ 또는 ‘no’와 같은 문자열을 출력 스트림으로 생성할 때 유용합니다.

yes yes

yes 원하는_문자열

‘yes’ 명령어의 활용

‘yes’ 명령어의 출력은 다른 프로그램이나 스크립트로 연결(파이핑)하여 사용할 수 있습니다.

이러한 상황이 익숙하게 느껴지시나요? 예를 들어, 오래 걸리는 프로세스를 시작해 놓고 잠시 자리를 비웠다가 돌아왔을 때, 프로세스가 완료되지 않고 “예” 또는 “아니오”를 묻는 상황을 마주할 수 있습니다.

만약 모든 질문에 대한 답변이 ‘예’ 또는 ‘아니오’로 미리 정해져 있다면, ‘yes’ 명령어를 사용하여 이러한 답변을 자동으로 제공할 수 있습니다. 따라서, 긴 프로세스를 ‘yes’ 명령어와 함께 실행하여 사용자의 개입 없이 완료할 수 있습니다.

스크립트에서의 ‘yes’ 명령어 활용

다음은 Bash 쉘 스크립트의 예시입니다. (이 스크립트는 실행 시간이 오래 걸리는 더 큰 스크립트의 일부분이라고 가정해 봅시다.)

#!/bin/bash

# ...
# 긴 스크립트 중간 부분
# 사용자로부터 응답을 받는 부분
# ...

echo "계속 진행하시겠습니까? [y,n]"
read input

# 입력값이 있는지 확인
if [ "$input" == "" ]; then

   echo "사용자가 아무 값도 입력하지 않았습니다."

# 입력값이 "y" 또는 "yes"인지 확인
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "긍정적인 응답: $input"

# 그 외의 입력은 부정적인 응답으로 처리
else

   echo "부정적인 응답: $input"

fi

이 스크립트는 사용자에게 질문을 던지고, 사용자의 응답에 따라 스크립트의 흐름을 결정합니다.

“예” 또는 “y”는 긍정적인 응답을 나타내며,
그 외의 모든 입력은 부정적인 응답으로 간주됩니다.
엔터 키만 누르면 아무런 작업도 실행되지 않습니다.

이 스크립트를 테스트하려면 해당 내용을 파일에 복사하고 ‘long_script.sh’로 저장한 후, 실행 권한을 부여해야 합니다.

chmod +x long_script.sh

이제 다음 명령어를 사용하여 스크립트를 실행하고, “예”, “y”, 그리고 다른 값을 입력으로 제공해 볼 수 있습니다.

./long_script.sh

스크립트의 질문에 자동으로 답변을 제공하려면, ‘yes’ 명령어의 출력을 스크립트로 파이핑하면 됩니다.

yes | ./long_script.sh

일부 스크립트는 “yes” 전체 단어만 긍정적인 응답으로 인식할 수도 있습니다. 이 경우 ‘yes’ 명령어에 매개변수로 ‘yes’를 전달해야 합니다.

yes yes | ./long_script.sh

신중하게 ‘yes’ 사용하기

스크립트나 프로그램에 자동 입력을 제공하기 전에, 이러한 자동화된 입력이 예상된 결과를 가져올 것이라는 확신이 있어야 합니다. 올바른 결정을 내리기 위해서는 질문과 답변의 내용을 정확히 이해해야 합니다.

스크립트, 명령어 또는 프로그램의 로직이 사용자의 예상과 다를 수 있습니다. 예를 들어, 예시 스크립트에서 질문이 “중단하시겠습니까? [y,n]”일 경우, 부정적인 응답으로 진행해야 할 수도 있습니다.

따라서, ‘yes’ 명령어를 사용하기 전에 스크립트, 명령어, 또는 프로그램을 충분히 이해해야 합니다.

명령어와 함께 ‘yes’ 사용

과거에는 ‘yes’ 명령어가 다양한 리눅스 명령어와 함께 사용되었지만, 최근에는 대부분의 리눅스 명령어들이 사용자 상호작용 없이 자체적으로 실행되도록 개선되었습니다. 따라서 ‘yes’ 명령어의 필요성이 줄었습니다.

예를 들어, Ubuntu 패키지 관리자인 ‘apt-get’을 사용하여 프로그램을 설치할 때, 중간에 ‘y’를 누르지 않고 자동으로 진행하고 싶다면 다음과 같이 ‘yes’ 명령어를 사용할 수 있었습니다.

yes | sudo apt-get install fortune-mod

하지만 이제는 ‘apt-get’ 명령어에 ‘-y’ 옵션을 사용하여 동일한 결과를 얻을 수 있습니다.

sudo apt-get -y install fortune-mod

‘apt-get’ 명령어는 여전히 “계속하시겠습니까? [Y/n]”이라는 질문을 던지지만, ‘-y’ 옵션은 해당 질문에 자동으로 “예”라고 대답한 것과 같은 효과를 가져옵니다.

다른 리눅스 배포판에서도 상황은 비슷합니다. Fedora에서는 패키지 관리 명령어에 다음과 같이 ‘yes’ 명령어를 사용했을 것입니다.

yes | yum install fortune-mod

하지만 ‘yum’을 대체하는 ‘dnf’ 패키지 관리자 또한 자체적으로 ‘-y’ 옵션을 제공합니다.

dnf -y install fortune-mod

‘cp’, ‘fsck’, ‘rm’과 같은 다른 명령어들도 마찬가지입니다. 이 명령어들은 각각 ‘-f’ (강제) 또는 ‘-y’ (예라고 가정) 옵션을 제공합니다.

그렇다면 ‘yes’ 명령어는 이제 스크립트에서만 활용되는 걸까요? 꼭 그렇지만은 않습니다. 여전히 유용한 몇 가지 활용법이 남아있습니다.

‘yes’ 명령어의 추가 활용법

‘seq’ 명령어로 생성된 숫자 시퀀스와 ‘yes’ 명령어를 함께 사용하면 반복적인 작업 루프를 제어할 수 있습니다.

다음의 명령어는 생성된 숫자를 터미널에 출력하고, 1초 동안 대기하는 동작을 반복합니다.

터미널에 숫자를 출력하는 대신 다른 명령어 또는 스크립트를 호출할 수도 있습니다. 이때 호출되는 명령어 또는 스크립트는 숫자를 사용할 필요 없이 단순히 반복 루프를 시작하는 용도로만 사용될 수 있습니다.

yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

때로는 테스트를 위해 대용량 파일이 필요한 경우가 있습니다. 예를 들어, ‘zip’ 명령어를 연습하거나 FTP 업로드를 테스트하기 위해 큰 파일이 필요할 수 있습니다.

‘yes’ 명령어를 사용하면 대용량 파일을 빠르게 생성할 수 있습니다. 긴 문자열을 제공하고 출력을 파일로 리디렉션하면 됩니다. 주의해야 할 점은, 이렇게 생성된 파일의 크기가 매우 빠르게 증가할 수 있다는 것입니다. Ctrl+C를 눌러 프로세스를 중단할 준비를 해야 합니다.

yes 의미 없는 긴 텍스트 문자열 > test.txt
ls -lh test.txt
wc test.txt

위의 예시에서 생성된 파일은 약 5초 만에 557MB 크기로 생성되었습니다. 파일에는 1240만 줄의 텍스트가 포함되어 있습니다.

파일 크기를 제한하기 위해 ‘head’ 명령어를 사용하여 파일에 포함할 줄 수를 지정할 수 있습니다. ‘-50’ 옵션을 사용하면 ‘test.txt’ 파일에 50줄만 포함되도록 제한할 수 있습니다.

yes 의미 없는 긴 텍스트 문자열 | head -50 > test.txt

위의 명령어는 ‘test.txt’ 파일에 정확히 50줄의 텍스트가 기록되면 자동으로 종료됩니다. Ctrl+C를 사용하여 강제로 중단할 필요가 없습니다.

‘wc’ 명령어는 해당 파일이 50줄, 400단어, 2350바이트 크기임을 보여줍니다.

‘yes’ 명령어는 장시간 실행되는 스크립트에 대한 자동 응답을 제공할 때, 그리고 몇 가지 추가적인 활용법에서 여전히 유용하게 사용될 수 있습니다. 하지만 일상적인 작업에서는 많이 사용되지 않습니다. 그러나 필요할 때, 이 간단하지만 강력한 6줄짜리 명령어가 큰 도움이 될 수 있다는 것을 기억해 주세요.