Post

[운영체제] 리눅스 서버 주요 명령어

리눅스 서버 주요 명령어

1. Server 접속을 위한 SSH

SSH (Secure Shell)

  • 네트워크 프로토콜 중 하나로, 불안전한 네트워크를 통해 안전하게 통신할 수 있게 해주는 암호화 통신 방법
  • 원격 서버에 암호화된 형태로 접속하고, 명령을 실행할 수 있도록 한다.
  • TCP/IP 프로토콜을 기반으로 동작하며, 기본 포트 번호는 22이다.
  • SSH 클라이언트와 서버 소프트웨어를 사용하여 설정되며, 공개키 인증, 비밀번호 인증 등 다양한 인증 방법을 지원한다.
  • 포트 포워딩: SSH는 보안된 터널을 통해 네트워크 서비스를 포워딩하는 기능을 제공한다. 이를 통해 보안되지 않은 네트워크 프로토콜도 안전하게 사용할 수 있다.
  • SCP와 SFTP: SSH 프로토콜을 기반으로 하는 파일 전송 프로토콜인 SCP(Secure Copy Protocol)와 SFTP(SSH File Transfer Protocol)를 통해 안전하게 파일을 전송할 수 있다.
  • 세션 관리: SSH는 원격 세션을 암호화하며, 네트워크 연결이 끊어진 후에도 세션을 유지하거나 재개할 수 있는 기능을 제공한다.
  • 초기 버전인 SSH-1에서 발견된 보안 취약점을 해결하기 위해 SSH-2가 개발되었으며, 현재는 SSH-2가 널리 사용되고 있다.
  • 리눅스, 유닉스, 맥 OS, 윈도우를 포함한 다양한 운영 체제에서 지원된다.

2. IP 를 확인하는 ifconfig 과 curl ifconfig.co

ifconfig (interface configuration)

  • UNIX 및 유사 운영 체제에서 네트워크 인터페이스를 구성, 관리, 조회하기 위해 사용되는 명령어 도구
  • 이 명령어를 사용하면 시스템의 현재 네트워크 설정을 확인하고, IP 주소를 변경하는 등의 작업을 할 수 있다.

  • 주요 기능과 사용 방법
    • 인터페이스 조회: 단순히 ifconfig를 실행하면 모든 활성 네트워크 인터페이스와 그 상태, IP 주소, 서브넷 마스크, 브로드캐스트 주소 등을 확인할 수 있다.
    • 인터페이스 활성화/비활성화: ifconfig [인터페이스 이름] up 또는 down 명령어를 사용하여 네트워크 인터페이스를 활성화하거나 비활성화할 수 있다.
    • IP 주소 설정: ifconfig [인터페이스 이름] [IP 주소] netmask [서브넷 마스크] 명령어를 사용하여 인터페이스에 IP 주소와 서브넷 마스크를 설정할 수 있다.
    • MAC 주소 변경: 일부 시스템에서는 ifconfig [인터페이스 이름] hw ether [새 MAC 주소] 명령어를 사용하여 MAC 주소를 변경할 수 있다.
  • 최신의 리눅스 배포판에서는 ifconfig가 더 이상 기본적으로 설치되어 있지 않으며, ip 명령어로 대체되고 있다.

ifconfig.co

  • ifconfig.co는 사용자의 공용 IP 주소를 반환하는 웹 서비스로, CLI(Command Line Interface) 또는 웹 브라우저를 통해 접근할 수 있다.
  • curl 명령어(curl ifconfig.co)를 사용하여 ifconfig.co 웹 서비스에 접근하는 것은 원격에서 자신의 공용 IP 주소를 조회하는 간단하고 효율적인 방법

  • 사용 방법
    • 커맨드 라인에서 curl ifconfig.co 명령어를 실행하면, 현재 시스템의 공용 IP 주소를 텍스트 형태로 반환
    • curl ifconfig.co/country 등의 명령어로 IP 주소의 국가, 도시 등 추가 정보를 조회
  • 활용 사례
    • 원격 서버에 접속했을 때, 해당 서버의 공용 IP 주소를 신속하게 확인
    • 네트워크 구성이나 VPN, 프록시 서버 등을 통한 연결 상태를 진단할 때 활용
  • ifconfig와 curl ifconfig.co는 네트워크 관리 및 진단에 있어서 기본적이면서도 강력한 도구지만, 최신 기능이나 보안 상의 이유로 ip 명령어나 다른 방법을 사용하는 것이 권장될 수 있다.

