$
XP:0
L

게스트.

레벨 1 유저

XP 진행률0 / 300
완료0 / 83
획득한 배지0

가입 필요 없음. 진행 상황은 로컬에 자동 저장됩니다. 세이브 코드를 내보내 다른 기기에서 이어하세요.

획득한 배지 목록

온라인 리눅스 터미널 실습 — 직접 해보며 배우기

무료 배시 학습 게임과 인터랙티브 파일시스템 시뮬레이션을 통해 필수 리눅스 명령어와 명확한 터미널 목표를 마스터하세요.

Online Linux Terminal60개 이상의 퀘스트 및 목표무료 온라인 터미널 실습인터랙티브 배시 학습 게임

인터랙티브 학습 경로 및 터미널 목표

체계적인 터미널 학습 목표가 포함된 완전한 리눅스 학습 경로입니다. 잠금 해제된 챌린지를 클릭하여 터미널 워크스페이스를 여세요.

1. 파일 시스템 기초

퀘스트 1잠김

수백만 권의 책이 있는 거대하고 어두운 도서관에 들어갔는데 지도도 없고 자신의 이름표도 기억할 수 없다고 상상해 보세요. 무엇이든 찾아보기 전에 자신이 누구인지, 어디에 서 있는지 알아야 합니다. Linux 셸에서는 똑같은 질문으로 시작합니다! - `whoami` 명령은 현재 로그인된 사용자 이름을 인쇄합니다. - `pwd`(작업 디렉터리 인쇄) 명령은 GPS처럼 작동하여 현재 서있는 정확한 폴더 경로를 보여줍니다.

+100 XP시작
퀘스트 2잠김

이제 자신이 어디에 있는지 알았으니 이 디지털 도서관의 다른 방을 어떻게 둘러보고 이동합니까? Linux에서는 두 가지 간단한 명령을 사용하여 이를 수행합니다. - `ls`: 방 안에 있는 모든 파일과 폴더를 보기 위해 방의 불을 켜는 것과 같습니다. - `cd <path>`: "디렉토리 변경"의 줄임말로, 문을 통해 다른 폴더로 이동할 수 있습니다. 이동하려는 위치를 지정하려면 **절대** 경로(`/var/log`과 같이 시스템의 루트 `/`에서 시작) 또는 **상대** 경로(예: `..`를 사용하여 상위 폴더로 돌아가는 것과 같이 현재 위치에 따라)를 사용할 수 있습니다.

+120 XP시작
퀘스트 3잠김

모든 Linux 시스템은 루트 디렉터리 `/`에서 시작하는 표준 파일 시스템 계층 구조를 따릅니다. `C:` 또는 `D:`와 같은 드라이브 문자를 사용하는 Windows와 달리 Linux는 모든 파일과 저장소를 `/` 아래에 통합합니다. 모든 Linux 사용자가 알아야 할 주요 시스템 디렉터리는 다음과 같습니다. - `/`(루트): 전체 시스템의 최상위 상위 폴더입니다. - `/etc`: 시스템 구성을 보유합니다(예: `/etc/hosts`, `/etc/passwd`). - `/var`: 시간이 지남에 따라 변경되는 변수 데이터(로그, 스풀, `/var/log`과 같은 캐시)를 보유합니다. - `/home`: 사용자 개인 폴더(예: `/home/learner`). - `/tmp`: 임시 파일을 위한 임시 저장 영역입니다. - `/usr`: 사용자 유틸리티, 애플리케이션 및 시스템 라이브러리.

+130 XP시작
퀘스트 4잠김

책상에 서류가 잔뜩 쌓여 있고, 물건을 깔끔하게 유지하려면 물리적인 폴더가 필요하다고 상상해 보세요. Linux에서는 `mkdir`(디렉토리 만들기) 명령을 사용하여 폴더(디렉토리)를 생성하여 파일을 구성합니다. `mkdir code`을 실행하면 현재 있는 위치에 "code"라는 이름의 새로운 폴더가 생성됩니다. `mkdir`에 상대 경로 또는 절대 경로를 제공하여 파일 시스템의 어느 위치에나 폴더를 만들 수 있습니다.

+150 XP시작
퀘스트 5잠김

중첩된 인형 세트를 만들려고 하는데 내부에 작은 인형을 만들기 전에 가장 바깥쪽에 있는 인형을 만들어야 한다고 상상해 보세요. 기본적으로 `mkdir`은 이와 같습니다. 아직 존재하지 않는 폴더 내부에 폴더 생성을 거부합니다. 폴더를 하나씩 생성하는 번거로움을 건너뛰기 위해 스위치를 사용합니다. - `-p`(또는 `--parents`) 옵션은 `mkdir`에 최종 폴더로 가는 도중에 누락된 상위 폴더를 자동으로 빌드하도록 지시합니다. 예를 들어 `mkdir -p workspace/src/utils`는 단일 명령으로 `workspace`, `workspace/src` 및 `workspace/src/utils`을 모두 생성합니다. **중요한 이유**: `-p` 없이 `mkdir workspace/src/utils`을 실행하고 `workspace` 및 `workspace/src`이 아직 존재하지 않는 경우 `mkdir: cannot create directory 'workspace/src/utils': No such file or directory`이 표시됩니다. `-p` 플래그는 누락된 모든 상위 폴더를 자동으로 생성하여 이 문제를 해결합니다.

+160 XP시작
퀘스트 6잠김

책상이 지저분한 메모와 종이로 덮여 있을 때 당황한 적이 있습니까? 터미널도 복잡해질 수 있습니다. 그렇다면 이전 텍스트를 모두 제거하고 새로 시작할 수 있습니다. - `clear` 명령은 보이는 화면을 깨끗하게 닦아서 이전 출력을 보기 밖으로 밀어내어 터미널 상단에 새로운 빈 캔버스를 갖게 합니다.

+100 XP시작
퀘스트 7잠김

새 보드 게임을 구입할 때 일반적으로 어떤 동작이 허용되는지 확인하기 위해 룰북이나 참조 카드를 살펴봅니다. 터미널 에뮬레이터에는 치트 시트가 내장되어 있습니다! - `help` 명령은 이 시뮬레이터가 지원하는 모든 단일 명령과 출력 파이핑 또는 리디렉션 지원 여부에 대한 세부 정보를 나열합니다.

+100 XP시작

2. 파일 조작 및 관리

퀘스트 8잠김

새 일지를 작성하고 싶지만 먼저 빈 종이가 필요하다고 상상해 보세요. Linux에서는 `touch` 명령을 사용하여 새로운 빈 텍스트 파일을 가져옵니다. - `touch` 명령은 아직 존재하지 않는 경우 새로운 빈 파일을 생성합니다(예: `draft.txt`을 생성하기 위해 `touch draft.txt` 실행). 파일이 이미 존재하는 경우 내용을 변경하지 않고 파일의 "마지막 수정" 타임스탬프만 업데이트합니다. 새 프로젝트 폴더에 파일을 넣어 보겠습니다.

+150 XP시작
퀘스트 9잠김

폴더를 열고 텍스트 페이지를 꺼내서 읽는 것을 생각해 보세요. Linux에서는 `cat`(연결) 명령을 사용하여 무거운 텍스트 편집기를 열지 않고도 즉시 파일을 읽을 수 있습니다. - `cat` 명령은 파일의 전체 내용을 터미널 화면에 직접 인쇄합니다. 예를 들어 `cat notes.txt`을 실행하면 `notes.txt` 안에 무엇이 쓰여 있는지 바로 확인할 수 있습니다.

+150 XP시작
퀘스트 10잠김

이제 `cat`을 사용하여 전체 파일을 읽을 수 있습니다. 파일에 수천 줄이 있고 위쪽이나 아래쪽만 보려면 어떻게 해야 합니까? `cat`을 사용하여 대용량 파일을 덤프하면 화면이 가득 찼습니다. 대신 `head` 및 `tail`을 사용하여 가장자리를 엿봅니다. - `head` 명령은 기본적으로 파일의 처음 10줄을 표시합니다. `-n <number>`를 사용하여 이를 변경할 수 있습니다(예: 처음 5줄의 경우 `head -n 5 log.txt`). - `tail` 명령은 기본적으로 마지막 10줄을 표시하며 동일한 `-n` 옵션을 지원합니다. - 결정적으로 `tail -f`(follow)는 파일을 실시간으로 모니터링하여 시스템에서 작성된 새 줄을 표시합니다. 이것은 실시간 로그를 보기 위해 시스템 관리자가 가장 좋아하는 도구입니다.

