vi에디터?

 vi는 명령어 기반의 에디터로, 일반적인 그래픽 사용자 인터페이스(GUI. ex : MS word, 한글)와는 다르다. vi는 명령 모드와 편집 모드를 사용하여 파일을 편집한다.

  • 명령 모드(Command mode): vi 에디터를 시작하면 기본적으로 명령 모드 상태로 설정된다. 이 모드에서는 파일 내용을 보거나 검색하는 등의 기능을 수행할 수 있다.
  • 편집 모드(Insert mode): 편집 모드로 전환하려면 명령 모드에서 "i"나 "a"를 입력해주면 된다. 이 모드에서는 파일 내용을 직접 편집할 수 있다.
  • 종료 모드(Last line mode): ":"(콜론)을 입력하면 마지막 행 모드로 전환된다. 이 모드에서는 파일 저장, 종료, 검색 및 다양한 설정을 수행할 수 있다.

이제 이 vi에디터를 활용하기 위해 알아야할 것들을 살펴보자.

 

vi 사용법

에디터 실행

vi 파일이름

이 명령어를 입력하면, vi 에디터가 실행되고 파일이 열린다. 만약 해당 파일이 존재하지 않으면, 새로운 파일을 만들어서 연다.

 

 

명령 모드(Command mode)

vi를 실행하면, 기본적으로 명령 모드 상태로 시작한다. 이 모드에서는 파일 내용을 보거나 검색할 수 있다.

 

 

파일 내 검색

파일 내에서 특정 문자열을 검색할 때는 명령 모드에서 "/"를 입력하고 검색어를 입력한다.

 

예를 들어, "hello"라는 문자열을 검색하는 방법은 이렇다.

/hello

입력하고나면, 파일 내에서 "hello" 문자열을 검색하고, 해당 문자열이 나타나는 곳으로 커서가 이동한다.

 

 

파일 저장 및 종료

i 에디터에서 파일을 저장하려면, 명령 모드에서 ":"(콜론)을 입력하고 "w"를 입력해주면 된다.

 

예를 들어, 파일 이름이 "example.txt"인 파일을 저장하는 방법은 이렇다.

:w example.txt

 

파일을 저장하고 vi를 종료하려면, 명령 모드에서 ":"(콜론)을 입력하고 "wq"를 입력해주면 된다.

:wq example.txt

 

기타 설정들

  • 라인 넘버 표시하기
:set number
  • 라인 넘버 숨기기
:set nonumber

 

 

편집 모드(Insert mode)

vi 에디터에서 파일을 편집하려면 명령 모드에서 "i"를 입력해 편집 모드(Insert mode)로 전환해줘야만 한다.

 

편집 모드 -> 명령 모드 전환

 

ESC키를 눌러주면 된다.

 

 

비주얼 모드(Visual mode)

비주얼 모드(Visual mode)는 명령 모드에서 "v"를 입력 전환한다. 

 

텍스트 선택하기

비주얼 모드에서는 방향키를 사용하여 텍스트를 선택할 수 있다.

 

선택한 텍스트 복사하기

비주얼 모드에서 선택한 텍스트는 "y"키를 누르면 복사할 수 있다.

 

기타 단축키들

  • 커서 이동하기
    • h: 왼쪽으로 한 칸 이동
    • j: 아래로 한 칸 이동
    • k: 위로 한 칸 이동
    • l: 오른쪽으로 한 칸 이동
    • 0: 줄의 맨 앞으로 이동
    • $: 줄의 맨 뒤로 이동
    • w: 다음 단어로 이동
    • b: 이전 단어로 이동
  • 삭제하기
    • x: 커서가 위치한 글자 삭제
    • dd: 커서가 위치한 줄 삭제
  • 되돌리기 및 다시 실행하기
    • u: 되돌리기
    • Ctrl+r: 다시 실행하기

데몬? 서비스?

