생활코딩 리눅스 요약 : 12 - 쉘 스크립트 ~ 17 - 항상 실행 (daemon, service)

Jeongtae Kim·2022년 7월 26일
2

서버

목록 보기
3/6
post-thumbnail

📒 생활코딩 리눅스 수업 소개

생활코딩의 운영자 이고잉 님이 2016년부터 2017년까지 만드신 리눅스 초보 수업으로 리눅스 뿐만 아니라 네트워크와 인터넷 등도 수업에 포함되어 있습니다. 이 글의 요약을 보는 것보다 동영상 수업을 듣는 것을 강력 추천합니다! 또한, 이고잉님이 작성하신 글들에 동영상의 추가 정보들을 더 적어 놓았습니다.
생활코딩 리눅스

📌 12 - 쉘 스크립트

쉘 스크립트 수업
쉘 스크립트(Shell Script) : 여러 명령들을 순차적으로 실행할 때, 그 명령들의 순서 혹은 스크립트를 어디간에 적어놓고 재사용 할 수 있게 합니다. 하루에 한 번 같이 자주 사용하는 명령어들이나 6개월에 한 번씩 사용하지만 아주 복잡한 명령어들을 저장할 수 있다는 것이 쉘 스크립트의 장점입니다.

준비

mkdir script
cd script
touch a.log b.log c.log

실습

쉘 스크립트를 사용하지 않을 때

  • 백업 폴더가 없을 때
mkdir bak
cp *.log bak
  • 백업 폴더가 있을 때
cp *.log bak


쉘 스크립트를 사용할 때

  • 스크립트 작성과 실행
nano backup	# 쉘 스크립트 파일 생성
#!/bin/bash
# bash 쉘을 통해 프로그램을 해석
if ! [ -d bak ]; then # 만약 bak 디렉토리가 없다면
        mkdir bak
fi	# if문 종료
cp *.log bak
chmod +x backup	# 모든 사용자에 backup 파일 실행 권한을 부여
./backup	# backup 파일 실행
  • 스크립트 작동 확인
    - 백업 폴더가 없을 때

    - 백업 폴더에서 한 파일이 없을 때

이 명령어들을 자주 사용할 때 쉘 스크립트를 만들어 놓고 실행하는 것이 더 효율적일 것입니다.

📌 13 - 디렉토리의 구조

디렉토리의 구조 수업
디렉토리는 데이터나 실행 프로그램 등의 정리정돈 수단입니다. 루트 디렉토리 바로 다음에는 여러 디렉토리들이 있습니다. 다음 사진에서 swapfile을 제외하고 모두 디렉토리입니다.

  • /bin : bin은 Binaries의 줄임말로 사용자가 사용 가능한 대부분의 프로그램들이 위치하고 있습니다.
  • /sbin : sbin은 System Binaries의 줄임말로 시스템을 관리하는 목적의 사람들이 사용하는 프로그램들이 위치하고 있습니다.
  • /etc : etc는 설정 파일이 있는 곳으로 운영체제 자체나 사용자가 설치한 프로그램들의 설정 파일들이 모여 있습니다.
  • /var : var은 Variable의 줄임말로 자주 바뀔 수 있는 파일들이 위치한 곳입니다.
  • /tmp : temp는 Temporary의 줄임말로 임시 파일들이 위치한 곳으로 재부팅할 때 사라집니다.
  • /home : home은 말 그대로 사용자들의 디렉토리로 home 디렉토리 안의 (특정 사용자의 이름) 디렉토리로 가면 특정 사용자의 디렉토리가 나옵니다. 자신의 디렉토리로 가고 싶다면 cd /home/(사용자 이름) 을 해도 되지만 cd ~를 해도 됩니다.
  • /opt : opt는 Optional의 줄임말로 추가적인 프로그램이 설치되는 곳입니다. 추가적인 프로그램을 설치할 때의 경로를 이곳으로 해도 좋습니다.
  • /usr : usr은 User 혹은 Universal System Resources의 줄임말로 usr 안에는 bin, sbin, lib, local 등의 디렉토리들이 있습니다. 시스템이 아닌 사용자들이 주로 사용하는 디렉토리입니다. 과거에는 용량이 적은 디스크를 사용했기 때문에 /usr 디렉토리를 사용하기도 했습니다.
  • /dev, /proc, /boot, /lib, /mnt, /media, /srv: 자주 사용하지 않거나 시스템적인 디렉토리들입니다.

📌 14 - 프로세스