+180 XP시작
퀘스트 11잠김

`head` 및 `tail`을 사용하여 파일의 상단과 하단을 엿보는 것은 훌륭하지만 긴 구성 파일을 페이지별로 검색해야 하는 경우에는 어떻게 합니까? 이것이 `less` 및 `more`과 같은 호출기의 용도입니다. - 호출기는 파일을 대화형으로 로드하여 한 번에 한 페이지의 텍스트를 표시하여 대용량 파일의 시스템 속도 저하를 방지합니다. - `less`는 화살표 키를 사용하여 앞뒤로 스크롤하고, `/`로 텍스트를 검색하고, `q`을 눌러 종료할 수 있는 현대적인 선택입니다. - `more`은 앞으로만 스크롤하는 더 오래되고 간단한 호출기입니다.

+150 XP시작
퀘스트 12잠김

로봇에게 "내 침실을 파란색으로 칠해"라고 지시하는 경우 "내 침실"이 단일 장소인지 아니면 "내"와 "침실"이 두 개의 다른 명령인지 알아야 합니다. Linux는 공백을 사용하여 명령과 인수를 구분합니다. 따라서 `mkdir my folder`을 실행하면 Linux는 두 개의 별도 폴더를 생성하려고 한다고 생각합니다. 하나는 "my"라는 이름이고 다른 하나는 "folder"라는 이름입니다! - 공백이 포함된 이름이 단일 항목임을 Linux에 알리려면 이름을 따옴표(`"my folder"` 또는 `'my folder'`)로 묶거나 백슬래시를 사용하여 공백을 이스케이프해야 합니다(`my\ folder`).

+170 XP시작
퀘스트 13잠김

칠판에 메시지를 쓰려면 먼저 칠판을 완전히 깨끗이 닦은 다음 새 단어를 쓰세요. Linux에서는 `>`(출력 리디렉션) 연산자를 사용하여 파일에 메시지를 씁니다. - `echo "message"` 명령은 일반적으로 텍스트를 화면에 인쇄합니다. - `>` 기호를 추가하면 해당 텍스트가 파일로 대신 리디렉션됩니다. 예를 들어 `echo "Hi" > greeting.txt`은 `greeting.txt`에 "Hi"를 씁니다. 파일에 이미 텍스트가 있으면 `>`는 해당 텍스트를 새 메시지로 완전히 덮어씁니다.

+200 XP시작
퀘스트 14잠김

칠판을 정리하는 대신 하단에 새 줄을 추가하고 싶다면 어떻게 해야 할까요? Linux에서는 `>>`(리디렉션 추가) 연산자를 사용하여 기존 콘텐츠를 건드리지 않고 파일 끝에 텍스트를 추가합니다. - `>>` 연산자는 파일 맨 아래에 새 텍스트를 추가합니다. 예를 들어 `echo "New Line" >> logs.txt`는 모든 이전 로그를 안전하게 유지하면서 `logs.txt` 끝에 "새 줄"을 추가합니다.

+200 XP시작
퀘스트 15잠김

방을 재구성한다고 상상해 보십시오. 때로는 문서의 복사본을 만들어 다른 서랍에 보관하고 싶고, 때로는 폴더를 가져와 새 선반에 밀어 넣거나 레이블을 변경하고 싶을 때도 있습니다. Linux에서는 간단한 명령을 사용하여 이 작업을 수행합니다. - `cp <source> <destination>`은(는) 새 위치에 파일의 동일한 복사본을 생성합니다. - `mv <source> <destination>`은 파일을 새 폴더로 이동하거나 파일을 동일한 폴더에 보관하는 경우 파일 이름을 바꿉니다(예: `mv old.txt new.txt`).

+200 XP시작
퀘스트 16잠김

"log_monday", "log_tuesday" 및 "log_wednesday"라는 레이블이 붙은 폴더 스택이 있고 모든 이름을 입력하지 않고 한 번에 모든 폴더를 열고 읽고 싶다고 가정해 보세요. Linux에서는 **와일드카드**를 검색 단축키로 사용할 수 있습니다! - `*` 기호는 모든 길이의 모든 문자와 일치합니다. 예를 들어 `cat log_*`은 "log_"로 시작하는 모든 파일을 읽습니다. - `?` 기호는 단일 문자 자리 표시자 역할을 합니다. 예를 들어 `log_?.txt`은 `log_1.txt`와 일치하지만 `log_12.txt`은 무시됩니다.

+220 XP시작
퀘스트 17잠김

실제 책상을 정리할 때 실수를 했을 경우 재활용할 수 있는 오래된 종이를 재활용 쓰레기통에 버릴 수도 있습니다. Linux에는 안전망이 없습니다. 터미널에서 무언가를 삭제하면 영원히 사라지게 됩니다! - `rm` 명령은 파일을 삭제합니다. - 폴더에는 다른 파일이 포함될 수 있으므로 `rm`은 기본적으로 폴더를 삭제하지 않습니다. `-r`(재귀) 플래그를 추가하여 Linux에게 폴더에 있는 모든 항목과 함께 폴더를 삭제하도록 지시해야 합니다. **이것이 중요한 이유**: `downloads`가 폴더일 때 `-r` 없이 `rm downloads`을 실행하면 `rm: cannot remove 'downloads': Is a directory`이 표시됩니다. `-r` 플래그는 Linux에 폴더와 그 안에 있는 모든 항목을 반복적으로 삭제하도록 지시합니다.

+200 XP시작

3. 파이프와 필터링

퀘스트 18잠김

한 작업자가 제품을 포장한 후 즉시 다음 작업자에게 전달하여 상자에 포장하는 조립 라인을 상상해 보십시오. 중간 저장 공간이 필요하지 않습니다. Linux에서는 **파이프**(`|`)를 사용하여 이와 똑같은 명령을 연결합니다. - 파이프(`|`)는 한 명령의 출력을 다음 명령의 입력으로 직접 라우팅합니다. 예를 들어, `ls | wc -l`는 파일을 나열하고 해당 목록을 즉시 `wc -l`(단어 수 - 줄)로 전달하여 임시 파일 없이도 즉시 파일 수를 계산합니다. **중요한 이유**: `-l` 없이 `wc`을 실행하면 줄, 단어, 바이트(예: ` 5 10 85`)라는 세 가지 별도의 숫자가 출력됩니다. 이로 인해 깔끔한 단일 숫자 개수가 필요한 파이프라인이나 스크립트에서 사용하기가 어렵습니다. `-l` 플래그는 출력을 줄 수로만 제한합니다.

+230 XP시작
퀘스트 19잠김

중복 항목이 여기저기 흩어져 있는 카드 덱을 정렬한다고 상상해 보세요. 중복 항목을 쉽게 찾아 제거하려면 먼저 동일한 카드를 그룹화하세요. Linux에서 `uniq` 명령은 반복되는 줄을 필터링하지만 문제가 있습니다. **서로 바로 옆에 있는 중복 항목만 감지**합니다! - 지저분한 목록에서 모든 중복 항목을 제거하려면 먼저 `sort`을 사용하여 줄을 정렬한 다음 결과를 `uniq`에 전달해야 합니다. 예를 들어 `sort raw.txt | uniq`은 목록을 한 번에 정리하고 정리합니다.

+240 XP시작
퀘스트 20잠김

을 사용한 필터링 시스템 오류가 발생할 때마다 찾기 위해 수천 페이지에 달하는 방대한 로그북을 검색한다고 상상해 보십시오. 이 작업을 수동으로 수행하려면 몇 시간이 걸릴 것입니다! Linux에서는 `grep`을 디지털 돋보기로 사용하여 특정 단어나 패턴을 즉시 검색합니다. - `grep` 명령은 파일이나 파이프로 연결된 텍스트를 필터링하여 검색어와 일치하는 줄만 인쇄합니다. 예를 들어 `grep "ERROR" logs.txt`를 실행하면 파일을 검사하고 "ERROR"가 포함된 줄만 추출합니다.

+240 XP시작

4. 리다이렉션과 보안

퀘스트 21잠김

