Skip to main content
  1. Posts/

Linux Commands

  • 대문자 소문자 차이

    • curl -v https://google.com : 로그 상세히
    • curl -X POST https://api.com : HTTP 메소드 지정
    1. 소문자 옵션: 대부분의 Unix/Linux 명령어에서 소문자 옵션은 일반적으로 기능이나 동작을 지정하는 데 사용됩니다. 예를 들어:
      • d (데이터 전송)
      • v (verbose 모드)
      • h (도움말)
    2. 대문자 옵션: 대문자 옵션은 특정한 기능이나 구체적인 동작을 지정하는 데 사용됩니다. 예를 들어:
      • X (HTTP 요청 메서드 지정)
      • H (HTTP 헤더 지정)
      • A (User-Agent 설정)
  • Redirection 명령어

    기본 리다이렉션
    #

    • < : 파일 내용을 stdin으로 입력.
      • wc -l < file.txt : file.txt 줄 수 계산
    • > : stdout을 파일로 덮어쓰기 저장.
      • ls > files.txt : 파일 목록 저장
    • >> : stdout을 파일 끝에 append 저장.
      • echo hello >> log.txt : 로그 뒤에 추가
    • | : stdout을 다른 프로세스 stdin으로 전달.
      • ls | grep txt : txt 파일만 필터링

    문자열 / 블록 입력
    #

    • <<< : 문자열 자체를 stdin으로 전달.
      • wc -w <<< "hello world" : 단어 수 계산
    • << : 여러 줄 문자열을 stdin으로 전달.
      • cat << EOF : 여러 줄 입력 전달

    stderr 리다이렉션
    #

    • 2> : stderr를 파일로 저장. 덮어씌우기(overwrite)
      • python app.py 2> error.log : 에러 로그 저장
    • 2>> : stderr append 저장. 뒤에 추가(append)
      • python app.py 2>> error.log : 에러 로그 뒤에 추가
    • 2>&1 : stderr를 stdout 방향으로 합치기.
      • python app.py > all.log 2>&1 : 일반 출력 + 에러 같이 저장

    stdout + stderr 동시 처리
    #

    • &> : stdout + stderr 둘 다 파일 저장.
      • python app.py &> all.log : 전체 로그 저장
    • |& : stdout + stderr 둘 다 pipe 전달.
      • python app.py |& grep ERROR : 출력/에러 모두 grep 처리

    출력 버리기
    #

    • /dev/null : 출력 버리는 특수 파일.
      • ls > /dev/null : 출력 숨김
    • /dev/null + stderr : 출력 + 에러 둘 다 버리기.
      • command > /dev/null 2>&1 : 모든 출력 숨김

    파일 디스크립터(fd)
    #

    <는 0이고, >는 1인데 대부분 사실상 생략, 2는 에러만 따로 뽑는 용도

    • 0 : stdin fd.
      • 0< file.txt : stdin 입력 지정
    • 1 : stdout fd.
      • 1> out.txt : stdout 저장
      • > out.txt : 위아래 동일함. 사실 1이 생략된거임.
    • 2 : stderr fd.
      • 2> err.txt : stderr 저장
  • 텍스트 파일 생성 : touch, echo, vi

    • touch : 파일 생성
      • touch test.txt
      • touch a.txt b.txt c.txt
    • echo : 내용 작성
      • echo "hello" > test.txt
    • vi : 편집기 생성
      • vi test.txt
  • cd [destination] : 디렉토리 이동

    cd ~ : 홈 디렉토리

    cd .. : 상위 디렉토리

    cd - : 이전 디렉토리

  • rm [파일명] : 파일 하나 삭제

    rmdir [폴더명] : 빈 폴더 삭제

    rm -r [파일명] : 파일 안의 내용물도 삭제

  • cp [원본] [대상경로] : 복사

    • cp -r project backup : 디렉토리 및 내용 복사
  • ss -tplan : -t, TCP 소켓만, -p, 프로세스 정보 표시, -l, LISTEN 상태만, -a, 전체 소켓 표시, -n, 이름 해석 없이 숫자로 출력

  • systemctl start/stop : 서비스 시작/중지. systemd에서 서비스 생명주기 + 부팅 설정 관리하는 도구

    • systemd = 리눅스 부팅 이후 “모든 서비스 관리하는 관리자 프로그램”
  • journalctl : 위는 제어, 이건 로그 확인용. systemd 시스템에서 로그를 조회하고 관리하기 위한 도구

  • top : 시스템 프로세스 정보

  • free : 시스템 메모리 사용량 확인

  • dmesg : Linux 커널 메시지 버퍼에 저장된 메시지를 확인할 수 있는 명령어. 커널 확인용.

    • dmesg | grep -i error : HW 에러 확인
  • echo [내용] > [파일명] : 파일에 텍스트 작성(덮어쓰기)

    • echo [내용] >> [파일명] : 파일에 텍스트 작성(이어붙이기)
  • cat [파일명] : 파일 내용 출력

    less [파일명] : 파일 내용을 페이지 단위로 보기

    head [파일명] : 파일의 시작 부분 보기

    tail [파일명] : 파일의 끝 부분 보기

  • rsync : 두 디렉토리/서버 간 파일 차이만 효율적으로 동기화하는 파일 복사 도구

    • A파일을 B폴더에 rsync → 처음에는 A그대로 복사됨. =C파일
    • A파일 살짝 수정후, B폴더에 rsync → C파일에서, 바뀐 부분만 수정됨.

