본문 바로가기
Software Science

[Linux] 기초 리눅스 강좌

by 101Architect 2018. 3. 29.


https://www.inflearn.com/course-status-2/


### 명령어 

* man <찾을 명령어>

/검색 

n : 다음 검색 


* mkdir -p dir1/dir2/dir3

필요하면 부모디렉토리 생성


* ls -l > result.txt

명령어 결과 저장하기 redirection

rm rename2.txt 1> result.txt 2> error.log

1 실행한 결과 std out

2 error 결과 저장하기 

slideplayer.com/slide/5126304


* ls -la >> result.txt

append 하기 

mail asdf@gmail.clm << eot hello eot 

라고 하면 "<< eot" eot 부터 다음 eot 까지 input 으로 보내라



### package manager 

apt yum

apt-get update

apt-cache search 패키지 

apt-get upgrade 

apt-get remove

-- 맥사용자 homebrew 

brew.sh 접속해서 설치하기 

brew --help



/dev/null : 휴지통 


### SHELL VS kernel

echo $0 : 내가 쓰고 있는 쉘


Shell Script 작성 

-------

#!/bin/bash //아래 작성되는 코드들이 bash 폴더에 의해서 실행되야 한다. 

if ! [ -d bak ]; then // bak 폴더가 존재 하지 않는다면 

mkdir bak

fi

cp *.log bak

-------

chmod +x backup.sh


### linux direcory 


http://dev-random.net/linux-directory-structure-explained/

/ – Root

/bin – User Binaries

바이너리 파일, 실행가능한 파일 모음

/sbin – System Binaries

시스템에서 사용하는 명령어 

/etc – Configuration Files

설정 파일 모음 

/dev – Device Files

하드디스크 장치 파일 /dev/sda, /dev/cdrom 장치파일들이 존재

/proc – Process Information

가상파일시스템 현재 메모리에 조재하는 모든 작업들이 파일형태로 존재하는 곳 (디스크상에 실제 존재하는 것이 아니라 메모리상에 존재) 실행중인 커널 옵션 값을 즉시 변경 할 수 있는 파라미터들

/var – Variable Files

용량이 바뀔 수 있는 파일 

/tmp – Temporary Files

임시 파일 

/usr – User Programs (Unix System Resources)

일반사용자들이 주로 사용

/home – Home Directories

사용자 디렉토리 

/boot Boot Loader Files

리눅스의 부트로더(Boot loader)가 있는 디렉토리임

/lib – System Libraries

커널이 필요로 하는 각종 라이브러리 파일, 커널 모듈파일 등이 존재하는 디렉토리

/opt – Optional add-on Applications

응용프로그램 패키지 설치 장소

패키지 매니저가 자체적으로 설치/삭제를 수행함

/mnt – Mount Directory

탈부착 가능한 장치들에 대한 마운트 포인트로 사용하는 디렉토리

/media – Removable Media Devices

이동식 디스크가 마운트 되는 곳

/srv – Service Data

시스템이 제공하는 서비스를 위한 파일들



### 파일 

파일 찾는 방법 

locate 파일명

디렉토리를 뒤지지 않고 데이터베이스를 뒤짐

mlocate database 

sudo updatedb 로 database 가 업데이트됨 

find 파일명 

실제 파일들을 뒤져서 찾음 

find --help | head

find / -name 찾을파일명

find . -type f -name asdf.jsp

찾을 파일의 형태 고정 

find . -type f -name asdf.jsp -exec rm -f {} \;

exec rm -f {} \; 파일을 찾아서 삭제 해라 {} 에 파일명이 들어가게됨



### 실행 파일 찾기 

whereis 명령어

$PATH, $MANPATH

echo $PATH

path 정보 출력

### 프로레스 모니터링 

* 프로세스 보기 

ps aux : 모든 프로세스 보기 

ps aus | grep apache : 아파치 프로세스만 보기 

top : 프로세스 리스트 (htop)

Ctrl + z : 실행중인 프로그램을 백그라운드로 보내는 단축키. 

jobs : 현재 백그라운드 작업 목록 '+' 는 fg 를 했을때 제일 먼저 뜨는것 그 다음은 '-'

fg : 백그라운드 작업이 다시 켜짐 

