본문으로 바로가기
반응형

컴퓨터의 핵심은 커널이고,

커널에 전달되는 명령해석기, 직접 접근하는게 있고, 밖에 유저가 있다.

명령어 해석기는 커널을 감싸고있는데 이때 명령어 해석기를 쉘(Shell)이라고한다.

 

쉘(Shell)

쉘 프로그램은 사용자가 내린 명령을 운영체제가 수행할 수 있는 명령어로 해석하여 운영체제에게 전달하는 일을 한다. 그래서 명령어 해석기라고 부른다.

Dulicate는 복사하라는 뜻이다
창이 하나 더 뜬 것(복사된 것이다)을 확인 할 수 있다

 

1. 기본 명령어

1-1. date 명령어

현재 날짜 및 시간을 확인할 수 있다.

 

1-2. hostname 명령어

현재 호스트의 이름을 확인할 수 있다.

$hostname

 

1-3. ls 명령어

현재 디렉터리안에 존재하는 모든 것들을 확인할 수 있다.

$ ls

 

1-4. clear 명령어

화면을 깨끗이 할 수 있다.

$ clear

clear 명령어를 쓰고 엔터를 눌러주니 화면이 깨끗해졌다

 

1-5. passwd 명령어

사용자 비밀번호를 변경할 수 있다

 

 

2. 파일 및 디렉터리

 리눅스의 디렉터리는 하나의 파일로 간주되며 하나의 디렉터리는 다른 디렉터리들을 포함함으로써 계층 구조를 이루고 있다. 부모 디렉터리는 다른 디렉터리들을 서브 디렉터리로 가지고 있다.

 

 

2-1. home 디렉터리

 리눅스 시스템은 다중 사용자 시스템이기 때문에 각 사용자마다 별도의 홈 디렉터리가 있다. 각 사용자의 홈 디렉터리는 계정을 만들때 관리자에 의해 정해진다. 사용자가 로그인하면 미리 설정된 홈 디렉터리에서 작업을 시작하게 된다.(로그인하자마자 뜨는 명령창은 홈 디렉터리이다)

 

 

다음과 같이 / 디렉터리로 이동한 뒤 cd $home  을 통해  /home/pi  디렉터리로 이동할 수 있다.

 

 

2-2. pwd 명령어

 현재 작업하고있는 디렉터리의 위치를 보여준다.

 

2-3. mkdir 명령어

새 디렉터리를 만드는 명령어이다. 생성된 디렉터리는 dir 명령어를 입력하여 확인할 수 있다.

$mkdir movie

 

 

2-4 cd(체인지 디렉터리) 명령어

내가 원하는 작업 디렉터리로 이동할 수 있다.

$cd movie

 

2-5. rmdir 명령어

디렉터리를 삭제해주는 명령어이다.

$rmdir movie

movie 디렉터리가 삭제되었다

 

2-6. cd ..  명령어

한 단계 상위 디렉터리로 이동할 수 있다.(폴더에서 뒤로가기 버튼을 누른것과 같다)

$cd ..

 

 

2-7. home 디렉터리로 이동하는 3가지 방법

 1) $cd

 2) $cd /home/pi

 3) $cd ~/

 

 

2-8. touch 명령어

 빈 파일을 생성할 수 있다. touch 명령어는 빈 파일을 생성하는 것이기 때문에 파일 안의 내용은 없다.

디렉터리는 파란색인데 비해, read.txt는 흰색으로 파일로 생성된 것을 확인할 수 있다

 

ls -l  명령어를 통해 파일을 상세하게 볼 수 있다.

read.txt가 폴더인지 파일인지, 권한은 어떻게 되있는지, 소유자는 누구인지, 생성된 날짜는 언제인지 확인할 수 있다.

 

ls -a 명령어를 통해 숨겨진 폴더와 파일의 리스트를 확인할 수 있다.

숨김파일을 touch 명령어를 통해 만들어보자. 숨김파일을 생성하려면 파일명 앞에 .을 추가하면 된다.

 

