728x90
반응형
728x90
반응형

31. 로그인 없이 로그인 하기(SSH Key)

31.1 Loginless : ssh public private key

SSH, rsync, git과 같은 기술을 사용할 때 로그인이 번거롭고 보다 안전한 방법으로 인증하고 싶다면 SSH공개키를 이용하면 됩니다. 

SSH공개키를 이용하면 편의성과 보안성 모두를 높일 수 있다고 하네요.

linux1컴퓨터

 · ssh-keygen -> enter -> y : id_rsa파일의 형태로 저장됩니다. 공개키와 비공개키를 만드는 것이죠.

 · cd ~ : 홈 디렉토리로 이동합니다

 · ls -al : .ssh디렉토리가 생성되어 있습니다.

 · cd ~/.ssh -> ls -al : authorized_keys파일 안에 id_rsa.pub키의 값을 파일 끝에 붙여주면 됩니다.

 · ssh-copy-id egoing@192.168.0.67 : 로그인하고자 하는 컴퓨터의 IP주소를 입력하여 linux1의 아이디를 복사를 하는 명령어입니다. 즉 linux1에 있던 is_rsa.pub에 값이 linux2 authorized_keys파일에 공개키가 저장됩니다.

linux1의 사용자를 linux2컴퓨터에 로그인하는 것을 허용한다는 의미로 해석됩니다.


linux2컴퓨터

 · cat authorized_keys : authorized_keys파일의 내용을 읽습니다.




31.2 Loginless2 : rsync

rsync는 컴퓨터와 컴퓨터 사이 동기화를 시키는 것인데요. 동기화를 위해서는 기본적으로 로그인 필요합니다.

linux1 컴퓨터

 · mkdir rsync3 -> cd rsync3 : rsync3디렉토리로 이동합니다.

 · touch test{1..100} : 100개의 비어 있는 파일이 생성됩니다.

 · rsync -avz .egoing@192.168.0.67:~/rsync_welcome : 현재 디렉토리에 있는 내용을 IP주소의 홈 디렉토리 밑 rsync_welcome의 디렉토리에 100개 파일을 동기화 시키는 명령어입니다.

linux2 컴퓨터

 · mkdir rsync_welcome: rsync_welcome디렉토리를 생성


rsync기능은 실행에 있어 편리합니다. cron은 정기적으로 명령을 실행시키는 것인데요.

rsync로 자동로그인하여 cron을 이용하여 정기적으로 백업을 자동화 처리할 수 있습니다.


31.3 Loginless3 : RSA

정보를 아무도 모르게 알아야 하는 사람만 알도록 이해할 수 없는 정보로 바꾸는 것을 암호화(encrypt)

암호화된 상태를 원래의 상태로 돌리는 것을 복호화(decrypt)라고 합니다.

Key를 이용해 암호화와 복호화를 하는데요. 키를 가진 사람만이 암호를 읽을 수 있겠죠.

암호화를 할 때와 복호화를 할 때 똑같은 키를 사용하는 것을 대칭적인 방식이라고 부릅니다.

예를 들면 정보를 암호화할 때 private키를 통해 암호화를 하는 것이죠.

private키를 public키로 돌릴 수 있는데 각각의 키가 달라지는 방식을 비대칭 방식이라고 합니다.

예를 들면 ssh키젠을 이용해 키를 만들 때 id_rsa(private키), id_rsa.pub(public키)가 짝을 이루어 다닙니다.

암호화할 때 private키를 썼다면 복호화 할 때 반드시 public키를 사용해야 합니다.

비대칭 방식의 대표 주자가 바로 RSA인데요

RSA방식은 SSH client가 SSH server에게 접속한다면 서버는 클라이언트에게 랜덤키를 줍니다. 랜덤키를 받은 클라이언트는 id_rsa파일이 있는 지 확인하고 서버가 전송한 랜덤키를 암호화(정보를 알아야하는 사람만 알도록 정보로 바꾸는 것) 시킵니다. 암호화된 결과를 다시 서버에게 전송합니다. SSH server는 암호화된 정보를 authorized_keys에 저장된 공개키를 이용해 다시 복호화(암호화된 상태를 원래의 상태로 돌리는 것)합니다. 복호화된 결과(클라이언트가 보내준 암호화된 키)가 SSH server가 랜덤키의 결과와 같다면 로그인을 허용하는 것입니다.

RSA방식은 아이디, 패스워드를 입력하는 것보다 복잡한 패스워드를 파일에 저장하여 파일을 갖고 로그인하는 것이 훨씬 안전하다고 하네요.



linux1컴퓨터

 · ls ~/.ssh/ : id_ras(private키), id_rsa(public키) 등의 파일 목록이 있습니다.

 · ssh egoing@192.168.0.67 : linux2 컴퓨터로 로그인합니다.

linux2컴퓨터

 · ls ~/.ssh : authorized_keys파일에 id_rsa_pub값을 가진다면 컴퓨터에 접속을 허용하겠다는 의미입니다.


32. 연속적으로 명령 실행시키기(;과 &와 &&의 차이)

CLI를 통해 컴퓨터를 제어하는 이유 중 하나는 해야 할 일을 순서대로 배치해서 자동화된 처리를 할 수 있다는 것입니다. 자동화된 처리를 위해서 명령어와 명령어 간의 연결하는 구분자를 잘 알아야 할 필요가 있습니다. 언어로 치면 접속사와 같은 의미를 갖습니다.

 · ; : 세미콜론 앞의 명령어가 실패해도 다음 명령어를 실행합니다.

 · mkdir test;cd test : test디렉토리를 생성 후 test디렉토리로 이동합니다.

 · && : 앞의 명령어가 성공했을 경우에만 다음 명령어가 실행됩니다. 세미콜론과는 다른 의미를 갖죠

 · mkdir test; cd test; touch abc : 세미콜론은 성공과 실패를 떠나 연속적으로 실행해야 할 명령을 사용할 때 씁니다. test디렉토리는 이미 존재하기에 실패를 하고 test디렉토리를 이동하여 abc파일을 생성합니다.  반면에

 · mkdir test && cd test && touch abc : test디렉토리가 이미 존재하기에 실패하여 cd test와 touch abc가 실행되지 않습니다. 대체로 &&를 쓰는 것이 좋다고 합니다.

&와 &&의 차이

&명령어는 백그라운드로 동작시킬 때 사용합니다.

 · mkdir test & cd test : test디렉토리를 백그라운드로 생성함과 동시에 test디렉토리로 이동하려 했기에 cd test는 존재하지 않는 디렉토리로 진입을 하려 하기에 no such file or directory메시지가 뜨고 test디렉토리는 생성됩니다.

& : 앞의 명령어를 백그라운드로 돌리고 동시에 뒤에 명령어를 실행합니다.

 · mkdir test3 && { cd test3; touch abc; echo 'success!'; } || echo 'there is no dir';

: mkdir test3가 성공했을 때 cd test2; touch abc를 실행하고 success!!를 출력합니다. 실패했을 경우 'There is no dir'이 출력되죠.




생활코딩 리눅스 강의



728x90
반응형
728x90
반응형

28. 포트(port)

28.1 포트란 무엇인가?

www.naver.com:80 으로도 네이버 홈페이지 접속이 가능합니다. 80이외의 숫자를 입력하면 접속이 불가능하죠.

80을 네이버의 포트 번호라고 합니다. 포트 번호는 생략이 가능합니다.

web server는 기본적으로 80번으로 접속하기로 약속되어 있습니다.

ssh server는 22번 포트를 사용합니다. 0~1024번을 well known포트로 불리는데요. 포트 번호를 명시하지 않아도 접속이 가능하도록 되어있습니다.



 · sudo nano /etc/ssh/ssh_config : ssh포트번호는 22번으로 되어 있습니다. 변경이 가능합니다.

 · sudo service ssh restart : ssh설정을 변경하였기에 재시작을 합니다.



28.2 port forwarding, 포트 포워딩이란?

ISP(Internet Service Provider)와 하나의 회선을 계약합니다. 인터넷을 사용하는 가전(노트북, 컴퓨터, TV, 스마트폰 등)이 1대 이상일 때 공유기를 통해 여러 개의 회선을 연결하여 인터넷을 사용하죠.

이때 라우터의 IP를 Public IPAddress(공용 IP), 여러 장비의 IP를 Private Address(사설 IP)라고 부릅니다.