관리자만 수표에 서명할 수 있고 직원은 일정을 읽을 수 있으며 방문자는 상점 간판만 볼 수 있는 사업체를 운영한다고 상상해 보십시오. Linux에서는 숫자 보안 시스템(8진 표현이라고 함)을 사용하여 파일을 읽고, 쓰고, 실행할 수 있는 사람을 제어합니다. - `7` = 전체 액세스: 읽기 + 쓰기 + 실행(`rwx`) - `6` = 수정 액세스: 읽기 + 쓰기(`rw-`) - `5` = 읽기 및 실행 액세스: 읽기 + 실행(`r-x`) - `4` = 읽기 전용 액세스: 읽기(`r--`) `chmod <octal> <file>`을 사용하여 이러한 설정을 적용합니다. 예를 들어 `chmod 755 script.sh`을 사용하면 스크립트를 실행할 수 있지만 다른 사용자는 스크립트를 읽고 실행할 수만 있습니다. 현재 잠겨 있는 `deploy.sh`이라는 스크립트가 있습니다. 실행 가능하게 만들어 보겠습니다!

+250 XP시작
퀘스트 22잠김

기본 작업 공간을 어지럽히지 않도록 시스템 설정을 보관하는 책상 아래 비밀 서랍을 생각해 보세요. Linux에서는 이름을 점(`.`)으로 시작하여 숨김 파일을 만듭니다. - 이러한 도트 파일(예: `.bashrc` 또는 `.config`)은 사용자 기본 설정 및 구성 설정을 배후에 저장합니다. - 표준 `ls` 명령으로는 표시되지 않습니다. 이러한 숨겨진 파일을 보려면 `ls -a`를 실행하여 `-a`(모두) 플래그를 추가해야 합니다. **중요한 이유**: `-a` 없이 `ls`을 실행하면 숨겨진 파일(이름이 `.`로 시작하는 파일)이 출력에서 ​​완전히 생략됩니다. `.config_names`과 같은 중요한 파일이 표시되지 않으며 해당 파일이 누락되었다고 생각할 수도 있습니다. `-a` 플래그는 `ls`에 숨겨진 파일을 포함하여 모든 파일을 나열하도록 지시합니다.

+220 XP시작
퀘스트 23잠김

집을 구입하고 새 소유자 이름으로 증서를 공식적으로 등록해야 한다고 상상해 보십시오. Linux에서는 모든 파일과 폴더에 공식 소유자와 그룹이 있습니다. 파일의 소유권을 다른 사람(예: 시스템 관리자)에게 넘겨야 하는 경우 `chown`(소유자 변경) 명령을 사용합니다. - 파일 소유자를 변경하는 것은 민감한 보안 작업이므로 관리자 권한으로 실행하려면 앞에 `sudo`을 붙여야 합니다. 예를 들어, `sudo chown root reports.csv`는 파일을 "root" 사용자에게 할당합니다.

+250 XP시작
퀘스트 24잠김

경비원이 입구에 서서 ID를 확인하고 무단 방문자를 차단하는 안전한 아파트 건물에 살고 있다고 상상해 보십시오. Linux에서는 **방화벽**이 네트워크 포트에 대한 보안 가드 역할을 합니다. - `ufw`(복잡하지 않은 방화벽) 명령은 방화벽 규칙을 관리하기 위한 사용자 친화적인 인터페이스입니다. `sudo ufw status`을 실행하면 방화벽이 활성화되었는지 여부와 어떤 포트(예: SSH의 경우 포트 22, 웹 서버의 경우 포트 80)가 열려 있는지 표시됩니다. - `iptables` 명령은 실제로 패킷을 차단하거나 리디렉션하는 낮은 수준의 기존 Netfilter 도구입니다. `sudo iptables -L`을 실행하면 활성 보안 체인과 패킷 일치 규칙이 나열됩니다.

+200 XP시작

5. 슈퍼유저와 패키지 관리

퀘스트 25잠김

중요한 운영 체제 파일을 실수로 삭제하는 것을 방지하기 위해 표준 계정으로 컴퓨터에서 작업한다고 상상해 보십시오. 소프트웨어를 설치하거나 시스템 설정을 수정해야 하는 경우 컴퓨터에서 관리자 권한을 요청합니다. Linux에서는 `sudo`("superuser do"의 약어)를 관리 키 카드로 사용합니다. - `root` 사용자는 시스템에 대한 모든 권한을 가진 마스터 관리자 계정입니다. - 표준 사용자는 민감한 파일(예: 비밀번호 데이터베이스 `/etc/shadow`)을 읽지 못하도록 차단됩니다. 명령 앞에 `sudo`을 입력하면 임시 관리자 권한으로 명령을 실행하여 이러한 블록을 우회할 수 있습니다.

+260 XP시작
퀘스트 26잠김

App Store나 Google Play Store를 사용하여 스마트폰에 앱을 설치한다고 생각해 보세요. 안전하고 선별되었으며 자동화되어 있습니다. Linux에서는 패키지 관리자라는 명령줄 앱 스토어를 사용하여 소프트웨어를 안전하게 가져오고 설치합니다. - Ubuntu/Debian 시스템에서 표준 패키지 관리자는 `apt`(고급 패키징 도구)입니다. - 소프트웨어를 설치하면 시스템 전체 폴더가 변경되므로 항상 `sudo`을 사용하여 승인해야 합니다. 예를 들어 `sudo apt install tree`는 디렉터리 시각화 도우미 "tree"를 다운로드하고 설치합니다.

+280 XP시작
퀘스트 27잠김

Linux에 소프트웨어를 설치하기 전에 저장소에서 어떤 패키지를 사용할 수 있는지 어떻게 알 수 있습니까? Linux에서는 `apt search`을 사용하여 키워드로 소프트웨어 카탈로그를 쿼리합니다. - `apt search <keyword>` 명령은 저장소 설명을 검색하고 해당 버전과 함께 일치하는 소프트웨어 패키지를 나열합니다. - `apt install`와 달리 패키지 저장소 검색은 로컬 카탈로그 인덱스 파일만 읽으며 수퍼유저(`sudo`) 권한이 필요하지 **않습니다**.

+180 XP시작
퀘스트 28잠김

Linux에서 소프트웨어를 제거할 때 표준 `apt remove`은 응용 프로그램 바이너리를 제거하지만 나중에 다시 설치할 경우를 대비해 시스템 구성 파일을 남겨 둡니다. 소프트웨어 패키지를 완전히 제거하고 관련된 모든 구성 파일을 지우려면 `apt purge`(또는 `apt remove --purge`)을 사용합니다. - `sudo apt purge <package>` 명령은 애플리케이션을 제거하고 나머지 구성 파일을 모두 지웁니다. - 제거는 시스템 전체 폴더 및 구성 파일을 수정하므로 수퍼유저(`sudo`) 권한이 필요합니다.

+180 XP시작
퀘스트 29잠김

`apt`이 리포지토리에서 패키지 종속성을 자동으로 다운로드하고 해결하는 동안 `.deb` 패키지 파일을 이미 수동으로 다운로드하여 검사하거나 설치하고 싶다면 어떻게 해야 합니까? Linux에서는 `dpkg`(Debian 패키지)를 사용하여 패키지와 직접 상호 작용합니다. - `dpkg -l` 명령은 현재 Debian/Ubuntu 시스템에 설치된 모든 패키지를 나열합니다. - `dpkg -s <package>` 명령은 특정 패키지에 대한 상태, 버전 및 아키텍처 정보를 표시합니다.

+160 XP시작
퀘스트 30잠김

모든 Linux 환경이 Debian/Ubuntu를 기반으로 하는 것은 아닙니다. RedHat, Fedora 또는 CentOS 시스템에서 작업하는 경우 `apt` 또는 `dpkg`을 찾을 수 없습니다. 대신 이전 `yum` 또는 최신 `dnf`(Dandified YUM) 패키지 관리자를 사용하여 패키지를 관리하게 됩니다. - `dnf check-update`(또는 `yum check-update`) 명령은 RedHat 리포지토리에 연결하여 사용 가능한 패키지 업데이트를 검색합니다. - `dnf install <package>` 명령은 `apt install`과 유사한 프로그램을 가져와 설치합니다.

+160 XP시작

6. 디스크와 시스템 리소스

퀘스트 31잠김

거대한 비디오 게임을 다운로드하려고 하는데 "저장 공간이 가득 참" 오류가 발생하지만 병목 현상이 발생하는 디스크 드라이브가 무엇인지 확신할 수 없다고 상상해 보십시오. Linux에서는 `df`(디스크 없음) 명령을 사용하여 시스템의 저장 용량을 확인합니다. - `df` 명령은 연결된 모든 드라이브의 전체 공간, 사용된 공간, 사용 가능한 공간을 표시합니다. - `df -h`를 실행하면("사람이 읽을 수 있음"을 위해 `-h` 플래그 추가) 혼란스러운 블록 수 대신 친숙한 기가바이트(G) 및 메가바이트(M)로 저장 공간이 표시되므로 어떤 드라이브(예: `/` 또는 `/home`)가 가득 찼는지 쉽게 확인할 수 있습니다. **중요한 이유**: `-h` 없이 `df`을 실행하면 크기가 원시 1K 블록 숫자로 표시됩니다(예: `47G` 대신 `49258284`). 이는 사람이 읽고 계산하기가 매우 어렵습니다. `-h` 플래그는 이러한 크기를 인간에게 친숙한 기가바이트(G) 및 메가바이트(M)로 형식화합니다.

