Contents
(Linux)리눅스 기초와 기본 명령어
   2022년07월19일     11분정도면 다 읽어요     - Comments

[카카오 클라우드 스쿨] 리눅스 기본 개념 ~ 기초 명령어를 배워 보자

1. UNIX와 Linux

  • 리눅스도 이 UNIX에서 파생됨
  • 유닉스: 기업용, 가상화의 진골
    • Multi User, Multi Tasking
    • Linux Kernel 0.1 -> 0.2 공개
    • kernel.org에서 공개된 커널 버전을 확인할 수 있다
    • 커널을 가져다다 KSH, bash 등을 입맞에 맞게 수정할 수 있다 => 배포판 리눅스
[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


  • 리눅스
    • 엄밀한 의미: 리눅스 Kernel
    • 보편적 의미: 리눅스 배포판


  • 데비안 계열
    • Ubuntu (컨테이너, K8S)
  • 레드햇 계열
    • RHEL(기업용, 패치 기술지원 업데이트 등에 대한 비용을 과금)
    • CentOS(클라우드, 관리IaC)


Kernel

  • img img_22
  • OS에서의 사용하는 모든 애플리케이션, Tool, Service 등은 Kernel의 허락을 받아야 물리자원에 접근이 가능함
  • 또한 Kernel의 허락을 받아야 해당 서비스를 실행/중지 시킬 수 있다



2. 클라우드에서의 리눅스

  • 클라우드 환경을 위한 다양한 도구들은 독립적으로 작동해서는 큰 효과를 볼 수 없다
    • 다른 도구들(오픈소스)과 같이 연계하여 효과를 극대화할 수 있다
    • 이를 위해서는 서로간의 호환 문제가 해결되어야 하지만, 리눅스 상에서는 이러한 문제를 해결할 수 있다
  • UNIX 서버에서 x86 서버로 갈아타게 되는 과정
    img_2
  • 클라우드의 등장 배경
    img_1


  • 배포판 리눅스는 모두 다를까?
    • 대부분 비슷하나, 파일 시스템의 구조는 다르다
      • ONOS: 클라우드 및 5G 환경에서의 SDN(Software Defined Nerwork)을 위한 리눅스
      • Kali Linux: 데비안 계열로, 해킹 모의 침투 테스트를 위한 리눅스
    • 대부분의 리눅스는 현재 BASH와 같은 셸을 사용하고 있으므로 명령어는 큰 틀에서 비슷함 (Tree 형태)



3. 리눅스의 사용자 정보

  • 사용자는 로그인을 하게 되면 각 사용자별로 별도의 시스템 환경 변수를 할당 받는다
  • printenv 명령어를 통해 사용자 환경 변수를 확인할 수 있다


[root@websrv ~]#
[root@websrv Desktop]#
  • root: 현재 사용자
  • websrv: 서버의 이름
  • ~ : 현재 위치(현재 root의 홈 디렉터리 /root에 있음)


  • /etc/passwd
    • 현재 시스템 내에 있는 사용자들의 (계정) 정보를 담아 두는 곳
    • root, user1은 일반적인 사용자를 의미
    • apache는 일반적인 사용자가 아닌 웹서비스를 실행할 수 있는 ‘서비스’
      • ex) 사용자 > systemctl restart httpd > apache > 웹서비스 재실행
[root@websrv Desktop]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
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
...

[root@websrv Desktop]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
  • root
    • 계정 이름
  • x
    • 패스워드, /etc/shadow에 저장이 된다
  • 0
    • UID 번호, root는 슈퍼유저이므로 0임, 일반 사용자(user1)는 1000부터 시작함
  • 0
    • 해당 사용자가 소속되어 있는 그룹의 번호(GID)
    • 리눅스의 모든 사용자들은 최소 하나의 그룹(Primary Group)에 포함되어야 함
    • 처음 사용자를 생성할 때 사용자명과 동일한 그룹이 생성되고 사용자는 여기에 포함됨
    • 하나의 User는 여러 그룹의 포함될 수 있지만, 최소 하나의 Primary Group에는 포함되어야함
  • root
    • 계정의 full name
  • /root:
    • 홈 디렉터리
    • root: /root
    • user1: /home/user1
  • /bin/bash
    • 사용하는 기본 셸, 최근 linux의 기본 셸
    • 우분투의 경우 조금 가벼운 dash를 하용하지만, 인증과증에서는 bash를 사용함
    • 물론 바꿀 수 있다


  • su 명령어로 사용자 변경
  • exit 명령어로 원래 사용자로 돌아옴
  • whoami 명령어로 현재 로그인한 사용자 확인 가능