ls -al 명령어를 통해 숨겨진 폴더나 파일의 리스트를 상세히 볼 수 있다.

ls 명령어 다음에 -a 와 -l 이 합쳐져 -al로 명령을 실행해도 문제가 없다.

 

 

 

2-9. cat 명령어

 파일의 내용을 화면에 바로 출력할 수 있다.

$ cat. bashrc

참고로 밑에 내용이 더 있는데 일단은 생략하자

 

2-10. head 명령어

 파일의 앞 10줄을 출력해준다.

$ head .bashrc

head 명령어는 딱 10줄만 출력해준다

 

2-11. tail 명령어
 파일의 맨 뒤 10줄을 출력해준다.

$ tail .bashrc

 

tail 명령어의 옵션을 조정하여 5줄만 출력할 수도 있다.

$ tail -5 .bashrc

tail -f옵션을 사용하면 실시간으로 변경된 내용을 확인할 수 있다.

이 명령어를 사용하기 전에,

home에서 mkdir로 webapps 디렉터리를 생성, 

webapps에서 mkdir로 ch02 디렉터리 생성,

ch02에서 read.txt 파일을 생성해주자.

 

두개의 터미널(명령창)을 열어준다.

하나의 터미널에서는 밑의 명령을 입력하고 대기한다.

$tail -f ~/webapps/ch02/read.txt

 

또 하나의 터미널에는 밑의 코드를 치고 엔터를 눌러준다.

$ nano ~/webapps/ch02/read.txt

터미널에 명령을 실행하면 아래 이미지처럼 뜬다
터미널 명령창에 Hello를 입력하고 컨트롤 + X  -> Y -> 엔터를 눌러서 빠져나온다

 

위처럼 nano로 Hello를 치고 빠져나왔다면, tail -f로 대기하던 다른 창에서 명령을 실행해주면 방금 Hello 쳤던 것이 출력 된 것을 확인할 수 있다.

뒤엣창에서 앞에창에서 nano 에디터로 입력했던 Hello가 출력되는 것을 확인할 수 있다 

 

 

 

3. 파일 이동, 삭제, 복사 명령어

3-1. cp 명령어

파일을 복사해주는 명령어이다.

cp <복사할 대상> <복사될 위치>

$ cd ~/webapps/ch02

$ mkdir test

$ ls

read.txt test            #ls의 결과창

$ cp read.txt test

$ cd test

$ ls read.txt

 

파일을 복사하는데 다른 이름으로 저장하고 싶다면 cp <복사할 대상> <복사될 위치/파일명>  으로 명령을 실행하면된다.

$ cd ~/webapps/ch02

$ ls

read.txt test             #ls의 결과창

$ cp read.txt test/rename.txt

$ cd test

$ ls

read.txt rename.txt     #ls의 결과창

 

내 위치가 어디에 있든 절대 경로를 통해 cp명령어를 활용할 수 있다.

cp <복사할 대상 절대경로> <복사될 위치 절대경로/파일명>

$cd /

$ pwd

/

$cp /home/pi/webapps/ch02/read.txt /home/pi/webapps/ch02/test/change.txt

$cd /home/pi/webapps/ch02/test

$ls 

change.txt  read.txt  rename.txt

 

 

3-2. mv 명령어

mv 명령어는 파일을 이동하는 명령어이다.

mv <파일명> <이동할 위치>

$cd ~/webapps/ch02    # ch02 디렉터리로 이동

$ touch myfile.txt          # myfile.txt 라는 파일 생성

$ mv myfile.txt test       # test 디렉터리에 myfile.txt 이동

$ cd test                    # test디렉터리로 이동

$ ls                             # test 디렉터리의 파일 확인

change.txt  myfile.txt  read.txt  rename.txt

 

mv 명령어를 통해 파일명을 변경하고 싶다면 mv <파일명> <다른 이름>  으로 변경할 수 있다.

