10-2. 리눅스 명령어

1. 리눅스 명령어 개요

리눅스는 다양한 작업을 수행하기 위해 텍스트 기반의 명령어를 사용합니다. 이러한 명령어들은 시스템 관리, 파일 조작, 프로세스 제어, 네트워킹 등 운영체제의 거의 모든 측면을 제어할 수 있는 강력한 도구입니다. 리눅스 명령어는 쉘(shell)이라고 불리는 명령어 해석기를 통해 실행되며, 쉘은 사용자가 입력한 명령어를 해석하여 커널(kernel)에게 전달하고, 커널은 해당 명령어를 실행합니다. 리눅스 명령어를 효과적으로 이해하고 사용하는 것은 리눅스 시스템을 능숙하게 다루기 위한 필수적인 요소입니다.

2. 기본 명령어

리눅스 시스템을 사용하기 위한 기본적인 명령어들을 살펴보겠습니다.

1) 파일 및 디렉터리 조작

리눅스 시스템에서 가장 기본적인 작업은 파일과 디렉터리를 조작하는 것입니다.

  • ls: 현재 디렉터리의 파일과 디렉터리 목록을 보여줍니다. ls -l 옵션을 사용하면 파일의 상세 정보 (권한, 소유자, 크기, 수정 날짜 등)를 확인할 수 있습니다. ls -a 옵션은 숨겨진 파일까지 보여줍니다.

    ls 명령어 설명 뒤

  • cd: 디렉터리를 변경합니다. cd /home/user/documents 와 같이 절대 경로 또는 cd documents 와 같이 상대 경로를 사용할 수 있습니다. cd ..는 상위 디렉터리로 이동하고, cd ~는 홈 디렉터리로 이동합니다.
  • pwd: 현재 작업 중인 디렉터리의 절대 경로를 출력합니다.
  • mkdir: 새로운 디렉터리를 생성합니다. mkdir new_directory 와 같이 사용합니다.
  • rmdir: 빈 디렉터리를 삭제합니다.
  • touch: 빈 파일을 생성하거나, 파일의 접근 시간 및 수정 시간을 현재 시간으로 갱신합니다. touch filename.txt 와 같이 사용합니다.
  • rm: 파일 또는 디렉터리를 삭제합니다. -r 옵션을 사용하면 디렉터리와 그 안에 있는 모든 파일을 재귀적으로 삭제합니다. 사용 시 주의해야 합니다. rm filename.txt 또는 rm -r directory_name 과 같이 사용합니다.
  • cp: 파일을 복사합니다. cp source.txt destination.txt 와 같이 사용합니다. 디렉터리를 복사할 때는 -r 옵션을 사용합니다.
  • mv: 파일을 이동하거나 이름을 변경합니다. mv old_name.txt new_name.txt 와 같이 사용하면 파일 이름을 변경하고, mv source.txt /home/user/documents/ 와 같이 사용하면 파일을 다른 디렉터리로 이동합니다.
  • cat: 파일의 내용을 화면에 출력합니다. cat filename.txt 와 같이 사용합니다.
  • echo: 텍스트를 출력합니다. echo "Hello, world!" 와 같이 사용합니다. 주로 쉘 스크립트에서 변수 값을 출력하거나, 파일에 텍스트를 추가할 때 사용됩니다.
  • head: 파일의 처음 몇 줄을 출력합니다. head -n 10 filename.txt 와 같이 사용하면 파일의 처음 10줄을 출력합니다.
  • tail: 파일의 마지막 몇 줄을 출력합니다. tail -f filename.txt 와 같이 사용하면 파일의 마지막 몇 줄을 지속적으로 출력하며, 파일 내용이 변경될 때마다 갱신됩니다. 이는 로그 파일을 실시간으로 모니터링할 때 유용합니다.

2) 파일 내용 검색 및 처리

  • grep: 파일 내에서 특정 문자열을 검색합니다. grep "keyword" filename.txt 와 같이 사용합니다. -i 옵션은 대소문자를 구분하지 않고 검색하고, -v 옵션은 일치하지 않는 줄을 출력합니다.
  • find: 파일 시스템에서 파일을 검색합니다. find / -name "filename.txt" 와 같이 사용하면 루트 디렉터리(/)부터 시작하여 "filename.txt" 파일을 찾습니다.
  • wc: 파일의 단어, 줄, 바이트 수를 세줍니다. wc filename.txt 와 같이 사용합니다. -l 옵션은 줄 수를, -w 옵션은 단어 수를, -c 옵션은 바이트 수를 출력합니다.