+150 XP시작
퀘스트 32잠김

*어느* 드라이브가 꽉 찼는지 알고 나면 모든 공간을 차지하고 있는 특정 폴더를 어떻게 찾을 수 있습니까? 다운로드 폴더인가요, 아니면 숨겨진 캐시인가요? 우리는 `du`(디스크 사용량) 명령을 사용하여 이 미스터리를 해결합니다. - `du <directory>`은 폴더와 그 안에 있는 모든 하위 폴더의 크기를 나열합니다. - `du -sh <directory>`(여기서 `-s`은 "요약"을 의미하고 `-h`는 "사람이 읽을 수 있음"을 의미)는 해당 특정 폴더에 대해 단일하고 명확한 총 크기를 계산하고 인쇄합니다. **중요한 이유**: `-s` 없이 `du`을 실행하면 단일 요약을 제공하는 대신 모든 개별 하위 디렉터리와 파일을 반복적으로 나열하는 거대한 텍스트 벽을 덤프하게 됩니다. `-s` 플래그는 폴더의 전체 크기를 요약하고 `-h`은 이를 사람이 읽을 수 있도록 만듭니다.

+150 XP시작
퀘스트 33잠김

노트북이 지연되기 시작하고, 웹 페이지가 정지되고, 앱 전환이 고통스러울 정도로 느리게 느껴진다고 상상해 보세요. 이는 일반적으로 컴퓨터에 활성 메모리(RAM)가 부족함을 의미합니다. Linux에서는 `free` 명령을 사용하여 시스템에 숨쉴 공간이 얼마나 있는지 확인할 수 있습니다. - `free` 명령은 총 메모리, 사용된 메모리, 사용 가능한 물리적 메모리(RAM) 및 스왑 공간을 표시합니다. - `-h` 플래그(`free -h` 실행)를 추가하면 메모리 크기가 읽기 쉬운 기가바이트(GB) 및 메가바이트(MB)로 형식화되므로 프로그램이 모든 리소스를 소모하는지 알 수 있습니다. **중요한 이유**: `-h` 없이 `free`을 실행하면 메모리 사용량이 원시 킬로바이트(예: `16G` 대신 `16323456`)로 인쇄되므로 빠르게 해석하기 어렵습니다. `-h` 플래그는 쉽게 읽을 수 있도록 숫자를 기가바이트(G) 또는 메가바이트(M)로 자동 조정합니다.

+150 XP시작
퀘스트 34잠김

오작동을 시작한 서버의 문제를 해결하고 최근에 재부팅했는지 확인해야 하거나 내부에서 실행 중인 운영 체제 버전을 정확히 확인한다고 상상해 보세요. 몇 초 안에 이러한 시스템 세부 정보를 쿼리할 수 있습니다. - `uptime` 명령은 머신이 마지막 부팅 이후 얼마나 오랫동안 실행되었는지, 그리고 얼마나 바쁜지(시스템 로드)를 정확하게 알려줍니다. - `uname -a`(유닉스 이름) 명령은 시스템 커널, 플랫폼 이름 및 기계 아키텍처에 대한 전체 보고서를 인쇄합니다. **중요한 이유**: `-a` 없이 `uname`을 실행하면 기본 운영 체제 이름(예: `Linux`)만 출력됩니다. 커널 버전, 플랫폼 이름, 프로세서 아키텍처와 같은 중요한 세부 정보는 생략됩니다. `-a` 플래그는 단일 보고서에 사용 가능한 모든 시스템 세부 정보를 인쇄합니다.

+160 XP시작
퀘스트 35잠김

시스템 성능 문제를 해결하거나 수요가 높은 응용 프로그램을 배포할 때 시스템 CPU의 성능을 알아야 합니다. Linux에서는 `lscpu` 명령을 사용하여 자세한 CPU 아키텍처 정보를 읽습니다. - `lscpu` 명령은 커널 파일 시스템에서 직접 CPU 모델, 공급업체, 클럭 속도, 코어 수, 하이퍼스레딩 세부 정보 및 캐시 크기와 같은 프로세서 세부 정보를 표시합니다.

+150 XP시작
퀘스트 36잠김

데이터베이스 또는 웹 애플리케이션이 느리게 실행되는 경우 문제가 CPU 병목 현상인지 아니면 느린 하드 드라이브인지 어떻게 판단합니까? Linux에서는 `iostat`을 사용하여 시스템 출력/입력 성능 메트릭을 모니터링합니다. - `iostat` 명령은 CPU 사용량 및 활성 장치 읽기/쓰기 처리량에 대한 보고서 통계를 표시하여 디스크 정체를 식별하는 데 도움을 줍니다.

+170 XP시작

7. 프로세스 관리

퀘스트 37잠김

운영 체제를 모든 직원(또는 실행 중인 프로그램)에 프로세스 ID(PID)라는 고유한 이름 태그가 할당되는 분주한 사무실로 생각하십시오. Linux에서는 이러한 활성 프로그램을 **프로세스**라고 부르며 `ps` 명령을 사용하여 나열합니다. - `ps`만 실행하면 현재 터미널 창 내에서 실행 중인 프로그램만 표시됩니다. - `ps aux` 실행은 전체 시스템에서 실행 중인 모든 단일 활성 프로그램, 이를 시작한 사람, 사용 중인 CPU 및 메모리 양을 나열하는 마스터 오피스 레지스트리처럼 작동합니다. **중요한 이유**: `aux` 없이 `ps`을 실행하면 현재 터미널 창에서 실행 중인 프로세스만 표시됩니다(보통 `bash` 및 `ps` 자체). 다른 사용자가 실행하는 백그라운드 서비스, 시스템 프로세스 또는 프로그램은 표시되지 않습니다. `aux` 옵션은 시스템 전체에서 실행 중인 모든 프로세스를 표시합니다.

+180 XP시작
퀘스트 38잠김

고속도로의 정적 사진을 보는 것과 실시간 교통 카메라 피드를 보는 것을 상상해 보십시오. `ps`은 현재 실행 중인 항목에 대한 빠른 스냅샷을 제공하는 반면, `top`을 사용하면 시스템 성능을 실시간으로 볼 수 있습니다. - `top` 명령은 몇 초마다 업데이트되는 대화형 실시간 대시보드를 시작합니다. CPU 사용량, 로드 평균을 표시하고 정확한 순간에 실행 중인 리소스를 가장 많이 사용하는 프로세스의 순위를 동적으로 지정합니다.

+180 XP시작
퀘스트 39잠김

Unix 계열 시스템에서는 "모든 것이 파일입니다." 이는 텍스트 파일과 폴더뿐만 아니라 네트워크 소켓, 시스템 하드웨어 및 프로세스도 파일로 처리된다는 의미입니다. 어떤 실행 프로그램이 어떤 파일에 액세스하고 있는지 확인하려면 `lsof`(열린 파일 나열)을 사용합니다. - `lsof`을 실행하면 열려 있는 모든 파일의 전체 목록과 함께 해당 파일을 열었던 프로세스 ID(PID) 및 명령이 표시됩니다. - 예를 들어 `lsof -i`를 실행하면 모든 네트워크 파일/소켓이 나열됩니다. 이는 어떤 프로세스가 특정 네트워크 포트(예: 포트 80)에서 수신 대기하는지 검색하는 데 매우 유용합니다.

+200 XP시작
퀘스트 40잠김

휴대전화의 앱이 작동을 멈추고 화면이 완전히 잠긴 후 다시 원활하게 실행하려면 앱을 강제로 닫아야 한다고 상상해 보세요. Linux에서는 `kill` 명령 뒤에 프로그램의 프로세스 ID(PID)를 사용하여 프로그램의 오작동이나 정지를 중지합니다. - `kill 1234`을 실행하면 프로그램에 작업을 저장하고 종료하도록 요청하는 정중한 요청이 전송됩니다. - 정지되어 폴라이트 요청을 무시하는 경우 `kill -9 1234`는 운영 체제를 강제로 즉시 종료합니다. 지금 PID `9999`이(가) 모든 CPU를 점유하고 있는 런어웨이 프로세스가 있습니다. 종료하겠습니다!

