[서적] 모두의 리눅스

이 책을 읽게 된 계기

  • 개발을 시작하기 이전부터 쭉 Mac을 써왔고, 아직 좁은 식견으로 타 운영체제 사용의 필요성을 느끼지 못했다. 그래서 UNIX, Linux는 들어보기만한 정도였고, 본격적으로 사용해 본 적은 없었다.
    입사 이후 업무를 하면서 셸 스크립트라는 개념을 알게 되었고, 셸 스크립트 파일을 만들어서 도커 컨테이너를 띄워보고, 서버실의 리눅스 베이스의 컴퓨터에서 명령어를 입력해보고, 팀장님께 리눅스에 대한 이야기를 들으면서 ‘그래서 리눅스가 뭐지?‘라는 궁금증이 들었다.
    그러던 중 길벗 출판사에서 ‘모두의 리눅스’에 대한 리뷰어로 선정되어 책을 받았는데, 1장에서부터 바로 충격을 받았다.
    “뭐야 이 명령어들이 Mac에서만 쓰이는 것들이 아니었어?”
    (몰라도 쓸 수 있는 것들이 참 많지만, 알면 더 재밌게 쓸 수 있는 것들이 세상에 참 많다는 것을 정말 자주 느낀다.)
    시야가 확 넓어지는 듯한 느낌을 받으면서 정말 신나게 책을 읽어나가는 동안, Linus Torvalds의 인터뷰 영상들도 많이 봤다.
    Linux라는 오픈소스 프로젝트 작업 중에 필요를 느껴서 Git까지 만들었다니..!
    원래 한 작가를 좋아하면 그 작가의 작품들도 좋아하는 것처럼, Linus Torvalds가 너무나 멋진 사람이어서 이 책도 더 재미있게 읽었다.
    나는 현재 우리 팀의 리더 분을 정말 닮고 싶은 소프트웨어 엔지니어이자 멋진 사람으로서 동경하는데, Linus Torvalds와 팀장님의 분위기가 비슷한 점이 많아서 더 관심이 가기도 했다.

그래서 UNIX, Linux, macOS의 차이는?

  • Linux, macOS는 UNIX 계열의 운영체제
  • POSIX: 운영체제들간의 호환성을 위해서, UNIX에 기반해서 IEEE에서 standard operating system interface와 그 환경을 정의한 것

    • macOS: POSIX 인증 받음/ Linux: 인증은 안 받았지만 POSIX 표준 지킴
  • UNIX는 AT&T에서 개발이 시작되었고, 이제는 The Open Group의 trademark, POSIX는 The IEEE의 trademark이다.
  • Linux는 오픈 소스의 장점을 모두 가지고 있고, 개발환경 구축이 쉽다.

이 책의 장점

  • ‘모두의 리눅스’는 정말 자세하다. 그것을 뒷받침하는 요소로는 잘 짜여진 목차와 내부의 설명을 들 수 있는데, 그에 비해 두께는 그리 두껍지 않아 겁먹지 않고 읽을 수 있다.

    • 목차

      • 크게 세 부분으로 나뉜다.

          1. 리눅스 개요 알아보기 - 리눅스 환경 준비
          1. 리눅스 기초 배우기 - 셸, bash, file & directory, user permission 등등
          1. 1,2장에서 배운 것 활용해서 셸 스크립트 활용하는 방법 배우기
      • 이 책에 나온 모든 명령어들의 사용 방법을 외우려는 목적은 다른 독자들이 그러하듯이 전혀 없었다. 나에게 필요한 것은 습득하고, 당장은 와닿지 않거나 쓰지 않더라도 ‘이런 기능도 있구나’하면서 읽어나가는게 개발 서적의 가장 큰 재미라고 생각하기 때문이다. 그렇게 알게 된 것들을 나중에 사용하게 되면 당연히 더욱 좋다.
        그래서 필요한 명령어들은 직접 입력해보면서 터미널에 어떻게 나오는지를 보았는데, 자세한 설명이 큰 도움이 되었다.
    • 자세한 설명

      첨부한 이미지처럼 각각의 커맨드와 그 결과물에 대해서 매우 자세한 설명이 나와있어서 리눅스에 대해 처음 학습해보는 사람에게 아주 도움이 될 것이라고 생각했다.
      개인적으로는 ‘이 명령어 입력하면 왜 이런 게 나오지?‘라는 것들에 대해 꼭 필요한 설명들을 자세히 해주는 느낌이어서 정말 좋았다.


이 책의 독자로 추천하고 싶은 사람

  • 개발을 이제 막 시작한 사람
  • 리눅스에 대해 접해본 적이 없는 사람
  • 리눅스가 무엇인지 알고, 사용하고 있지만 더 잘 쓰고 싶은 사람

느낀 점

  • Linux는 새로운 OS의 세계를, 오픈소스 생태계를, Git을 발전시켜 왔다.
    한 권의 책으로 새로운 많은 것들을 알게 되어 뿌듯한 시간이었고, 기회를 주신 길벗 출판사에도 감사드립니다.