3) 사용자 및 권한 관리

  • whoami: 현재 로그인한 사용자의 사용자 이름을 출력합니다.
  • sudo: 다른 사용자의 권한으로 명령어를 실행합니다. sudo apt update 와 같이 사용하면 관리자 권한으로 패키지 업데이트를 실행합니다.
  • chmod: 파일 또는 디렉터리의 권한을 변경합니다. chmod 755 filename.txt 와 같이 사용합니다. 여기서 "755"는 권한을 나타내는 숫자이며, 각 숫자는 사용자, 그룹, 다른 사용자의 권한을 의미합니다 (4: 읽기, 2: 쓰기, 1: 실행).
  • chown: 파일 또는 디렉터리의 소유자를 변경합니다. chown user:group filename.txt 와 같이 사용합니다. 여기서 "user"는 새로운 소유자, "group"은 새로운 그룹입니다.
  • passwd: 사용자 비밀번호를 변경합니다.

4) 프로세스 관리

  • ps: 현재 실행 중인 프로세스 목록을 보여줍니다. ps aux 와 같이 사용하면 모든 사용자의 모든 프로세스 정보를 상세하게 확인할 수 있습니다.
  • top: 실시간으로 시스템 자원 사용 정보를 보여줍니다 (CPU, 메모리, 프로세스 등).
  • kill: 프로세스를 종료합니다. kill 프로세스_ID 와 같이 사용합니다. 프로세스 ID는 ps 또는 top 명령어를 통해 확인할 수 있습니다. -9 옵션은 강제 종료를 의미합니다.
  • bg: 백그라운드로 프로세스를 실행합니다.
  • fg: 포그라운드로 프로세스를 실행합니다.
  • jobs: 백그라운드에서 실행 중인 작업 목록을 보여줍니다.

5) 시스템 정보

  • uname: 시스템 정보를 출력합니다. uname -a 옵션을 사용하면 커널 이름, 노드 이름, 커널 릴리즈, 커널 버전, 머신, 프로세서, 하드웨어 플랫폼, 운영체제 등을 출력합니다.
  • df: 디스크 사용량을 보여줍니다.
  • du: 디렉터리별 디스크 사용량을 보여줍니다.
  • free: 메모리 사용량을 보여줍니다.
  • uptime: 시스템 가동 시간을 보여줍니다.
  • ifconfig 또는 ip: 네트워크 인터페이스 설정을 보여줍니다 (ip 명령어가 더 최신 명령어입니다).
  • ping: 특정 호스트로 ICMP 에코 요청을 보내 네트워크 연결 상태를 확인합니다. ping google.com 와 같이 사용합니다.
  • traceroute: 네트워크 패킷의 경로를 추적합니다.

3. 명령어 옵션 및 활용

리눅스 명령어는 다양한 옵션을 함께 사용하여 기능의 범위를 확장하고 세밀한 제어를 할 수 있습니다.

1) 옵션의 기본 구조

대부분의 리눅스 명령어는 다음과 같은 구조를 가집니다:

command [options] [arguments]
  • command: 실행할 명령어의 이름입니다.
  • options: 명령의 동작을 수정하는 데 사용되는 플래그입니다. 옵션은 일반적으로 하이픈(-)으로 시작하며, 짧은 형식(-v) 또는 긴 형식(--verbose)으로 표현될 수 있습니다.
  • arguments: 명령어에 전달되는 추가적인 정보, 파일 이름, 디렉터리 이름, 또는 다른 입력값입니다.

