vi를 시작하는 명령어는 vi이다. 파일명을 미리 주고 싶으면 vi 뒤에 파일명을 입력해주면된다.

이번에는 미리 파일명을 만들어보자
oracle@345d3756f1ff:~/work/dir1$ vi hello
oracle@345d3756f1ff:~/work/dir1$ ls
file3 hello newfile
hello라는 vi파일이 생긴걸 볼 수 있다.
다시 명령프롬프트로 돌아오는 명령어는 2개이다. 하나는 "::q"이고 다른 하나는 ":q!"인데 둘의 차이는 q는 저장할지 물어보고 나가기이고 q!는 저장하지않고 바로 나가는 것이다. 저장하고 나가려면 :wq를 해주면 된다.
vi는 모드가 두개가 있다.
이 명령어 모드에서 편집모드로 전환하는 키는 i이고 명령어모드로 전환 하는 키는 esc이다.
기본적으로 명령어 모드에서는 :(콜론) 누르고, 단축키 입력한다.

반면에 편집모드는 아래 INSERT라는 문구가 있다.

그림과 같이 문자 입력이 가능하다.
명령어모드에서 vi파일의 찾고싶은 단어가 있는지를 검색할 수 있다.
n 은 next의 약자이다.
/tomorrow는 커서가 젤 위에 있어서 그 밑인 제일 처음의 tomorrow부터 찾는다.
?tomorrow는 커서가 젤 위에 있어서 그 위인 제일 끝의 tomorrow부터 찾는다.
이름이 틀렸거나 했을때 모든 이름을 찾아서 하나씩 변경하는 것은 매우 까다로운 일이다. 그런데 vi파일에 존재하는 특정 단어를 한번에 다 바꿔주는 기능이 있다.
기존의글
이 글에서 and를 but으로 다 바꿔보자
변경된 글
but으로 바뀐 것을 확인 할 수 있다.
윈도우의 바탕화면 테마와 비슷한 개념이고,종류로는 bash 셀, csh 셀, born 셀 등이 있다.
bash 셀 환경에 값을 저장하는 곳이라고 보면된다.
"$변수"의 형태로 사용한다.
var1='test var'
다음과 같이 변수를 만들었다고 하면
oracle@345d3756f1ff:~/work$ echo $var1
test var
이렇게 사용이 가능하다. 셀에 변수를 만들어 다음과 같이 사용이 가능하다.

oracle@345d3756f1ff:~/work$ echo $SHELL
/bin/bash
ehco를 통해 $SHELL을 출력하면 현재 bash를 사용하기에 bash를 출력한다.
지금까지 우리는 명령어를 그냥 사용했다. 그런데 사실 명령어는 파일로 이루어져있고 그 파일의 경로를 모두 입력해주어야 명령어를 실행 할 수 있다. 그런데 $PATH에 명령어의 경로를 미리 넣어주면 경로를 따로 적어주지 않고 명령어만 입력해서 실행이 가능해진다.
oracle@345d3756f1ff:~/work$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$PATH를 출력하면 $PATH가 가지고있는 경로들이 무엇이 있는지를 보여준다.
경로는 :(콜론)을 기준으로 하나의 경로가 되는데 위를 보면 $PATH가 가지는 명령어는
등이 있다. 그런데 이 외에도 사용자가 명령어를 만들고 싶다면 명령어를 만들고 경로를 $PATH에 넣어주면 추가가된다.
한국어 라이브러리 설치하면 다음의 명령어로 언어를 바꿀 수 있다.
셀변수를 만들는 방법을 배웠다. 하지만 이 우리가 만든 셀 변수는 로그아웃을 하거나 리눅스를 종료하면 사라진다.
이 때 로그아웃을 해도 사라지지않게 특수한 파일에 적어놓고 사라지지 않게 할 수 있다. 여기다 적어놓으면 os가 실행될때 이 파일을 읽어들여 로그아웃 해도 사라지지 않고 다음에도 사용이 가능하다.
특수한 파일은 여러개가 있다.
1번과 2번에 변수를 저장하면 저장한 사용자계정에서만 변수 사용이 가능하지만 3번에 저장할 시 모든 리눅스 사용자가 사용이 가능해진다. 그래서 3번은 root계정에서만 접근이 가능하다.
소유권과 관계가 있다. 작성한 사람이 기본적으로 소유권을 가지는데, 여기서 작성하지 않은 사람중 그룹의 같은 그룹의 계정과, 그룹이 아닌 계정이 파일에 접근 할 수 있는 권한을 정할 수 있다.
권한에는 3종류가 있다.
이 세 권한중 어떤 사람에게는 어떤 권한만 줄지를 정할 수 있다.