리눅스에서 데몬(Demon)은 백그라운드에서 실행되는 프로그램을 말한다. 리눅스 시스템에는 많은 데몬들이 있고, 이 데몬들은 시스템의 여러 기능을 제공하는 역할을 한다. 예를 들어서, httpd 데몬은 웹 서버 기능을 제공하고, cron 데몬은 작업 스케줄링 기능을 제공한다. 그 외에도 하드웨어 장치 관리, 마운트(USB, HDD, 등 물리적인 장치를 디렉토리에 연결해주는 작업), 프로세스간 통신, 등 많은 일들을 한다.

 

서비스(Service)는데몬의 일종으로 특정한 데몬의 실행을 관리하는 기능을 한다. 서비스를 이용해서 다른 데몬을 손쉽게 시작하거나 중지할 수 있고, 부팅 시 자동으로 실행되도록 설정할 수도 있다.

 

데몬 예시 : httpd

httpd는 Apache HTTP Server의 데몬 이름이다. Apache HTTP Server는 인터넷 상에서 웹 서버를 운영하기 위한 프로그램 중 하나로, 전 세계적으로 많이 사용되는 웹 서버 중 하나다. httpd 데몬은 백그라운드에서 클라이언트로부터 HTTP 요청을 받아들여, 이에 따른 응답을 반환한다.  

 

#시험용 html페이지를 만든다.
$ echo "<html><body><h1>시험용 html 페이지 <h1><body><html>" > index.html

#html페이지가 생성됐는지 확인한다.
$ ls
index.html

#웹 서버를 실행하고, 8888번 포트를 통해서 접속 할 수 있도록 한다.
$ busybox httpd -h . -p 8888

#웹서버에 접속해 웹 서버가 제대로 열렸는지 확인한다.
$ curl http://localhost:8888
<html><body><h1>시험용 html 페이지 <h1><body><html>

#프로세스 확인 명령을 해서 httpd 데몬이 실행중인지 확인한다.
$ ps aux | grep httpd
ubuntu     10876  0.0  0.0   2456    76 ?        Ss   13:25   0:00 busybox httpd -h . -p 8888
ubuntu     10884  0.0  0.2   7004  2240 pts/0    S+   13:26   0:00 grep --color=auto httpd

#kill 명령어를 사용해 확인한 pid(process id)로 프로세스를 종료시킨다.
$ kill -9 10876

#웹 서버에 다시 접속하면, 접속이 불가능 한 것을 확인할 수 있다.
ubuntu@patient-rat:~$ curl http://localhost:8888
curl: (7) Failed to connect to localhost port 8888 after 0 ms: Connection refused

 

데몬 예시 : cron

cron은 시스템에서 주기적으로 실행되는 작업을 관리하는 데몬이다. cron 데몬을 사용하면, 특정 시간에 특정 작업을 실행하거나, 주기적으로 반복되는 작업을 실행할 수 있다.

예를 들어서, 백업파일을 만드는 스크립트를 매일 자정에 실행하도록 하거나, 아래처럼 매 분마다 날짜와 시스템 가동시간을 파일에 기록하는 명령을 실행할 수 있다.

#crontab -e를 사용해 cron으로 실행할 명령을 입력할 수 있다. 여러 에디터 중 하나를 선택해서 작성할 수 있다.
$ crontab -e
no crontab for ubuntu - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 1

#에디터를 열면
# * * * * * echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log
#를 입력해준다.
#이 명령은 
#'* * * * *'-> 매 분마다
#'echo $(/bin/date) - $(/usr/bin/uptime)date' -> date 명령의 출력과 uptime 명령의 출력을 합쳐서
# '>> ~/uptime.log' -> ~/uptime파일에 기록한다.
#라는 의미이다.

#에디터 사용이 끝나면 새 스케쥴 명령이 성공적으로 등록된 것을 확인할 수 있다.
crontab: installing new crontab