$ mv myfile.txt yourfile.txt

$ ls

change.txt  myfile.txt  read.txt  rename.txt

 

3-3. rm 명령어

rm 명령어는 파일을 삭제해주는 명령어이다.

rm <파일명>

$ cd ~/webapps/ch02

$ ls

read.txt  test

$ rm read.txt

$ ls

test

read.txt는 삭제되고 test 디렉터리만 남아있다

 

-r 옵션을 사용하면 디렉토리를 삭제할 수 있다.

rm -r <디렉토리명>

$ cd ~/webapps/ch02/test

$ mkdir folder1 

$ ls

change.txt  folder1  myfile.txt  read.txt  rename.txt

$ cd ..

$ rm test

rm: cannot remove 'test' : 디렉터리입니다.

$ rm -r test

 

 

 

4. 파일 찾기 명령어

 리눅스를 처음 사용하다보니 내가 설치한 프로그램이 어디에 설치되있는지 알 수 없다. 그래서 설치한 프로그램의 실행 파일은 심볼릭 링크(바로가기)를 /bin 폴더에 만들어 두고 사용하는 경우가 있다.

 /bin 폴더는 기본적인 환경변수가 설정되어 있는 폴더이기 때문에 /bin 폴더 내부에 있는 실행파일은 어디에서든지 실행할 수 있다.

 

 윈도우에서 메모장을 열 때 notepad.exe 파일을 실행시켜야한다. 하지만 대부분은 notepad.exe 파일의 위치를 알지 못한다. 그래서 윈도우에서 그냥 돋보기를 누르고 메모장이라고 검색하면 실행할 수 있다.

 그 이유는 환경변수가 설정되어 있기 때문이다. 실제로 메모장 프로그램은 c:\windows/system32/notepad.exe 위치에 있다. 메모장 프로그램을 실행하기 위해서는 해당 폴더로 이동하여 실행해야하는 것이 정석이지만, 환경변수가 설정되어 있다면 어디에서든지 편하게 호출할 수 있다.

 

4-1. which명령어

특정 명령어의 위치를 전체 경로로 찾아주는 명령어이다.

which <명령어>

$ cd /

$ which rm

/bin/rm

 

 

which 명령어를 통해 python3.7 실행파일이 어디있는지 찾아보자.(참고로 일반 파일은 which 명령어를 통해 찾을수는 없다)

$ which python3.7

/usr/bin/python3.7

 

 

4-2. whereis 명령어

실행파일, 소스파일, man 페이지 파일의 위치를 찾아주는 명령어이다.

whereis <명령어>

$ whereis python3.7

 

 

4-3. find 명령어

find 명령어를 통해 python3.7라는 이름을 가진 모든 파일과 디렉토리를 찾을 수 있다.

앞에 sudo를 붙이는 이유는 pi사용자가 아닌 root 사용자의 권한을 대행 받아서 모든 폴더를 탐색하기 위함이다.

/의 의미는 최상단의 / 디렉터리부터 검색하라는 의미이다. 윈도우에서 c:\부터 검색하라는 것과 동일한 의미이다.

 

 

4. 권한

리눅스는 하나의 컴퓨터를 여러 사람이 사용할 수 있는 멀티유저 운영체제로써, 관리가 매우 중요하다. 특정 파일이나 디렉토리를 생성한 뒤 그 파일에 접근할 수 있는 권할을 설정하여 다른 유저가 접근할 수 없게 할 수 있다.

ls -l 명령어를 통해 파일을 자세히 살펴보자.

$ cd ~/webapps/ch02

$ shdo touch file1.txt

$ touch file2.txt

$ mkdir folder

$ ls -l

권한이 root와 pi로 다른 것을 확인할 수 있다

 

 

4-1. file1.txt 살펴보기

ls -l로 실행했을때, 날짜부터는 시간과 파일명(또는 디렉터리명)이라서 알고 있는데, 그 앞의 rw나 pi같은 것은 뭔지 모르겠다. 그래서 지금 알아보자.

 

 (1) 맨 앞글자