외부인들은 public IP를 통해 접속을 하죠. 그렇다고 사설IP로 접속을 할 수 없는 것은 아닙니다.

바로 포트 포워딩(port forwarding)을 통해 외부인이 private IP주소로 접근 가능하도록 합니다.

예를 들어 router의 포트번호가 9000번일 때 211.46.24.37:9000 주소로 접근하게 되면 외부인은 회선을 통해 router에 도착을 합니다. 65000개의 포트 중 9000번 포트에 접속을 한 것이죠. 즉 9000번 포트의 신호가 192.168.0.4:80 컴퓨터로 이동하여 컴퓨터가 신호를 받아 컴퓨터에 저장되어 있는 웹 페이지가 출력되어 외부인에게 전달하는 것입니다.

router(공유기) 안 쪽에서만 통용되는 IP를 default gateway라고 합니다. 공유기가 갖고 있는 IP라는 의미를 갖습니다.



28.3 port forwarding, 포트 포워딩 실습

 · ip addr : inet 뒤에 주소가 자신의 IP를 나타냅니다. ifconfig역시 IP주소를 알려줍니다.

 · ip route : default gatewy의 IP주소를 알려주는 명령어입니다.



학교나 회사, 공공장소의 경우 default gateway로 접속하는 것은 불가능합니다.

 · curl http://ipinfo.io/ip : 공개 IP주소를 알려줍니다. 라우터의 IP주소입니다.

 · 사설 IP는 ip addr, ifconfig의 주소입니다.

아래의 화면은 default gateway에 접속하여 환경 설정을 해준 것 입니다. 

외부 사용자가 라우터의 IP주소:9000으로 접속하면 router로 접속하게 됩니다. router의 포트 번호를 9000번으로 지정한 것이고 사설IP:80으로 포워딩을 하게 됩니다. 웹 서버로 접속하여 공유기가 요청한 사용자에게 웹 브라우저 화면을 돌려줍니다.



29. 도메인(domain)

29.1 기본

client가 google.com을 입력하면 주소가 아닌 IPAddress(172.217.26.46)로 구글 서버에 접속하는 커넥션이 이루어집니다.

도메인(Domain)은 IP주소를 외우기 어렵기 때문에 google.com처럼 이름을 부여한 것입니다.

DNS(Domain Name System)은 DNS에 접속하여 구글의 IP주소를 172.217.26.46알려주는 서버입니다.

 · ping google.com : 구글의 IP주소를 알 수 있는 명령어


29.2 host파일

DNS가 나오기 전에 hosts파일을 사용하여 서버에 접속하였다고 합니다. host파일은 도메인이 어떤 IP주소이다라는 정보를 갖고 있는 파일입니다. 

 · elinks google.com : 구글의 홈페이지가 나옵니다.

 · elinks http://localhost/ : 개인 웹 서버 화면이 나옵니다.

 · sudo nano /etc/hosts : hosts파일 편집기로 이동합니다.

127.0.0.1(자기 자신을 나타내는 IP) google.com -> ctrl+x -> Y 빠져나옵니다.

 · elinks google.com : 구글의 홈페이지가 아닌 자신의 웹 서버 화면이 나옵니다.

host파일에 접속하려는 주소가 없을 때 DNS로 접속하는데요. 

각각의 컴퓨터를 host, host컴퓨터가 모여 있는 것을 network, network의 집단을 Internet이라고 합니다.

hosts파일 활용 예입니다.

운영하는 서버가 도메인에 등록되어 있어 사람들이 네이버, 구글과 같이 특정 서버로 방문할 수 있다고 합니다.

이때 서버에 결함이 발생하여 내용을 바꿔야 한다면 서버의 내용을 수정해야겠죠. 수정한 내용을 바로 서버에 반영한다면

실수가 발생할 수 도 있습니다. 이때 hosts파일이 자기 컴퓨터 개발 환경에서만 수정 가능하도록 하게 해줍니다.

host파일은 일시적으로 특정 도메인의 IP를 자기 컴퓨터로 수정할 수 있게 해주는 것입니다.

주의할 점이 있습니다. hosts파일은 해커들의 공격 대상으로 구글 사이트가 아니지만 구글과 같은 디자인의 사이트를 만들어 구글로 착각을 하게 하여 아이디와 패스워드를 가로채어 나쁜 짓을 한다고 하니 hosts파일을 사용할 때 주의해야 한다고 합니다. 백신 프로그램이 hosts파일을 보호하니 설치해두면 좋다고 하네요.


29.3 도메인 구입

 · cat /etc/resov.conf : Name Server IP주소를 확인할 수 있습니다.

도메인을 사용하기 위해서는 도메인을 구입해야합니다.

다양한 가격의 도메인이 존재하며 net.com(유료), ga(공짜)라고 하네요.

구글에 freedomanin : 도메인 구입을 위해 freenom 사이트로 이동합니다.

도메인을 입력하고 check availablity를 누르고 get in now -> check out(12개월까지는 공짜) -> continue -> 로그인 -> Complate Order -> 구매가 완료됩니다.

입력한 도메인으로 인터넷 모든 사용자가 접속할 수 있게 됩니다.

도메인으로 접속하는 것이 아니라 도메인의 IP주소를 확인하여 접속을 하는 것이죠.

host 도메인명 : 도메인의 아이피를 확인할 수 있습니다. 


29.4 서브 도메인

여러 개의 도메인을 사는 것은 비효율적입니다. 서버가 여러 개의 경우라면 도메인을 재사용할 수 있습니다.

각각의 도메인 앞에 서브 도메인을 붙임에 따라 ip를 부여한다면 1개의 도메인으로 여러 개의 서버를 사용할 수 있습니다.



29.5 DNS 동작 원리

 · dig +trace 도메인명 : DNS에게 도메인의 IP 의뢰한 결과 000.000.000.000 형식의 IP주소를 알려줍니다.

우리의 DNS root DNS Server 주소를 알고 있습니다. root DNS Server는 전세계 골고루 흩어져 있다고 합니다. root DNS Server가 없다면 도메인이 막히겠죠.  IP로는 통신이 가능이 가능합니다.

도메인을 구입하는 것은 ga에게 관리비를 내어 어떤 요청이 들어왔을 IP정보를 담고 있는 DNS 안내를 해줍니다.

DNS서버 구축 운용보다는 사업자의 DNS서버 구매를 통해 많이 사용한다고 합니다.


30. 인터넷을 통한 서버간 동기화(rsync)

30.1 rsync basic(remote sync)

인터넷을 통해 사용할 수 있는 편리한 기능의 사례에 대해 알아보겠습니다.

스마트폰에서 드랍박스나 구글 드라이브의 경우 sync한다는 표현을 사용합니다.

sync란 특정 컴퓨터의 내용을 다른 컴퓨터로 올려 반영하는 것입니다.

src디렉토리에 파일을 만들어 dest디렉토리에 동기화를 시켜보겠습니다.(쉽게 말해 복사를 한다는 의미)

 · mkdir rsync -> cd rsync/

 · mkdir src (source의 약자)

 · mkdir dest (destination의 약자) -> ls 2개의 디렉토리가 생성되었습니다.

 · cd src -> touch test{1..10} : test1~test10 10개의 파일이 생성됩니다.

 · cd .. : 홈 디렉토리로 이동

 · rsync -a src dest : dest디렉토리에 src디렉토리를 생성하는 명령어입니다.

 · rm -rf dest/src : dest디렉토리 밑에 src디렉토리를 삭제합니다.

 · rsync -a src/dest : 10개의 파일을 동기화(복사)하는 명령어입니다.

 · ls -al dest : 10개의 파일이 동기화 되었습니다.

 · cd dest -> rm test10: dest디렉토리에 test10파일을 삭제합니다.

 · rsync -av src/ dest : -av는 자세한 동기화를 의미합니다.

 · rsync --help : rsync의 도움말입니다.

rsync는 계속 반복하여 실행 가능하기에 편리하다고 합니다.



30.2 Remote sync

 · ip addr : 상대 컴퓨터로 동기화하기 위해 IP주소를 알아야합니다.

 · rsync -azP~/rsync/k8805@192.168.0.65:~/rsync/dest : z는 압축의 의미, p는 전송 사항을 보여줍니다.

상대방의 IP주소를 입력 후 동기화 시키고 싶은 디렉토리를 지정하는 명령어입니다.

~은 k8805라는 사용자의 홈 디렉토리에 rsync디렉토리 밑에 dest디렉토리로 동기화 하겠다는 의미입니다.




