1차 대충 한번 보기 완료
2차 대충 정리 완료
3차 실습 완료
4차 section1의 리눅스 내용 복습 완료
5차 백지 정리 필요
6차 안보고 블로그 정리 필요
폴더 생성: mkdir 폴더이름
파일 생성: touch 파일이름 / nano 파일이름 : 내용 생성, 수정 가능
파일 내용: 확인 cat 파일이름
node로 되어 있는 파일이라면 파일 실행: node 파일이름
cp 복사 (저장 - 삭제 - 생성)
pwd 현재 ㅜ이치
cd 디렉토리 이동
ls 리스트
mv 이동, 제목 변경
rm 제거
1)사용 권한과 소유자 이해 : ls -l
2)폴더나 파일의 사용 권한을 변경하는 방법 : chmod
mkdir foldername
nano filename
폴더 안에 파일 생성 완료
내용 저장 방법
내용 작성 후 ctrl + x, y, enter 순서대로 입력하면 저장
사용권한 확인 방법
ls -l + enter
사용권한 설명
예시
-rw-r--r-- : 파일, 소유자는 읽기, 쓰기 가능, 그룹은 읽기만, 나머지도 읽기만
drwx-xr-x : 폴더, 소유자는 읽기,쓰기,실행 가능, 그룹은 읽기 실행, 나머지는 실행만
--는 rwx에서 권한이 없는 것의 빈자리
r : read permission (읽기 권한)
w : write permission (쓰기 권한)
x : execute permission (실행 권한)
세번에 걸쳐 나온다 (아래 그룹에 대한 권한을 각각 보여주는 것)
-user: 파일의 소유자, 기본적으로 파일을 만든 사람
-group: 여러 user 포함. 그룹에 속한 모든 user는 파일에 대한 동일한 그룹 엑세스 권한을 갖는다
많은 사람이 파일에 엑세스해야할 때 각 user에게 일일이 권한 할당하는 대신 모든 user를 group에 추가하고 파일에 group 권한 할당
-other: 이외 파일에 대한 엑세스 권한이 있는 다른 user. 파일을 만들지 않은 다른 모든 user 의미
따라서 other 권한을 설정하면 해당 권한을 global 권한 설정이라고 볼 수 있다
폴더나 파일의 읽기, 쓰기, 실행 권한 변경 가능
OS에 로그인한 사용자와 폴더나 파일의 소유자가 같을 경우에 권한 변경 가능
다르면 관리자 권한 획득 명령어 sudo 이용해 폴더나 파일의 권한 변경 가능
chmod로 권한 변경 방식 1. symbolic method
: +, -, =, 액세서 유형 표기해서 변경하는
명령어의 구성 요소
액세스 클래스 : u(user), g(group), o(other), a(all: u, g,o)
연산자: +(add access), -(remove access), = (set exact access)
엑세스 타입: r, w, x
예시
chmod g-r filename 그룹에서 read를 remove
chmod u+x filename 사용자에서 실행을 add
chmod a=rw filename 모든 그룹에 읽기,쓰기 권한 -rw-rw-rw-
chmod u= filename other에 권한을 안준다 ----rw-rw-
chmod a+rx filename 모든 그룹에 읽기,실행 추가 -r-xrwxrwx
chmod go-wx filename 그룹, 나머지에 쓰기, 실행 삭제 -r-xr--r--
chmod a= filename 모든 그룹 초기화 -------
chmod u+rwx filename user에 모든 권한 추가 -rwx------
chmod로 권한 변경 방식 2. absolute form
: rwx를 3 bit로 해석하여 숫자 3자리로 권한 표기해서 변경하는
사용자, 그룹, 나머지마다 rwx가 나타나고 각 영역의 boolean 값으로 표기할 수 있다
각 그룹이 가지는 권한을 숫자의 합으로 표현한다 (user, group, other의 순으로)
r : 4
w : 2
x : 1
예시
user rwx
group, other r--
chmod 744 filename #-rwxr--r--
checkpoint 1.
루트 권한이 없는 사용자면 other아닌가??
sudo를 사용해서 변경해야 하고
현재는 other
//확인 필요
checkpoint 2.
root : 사용자가 관리자라는 말
-> 만약 루트 권한이 없다면 해당 파일 수정 불가
공개할 수 없는 정보가 코드에 포함될 경우, 네트워크를 통해 공개될 수 있다
그러므로 코드에 넣는 게 아니라 PC에 저장해두고 사용해야 한다
이런 정보는 PC에서 사용하는 변수에 할당하고 사용할 수 있다
파일A에서 전역변수여도 외부 파일B에서는 접근 불가
이런 경우 A에서 전역변수를 B로 export : B에서 A의 전역변수에 접근 가능
환경변수 : 리눅스 기반의 운영체제 PC에서 시스템 자체에 설정한 전역변수
-> export를 이용해서 환경변수를 설정할 수 있다
linux 운영체제에는 이미 많은 환경변수 설정
1. 터미널에 export 입력해 기록된 환경변수 확인 가능
export urclass="is good"
주의 : 등호 표시(=)앞뒤에 공백이 있으면 안된다
echo로 환경변수의 값 확인가능
변수 확인 시 앞에 $ 붙여줘야 변수라고 인식
echo $urclass
dotenv : 자바스크립트에서 환경변수를 사용할 수 있게 하는 npm 모듈
설치 방법
mkdir 폴더이름 //폴더 생성 시 설치할 모듈과 이름 달리
cd 폴더이름
npm init
npm i dotenv
자바스크립트에서 환경변수에 접근하는 방법
1)새로운 자바스크립트 파일 생성
폴더 안에서
nano index.js
cat index.js
console.log(process.env)
node index.js
//??
process.env : node.js의 내장 객체
2)console.log(process.env)
: 명령어 export로 확인한 내용과 동일한 내용 객체로 출력
1).env 파일 생성
폴더 안에서 nano .env //파일 생성
2) 사용하려는 환경변수 입력 뒤 저장
cat .env //입력 준비
myname=kimcoding //변수 할당
dotenv 이용해서 파일 .env에 저장한 환경변수 조회
index.js를 다음과 같이 수정, 저장
const dotenv = require('dotenv') //모듈 받아서
dotenv.config()
console.log(process.env.myname)
파일 생성 nano index.js
안에 console.log(process.env)라고 작성
나와서 내용 확인 cat index.js //console.log(process.env) 출력
node 실행 node index.js //안에 있는 dotenv 모듈 실행
1)API key, DB password와 같이 민감한 정보 저장, 관리
2)서로 다른 PC 또는 여러 .env 파일에서 같은 변수 이름에 다른 값 할당 가능
실제 제품(서비스)를 개발하는 과정에는
1)개발 환경
2)테스트 서버의 환경
3)실제 제품 제공 환경
예시
구글 API를 이용해 웹 앱을 만드는 경우 개발 환경에서는 개발자 개인의 API 키 사용 가능
그러나 제품 서비스 할 때 개인 API를 사용하면 일일 요청량을 초과하는 경우 제품이 정상적인 동작 부락
방지 위해 실제 제품에서는 기업용 API 키 이용
=> 개발 환경과 제품 제공 환경에서 사용하는 API 키가 다른 경우,
환경변수를 이용해 환경을 구분하여 코드 작성 가능
데이터베이스도 마찬가지로 개발, 테스트, 제품 환경으로 구분 가능
그러므로 다른 환경에서 같은 변수 이름을 사용해 데이터베이스 구분
정리
환경변수 임시 설정
: export 변수이름 = 변수내용
자바스크립트 파일에서 접근
1)자바스크립트 파일 안에서
dotenv 모듈 설치, console.log(process.env)
2)파일 밖 터미널에서
node 파일이름 //실행해서 환경변수 확인
환경변수 영구 저장하기
1).env 파일 생성 + 내용에 변수 만들어놓기
nano .env // 변수 할당
cat .env //변수이름 = 변수 내용 확인
2)자바스크립트 파일 안 내용 수정
const dotenv = require('dotenv');
dotenv.config();
console.log(process.env.변수이름);
//아마 dotenv 안에 process라는 객체?의 속성 env에 환경변수 내용이 저장되어 있는듯
아마 이런 느낌??(확인 필요)
let process = {
env : { //env 파일을 따로 만들었고 그 안에 변수 설정함
//해당 파일에 있는 내용이 dotenv 모듈 쓰고 잇는 자바스크립트 파일에 담김
변수이름='변수내용'
}
}
macOS(Apple)
단축키: command(커맨드 키, ⌘) + Space(스페이스 키)
Terminal을 입력하고 Enter(엔터 키)를 누르거나, 화면에 나타난 프로그램을 클릭합니다.
프롬프트(Prompt): 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간
탐색기를 통해 특정 폴더로 이동했을 때, 탐색기 상단에 위치한 현재 폴더의 이름을 클릭하면 현재 폴더가 위치한 경로가 나타납니다.
CLI인 터미널에서는 간단하게 pwd를 프롬프트에 입력하고, Enter(엔터 키)를 누르면 현재 경로가 나타납니다.
pwd는 print working directory의 약자
mkdir은 make directories의 약자
명령어 mkdir은 생성할 폴더의 이름을 함께 입력
CLI에서는 명령어와 폴더의 이름을 Space(스페이스 키)로 구분
mkdir helloWorld
명령어 ls는 list의 약자
특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력
명령어 ls에는 자주 사용하는 옵션 l과 a가 있습니다.
CLI에서 특정 명령어의 옵션을 사용하는 경우에는 -를 이용해 옵션을 입력했다고 컴퓨터에 전달합니다. 다음과 같이 옵션을 사용해 보세요.
ls -l
ls -a
ls -al 또는 ls -la
명령어ls의 옵션 a는 "all"이라는 의미입니다.
숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력합니다.
화면에 출력되는 .이나 ..폴더는 이번 유닛에서 설명하는 내용입니다.
옵션 a와 함께, 자주 사용하는 옵션 l은 폴더나 파일의 포맷을 전부 표현하라는 의미입니다.
명령어를 이용해 폴더를 GUI의 탐색기로 실행하기
여러분이 컴퓨터를 켜고, 모니터에 GUI가 나타나면 가장 먼저 만나는 화면은 바탕화면입니다. 바탕화면이 하나의 폴더인 걸 알고 있나요?
터미널의 현재 위치를 GUI의 탐색기(파인더)로 열 수 있습니다.
명령어 cd는 change directory의 약자
프롬프트로 상호작용하는 폴더를 다른 폴더로 변경
touch hi.txt
cat hi.txt
명령어 cat을 통해 파일의 내용을 확인할 수 있습니다.
그러나 명령어 cat을 이용하여 터미널에 출력하면, 파일의 모든 내용을 출력합니다. 만약 원격 서버에 접속한 상태에서, 너무 큰 파일을 출력하면 어떻게 될까요? 원격 서버에 접속하는 일은 네트워크를 통해 이뤄지기 때문에, 원격으로 접속한 상태에서 큰 파일을 출력하는 일은 굉장히 비효율적입니다.
그렇다면 CLI에서 파일을 수정하려면 어떻게 해야 할까요? CLI에서 텍스트를 편집할 수 있도록, CLI 전용 텍스트 편집기가 있습니다. 이 유닛의 다른 챕터, 터미널 에디터 nano를 통해 학습합니다.
mkdir hello
cd hello # 폴더 hello로 진입합니다.
pwd # 현재 위치를 확인합니다.
mkdir bye
touch bye.txt
ls # 폴더와 파일을 출력합니다.
새로운 폴더 hello를 생성하고, hello 폴더 안에 새로운 폴더와 파일을 만듭니다.
명령어 rm은 폴더나 파일을 삭제할 때 사용합니다.
명령어 rm으로 삭제한 폴더나 파일은, 휴지통을 거치지 않고 삭제됩니다.
명령어 rm으로 파일을 지운 뒤 명령어 ls를 입력하면,
폴더 "bye"만 출력됩니다. 남아있는 폴더 "bye"도 마저 삭제합니다.
rm bye
#rm: bye: is a directory
ls
#bye
rm 명령어를 통해 폴더 bye를 삭제하려고 하면, bye가 폴더라는 결과를 출력합니다.
명령어 rm은 단일 파일을 삭제 가능
만약 폴더를 삭제하려면 옵션을 이용해야 합니다.
사용할 수 있는 옵션은 r과 f입니다.
rm -rf bye
ls # 아무것도 출력되지 않습니다.
1)명령어 mv는 move의 약자로, 폴더나 파일을 이동할 때 사용합니다.
mkdir bye # bye 폴더를 생성합니다.
touch bye.txt # bye.txt 파일을 생성합니다.
mv 명령어를 사용하기 전에 새로운 폴더와 파일을 생성합니다.
명령어 mv를 통해 파일 "bye.txt"를 폴더 "bye"로 옮깁니다.
mv bye.txt bye/
ls
#bye 폴더만 출력됩니다.
[커맨드]bye.txt 파일을 bye 폴더로 옮깁니다.
명령어 mv [폴더나 파일의 이름][도착 폴더의 이름]를 입력
폴더 "bye"로 이동하여, 파일 "bye.txt"가 잘 옮겨졌는지 확인합니다.
cd bye
ls
#bye.txt 파일이 출력됩니다.
bye 폴더로 이동하여 폴더 bye에 있는 폴더나 파일을 출력합니다.
이렇게, 명령어 mv는 폴더나 파일의 위치를 이동시킵니다.
2)명령어 mv를 이용하면, 폴더나 파일의 이름을 변경할 수 있습니다.
명령어 mv를 사용하기 위해 필요한 [폴더나 파일의 이름]에는, 변경할 폴더나 파일의 이름을 입력합니다.
[도착 폴더의 이름]을 대신해, 변경하고자 하는 파일의 이름을 입력합니다.
mv [폴더나 파일의 이름][변경하려는 파일 이름]
폴더 "bye"에 있는 파일 "bye.txt"의 이름을 "helloWorld.txt"로 변경하세요.
ls # 현재 폴더에 있는 폴더나 파일을 출력합니다.
#bye.txt 파일이 출력됩니다.
mv bye.txt helloWorld.txt
ls
#helloWorld.txt 파일이 출력됩니다.
bye.txt 파일의 이름을 helloWorld.txt로 변경합니다.
컴퓨터가 파일을 옮기는 방법
1)파일의 내용을 잠시 저장한다.
2)원래 위치의 파일을 삭제한다.
3)도착 폴더에 1에서 저장한 내용으로 새로운 파일을 생성한다.
만약 명령어 mv에 입력하는 폴더나 파일의 원래 위치와 도착 폴더의 위치가 같은 경우에도 폴더나 파일을 삭제하고 다시 만들까요?
: 폴더나 파일의 이름의 내용과 위치가 같고, 이름만 다른 경우에 새로운 파일을 생성하는 일은 분명 비효율적입니다.
->그러므로 폴더나 파일의 이름만 변경합니다.
현재 위치는 ~/helloWorld/hello/bye/입니다. 명령어 pwd로 확인하면, 물결 표시(~)를 대신해 운영체제에 따라 /home/username 또는 /Users/username가 나타납니다.
명령어 pwd를 입력하면, /home/[username]/helloWorld/hello/bye/(Ubuntu) 또는 /Users/[username]/helloWorld/hello/bye/(macOS)가 나타납니다.
명령어 cp는 copy의 약자로, 폴더나 파일을 복사할 때 사용합니다. 먼저, 파일을 복사합니다. 파일을 복사하기 위해 명령어 cp를 사용하는 경우에는, cp [원본 파일 이름][복사할 파일 이름]을 프롬프트에 입력합니다.
ls
#helloWorld.txt 가 출력됩니다.
cp helloWorld.txt hiComputer.txt
ls
#helloWorld.txt hiComputer.txt 가 출력됩니다.
=>helloWorld.txt 파일의 내용을 복사하여, hiComputer.txt 파일을 생성한 뒤 복사한 내용을 붙여 넣습니다.
이번에는 폴더를 복사합니다. 폴더를 복사하기 위해 명령어 cd를 이용해 상위 폴더 "hello"로 이동합니다. 다음 명령어를 입력하세요.
cd ..
ls
#bye가 출력됩니다.
pwd
#(macOS) /home/[username]/helloWorld/hello
폴더 "bye"를 복사해 새로운 폴더 "hi"를 만듭니다. 폴더를 복사를 위해 명령어 cp를 그냥 사용하면, 명령어 rm으로 폴더를 삭제할 때처럼 메시지가 출력됩니다. 명령어 cp에 사용하는 옵션은, 명령어 rm에 사용하는 옵션과 동일합니다. 다음 명령어를 통해 폴더 "bye"를 복사해 새로운 폴더 "hi"를 만드세요.
cp -rf bye hi
ls
#bye hi 가 출력됩니다.
폴더 bye를 복사해 폴더 hi를 만듭니다.
명령어를 순서대로 입력하여 bye 폴더를 복사해 hi 폴더를 생성합니다.