신입 or Jr 엔지니어 면접을 위한 리눅스 명령어 top 10

1. Server를 어떻게 접속하는가? 사용하는 도구나 방법은?
#

ssh : 서버에 연결하는 명령어. 원리와 key를 확인하는 것 등 알아보기

sudo -i : root 사용자로 로그인하는 명령어

2,3. IP를 확인하는 명령어는? 자신의 Public IP는 어떻게 확인하는가? 웹사이트가 잘 동작하는지 check할 때 사용하는 명령어는? Curl은 언제 사용하는가?
#

curl [OPTIONS] [URL] : Client Url. 클라에서 url을 사용해서 서버와 데이터를 송수신하는 명령어 툴

  • curl ifconfig.co : 자신의 Public IP를 확인하는 명령어

    결국 데이터는 최종적으로 내 private IP에 도착하지만, 들어오거나 나갈 때 Public IP(ISP)를 경유하게 되어있다.

    cafe같은 데서 접속시, iptime과 같은 공유기의 웹페이지로 이동된다.

  • curl -v : verbose mode. 요청 및 응답의 상세한 정보를 터미널에 출력.

  • curl -X : HTTP 요청 메서드를 명시적으로 지정하는 옵션. default curl GET, -X 으로 변경 可

    # 기본 GET 요청
    curl -X GET https://jsonplaceholder.typicode.com/posts/1
    
    # POST 요청 - JSON 데이터 전송
    curl -X POST https://jsonplaceholder.typicode.com/posts \
    -H "Content-Type: application/json" \
    -d '{"title": "foo", "body": "bar", "userId": 1}'
    
    # POST 요청 - JSON 데이터 전송, -d option
    curl -X POST https://example.com -d "name=John&age=30"
    

4. Domain의 IP를 조회하는 명령어는?
#

nslookup : domain의 ip를 조회하는 명령어

+root folder에 위치한, vim /etc/host → hosts 파일에서 ip주소와 호스트 이름의 매핑 정보 확인 可

5. 웹서버 혹은 DB 같은 서버들을 확인하는 방법은? ping, telnet, nc 차이는?
#

ping : ICMP Protocol로 동작. 서버가 살아있는지만 확인 可

ping 8.8.8.8 or 1.1.1.1 : 인터넷 연결 확인 목적. 구글의 DNS 서버(8.8.8.8). ping을 날리면 ICMP 요청 패킷이 전달되고 구글 DNS 서버로부터 ICMP 응답 패킷을 받게 된다.

telnet : 로컬 영역이나 인터넷에 있는 원격 시스템의 가상 터미널(의 텍스트 기반 연결)을 제공하는 프로토콜. 주로 원격 로그인 및 원격 명령 실행에 사용. 보안상의 이유로 HTTPS, SSH 등으로 대체되는 경우가 多. TCP를 씀.

telnet [호스트명] [포트] ex) telnet example.com 80

  • yum install telnet : 기본적으로 없는 경우가 많음. 설치후 사용가능.

nc : 네트워크 관련 작업을 수행할 수 있는 다목적 도구입니다. 포트 스캐닝, 데이터 전송, 원격 쉘 생성 등 다양한 용도로 사용. TCP 또는 UDP 프로토콜을 사용하여 연결을 설정

  • 지정된 포트에서 데이터를 수신하고, 이를 클라이언트에게 전달.
  • 기본적으로 데이터 스트림을 읽고 쓰는 데 사용할 수 있어, 파일 전송이나 원격 커맨드 실행에도 유용.
  • 다양한 네트워크 작업을 스크립트에 통합하기 쉬운 유틸리티.

