생활코딩 리눅스 요약 : 06 - 파일편집 (nano) ~ 11 - 쉘과 커널

Jeongtae Kim·2022년 7월 20일
0

서버

목록 보기
2/6
post-thumbnail

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

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

📌 06 - 파일편집 (nano)

파일편집 (nano) 수업
리눅스에도 파일에 정보를 추가하고 편집할 수 있는 에디터가 있습니다.
윈도우의 메모장같이 유닉스에서도 nano, vim, vi 등이 있는데요.
리눅스에 낯선 초급자는 nano, 리눅스에 익숙해진 중고급자는 vi를 사용합니다.
그래서 이번 시간에는 비교적 쉬운 nano를 사용해봅시다!
터미널에 nano를 쳤을 때 오류가 나온다면 다음과 같이 설치합니다.

  1. 패키지 매니저 업데이트를 위해 sudo apt-get update를 합니다.
  2. sudo apt-get install nano로 설치합니다.

nano (파일 이름) : 파일 이름이 있다면 파일 이름으로 nano를 엽니다.
저는 파일 이름을 쓰지 않고 nano를 열어보겠습니다.

nano를 열었을 때 조작법이 아래에 나옵니다.

이제 간단하게 html 문서를 하나 쓰고

ctrl + o -> Enter를 통해 저장해봅시다.

이제 'cat hello.html'를 하면 방금 쓴 html 문서가 보이게 됩니다.

cat 파일명 : 파일을 화면에 출력한다.


원하는 문자부터 ctrl + 6을 누르고 방향키를 누르거나(ctrl + 6를 다시 해서 해제)
shift 계속 누르며 방향키를 누르면 일정 부분이 선택되니 복사나 잘라내기를 할 수 있다.

📌 07 - 패키지 매니저

패키지 매니저 수업
운영체제에 기본적으로 설치되어 있지 않은 프로그램을 쉽게 설치할 수 있는 방법이
패키지 매니저를 이용하는 것입니다. 리눅스 배포판에 따라서 패키지 매니저가 조금씩 다릅니다만 사용법은 대체로 비슷합니다. 이 수업에서는 APT를 이용해서 패키지를 관리하는 방법에
대해서 알아보겠습니다. 맥을 쓰시는 분은 homebrew를 이용하시면 됩니다. homebrew 수업

  • sudo apt-get update : 인터넷을 통해 패키지 매니저를 업데이트(소프트웨어 목록 다운로드)합니다. 전 게시물부터 쓴 만큼 자주 쓰는 명령어입니다.
  • sudo apt-cache search 검색어 : 관련 있는 패키지를 검색합니다.
  • sudo apt-get install 이름 : 새로운 패키지를 설치합니다.
  • sudo apt-get upgrade (이름) : 패키지들의 최신 버전에 따라서 패키지들의 버전을 업그레이드 해주는 명령어입니다.
  • sudo apt-get remove 이름 : 기존의 패키지를 삭제합니다.

📌 08 - 다운로드 방법 (wget, git)

다운로드 방법 (wget, git) 수업
wget과 git은 명령어 기반의 시스템에서 파일을 다운로드 할 수 있습니다.

Wget

  • wget 링크 : 'download' 같은 이름으로 웹에서 파일을 다운로드합니다.
  • wget -O 파일이름 링크 : 사용자가 지정한 파일 이름으로 웹에서 파일을 다운로드합니다.

Git

  • 버전 관리 시스템 프로그램입니다. Git이 수업에 있는 이유는 리눅스 명령어의 빈도수 중 Git 관련된 명령어가 워낙 높기 때문에 Git이 무엇인지 알고, 다운로드 방법을 아는 것은 중요할 수 있다고 합니다.
  • Github는 Git을 이용해 만든 소스코드를 온라인 상에 업로드 시킬 수 있는 저장소이고, 오픈 소스 프로젝트들이 많이 올라와 있습니다.
  • Git이 설치되어 있지 않다면,
    - sudo apt-get update
    - sudo apt-get install git
  • 오픈소스 프로젝트를 다운받기 위해 프로젝트의 링크가 있어야합니다. Github의 프로젝트에 들어가서 Code를 누르고 링크를 복사합니다.
  • git clone 링크 디렉토리 : 디렉토리에 오픈소스 프로젝트를 다운로드(클론)합니다.