[root@websrv ~]# su user1
[user1@websrv ~]$ exit
exit
[root@websrv ~]# whoami
root


4. 리눅스의 경로

  • 경로이동: cd 명령어 사용
    • 절대경로 : /부터 시작
    • 상대경로 : 상위 디렉터리(..), 현재 디렉토리(.)


  • 경로 내에 있는 파일/폴더 표시: ls 사용
    • ls -a : 현위치의 숨김파일/디렉토리 표시
    • ls -l : 상세정보 출력(권한 등)
    • ls -al : 상세정보 숨김파일 포함하여 전부 출력


  • ls -al 수행 시 보여지는 모습
    • 맨 첫글자
        • : 일반파일
      • d : 디렉토리
      • l : 링크가 걸려 있는 파일 (soft link(심볼릭)-바로가기, hard link)
    • rwxrwxrwx
      • “r” : read
      • “w” : write
      • “x” : excute
    • root root
      • 소유주와 그룹
drwxr-xr-x.  2 root root     6 Jul 13 14:33 Videos
-rw-------   1 root root    49 Jul 19 16:05 .xauthXpRXcq



5. 파일의 내용 살펴보기

  1. cat 명령어
    • 파일의 전체 내용 살펴보기
  2. more
    • 파일의 내용을 한 페이지/한 줄씩 살펴보기
    • 방향키, pgUp, pgDown 키가 사용이 가능하며, 문서 읽은 정도를 퍼센트로 표시해줌
    • b: 처음으로, sp: 한 페이지씩, enter: 한줄씩 출략, q: 나가기
  3. less
    • more과 비슷함
    • 방향키 사용이 가능함
  4. head/tail
    • 기본적으로 상위 10줄/하위 10줄을 보여줌
    • head -3 test.txt 처럼 보여줄 라인 수 지정 가능
    • 특히 tail의 경우, 실시간으로 특정 파일의 내용/로그 등을 확인할 때 유용함


  • tail을 통해 실시간 로그 확인
    • 2줄을 실시간으로 보겠다: tail -2f [로그파일]
[root@srv7 0720]# cat /var/log/httpd/access_log
::1 - - [19/Jul/2022:14:06:24 +0900] "GET / HTTP/1.1" 200 36 "-" "curl/7.29.0"
::1 - - [19/Jul/2022:14:06:30 +0900] "GET / HTTP/1.1" 200 36 "-" "curl/7.29.0"

[root@srv7 0720]# tail -3f  /var/log/httpd/access_log
::1 - - [20/Jul/2022:10:21:12 +0900] "GET / HTTP/1.1" 200 36 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
::1 - - [20/Jul/2022:10:21:12 +0900] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"



6. 파일 만들기

1 . touch 명령어를 사용

  • 빈 파일을 만든다
  • 원래의 목적은 파일 수정 시간을 갱신하기 위한 것
  • 이미 파일이 존재하는 경우, 내용은 달라지지 않고 파일 수정 시간만 달라진다
[root@websrv ~]# touch test.txt                 파일생성
[root@websrv ~]# echo "hello" > test.txt        출력, >로 파일에 출력
[root@websrv ~]# cat test.txt                   파일보기
hello
[root@websrv ~]# touch test.txt                 한번 더 touch
[root@websrv ~]# cat test.txt                   내용은 변하지 않음
hello


2 . echo 명령어를 사용

  • 출력하는 용도지만 부등호를 통해 파일로 저장할 수 있음
[root@websrv ~]# echo "MUYAHO" > test.txt
[root@websrv ~]# cat test.txt
MUYAHO                                      > 파일 생성, 혹은 덮어쓰기
[root@websrv ~]# echo "ALASKA" >> test.txt
[root@websrv ~]# cat test.txt
MUYAHO
ALASKA                                      >> 파일 생성, 혹은 맨 밑줄에 추가하기


