본문 바로가기

Infra

[서버] 리눅스 기본

1. 리눅스 기초

  • 디렉토리 삭제 시 -r 재귀옵션으로
    rm -r [디렉토리]
  • 보기 상태에서 키워드 검색은 /키워드 입력 후 n 으로 탐색
  • 유닉스 계열의 주요 특징 중 하나는 다중 사용자 시스템. 즉 하나의 OS를 여러 사람이 나누어 씀
    슈퍼 유저 권한으로 실행하려면 sudo 명령어 사용 예: sudo apt-get insall git
  • nano 에디터 사용하기
    nano 명령어 입력 후 편집 상태에서 하단의 명령모음 사용. ^는 Ctrl을 의미
    Ctrl + 6을 누르면 Shift 상태로 전환하여 블록지정 가능
  • 패키지 매니저
    프로그램을 다운받아 설치하기 위해 apt나 yum과 같은 패키지 매니저 사용
  • 다운로드 방법 - wget

2. IO Redirection

  • 프로세스의 Output을 모니터 출력이 아닌 파일에 저장하려면 > 사용
    예) ls -l > result.txt Standard Output을 저장
    예) ls -l 1> result.txt 2> error.log
  • Input은 < 사용
    예) cat 프로세스에 StandardInput으로 hello.txt를 주려면 cat < hello.txt
  • Redirection 결과를 덧데려면(append ) >> 사용
  • Standard Output vs Standard Error

3. 쉘과 쉘스크립트

  • 커널은 하드웨어를 직접적으로 제어하는 프로그램. 쉘은 커널을 둘러싼 껍데기이며 여러 종류가 있음. 종류를 확인하려면 echo $SHELL 예) bash, zsh
  • 사용자는 명령어를 쉘에 요청 → 쉘은 커널에 요청 후 → 결과를 리턴
  • 명령(프로그램)은 /bin 하위에 위치
    실행권한(x) 을 추가하게 되면 /bin/bash test.sh 로 bash명령어를 붙여주지 않고도 ./test.sh 로 프로그램을 실행할 수 있게된다.
  • 쉘 스크립트는 쉘 명령어들의 각본임. 첫 번째 줄은 명령어 해석기를 명시하는 약속
  • #!/bin/bash if ! [ -d bak ]; then mkdir bak fi cp *.log

4. 디렉토리 구조와 파일찾는 법

4.1 디렉토리 구조

  • /bin : 사용자 바이너리. 즉 프로그램 (예: ps, ls, grep)
  • /sbin : 시스템 바이너리
  • /etc : 설정파일
  • /var : 변수 파일. (예: 로그와 같은 바뀔 수 있는 파일들)
  • /tmp : 임시파일
  • /usr : 사용자 프로그램
  • /home : 사용자들의 디렉토리

4.2 파일 찾는 법 - locate와 find

  • locate
    데이터베이스(mlocate)를 뒤져서 찾음. 하루에 한 번 정도 리눅스가 정돈 작업 함.
    예) locate *.log
  • find
    실제로 디렉토리를 뒤짐. locate보다는 성능이 뒤지지만 실시간임. 자세한 옵션은 매뉴얼 참고
    예) sudo find . -name target.txt
    예) find ~ *.log

4.3 파일 찾는 법 - whereis와 $PATH

  • 프로그램 파일을 찾을 때 whereis 명령어 사용. 결과로 실행 파일과, 매뉴얼 파일 위치 리턴
    예) whereis ls
  • 환경변수 $PATH에 담긴 경로의 프로그램은 전체경로를 지정하지 않아도 호출 가능.

5. 프로세스와 실행

  • 프로그램은 Storage(SSD, HDD)에 있다가 실행 요청하면 Memory(RAM)에 적재되어 Processor(CPU)에 의해 실행되는데 이 실행되는 프로그램을 프로세스라고 함
  • 명령어가 컴퓨터 상에 존재하는 방식은 프로그램. 그 프로그램은 스토리지에 저장됨

5.1 프로세스 모니터링

  • 현재 실행중인 프로세스 목록을 보려면 ps 명령어 또는 top 명령어 또는 htop 명령어 사용
    ps aux : 백그라운드 실행 프로세스 포함 출력
    sudo kill [프로세스번호] : 강제로 프로세스 죽이기

5.2 백그라운드 실행

  • Ctrl + z : 백그라운드로 이동
  • fg : 포그라운드 이동 (forground의 약자임)
    fg %번호 : 번호에 해당하는 프로그램으로 이동
    kill %번호 : 번호에 해당하는 프로그램 멈춤
  • jobs : 백그라운드 실행중인 프로그램 확인
  • 실행할 때부터 즉각 백그라운드로 보내고 싶으면 (예: 오래걸리는 작업) 끝에 &를 붙인다.
    예) ls -alR / > result.txt 2> error.log &

5.3 데몬의 개념

  • 데몬은 항상 실행되어 있는 프로그램. Web Server 프로그램도 데몬
  • 데몬 프로그램은 /etc/init.d 하위에 위치

5.4 service와 자동실행

  • 서비스 키고 끄기
    sudo service [서비스명] start
    sudo service apache stop
  • 서버가 콘솔로 부팅될 때 자동으로 실행 또는 중지시키려는 데몬이 있다면 /etc/rc3.d 폴더 하위에 링크를 추가한다. 만약 운영체제가 GUI 방식으로 구동된다면 /etc/rc5.d 폴더에 추가