프로세스 수업
컴퓨터에서 프로그램은 Storage(SSD, HDD 등)에 깔려 있습니다. 프로그램을 실행하기 위해서는 프로그램을 읽어서 Memory(RAM, ROM 등)에 적재시킵니다. 메모리에 올라온 프로그램을 Processor(CPU 등)가 읽어서 적혀있는대로 동작하면서 데이터를 처리합니다. 이때, 프로세서가 처리하고 있는 프로그램, 즉 실행되고 있는 프로그램들을 프로세스라고 합니다. 리눅스에서도 프로세스 리스트를 볼 수 있습니다.

  • ps : 리눅스의 기본 프로세스 리스트로 'ps'를 하면 윈도우의 작업관리자같이 사용자가 실행한 프로그램들을 볼 수 있습니다. 'ps aux'를 하면 사용자가 실행한 것 이외에도 시스템에서 실행한 프로그램들도 볼 수 있습니다. 예를 들어, 'ps aux | grep apache'를 하면 apache라는 문자가 포함된 프로세스를 볼 수 있습니다.

    위의 사진에서 906, 915, 916 같은 것들은 프로세스 구분자들입니다. 'sudo kill 프로세스 구분자' 를 하면 프로세스를 종료시킬 수 있습니다. 물론 apache 서버는 다시 실행시켜서 종료되지는 않습니다.
  • top : ps에 더 많은 정보와 표를 추가하여 ps보다 실용적인 프로세스 리스트입니다. 'top'을 통해 실행할 수 있습니다.
  • htop : top에 더 많은 정보와 프로그레스 바, 색 등을 추가하여 top보다 더 추천하는 프로세스 리스트입니다. 그럼 hhtop은 없나 'htop'을 통해 실행할 수 있습니다.
    • 설치가 되어 있지 않을 때
sudo apt-get update
sudo apt-get install htop

📌 15 - 파일을 찾는 법

파일을 찾는 법 수업
locate 패턴 : mlocate 데이터베이스에서 패턴에 적합하는 파일 경로들을 출력합니다.

  • 설치가 되어 있지 않을 때
sudo apt-get update
sudo apt-get install mlocate
  • 데이터베이스 업데이트
sudo updatedb

데이터베이스에 삭제된 파일도 있을 수 있기 때문에 locate를 사용하기 전에 데이터베이스를 업데이트 해야합니다. 다음 사진은 locate를 이용해 log 파일들을 찾은 모습입니다.

find (경로) (패턴) : 직접 디렉토리를 돌아다니면서 찾기 때문에 속도는 더 낮지만 다양한 사용법들이 있어 활용성이 좋습니다. 참고
다음 사진은 find를 이용해 home 디렉토리의 txt 파일들을 찾은 모습입니다.

whereis 명령어명 : 명령어의 파일 경로를 찾아줍니다. 다음 사진은 ls라는 명령어의 파일 경로를 찾은 모습입니다.

환경변수 $PATH : $PATH에 있는 파일 경로 안에 명령을 넣어서 그 명령의 전체 경로를 적지 않아도 되게 합니다. 리눅스에서 자체적으로 만든 환경변수이기도 합니다. 다음 사진은 제 PATH 변수입니다. ':' 으로 구분하고 PATH 안에 '/usr/bin' 이 있기 때문에 ls를 '/usr/bin/ls' 로 안 실행해도 되고 'ls' 만 써서 실행해도 됩니다.

📌 16 - 백그라운드 실행

백그라운드 실행 수업
GUI 환경에서 프로그램 전환을 할 수 있듯이 CLI 환경에서도 프로그램 전환을 할 수 있습니다. 제가 nano를 실행한 상태에서 Ctrl + Z(nano에서는 Ctrl + T and Ctrl + Z)를 누르면 이렇게 나오며 nano가 백그라운드로 보내집니다.

여러 프로그램들을 백그라운드에 보낼 수 있고, 백그라운드에 보내진 프로그램들의 목록을 보려면 'jobs' 를 치면 됩니다.

'fg'를 치면 나중에 온 순서로 백그라운드 프로그램을 포그라운드로 전환시킵니다. 또, 복잡한 명령을 실행할 때 명령 뒤에 '&' 를 넣어서 백그라운드로 보내며 실행할 수도 있습니다. 명령이 끝났다면 끝났다고 알려주기도 합니다.

📌 17 - 항상 실행 (daemon, service)

항상 실행 (daemon, service) 수업
데몬(Daemon) : 항상 실행되어 있으면서 사용자의 요청을 기다리다가 사용자의 요청이 오면 응답을 보내주는 프로그램입니다. 클라이언트인 웹 브라우저와 서버인 웹 서버의 상호작용 속에서 웹 서버는 데몬이 됩니다.

준비

sudo apt-get update
sudo apt-get install apache2

실습

'/etc/init.d' 에 있는 프로그램들은 데몬 프로그램들입니다.

sudo service apache2 start

데몬 프로그램인 아파치를 시작했습니다. 프로세스 리스트에서 아파치를 찾을 수도 있습니다.

sudo service apache2 stop

데몬 프로그램인 아파치를 멈추었습니다. 프로세스 리스트에서 아파치가 사라진 것을 보실 수 있습니다. 단 하나의 프로세스는 grep에 대한 프로세스입니다.

또한, CLI 기준으로 /etc/rc3.d, GUI 기준으로 /etc/rc5.d에서 S로 시작하는 것은 부팅하자마자 시작되는(Start) 프로그램이고, K로 시작하는 것은 부팅하자마자 시작되지 않는(Kill) 프로그램입니다. 01같은 숫자는 우선순위입니다.

다음 시간에 계속 ...

profile
유용할지도 모른다.

0개의 댓글