+200 XP시작
퀘스트 41잠김

대용량 폴더를 USB 드라이브에 복사하려고 하는데 복사하는 동안 동일한 창에서 계속 작업하고 다른 명령을 입력하고 싶다고 상상해 보십시오. Linux에서는 시간이 많이 걸리는 작업을 "백그라운드"에서 실행하여 명령줄이 잠기지 않도록 할 수 있습니다. - 명령 끝에 앰퍼샌드 `&`을 추가하면(예: `sleep 100 &`) 터미널이 해당 명령을 백그라운드에서 실행하고 즉시 프롬프트를 표시합니다. - `jobs` 명령은 현재 백그라운드에서 실행 중인 내용을 보여줍니다. - `fg`(전경) 명령은 백그라운드 작업을 다시 중앙 스테이지로 가져옵니다.

+220 XP시작
퀘스트 42잠김

바쁜 사무실에서는 우선순위가 낮은 일부 작업(예: 영수증 제출)이 기다릴 수 있지만 우선순위가 높은 요청은 즉시 처리해야 합니다. Linux는 -20(가장 높은 우선순위)부터 19(가장 낮은 우선순위)까지의 **niceness** 값을 사용하여 프로세스 우선순위를 관리합니다. - `nice` 명령은 사용자 정의된 우선순위로 프로세스를 시작합니다. 예: `nice -n 10 sleep 5`은 폴라이트 우선순위 10으로 절전 명령을 시작합니다. - `renice` 명령은 이미 실행 중인 프로세스의 예약 우선순위를 변경합니다. 예를 들어 `sudo renice +5 9999`은 프로세스 9999의 우선순위를 낮춥니다.

+180 XP시작
퀘스트 43잠김

우리는 이미 `&`을 사용하여 백그라운드에서 작업을 시작하고 `fg`을 사용하여 다시 가져오는 방법을 살펴보았습니다. 하지만 `&` 없이 명령을 시작했거나 `Ctrl+Z`을 사용하여 일시 중지했다면 어떻게 될까요? `bg`를 사용하여 백그라운드에서 재개할 수 있습니다! - `bg` 명령은 일시 중지된 작업을 재개하여 터미널 프롬프트를 차단하지 않고 백그라운드에서 실행할 수 있도록 합니다.

+170 XP시작

8. 네트워크 문제 해결

퀘스트 44잠김

웹페이지를 로드하려고 하는데 브라우저가 끝없이 회전하여 집 Wi-Fi 연결이 끊어졌는지 또는 웹사이트 자체가 충돌했는지 궁금해 한다고 상상해 보십시오. Linux에서는 `ping` 명령을 사용하여 기본 네트워크 연결을 테스트합니다. - `ping` 명령은 작은 데이터 패킷을 서버(예: `google.com`)로 보내고 응답을 받는 데 걸리는 시간을 측정합니다. - Linux에서는 `ping`이 기본적으로 영원히 계속 실행됩니다. 몇 번의 시도 후에 중지하려면 `ping -c 3 google.com`를 실행하는 `-c`(count) 플래그를 사용합니다. **이것이 중요한 이유**: `-c` 없이 `ping google.com`을 실행하면 계속해서 패킷을 보내고 출력을 무한정 인쇄합니다. 다른 명령을 실행하려면 `Ctrl+C`을 사용하여 수동으로 중단해야 합니다. `-c 3` 플래그는 정확히 3개의 패킷을 보낸 후 자동으로 명령을 중지합니다.

+180 XP시작
퀘스트 45잠김

네트워크 프린터를 설정하거나 동일한 Wi-Fi에서 친구의 컴퓨터와 파일을 공유하고 컴퓨터의 로컬 IP 주소를 알아야 한다고 상상해 보십시오. Linux에서는 `ip` 명령을 사용하여 네트워크 하드웨어와 IP를 검사합니다. - `ip addr`(또는 간단하게 `ip a`)을 실행하면 할당된 로컬 IP 주소와 함께 모든 네트워크 인터페이스 장치(예: 유선 이더넷의 경우 `eth0`, 무선의 경우 `wlan0`) 목록이 인쇄됩니다.

+180 XP시작
퀘스트 46잠김

최신 `ip` 명령 모음이 표준이 되기 전에 Linux 시스템 관리자는 `ifconfig`(인터페이스 구성자)을 사용하여 네트워크 인터페이스를 보고 관리했습니다. - `ifconfig` 명령은 활성 네트워크 인터페이스, 로컬 IP 구성, 넷마스크 세부 정보 및 MAC 하드웨어 주소를 표시합니다. 일부 최신 배포판에서는 더 이상 사용되지 않지만 레거시 서버에서는 여전히 널리 사용됩니다.

+150 XP시작
퀘스트 47잠김

최신 Linux 워크스테이션 및 서버에서 네트워크 인터페이스는 NetworkManager라는 시스템 데몬에 의해 관리됩니다. 구성 파일을 수동으로 편집하는 대신 `nmcli`을 사용하여 네트워크 세부 정보를 구성합니다. - `nmcli`(NetworkManager CLI) 명령을 사용하면 하드웨어 연결, 장치 상태 및 활성 Wi-Fi 네트워크를 검사할 수 있습니다.

+160 XP시작
퀘스트 48잠김

데이터베이스나 웹 서버를 설정할 때 서비스가 올바른 포트에서 실행되고 수신 대기 중인지 확인하고 승인되지 않은 연결이 설정되었는지 확인해야 합니다. `netstat` 또는 `ss`을 사용하여 이를 수행합니다. - `netstat`(네트워크 통계) 명령은 TCP 연결 및 수신 포트를 표시하는 고전적인 도구입니다. 예: `netstat -tuln`은 TCP/UDP 수신 포트를 나열합니다. - `ss`(소켓 통계) 명령은 커널 네임스페이스에서 직접 소켓 연결 세부 정보를 표시하는 `netstat`에 대한 현대적이고 빠른 대안입니다.

+180 XP시작
퀘스트 49잠김

웹 페이지 로드에 실패할 때 홈 라우터, 인터넷 서비스 공급자(ISP) 또는 대상 서버에 문제가 있는지 어떻게 식별합니까? Linux에서는 `traceroute`을 사용하여 패킷을 추적합니다. - `traceroute` 명령은 각 홉에 대한 응답 대기 시간과 함께 패킷이 원격 서버로 이동하는 동안 통과하는 모든 라우터 게이트웨이(홉)를 나열합니다.

+160 XP시작
퀘스트 50잠김

브라우저를 열거나 "다운로드" 버튼을 클릭하지 않고 웹 서버에서 직접 파일을 다운로드하거나 설정 스크립트의 코드를 가져오고 싶다고 상상해 보십시오. Linux에서는 `curl`("클라이언트 URL"의 약자)을 사용하여 웹 데이터를 가져옵니다. - `curl <url>`을 실행하면 페이지 콘텐츠가 다운로드되어 화면에 바로 인쇄됩니다. - 다운로드한 콘텐츠를 표시하는 대신 파일로 저장하려면 `>` 리디렉션 또는 `-o` 출력 플래그와 페어링합니다.

+200 XP시작

9. 파일 및 명령어 검색

퀘스트 51잠김

사용자 폴더 어딘가에 중요한 텍스트 파일이 잘못 배치되어 수십 개의 중첩된 디렉터리를 하나씩 검색해야 한다고 상상해 보세요. Linux에서는 초고속 시스템 전체 검색 엔진인 `find` 유틸리티를 사용하여 수동 파기를 우회합니다. - `find` 명령은 이름, 크기, 유형 또는 날짜를 기준으로 디렉토리 트리를 검색합니다. - 구문은 `find <where> -name "<pattern>"`입니다. 예를 들어 `find . -name "*.txt"`은 현재 디렉터리와 모든 하위 폴더에서 `.txt`로 끝나는 파일을 검색합니다. **이것이 중요한 이유**: `-name` 없이 `find . "*.log"`을 실행하면 `find: paths must precede expression: '*.log'` 오류가 발생합니다. 후속 패턴이 파일 이름과 일치해야 함을 지정하려면 `-name` 플래그가 필요합니다.

+220 XP시작
퀘스트 52잠김