3 . 편집기를 통해 수정하는 방법

  • gedit
    • GUI 환경에서 편집 가능
  • vim (vi improved)
    • 기존에 있었던 편집기인 vi의 성능을 개선시킨 것
    • vi를 사용할 경우, 방향키, 키패드 등의 사용에서 불편함이 많음
    • 화면 단위 편집기
  • ed, ex, sed
    • 행 단위 편집기
    • 한 행씩 편집할 수 있다
vi를 입력해도 vim 편집기로 연결시키기

[root@websrv ~]# vi .bashrc
...
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'
...


.bashrc

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

  • 변경된 .bashrc를 현재 환경에 적용하고 싶다면?
    1. su를 사용하여 재로그인
    2. source .bashrc


4 . CAT과 EOF(end of file)를 이용하는 방법

  • 여러 줄이 들어간 새로운 파일을 만들어 보자
test.txt의 파일의 내용을 출력한다
[root@websrv ~]# cat < test.txt

test.txt의 파일의 내용을 test11.txt에 저장한다
[root@websrv ~]# cat < test.txt > test11.txt

EOF로 여러줄 입력한다
[root@websrv ~]# cat << EOF > test4.txt
> hello
> world
> EOF

[root@websrv ~]# cat > test5.txt << ZZZ
> hello
> world
> ZZZ


꺽쇄(<, «, >, ») 활용하는 방법이 궁금해요!

  • 입력 1> 파일명 : 정상처리 결과값만 파일에 저장
  • 입력 2> 파일명 : 오류 결과값만 파일에 저장
[root@srv7 0720]# ping -c 1 www.google.com 1> abc.txt           오류는 출력하고 내용만 담아라

[root@srv7 0720]# cat abc.txt
PING www.google.com (172.217.26.228) 56(84) bytes of data.
64 bytes from bom05s09-in-f4.1e100.net (172.217.26.228): icmp_seq=1 ttl=128 time=29.8 ms
...

[root@srv7 0720]# ping -c 1 www.google.com 2> abc.txt           내용은 출력하고 오류만 담아라
(정상 내용이 출력됨)



7. 복사, 이동

  • cp, mv 명령어 사용


  • 기본적인 파일 복사
[root@websrv ~]# mkdir 0719
[root@websrv ~]# cd 0719
[root@websrv 0719]# touch a.txt b.txt x.txt         가변 길이 매개변수
[root@websrv 0719]# cp x.txt c.txt


  • 다른 디렉터리에서의 파일 복사 (이름은 그대로)
[root@websrv 0719]# cp ~/anaconda-ks.cfg .
[root@websrv 0719]# ls
anaconda-ks.cfg  a.txt  b.txt  c.txt  x.txt


  • 덮어쓰기
    • 기본적으로 i옵션이 실행 됨, 기본적으로 덮어쓸 지 물어본다
    • (.bashrc에서 옵션 수정 가능)
[root@websrv 0719]# cp a.txt c.txt
cp: overwrite ‘c.txt’? no


  • 기본 디렉터리의 복사
    • r 옵션 사용
[root@websrv 0719]# cp -r ../Downloads/ .
[root@websrv 0719]# ls
anaconda-ks.cfg  a.txt  b.txt  c.txt  Downloads  x.txt


  • 기본적인 파일 이동
[root@websrv 0719]# mv x.txt Downloads/


  • 한꺼번에 파일 이동
[root@websrv 0719]# mv a.txt b.txt c.txt Downloads/


  • mv를 통해 이름 변경
    • 동일한 디렉터리에서 수행 시 이름이 변경 됨
    • 디렉터리도 이름 변경 가능
[root@websrv 0719]# mv mvtest.txt mvtest1.txt


  • 디렉터리의 이동
[root@websrv 0719]# mv ../Public/ .
[root@websrv 0719]# mv Public/ ../