2) 옵션의 예시

  • ls -l: ls 명령어에 -l 옵션을 사용하여 상세 목록을 표시합니다.
  • grep -i "keyword" file.txt: grep 명령어에 -i 옵션을 사용하여 "keyword"를 대소문자 구분 없이 검색합니다.
  • find / -name "filename.txt" -print: find 명령어에 -name 옵션을 사용하여 파일 이름을 기준으로 파일을 찾고, -print 옵션으로 결과를 출력합니다.
  • mkdir -p /home/user/documents/new_folder: mkdir 명령어에 -p 옵션을 사용하여 상위 디렉터리가 없으면 함께 생성하면서 디렉터리를 생성합니다.

3) 옵션 조합

여러 옵션을 조합하여 더욱 강력한 기능을 수행할 수 있습니다. 예를 들어:

ls -la /home/user

위 명령어는 /home/user 디렉터리의 모든 파일 및 숨겨진 파일의 상세 정보를 표시합니다.

4) 와일드카드

와일드카드 문자를 사용하여 여러 파일이나 디렉터리를 동시에 선택할 수 있습니다.

  • *: 임의의 문자를 나타냅니다. *.txt는 ".txt" 확장자를 가진 모든 파일을 의미합니다.
  • ?: 단일 문자를 나타냅니다. file?.txt는 "file1.txt", "file2.txt" 등을 의미합니다.
  • []: 문자 집합 중 하나를 나타냅니다. file[123].txt는 "file1.txt", "file2.txt", "file3.txt"를 의미합니다.

4. 파이프(Pipe)와 리다이렉션(Redirection)

파이프와 리다이렉션은 리눅스 명령어의 강력한 기능 중 하나이며, 명령의 출력을 다른 명령의 입력으로 연결하거나, 파일로 리다이렉션하는 기능을 제공합니다.

1) 파이프 (|)

파이프는 한 명령의 출력을 다른 명령의 입력으로 연결하는 데 사용됩니다. 이를 통해 여러 명령을 조합하여 복잡한 작업을 수행할 수 있습니다.

ls -l | grep "txt"

위 명령어는 ls -l의 출력을 grep "txt" 명령의 입력으로 연결하여, 현재 디렉터리의 파일 목록 중 "txt"가 포함된 줄만 필터링합니다.

2) 리다이렉션

리다이렉션은 명령의 출력을 파일로 저장하거나, 파일의 내용을 명령의 입력으로 사용하는 데 사용됩니다.

  • 출력 리다이렉션 (>)

    명령의 출력을 파일로 저장합니다. 기존 파일이 존재하면 덮어씁니다.

    bash ls -l > file_list.txt

    위 명령어는 ls -l의 출력을 file_list.txt 파일에 저장합니다. * 출력 추가 리다이렉션 (>>)

    명령의 출력을 파일에 추가합니다. 기존 파일이 존재하면 파일의 끝에 내용을 추가합니다.

    bash echo "새로운 내용" >> file_list.txt

    위 명령어는 "새로운 내용"을 file_list.txt 파일의 끝에 추가합니다. * 입력 리다이렉션 (<)

    파일의 내용을 명령의 입력으로 사용합니다.

    bash wc -w < file.txt

    위 명령어는 file.txt 파일의 단어 수를 계산하여 출력합니다.

    3) 파이프와 리다이렉션의 조합

파이프와 리다이렉션을 함께 사용하여 더욱 복잡한 작업을 수행할 수 있습니다. 예를 들어, 특정 파일 목록을 파일로 저장하고, 해당 파일 내에서 특정 문자열을 검색할 수 있습니다.

ls -l | grep "log" > log_files.txt

위 명령어는 ls -l의 출력을 파이프를 통해 grep "log" 명령으로 전달하여 "log"가 포함된 줄만 필터링하고, 그 결과를 log_files.txt 파일에 저장합니다.

5. 쉘 스크립트에서 명령어 활용

리눅스 명령어는 쉘 스크립트 내에서 조합되어 자동화된 작업을 수행하는 데 사용됩니다. 쉘 스크립트는 일련의 명령어를 순차적으로 실행하는 텍스트 파일입니다.

1) 쉘 스크립트 작성

쉘 스크립트는 텍스트 편집기를 사용하여 작성하며, 파일 확장자는 일반적으로 .sh입니다. 쉘 스크립트의 첫 번째 줄은 쉘 인터프리터를 지정하는 shebang(#! /bin/bash)으로 시작합니다.

#!/bin/bash
# 쉘 스크립트 예시

# 현재 디렉터리의 파일 목록을 출력
ls -l

# 특정 파일의 내용을 출력
cat myfile.txt

# 현재 날짜를 출력
date

2) 쉘 스크립트 실행