6. 내 서버가 잘 떠있는지, 현재 DB Connection 등을 확인하는 명령어는?
#

netstat : netstat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구 → ip addr

ex) Tomcat webserver를 download해 띄운 후, 확인하면 8080 port에서 확인 가능.

  • netstat options
    • l (listen) : 연결 가능한 상태
    • n (number port) : 포트 넘버
    • t (tcp) : tcp
    • u (udp) : udp
    • p : 프로그램 이름 / PID
    • a : 모두
    • i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인
    • r : 라우팅 테이블
    • s : 네트워크 통계

netstat -lntp : 간략화된 열람

netstat -an | grep [port 번호] : 특정 port로 연결된 connection 확인

7. 특정 프로세스를 확인하는 명령어는? PID 등 확인
#

ps -ef, ps aux : 어떠한 프로그램이 잘 떠있는지 확인하는 용도. tomcat이 잘 떠있나.

ex) ps -ef | grep “tomcat”

8. CPU, Memory, Disk 등 시스템 정보 등을 확인하는 명령어는?
#

top

sar 1 : 1초마다 조회

free -m : 메모리 사용중인 공간, 여유 공간 확인

df -h : GB 형태로 메모리 확인 가능

9. 서비스들은 어떻게 관리되고, 그와 관련된 명령어는?
#

systemd : 일부 리눅스 배포판에서 유닉스 시스템 V나 BSD init 시스템 대신 사용자 공간을 부트스트래핑하고 최종적으로 모든 프로세스들을 관리하는 init 시스템이다. systemd라는 이름 뒤에 추가된 d는 유닉스에서의 데몬(daemon)을 나타낸다.

systemd의 내용은 yum, apt-get install을 사용하면 자동으로 작성된다. custom하려면 알아야함.

  • init.d : 시스템 부팅시 실행할 데몬을 설정
  • upstart : 시스템에서 발생하는 이벤트에 반응하여 서비스를 시작하거나 중지

⇒ 현대의 Linux에서는 systemd로 통합되었다.

service : 서비스(데몬)를 관리하는 데 사용되는 명령

service tomcat status, start, kill

10. Linux 파일 권한 체계를 이해하는가? chmod, chown
#

chmod, chown : 파일의 권한, 소유자 변경 명령어

ex) yum으로 자동 설치한 tomcat만 봐도, default 사용자가 root가 아닌 tomcat으로 되어 있다.

