리눅스 기본 정리2

양승현·2022년 7월 19일
0

linux

목록 보기
4/20

정리 계획

  • 기눅스 기본 명령어 -> bash -> KVM(가상화) -> DB클러스터 /DB replication 순으로 정리 할 계획

[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)
redhat -> RHEL(기업용,패치/기술지원/업데이트 등에 대한 비용을 과금)
       -> CentOS( 클라우드/ 관리 laC)

클라우드에서의 리눅스

  • 클라우드 환경을 위한 다양한 도구들은 독립적으로 동작해서는 큰 효과를 볼 수 없다.
  • 다른 도구들과의 연계를 통해 효과를 극대화할 수 있다.
  • 이를 위해서는 서로간의 호환문제가 해결되어야 하는데 리눅스 상에서 해결할 수 있다.

배포판 리눅스는 모두 다른가?

  • 대부분 비슷하나 파일 시스템의 구조는 다르다.
  • ONOS -> 클라우드 및 5G 환경에서의 SDN(software Defined Network)를 위한 리눅스
  • kali linux -> 데비안 계열의 모의 침투테스트를 위한 리눅스
  • 대부분의 리눅스에서는 현재 bash와 같은 쉘을 사용하고 있으므로 명령어는 큰 틀에서 비슷하다.
  • 리눅스는 tree 형태를 갖는다.

리눅스에서의 이동

[root@websrv ~]# "~"는 긱 사용자별 홈 디렉토리를 의미한다.
root는 .root
user1는 /home/user1

cat 파일의 내용 살펴보기

  • cat /etc/passwd는 현재 시스템 내에 있는 사용자들의 정보를 출력해준다.
  • root, user1은 일반적인 사용자를 의미한다.
  • apache는 일반적인 사용자가 아니라 웹 서비스를 실행할 수 있는 서비스라고 생각해야 한다.
    사용자 -> systemctl restart httpd -----apache -----> web service restart(웹 서비스 재실행)