cat명령어의 권한은
에해당하는 권한이다. 여기서 rwx는 각각 읽기,쓰기,실행 권한이고 -는 권한이 없다는 뜻이다. 작성자의 젤처음 -는 파일을 뜻한다.(만약 폴더라면 d이다.)

작성자의 권한중 읽기를 뺐어보자.
chmod는 change mode이다. u는 user의 u이고 그룹은 g, 다른 사람은 o이다.

권한이 없으니 cat으로 읽을 수 있는지 보자
oracle@345d3756f1ff:~$ cat newfile
cat: newfile: Permission denied
권한이 없어 읽을 수 없다고 나온다.
다시 뺐은 권한을 줘보자
다른 것은 다 같고 뺐기의 "-"를 "+"로 해주면 된다.

작성장의 읽기 권한이 다시 생겼다.
각 권한에 해당하는 숫자가 있다.
oracle@345d3756f1ff:~$ chmod 777 newfile3
oracle@345d3756f1ff:~$ ls -l
total 4
-rw-r--r-- 1 oracle dba 0 Feb 22 06:23 newfile
-rw-r--r-- 1 oracle dba 0 Feb 22 06:32 newfile2
-rwxrwxrwx 1 oracle dba 0 Feb 22 07:07 newfile3
drwxr-xr-x 4 oracle dba 4096 Feb 22 00:39 work
newfile3에 777을 주었다. 7은 모든 권한을 다 주는 거라서 3명에게 모두 3권한을 주었다.
기본적으로 컴퓨터에서 os는 하나만 실행이 가능한데 가상화 sw를 이용하면 여러개의 os를 한 컴퓨터에서 실행이 가능하다. 그 가상화sw 중 가장 대표적인것이 docker이다.
리눅스 os 설치가 가능하고 db도 간단 설치가 가능하다. 업무용 프로그램도 도커로 제작이 가능하다.
배포란 우리가 만든 프로그램을 항상 켜져있는 회사용 컴퓨터에 올리는 것을 말한다. 보통 아마존의 aws에 배포를 하게 되는데 이때 우리 프로그램은 여러 언어와 기술들을 이용해서 만들게 된다. 이것들을 배포하려면 여러 기술이 사용되었기 때문에 하나하나 설정을 해주어야하지만, docker를 통해 프로그램을 이미지로 만든다음 aws에서 다시 프로그램화 해주면 다른 설정없이 편하게 배포를 할 수 있다.
docker의 구조는 크케 이미지와 컨테이너로 나뉜다. 프로그램을 이미지로 만든 다음 컨테이너에 실행을 하는 것이다.
컨테이너는 독립된 공간의 프로그램이고, 다른 os와 격리되어 있어 기본적으로 통신이 되지 않는다.
docker에서 제공하는 hello-world라는 이미지를 컨테이너에서 실행해보자.


Hello form Docker이 뜨면 잘 실행된 것이다.
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Status: Downloaded newer image for hello-world:latest
이건 다운로드 내용인데 hello-world를 컴퓨터에서 먼저 찾았는데 찾을 수 없다고 한다. 이건 이미지 실행을 입력하면 먼저 내 컴퓨터에서 이미지를 찾고, 없으면 docker hub library에서 가져오게된다.
컨테이너를 실행하기위해 이미지를 컴퓨터에 다운받아야한다. 그 후 해당이미지를 실은 컨테이너를 실행하면된다.
참고로 docker의 이미지와 컨테이너의 이름은 중복되지 않는다. 중복되면 호출시 여러개 파일이 호출될 수 있기때문에 고유해야한다.
이미지를 다운받는 방법에는 2가지가 있는데


삭제할때는 컨테이너 먼저 삭제하고 이미지를 삭제해야한다.