8. 파일 삭제, 디렉터리 삭제, 생성

  • 디렉터리: mkdir, rmdir 명령어 사용
  • 파일: rm으로 삭제 가능
  • rm
    • -f: 강제 삭제
    • -r: 디렉터리 삭제 가능
    • -rf: 비어있지 않은 디렉터리 강제 삭제 가능


  • 디렉터리 한꺼번에 생성
    • p 옵션으로 parent 생성과 동시에 child 생성 가능
[root@websrv 0719]# mkdir -p parents/child


  • 디렉터리 삭제
    • 단, 비어있는 디렉터리는 삭제 불가
[root@websrv 0719]# mkdir yes
[root@websrv 0719]# rmdir yes

[root@websrv 0719]# rmdir ../0719
rmdir: failed to remove ‘../0719’: Directory not empty


  • 파일 삭제
    • f 옵션으로 강제 삭제 가능
[root@websrv 0719]# rm anaconda-ks.cfg
rm: remove regular file ‘anaconda-ks.cfg’? y

[root@websrv 0719]# rm -f hello.txt


  • 비어있지 않은 디렉터리 삭제
    • rm 명령어에 -rf(디렉터리 강제 삭제) 옵션으로 즉시 제거 가능
[root@websrv 0719]# rm -rf ../0719



9. init 명령어(중요)

  • Run level
    • 시스템 관리를 용이하게 하기 위해 만들어 짐
    • 특히 컨테이너 관리에 아주 용이할 것이다


멀티 유저, 멀티 태스킹 시스템 => 리눅스!

  • namespace
    • 별도의 독립적인 작업 공간을 가질 수 있다
  • cgroup
    • 각각 별도의 작업공간에 별도의 리소스를 적용시킬 수 있다
    • 미리 리소스에 대한 제한을 걸어 둠
    • ex) 이 컨테이너는 CPU를 0.250개정도 쓸 수 있다, 메모리는 128mb 쓸 수 있다


  • init 명령어와 run level
  • init 0
    • 시스템 중지(종료 모드), 기본값 불가
    • ex) init0, poweroff, shutdown -P now
  • init 1
    • 단일 사용자 모드(복구 모드용), root 계정으로 로그인, 시스템 관리 목적으로 사용
    • 네트워킹/다중접속 불가능
  • init 2
    • Multiuser without NFS
    • 즉, 네트워크를 허용하지 않는 다중 사용자 모드, run level3에서 네트워크만 빼면 2레벨임 (사실상 쓸 일이 없음)
  • init 3
    • Multi user mode, 네트워크 지원, 일반적인 CLI 부팅
  • init 4
    • 사용자가 직접 정의해서 쓰는 모드 (쓸 일이 없음)
  • init 5
    • 네트워크가 지원되는 multi user, 그래픽 환경으로의 부팅
  • init 6
    • 시스템 재기동 할 때 사용, 기본값 불가
    • ex) init6, reboot, shutdown -r now
      • shutdown -c: 셧다운 예약 취소
      • shutdown -k +15: 15분 후에 종료됨을 알린다 (종료되지는 아님)


  • run level 변경 실습
    • /etc/inittab
[root@websrv 0719]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

init 6


  • run level 3으로 변경된 것을 확인할 수 있다
    • img_4
    • (처음 부팅할 때 화면에 보여주는 메시지 MOTD(message of the day)로 변경 가능)
[root@websrv ~]# gedit /etc/motd
  • MOTD가 수정된 모습(인사말 추가함)
    • img_5


  • startx 실행 시 그래픽 환경으로 전환 됨
    • (재부팅 환경에는 다시 CLI 환경으로 돌아감)



10. curl 명령어

  • 프록시 서버 접속하기

  • curl: 기반의 웹 요청 도구. http 메시지를 요청해 결과를 확인하는 명령어

    • L옵션: 해당 페이지까지 들어가서 코드의 내용을 확인한 뒤 화면에 출력
    • i 옵션: 헤더 내용을 포함하여 확인
웹파일 기본 출력
[root@websrv 0719]# curl http://localhost
<center><h2>SSK_WORLD</h2></center>