📌 09 - 왜 CLI인가?

왜 CLI인가? 수업
대부분의 사람들은 마우스로 클릭하여 명령을 실행하기 쉬운 GUI 환경의 컴퓨터가 많습니다. 근데 왜 배우기 어렵게 키보드로 명령어를 쳐서 실행하는 어려운 CLI 환경을 배워야 할까요?

  • GUI : 사용자에게 그래픽적으로 보여주기 때문에 컴퓨터 에너지(CPU, RAM)를 더 많이 차지합니다. 그 대신에 사용자가 컴퓨터를 쉽게 제어하도록 도와줍니다.
  • CLI : 명령어로만 제어하기 때문에 컴퓨터 에너지(CPU, RAM)을 훨씬 적게 차지합니다. 그 대신에 사용자가 명령어를 알아야하는 등 제어하기 어렵습니다.

이러한 특징때문에 GUI 환경은 컴퓨터를 일상적이거나 가볍게 활용하는 사용자에게 좋고, CLI 환경은 서버 운영같이 컴퓨터를 헤비한 일에 사용하는 사용자에게 좋습니다.
CLI에는 두 가지 추가 장점들이 있습니다.

  • CLI는 한 번에 여러 명령들을 순차적으로 실행하게 할 수 있습니다. 아래는 why 폴더를 만들고 why 폴더로 이동한 것을 한번에 한 것입니다.

    만약 폴더를 만드는 것이 하루가 걸린다고 가정하면 어떨까요? GUI 환경이라면 폴더가 다 만들어질 때까지 기다렸다가 사용자가 그 폴더로 이동해야 하지만 CLI 환경은 폴더가 다 만들어지고 나서 자기가 알아서 그 폴더로 이동까지 해줍니다.
  • CLI는 파이프라인(|)을 사용할 수 있습니다. 구조물인 파이프가 한 곳에서 다른 곳으로 전송을 도와준다는 특성을 비유하여 한 명령의 실행 결과를 다른 프로그램의 입력으로 준다는 기능을 가지고 있습니다. 다음 그림에서 'ls --help | grep sort'를 하면 ls라는 명령어의 사용설명서에서 "sort"라는 단어가 있는 행들을 출력하고 있습니다.

    grep 문자 (파일명) : 파일에서 원하는 문자가 있는 행을 찾아준다.

  • 다음 그림에서 'ls --help | grep sort | grep file'을 하면 ls라는 명령어의 사용설명서에서 "sort"라는 단어와 "file"이라는 단어가 있는 행들을 출력하고 있습니다.

📌 10 - IO Redirection

IO Redirection 수업
IO Redirection의 I인 Input은 입력이라는 뜻, O인 Output은 출력이라는 뜻, Redirection은 방향을 바꾼다는 뜻입니다. 즉, IO Redirection은 입출력의 방향을 바꾼다는 뜻입니다.