쉘 스크립트를 실행하기 전에 실행 권한을 부여해야 합니다.

chmod +x script.sh
./script.sh

chmod +x script.sh 명령어를 사용하여 실행 권한을 부여하고, ./script.sh 명령어를 사용하여 스크립트를 실행합니다.

3) 쉘 스크립트 내 명령어 활용 예시

  • 파일 백업

    ```bash

    !/bin/bash

    파일 백업 스크립트

    백업할 파일 지정

    FILE="myfile.txt"

    백업 파일 이름 생성 (현재 날짜를 포함)

    BACKUP_FILE="${FILE}.$(date +%Y%m%d%H%M%S).bak"

    파일 백업

    cp "$FILE" "$BACKUP_FILE"

    echo "파일 '${FILE}'이(가) '${BACKUP_FILE}'로 백업되었습니다." ``` * 로그 파일 분석

    ```bash

    !/bin/bash

    로그 파일 분석 스크립트

    로그 파일 경로

    LOG_FILE="/var/log/syslog"

    특정 오류 메시지 검색

    grep "error" "$LOG_FILE"

    특정 사용자 관련 로그 검색

    grep "user123" "$LOG_FILE" ```

6. 명령어 팁 및 트러블슈팅

1) 명령어 자동 완성

명령어, 파일, 디렉터리 이름 등을 입력할 때 Tab 키를 사용하여 자동 완성 기능을 활용할 수 있습니다. 명령어를 부분적으로 입력하고 Tab 키를 누르면 일치하는 명령어를 자동으로 완성하거나, 여러 개의 파일/디렉터리가 있을 경우 목록을 보여줍니다.

2) 명령어 히스토리

이전에 실행했던 명령어를 다시 실행하려면 Up 화살표 키를 사용하여 히스토리 목록을 검색하거나, Ctrl + R을 눌러 역방향으로 검색할 수 있습니다.

3) 명령어 도움말

명령어의 사용법을 잘 모르는 경우, man (manual) 명령어를 사용하여 도움말을 확인할 수 있습니다.

man ls

위 명령어를 실행하면 ls 명령어의 상세한 사용법, 옵션, 예시 등을 볼 수 있습니다.

또한, --help 옵션을 사용할 수도 있습니다.

ls --help

4) 오류 메시지 이해

명령어 실행 시 오류가 발생하면 오류 메시지를 꼼꼼히 읽고 원인을 파악해야 합니다. 오류 메시지는 문제 해결의 중요한 단서를 제공합니다.

5) 권한 문제

명령어를 실행할 때 "Permission denied" 오류가 발생하면 해당 파일 또는 디렉터리에 대한 권한이 없는 경우입니다. ls -l 명령어를 통해 파일 권한을 확인하고, chmod 또는 chown 명령어를 사용하여 권한을 수정하거나, sudo 명령어를 사용하여 관리자 권한으로 명령어를 실행할 수 있습니다.

6) 잘못된 명령어 입력

오타 또는 잘못된 옵션 사용으로 인해 명령어가 제대로 실행되지 않을 수 있습니다. 명령어를 다시 한번 확인하고, man 또는 --help 옵션을 사용하여 정확한 사용법을 확인합니다.

7) 쉘 설정

쉘의 설정 파일 (예: .bashrc, .zshrc)을 수정하여 프롬프트 모양, 명령어 별칭, 환경 변수 등을 커스터마이징할 수 있습니다.

7. 결론

리눅스 명령어는 리눅스 운영체제를 효과적으로 사용하기 위한 핵심 도구입니다. 기본적인 명령어들을 익히고, 옵션, 파이프, 리다이렉션, 쉘 스크립트 활용 등을 통해 리눅스 시스템을 더욱 효율적으로 관리하고 사용할 수 있습니다. 지속적인 연습과 문제 해결을 통해 리눅스 명령어 사용 능력을 향상시킬 수 있습니다.

비슷한 글 추천

Comments (0)

No comments yet. Be the first to comment!