#시간이 지난 뒤에 uptime.log 파일을 확인해보면 작성한 예약명령이 정상적으로 작동하는 것을 확인할 수 있다.
$ cat uptime.log
Mon Mar 13 14:08:01 KST 2023 - 14:08:01 up 1 day, 23:54, 1 user, load average: 0.00, 0.00, 0.00
$ cat uptime.log
Mon Mar 13 14:08:01 KST 2023 - 14:08:01 up 1 day, 23:54, 1 user, load average: 0.00, 0.00, 0.00
Mon Mar 13 14:09:01 KST 2023 - 14:09:01 up 1 day, 23:55, 1 user, load average: 0.00, 0.00, 0.00
Mon Mar 13 14:10:01 KST 2023 - 14:10:01 up 1 day, 23:56, 1 user, load average: 0.00, 0.00, 0.00
Mon Mar 13 14:11:01 KST 2023 - 14:11:01 up 1 day, 23:57, 1 user, load average: 0.00, 0.00, 0.00

#가만 냅두면 uptime.log파일에 내용이 계속 쌓이게 되므로 crontab을 초기화 시켜줘야만 한다.
ubuntu@patient-rat:~$ crontab -r
ubuntu@patient-rat:~$ crontab -l
no crontab for ubuntu
  • 명령을 반복할 시간을 지정해주고 싶을 때

앞서 입력했던 명령어의 ' * * * * * ' 부분은 순서대로 분, 시각, 날짜(1달 기준), 달, 날짜(일주일 기준)을 말한다.

예를 들어서 ' 0 22 * * 1-5 ' 는 매주 월요일부터 금요일 22시 0분을, ' 5 4 * * sun' 은 매주 일요일 04시 5분을 말한다.

다른 예시는 https://crontab.guru/  에서 확인할 수 있다.

서비스 관리 (systemctl)

모든 데몬의 목록은 systemctl 명령으로 확인할 수 있다,

아래는 systemctl명령어의 간단한 사용 예이다.

#cron 데몬의 상태를 확인한다.
$ systemctl status -l cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-03-09 12:00:23 KST; 4 days ago
       Docs: man:cron(8)
   Main PID: 666 (cron)
      Tasks: 1 (limit: 1096)
     Memory: 2.5M
        CPU: 630ms
     CGroup: /system.slice/cron.service
             └─666 /usr/sbin/cron -f -P

Mar 13 14:08:01 patient-rat CRON[10972]: pam_unix(cron:session): session closed for user ubuntu
Mar 13 14:09:01 patient-rat CRON[10979]: pam_unix(cron:session): session opened for user ubuntu(uid=1000) by (uid=0)
Mar 13 14:09:01 patient-rat CRON[10980]: (ubuntu) CMD (echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log)
Mar 13 14:09:01 patient-rat CRON[10979]: pam_unix(cron:session): session closed for user ubuntu

systemctl 명령어는 위에 있는 서비스 상태 확인 기능을 포함해서

  • 서비스 관리 (시작, 중지, 다시 시작, 재시작, 등)
  • 서비스 로그 보기
  • 시스템 로그 보기
  • 부팅 시 서비스 자동 실행 여부 확인

같은 기능들도 수행한다.

 

아래는 systemctl의 주요 하위 명령어들이다.

하위 명령어 설명
start 지정된 서비스를 시작한다.
stop 지정된 서비스를 중지한다.
restart 지정된 서비스를 다시 시작한다.
reload 지정된 서비스를 다시 로드한다.
status 지정된 서비스의 상태를 표시한다.
enable 지정된 서비스를 부팅 시 자동으로 시작되도록 설정한다.
disable 지정된 서비스를 부팅 시 자동으로 시작하지 않도록 설정한다.
mark 지정된 서비스를 비활성화 하고 완전히 차단한다.
unmask 지정된 서비스를 다시 활성화 한다.
is-enabled 지정된 서비스가 부팅 시 자동으로 시작되는지 여부를 확인한다.
list-units 현재 활성화된 모든 유닛(서비스, 타이머, 디바이스, 등)을 표시한다.
list-sockets 현재 활성화된 소켓을 표시한다.

 