fg %2 : 두번쨰 백그라운드 켜기 (jobs 에서 -) 

kill %4 : 4번쨰 백그라우드 프로세스 죽이기 

ls -R / : 모든 디렉토리 보기 

ls -R / > result.txt 2 > error.log : 결과 저장 

ls -R / > result.txt 2 > error.log & : 백그라운드로 실행 



### 데몬 

정의 : 항상 실행되고 있음, server 같은것 


cd /etc/init.d : 데몬 프로그램들이 있는 곳 

sudo service apache2 start : 데몬 켜기 

ps aux | grep apache2 

cd /etc/rc3.d 운영체제가 콘솔구동시 시작과 동시에 켜지는 프로그램들 (rc5.d GUI 구동)



### Cron 

정기적인 작업 설정

crontab -e : 작업 설정 

# m h  dom mon dow   command

*/1 : 1분 

dom : day of month (24 : 매달 24일)

mon : 월

dow : 

command : 명령어 

date : 현재 시간 표시 

date >> date.log : append 해서 작성하기 

tail -f  date.log : date.log 파일 새로 고침 보기 


*/1 * * * * date >> data.log 2>&1 : 에러는 표준 출력 에러도 log에 기록이 됨


### 쉘 

www.cyberciti.biz : 재미있는 별명 모음

alias l='ls -al' : 별명 붙이기 

echo $SHELL : 어떤 쉘을 쓰는지 보기 

cd ~ 

vim .bashrc : 쉘 실행할때 같이 실행할 것들 추가해줌 alias 

bash : bash 실행 


### 다중 사용자 

id : 내가 누군지 봄 

who : 시스템에 누가 접속해 있는지

ssh -p 3022 jiny localhost

super user 

su : 사용자 변경 

su - root 또는 su - 

root 사용자 잠김 풀기 

sudo passwd -u root : lock 풀기 

sudo passwd -l root : lock 

root 사용자 홈 

/root

unix add user 

sudo useradd -m jiny : 홈디렉토리 만들어줌 

sudo passwd jiny : password 설정

sudo - jiny : 사용자 변경 

sudo usermod -a -G sudo jiny : sudo 명령 사용하게 해줌 (sudo 그룹에 추가)

권한 Permission

User File & Directory

Read & Write & Exccute 

drwxr-xr-x  2 jiny jiny    4096 11월 23 21:50 Templates/

type|access-mode 링크수 소유자 소유룹 파일크기 최종수정일 

  l | rwx(owner) rwx(group) rwx(other)

권한 변경

chmod o+r test.txt : other read 권한 주기 

chmod o-r test.txt : other read 권한 뺏기

chmod u+x hi.sh : 실행권한주기 

chmod -R o+w directory : 모든 디렉토리 권한 변경 

chmod a=rwx text.txt : 모든 사용자에 대해서 권한 추가


그룹 관리 

cd /var : 변화가 잦은 파일들 저장 

useradd -G group-name user-name

sudo groupadd group-name

sudo !! : 이전에 사용했던 명령어

vim etc/group : 그룹 관리 

usermod -a -G group-name user-name

권한 변경 후엔 쉘에 재접속 해야함 

chown 소유자:그룹

chown jiny:developer . : 현재 디렉토리에 그룹을 root 에서 developer 로 변경



### 인터넷 

ip addr : 실제 ip 주소 확인 private 주소

curl ipinfo.io/ip : 자신의 ip 를 알려줌 접속한 최종 ip public 주소 

curl 서버와 통신할 수 있는 커맨드 명령어 툴

두 값이 같다는 것은 실제 ip 와 접속 ip 가 같다는 것

public 과 private 가 다른경우 (router 로 분기된경우)

같은 wifi 는 통신할 수 있음 

router 를 세팅해서 공인 ip 로 특정 서버에 접속 할수 있도록 설정함 



### Web Server

sudo apt-cache search apache : 아파치 찾기 

sudo apt-get install apache2 

sudo service apache2 start 

sudo service apache2 stop

sudo service apache2 restart

쉘에서 웹서버에 접속하기 

elinks 

sudo apt-get install elinks

elinks

주소 쓰기 

쉘에서 웹브라우징 사용 

ip addr 

elinks http://10.0.0.1 (자신의 ip) 