[root@websrv ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
"root" -< 계정이름
"x" -> 패스워드는 passwd 파일에 기록되지 않는다. -> /etc/shadow 파일에 저장된다.
"0" -> UID 번호, root는 슈퍼 유저이므로 0이다. user1은 일반 사용자이므로 1000부터 시작된다.
"0" -> 해당 사용자가 소속되어 있는 그룹의 번호 (GID)
	   리눅스의 모든 사용자들은 무조건 하나의 그룹(Primary Group)에 포함되어야 한다.
       처음 사용자를 생성하며 사용자 이름과 동일한 그룹이 만들어진다. 
       그리고 해당 사용자는 자신 이름의 그룹에 자동으로 포함된다.
"root" -> 계정의 이름, full name
"/root" -> 홈 디렉토리
"/bin/bash" : 해당 사용자가 사용하는 shell. 최근에는 리눅스에서 기본적으로 bash 를 사용하는 경우가 많다. ubuntu 의 경우에는 dash 를 사용하나 인증과정에서는 bash 를 사용한다. 
[root@websrv ~]# groups root
root : root
[root@websrv ~]# groups user1
user1 : user1 wheel

CD (디렉토리 이동)

  • 절대경로 : /
  • 상대경로 : 상위 -> .. , 현재 디렉토리 -> .
  • ls -a -> 내가 있는 현재위치에서 숨겨진 파일이나 디렉토리를 포함하여 모두 출력해라!

ls 파일이나 디렉토리의 정보(리스트) 를 출력할 때 사용한다.

  • ls -a : 숨김파일/디렉토리
  • ls -l : 상세정보 출력
    -rw-r--r--. 1 root root 254 May 22 2020 ifcfg-lo
    lrwxrwxrwx. 1 root root 24 Jul 4 13:51 ifdown -> ../../../usr/sbin/ifdown
  • '-' : 일반파일
  • d : 디렉토리
  • l : 링크가 걸려 있는 파일(soft link(심볼릭) - 바로가기, hard link)
               소유주    그룹    그 외 사용자
rw-r--r-- :     rw-     r--        r--
"r" : read, "w" : write, "x" : excute(실행)
  권한                    파일크기   생성시간                파일 위치
lrwxrwxrwx. 1 root root    24      Jul  4 13:51 ifdown -> ../../../usr/sbin/ifdown

파일 만들기

    1. touch -> 빈파일 만들기, 실제 목적은 시간을 갱신하기 위한 것이나 주로 빈 파일을 만드는 용도로 사용된다.

    1. echo > test.txt
    1. 편집기를 이용하여 만들기
	- gedit : gedit test.txt 이후 저장해야 한다.
    - vi(m) : vi improved -> 기존에 있었던 편집기인 vi의 성능을 개선시킨 것
      vi를 사용하면 방향키, 키패드등의 사용에서 불편함이 많다. vim을 사용하자
    	- :set nu - 줄 번호 보이게 
        - :w - 저장
        - :q! - 변경 사항 보관하지 않고 종료
        - :q - 수정 파일 변경하지 않고 종료
        - :wq - 저장 후 나가기 
        - :dd - 커서가 있는 라인 삭제
        - :yy - 커서가 있는 라인 복사
    1. cat와 EOF를 이용하여 여러줄이 들어간 새로운 파일을 만들고 싶다면

.bashrc

  • .bashrc 는 사용자가 처음 부팅할 때 읽어들이는 파일이며 주로 환경정보 적용이나 alias 등을 현재 환경에 적용하고자 하는 것을 미리 입력해 두면 편리하다. 오타가 있을 경우 정상 로그인이 되지 않을 수 있으므로 조심해야 한다.
  • 편집기로 .bashrc 파일을 열어 alias vi='vim'을 작성하고 저장한다.
  • vi를 vim으로 저장하는 것이다.
  • 이는 리눅스 설정 파일이기에 변경된 .bashrc 를 현재 환경에 적용시켜야 한다.
  • 변경된 .bashrc 를 현재 환경에 다시적용하고자 한다면?
  1. su 를 이용하여 재 로그인한다.
  2. source .bashrc

cp(copy) 파일 및 디렉토리 복사

  • cp는 파일 복사
  • cp 원본파일 복사파일
  • cp -r 원본디렉토리 복사디렉토리

mv 파일 및 디렉토리 이동

  • mv로 파일 이름 변경하기
[root@websrv 0719]# ls
ana.cfg  anaconda-ks.cfg  Downloads
[root@websrv 0719]# 
[root@websrv 0719]# mv ana.cfg ana.txt  <-- 동일 디렉토리내에서는 이름을 바꾸는 효과
[root@websrv 0719]# ls
anaconda-ks.cfg  ana.txt  Downloads
  • 디렉토리 위치 이동 하기

rm 파일 및 디렉토리 삭제

  • 디렉토리 삭제 -> 디렉토리 만들기 mkdir -> rmdir : 비어있는디렉토리 삭제 가능
  • 파일 삭제 rm
    rm -f : -f는 강제삭제
    rm -r : 디렉토리 삭제(내용이 안에 있어도 삭제)
    rm -rf : 디렉토리 또는 파일 삭제 -> 자주 사용하지만 조심해야 한다.

pwd(print working directory)

  • 현재 작업중인 디렉토리가 어디인지 알려준다.

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

    1. CLI - telnet(x), ssh(o)
ssh -> 서버에 대한 인증, 사용자에 대한 인증(key-pair, password)
    1. GUI - VNC, SPICE, PCoIP

mkdir 은 디렉토리 생성하기

  • -p는 부모디렉토리 생성과 자식디렉토리 생성을 동시에 한다.
[root@websrv 0719]# mkdir -p d/e
[root@websrv 0719]# ls
a  b  c  d  header.txt  naver.html  noheader.txt
[root@websrv 0719]# ls d
e

파일의 내용 살펴보기

    1. cat - 파일의 전체 내용 출력하기
    1. more
enter -> 한줄씩 내려간다.
space bar -> 한페이지씩 내려간다.
b키 -> 거꾸로 돌아간다.
q키 -> 빠져나간다.
    1. less - mode와 동일하며 추가적으로 방향키 사용이 가능하다.
    1. head/tail
기본적으로 상위 10줄/하위 10줄을 보여준다.
head -3 test.txt -> 상위 3줄만 보여준다. 

pwd : 현재 디렉토리


clear : 페이지 지우기


history : 기록을 보여줌


wget : 특정 웹 주소로부터 파일 등을 다운로드 하기 위한 툴


curl - 웹사이트 주소를 통하여 해당 페이지의 코드를 다운로드 하거나 API 연결, 파일 다운로드 등에 활용된다.

curl http://localhost 
curl -L http://www.naver.com  <---- 포트포워딩이 되어 있다면 해당 페이지까지 들어가서 코드의 내용을 확인한 뒤 화면에 출력시켜준다.

curl http://localhost -o "test.html" : 출력결과를 test.html 파일로 만들어준다.
curl 을 이용하여 페이지의 헤더 내용을 포함하여 확인하고 싶다면??

[root@websrv 0719]# curl -Li http://www.naver.com -o naverheader.html
[root@websrv 0719]# head naverheader.html   <-- header 는 상위 10줄
HTTP/1.1 302 Moved Temporarily
Server: NWS
Content-Type: text/html
Location: https://www.naver.com/
Date: Tue, 19 Jul 2022 05:07:18 GMT
Connection: close
HTTP/1.1 200 OK
Server: NWS
Content-Type: text/html; charset=UTF-8

proxy 서버(대리인)

  • 내부사용자들의 웹 접속 속도 향상
  • 인증등을 거쳐 인터넷 사용가능
  • url filter 적용 또는 특정 컨테츠 필터링을 통한 보안에도 활용이 가능하다.
curl -x proxy서버주소:포트번호   -L http://www.naver.com -o test.html
curl -O http://www.test.com/test.zip 

unix --multuser/multi tasking -> linux

namespace -> 별도의 독립적인 작업 공간을 가질수 있다.
cgroup -> 각각 별도의 작업 공간에 별도의 리소스를 적용시킬수 있다.

init ? run level

  • 0 (종료모드) - init 0, poweroff, shutdown -P now
  • 1 (복구모드) - 시스템 관리를 위한 목적으로 활용(네트워크, 다중접속 불가)
  • 2 - 네크워크를 지원하지 않는 multi-user
  • 3 - 네트워크가 지원되는 multi-user, 일반적인 CLI 부팅
  • 5 - 네트워크가 지원되는 multi-user, 그래픽 환경으로의 부팅
  • 6 (재부팅) - init 6, reboot, shutdown -r now, shutdown -r 22:00
shutdown -c - 예약된 종료 및 재부팅 취소
shutdown -k +15 - 현재시간으로 부터 15분 후에종료된다는 것을 접속된 사용자들에게 알려주지만 실제로 종료가 되지는 않는다.

런레벨 조정하기

  • systemctl set-default multi-user.target
  • startx - xwindow 가 실행됨
  • 처음 부팅할 때 화면에 보여주는 메시지(Message of The Day) -> MOTD


[네트워크 관련 명령어]

1. IP 확인

  • ip addr list
  • ip addr show
  • centOS7 : 211.183.3.201 (server)
  • centOS8 : 211.183.3.111 (client)

2. ip route

  • 리눅스의 라우팅 테이블

3. netstat -nr

4. /etc/hosts 파일 등록하기

[root@srv7 ~]# cat <<EOF >>/etc/hosts
211.183.3.201      centos7
211.183.3.111      centos8
EOF
[root@srv7 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
211.183.3.1 myhome
211.183.3.201      centos7
211.183.3.111      centos8

5. nslookup

  • DNS 서버에게 query하여 지정한 도메인의 IP주소를 확인할 수 있다.
  • 참고로 일반적인 DNS 서버는 UDP/53에서 서비스한다. (TCP/53에서도 서비스한다.)
  • 일반적으로 도메인에 대한 IP 정보는 TYPE A로 보인다.
-> www.test.com A 1.1.1.1
  • 여러 서버가 하나의 도메인

6. ifdown/ifup

  • ifdown
  • ifup
  • 인터페이스 비활성화/활성화
  • 활성화 될때 인터페이스의 구성 파일을 읽고 실행된다.
  • 따라서 IP 주소등을 병경했을때에는 systemctl restart network를 이용하거나 특정 인터페이스를 down > up 하여 활성화 하면 변경된 사항을 적용시킬 수 있다.
서비스 실행시 오류가 발생한다면?
systemctl status sshd 그리고 journalctl -xe 를 통해 확인이 가능하다.


[root@srv7 ~]# vim /etc/ssh/sshd_config
  • CentOS7 의 ~/.ssh/testkey.pem.pub 파일외에 여러개의 퍼블릭키가 있을 수 있음.
  • 이중에서 인증에 사용하기위한 public key 는 .ssh/authorized_keys 에 등록되어 있어야 한다.
  • 현재상태에서 CentOS7 에서 .ssh/testkey.pem.pub 파일을 다음과 같이 변경또는 복사
[root@srv7 ~]# cd .ssh
[root@srv7 ~]# cp testkey.pem.pub authorized_keys 
  • 이후 CentOS8 에서 ssh -i testkey.pem centos7
[root@srv7 ~]# cd ~/.ssh
[root@srv7 ~]# cp testkey.pem.pub authorized_keys   
[root@srv7 ~]# systemctl restart sshd 
[root@srv8 ~]# ssh -i testkey.pem centos7
  • 실제 환경이라면 관리 서버에서 key-pair를 생성한다.
  • 관리자는 private-key를 갖는다. public-key는 내가 관리하고자 하는 다수의 서버에 등록 시킨다.
  • 원격지에 있는 서버에 public-key를 등록하기 위해서는 ssh-copy-id를 이용한다.
  • 관리용 서버의 .ssh/authorized_keys에 등록시킨다.
  • 우리는 인스턴스 템플릿 이미지에 미리 public-key 를 넣어둘 예정이다.
[root@srv8 ~]# ssh -i testkey.pem centos7 ifconfig
  • user1을 관리자 등급으로 사용하기
  • root는 super user이고 user1은 normal user이다.
  • 유저 생성
[root@srv7 ~]# useradd user10
[root@srv7 ~]# passwd user10
Changing password for user user10.
New password: 
BAD PASSWORD: The password is shorter than 7 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@srv7 ~]# useradd user20
[root@srv7 ~]# echo 'user20:user20' | chpasswd
[root@srv7 ~]# useradd user30 && echo 'user30:user30' | chpasswd
[root@srv7 ~]# cat /etc/passwd | grep user30
user30:x:1003:1003::/home/user30:/bin/bash
  • 일반 사용자는 systemctl restart firewalld와 같은 시스템에 대한 제어권한이 부여되어 있지 않다.
  • 이를 일시적으로 root의 권한을 얻어서 사용하고자 한다면 sudo를 이용할 수 있다.
  • 현재 user1은 가능하나 user30은 안된다.
  • 이유는 아래 설정을 해주어야한다.
[root@srv7 ~]# vim /etc/sudoers
![](https://velog.velcdn.com/images/yange/post/29b04ad2-1da7-40bf-8f40-dce199ab0194/image.png)
[root@srv7 ~]# usermod -aG wheel user30
[root@srv7 ~]# su user30
[user30@srv7 root]$ sudo systemctl restart firewalld
[user30@srv7 root]$ 

0개의 댓글