[OS] Linux

리눅스는 서버 환경에 원격으로 접속해서 원하는 작업을 할 수 있는 운영체제입니다.
GUI 환경 보다는 CLI 환경을 주로 사용하며 명령어에 익숙해진다면 보다 능률좋은 작업을 진행할 수 있습니다.
다중 사용자가 원격으로 접속해 사용하는 멀티유저 환경을 지향하는 이 운영체제는 어떻게 쓰이는지 보겠습니다.

1. 설치

리눅스가 어떻게 쓰이는지 직접 확인해보기 위해 리눅스를 설치합니다.
가상머신 Virtual Box, Parallels Desktop, Vmware 등 중 하나를 골라 먼저 설치합니다.
저는 맥 환경인데 유료는 페러렐즈, 무료는 vmware가 사용하기 괜찮았습니다.

ubuntu 공식 홈페이지에 가면 확장자가 iso인 disk image를 설치할 수 있습니다.
가상머신에 해당 파일을 설치해줍니다.

2. SSH

  • 리눅스는 멀티유저 작업에 특화되어 있습니다. 그에 걸맞게 원격으로 접속할 수 있어야 합니다.
  • 가상환경에서 SSH를 설치해 접근할 수 있게 합니다.
  • 로컬환경 터미널에서 IP주소와 리눅스계정의 name & password를 안다면 바로 접근할 수 있습니다.

3. 쉘 스크립트

  • 힘들게 접속한 리눅스에서는 어떤 작업을 할까요?
  • 백엔드 개발을 진행할 때에는 오류를 돌이켜볼 수 있게 항상 log를 주시해야 합니다.
  • 하지만 log가 쌓이고 쌓여 넘친다면 압축을 해줄 필요가 있습니다.
  • 압축 작업을 쉘 스크립트로 작성한다면 정말 편리할 것입니다.

4. crontab 자동화


  • 쉘 스크립트를 작성했다면 자동화까지 할 때 더욱 편리할 것입니다.
  • 리눅스는 cron이라는 자동화 기능이 존재합니다.
* * * * * CMD
# m h dom mon dow command 다섯가지 키워드로
# 일정한 시간마다, 일정한 시각에 특정 명령을 수행할 수 있습니다.
  • crontab에는 여러 옵션이 존재합니다.
crontab -e # 자동화 명령을 작성할 편집기를 호출합니다.
crontab -l # 작성한 자동화 명령을 들여다봅니다.
crontab -r # 자동화 명령을 초기화시킵니다.
  • sudo crontab -e 를 사용하면 일반 crontab과는 별개의 crontab이 활성화되며 관리자 권한으로 실행할 수 있게 됩니다.
  • crontab에 있는 명령은 상대경로를 인식하지 못하며 일반 sh파일이 작동되더라도 crontab에서는 작동되지 않는 문제를 겪을 수 있습니다.

5. 백업 복사 스크립트


sudo scp -r 가상환경이름@ip:/가상환경path 로컬path
  • 위 명령을 통해 가상환경에 SSH 접속하여 path에 있는 파일을 로컬path로 가져올 수 있습니다.

6. 권한 부여

  • 파일의 권한은 다양한 옵션으로 부여할 수 있습니다.
  • 명령어 앞에 sudo를 붙이면 관리자 권한으로 무엇이든 명령할 수 있지만
    다중 사용자 OS이기에 일반 사용자에게 권한을 얼마나 부여할지도 설정해줘야 합니다.

허가가 적용되는 범위

  • u(ser)
  • g(roup)

읽고 쓰는 모드

  • r(ead)
  • w(rite)
  • 위 옵션들을 조합하여 권한을 부여합니다.
  • 그리고 부여한 권한은 ls -l 명령어에서 확인할 수 있습니다.