현재 서비스를 제공하는데 필요한 서버에 사용하는 운영체제는 Linux의 점유율이 압도적이다.

 

미국의 비즈니스 기술 뉴스 웹사이트인 ZDNet에 따르면 세계 상위 백만개의 서버 중에서 약 96.3%가 리눅스 운영체제를 사용하고 있다.

https://www.zdnet.com/home-and-office/networking/can-the-internet-exist-without-linux/

 

​Can the Internet exist without Linux?

Yes, but it wouldn't be the Internet you know.

www.zdnet.com

 

여기에는 여타 다른 운영체제와는 차별화되는 장점이 있다.

  • 오픈 소스이기 때문에 파생되는 압도적인 경제성, 뛰어난 보안성과 활성화된 커뮤니티 지원

 오픈 소스 소프트웨어는 일부 예외를 제외하고 대부분 비용 없이 제품을 사용할 수 있고, 소스 코드가 공개되어 있다.

일반적으로 오픈 소스라면 보안에 취약할 거라고 생각할 수도 있다. 하지만 리눅스처럼 어마어마한 사용자들이 있는 오픈소스의 경우에는 거대한 사용자 규모에 걸맞은 활발한 커뮤니티 활동이 오히려 모든 것이 투명하게 공개되어 있는 소스 코드의 취약점들을 빠르게 파악하고 대처할 수 있다는 장점이 있다. 

 이 커뮤니티는 리눅스의 높은 보안성에 기여할 뿐만 아니라, 리눅스를 사용하고 있는 사람들이 어떤 문제에 막혀 작

작업하는데 곤란한 상황을 구원해줄 동아줄이 되어준다.

  • 편한 유지보수, 뛰어난 안정성

 현재 서비스 제공에 사용되는 서버 인프라는 각기 다른 역할을 담당하는 여러대의 서버를 동시에 운영하는 경우가

많은데, 여기에는 오랜 시간동안 안정적으로 서버가 동작하는 것이 매우매우 중요하다. 그런 면에서 최초 부팅 수           

시스템이 계속 켜져 있는 시간인 업타임(uptime)이 다른 운영체제보다 훨씬 우월하다.

 예를 들어 윈도우의 경우에는 보안패치를 적용하고 시스템의 재부팅이 필요한 경우가 많은데, 리눅스 애초에 설계 단계에서부터 시스템 충돌이나 불안정성 문제가 발생하지 않도록 되어있기 때문에 시스템을 재부팅해야하는 경우가 매우 드물다.

 그래서 1년 365일 24시간 내내 최대한 서비스를 많은 시간에 제공해야하는 서비스. 즉, 높은 가용성을 요구하는 서비스의 경우에 리눅스가 적합하다.

  • 어떤 하드웨어 환경에서도 작동할 수 있는 높은 이식성

 인텔의 x86 아키텍처같은 널리 쓰이는 아키텍처 외에도 라즈베리파이, 슈퍼 컴퓨터와 같은 환경에서도 문제없이 동작한다.

 이런 높은 이식성과 오픈 소스로서 가지는 자유로운 커스터마이징이 시너지 효과를 일으켜 결국 상위 500대 슈퍼컴퓨터운영체제 점유율 100%를 차지해버렸다. 

 

 

      https://www.top500.org/statistics/list/ 

 

List Statistics | TOP500

TOP500 Release November 2022 June 2022 November 2021 June 2021 November 2020 June 2020 November 2019 June 2019 November 2018 June 2018 November 2017 June 2017 November 2016 June 2016 November 2015 June 2015 November 2014 June 2014 November 2013 June 2013 N

www.top500.org

 

물론 다른 이유도 있을 수 있지만 이들 이유만으로도 서버시장에서 다른 운영체제보다 리눅스가 우월한 지위에 있다는 것에 대한 설명은 충분할 것이다.

+ Recent posts