All Articles

1.4 GUI / CLI, Shell, 파일 권한

이 글은 Codeflow라는 사이트의 강의를 듣고 개인적으로 정리한 내용을 담고 있습니다.
아직 초보적인 단계라 부족하거나 잘못된 부분이 있을 수 있습니다.
혹시 잘못되거나 첨언할 내용이 있다면 댓글 남겨주시면 감사하겠습니다.


GUI (Graphical User Interface)

웹 브라우저, 에디터, 게임, 대부분의 엔드유저용 응용 프로그램, 스마트폰 앱 등… 응용프로그램은 운영체제 별로 비슷한 GUI를 가진다 (OS가 제공하는 GUI API)

CLI (Command Line Interface)

명령 줄 인터페이스(CLI, Command line Interface) 또는 명령어 인터페이스는 텍스트 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻한다.

즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며, 컴퓨터로 부터의 출력 역시 문자열의 형태로 주어진다.

개발자들은 왜 CLI를 쓸까?

  • 개발자용 프로그램, 내부적인 시스템 프로그램 등은 대부분 CLI 프로그램이다.

  • 가볍고 빠르다.

  • 텍스트만으로 I/O 작업을 수행해서 원격 조작에 용이하다.

*단순한 UI의 차이일 뿐, 본질적으로는 큰 차이가 없는 ‘프로그램’ 이다.

Shell

운영체제의 기능을 이용하는, 프로그램을 실행하기 위한 프로그램을 ‘Shell’ 이라고 한다. 운영체제의 Kernal 과 유저를 이어준다.

​ CLI의 Shell이 맥의 Terminal 이라면,

​ GUI의 Shell은 맥의 Finder 이다.

‘Shell’ 을 더 배우기 위해 윈도우의 경우 git bash를 설치하고, 맥이나 리눅스의 경우 Terminal을 이용하자

리눅스에 대해 잠깐 살펴보자면,

Linux

  • 튼튼하고 신뢰성 있는 운영체제

  • 다양한 플랫폼에 이식성을 가짐

  • Networking 에서 뛰어난 성능

  • Opensource

  • 상기의 이유로 거대한 생태계

    => 개발자들의 요람이 되었다.

(이 부분은 운영체제에 관한 공부를 하고 따로 포스팅해야겠다)


File System

  • / : File System 안에서 최상위 폴더를 나타낸다. root 라고 불리는 최상위 폴더

  • ~ : 유저별로 home 폴더가 존재하는데, 그 home 폴더를 가리키는 문자

  • . : 현재 위치하고 있는 폴더, .. 점 두 개는 상위 폴더를 가리킴

  • pwd : 현재 디렉토리 경로를 나타낸다.

  • ls : 현재 디렉토리의 파일들을 보여준다.

    • ls -a : 숨긴 파일까지 보여줌
    • ls -l : 파일 정보가 자세히 출력됨
    • ls -al : 두 가지 옵션을 조합 가능해서 나타낼 수 있음
  • cd : ‘Change Directory’ 로 디렉토리를 이동할 수 있는 명령어

  • clear : 쉘에 있는 내용을 전부 지운다 (정확하게는 위로 올려서 현재 화면에서 안 보이게 하는 것, 스크롤을 위로 올리면 내용이 남아있다)

  • mkdir : 폴더를 생성하는 명령어 (ex. mkdir play, 현재 디렉토리 경로에서 play라는 이름의 폴더가 생성된다)

  • touch : 현재 디렉토리에서 파일을 생성한다. (ex. touch a / tocuh a b, a라는 파일 생성, a와 b라는 두 개의 파일 생성)

  • rm : 파일을 지울 수 있음 (ex. rm a, a가 지워짐. 만약 rm * 같은 형태로 쓰면 현재 폴더의 모든 파일이 지워진다. 혹은 rm *.txt. 의 형태로 입력하면 txt 확장자를 가진 모든 파일이 삭제된다)

  • mv : 파일 이동 (move), (ex. mv c.exe c.txt 같은 형태로 쓰면 옮기는게 아니라 파일 이름을 바꿔준다, mv c.txt pp pp폴더에 파일을 옮겨줌. mv pp/c.txt a.txt 이런 형태로 써줄 수도 있는데, pp의 상위 폴더로 파일을 옮기면서 이름까지 바꿀 수 있다)

  • cp : 파일 복사 (copy), (ex. cp a.txt b.txt a.txt를 b.txt로 복사한다. a.txt의 내용과 확장자를 가진 b.txt 파일을 생성하게 되는 것. cp a.txt pp/c.txt a.txt를 pp 폴더의 c.txt로 복사. cp -R pp pp2 와 같이 옵션을 주면 폴더도 복사 가능

    . 이 생략되면 상대 경로로 인식, 앞에 / 가 있으면 절대 경로로 인식한다.

  • cat : 파일을 텍스트로 읽어서 출력 해준다.

*** 이름 생각 안날때 시작 알파벳 조금 입력하고 Tab 치면 자동완성 기능

*** Shell은 프로그램을 실행시키기 위한 프로그램이라고 했는데, 실행을 언제하는거지? 라는 생각이 들 수 있다. 하지만 지금까지 배운 명령어들이 하나의 프로그램이다. /bin 이라는 경로에 명령어에 해당하는 프로그램들이 들어있다.


환경변수

  • 운영체제에 등록되고 운영체제가 관리하는 일련의 값들

$PATH

  • Shell 프로그램이 실행할 프로그램을 찾는데 도움을 준다. 위의 ls와 같은 프로그램은 실제로는 /bin 폴더에 저장돼 있다. 하지만 Shell 에서 ls를 실행할 때 현재 경로에 프로그램이 없다면 $PATH 에 지정된 경로에서 프로그램을 찾아본다. 따라서 ls를 입력 하더라도 /bin 폴더에 있는 ls를 실행하는 것이다. 결국 모든 것은 프로그램이다.

파일권한

운영체제: 다중 유저를 지원

​ 유저그룹1

​ 유저1

​ 유저2

  • 단일 머신에서 사용자 간의 파일 영역을 분리

  • 보안 이슈와 직결하기 때문에 파일의 실행 권한 제어

권한의 종류

  • read, write, execute
  • r / w / x 로 표기함
  • 4 / 2 / 1 숫자로도 표기함

권한이 적용되는 종류

  • user, group, others

권한의 표기

  • user의 권한의 합, group의 권한의 합, others의 그룹의 합
  • 세 가지 숫자를 순차적으로 나열함

Example

7 = 4 + 2 + 1

5 = 4 + 1

3 = 2 + 1

6 = 4 + 2

0 = 0

777? → 유저도 그룹도 다른 사람도 읽고 쓰고 실행할 수 있다.

755? → 유저는 다 할 수 있고, 다른 사람은 읽고 실행만 가능

644? → 유저는 읽고 쓰기만 가능, 나머지는 읽기만 가능

chmod: 파일 권한 변경

chmod 755 a bb ccc

a, bb, ccc 파일에 유저 rwx / 그룹 rw / 다른 사람 rw 권한 부여

sudo: 루트 유저, 가장 높은 권한을 가진 유저. 루트 권한이 필요한 작업을 할때 (파일 설치 등) sudo를 입력하여 수행하면 된다.