$chmod a-rwx sample
$ls -l sample
---------- 2 unixguy unixguy     96 Dec ~~~~
  • ls -l 명령어를 출력할 때 앞에 붙는 drw-rw——와 같은 문구도 다음과 같이 해석할 수 있습니다.

    • d: directory?
    • d를 제외한 9자리를 세 개씩 묶어 8진법으로 나타낼 수 있습니다.

      ex)

      chmod764samplechmod 764 samplels -l sample

    • ```bash
    • rwx rw- r—
    • rwx = 7, rw- = 6, r— = 4 처럼 8진수로 명령할 수도 있습니다.
  • 출처: https://ko.wikipedia.org/wiki/Chmod

1. 리눅스와 유닉스


  • 두 운영체제 모두 다중 사용자 방식의 운영체제입니다.
  • 회사와 같은 단체에서 서버로써 주로 사용하고 리눅스는 유닉스에서 파생된 OS라고 볼 수 있습니다.

Linux

  • 무료 오픈 소스
  • 버그는 무수한 개발자들이 앞장서서 fix
  • 기관, 개인 등 다양한 곳에서 사용

Unix

  • 유료, 비공개 코드
  • 버그는 IBM이 책임지고 fix
  • 보안을 강조해 대기업 등의 기관에서 사용

기존 유닉스는 어셈블리어를 사용해 기종 간 호환이 잘 되지 않았습니다.

이 문제는 후에 C언어로 재작성되며 무료로 배포되면서 여러 OS들의 모체가 되었습니다.

후에 GNU(GNU is Not Unix) 프로젝트가 시작되었으나 커널이 존재하지 않아 핵심이 빠진 상태였습니다.

이 때 GNU시스템에 적합한 커널이 개발되고 있었는데 이것이 리눅스였습니다.

리눅스는 최대한 확장 가능하고 어떤 인터페이스에도 종속되지 않는 방향을 지향했습니다.

결과적으로 뛰어난 신뢰성과 다양한 사용자 지원체계 등이 강점인 OS가 되었습니다.

2. 쉘 명령어


  • 리눅스나 유닉스는 윈도우나 맥처럼 GUI 환경에서 작업하는 것 보다는 CLI 환경에서 작업하는 것을 선호합니다.
  • 저는 특정 프로그램을 설치할 때 굉장히 편하다고 느꼈습니다.
sudo apt install python
  • GUI 환경에서는 설치할 패키지의 홈페이지에서 카테고리를 찾아 설치해야 하는 반면,
    CLI 환경에서는 명령어로 빠르게 설치할 수 있습니다.
  • 그 외에도 리눅스 환경 내부의 파일을 조작할 때에도 편리하게 사용됩니다.
pwd              #현재 위치를 확인합니다.
/home

cd /backup       #위치를 이동합니다. change directory
~/backup$pwd
/home/backup      

cd ../           #상위 폴더로 이동합니다.

ls               #ls는 현재 위치 파일의 list를 출력합니다. 여러 옵션을 사용할 수 있습니다.
ls -al           #모든 정보 출력

cat file         #file의 내용을 확인합니다. concatenate

cp fileA fileB   #fileA를 copy해 fileB를 만듭니다.
grep [-opt][pattern][file]           # 검색합니다.
#-r, -i, -v 또는 -l 과 같은 옵션을 줘서 상세한 검색을 합니다.

zip fileA.zip fileB    # fileB의 내용을 fileA.zip이라는 이름으로 압축합니다.
tar
gzip # 압축에는 여러 명령어가 존재합니다.
  • 모든 명령어는 명령어 앞에 sudo를 붙이면 비밀번호를 입력하므로써 관리자 권한으로 실행합니다.
  • 절대경로와 상대경로는 평소 프로그래밍을 할 때 파일을 불러오면서도 접하게 됩니다.
  • 터미널에서도 특정 위치에 접근할 때 절대경로를 이용하면
    /home/cha-ji와 같이 정해진 root 폴더에서 탐색을 시작하고,
  • 상대경로를 이용하면 해당 명령어를 입력한 폴더에서 하위 폴더로 탐색을 진행합니다.

1. 쉘 스크립트


  • 위에 서술한 쉘 명령어들을 활용해 복잡한 명령을 수행하기도 합니다.
#!/bin/sh

ls -al
ls -l
ls

2. 터미널 환경


  • 개발 환경
  • macOS에는 UNIX 기반의 OS이기에 기본적으로 터미널이 내장되어있습니다.폰트에 따라 한글이나 아이콘이 깨지는 경우가 빈번합니다.
  • 하지만 내장 터미널은 사용하지 않고 iTerm2, oh-my-zsh를 설치해 사용하고 있습니다.
  • 주로 git을 사용할 때 터미널을 사용하며
    VScode에서 파이썬을 실행할 때 터미널에서 출력하곤 합니다.
    오픈소스를 설치할 때에 brew 패키지를 통해 간편하게 설치하기도 합니다.
  • 앞서 사용했던 openSSH와 같은 패키지들이 많이 내장되어 있습니다.

Written by@Cha-Ji
Android developer

InstagramGitHub