입력소스 input sorce ( 키보드, 마우스, 카메라, 마이크 등 ) > 입력
출력소스 output sorce ( 모니터, 스피커 ) > 출력
=> I/O Input/Output 입출력 아이오
GUI가 개발 전 리눅스의 터미널로 입출력 작업 -> CLI로 모든 작업 가능
터미널 = CLI 입력하는 글자와 출력하는 글자로 소통가능
프롬프트 prompt : 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간
pwd
print working directory(=folder) : 현재 경로 = 현재 위치 = 현재 작업중인 폴더의 위치
mkdir [폴더명]
make directories : 새폴더 생성
ls
list : 특정 폴더에 포함된 파일이나 폴더 확인하기
- -
dash : 옵션기능 , 옵션 뒤에 오는 옵션의 순서는 기능에 영향 X
-a
all : 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력
-l
: 폴더나 파일의 포맷을 전부 표현
- ls
와 l
을 사용하여 출력된 값 d
은 폴더를, -
은 파일을 나타냄.
-폴더는 cd
로 진입 가능하나 파일은 진입 불가.
open .
현재위치를 GUI로 실행 => 현재 위치의 폴더창 나옴
cd` [폴더명]
change directory : 폴더에 진입
touch [파일명]
: 파일 생성
cat [파일명] [파일명] ...
: 파일의 내용 순서대로 읽고 터미널에 출력 (맨 뒤 % 붙어있다면 줄바꿈x)
rm [파일명]
remove: 단일 파일 삭제하기 (휴지통을 거치지 않고 즉시삭제 -> 휴지통에서 파일 복구 불가)rm -rf [폴더]
recursive force : 폴더 삭제 시 옵션 사용mv [변경할 폴더나 파일의 이름] [변경하고자 하는 파일의 이름]
mv [폴더나 파일의 이름] [도착 폴더의 이름]
mv
를 사용할 때는 과정2 생략cp [원본 파일 이름] [복사할 파일 이름]
rm
처럼 -rf
사용).
현재 폴더 ..
현재폴더보다 앞에 있는 폴더-h
--help
Q. 폴더 "Hello world" 생성하고, 생성한 폴더로 진입
mkdir Hello\World // (폴더명이나 파일명에 공백이나 특수문자가 있다면 백슬래시 \ 이용)
cd Hello World
Q. 현재 위치는 ~/helloWorld/hello/
hello ls > you_are_the_best hi.txt 라면,
폴더 you_are_the_best 를 상위폴더로 복사
-> 상위 폴더 ~/helloWorld/ (절대경로) , ../ (상대경로)
cp -rf you_are_the_best ~/helloWorld/
cp -rf you_are_the_best ../
사용자: 로그인하는 계정
관리자: 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한 존재
in MS사 윈도우즈
과거에는 사용자없이 항상 관리자권한으로 실행하면서 프로그램에 좋지 않은 의도로 작성된 코드인 악성코드 Malicious Code 가 설치됨 -> 둘 이상의 프로그램이 하나의 시스템(운영체제)을 놓고 충돌 Conflict 하면서 블루스크린 출력 -> MS사는 고객을 보호하기 위해 사용자 계정 컨트롤 User Account Control 탑재(관리자와 사용자 구분)하여 관리자는 프로그램을 설치 변경 삭제하는 권한을 가지고 사용자는 프로그램을 실행할 수 있지만 변경할 수 없는 제한권 권한을 가져 사용자를 보호함
따라서 사용자 계정 컨트롤로 하나의 PC에 여러 사용자 등록 가능.접근권한은 사용자계정마다 분리되며 각 사용자는 다른 사용자의 영역 침범불가.
in 리눅스
먼저 사용자 계정 컨트롤을 이용하여 사용자와 관리자 구분함.
Ubuntu를 처음 설치하거나 macOS기반의 PC를 구매한 직후 사용자 등록하여 관리자 권한을 이용시 사용자를 추가 변경 삭제 가능
Ubuntu에서는 사용자가 절대 관리자 권한에 접근불가하도록 구분함. 단, 새프로그램을 설치 변경 삭제 시 관리자 권한이 반드시 필요하기 때문에 특정 명령어를 입력하는 것으로 잠시 관리자 권한을 빌릴 수 있음.
절대경로 : pwd
로 확인가능. 기준점(루트 폴더 /)으로부터의 절대적인 위치 나타냄 => 특정 폴더나 파일이 루트폴더로부터 어떤 폴더로 진입하는 경우 만날 수 있는지를 나타냄
in Ubuntu /home/[username]/helloWorld/hello/
in macOs /Users/[username]/helloWorld/hello/
상대경로 : cd
이용. .
- 현재위치한 폴더, ..
- 상위 폴더(=전 폴더) , /
- 폴더 내부, ./
- 현재폴더 아래의 (=다음 폴더), 현재위치로부터 상대적인 위치를 나타냄.
cd ./hi
pwd // /Users/[username]/helloWorld/hello/hi/ 로 이동
ls //helloWorld.txt hiComputer.txt
=> 현재 hi 폴더에는 helloWorld.txt , hiComputer.txt 파일 존재
mv helloWolrd.txt ../../
=> /Users/[username]/helloWorld/hello/hi/ 에 있던 helloWorld.txt 를 상위(hello) 상위(helloWorld) 폴더로 이동
ls //hiComputer.txt
=> 현재는 ```/Users/[username]/helloWorld/hello/hi/``` 위치에 있으며 helloWorld.txt 파일을 이동했기 때문에 hiComputer.txt만 존재
cd ../../
=> 상위 상위 디렉토리로 이동하여 /Users/[username]/helloWocrld/ 위치
절대경로의 기준점인 루트 폴더 / 는 Linux의 관리자영역 -> 일반 사용자 권한으로 어떤 폴더나 파일도 생성 변경 삭제 불가 , 가장 큰 특징은 어떤 일이 있더라도 사용자에게 관리자권한(루트권한)을 완전하게 넘기지 않음.
단, 사용자가 관리자 권한이 있어야 하는 경우(새 프로그램 설치 변경 삭제 하는 경우) 해당 프로그램 설치 변경 삭제 할 수 있는 관리자 권한만 전달 -> 사용자와 관리자를 명확히 분리하여 사용자의 실수로 발생할 수 있는 시스템 에러로부터 운영체제 보호
루트폴더에서 폴더 test 생성 -> mkdir test -> 에러발생 test: Read-only file system = 읽기 전용 Read-only - 폴더나 파일을 생성 변경 삭제 불가
루트폴더에서 whoami
> [username]
현재 로그인된 사용자 확인 = 폴더의 형태로 존재 , 하위폴더인 Users/로 이동하면 사용자 확인
사용자폴더의 경로 Path는 ~/
로 표시 : ~는 루트폴더 / 로부터 사용자폴더 username 까지의 경로를 축약한 형태
사용자가 사용자 환경에서 관리자 권한을 획득하는 명령어, 한시적으로 관리자 권한을 가지기 때문에 항상 비밀번호와 함께 사용
sudo mkdir [파일명 폴더명]
: 생성한 파일이나 폴더의 소유자는 루트이므로 사용자 권한이 아니라 관리자 권한으로 생성됨.
ls -l
: 특정 폴더나 사용자 또는 관리자의 소유로 생성되었는지 확인 가능, 관리자 권한을 획득하여 폴더를 만들고 소유자를 비교
pwd // => ~/helloWorld/
ls // hello/ hi/ bye.txt test.js
//=> 현재 폴더는 helloWorld 이며, 이 폴더 내 hello , hi 폴더와 bye.txt , test.js 파일 존재
Q. cd를 이용하여 hello 폴더로 진입(hello는 helloWorld의 하위 폴더) -> 상대경로와 절대경로 이용
-> 상대경로 인 경우 cd hello
-> 절대경로 인 경우 이므로 cd ~/helloWorld/hello
/etc/ 는 루트폴더 아래의 폴더이므로 관리자 권한 소유
텍스트 에디터
파일 열기 ^R ctrl+R nano 파일이름
파일 편집 후 종료 ^X ctrl+X -> 파일에 변경사항 존재시 종료시에 저장여부 질문 -> Y와 N 선택하여 클릭
파일 저장 ^O WriteOut 이용
패키지 > 프로그램 파일, 프로그램 설치 파일, 프로그램 설치 설명서, 프로그램에 대한 정보를 담은 파일 (모든 파일의 압축)
=> 저장하고 있는 저장소를 한 군데에서 관리하는 패키지 매니저 > 패키지의 설치 변경 삭제 등 관리를 편리하게 해주는 도구 , 패키지 설치 가능, 모든 패키지의 저장소 위치 저장
JavaScript 런타임, 프로그래밍 언어가 구동되는 환경, 어떤 프로그램이 동작할 때, 프로그램이 동작하는 곳
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm --verion
버전 잘 나오면 성공nvm install --lts(최신버전 설치)
후 node -v
설치버전 확인nano helloWorld.js //nano를 이용하여 helloWorld.js 파일 열기
function helloWorld(){ console.log("Hello world!"); } helloWorld(); //파일 내 함수 생성 저장 후 nano 종료
node helloWorld.js //Hello world! 출력
다양한 Node.js version을 설치하고 관리할 수 있는 프로그램 (이또한 프로그램이므로 설치가 필요)
다른 버전을 사용하기 위해 기존 버전을 지우고 다른 버전을 설치하는 것보다 nvm 를 통해 최신버전으로 설치되었던 node.js 를 12.18.3 버전으로 이용 가능
nvm --ls
nvm install 12.18.3
nvm use 12.18.3
npm init
ls
cat package.json
npm init -y
npm 모듈을 활용하기 위해 해당 모듈애 대한 정보를 담은 파일 (= 프로젝트 전반에 관한 정보가 포함)
남이 만들어놓은 모듈 = node.js 에서는 npm 모듈 => 이에 대한 정보를 담아둔 곳이 package.json
프로그램을 실행시키기 위해 필요한 실제 모듈은 node_modules 폴더에 저장
프로젝트 코드를 전달할 때 포함하고 있는 모든 모듈을 다 전달할 필요없음
npm : node package manager , 필요한 모듈을 다운로드할 수 있는 모듈들이 모여있는 모듈 스토어 (macOS > brew, node.js > npm)
npm install mocha --save-dev
실행시 devDependencies 에 자동으로 모듈 설치npm install (--save) 라이브러리
실행시 자동으로 dependencies에 추가npm run 스크립트이름
버전 관리 시스템 Version Control System (이전에 작성한 내용을 보존해주는 시스템)의 종류로 개발자의 코드를 효율적으로 관리하기 위해서 개발된 분산형 버전 관리 시스템
commit : 특정시점에 생성된 백업 복사본 => 변경 사항에 대한 백업 복사본을 생성하고 이전 기록들에 대한 추적과 변경 정보 확인 가능
Github: Git Repository 를 관리할 수 있는 클라우드 기반 서비스 , 여러 사람이 공유하고 접근할 수 있는 이유
Git Repository : 원격 저장소 Remote Repository 와 로컬 저장소 Local Repository 두 종류의 저장소를 제공하여 파일이나 포더를 저장해두는 곳. 로컬 저장소에서 작업하여 원격 저장소에서 코드를 공유가능. 반대로 다른사람이 원격 저장소에 공유한 코드를 내 로컬 저장소에 저장 가능
Fork : 원격 저장소에 있는 코드를 내 원격 저장소로 가지고 오는 작업
Clone : 내 원격 저장소에서 내 로컬 저장소로 가지고 오는 작업 -> 코드 수정 가능
Push : 내 컴퓨터 내에서 소스 코드 변경 작업 완료 후 commit 을 통해 저장해준 뒤, 원격 저장소(내 원격 저장소와 fork한 원격 저장소)에 반대로 올려주는 작업.
Pull : Push 의 반대, 원격저장소에서 변경 사항이 있을 때 로컬 저장소로 가져오는 작업
git config --global user.name "나의 사용자 이름"
git config --global user.emial "내 이메일 주소" //--global : 설정시 한번만 입력
git config --list //git 설정 항목
보안이 강화된 shell 접속
CLI 환경 터미널에서 다른 PC에 접속하거나 요청할 때 사용, 비대칭키를 이용해 사용자 인증
ssh-keygen
SSH키 생성 => ~/.ssh./ 에 id_rsa(Private Key 개인키/Secret Key 비밀키) 와 id_isa.pub(Public Key 공개키) 생성 = ssh키 페어
cat ~/.ssh/id_rsa.pub
공개키 복사
pwd //=> Users/kimcoding/Downloads
mkdir codestates //=> Downloads 폴더에 codestates 폴더 생성
cd codestates //=> codestates 폴더로 이동
//=> pwd /Users/kimcoding/Downloads/codestates
mkdir unit8
mkdir unit9 //=> codestates 폴더에 unit8, unit9 폴더 생성
cd unit8 //=> unit8 폴더로 이동 => pwd /Users/kimcoding/Downloads/codestates/unit8
touch CLI_1.txt // => CLI_1.txt 파일 생성
cp CLI_1.txt CLI_2.txt
cp CLI_1.txt CLI_3.txt // => CLI2.txt, CLI3.txt 파일을 CLI1.txt 파일 복사하여 생성
rm CLI_1.txt // => CLI_1.txt 파일 삭제
cd .. //=> 앞 폴더로 이동
// => pwd /Users/kimcoding/Downloads/codestates
rm unit9 // => unit9 폴더 삭제x (폴더를 삭제하는 것이므로 rm -rf unit9)
=> Downloads > unit 8 > ~~CLI1.txt~~ CLI2.txt CLI3.txt
> unit 9
pwd // /Users/kimcoding/Downloads/codestates/unit8/chapter1-4
codestates 폴더로 이동하기 위한 명령어로 옳지 않은 것
cd .././././Downloads/codestates/
//=>상위 unit8/현재 unit8/현재 unit8/현재 unit8 에는 Downloads 폴더가 없음
먼저 압축파일을 다운받아
1. Node.js 프로그램인 index.js
실행시켜 CLI 에서 결과값 얻기
cat package.json
을 통해 필요한 모듈 설치
@mochajs/json-file-reporter
chai
codestates-assignment-manager
mocha
mocha-multi-reporters
설치
range
모듈 설치 => npm install range
짝수 생성하는 getListMultiplesOfTwo
함수를 range
모듈을 이용하여 작성
const range = require('range');
function getListMultiplesOfTwo(upTo){
return range.range(2,upTo+2,2);
}
module.exports = getListMultiplesOfTwo
index.js 실행
node index.js
npm run start
스크립트를 통해 index.js 파일을 실행하기 위해서는
scripts 의 start 에 node index.js
코드를 작성해줌
테스트 실행
npm run test
과제 제출
npm run submit
( 만약, 이 과정에서 에러가 발생시 rm ~/.codestates-token
입력 후 다시 처음부터 과제 제출 매니저 설치 )