생활코딩 리눅스 강의






728x90
반응형
728x90
반응형

25. 인터넷, 네트워크 그리고 서버

25.1 Internet

프로그램을 설치하고 명령어를 실행하는 것도 중요하지만 인터넷, 네트워크, 서버의 기초를 이해하는 것이 더 중요하다고 합니다. 내 컴퓨터에서 url주소를 google.com을 입력하고 enter를 치면 서버에서는 내 컴퓨터에 구글 화면을 전송하여 뜨게 해줍니다. 인터넷은 request와 response를 주고 받는 것이라고 할 수 있는데요.

예를 들어 클라이언트 컴퓨터에 게임 프로그램을 설치해 게임의 내용이 게임 회사의 서버로 전송하게 됩니다. 게임 회사의 서버를 게임 서버라고 부르며 채팅 프로그램이 깔려있다면 채팅 서버라고 부릅니다.

인터넷에 google.com을 입력하면 구글 홈페이지가 나옵니다. 이를 Domain name이라고 부릅니다. 

IP주소를 입력해봅시다.

ping google.com 리눅스에 ip주소를 검색하는 명령어입니다. 결과는 172.21.25.78이 나오는데 이를 IP(Internet Protocol) adress라고 부릅니다. 구글에 접속하는 방법은 2가지가 되겠네요. 도메인에 google.com을 입력하는 것과 172.21.25.78을 입력하는 방법이 있습니다. 2가지 방법이 있는 이유는 예를 들어 설명해보겠습니다. 친구와 통화를 하기 위해서는 전화를 걸어야합니다. 전화를 거는 방법에도 2가지가 있는데요. 번호를 입력하는 것을(IP address)과 전화번호부에 이름을 검색하여 전화하는 방법(domain name)이 있습니다. 친구가 1명이라면 번호를 외우기 쉽겠지만 모든 번호를 외우는 것은 불가능하죠. 

여기서 또 문제가 있습니다. 내가 IP주소를 저장한 적이 없음에도 불구하고 172.21.25.78주소가 구글 홈페이지라는 것을 알 수 있는 이유는 무엇일까요?

바로 DNS(Domain Name System)때문입니다. DNS는 이 세상의 모든 도메인이 각각 어떤 IP주소를 갖는 지 알 수 있는 거대한 전화번호부와 같습니다.

IP주소를 입력하게 되면 컴퓨터가 DNS서버에 접속하여 자신의 데이터를 찾아서 내 컴퓨터에 구글 IP주소를 알려줍니다.

친구를 자신의 집으로 초대할 때 자신의 주소를 알아야만 다른 사람이 찾아올 수 있는 것과 같은 개념입니다.



25.2 Internet2

서버 운영하는 법에 대해 구체적으로 알아보겠습니다.

ip addr : 자신의 ip주소를 알 수 있는 명령어입니다.

 컴퓨터에 누군가 접속하기 위해  10.0.2.15주소로 접속하면 방문할 수 있다는 의미죠.

 GUI방식에서는 도메인에 ipinfo.io/ip를 입력하면 자신의 IP주소가 뜹니다.

curl ipinfo.io/ip : 역시 IP주소를 알려주는 명령어입니다.

두 개의 명령어 결과가 다른 이유는 ip addr은 컴퓨터의 실제 IP주소이고 

curl은 온라인 서비스 입장에서 자신에게 접속한 IP주소이기 때문입니다.



집은 장비마다 통신사가 별도의 계약을 체결을 하여 인터넷을 사용합니다. 

각각의 장비마다 다른 IP주소를 부여하게 되면 편리하지만 비용이 비싸다고 합니다.



비용 절감을 위해 통신사와 집은 하나의 회선만 계약을 하고 공유기(router)라는 장치를 통해 연결합니다.

통신사가 갖는 IP주소는 router가 갖게 됩니다. 각각의 장비들은 통신을 위해서는 IP주소가 반드시 필요하죠.

대표 router의 대표IP주소(Public Address)를 통해 각각의 장비(lap top, TV, Desktop, smart phone)가 IP주소(Private Address)를 갖게 됩니다.

서버 컴퓨터로 사용하기 위해서는 public address와 private address의 주소가 같아야 합니다. 대부분의 사용자들의 컴퓨터들은 같지 않기 때문에 서버 컴퓨터로 사용할 수 가 없습니다. 하지만 방법은 있다고 합니다.

예를 들어 설명을 해보겠습니다. 회사에는 대표 번호가 있어 대표 번호를 통해 각 부서에 연결을 시켜줍니다.

부서의 번호를 내선 번호라고 하죠. 대표 번호가 없이도 내선 번호끼리 통화를 할 수 잇습니다. 컴퓨터 역시 외부 컴퓨터가 접속할 수 없어도 라우터 간 컴퓨터는 접속할 수 있습니다.



26. 웹 서버(Apache)

26.1 apache intro

Web Server는 1대의 제한에서 벗어나 전세계 모든 사람들에게 내 컴퓨터에 접속해 정보를 제공하는 효과를 줍니다.

클라이언트가 index.html을 찾으려는 요청이 들어오면 웹 서버(apache, nginx, iis)는 저장 장치(ssd, hdd) 어딘가에 있는 index.html파일을 읽어 웹 브라우저(ie, firefox, chrome)에게 응답합니다.


26.2 apache install

 · super apt-get install apache2 : 아파치 웹 서버 프로그램을 설치

 · sudo service apache2 start : 아파치 웹 서버 프로그램 시작
 · sudo service apache2 stop : 아파치 웹 서버 프로그램 종료
 · sudo service apache2 restart : 아파치 웹 서버 프로그램 재시작
 · sudo apt-get install elinks : elinks 웹 브라우저 프로그램을 설치
 · elinks ->google.com -> q를 통해 빠져 나올 수 잇습니다.



 · elinks http://10.0.2.15/ : Ubuntu logo Apache2가 나오면 성공적으로 설치되어 잘 접속되었다는 의미입니다.

웹 서버의 주소를 알기 위해 ip addr명령어를 사용하였는데 이 외에도 자신의 컴퓨터로 접속하는 방법으로 localhost가 있습니다. 현재 1대의 컴퓨터에서 Web Browser와 Web Server가 서로 정보를 주고 받는 것을 진행하였습니다. 

WB를 통해 WS에 접속할 때 ip addr명령으로 서버의 IP주소를 알아내어 접속하는 것도 방법이지만 localhost(127.0.0.1) 자기 자신의 컴퓨터를 가리키는 주소입니다.



26.3 apache configuration

 · cd /etc : etc디렉토리로 이동, 여러 가지 동작 방법 설정들이 저장되어 있습니다.

 · cd apache2/ : etc/apache2로 이동, apache2에 대한 설정 파일이 있습니다.

 · nano apache2 : 설정 파일에 대한 설명이 있으며, 