10분 전에 길고 복잡한 네트워크 진단 명령을 입력했는데 이제 다시 실행해야 하는데 정확한 옵션이나 구문을 기억할 수 없다고 가정해 보세요. 머리를 긁거나 다 입력하는 대신 Linux가 이를 기억합니다! - `history` 명령은 최근에 실행한 모든 명령의 번호가 매겨진 목록을 표시합니다. - 느낌표와 목록 번호를 차례로 입력하여 항목을 빠르게 다시 실행할 수 있습니다(예: 명령 #42를 다시 실행하려면 `!42`).

+180 XP시작
퀘스트 53잠김

새 명령을 사용하려고 시도하지만 해당 명령이 지원하는 플래그가 무엇인지, 입력 형식을 어떻게 지정해야 하는지 확신할 수 없다고 상상해 보십시오. 온라인으로 검색하는 대신 Linux에는 공식적이고 포괄적인 사용자 설명서가 터미널에 내장되어 있습니다! - `man`(수동) 명령 뒤에 유틸리티 이름(예: `man ls`)을 입력하면 자세한 참조 가이드가 열립니다. - 가이드 내에서 화살표 키로 스크롤하고 "/"로 검색한 다음 `q`를 눌러 매뉴얼을 닫고 프롬프트로 돌아갑니다.

+200 XP시작

10. 서비스와 Systemd

퀘스트 54잠김

컴퓨터에서 웹 사이트를 호스팅하지만 백그라운드 웹 서버 프로그램이 실행되지 않아 방문자에게 "사이트에 연결할 수 없습니다"라는 오류가 표시된다고 상상해 보세요. Linux에서는 자동으로 시작되어 백그라운드에서 실행되는 백그라운드 프로세스(예: 데이터베이스, 방화벽 또는 웹 서버)를 **서비스**라고 하며 `systemctl`을 사용하여 관리합니다. - `systemctl status <service>` 명령은 서비스가 활성 상태인지 중지되었는지 확인합니다. - 서비스를 시작하거나 중지하면 모든 사용자와 시스템 보안에 영향을 미치므로 `sudo systemctl start <service>` 또는 `sudo systemctl stop <service>`와 같은 명령을 실행하려면 `sudo`을 사용해야 합니다.

+240 XP시작
퀘스트 55잠김

이제 `systemctl`을 사용하여 백그라운드 서비스를 시작하고 중지할 수 있습니다. 서비스가 실패할 경우 어떻게 문제를 해결합니까? `journalctl` 유틸리티를 사용하면 systemd가 관리하는 서비스에서 생성된 시스템 로그를 검사할 수 있습니다. - 기본적으로 `journalctl`는 모든 시스템 로그를 표시합니다. 이는 규모가 클 수 있으므로 집중할 수 있도록 필터링합니다. - `-u <service>` 옵션은 특정 서비스(예: `journalctl -u apache2`)의 메시지만 표시하도록 로그를 필터링합니다. - `-n <number>` 옵션은 가장 최근 항목만 표시합니다(예: 마지막 5개 로그의 경우 `journalctl -n 5`). - `-f`(follow) 플래그는 로그가 기록되는 대로 실시간으로 표시합니다.

+220 XP시작

11. 터미널 텍스트 편집

퀘스트 56잠김

그래픽 데스크탑이나 커서가 없고 구성 파일의 한 줄을 신속하게 수정해야 하는 원격 클라우드 서버에 SSH를 사용한다고 상상해 보십시오. 이러한 시나리오에서는 `nano`과 같은 터미널 텍스트 편집기를 사용해야 합니다. - `nano <filename>`을 실행하면 쉘 창 내부에 직접 간단하고 가벼운 텍스트 편집기가 로드됩니다. - 단축키는 항상 화면 하단에 표시됩니다. 변경 사항을 기록(저장)하려면 `Ctrl+O`를 누르고 편집기를 종료하려면 `Ctrl+X`을 누르세요.

+250 XP시작

12. 셸 스크립트와 자동화

퀘스트 57잠김

매일 아침 실행해야 하는 20개의 작업 목록이 있다고 상상해 보세요. 수동으로 입력하는 것은 지루하고 오타가 발생할 여지가 있습니다. Linux에서는 명령을 쉘 스크립트라는 파일에 묶어서 한꺼번에 실행할 수 있습니다! - 모든 스크립트는 첫 번째 줄에 "shebang"(`#!/bin/bash`)으로 시작하여 파일을 실행하는 데 사용할 쉘 해석기를 시스템에 알려줍니다. - 스크립트를 저장한 후 `chmod 755 script.sh`을 통해 실행 권한을 부여한 다음 `./script.sh`로 실행하여 스크립트를 실행 가능하게 만듭니다.

+250 XP시작
퀘스트 58잠김

웹사이트에 대한 개인화된 환영 메시지를 생성한다고 상상해 보십시오. 모든 고객의 이름에 대해 별도의 스크립트를 작성하고 싶지는 않을 것입니다! 대신 실행 시 이름을 입력으로 사용하는 하나의 스크립트를 작성합니다. - Bash 스크립트에서 `$1`, `$2` 등과 같은 변수는 명령줄에서 전달하는 "인수" 또는 입력을 보유합니다. - 예를 들어 `./greet.sh Alice`를 실행하면 스크립트 내의 `$1`에 자동으로 "Alice"라는 텍스트가 포함됩니다. 마찬가지로 `$#`는 사용자가 제공한 입력 수를 추적합니다.

+250 XP시작
퀘스트 59잠김

CSV 보고서를 처리하는 스크립트를 작성하는데 보고서 파일이 실제로 디스크에 없으면 충돌이 발생한다고 상상해 보십시오. 오류를 방지하기 위해 `if/else` 조건부 논리를 사용하여 결정을 내리는 스크립트를 작성합니다. - 괄호를 사용하여 조건을 확인합니다: `if [ -f "$1" ]; then ... fi`. - `-f` 플래그는 경로가 파일을 가리키는지 확인하고, `-d`은 디렉터리인지 확인합니다. 스크립트는 조건이 true 또는 false로 평가되는지에 따라 작업을 분기합니다.

+270 XP시작
퀘스트 60잠김

100개의 로그 파일 폴더가 있고 모든 파일의 백업 복사본을 만들어야 한다고 상상해 보십시오. 개별적으로 복사하는 것은 지칠 것입니다. Linux에서는 `for` 루프를 사용하여 전체 항목 목록에 대해 동일한 작업을 자동으로 반복합니다! - `for` 루프(예: `for file in *.txt; do ... done`)는 패턴과 일치하는 모든 항목을 반복하여 순식간에 하나씩 처리합니다.

+280 XP시작
퀘스트 61잠김

스크립트에서 작업을 자동화하기 위해 루프와 조건문을 작성했습니다. 그러나 스크립트가 커짐에 따라 동일한 논리를 계속해서 복사하여 붙여넣으면 유지 관리가 어려워집니다. Bash에서는 명령을 재사용 가능한 기능으로 그룹화할 수 있습니다. - 함수를 정의하려면 이름 뒤에 괄호와 중괄호를 사용하여 선언합니다(`log_msg() { echo "msg"; }`). - 함수는 함수 본문 내에서 로컬 위치 매개변수 `$1`, `$2` 등을 사용하여 액세스되는 쉘 스크립트와 마찬가지로 인수를 받을 수 있습니다. - 함수를 호출하려면 다른 명령과 마찬가지로 해당 이름(`log_msg "Backup started"`)을 사용하면 됩니다.

+260 XP시작
퀘스트 62잠김

이제 강력한 쉘 스크립트를 작성했으므로 백업 도우미를 실행하기 위해 자정에 로그인하고 싶지 않을 것입니다. Linux는 특정 시간에 자동으로 명령이나 스크립트를 실행하는 `cron` 서비스를 제공합니다. - cron 서비스는 `crontab`이라는 예약 테이블을 확인합니다. - 각 cron 일정에는 시간을 나타내는 5개의 필드가 있습니다: `minute hour day-of-month month day-of-week` 뒤에 명령이 옵니다. - 예를 들어 `30 2 * * * /path/to/script.sh`은 매일 오전 2시 30분에 스크립트를 실행합니다. - `crontab -l`를 사용하여 활성 cron 작업을 나열하고 `crontab <filename>`를 사용하여 파일에서 일정을 로드합니다.

+280 XP시작

13. 고급 텍스트 처리

퀘스트 63잠김

을 사용한 스트림 편집 거대한 데이터베이스 덤프 파일이 있고 이전 서버 IP 주소의 모든 항목을 새 주소로 바꿔야 한다고 가정해 보세요. 편집기에서 열면 컴퓨터가 정지될 수 있습니다. Linux에서는 `sed`("스트림 편집기"의 약자)을 사용하여 텍스트 스트림을 즉시 편집합니다. - 텍스트를 찾고 바꾸는 기본 구문은 `sed "s/old/new/g" file.txt`입니다. - `-i`(내부) 플래그를 추가하면 수정된 텍스트를 화면에 인쇄하는 대신 대체 항목을 파일 자체에 직접 다시 저장합니다. **이것이 중요한 이유**: `-i` 없이 `sed "s/port=80/port=8080/g" server.conf`을 실행하면 수정된 텍스트만 터미널 화면에 인쇄됩니다. 실제 파일은 완전히 변경되지 않은 상태로 유지됩니다. 변경 사항을 파일에 직접 저장하려면 `-i`(내부) 플래그가 필요합니다.

+260 XP시작
퀘스트 64잠김

을 사용한 데이터 추출 열이 쉼표나 공백으로 구분되어 있고 데이터의 첫 번째 열만 추출하면 되는 일반 텍스트로 저장된 큰 스프레드시트를 받았다고 상상해 보세요. Linux에서는 강력한 언어인 `awk`을 사용하여 구조화된 텍스트 열을 구문 분석합니다. - 기본적으로 `awk`은 줄을 공백으로 분할하여 열 1을 `$1`에 할당하고 열 2를 `$2`에 할당하는 식으로 진행합니다. - `-F` 플래그를 사용하면 사용자 정의 구분 기호(예: 콜론의 경우 `-F:`)를 지정할 수 있습니다. 예를 들어 `awk -F: '{print $1}' /etc/passwd`은 콜론으로 구분된 목록에서 사용자 이름만 추출합니다. **중요한 이유**: `-F:` 없이 `awk '{print $1}' /etc/shadow`을 실행하면 `awk`은 콜론이 아닌 공백(기본값)으로 줄을 분할합니다. 섀도우 파일 줄에는 공백이 없으므로 전체 줄이 단일 필드로 처리되어 모든 사용자의 전체 해시 세부 정보가 인쇄됩니다. `-F:` 플래그는 `awk`이 대신 콜론으로 열을 분할하도록 강제합니다.

+280 XP시작
퀘스트 65잠김

거래 날짜와 이름이 포함된 CSV 스프레드시트로 작업한다고 상상해 보세요. 일관성을 위해 첫 번째 열(날짜)만 추출하고 모든 텍스트를 대문자로 변환하려고 합니다. Linux에서는 파이프라인에 경량 구문 분석 도구를 결합할 수 있습니다. - `cut` 명령은 구조화된 텍스트에서 특정 열을 분할합니다. 예를 들어 `cut -d, -f1`은 줄을 쉼표(`-d,`)로 나누고 첫 번째 열(`-f1`)을 추출합니다. - `tr`(번역) 명령은 소문자를 대문자(`tr "a-z" "A-Z"`)로 바꾸는 것과 같이 표준 입력의 문자를 변환합니다. **이것이 중요한 이유**: `-d,` 및 `-f1` 없이 `cut reports.csv`을 실행하면 `cut: you must specify a list of bytes, characters, or fields`이 표시됩니다. `-f1`을 지정하고 `-d,`을 생략하면 기본값은 탭으로 설정됩니다. 즉, CSV 파일을 분할하지 않고 전체 줄만 인쇄한다는 의미입니다. `-d,` 플래그는 쉼표를 열 구분 기호로 정의하고 `-f1`은 첫 번째 열만 추출하도록 지시합니다.

+260 XP시작

14. 환경 변수 및 사용자

퀘스트 66잠김

웹 응용 프로그램을 배포하고 안전한 로컬 "개발" 샌드박스에서 실행할지 아니면 라이브 "프로덕션" 데이터베이스에 연결할지 알아야 한다고 가정해 보겠습니다. Linux에서는 **환경 변수**를 사용하여 이와 같은 구성을 실행 중인 프로그램에 전달합니다. - `export` 명령을 사용하여 쉘에서 시작한 모든 프로그램이 변수를 읽을 수 있도록 변수를 정의합니다. 예: `export APP_ENV=production`. - 변수 값을 확인하거나 표시하려면 이름 앞에 달러 기호(`echo $APP_ENV`)를 붙입니다.

+250 XP시작
퀘스트 67잠김

500개의 서버 로그가 포함된 폴더가 있고 이를 동료에게 이메일로 보내거나 클라우드 스토리지에 백업한다고 가정해 보세요. 500개의 개별 파일을 보내는 것은 느리고 비효율적입니다. Linux에서는 `tar`("테이프 아카이브"의 약자)을 사용하여 압축된 단일 zip 형식 파일로 압축합니다. - `-c`(생성), `-z`(gzip으로 압축), `-v`(자세한 파일 목록) 및 `-f`(파일 이름 지정) 플래그를 사용하여 압축된 아카이브를 생성합니다. 예를 들어 `tar -czvf backup.tar.gz folder/`는 디렉터리를 묶고 압축합니다. **이것이 중요한 이유**: `-f` 없이 `tar -cz logs.tar.gz logs`을 실행하면 `tar: Refusing to write archive contents to terminal`이 표시됩니다. `-f` 플래그는 원시 바이너리 아카이브 데이터를 터미널에 직접 보내는 대신 파일에 출력을 쓰도록 `tar`에 지시하기 때문에 중요합니다. 아카이브를 각각 생성하고 압축하려면 `-c` 및 `-z` 플래그도 필요합니다.

+280 XP시작
퀘스트 68잠김

대규모 데이터 세트가 포함된 단일 텍스트 파일이 있고 디스크 공간을 절약하거나 공유 속도를 높이기 위해 크기를 줄이고 싶다고 가정해 보십시오. Linux에서는 `gzip`을 사용하여 개별 파일을 압축하고 `gunzip`을 사용하여 복원합니다. - `gzip <filename>` 명령은 파일을 압축하여 `.gz`으로 끝나는 압축 버전으로 바꿉니다(예: `backup.txt`는 `backup.txt.gz`가 됩니다). - `gunzip <filename.gz>` 명령은 파일의 압축을 풀어 원래 버전을 복원합니다.

+200 XP시작
퀘스트 69잠김

`tar` 및 `gzip`은 Linux에서 표준이지만 `zip`는 크로스 플랫폼 세계(Windows/macOS)에서 가장 일반적인 보관 형식입니다. Linux에서는 `zip`을 사용하여 파일을 zip 파일로 패키징하고 압축한 다음 `unzip`를 사용하여 추출합니다. - `zip <archive.zip> <files>` 명령은 zip 아카이브를 생성합니다. - `unzip <archive.zip>` 명령은 아카이브에서 파일을 추출합니다.

+180 XP시작
퀘스트 70잠김

`gzip` 및 `zip` 외에도 Linux는 CPU 속도를 희생하면서 더 높은 압축 비율에 최적화된 다른 압축 형식을 지원합니다. 이는 `bzip2`(bz2) 및 `xz`(xz)입니다. - `bzip2 <file>` 명령은 파일을 압축하여 `<file>.bz2`을 출력합니다. - `xz <file>` 명령은 무손실 LZMA 압축을 사용하여 `<file>.xz`을 생성합니다. 이는 매우 작은 파일 크기를 생성하므로 Linux 커널 릴리스에 이상적입니다.

+180 XP시작
퀘스트 71잠김

프로그램 경로를 찾을 수 없기 때문에 계속 실패하는 스크립트를 디버깅하려고 하거나 이 터미널에서 어떤 사용자 계정이 활성화되어 있는지 확인하려고 한다고 상상해 보십시오. Linux에서는 이러한 모든 세션 전체 구성이 함께 저장됩니다. - `env` 명령은 현재 활성 세션에 로드된 모든 환경 변수의 전체 디렉터리를 인쇄하므로 구성을 한 번에 확인할 수 있습니다.

+200 XP시작
퀘스트 72잠김

이제 `PATH`(Linux가 명령을 찾는 디렉터리를 저장하는)과 같은 활성 환경 변수에 익숙해졌으므로 `ls` 또는 `grep`를 입력할 때 실행되는 프로그램의 정확한 파일 경로를 어떻게 찾을 수 있습니까? `which`을 사용하여 명령 바이너리를 찾습니다. - `which` 명령은 `$PATH` 변수에 나열된 폴더를 검색하고 명령이 실행될 때 실행된 바이너리의 절대 경로를 인쇄합니다(예: `which ls`은 `/bin/ls`을 출력합니다). - 도구가 설치된 위치를 찾거나 동일한 도구의 여러 버전 간의 충돌을 해결하는 데 유용합니다.

+150 XP시작
퀘스트 73잠김

여러 플래그를 사용하여 긴 명령을 입력하면 지칠 수 있습니다. Linux에서는 별칭이라는 사용자 정의 바로가기를 만들 수 있습니다. 예를 들어 `ll`을 매핑하여 `ls -la`을 자동으로 실행할 수 있습니다. - 임시 별칭을 만들려면 `alias name='command'`(예: `alias ll='ls -la'`)를 실행하세요. - 인수 없이 `alias`을 실행하면 현재 세션의 모든 활성 별칭이 나열됩니다. - 재부팅 시 별칭을 영구적으로 만들기 위해 일반적으로 `.bashrc` 또는 `.bash_profile` 구성 파일에 기록됩니다.

+180 XP시작

15. 고급 파일 시스템

퀘스트 74잠김

`/var/www/html/configs/app/settings.conf`과 같은 중첩 폴더에 구성 파일이 깊이 묻혀 있지만 이를 지속적으로 편집해야 한다고 가정해 보십시오. 매번 긴 폴더 경로를 입력하는 대신 빠른 바탕 화면 바로 가기가 필요합니다. Linux에서는 링크를 생성하여 이를 수행합니다. - **하드 링크**: 원시 파일 데이터를 가리키는 직접 복제입니다. 원본 파일을 삭제해도 링크는 계속 작동합니다. - **심볼릭 링크(소프트 링크)**: 경로 기반 단축키(Windows 단축키와 동일)입니다. 원본파일을 삭제하시면 링크가 깨집니다. `ln -s target link_name`을 사용하여 생성합니다. **이것이 중요한 이유**: `-s` 없이 `ln logs/app.log app_link.log`을 실행하면 기호 바로가기 대신 하드 링크가 생성됩니다. 파일이 다른 디스크 파티션에 있는 경우 `ln: failed to create hard link: Invalid cross-device link`이 표시됩니다. `-s` 플래그는 다양한 드라이브와 디렉터리에서 작동하는 유연한 기호 링크(바로가기)를 생성합니다.

+270 XP시작
퀘스트 75잠김

100개의 임시 파일을 반환하는 검색을 실행했는데 이제 모든 파일을 삭제하려고 한다고 가정해 보겠습니다. 검색 출력은 화면에 표시된 텍스트 이름 목록일 뿐입니다. 이러한 이름을 삭제 명령에 직접 입력하려면 어떻게 해야 할까요? Linux에서는 `xargs`을 사용하여 이 격차를 해소합니다. - `xargs`(인수 실행) 명령은 표준 입력(`find`의 파일 목록과 같은) 행을 가져와서 이를 다른 명령에 대한 인수로 하나씩 제공합니다. - 예를 들어 `find . -name "*.tmp" | xargs rm`은 모든 임시 파일을 찾아 한 번에 모두 제거합니다.

+290 XP시작

16. 원격 접속 및 사용자 관리

퀘스트 76잠김

지금까지 `learner` 사용자로 작업했습니다. 그러나 실제 서버에서는 시스템 관리자가 여러 계정을 관리해야 합니다. 새로운 사용자를 추가하고 비밀번호를 설정하는 방법을 알아보세요. - `useradd` 명령은 새로운 사용자 계정을 생성합니다. 계정 생성은 시스템 보안에 영향을 미치므로 수퍼유저 권한(예: `sudo useradd deployer`)으로 실행해야 합니다. - `passwd` 명령은 사용자의 비밀번호를 설정하거나 변경합니다. 배포자 사용자의 비밀번호를 설정하려면 `sudo passwd deployer`로 실행하세요.

+220 XP시작
퀘스트 77잠김

`useradd`은 단순히 시스템 구성 파일에 사용자 세부 정보를 등록하는 하위 수준 유틸리티인 반면, Debian/Ubuntu 시스템은 홈 폴더 생성, 암호 설정 및 셸 환경 초기화를 자동화하는 `adduser`이라는 상위 수준 대화형 스크립트를 제공합니다. 반대로 `userdel`는 사용자 계정을 완전히 삭제합니다. - `sudo adduser tester`을 실행하면 사용자 구성을 대화형으로 안내합니다. - `sudo userdel tester`을 실행하면 사용자 계정이 삭제됩니다.

+180 XP시작
퀘스트 78잠김

권한 오류 문제를 해결할 때 실행 중인 정확한 사용자 및 그룹 식별자 컨텍스트를 확인해야 합니다. `id`을 사용하여 이 작업을 수행합니다. - `id`을 실행하면 현재 사용자의 사용자 ID(UID), 기본 그룹 ID(GID) 및 모든 보조 그룹 목록이 인쇄됩니다. - `id <username>`를 실행하면 특정 사용자에 대한 정보를 쿼리합니다.

+150 XP시작
퀘스트 79잠김

Linux에서는 사용자가 **그룹**으로 구성되어 권한을 쉽게 공유할 수 있습니다. 예를 들어 모든 개발자는 `developers`이라는 그룹에 속할 수 있습니다. 이를 통해 팀 전체와 동시에 파일을 공유할 수 있습니다. - `groupadd` 명령은 새 그룹을 생성합니다. 이는 시스템 구성이므로 슈퍼유저 권한(예: `sudo groupadd developers`)이 필요합니다. - `groups [username]` 명령은 사용자가 속한 모든 그룹을 나열합니다. 인수 없이 실행하면 현재 사용자에 대한 그룹이 표시됩니다.

+220 XP시작
퀘스트 80잠김

프로젝트 팀이 서비스를 재구성하거나 서비스를 해제할 때 해당 보안 그룹을 정리해야 합니다. Linux에서는 `groupdel`을 사용하여 그룹을 삭제합니다. - `groupdel <group_name>` 명령은 시스템 구성 파일에서 그룹을 영구적으로 삭제하므로 수퍼유저 권한이 필요합니다.

+150 XP시작
퀘스트 81잠김

이제 `deployer` 계정을 생성했으므로 해당 계정에 로컬로 로그인하여 환경을 테스트하려면 어떻게 해야 합니까? Linux에서는 로그아웃하지 않고 계정을 전환하려면 `su`(사용자 대체) 명령을 사용합니다. - `su <username>` 명령은 현재 터미널 쉘을 해당 사용자의 세션으로 전환합니다. - 전환 시 `whoami`을 실행하면 새 사용자 이름이 반영됩니다. - 원래 사용자 계정 세션으로 돌아가려면 `exit`을 입력하거나 `Ctrl+D`를 누르십시오.

+200 XP시작
퀘스트 82잠김

사용자를 로컬로 전환하는 것은 유용하지만 클라우드 컴퓨팅에서는 서버가 원격 데이터 센터에 있습니다. 네트워크를 통해 안전하게 연결하기 위해 `ssh`(Secure Shell)을 사용합니다. - `ssh` 명령은 도청을 방지하기 위해 시스템과 원격 호스트 간의 연결을 암호화합니다. - 구문: `ssh user@hostname` 또는 `ssh user@ip_address`(예: `ssh admin@192.168.1.100`). - 첫 번째 연결에서는 고유한 ECDSA 지문을 표시하여 원격 호스트의 신뢰성을 확인하라는 메시지가 표시됩니다. **참고:** 이는 브라우저 기반 샌드박스이므로 연결할 실제 원격 서버가 없습니다. 이 명령을 실행하면 실제 라이브 대화형 세션이 아닌 예상되는 실제 출력 패턴(호스트 확인, 연결, 세션)이 즉시 표시됩니다. 실제 터미널에서 ssh는 `exit`를 입력할 때까지 완전히 별도의 원격 셸로 이동합니다.

+240 XP시작
퀘스트 83잠김

이제 SSH를 통해 원격 서버에 로그인하는 방법을 알았으니 로컬 파일(예: 백업 아카이브)을 어떻게 복사합니까? `scp`(보안 복사) 명령은 내부적으로 SSH를 사용하여 호스트 간에 파일을 안전하게 복사합니다. - 구문은 `scp source_path user@host:destination_path`입니다. - 예를 들어 `scp log.txt admin@192.168.1.100:/tmp/`는 로컬 `log.txt` 파일을 원격 `/tmp/` 폴더에 복사합니다. **참고:** SSH와 마찬가지로 여기에는 실제 원격 서버가 없습니다. 이 명령을 실행하면 로컬 파일이 존재하는지 확인하고 예상되는 전송 출력이 표시되지만 실제로 데이터를 어디로도 보내지는 않습니다.

+250 XP시작