Linux 완전 기초! 파일 시스템, 프로세스 및 서비스, 로그파일 관리까지!

4 minute read

Linux를 잘 모르고 다루다보니 항상 stackoverflow를 활용해 주먹구구식으로 문제점들을 해쳐나갔다. 이제는 linux를 공부해 기본적인 것들을 알아야겠다고 느껴 공부하게 되었다.

Why Linux?

일관적인 운영 모델

어떤 버전의 Linux 배포판(CentOS, Debian 등등)이든 상관없이 기본적인 command line 문법, 프로세스 관리, 네트워크 관리 등 기본적인 조작법이 같다. 따라서 효율적인 개발을 통해 많은 비용을 절감할 수 있다.

광범위성

Linux 운영체제는 매우 광범위하게 이용된다. 슈퍼 컴퓨터에서 초소형 기기까지 모든 분야에 걸쳐 사용되고 있다.

오픈소스와 커뮤니티

매우 활발하게 오픈소스가 개발되고 있으며 커뮤니티도 운영되고 있다.

모든 네트워크 기능

매우 오랜 기간동안 강력한 네트워크 기능들이 만들어졌다. 따라서 routing, briding, DNS, DHCP, virtual networking 등 거의 모든 네트워크 기능들을 사용할 수 있다.

Package management

몇 가지 명령어로 매우 쉽게 새로운 서비스들을 설치할 수 있다. 간단하게 Apple의 App store, 안드로이드의 Play Store라고 비유할 수 있다. 패키지 매니저의 예시로는 apt, rpm, yum 등이 있다.

리눅스 사용하기

SSH 서버 접속

리눅스 버전 확인하기

리눅스에는 매우 많은 버전이 있기 때문에 때때로 자신의 리눅스 버전을 확인해야 할 때가 있다. 이때 uname 이라는 명령어를 사용한다.

$ uname -a

또한 hostname, machine ID 등을 확인하기 위해서는 hostnamectl 이라는 명령어를 사용한다.

$ hostnamectl


Static hostname: debian
Icon name: 
...
Machine ID:
Operating System:
Kernel:
Architecture:

hostname이란?

쉽게 말해 IP주소 대신 사람이 읽기 쉬운 형식으로 지어지는 고유 id 값이다
자세한 사항은 다음 링크를 잠고하여라: https://ko.wikipedia.org/wiki/트명

리눅스 파일 시스템

파일 시스템은 directory, 혹은 folder라는 개념을 사용해 이뤄진다. 윈도우에서의 ‘파일 탐색기’를 생각하면 된다. 윈도우에서는 저장소의 가장 상위 지점이 ‘C: drive’와 같은 특정 드라이브 명이다. 하지만 Linux의 파일 시스템 가장 상위 지점은 “/”, 혹은 “root”이다. 전체적인 구조는 다음과 같다.

출처: David M. Davis. Linux Networking 101 ActualTech Media.

기본적인 파일 시스템 관련 명령어

  • pwd
  • ls. 파일에 관한 메타 데이터를 같이 확인하고 싶다면, ls -la
  • cd
  • rm
  • mkdir, rmdir

Linux 파일 시스템의 중요한 디렉토리들

  • /bin, /sbin, /usr/bin, and /usr/sbin : 실행 가능한 프로그램들이 저장되는 곳.
  • /dev : 하드웨어 기기들을 나타내는 파일들이 저장되는 곳. 예를 들어 플로피 디스크를 갖고 있다면, /dev/fd0 디렉토리의 fd0
  • /etc : Configuration 파일이 저장되는 곳.
    • /home : 각각의 사용자에 대해 사용자 디렉토리가 저장되는 곳.
    • /var : 로그 파일과 같은 variable-length 파일들이 저장되는 곳.

더 자세한 사항을 알고 싶다면 FHS(file system Hierarchy Standard)를 살펴보십시오

프로그램 실행을 어떻게 하는가?

터미널에서 작업을 해봤다면 cat, cp, ps와 같은 명령어를 사용했을 것이다. 놀라운 사실은 이런 명령어조차 하나의 응용 프로그램이라는 것이다. 이와 같은 시스템 응용 프로그램은 /sbin, 혹은 /usr/sbin 과 같은 디렉토리 안에 있다. 하지만 위의 명령어를 사용하기 위해서 해당 디렉토리로 이동할 필요가 없다. 이를 가능하게 하는 것이 $PATH 변수이다.

CLI로 명령어를 치게 되면, $PATH 변수에 저장된 디렉토리 경로들을 검색하여 해당하는 프로그램을 실행시킨다.

