[클라우드 With리눅스/리눅스 기본명령어(2)]

SooYeon Yeon·2022년 8월 18일

리눅스의 시작 → 리누스 토발쯔

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 이 기본 홈 디렉토리

파일 내용 살펴보기

1. CAT

  • 파일의 전체 내용 출력
  • /etc/passwd는 현재 시스템 내에 있는 사용자들의 정보를 출력
    • root, user1은 일반적인 사용자를 의미한다.
    • apache와 갘은 것은 일반적인 사용자가 아니라 웹서비스를 실행할 수 있는 서비스라고 생각해야 한다.
[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 → 웹서비스 재실행

2. more

  • Enter → 한줄씩 내려감
  • Space bar → 한 페이지씩 내려감
  • b → 거꾸로 이동
  • q → 빠져나감

3. less

  • more와 동일하며 추가적으로 방향키 사용 가능

4. header/tail

  • 상/하위 10줄만 보여줌 (줄 수 지정가능)

특정 정보만 확인

[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
  1. “root” , “user1” : 계정 이름(ID)

    x : 패스워드는 passwd 파일에 기록되지 않는다. → /etc/shadow 파일에 저장됨

    [root@websrv ~]# cat /etc/shadow
    root:$6$LJn3ZHu8SgSOAZOj$OOAX66.iT6BgcH10CYl1tvA2M.TThZ0dcIpkX9IM9Aqv62f5M3qSxgczL8X53U/HUQRUrezSGEVH9nywZn00q.::0:99999:7:::

    일반 사용자는 해당 파일에 접근할 수 없다. 실제 PW는세번째 $ 뒤부터

  1. “0” : UID번호

    • 루트는 superuser이므로 0, user1은 일반사용자이므로 1000부터 시작
  2. “0” : GID 번호

    • 해당 사용자가 소속되어있는 그룹의 번호.
    • 리눅스의 모든 사용자들은 무조건 하나의 그룹(Primary Group)에 포함되어야 한다.
    • 처음 사용자를 생성하면 사용자 이름과 동일한 그룹이 만들어진다. 그리고 해당 사용자는 자신 이름의 그룹에 자동으로 포함된다.
    • 여러 그룹에 동시에 포함될 수 있지만, 무조건 Primary Group 하나는 꼭 있어야 한다.

    루트가 어떤 그룹에 포함 되어 있는 지 보여줌

    [root@websrv ~]# groups root
    root : root
    [root@websrv ~]# groups user1
    user1 : user1 wheel
  1. “root” : 계정의 이름(Full name. ex)홍길동 )
  2. “/root” : 홈 디렉토리
  3. “/bin/bash” : 해당 사용자가 사용하는 shell
    • 최근에는 리눅스에서 기본적으로 bash를 사용하는 경우가 많다.
    • ubuntu의 경우에는 dash를 사용하나 인증 과정에서는 bash를 사용한다.

su

  • switch user
  • 유저 변경

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는 기본적으로 #로, 일반 사용자는 $로 구분

cd

  • 디렉토리 이동하기
  • 절대경로 : /
  • 상대경로
    • 상위 디렉토리 → ..
      • cd ..
    • 현재 디렉토리 → .
      • cd .
    • 직전 디렉토리 → -
      • cd -
    • 자신의 홈 디렉토리로 → ~
      • cd ~
# 현재 위치에서 숨겨진 파일이나 디렉토리를 포함하여 모두 출력
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

  • 파일이나 디렉토리 정보(리스트)를 출력할 때 사용
# 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. “-” : 일반파일
  2. “d” : 디렉토리
  3. “l” : 링크가 걸려 있는 파일
    1. soft link(심볼릭)
      • 바로가기
      • 별도의 저장공간을 차지하지 않음
    2. hard link
      • 똑같이 하나를 더 만듦

“1” : 링크개수

권한

rw-r—r— 1 root(소유주) root(그룹) 254 May 22 2020 (마지막으로변경된시간) ifcfg-lo(파일)

“r” : read

“w”: write

“x” : execute

  • rw- r— r—
  • 소유주 - 그룹 - 그 외의 사용자
  • 해당 파일에 대해서 소유자는 r,w 가능, 그룹과 그외사용자는 r만 가능

파일 만들기

  1. touch

    • 빈 파일 만들기
    • touch test.txt를 하고 ls 확인 후 다시 같은 명령어를 쳤을 때, 오류가 뜨지 않고 시간만 변경된다.
    • 실제 목적은 시간을 갱신하기 위한 것이나 주로 빈 파일을 만드는 용도로 사용
    [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
  2. 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
  3. gedit 편집기 사용

    • gedit 사용가능
    • 저장하지 않으면 만들어지지 않음
    [root@websrv ~]# gedit test2.txt
  4. vi(m) 편집기 사용

    • vi improved → 기존에 있었던 편집기인 vi의 성능을 개선시킨 것
    • 화면단위 편집기
    • vi를 사용하면 방향키, 키패드 등의 사용에서 불편함이 많아 vim 사용을 추천
    [root@websrv ~]# vim test3.txt

    Esc → :wq로 저장후 빠져나감

    vi로 입력해도 vim으로 실행되게 하려면

    [root@websrv ~]# gedit .bashrc
    
    # .bashrc 파일에 해당 내용추가
    # vi 쳐도 vim 실행 하도록
    alias vi='vim'
    
    # 변경사항 수정
    [root@websrv ~]# source .bashrc

    bashrc

    • 사용자가 처음 부팅할 때 읽어들이는 파일이며 주로 환경정보 적용이나 alias 등을 현재 환경에 적용하고자 하는 것을 미리 입력해 두면 편리하다.
    • 오타가 있을 경우 정상 로그인이 되지 않을 수 있으므로 조심해야 한다.

    변경된 .bashrc를 현재 환경에 다시 적용하는 방법

    1. su를 이용해 재로그인
    2. source .bashrc
      • 현재 환경에 .bashrc 파일을 불러들인다는 뜻
      • 인증 시 토큰을 계정에 적용시키고 싶을 때 사용 많이 함
  1. cat과 EOF를 이용하여 여러 줄이 들어간 새로운 파일 만들기
# 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

mkdir

  • 디렉토리 생성
  • mkdir -p d/e 부모 디렉토리d 안에 e생성
[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

cp

  • 파일 및 디렉토리 복사
  • cp는 파일복사
  • cp -r은 디렉토리복사
# 디렉토리 생성
[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
  • cp -i는 프롬프트가 뜰 수 있도록 하는건데, cat ~/.bashrc 파일에 가면 cp는 cp-i로 alias 되어있음
[root@websrv 0719]# cp a.txt c.txt
cp: overwrite ‘c.txt’? y

mv

  • 파일/디렉토리 이동
# 동일 디렉토리 내에서는 이름을 바꾸는 효과가 있다
[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 ..

삭제

디렉토리 삭제

  • rmdir : 비어있는 디렉토리 삭제
# 디렉토리 삭제
[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로 삭제가 되지 않음

파일 삭제

  • rm
  • rm -f : 강제로 바로 삭제(물어보지않고)
  • rm -r : 디렉토리 삭제(비어있지 않아도 삭제)
  • rm -rf : 디렉토리 뿐만아니라 파일 삭제 → 자주사용하지만 조심해야 한다.
[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

pwd

  • print working directory
  • 현재 작업중인 디렉토리가 어디인가를 보여줌

clear

  • 작업한 내용을 위로 올려 지워진 것 처럼 보이게 함

history

  • 입력한 명령어들 확인 가능

원격지에 있는 서버로 접속하기

  1. CLI
    • telnet(X)
    • SSH (O)
      • 서버에 대한 인증
      • 사용자에 대한 인증(key-pair,password)
  2. GUI
    • VNC
    • SPICE
    • PCoIP

wget

  • 특정 웹 주소로부터 파일 등을 다운로드 하기위한 툴
[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

curl

  • 웹사이트 주소를 통하여 해당 페이지의 코드를 다운로드 하거나 api 연결, 파일 다운로드 등에 활용된다.
  • curl http://www.naver.com로 하면 NOT FOUND가 뜬다. 왜냐하면 실제로는 https로 redirect 되기 때문

curl -L

  • curl -L http://www.naver.com 포트포워딩이 되어있다면 해당 페이지까지 들어가서 코드의 내용을 확인한 뒤 화면에 출력해준다.
[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
  • 해당 결과를 naverindex.html로 만들어 준다.
[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

curl -i

  • 헤더까지 보여줌
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>
  • head : 상위 10줄만 보여줌 (3줄만 하고싶으면 header -3)
[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
  • tail : 하위 10줄만 보여줌
[root@websrv 0719]# tail -3 naverheader.html

//-->

curl -x

  • curl -x proxy서버주소:포트번호 -L http://www.naver.com -o test.html
  • Proxy서버를 이용해 접속 할 수 있음
  • -o : 파일로 output

curl -O

Proxy 서버 (대리인)

  • 내부 사용자들의 웹 접속 속도 향상
  • 인증 등을 거쳐 인터넷 사용 가능
  • URL 필터 적용 또는 특정 컨텐츠 필터링을 통한 보안에도 활용이 가능하다.

0개의 댓글