출처 : http://slideplayer.com/slide/5126304

  • Standard Output(1>) : 표준 출력이라는 뜻으로 기본값은 모니터 화면이지만 파일로 출력 방향을 바뀌게 할 수 있습니다. 참고로, 기호 앞의 1은 생략되어도 됩니다 (1> ok!, > ok!). 다음 사진에서는 원래 'ls -l'을 했을 때 쉘에 결과가 나타나야 하는데 'result.txt' 라는 파일로 출력 방향이 바뀌어 결과가 들어가게 됩니다. 그래서 'cat result.txt' 를 했을 때 'ls -l'의 결과가 나타납니다.
  • Standard Error(2>) : 표준 에러라는 뜻으로 기본값은 모니터 화면이지만 파일로 출력 방향을 바뀌게 할 수 있습니다. 에러가 났을 때는 Standard Ouput이 아닌 Standard Error을 이용하여 파일 출력 방향을 지정해야 합니다. 다음 사진에서는 없는 파일인 'rename.txt'를 제거하려 해서 에러가 납니다. Standard Output을 사용해도 결과가 쉘에 나타나지만 Standard Error를 사용하면 에러가 'result.txt'로 들어가게 됩니다.
  • Standard Input(<) : 표준 입력이라는 뜻으로 기본값은 키보드지만 파일로 입력 방향을 바뀌게 할 수 있습니다. 다음 사진에서는 명령어 'cat' 만 쳤을 때 Standard Input의 기본값인 키보드로만 입력을 받아 그 값을 표준 출력으로 출력하는 것입니다.

    다음 사진에서는 'cat' 한테 입력 방향을 nano를 통해 쓴 'hello.txt'로 넘겨준 모습입니다. 'cat hello.txt' 와 같은 결과를 보이지만 둘은 완전히 다릅니다. 다음 글을 참고하시면 되겠습니다. Standard Input과 명령어에 전달되는 인자의 차이점은 무엇인가요?
  • Standard Output Append(1>>) : 기존의 내용을 유지하고 그 뒤에 출력을 넣을 수 있습니다. 다음 사진은 원래 써진 파일인 'result.txt'에 'ls -l'의 결과를 추가한 것입니다.
  • Stnadard Error Append(2>>) : 기존의 내용을 유지하고 그 뒤에 에러를 넣을 수 있습니다.
  • Standard Input Append(<<) : 기존의 입력을 유지하고 그 뒤에 입력을 넣을 수 있습니다.

다음 사진은 'lorem.txt' 을 표준 입력으로 정해 'lorem.txt'의 처음 3줄을 표준 출력으로 정한 'result.txt' 에 넣은 모습입니다.

head (옵션) 파일명 : 파일의 앞부분을 지정한만큼 출력한다.

📌 11 - 쉘과 커널

쉘과 커널 수업
다음 사진은 리눅스의 구조입니다.

Shell(쉘) : 커널이 이해할 수 있도록 명령어를 해석합니다
Kernel(커널) : 해석된 명령어를 하드웨어가 동작할 수 있도록 전달합니다.
Hardware(하드웨어) : 커널에서 받은 명령을 수행하고 쉘에게 수행 결과가 전달되도록 다시 커널에게 전달합니다.
커널과 쉘을 분리한 이유 :
쉘은 사용자가 알아듣는 언어를 커널이 알아듣는 언어로 해석하는 프로그램으로서, 사용자가 마음에 드는 쉘을 선택할 수 있게 커널과 쉘을 분리했을 것이라고 생각되고 있습니다.
우분투를 설치했을 때 기본적으로 bash가 설치되어 있습니다. 자신의 쉘을 확인하려면 'echo $0' 을 하면 됩니다.

또 다른 쉘인 zsh를 다운로드하고 설치해보겠습니다. 다음은 다운로드 명령어입니다.

  • sudo apt-get update
  • sudo apt-get install zsh

'zsh' 라고 치면 쉘이 zsh로 바뀝니다.

'/home/kjt/why' 로 이동하고 싶을 때 'cd /h/k/w' 라고만 치면 자동으로 'cd /home/kjt/why' 로 자동완성이 됩니다.

다음 명령은 'why' 디렉토리 안의 'dir1' 디렉토리로 이동하는 명령으로 bash 에서는 cd 인자가 하나여야 해서 '/'로 구분해야만 합니다.

다음 시간에 계속 ...

profile
유용할지도 모른다.

0개의 댓글