헤더까지 출력(i옵션)
[root@websrv 0719]# curl -i http://localhost
HTTP/1.1 200 OK
Date: Tue, 19 Jul 2022 05:06:30 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 07 Jul 2022 02:21:12 GMT
ETag: "24-5e32dbd4cbe48"
Accept-Ranges: bytes
Content-Length: 36
Content-Type: text/html; charset=UTF-8
<center><h2>SSK_WORLD</h2></center>

포트포워딩이 되어 있다면 해당 페이지까지 들어가서 코드의 내용을 확인한 뒤 화면에 출력
[root@websrv 0719]# curl -L http://www.naver.com

curl 을 이용하여 페이지의 헤더 내용을 포함하여 확인
[root@websrv 0719]# curl -Li http://naver.com -0 naverheader.html


10-1.리눅스 Proxy 서버

  • 프록시
    • 내부 사용자들의 웹 접속 속도 향상
    • 인증 등을 거쳐 인터넷 사용 가능
    • URL 필터링, 특정 컨텐츠 필터링이 가능함
      • 보안에도 활용 가능!!
      • ex) 이미지 제거, pdf, zip, exe 등 제거


img_3

  • 이와 같이 프록시 서버를 구성하면 모든 PC가 8.8.8.8에 요청을 보내지 않아도 됨
  • 효과
    • 대역폭을 여유롭게 쓸 수 있음
    • 인증/방화벽 기능 추가 가능
    • 프록시 + 인증서버 + 방화벽


  • 프록시를 이용해서 CURL을 접속하기
    • curl -x —proxy서버주소:포트번호 실제접속하고싶은주소
    • curl -x —proxy서버주소:포트번호 -L http://www.naver.com -o test.html(파일로 저장)
      • o는 output 파일로 저장
  • curl로 ‘파일’ 다운로드도 가능
    • curl -O http://www.test.com/test.zip
    • 물론 wget으로 가능한 기능임



11. 기타 명령어

  • pwd(print working directory)
    • 현재 작업중안 디렉터리가 어디인지 표시해 줌


  • clear
    • 페이지 지우기


  • wget 명령어
    • 웹사이트 주소를 통하여 해당 페이지의 코드를 다운로드 하거나 api 연결, 파일 다운로드 등에 활용
    • 특정 웹주소로부터 파일 등을 다운로드 하기 위한 툴
    • ex) wget https://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/gedit-3.28.1-3.el7.x86_64.rpm


  • netstat 명령어
    • 네트워크 상태 정보를 출력한다
    • netstat -anptgrep LISTEN
      • a: 모든 연결 및 수신 대기 포트를 표시함
      • n: 이름이 아닌 IP 주소로 확인하겠다
      • p: 각 서비스가 몇번 PID를 사용하고 있는지
      • t: TPC 서비스만 출력
      • u: UDP 서비스만 출력


  • grep 명령어
    • 특정 문자열에 매치하는 행을 출력시켜 준다
    • grep 문자열 입력파일
    • ex1) grep Listen /etc/httpd/conf/httpd.conf
    • ex2) cat anaconda-ks.cfggrep root


  • 인터페이스 비활성화 및 활성화
    • systemctl start network (서비스 시작)
    • systemctl enable network (부팅시 자동으로 실행)


  • df 명령어
    • 디스크 사용량과 마운트 정보를 확인 가능함


  • mount 명령어
    • mount [물리장치(from)] [논리경로(to)]
    • mount /dev/sr0 /test


  • sysstat 명령어
    • yum -y install sysstat
    • 시스템 자원 사용량 확인 가능
    • 1초마다 한번씩 5번을 측정, 맨 하단에는 평균값
[root@srv7 ~]# sar 1 5
Linux 3.10.0-1160.el7.x86_64 (srv7) 	07/22/2022 	_x86_64_(2 CPU)

09:37:35 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
09:37:36 AM     all      1.55      0.00      0.00      0.00      0.00     98.45
09:37:37 AM     all      3.74      0.00      2.14      0.00      0.00     94.12
09:37:38 AM     all      2.69      0.00      0.54      0.00      0.00     96.77
09:37:39 AM     all      1.57      0.00      0.52      0.00      0.00     97.91
09:37:40 AM     all      3.28      0.00      2.19      0.00      0.00     94.54
Average:        all      2.55      0.00      1.06      0.00      0.00     96.39