localhost, 127.0.0.1 로컬의 경우 사용 가능 


/etc : 어떤 프로그램들이 어떻게 동작할 것인가 설정이 저장되어 있는 곳 

apache2.conf 파일

cd sites-enabled 서버가 시작하는 위치 링크 저장 index.html

0000-default.conf 의 documentroot 위치 

errorLog 아파치가 에러났을때 쌓이는 로그 위치 

{apache_log_dir} /var/log/apache2

### ssh 원격제어 

sudo apt-get purge openssh-server openssh-client : 환경 설정 편수까지 전부 삭제 

22 번 포트로 접속됨 (default)

/etc/ssh/sshd_config


### port 

22~1024 wellknow 포트 잘알려진 포트들 주로 사용하는 


포트포워딩 : 특정 포트로 들어온걸 내부 특정 ip 로 접속할 수 있게 해줌 

공유기 포트포워딩 설정 

default gateway : 공유기가 가지고 있는 내부 ip 

ip route 

환경설정의 고급 tcp/ip 의 route

브라우져에 default gateway 주소로 접속 

서버의 내부 ip 주소 작성 

규직이름 나중에 수정을 하기위해 지정해줌 

사용자가 외부에서 접속할 포트 9000 적어줌 

내부 서버 포트 80 적어줌 

jiny@jiny-ubuntu-16:~$ curl http://ipinfo.io/ip

121.140.57.188

내 아이피 확인

http://121.140.57.188:9000


### Domain 

hosts : 어떤 도메인이 어떤 ip 인지 지정 해줌 

vim /etc/hosts 

cat /etc/resolve.conf : 도메인 네임서버가 나옴 

freenom 도메인 구입 12개월까지는 공짜로 할 수 있음 

도메인과 나의 외부 ip 적용 

host google.com : 구글도메인이 사용하고 있는 ip 확인


서브 도메인 : 하나의 도메인으로 여러 서버 접속 가능하게 함 

www.naver.com, blog.naver.com 

dig +trace egoing.ga : DNS 에게 물어볼떄 어디를 거쳐서 가는지 확인

egoing.ga. : 에서 마지막 . 이 root

root dns server (여러대) 의 주소를 우리의 DNS 는 반듯이 알아야함

.ga 를 담당하는 서버를 root dns server 에 물어 봄 

name server -> 실제 address 를 알때까지 물어물어 감 


### rsync

sync : 특정컴퓨터의 변경 내용을 다른 컴퓨터에 반영함 (ssh 를 이용함)

r : 원격

touch test{1..10} : 10 개의 파일을 만듬 

rsync -a src/ dest : src 디렉토리 안의 파일들을 dest 로 넣음 

증분 백업 함 (변경됨 내용만 반영함)

rsync -av : a 아카이브 모드 (디렉토리 전부, 변경사항만..), r 자세히 알려줌 


원격 백업

rsync -azP src/ jiny@182.168.0.65:~/dest : 압축해서 프로그래스 보여줌 

 


### ssh public private key

공개키, 비공개키 

ssh-keygen : 키 생성 (접속요청 하는 곳에서 실행)

private, public 파일이 생성 .pub 퍼블릭 파일 (접속하려는 곳에 주는 파일)


~/.ssh/authorized_keys : 인증된 키들 (접속하려는 곳)

이 안에 id_rsa.pub 의 키를 붙여넣어줌 

ssh-copy-id jiny@192.168.0.67 : 키가 카피됨 (접속요청 하는 곳에서 실행) 

rsync 백업 

로그인 없이 백업하기

rsync -avz src/ jiny@192.168.0.67:~/dest : 전송 

cron 으로 이용해서 백업해 둘 수 있다. 


RSA 

암호화 기법 (encrypt/decrypt)

key 가진 사람이 암호/복호 가능하게 함 

private (암호화 id_rsa 가 있는 것만 가능) <-> public (복호화 id_rsa.pub 이 있는 것만 가능) 비대칭적 

ssh client -> ssh server 에 접속하면 random key 를 줌 -> client (id_rsa 가 있는) 는 random key 를 암호화 해서 server 에 다시 전달하면 -> server 는 (id_rsa.pub 이 있는) 는 암호화 된것을 다시 받아서 복호화 시킴



반응형