11. 그 외에도 많은 명령어가 존재한다.
#

  • 리눅스 부팅 프로세스(리눅스 로그인 쉘 초기화 순서)

    리눅스에서 사용자가 로그인할 때 실행되는 쉘 초기화 파일의 실행 순서는 기본적으로 다음과 같습니다. 각 파일은 로그인 쉘과 비로그인 쉘에 따라 다르게 실행된다.

    • 로그인 쉘: 사용자가 시스템에 로그인할 때 시작되는 쉘
      • 환경 변수와 사용자 설정을 초기화하는 과정이 포함된다.
      • ex) ssh로 원격 서버에 접속하거나, tty(텍스트 모드 터미널)에서 로그인하는 경우
    • 비로그인 쉘 : 사용자가 터미널을 열거나, 스크립트를 실행할 때 시작되는 쉘
      • 로그인 과정 없이 바로 사용자가 설정한 환경을 사용합니다.
      • ex) GUI에서 터미널을 열 때.
    1. /etc/profile
      • 모든 사용자가 로그인할 때 실행되는 전역 설정 파일입니다.
      • 시스템 전반에 걸쳐 기본 환경 변수를 설정하며, 모든 사용자의 초기 환경을 구성합니다.
      • 이 파일은 기본적으로 모든 사용자에게 적용되며, 개인 사용자의 설정 파일이 존재하면 해당 파일로 제어를 넘깁니다.
    2. ~/.bash_profile
      • 사용자의 홈 디렉토리에 있는 개인 설정 파일입니다. 주로 bash 로그인 쉘에서 사용됨.
      • 일반적으로 사용자가 자신의 환경 변수를 설정하고, 시작할 프로그램이나 스크립트를 실행하기 위해 사용합니다.
      • 우선 순위: ~/.bash_profile이 존재하지 않으면 ~/.bash_login 파일이 실행되고, 이 또한 존재하지 않으면 ~/.profile이 실행됩니다.
    3. ~/.bash_login
      • ~/.bash_profile이 없을 경우 실행되는 파일로, 사용자별 환경 설정을 포함할 수 있다.
      • 이 파일이 실행되면, ~/.bash_profile과 마찬가지로 사용자의 환경을 설정하는 데 사용됩니다.
    4. ~/.profile
      • 사용자의 홈 디렉토리에 있는 또 다른 개인 설정 파일입니다. ~/.bash_profile~/.bash_login이 없을 때 실행됩니다.
      • sh 또는 bash와 같은 POSIX 호환 쉘에서 사용되며, 환경 변수를 설정하거나 프로그램을 시작하는 데 사용됩니다.
    5. ~/.bashrc
      • 비로그인 쉘에서 실행되는 설정 파일입니다. 일반적으로 터미널 세션을 시작할 때마다 실행됩니다.
      • 주로 별칭, 함수, 프롬프트 설정과 같은 사용자 정의 쉘 환경을 설정합니다.
      • 로그인 쉘에서 ~/.bash_profile이나 ~/.profile에서 ~/.bashrc를 호출하는 것이 일반적입니다. 예를 들어, ~/.bash_profileif [ -f ~/.bashrc ]; then . ~/.bashrc; fi와 같은 코드가 포함되어 있을 수 있습니다.
    6. /etc/bashrc
      • 모든 사용자의 비로그인 쉘에서 실행되는 전역 설정 파일입니다.
      • 사용자 정의 설정을 포함할 수 있으며, 일반적으로 시스템 전반에 걸쳐 기본 환경 변수를 설정합니다.
      • 각 사용자의 ~/.bashrc에서 호출되므로, 로그인 쉘과 비로그인 쉘 모두에 적용됩니다.
  • cron : 리눅스에서 정기적인 작업을 예약 실행하는 데 사용하는 스케줄러입니다. crontab 파일에 작업과 실행 주기를 설정하여, 특정 시간마다 스크립트나 명령을 실행할 수 있습니다.

  • fdisk : 디스크 파티션을 관리하는 명령어입니다. 파티션을 생성, 삭제, 변경하는 데 사용되며, MBR 파티션 테이블을 다룹니다. GPT(GUID Partition Table)는 다른 도구(gdisk 등)로 처리된다.

    • 주로 파티션을 나눌 때 사용한다.
  • mkfs : 리눅스에서 파일 시스템을 생성하는 명령어입니다. 파티션에 파일 시스템을 적용하기 위해 사용되며, mkfs.ext4, mkfs.xfs 등 다양한 파일 시스템 포맷을 지원합니다.

    • partition한 HDD를 포맷하기 위해 사용한다.
  • lvm(Logical Volume Manager) : 리눅스에서 디스크 관리를 보다 유연하게 할 수 있게 해주는 시스템입니다. 여러 디스크 파티션을 하나의 논리 볼륨으로 묶어, 파일 시스템 크기 조정이나 디스크 확장을 쉽게 할 수 있습니다.

    • lvm vs. partition : partition은 저장 크기가 고정되지만 lvm은 volume이라는 단위로 저장 장치를 다룸. 스토리지의 확장,변경에 유연하며, 크기 변경시 기존 데이터의 이전이 필요 X.
  • cloud-init : 클라우드 환경에서 가상 머신(VM)이나 인스턴스의 초기 설정을 자동화하는 도구입니다. 네트워크 설정, 패키지 설치, SSH 키 설정 등을 처리

  • Linux 핵심 디렉토리 구조 정리

리얼리눅스 레벨업 챌린지 - 간단실습
#

  • whatis vs. man : 명령어 한 줄 간단 설명 / 메뉴얼 길게
  • 포트번호 80번 충돌문제 어떻게 해결하죠? : netstat로 확인 → netstat systemctl stop nginx → start, status
  • 8080 포트번호 어떻게 차단하나요 ? : 레벨업 챌린지(웹기반 리눅스 실습) → iptables(Linux 기본 방화벽) / nc
    • nc → 특정 포트에 “직접 연결”
      • nc -l 8080 & : 스트용으로 포트 8080 리스너 실행 가능 → 실제 연결 : sudo ss -tplan | grep 8080
      • iptables : sudo iptables -A INPUT -p tcp --dport 8080 -j DROP : 특정 포트(8080) 차단 규칙 추가, reject 메시지 줄 수도 있음. = AWS Security Group에 상응.
      • nc로 연결 테스트 : nc -vz 127.0.0.1 8080
    • nmap → 여러 포트를 “탐색/정찰”

There are no articles to list here yet.