3. 간단하게 http 테스트가 가능한 curl

curl

  • 커맨드라인 또는 스크립트에서 데이터를 전송하기 위해 사용되는 도구
  • HTTP, HTTPS, FTP 등 다양한 프로토콜을 지원하며, 웹 서버와의 간단한 데이터 교환에서부터 REST API 테스트까지 널리 사용된다.
  • 웹 사이트의 가용성을 검사하거나, API 응답을 확인하고, 파일을 다운로드하거나 업로드하는 등의 작업을 할 수 있다.
  • 특히 API 테스트를 위해 많이 사용된다.
  • 거의 모든 운영체제에서 지원하고 있으며 간단하게 설치 가능하다.

4. 도메인 조회를 하는 nslookup

NSLookup (Name Server Lookup)

  • 도메인 이름의 IP 주소를 찾거나 IP 주소에 대응하는 도메인 이름을 찾는 데 사용되는 명령줄 도구
  • DNS(도메인 이름 시스템) 레코드를 쿼리하여 특정 호스트의 레코드 정보를 조회할 수 있다.
  • DNS 서버가 올바르게 도메인 이름을 해석하고 있는지 확인하고 문제를 해결할 수 있다.
  • Linux/UNIX와 Windows 모두에서 사용할 수 있는 도구로 대부분의 운영 체제에서 기본적으로 제공된다.

5. 서버를 확인하는 telnet, ping

Telnet

  • 원격 컴퓨터나 장비에 대한 텍스트 기반의 인터페이스를 통해 접속하고, 해당 시스템에서 명령을 실행하기 위한 클라이언트-서버 프로토콜
  • 네트워크를 통해 다른 컴퓨터에 연결하고, 마치 자신의 컴퓨터에 직접 로그인한 것처럼 명령을 실행할 수 있다.
  • TCP/IP 프로토콜을 사용하며, 기본적으로 23번 포트를 사용한다.
  • 데이터가 암호화되지 않고 평문으로 전송되기 때문에 보안이 중요한 환경에서는 Telnet 대신 SSH(Secure Shell)를 사용하는 것이 권장된다.

Ping

  • 네트워크에 연결된 장치까지 데이터 패킷을 보내고, 그 장치로부터 응답을 받아오는 시간을 측정하여 네트워크 연결 상태를 테스트하는 데 사용되는 도구
  • Ping은 ICMP(Internet Control Message Protocol) 에코 요청을 대상 호스트에 보내고, 대상이 응답(에코 응답)하면 네트워크 연결이 성공적임을 알 수 있다.
  • 네트워크 연결 문제의 진단과 위치를 파악하는 데 도움이 된다.
  • 거의 모든 운영 체제에서 사용할 수 있다.

6. 서버와 커넥션을 확인하는 netstat

Netstat (Network Statistics)

  • 컴퓨터의 네트워크 연결, 라우팅 테이블 정보, 인터페이스 통계, masquerade 연결, 멀티캐스트 멤버십 등과 같은 네트워크 관련 정보를 보여주는 명령줄 도구
  • 현재 시스템에 활성화된 모든 소켓(서버와 클라이언트 간의 연결) 정보를 확인할 수 있다.
  • 네트워크 연결 문제 해결이나 시스템 모니터링에 유용하다.