맨 앞의 글자가 - 나 d로 되어있는 것을 볼 수 있는데, 파일의 타입을 뜻한다.

- : 일반파일

d : 디렉터리(폴더)

l (엘) : 링크파일

 

 (2) rw-r--r--

두번째글자부터 열번째 글자까지는 빼기나 r, w, x 가 출력됬는데 이는 퍼미션 정보를 뜻한다.

r  :  read 권한

w  : write 권한

x  : execute 권한

-  : 권한 없음

 

또, 각 3글자마다 끊어서 의미를 알 수 있는데,

- rwx  rwx   rwx   

 소유 그룹 기타   로 나뉜다.

 

그리고 3글자씩 끊어서 2진법으로 표현할 수 있다.

4 2 1

r w x

 

위의 이미지에서 맨위의 폴더의 퍼미션정보는

rw- r-- r-- 인것을 알 수 있는데, 

6   4   4   로 읽을 수 있다.

 

chmod 646   일때,

-rw-r--rw-  로 수정할 수 있다.

 

 

 (3) 링크수

중간의 숫자는 링크 수를 뜻하며 윈도우로 비유하면 "바로가기"와 같다.

만드는 방법은 in [대상파일] [링크파일]   로 실행하면 된다.

 

 

 (4) root (첫번째)

소유자를 뜻한다.

 

 (5) root (두번째)

소유 그룹을 뜻한다.

 

 (6) 0

용량을 뜻한다. (0이라는거는 파일의 데이터가 없다는 뜻이다..)

 

 (7) 그 뒤의 날짜는 생성 날짜이며, 맨 뒤는 파일이름을 뜻한다.

 

 

 

4-2. chmod 명령어를 이용하여 file1.txt 권한 변경하기

소유자와 소유그룹이 root이고 다른 모든 유저는 읽기(r--)권한만 있는 상태이다. 그래서 pi사용자가 해당 파일을 읽는 것은 가능하지만 쓰는 것을 불가능하다.

 

 1) file1.txt 파일 읽어보기

nano 에디터를 사용해보자. nano 에디터는 윈도우에서 메모장과 같다고 보면 된다. 기본적으로 라즈비안에 설치가 되어있다.

$ nano file1.txt

nano 에디터를 통해 file.txt를 읽을 수 있다. 그 이유는 r의 권한을 가지고 있기 때문이다. 그런데 중간의 빨간 테두리로 쓸 수 없는 것도 볼 수 있다

 

 2) file1.txt 파일 수정

nano 에디터에 hello pi를 입력하고 컨트롤 + X  -> Y -> 엔터를 쳐보자
수정하고 빠져나오려는 순간 허가 거부가 뜨면서 수정이 되지 않는다

w의 권한이 없기때문에 hello pi가 저장되지 않는다. 일단 빠져나오려면 컨트롤 + X를 입력한 뒤 n을 입력하면 된다.

 

 3) file.txt 권한 수정하기

수정 권한이 있다면?

chmod <수정번호> <파일명>

 

수정 권한이 없다면?

sudo chmod <수정번호> <파일명>

 

pi가 file1.txt 파일에 수정 권한이 없기때문에 sudo를 붙인다. sudo를 붙이면 root의 권한을 대행받을 수 있다.

$sudo chmod 646 file1.txt

$ls -l

file1.txt의 권한이 rw- 으로 변경된 것을 확인할 수 있다

 

 4) 다시 file1.txt의 파일을 수정해보자

$nano file1.txt

이번엔 hello pi를 입력하고 빠져나오면 무사히 나올 수 있다

 

 

 

(3) chmod 명령어

chmod는 파일의 권한을 변경해주는 명령어이다. 숫자를 통해 권한을 변경할 수 있다,

chmod <수험번호> <파일명>

rwx 3가지 권한을 다 주려면 7을 입력하면된다.