$PATH 변수는 다음과 같이 확인할 수 있다.

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

만약 실행시키고자 하는 프로그램이 $PATH 안에 없다면, 직접 해당 프로그램이 존재하는 디렉토리로 이동하여 실행을 시키거나, 실행시키고자 하는 프로그램의 전체 경로를 입력해주어야 한다.

사용하는 프로그램 경로 확인하기

실행하고자 하는 프로그램이 어떤 경로에 있는지 확인하기 위해서는 which 명령어를 사용하면 된다. 예를 들어 python에는 다양한 버전이 있으며, 사용하고 있는 python이 어느 경로의 python인지 확인하기 위해 사용한다.

$ which python
/usr/bin/python

프로그램 설치

  • apt update : 패키지 목록 업데이트
  • apt install (프로그램명) : 프로그램 다운로드
  • apt show (프로그램명) : 프로그램 인스톨 확인

Linux Processes, Programs, and Services

프로그램을 실행시킬 때 터미널에서 정보를 주고받을 것이다. 하지만, 이 프로그램을 background에서 실행하기 원할 수 있다(service라 부른다). 이 경우, background에서 실행을 한 뒤, 완료되면 알림을 받게 된다.

하지만 background에서 진행중인 process 를 어떻게 확인할 수 있을까? 주로 -ef라는 flag와 함께 ps 명령어를 사용해 확인할 수 있다.

$ **ps -ef**
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jul05 ?        00:00:02 /sbin/init
root         2     0  0 Jul05 ?        00:00:00 [kthreadd]
root         4     2  0 Jul05 ?        00:00:00 [kworker/0:0H]
...
  • UID : user identifier. 사용자 식별자
  • PID : process identifier. 프로세스 식별자

만약 여러분이 실행 중인 프로세스들을 보고 싶다면 ps 명령어를 사용해라.

$ ps
PID TTY          TIME CMD
11637 pts/1    00:00:00 bash
11649 pts/1    00:00:00 ps

위 예시는 사용자가 bash shell을 쓰고있고, ps 명령어를 사용하고 있다.

Linux는 system services의 개념을 사용하고 있다. system services란 주로 시스템 사용자 대신 서비스를 제공하는 백그라운드에서 실행되는 프로그램들이다. systemctl 명령어로 확인할 수 있다.

$ systemctl
- debian
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Fri 2019-07-05 07:48:09 UTC; 2 days ago
   CGroup: /
           ├─user.slice
           │ └─user-1000.slice
           │   ├─user@1000.service
...

로그 파일 확인하기

시스템의 로그 파일을 확인하는 것은 매우 중요한데, 대부분의 시스템 로그 파일들은 /var/log에 있다. /var/log 디렉토리로 이동한 후 ls -l 명령어로 시스템 로그 파일들을 확인할 수 있다.

  • syslog : 제일 중심적인 로깅 시스템이다. 여기서는 kernel, application 등과 관련된 메시지들을 확인할 수 있다. 조금 더 확장하면 데이터 센터의 모든 로그 파일들을 저장할 수 있다.
  • auth.log : 인증(authentication)의 실패와 성공 기록이 담겨있다.
  • messages : 모든 종류의 일반적인 시스템 메시지가 담겨있다.

파일을 확인하는 몇 가지 유용한 명령어들이다.

  • cat
  • less : pagination과 scroll을 통해 파일을 보여준다.
  • grep : 파일 안에 특정 문자열을 찾고 싶을 때 사용한다. grep PATTERN [FILE] 과 같이 사용한다.
  • head : 파일의 첫 줄을 보여준다.
  • tail : 파일의 마지막 줄을 보여준다. 주로 로그 파일을 확인할 때 tail -f /var/log/syslog 와 같이 사용한다.

Users and Superusers

리눅스에서 사용자를 생성하고 수정하고 삭제하는 것이 가능하다.

리눅스에서 관리자 권한을 supersuer 권한이라 하며 이는 root 사용자의 권한과 같다. root 의 UID는 0이다.

사용자와 관련된 명령어가 몇 가지 있다.

$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev)
$ whoami
ubuntu
$ sudo id
uid=0(root) gid=0(root) groups=0(root)
$ sudo whoami
root
  • id : UID를 확인할 수 있다.
  • whoami : 사용자 이름을 반환한다.

참고 문헌

  • David M. Davis. Linux Networking 101 ActualTech Media. ActualTechMedia

Tags:

Categories:

Updated:

Leave a comment