(Juhasz Imre 님의 사진, 출처: Pexels)
Portable Operating System Interface의 약자.
서로 다른 운영체제를 같은 방법으로 조작할 수 있도록 만들어진 표준이다.
POSIX를 준수하는 운영체제로는 UNIX, MacOS가 있으며 Linux는 100%는 아니지만 거의 호환된다고 볼 수 있다.
Windows는 적용이 안된다. 따로 CMD나 PowerShell을 사용하고 있기 때문이다.
• GUI(Graphic User Interface) : 마우스를 이용해 버튼이나 아이콘을 눌러 컴퓨터를 조작하는 방식이다.
• CLI(Command Line Interface) : 명령어를 이용해 컴퓨터와 대화하듯 조작/제어하는 방식
편리한 GUI를 두고 왜 CLI를 사용하는가?
=>GUI는 직관적인 아이콘을 누름으로써 사용이 쉽지만 CLI는 어려운 반면 익숙해진다면 GUI보다 더욱 강력한 제어를 할 수 있다. 특히 시간의 순서에 따라 명령어들을 실행할 수 있다는 점.
나는 윈도우환경이므로 POSIX를 실습하기 위해선 따로 환경을 구축해주어야 한다.
Linux, MacOS등의 사용자들은 자체적으로 제공하는 터미널등을 사용하면 된다.
Windows, Android, IOS 환경에서 실습하기 위한 방법은 크게 두 가지가 있다.
1) Emulator 설치
2) 원격 POSIX 서버를 구축하고 Secure Shell(SSH)를 이용하여 원격제어
어떠한 시스템에서든지 가장 기초적이며 중요한 것중 하나는 DATA를 다루는 것이다.
이 DATA는 전통적으로 "파일" 이라는 형태로 존재하고 파일들을 분류하여 효과적으로 다루기 위해 폴더(Directory)가 있다.
pwd명령어 (Print working directory) = pwd를 쳤을때 나오는 경로가 Home 이다. = 물결표시 (~)
- 가장 중요한 첫번째 할일이다. GUI환경에선(e.g.윈도우 탐색기) 무의식적으로 알고 있다. 하지만 CLI에서는 명시적으로 알아봐야한다.
- 최상위 디렉토리는 / 이다. Root directory 이다.
- 현재경로 파악은 rm등 명령어 실행시 작업하는 기준이 현재 디렉토리이므로 위치를 정확히 파악해야한다.
- cd명령어 (change directory) => cd ~ , cd / , cd ../ , cd .. 등등
- ls 명령어 => ls -l, ls -a, ls -al 등등
- ls -s : long listing format, 자세히 출력해줌. rwx등은 권한을 나타내는데 이 앞에 d가 붙어있으면 폴더, -이면 파일로 구분
- POSIX 시스템에선 파일이나 폴더이름 앞에 .이 붙어 있으면 숨김설정이 되있는 것이다.
- POSIX 시스템에서 도움말을 볼땐 --help를 입력. (man [명령어] 로 할 수도 있음)
- ls -a : 감춘항목들까지 다 보여준다.
- ls -a -l = ls -la = ls -al
- mkdir posix 를 입력하여 posix 폴더를 현재경로에 만들어보자
- cd posix 를 입력하여 생성한 폴더로 이동한다. 이때 posix 앞엔 현재디렉토리를 의미하는 ./ 가 생략되어 있음. 써줘도 된다.
• cd posix = cd ./posix // 현재디렉토리에 있는 posix디렉토리로 이동
• cd /posix // 루트디렉토리(/)에 있는 posix 디렉토리로 이동
• cd .posix // 숨겨져있는 posix디렉토리로 이동
- mv명령어는 폴더나 파일을 이동시킬 때 사용하는 명령어이지만 위와같이 경로지정을 안해주면 현재경로인 ./가 생략되있는 것으로 보고 이름만 변경할 수 있다.
- rm은 파일을 삭제하는 명령어다. 폴더는 그 내부에 수많은 파일들과 다른 하위 폴더들이 존재 할 수 있기 때문에 지우기 위해서 안전장치를 해야하는데 그것이 -r옵션이다.
- 절대경로 : 경로를 루트디렉토리부터 시작해서 모두 적는다. 내가 현재 어느 위치에 있건 같은 절대경로는 같은 곳을 가리킨다.
- E.g) cd /c/users/kang => 내가 컴퓨터의 어디에 있든 저 경로는 /c/users/kang를 절대적으로 가리킨다.
- 상대경로 : 현재디렉토리를 기준으로 경로명을 작성한다. 내가 어디에 있는가에 따라 의미가 달라진다.
- E.g) cd ./ = cd . =>현재경로를 가리킴 || cd ../ = cd .. => 부모디렉토리(상위폴더)로 이동
- nano명령어를 치면 나노에디터로 진입가능 (나노에디터 말고도 vim도 있음)
- Ctrl + o 입력시 저장가능
- 단순히 빈 파일을 만들땐 touch명령어도 사용할 수 있다. touch [파일이름]
- 파일을 읽거나 내용을 수정할땐 nano [파일이름]을 입력한다. 아주 간단한 내용을 확인할땐 cat명령어도 사용
- mv text.txt text2.txt => text파일을 text2로 이름 변경
- mv text.txt ../text.txt => text파일을 상위폴더로 이동
잡팁) rm을 작성하고 tab키를 누르면 파일이름이 뜸
어떤 작업을 한다는 관점에서 보았을 때 GUI는 버튼을 누르는 것과 같다. 쉽다!
CLI는 대화를 하는 것이다. 대화를 하려면 언어를 알고 단어를 외워야한다. 어렵다!
하지만 복잡하고 여러 작업들을 시간의 순서에 맞게 실행하려면 CLI가 단연 강력하다.
- CLI 에서 여러 작업들을 시간의 순서에 맞게 실행할땐 명령문들 사이에 세미콜론 ( ; ) 을 붙여 구분한다.
- 만약 작업실패시 중단하기 위해선 세미콜론 대신 &&을 붙여준다.
mkdir dummy; cd dummy; touch test.txt // mkdir dummy&&cd dummy&&touch test.txt
- Shell script : 자동화가능?
- Package = program
- Package manager 프로그램 다루는 방법들(스마트폰의 앱스토어같은 역할)
- Chocolatey, apt-get, yum, homebrew 등등
- Maintain
- 컴퓨터를 유지보수하기 위해선 컴퓨터의 구조들과 기능들을 알아야함
=> 컴퓨터 아키텍쳐 공부- Top, htop 등 프로그램 사용법
=> 이걸 다루려면 컴퓨터의 동작방식등을 알아야함. => 컴퓨터 아키텍처- Network
- Network를 설정하고 다루는 방법들. 역시 network에 대한 기본적인 지식들이 필요함.