리눅스의 시작 → 리누스 토발쯔
Unix 기업용(가상화 진골) → Multi User, Multi Tasking 환경
리눅스의 커널 0.1 → 0.2에서 인터넷에 공개
OS에서 사용하는 애플리케이션, 툴, 서비스 등은 커널의 허락이 있어야 물리자원에 접근이 가능하고, 해당 서비스를 실행.중지 시킬 수 있다.
s
[root@websrv ~]# uname -a
Linux websrv 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
x86 : 일반적인 범용 CPU (인텔, AMD)
엄밀한 의미에서의 리눅스 : kernel
보편적인 의미에서의 리눅스 : 배포판 리눅스
데비안 계열 → ubuntu(컨테이너/k8s)
Red Hat → 1. RHEL(기업용, 패치/기술지원/업데이트 등에 대한 비용을 과금
→ 2. CentOS(센트오에스)(클라우드/관리 IaC)
허브나 브릿지를 이용해 Multi-Access가 가능하도록 함. 데이터에 대한 분산관리가 되어있는 상태로 자료 관리가 쉽지않음. 서버와 클라이언트를 두고 개인적으로 자료를 가지고 있는 것이 아니라 서버에 접근할 수 있도록 서버-클라이언트 환경으로 변경이 됨. 그후 인터넷이라는 개념이 나오며 허브를 인터넷과 연결하고, 서버를 인터넷에 공개해 외부 사용자들이 자료에 들어올 수 있게 함
서버의 개수가 많아지면 넓은 공간과 전기를 안정적으로 공급 할 수 있어야하고, 관리 문제가 발생함. 그러면서 데이터센터가 나오게 되며 서버를 그곳에 옮길 수 있게 됨. 데이터 센터는 초기에는 유닉스를 이용했었음 유닉스 사용시 고가의 서버들이 필요하므로 가상화 등을 사용하지 않았던 범용서버가 외면을 받음(x86과 같은). 그래서 x86은 베어메탈 방식으로 사용했었음(직접 그 위에 설치)
AMD/인텔에서 CPU 가상화 기술을 만들어지고 이 기술들을 이용해 VM ware가 VM ware workstation 1.0을 만들게 되며 기존 거를 대체하게 됨. x86이 가격 저렴+가상화지원이 되기 시작하며 이것을 많이 사용하게 됨 리눅스를 사용하며 클라우드 시장에 이용
데이터센터에서 서버를 이용하다보면 똑같이 공간, 전기, 설계 등의 문제가 발생함. 가상화 기술이 도입이 되면서 Hypervisor을 두고 VM을 여러개 둘 수 있게 되었다. Hypervisor을 이용하면 Migrataion이 가능해지며 여러개의 데이터센터를 두고 VM이 중지없이 migration 될 수 있었음
클라우드 환경을 위한 다양한 도구들은 독립적으로 동작해서는 큰 효과를 볼 수 없다. 다른 도구들과의 연계를 통해 효과를 극대화할 수 있다. 이를 위해서는 서로 간의 호환문제가 해결되어야 하는데 이를 리눅스 상에서 해결할 수 있다.
배포판 리눅스는 모두 다른가? 대부분 비슷하나 파일 시스템의 구조는 다르다.
ONOS → 클라우드 및 5G 환경에서의 SDN(Software Defined Network)를 위한 리눅스
Kali Linux → 데비안 계열의 모의 침투테스트를 위한 리눅스
대부분의 리눅스에서는 현재 bash와 같은 쉘을 사용하고 있으므로 명령어는 큰 틀에서 비슷하다.
리눅스는 트리 형태를 갖는다.
리눅스에서의 이동
[root@websrv ~]#
root : 계정이름
websrv : 서버 이름
~ : 각 사용자별 홈 디렉토리를 의미
root는 /root 가 기본 홈 디렉토리
user1는 /home/user1 이 기본 홈 디렉토리
[root@websrv ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...
user1:x:1000:1000:user1:/home/user1:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
예를 들어 사용자가 systemctl restart httpd를 입력하면 apache가 웹서비스를 재실행을 하는 것
사용자 → systemctl restart httpd → apache → 웹서비스 재실행
[root@websrv ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@websrv ~]# cat /etc/passwd | grep user1
user1:x:1000:1000:user1:/home/user1:/bin/bash
“root” , “user1” : 계정 이름(ID)
x : 패스워드는 passwd 파일에 기록되지 않는다. → /etc/shadow 파일에 저장됨
[root@websrv ~]# cat /etc/shadow
root:$6$LJn3ZHu8SgSOAZOj$OOAX66.iT6BgcH10CYl1tvA2M.TThZ0dcIpkX9IM9Aqv62f5M3qSxgczL8X53U/HUQRUrezSGEVH9nywZn00q.::0:99999:7:::
일반 사용자는 해당 파일에 접근할 수 없다. 실제 PW는세번째 $ 뒤부터
“0” : UID번호
“0” : GID 번호
루트가 어떤 그룹에 포함 되어 있는 지 보여줌
[root@websrv ~]# groups root
root : root
[root@websrv ~]# groups user1
user1 : user1 wheel
user1으로 바꾸고 root에서 ls를 하면 접근 거부
[root@websrv ~]# su user1
[user1@websrv root]$ ls
ls: cannot open directory .: Permission denied
[user1@websrv root]$ cd ~
[user1@websrv ~]$ pwd
/home/user1
[user1@websrv ~]$ exit
exit
[root@websrv ~]#
[root@websrv ~]# whoami
root
user1에서 cd로 자신의 홈 디렉토리로 이동가능
root는 기본적으로 #로, 일반 사용자는 $로 구분
# 현재 위치에서 숨겨진 파일이나 디렉토리를 포함하여 모두 출력
ls -a
. .bash_logout .cshrc .ICEauthority Pictures Videos
.. .bash_profile .dbus initial-setup-ks.cfg .pki .viminfo
123 .bashrc Desktop .local Public yang
anaconda-ks.cfg .cache Documents .mozilla .ssh
a.txt check.sh Downloads Music .tcshrc
.bash_history .config .esd_auth .mysql_history Templates
[root@websrv /]# cd /etc/sysconfig/
# . 으로 현재 디렉토리 이동
[root@websrv ~]# cd .
[root@websrv ~]#
# .. 으로 상위 데릭토리 이동
[root@websrv ~]# cd ..
[root@websrv /]
# ls : 파일 보기
[root@websrv network-scripts]# ls
ifcfg-ens32 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
# ls -a : 숨김 파일까지 볼 수 있음
[root@websrv network-scripts]# ls -a
. ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
.. ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
ifcfg-ens32 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
# ls -l : 상세 정보 출력
[root@websrv network-scripts]# ls -l
total 252
-rw-r--r--. 1 root root 360 Jul 18 17:51 ifcfg-ens32
lrwxrwxrwx. 1 root root 24 Jul 4 13:51 ifdown -> ../../../usr/sbin/ifdown
# ls -al : 숨겨져있는 파일, 상세 정보 등 모두 확인 가능
[root@websrv ~]# ls -al
total 72
dr-xr-x---. 17 root root 4096 Jul 19 09:26 .
dr-xr-xr-x. 17 root root 224 Jul 4 13:58 ..
-rw-r--r--. 1 root root 0 Jul 5 17:33 123
..
“1” : 링크개수
rw-r—r— 1 root(소유주) root(그룹) 254 May 22 2020 (마지막으로변경된시간) ifcfg-lo(파일)
“r” : read
“w”: write
“x” : execute
touch
[root@websrv ~]# touch test.txt
[root@websrv ~]# echo "hello" > test.txt
[root@websrv ~]# ls -l test.txt
-rw-r--r--. 1 root root 6 Jul 19 11:22 test.txt
[root@websrv ~]# cat test.txt
hello
[root@websrv ~]# touch test.txt
[root@websrv ~]# cat test.txt
hello
echo
은 기존 내용 없애고 해당 내용추가
은 기존 내용에 추가하는 것
[root@websrv ~]# echo "hello" > test1.txt
[root@websrv ~]# cat test1.txt
hello
[root@websrv ~]# echo "hello2" >> test1.txt
[root@websrv ~]# cat test1.txt
hello
hello2
gedit 편집기 사용
[root@websrv ~]# gedit test2.txt
vi(m) 편집기 사용
[root@websrv ~]# vim test3.txt
Esc → :wq로 저장후 빠져나감
vi로 입력해도 vim으로 실행되게 하려면
[root@websrv ~]# gedit .bashrc
# .bashrc 파일에 해당 내용추가
# vi 쳐도 vim 실행 하도록
alias vi='vim'
# 변경사항 수정
[root@websrv ~]# source .bashrc
bashrc
변경된 .bashrc를 현재 환경에 다시 적용하는 방법
# cat을해서 EOF 사이에 있는 것을 읽어다가 hello.txt에 집어넣고, 한줄 읽고 또 집어넣고. EOF가 나오면 끝
[root@websrv ~]# cat << EOF > hello.txt
> hello
> all
> EOF
[root@websrv ~]# cat hello.txt
hello
all
표준입력 : 키보드
표준출력 : 화면
표준오류 : 화면
방향을 바꾸기 위해서 >, >>과 같은 것을 사용
# test1.txt가 입력값이 되고, 그걸 cat으로 보내 출력
root@websrv ~]# cat < test1.txt
hello
hello2
# test1.txt를 입력으로 받아 출력한 것을 test11.txt로 보내기
[root@websrv ~]# cat < test1.txt > test11.txt
[root@websrv ~]# cat test11.txt
hello
hello2
[root@websrv ~]# mkdir 0719
[root@websrv 0719]# mkdir -p d/e
[root@websrv 0719]# ls
a anaconda-ks.cfg b c d d.txt
[root@websrv 0719]# ls d
e
# 디렉토리 생성
[root@websrv ~]# mkdir 0719
[root@websrv ~]# cd 0719
[root@websrv 0719]# ls
[root@websrv 0719]# touch a.txt b.txt c.txt
[root@websrv 0719]# ls
a.txt b.txt c.txt
# 파일 복사
# anaconda파일을 현재 위치로 copy
[root@websrv 0719]# cp ~/anaconda-ks.cfg .
[root@websrv 0719]# ls
anaconda-ks.cfg a.txt b.txt c.txt d.txt
[root@websrv 0719]#
[root@websrv 0719]# cp ~/anaconda-ks.cfg ana.cfg
[root@websrv 0719]# ls
ana.cfg anaconda-ks.cfg a.txt b.txt c.txt d.txt
# 디렉토리 복사
[root@websrv 0719]# cp -r ../Downloads/ .
[root@websrv 0719]# ls
ana.cfg anaconda-ks.cfg a.txt b.txt c.txt Downloads d.txt
[root@websrv 0719]# cp a.txt c.txt
cp: overwrite ‘c.txt’? y
# 동일 디렉토리 내에서는 이름을 바꾸는 효과가 있다
[root@websrv 0719]# mv Downloads test
[root@websrv 0719]# ls
anaconda-ks.cfg ana.txt d.txt test
# 상위 디렉토리에 있는 Public디렉토리를 현재 위치로 이동
[root@websrv 0719]# mv ../Public/ .
[root@websrv 0719]# ls
anaconda-ks.cfg ana.txt Downloads d.txt Public
# 다시 상위 디렉토리로 이동
[root@websrv 0719]# mv Public/ ..
[root@websrv 0719]# ls
anaconda-ks.cfg ana.txt Downloads d.txt
[root@websrv 0719]# ls ..
디렉토리 삭제
# 디렉토리 삭제
[root@websrv 0719]# mkdir a
[root@websrv 0719]# ls
a anaconda-ks.cfg ana.txt d.txt test
[root@websrv 0719]# rmdir a
[root@websrv 0719]# ls
anaconda-ks.cfg ana.txt d.txt test
# 디렉토리에 무언가 들어있다면 rmdir로 삭제가 되지 않음
파일 삭제
[root@websrv 0719]# rm ana.txt
rm: remove regular file ‘ana.txt’? n
[root@websrv 0719]# ls
anaconda-ks.cfg ana.txt d.txt test
[root@websrv 0719]# rm -f ana.txt
[root@websrv 0719]# ls
anaconda-ks.cfg d.txt test
원격지에 있는 서버로 접속하기
[root@websrv 0719]# wget https://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/gedit-3.28.1-3.el7.x86_64.rpm
[root@websrv 0719]# curl localhost
<center><h2>YEON SOO YEON</h2></center>
[root@websrv 0719]# curl http://localhost
<center><h2>YEON SOO YEON</h2></center>
[root@websrv 0719]# curl -L http://naver.com
[root@websrv 0719]# curl -L http://www.naver.com -o naverindex.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 246k 0 0 637k 0 --:--:-- --:--:-- --:--:-- 637k
root@websrv 0719]# curl -i http://localhost
HTTP/1.1 200 OK
Date: Tue, 19 Jul 2022 05:06:10 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 07 Jul 2022 02:43:17 GMT
ETag: "28-5e32e0c3f639b"
Accept-Ranges: bytes
Content-Length: 40
Content-Type: text/html; charset=UTF-8
<center><h2>YEON SOO YEON</h2></center>
[root@websrv 0719]# curl http://localhost
<center><h2>YEON SOO YEON</h2></center>
[root@websrv 0719]# head naverheader.html
HTTP/1.1 302 Found
Date: Tue, 19 Jul 2022 05:07:39 GMT
Server: Apache
Location: http://www.daily.co.kr/
Content-Length: 271
Connection: close
Content-Type: text/html; charset=iso-8859-1
HTTP/1.1 200 OK
Date: Tue, 19 Jul 2022 05:07:38 GMT
[root@websrv 0719]# head -3 naverheader.html
HTTP/1.1 302 Found
Date: Tue, 19 Jul 2022 05:07:39 GMT
Server: Apache
[root@websrv 0719]# tail -3 naverheader.html
//-->
Proxy 서버 (대리인)