r- 권한만 주려면 4를 주면 된다.

-w-권한만 주려면 2를 주면 된다.

--x 권한만 주려면 1을 주면 된다.

read의 약자 r은 숫자 4

write의 약자 w는 숫자 2

execute의 약자 x는 숫자 1로 표현된다. (execute는 실행하다라는 뜻으로, 윈도우에서 .exe의 약자이다)

 

rw- 권한은 읽고 쓰는 것이 가능하다는 것이다. rw-는 r의 4와 w를 더한 값인 6을 주면 된다.

r-x 권한은 읽고 실행하는 것이 가능하다. r-x는 r의 4와 x의 1을 더한 값인 5를 주면 된다.

-wx의 권한을 주려면 숫자 몇을 줘야할까? w의 2와 x의 1을 더한 3을 주면 된다.

 

 

(4) chown 명령어

파일의 소유자와 소유그룹을 변경할 수 있다.(own는 오너의 약자이다)

chown <소유자> <소유그룹> <파일명 or 디렉토리명>

 

현재 file1.txt 소유자가 root이고 그룹 소유자도 root이다. 그렇다면 현재 나는 pi로 로그인했기 때문에 해당 파이르이 소유권을 변경할 권한이 없을 것이다. sudo 명령어를 통해서 권한을 대행받고 file1.txt의 그룹 소유자를 pi로 변경해보자.

$ sudo chown root:pi file1.txt

$ ls -l

root가 pi로 바뀐 것을 볼 수 있다

 

바탕화면에 a.txt를 생성하고 바탕화면에서 cmd를 실행시켜보자

 

 

*  는 모든(All)이라는 뜻이다

 

$ls D* 

D로 시작하는 모든 파일 출력

 

$ ls *.txt   :  .txt로 끝나는 파일들을 모두 출력

 

앞에 한글자 모를때는 $ ls ?.txt 를 실행 (글자수를 세기때문에 두글자짜리는 되지않는다)

 

 

5. 입출력 재지정 IO Redirection

 리다이렉션은 표준 입출력의 방향을 바꿔준다. 모든 명령어에 대한 결과가 모니터 화면에 출력되는게 당연하다고 생각할 수 있는데, 리다이렉션으로 출력하는 방향을 바꿔줄 수 있다.

 

$ls > a.txt 출력하는 내용을 오른쪽에 보내라(a.txt에 보내라)

 

home에서 $ls -al 이 출력되는 데이터를 a.txt에 저장되는 것을 볼 수 있다. 

a.txt의 내용을 확인하려면 cat 명령어를 사용하면 된다.

두 명령어의 내용이 같으므로 a.txt 파일의 데이터가 그대로 저장된 것을 알 수 있다

 

 

>>을 사용하면 기존에 있던 파일의 내용에 추가되어서 저장된다.

$ ls -al >> a.txt

$ cat a.txt

a.txt에 기존의 내용과 ls -al의 내용이 같이 들어간 것을 알 수 있다

>만 사용하면 기존의 내용에서 덮어쓰기를 한 다음 저장하고,

>>를 사용하면 기존의 내용에서 추가해서 저장한다.

 

6. wget, apt-get, git clone 파일 다운로드

4층짜리 피라미드를 짓는다고 생각해보자.

4층의 피라미드를 지으려면 1층부터 3층까지 지어져있어야 한다. 이처럼 만약 4층의 피라미드층을 짓는것처럼 어떤 프로그램을 깔아서 실행하려는데, 피라미드를 1층부터 쌓아서 올려야하듯이 프로그램을 실행하기위한 기초 프로그램도 필요하다.

이럴때 사용하는 명령어가 dpkg이다. dpkg는 패키지 관리 시스템의 기초가 되는 S/W이다. dpkg는 저레벨의 도구이며, 복잡한 패키지 관계와 패키지를 원격에서 받아오는 일을 수행한다.

 