5.5 정기적 실행 cron

  • crontab -e : 크론 작업 편집
    crontab -l : 크론작업 목록 확인
  • 예) 1/* * * * date >> date.log 2>&1 : 1분에 한 번씩 날짜를 date.log파일에 append. 에러발생 시에도 date.log에 표준에러 출력

5.6 쉘을 시작할 때 실행

  • 홈 하위 경로 .bashrc 파일에 시작 스크립트를 작성

6. 사용자

  • UNIX는 다중 사용자 시스템임. 사용자는 크게 두 가지 Super User(Root User)와 User가 있음
  • 터미널 명령어 입력 라인에 $로 되어있으면 일반유저, #은 슈퍼유저
  • id : 현재 사용자 확인
  • who : 현재 접속한 사용자 목록 확인
  • sudo passwd -u root : 슈퍼유저에 락을 풀기 (unlock)
    sudo passwd -l root : 슈퍼유저에 락 걸기 (lock) 슈퍼유저 사용 불가능하게 됨

7. 권한 (permission)

  • 권한을 변경하는방법 - chmod
    예) chmod o-r perm.txt : other에 대해세 perm.txt파일의 read 권한 빼기 (user는 u)
  • 실행권한(x) 을 추가하게 되면 /bin/bash test.sh 로 bash명령어를 붙여주지 않고도 ./test.sh 로 프로그램을 실행할 수 있게된다.
  • 디렉토리 하위 모든 디렉토리의 권한을 수정하려면 -R 옵션을 추가한다. R은 Recursive 재귀.
  • chmod 명령어를 octal mode로도 실행할 수 있다.
    예) chmod 755 perm.txt
  • ls했을 때 결과에서 맨 앞의 type으로 디렉토리/파일 여부를 확인하고
    가운데 owner와 group으로 소유자를 확인한다.

8. 그룹

  • sudo groupadd [그룹명]
  • sudo usermod -a -G [사용자명]
  • chown root:developer . : 현재 디렉토리의 소유자를 root와 그룹 developer로 바꿔라

9. 인터넷, 네트워크 그리고 서버

9.1 인터넷

  • 자신 컴퓨터의 IP 조회 방법
    (방식1) curl ipinfo.io/ip : 어떤 public IP로 접속했는 지 확인
    (방식2) ip addr : 실제 IP확인. inet addr 옆 숫자 확인
    1과2의 결과가 같을 수도 있고 다를 수도 있음. 보통은 라우터를 사용하여 사설IP사용

9.2 apache

  • 어떤 서버를 사용하건 대부분의 웹서버 설정 파일은 etc 하위에 있음
    /etc/apache2/apache2.conf
    reverse proxy설정(proxy_pass) 등 포함
  • 웹페이지를 찾는 최상위 디렉토리인 document root 는 설정파일에서 확인 (apache 기본은 /var/www/html임)

9.3 원격제어 - ssh

  • 유닉스계열 서버에는 ssh server 프로그램이 기본적으로 설치됨. ssh client로 접속
  • 예시) ssh egoing@192.168.0.65
  • ssh는 22번 포트를 기본으로 사용. ssh -p 22 생략

9.4 포트(port)

  • 포트는 일종의 구멍. 이론상 6만5천개 가량 할당 가능
  • ssh server는 22번 포트, web server는 80번 포트에 기본으로 설치. 1024까지는 Well known 포트
  • 공유기에는 웹서버가 기본적으로 설치돼 있음. 공유기에 할당된 안쪽에서만 통용되는 IP를 default gateway 라고 하며 이 IP를 알아내려면 ip route 명령어 사용
  • 포트포워딩

10. 도메인 (domain)

  • 인터넷에 접속하는 모든 컴퓨터에는 hosts파일이 존재. 리눅스의 경우 /etc/hosts 경로
  • DNS 서버 정보 확인 : cat /etc/resolv.conf
  • 도메인의 IP를 질의하기 위해선 host 명령어 사용
    예) host www.naver.com
  • 도메인을 구입하는 것과 DNS 서버를 분리해서 관리할 수 있음

11. 인터넷을 통한 서버간 동기화 (rsync)

  • 예) src 밑의 모든 파일들을 dest 폴더에 동기화 (a 옵션은 archive모드)
    rsync -a src/ dest
  • 예) 원격 동기화
    rsync -azP ~/rsync/src egoing@192.168.0.65:~rsync/dest (z는 압축모드, P는 progress bar 표시)
  • rsync는 증분백업을 해서 추가되거나 삭제된 것만 sync함

12. 로그인 없이 로그인 하기 (ssh key)

  • (과정1) ssh-keygen 명령어 실행하면 홈디렉토리 하위 .ssh 디렉토리에 ssh 파일 생성
  • (과정2) 1에서 만들어진 공개키 id_rsa.pub 을 접근하고자 하는 컴퓨터의 홈디렉토리/.ssh/authorized_keys에 붙여넣어야 하는데 이를 간단하고 실수없이 하고자 ssh-copy-id 명령어 활용
    예: ssh-copy-id ec2-user@192.168.0.67
  • (과정3) 대상 컴퓨터에서 카피가 잘 됐는 지 확인
    예: cat /home/ec2-user/.ssh/authorized_keys
  • 퍼블릭 키를 추가하면 패스워드를 묻지 않고 rsync 동작
    cron과 같은 도구를 이용해서 정기적으로 백업과 같은 rsync 동작 처리 가능해짐
  • 비대칭키는 private키로 암호화한 정보를 public키로 복호화하는 방식이며 대표 개념으로 RSA가 있다.

○ 사용팁

  • sudo !! : 직전에 입력했던 명령어를 슈퍼유저로 실행

출처 - 생활코딩 Linux 강좌