소개
리눅스 명령어 실행 및 텍스트 처리에 관한 실습에 오신 것을 환영합니다! 리눅스가 처음이더라도 걱정하지 마세요. 각 단계를 차근차근 안내해 드립니다. 이번 실습에서는 여러 명령어를 효율적으로 실행하는 방법과 강력한 텍스트 처리 도구들을 사용하는 방법을 살펴봅니다. 실습을 마칠 때쯤이면 명령어를 조합하고, 텍스트를 검색하며, 전문가처럼 데이터를 다룰 수 있게 될 것입니다!
명령어 순차 실행
리눅스에서는 한 줄에 여러 명령어를 순서대로 실행할 수 있습니다. 이는 일련의 관련 작업을 수행하고자 할 때 매우 유용합니다.
간단한 예제부터 시작해 보겠습니다. 현재 날짜를 표시한 다음 홈 디렉토리의 내용을 나열해 보겠습니다.
date && ls ~
이 명령어의 의미는 다음과 같습니다:
date: 현재 날짜와 시간을 표시합니다.&&: "그리고(and)"를 의미합니다. 리눅스에게 첫 번째 명령어가 성공했을 때만 다음 명령어를 실행하라고 지시합니다.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 아트 소가 출력될 것입니다.
이 예제는 &&와 ||를 사용하여 조건부 명령어 시퀀스를 만드는 방법을 보여줍니다. &&는 "이전 명령어가 성공하면 실행"을 의미하고, ||는 "이전 명령어가 실패하면 실행"을 의미합니다.
무슨 일이 일어났는지 분석해 봅시다:
설치 전:
cowsay가 설치되지 않았기 때문에which cowsay가 실패했습니다.&&의 왼쪽이 실패했으므로cowsay "Hello, LabEx"는 실행되지 않았습니다.- 실패한
which cowsay && cowsay "Hello, LabEx"표현식이||를 트리거하여echo "cowsay is not installed"가 실행되었습니다.
설치 후:
which cowsay가 성공했으므로cowsay "Hello, LabEx"가 실행되었습니다.||이후의 echo 명령어는 실행할 필요가 없었습니다.
이 연산자들을 사용하여 자신만의 조건부 명령어 시퀀스를 만들어 보세요!
파이프라인 소개
파이프라인은 한 명령어의 출력을 다른 명령어의 입력으로 연결할 수 있게 해주는 리눅스의 강력한 기능입니다. 이는 | (파이프) 기호를 사용하여 수행됩니다.
간단한 예제부터 시작해 보겠습니다.
ls -l /etc | less
이 명령어의 의미는 다음과 같습니다:
ls -l /etc:/etc디렉토리의 내용을 긴 형식으로 나열합니다.|: 이전 명령어의 출력을 다음 명령어로 보냅니다.less: 텍스트를 스크롤하며 볼 수 있게 해주는 프로그램입니다.
이 명령어를 실행하면 파일과 디렉토리 목록이 나타납니다. 위/아래 화살표 키를 사용하여 스크롤할 수 있으며, 'q'를 눌러 종료할 수 있습니다.
이제 조금 더 복잡한 파이프라인을 시도해 보겠습니다.
ls -l /etc | grep '^d' | wc -l
이 명령어는 /etc에 있는 디렉토리의 개수를 셉니다. 작동 방식은 다음과 같습니다:
ls -l /etc:/etc의 내용을 긴 형식으로 나열합니다.grep '^d': 'd'로 시작하는 줄(디렉토리를 나타냄)을 필터링합니다.wc -l: 줄 수를 셉니다(이제 디렉토리의 개수가 됩니다).
/etc에 있는 디렉토리 개수인 숫자가 출력되는 것을 확인할 수 있습니다.
cut을 사용하여 필드 추출하기
cut 명령어는 파일의 각 줄에서 특정 부분을 추출하는 데 유용합니다. 시스템의 사용자 계정 정보를 담고 있는 /etc/passwd 파일에서 사용자 이름과 홈 디렉토리를 추출하는 데 사용해 보겠습니다.
다음 명령어를 실행하세요:
cut -d: -f1,6 /etc/passwd | head -n 5
분석해 보겠습니다:
cut: 줄의 일부분을 추출하는 명령어입니다.-d:::를 구분 기호(필드를 구분하는 문자)로 사용합니다.-f1,6: 1번째와 6번째 필드(사용자 이름과 홈 디렉토리)를 추출합니다.|: 출력을 다음 명령어로 파이프합니다.head -n 5: 출력의 처음 5줄만 보여줍니다.
다음과 유사한 출력이 나타날 것입니다:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
각 줄은 콜론으로 구분된 사용자 이름과 홈 디렉토리를 보여줍니다.
grep과 파이프라인 및 명령어 시퀀스 결합
이번 단계에서는 더 고급 텍스트 처리를 위해 grep을 파이프라인 및 명령어 시퀀스와 결합하는 방법을 알아봅니다.
먼저 .zshrc 파일에서 "PATH"가 포함된 모든 줄을 검색하고 개수를 세어 보겠습니다.
grep "PATH" ~/.zshrc | wc -l
이 파이프라인은 먼저 grep을 사용하여 "PATH"가 포함된 줄을 찾은 다음, 그 출력을 wc -l로 파이프하여 줄 수를 셉니다.
이제 명령어 시퀀스를 사용하여 "PATH"가 존재하는지 확인하고, 첫 번째 확인이 성공한 경우에만 "HOME"이 포함된 줄을 표시해 보겠습니다.
grep -q "PATH" ~/.zshrc && grep "HOME" ~/.zshrc
-q 옵션은 첫 번째 grep을 조용히(quiet) 실행하게 하여, "PATH" 줄을 출력하지 않고 일치 항목만 확인합니다. 첫 번째 명령어가 성공하면 두 번째 grep이 "HOME"이 포함된 줄을 출력합니다.
조금 더 복잡한 예제를 시도해 보겠습니다. /etc/passwd에서 "bin"이 포함된 줄을 검색하고, 정렬한 뒤, 처음 5줄만 표시합니다.
grep "bin" /etc/passwd | sort | head -n 5
이 파이프라인은 세 가지 작업을 수행합니다:
- "bin"이 포함된 줄을 찾습니다.
- 이 줄들을 알파벳순으로 정렬합니다.
- 결과의 처음 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."
}
이 복잡한 명령어는 다음을 수행합니다:
- "sh"가 포함된 줄을 검색합니다.
- 이 줄들의 개수를 셉니다.
- 개수가 5보다 크면 줄을 표시합니다.
- 개수가 5 이하이면 개수와 함께 메시지를 보여줍니다.
참고: 터미널에서 여러 줄 명령어를 입력할 때, 줄을 나누려면 각 줄(마지막 줄 제외) 뒤에 Alt+Enter를 누르거나, 단순히 전체 명령어를 한 줄로 입력할 수 있습니다.
이 명령어들을 실행해 보고 자신만의 조합을 실험해 보세요!
wc로 개수 세기
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로 정렬하기
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로 중복 제거하기
uniq 명령어는 정렬된 텍스트에서 중복된 줄을 제거하거나 식별하는 데 사용됩니다. 이를 사용하여 /etc/passwd에서 고유한 셸 유형을 찾아보겠습니다.
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)를 사용하여 매뉴얼 페이지를 확인할 수 있습니다.
계속 탐구하며 즐거운 리눅스 학습 되시길 바랍니다!