우리가 윈도우에서 작업한 어떤 파일을 라즈베리파이로 옮기기 위해서는 어떻게 해야할까?

- 첫번째로는 이메일을 사용하는 것이다. 

- 두번째는 원격으로 라즈베리파이에 접속하는 것이다. WinSCP같은 원격 접속 프로그램을 이용하면 파일을 전송할 수 있다. 이 경우에는 중간에 무엇인가를 거치지 않고 다이렉트로 라즈베리파이에 연결되어 전송할 수 있다.

- 세번째로는 특정 홈페이지에 파일을 업로드해두고 http 프로토콜을 이용하여 다운로드하는 방법이다.

예를들어, 카페 관리자가 회원들에게 공지를 하고싶은데 그 내용을 한글문서로 작성하였다. 이를 공지하려면 카페 게시판에 파일을 업로드해주면 된다. 그러면 회원들은 해당 게시판에서 파일을 다운로드 할 수 있을 것이다.

 

 3가지 방식중에 첫번째와 세번째 방식이 유사한 것을 알 수 있다. 공통점은 1:1이 아닌 중간에 무언가를 거친다는 공통점이 있다. 차이가 있다면 이메일은 개인에게 따로 전송해야하는 번거로움이 있지만, 웹서버를 사용하면 파일을 웹서버에 올려두기만하면 누구나 다운로드할 수 있다.

 

이렇든 카페 게시판에 공지 파일을 그냥 올리는 것처럼, 라즈베리파이에서 프로그램을이나 파일을 다운받을때 가장 쉬운 방법은 인터넷 창을 열고 해당 사이트에서 파일을 다운받는 것이다.

 

 이제부터 다운로드 방식을 실천해보자.

 

6-1. wget을 이용한 다운로드

https://terms.naver.com/entry.nhn?docId=69874&cid=43667&categoryId=43667

 

싼샤댐(삼협댐)

중국 동부와 서부를 관통하는 양쯔강 유역에 건설된 세계 최대의 수력발전 댐이다. 1994년 착공돼 2009년 완공됐으며, 그 규모는 높이 185m·길이 2335m·너비135m에 이른다. 댐 건설로 창강 홍수 범람��

terms.naver.com

현재 인기검색어에 올라와있는 싼샤댐의 이미지의 주소 링크를 복사해주자

링크 주소를 복사한 다음에 터미널에

 

$ wget post-phinf.pstatic.net/MjAyMDA3MjBfMjUy/MDAxNTk1MjE3NTEzNjA4.c8-lkSPnNQYQHd6O0_Pn0gZvB8a0LM_kIqBI1nh-9E8g.Cpj4I95ha78Iwcym1vm_uZ9S5hh4LwRJDV_G8LCfDawg.JPEG/%EC%8B%BC%EC%83%A4.jpg?type=w1200

 

를 입력해준다. (복사해뒀으면 wget만 입력하고 명령창에 마우스 우클릭만하면 그대로 붙여넣기가 될 것이다)

 

$ ls -al로 잘 생성됬는지 확인해보자

 

파일 명이 터미널창에 치는것이 mv 명령어로 간단하게 바꿔보자(test.jpg로 바꿔보자)

$ ls -al 로 확인해니까 분홍색 글씨로 test2.jpg 로 바뀌어져있다

 

라즈베리파이 안에있는 test2.jpg 파일을 컴퓨터로 가져올수도있다. 지난 포스팅에서 설치했던 WinSCP를 실행해보자.

오른쪽 라즈베리파이 안에 test2.jpg가 저장되어있다.

test2.jpg를 발견했으면 왼쪽 컴퓨터 디렉터리에 옮겨보자.

 

 

바탕화면에 test2.jpg가 옮겨졌다

wget을 통해 인터넷의 이미지를 라즈베리파이에 다운받고, 라즈베리파이에서도 이미지파일을 컴퓨터로 옮기는 방법 중 한가지를 알아보았다.

 

 

다른 방법들은 내일!

반응형