소개
리눅스 명령 실행과 텍스트 처리에 관한 실습에 오신 것을 환영합니다! 리눅스가 처음이더라도 걱정하지 마세요. 각 단계를 차근차근 안내해 드립니다. 이 실습에서는 여러 명령을 효율적으로 실행하는 방법과 강력한 텍스트 처리 도구들을 살펴보겠습니다. 실습을 마칠 때쯤이면 전문가처럼 명령을 조합하고, 텍스트를 검색하며, 데이터를 자유자재로 다룰 수 있게 될 것입니다!
리눅스 명령 실행과 텍스트 처리에 관한 실습에 오신 것을 환영합니다! 리눅스가 처음이더라도 걱정하지 마세요. 각 단계를 차근차근 안내해 드립니다. 이 실습에서는 여러 명령을 효율적으로 실행하는 방법과 강력한 텍스트 처리 도구들을 살펴보겠습니다. 실습을 마칠 때쯤이면 전문가처럼 명령을 조합하고, 텍스트를 검색하며, 데이터를 자유자재로 다룰 수 있게 될 것입니다!
리눅스에서는 한 줄에 여러 명령을 차례대로 실행할 수 있습니다. 이는 일련의 연관된 작업을 수행할 때 특히 유용합니다.
간단한 예시부터 시작해 보겠습니다. 현재 날짜를 표시한 다음 홈 디렉터리의 내용을 나열해 보겠습니다.
date && ls ~
이 명령의 구성 요소는 다음과 같습니다:
date: 현재 날짜와 시간을 표시합니다.&&: "그리고"를 의미합니다. 앞의 명령이 성공했을 때만 다음 명령을 실행하도록 리눅스에 지시합니다.ls ~: 홈 디렉터리의 내용을 나열합니다 (~ 기호는 홈 디렉터리를 나타냅니다).터미널에 이 명령을 입력하고 Enter 를 누르세요. 오늘 날짜와 함께 홈 디렉터리에 있는 파일 및 폴더 목록이 나타날 것입니다.
날짜 뒤에 파일 목록이 보이지 않더라도 걱정하지 마세요! 홈 디렉터리가 비어 있다는 뜻일 수 있습니다. 출력을 확실히 확인하고 싶다면 ls /home/labex를 대신 입력해 보세요.
이번 단계에서는 이전 명령의 성공 또는 실패 여부에 따라 명령 실행을 제어하는 조건부 연산자 사용법을 알아봅니다.
먼저, 설치되지 않은 프로그램을 사용하여 조건부 명령을 실행해 보겠습니다.
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
이 명령 시퀀스의 의미는 다음과 같습니다:
which cowsay: cowsay 프로그램이 설치되어 있는지 확인합니다.&&: 논리적 AND 연산자로, 이전 명령이 성공했을 때만 다음 명령을 실행합니다.cowsay "Hello, LabEx": "Hello, LabEx"라고 말하는 소 모양의 ASCII 아트를 표시합니다.||: 논리적 OR 연산자로, 이전 명령이 실패했을 때만 다음 명령을 실행합니다.echo "cowsay is not installed": cowsay 가 설치되지 않았음을 알리는 메시지를 출력합니다.시스템에 아직 cowsay 프로그램이 설치되지 않았으므로 "cowsay is not installed"라는 출력이 나타날 것입니다.
이제 cowsay 를 설치해 보겠습니다.
sudo apt-get update && sudo apt-get install -y cowsay
설치가 완료되면 동일한 명령을 다시 실행해 보세요.
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
이번에는 "Hello, LabEx"라고 말하는 소 모양의 ASCII 아트를 볼 수 있습니다.
이 예제는 &&와 ||를 사용하여 조건부 명령 시퀀스를 만드는 방법을 보여줍니다. &&는 "이전 명령이 성공하면 실행"을 의미하고, ||는 "이전 명령이 실패하면 실행"을 의미합니다.
과정을 다시 정리해 보겠습니다:
설치 전:
which cowsay가 실행되었으나 일치하는 항목을 찾지 못했습니다.&&로 인해 cowsay "Hello, LabEx" 실행을 시도했지만, 설치되지 않았으므로 실패했습니다.cowsay가 실패했기 때문에 || 뒤의 명령인 echo "cowsay is not installed"가 실행되었습니다.설치 후:
which cowsay가 성공했으므로 cowsay "Hello, LabEx"를 실행했습니다.|| 뒤의 echo 명령은 실행할 필요가 없었습니다.이 연산자들을 사용하여 자신만의 조건부 명령 시퀀스를 만들어 보세요!
파이프라인은 한 명령의 출력을 다른 명령의 입력으로 연결할 수 있게 해주는 리눅스의 강력한 기능입니다. 이는 | (파이프) 기호를 사용하여 수행됩니다.
간단한 예시로 시작해 보겠습니다.
ls -l /etc | less
이 명령의 역할은 다음과 같습니다:
ls -l /etc: /etc 디렉터리의 내용을 긴 형식 (long format) 으로 나열합니다.|: 이전 명령의 출력을 다음 명령으로 보냅니다.less: 텍스트를 스크롤하며 볼 수 있게 해주는 프로그램입니다.이 명령을 실행하면 파일과 디렉터리 목록이 나타납니다. 위아래 화살표 키를 사용하여 스크롤할 수 있으며, 'q'를 누르면 종료됩니다.
이제 조금 더 복잡한 파이프라인을 시도해 보겠습니다.
ls -l /etc | grep '^d' | wc -l
이 명령은 /etc에 있는 디렉터리의 개수를 셉니다. 작동 방식은 다음과 같습니다:
ls -l /etc: /etc의 내용을 긴 형식으로 나열합니다.grep '^d': 'd'로 시작하는 줄 (디렉터리를 의미함) 만 필터링합니다.wc -l: 줄 수를 셉니다 (필터링된 디렉터리의 개수가 됩니다).화면에 /etc 디렉터리 내의 디렉터리 개수를 나타내는 숫자가 출력될 것입니다.
cut 명령은 파일의 각 줄에서 특정 부분만 추출할 때 유용합니다. 시스템 사용자 계정 정보가 담긴 /etc/passwd 파일에서 사용자 이름과 홈 디렉터리 경로를 추출해 보겠습니다.
다음 명령을 실행하세요:
cut -d: -f1,6 /etc/passwd | head -n 5
상세 설명은 다음과 같습니다:
cut: 줄의 일부를 추출하는 명령입니다.-d:: :를 구분자 (필드를 나누는 기준 문자) 로 사용합니다.-f1,6: 첫 번째와 여섯 번째 필드 (사용자 이름과 홈 디렉터리) 를 추출합니다.|: 출력을 다음 명령으로 전달합니다.head -n 5: 출력 내용 중 처음 5 줄만 보여줍니다.다음과 유사한 출력이 나타날 것입니다:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
각 줄은 콜론으로 구분된 사용자 이름과 해당 사용자의 홈 디렉터리를 보여줍니다.
이번 단계에서는 더 고급스러운 텍스트 처리를 위해 grep을 파이프라인 및 명령 시퀀스와 함께 사용하는 방법을 알아봅니다.
먼저 .zshrc 파일에서 "PATH"가 포함된 모든 줄을 찾아 그 개수를 세어 보겠습니다.
grep "PATH" ~/.zshrc | wc -l
이 파이프라인은 먼저 grep을 사용하여 "PATH"가 포함된 줄을 찾고, 그 결과를 wc -l로 보내 줄 수를 셉니다.
이제 명령 시퀀스를 사용하여 "PATH"를 검색하고, "PATH"가 발견된 경우에만 "HOME"을 검색해 보겠습니다.
grep "PATH" ~/.zshrc && grep "HOME" ~/.zshrc
이 명령은 "PATH"가 포함된 줄이 발견되었을 때만 "HOME"이 포함된 줄을 표시합니다.
더 복잡한 예시를 시도해 보겠습니다. /etc/passwd에서 "bin"으로 끝나는 줄을 찾아 정렬한 뒤, 상위 5 개만 표시해 보겠습니다.
grep "bin" /etc/passwd | sort | head -n 5
이 파이프라인은 세 가지 작업을 수행합니다:
마지막으로 지금까지 배운 모든 것을 결합해 보겠습니다. /etc/passwd에서 "sh"가 포함된 줄을 찾아 개수를 세고, 그 개수에 따라 줄을 직접 표시하거나 메시지를 보여주도록 하겠습니다.
grep "sh" /etc/passwd | wc -l | {
read count
[ $count -gt 5 ] && grep "sh" /etc/passwd || echo "Found $count lines, not enough to display."
}
이 복잡한 명령은 다음과 같이 작동합니다:
참고: 터미널에서 여러 줄로 구성된 명령을 입력할 때, 줄을 바꾸려면 마지막 줄을 제외한 각 줄 끝에서 Alt+Enter를 누르거나, 전체 명령을 한 줄로 길게 입력하면 됩니다.
이 명령들을 실행해 보고 여러분만의 조합으로 실험해 보세요!
wc (word count) 명령은 텍스트의 줄 수, 단어 수, 문자 수를 세는 데 유용합니다.
먼저 /etc/passwd 파일의 전체 줄 수를 세어 보겠습니다.
wc -l /etc/passwd
-l 옵션은 wc가 줄 수를 세도록 지정합니다. 숫자와 파일 이름이 함께 출력되는 것을 볼 수 있습니다.
이제 /etc/passwd 파일의 처음 10 줄에 포함된 단어 수를 세어 보겠습니다.
head -n 10 /etc/passwd | wc -w
이 파이프라인은 두 가지 작업을 수행합니다:
head -n 10 /etc/passwd: 파일의 처음 10 줄을 가져옵니다.wc -w: 해당 줄들의 단어 수를 셉니다.단어 수를 나타내는 숫자가 출력될 것입니다.
sort 명령은 텍스트 줄을 정렬하는 데 사용됩니다. /etc/passwd 파일을 세 번째 필드 (사용자 ID) 를 기준으로 정렬해 보겠습니다.
sort -t: -k3 -n /etc/passwd | head -n 5
각 옵션의 역할은 다음과 같습니다:
-t:: :를 필드 구분자로 사용합니다.-k3: 세 번째 필드를 기준으로 정렬합니다.-n: (알파벳 순서가 아닌) 숫자 크기 순으로 정렬합니다.| head -n 5: 결과 중 처음 5 줄만 보여줍니다.사용자 ID(세 번째 필드) 순으로 정렬된 /etc/passwd 파일의 상위 5 줄을 확인할 수 있습니다.
uniq 명령은 정렬된 텍스트에서 중복된 줄을 제거하거나 식별하는 데 사용됩니다. 이를 사용하여 /etc/passwd에 정의된 고유한 쉘 (shell) 종류를 찾아보겠습니다.
cut -d: -f7 /etc/passwd | sort | uniq
이 파이프라인은 세 가지 작업을 수행합니다:
cut -d: -f7 /etc/passwd: 각 줄에서 7 번째 필드 (쉘 경로) 를 추출합니다.sort: 추출된 줄들을 알파벳 순으로 정렬합니다.uniq: 중복된 줄을 제거합니다.시스템에서 사용 중인 고유한 쉘 경로 목록이 나타날 것입니다.
이제 각 쉘을 사용하는 사용자가 몇 명인지 세어 보겠습니다.
cut -d: -f7 /etc/passwd | sort | uniq -c
-c 옵션은 각 줄 앞에 발생 횟수를 붙여줍니다. 각 쉘 경로 앞에 해당 쉘을 사용하는 사용자 수가 표시되는 것을 볼 수 있습니다.
축하합니다! 리눅스 명령 실행과 텍스트 처리에 관한 실습을 모두 마쳤습니다. 배운 내용을 정리해 보겠습니다:
&&를 사용하여 명령을 순차적으로 실행하고, ||를 사용하여 조건부로 실행할 수 있습니다.|) 을 사용하면 여러 명령을 연결하여 한 명령의 출력을 다음 명령의 입력으로 전달할 수 있습니다.cut은 파일의 각 줄에서 특정 부분을 추출하는 데 유용합니다.grep은 텍스트에서 특정 패턴을 검색하는 데 도움을 줍니다.wc는 텍스트의 줄, 단어, 문자 수를 셀 수 있습니다.sort는 텍스트 줄을 특정 순서로 정렬합니다.uniq는 정렬된 텍스트에서 중복을 제거하고 발생 횟수를 셀 수 있습니다.이 도구들은 리눅스 텍스트 처리의 기초입니다. 리눅스를 계속 학습하면서 복잡한 텍스트 처리 작업을 해결하기 위해 이 명령들을 조합하는 수많은 방법을 발견하게 될 것입니다. 두려워하지 말고 새로운 조합을 시도해 보세요!
연습만이 살길입니다. 이해를 넓히기 위해 다양한 파일과 옵션으로 이 명령들을 사용해 보세요. 명령의 작동 방식이 기억나지 않을 때는 언제든지 man 명령 (예: man grep) 을 사용하여 매뉴얼 페이지를 확인할 수 있습니다.
계속해서 즐겁게 리눅스를 탐구해 보세요!