sites-enabled/*.conf는 sites-enabled디렉토리 안 conf파일을 모두 읽는 다는 의미입니다.

 · ls -al : apache2프로그램의 파일 목록을 보여줍니다. sites-enabled 디렉토리 파일이 있습니다.


 · cd sites-enabled : sites-enabled디렉토리로 이동합니다.

 · ls -l : 000-default.conf파일이 있습니다.

 · nano 000-default.conf : /var/www/html 디렉토리가 있습니다.

 · cd /var/www/html : 디렉토리로 이동합니다.

 · ls -al : index.html 파일이 있습니다.

 · elinks http://10.0.2.15/index.html : index.html파일로 이동합니다.



 · sudo nano helloserver.html : helloserver.html편집기로 이동합니다.

 · 간단한 <html><body>hello server! hello killershin!</body></html>문법을 입력합니다

 · ctrl+x -> y 저장을 합니다.

 · elinks http://10.0.2.15/helloserver.html : 웹 브라우저(elinks)의 helloserver.html요청에 웹 서버(아파치)가 응답합니다.



26.4 apache.log

 · cd /var/log/apache2/ : apache2 디렉토리로 이동합니다

 · ls -al : access.log파일과 error.log파일이 위치합니다.

 · tail -f /var/log/apache2/access.log : 파일의 끝에 있는 정보만 출력, -f는 파일에 대해 실시간으로 끝에 정보를 추가시켜주는 옵션


27. 원격제어 (SSH)

27.1 SSH Intro

리눅스가 집중받는 이유는 서버 사용자 중 압도적인 다수가 리눅스를 사용하기 때문입니다.

IOT 사물 인터넷 안에 설치되어 있는 운영체제는 리눅스라고 합니다. 사물 인터넷은 인터넷을 통해 다루는 컴퓨터

자신의 컴퓨터를 통해 인터넷 너머에 있는 원격 제어를 해야 하는 경우에 SSH를 사용합니다. 대표적으로 팀 뷰어 프로그램이 있죠. 원격 제어를 하면 인터넷만으로 컴퓨터를 다룰 수 있습니다.

SSH client server관계는 Web client server관계와 일치한다고 합니다.



27.2 SSH2

sudo apt-get purge openssh-server openssh-client : ssh 강력한 삭제 명령어

sudo ssh apt-get install openssh-server openssh-client : ssh-server카테고리

sudo service ssh start : ssh 시작

sudo ps aux | grep ssh : 현재 실행 프로세스 중에 ssh 보여주게 된다.

ssh egoing@192.168.0.255 : 다른 컴퓨터에 입력 egoing컴퓨터로 접속한다.




생활코딩 리눅스 강의

728x90
반응형

'OS > Linux' 카테고리의 다른 글

리눅스 명령어 이해하기10!!  (0) 2017.09.02
리눅스 명령어 이해하기9!!  (0) 2017.09.01
리눅스 명령어 이해하기7!!  (0) 2017.08.30
리눅스 명령어 이해하기6!!  (0) 2017.08.29
리눅스 명령어 이해하기5!!  (0) 2017.08.28
728x90
반응형

22. 사용자의 추가

사용자(user)를 추가하는 방법에 대해 알아보겠습니다.

명령어는 크롬에서 검색하여 사용해도 되니 굳이 외우지 않아도 된다고 합니다.

 · sudo useradd -m tom : -m옵션은 홈 디렉토리를 만들어 주는 것이라 합니다.

 · cd /home : 홈 디렉토리로 이동합니다.

 · ls : duru라는 사용자가 추가 되었습니다.

 · sudo -duru : duru라는 사용자로 로그인합니다.

사용자 계정은 만들었지만 패스워드는 입력하지 않았기 때문에 에러 메시지가 뜹니다.

 · sudo passwd duru : 패스워드를 세팅해줍니다.

 · sudo pwd : duru는 슈퍼 권한이 없기 떄문에 에러가 뜹니다.

 · sudo usermod -a -G sudo duru : duru에게 sudo명령을 사용할 수 있도록 권한을 부여합니다.

    -a는 append 그룹의 사용자를 추가한다는 의미이고 -g를 같이 사용해야 합니다. 



man usermod : usermod에 대한 도움말이 나옵니다. q를 통해 빠져나올 수 있습니다.



23. 권한(Permission)

23.1 권한 기초

블로그나 게시판을 사용할 때 쓴 글의 공개여부를 할 수 있는 기능이 있습니다. 이를 권한이라고 합니다

유닉스 계열 시스템에서 권한의 대상은 file과 directory입니다.

사용자가 파일과 디렉토리에 대한 권한을 지정하는 것입니다.

즉 파일과 디렉토리에 대해 read(읽기) & 쓰기(write) & 실행(execute)의 기능을 추가,제거 하는 것이죠.

 · touch perm.txt : perm.txt라는 txt파일을 생성합니다.

 · ls -l perm.txt : perm.txt파일에 대한 상세보기 입니다.

 · echo '문자열' : 화면에 문자열을 표준 출력하는 명령어입니다.

 · echo 'hi' > perm.txt : hi라는 메시지가 perm.txt에 출력됩니다.

 · cat perm.txt : hi가 출력되는 것을 확인할 수 있습니다.

하지만 duru사용자가 echo 'hello' > perm.txt을 입력하면 permission denied 에러 메시지가 출력됩니다.

- | rw- | rw- | r-- | 1 | duru duru | 3 | Aug 30 10:50  | perm.txt 

- : type으로 기본적인 파일을 의미합니다. d는 디렉토리를 의미합니다.

rw- : User(사용자)의 권한으로 파일에 대해 읽기, 쓰기 권한이 있습니다.

rw- : Group(그룹)의 권한으로 파일에 대해 읽기, 쓰기 권한이 있습니다.

r-- :  Other(다른 사람)의 권한으로 파일에 대해 읽기 권한만 있습니다. 


23.2 권한을 변경하는 방법(chmod)

rw-rw-r--를 access mod라고 부릅니다.

권한을 변경할 수 있는데요. 만약 다른 사람에게 노출되어야 하는 정보가 아니라면 r을 없애야겠죠.

바로 chmod인데요 change mode의 약자로 권한을 변경합니다. 

 · chmod o-r perm.txt : other의 r권한을 빼는 명령어

 · chmod o+r perm.txt : other의 r권한을 추가하는 명령어

 · chmod o+w perm.txt : other의 w권한을 추가하는 명령어

 · chmod u-r perm.txt : user의 r권한을 빼는 명령어



23.3 실행의 개념과 권한 설정

실행은 X, execute의 약자로서 파일에 대해 실행 가능 여부를 설정하는 것입니다.

 · nano hi-machine.sh : hi-machine.sh파일 편집기로 이동합니다.

 · #!/bin/bash : bash파일을 통해 아래의 코드를 실행합니다.

 · echo 'hi hi hi hi' 

입력 후 ctrl+x -> y 저장 후 빠져나옵니다.

 · ls --l : hi-machine.sh 파일이 생성되었습니다.

 · /bin/bash hi-machine.sh : hi hi hi hi메시지가 뜨면서 실행되지만

. · /hi-machine.sh : 실행 권한이 없기에 permission denied 에러가 뜹니다.

 · chmod u+x hi-machine.sh; : 사용자의 권한을 추가합니다.

 · chmod o+x hi-machine.sh : 다른 사용자에게도 x권한을 추가합니다.



23.4 directory의 권한

파일은 읽기, 쓰기, 실행히 분명한 반면 디렉토리는 읽기, 쓰기 실행이 불분명합니다.

 · mkdir perm;cd perm;echo 'hi' > perm.txt : perm디렉토리 생성 후 접속하여 hi메시지를 perm.txt파일에 저장합니다.

 · cd .. : 상위 디렉토리로 이동

 · ls -l : perm 디렉토리가 생성되었습니다.

 · chmod o-r perm : perm디렉토리에 다른 사용자가 읽기를 제거하는 명령어입니다.

 · chmod o-w perm : 디렉토리 안에 w권한이 없으면 파일을 생성할 수 없습니다. 파일 이름도 변경이 불가하죠.


23.5 chmod사용법 정리

다음은 chmod의 편리한 사용법입니다.

사용법을 외우려 하지 말고 필요할 때 마다 검색하는 게 편리하다고 합니다.

 · chmod 111 perm.txt : user, group, other --x권한을 부여하는 명령어

 · chmod 222 perm.txt : user, group, other --w권한을 부여하는 명령어

 · chmod 444 perm.txt : user, group, other --r권한을 부여하는 명령어

 · chmod 333 perm.txt : user, group, other -wx권한을 부여하는 명령어

 · chmod 555 perm.txt : user, group, other r-x권한을 부여하는 명령어



 · chmod a+r perm.txt : a all 모든 사용자에게 r권한을 부여하는 명령어

 · chmod a+r perm.txt : a all 모든 사용자에게 w권한을 부여하는 명령어

 · chmod a-r perm.txt : a all 모든 사용자에게 w권한을 제거하는 명령어

 · chmod a=rwx perm.txt : a all 모든 사용자에게 rwx권한을 부여하는 명령어

 · chmod a=r perm.txt : a all 모든 사용자에게 r권한을 부여하는 명령어




24.그룹

24.1 그룹 Intro

User는 파일을 만든 사람, u rwx

Other는 유저가 아닌 모든 사람,o rwx

Group 그룹은 특정 사용자의 집단, g rwx

리눅스는 다중 사용자 시스템으로 user나 other필수로 알아야 하며 흐름의 구조상 그룹도 알아야 한다고 합니다.


24.2 groupadd

계정 : egoing : developer

cd /var

mkdir developer : 권한 에러

sudo mkdir developer : developer디렉토리를 생성합니다.

cd developer/ : developer그룹 디렉토리로 이동합니다.

echo ‘hi, killershin’ > killershin.txt : 그룹은 root로 되어있기에 권한 에러뜹니다.

add group in linux 검색으로 활용합니다.

sudo groupadd developer = sudo !! 직전 명령어 입력

nano /etc/group : 그룹에 대한 정보를 갖고 있는 파일 ctrl+x

egoing k8805 멤버로 추가해야합니다.

sudo usermod –a –G developer egoing

sudo usermod –a –G developer k8805 : 그룹에 add되었습니다.

exit

cd /var/developer/

man cdown

sudo chown root:devleoper :현재디렉토리 소유자는 root 그룹은 developer

ls –al : 그룹이 root에서 developer 변하였습니다.

sudo chmod g+w : 그룹에 w권한을을 부여합니다.

 

계정 : K8805 : developer

Cd developer/

Exit

cd /var/developer/

 

계정 : Leezche : designer

Cd developer/

exit

cd /var/developer/



생활코딩 리눅스 강의

728x90
반응형

'OS > Linux' 카테고리의 다른 글

리눅스 명령어 이해하기9!!  (0) 2017.09.01
리눅스 명령어 이해하기8!!  (2) 2017.08.31
리눅스 명령어 이해하기6!!  (0) 2017.08.29
리눅스 명령어 이해하기5!!  (0) 2017.08.28
리눅스 명령어 이해하기4!!  (2) 2017.08.27
728x90
반응형

18. 정기적으로 실행(cron)

18.1 정기적으로 실행 사용법

cron은 정기적으로 명령을 실행시켜주는 도구, 소프트웨어입니다.

시스템을 운영하다 보면 정기적으로 운영해야 하는 일이 있습니다. 예를 들어 정기적으로 데이터를 백업하거나 정기적으로 데이터를 타인에게 전송하거나 정기적으로 인터넷을 통해 시간을 조정해야하는 일 등이 있죠.

정기적으로 작업을 처리해야 할 때 cron을 사용합니다.

crontab -e 하고자 하는 일을 정의할 수 있습니다.

m h dom mon dow command = 분 | 시 | day of month |  요일  |  사용하고 싶은 명령어

밑에 정기적으로 실행하고자 하는 작업을 밑에 적어 cron을 동작시켜 실행시켜줍니다.



 · ctrl+z : background 화면을 끄지 않고 다른 작업을 진행합니다.

 · date : 시간을 알려주는 명령어입니다.

 · date > date.log : 시간을 date.log파일에 저장하는 명령어입니다.

 · cat date.log : date.log에 저장된 시간을 표시해줍니다.

 · date >> date.log : 실행할 때마다 date.log파일에 추가되는 명령어입니다.

 · fg : 크론으로 돌아갑니다.

 · 1/* * * * * date >> date.log = 1분에 한번 | 시간에 상관없이 | 날짜 | 요일 | 1분에 1번씩 시간을 date.log에 저장해라



위에 명령어 추가 후 ctrl+x -> Y : 크론에서 빠져나옵니다.

 · crontab --help : cron의 도움말로 이동합니다.

 · crontab -l : l은 크론의 list를 보여줍니다.

 · cd ~ : 로그인한 계정의 디렉토리로 이동합니다.

 · ls : 파일 목록을 확인합니다. 

 · tail -f date.log : 파일 뒤쪽에 있는 텍스트를 출력합니다. -f는 date.log를 감시하다 뒤쪽에 텍스트가 추가되면 자동으로                     화면에 새로고침을 합니다.

 · ctrl+c : 크론을 종료합니다.



18.2 정기적으로 실행 예시

크론은 정기적으로 시스템이 처리해야 할 일을 합니다.

웹 개발자로서 서버와 관련한 일을 한다면 크론을 사용할 수 있는데요.

예를 들어 사용자가 입력 양식에 맞게 데이터를 입력하여 10만명에 대해 새로운 글이 등록되었다는 메일을 서버로 전송한다면 서버는 사용자가 전송한 정보를 받습니다. 이 때 메일 하나를 보낼 때 1개당 0.1초가 걸린다면 완료될 대까지 오랜 시간이 소요될 것입니다. 오랜 시간 후 전송 완료 메시지가 뜬다면 좋은 프로그램이 아니겠죠.

좋은 프로그램들은 전송 버튼을 누르고 전송 완료 메시지를 보내고 작업을 끝냅니다. 사용자는 메일을 보내고 다른 작업을 할 수 있게 합니다. 그 후 cron이 saved된 정보를 background에서 10만개의 이메일을 보내는 작업을 진행합니다.


19. 쉘을 시작할 떄 실행

쉘을 시작했을 때 명령어가 자동으로 실행하는 방법에 대해 알아보겠습니다.

startup script : 접속했을 때 쉘(SHELL)에서 특정 명령어가 실행되길 바랄 때 쓰입니다.

 · alias l='ls -al' : l은 ls -al의 해당하는 명령어가 실행됩니다. 파일 목록을 보여주겠죠.

 · alias .. ='cd ..' : ..은 cd ..의 해당하는 명령어가 실행됩니다. 부모 디렉토리로 이동하겠죠.

 · alias c = 'clear' : c는 clear 명령어 역할을 합니다.

 · echo $shell : 쉘은 bash를 사용하고 있습니다.

bash는 사용자가 bash를 처음 실행했을 때 특정 파일을 실행하도록 약속되어 있습니다.

 · cd ~ : 상위 디렉토리로 이동합니다.

 · nano .bashrc : 쉘이 실행될 때 쉘 프로그램인 bashrc파일을 실행하도록 약속되어 있습니다.

    bashrc파일은 bash문법에 맞게 코드가 작성되어 있습니다.

 · echo 'hi bash' -> ctrl+x -> y ->exit -> 로그인하여 재접속을 하면

hi bash라는 메시지가 뜹니다.

bash 명령어를 입력하여도 hi bash메시지가 뜹니다.

.bashrc스크립트에서 코드를 작성하면 자신에게 맞게 커스터마이징 할 수 있습니다.


20. 다중 사용자

20.1 다중 사용자 소개

컴퓨터를 1대를 혼자서 사용하다 보면 여러 명의 컴퓨터를 사용하게 되고

여러 명의 컴퓨터를 사용하다 보면 각자의 비밀이 생기고 권한이 생깁니다.

각자의  아이디로 로그인하여 컴퓨터를 사용할 수 있게 되는데 단점이 있습니다.

다중 사용자 시스템이 되는 순간 시스템의 복잡도는 높아집니다. 권한에 대한 체크가 들어가면서 복잡해집니다.

동시에 여러 사람들이 쓰고 각자의 권한을 갖기에 권한에 대해 잘 모르는 사람이 사용하면 낭패를 보게 됩니다.

예를 들어 파일에 중요한 정보를 저장할 때 누구나 저장할 수 있는 정보로 저장되어 있는 경우입니다.

다중 사용자를 사용법과 문제점을 어느 정도 알고 있어야 합니다.


20.2 id와 who

id : 자신이 누구인지 알 수 있는 방법으로 내가 누군지 식별한다는 의미를 가집니다. 

uid=userid, gid=groupid

who : 현재 시스템에 누가 접속했는지 보여주는 명령어


21. 관리자와 일반 사용자

super(root) user : 강력한 사용자, user : 일반 사용자

root, # : 관리자, $ : 일반 사용자

관리자 계정으로 로그인하여 실수를 하게 되면 개인이 아닌 시스템 서버를 사용하는 모든 사람에게 피해를 줄 수 있으니 조심해야 한다.

이러한 이유로 몇몇 운영체제들은 관리자 계정을 막았다고 합니다.

 · su - root : 관리자 계정으로 로그인하는 명령어입니다.

 · sudo passwd -u root : unlock의 약자로 루트 계정의 권한을 푸는 명령어입니다. 

 · sudo passwd -l root : lock의 약자로 루트 계정의 권한을 막는 명령어입니다.

/root : 루트 사용자로 접속했을 때 /root는 관리자의 디렉토리입니다.

일반 사용자의 경우 홈 디렉토리는  /home/killershin





생활코딩 리눅스 강의

728x90
반응형

'OS > Linux' 카테고리의 다른 글

리눅스 명령어 이해하기8!!  (2) 2017.08.31
리눅스 명령어 이해하기7!!  (0) 2017.08.30
리눅스 명령어 이해하기5!!  (0) 2017.08.28
리눅스 명령어 이해하기4!!  (2) 2017.08.27
리눅스 명령어 이해하기3!!  (0) 2017.08.26
728x90
반응형

14. 프로세스

14.1 컴퓨터의 구조

CPU(중앙처리장치) : Processor

RAM(메모리) : 가격이 비싸다 | 용량이 작다 | 속도가 빠르다

HDD, SSD, SD(Storage, 저장장치) : 가격이 싸다 | 용량이 크다 | 속도가 느리다

프로그램은 storage에 저장되어 실행을 할 때는 프로그램을 읽어 메모리에 적재시킵니다.

실행되지 않는 프로그램은 메모리에 올라가지 않겠죠.

메모리에 올라온 상태의 프로그램을 cpu가 읽어 동작하여 데이터를 처리합니다.

즉, CPU가 빠르기 때문에 느린 storage를 이용할 수 없기 때문에 빠른 메모리에 필요한 프로그램을 적재하여 사용하는 것입니다. 이것이 컴퓨터 시스템이 갖고 있는 기본 아키텍쳐(설계)입니다.

프로세스 : 프로그램을 실행하면 메모리에 적재되어 cpu(프로세서)에 의해 처리되는 것들이 실행되고 있는 상태



14.2 프로세스 모니터링 (ps, top, htop)

프로세스 리스트를 살펴보는 방법에 대해 알아보겠습니다.

 · ps : 프로세스 리스트를 보여주는 명령어입니다.

 · ps aux : 백그라운드에서 돌아가는 수많은 프로그램을 보여주는 명령어입니다.

 · ps aux | grep apache : apache를 포함하는 프로세스를 화면에 출력합니다.

PID는 프로세스 아이디로 각각에 프로세스마다 식별자를 갖습니다. 

 · sudo kill 1347 : 강제로 프로그램을 종료시키는 명령어입니다.

 · sudo top : 작업관리자 화면으로 각각의 항목이 프로세스 리스트입니다.

 · sudo htop : top보다 시각적으로 그래피컬한 프로그램입니다.

load average : 프로세스 점유율을 1분간, 5분간, 15분간 평균치를 나타냅니다.

CPU의 숫자에 따라 load average숫자가 갖는 의미가 다를 수 있습니다.

f10은 나가기, f4는 특정 프로세스 확인



15. 파일을 찾는 법

15.1 locate와 find

파일의 위치 찾는 방법에 대해 알아보겠습니다.

파일은 데이터를 보관하기 위한 용도와 실행파일로 구분 됩니다.

 · locate [파일명] : [파일명]과 일치하는 파일들을 찾아 줍니다.

locate *.log : 확장자가 로그로 끝나는 파일을 모두 찾아줍니다.

find는 실제 디렉토리를 검색하여 찾아줍니다. 현재 상태를 가져올 수 있습니다.

find usage (find 사용법)

 · find --help | head : find 도움말의 한 줄만 출력하는 명령어

find / : 루트 디렉토리부터 찾겠다 find . : 현재 디렉토리부터 찾겠다.

 · find / -name *.log : 컴퓨터에 있는 모든 디렉토리를 뒤져 log라는 파일을 찾는다.

permission denied 권한이 없다고 뜨면

 · sudo find /-name *.log

 · find -type f -name "tecmint.txt" -exec rm -rf {} \; : 현재 머물고 있는 디렉토리에 파일에서 tecmin.txt를 찾아 삭제를 실행하라는 의미를 갖습니다.


15.2 whereis와 $PATH

 · whereis : 실행파일을 찾아주는 명령어입니다.

 · whereis ls : /bin/ls는 빈 디렉토리 밑에 있다 /usr/share/man/ma1/ls.1.gz ls메뉴얼 정보의 위치를 알려줍니다.

 · Echo $PATH : 선택한 정보가 path라고 담겨있는 정보, : 을 통해 경로가 구분되어 있습니다.

$PATH는 리눅스가 기본적으로 갖고 있는 변수로 환경변수라고 부릅니다.



16. 백그라운드 실행

여러 개의 일을 한 화면에 진행하는 것을 멀티 태스팅(Multitasking)이라고 합니다.

리눅스 유닉스 계열에서도 Background, foreground를 바꿀 수 있는데요.

 · nano : 나노 에디터 편집기가 나타납니다.

<html>

<body></body>

</html>

ctrl+0 저장 후 -> hello.html 이라는 html파일을 생성합니다.

여기서 프로그램을 종료하지 않고 다른 작업을 할 수 있는 방법이 있습니다.

 · ctrl+z를 누르면 프로그램이 꺼진 것 같지만 꺼지지 않고 다른 작업을 진행 하도록 하는 기능입니다.

 · fg : foreground의 약자로 hello.html이 다시 켜집니다.

 · jobs : 백그라운드 작업들의 목록을 보여줍니다.  nano, vim이라는 프로그램이 백그라운드로 실행되고 있네요.

vim : nano와 경쟁관계에 있는 에디터 입니다.

 · fg %[번호] : 번호 프로그램이 foreground 프로그램이 실행됩니다.

fg %2 : 2번 프로그램이 foreground 프로그램이 실행됩니다.



 · kill $4 : 4번 프로그램을 강제 종료시키는 명령어입니다.

 · kill -9 $4 : kill보다 강력한 명령어로 기능은 동일합니다.

 · ls -R / > result.txt 2> error.log : 실행된 결과가 result. txt에 저장, 에러가 난다며 error.log에 저장하는 명령어

 · ls -alR / > result.txt 2> error.log & : 만약 1-2시간 걸리는 작업의 명령어라면 &를 입력하고 작업을 진행하다 보면

exit라는 출력 메시지가 뜨면서 작업이 완료되었음을 알려줍니다. 



17. 항상 실행 (daemon, service)

17.1 데몬의 개념

Daemon : 사전적으로 반신반인의 의미를 가집니다. 데몬은 항상 실행되고 있다는 특징을 가집니다.

ls, mkdir, rm프로그램은 데몬이 아니라 필요할 때 키고 필요가 없다면 끌 수 있는 프로그램입니다.

예를 들어 설명하자면

컴퓨터, 전자레인지, 티비는 항상 켜져 있지 않은 반면에

모뎀, 도어락, 냉장고는 항상 켜져 있는 상태이죠 이를 데몬이라고 합니다.

리눅스에서도 데몬이 있는데요. 바로 server로 불리는 프로그램입니다.

클라이언트    인터넷    서버

서버는 언제 클라이언트(웹 브라우저)가 접속할지 모릅니다.

따라서 서버(웹 서버)는 카운트 파트너로 항상 켜져 있습니다. = daemon 또는 service라 부릅니다.


17.2 service와 자동실행

웹 서버 중 대표적인 예로 apache가 있습니다.

 · sudo apt-get install apache2 : apache2 프로그램을 설치합니다

 · cd /etc/init.d/ : apache2 프로그램이 위치하고 있습니다, 데몬 프로그램들이 위치하는 디렉토리입니다.

 · ls : apache2 apache2가 설치되었음을 알 수 있습니다.

 · sudo service apache start : 아파치2 프로그램을 실행하는 명령어입니다.

 · ps aux : 현재 실행 중인 프로세스 리스트입니다.

 · ps aux | grep apache2 : 아파치가 실행되고 있음을 알 수 있습니다.

 · sudo service apache stop : 아파치2 프로그램을 종료하는 명령어입니다.

데몬은 컴퓨터가 실핼될 때 자동으로 실행되고 있어야합니다. 언제나 실행되고 있어야 하죠.

/etc/rc3.d/링크 : CLI방식

/etc/rc5.d/링크 : GUI방식

s는 시작 k는 종료를 의미합니다.

./S02apache2 : 프로그램이 없음에도 불구하고 아파치를 구동시키는 명령어입니다.





생활코딩 리눅스 강의



728x90
반응형

'OS > Linux' 카테고리의 다른 글

리눅스 명령어 이해하기7!!  (0) 2017.08.30
리눅스 명령어 이해하기6!!  (0) 2017.08.29
리눅스 명령어 이해하기4!!  (2) 2017.08.27
리눅스 명령어 이해하기3!!  (0) 2017.08.26
리눅스 명령어 이해하기2!!  (4) 2017.08.25
728x90
반응형

11. 쉘과 커널

11.1 Intro

커널(KERNEL)은 알맹이, 핵심, 코어라는 의미를 갖고 쉘(SHELL)은 껍데기,주변 이라는 의미를 가집니다.

쉘은 껍데기처럼 커널을 감싸고 있다고 할 수 있는데요.

쉘에게 명령어를 입력하여 커널이 이해할 수 있는 방식으로 전달해주는 것입니다.

 쉘은 사용자가 입력한 명령을 해석하는 프로그램입니다.

 커널은 하드웨어를 감싸고 있습니다. 물리적인 기계를 직접적으로 제재하는 운영체제에서 가장 중심이 되는 코어입니다.

 하드웨어(ssd, 하드 디스크, cpu, 메모리를 뜻함)는 기계를 동작시켜 원하는 결과를 얻는 일을 합니다.

이렇게 쉘과 커널을 나눈 이유는 사용자의 편리성을 위해서 입니다.




11.2 bash vs zsh

bash와 zsh은 쉘을 대표하는 프로그램입니다.

 · echo [문자] : 문자를 화면에 출력해주는 명령어입니다.

 · echo $0 : 사용하고 있는 쉘을 보여줍니다. 현재는 bash를 사용하고 있습니다.

zsh은 따로 설치를 해야합니다. sudo apt-get install zsh : zsh(지쉘) 프로그램을 설치하는 명령어 입니다.

bash와 zsh은 부모가 같기에 유사한 특성을 가집니다.

하지만 bash와 zsh의 차이가 있는데요.

bash의 경우 

 · cd tab tab : 숨겨진 디렉토리까지 표시됩니다.

 · cd /home/killershin/why : why라는 디렉토리로 들어갑니다.

 · cd why dir1 : why라는 디렉토리 안에 dir1로 들어가고자 할 때 에러가 납니다.

zsh의 경우

 · cd tab : 숨겨진 디렉토리는 표시되지 않습니다.

 · cd /home/killershin/why : why라는 디렉토리로 들어갑니다.

 · cd why dir1 : 에러가 나지 않고 dir1디렉토리로 들어갑니다.

이처럼 사용자가 입력하는 명령어들의 편의성을 각각에 쉘마다 다릅니다.

커널과 쉘을 나눈 이유

-원하는 쉘을 다운 받아 설치하여 자신에게 최적화된 환경을 만들 수 있습니다.



12. 쉘 스크립트

12.1 Shell Script 소개

Script 대본이라는 뜻을 가집니다. 배우들이 움직임의 흐름을 알 수 있는 것이죠.

하나의 명령으로 일이 끝나는 것이 아닌 여러 개의 명령이 순차적으로 이루어 업무가 끝나야 할 때가 있습니다. 

이를 코드로 저장 시킨 것이 쉘 스크립트입니다. 쉘 스크립트를 사용하면 나중에 재사용이 가능하며 복잡한 코드를 필요할 때마다 타이핑 하는 것보다 어딘가에 저장해 불러와 실행시키면 훨씬 편리하겠죠.

쉘에서 실행되는 명령들을 어딘가에 저장하는 방법에 대해 알아보겠습니다.

예를 들어 디렉토리 안에 확장자가 log로 끝나는 파일들을 정기적으로 bak 디렉토리에 백업을 하고 싶은 경우입니다. 명령어 하나하나를 실행시켜 보겠습니다.

 · mkdir script : script 디렉토리를 생성합니다.

 · cd script/ : script 디렉토리로 들어갑니다.

 · touch a.log b.log c.log : 빈 파일들을 생성하는 명령어입니다.

 · ls -l : 로그 파일들이 생성되어 있는지 확인합니다.

 · mkdir bak : bak 디렉토리를 생성합니다.

 · cp *.log bak : 확장자가 log인 모든 파일을 bak디렉토리에 저장하는 명령어입니다.

이를 하나의 스크립트를 만들어 백업하고 싶을 때마다 사용하는 스크립트로 만들면 훨씬 편리할 것 같네요.



12.2 Shell Script 사례

ls /bin : bin 디렉토리에 있는 파일 목록입니다. 기본 프로그램들이 위치하는 곳이죠. 화면에 보이지는 않지만 bash라는 프로그램도 bin 디렉토리에도 

 · nano backup : backup이라는 이름의 파일을 만듭니다.

 · #!/bin/bash : 백업이라는 프로그램을 실행시켰을 때 운영체제는 #!기호를 봅니다.

밑에 작성되는 코드들은 bin디렉토리 밑에 bash라는 프로그램에 해석되어야 한다는 의미입니다.

bash프로그램이 사용하는 문법들을 사용해야겠죠.



쉘 스크립트를 작성해보겠습니다.

디렉토리 안에 확장자가 log로 끝나는 파일들을 정기적으로 bak디렉토리에 백업을 하고 싶은 경우인데요.

조건이 있습니다.

1) 만약 현재 디렉토리에 bak라는 디렉토리가 없다면 만들고 있다면 만들지 않을 것

2) 현재 모든 디렉토리에 있는 파일 중 .log라는 파일을 bak라는 디렉토리에 복사할 것

 · #!/bin/bash

 · if! [ -d bak ]; then : 현재 디렉토리에 bak디렉토리가 존재하지 않는다면

 ·     mkdir bak     :  bak디렉토리를 생성하라.

 · fi : 조건문 종료의 의미를 가집니다.

 · cp *.log bak : bak디렉토리에 확장자가 log인 모든 파일을 저장하라.

 · ctrl+x -> y ->  backup파일이 생성되었습니다



 · ./backup : backup파일을 실행하는 명령어입니다. Permission denied 권한이 없다는 메세지가 뜨네요.

 · chmod +x backup : 실행 가능한 프로그램이라는 것을 리눅스에게 알려주는 명령어입니다.

backup파일에 x를 추가시킨 것입니다.

 · ls -l : backup파일이 초록색으로 변했습니다. -rwxrwxr-x "x"가 생겼습니다. 실행 가능한 상태라는 의미입니다.

 · rm -rf : bak라는 디렉토리를 지우는 명령입니다.

 · ls -l : bak디렉토리가 삭제되었습니다.

 · ./backup : backup파일을 실행합니다

 · ls -l : bak디렉토리가 생성되었습니다.

 · ls -l bak : 3개의 로그 파일이 저장 되었습니다.


 · rm bak/c.log : bak디렉토리에 c.log파일을 삭제합니다.

 · ./backup : backup파일을 실행합니다.

 · ls- l bak : 삭제된 파일 c.log가 다시 저장된 것을 확인할 수 있습니다.




13. 디렉토리의 구조

디렉토리는 실행할 수 있는 프로그램을 정리 정돈하는 수단입니다.

유닉스 계열에서는 실행 프로그램의 성격에 따라 정해져 있는 규칙이 있는데요

/ : 최상위 디렉토리입니다. 루트 디렉토리라고 부릅니다.

/bin : User Binaries, 사용자가 사용하는 명령어들이 위치합니다.

/sbin : System Binaries, 컴퓨터를 끄거나 재부팅하는 명령어들이 위치합니다.

/etc : Configuration Files 설정 파일로, 프로그램이 동작하는 방법을 바꾸고 싶을 때 사용합니다.

/var : Variable Files, 파일의 내용이 증가하거나 어떻게 바뀔지 모르는 파일들이 위치합니다.

/tmp : Temporary Files 일시적인 파일로, 영구적으로 저장하는 파일들을 저장하면 안됩니다.

/home : Home Directories, 자신의 홈 디렉토리에서 작업하기에 홈으로 가야하는 경우 사용됩니다.

/lib : Sytem Libraries

/opt : Optional add-on Applications, 파일 위치를 자동으로 지정합니다.

/user :  사용자의 데이터가 존재하지 않는 공간입니다.


cd ~ : 현재 사용자 디렉토리로 이동하는 명령어입니다. = cd /home/killershin





생활코딩 리눅스 강의



728x90
반응형

'OS > Linux' 카테고리의 다른 글

리눅스 명령어 이해하기6!!  (0) 2017.08.29
리눅스 명령어 이해하기5!!  (0) 2017.08.28
리눅스 명령어 이해하기3!!  (0) 2017.08.26
리눅스 명령어 이해하기2!!  (4) 2017.08.25
리눅스 명령어 이해하기!!  (2) 2017.08.24
728x90
반응형

8. 다운로드 방법 (wget, git)

8.1 리눅스에서 명령어 기반에서 파일 로드 방법

GUI방식은 클릭을 여러 번 하면 쉽게 다운 받을 수 있습니다.

명렁어 시스템에서도 다운 받을 수 있는데요. 이때 프로그램이 필요합니다. 사용할 프로그램은 wget입니다.

 · wget [링크 주소 복사] 

wget http://animal-park.tistory.com/attachment/cfile2.uf@2675D233597721AF11FA10.jsp

아래 사진과 같이 파일이 다운 중인 것을 확인할 수 있습니다.

 · ls -l : 파일이 잘 다운 되었음을 확인할 수 있습니다.



하지만 cfile2.uf@2675D233597721AF11FA10.jsp로 파일명이 조금 지저분 하네요.

파일명을 변경할 수 있습니다. 

 · wget -0 [저장하고자 하는 파일 명=다른 이름으로 저장 개념] [링크 주소 복사]

아래의 사진과 같이 ajaxUpload.jsp라는 파일로 알기 쉽게 저장하였습니다.



8.2 git

git프로그램 사용법에 대해 알아보겠습니다.

git은 버전 관리 시스템이라는 카테고리에 속하는 구체적인 제품 중 하나입니다.

대표적인 예가 바로 git이며, 개발하는 분들은 무조건 필수로 알아야 합니다!!

git은 프로그램의 개선 사항들을 기록하여 과거의 상태를 분석하거나, 과거 상태를 현재의 상태의 돌리거나,

개발자들이 만든 소스를 백업하거나, 개발자들끼리 협업하여 프로젝트를 만들 대 쓰입니다.

git은 기본적으로 리눅스에서만 사용한 것이 아닌 운영체제에 독립적인 프로그램입니다.

git hub는 소스 코드를 온라인 상에 업로드 시켜 협업이 가능하도록 한 홈페이지 입니다.

전 세계 수많은 오픈 소스의 아지트 입니다. 공공재와 같은 중요한 서비스이기도 합니다.


git hub에 있는 소스코드를 git을 이용해서 다운 받아 보겠습니다.

 · sudo apt-get install git  : 먼저 깃을 다운 받습니다.

 · git clone [복사하려는 프로젝트 주소] [디렉토리 주소]

git clone https://github.com/facebook/react.git react_src react_src : react_src라는 디렉토리에 프로젝트 주소가 가리키는 오픈소스 프로젝트가 다운됩니다.


9. 왜 CLI인가?

9.1 GUI(Graphical User Interface) VS CLI(Command Line Interface)

왜 생소하고 배우기 어려운 명령어를 사용하는 것일까요?? (저도 궁금했습니다....)

명령어로 컴퓨터를 제어하는 이유는 

GUI 컴퓨터는 아무래도 동작을 취하기 위한 에너지 소모가 많습니다.

CLI 컴퓨터는 GUI컴퓨터에 비해 에너지를 덜 소모하죠.

또 다른 이유는 서버 컴퓨터나 데이터를 분석하는 시스템은 일반 컴퓨터와는 별개이기에 그래피컬한 컴퓨터가 필요가 없습니다. 메모리나 CPU용량을 덜 차지하는 것이죠.

예를 통해 설명해보겠습니다.

GUI방식은 쉽지만 많은 노동이 필요합니다. 눈에 보이지 않지만 주어진 프로그램을 실행시킬 때 행동을 하고 기다리고 다음의 일을 하고 기다리는 식의 작업을 반복합니다. 배우기는 쉽지만 순차적으로 진행되는 일을 자동화하는 것이 힘듭니다.

반면에 CLI의 경우 제가 영수라는 친구에게 "영수야 집에서 설거지 한 다음에 이불 정리하고 그 다음에 보일러는 낮춘 다음에 집에 나갈 때 나한테 전화해 "라는 명령을 합니다. 영수는 작업을 끝난 뒤 전화를 하겠죠. 저는 일에 상관없이 전화만 받으면 됩니다. 즉 여러 작업들을 진행 시키고 기다림 없이 자동화가 가능합니다.


9.2 순차적으로 실행

GUI방식의 예를 적용시켜보겠습니다.

 · mkdir why : why라는 디렉토리를 생성합니다.

 · cd why : why라는 디렉토리로 이동합니다.

CLI방식의 예를 적용시켜보겠습니다.

 · mkdir why; cd why : 명령어 하나에 두 번의 작업을 입력하여 why라는 디렉토리에 접속하였습니다.

위의 작업은 단순하지만 2번의 작업이 한 번에 된다는 것은 2,3,4... 등 무한대의 작업을 진행할 수 있다는 것이죠.

이것이 바로 CLI를 사용했을 때 강력한 효과입니다. (놀라웠습니다...)

단수와 복수의 차이인 것이죠. 명령어를 통해 얻을 수 있는 효과는 명령을 실행하였을 때 프로그램이 끝난 것을 확인하고 다음 것을 하는 것이 아닌 순차적으로 명령어를 입력하면 컴퓨터는 순서대로 명령을 실행할 것이고 결과만 통보할 것입니다. 중간 과정을 지켜볼 필요가 없는 셈이죠. 만약 mkdir 명령어가 언제 끝날지 모를 명령어였다면, 명령을 하나하나 실행하는 것보다 세미 콜론(;)으로 구분하여 끝난 결과만 확인할 수 있습니다. 



9.3 파이프 라인

파이프 라인이란? 

하나의 명령의 실행 결과를 다른 명령의 입력으로 주고,

하나의 프로그램의 결과를 다른 프로그램의 입력으로 주고, 

하나의 프로세스의 출력(결과)를 다른 프로세스의 입력으로 만드는 것입니다.


 · nano linux.txt : 나노 프로그램 편집기를 통해 많은 내용 저장합니다.

 · cat linux.txt : linux.txt파일의 내용을 화면에 출력해줍니다.

 · grep linux linux.txt : "linux"라는 텍스트가 포함되어 있는 행만을 표시해 줍니다. 원하는 정보를 알려주죠.


 · ls --help의 결과 중 sort라는 텍스트가 포함되어 있는 행을 찾아보겠습니다. (grep명령어를 사용하면 되겠죠)

 · ls --help | grep sort 

 · ls --help | grep sort | grep file : "sort"라는  텍스트를 포함하면서 동시에 "file"텍스트를 포함하는 것입니다.

 · ps aux : 현재 실행중인 프로그램을 출력하는 명령어입니다.

 · ps aux | grep apache : apache라는 텍스트가 포함되어 있는 프로그램만 출력됩니다.



10. IO Redirection

10.1 Output

Input(입력), Ouput(출력), Redireaction(방향을 바꾸는 것)

 · ls -l >result.txt : 이를 Redireaction이라고 합니다.  부등호 옆에 1이 생략되어 있습니다.

ls -l 파일 목록을 출력하는 명령어 인데 이를 result.txt라는 파일에 방향을 바꾸어 저장을 하게 됩니다.

 · cat [파일명] : 파일에 있는 데이터를 읽어주는 명령어 입니다.

cat result.txt : 파일 목록이 result.txt에 저장되어 있네요.



10.2 Input

프로그램은 ssd, hdd에 저장되어 있는 것입니다.

프로세스는 프로그램이 실행되고 있는 상태이죠. 

하나의 프로그램은 여러 개의 프로세스를 가질 수 있습니다. 하나의 입력과 두 개의 출력이 존재할 수 있습니다?

 · cat hello.html : hello.html의 파일을 읽어줍니다. [파일명] = Command Line arguments(명령 인자)

 · cat을 누르면 끝나지 않고 계속 대기를 합니다.

hi, linux를 입력하면 hi와 linux를 출력하죠 ctrl+d를 통해 빠져나옵니다.

hi, linux와 같이 사용자가 키보드를 통해 입력하는 정보를 Standard Input(표준 입력)이라 합니다.

 · cat < hello.html : hello.html의 내용을 cat의 입력값으로 받습니다.

 · head -n1 linux.txt : linux.txt파일의 한 줄만 출력하는 명령어입니다.

 · head -n1 < linux.txt : 표준 입력의 예로 결과는 위와 동일합니다.

 · head -n1 < linux.txt > one.txt : one.txt파일에 linux.txt파일의 한 줄 내용을 저장합니다.




10.3 안 중요한 이야기들

 · ls -al >> result.txt : ls -al > result.txt는 ls-al의 출력 결과를 result.txt 저장하는 것입니다. 부등호가 두 개이면 redirection 결과를 추가하는 것입니다. ls -al의 결과를 한 번 더 저장하는 셈이죠.

두 개이면 여러 개의 입력을 하나로 합치는 것입니다.


생활코딩 리눅스 강의


728x90
반응형
728x90
반응형

+ Recent posts