7. 프로세스를 확인하는 ps

PS (Process Status)

  • 현재 실행 중인 프로세스 목록을 보여주는 명령줄 도구
  • 시스템에서 실행 중인 프로세스의 상태, 프로세스 ID(PID), 소유자, 메모리 사용량, 실행 중인 명령 등의 정보를 볼 수 있다.
  • 시스템 성능 모니터링, 문제 해결, 보안 검사 등에 중요한 데이터를 제공한다.

8. 시스템정보를 확인하는 top, sar, free, df

top

  • 현재 시스템에서 실행 중인 프로세스를 실시간으로 보여주며 CPU와 메모리 사용량을 포함한 다양한 정보를 제공한다.
  • 가장 리소스를 많이 사용하는 프로세스를 확인할 수 있고, 시스템의 전반적인 성능 상태를 한눈에 파악할 수 있다.
  • 기본적으로 top은 동적으로 갱신되며, 프로세스 목록, CPU 상태, 메모리 사용량 등을 시간 순서에 따라 표시한다.

sar (System Activity Report)

  • 시스템 활동의 역사적 데이터를 수집하고 보고하는데 사용한다.
  • CPU, 메모리 사용, 디스크 I/O, 네트워크 활동 등 다양한 시스템 성능 지표를 시간에 따라 기록하고 분석할 수 있도록 한다.
  • 일반적으로 시스템의 문제 해결과 성능 분석에 사용되며, sysstat 패키지의 일부로 제공된다.

free

  • 시스템의 메모리 사용량을 보여준다.
  • 총 메모리, 사용 중인 메모리, 사용 가능한 메모리, 스왑 공간 등의 정보를 제공한다.
  • 메모리 누수나 부족 문제를 진단할 때 유용하게 사용된다.

df (disk filesystem)

  • 파일 시스템별 디스크 사용량을 보여준다.
  • 각 마운트된 파일 시스템의 총 공간, 사용 중인 공간, 사용 가능한 공간, 그리고 사용량의 백분율을 확인할 수 있다.
  • 특히 디스크 공간 부족 문제를 진단하고, 어떤 파일 시스템이 가장 많은 공간을 차지하고 있는지 파악하는 데 유용하다.

9. 리눅스의 서비스를 관리하는 systemd

systemd

  • 리눅스 시스템을 위한 초기화 시스템(init system) 및 시스템 및 서비스 매니저
  • 대부분의 최신 리눅스 배포판에서 기본적으로 사용된다.
  • 시스템의 부팅 과정을 관리하고, 시스템과 애플리케이션의 서비스를 시작, 중지, 관리하는 역할을 한다.
  • 주요 특징
    • 병렬 처리: systemd는 시스템 부팅 시 서비스를 병렬로 시작하여 부팅 시간을 단축한다.
    • 서비스 의존성 관리: 서비스 간의 의존성을 관리하고, 필요한 서비스가 먼저 시작되도록 한다.
    • 시스템 상태 로깅: systemd는 journalctl 명령어를 통해 통합 로깅 시스템(journald)을 제공하여, 시스템 및 애플리케이션의 로그를 쉽게 관리하고 검색할 수 있다.
    • cgroup을 이용한 리소스 관리: 프로세스의 리소스 사용을 관리하기 위해 Linux 커널의 cgroups(control groups)을 사용한다.
    • 소켓 기반 활성화: 네트워크 소켓에 대한 요청이 있을 때만 서비스를 시작하도록 할 수 있어, 리소스 사용을 최적화한다.
    • 타이머 기반 작업 스케줄링: 시스템 작업을 예약하고 타이머를 설정할 수 있다.
    • 유닛 파일: 서비스, 소켓, 디바이스 등의 구성을 위해 단순한 텍스트 파일인 유닛 파일을 사용한다. 이 파일들은 일반적으로 .service, .socket, .device 등과 같은 확장자를 가지며 /etc/systemd/system 또는 /lib/systemd/system 디렉토리에 위치한다.
  • systemd 사용 예시

    • 서비스 시작, 중지, 재시작 및 상태 확인

      1
      2
      3
      4
      
      systemctl start 서비스이름.service   # 서비스 시작
      systemctl stop 서비스이름.service    # 서비스 중지
      systemctl restart 서비스이름.service # 서비스 재시작
      systemctl status 서비스이름.service  # 서비스 상태 확인
      
    • 시스템 재부팅 및 종료

      1
      2
      
      systemctl reboot   # 시스템 재부팅
      systemctl poweroff # 시스템 종료
      
    • 서비스 활성화 및 비활성화: 서비스를 시스템 부팅 시 자동으로 시작하거나 그렇지 않도록 설정

      1
      2
      
      systemctl enable 서비스이름.service   # 서비스 활성화
      systemctl disable 서비스이름.service  # 서비스 비활성화
      
    • 로그 조회: journalctl 명령어를 사용하여 시스템 로그를 조회

      1
      2
      
      journalctl -u 서비스이름.service # 특정 서비스의 로그 조회
      journalctl -f
      