아래는 제가 책을 읽으면서 새롭게 알게 된 것, 기존에 헷갈렸던 것, 기록해놓고 나중에도 보고 싶은 것들을 정리한 것입니다.
책 내용의 극히 일부분만이 담겨 있습니다.

책을 읽으면서 알게 된 것

shell

  • shell: 커널과 사용자를 이어주는 인터페이스

    • kernel: 하드웨어(CPU, 메모리 등) 관리 & 명령어의 실행 → 프로세스 관리
    • shell script: 실행 원하는 명령어들을 파일에 기록하고, 그 파일을 셸에 넘겨줌. 작은 프로그램(명령어)를 조합해 복잡한 처리를 수행한다는 리눅스의 철학 담김
    • 종류: sh, bash, zsh 등
  • terminal VS shell

    • 터미널 에뮬레이터: 리눅스 머신에서 돌아가는 셸의 입출력을 가능하게 해 주는 소프트웨어
    • 윈도에서 리눅스 돌리면 터미널(터미널 에뮬레이터)은 윈도에서, 셸은 리눅스에서 돌아감
  • prompt: 셸이 사용자의 명령 받을 준비되었다는 것을 알려주는 것(’$’ 기호)
  • 단축키

    • Ctrl + u: 커맨드 다 지우기
    • Ctrl + y: 지운 커맨드 복원

파일과 디렉토리

  • 모든 것은 파일, 디렉토리 구조로 되어 있다.
  • 각 디렉토리 역할

    • /bin: 명령어들의 실행 파일이 여기에 있음

      • 예를 들어 cat 명령어는 /bin/cat이라는 파일인 것. 즉 환경변수 PATH에서 그 명령어 찾아서 실행
      • 따라서 command not found: 환경변수 PATH에 그 명령어가 등록 안 되어 있다는 의미
    • /etc: 다양한 애플리케이션의 설정 파일들 여기에 있음
    • /usr: 설치한 애플리케이션 실행 파일, 문서 등이 있음

      • /usr아래에는 bin 등이 있어 루트 디렉토리와 구조 비슷

vim 사용

i: 입력 시작 → 입력 → esc → :wq(저장 후 종료) or :q!(저장 안 하고 종료)

persmission, super user

  • chmod

    • 기호 모드: 선택적으로 변경
    • 숫자 모드: 한번에 유저, 유저 그룹, 기타 사용자 설정까지 변경할 수 있음

      • r:4, w:2, x:1

        $ touch test.txt test1.txt
        $ ll
        -rw-r--r--   1 sunmin  staff     0B  4  9 12:09 test.txt
        $ chmod u+x test.txt #기호모드#텍스트파일이어서 실행은 안되지만 예시로 사용
        -rwxr--r--   1 sunmin  staff     0B  4  9 12:09 test.txt
        $chmod 755 test1.txt #숫자모드
        -rwxr-xr-x   1 sunmin  staff     0B  4  9 12:21 test1.txt
  • su는 exit 하기 전까지 슈퍼 유저 → 의도치 않은 실수할 가능성 있다 => 한 명령어에서만 슈퍼유저 권한으로 실행인 sudo가 더 많이 사용되는 추세

Process, Job

  • 프로세스: 커널 기준에서의 할 일 단위(메모리 위에 올려진 프로그램)

    • 종료 방법 : kill + PID
  • 잡: 기준에서의 할 일 단위(셸의 커맨드 라인에 있는 한 줄)

    • 종료 방법

      • 포그라운드: Ctrl + c
      • 백그라운드: kill %<잡 번호>
$ ll | cat -n #생성되는 프로세스는 2, 잡은 1
  • kill은 잡이나 프로세스 종료만을 위한 것이 아닌 시그널을 전송하는 명령어

    • 1번부터 쭉 있고, 이 중 9번 SIGKILL만큼은 프로세스에 전달되지 않고, 커널이 바로 프로세스 강제 종료

      • 그래서 사용 중인 포트 죽일 때 이것 사용하는 것

정규표현식

  • 메타 문자: 특별한 의미로 사용되는 문자

    • 예시
    • 정규표현식 - ’.’: 임의의 한 문자
    • 셸 - *: 와일드카드

셸 스크립트

  • 셔뱅: 셸 스크립트의 맨 처음 줄인 #!/bin/bash은 이 셸 스크립트는 /bin/bash에서 그 파일을 실행한다고 선언하는 것

기타

docker ps | grep text #docker ps 의 결과를 넘겨 받아(redirection) → 그 중 text가 들어간 것을 찾는다(grep)

아카이브, 압축

  • 아카이브: 여러 개의 파일이나 디렉토리를 모아 하나로 만드는 것
  • 압축: 아카이브 파일을 압축해서 전송과 보관 비용 줄임

  • zip: 아카이브+압축
  • tar: 아카이브
  • 압축: gzip, bzip2


출처


Written by
Sunmin
어제보다 나은 오늘을 만들기 위해 배우고, 기록하고, 회고합니다. Maker. Reader. Realistic optimist.