10. 리눅스 파일 권한을 관리하는 chmod, chown

chmod(change mode)

  • 리눅스와 유닉스 시스템에서 파일이나 디렉토리의 접근 권한을 변경하는 데 사용
  • 파일의 소유자(owner), 그룹(group), 그 외 사용자(others)읽기(read), 쓰기(write), 실행(execute) 권한을 설정
  • 사용법

    • 기호(symbolic) 모드: 권한을 추가(+), 제거(-), 설정(=)하기 위한 기호를 사용

      • chmod u+x 파일명 (소유자에게 실행 권한 추가)
      • chmod g-w 파일명 (그룹의 쓰기 권한 제거)
      • chmod o=r 파일명 (그 외 사용자에게 읽기 권한만 설정)
    • 숫자(numeric or octal) 모드: 권한을 3자리의 8진수로 표현

      • 각 자리는 소유자, 그룹, 그 외 사용자의 권한을 나타냄
      • 각 권한은 읽기(4), 쓰기(2), 실행(1)의 합으로 표현된다.

      • 예: chmod 755 파일명 (소유자는 모든 권한, 그룹과 그 외 사용자는 읽기와 실행 권한)
      • 예: chmod 644 파일명 (소유자는 읽기와 쓰기 권한, 그룹과 그 외 사용자는 읽기 권한)

chown(change owner)

  • 파일이나 디렉토리의 소유자와/또는 그룹을 변경하는 데 사용
  • 시스템 관리자가 소유권을 다른 사용자나 그룹으로 이전할 때 주로 사용
  • 사용법
    • 파일이나 디렉토리의 소유자를 변경하려면, 다음과 같이 사용자 이름을 지정한다.
      • 예: chown 새소유자 파일명
    • 소유자와 그룹을 동시에 변경하려면, 사용자 이름과 그룹 이름을 콜론(:)으로 구분하여 지정한다.
      • 예: chown 새소유자:새그룹 파일명
    • 그룹만 변경하고 싶다면, chgrp 명령어를 사용하거나 chown :새그룹 파일명 형식을 사용할 수 있다.
  • 주의 사항
    • chmod와 chown 명령어는 시스템의 보안과 직접적으로 관련되어 있으므로, 주의해서 사용해야 한다. 잘못된 권한 설정은 보안 취약점으로 이어질 수 있다.
    • 일반 사용자는 자신이 소유한 파일이나 디렉토리의 권한만 변경할 수 있다. 파일의 소유자나 그룹을 변경하려면, 일반적으로 루트 권한이 필요하다.

참고 : 데브아트 DevArt - 신입 or Jr 엔지니어 면접을 위한 리눅스 명령어 top 10

This post is licensed under CC BY 4.0 by the author.