<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>또이리의 Server Engineer</title>
    <link>https://jayyjji.tistory.com/</link>
    <description>IT/Internet, Linux</description>
    <language>ko</language>
    <pubDate>Sat, 13 Jun 2026 09:22:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>또이리</managingEditor>
    <image>
      <title>또이리의 Server Engineer</title>
      <url>https://tistory1.daumcdn.net/tistory/4328643/attach/2de08064f4aa4b9692e4bc9dd4e1261d</url>
      <link>https://jayyjji.tistory.com</link>
    </image>
    <item>
      <title>ubuntu 22.04 server 우분투 패스워드 초기화 passwd / grub / reset</title>
      <link>https://jayyjji.tistory.com/33</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;ubuntu 22.04 passwd reset&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;root passwd grub reset&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Test OS - ubuntu 22.04 server&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kernel - 5.15.0-69-generic&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;root password (관리자 비밀번호) 초기화 / 변경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;1. 시스템 재부팅 reboot&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선 grub 메뉴로 진입해야 합니다. 그러기 위해서 시스템을 재부팅합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템이 재부팅되고 POST(Power ON Self Test)가 진행되면 키보드 좌측의 시프트키를 계속 눌러줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에서 검색해 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;quickly press and hold the Shift key, which will bring up the GNU GRUB menu.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(If you see the Ubuntu logo, you've missed the point where you can enter the GRUB menu.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;With UEFI press (perhaps several times) the Escape key to get grub menu.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅되는 바이오스 화면에서 빠르게 쉬프트키를 눌러라, 누르고 있어라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투로고가 보이면 이미 놓쳤다. UEFI로 설치된 경우는 ESC 키를 눌러라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등등의 다양한 글들이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부팅이 진행되고, 서버의 부팅 로고에서 - OS 로고로 전환되는 사이에 shift 키를 누르면 grub&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; menu로 진입되는 게 맞습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간혹, 타이밍에 따라 shift 키 인식이 안되어 진입이 안 되는 경우, 재부팅 후 시도해 보시고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔지니어들도&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 이런 방식으로 여러 번 시도해도 grub menu에 진입되지 않은 경우도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 경우는 상황에 따라 대응이 달라질 수 있습니다. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅에서는 일반적인 방법을 설명드리겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;2. grub menu&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정상적으로 grub menu 진입이 되셨다면 아래와 같은 화면이 출력됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tFzsn/btsa9AQwSQt/ySGxrUvoRzWaMfXdaMIZDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tFzsn/btsa9AQwSQt/ySGxrUvoRzWaMfXdaMIZDk/img.png&quot; data-alt=&quot;Open grub menu&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tFzsn/btsa9AQwSQt/ySGxrUvoRzWaMfXdaMIZDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtFzsn%2Fbtsa9AQwSQt%2FySGxrUvoRzWaMfXdaMIZDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1021&quot; height=&quot;707&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Open grub menu&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;3. Edit grub&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 화면에서 &quot;ubuntu&quot;라는 기본 OS를 선택하시고, e키를 눌러주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엔터 누르지 마시고, e키입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM6n0D/btsa9AXk0Da/kYQZB2NC26sssOqN83mVB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM6n0D/btsa9AXk0Da/kYQZB2NC26sssOqN83mVB0/img.png&quot; data-alt=&quot;Edit grub&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM6n0D/btsa9AXk0Da/kYQZB2NC26sssOqN83mVB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM6n0D%2Fbtsa9AXk0Da%2FkYQZB2NC26sssOqN83mVB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;710&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Edit grub&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e키를 눌러서 edit mode에 진입하셨다면, 위와 같은 화면이 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;linux로 시작하는 줄을 찾으시면 됩니다. 위 사진에 노란색으로 표시되어 있고 그 뒷줄에는 커널버전이 출력되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 커맨드라인의 맨 끝으로 이동합니다. 위의 사진에서는 &quot;ro&quot;부터 작업하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ro를 rw init=/bin/bash라고 수정합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;read only를 read write로 바꾼다 머 그 정도로 아시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 다 끝났습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간혹 ro&amp;nbsp; &amp;nbsp;quite splash 이렇게 입력되어 있는 경우도 있습니다. 그 라인 전체 수정해 주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 부분 삭제하기 찝찝하시면 사진 한 장 찍어놓으시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;패스워드 수정하시고 재부팅 후, 확인하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일단 루트패스워드부터 바꿔야 하지 않겠습니까?&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HeiUt/btsa9zRFoW9/BmMIW55IsKEXwGnPd4qrwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HeiUt/btsa9zRFoW9/BmMIW55IsKEXwGnPd4qrwK/img.png&quot; data-alt=&quot;Edit grub&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HeiUt/btsa9zRFoW9/BmMIW55IsKEXwGnPd4qrwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHeiUt%2Fbtsa9zRFoW9%2FBmMIW55IsKEXwGnPd4qrwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1017&quot; height=&quot;762&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Edit grub&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정하셨으면, 반드시 &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Ctrl-x&lt;/b&gt;&lt;/span&gt; 또는 &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;F10&lt;/b&gt;&lt;/span&gt;키를 눌러서 부팅하셔야 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 부팅이 되시면 아래와 같은 화면이 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;4. passwd 변경&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccIEMl/btsbgleeGKx/ad7GCKb5PnbVQDIfzAcBI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccIEMl/btsbgleeGKx/ad7GCKb5PnbVQDIfzAcBI1/img.png&quot; data-alt=&quot;New passeord&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccIEMl/btsbgleeGKx/ad7GCKb5PnbVQDIfzAcBI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccIEMl%2FbtsbgleeGKx%2Fad7GCKb5PnbVQDIfzAcBI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;936&quot; height=&quot;366&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;New passeord&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 화면만 봐도 이해하시겠죠. 이상입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명을 조금 하자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 mount | grep -w / 명령어로 정상적으로 rw로 마운트 되었는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인 후 passwd 명령어로 패스워드 수정해 주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;new password / retype new password 이렇게 두 번 입력해 주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;successfully라는 기분 좋은 단어가 뜨면 재부팅해주시면 모든 과정이 끝납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reboot -f 명령어로 재부팅합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재부팅에 -f(force) 옵션을 넣어줬는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 엔지니어다 보니 일반적으로 reboot 명령어를 입력했을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템이 행 걸리는 증상을 자주 접해서 뒤에 강제 옵션을 넣어주고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-f, &amp;ndash;force 즉시 중지, 전원 끄기 또는 다시 재부팅합니다. 이 옵션을 한번 지정하면 모든 유닛을 셧다운 하지 않고 해당 명령을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 모든 프로세스는 강제 종료되고 모든 파일 시스템은 언마운트되거나 읽기 전용으로 재마운트 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이 옵션을 두 번 지정하면 프로세스가 종료되거나 파일시스템이 마운트 해제되지 않고 즉시 수행됩니다. 따라서 두 번 지정하여 명령을 수행하면 데이터가 손실될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 18.04로 test 했을 때와 크게 달라진 점은 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT5qRT/btsa9xzNkgg/AJtWbBpKrkhDL6TZOKKdi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT5qRT/btsa9xzNkgg/AJtWbBpKrkhDL6TZOKKdi1/img.png&quot; data-alt=&quot;ubuntu 22.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT5qRT/btsa9xzNkgg/AJtWbBpKrkhDL6TZOKKdi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT5qRT%2Fbtsa9xzNkgg%2FAJtWbBpKrkhDL6TZOKKdi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;582&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu 22.04&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 관리자 로그인이 되고, 지정한 패스워드로 변경되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>grub</category>
      <category>passwd</category>
      <category>Password Reset</category>
      <category>Ubuntu 22.04</category>
      <category>우분투</category>
      <category>우분투 22.04 패스워드 초기화</category>
      <category>우분투패스워드초기화</category>
      <category>초기화</category>
      <category>패스워드</category>
      <category>패스워드초기화</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/33</guid>
      <comments>https://jayyjji.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 19 Apr 2023 12:58:38 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 파일보기 명령어 - cat, more, less, head, tail</title>
      <link>https://jayyjji.tistory.com/32</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;리눅스 파일보기 명령어 - cat, more, less, head, tail&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;리눅스 파일보기 명령어 - 기본 명령어 cat, more, less, head, tail&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;안녕하세요. 오늘은 리눅스에서 기본적으로 파일의 내용을 확인할 때 사용하는 기본 명령어에 대해서 알아보겠습니다. 대부분의 리눅스 OS에서 사용이 가능하니 알아 두시면 도움이 돼 실 겁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버 엔지니어 입장에서는 무조건 알고 있어야 되는 명령어라 생각합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 cat, more, less, head, tail을 단독으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;그리고,&lt;/p&gt;
&lt;p&gt;cat /경로/파일 | more, less, head, tail과 같은 형태로 사용할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 화면과 함께 설명드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리눅스 파일보기 명령어 cat&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;명령어를 사용하여&amp;nbsp;&lt;/p&gt;
&lt;p&gt;/var/log/syslog 파일을 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1616935395492&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# cat /var/log/syslog
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'iscsi_tcp'
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'ib_iser'
Nov 17 23:30:09 ubuntu systemd[1]: Starting Flush Journal to Persistent Storage...
Nov 17 23:30:09 ubuntu systemd[1]: Started udev Kernel Device Manager.
Nov 17 23:30:09 ubuntu systemd[1]: Started Apply Kernel Variables.
Nov 17 23:30:09 ubuntu systemd[1]: Started Set the console keyboard layout.
Nov 17 23:30:09 ubuntu systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local Encrypted Volumes.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems (Pre).
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Commit a transient machine-id on disk...
Nov 17 23:30:09 ubuntu systemd[1]: Starting ebtables ruleset management...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Set console font and keymap...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Tell Plymouth To Write Out Runtime Data...
Nov 17 23:30:09 ubuntu systemd[1]: Starting AppArmor initialization...
Nov 17 23:30:09 ubuntu systemd[1]: Started Flush Journal to Persistent Storage.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Create Volatile Files and Directories...
Nov 17 23:30:09 ubuntu systemd[1]: Started Tell Plymouth To Write Out Runtime Data.
Nov 17 23:30:09 ubuntu systemd[1]: Started Create Volatile Files and Directories.
~~~~~
Mar 28 21:21:10 ubuntu systemd[1]: Started Message of the Day.
Mar 28 21:21:21 ubuntu systemd[1]: Created slice User Slice of root.
Mar 28 21:21:21 ubuntu systemd[1]: Starting User Manager for UID 0...
Mar 28 21:21:21 ubuntu systemd[1]: Started Session 1 of user root.
Mar 28 21:21:21 ubuntu systemd[1321]: Listening on GnuPG cryptographic agent and passphrase cache (access for web browsers).
Mar 28 21:21:21 ubuntu systemd[1321]: Listening on GnuPG cryptographic agent and passphrase cache.
Mar 28 21:21:21 ubuntu systemd[1321]: Reached target Paths.
Mar 28 21:21:21 ubuntu systemd[1321]: Listening on REST API socket for snapd user session agent.
Mar 28 21:21:21 ubuntu systemd[1321]: Listening on GnuPG network certificate management daemon.
Mar 28 21:21:21 ubuntu systemd[1321]: Listening on GnuPG cryptographic agent (ssh-agent emulation).
Mar 28 21:21:21 ubuntu systemd[1321]: Listening on GnuPG cryptographic agent and passphrase cache (restricted).
Mar 28 21:21:21 ubuntu systemd[1321]: Reached target Sockets.
Mar 28 21:21:21 ubuntu systemd[1321]: Reached target Timers.
Mar 28 21:21:21 ubuntu systemd[1321]: Reached target Basic System.
Mar 28 21:21:21 ubuntu systemd[1]: Started User Manager for UID 0.
Mar 28 21:21:21 ubuntu systemd[1321]: Reached target Default.
Mar 28 21:21:21 ubuntu systemd[1321]: Startup finished in 44ms.
Mar 28 21:21:22 ubuntu systemd[1]: Started Session 3 of user root.
Mar 28 21:21:22 ubuntu snapd[626]: daemon.go:540: gracefully waiting for running hooks
Mar 28 21:21:22 ubuntu snapd[626]: daemon.go:542: done waiting for running hooks
Mar 28 21:21:22 ubuntu snapd[626]: daemon stop requested to wait for socket activation
Mar 28 21:21:53 ubuntu systemd[1]: Started Daily apt download activities.
Mar 28 21:21:53 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
Mar 28 21:21:54 ubuntu systemd[1]: Started Daily apt upgrade and clean activities.
Mar 28 21:21:54 ubuntu systemd[1]: Startup finished in 4.128s (kernel) + 49.800s (userspace) = 53.928s.
Mar 28 21:36:40 ubuntu systemd[1]: Starting Cleanup of Temporary Directories...
Mar 28 21:36:40 ubuntu systemd[1]: Started Cleanup of Temporary Directories.
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 cat 명령어만 사용해서 파일을 보게 되면 쉴 새 없이 화면이 지나가며 파일내용을 전부 출력하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파일의 내용이 간단하다면, 파일 내용을 충분히 파악할 수 있겠지만 페이지가 많다면, 쭉쭉 넘어가서 파일의 전체 내용을 확인할 수가 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이때 사용하는 명령어가 more, less, head, tail 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리눅스 파일보기 명령어 more&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;자, 이제 위의 cat 명령어 대신 more 명령어를 사용해 보겠습니다.&lt;/p&gt;
&lt;p&gt;more /var/log/syslog&lt;/p&gt;
&lt;pre id=&quot;code_1616935725335&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# more /var/log/syslog
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'iscsi_tcp'
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'ib_iser'
Nov 17 23:30:09 ubuntu systemd[1]: Starting Flush Journal to Persistent Storage...
Nov 17 23:30:09 ubuntu systemd[1]: Started udev Kernel Device Manager.
Nov 17 23:30:09 ubuntu systemd[1]: Started Apply Kernel Variables.
Nov 17 23:30:09 ubuntu systemd[1]: Started Set the console keyboard layout.
Nov 17 23:30:09 ubuntu systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local Encrypted Volumes.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems (Pre).
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Commit a transient machine-id on disk...
Nov 17 23:30:09 ubuntu systemd[1]: Starting ebtables ruleset management...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Set console font and keymap...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Tell Plymouth To Write Out Runtime Data...
Nov 17 23:30:09 ubuntu systemd[1]: Starting AppArmor initialization...
Nov 17 23:30:09 ubuntu systemd[1]: Started Flush Journal to Persistent Storage.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Create Volatile Files and Directories...
Nov 17 23:30:09 ubuntu systemd[1]: Started Tell Plymouth To Write Out Runtime Data.
Nov 17 23:30:09 ubuntu systemd[1]: Started Create Volatile Files and Directories.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Update UTMP about System Boot/Shutdown...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Network Time Synchronization...
Nov 17 23:30:09 ubuntu systemd[1]: Started Set console font and keymap.
Nov 17 23:30:09 ubuntu systemd[1]: Started Update UTMP about System Boot/Shutdown.
Nov 17 23:30:09 ubuntu systemd[1]: Started Commit a transient machine-id on disk.
Nov 17 23:30:09 ubuntu systemd[1]: Started ebtables ruleset management.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Network (Pre).
Nov 17 23:30:09 ubuntu systemd[1]: Starting Network Service...
Nov 17 23:30:09 ubuntu apparmor[532]:  * Starting AppArmor profiles
Nov 17 23:30:09 ubuntu systemd-networkd[547]: Enumeration completed
Nov 17 23:30:09 ubuntu systemd[1]: Started Network Service.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Wait for Network to be Configured...
Nov 17 23:30:09 ubuntu systemd-networkd[547]: lo: Link is not managed by us
Nov 17 23:30:09 ubuntu systemd-networkd[547]: ens34: Link is not managed by us
Nov 17 23:30:09 ubuntu systemd-networkd[547]: ens33: Gained carrier
Nov 17 23:30:09 ubuntu systemd[1]: Starting Network Name Resolution...
Nov 17 23:30:09 ubuntu systemd[1]: Started Network Time Synchronization.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target System Time Synchronized.
Nov 17 23:30:09 ubuntu systemd-resolved[552]: Positive Trust Anchors:
Nov 17 23:30:09 ubuntu systemd-resolved[552]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
Nov 17 23:30:09 ubuntu systemd-resolved[552]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
Nov 17 23:30:09 ubuntu systemd-resolved[552]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa
22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa 168.19
2.in-addr.arpa d.f.ip6.arpa corp home internal intranet lan local private test
Nov 17 23:30:09 ubuntu systemd-resolved[552]: Using system hostname 'ubuntu'.
Nov 17 23:30:09 ubuntu systemd[1]: Started Network Name Resolution.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Host and Network Name Lookups.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Network.
Nov 17 23:30:09 ubuntu systemd-udevd[520]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 17 23:30:09 ubuntu systemd-udevd[523]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 17 23:30:09 ubuntu systemd-udevd[525]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 17 23:30:09 ubuntu systemd[1]: Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
Nov 17 23:30:09 ubuntu apparmor[532]: Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
Nov 17 23:30:09 ubuntu apparmor[532]:    ...done.
Nov 17 23:30:09 ubuntu systemd[1]: Started AppArmor initialization.
Nov 17 23:30:09 ubuntu systemd[1]: Started Authentication service for virtual machines hosted on VMware.
Nov 17 23:30:09 ubuntu systemd[1]: Started Service for virtual machines hosted on VMware.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target System Initialization.
Nov 17 23:30:09 ubuntu systemd[1]: Listening on UUID daemon activation socket.
--More--(0%)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 출력이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;화면에 출력할 수 있는 처음 페이지를 보여주고 그 이상 다음 페이지로 넘어가지 않습니다. 아래 --More-- (0%) 보이시나요? 문서 전체 페이지의 퍼센티지를 보여줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;여기서 엔터키를 누르게 되면, 한 줄씩 화면이 넘어가며, 스페이스 바를 누르게 되면 한 페이지씩 화면이 넘어가게 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리눅스 파일보기 명령어 less&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;이번엔 less 명령어를 사용해 보겠습니다.&lt;/p&gt;
&lt;p&gt;less /var/log/syslog&lt;/p&gt;
&lt;pre id=&quot;code_1616936028220&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# less /var/log/syslog
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'iscsi_tcp'
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'ib_iser'
Nov 17 23:30:09 ubuntu systemd[1]: Starting Flush Journal to Persistent Storage...
Nov 17 23:30:09 ubuntu systemd[1]: Started udev Kernel Device Manager.
Nov 17 23:30:09 ubuntu systemd[1]: Started Apply Kernel Variables.
Nov 17 23:30:09 ubuntu systemd[1]: Started Set the console keyboard layout.
Nov 17 23:30:09 ubuntu systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local Encrypted Volumes.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems (Pre).
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Commit a transient machine-id on disk...
Nov 17 23:30:09 ubuntu systemd[1]: Starting ebtables ruleset management...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Set console font and keymap...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Tell Plymouth To Write Out Runtime Data...
Nov 17 23:30:09 ubuntu systemd[1]: Starting AppArmor initialization...
Nov 17 23:30:09 ubuntu systemd[1]: Started Flush Journal to Persistent Storage.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Create Volatile Files and Directories...
Nov 17 23:30:09 ubuntu systemd[1]: Started Tell Plymouth To Write Out Runtime Data.
Nov 17 23:30:09 ubuntu systemd[1]: Started Create Volatile Files and Directories.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Update UTMP about System Boot/Shutdown...
Nov 17 23:30:09 ubuntu systemd[1]: Starting Network Time Synchronization...
Nov 17 23:30:09 ubuntu systemd[1]: Started Set console font and keymap.
Nov 17 23:30:09 ubuntu systemd[1]: Started Update UTMP about System Boot/Shutdown.
Nov 17 23:30:09 ubuntu systemd[1]: Started Commit a transient machine-id on disk.
Nov 17 23:30:09 ubuntu systemd[1]: Started ebtables ruleset management.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Network (Pre).
Nov 17 23:30:09 ubuntu systemd[1]: Starting Network Service...
Nov 17 23:30:09 ubuntu apparmor[532]:  * Starting AppArmor profiles
Nov 17 23:30:09 ubuntu systemd-networkd[547]: Enumeration completed
Nov 17 23:30:09 ubuntu systemd[1]: Started Network Service.
Nov 17 23:30:09 ubuntu systemd[1]: Starting Wait for Network to be Configured...
Nov 17 23:30:09 ubuntu systemd-networkd[547]: lo: Link is not managed by us
Nov 17 23:30:09 ubuntu systemd-networkd[547]: ens34: Link is not managed by us
Nov 17 23:30:09 ubuntu systemd-networkd[547]: ens33: Gained carrier
Nov 17 23:30:09 ubuntu systemd[1]: Starting Network Name Resolution...
Nov 17 23:30:09 ubuntu systemd[1]: Started Network Time Synchronization.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target System Time Synchronized.
Nov 17 23:30:09 ubuntu systemd-resolved[552]: Positive Trust Anchors:
Nov 17 23:30:09 ubuntu systemd-resolved[552]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
Nov 17 23:30:09 ubuntu systemd-resolved[552]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
Nov 17 23:30:09 ubuntu systemd-resolved[552]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa 168.192.in-addr.arpa d.f.ip6.arpa corp home internal intranet lan local private test
Nov 17 23:30:09 ubuntu systemd-resolved[552]: Using system hostname 'ubuntu'.
Nov 17 23:30:09 ubuntu systemd[1]: Started Network Name Resolution.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Host and Network Name Lookups.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Network.
Nov 17 23:30:09 ubuntu systemd-udevd[520]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 17 23:30:09 ubuntu systemd-udevd[523]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 17 23:30:09 ubuntu systemd-udevd[525]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 17 23:30:09 ubuntu systemd[1]: Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
Nov 17 23:30:09 ubuntu apparmor[532]: Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
Nov 17 23:30:09 ubuntu apparmor[532]:    ...done.
Nov 17 23:30:09 ubuntu systemd[1]: Started AppArmor initialization.
Nov 17 23:30:09 ubuntu systemd[1]: Started Authentication service for virtual machines hosted on VMware.
Nov 17 23:30:09 ubuntu systemd[1]: Started Service for virtual machines hosted on VMware.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target System Initialization.
Nov 17 23:30:09 ubuntu systemd[1]: Listening on UUID daemon activation socket.
/var/log/syslog&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;less 명령어는 기본적으로 more 명령어와 비슷 하지만 조금 다릅니다. more의 경우에는 지나간 페이지나 라인을 다시 돌려 볼 수 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 페이지 하단에 more와 다르게 파일의 경로가 확인됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;less 명령어의 경우는 엔터키와 스페이스바 키는 more와 동일 하지만 방향키를 사용하여 지나간 페이지나 라인을 다시 확인할 수 있습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리눅스 파일보기 명령어 head&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;head /var/log/syslog&lt;/p&gt;
&lt;p&gt;head 명령어는 파일의 시작 10줄을 출력해 줍니다. 필요에 따라 유용하게 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1616936614045&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# head /var/log/syslog
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'iscsi_tcp'
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'ib_iser'
Nov 17 23:30:09 ubuntu systemd[1]: Starting Flush Journal to Persistent Storage...
Nov 17 23:30:09 ubuntu systemd[1]: Started udev Kernel Device Manager.
Nov 17 23:30:09 ubuntu systemd[1]: Started Apply Kernel Variables.
Nov 17 23:30:09 ubuntu systemd[1]: Started Set the console keyboard layout.
Nov 17 23:30:09 ubuntu systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local Encrypted Volumes.
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems (Pre).
Nov 17 23:30:09 ubuntu systemd[1]: Reached target Local File Systems.
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;요렇게 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1616936649103&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# head -n 5 /var/log/syslog
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'iscsi_tcp'
Nov 17 23:30:09 ubuntu systemd-modules-load[482]: Inserted module 'ib_iser'
Nov 17 23:30:09 ubuntu systemd[1]: Starting Flush Journal to Persistent Storage...
Nov 17 23:30:09 ubuntu systemd[1]: Started udev Kernel Device Manager.
Nov 17 23:30:09 ubuntu systemd[1]: Started Apply Kernel Variables.
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;head -n 5 /var/log/syslog 이렇게 -n 5 옵션을 사용하면, 파일의 시작 5줄을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리눅스 파일보기 명령어 tail&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;다음은 마지막으로 tail 명령어에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;의외로 활용도가 높은 명령어이니 꼭 기억해두시기 바랍니다. 도움이 많이 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1616936827128&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# tail /var/log/syslog
Mar 28 21:21:22 ubuntu systemd[1]: Started Session 3 of user root.
Mar 28 21:21:22 ubuntu snapd[626]: daemon.go:540: gracefully waiting for running hooks
Mar 28 21:21:22 ubuntu snapd[626]: daemon.go:542: done waiting for running hooks
Mar 28 21:21:22 ubuntu snapd[626]: daemon stop requested to wait for socket activation
Mar 28 21:21:53 ubuntu systemd[1]: Started Daily apt download activities.
Mar 28 21:21:53 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
Mar 28 21:21:54 ubuntu systemd[1]: Started Daily apt upgrade and clean activities.
Mar 28 21:21:54 ubuntu systemd[1]: Startup finished in 4.128s (kernel) + 49.800s (userspace) = 53.928s.
Mar 28 21:36:40 ubuntu systemd[1]: Starting Cleanup of Temporary Directories...
Mar 28 21:36:40 ubuntu systemd[1]: Started Cleanup of Temporary Directories.
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;head와 반대로 마지막 10줄을 출력해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1616936901536&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# tail -n 5 /var/log/syslog
Mar 28 21:21:53 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
Mar 28 21:21:54 ubuntu systemd[1]: Started Daily apt upgrade and clean activities.
Mar 28 21:21:54 ubuntu systemd[1]: Startup finished in 4.128s (kernel) + 49.800s (userspace) = 53.928s.
Mar 28 21:36:40 ubuntu systemd[1]: Starting Cleanup of Temporary Directories...
Mar 28 21:36:40 ubuntu systemd[1]: Started Cleanup of Temporary Directories.
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;tail -n 5 /var/log/syslog 옵션 -n 5를 사용하여 파일의 마지막 5줄을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;tail 명령어의 진가는 -f 옵션입니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;보통 해당 로그나 파일을 실시간으로 모니터링할 때,&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;tail -f /var/log/syslog 이런 식으로 활용할 수 있습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 명령어를 입력하면 화면에 실시간으로 로그나 이벤트가 발생하면 라인을 업데이트해서 출력해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1616937416452&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# tail -f /var/log/syslog
Mar 28 21:21:22 ubuntu systemd[1]: Started Session 3 of user root.
Mar 28 21:21:22 ubuntu snapd[626]: daemon.go:540: gracefully waiting for running hooks
Mar 28 21:21:22 ubuntu snapd[626]: daemon.go:542: done waiting for running hooks
Mar 28 21:21:22 ubuntu snapd[626]: daemon stop requested to wait for socket activation
Mar 28 21:21:53 ubuntu systemd[1]: Started Daily apt download activities.
Mar 28 21:21:53 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
Mar 28 21:21:54 ubuntu systemd[1]: Started Daily apt upgrade and clean activities.
Mar 28 21:21:54 ubuntu systemd[1]: Startup finished in 4.128s (kernel) + 49.800s (userspace) = 53.928s.
Mar 28 21:36:40 ubuntu systemd[1]: Starting Cleanup of Temporary Directories...
Mar 28 21:36:40 ubuntu systemd[1]: Started Cleanup of Temporary Directories.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같은 화면에서 추가로 로그나 이벤트가 발생하면 맨 마지막 라인이 업데이트되면서 화면에 출력해 줍니다. 실시간으로 모니터링할 때 사용하면 유용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로 아래와 같은 명령어 형식으로도 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cat /var/log/syslog | more&lt;/p&gt;
&lt;p&gt;cat /var/log/syslog | less&lt;/p&gt;
&lt;p&gt;cat /var/log/syslog | head&lt;/p&gt;
&lt;p&gt;cat /var/log/syslog | tail&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;tail.JPG&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uEs3r/btq09Z15VTZ/6JCuiRcZxkG2Q9jigEkb1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uEs3r/btq09Z15VTZ/6JCuiRcZxkG2Q9jigEkb1K/img.jpg&quot; data-alt=&quot;linux tail 명령어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uEs3r/btq09Z15VTZ/6JCuiRcZxkG2Q9jigEkb1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuEs3r%2Fbtq09Z15VTZ%2F6JCuiRcZxkG2Q9jigEkb1K%2Fimg.jpg&quot; data-filename=&quot;tail.JPG&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;linux tail 명령어&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>Cat</category>
      <category>Head</category>
      <category>LESS</category>
      <category>More</category>
      <category>TAIL</category>
      <category>로그확인</category>
      <category>리눅스 기본명령어</category>
      <category>리눅스 파일확인</category>
      <category>모니터링</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/32</guid>
      <comments>https://jayyjji.tistory.com/32#entry32comment</comments>
      <pubDate>Sun, 28 Mar 2021 22:28:29 +0900</pubDate>
    </item>
    <item>
      <title>Linux time / date 설정 명령어 - 날짜 / 시간</title>
      <link>https://jayyjji.tistory.com/31</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Linux time / date 설정 명령어 - 날짜 / 시간&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Linux time / date 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;안녕하세요. 오늘은 리눅스에서 시간과 날짜를 설정하는 명령어에 대해서 알아보겠습니다. test 환경은 ubuntu 18.04.4 server version입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;timedatectl&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1613440082490&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# timedatectl
                      Local time: Mon 2021-02-15 20:50:38 EST
                  Universal time: Tue 2021-02-16 01:50:38 UTC
                        RTC time: Tue 2021-02-16 01:50:38
                       Time zone: America/New_York (EST, -0500)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;timedatectl 이란 명령어를 입력해 보시면 위와 같은 정보를 얻을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;date라는 명령어를 사용하면 아래와 같이 간단한 시간 날짜 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1613440320426&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# date
Mon Feb 15 20:51:11 EST 2021&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 시스템은 시간과 날짜, 지역이 America/New_York 로 설정이 되어있습니다.&lt;/p&gt;
&lt;p&gt;명령어를 사용하여 Asia/Seoul로 변경하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;timedatectl 의 명령어의 옵션에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1613440472458&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# timedatectl --help
timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

  -h --help                Show this help message
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --adjust-system-clock Adjust system clock when changing local RTC mode

Commands:
  status                   Show current time settings
  set-time TIME            Set system time
  set-timezone ZONE        Set system time zone
  list-timezones           Show known time zones
  set-local-rtc BOOL       Control whether RTC is in local time
  set-ntp BOOL             Enable or disable network time synchronization&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;아래쪽 커맨드를 보시면 set-timezone이라는 명령어가 있습니다. 눈치채셨겠지만, 지역을 설정해 주는 명령어입니다. 해당 지역을 설정해 주시면, 설정한 지역의 타임라인으로 변경되어 날짜와 시간이 변경됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;명령어의 순서는 timedatectl set-timezone 대륙/도시 순으로 입력하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보통 timedatectl set-timezone 까지 입력하시고 우리의 만능키 인 tab을 툭툭 치시면 아래와 같이 입력가능한 대륙/도시를 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1613440787211&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# timedatectl set-timezone
Display all 426 possibilities? (y or n)
Africa/Abidjan                  America/Atikokan                America/Menominee               Asia/Amman                      Asia/Tomsk                      Europe/Samara
Africa/Accra                    America/Bahia                   America/Merida                  Asia/Anadyr                     Asia/Ulaanbaatar                Europe/San_Marino
Africa/Addis_Ababa              America/Bahia_Banderas          America/Metlakatla              Asia/Aqtau                      Asia/Urumqi                     Europe/Sarajevo
Africa/Algiers                  America/Barbados                America/Mexico_City             Asia/Aqtobe                     Asia/Ust-Nera                   Europe/Saratov
Africa/Asmara                   America/Belem                   America/Miquelon                Asia/Ashgabat                   Asia/Vientiane                  Europe/Simferopol
Africa/Bamako                   America/Belize                  America/Moncton                 Asia/Atyrau                     Asia/Vladivostok                Europe/Skopje
Africa/Bangui                   America/Blanc-Sablon            America/Monterrey               Asia/Baghdad                    Asia/Yakutsk                    Europe/Sofia
Africa/Banjul                   America/Boa_Vista               America/Montevideo              Asia/Bahrain                    Asia/Yangon                     Europe/Stockholm
Africa/Bissau                   America/Bogota                  America/Montserrat              Asia/Baku                       Asia/Yekaterinburg              Europe/Tallinn
Africa/Blantyre                 America/Boise                   America/Nassau                  Asia/Bangkok                    Asia/Yerevan                    Europe/Tirane
Africa/Brazzaville              America/Cambridge_Bay           America/New_York                Asia/Barnaul                    Atlantic/Azores                 Europe/Ulyanovsk
Africa/Bujumbura                America/Campo_Grande            America/Nipigon                 Asia/Beirut                     Atlantic/Bermuda                Europe/Uzhgorod
Africa/Cairo                    America/Cancun                  America/Nome                    Asia/Bishkek                    Atlantic/Canary                 Europe/Vaduz
Africa/Casablanca               America/Caracas                 America/Noronha                 Asia/Brunei                     Atlantic/Cape_Verde             Europe/Vatican
Africa/Ceuta                    America/Cayenne                 America/North_Dakota/Beulah     Asia/Chita                      Atlantic/Faroe                  Europe/Vienna
Africa/Conakry                  America/Cayman                  America/North_Dakota/Center     Asia/Choibalsan                 Atlantic/Madeira                Europe/Vilnius
Africa/Dakar                    America/Chicago                 America/North_Dakota/New_Salem  Asia/Colombo                    Atlantic/Reykjavik              Europe/Volgograd
Africa/Dar_es_Salaam            America/Chihuahua               America/Ojinaga                 Asia/Damascus                   Atlantic/South_Georgia          Europe/Warsaw
Africa/Djibouti                 America/Costa_Rica              America/Panama                  Asia/Dhaka                      Atlantic/Stanley                Europe/Zagreb
Africa/Douala                   America/Creston                 America/Pangnirtung             Asia/Dili                       Atlantic/St_Helena              Europe/Zaporozhye
Africa/El_Aaiun                 America/Cuiaba                  America/Paramaribo              Asia/Dubai                      Australia/Adelaide              Europe/Zurich
Africa/Freetown                 America/Curacao                 America/Phoenix                 Asia/Dushanbe                   Australia/Brisbane              Indian/Antananarivo
Africa/Gaborone                 America/Danmarkshavn            America/Port-au-Prince          Asia/Famagusta                  Australia/Broken_Hill           Indian/Chagos
Africa/Harare                   America/Dawson                  America/Port_of_Spain           Asia/Gaza                       Australia/Currie                Indian/Christmas
Africa/Johannesburg             America/Dawson_Creek            America/Porto_Velho             Asia/Hebron                     Australia/Darwin                Indian/Cocos
Africa/Juba                     America/Denver                  America/Puerto_Rico             Asia/Ho_Chi_Minh                Australia/Eucla                 Indian/Comoro
Africa/Kampala                  America/Detroit                 America/Punta_Arenas            Asia/Hong_Kong                  Australia/Hobart                Indian/Kerguelen
Africa/Khartoum                 America/Dominica                America/Rainy_River             Asia/Hovd                       Australia/Lindeman              Indian/Mahe
Africa/Kigali                   America/Edmonton                America/Rankin_Inlet            Asia/Irkutsk                    Australia/Lord_Howe             Indian/Maldives
Africa/Kinshasa                 America/Eirunepe                America/Recife                  Asia/Jakarta                    Australia/Melbourne             Indian/Mauritius
Africa/Lagos                    America/El_Salvador             America/Regina                  Asia/Jayapura                   Australia/Perth                 Indian/Mayotte
Africa/Libreville               America/Fortaleza               America/Resolute                Asia/Jerusalem                  Australia/Sydney                Indian/Reunion
Africa/Lome                     America/Fort_Nelson             America/Rio_Branco              Asia/Kabul                      Europe/Amsterdam                Pacific/Apia
Africa/Luanda                   America/Glace_Bay               America/Santarem                Asia/Kamchatka                  Europe/Andorra                  Pacific/Auckland
Africa/Lubumbashi               America/Godthab                 America/Santiago                Asia/Karachi                    Europe/Astrakhan                Pacific/Bougainville
Africa/Lusaka                   America/Goose_Bay               America/Santo_Domingo           Asia/Kathmandu                  Europe/Athens                   Pacific/Chatham
Africa/Malabo                   America/Grand_Turk              America/Sao_Paulo               Asia/Khandyga                   Europe/Belgrade                 Pacific/Chuuk
Africa/Maputo                   America/Grenada                 America/Scoresbysund            Asia/Kolkata                    Europe/Berlin                   Pacific/Easter
Africa/Maseru                   America/Guadeloupe              America/Sitka                   Asia/Krasnoyarsk                Europe/Bratislava               Pacific/Efate
Africa/Mbabane                  America/Guatemala               America/St_Barthelemy           Asia/Kuala_Lumpur               Europe/Brussels                 Pacific/Enderbury
Africa/Mogadishu                America/Guayaquil               America/St_Johns                Asia/Kuching                    Europe/Bucharest                Pacific/Fakaofo
Africa/Monrovia                 America/Guyana                  America/St_Kitts                Asia/Kuwait                     Europe/Budapest                 Pacific/Fiji
Africa/Nairobi                  America/Halifax                 America/St_Lucia                Asia/Macau                      Europe/Busingen                 Pacific/Funafuti
Africa/Ndjamena                 America/Havana                  America/St_Thomas               Asia/Magadan                    Europe/Chisinau                 Pacific/Galapagos
Africa/Niamey                   America/Hermosillo              America/St_Vincent              Asia/Makassar                   Europe/Copenhagen               Pacific/Gambier
Africa/Nouakchott               America/Indiana/Indianapolis    America/Swift_Current           Asia/Manila                     Europe/Dublin                   Pacific/Guadalcanal
Africa/Ouagadougou              America/Indiana/Knox            America/Tegucigalpa             Asia/Muscat                     Europe/Gibraltar                Pacific/Guam
Africa/Porto-Novo               America/Indiana/Marengo         America/Thule                   Asia/Nicosia                    Europe/Guernsey                 Pacific/Honolulu
Africa/Sao_Tome                 America/Indiana/Petersburg      America/Thunder_Bay             Asia/Novokuznetsk               Europe/Helsinki                 Pacific/Kiritimati
Africa/Tripoli                  America/Indiana/Tell_City       America/Tijuana                 Asia/Novosibirsk                Europe/Isle_of_Man              Pacific/Kosrae
Africa/Tunis                    America/Indiana/Vevay           America/Toronto                 Asia/Omsk                       Europe/Istanbul                 Pacific/Kwajalein
Africa/Windhoek                 America/Indiana/Vincennes       America/Tortola                 Asia/Oral                       Europe/Jersey                   Pacific/Majuro
America/Adak                    America/Indiana/Winamac         America/Vancouver               Asia/Phnom_Penh                 Europe/Kaliningrad              Pacific/Marquesas
America/Anchorage               America/Inuvik                  America/Whitehorse              Asia/Pontianak                  Europe/Kiev                     Pacific/Midway
America/Anguilla                America/Iqaluit                 America/Winnipeg                Asia/Pyongyang                  Europe/Kirov                    Pacific/Nauru
America/Antigua                 America/Jamaica                 America/Yakutat                 Asia/Qatar                      Europe/Lisbon                   Pacific/Niue
America/Araguaina               America/Juneau                  America/Yellowknife             Asia/Qostanay                   Europe/Ljubljana                Pacific/Norfolk
America/Argentina/Buenos_Aires  America/Kentucky/Louisville     Antarctica/Casey                Asia/Qyzylorda                  Europe/London                   Pacific/Noumea
America/Argentina/Catamarca     America/Kentucky/Monticello     Antarctica/Davis                Asia/Riyadh                     Europe/Luxembourg               Pacific/Pago_Pago
America/Argentina/Cordoba       America/Kralendijk              Antarctica/DumontDUrville       Asia/Sakhalin                   Europe/Madrid                   Pacific/Palau
America/Argentina/Jujuy         America/La_Paz                  Antarctica/Macquarie            Asia/Samarkand                  Europe/Malta                    Pacific/Pitcairn
America/Argentina/La_Rioja      America/Lima                    Antarctica/Mawson               Asia/Seoul                      Europe/Mariehamn                Pacific/Pohnpei
America/Argentina/Mendoza       America/Los_Angeles             Antarctica/McMurdo              Asia/Shanghai                   Europe/Minsk                    Pacific/Port_Moresby
America/Argentina/Rio_Gallegos  America/Lower_Princes           Antarctica/Palmer               Asia/Singapore                  Europe/Monaco                   Pacific/Rarotonga
America/Argentina/Salta         America/Maceio                  Antarctica/Rothera              Asia/Srednekolymsk              Europe/Moscow                   Pacific/Saipan
America/Argentina/San_Juan      America/Managua                 Antarctica/Syowa                Asia/Taipei                     Europe/Oslo                     Pacific/Tahiti
America/Argentina/San_Luis      America/Manaus                  Antarctica/Troll                Asia/Tashkent                   Europe/Paris                    Pacific/Tarawa
America/Argentina/Tucuman       America/Marigot                 Antarctica/Vostok               Asia/Tbilisi                    Europe/Podgorica                Pacific/Tongatapu
America/Argentina/Ushuaia       America/Martinique              Arctic/Longyearbyen             Asia/Tehran                     Europe/Prague                   Pacific/Wake
America/Aruba                   America/Matamoros               Asia/Aden                       Asia/Thimphu                    Europe/Riga                     Pacific/Wallis
America/Asuncion                America/Mazatlan                Asia/Almaty                     Asia/Tokyo                      Europe/Rome                     UTC
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;거의 대부분의 대륙과 도시를 확인 할수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇다면 기존의 명령어 뒤에 입력해 주시면 됩니다.&lt;/p&gt;
&lt;p&gt;timedatectl set-timezone Asia/Seoul&lt;/p&gt;
&lt;pre id=&quot;code_1613441029362&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# timedatectl set-timezone Asia/Seoul
root@ubuntu:~# date
Tue Feb 16 11:02:46 KST 2021
root@ubuntu:~# timedatectl
                      Local time: Tue 2021-02-16 11:02:51 KST
                  Universal time: Tue 2021-02-16 02:02:51 UTC
                        RTC time: Tue 2021-02-16 02:02:51
                       Time zone: Asia/Seoul (KST, +0900)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 간단한 방법으로 변경된 시간과 날짜를 확인할 수 있습니다. time zone도 변경되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;timedatectl.JPG&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;482&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV3RqF/btqXxdgZu7X/950DeqCGvzRIyjxsVcuxn1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV3RqF/btqXxdgZu7X/950DeqCGvzRIyjxsVcuxn1/img.jpg&quot; data-alt=&quot;timedatectl set-timezone&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV3RqF/btqXxdgZu7X/950DeqCGvzRIyjxsVcuxn1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV3RqF%2FbtqXxdgZu7X%2F950DeqCGvzRIyjxsVcuxn1%2Fimg.jpg&quot; data-filename=&quot;timedatectl.JPG&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;482&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;timedatectl set-timezone&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>linux date</category>
      <category>linux time</category>
      <category>set-time zone</category>
      <category>timedatectl</category>
      <category>리눅스 날짜</category>
      <category>리눅스 날짜 시간 설정</category>
      <category>리눅스 시간</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/31</guid>
      <comments>https://jayyjji.tistory.com/31#entry31comment</comments>
      <pubDate>Tue, 16 Feb 2021 11:33:43 +0900</pubDate>
    </item>
    <item>
      <title>TensorFlow install (NVIDA NGC) 텐서플로우 설치</title>
      <link>https://jayyjji.tistory.com/30</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Tensorflow install (NVIDIA NGC) 텐서플로우 설치&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;TensorFlow nvidia-docker install&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 docker를 통하여 간단하게 tensorflow를 설치해보겠습니다. 도커를 이용해서 텐서플로우를 사용하실 거라면, 엔비디아 드라이버, 도커-ce, nvidia-docker만 설치를 하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;엔비디아 드라이버 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;엔비디아 드라이버를 설치하는 가장 간단한 방법은 레포지터를 추가하여 설치하는 방법입니다. 설치하고자 하는 서버가 가 인터넷에 연결되어 있다면 아래와 같이 진행하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;테스트 OS는 ubuntu 16.04.7 LTS server 입니다. 그래픽카드 즉, GPU는 RTX 3090입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611214119407&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-add-repository ppa:graphics-drivers/ppa
 Fresh drivers from upstream, currently shipping Nvidia.

## Current Status

Current long-lived branch release: `nvidia-430` (430.40)
Dropped support for Fermi series (https://nvidia.custhelp.com/app/answers/detail/a_id/4656)

Old long-lived branch release: `nvidia-390` (390.129)

For GF1xx GPUs use `nvidia-390` (390.129)
For G8x, G9x and GT2xx GPUs use `nvidia-340` (340.107)
For NV4x and G7x GPUs use `nvidia-304` (304.137) End-Of-Life!

Support timeframes for Unix legacy GPU releases:
https://nvidia.custhelp.com/app/answers/detail/a_id/3142

## What we're working on right now:

- Normal driver updates
- Help Wanted: Mesa Updates for Intel/AMD users, ping us if you want to help do this work, we're shorthanded.

## WARNINGS:

This PPA is currently in testing, you should be experienced with packaging before you dive in here:

Volunteers welcome!

### How you can help:

## Install PTS and benchmark your gear:

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sudo apt-get install phoronix-test-suite

Run the benchmark:

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;phoronix-test-suite default-benchmark openarena xonotic tesseract gputest unigine-valley

and then say yes when it asks you to submit your results to openbechmarking.org. Then grab a cup of coffee, it takes a bit for the benchmarks to run. Depending on the version of Ubuntu you're using it might preferable for you to grabs PTS from upstream directly: http://www.phoronix-test-suite.com/?k=downloads

## Share your results with the community:

Post a link to your results (or any other feedback to): https://launchpad.net/~graphics-drivers-testers

Remember to rerun and resubmit the benchmarks after driver upgrades, this will allow us to gather a bunch of data on performance that we can share with everybody.

If you run into old documentation referring to other PPAs, you can help us by consolidating references to this PPA.

If someone wants to go ahead and start prototyping on `software-properties-gtk` on what the GUI should look like, please start hacking!

## Help us Help You!

We use the donation funds to get the developers hardware to test and upload these drivers, please consider donating to the &quot;community&quot; slider on the donation page if you're loving this PPA:

http://www.ubuntu.com/download/desktop/contribute
 More info: https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
Press [ENTER] to continue or ctrl-c to cancel adding it&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;root@ubuntu:~# apt-add-repository ppa:graphics-drivers/ppa&lt;/p&gt;
&lt;p&gt;다음과 입력하시고 엔터를 누르시면 레포지터리가 등록됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;레포지터리가 등록 되었다면, apt-get update를 진행하여 목록을 업데이트합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611214261026&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-get update
Hit:1 https://download.docker.com/linux/ubuntu xenial InRelease
Hit:2 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial InRelease
Hit:3 https://nvidia.github.io/libnvidia-container/stable/ubuntu16.04/amd64  InRelease
Hit:4 http://us.archive.ubuntu.com/ubuntu xenial InRelease
Get:5 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Hit:6 https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu16.04/amd64  InRelease
Get:7 http://us.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Hit:8 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  InRelease
Get:9 http://us.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Fetched 325 kB in 2s (145 kB/s)
Reading package lists... Done
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 apt-get install 명령어로 엔비디아 드라이버를 설치할 수 있습니다.&lt;/p&gt;
&lt;p&gt;apt-get install nvidia- 까지 타이핑 하시고 tab 키를 누르시면 현재 설치 가능한 nvidia driver version이 화면에 표시됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ubuntu18.04 나 20.04에서는 apt-get install nvidia-driver-까지 타이핑하셔야 설치 가능한 드라이버 버전이 표시됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611214489946&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-get install nvidia-
Display all 107 possibilities? (y or n)
nvidia-304                     nvidia-current-dev
nvidia-304-dev                 nvidia-current-updates
nvidia-304-updates             nvidia-current-updates-dev
nvidia-304-updates-dev         nvidia-docker
nvidia-331                     nvidia-docker2
nvidia-331-dev                 nvidia-experimental-304
nvidia-331-updates             nvidia-experimental-304-dev
nvidia-331-updates-dev         nvidia-libopencl1-304
nvidia-331-updates-uvm         nvidia-libopencl1-304-updates
nvidia-331-uvm                 nvidia-libopencl1-331
nvidia-340                     nvidia-libopencl1-331-updates
nvidia-340-dev                 nvidia-libopencl1-340
nvidia-340-updates             nvidia-libopencl1-340-updates
nvidia-340-updates-dev         nvidia-libopencl1-346
nvidia-340-updates-uvm         nvidia-libopencl1-346-updates
nvidia-340-uvm                 nvidia-libopencl1-352
nvidia-346                     nvidia-libopencl1-352-updates
nvidia-346-dev                 nvidia-libopencl1-361
nvidia-346-updates             nvidia-libopencl1-361-updates
nvidia-346-updates-dev         nvidia-libopencl1-367
nvidia-352                     nvidia-libopencl1-375
nvidia-352-dev                 nvidia-libopencl1-384
nvidia-352-updates             nvidia-libopencl1-410
nvidia-352-updates-dev         nvidia-libopencl1-415
nvidia-361                     nvidia-libopencl1-418
nvidia-361-dev                 nvidia-libopencl1-430
nvidia-361-updates             nvidia-modprobe
nvidia-361-updates-dev         nvidia-nsight
nvidia-367                     nvidia-opencl-dev
nvidia-367-dev                 nvidia-opencl-icd-304
nvidia-375                     nvidia-opencl-icd-304-updates
nvidia-375-dev                 nvidia-opencl-icd-331
nvidia-384                     nvidia-opencl-icd-331-updates
nvidia-384-dev                 nvidia-opencl-icd-340
nvidia-410                     nvidia-opencl-icd-340-updates
nvidia-410-dev                 nvidia-opencl-icd-346
nvidia-415                     nvidia-opencl-icd-346-updates
nvidia-415-dev                 nvidia-opencl-icd-352
nvidia-418                     nvidia-opencl-icd-352-updates
nvidia-418-dev                 nvidia-opencl-icd-361
nvidia-430                     nvidia-opencl-icd-361-updates
nvidia-430-dev                 nvidia-opencl-icd-367
nvidia-cg-dev                  nvidia-opencl-icd-375
nvidia-cg-doc                  nvidia-opencl-icd-384
nvidia-cg-toolkit              nvidia-opencl-icd-410
nvidia-common                  nvidia-opencl-icd-415
nvidia-container-runtime       nvidia-opencl-icd-418
nvidia-container-runtime-hook  nvidia-opencl-icd-430
nvidia-container-toolkit       nvidia-persistenced
nvidia-cuda-dev                nvidia-prime
nvidia-cuda-doc                nvidia-profiler
nvidia-cuda-gdb                nvidia-settings
nvidia-cuda-toolkit            nvidia-visual-profiler
nvidia-current
root@ubuntu:~# apt-get install nvidia-&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;해당 OS에서는 nvidia-430 버젼까지만 표시가 됩니다. 스토리 작성 당시 460 버전까지 나왔는 것을 홈페이지에서 확인했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우분투 18.04에서도 460 버젼까지 레포지터리 등록으로 설치할 수 있습니다. 16.04는 430 버전 이후로 레포지터리 등록이 안되고 있는 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여하튼 우분투에서는 인터넷만 연결되어 있다면, 이렇게 간단하게 엔비디아 드라이버 설치가 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 RTX 3090을 사용하기 때문에 엔비디아 홈페이지에서 455버젼을 다운로드 받아서 설치했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3090.JPG&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;474&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5vYGv/btqUmKhCkSn/f8StfaiuWcEuxVWXAkmmck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5vYGv/btqUmKhCkSn/f8StfaiuWcEuxVWXAkmmck/img.jpg&quot; data-alt=&quot;RTX 3090&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5vYGv/btqUmKhCkSn/f8StfaiuWcEuxVWXAkmmck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5vYGv%2FbtqUmKhCkSn%2Ff8StfaiuWcEuxVWXAkmmck%2Fimg.jpg&quot; data-filename=&quot;3090.JPG&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;474&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RTX 3090&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 사진은 드라이버 설치 이후 gpu burn을 실행 한 상태입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 엔비디아 드라이버 설치가 완료 됬습니다. 도커를 설치하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;도커 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;도커 설치 또한 매우 간단합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611215062860&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable&quot;
sudo apt-get update
sudo apt-get -y install docker-ce&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;엔비디아 도커 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1611216364073&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 명령어들을 스크립트로 사용하셔도 되고, 그대로 복사 붙여 넣기로 명령어 프롬프트에 사용하셔도 설치 가능합니다.&lt;/p&gt;
&lt;p&gt;도커, 엔비디아 도커 설치 후&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl restart docker.service로 도커를 재시작합니다.&lt;/p&gt;
&lt;p&gt;systemctl status docker.service로 도커 서비스를 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;30900.JPG&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;354&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brvzCo/btqUcBtm9Lo/VbDqdXUylZOmaEZUo6RQzk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brvzCo/btqUcBtm9Lo/VbDqdXUylZOmaEZUo6RQzk/img.jpg&quot; data-alt=&quot;docker.service&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brvzCo/btqUcBtm9Lo/VbDqdXUylZOmaEZUo6RQzk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrvzCo%2FbtqUcBtm9Lo%2FVbDqdXUylZOmaEZUo6RQzk%2Fimg.jpg&quot; data-filename=&quot;30900.JPG&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;354&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker.service&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 사진과 같이 Active: active (running) 상태이면 도커 서비스가 정상 작동하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;텐서플로우 이미지 당겨오기&lt;/p&gt;
&lt;p&gt;docker pull tensorflow/tensorflow:latest-gpu&lt;/p&gt;
&lt;p&gt;docker pull &lt;a href=&quot;http://nvcr.io/nvidia/tensorflow:20.12-tf2-py3&quot;&gt;nvcr.io/nvidia/tensorflow:20.12-tf2-py3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너 생성, 실행&lt;/p&gt;
&lt;p&gt;docker run --runtime=nvidia -it --rm nvidia/cuda nvidia-smi&lt;/p&gt;
&lt;p&gt;docker run --gpus all -it --rm nvidia/cuda nvidia-smi&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker run --runtime=nvidia -it --rm tensorflow/tensorflow:latest-gpu&lt;/p&gt;
&lt;p&gt;docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;로컬 볼륨 마운트&lt;/p&gt;
&lt;p&gt;docker run --runtime=nvidia -it --rm -v /root:/root &lt;a href=&quot;http://nvcr.io/nvidia/tensorflow:20.12-tf2-py3&quot;&gt;nvcr.io/nvidia/tensorflow:20.12-tf2-py3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;docker run --gpus all -it --rm -v /root:/root &lt;a href=&quot;http://nvcr.io/nvidia/tensorflow:20.12-tf2-py3&quot;&gt;nvcr.io/nvidia/tensorflow:20.12-tf2-py3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;벤치마크 다운로드&lt;/p&gt;
&lt;p&gt;git clone &lt;a href=&quot;https://github.com/tensorflow/benchmarks.git&quot;&gt;https://github.com/tensorflow/benchmarks.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고사이트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;nvidia driver download&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nvidia.co.kr/Download/index.aspx?lang=kr&quot;&gt;https://www.nvidia.co.kr/Download/index.aspx?lang=kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611216559766&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;NVIDIA 드라이버 다운로드&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.nvidia.co.kr&quot; data-og-source-url=&quot;https://www.nvidia.co.kr/Download/index.aspx?lang=kr&quot; data-og-url=&quot;https://www.nvidia.co.kr/Download/index.aspx?lang=kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dFxFbT/hyI1lr1ieL/KZ3XGPuWtrt8Yn9WNYf5M0/img.jpg?width=220&amp;amp;height=200&amp;amp;face=0_0_220_200,https://scrap.kakaocdn.net/dn/dkCXg5/hyI1qfM6mI/87CMHLguoc49P9loVeqVok/img.jpg?width=220&amp;amp;height=200&amp;amp;face=0_0_220_200&quot;&gt;&lt;a href=&quot;https://www.nvidia.co.kr/Download/index.aspx?lang=kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.nvidia.co.kr/Download/index.aspx?lang=kr&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dFxFbT/hyI1lr1ieL/KZ3XGPuWtrt8Yn9WNYf5M0/img.jpg?width=220&amp;amp;height=200&amp;amp;face=0_0_220_200,https://scrap.kakaocdn.net/dn/dkCXg5/hyI1qfM6mI/87CMHLguoc49P9loVeqVok/img.jpg?width=220&amp;amp;height=200&amp;amp;face=0_0_220_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;NVIDIA 드라이버 다운로드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.nvidia.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker install&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/&quot;&gt;https://docs.docker.com/engine/install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611216574497&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Install Docker Engine&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/&quot; data-og-url=&quot;https://docs.docker.com/engine/install/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/PtrHs/hyIZUittlq/Ora9vVjNAIqEK4KnZVMEv1/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/b9kH7Z/hyI1mdpsj6/uWrFWdMXPCJxnhexNMmIm0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/engine/install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/PtrHs/hyIZUittlq/Ora9vVjNAIqEK4KnZVMEv1/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/b9kH7Z/hyI1mdpsj6/uWrFWdMXPCJxnhexNMmIm0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Install Docker Engine&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;nvidia-docker install&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker&quot;&gt;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611216579937&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Installation Guide &amp;mdash; NVIDIA Cloud Native Technologies  documentation&quot; data-og-description=&quot;On RHEL 7, install the nvidia-container-toolkit package (and dependencies) after updating the package listing: Restart the Docker daemon to complete the installation after setting the default runtime: Note Depending on how your RHEL 7 system is configured &quot; data-og-host=&quot;docs.nvidia.com&quot; data-og-source-url=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker&quot; data-og-url=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Installation Guide &amp;mdash; NVIDIA Cloud Native Technologies documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;On RHEL 7, install the nvidia-container-toolkit package (and dependencies) after updating the package listing: Restart the Docker daemon to complete the installation after setting the default runtime: Note Depending on how your RHEL 7 system is configured&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;tensorflow install&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.tensorflow.org/install/docker&quot;&gt;https://www.tensorflow.org/install/docker&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611216599476&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Docker &amp;nbsp;|&amp;nbsp; TensorFlow&quot; data-og-description=&quot;Docker는 컨테이너를 사용하여 TensorFlow 설치를 나머지 시스템에서 격리하는 가상 환경을 만듭니다. TensorFlow 프로그램은 호스트 머신과 리소스를 공유(디렉터리 액세스, GPU 사용, 인터넷 연결 등)&quot; data-og-host=&quot;www.tensorflow.org&quot; data-og-source-url=&quot;https://www.tensorflow.org/install/docker&quot; data-og-url=&quot;https://www.tensorflow.org/install/docker?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9ZrSO/hyIZSdWlyp/DcwMJcJYyFd1kSdvXdxX2K/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675&quot;&gt;&lt;a href=&quot;https://www.tensorflow.org/install/docker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.tensorflow.org/install/docker&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9ZrSO/hyIZSdWlyp/DcwMJcJYyFd1kSdvXdxX2K/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Docker &amp;nbsp;|&amp;nbsp; TensorFlow&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Docker는 컨테이너를 사용하여 TensorFlow 설치를 나머지 시스템에서 격리하는 가상 환경을 만듭니다. TensorFlow 프로그램은 호스트 머신과 리소스를 공유(디렉터리 액세스, GPU 사용, 인터넷 연결 등)&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.tensorflow.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ngc tensorflow&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow&quot;&gt;https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611216609311&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;NVIDIA NGC&quot; data-og-description=&quot;&quot; data-og-host=&quot;ngc.nvidia.com&quot; data-og-source-url=&quot;https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow&quot; data-og-url=&quot;https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;NVIDIA NGC&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;ngc.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>docker</category>
      <category>NGC</category>
      <category>nvidia-docker2</category>
      <category>nvidia-driver</category>
      <category>도커</category>
      <category>엔비디아 도커</category>
      <category>엔비디아 드라이버</category>
      <category>우분투</category>
      <category>텐서플로우</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/30</guid>
      <comments>https://jayyjji.tistory.com/30#entry30comment</comments>
      <pubDate>Thu, 21 Jan 2021 18:08:46 +0900</pubDate>
    </item>
    <item>
      <title>FIO test - NVMe / SSD / HDD 속도 테스트</title>
      <link>https://jayyjji.tistory.com/29</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;FIO test - NVMe / SSD / HDD 속도 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;FIO test HDD 속도 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;이번 스토리는 하드디스크의 read, write IOPS와 bandwidth를 테스트할 수 있는 FIO에 대해서 알아보겠습니다. 테스트 환경은 ubuntu 18.04.4 기반입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아이옵스(Input/Output Operations Per Second, IOPS)는 HDD, SSD, SAN 같은 컴퓨터 저장 장치를 벤치 마크하는 데 사용되는 성능 측정 단위다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;대역폭(bandwidth)은 주어진 시간 내에 얼마나 많은 정보가 데이터 연결을 통과할 수 있는지를 나타냅니다. 대개 초당 메가비트 (Mbps) 또는 초당 기가비트 (Gbps)와 같이 초당 비트 수 (bps)의 배수로 측정됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;fio에서는 대역폭이 비트가 아닌, MiB/s 메비 바이트 퍼 세컨드, MB/s 메가바이트 퍼 세컨드로 표시됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ubuntu 18.04.4 server&lt;/p&gt;
&lt;p&gt;Linux 4.15.0-76-generic&lt;/p&gt;
&lt;p&gt;gcc 7.5.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CentOS도 설치하고 테스트하는 방법은 대동소이합니다.&lt;/p&gt;
&lt;p&gt;우선 FIO를 설치하기 전에 gcc compiler와 libaio엔진을 사용하기 위해서 libaio-devel을 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1608992658875&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-get update
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Fetched 252 kB in 2s (125 kB/s)
Reading package lists... Done

root@ubuntu:~# apt-get install gcc libaio-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
gcc is already the newest version (4:7.4.0-1ubuntu2.3).
libaio-dev is already the newest version (0.3.110-5ubuntu0.1).
0 upgraded, 0 newly installed, 0 to remove and 172 not upgraded.

root@ubuntu:~# gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

root@ubuntu:~# dpkg -l | grep -i libaio
ii  libaio-dev:amd64                      0.3.110-5ubuntu0.1                              amd64        Linux kernel AIO access library - development files
ii  libaio1:amd64                         0.3.110-5ubuntu0.1                              amd64        Linux kernel AIO access library - shared library
root@ubuntu:~#

root@ubuntu:~# dpkg -l | grep -i binutils
ii  binutils                              2.30-21ubuntu1~18.04.4                          amd64        GNU assembler, linker and binary utilities
ii  binutils-common:amd64                 2.30-21ubuntu1~18.04.4                          amd64        Common files for the GNU assembler, linker and binary utilities
ii  binutils-x86-64-linux-gnu             2.30-21ubuntu1~18.04.4                          amd64        GNU binary utilities, for x86-64-linux-gnu target
ii  libbinutils:amd64                     2.30-21ubuntu1~18.04.4                          amd64        GNU binary utilities (private shared library)
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;추가로 binutils의 버전도 확인해 줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하드 디스크나 SSD의 성능을 비교 테스트할 때 OS, kernel, compiler, binutils version은 동일하게 설정해주시고 테스트하면 됩니다. 아무래도 객관적인 output을 얻을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;install fio&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ubuntu install&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;apt-get update&lt;/p&gt;
&lt;p&gt;apt-get install fio&lt;/p&gt;
&lt;pre id=&quot;code_1608993910626&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-get update
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Fetched 252 kB in 2s (109 kB/s)
Reading package lists... Done

root@ubuntu:~# apt-get install fio
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ibverbs-providers libibverbs1 libnl-route-3-200 libnspr4 libnss3
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib librados2 librbd1
  librdmacm1 python python-minimal python2.7 python2.7-minimal
Suggested packages:
  gnuplot gfio python-scipy python-doc python-tk python2.7-doc binfmt-support
The following NEW packages will be installed:
  fio ibverbs-providers libibverbs1 libnl-route-3-200 libnspr4 libnss3
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib librados2 librbd1
  librdmacm1 python python-minimal python2.7 python2.7-minimal
0 upgraded, 16 newly installed, 0 to remove and 172 not upgraded.
Need to get 0 B/9,815 kB of archives.
After this operation, 40.0 MB of additional disk space will be used.
Do you want to continue? [Y/n]

root@ubuntu:~# fio --version
fio-3.1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;설치 후&lt;/p&gt;
&lt;p&gt;fio --version으로 버전을 확인합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;centOS install&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;yum install git gcc libaiodevel&lt;/p&gt;
&lt;p&gt;git clone &lt;a href=&quot;https://github.com/axboe/fio.git&quot;&gt;https://github.com/axboe/fio.git&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1608994177490&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;axboe/fio&quot; data-og-description=&quot;Flexible I/O Tester. Contribute to axboe/fio development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/axboe/fio.git&quot; data-og-url=&quot;https://github.com/axboe/fio&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hK6kt/hyIHI2O2TV/20OLLg0xIqC5ADIBgGcft0/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://github.com/axboe/fio.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/axboe/fio.git&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hK6kt/hyIHI2O2TV/20OLLg0xIqC5ADIBgGcft0/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;axboe/fio&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Flexible I/O Tester. Contribute to axboe/fio development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;cd fio&lt;/p&gt;
&lt;p&gt;./configure&lt;/p&gt;
&lt;p&gt;Makefile(컴파일 옵션 설정 파일)이 만들어집니다.&lt;/p&gt;
&lt;p&gt;소스를 컴파일하는 시스템의 환경에 맞는 Makefile이 생성됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;make&lt;/p&gt;
&lt;p&gt;소스코드를 실제로 컴파일해서 binary 파일을 생성합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;make install&lt;/p&gt;
&lt;p&gt;만들어진 binary 파일을 지정된 디렉터리로 이동시켜 줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같은 방법으로 설치가 완료되었으면, 실행 방법과 옵션에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;fio 사용방법과 옵션&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;사용 방법은 스크립트를 작성해서 사용하는 방법과 커맨드 라인에 명령어와 옵션을 이용해서 실행시키는 방법이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행 명령어&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;스크립트로 실행&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;fio 스크립트 파일&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스크립트 파일을 작성하는 법은 아래와 같이 [global]에 공통적으로 적용될 파라미터 값을 작성해주신 다음에 개별적으로 [임의의 테스트 제목] 아래 파라미터 값을 작성하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[global]&lt;br /&gt;ioengine=libaio&lt;br /&gt;filename=/dev/nvme0n1&lt;br /&gt;group_reporting=1&lt;br /&gt;direct=1&lt;br /&gt;verify=0&lt;br /&gt;norandommap=1&lt;br /&gt;size=100%&lt;br /&gt;time_based=1&lt;br /&gt;runtime=300s&lt;br /&gt;ramp_time=10&lt;br /&gt;randrepeat=0&lt;br /&gt;refill_buffers&lt;br /&gt;log_avg_msec=1000&lt;br /&gt;log_max_value=1&lt;br /&gt;unified_rw_reporting=1&lt;br /&gt;percentile_list=50:99:99.9:99.99:99.999&lt;br /&gt;&lt;br /&gt;[4k_randwrite_qd16_4w]&lt;br /&gt;stonewall&lt;br /&gt;bs=4k&lt;br /&gt;rw=randwrite&lt;br /&gt;iodepth=4&lt;br /&gt;numjobs=4&lt;br /&gt;&lt;br /&gt;[4k_randread_qd16_4w]&lt;br /&gt;stonewall&lt;br /&gt;bs=4k&lt;br /&gt;rw=randread&lt;br /&gt;iodepth=4&lt;br /&gt;numjobs=4&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608998285398&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# fio fio4krandrw
4k-randrw 1:64: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.1
Starting 1 process
Jobs: 1 (f=0): [f(1)][100.0%][r=43.1MiB/s,w=0KiB/s][r=11.0k,w=0 IOPS][eta 00m:00s]
4k-randrw 1:64: (groupid=0, jobs=1): err= 0: pid=4462: Sun Dec 27 00:57:28 2020
  mixed: IOPS=11.4k, BW=44.7MiB/s (46.9MB/s)(447MiB/10001msec)
    slat (usec): min=6, max=1164, avg=40.73, stdev= 9.52
    clat (nsec): min=1172, max=8986.7k, avg=44524.27, stdev=39935.52
     lat (usec): min=56, max=8997, avg=85.78, stdev=41.31
    clat percentiles (usec):
     | 50.000th=[   49], 99.000th=[   88], 99.900th=[  141], 99.990th=[  553],
     | 99.999th=[ 8717]
   bw (  KiB/s): min=11808, max=38704, per=50.05%, avg=22920.39, stdev=9793.22, samples=38
   iops        : min= 2952, max= 9676, avg=5729.97, stdev=2448.33, samples=38
  lat (usec)   : 2=0.68%, 4=0.01%, 10=0.01%, 20=0.02%, 50=72.34%
  lat (usec)   : 100=26.30%, 250=0.62%, 500=0.02%, 750=0.01%
  lat (msec)   : 2=0.01%, 10=0.01%
  cpu          : usr=0.11%, sys=68.54%, ctx=114498, majf=0, minf=4
  IO depths    : 1=198.5%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, &amp;gt;=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &amp;gt;=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &amp;gt;=64=0.0%
     issued rwt: total=114495,0,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  MIXED: bw=44.7MiB/s (46.9MB/s), 44.7MiB/s-44.7MiB/s (46.9MB/s-46.9MB/s), io=447MiB (469MB), run=10001-10001msec

Disk stats (read/write):
  sda: ios=159407/67870, merge=0/10, ticks=11140/4824, in_queue=15956, util=79.43%
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 [global]에는 공통적으로 적용될 파라미터 값을 작성해줍니다. 테스트에 사용할 io엔진, 파일 네임이나 장치, 버퍼 사용 여부, 테스트 파일 사이즈, 여기서 사이즈를 100%로 디스크 전체를 사용할 것인지 1G와 같은 형식으로 파일 사이즈를 지정할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 예는 기본으로 사용하는 파라미터 값이며, 자세한 파라미터 값은 아래 매뉴얼 사이트에서 확인해 보시면 됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;커맨드 라인에서 실행&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;fio 파라미터 값&lt;/p&gt;
&lt;p&gt;디렉터리와 파일 네임 파일 사이즈 지정(디스크 마운트 이후, 테스트 가능)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;fio --directory=/fio --name fio_test --randrepeat=0 --ioengine=libaio --direct=1 --rw=randread --bs=4k --size=1G --numjobs=16 --iodepth=64 --time_based --runtime=180 --group_reporting --norandommap&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608996865099&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# fio --directory=/mnt --name fio_test --randrepeat=0 --ioengine=libaio --direct=1 --rw=randread --bs=4k --size=1G --numjobs=16 --iodepth=64 --time_based --runtime=10 --group_reporting --norandommap
fio_test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
...
fio-3.1
Starting 16 processes
fio_test: Laying out IO file (1 file / 1024MiB)
Jobs: 16 (f=16): [r(16)][4.2%][r=90.3MiB/s,w=0KiB/s][r=23.1k,w=0 IOPS][eta 04m:12s]
fio_test: (groupid=0, jobs=16): err= 0: pid=4101: Sun Dec 27 00:33:04 2020
   read: IOPS=19.4k, BW=75.6MiB/s (79.3MB/s)(757MiB/10009msec)
    slat (nsec): min=954, max=267810k, avg=788253.25, stdev=5469317.77
    clat (nsec): min=347, max=632082k, avg=51091404.50, stdev=43135762.22
     lat (nsec): min=1342, max=679232k, avg=51879759.93, stdev=43904993.16
    clat percentiles (usec):
     |  1.00th=[   143],  5.00th=[ 17957], 10.00th=[ 21365], 20.00th=[ 34341],
     | 30.00th=[ 38011], 40.00th=[ 39584], 50.00th=[ 41157], 60.00th=[ 42730],
     | 70.00th=[ 46924], 80.00th=[ 59507], 90.00th=[ 81265], 95.00th=[116917],
     | 99.00th=[270533], 99.50th=[320865], 99.90th=[417334], 99.95th=[513803],
     | 99.99th=[574620]
   bw (  KiB/s): min=    8, max=13341, per=6.26%, avg=4847.51, stdev=2261.64, samples=319
   iops        : min=    2, max= 3335, avg=1211.55, stdev=565.35, samples=319
  lat (nsec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (usec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.02%, 50=0.06%
  lat (usec)   : 100=0.12%, 250=2.68%, 500=0.34%, 750=0.05%, 1000=0.03%
  lat (msec)   : 2=0.04%, 4=0.10%, 10=0.15%, 20=3.77%, 50=65.12%
  lat (msec)   : 100=20.47%, 250=5.81%, 500=1.14%, 750=0.05%
  cpu          : usr=0.09%, sys=0.79%, ctx=8275, majf=0, minf=1173
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.3%, &amp;gt;=64=99.5%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &amp;gt;=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, &amp;gt;=64=0.0%
     issued rwt: total=193755,0,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=75.6MiB/s (79.3MB/s), 75.6MiB/s-75.6MiB/s (79.3MB/s-79.3MB/s), io=757MiB (794MB), run=10009-10009msec

Disk stats (read/write):
  sda: ios=178654/2, merge=84/2, ticks=1483596/0, in_queue=1490628, util=99.03%
root@ubuntu:~#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 테스트가 완료되면 결과 값이 출력됩니다. --output=file과 같은 파라미터를 사용하면 아웃 파일이 현재 디렉터리에 생성됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;디바이스 장치와 디스크 전체 지정(별도로 디스크를 마운트 하지 않아도 테스트 가능)&lt;/p&gt;
&lt;p&gt;fio --name=/dev/nvme1n1 &lt;span style=&quot;color: #333333;&quot;&gt;--randrepeat=0 --ioengine=libaio --direct=1 --rw=randread --bs=4k --size=100% --numjobs=16 --iodepth=64 --time_based --runtime=180 --group_reporting --norandommap&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파라미터(옵션)가 어마어마하기 때문에 아래 매뉴얼 사이트를 참고하시게 편합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;fio menual&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://linux.die.net/man/1/fio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;linux.die.net/man/1/fio&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1608994833532&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;fio(1): flexible I/O tester - Linux man page&quot; data-og-description=&quot;fio(1) - Linux man page Name fio - flexible I/O tester Synopsis fio [options] [jobfile]... Description fio is a tool that will spawn a number of threads or processes doing a particular type of I/O action as specified by the user. The typical use of fio is &quot; data-og-host=&quot;linux.die.net&quot; data-og-source-url=&quot;https://linux.die.net/man/1/fio&quot; data-og-url=&quot;https://linux.die.net/man/1/fio&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://linux.die.net/man/1/fio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://linux.die.net/man/1/fio&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;fio(1): flexible I/O tester - Linux man page&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;fio(1) - Linux man page Name fio - flexible I/O tester Synopsis fio [options] [jobfile]... Description fio is a tool that will spawn a number of threads or processes doing a particular type of I/O action as specified by the user. The typical use of fio is&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;linux.die.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;filename=[filename or raw_device] : 테스트 디바이스 or 파일 경로를 설정합니다. (여러 경로를 동시에 사용할 때에는 콜론 ':' 으로 연결합니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;directory=[dir경로] : 디렉터리 경로를 설정합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;nrfiles=[int] : job 당 파일 수를 설정합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;size=[file_size] : job 당 총 파일 사이즈를 설정합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;filesize=[irange] : 파일 1개 당 사이즈를 설정합니다. (범위로 지정 가능, 범위 지정 시 fio가 랜덤으로 지정)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;bs=int,[int] : Block 사이즈를 설정합니다. (복수 지정 가능, 복수 지정 시 fio가 랜덤으로 지정)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;blocksize_range=[irange] : Block 사이즈의 범위를 설정합니다. (범위 지정 시 fio가 랜덤으로 지정)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;rw=[I/O 종류] : write / read / randwrite / randread / readwrite (rw) / randrw&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;numjobs=[int] : job 개수를 설정합니다. (동일한 워크로드를 동시에 실행, multi processes / threads)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;thread : thread 생성 시 fork 대신 pthread_create를 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ioengine=[I/O 방법] : 테스트에 사용할 IO엔진을 선택합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ramp_time=[int] : 각 테스트 사이의 공백 시간을 설정합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;iodepth=[int] : Queue Depth&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;runtime=[int] : 테스트 진행 시간을 설정합니다. (초 단위)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;time_based : runtime 시간만큼 I/O 를 실행합니다. (파일 사이즈가 필요 없습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;direct=[bool] : True 일 경우 Direct I/O로 수행합니다. False 일 경우 Buffered I/O로 수행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;norandommap : Random 워크로드 시 I/O 위치를 과거 I/O 위치를 고려하지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;group_reporting : Job 별 리포팅이 아닌 그룹 별 리포팅 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;stonewall : 작업을 구분하는 파라미터.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;fio.JPG&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzxvdE/btqRCUUMyTE/PKLkzPZ03YhPZ3Fhh4Lxl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzxvdE/btqRCUUMyTE/PKLkzPZ03YhPZ3Fhh4Lxl0/img.jpg&quot; data-alt=&quot;fio test&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzxvdE/btqRCUUMyTE/PKLkzPZ03YhPZ3Fhh4Lxl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzxvdE%2FbtqRCUUMyTE%2FPKLkzPZ03YhPZ3Fhh4Lxl0%2Fimg.jpg&quot; data-filename=&quot;fio.JPG&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fio test&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;테스트가 끝나면 위와 같이 결괏값이 출력됩니다. IOPS와 BW의 값이 출력됩니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>bandwidth</category>
      <category>FIO</category>
      <category>FIO 사용방법</category>
      <category>FIO 설명</category>
      <category>FIO 옵션</category>
      <category>HDD 속도</category>
      <category>IOPS</category>
      <category>NVMe 속도</category>
      <category>SSD 속도</category>
      <category>하드 속도 테스트</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/29</guid>
      <comments>https://jayyjji.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 27 Dec 2020 01:22:55 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 ls 명령어 - 기본 명령어</title>
      <link>https://jayyjji.tistory.com/28</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;&lt;b&gt;리눅스 ls 명령어 - 기본 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;기본 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;이번 스토리는 초심으로 돌아가서 리눅스의 기본 명령어에 대해서 알아보겠습니다. 리눅스 계열 OS를 설치하면 공통적으로 사용하는 ls 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;항상 말씀드리지만, 전 우분투를 애용합니다. 이번에도 역시 우분투 18.04.4를 기준으로 설명드리겠습니다. redhat 또는 centOS도 다 비슷하거나 똑같습니다. 하하,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들면 우분투에 최상위에서 /bin, /boot, /dev, /etc, /home, /lib, /media, /mnt, /opt, /proc, /root, /tmp, /usr, /var 등&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 기본 디렉터리의 존재를 확인하거나, 현재 위치에 어떤 디렉터리 및 파일이 위치하는지 확인할 때 사용하는 명령어가 바로 ls 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dos나 윈도우의 cmd로 치면, dir 명령어가 되겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1607512495275&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-76-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed Dec  9 20:08:54 KST 2020

  System load:  0.55               Processes:            200
  Usage of /:   15.5% of 19.56GB   Users logged in:      1
  Memory usage: 23%                IP address for bond0: 192.168.231.133
  Swap usage:   0%

 * Introducing self-healing high availability clusters in MicroK8s.
   Simple, hardened, Kubernetes for production, from RaspberryPi to DC.

     https://microk8s.io/high-availability

175 packages can be updated.
123 updates are security updates.

New release '20.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Wed Dec  9 20:08:30 2020
root@ubuntu:~# ls
root@ubuntu:~# cd /
root@ubuntu:/# ls
bin   etc         initrd.img.old  lost+found  opt   run   srv       tmp  vmlinuz
boot  home        lib             media       proc  sbin  swapfile  usr  vmlinuz.old
dev   initrd.img  lib64           mnt         root  snap  sys       var
root@ubuntu:/# ls -al
total 970068
drwxr-xr-x  23 root root      4096 Nov 17 23:27 .
drwxr-xr-x  23 root root      4096 Nov 17 23:27 ..
drwxr-xr-x   2 root root      4096 Nov 18 00:02 bin
drwxr-xr-x   3 root root      4096 Nov 17 23:29 boot
drwxr-xr-x  18 root root      3780 Dec  9 20:07 dev
drwxr-xr-x  90 root root      4096 Dec  9 20:08 etc
drwxr-xr-x   5 root root      4096 Nov 21 14:25 home
lrwxrwxrwx   1 root root        33 Nov 17 23:25 initrd.img -&amp;gt; boot/initrd.img-4.15.0-76-generic
lrwxrwxrwx   1 root root        33 Nov 17 23:25 initrd.img.old -&amp;gt; boot/initrd.img-4.15.0-76-generic
drwxr-xr-x  23 root root      4096 Nov 20 21:58 lib
drwxr-xr-x   2 root root      4096 Nov 20 21:58 lib64
drwx------   2 root root     16384 Nov 17 23:25 lost+found
drwxr-xr-x   3 root root      4096 Nov 17 23:25 media
drwxr-xr-x   2 root root      4096 Feb  4  2020 mnt
drwxr-xr-x   2 root root      4096 Feb  4  2020 opt
dr-xr-xr-x 174 root root         0 Dec  9 20:07 proc
drwx------   5 root root      4096 Dec  9 20:14 root
drwxr-xr-x  24 root root       820 Dec  9 20:14 run
drwxr-xr-x   2 root root     12288 Nov 18 20:57 sbin
drwxr-xr-x   2 root root      4096 Nov 17 23:30 snap
drwxr-xr-x   2 root root      4096 Feb  4  2020 srv
-rw-------   1 root root 993244160 Nov 17 23:25 swapfile
dr-xr-xr-x  13 root root         0 Dec  9 20:13 sys
drwxrwxrwt  10 root root      4096 Dec  9 20:07 tmp
drwxr-xr-x  10 root root      4096 Nov 17 23:25 usr
drwxr-xr-x  13 root root      4096 Nov 17 23:28 var
lrwxrwxrwx   1 root root        30 Nov 17 23:25 vmlinuz -&amp;gt; boot/vmlinuz-4.15.0-76-generic
lrwxrwxrwx   1 root root        30 Nov 17 23:25 vmlinuz.old -&amp;gt; boot/vmlinuz-4.15.0-76-generic
root@ubuntu:/#jcil
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위의 코드 블록을 참고하시면 ls 명령어와 ls -al 명령어로 최상위 /에서 디렉터리를 살펴본 모습입니다.&lt;/p&gt;
&lt;p&gt;ls -al로 출력했을 경우, 맨 앞에 d라고 표시된 name들이 디렉터리입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;ls 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;ls 명령어는 무엇일까요? 눈치 빠른 분들은 아시겠지요? list의 줄임말입니다. 네, 맞습니다. 현재 위치의 디렉터리, 파일의 리스트를 출력하는 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앞의 스토리들에서 알려드린 것처럼 ls --help를 사용하시면 수많은 옵션들을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607513201740&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:/# ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      scale sizes by SIZE before printing them; e.g.,
                               '--block-size=M' prints sizes in units of
                               1,048,576 bytes; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information);
                               with -l: show ctime and sort by name;
                               otherwise: sort by ctime, newest first
  -C                         list entries by columns
      --color[=WHEN]         colorize the output; WHEN can be 'always' (default
                               if omitted), 'auto', or 'never'; more info below
  -d, --directory            list directories themselves, not their contents
  -D, --dired                generate output designed for Emacs' dired mode
  -f                         do not sort, enable -aU, disable -ls --color
  -F, --classify             append indicator (one of */=&amp;gt;@|) to entries
      --file-type            likewise, except do not append '*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                               single-column -1, verbose -l, vertical -C
      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
      --group-directories-first
                             group directories before files;
                               can be augmented with a --sort option, but any
                               use of --sort=none (-U) disables grouping
  -G, --no-group             in a long listing, don't print group names
  -h, --human-readable       with -l and/or -s, print human readable sizes
                               (e.g., 1K 234M 2G)
      --si                   likewise, but use powers of 1000 not 1024
  -H, --dereference-command-line
                             follow symbolic links listed on the command line
      --dereference-command-line-symlink-to-dir
                             follow each command line symbolic link
                               that points to a directory
      --hide=PATTERN         do not list implied entries matching shell PATTERN
                               (overridden by -a or -A)
      --hyperlink[=WHEN]     hyperlink file names; WHEN can be 'always'
                               (default if omitted), 'auto', or 'never'
      --indicator-style=WORD  append indicator with style WORD to entry names:
                               none (default), slash (-p),
                               file-type (--file-type), classify (-F)
  -i, --inode                print the index number of each file
  -I, --ignore=PATTERN       do not list implied entries matching shell PATTERN
  -k, --kibibytes            default to 1024-byte blocks for disk usage
  -l                         use a long listing format
  -L, --dereference          when showing file information for a symbolic
                               link, show information for the file the link
                               references rather than for the link itself
  -m                         fill width with a comma separated list of entries
  -n, --numeric-uid-gid      like -l, but list numeric user and group IDs
  -N, --literal              print entry names without quoting
  -o                         like -l, but do not list group information
  -p, --indicator-style=slash
                             append / indicator to directories
  -q, --hide-control-chars   print ? instead of nongraphic characters
      --show-control-chars   show nongraphic characters as-is (the default,
                               unless program is 'ls' and output is a terminal)
  -Q, --quote-name           enclose entry names in double quotes
      --quoting-style=WORD   use quoting style WORD for entry names:
                               literal, locale, shell, shell-always,
                               shell-escape, shell-escape-always, c, escape
  -r, --reverse              reverse order while sorting
  -R, --recursive            list subdirectories recursively
  -s, --size                 print the allocated size of each file, in blocks
  -S                         sort by file size, largest first
      --sort=WORD            sort by WORD instead of name: none (-U), size (-S),
                               time (-t), version (-v), extension (-X)
      --time=WORD            with -l, show time as WORD instead of default
                               modification time: atime or access or use (-u);
                               ctime or status (-c); also use specified time
                               as sort key if --sort=time (newest first)
      --time-style=STYLE     with -l, show times using style STYLE:
                               full-iso, long-iso, iso, locale, or +FORMAT;
                               FORMAT is interpreted like in 'date'; if FORMAT
                               is FORMAT1&amp;lt;newline&amp;gt;FORMAT2, then FORMAT1 applies
                               to non-recent files and FORMAT2 to recent files;
                               if STYLE is prefixed with 'posix-', STYLE
                               takes effect only outside the POSIX locale
  -t                         sort by modification time, newest first
  -T, --tabsize=COLS         assume tab stops at each COLS instead of 8
  -u                         with -lt: sort by, and show, access time;
                               with -l: show access time and sort by name;
                               otherwise: sort by access time, newest first
  -U                         do not sort; list entries in directory order
  -v                         natural sort of (version) numbers within text
  -w, --width=COLS           set output width to COLS.  0 means no limit
  -x                         list entries by lines instead of by columns
  -X                         sort alphabetically by entry extension
  -Z, --context              print any security context of each file
  -1                         list one file per line.  Avoid '\n' with -q or -b
      --help     display this help and exit
      --version  output version information and exit

The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).

Using color to distinguish file types is disabled both by default and
with --color=never.  With --color=auto, ls emits color codes only when
standard output is connected to a terminal.  The LS_COLORS environment
variable can change the settings.  Use the dircolors command to set it.

Exit status:
 0  if OK,
 1  if minor problems (e.g., cannot access subdirectory),
 2  if serious trouble (e.g., cannot access command-line argument).

GNU coreutils online help: &amp;lt;http://www.gnu.org/software/coreutils/&amp;gt;
Full documentation at: &amp;lt;http://www.gnu.org/software/coreutils/ls&amp;gt;
or available locally via: info '(coreutils) ls invocation'
root@ubuntu:/#jcil&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;자주 사용하는 옵션은 -a와 -l입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-a 옵션은 숨겨진 파일까지 모조리 출력하는 옵션입니다.(all)&lt;/p&gt;
&lt;p&gt;-l 옵션은 최대한 자세한 내용을 출력하는 옵션입니다.(long)&lt;/p&gt;
&lt;p&gt;퍼미션(권한), 소유자 정보, 그룹 정보, 파일의 크기, 수정한 날짜, 파일의 이름 등.,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;옵션이 어떤 단어의 약자인지 이해하면 쉽게 기억할 수 있습니다. 위에서 제가 사용한 것처럼 ls -al 명령어와 옵션을 한 번에 묶어서 사용할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls 명령어 -S 옵션 (size) 파일을 크기 순으로 정렬하여 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls 명령어 -r 옵션 (reverse) 역순으로 출력합니다. (ls 명령어의 기본 출력은 알파벳 순서입니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls 명령어 -R 옵션 (recursive) 하위 디렉터리까지 출력해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls 명령어 -h 옵션 (human) K, M, G byte단위를 사용하여 파일 크기를 단위로 표시합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls 명령어 u, c 옵션 ls -l 명령은 기본적으로 mtime(수정시간)을 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -lu u 옵션을 사용하면 atime(접근 시간)을 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -lc c 옵션을 사용하면 ctime(변경 시간)을 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결론적으로 ls -al을 가장 많이 사용합니다. 저도 그렇습니다.&lt;/p&gt;
&lt;p&gt;ls -al은 ls -al /dev 이와 같이 출력하고 싶은 디렉터리를 지정할 수 도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정말 기본 중의 기본 명령어인 ls는 리눅스를 시작하시는 분들이라면 꼭 숙지하시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ls.JPG&quot; data-origin-width=&quot;1458&quot; data-origin-height=&quot;507&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HCuf5/btqPAt7PzAJ/dkXk9t3E8SQGRagITkA7S1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HCuf5/btqPAt7PzAJ/dkXk9t3E8SQGRagITkA7S1/img.jpg&quot; data-alt=&quot;ls 명령어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HCuf5/btqPAt7PzAJ/dkXk9t3E8SQGRagITkA7S1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHCuf5%2FbtqPAt7PzAJ%2FdkXk9t3E8SQGRagITkA7S1%2Fimg.jpg&quot; data-filename=&quot;ls.JPG&quot; data-origin-width=&quot;1458&quot; data-origin-height=&quot;507&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ls 명령어&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>ls -al</category>
      <category>ls 명령어</category>
      <category>권한 정보</category>
      <category>그룹 정보</category>
      <category>디렉토리 정보</category>
      <category>리눅스 기본 명령어</category>
      <category>파일 리스트</category>
      <category>파일 정보</category>
      <category>퍼미션 정보</category>
      <category>폴더 리스트</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/28</guid>
      <comments>https://jayyjji.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 9 Dec 2020 20:57:34 +0900</pubDate>
    </item>
    <item>
      <title>우분투 패스워드 초기화 ubuntu passwd reset</title>
      <link>https://jayyjji.tistory.com/25</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 패스워드 초기화 ubuntu passwd reset&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우분투 패스워드 분실 초기화&lt;/h3&gt;
&lt;p&gt;이번 스토리는 우분투를 사용하다가 패스워드를 잊어먹거나, 루트 패스워드가 필요한데 상황이 여의치 않을 때, 패스워드를 아예 초기화시켜 버리는 법을 알아보겠습니다. 항상 관리자나, 담당자 컨펌을 받고 작업하시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 본론으로 들어가겠습니다.&lt;/p&gt;
&lt;p&gt;테스트는 ubuntu server 18.04.4 버전으로 진행했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. 시스템을 재부팅 시킵니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. shift 버튼을 누르셔서 GNU GRUB 화면으로 진입합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd1.JPG&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjbCyk/btqN7TmGGLK/cd8FPkawES9cfizovkwLnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjbCyk/btqN7TmGGLK/cd8FPkawES9cfizovkwLnk/img.jpg&quot; data-alt=&quot;GNU GRUB&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjbCyk/btqN7TmGGLK/cd8FPkawES9cfizovkwLnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjbCyk%2FbtqN7TmGGLK%2Fcd8FPkawES9cfizovkwLnk%2Fimg.jpg&quot; data-filename=&quot;passwd1.JPG&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GNU GRUB&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같은 화면이 출력되시면, 일단 성공입니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 이제 저화면 *Ubuntu에 하얀색 바가 있는 상태로 키보드의 알파벳 e 키를 살포시 눌러줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러면 화면이 edit the commands before booting으로 진입하게 됩니다. 부팅 전 커맨드 편집 정도 되겠습니다. 아래와 같이 화면이 출력됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd2.JPG&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;421&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caKLzz/btqN9M1knLT/kPfqR4nwCp6FoiCf87UsPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caKLzz/btqN9M1knLT/kPfqR4nwCp6FoiCf87UsPk/img.jpg&quot; data-alt=&quot;edit the commands before booting&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caKLzz/btqN9M1knLT/kPfqR4nwCp6FoiCf87UsPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaKLzz%2FbtqN9M1knLT%2FkPfqR4nwCp6FoiCf87UsPk%2Fimg.jpg&quot; data-filename=&quot;passwd2.JPG&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;421&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;edit the commands before booting&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 화면에서 아래로 좀 더 내려보시면, 아래와 같은 화면을 찾을 수 있습니다. 지금 커서가 놓인 위치를 보시면 됩니다. ro라고 쓰인 뒤에 한 칸 띄우고 위치해 있습니다. 확인되시나요? linux로 시작하는 라인 맨 끝줄, initrd로 시작하는 라인 윗줄입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd3.JPG&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lms4a/btqN8eqvY7T/278nynGAZmEohMlgs40ivK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lms4a/btqN8eqvY7T/278nynGAZmEohMlgs40ivK/img.jpg&quot; data-alt=&quot;ubuntu passwd reset&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lms4a/btqN8eqvY7T/278nynGAZmEohMlgs40ivK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLms4a%2FbtqN8eqvY7T%2F278nynGAZmEohMlgs40ivK%2Fimg.jpg&quot; data-filename=&quot;passwd3.JPG&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu passwd reset&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. 이제 ro를 rw로 타이핑해서 수정합니다. 그리고 한 칸 띄우시고 init=/bin/bash라고 입력합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd4.JPG&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;413&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mitgx/btqOcQoBXSB/KAmsrG5gs8chkIBTLqVl61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mitgx/btqOcQoBXSB/KAmsrG5gs8chkIBTLqVl61/img.jpg&quot; data-alt=&quot;rw init=/bin/bash&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mitgx/btqOcQoBXSB/KAmsrG5gs8chkIBTLqVl61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMitgx%2FbtqOcQoBXSB%2FKAmsrG5gs8chkIBTLqVl61%2Fimg.jpg&quot; data-filename=&quot;passwd4.JPG&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;413&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;rw init=/bin/bash&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 화면처럼 편집해 주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5. 스펠링과 띄어쓰기 확인 잘해주시고, 이상 없으시면 ctrl+x를 통해서 부팅을 진행하시면 됩니다. 다 끝났습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd5.JPG&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;266&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dieZE9/btqOeBqIJtV/mFS4HM0l6O6tj7bJKfzyr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dieZE9/btqOeBqIJtV/mFS4HM0l6O6tj7bJKfzyr0/img.jpg&quot; data-alt=&quot;bash&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dieZE9/btqOeBqIJtV/mFS4HM0l6O6tj7bJKfzyr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdieZE9%2FbtqOeBqIJtV%2FmFS4HM0l6O6tj7bJKfzyr0%2Fimg.jpg&quot; data-filename=&quot;passwd5.JPG&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;266&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;bash&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;root@(none):/# bash로 진입했습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6. 다 끝났습니다. passwd를 명령어로 새로운 패스워드를 입력해 주시면 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd6.JPG&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;90&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oFpmY/btqN7UeLF3y/ofKweElzmkIvFmdsFtPJJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oFpmY/btqN7UeLF3y/ofKweElzmkIvFmdsFtPJJ0/img.jpg&quot; data-alt=&quot;passwd&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oFpmY/btqN7UeLF3y/ofKweElzmkIvFmdsFtPJJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoFpmY%2FbtqN7UeLF3y%2FofKweElzmkIvFmdsFtPJJ0%2Fimg.jpg&quot; data-filename=&quot;passwd6.JPG&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;90&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;passwd&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이제 재부팅을 진행하면 이 서버의 관리자 계정으로 로그인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;7. 제일 중요한 부분입니다. reboot -f (force) 옵션으로 재부팅을 진행합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd7.JPG&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;292&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brsjgl/btqN7TUs2Fc/kGPCPlwFHHKaIaQkrUzb30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brsjgl/btqN7TUs2Fc/kGPCPlwFHHKaIaQkrUzb30/img.jpg&quot; data-alt=&quot;reboot -f&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brsjgl/btqN7TUs2Fc/kGPCPlwFHHKaIaQkrUzb30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrsjgl%2FbtqN7TUs2Fc%2FkGPCPlwFHHKaIaQkrUzb30%2Fimg.jpg&quot; data-filename=&quot;passwd7.JPG&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;292&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reboot -f&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이제 root로 login을 진행하시면, 해당 서버는 여러분이 관리자입니다. 감사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;passwd8.JPG&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;470&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l6gVo/btqN9MAhuCm/fN2KiC1pqklKLlooWSeYoK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l6gVo/btqN9MAhuCm/fN2KiC1pqklKLlooWSeYoK/img.jpg&quot; data-alt=&quot;root login&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l6gVo/btqN9MAhuCm/fN2KiC1pqklKLlooWSeYoK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl6gVo%2FbtqN9MAhuCm%2FfN2KiC1pqklKLlooWSeYoK%2Fimg.jpg&quot; data-filename=&quot;passwd8.JPG&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;470&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;root login&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>reboot -f</category>
      <category>ubuntu passwd</category>
      <category>ubuntu passwd reset</category>
      <category>강제종료</category>
      <category>우분투 비밀번호</category>
      <category>우분투 비밀번호 분실</category>
      <category>우분투 패스워드</category>
      <category>우분투 패스워드 분실</category>
      <category>우분투 패스워드 초기화</category>
      <category>패스워드 초기화</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/25</guid>
      <comments>https://jayyjji.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 25 Nov 2020 00:50:20 +0900</pubDate>
    </item>
    <item>
      <title>루트 권한 부여하기 리눅스 - root permission</title>
      <link>https://jayyjji.tistory.com/24</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;루트 권한 부여하기 리눅스 - root permission&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;linux root permission 리눅스 사용자 루트 권한 부여하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;지난 스토리에 이어서 이번에는 유저에게 완전히 루트 권한을 부여해 보겠습니다. 그렇게 되면 명령어를 사용할 때마다, 명령어 앞에 sudo를 붙일 필요가 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;테스트 OS는 ubuntu server 18.04.4입니다.&lt;/p&gt;
&lt;p&gt;리눅스 OS에서 이런저런 작업을 하다 보면, 관리자 권한으로 명령어를 실행해야 할 일이 많습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그때마다 sudo + 명령어 형태를 사용하기에는 불편하고 귀찮습니다. 이런 경우에 유저 계정을 아예 처음부터 root 계정의 그룹에 추가하게 되면, 관리자와 같은 권한을 사용할 수 있게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 관리자 권한으로 시작해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606043388793&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-76-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sun Nov 22 19:42:32 KST 2020

  System load:  0.64               Processes:            195
  Usage of /:   15.4% of 19.56GB   Users logged in:      0
  Memory usage: 24%                IP address for bond0: 192.168.231.133
  Swap usage:   0%

 * Introducing self-healing high availability clustering for MicroK8s!
   Super simple, hardened and opinionated Kubernetes for production.

     https://microk8s.io/high-availability

174 packages can be updated.
117 updates are security updates.


Last login: Sat Nov 21 15:49:27 2020 from 192.168.231.1
root@ubuntu:~# su - jcil
jcil@ubuntu:~$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;명령어 프롬프트가 #으로 시작한다면, 관리자 $로 시작한다면 유저입니다.&lt;/p&gt;
&lt;p&gt;위의 코드 블록은 root 계정으로 로그인해서 jcil 일반 유저로 전환을 한 화면입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 jcil 계정에 루트 권한을 부여해 보겠습니다.&lt;/p&gt;
&lt;p&gt;저는 일반계정으로 전환했으나 관리자 권한으로 진행하셔야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;visudo 또는 vim /etc/sudoer를 사용해서 편집해야 합니다. 지난 스토리에서 visudo를 사용해서 편집해 보았으니 이번에는 vim을 사용해서 /etc/sudoer 파일을 편집해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606043937807&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin&quot;

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
jcil    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on &quot;#include&quot; directives:

#includedir /etc/sudoers.d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;User privilege specification의 root 아래 jcil 유저 계정을 추가해 줍니다.&lt;/p&gt;
&lt;p&gt;저장을 하고 나와 주시면 됩니다. rede only 메시지가 발생하면 wq! 를 사용해서 저장하고 나오시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 순서는 /etc/passwd 파일 편집입니다.&lt;/p&gt;
&lt;p&gt;vim /etc/passwd를 사용해서 수정해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606044364617&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash

user:x:1000:1000:user,,,:/home/user:/bin/bash
jcil:x:1001:1001:,,,:/home/jcil:/bin/bash
jcil2:x:1002:1002:,,,:/home/jcil2:/bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;맨 윗줄의 root 항목이 보이시나요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앞의 0과 뒤의 0이 있습니다.&lt;/p&gt;
&lt;p&gt;앞의 0은 uid(User ID) 뒤의 0은 gid(Group ID)를 의미합니다.&lt;/p&gt;
&lt;p&gt;관리자의 uid는 0 gid도 0입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Don't think, just do it.&lt;/p&gt;
&lt;p&gt;아랫줄에 일반 유저 계정인 jcil과 jcil2 가 있습니다.&lt;/p&gt;
&lt;p&gt;jcil 계정만 uid:gid를 변경해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606045010339&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash

user:x:1000:1000:user,,,:/home/user:/bin/bash
jcil:x:0:0:,,,:/home/jcil:/bin/bash
jcil2:x:1002:1002:,,,:/home/jcil2:/bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 변경하고 저장하신 다음, 빠져나오시면 됩니다.&lt;/p&gt;
&lt;p&gt;이제 uid와 gid를 변경했습니다.&lt;/p&gt;
&lt;p&gt;마지막으로 root group에 jcil 계정을 포함시켜 주면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 /etc/group 파일을 수정해 보겠습니다.&lt;/p&gt;
&lt;p&gt;vim /etc/group를 사용해서 편집합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606045232449&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root:x:0:

jcil:x:1001:
jcil2:x:1002:
&quot;/etc/group&quot; 57L, 768C&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;맨 윗줄의 루트 그룹을 확인하시면, 끝에 0을 보실 수 있습니다. 그 뒤에 sudoer와 passwd 파일에서 추가했던 유저의 계정을 추가해 주시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606045457986&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# vim /etc/group
root:x:0:jcil

jcil:x:1001:
jcil2:x:1002:
-- INSERT --&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 추가해주시면 됩니다. 저장하시고 빠져나온 뒤 jcil로 로그인합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sudo 명령어 없이, 관리자 권한이 필요한 명령어를 실행해서 확인하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606045652408&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# su - jcil2
jcil2@ubuntu:~$ apt-get update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
jcil2@ubuntu:~$

root@ubuntu:~# su - jcil
root@ubuntu:~# apt-get update
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
Reading package lists... Done
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;확인이 되시나요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일반 유저인 jcil2 계정과 관리자 권한을 얻게 된 jcil 계정의 차이점을 명령어 프롬프트에서도 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;그리고 jcil계정은 명령어 프롬프트의 시작이 jcil이 아닌, root로 시작하게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;sudoerroot.JPG&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;291&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVd5ip/btqNYvSBr01/9ASLoKQLY8UP18dCjjKAz0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVd5ip/btqNYvSBr01/9ASLoKQLY8UP18dCjjKAz0/img.jpg&quot; data-alt=&quot;privilege&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVd5ip/btqNYvSBr01/9ASLoKQLY8UP18dCjjKAz0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVd5ip%2FbtqNYvSBr01%2F9ASLoKQLY8UP18dCjjKAz0%2Fimg.jpg&quot; data-filename=&quot;sudoerroot.JPG&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;291&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;privilege&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>gid</category>
      <category>Group</category>
      <category>passwd</category>
      <category>permission</category>
      <category>root</category>
      <category>root 권한</category>
      <category>sudoer</category>
      <category>UID</category>
      <category>권한 부여</category>
      <category>루트 계정</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/24</guid>
      <comments>https://jayyjji.tistory.com/24#entry24comment</comments>
      <pubDate>Sun, 22 Nov 2020 20:55:10 +0900</pubDate>
    </item>
    <item>
      <title>sudo 권한 부여하기, 리눅스 su su - 차이</title>
      <link>https://jayyjji.tistory.com/23</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;sudo 권한 부여하기, 리눅스 su su - 차이&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;root permission 관리자 권한&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;일반 유저에게 관리자 권한을 부여하는 방법을 알아보겠습니다. 정확히 말하면 관리자가 허락한 유저에게, 명령어 실행 권한을 부여하는 방법을 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;관리자란 흔히 루트(root), OS 최상위 관리자, 루트 권한을 가진 자를 말합니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;현재 test OS는 ubuntu server 18.04.4 LTS입니다. 관리자 권한 부여는 Linux 계열은 대부분 동일한 것으로 알고 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;관리자란?&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;리눅스 OS에서 명령어를 실행할 때, 관리자 권한이 반드시 필요한 명령어가 있습니다. 그리고 그 권한이 없는 경우에는 명령어가 실행되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리눅스 OS를 설치하게 되면 root라는 최상위 사용자가 생성이 됩니다. 이 root는 모든 권한을 가지고 있는 관리자입니다. 즉, 모든 디렉터리나 파일에 접근할 수 있고, 수정, 생성은 물론 가장 위험한 삭제까지 진행할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장점이 있으면, 단점이 존재하기 마련입니다. 관리자 권한에서 제일 조심해야 되는 것이 수정과 삭제입니다. 타이핑 실수 하나로 어마어마한 정보를 날려버릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;돌이킬 수 없는 경우가 종종 발생합니다. 국가기관이나 연구기관은 루트 권한을 가진 자가 실수를 하게 되면, 위험한 상황이 발생하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 관리자는 매우 중요한 역할이며, 최대한 root 로그인은 사용하지 않아야 안전합니다. 그런 이유로 유저를 생성하고 유저에게 sudo 권한을 부여해서 사용하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;su와 sudo의 차이점&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;su의 경우, root에서 사용자 계정으로 전환하고, root 계정의 패스워드를 알고 있어야 합니다.&lt;/p&gt;
&lt;p&gt;하지만, sudo의 경우 root 권한으로 단일 명령어를 수행할 뿐 root 계정으로 전환되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 root 계정의 패스워드를 요구하지 않습니다.&lt;/p&gt;
&lt;p&gt;이해가 좀 되시나요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;su는 Super User라고도 하지만, Switch User라는 말도 맞습니다.&lt;/p&gt;
&lt;p&gt;정확한 의미는 Substitute User 대리인, 대체자라는 뜻입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자를 전환하는 용도입니다.&lt;/p&gt;
&lt;p&gt;하지만 sudo는 관리자의 권한으로 단일 명령을 수행하는 것입니다.&lt;/p&gt;
&lt;p&gt;우리가 명령어 앞에 sudo를 붙이는 것이 이런 이유에서 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;su와 su - 차이점&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;어차피 설명드리는 거 확실하게 알고 넘어가 보겠습니다.&lt;/p&gt;
&lt;p&gt;그럼 su와 su - 의 차이는 무엇일까요.&lt;/p&gt;
&lt;p&gt;두 명령어다 user를 스위치 하는 명령어는 맞습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;su jcil &amp;lt;---유저&lt;/p&gt;
&lt;p&gt;현재 환경변수에서 jcil 계정으로 전환됩니다. jcil의 계정 패스워드를 입력해주면, 기존 유저의 환경변수 중 일부와 워킹 디렉터리를 유지합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;su - jcil &amp;lt;---유저&lt;/p&gt;
&lt;p&gt;&quot;-&quot;&amp;nbsp; &amp;nbsp;&quot;-l&quot;&amp;nbsp; &amp;nbsp;&quot;--login&quot; 동일한 옵션입니다.&lt;/p&gt;
&lt;p&gt;새로운 사용자로 로그인됩니다. jcil 계정의 패스워드를 입력하면, jcil의 환경변수를 사용합니다.&lt;/p&gt;
&lt;p&gt;기존의 환경은 사라지고 새로운 유저의 환경변수와 워킹 디렉터리를 사용하게 됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;일반 사용자가 명령어를 사용할 경우&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;아래 코드 블록을 보시면 jcil이라는 유저를 생성해서 jcil 계정으로 이동했습니다.&lt;/p&gt;
&lt;p&gt;그전에 저는 root 권한이라 유저를 생성하고 jcil계정으로 전환을 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;jcil이라는 user 계정으로 apt-get update를 실행해 보았습니다.&lt;/p&gt;
&lt;p&gt;permission denied라는 메시지가 출력됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605932827379&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# adduser jcil
Adding user `jcil' ...
Adding new group `jcil' (1001) ...
Adding new user `jcil' (1001) with group `jcil' ...
The home directory `/home/jcil' already exists.  Not copying from `/etc/skel'.
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for jcil
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]

root@ubuntu:~# su - jcil
jcil@ubuntu:~$ apt-get update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
jcil@ubuntu:~$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;퍼미션 디나이, 뭐 승인 거부, 허가 거부 이런 뜻입니다.&lt;/p&gt;
&lt;p&gt;서버 엔지니어들은 작업 시, 관리자를 통해 루트 패스워드를 제공받거나 루트 권한을 부여받게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 엔지니어들은 시스템 재부팅만 할 수 있다면 루트 패스워드를 바꿀 수 있기 때문에 크게 문제가 되지 않습니다. 단 특수한 경우가 아니면 루트 패스워드 변경은 사용하면 안 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;시스템 관리자의 허가 없이 root passwd를 변경하는 것은 범죄이기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 유저 jcil에게 관리자와 같은 명령어를 사용할 수 있도록,&lt;/p&gt;
&lt;p&gt;sudo 사용 권한을 부여해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 현재 root 권한입니다. visudo라는 명령어를 사용하시면, /etc/sudoer 파일에 접근할 수 있습니다.&lt;/p&gt;
&lt;p&gt;일반 사용자는 sudo visudo, sudo vim /etc/sudoer라는 명령어로 수정하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어쨌든 관리자가 허가해야만, sudo 권한도 부여할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605940844004&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on &quot;#include&quot; directives:

#includedir /etc/sudoers.d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;저는 visudo로 진입했습니다. command 라인에 jcil을 추가해 주려고 합니다.&lt;/p&gt;
&lt;p&gt;%jcil&amp;nbsp; &amp;nbsp;ALL=(ALL:ALL)&amp;nbsp; &amp;nbsp;ALL을 입력해 주면 되겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605941669664&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
%jcil   ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on &quot;#include&quot; directives:

#includedir /etc/sudoers.d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;아래는 권한을 부여하지 않았을 때의 화면 출력입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605941575815&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jcil@ubuntu:~$ sudo apt-get update
[sudo] password for jcil:
jcil is not in the sudoers file.  This incident will be reported.
jcil@ubuntu:~$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;권한을 부여한 후 결과를 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605941746047&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jcil@ubuntu:~$ sudo apt-get update
[sudo] password for jcil:
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:3 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1,761 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [1,162 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [1,162 kB]
Err:6 http://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages
  Hash Sum mismatch
  Hashes of expected file:
   - Filesize:1162480 [weak]
   - SHA256:884fe8e7f484136d3199b928f208942763228e8cae8274ec7ac3b1b924cbb2ab
   - SHA1:f0c487161834f3f3099ca768ed365d48c76eb9b5 [weak]
   - MD5Sum:4174cff32e3375437d187d132e40e6d4 [weak]
  Hashes of received file:
   - SHA256:855c113fa6700a68e809e37b7c6826c4796decfdf08444db90afbeacada8cfc0
   - SHA1:0df216c812597da32cbf04ddcd89540b0322e559 [weak]
   - MD5Sum:da6d259b1ca4a0bc6e75c311ad63bdc9 [weak]
   - Filesize:1162480 [weak]
  Last modification reported: Sat, 21 Nov 2020 00:24:56 +0000
  Release file created at: Sat, 21 Nov 2020 04:51:14 +0000
Get:8 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1,692 kB]
Err:8 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages

Get:9 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1,547 kB]
Err:9 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages

Fetched 4,654 kB in 6s (810 kB/s)
Reading package lists... Done

jcil@ubuntu:~$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sudo와 명령어를 입력 후 현재 사용자의 패스워드를 입력하면, root와 같은 권한으로 명령어가 실행되는 것을 알 수 있습니다. 이런 방법을 통하여 관리자 권한을 얻은 후 명령어를 실행해 보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서론과 개념 정리는 좀 길었지만, 실제로 sudo 권한 부여는 간단합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;sudoer.JPG&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;472&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPnogU/btqNXcFmKSY/GDi43Nn9I36LgLc5IuHduK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPnogU/btqNXcFmKSY/GDi43Nn9I36LgLc5IuHduK/img.jpg&quot; data-alt=&quot;vim /etc/sudoer&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPnogU/btqNXcFmKSY/GDi43Nn9I36LgLc5IuHduK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPnogU%2FbtqNXcFmKSY%2FGDi43Nn9I36LgLc5IuHduK%2Fimg.jpg&quot; data-filename=&quot;sudoer.JPG&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;472&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vim /etc/sudoer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>su</category>
      <category>su 권한</category>
      <category>su 와 su - 차이점</category>
      <category>substitute</category>
      <category>sudo</category>
      <category>sudo 권한</category>
      <category>sudoer</category>
      <category>visudo</category>
      <category>사용자 변경</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/23</guid>
      <comments>https://jayyjji.tistory.com/23#entry23comment</comments>
      <pubDate>Sat, 21 Nov 2020 16:14:23 +0900</pubDate>
    </item>
    <item>
      <title>apt-get 과 apt 차이점</title>
      <link>https://jayyjji.tistory.com/22</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;apt-get과 apt 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ubuntu apt-get vs apt&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;오늘 스토리는 우분투에서 apt-get과 apt는 어떻게 다른지 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ATP란 무엇의 약자일까?&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;Advanced Packaging Tool *.deb 형식의 패키지들을 관리(설치, 삭제, 업데이트)해주는 툴입니다.&lt;/p&gt;
&lt;p&gt;우분투 사용하시는 분들은 뭔가 설치하실 때 가장 많이 사용하시는 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;apt vs apt-get&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;온라인이나 오프라인 패키지 문서를 읽다 보면 어떤 것은 apt-get install을 사용해서 설치하고 어떤 것은 apt install을 사용해서 설치하라고 써져있습니다. 심지어 같은 패키지인데도 서로 다른 경우가 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결론부터 말씀드리면 apt-get을 사용하든 apt를 사용하든 큰 차이는 없습니다. 그럼 apt-get과 apt의 차이점은 뭘까요? apt-get을 사용하시든 apt를 사용하시든 내부 동작은 거의 차이가 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;apt-get는 옵션들이 많아다 보니깐 자주 사용하는 옵션도 있고 그렇지 않은 옵션도 있습니다. 옵션의 사용빈도를 반영하여 apt에서 자주 사용하는 옵션들을 추출해서 사용자들의 편의성을 위해 만들어졌습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 apt가 더 예쁘고 추가적인 정보를 출력해주고 있습니다. 구체적으로 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;apt&lt;/h3&gt;
&lt;p&gt;1. apt를 사용하면 색의 표현도 있고 창 하단에 진행 퍼센티지가 나와서 현재 진행률을 확인하기 편합니다.&lt;/p&gt;
&lt;p&gt;2. 출력되는 메시지의 정보가 상세합니다. (apt-get는 추가적으로 옵션을 사용하면 가능합니다. apt는 기본적으로 터미널을 자주 사용하는 사용자에게 배려가 되어있는 느낌입니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 한번 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;apt.JPG&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;279&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh0dpF/btqNWf3hzYw/roSPKlVKp6U1krBW2y7bS0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh0dpF/btqNWf3hzYw/roSPKlVKp6U1krBW2y7bS0/img.jpg&quot; data-alt=&quot;apt&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh0dpF/btqNWf3hzYw/roSPKlVKp6U1krBW2y7bS0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh0dpF%2FbtqNWf3hzYw%2FroSPKlVKp6U1krBW2y7bS0%2Fimg.jpg&quot; data-filename=&quot;apt.JPG&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;279&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;apt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;apt-get.JPG&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz5Nz7/btqNU2KqQnM/ARwKkRUkhlsZrkPKH3sqpk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz5Nz7/btqNU2KqQnM/ARwKkRUkhlsZrkPKH3sqpk/img.jpg&quot; data-alt=&quot;apt-get&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz5Nz7/btqNU2KqQnM/ARwKkRUkhlsZrkPKH3sqpk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz5Nz7%2FbtqNU2KqQnM%2FARwKkRUkhlsZrkPKH3sqpk%2Fimg.jpg&quot; data-filename=&quot;apt-get.JPG&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;apt-get&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위에 언급했듯이 apt에는 화면 하단에 진행 퍼센티지가 컬러로 표시됩니다. 패키지 설치 시에 저렇게 진행률이 표시되어 보기 편합니다. 반면에 apt-get은 색의 변화도 없으며 각 파일에 대한 진행률은 표시되지만 전체 패키지에 관련된 진행 상태는 표시되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;어떤 걸 사용하는 게 더 좋을까요?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;크게 상관은 없습니다. 본인이 사용하기 편하신 걸 사용하면 됩니다. 저는 apt-get이 손에 익숙해져서 주로 사용하지만, 가끔 apt를 사용하면 깔끔하고, 세련됨을 느낍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;요즘 우분투를 배우시거나, 접하는 분들은 apt를 많이 사용하시는 걸로 알고 있습니다. apt는 리눅스를 처음 접하거나 특별히 옵션을 사용하는 일이 없다면 사용하시는 걸 권장드립니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러나~! 서버에서 트러블슈팅 해결하시거나 스크립트 작성할 실 때는 apt-get이 더 유용합니다. apt-get은 apt보다 더 많은 세부 옵션들을 가지고 있기 때문에 그만큼 더 많은 기능을 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;굳이 말하자면 apt-get은 과거부터 오랫동안 사용했기 때문에 당연히 더 안정적이고 호환성이 높기도 합니다. 서버 OS 다루는 사람들이 굳이 뭐 칼라가 더 이쁘고 깔끔해서 무슨 소용이 있겠습니까?라는 생각을 잠깐 해봅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 매뉴얼과 도움말을 한번 체크해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605878424520&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-get --help
apt 1.6.12 (amd64)
Usage: apt-get [options] command
       apt-get [options] install|remove pkg1 [pkg2 ...]
       apt-get [options] source pkg1 [pkg2 ...]

apt-get is a command line interface for retrieval of packages
and information about them from authenticated sources and
for installation, upgrade and removal of packages together
with their dependencies.

Most used commands:
  update - Retrieve new lists of packages
  upgrade - Perform an upgrade
  install - Install new packages (pkg is libc6 not libc6.deb)
  remove - Remove packages
  purge - Remove packages and config files
  autoremove - Remove automatically all unused packages
  dist-upgrade - Distribution upgrade, see apt-get(8)
  dselect-upgrade - Follow dselect selections
  build-dep - Configure build-dependencies for source packages
  clean - Erase downloaded archive files
  autoclean - Erase old downloaded archive files
  check - Verify that there are no broken dependencies
  source - Download source archives
  download - Download the binary package into the current directory
  changelog - Download and display the changelog for the given package

See apt-get(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).
                                        This APT has Super Cow Powers.
root@ubuntu:~#
root@ubuntu:~# man apt-get | wc -l
345
root@ubuntu:~# apt --help
apt 1.6.12 (amd64)
Usage: apt [options] command

apt is a commandline package manager and provides commands for
searching and managing as well as querying information about packages.
It provides the same functionality as the specialized APT tools,
like apt-get and apt-cache, but enables options more suitable for
interactive use by default.

Most used commands:
  list - list packages based on package names
  search - search in package descriptions
  show - show package details
  install - install packages
  remove - remove packages
  autoremove - Remove automatically all unused packages
  update - update list of available packages
  upgrade - upgrade the system by installing/upgrading packages
  full-upgrade - upgrade the system by removing/installing/upgrading packages
  edit-sources - edit the source information file

See apt(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).
                                        This APT has Super Cow Powers.
root@ubuntu:~# man apt | wc -l
85
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;매뉴얼의 라인 수만 보아도 apt는 apt-get의 4분의 1 양 밖에 되지 않습니다..&lt;/p&gt;
&lt;p&gt;사용빈도수가 낮은 옵션들이 축소된 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에서 설명드렸듯이 처음 접하시거나 옵션 사용이 적으신 분들은 apt를 사용하시는 게 권장됩니다.&lt;/p&gt;
&lt;p&gt;숙련자나 전문적으로 사용하시는 분들 옵션 사용이 많으신 분들은 말씀 안 드려도 알아서 사용하시리라 생각됩니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>apt</category>
      <category>apt 차이점</category>
      <category>apt-get</category>
      <category>apt-get 차이점</category>
      <category>패키지 관리자</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/22</guid>
      <comments>https://jayyjji.tistory.com/22#entry22comment</comments>
      <pubDate>Fri, 20 Nov 2020 22:34:53 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 top 명령어</title>
      <link>https://jayyjji.tistory.com/21</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;리눅스 top 명령어&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;리눅스 top 명령어 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;리눅스의 top 명령어에 대해서 정리해 보겠습니다.&lt;/p&gt;
&lt;p&gt;top 명령어를 사용해서 프로세스의 정보들을 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 top를 한번 입력하고 엔터를 쳐보겠습니다.&lt;/p&gt;
&lt;p&gt;아래와 같은 화면이 일정 시간을 주기로 갱신되며 출력되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605788219921&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# top
top - 21:16:04 up 0 min,  2 users,  load average: 0.97, 0.32, 0.11
top - 21:16:47 up 1 min,  2 users,  load average: 0.49, 0.28, 0.10
Tasks: 191 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   985340 total,   264968 free,   159428 used,   560944 buff/cache
KiB Swap:   969960 total,   969960 free,        0 used.   674472 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0   77616   8724   6668 S   0.0  0.9   0:01.88 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd
     3 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0
     4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H
     5 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:0
     6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
     7 root      20   0       0      0      0 S   0.0  0.0   0:00.06 ksoftirqd/0
     8 root      20   0       0      0      0 I   0.0  0.0   0:00.04 rcu_sched
     9 root      20   0       0      0      0 I   0.0  0.0   0:00.00 rcu_bh
    10 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/0
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 watchdog/0
    12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/0
    13 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/1
    14 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 watchdog/1
    15 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/1
    16 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/1
    17 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/1:0
    18 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/1:0H
    19 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs
    20 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 netns
    21 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_tasks_kthre
    22 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kauditd
    23 root      20   0       0      0      0 I   0.0  0.0   0:00.02 kworker/1:1
    24 root      20   0       0      0      0 I   0.0  0.0   0:00.08 kworker/0:1
    25 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd
    26 root      20   0       0      0      0 S   0.0  0.0   0:00.00 oom_reaper
    27 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 writeback
    28 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kcompactd0
    29 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd
    30 root      39  19       0      0      0 S   0.0  0.0   0:00.00 khugepaged
    31 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 crypto
    32 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kintegrityd
    33 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kblockd
    34 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 ata_sff
    35 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 md
    36 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 edac-poller
    37 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 devfreq_wq
    38 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 watchdogd
    39 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:1
    41 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kswapd0
    42 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/u257:0
    43 root      20   0       0      0      0 S   0.0  0.0   0:00.00 ecryptfs-kthrea
    85 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kthrotld
    86 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 acpi_thermal_pm
    87 root      20   0       0      0      0 S   0.0  0.0   0:00.02 scsi_eh_0
    88 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 scsi_tmf_0
    89 root      20   0       0      0      0 S   0.0  0.0   0:00.01 scsi_eh_1
    90 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 scsi_tmf_1
    91 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:2
    92 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/u256:3
    96 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 ipv6_addrconf&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;top&lt;/p&gt;
&lt;p&gt;시스템의 상태를 전반적으로 가장 빠르게 파악 가능합니다.(CPU, Memory, Process)&lt;/p&gt;
&lt;p&gt;옵션 없이 top만 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 출력하여 보여줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;top 실행 전 옵션&lt;/p&gt;
&lt;p&gt;순간의 정보를 확인하려면 -b 옵션(batch 모드) 화면이 갱신되지 않고, top 명령 실행 시점의 정보를 출력합니다.&lt;/p&gt;
&lt;p&gt;-n : top 실행 주기 설정(반복 횟수) 옵션 뒤에 숫자를 붙여주면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;top 실행 후 키 옵션&lt;/p&gt;
&lt;p&gt;shift + p : CPU 사용률 내림차순 정렬&lt;/p&gt;
&lt;p&gt;shift + m : 메모리 사용률 내림차순 정렬&lt;/p&gt;
&lt;p&gt;shift + t : 프로세스가 작동된 시간 순&lt;/p&gt;
&lt;p&gt;k : kill. k 입력 후 PID 번호 작성. signal은 9&lt;/p&gt;
&lt;p&gt;f : sort field 선택 화면 -&amp;gt; q 누르면 RES순으로 정렬&lt;/p&gt;
&lt;p&gt;a : 메모리 사용량에 따라 정렬&lt;/p&gt;
&lt;p&gt;b : Batch 모드로 작동&lt;/p&gt;
&lt;p&gt;1 : CPU Core별로 사용량 출력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ps와 top의 차이점&lt;/p&gt;
&lt;p&gt;ps는 ps 한 시점 proc에서 검색한 CPU 사용률&lt;/p&gt;
&lt;p&gt;top은 proc에서 일정 주기로 합산한 CPU 사용률&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;top -b -n 1 명령어를 입력합니다. 옵션의 의미를 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;화면이 갱신되지 않고 한 타임으로 출력이 끝이 납니다.(아래 코드 블록은 편집 한 출력 화면입니다.)&lt;/p&gt;
&lt;p&gt;명령 프롬프트가 마지막에 보입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605789227542&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# top -b -n 1
top - 21:32:36 up 17 min,  2 users,  load average: 0.00, 0.01, 0.02
Tasks: 160 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.6 sy,  0.1 ni, 98.9 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   985340 total,   263592 free,   158480 used,   563268 buff/cache
KiB Swap:   969960 total,   969960 free,        0 used.   675284 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0   77616   8724   6668 S   0.0  0.9   0:01.89 systemd
   478 root      19  -1  102992  29368  28672 S   0.0  3.0   0:00.20 systemd-journal
   496 root      20   0   97708   1756   1584 S   0.0  0.2   0:00.00 lvmetad
   502 root      20   0   48384   7128   3136 S   0.0  0.7   0:00.78 systemd-udevd
   533 systemd+  20   0  141932   3208   2680 S   0.0  0.3   0:00.02 systemd-timesyn
   538 systemd+  20   0   71852   5308   4708 S   0.0  0.5   0:00.09 systemd-network
   552 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 bond0
   574 systemd+  20   0   70768   5348   4792 S   0.0  0.5   0:00.02 systemd-resolve
   616 root      20   0   91152  10680   9208 S   0.0  1.1   0:00.02 VGAuthService
   618 root      20   0  218148   6512   5596 S   0.0  0.7   0:00.57 vmtoolsd
   621 message+  20   0   50060   4356   3740 S   0.0  0.4   0:00.02 dbus-daemon
   629 root      20   0   95540   1544   1416 S   0.0  0.2   0:00.00 lxcfs
   631 syslog    20   0  263040   4848   3552 S   0.0  0.5   0:00.02 rsyslogd
   632 root      20   0   70592   5992   5252 S   0.0  0.6   0:00.01 systemd-logind
   669 root      20   0  170392  17240   9484 S   0.0  1.7   0:00.08 networkd-dispat
   671 root      20   0  287548   6764   5888 S   0.0  0.7   0:00.03 accounts-daemon
   672 root      20   0  110548   2092   1872 S   0.0  0.2   0:00.05 irqbalance
   673 daemon    20   0   28332   2348   2140 S   0.0  0.2   0:00.00 atd
   698 root      20   0   31320   3188   2908 S   0.0  0.3   0:00.00 cron
   738 root      20   0  288884   6508   5716 S   0.0  0.7   0:00.01 polkitd
   778 root      20   0  187236  20084  12180 S   0.0  2.0   0:00.05 unattended-upgr
   939 root      20   0   72300   5696   4968 S   0.0  0.6   0:00.00 sshd
   984 root      20   0   78768   3640   3076 S   0.0  0.4   0:00.01 login
  1420 root      20   0   76620   7412   6404 S   0.0  0.8   0:00.01 systemd
  1426 root      20   0  109300   2196      4 S   0.0  0.2   0:00.00 (sd-pam)
  1446 root      20   0   22652   4896   3372 S   0.0  0.5   0:00.01 bash
  1475 root      20   0  106044   7420   6248 S   0.0  0.8   0:00.10 sshd
  1490 root      20   0  105696   6984   5996 S   0.0  0.7   0:00.01 sshd
  1646 root      20   0   13060   2200   2044 S   0.0  0.2   0:00.00 sftp-server
  1652 root      20   0   22652   5012   3428 S   0.0  0.5   0:00.05 bash
  1779 root      20   0       0      0      0 I   0.0  0.0   0:00.51 kworker/u256:0
  1796 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0
  1814 root      20   0   44108   3996   3424 R   0.0  0.4   0:00.00 top
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;상단의 시간 - 현재시간 up 17 min 현재 시간과 서버가 작동된 시간 17분&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;load average - 현재 시스템이 얼마나 일을 하는지를 나타냅니다.&lt;/p&gt;
&lt;p&gt;3개의 숫자는 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수. CPU 코어수 보다 적으면 문제없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tasks - 프로세스 개수를 나타냅니다.&lt;/p&gt;
&lt;p&gt;KiB Mem, Swap - 각 메모리의 사용량을 보여줍니다.&lt;/p&gt;
&lt;p&gt;PR - 실행 우선순위를 나타냅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VIRT, RES, SHR - 메모리 사용량 =&amp;gt; 메모리 누수를 check 가능합니다.&lt;/p&gt;
&lt;p&gt;S - 프로세스 상태(작업 중, I/O 대기, 유휴 상태 등)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VIRT, RES, SHR&lt;/p&gt;
&lt;p&gt;현재 프로세스가 사용하고 있는 메모리&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VIRT&lt;/p&gt;
&lt;p&gt;프로세스가 사용하고 있는 virtual memory의 전체 용량&lt;/p&gt;
&lt;p&gt;프로세스에 할당된 가상 메모리 전체&lt;/p&gt;
&lt;p&gt;SWAP + RES&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RES&lt;/p&gt;
&lt;p&gt;현재 프로세스가 사용하고 있는 물리 메모리의 양&lt;/p&gt;
&lt;p&gt;실제로 메모리에 올려서 사용하고 있는 물리 메모리&lt;/p&gt;
&lt;p&gt;실제로 메모리를 쓰고 있는 RES가 핵심&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SHR&lt;/p&gt;
&lt;p&gt;다른 프로세스와 공유하고 있는 shared memory의 양&lt;/p&gt;
&lt;p&gt;예로 라이브러리를 들 수 있습니다.&lt;/p&gt;
&lt;p&gt;대부분의 리눅스 프로세스는 glibc라는 라이브러리를 참고하기 때문에 이런 라이브러리를 공유 메모리에 올려서 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Memory Commit&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프로세스가 커널에게 필요한 메모리를 요청하면 커널은 프로세스에 메모리 영역을 주고 실제로 할당은 하지 않지만 해당 영역을 프로세스에게 주었다는 것을 저장해놓습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이런 과정을 Memory commit이라 부릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프로세스 상태&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;SHR 옆에 있는 S 항목으로 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;D : Uninterruptiable sleep. 디스크 혹은 네트워크 I/O를 대기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;R : 실행 중(CPU 자원을 소모)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;S : Sleeping 상태, 요청한 리소스를 즉시 사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;T : Traced or Stopped. 보통의 시스템에서 자주 볼 수 없는 상태&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Z : zombie. 부모 프로세스가 죽은 자식 프로세스&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;top.JPG&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0SDR4/btqNQwKFTTU/vfCuNPu0bo2UaRr5EQiMV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0SDR4/btqNQwKFTTU/vfCuNPu0bo2UaRr5EQiMV0/img.jpg&quot; data-alt=&quot;ubuntu top&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0SDR4/btqNQwKFTTU/vfCuNPu0bo2UaRr5EQiMV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0SDR4%2FbtqNQwKFTTU%2FvfCuNPu0bo2UaRr5EQiMV0%2Fimg.jpg&quot; data-filename=&quot;top.JPG&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu top&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>PS</category>
      <category>RES</category>
      <category>SHR</category>
      <category>task</category>
      <category>Top</category>
      <category>up to time</category>
      <category>VIRT</category>
      <category>모니터링</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/21</guid>
      <comments>https://jayyjji.tistory.com/21#entry21comment</comments>
      <pubDate>Thu, 19 Nov 2020 21:52:46 +0900</pubDate>
    </item>
    <item>
      <title>netplan bonding 우분투 본딩</title>
      <link>https://jayyjji.tistory.com/20</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;netplan bonding 우분투 본딩&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ubuntu18.04 bonding netplan&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번 스토리는 우분투에서 netplan을 사용해서 본딩을 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ifenslave와 ethtool설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;우선 bonding를 구성 및 설정하기 위해서는 ifenslave와 ethtool 패키지가 필요합니다.(저는 root 권한으로 테스트 진행합니다.)&lt;/p&gt;
&lt;p&gt;여러분은 sudo 명령어를 사용하시거나 root 권한으로 진행하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605701487574&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# apt-get install ifenslave
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  ifenslave
0 upgraded, 1 newly installed, 0 to remove and 171 not upgraded.
Need to get 13.3 kB of archives.
After this operation, 49.2 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 ifenslave all 2.9ubuntu1 [
Fetched 13.3 kB in 1s (15.2 kB/s)
Selecting previously unselected package ifenslave.
(Reading database ... 67041 files and directories currently installed.)
Preparing to unpack .../ifenslave_2.9ubuntu1_all.deb ...
Unpacking ifenslave (2.9ubuntu1) ...
Setting up ifenslave (2.9ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
root@ubuntu:~#
root@ubuntu:~# apt-get install ethtool
Reading package lists... Done
Building dependency tree
Reading state information... Done
ethtool is already the newest version (1:4.15-0ubuntu1).
0 upgraded, 0 newly installed, 0 to remove and 171 not upgraded.
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;현재 OS에는 ethtool 설치되어있음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 순서는 lsmod 명령어를 사용해서 현재 bonding module이 존재하는지 확인을 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605701718010&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# lsmod | grep -i bonding
bonding               163840  0
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;본딩 모듈이 존재한다면 위의 화면이 출력됩니다.&lt;/p&gt;
&lt;p&gt;출력되는 값이 없다면 modprobe bonding을 입력하여 본딩 모듈을 로드하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605701834622&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# modprobe bonding
root@ubuntu:~# vim /etc/modules&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그리고 /etc/modules에 bonding이라는 단어를 추가해 주시면 부팅 시 모듈이 등록됩니다.&lt;/p&gt;
&lt;p&gt;여기까지 본딩을 구성하고 설정하기 위한 사전 작업이 끝났습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;netplan 파일 수정&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;이제 netplan 파일을 수정합니다. /etc/netplan/01-netcfg.yaml&amp;nbsp; 네트워크 설정 파일입니다. 보통 이 파일을 수정하시지 않고 02-bonding.yaml이라는 파일을 생성하셔서 사용하는 분들도 있습니다. 어떻게 하시던 상관은 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파일 관리는 파일을 생성하는 편이 수월하겠습니다. 이번 스토리에서는 01-netcfg.yaml 파일을 수정하는 것으로 진행하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605702360525&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: false
      #      addresses: [192.168.231.128/24]
      #      gateway4: 192.168.231.2
      #      nameservers:
      #              addresses: [8.8.8.8]
    ens34:
      dhcp4: false
      #      addresses: [192.168.231.129/24]
      #      gateway4: 192.168.231.2
      #      nameservers:
      #              addresses: [8.8.8.8]
  bonds:
          bond0:
                  dhcp4: true
                  interfaces: [ens33, ens34]
                  parameters:
                          mode: balance-rr
                          mii-monitor-interval: 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;bonds: 부터 추가로 작성한 설정입니다.&lt;/p&gt;
&lt;p&gt;bonds: 의 시작 라인은 윗줄의 ethernets: 와 맞춰줍니다.&lt;/p&gt;
&lt;p&gt;그다음은 bonds:뒤에서 엔터를 눌러서 다음 라인으로 진행하시면 됩니다. tab키는 사용하시면 안 됩니다. 라인을 맞추실 때는 스페이스바를 이용하시고 가능하면 윗줄의 설정 끝에서 엔터를 누르시면 다음 라인의 시작점이 지정됩니다. 그대로 설정을 입력하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 설정은 기존의 static IP를 주석 처리(#)하고 bonding IP를 dhcp로 줬습니다.&lt;/p&gt;
&lt;p&gt;본딩 아이피가 자동으로 잡히는 설정입니다. 본딩 IP를 수동으로 사용 하 실분들은 아래와 같이 설정하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605702829702&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  bonds:
          bond0:
                  dhcp4: false
                  addresses: [192.168.231.133/24]
                  gateway4: 192.168.231.2
                  nameservers:
                          addresses: [8.8.8.8, 8.8.4.4]
                  interfaces: [ens33, ens34]
                  parameters:
                          mode: balance-rr
                          #                          primary: ens33
                          mii-monitor-interval: 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;dhcp를 false 나 no로 바꾸시고 기존 네트워크 설정과 같이 IP address, gateway, DNS를 입력해 주시면 됩니다. 끝줄에서 엔터로 진행하시면 저렇게 라인이 알아서 맞춰집니다. DNS는 두 개를 입력하셔도 되고, 한 개를 입력하셔도 됩니다. 구분은 , 콤마로 해주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;false = no&lt;/p&gt;
&lt;p&gt;true = yes&lt;/p&gt;
&lt;p&gt;대체할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;파라미터에서 프라이머리 슬래이브를 주석 처리한 것은 해당 모드에서 지원하지 않기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추후 본딩을 사용하지 않은 실 때는 본딩 라인 전체를 주석(#) 처리해주시고 사용하시면 됩니다.&lt;/p&gt;
&lt;p&gt;항상 저장하시고 netplan apply로 적용을 시켜주시면 됩니다.&lt;/p&gt;
&lt;p&gt;오타가 없으시다면, 정상 적용됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605703142629&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# netplan apply
root@ubuntu:~# ifconfig -a
bond0: flags=5187&amp;lt;UP,BROADCAST,RUNNING,MASTER,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.231.133  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::68cd:afff:fe64:37ac  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
        ether 6a:cd:af:64:37:ac  txqueuelen 1000  (Ethernet)
        RX packets 1594  bytes 122217 (122.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 738  bytes 79141 (79.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=6211&amp;lt;UP,BROADCAST,RUNNING,SLAVE,MULTICAST&amp;gt;  mtu 1500
        ether 6a:cd:af:64:37:ac  txqueuelen 1000  (Ethernet)
        RX packets 290  bytes 18058 (18.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 369  bytes 40058 (40.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=6211&amp;lt;UP,BROADCAST,RUNNING,SLAVE,MULTICAST&amp;gt;  mtu 1500
        ether 6a:cd:af:64:37:ac  txqueuelen 1000  (Ethernet)
        RX packets 1304  bytes 104159 (104.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 369  bytes 39083 (39.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10&amp;lt;host&amp;gt;
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 88  bytes 6672 (6.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 88  bytes 6672 (6.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;bond0에 192.168.231.133 IP가 적용된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;netplan apply가 정상 적용됐는데 IP 설정이 반영이 안 되었다면, reboot 진행해 주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ethtool 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1605703311736&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# ethtool bond0
Settings for bond0:
        Supported ports: [ ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 2000Mb/s
        Duplex: Full
        Port: Other
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: off
        Link detected: yes
root@ubuntu:~#
root@ubuntu:~# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 1
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens34
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:83:7e:5f
Slave queue ID: 0

Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:83:7e:55
Slave queue ID: 0
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ethtool bond0을 사용하여 링크 상태나 속도의 대역폭 상태를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;추가로 cat /proc/net/bonding/bond0 파일을 확인하시면 본딩 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;bonding mode&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;간략하게나마 본딩 모드에 대해 설명드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 0 = balance-rr&lt;/h4&gt;
&lt;p&gt;Round-robin이라고도 부릅니다. 송신하는 패킷마다 사용하는 LAN 포트를 변경합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RR(RoundRobin) 방식 Load Balancing, 인터페이스의 라운드 로빈(active-active 대역폭 상승+Failover를 지원)&lt;/p&gt;
&lt;p&gt;디바이스가 2개일 경우(랜 포트 두 개) 트래픽을 같이 사용할 수 있어 대역폭 분산시키는데 효과적입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[A NIC -&amp;gt; B NIC -&amp;gt; A NIC -&amp;gt; B NIC 순]으로 패킷을 분산시키는 방법을 사용합니다.&lt;/p&gt;
&lt;p&gt;스위치에서 지원한다면 hashing 업이 load balancing 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 1 = active-backup&lt;/h4&gt;
&lt;p&gt;bond LAN port 중 한 개의 포트만 사용합니다.(하나의 슬레이브만 활성화와 같은 의미)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;LAN port 이상이나 고장이 생길 경우 대체됩니다.(나머지 슬레이브는 standby 상태)&lt;/p&gt;
&lt;p&gt;Failover전용 mode입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;primary를 설정하지 않으면 failback 되지 않습니다.&lt;/p&gt;
&lt;p&gt;스위치 지원은 필요 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 2 = balance-xor&lt;/h4&gt;
&lt;p&gt;mode 0과 비슷하지만, 목적지의 MAC address와 발신지의 MAC address XOR연산을 통해 사용할 LAN port 결정합니다.&lt;/p&gt;
&lt;p&gt;XOR 방식 / 수신 시에는 MAC address로 매핑합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;송신 시 1번 NIC를 사용합니다.&lt;/p&gt;
&lt;p&gt;(NIC는 Network Interface Card로 흔히 랜카드나 랜 포트를 이야기합니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 3 = broadcast&lt;/h4&gt;
&lt;p&gt;모든 bond LAN port를 사용하여 데이터 전송합니다.(특별한 상황 외에는 사용가 빈도 극히 낮습니다.)&lt;/p&gt;
&lt;p&gt;Failover를 지원합니다.&lt;/p&gt;
&lt;p&gt;스위치 지원은 필요 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 4 = 802.3ad(Link Aggregation), LACP&lt;/h4&gt;
&lt;p&gt;IEEE 802.3ad 프로토콜을 이용하여 Aggregation을 작성합니다.&lt;/p&gt;
&lt;p&gt;대역폭이 상승하고 부하가 분산됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Failover를 지원합니다.&lt;/p&gt;
&lt;p&gt;802.3ad Dynamic Link aggregation (동적 링크 집계)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;switch에 aggregation group을 생성해야 합니다.&lt;/p&gt;
&lt;p&gt;switch가 802.3ad를 지원해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;같은 속도와 duplex 설정을 공유하는 aggregation group을 만들어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;송/수신은 active aggregator 안에서 수행되고, 연결 대수에 상관없이 그룹화에 따라 회선의 정책이 변경되어 무단절 인터넷 연결을 가능하게 만드는 방식입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 5 = balance-tlb(TLB)&lt;/h4&gt;
&lt;p&gt;적응형 송신 부하분산&lt;/p&gt;
&lt;p&gt;로드밸런싱으로 송신 시 부하가 낮은 LAN port를 사용합니다.&lt;/p&gt;
&lt;p&gt;스위치 지원은 필요 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mode 6 = balance-alb(ALB)&lt;/h4&gt;
&lt;p&gt;mode 4를 스위치가 지원하지 않을 때의 대안입니다.&lt;/p&gt;
&lt;p&gt;적응형 부하분산&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mode 5와 비슷합니다.&lt;/p&gt;
&lt;p&gt;송수신시 부하가 낮은 NIC를 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스위치 지원은 필요 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;거의 대부분 0 또는 1 mode를 사용합니다.&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가로 bond 설정에 있는 mii monitor interval에 대한 설명입니다.&lt;/p&gt;
&lt;p&gt;miimon = LAN port의 정상작동 확인 옵션(링크 모니터링), 밀리세컨드 단위, 기본값=0, 0=Failover를 비활성화합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;bond.JPG&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;399&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbxFnk/btqNMMTYVAu/Kkw1DSlKWAJNZj5EBAIjM1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbxFnk/btqNMMTYVAu/Kkw1DSlKWAJNZj5EBAIjM1/img.jpg&quot; data-alt=&quot;ubuntu bonding&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbxFnk/btqNMMTYVAu/Kkw1DSlKWAJNZj5EBAIjM1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbxFnk%2FbtqNMMTYVAu%2FKkw1DSlKWAJNZj5EBAIjM1%2Fimg.jpg&quot; data-filename=&quot;bond.JPG&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;399&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu bonding&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>active-backup</category>
      <category>bonding mode</category>
      <category>ethtool</category>
      <category>netplan bonding</category>
      <category>ubuntu 18.04 bonding</category>
      <category>본딩 모드</category>
      <category>우분투 본딩</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/20</guid>
      <comments>https://jayyjji.tistory.com/20#entry20comment</comments>
      <pubDate>Wed, 18 Nov 2020 22:14:38 +0900</pubDate>
    </item>
    <item>
      <title>우분투 멀티 IP - 다중 IP 설정</title>
      <link>https://jayyjji.tistory.com/19</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 멀티 IP - 다중 IP 설정&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Ubuntu18.04 multiple IP, 우분투 다중 IP&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번 스토리는 랜 포트 하나에 두 개 이상의 IP 주소를 사용할 수 있도록 설정하는 방법을 알아보겠습니다. 방법은 두 가지 압니다. netplan을 사용하는 방법과 interfaces를 사용하는 방법입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/netplan/01-netcfg.yaml&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;파일명은 다를 수도 있습니다. /etc/netpan/ 디렉터리 안에 있는 파일을 편집해 주면 됩니다. 매우 간단합니다.&lt;/p&gt;
&lt;p&gt;일단 현재 IP를 확인하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605619509855&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# ifconfig -a
ens33: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.231.129  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::20c:29ff:fe83:7e55  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
        ether 00:0c:29:83:7e:55  txqueuelen 1000  (Ethernet)
        RX packets 76  bytes 6062 (6.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 18  bytes 1381 (1.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.231.130  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::20c:29ff:fe83:7e5f  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
        ether 00:0c:29:83:7e:5f  txqueuelen 1000  (Ethernet)
        RX packets 161  bytes 44524 (44.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 117  bytes 15949 (15.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10&amp;lt;host&amp;gt;
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 92  bytes 7128 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 92  bytes 7128 (7.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ens33, ens34 디바이스와 해당 디바이스의 IP를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;여러 이유로 LAN port 한 개에 두 개의 IP를 사용하는 경우가 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ens33을 192.168.231.129 외에 192.168.231.131을 추가해 보겠습니다.&lt;/p&gt;
&lt;p&gt;vim /etc/netplan/01-netcfg.yaml을 입력해서 네트워크 설정을 편집하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605619781473&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# vim /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: yes
      addresses: [192.168.231.129/24, 192.168.231.131/24]
      gateway4: 192.168.231.2
      nameservers:
              addresses: [8.8.8.8, 8.8.4.4]
    ens34:
      dhcp4: yes
      addresses: [192.168.231.130/24]
      gateway4: 192.168.231.2
      nameservers:
              addresses: [8.8.8.8, 8.8.4.4]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;편집 후 netplan apply를 입력해서 적용시킵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605622579416&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# netplan apply
root@localhost:~# ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:83:7e:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.231.129/24 brd 192.168.231.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.231.131/24 brd 192.168.231.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe83:7e55/64 scope link
       valid_lft forever preferred_lft forever
3: ens34: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:83:7e:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.231.130/24 brd 192.168.231.255 scope global ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe83:7e5f/64 scope link
       valid_lft forever preferred_lft forever
root@localhost:~#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ens33에 두 개의 IP가 적용된 것이 확인됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/network/interfaces&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1605624682581&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@ubuntu:~$ vim /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown
auto lo
iface lo inet loopback

auto ens33
iface ens33 inet static
address 192.168.231.128
netmask 255.255.255.0
gateway 192.168.231.2
dns-nameservers 8.8.8.8

auto ens34
iface ens34 inet static
address 192.168.231.131
netmask 255.255.255.0
gateway 192.168.231.2
dns-nameservers 8.8.8.8&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;우분투의 예전 버전과 같이 interfaces를 사용하시려면 apt-get install ifupdown을 설치하셔야 합니다.&lt;/p&gt;
&lt;p&gt;interfaces 파일에 진입하시면 위의 내용은 입력하셔야 합니다.&lt;/p&gt;
&lt;p&gt;IP는 임의로 네트워크 상황에 맡게 입력하시고 중요한 것은 ens33에 IP를 추가하는 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605626698555&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;auto lo
iface lo inet loopback

auto ens33
iface ens33 inet static
address 192.168.231.128
netmask 255.255.255.0
gateway 192.168.231.2
dns-nameservers 8.8.8.8

auto ens33:0
iface ens33:0 inet static
address 192.168.231.129
netmask 255.255.255.0

auto ens34
iface ens34 inet static
address 192.168.231.131
netmask 255.255.255.0
gateway 192.168.231.2
dns-nameservers 8.8.8.8&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 ens33:0을 추가해 주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl restart networking.service를 사용해서 네트워크 서비스를 재시작합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605626820417&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@ubuntu:~# ifconfig -a
ens33: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.231.128  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::20c:29ff:fe83:7e55  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
        ether 00:0c:29:83:7e:55  txqueuelen 1000  (Ethernet)
        RX packets 767  bytes 68459 (68.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673  bytes 104418 (104.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.231.129  netmask 255.255.255.0  broadcast 192.168.231.255
        ether 00:0c:29:83:7e:55  txqueuelen 1000  (Ethernet)

ens34: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
        inet 192.168.231.131  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::20c:29ff:fe83:7e5f  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
        ether 00:0c:29:83:7e:5f  txqueuelen 1000  (Ethernet)
        RX packets 51  bytes 3380 (3.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 1666 (1.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10&amp;lt;host&amp;gt;
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 84  bytes 6084 (6.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 84  bytes 6084 (6.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@ubuntu:~# ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:83:7e:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.231.128/24 brd 192.168.231.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.231.129/24 brd 192.168.231.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe83:7e55/64 scope link
       valid_lft forever preferred_lft forever
3: ens34: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:83:7e:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.231.131/24 brd 192.168.231.255 scope global ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe83:7e5f/64 scope link
       valid_lft forever preferred_lft forever
root@ubuntu:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 적용된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;mutiIP.JPG&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;819&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx7ngN/btqNHpStrzX/u1JUK2eUwk5KbAWtfPNLqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx7ngN/btqNHpStrzX/u1JUK2eUwk5KbAWtfPNLqk/img.jpg&quot; data-alt=&quot;multiple IP&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx7ngN/btqNHpStrzX/u1JUK2eUwk5KbAWtfPNLqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx7ngN%2FbtqNHpStrzX%2Fu1JUK2eUwk5KbAWtfPNLqk%2Fimg.jpg&quot; data-filename=&quot;mutiIP.JPG&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;819&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;multiple IP&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>interfaces</category>
      <category>multiple IP</category>
      <category>netplan</category>
      <category>secondary IP</category>
      <category>다중 ip</category>
      <category>멀티 IP</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/19</guid>
      <comments>https://jayyjji.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 17 Nov 2020 23:51:34 +0900</pubDate>
    </item>
    <item>
      <title>우분투 아나콘다 설치 - 삭제 anaconda install</title>
      <link>https://jayyjji.tistory.com/18</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 아나콘다 설치 - 삭제 anaconda install&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Ubuntu18.04 Anaconda install 아나콘다 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번 포스트는 우분투 18.04 서버 환경에서 아나콘다를 설치하고 사용하는 방법을 설명드리겠습니다. 우선 아나콘다가 무엇인지 알아보겠습니다. 쉽게 말하면 가상 환경에서 라이브러리를 설치하고 환경을 관리하는 도구입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어 A라는 프로젝트를 진행하기 위해서 파이썬과 파이썬 패키지들을 설치하였습니다. A 프로젝트가 끝났습니다.&lt;/p&gt;
&lt;p&gt;다음 B라는 프로젝트가 시작되었는데, A에서 사용했던 파이썬 버전과 파이썬 패키지들을 사용하지 않거나 버전이 달라서 문제가 발생했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 기존의 프로젝트 A에서 사용했던 파이썬과 파이썬 패키지들을 삭제하고 다시 설치했습니다. 그렇게 B 프로젝트도 끝이 났습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 C 프로젝트를 시작하는데 A 프로젝트에서 사용했던 파이썬과 패키지들이 동일하게 필요합니다. 또 파이썬과 파이썬 패키지를 재설치해야 합니다. 번거롭고 정리가 안됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만, 아나콘다를 설치한다면 이런 문제를 줄일 수 있습니다. 아나콘다를 설치하면 A 프로젝트를 진행하기 위한 가상 환경을 만들 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그곳에 파이썬과 파이썬 패키지를 설치하게 되면 분리된 환경이 구축이 됩니다. A 프로젝트를 위한 파이썬 모임이 만들어지는 것입니다. 언제든지 접속해서 작업을 하고, 모임을 삭제할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;B 프로젝트를 위한 모임도 별도로 생성하여 작업이 가능합니다. 기존의 A를 위한 모임은 그대로 남아있어 언제든지 작업을 진행할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;요약하자면 아나콘다는 파이썬 버전별로 또는 파이썬에 사용되는 패키지별로 가상 환경을 구축할 수 있습니다. 그리고 그 환경을 관리할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아나콘다를 설치하기 전,&amp;nbsp; 파이썬을 버전별로 미리 설치하는 경우가 있습니다.&lt;/p&gt;
&lt;p&gt;아나콘다 파이썬 둘 중 하나만 설치하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;둘 다 설치하면 환경 변수의 문제가 발생하는 경우도 있습니다.&lt;/p&gt;
&lt;p&gt;아나콘다 사용하실 거면 별도로 로컬에 파이썬 설치 안 하시는 게 좋습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Anaconda install&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anaconda.com/products/individual&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.anaconda.com/products/individual&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1605526180959&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Anaconda | Individual Edition&quot; data-og-description=&quot;Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.&quot; data-og-host=&quot;www.anaconda.com&quot; data-og-source-url=&quot;https://www.anaconda.com/products/individual&quot; data-og-url=&quot;https://www.anaconda.com/products/individual&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2v9wl/hyIfpQnhwH/EpbJJkbupVh6dItwulf8JK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bsPKHy/hyIfnygZom/ozMA6aKWh5q2koDM21F0rK/img.jpg?width=796&amp;amp;height=418&amp;amp;face=0_0_796_418,https://scrap.kakaocdn.net/dn/bHEC0D/hyIfqaGBLz/wxarnDynhbSYdcxLWtuoK1/img.jpg?width=650&amp;amp;height=650&amp;amp;face=0_0_650_650&quot;&gt;&lt;a href=&quot;https://www.anaconda.com/products/individual&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.anaconda.com/products/individual&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2v9wl/hyIfpQnhwH/EpbJJkbupVh6dItwulf8JK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bsPKHy/hyIfnygZom/ozMA6aKWh5q2koDM21F0rK/img.jpg?width=796&amp;amp;height=418&amp;amp;face=0_0_796_418,https://scrap.kakaocdn.net/dn/bHEC0D/hyIfqaGBLz/wxarnDynhbSYdcxLWtuoK1/img.jpg?width=650&amp;amp;height=650&amp;amp;face=0_0_650_650');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Anaconda | Individual Edition&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.anaconda.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;위 사이트에서 Linux 64-bit(x86) Installer를 다운로드하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가로 다른 버전이나 old 버전이 필요하신 분은 아래 아카이브에서 받으시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://repo.anaconda.com/archive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;repo.anaconda.com/archive/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1605526441862&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Anaconda installer archive&quot; data-og-description=&quot;&quot; data-og-host=&quot;repo.anaconda.com&quot; data-og-source-url=&quot;https://repo.anaconda.com/archive/&quot; data-og-url=&quot;https://repo.anaconda.com/archive/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://repo.anaconda.com/archive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://repo.anaconda.com/archive/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Anaconda installer archive&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;repo.anaconda.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;다운로드가 완료되었으면, 설치를 진행합니다.&lt;/p&gt;
&lt;p&gt;저는 chmod로 사용권한을 부여했기 때문에 ./파일명으로 설치했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;bash 아니면 sh 를 사용하여 진행하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605526892249&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# ./Anaconda3-2020.07-Linux-x86_64.sh

Welcome to Anaconda3 2020.07

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;엔터키로 진행을 합니다.&lt;/p&gt;
&lt;p&gt;그다음 라이선스 수락을 yes 해주시면 설치경로를 지정할 수 있는 메뉴가 나옵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605527111515&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Do you accept the license terms? [yes|no]
[no] &amp;gt;&amp;gt;&amp;gt; yes

Anaconda3 will now be installed into this location:
/root/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/anaconda3] &amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;엔터를 눌러 기본 경로로 설치 진행하시거나 Ctrl-C를 눌러 설치를 취소하거나 타이핑으로 설치경로를 지정해 줄 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605527226644&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Preparing transaction: done
Executing transaction: done
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] &amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이제 설치가 완료 되었습니다.&amp;nbsp;yes를 입력해 anaconda 초기화를 진행하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605529107162&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no change     /root/anaconda3/condabin/conda
no change     /root/anaconda3/bin/conda
no change     /root/anaconda3/bin/conda-env
no change     /root/anaconda3/bin/activate
no change     /root/anaconda3/bin/deactivate
no change     /root/anaconda3/etc/profile.d/conda.sh
no change     /root/anaconda3/etc/fish/conf.d/conda.fish
no change     /root/anaconda3/shell/condabin/Conda.psm1
no change     /root/anaconda3/shell/condabin/conda-hook.ps1
no change     /root/anaconda3/lib/python3.8/site-packages/xontrib/conda.xsh
no change     /root/anaconda3/etc/profile.d/conda.csh
no change     /root/.bashrc
No action taken.
If you'd prefer that conda's base environment not be activated on startup,
   set the auto_activate_base parameter to false:

conda config --set auto_activate_base false

Thank you for installing Anaconda3!

===========================================================================

Working with Python and Jupyter notebooks is a breeze with PyCharm
Professional! Code completion, Notebook debugger, VCS support, SSH, Docker,
Databases, and more!

Get a free trial at: https://www.anaconda.com/pycharm

root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이제 마무리 작업으로 PATH를 설정해 주시면 됩니다.&lt;/p&gt;
&lt;p&gt;PATH 설정을 해야 어느 위치에서나 아나콘다 명령어를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vim /etc/bash.bashrc 파일을 편집합니다.&lt;/p&gt;
&lt;p&gt;bash.bashrc 파일 제일 하단에&lt;/p&gt;
&lt;p&gt;export PATH=/root/anaconda3/bin:$PATH 를 입력합니다.&lt;/p&gt;
&lt;p&gt;다른 경로로 설치하신 분들은 해당 경로를 입력하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 저장하시고 bash.bashrc파일을 빠져나오신 다음에&lt;/p&gt;
&lt;p&gt;source /etc/bash.bashrc 명령으로 업데이트를 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605529465623&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# vim /etc/bash.bashrc
root@localhost:~# source /etc/bash.bashrc
root@localhost:~# conda --version
conda 4.8.3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;버전까지 확인을 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 conda 명령어를 사용하여 파이썬 환경을 만들어 보겠습니다.&lt;/p&gt;
&lt;p&gt;anaconda의 기본 명령어는 conda 입니다.&lt;/p&gt;
&lt;p&gt;재부팅을 하시거나 conda activate 명령어를 사용하시면 아나콘다의 base 환경으로 진입할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605529584339&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# conda activate
(base) root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;기본 화면입니다.&lt;/p&gt;
&lt;p&gt;conda create -n 원하는 네이밍 python=원하는 파이썬 버전&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 python2.7 환경을 만들어보겠습니다.&lt;/p&gt;
&lt;p&gt;conda create -n py2.7 python=2.7&lt;/p&gt;
&lt;pre id=&quot;code_1605529782299&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(base) root@localhost:~# conda create -n py2.7 python=2.7
Collecting package metadata (current_repodata.json): done
Collecting package metadata (repodata.json): done
Solving environment: done


==&amp;gt; WARNING: A newer version of conda exists. &amp;lt;==
  current version: 4.8.3
  latest version: 4.9.2

Please update conda by running

    $ conda update -n base -c defaults conda



## Package Plan ##

  environment location: /root/anaconda3/envs/py2.7

  added / updated specs:
    - python=2.7


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    ca-certificates-2020.10.14 |                0         121 KB
    certifi-2020.6.20          |     pyhd3eb1b0_3         155 KB
    pip-19.3.1                 |           py27_0         1.7 MB
    python-2.7.18              |       h15b4118_1         9.9 MB
    setuptools-44.0.0          |           py27_0         512 KB
    sqlite-3.33.0              |       h62c20be_0         1.1 MB
    wheel-0.35.1               |     pyhd3eb1b0_0          38 KB
    ------------------------------------------------------------
                                           Total:        13.5 MB

The following NEW packages will be INSTALLED:

  _libgcc_mutex      pkgs/main/linux-64::_libgcc_mutex-0.1-main
  ca-certificates    pkgs/main/linux-64::ca-certificates-2020.10.14-0
  certifi            pkgs/main/noarch::certifi-2020.6.20-pyhd3eb1b0_3
  libedit            pkgs/main/linux-64::libedit-3.1.20191231-h14c3975_1
  libffi             pkgs/main/linux-64::libffi-3.3-he6710b0_2
  libgcc-ng          pkgs/main/linux-64::libgcc-ng-9.1.0-hdf63c60_0
  libstdcxx-ng       pkgs/main/linux-64::libstdcxx-ng-9.1.0-hdf63c60_0
  ncurses            pkgs/main/linux-64::ncurses-6.2-he6710b0_1
  pip                pkgs/main/linux-64::pip-19.3.1-py27_0
  python             pkgs/main/linux-64::python-2.7.18-h15b4118_1
  readline           pkgs/main/linux-64::readline-8.0-h7b6447c_0
  setuptools         pkgs/main/linux-64::setuptools-44.0.0-py27_0
  sqlite             pkgs/main/linux-64::sqlite-3.33.0-h62c20be_0
  tk                 pkgs/main/linux-64::tk-8.6.10-hbc83047_0
  wheel              pkgs/main/noarch::wheel-0.35.1-pyhd3eb1b0_0
  zlib               pkgs/main/linux-64::zlib-1.2.11-h7b6447c_3


Proceed ([y]/n)? y


Downloading and Extracting Packages
pip-19.3.1           | 1.7 MB    | ########################################### | 100%
ca-certificates-2020 | 121 KB    | ########################################### | 100%
sqlite-3.33.0        | 1.1 MB    | ########################################### | 100%
wheel-0.35.1         | 38 KB     | ########################################### | 100%
setuptools-44.0.0    | 512 KB    | ########################################### | 100%
python-2.7.18        | 9.9 MB    | ########################################### | 100%
certifi-2020.6.20    | 155 KB    | ########################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate py2.7
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(base) root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;정상적으로 만들어졌습니다.&lt;/p&gt;
&lt;p&gt;만들어진 환경을 사용하기 위해서, 아래 명령어를 입력하라고 친절하게 나옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;conda activate py2.7 확인해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605529872006&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(base) root@localhost:~# conda activate py2.7
(py2.7) root@localhost:~# python
Python 2.7.18 |Anaconda, Inc.| (default, Apr 23 2020, 22:42:48)
[GCC 7.3.0] on linux2
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;명령어 프롬프트 앞의 base가 방금 만든 py2.7로 변경되면서 진입되었습니다.&lt;/p&gt;
&lt;p&gt;파이썬을 입력해보니 python 2.7.18 버전으로 진입했습니다.&lt;/p&gt;
&lt;p&gt;이제 파이썬 2.7에서 작업할 수 있는 분리된 작업환경이 만들어졌습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 환경에서 빠져나오려면&lt;/p&gt;
&lt;p&gt;conda deactivate 명령어를 입력하시면 됩니다. 물론 위의 화면이라면 Ctrl-z를 사용해서 파이썬에서 빠져나온 다음에 입력하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605530036306&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(py2.7) root@localhost:~# conda deactivate
(base) root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 다시 base 환경으로 빠져나왔습니다.&lt;/p&gt;
&lt;p&gt;간단하게 --help를 사용해서 명령어들을 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605530176215&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(base) root@localhost:~# conda --help
usage: conda [-h] [-V] command ...

conda is a tool for managing and deploying applications, environments and packages.

Options:

positional arguments:
  command
    clean        Remove unused packages and caches.
    config       Modify configuration values in .condarc. This is modeled after the
                 git config command. Writes to the user .condarc file
                 (/root/.condarc) by default.
    create       Create a new conda environment from a list of specified packages.
    help         Displays a list of available conda commands and their help strings.
    info         Display information about current conda install.
    init         Initialize conda for shell interaction. [Experimental]
    install      Installs a list of packages into a specified conda environment.
    list         List linked packages in a conda environment.
    package      Low-level conda package utility. (EXPERIMENTAL)
    remove       Remove a list of packages from a specified conda environment.
    uninstall    Alias for conda remove.
    run          Run an executable in a conda environment. [Experimental]
    search       Search for packages and display associated information. The input
                 is a MatchSpec, a query language for conda packages. See examples
                 below.
    update       Updates conda packages to the latest compatible version.
    upgrade      Alias for conda update.

optional arguments:
  -h, --help     Show this help message and exit.
  -V, --version  Show the conda version number and exit.

conda commands available from other packages:
  build
  convert
  debug
  develop
  env
  index
  inspect
  metapackage
  render
  server
  skeleton
  verify
(base) root@localhost:~# conda env list
# conda environments:
#
base                  *  /root/anaconda3
py2.7                    /root/anaconda3/envs/py2.7

(base) root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;마지막에 conda env list라는 명령어로 현재 만들어진 환경 리스트를 확인했습니다.&lt;/p&gt;
&lt;p&gt;각 명령어 뒤에 --help를 붙이시면 세분화된 명령어도 보실 수 있습니다.&lt;/p&gt;
&lt;p&gt;ex) conda create --help&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 식으로 확인할 수 있습니다. 자주 사용하는 환경을 만들고, 지우고 목록 확인하는 명령어만 숙지해 두신다면 크게 어려움 없이 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 만들어진 환경에서 설치한 pip 패키지는 base의 pip 패키지와는 파이썬 버전도 다를 수 있습니다.&lt;/p&gt;
&lt;p&gt;분리된 환경에서 만들어진 파이썬 환경이기 때문에 현재 환경에서 설치한 pip패키지와 base 환경을 착각하시면 안 됩니다. 아래 사진에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;881&quot; data-filename=&quot;pip.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W7vng/btqNzo7MwJo/E7XA5qi9zp7BFnEg5v9AJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W7vng/btqNzo7MwJo/E7XA5qi9zp7BFnEg5v9AJk/img.jpg&quot; data-alt=&quot;pip list&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W7vng/btqNzo7MwJo/E7XA5qi9zp7BFnEg5v9AJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW7vng%2FbtqNzo7MwJo%2FE7XA5qi9zp7BFnEg5v9AJk%2Fimg.jpg&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;881&quot; data-filename=&quot;pip.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pip list&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Anaconda remove&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;rm -rf ~/anaconda3&amp;nbsp; - 아나콘다 디렉터리 삭제&lt;/p&gt;
&lt;p&gt;rm -rf ~/.anaconda_backup - 아나콘다 백업 디렉터리 삭제&lt;/p&gt;
&lt;p&gt;sudo vim /etc/bash.bashrc # anaconda - PATH 삭제&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;conda install anaconda-clean&lt;/p&gt;
&lt;p&gt;anaconda-clean --yes&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>Anaconda</category>
      <category>anaconda uninstll</category>
      <category>conda</category>
      <category>pip</category>
      <category>python</category>
      <category>ubuntu anaconda</category>
      <category>아나콘다 삭제</category>
      <category>아나콘다 설치</category>
      <category>우분투 아나콘다</category>
      <category>우분투 콘다</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/18</guid>
      <comments>https://jayyjji.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 16 Nov 2020 22:08:09 +0900</pubDate>
    </item>
    <item>
      <title>우분투 파이썬 버전 변경 - alternatives</title>
      <link>https://jayyjji.tistory.com/17</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 파이썬 버전 변경 - alternatives&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ubuntu 18.04 Python, gcc, java alternatives&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번에는 지난 스토리에서 설치했던 파이썬, gcc와 같은 컴파일러나 애플리케이션의 버전을 관리하는 데 사용하는 update-alternatives라는 명령어를 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;많은 사용자들이 우분투, 센트 OS 등 리눅스 OS를 사용하면서 애플리케이션의 버전이 맞지 않아서, 애를 먹는 경우가 종종 발생합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 경우에 다양한 버전을 설치해서 사용할 때 필요한 버전으로 우선순위를 변경 및 삭제하는 방법을 설명드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Alternatives&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;alternatives는 기본적으로 심볼릭 링크를 관리해주는 명령어입니다. 심볼릭 링크란 A라는 파일에 123이라는 파이을 링크 해놓으면 A를 실행하게 되면 123을 실행하는 것과 같은 것이죠.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A라는 디렉터리나 파일에 링크를 걸어주는 것입니다. 파이썬을 예로 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지난 스토리에서 우분투 18.04.4에 기본으로 설치되어있는 파이썬 3.6.9 버전에 추가로 파이썬 3.8.0 버전을 설치했습니다. alternatives에 등록하기 위해서는 python이 어느 경로에 설치되어있는지 확인해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지난 스토리에는 whereis를 사용했지만 이번에는 which 명령어를 사용하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간단하게 whereis + 명령어를 사용하게 되면, 실행 파일 위치, 소스 위치, 라이브러리 위치, 매뉴얼 위치 등의 경로가 검색되지만 which + 명령어를 사용하게 되면 명령어의 위치만 딱 검색됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;현재 이 시스템에서 python을 실행했을 때, python3.8.0이 실행되게 하고 싶습니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;하지만 지금 현재는 python 명령어를 실행했을 때 아무것도 되지 않습니다. 1차적으로는 python이 설치되어 있지 않습니다. 또는 심볼릭 링크가 걸려있지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보통 파이썬 2 버전이 설치되어있으면 파이썬 2 버전이 심볼릭 링크가 걸려있어 python이라고 명령어를 입력했을 때 파이썬 2 버전이 실행되는 게 일반적입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 현재 시스템에는 파이썬 2가 설치되어있지 않은 것이 분명합니다.&lt;/p&gt;
&lt;p&gt;그래서 python3을 실행해 보았습니다. python3.6.9가 실행되었습니다. 저는 python 3.8을 사용해야 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 지난 스토리에서 파이썬 3.8을 설치했습니다. python3.8이라고 실행하면 python3.8을 사용할 수 있지만, 저는 python에 python3.8을 심볼릭 링크로 연결해서 지금 현재 우분투 18.04.4의 기본 파이썬이 3.8로 작동하기를 원합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;궁극적으로 python이라고 실행했을 때 python3.8.0이 실행되어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 서론이 길었습니다. 그만큼 방법은 간단하니 설명이 길어진다고 보시면 됩니다.&lt;/p&gt;
&lt;p&gt;python3.8의 경로를 확인하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605406661909&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# whereis python3.8
python3: /usr/bin/python3 /usr/bin/python3.8 /usr/bin/python3.6m /usr/bin/python3.6 /usr/lib/python3.7 /usr/lib/python3 /usr/lib/python3.8 /usr/lib/python3.6 /etc/python3 /etc/python3.8 /etc/python3.6 /usr/local/lib/python3.8 /usr/local/lib/python3.6 /usr/share/python3 /usr/share/man/man1/python3.1.gz
root@localhost:~# which python3.8
/usr/bin/python3.8
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;whereis 와 which의 차이를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬 3.8은 /usr/bin/python3.8 디렉터리에 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605408430092&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# python

Command 'python' not found, but can be installed with:

apt install python3
apt install python
apt install python-minimal

You also have python3 installed, you can run 'python3' instead.

root@localhost:~# python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위의 코드 블록과 같이 python에는 심볼릭 링크가 걸려있지 않습니다.&lt;/p&gt;
&lt;p&gt;python3은 3.6.9 우분투 18.04.4에서 업데이트할 수 있는 최고 버전으로 설치되어있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;python3.8 버전도 실행해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605408521551&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# python3.8
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;python3.8이 실행되는 것도 확인했고, 경로도 확인했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;update-alternatives --config&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1605408939222&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# update-alternatives --config python
update-alternatives: error: no alternatives for python
root@localhost:/usr/bin# update-alternatives --config python3
update-alternatives: error: no alternatives for python3
root@localhost:/usr/bin#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;아무것도 등록된 것이 없습니다. error가 발생하는 것이 당연합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;update-alternatives --install&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;이제 alternatives를 등록해야 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605409370960&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python (python) in auto mode
root@localhost:/usr/bin# update-alternatives --config python
There is only one alternative in link group python (providing /usr/bin/python): /usr/bin/python3.8
Nothing to configure.
root@localhost:/usr/bin# python
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;맨 윗줄 명령어를 보겠습니다.&lt;/p&gt;
&lt;p&gt;update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;맨 끝에 숫자 1이 중요합니다. 우선순위의 번호를 달아 주는 것입니다.&lt;/p&gt;
&lt;p&gt;/usr/bin/python에 심볼릭 링크된 python명령어를 /usr/bin/python3.8로 대체하겠다는 뜻입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;update-alternatives --config python를 입력합니다.&lt;/p&gt;
&lt;p&gt;1개의 대체 링크만 존재하기 때문에 configure가 없다고 나옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 python을 실행하게 되면 python3.8.0이 실행되는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;여기에 기존 python3.6.9를 등록하고 config를 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605410416275&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode

root@localhost:/usr/bin# python
Python 3.6.9 (default, Nov  7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;
[8]+  Stopped                 python
root@localhost:/usr/bin# update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.6   2         auto mode
  1            /usr/bin/python3.6   2         manual mode
  2            /usr/bin/python3.8   1         manual mode

Press &amp;lt;enter&amp;gt; to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python (python) in manual mode
root@localhost:/usr/bin# python
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;python3.6을 추가로 등록했습니다. 우선수위는 2로 주었습니다.&lt;/p&gt;
&lt;p&gt;등록 이후 python을 실행하면 python3.6.9가 실행되는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다시 python3.8을 python 심볼릭 링크에 등록하고 싶다면, config에서 python3.8을 선택해 주면 됩니다.&lt;/p&gt;
&lt;p&gt;추가적으로 auto 모드는 우선순위에 따라 결정됩니다. 우선순위는 1보다 2가 우선이며 2보다는 3이 우선입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;java와 gcc도 이런 식으로 update-alternatives 명령어를 사용해서 현재 시스템에서 사용할 버전을 선택할 수 있습니다.&lt;/p&gt;
&lt;p&gt;마지막으로 config에서 삭제하는 방법도 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;update-alternatives --remove&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1605410849530&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# update-alternatives --remove python /usr/bin/python3.8
root@localhost:/usr/bin# update-alternatives --install /usr/bin/python python /usr/bin/python3.8 10
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python (python) in auto mode
root@localhost:/usr/bin# update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.8   10        auto mode
  1            /usr/bin/python3.6   2         manual mode
  2            /usr/bin/python3.8   10        manual mode

Press &amp;lt;enter&amp;gt; to keep the current choice[*], or type selection number:
[13]+  Stopped                 update-alternatives --config python
root@localhost:/usr/bin# update-alternatives --remove python /usr/bin/python3.8
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode
root@localhost:/usr/bin# update-alternatives --config python
There is only one alternative in link group python (providing /usr/bin/python): /usr/bin/python3.6
Nothing to configure.
root@localhost:/usr/bin# python
Python 3.6.9 (default, Nov  7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;먼저 python3.8의 우선순위를 10으로 변경했습니다 auto mode가 python 3.8로 변경되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;--remove 옵션과 심볼릭 링크가 걸린 명령어, 그리고 삭제할 버전의 경로를 뒤에 붙였습니다.&lt;/p&gt;
&lt;p&gt;python 명령어를 실행했을 때 python3.6.9가 실행되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이해하게 되면 응용은 쉽습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;alternatives.JPG&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;216&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qP2Ef/btqNpGHZhlz/UQT1WFB42AnrwvuNR7J4M1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qP2Ef/btqNpGHZhlz/UQT1WFB42AnrwvuNR7J4M1/img.jpg&quot; data-alt=&quot;update-alternatives&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qP2Ef/btqNpGHZhlz/UQT1WFB42AnrwvuNR7J4M1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqP2Ef%2FbtqNpGHZhlz%2FUQT1WFB42AnrwvuNR7J4M1%2Fimg.jpg&quot; data-filename=&quot;alternatives.JPG&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;216&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;update-alternatives&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>config</category>
      <category>gcc 버전 변경</category>
      <category>install</category>
      <category>remove</category>
      <category>update-alternatives</category>
      <category>자바 버전 변경</category>
      <category>파이썬 버전 변경</category>
      <category>파이썬 우선순위</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/17</guid>
      <comments>https://jayyjji.tistory.com/17#entry17comment</comments>
      <pubDate>Sun, 15 Nov 2020 12:40:32 +0900</pubDate>
    </item>
    <item>
      <title>Python 3 install - 우분투 파이썬 3 설치</title>
      <link>https://jayyjji.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Python 3 install - 우분투 파이썬 3 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;ubuntu 18.04 Python install &lt;/b&gt;이번 스토리는 파이썬 설치하는 방법입니다.&lt;/p&gt;
&lt;p&gt;우선 파이썬은 프로그래밍 언어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;세계적으로 널리 사용되는 프로그래밍 언어로 간단하고 배우기 쉬운 구문으로 초보 개발자와 고급 개발자 사이에서 인기가 높습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;독립적인 플랫폼으로 대화형 언어입니다. 개발자들에 따라서 파이썬 2 버전을 사용하기도, 파이썬 3 버전을 사용하기도 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Python install&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;파이썬을 설치하는 법을 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;우분투에는 기본적으로 파이썬이 설치되어있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605358415919&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# whereis python
python: /usr/bin/python3.6m /usr/bin/python3.6 /usr/lib/python3.7 /usr/lib/python2.7 /usr/lib/python3.8 /usr/lib/python3.6 /etc/python3.6 /usr/local/lib/python3.6 /usr/share/python
root@localhost:~# python

Command 'python' not found, but can be installed with:

apt install python3
apt install python
apt install python-minimal

You also have python3 installed, you can run 'python3' instead.

root@localhost:~# python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;우선 whereis 명령어로 python이 설치된 폴더의 위치를 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;/usr/bin 디렉터리 안에 있는 버전을 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;python 명령어를 입력했을 때 기본적으로 파이썬의 2 버전으로 실행됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 시스템은 파이썬 3.6 버전이 설치되어 있는 것이 보입니다.&lt;/p&gt;
&lt;p&gt;그렇다면 python3을 입력해봅니다.&lt;/p&gt;
&lt;p&gt;python3.6.9 버전이 실행되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 파이썬 3.8을 설치해 보겠습니다. 현재 2020-11-14 기준으로 python3는 3.9.0까지 버전이 업데이트되어있습니다. 지금 제가 스토리에 사용하는 우분투는 18.04.4 버전입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 우분투 버전에서는 기본 레포지터리로 apt-get install python3라고 인스톨을 실행해도 python3.6.9 버전 이상으로 업데이트되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 레포지터리를 추가해서 python3.8을 설치해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;항상 말씀드리지만 내부 네트워크가 아닌 외부 네트워크망을 사용할 수 있는 환경이 된다면, 레포지터리 추가로 설치하시는 게 제일 깔끔하며 의존성 파일들을 신경 쓰지 않아도 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자동으로 필요한 파일과 패키지를 설치해주기 때문입니다. 외부망이란 쉽게 말하면 인터넷이 되냐 안되냐는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;당연히 설치를 진행할 때는 관리자 권한이 있어야겠습니다.&lt;/p&gt;
&lt;p&gt;sudo 권한이 있어야 apt 관리자를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 습관적인 명령어입니다.&lt;/p&gt;
&lt;p&gt;apt-get update 패키지 목록을 최신으로 업데이트시켜줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그다음은 레포지터리를 추가할 수 있는 패키지를 설치해줍니다.&lt;/p&gt;
&lt;p&gt;apt-get install software-properties-commom 해당 패키지가 설치되었다면,&lt;/p&gt;
&lt;p&gt;apt-add-repository를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;요즘은 apt-get 대신 apt를 많이 사용하시는데 apt가 좀 더 세련됐다고 생각하시면 될 것 같습니다. 아직까지는 크게 차이는 없는 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬 3의 레포지터리를 추가합니다.&lt;/p&gt;
&lt;p&gt;apt-add-repository ppa:deadsnakes/ppa&lt;/p&gt;
&lt;pre id=&quot;code_1605360973979&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# apt-get install software-properties-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  python3-software-properties
The following packages will be upgraded:
  python3-software-properties software-properties-common
2 upgraded, 0 newly installed, 0 to remove and 165 not upgraded.
Need to get 33.9 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 software-properties-common all 0.96.24.32.14 [10.1 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python3-software-properties all 0.96.24.32.14 [23.9 kB]
Fetched 33.9 kB in 1s (25.9 kB/s)
(Reading database ... 68378 files and directories currently installed.)
Preparing to unpack .../software-properties-common_0.96.24.32.14_all.deb ...
Unpacking software-properties-common (0.96.24.32.14) over (0.96.24.32.12) ...
Preparing to unpack .../python3-software-properties_0.96.24.32.14_all.deb ...
Unpacking python3-software-properties (0.96.24.32.14) over (0.96.24.32.12) ...
Setting up python3-software-properties (0.96.24.32.14) ...
Setting up software-properties-common (0.96.24.32.14) ...
Processing triggers for dbus (1.12.2-1ubuntu1.1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

root@localhost:/usr/bin# apt-add-repository ppa:deadsnakes/ppa&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;엔터로 진행 또는 Ctrl-c로 취소라는 메시지가 출력되면 엔터로 진행합니다.&lt;/p&gt;
&lt;p&gt;그다음 명령어 프롬프트가 활성화되면, 당연히 등록한 레포지터리 목록을 업데이트해야겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;apt-get update 명령어를 사용합니다.&lt;/p&gt;
&lt;p&gt;모든 게 정상적으로 진행되었다면, 이제 파이썬 3.8을 설치할 수 있습니다.&lt;/p&gt;
&lt;p&gt;apt-get install python3.8 설치를 진행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605361604528&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# apt-get install python3.8
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libpython3.8-minimal libpython3.8-stdlib python3.8-minimal
Suggested packages:
  python3.8-venv python3.8-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython3.8-minimal libpython3.8-stdlib python3.8 python3.8-minimal
0 upgraded, 4 newly installed, 0 to remove and 165 not upgraded.
Need to get 4,551 kB of archives.
After this operation, 18.5 MB of additional disk space will be used.
Do you want to continue? [Y/n]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;y를 눌러서 진행해 줍니다. -y 옵션을 명령어 줄에 추가해서 자동으로 y를 선택할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;apt-get install -y python3.8 이렇게 사용하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 설치가 완료되었으면 버전을 확인해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605361823082&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/usr/bin# python3 --version
Python 3.6.9
root@localhost:/usr/bin# python3.8 --version
Python 3.8.0
root@localhost:/usr/bin# python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;
[10]+  Stopped                 python3
root@localhost:/usr/bin# python3.8
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt;
[11]+  Stopped                 python3.8
root@localhost:/usr/bin# whereis python
python: /usr/bin/python3.8 /usr/bin/python3.6m /usr/bin/python3.6 /usr/lib/python3.7 /usr/lib/python2.7 /usr/lib/python3.8 /usr/lib/python3.6 /etc/python3.8 /etc/python3.6 /usr/local/lib/python3.8 /usr/local/lib/python3.6 /usr/share/python
root@localhost:/usr/bin#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;--version 옵션으로 기본 python3의 버전과 추가로 설치된 python3.8의 버전을 확인했습니다.&lt;/p&gt;
&lt;p&gt;그리고 실행도 시켜보았습니다. 빠져나오실 때는 Ctrl+z키 사용하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;whereis python으로 위치를 확인했을 때&lt;/p&gt;
&lt;p&gt;/usr/bin/python3.8이 추가된 것이 확인됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 python 3.8을 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;89&quot; data-filename=&quot;python3.8.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csZkgd/btqNoRwcjQb/wklpWHSHTVKKfKGuvCRZ31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csZkgd/btqNoRwcjQb/wklpWHSHTVKKfKGuvCRZ31/img.jpg&quot; data-alt=&quot;python 3.8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csZkgd/btqNoRwcjQb/wklpWHSHTVKKfKGuvCRZ31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsZkgd%2FbtqNoRwcjQb%2FwklpWHSHTVKKfKGuvCRZ31%2Fimg.jpg&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;89&quot; data-filename=&quot;python3.8.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;python 3.8&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>python</category>
      <category>python 3.8 install</category>
      <category>python3</category>
      <category>레포지터리</category>
      <category>파이썬 3.7</category>
      <category>파이썬 3.8</category>
      <category>파이썬 3.9</category>
      <category>파이썬 설치</category>
      <category>파이썬3</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/16</guid>
      <comments>https://jayyjji.tistory.com/16#entry16comment</comments>
      <pubDate>Sat, 14 Nov 2020 23:07:59 +0900</pubDate>
    </item>
    <item>
      <title>우분투 커널 확인 - 변경 및 삭제</title>
      <link>https://jayyjji.tistory.com/15</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 커널 확인 - 변경 및 삭제&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Ubuntu kernel check, remove, uninstall, purge&lt;/b&gt; 이번 스토리는 linux OS 중에서 우분투에 설치된 불 필요한 커널을 제거해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;커널 업데이트 이후 특정 애플리케이션이 실행이 안된다거나, 엔비디아 드라이버가 올라오지 않을 때 현재 사용하는 변경된 커널을 삭제하는 방법을 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 커널이란 OS의 기능에서 가장 중요한 구성요소입니다. OS의 핵심이라고 보시면 됩니다. 사람을 운영체제로 비유하면 커널은 뇌라고 생각하시면 됩니다. OS가 출시되면 커널은 지속적으로 업데이트가 진행이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 커널이 업데이트됨에 따라 사용하는 애플리케이션들도 버전 업데이트가 진행돼야 하는데 그렇지 못하면, 높은 커널의 OS에서 낮은 버전의 애플리케이션이 실행되지 않거나 드라이버가 올라오지 않는 경우가 생깁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 이유로 OS 커널과 애플리케이션 및 드라이버의 최적화 버전을 찾아서 서버를 구축합니다. 최신 버전이라고 다 좋은 것은 아니라는 이야기가 이래서 나오는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;커널은 소프트웨어뿐만 아니라 하드웨어 버전과도 관련성이 있기 때문에 복잡해집니다. 예를 들어 최신 OS가 과거 하드웨어를 지원하지 않는 것처럼 말입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;반대로 최신 하드웨어에 과거의 OS를 설치할 수 없는 것도 좋은 예가 될 수 있습니다. 서버 OS는 집에서 쓰는 클라이언트 OS 즉 windows10 과는 다릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어떠한 목적으로 사용할 것인가에 따라 최적화된 소프트웨어를 설치해야 합니다. 그리고 그에 맞는 OS 커널 버전을 사용해야겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;우분투 커널 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;서론이 너무 길었습니다.&lt;/p&gt;
&lt;p&gt;우선 현재 우분투의 커널 버전을 uname 명령어를 사용해서 확인해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605270681916&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# uname
Linux
root@localhost:~# uname --help
Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type (non-portable)
  -i, --hardware-platform  print the hardware platform (non-portable)
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit

GNU coreutils online help: &amp;lt;http://www.gnu.org/software/coreutils/&amp;gt;
Full documentation at: &amp;lt;http://www.gnu.org/software/coreutils/uname&amp;gt;
or available locally via: info '(coreutils) uname invocation'
root@localhost:~# uname -a
Linux localhost 4.15.0-76-generic #86-Ubuntu SMP Fri Jan 17 17:24:28 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@localhost:~# uname -r
4.15.0-76-generic
root@localhost:~# uname -sr
Linux 4.15.0-76-generic
root@localhost:~# uname -msr
Linux 4.15.0-76-generic x86_64

root@localhost:~# cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION=&quot;Ubuntu 18.04.4 LTS&quot;
NAME=&quot;Ubuntu&quot;
VERSION=&quot;18.04.4 LTS (Bionic Beaver)&quot;
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=&quot;Ubuntu 18.04.4 LTS&quot;
VERSION_ID=&quot;18.04&quot;
HOME_URL=&quot;https://www.ubuntu.com/&quot;
SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;
BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;
PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;저는 uname -a를 통해서 커널 버전을 확인합니다.&lt;/p&gt;
&lt;p&gt;uname -r, uname -sr, uname -msr 사용하시는 분들마다 다 제각각입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구글링 해보면 uname -sr을 사용하시는 분들이 많아 보입니다.&lt;/p&gt;
&lt;p&gt;uname 아래 cat /etc/*release를 통해서 OS 버전도 출력해 보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 OS에 설치되어있는 커널 버전을 확인해 보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;dpkg -l | grep linux-image&lt;/h3&gt;
&lt;pre id=&quot;code_1605271651512&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/# dpkg -l | grep -i linux-image
ii  linux-image-4.15.0-76-generic         4.15.0-76.86                                    amd64        Signed kernel image generic
ii  linux-image-5.4.0-53-generic          5.4.0-53.59~18.04.1                             amd64        Signed kernel image generic
ii  linux-image-generic                   4.15.0.76.78                                    amd64        Generic Linux kernel image
root@localhost:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4.15.0 버전과 5.4.0 버전이 설치되어있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;이제 불 필요하거나 설치 후 이상이 생겼다면 버전을 삭제하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;우분투 커널 삭제&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;혹시 모를 상황에 대비해서 중요 데이터는 백업을 꼭 하시길 바랍니다. 커널 패닉은 정말 예상치 못한 상황에 발생하기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;uname으로 확인한 현재 구동 중인 커널 버전을 삭제하면 큰일 나겠습니다. 꼭 현재 사용 중인 버전을 확인하고 커널 삭제를 진행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;apt-get purge linux-image-버전&lt;/h3&gt;
&lt;p&gt;커널 삭제는 의외로 간단합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605271892192&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/# apt-get purge linux-image-
linux-image-4.15.0-76-generic  linux-image-generic
linux-image-5.4.0-53-generic&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;현재 시스템은 4.15.0 커널로 구동되고 있기 때문에 5.4.0을 삭제하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605271979993&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/# apt-get purge linux-image-5.4.0-53-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  linux-image-5.4.0-53-generic*
0 upgraded, 0 newly installed, 1 to remove and 167 not upgraded.
After this operation, 9,406 kB disk space will be freed.
Do you want to continue? [Y/n]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;y를 눌러서 삭제를 진행했다면, 다시 dpkg -l | grep linux-image을 사용해서 버전 목록을 확인해 봅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605272029481&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/# dpkg -l | grep -i linux-image
ii  linux-image-4.15.0-76-generic         4.15.0-76.86                                    amd64        Signed kernel image generic
ii  linux-image-generic                   4.15.0.76.78                                    amd64        Generic Linux kernel image
root@localhost:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;linux-image-5.4.0-53-generic 이 삭제된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;커널 삭제 이후, 커널 이미지를 검색했을 때 extra 버전이 남이 있을 수 있습니다.&lt;/p&gt;
&lt;p&gt;apt-get autoremove 명령어로 삭제하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605272196702&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 167 not upgraded.
root@localhost:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;현재 이 시스템은 제가 테스트로 linux-image-5.4.0-53-generic 버전을 설치했기 때문에 별도로 extra 버전은 남아있지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모든 삭제가 진행되면, 부트로더를 업데이트하시면 됩니다.&lt;/p&gt;
&lt;p&gt;update-grub&lt;/p&gt;
&lt;pre id=&quot;code_1605272280989&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:/# update-grub
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-76-generic
Found initrd image: /boot/initrd.img-4.15.0-76-generic
done
root@localhost:/#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;저는 root 계정이기 때문에 sudo 권한을 가지고 있습니다. 제가 별도로 명령어 앞에 sudo를 붙이지 않아도 root 계정이라는 것을 확인하시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;kernel.JPG&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;98&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btzBtF/btqNqCYtHB1/SQeWa0gSTNhwLwu1kAS2v1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btzBtF/btqNqCYtHB1/SQeWa0gSTNhwLwu1kAS2v1/img.jpg&quot; data-alt=&quot;kernel check&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btzBtF/btqNqCYtHB1/SQeWa0gSTNhwLwu1kAS2v1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtzBtF%2FbtqNqCYtHB1%2FSQeWa0gSTNhwLwu1kAS2v1%2Fimg.jpg&quot; data-filename=&quot;kernel.JPG&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;98&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kernel check&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>dpkg</category>
      <category>grub</category>
      <category>kernel</category>
      <category>purge</category>
      <category>uname</category>
      <category>커널 삭제</category>
      <category>커널 확인</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/15</guid>
      <comments>https://jayyjji.tistory.com/15#entry15comment</comments>
      <pubDate>Fri, 13 Nov 2020 22:04:20 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 OS 점검 - 상태 파악 monitoring</title>
      <link>https://jayyjji.tistory.com/14</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;리눅스 OS 점검 - 상태 파악 monitoring&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Linux 문제 해결, 상태 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;리눅스 OS를 사용하는 시스템에 문제가 발생했다면, 어떤 부분을 우선적으로 확인해야 할까요? 이번 스토리는 지난 시간에 이어서 시스템의 상태, 활동을 확인할 수 있는 명령어에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 이번 스토리부터는 코드 블록을 사용하겠습니다. 저는 캡처가 편하다고 생각해서 계속 사용했지만, 제 스토리에서 명령어나 스크립트를 복사해서 사용하시는 분들은 코드 블록이 편하겠다 싶어서 이번 스토리부터 코드 블록을 사용하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 스토리에서는 간단한 linux OS 문제점 파악과 지난 스토리에서 설치했던 sysstat를 이용하여, sar와 iostat를 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;uptime&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;일단 업타임(uptime)을 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;리눅스 명령어에서 uptime은 접속된 사용자와 사용 중인 머신의 CPU 부하 상태를 볼 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605181957707&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# uptime
 20:50:50 up 1 min,  2 users,  load average: 0.16, 0.11, 0.04
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;맨 앞줄부터 현재시간과 부팅 이후 시간, 사용자의 수, CPU load average 1 min, 5 min, 15 min 순입니다.&lt;/p&gt;
&lt;p&gt;CPU 로드는 0에서 1까지의 범위입니다. 1이면 100% 사용이라고 보시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;옵션을 한 번 알아보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605182234404&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# uptime --help

Usage:
 uptime [options]

Options:
 -p, --pretty   show uptime in pretty format
 -h, --help     display this help and exit
 -s, --since    system up since
 -V, --version  output version information and exit

For more details see uptime(1).
root@localhost:~# uptime -p
up 8 minutes
root@localhost:~# uptime -s
2020-11-12 20:49:09
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;옵션은 많지 않습니다.&lt;/p&gt;
&lt;p&gt;-p와 -s를 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;-p는 시스템의 부팅 이후 현재까지 운영된 시간입니다. pretty time입니다.&lt;/p&gt;
&lt;p&gt;-s는 시스템이 부팅된 시간입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간단하게 해당 서버가 며칠 동안 시스템이 운용되고 있으며, 현재 접속된 사용자의 수, 최근 시간별 CPU의 부하율을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;dmesg | tail&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1605182570518&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# dmesg | tail
[    5.507032] audit: type=1400 audit(1605181754.410:6): apparmor=&quot;STATUS&quot; operation=&quot;profile_load&quot; profile=&quot;unconfined&quot; name=&quot;/usr/bin/lxc-start&quot; pid=724 comm=&quot;apparmor_parser&quot;
[    5.513618] audit: type=1400 audit(1605181754.418:7): apparmor=&quot;STATUS&quot; operation=&quot;profile_load&quot; profile=&quot;unconfined&quot; name=&quot;/sbin/dhclient&quot; pid=719 comm=&quot;apparmor_parser&quot;
[    5.513619] audit: type=1400 audit(1605181754.418:8): apparmor=&quot;STATUS&quot; operation=&quot;profile_load&quot; profile=&quot;unconfined&quot; name=&quot;/usr/lib/NetworkManager/nm-dhcp-client.action&quot; pid=719 comm=&quot;apparmor_parser&quot;
[    5.513620] audit: type=1400 audit(1605181754.418:9): apparmor=&quot;STATUS&quot; operation=&quot;profile_load&quot; profile=&quot;unconfined&quot; name=&quot;/usr/lib/NetworkManager/nm-dhcp-helper&quot; pid=719 comm=&quot;apparmor_parser&quot;
[    5.513621] audit: type=1400 audit(1605181754.418:10): apparmor=&quot;STATUS&quot; operation=&quot;profile_load&quot; profile=&quot;unconfined&quot; name=&quot;/usr/lib/connman/scripts/dhclient-script&quot; pid=719 comm=&quot;apparmor_parser&quot;
[    5.515808] audit: type=1400 audit(1605181754.418:11): apparmor=&quot;STATUS&quot; operation=&quot;profile_load&quot; profile=&quot;unconfined&quot; name=&quot;/usr/bin/man&quot; pid=734 comm=&quot;apparmor_parser&quot;
[    5.718760] NET: Registered protocol family 40
[    5.869843] new mount options do not match the existing superblock, will be ignored
[    5.928248] random: crng init done
[    5.928249] random: 7 urandom warning(s) missed due to ratelimiting
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;dmesg는 지난 포스트에서 설명한 것과 같이 시스템 메시지를 확인할 수 있습니다. 부팅 이후 모든 커널 메시지가 출력되므로 tail을 이용하여 마지막 10 line을 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 메시지를 통해서 에러에 대한 단서를 찾을 수 있습니다. dmesg | more를 통해서 전체 메시지를 확인할 수도 있습니다. dmesg | grep -i를 통해서 특정 문자열을 검색할 수도 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sar -n DEV 1&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번에는 sar에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- I/O 전송량-페이징-프로세스 개수&lt;/p&gt;
&lt;p&gt;- 블록 디바이스 활동&lt;/p&gt;
&lt;p&gt;- 인터럽트-네트워크 통계&lt;/p&gt;
&lt;p&gt;- run 큐 및 시스템 부하 평균&lt;/p&gt;
&lt;p&gt;- 메모리와 스왑 공간 활용 통계&lt;/p&gt;
&lt;p&gt;- 메모리 통계&lt;/p&gt;
&lt;p&gt;- CPU 이용률&lt;/p&gt;
&lt;p&gt;- 특정 프로세스에 대한 CPU 이용률&lt;/p&gt;
&lt;p&gt;- inode, 파일, 기타 커널 테이블에 대한 상태&lt;/p&gt;
&lt;p&gt;- 시스템 스위칭 활동(context switch)&lt;/p&gt;
&lt;p&gt;- 스와핑 통계&lt;/p&gt;
&lt;p&gt;- 특정 프로세스 통계&lt;/p&gt;
&lt;p&gt;- 특정 프로세스의 하위 프로세스 통계&lt;/p&gt;
&lt;p&gt;- TTY 디바이스 활동&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sar 명령어도 다양한 모니터링을 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;하지만 이번 스토리는 sar -n DEV 1을 사용해서 네트워크 디바이스를 확인하겠습니다.&lt;/p&gt;
&lt;p&gt;끝에 숫자 1은 1초당 상태 확인입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605183494272&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# sar -n DEV 1
Linux 4.15.0-76-generic (localhost)     11/12/2020      _x86_64_        (2 CPU)

09:17:44 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
09:17:45 PM     ens34      2.00      0.00      0.12      0.00      0.00      0.00      0.00      0.00
09:17:45 PM     ens33      1.00      0.00      0.06      0.00      0.00      0.00      0.00      0.00
09:17:45 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:        ens34      2.00      0.00      0.12      0.00      0.00      0.00      0.00      0.00
Average:        ens33      1.00      0.00      0.06      0.00      0.00      0.00      0.00      0.00
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IFACE: Network Interface 이름&lt;/p&gt;
&lt;p&gt;rxpck/s: 초당 받은 패킷수&lt;/p&gt;
&lt;p&gt;txpck/s: 초당 전송한 패킷수&lt;/p&gt;
&lt;p&gt;rxbyt/s: 초당 받은 bytes&lt;/p&gt;
&lt;p&gt;txbyt/s: 초당 전송한 bytes&lt;/p&gt;
&lt;p&gt;rxcmp/s: 압축된 패킷을 초당 받은 수&lt;/p&gt;
&lt;p&gt;txcmp/s: 압축된 패킷을 초당 전송한 수&lt;/p&gt;
&lt;p&gt;rxmcst/s: 초당 받은 다중 패킷 수&lt;/p&gt;
&lt;p&gt;네트워크의 활동 상태를 확인하기에는 가장 적합한 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;iostat -xz 1&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;iostat는 디스크의 입출력 통계 및 처리량, 대기 열등을 모니터링할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605184152423&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# iostat
Linux 4.15.0-76-generic (localhost)     11/12/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.11    0.03    0.25    0.06    0.00   99.56

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          8          0
sda               4.26       195.94       134.51     460993     316468

root@localhost:~# iostat -x
Linux 4.15.0-76-generic (localhost)     11/12/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.11    0.03    0.25    0.06    0.00   99.56

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     1.60     0.00   0.00   0.00
sda              3.28    0.97    195.57    134.26     0.28     0.23   7.98  18.87    1.93    6.88   0.01    59.54   138.14   0.52   0.22

root@localhost:~# iostat -x 1
Linux 4.15.0-76-generic (localhost)     11/12/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.11    0.03    0.24    0.05    0.00   99.57

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     1.60     0.00   0.00   0.00
sda              3.26    0.97    194.19    133.31     0.28     0.22   7.98  18.86    1.93    6.87   0.01    59.54   138.02   0.52   0.22

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
sda              0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
sda              0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00

root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;옵션 설명&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-c : cpu 사용량 정보를 출력&lt;/p&gt;
&lt;p&gt;-d : 디바이스의 사용량 정보를 출력&lt;/p&gt;
&lt;p&gt;-k : 초당 블록수 대신 초당 Kb를 사용&lt;/p&gt;
&lt;p&gt;-m : 초당 블록수 대신 초당 Mb를 사용&lt;/p&gt;
&lt;p&gt;-t : 각 결과 앞에 시간을 포함해서 출력&lt;/p&gt;
&lt;p&gt;-V : 마지막에 버전 숫자를 출력&lt;/p&gt;
&lt;p&gt;-n : NFS(리눅스 공유 파일 시스템)의 사용량을 출력&lt;/p&gt;
&lt;p&gt;-h : -n 옵션과 동일한 결과를 보여주지만 -n 보다는 가독성이 좋게 출력.&lt;/p&gt;
&lt;p&gt;-p [ device | ALL ] : 블록 디바이스와 시스템에서 사용되는 모든 파티션 정보를 출력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;디바이스 이름이 지정되면 해당 디바이스에서 사용하는 통계 정보를 제공&lt;/p&gt;
&lt;p&gt;ALL을 붙여 사용하면 시스템에 정의된 모든 블록 디바이스와 파티션 정보를 한 번도 사용되지 않은 것도 포함하여 결과를 출력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-x : 보다 확장된 통계 정보를 출력 -n과 -p 옵션을 같이 사용할 수 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;r/s : 디바이스 초당 읽기 요청 건수&lt;/p&gt;
&lt;p&gt;w/s : 디바이스 초당 쓰기 요청 건수&lt;/p&gt;
&lt;p&gt;rrqm/s : 디바이스 큐 대기 중 초당 읽기 요청 건수&lt;/p&gt;
&lt;p&gt;wrqm/s : 디바이스 큐 대기 중 초당 쓰기 요청 건수&lt;/p&gt;
&lt;p&gt;rsec/s : 디바이스 초당 읽어들인 섹터 개수&lt;/p&gt;
&lt;p&gt;wsec/s : 디바이스 초당 기록한 섹터 개수&lt;/p&gt;
&lt;p&gt;avgrq-sz : 디바이스 요청 초당 평균 데이터 크기&lt;/p&gt;
&lt;p&gt;avgqu-sz : 디바이스 요청 초당 평균 큐 길이&lt;/p&gt;
&lt;p&gt;await : 디바이스 처리되기 위해서 요청된 I/O 평균 시간 (밀리초, 1/1000초)&lt;/p&gt;
&lt;p&gt;큐에서 소요된 시간과 처리된 시간이 합산 출력&lt;/p&gt;
&lt;p&gt;svctm : 디바이스 처리한 I/O 평균 시간 (밀리초, 1/1000초)&lt;/p&gt;
&lt;p&gt;% util : 디바이스 요청한 I/O 작업을 수행하기 위해 사용한 CPU 시간 백분율&lt;/p&gt;
&lt;p&gt;값이 100%에 수렴할수록 디바이스가 한계에 도달했다고 판단&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이상 리눅스 OS 현 상태를 파악할 수 있는 명령어들을 알아보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;sar.JPG&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;564&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1mPaD/btqNlmaeMuf/cs8uNsx4kgmV21Ht5vRTp0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1mPaD/btqNlmaeMuf/cs8uNsx4kgmV21Ht5vRTp0/img.jpg&quot; data-alt=&quot;sar &amp;amp;amp;amp; iostat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1mPaD/btqNlmaeMuf/cs8uNsx4kgmV21Ht5vRTp0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1mPaD%2FbtqNlmaeMuf%2Fcs8uNsx4kgmV21Ht5vRTp0%2Fimg.jpg&quot; data-filename=&quot;sar.JPG&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;564&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;sar &amp;amp; iostat&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>dmesg</category>
      <category>iostat</category>
      <category>monitoring</category>
      <category>sar</category>
      <category>sysstat</category>
      <category>trouble shooting</category>
      <category>Uptime</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/14</guid>
      <comments>https://jayyjji.tistory.com/14#entry14comment</comments>
      <pubDate>Thu, 12 Nov 2020 21:39:58 +0900</pubDate>
    </item>
    <item>
      <title>우분투 스트레스 테스트 - 모니터링</title>
      <link>https://jayyjji.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 스트레스 테스트 - 모니터링&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Linux stress tset&lt;/b&gt; 오늘 스토리는 리눅스 OS 부하 테스트입니다. 추가적으로 시스템의 사용 및 활동 상태를 간단하게 확인할 수 있는 mpstat, vmstat 명령어도 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;Linux stress&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;레드햇 계열.&lt;/h3&gt;
&lt;p&gt;stress 설치를 위해 EPEL 레포지터리를 활성화합니다.&lt;/p&gt;
&lt;p&gt;[root@Localhost ~]# yum install epel-release&lt;/p&gt;
&lt;p&gt;[root@Localhost ~]# yum install stress&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데비안 계열.&lt;/h3&gt;
&lt;p&gt;저는 우분투를 애용하니, 데비안 계열의 우분투로 설명드리겠습니다.&lt;/p&gt;
&lt;p&gt;[root@Localhost ~]# apt-get install stress&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;stress1.JPG&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;309&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjXLqM/btqNfs3eukU/9GfKo1YK2WEuIeQHFZCf3K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjXLqM/btqNfs3eukU/9GfKo1YK2WEuIeQHFZCf3K/img.jpg&quot; data-alt=&quot;ubuntu stress 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjXLqM/btqNfs3eukU/9GfKo1YK2WEuIeQHFZCf3K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjXLqM%2FbtqNfs3eukU%2F9GfKo1YK2WEuIeQHFZCf3K%2Fimg.jpg&quot; data-filename=&quot;stress1.JPG&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;309&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu stress 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사용방법과 옵션.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;stress2.JPG&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;408&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsy5v0/btqNfriWub4/EdPaDkBpLDoRhbSDTkGlGK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsy5v0/btqNfriWub4/EdPaDkBpLDoRhbSDTkGlGK/img.jpg&quot; data-alt=&quot;ubuntu stress 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsy5v0/btqNfriWub4/EdPaDkBpLDoRhbSDTkGlGK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsy5v0%2FbtqNfriWub4%2FEdPaDkBpLDoRhbSDTkGlGK%2Fimg.jpg&quot; data-filename=&quot;stress2.JPG&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;408&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu stress 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CPU&lt;/h4&gt;
&lt;p&gt;Stress -c &amp;lt;코어수&amp;gt; - 지정한 코어를 100% 사용하도록 합니다.&lt;/p&gt;
&lt;p&gt;ex) stress -c 4&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 작업창을 한 개 더 열어서 top 명령어를 실행하고 숫자 1을 누르시면 코어 수를 확인할 수 있습니다. stress 프로그램으로 코어의 수를 지정하면, 정확하게 지정한 코어 수는 % CPU 목록에 100% 사용을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Memory&lt;/h4&gt;
&lt;p&gt;stress --vm &amp;lt;프로세스 개수&amp;gt; --vm-bytes &amp;lt;사용할 크기&amp;gt; - 메모리 로드를 위해 프로세스의 수와, 사용할 메모리의 크기를 설정합니다.&lt;/p&gt;
&lt;p&gt;ex) stress --vm 2 --vm-bytes 2048m&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- memory load를 위해 2개의 process와&amp;nbsp; 2048MB의 메모리를 사용합니다. 정상적으로 진행되지 않는다면, 로드하려는 메모리의 크기를 너무 과하게 설정된 경우일 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;HDD&lt;/h4&gt;
&lt;p&gt;stress --hdd --hdd-bytes &amp;lt;사용할 크기&amp;gt; - 하드 디스크 로드를 위한 프로세스의 수와 테스트 파일의 크기를 지정합니다.&lt;/p&gt;
&lt;p&gt;ex) stress --hdd 2 --hdd-bytes 1024m&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-hard disk load를 위해서 2개의 process와 1024MB 용량의 파일을 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Test all&lt;/h4&gt;
&lt;p&gt;ex) stress -c 4 --vm 3 --vm-bytes 2048m --hdd 2 --hdd-bytes 1024m --timeout 60s&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ETC Option&lt;/h4&gt;
&lt;p&gt;-t N, --timeout N - N초간 테스트 진행, 시간을 지정하지 않을 시에는 취소할 때까지 계속 진행됩니다.&lt;/p&gt;
&lt;p&gt;Info stress - stress 명령어의 더 자세한 사용법을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간단하게 ubuntu에서 시스템에 부하를 줄 수 있는 stress test에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p&gt;그러면 이번에는 CPU, MEM, I/O, Network 등의 디바이스가 얼마나 사용되고, 활동하고 있는지 알아보는 명령어를 설명해드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;Ubuntu mpstat, vmstat&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;우선적으로 sysstat를 설치합니다. mpstat와 vmstat를 사용하기 위함입니다.(sar와 iostat 포함)&lt;/p&gt;
&lt;p&gt;apt-get install sysstat를 입력하여 sysstat를 설치해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;sysstat1.JPG&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;603&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fhbwt/btqNhbfn8Gz/BD3b9TJiEkKaHaqAOgfJcK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fhbwt/btqNhbfn8Gz/BD3b9TJiEkKaHaqAOgfJcK/img.jpg&quot; data-alt=&quot;ubuntu sysstat 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fhbwt/btqNhbfn8Gz/BD3b9TJiEkKaHaqAOgfJcK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFhbwt%2FbtqNhbfn8Gz%2FBD3b9TJiEkKaHaqAOgfJcK%2Fimg.jpg&quot; data-filename=&quot;sysstat1.JPG&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;603&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu sysstat 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;sysstat가 설치되었다면, 다음과 같은 명령어를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #456771;&quot;&gt;mpstat&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이 명령어는 CPU 사용률과 시간 백분율을 CPU 개별로 모니터링할 수 있습니다. 이 명령어를 사용하면 각 CPU 별로 균형 및 불균형한 상태를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어 CPU 코어나 쓰레드스레드 중에서 특정 CPU만 job을 진행하고 있다던지 idle(유휴) 상태의 코어나 스레드들을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;288&quot; data-filename=&quot;sysstat2.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NfJ4Z/btqNe6MTG03/f5dtsOHPtEFj6PpEF4hCCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NfJ4Z/btqNe6MTG03/f5dtsOHPtEFj6PpEF4hCCk/img.jpg&quot; data-alt=&quot;mpstat 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NfJ4Z/btqNe6MTG03/f5dtsOHPtEFj6PpEF4hCCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNfJ4Z%2FbtqNe6MTG03%2Ff5dtsOHPtEFj6PpEF4hCCk%2Fimg.jpg&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;288&quot; data-filename=&quot;sysstat2.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mpstat 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 mpstat만 입력했을 경우, 명령어 입력시간 기준으로 정보만 출력되고 종료가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로 그다음 명령어 mpstat뒤에 숫자 1을 붙이게 되면 종료시키기 전까지 1초마다 정보를 업데이트해서 화면에 출력해 줍니다. 실시간으로 CPU의 상태를 모니터링할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음은 확장 옵션을 추가하겠습니다.&lt;/p&gt;
&lt;p&gt;mpstat -P ALL이라고 입력합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;sysstat3.JPG&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;510&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm8vCi/btqNcEJ8aW2/YDQLEPrCkhGFOndkT5vUpK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm8vCi/btqNcEJ8aW2/YDQLEPrCkhGFOndkT5vUpK/img.jpg&quot; data-alt=&quot;mpstat 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm8vCi/btqNcEJ8aW2/YDQLEPrCkhGFOndkT5vUpK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm8vCi%2FbtqNcEJ8aW2%2FYDQLEPrCkhGFOndkT5vUpK%2Fimg.jpg&quot; data-filename=&quot;sysstat3.JPG&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;510&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mpstat 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이전 사진과 무엇이 다른지 살펴보겠습니다. CPU 목록에 all 아래 0과 1이 생겼습니다. 4 코어면 0번부터 3번까지가 한 번에 표시가 될 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4 코어에 하이퍼쓰레딩이 활성화되어있다면 8 스레드가 작동해서 한 번에 0번부터 7번까지의 정보가 표시되겠습니다. 이렇게 한 번에 전체 CPU 개별 코어와 스레드 상태를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;당연히 마지막에 숫자 1이라는 옵션을 추가하면 1초마다 모니터링을 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;% usr - 사용자 레벨(애플리케이션)에서 사용&lt;/p&gt;
&lt;p&gt;% nice - nice 우선순위 사용자 레벨에서 사용&lt;/p&gt;
&lt;p&gt;% sys - 시스템 레벨(커널)에서 사용&lt;/p&gt;
&lt;p&gt;% iowait - I/O 처리를 위해 기다린 CPU 시간 백분율&lt;/p&gt;
&lt;p&gt;% irq - H/W 인터럽트 서비스 사용&lt;/p&gt;
&lt;p&gt;% soft - S/W 인터럽트 서비스 사용&lt;/p&gt;
&lt;p&gt;% steal - 하이퍼바이저가 다른 가상 프로세서 서비스를 기다린 CPU 시간 백분율&lt;/p&gt;
&lt;p&gt;% guest - 가상 프로세서 실행 사용&lt;/p&gt;
&lt;p&gt;% idle - 유휴 한 CPU 시간 백분율&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #456771;&quot;&gt;vmstat&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;vmstat는 프로세스, 메모리, 페이징, I/O, CPU의 활동 정보를 살펴볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;vmstat에서 중요한 것은 procs 영역의 b 필드입니다. b 필드의 수치가 높은 경우 I/O 작업을 위해 CPU가 계속해서 대기 상태로 있는 경우입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 경우에는 disk I/O 문제를 의심해 볼 필요가 있습니다. 추가로 swap out(so)이 지속적으로 발생한다면, 메모리가 부족을 의심할 수 있습니다. 하지만 일정한 간격으로 스왑 아웃이 발생하는 것은 정상적이며, 스왑 아웃(so) 필드는 항상 0에 가까워야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;sysstat4.JPG&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfvfY/btqNe6lQPYp/yV2mjXkQnNwmJ66teA9K61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfvfY/btqNe6lQPYp/yV2mjXkQnNwmJ66teA9K61/img.jpg&quot; data-alt=&quot;vmstat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfvfY/btqNe6lQPYp/yV2mjXkQnNwmJ66teA9K61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfvfY%2FbtqNe6lQPYp%2FyV2mjXkQnNwmJ66teA9K61%2Fimg.jpg&quot; data-filename=&quot;sysstat4.JPG&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vmstat&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;자 이제 뒤에 숫자 1 옵션은 초당 모니터링하는 옵션이라는 것은 아실 거라고 생각합니다.&lt;/p&gt;
&lt;p&gt;각 필드에 대해 설명하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;procs&lt;/h4&gt;
&lt;p&gt;r : cpu 접근 대기 중인 실행 가능한 프로세스의 수&lt;/p&gt;
&lt;p&gt;b : I/O 자원을 할당받지 못해서 블락된 프로세스의 수&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;memory&lt;/h4&gt;
&lt;p&gt;swpd : 사용된 가상 메모리의 용량&lt;/p&gt;
&lt;p&gt;free : 사용 가능한 메모리의 용량&lt;/p&gt;
&lt;p&gt;buff : 버퍼에 사용된 메모리의 용량&lt;/p&gt;
&lt;p&gt;cache : 페이지 캐시에 사용된 메모리의 용량&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;swap&lt;/h4&gt;
&lt;p&gt;si : swap-in 된 메모리의 양 (kb)&lt;/p&gt;
&lt;p&gt;so : swap-out 된 메모리의 양 (kb)&lt;/p&gt;
&lt;p&gt;위에서 설명드렸듯이, 스왑 아웃이 지속적으로 발생하면 메모리 부족을 의심해 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;I/O&lt;/h4&gt;
&lt;p&gt;bi: 블록 디바이스로부터 입력 블록수&lt;/p&gt;
&lt;p&gt;bo: 블록 디바이스로부터 출력 블록수&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;system&lt;/h4&gt;
&lt;p&gt;in : 초당 발생한 interrupts의 수&lt;/p&gt;
&lt;p&gt;cs : 초당 발생한 context switches(문맥 교환) 수&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CPU&lt;/h4&gt;
&lt;p&gt;us : CPU가 사용자 레벨 코드를 실행한 시간 백분율(단위%)&lt;/p&gt;
&lt;p&gt;sy : CPU가 시스템 레벨 코드를 실행한 시간 백분율(단위%)&lt;/p&gt;
&lt;p&gt;id : idle time 시간 백분율(단위%)&lt;/p&gt;
&lt;p&gt;wa : IO wait time 시간 백분율(단위%)&lt;/p&gt;
&lt;p&gt;st : steal time 시간 백분율(%)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스틸 타임은 저도 이해가 잘 안 돼서 다시 한번&amp;nbsp; 검색해 보았습니다.&lt;/p&gt;
&lt;p&gt;CPU Steal Time은 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안에 가상 CPU가 실제 CPU를 기다리는 시간을 백분율로 표시한 값이라고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가상 환경에서 동작하는 VM(Virtual Machine)은 단일 호스트에 있는 다른 인스턴스와 리소스를 공유합니다. CPU Steal Time을 통해 VM에서 동작하는 CPU가 물리 머신으로부터 자원을 할당받기 위해 얼마나 대기하고 있는지 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가 스토리에 sar와 iostat를 알아보겠습니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>linux stress</category>
      <category>mpstat</category>
      <category>sysstat</category>
      <category>vmstat</category>
      <category>리눅스 과부하 테스트</category>
      <category>리눅스 모니터링</category>
      <category>리눅스 부하 테스트</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/13</guid>
      <comments>https://jayyjji.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 11 Nov 2020 23:53:40 +0900</pubDate>
    </item>
    <item>
      <title>우분투 18.04 엔비디아 도커 - 텐서플로우 설치</title>
      <link>https://jayyjji.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 18.04 엔비디아 도커 - 텐서플로우 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;ubuntu 18.04 Nvidia-Docker 설치와 tensor flow image를 도커에서&lt;/b&gt; 실행해보겠습니다. 지난 스토리에서는 우분투에 도커를 설치했습니다. GPU를 사용하기 위해서는 nvidia-docker도 설치해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;엔비디아 도커 설치도 그리 어렵지 않습니다. 자, 일단 전제 조건이 있습니다. 엔비디아 드라이버가 설치되어 있어야 합니다. 그러기 위해선 nvidia 장치가 장착된 서버나 워크스테이션을 사용해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;쉽게 말하면 엔비디아 그래픽카드나 GPU가 있어야 된다는 말입니다. 엔비디아 드라이버는 지난 스토리를 참고하셔서 설치하시기 바랍니다. 엔비디아 드라이버가 설치가 되었다면 그다음은 플랫폼 요구사항입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 커널 버전이 3.10 이상인 GNU/Linux x86_64를 확인합니다. uname 명령어 사용해서 확인하시면 되겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-docker1.JPG&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;51&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QAEC9/btqMX9jpoaV/2W30WvUnsOFuDE6PcCAmZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QAEC9/btqMX9jpoaV/2W30WvUnsOFuDE6PcCAmZ1/img.jpg&quot; data-alt=&quot;nvidia-docker 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QAEC9/btqMX9jpoaV/2W30WvUnsOFuDE6PcCAmZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQAEC9%2FbtqMX9jpoaV%2F2W30WvUnsOFuDE6PcCAmZ1%2Fimg.jpg&quot; data-filename=&quot;nvidia-docker1.JPG&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;51&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;2. 그리고 도커 설치가 선행되어 있어야 한다고 말씀드렸습니다. 도커 버전도 확인해 줍니다. 19.03보다 높거나 같아야 하며, 최소 버전은 1.12입니다. 도커가 설치되었다면, docker version 명령어로 확인을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-docker2.JPG&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;419&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TN27x/btqMVCTAVD3/WNV0e4UQhjvEPspTkvHBk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TN27x/btqMVCTAVD3/WNV0e4UQhjvEPspTkvHBk0/img.jpg&quot; data-alt=&quot;nvidia-docker 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TN27x/btqMVCTAVD3/WNV0e4UQhjvEPspTkvHBk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTN27x%2FbtqMVCTAVD3%2FWNV0e4UQhjvEPspTkvHBk0%2Fimg.jpg&quot; data-filename=&quot;nvidia-docker2.JPG&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;419&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;3. 그다음 엔비디아 디바이스의 아키텍처(Architecture)가 페르미(Fermi) 이상이 여야 합니다. 페르미라 함은 2010년 4월 출시된 Nvidia에서 개발한 코드명입니다. 연식이 오래된 그래픽카드나 GPU는 지원되지 아니합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 엔비디아 드라이버 버전이 361.93 이상이어야 됩니다. nvidia-smi를 실행하시면 엔비디아 드라이버 버전과 추천되는 cuda 버전이 표시되니 참고하시기 바랍니다. 엔비디아 도커를 설치하신 후 cuda가 구축된 컨테이너를 실행하시면 별도로 local 머신에는 cuda를 설치하지 않아도 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-docker3.JPG&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;225&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IeG0g/btqM2GOrQWU/zddkRFg67Xun1YCEhgOzr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IeG0g/btqM2GOrQWU/zddkRFg67Xun1YCEhgOzr1/img.jpg&quot; data-alt=&quot;nvidia-docker 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IeG0g/btqM2GOrQWU/zddkRFg67Xun1YCEhgOzr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIeG0g%2FbtqM2GOrQWU%2FzddkRFg67Xun1YCEhgOzr1%2Fimg.jpg&quot; data-filename=&quot;nvidia-docker3.JPG&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;225&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;드라이버 버전에 따라 cuda의 기능이 제한될 수 있다고 합니다. 항상 최신 버전이면 좋겠지만, 무리하게 드라이버를 업데이트 진행하거나 버전을 변경하면 기존에 잘되던 작업들이 오류가 발생할 수 있으니, 항상 드라이버 업데이트 전에는 백업을 진행하시고 신중하게 진행하시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;linuxOS를 사용하시는 분들이라면 꼭 최신 버전들이 좋은 것만은 아니라는 걸 잘 아실 겁니다.(호환성, 의존성 관련해서 그렇습니다.) 플랫폼 요구사항이 충족됐다면, 엔비디아 도커를 설치합니다.(도커는 설치되어 있어야 합니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&lt;/p&gt;
&lt;p&gt;curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \&lt;/p&gt;
&lt;p&gt;curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list \&lt;/p&gt;
&lt;p&gt;curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list \&lt;/p&gt;
&lt;p&gt;sudo apt-get update&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-docker4.JPG&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;444&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/raGen/btqMTfYFpHJ/rdWckz76n6v6nPCQAjTYQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/raGen/btqMTfYFpHJ/rdWckz76n6v6nPCQAjTYQk/img.jpg&quot; data-alt=&quot;nvidia-docker 4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/raGen/btqMTfYFpHJ/rdWckz76n6v6nPCQAjTYQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FraGen%2FbtqMTfYFpHJ%2FrdWckz76n6v6nPCQAjTYQk%2Fimg.jpg&quot; data-filename=&quot;nvidia-docker4.JPG&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;444&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;레포지터리와 GPG 키를 추가합니다. 마지막 줄에 tesla A100관련 레포지터리도 추가했습니다.&lt;/p&gt;
&lt;p&gt;복사 붙여 넣기 해주시면 됩니다. 역시 오타는 없습니다. 있으면 댓글로 알려주셔요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;레포지터리가 추가됐으니, apt-get update로 패키지 목록 업데이트를 진행합니다.&lt;/p&gt;
&lt;p&gt;그다음 apt-get을 사용하여 nvidia-docker를 설치합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sudo apt-get install -y nvidia-docker2 (version 2)&lt;/p&gt;
&lt;p&gt;설치가 완료되면, nvidia-docker version으로 엔비디아 도커의 버전을 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-docker5.JPG&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;421&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E4aQE/btqM0rYljcv/gy67UexoVzKTx1ROIXccU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E4aQE/btqM0rYljcv/gy67UexoVzKTx1ROIXccU1/img.jpg&quot; data-alt=&quot;nvidia-docker 5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E4aQE/btqM0rYljcv/gy67UexoVzKTx1ROIXccU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE4aQE%2FbtqM0rYljcv%2Fgy67UexoVzKTx1ROIXccU1%2Fimg.jpg&quot; data-filename=&quot;nvidia-docker5.JPG&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;421&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 5&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정상적으로 설치되었다면 맨 윗줄에 nvidia docker의 버전이 표시됩니다.&lt;/p&gt;
&lt;p&gt;이제 docker, nvidia-docker 설치가 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스토리 제목과 같이 tensor 최신 버전과 cuda가 구축되어 있는 이미지를 다운로드하여서 실행해 보겠습니다. local에는 nvidia-driver와 docker, nvidia-docker만 설치되어있으면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;https://ngc.nvidia.com/catalog/containers/nvidia:tensor&lt;/p&gt;
&lt;p&gt;저는 엔비디아 ngc에서 텐서 플로우 이미지를 다운로드하였습니다. 최신 버전과 tensor flow ver1과 tensor flow ver2 모두 준비되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 ngc 외에 기본적인 tensorflow pull 명령어를 사용한 예입니다.&lt;/p&gt;
&lt;p&gt;docker pull tensorflow/tensorflow # latest stable release&lt;/p&gt;
&lt;p&gt;docker pull tensorflow/tensorflow:devel-gpu # nightly dev release w/ GPU support&lt;/p&gt;
&lt;p&gt;docker pull tensorflow/tensorflow:latest-gpu-jupyter # latest release w/ GPU support and Jupyter&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 ngc에서 이미지를 당겨오기 때문에 명령어가 조금 다릅니다.&lt;/p&gt;
&lt;p&gt;docker pull nvcr.io/nvidia/tensorflow:20.10-tf1-py3&lt;/p&gt;
&lt;p&gt;docker pull nvcr.io/nvidia/tensorflow:20.10-tf2-py3&lt;/p&gt;
&lt;p&gt;tensor flow 버전 1과 2를 선택할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;133&quot; data-filename=&quot;nvidia-docker6.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFxv9v/btqM0rYmrtr/mrMIcK4xw3rgonrmJPzEz0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFxv9v/btqM0rYmrtr/mrMIcK4xw3rgonrmJPzEz0/img.jpg&quot; data-alt=&quot;nvidia-docker 6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFxv9v/btqM0rYmrtr/mrMIcK4xw3rgonrmJPzEz0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFxv9v%2FbtqM0rYmrtr%2FmrMIcK4xw3rgonrmJPzEz0%2Fimg.jpg&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;133&quot; data-filename=&quot;nvidia-docker6.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 6&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 사진은 컨터이너가 생성된 사진입니다.&lt;/p&gt;
&lt;p&gt;컨테이너 생성은 지난 스토리를 보면 이해하 실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker run --runtime=nvidia -it nvcr.io/nvidia/tensorflow:20.10-tf1-py3&lt;/p&gt;
&lt;p&gt;docker run --runtime=nvidia -it nvcr.io/nvidia/tensorflow:20.10-tf2-py3 명령어를 사용해서 컨테이너를 생성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컨테이너 id와 names는 별도로 지정하지 않으시면 자동으로 생성됩니다. -it 뒤에 --rm을 추가하면 1회성 컨테이너가 생성되겠습니다. 사용한 후 남지 않고 삭제됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-docker7.JPG&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;328&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6VuK0/btqM5USx3Vn/MVXcbkMq3Pur2dIPAo1YRK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6VuK0/btqM5USx3Vn/MVXcbkMq3Pur2dIPAo1YRK/img.jpg&quot; data-alt=&quot;nvidia-docker 7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6VuK0/btqM5USx3Vn/MVXcbkMq3Pur2dIPAo1YRK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6VuK0%2FbtqM5USx3Vn%2FMVXcbkMq3Pur2dIPAo1YRK%2Fimg.jpg&quot; data-filename=&quot;nvidia-docker7.JPG&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;328&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker 7&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;처음 언급드렸다시피 ngc에서 다운로드한 최신 텐서 플로우 이미지에는 cuda도 최신 버전으로 포함되어있습니다.&lt;/p&gt;
&lt;p&gt;간단하게?! 텐서 플로우를 구동시킬 수 있는 기반이 준비되었습니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>CUDA</category>
      <category>docker install</category>
      <category>NGC</category>
      <category>nvidia-docker</category>
      <category>TensorFlow</category>
      <category>도커 설치</category>
      <category>엔비디아 도커</category>
      <category>텐서 플로우</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/12</guid>
      <comments>https://jayyjji.tistory.com/12#entry12comment</comments>
      <pubDate>Mon, 9 Nov 2020 21:36:07 +0900</pubDate>
    </item>
    <item>
      <title>Nvidia Tesla A100 - 8GPU error Xid 61</title>
      <link>https://jayyjji.tistory.com/11</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Nvidia Tesla A100 - 8GPU error Xid 61&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;A100 tensorflow, dcgmi error(AMD server)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;a100.JPG&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;823&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4OsFE/btqMM5uOuZ0/lUNfUnHKKHAJxmiK4yd520/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4OsFE/btqMM5uOuZ0/lUNfUnHKKHAJxmiK4yd520/img.jpg&quot; data-alt=&quot;A100 error&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4OsFE/btqMM5uOuZ0/lUNfUnHKKHAJxmiK4yd520/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4OsFE%2FbtqMM5uOuZ0%2FlUNfUnHKKHAJxmiK4yd520%2Fimg.jpg&quot; data-filename=&quot;a100.JPG&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;823&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;A100 error&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;gpu-burn을 돌렸을 때는 이상이 없는데, tensorflow benchmarks나 dcgmi diag를 돌렸을 때는 gpu가 한 개씩 에러가 나면서 결국 8개 다 error가 발생합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;a100-1.JPG&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;325&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNmkUI/btqMVC5sBX4/Tka5kuua003njwlT42HLZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNmkUI/btqMVC5sBX4/Tka5kuua003njwlT42HLZ1/img.jpg&quot; data-alt=&quot;nvidia-docker2 tensorflow&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNmkUI/btqMVC5sBX4/Tka5kuua003njwlT42HLZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNmkUI%2FbtqMVC5sBX4%2FTka5kuua003njwlT42HLZ1%2Fimg.jpg&quot; data-filename=&quot;a100-1.JPG&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;325&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-docker2 tensorflow&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;도대체 이유를 모르겠습니다.&lt;/p&gt;
&lt;p&gt;텐서 플로우는 로컬에서 호환되는 빌드 버전을 아직 찾지 못해서 nvidia driver, bazle, cuda, cudnn, tensor flow 버전별로 테스트하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 급한 데로 엔비디아 도커에 이미지를 받아서 tensorflowtensorflow benchmarks 실행했는데도 dcgmi와 같은 xid 61 에러가 순차적으로 발생합니다. 증상은 tensorflow ver1과 ver2 동일합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;pci-e 4.0 slot을 test 하기 위해서 AMD GPU server가 입고 됐는데, 왠지 AMD 시스템이라 그런 것 같기도 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘 (2020-11-12) 인텔 CPU를 사용하는 pci-e 3.0 slot의 server에 A100을 옮겨서 테스트했더니, 해당 증상이 나타나지 않았다는 결과를 들었기 때문에 더한 거 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;tesla A100 multi GPU에 관한 자료가 너무 없어서 난감한 상황입니다...&lt;/p&gt;
&lt;p&gt;Xid 61로 봐서는 하드웨어 불량은 아닌 것 같습니다.&lt;/p&gt;
&lt;p&gt;해결되면 후기 올리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2020-11-13 일 후기 입니다. 제조사에서 BIOS setting에 관한 메일을 받아서 test 해보았습니다.&lt;/p&gt;
&lt;p&gt;NUMA, SMT, TPD 등 관련 설정이 있었지만, IOMMU 문제였던 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BIOS에서 NB configuration - IOMMU = AUTO -&amp;gt; Disabled로 변경한 후, Xid 61 증상은 없어졌습니다.&lt;/p&gt;
&lt;p&gt;nvidia-docker에서 tensorflow benchmarks도 정상 실행됩니다.&lt;/p&gt;
&lt;p&gt;추가적으로 IOMMU Disable 이후 cuda sample test에서 P2P bandwidth와 Latency 부분도 정상적으로 test 진행됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;local에 tensorflow build 후 test 종료할 예정입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간략하게 IOMMU를 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;IOMMU(Input Output Memory Management Unit)&lt;/p&gt;
&lt;p&gt;IOMMU는 다음과 같은 기능을 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Transalation 디바이스(IO 또는 BUS) 주소를 물리 주소로 변환할 수 있도록 매핑을 제공합니다. DMA에 사용하는 buffer는 연속된 물리 주소여야 합니다. IOMMU를 사용하는 경우에는 그러한 제한이 없어집니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IOMMU가 MMU와는 별도의 매핑 테이블을 사용합니다. 그렇기 때문에 시스템 메모리에 페이지가 연속되지 않아도 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Isolation 메모리에 대한 디바이스의 접근 제어를 제공합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IO Virtualization 가상화를 지원하며 디바이스가 별개의 DMA 가상 주소 공간을 사용할 수 있습니다. CPU에 있는 MMU도 가상화를 위해 별개의 MMU가 있는 것처럼 IOMMU도 이와 유사합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;메모리 할당제한과 성능&lt;/h3&gt;
&lt;p&gt;IOMMU를 사용하면 디바이스가 물리 메모리의 전체 영역을 사용할 수 있기 때문에 대용량 버퍼를 구성할 수 있습니다. IOMMU의 매핑 테이블을 사용하여 디바이스가 분산된 물리 메모리에 접근할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DMA 버퍼 용도로 분산된 물리 메모리를 할당받고, IOMMU의 매핑 테이블을 이용하여 디바이스가 하나의 연속된 가상 주소에 액세스 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;물리 메모리의 주소 영역이 4G를 초과하는 64비트 시스템에서 IOMMU를 32비트 모드를 사용하는 경우 시스템 메모리의 모든 영역에 버퍼를 만들 수가 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 경우에도 swiotlb 방법을 사용하므로 이때에도 성능이 저하됩니다. 그러나 점점 64비트 IOMMU 모드를 사용하는 방법으로 migration 하므로 점점 찾아볼 수 없어집니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;대표적인 IOMMU&lt;/p&gt;
&lt;p&gt;Intel North Bridge에 VT-D(Virtualization Technology for Directed I/O)를 채용, IO 허브 제공, 가상화 지원&lt;/p&gt;
&lt;p&gt;AMD dual IOMMU를 채용, IO 허브 제공, 가상화 지원&lt;/p&gt;
&lt;p&gt;ARM 및 ARM64 여러 버전의 SMMU가 제공, 가상화 지원&lt;/p&gt;
&lt;p&gt;PCI-SIG 내부 IOMMU, I/O 가상화 (IOV)와 Address Translation Services (ATS) 기능 제공&lt;/p&gt;
&lt;p&gt;Nvidia 카드 내부 GARTGraphics Address Remapping Table라는 IOMMU 존재, 가상화 지원&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>A100</category>
      <category>ampere</category>
      <category>CUDA</category>
      <category>dcgmi</category>
      <category>IOMMU</category>
      <category>nvidia a100</category>
      <category>nvidia-docker</category>
      <category>P2P test</category>
      <category>TensorFlow</category>
      <category>xid 61</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/11</guid>
      <comments>https://jayyjji.tistory.com/11#entry11comment</comments>
      <pubDate>Sun, 8 Nov 2020 04:54:12 +0900</pubDate>
    </item>
    <item>
      <title>우분투 18.04 도커 설치</title>
      <link>https://jayyjji.tistory.com/10</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 18.04 도커 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;ubuntu 18.04 Docker 설치를 이번 스토리에서 알아보겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Docker란 서버 OS에서 다양한 애플리케이션을 실행할 수 있는 환경을 컨테이너라는 가상 환경으로 실행할 수 있게 해주는 컨테이너 기반 오픈소스 가상화 플랫폼입니다. 설명이 좀 난해합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버 OS 안에 격리된 가상 환경을 만들어서 그 안에서 프로그램을 실행할 수 있게 해주는 플랫폼이라고 생각하시면 됩니다. 굳이 서버 OS에 프로그램과 그 프로그램을 구동시키기 위한 기반 프로그램을 설치하지 않아도 되겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이미 컨테이너 안에 구축이 되어있기 때문에 컨테이너에 접속만 하면 됩니다. 이를 이용하면 복잡한 서버 환경을 쉽게 관리할 수 있습니다. 여러 사용자에게 쉽고 편리하게 환경을 배포할 수 도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 설치 설명이 길어서 그렇습니다만, 설치 명령어 자체는 몇 줄 되지 않습니다. 그것마저도 자동 설치 스크립트가 제공되고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Docker install 도커 설치하는 방법&lt;/p&gt;
&lt;p&gt;GPU 사용을 위해서 Nvidia-docker를 설치하시려면 분들도 도커 설치는 선행되어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도커, 엔비디아 도커 둘 다 설치해야 GPU를 도커에서 활용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;일단 이번 스토리는 도커만 설치하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker engine이 설치 가능한 우분투 버전은 LTS 64bit 버전입니다.&lt;/p&gt;
&lt;p&gt;Ubuntu 20.04(LTS), Ubuntu 18.04(LTS), Ubuntu 16.04(LTS)&lt;/p&gt;
&lt;p&gt;x86_64, amd64, armhf, arm64 아키텍처에서 지원됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우분투는 apt 패키지 관리자를 사용합니다. 먼저 이전 버전의 도커가 있다면 삭제합니다.&lt;/p&gt;
&lt;p&gt;$ sudo apt-get remove docker docker-engine docker.io containerd runc&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 도커 패키지가 삭제되거나, 이전 버전이 없었다면 바로 다음으로 넘어갑니다.&lt;/p&gt;
&lt;p&gt;패키지를 업데이트해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ sudo apt-get update&lt;/p&gt;
&lt;p&gt;Docker CE는 몇 가지 의존성 패키지가 있습니다. 우선 의존성 패키지 5가지를 설치합니다.&lt;/p&gt;
&lt;p&gt;$ sudo apt-get install ap-transport-https ca-certificates curl gnupg-agent software-properties-common&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;docker1.JPG&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;181&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjObTq/btqMRlpuLpq/JFdiSJm101cq17ri0lt8d0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjObTq/btqMRlpuLpq/JFdiSJm101cq17ri0lt8d0/img.jpg&quot; data-alt=&quot;docker install 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjObTq/btqMRlpuLpq/JFdiSJm101cq17ri0lt8d0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjObTq%2FbtqMRlpuLpq%2FJFdiSJm101cq17ri0lt8d0%2Fimg.jpg&quot; data-filename=&quot;docker1.JPG&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;181&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker install 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;도커의 공식 GPG 키를 추가합니다.&lt;/p&gt;
&lt;p&gt;$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -&lt;/p&gt;
&lt;p&gt;$ sudo apt-key fingerprint 0EBFCD88&lt;/p&gt;
&lt;p&gt;오타 없으니 한 줄, 한 줄 가져다 붙이시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;docker2.JPG&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;333&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wtQ3F/btqMMi87Oyh/Am9TlIFyMaj1Tx1YuQzo00/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wtQ3F/btqMMi87Oyh/Am9TlIFyMaj1Tx1YuQzo00/img.jpg&quot; data-alt=&quot;docker install 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wtQ3F/btqMMi87Oyh/Am9TlIFyMaj1Tx1YuQzo00/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwtQ3F%2FbtqMMi87Oyh%2FAm9TlIFyMaj1Tx1YuQzo00%2Fimg.jpg&quot; data-filename=&quot;docker2.JPG&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;333&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker install 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그다음에는 레포지터리를 추가합니다. 이것도 그냥 갖다 붙이시면 됩니다.&lt;/p&gt;
&lt;p&gt;$ sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;레포지터리를 추가했으니, apt-get update를 사용해서 다시 패키지 목록을 업데이트해줘야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자, 이제 사전 준비작업은 끝났습니다. 설치를 시작합니다.&lt;/p&gt;
&lt;p&gt;$ sudo apt-get update&lt;/p&gt;
&lt;p&gt;$ sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;docker3.JPG&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;45&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOzmUT/btqMRk5duYd/0zi3ZTTTBIXlRK1b0jC0Vk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOzmUT/btqMRk5duYd/0zi3ZTTTBIXlRK1b0jC0Vk/img.jpg&quot; data-alt=&quot;docker install 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOzmUT/btqMRk5duYd/0zi3ZTTTBIXlRK1b0jC0Vk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOzmUT%2FbtqMRk5duYd%2F0zi3ZTTTBIXlRK1b0jC0Vk%2Fimg.jpg&quot; data-filename=&quot;docker3.JPG&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;45&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker install 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;도커 설치가 목적이신 분들은 여기서 설치 과정이 끝이 났습니다.&lt;/p&gt;
&lt;p&gt;정상적으로 도커가 설치되었는지 확인해 보겠습니다.&lt;/p&gt;
&lt;p&gt;$ sudo docker run hello-world&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;docker4.JPG&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;343&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nrlIr/btqMOzaKSHv/8jeCSptXJg4LamFHMzHnsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nrlIr/btqMOzaKSHv/8jeCSptXJg4LamFHMzHnsK/img.jpg&quot; data-alt=&quot;docker run hello-world&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nrlIr/btqMOzaKSHv/8jeCSptXJg4LamFHMzHnsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnrlIr%2FbtqMOzaKSHv%2F8jeCSptXJg4LamFHMzHnsK%2Fimg.jpg&quot; data-filename=&quot;docker4.JPG&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;343&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker run hello-world&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 프린트되시면 일단 도커 설치는 완료되었습니다.&lt;/p&gt;
&lt;p&gt;정상적으로 도커가 실행되지 않는다면 아래 명령어로 확인이 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 기존 실행 중인 도커 중지&lt;/p&gt;
&lt;p&gt;$ sudo pkill -SIGHUP dockerd&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저 같은 경우에는 처음 도커 설치 시에 기존 도커가 제대로 삭제되지 않았는지 이 명령어로 기존 도커를 중지시킨 후에 정상적으로 새로 설치한 도커가 실행되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #456771;&quot;&gt;도커 사용을 위한 기본 명령어&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;- 도커 버전 확인&lt;/p&gt;
&lt;p&gt;$ docker version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 도커 서비스 시작&lt;/p&gt;
&lt;p&gt;$ sudo systemctl start docker.service&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 도커 서비스 상태 확인&lt;/p&gt;
&lt;p&gt;$ sudo systemctl status docker.service&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;systemctl 명령어는 enable, disable, status, state, start, stop, restart 등 다양한 명령어로 서비스를 설정하거나 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기본 명령어&lt;/p&gt;
&lt;p&gt;$ docker images - 도커 이미지 목록 확인&lt;/p&gt;
&lt;p&gt;$ docker search 검색 키워드 - 도커 이미지 검색 (도커 허브에 등록된 레포지토리 검색)&lt;/p&gt;
&lt;p&gt;$ docker pull [이미지명]:[버전] - 도커 허브에서 도커 이미지를 내려받을 때&lt;/p&gt;
&lt;p&gt;$ docker image tag 기반 이미지명[:태그] 새 이미지명[:태그] - 이미지에 새로운 태그를 붙일 때 (식별용)&lt;/p&gt;
&lt;p&gt;$ docker rename A B - A의 네임을 B로 바꿀 수 있습니다.&lt;/p&gt;
&lt;p&gt;$ docker rmi [IMAGE ID] - 도커 이미지 삭제, 이미지 삭제 시 -f 옵션을 붙이게 되면 컨테이너도 강제 삭제됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ docker ps -a - 컨테이너 목록 확인&lt;/p&gt;
&lt;p&gt;$ sudo docker run [options] image [:TAG|@DIGEST] [COMMAND] [ARG...] -컨테이너 실행&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[options]&lt;/p&gt;
&lt;p&gt;-d detached mode 백그라운드 모드&lt;/p&gt;
&lt;p&gt;-p 호스트와 컨테이너의 포트를 연결 (포워딩)&lt;/p&gt;
&lt;p&gt;-v 호스트와 컨테이너의 디렉터리를 연결 (마운트)&lt;/p&gt;
&lt;p&gt;-e 컨테이너 내에서 사용할 환경변수 설정&lt;/p&gt;
&lt;p&gt;--name 컨테이너 이름 설정&lt;/p&gt;
&lt;p&gt;--it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션&lt;/p&gt;
&lt;p&gt;(컨테이너의 표준 입력과 로컬 컴퓨터의 키보드 입력을 연결합니다.)&lt;/p&gt;
&lt;p&gt;--rm 프로세스 종료 시 컨테이너 자동 제거&lt;/p&gt;
&lt;p&gt;--link 컨테이너 연결[컨테이너명:별칭] &lt;br /&gt;ex) $ sudo docker run -i -t --name server ubuntu:latest /bash&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ sudo docker start [CONTAINER ID or NAME] - CONTAINER 시작&lt;/p&gt;
&lt;p&gt;$ sudo docker restart [CONTAINER ID or NAME] - CONTAINER 재시작&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ sudo docker attach [CONTAINER ID or NAME] - CONTAINER 접속&lt;/p&gt;
&lt;p&gt;$ sudo docker stop [CONTAINER ID or NAME] - CONTAINER ID 정지&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bash Shell에서 exit 또는 Ctrl + D를 입력하면 컨테이너가 정지됩니다.&lt;/p&gt;
&lt;p&gt;Ctrl + P, Ctrl + Q를 순서대로 입력하면 컨테이너를 정지하지 않고, 빠져나올 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ docker rm (--force) [CONTAINER ID or NAME] - 컨테이너 삭제&lt;/p&gt;
&lt;p&gt;$ sudo docker rm `docker ps -a -q` - 모든 컨테이너 삭제&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도커 이미지란?&lt;/p&gt;
&lt;p&gt;- 도커 컨테이너를 만들기 위한 템플릿입니다.&lt;/p&gt;
&lt;p&gt;- 도커 이미지는 운영 체체로 구성된 파일 시스템, 의존 라이브러리, 실행 환경의 설정 정보를 포함하는 아카이브로 구성됩니다.&lt;/p&gt;
&lt;p&gt;- Dockerfile은 이미지를 구성하는 순서를 기술한 코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도커 컨테이너란?&lt;/p&gt;
&lt;p&gt;- 도커 컨테이너는 가상 환경입니다.&lt;/p&gt;
&lt;p&gt;- 파일 시스템과 애플리케이션이 함께 담겨있는 박스라고 생각하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sudo 권한 없이 Docker 명령어 쓰기&lt;/p&gt;
&lt;p&gt;$ sudo usermod -aG docker $USER # 현재 접속 중인 사용자에게 권한 주기&lt;/p&gt;
&lt;p&gt;$ sudo usermod -aG docker your-user # your-user 사용자에게 권한 주기&lt;/p&gt;
&lt;p&gt;사용자가 로그인 중 일 때는, 다시 로그인하면 권한이 적용됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막으로 도커 삭제까지 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;$ sudo apt-get purge docker-ce docker-ce-cli containerd.io&lt;/p&gt;
&lt;p&gt;$ sudo rm -rf /var/lib/docker&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>docker</category>
      <category>nvidia-docker</category>
      <category>도커</category>
      <category>도커 명령어</category>
      <category>도커 삭제</category>
      <category>도커 설치</category>
      <category>도커이미지</category>
      <category>엔비디아도커</category>
      <category>컨테이너</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/10</guid>
      <comments>https://jayyjji.tistory.com/10#entry10comment</comments>
      <pubDate>Sun, 8 Nov 2020 00:00:29 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 grep 명령어</title>
      <link>https://jayyjji.tistory.com/9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;리눅스 grep 명령어&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Linux command 리눅스 필수 명령어 grep&lt;/b&gt; 이번 스토리는 grep 명령어에 대해서 설명해 보겠습니다. 리눅스를 사용하시면 필수적으로 사용하는 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;grep는 문자열로 검색하는 명령어입니다. find가 파일 이름, 디렉터리 이름, 속성 등을 조건으로 파일 또는 디렉터리를 검색하는 명령어라면 grep는 find와 성격이 다릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 파일이나 메시지에서 그 안에 포함된 문자열로 검색하는 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dmesg로 예를 한번 들어보겠습니다. dmesg 란 dmesg (&quot;display message&quot; 또는 &quot;driver message&quot;를 의미합니다.)는 거의 대부분의 리눅스 OS와 유닉스 기반의 운영체제에 존재하는 명령어로 커널의 메시지를 출력하는 역할을 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버가 부팅된 후, 로그인을 하고 dmesg를 타이핑하면 출력하여 볼 수 있습니다. 언제나 dmesg를 타이핑하면 출력해서 메시지를 보여줍니다. 일단, 부팅 메시지를 설명해 드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리눅스 서버가 부팅, 즉 포스팅이 될 때 커널이 메모리로 불러들여집니다. 메모리에 얹어지는 것입니다. 이 단계에서 커널에 내장된 각 장치(device) 드라이버가 해당 하드웨어를 탐색하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하드웨어를 발견하면, 그 장치에 대해 알려주거나 상태를 메시지로 출력하게 됩니다. 커널 내 특정 모듈의 존재 여부와 전달된 매개 변수 값, 오류가 발생했다면 어떤 것인지 출력해서 보여줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런데 이 메시지를 모두 읽기 전에 화면에서 사라질 정도로 빨리 지나갑니다. 리눅스 서버를 부팅하면, OS에 진입하기 전에 메시지들이 죽죽 지나가는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇기 때문에 dmesg 명령어로 시스템이 부팅된 후에 이러한 메시지를 출력해서, 필요하면 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;부팅 이후에는 커널에서 진단한 메시지를 추가로 출력할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들면 Input/Output 장치에서 오류가 발생하거나 USB같은 장치들이 핫스왑, 플러그 인 플러그 되는 경우에도 dmesg에 출력되게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dmesg는 부팅 이후에 이러한 메시지를 검토하고 활용할 수 있게 하는 수단으로써 유용합니다. 흔히 D 메시지라고 읽고 있습니다. 출력될 때에는 시스템의 콘솔로 출력됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 콘솔이 사용 중이라면 디메시지는 사용자의 프로그램 출력과 섞이거나 덮어 쓰입니다. 알아볼 수 없게 뒤죽박죽이 될 때도 있습니다. dmesg 출력 메시지 양은 페이지를 몇 번이나 채우고 지나갑니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 dmesg를 볼 때는 more, tail, less, grep과 같은 텍스트 명령어를 이용해서 보는 경우가 대부분입니다. dmesg는 syslog와 같은 시스템 데몬이 시스템 로그파일에 기록을 합니다. 보통 리눅스 OS에서는 /var/log에 dmesg 파일이 존재합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간략하게 dmesg에 대해서 알아보았습니다. dmesg -c 명령어를 실행하게 되면 dmesg가 삭제되며 다시 쌓이게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 grep 명령어를 사용해서 dmesg를 확인해 보겠습니다. 위에서 설명드렸다시피 grep은 문자열을 토대로 검색을 하는 명령어이기 때문에 해당 문자가 존재하면 표시가 되지만, 내가 보려고 하는 파일에 해당 문자열이 없으면 출력되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dmesg에서 linux라는 단어를 검색해 보겠습니다.&lt;/p&gt;
&lt;p&gt;dmesg |&amp;lt;이 긴 작대기는 엔터키 위에 있는 돈표시에 shift키를 함께 누르면 됩니다. shift키를 먼저 눌러야 되겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이프 또는 버티칼 바 라고 읽습니다. 이 파이프 뒤에 grep명령어를 써줍니다. 그리고 보통 -i 옵션을 붙이게 됩니다. 지난번 find명령어에서 -iname과 같이 대소문자 구분 없이 검색을 할 수 있는 옵션입니다. 그리고 우리가 찾을 단어, 문자인 linux를 타이핑해주면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dmesg | grep -i linux와 같은 명령어가 되겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;grep1.JPG&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;271&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QuzCE/btqMDyQ72So/koaZLUuPmQIo7g9gWC3c31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QuzCE/btqMDyQ72So/koaZLUuPmQIo7g9gWC3c31/img.jpg&quot; data-alt=&quot;dmesg grep -i linux&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QuzCE/btqMDyQ72So/koaZLUuPmQIo7g9gWC3c31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQuzCE%2FbtqMDyQ72So%2FkoaZLUuPmQIo7g9gWC3c31%2Fimg.jpg&quot; data-filename=&quot;grep1.JPG&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;271&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dmesg grep -i linux&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위아 같이 dmesg 내에서 linux가 포함된 문자열을 표시해 줍니다. 활용에 따라 다양한 정보를 얻을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로 network 라는 단어를 검색해 보겠습니다.&lt;/p&gt;
&lt;p&gt;dmesg | grep -i network라고 타이핑하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;173&quot; data-filename=&quot;grep2.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvLqRR/btqMHVkgdK5/WLjOz1SyD2FUrqVpr5DldK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvLqRR/btqMHVkgdK5/WLjOz1SyD2FUrqVpr5DldK/img.jpg&quot; data-alt=&quot;dmesg grep -i network&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvLqRR/btqMHVkgdK5/WLjOz1SyD2FUrqVpr5DldK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvLqRR%2FbtqMHVkgdK5%2FWLjOz1SyD2FUrqVpr5DldK%2Fimg.jpg&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;173&quot; data-filename=&quot;grep2.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dmesg grep -i network&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;네트워크와 관련된 정보를 볼수 있습니다. eth0, eth1 두 개의 디바이스를 사용할 수 있다는 것도 위의 메시지로 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 두단어를 검색해 보겠습니다. 뭐든지 알면 간단합니다. 두 단어 세 단어 추가적으로 활용해서 사용할 수 있습니다. dmesg에서 linux와 network 두 단어를 한 번에 검색해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dmesg | grep -i 'linux\|network' 따옴표로 시작해서 단어와 단어 사이에 엔터 위의 키 우리나라의 돈 단위 키와 shift를 누른 후 파이프 키를 입력해서 구분을 지어주고 다시 따옴표로 닫으면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;OS상에서는 돈 표시가 역 슬러시, 백 슬러시로 표시됩니다. 돈 모양으로 표시되어도 관계없으니 사용해도 무방합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;grep3.JPG&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;391&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXILTo/btqMCgcaohp/xK4Ew3pjpQOrqbEyEftHQK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXILTo/btqMCgcaohp/xK4Ew3pjpQOrqbEyEftHQK/img.jpg&quot; data-alt=&quot;grep multi&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXILTo/btqMCgcaohp/xK4Ew3pjpQOrqbEyEftHQK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXILTo%2FbtqMCgcaohp%2FxK4Ew3pjpQOrqbEyEftHQK%2Fimg.jpg&quot; data-filename=&quot;grep3.JPG&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;391&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;grep multi&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아직도 작은 따옴표와 큰따옴표의 차이점을 찾지 못했습니다.&lt;/p&gt;
&lt;p&gt;이런 식으로 뒤에 단어를 계속 추가해서 한 번에 여러 문자열을 검색할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유용하게 활용해 보시기 바랍니다. 스토리를 시작 할때 언급드렸듯이 저는 현업에서 가장 실용적이고 자주 사용하는 명령어를 설명드리는 것입니다. 모든 명령어의 활용은 무궁무진하며 옵션 또한 그렇습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 부분을 기억하시기 바랍니다. 언제든지 명령어 뒤에 --help를 사용하시면 명령어의 과한?! 옵션의 세계에 빠지실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가적으로 부팅하는데 걸린 시간의 기준을 알고 싶으시면, dmesg 메시지 중 아래와 같은 메시지는 부팅이 끝나고 나서 Freeing init으로 표시된 메모리를 해제할 때 나오는 메시지입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 이후 메시지는 부팅 이후에 표시되는 메시지라고 보시면 됩니다. 그리고 OS를 부팅하는데 걸리는 시간 약 1.46 초라고 보시면 됩니다. 처음에 저는 저 숫자가 무엇을 의미하는지 몰랐습니다. 초, second라고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;grep4.JPG&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;127&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T8yy4/btqMBxrEvCE/UKGViX1Qp6rs5GXWFMrOck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T8yy4/btqMBxrEvCE/UKGViX1Qp6rs5GXWFMrOck/img.jpg&quot; data-alt=&quot;freeing&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T8yy4/btqMBxrEvCE/UKGViX1Qp6rs5GXWFMrOck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT8yy4%2FbtqMBxrEvCE%2FUKGViX1Qp6rs5GXWFMrOck%2Fimg.jpg&quot; data-filename=&quot;grep4.JPG&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;127&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;freeing&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 dmesg를 실시간으로 보고 싶으시면 아래 watch와 tail명령어를 활용하시면 됩니다.&lt;/p&gt;
&lt;p&gt;watch &quot;dmesg | tail -f&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 되면 실시간으로 화면에 dmesg가 표시됩니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>dmesg</category>
      <category>grep</category>
      <category>TAIL</category>
      <category>Watch</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/9</guid>
      <comments>https://jayyjji.tistory.com/9#entry9comment</comments>
      <pubDate>Fri, 6 Nov 2020 00:07:50 +0900</pubDate>
    </item>
    <item>
      <title>GeForce RTX 3080 vs RTX 3090</title>
      <link>https://jayyjji.tistory.com/8</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;GeForce RTX 3080 vs RTX 3090&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;이번에는 최신 그래픽카드에 대해서 스토리를 적어보겠습니다. 드디어 2년 동안 기다린 끝에 Nvidia의 GeForce RTX 30 시리즈의 그래픽 카드가 출시되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;개인적으로 적절한 시기에 출시되었다고 생각합니다. 그렇다면 30 시리즈 중에서 가장 가격 대비 성능이 높은 가성비 제품은 어떤 제품일까요? 어떤 제품이 퍼포먼스가 가장 뛰어날까요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가성비 제품으로는 700 달러의 GeForce RTX 3080일까요? 1,500 달러의 GeForce RTX 3090일까요? 결론은? 사용하려는 용도에 따라 선택할 그래픽카드가 다릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이게 모든 자료를 종합해 봤을 때의 결론입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;지포스 RTX 3080 vs RTX 3090, 어떤 것을 사야 할까?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;지포스 RTX 3080을 추천합니다.&lt;/b&gt; 게임을 위해서 그래픽카드를 선택하시는 분들은 RTX 3080을 구매하는 것이 현명해 보입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RTX 3080은 엔비디아가 이번 30 시리즈의 게이밍용 그래픽 카드 중 가장 주력하는 제품이라고 강조했습니다. Test에서 4K와 1440p 환경, 그리고 3440x1440 울트라 와이드에서도 초당 60 프레임 이상을 꾸준히 기록했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것만으로도 정말 훌륭하다고 볼 수 있습니다. 또 DLSS 설정을 on 시킨 상태에서 레이 트레이싱 지원 게임을 플레이하는 데도 전혀 속도감이 딸리는 문제가 없었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RTX 20 시리즈와는 확연히 다릅니다. RTX 3080의 성능은 RTX 2080과 GTX 1080 Ti를 훌쩍 뛰어 넘어서는 엄청난 성능의 업그레이드를 이뤘습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3080을 받쳐줄 수 있는 충분한 파워서플라이를 사용하는 것을 잊지 말아 주십시오. 전 세대 2080보다 암페어 GPU 아키텍처와 GDDR6X 모듈이 전력을 꽤나 소모합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;지포스 RTX 3090을 추천합니다.&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;자 이번에는 지포스 RTX 3090을 추천하는 분야입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터 조사나 콘텐츠 제작 등의 작업을 해야 하는 전문가, 연구원 혹은 가격 대비 성능을 따지지 않고 순수하게 가장 최고의 퍼포먼스만을 고집하는 전문 게이머라면 이 제품을 추천합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;게이밍 부문부터 알아 보겠습니다. 성능으로 따지자면 4K와 3440 울트라 와이드 환경에서 지포스 RTX 3090은 지포스 RTX 3080과 10~15%밖에 차이가 나지 않습니다. 가성비는 떨어진다고 판단할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가격이 두 배이상 차이 나기 때문입니다. 8K 게이밍 가능성에 접근한 제품이기는 하지만 e스포츠 게임이나 엔비디아 DLSS 2.1 울트라 모드에서만 가능하고 다이렉트X 12와 벌칸 게임에 특히 최적화되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;PCWorld의 테스트에서 대다수의 게임이 8K 환경에서 게임 설정을 울트라에서 고급으로 낮췄을 경우에도 60 fps에 못 미쳤습니다. 물론 속도는 매우 빠릅니다. 속도를 가장 중요시하는 사용자도 일부 있을 것이라고 생각됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 대다수 사용자는 RTX 3080만으로도 충분히 만족할 수 있습니다. 전문 작업자에게는 RTX 3090의 유용성이 훨씬 크고 효과적입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BFGPU라고 불리는 RTX 3090은 콘텐츠 제작 테스트에서 단연 최고의 퍼포먼스를 보여줬으며, RTX 2080Ti나 AMD 라데온 VII를 훨씬 앞섰습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RTX 3080도 순수하게 GPU만 사용하는 작업에서 15~20%의 효율을 낼 수 있지만 GDDR6X 메모리가 24GB라는 점에서 RTX 3090의 성능은 압도적으로 우위를 차지합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;콘텐츠 제작과 AI를 활용한 연구 작업은 RTX 3080에서 제공하는 10GB 메모리의 역량을 훨씬 넘어섭니다. 메모리 자체의 차이가 워낙 크기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다빈치 리졸브(DaVinci Resolve)에서 8K 미디어 렌더링을 시험한 결과 24GB 메모리를 갖춘 RTX 3090은 작업을 마칠 수 있는 유일한 제품이었습니다. NVlink 역시 전문가 활용도가 높고 RTX 3090에서만 지원하는 기능입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어떻게 보면 가격적인 부분 때문에 GeForce RTX 2080Ti가 Tesla V100을 대신해서 어마어마하게 판매된 것처럼, GeForce RTX 3090 또한 Tesla A100을 가격으로 대체할 수 있을지는 지켜봐야 할 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 이번에도 역시 엔비디아는 소프트웨어 개발 많은 시간과 자원을 투자했습니다. CUDA, 옵틱스, DLSS 기술을 활용하는 작업에서는 비 RTX 카드를 훨씬 앞서는 결과물을 보여줄 것을 기대하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;전 세대 RTX Titan도 RAM 용량이 24GB였지만 가격이 무려 2,500달러에 가까웠습니다. 현재 RTX 3090은 1,000달러가량 더 저렴합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현존 게이머들에게 가격 때문에 실질적으로 와 닿지 않겠지만, 제작자나 연구원에게는 완벽하다고 생각됩니다. 추가적으로 3080Ti 모델이나 3090Ti 모델이 출시돼야 알 수 있겠지만 현 상황이라면 3080, 3090도 품귀 현상이기 때문에 Nvidia에서 충분한 매출을 올린 후 Ti 모델을 출실 할 것으로 생각됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결론적으로 게임을 위해서라면 3080! Cuda core를 활용하실 거라면 3090을 선택하시는 게 현재 상황에서는 현명한 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;Nvidia Graphics Card&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;GT-(GreaT edition)&lt;/h4&gt;
&lt;p&gt;과거에는 중저가형 제품이나 메인트스림급을 의미하였으나, 200번대부터 메인스트림 라인업에 사용되었습니다. GT240 그 이후로의 GT의 의미는 보급형으로 분류하게 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GT730 /GT1030처럼 현재는 보급형 제품군에만 쓰인다고 보시면 됩니다. 그냥 보급형이라고 보시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;GTX-(Grand eXtreme Edition)&lt;/h4&gt;
&lt;p&gt;GT보다 상위 개념으로, Extreme 극도 / 극한이란 뜻을 내포하고 있으며, 네이밍에 GTX가 들어가는 그래픽카드의 경우 기본적으로 메인스트림 급 이상의 제품에서만 쓰이며 20 시리즈 이전까지는 플래그쉽 그래픽카드에 까지 쓰이는 라인업이 었으나 10 시리즈 최고의 그래픽카드 GTX1080 / GTX1080 TI 하지만 어떤 제품이든 후속 제품이 나오면 사그라들기 마련입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RTX를 달고 나온 20 시리즈 이후에는 그 위상이 추락하여 메인스트림급의 대명사로 남게 될 것으로 보인다.&lt;/p&gt;
&lt;p&gt;EX) GTX1660 / GTX1660 SUPER / GTX1660 TI&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;RTX-(Raytracing realTime eXtreme)&lt;/h4&gt;
&lt;p&gt;레이트레이싱 기술을 실시간으로 구현이 가능한 고성능의 그래픽카드를 의미하며 현재 RTX2060 / RTX2070 / RTX2080 / RTX 2080 TI 같은 라인업에서만 사용하는 약자로 GTX1070 TI ~GTX1080 급 이상의 성능을 내는 20 시리즈의 그래픽카드에서 주로 사용한다고 보면 되며 RTX 라인업의 경우 게이밍계의 최강 라인업이었지만, 드디어 30 시리즈가 출시되면서 20 시리즈도 서서히 사그라 들것으로 예상됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RTX에서 말하는 레이 트레이싱이란 사실적으로 빛을 표현하는 기술입니다. 빛의 반사나 폭발 효과들을 사실적으로 표현해 주는 기술이라고 생각하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어 불타는 건물이 있고, 그 불타는 건물이 도로에 고여있는 물웅덩이에 반사되어 표현되는 시각적인 효과 정도?! 를 표현하는 기술이라고 말하고 싶습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어쨌든 보이는 그래픽뿐만 아니라 반사되고 불규칙적인 난반사까지 표현하는 기술입니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>3080ti</category>
      <category>3090ti</category>
      <category>A100</category>
      <category>GTX</category>
      <category>nvidia</category>
      <category>rtx</category>
      <category>RTX 3080</category>
      <category>RTX 3090</category>
      <category>V100</category>
      <category>가성비 그래픽카드</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/8</guid>
      <comments>https://jayyjji.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 4 Nov 2020 21:58:18 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 find 명령어</title>
      <link>https://jayyjji.tistory.com/7</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;리눅스 find 명령어&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Linux commands 리눅스 명령어 find&lt;/b&gt; 이번 스토리는 find명령어에 대하여 설명해 드리겠습니다.&lt;/p&gt;
&lt;p&gt;제가 느끼기에 나름 중요하고 자주 사용하는 명령어라고 생각합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;find 명령어는 조건에 맞는 파일 또는 디렉터리를 검색하고 찾는 데 사용됩니다. find 명령어는 권한(permissions), 사용자(users), 그룹(groups), 파일 유형(file type), 날짜(date), 크기(size) 및 기타 다양한 조건을 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;현재 디렉토리에서 이름(파일명)으로 파일 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Find Files Using Name in Current Directory&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;데스트에 사용 되는linux.txt 파일은 touch linux.txt 명령어를 사용해서 임의로 만든 파일입니다. 내용은 없습니다.&lt;/p&gt;
&lt;p&gt;현재 작업하고 있는 디렉토리 ~(/root)에서 linux.txt인 파일을 찾아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;find 명령어&lt;/p&gt;
&lt;p&gt;현재 디렉토리를 의미하는 .&lt;/p&gt;
&lt;p&gt;이름(파일명)으로 찾는 옵션 -name&lt;/p&gt;
&lt;p&gt;찾으려고 하는 파일명과 확장자 linux.txt&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;find1.JPG&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;54&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bolNMZ/btqMwn13D3L/1g7qlV1UM51WDyBh1PTeO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bolNMZ/btqMwn13D3L/1g7qlV1UM51WDyBh1PTeO0/img.jpg&quot; data-alt=&quot;find1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bolNMZ/btqMwn13D3L/1g7qlV1UM51WDyBh1PTeO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbolNMZ%2FbtqMwn13D3L%2F1g7qlV1UM51WDyBh1PTeO0%2Fimg.jpg&quot; data-filename=&quot;find1.JPG&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;54&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;현재 디렉터리에서 linux.txt 파일을 찾았습니다.&lt;/p&gt;
&lt;p&gt;linux.txt 파일을 지우고 다시 find 명령어를 실행해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;find2.JPG&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;91&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pzexr/btqMqAPCZND/EnhxSCyhlDwXL8c6MJQnlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pzexr/btqMqAPCZND/EnhxSCyhlDwXL8c6MJQnlK/img.jpg&quot; data-alt=&quot;find2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pzexr/btqMqAPCZND/EnhxSCyhlDwXL8c6MJQnlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPzexr%2FbtqMqAPCZND%2FEnhxSCyhlDwXL8c6MJQnlK%2Fimg.jpg&quot; data-filename=&quot;find2.JPG&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;91&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;linux.txt 파일을 지운 후, find 명령어를 사용해서 linux.txt 파일을 찾게 되면, 아무것도 표시되지 않습니다.&lt;/p&gt;
&lt;p&gt;가장 기본 명령어 옵션(-name)만 알아도 대부분의 검색에 활용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;opt 디렉토리에서 이름(파일명)으로 파일 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Find Files Under Opt Directory&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;/opt라는 디렉토리에서 linux.txt라는 파일을 찾아보겠습니다.(/opt 디렉토리 안에 linux.txt라는 파일도 touch 명령어로 미리 만들어 놓았습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자가 작업하는 현재 디렉터리의 위치는 상관이 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;find 명령어&lt;/p&gt;
&lt;p&gt;특정 디렉토리 /opt&lt;/p&gt;
&lt;p&gt;옵션 -name&lt;/p&gt;
&lt;p&gt;찾으려고 하는 파일명과 확장자 linux.txt&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;58&quot; data-filename=&quot;find3.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckJz5y/btqMwmIPFa2/nyljJAUNYWN6TBcFvwVl11/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckJz5y/btqMwmIPFa2/nyljJAUNYWN6TBcFvwVl11/img.jpg&quot; data-alt=&quot;find 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckJz5y/btqMwmIPFa2/nyljJAUNYWN6TBcFvwVl11/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckJz5y%2FbtqMwmIPFa2%2FnyljJAUNYWN6TBcFvwVl11%2Fimg.jpg&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;58&quot; data-filename=&quot;find3.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;특정 디렉터리에 있는 파일을 이름으로 찾았습니다. 이해하면 영리하게 활용할 수 있는 명령어입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;대문자와 소문자 구분 없이 파일 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Find Files Using Name and Ignoring Case&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;/opt라는 디렉터리에서 linux.txt라는 파일을 모두 찾아 보겠습니다.(test에 필요한 파일은 touch 명령어를 사용해서 미리 만들어 놓았습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;find 명령어&lt;/p&gt;
&lt;p&gt;특정 디렉토리 /opt&lt;/p&gt;
&lt;p&gt;옵션 -iname (일반적으로 i 가 붙게 되면 리눅스에서는 대소문자 구분 없이 검색하게 됩니다. ex&amp;gt; grep | -i)&lt;/p&gt;
&lt;p&gt;찾으려고 하는 파일명과 확장자 linux.txt&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;find4.JPG&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;86&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHlT23/btqMvJ5ldV0/KVhPl1Y9GL47Nc9UkzE7K0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHlT23/btqMvJ5ldV0/KVhPl1Y9GL47Nc9UkzE7K0/img.jpg&quot; data-alt=&quot;find 4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHlT23/btqMvJ5ldV0/KVhPl1Y9GL47Nc9UkzE7K0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHlT23%2FbtqMvJ5ldV0%2FKVhPl1Y9GL47Nc9UkzE7K0%2Fimg.jpg&quot; data-filename=&quot;find4.JPG&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;86&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find 4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;-name 옵션으로 find 명령어를 실행했을 때와 -iname 옵션을 사용한 find 명령어를 실행했을 때, 검색 결과가 다른 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-iname 옵션을 사용했을 때는 대소문자 구분 없이 linux.txt 모든 파일을 찾아서 표시했기 때문입니다. 이것은 확장자에도 적용이 됩니다. -iname 옵션을 잘 활용하면, 대소문자로 구분된 같은 이름의 파일을 편하게 검색할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이름으로 디렉터리 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Find Directories Using Name&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번에는 파일이 아닌 디렉터리를 찾아보겠습니다. type옵션을 사용하면 됩니다.&lt;/p&gt;
&lt;p&gt;find 명령어&lt;/p&gt;
&lt;p&gt;최상위 디렉토리 /&lt;/p&gt;
&lt;p&gt;타입으로 검색 -type&lt;/p&gt;
&lt;p&gt;디렉토리 d&lt;/p&gt;
&lt;p&gt;이름으로 검색 -name&lt;/p&gt;
&lt;p&gt;찾으려고 하는 디렉토리 이름 mnt&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;find5.JPG&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;56&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VsYoT/btqMveR5O8a/3tFETpkj2OBsCp1gpeazo1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VsYoT/btqMveR5O8a/3tFETpkj2OBsCp1gpeazo1/img.jpg&quot; data-alt=&quot;find 5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VsYoT/btqMveR5O8a/3tFETpkj2OBsCp1gpeazo1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVsYoT%2FbtqMveR5O8a%2F3tFETpkj2OBsCp1gpeazo1%2Fimg.jpg&quot; data-filename=&quot;find5.JPG&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;56&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find 5&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;mnt라는 디렉터리를 찾아서 경로를 표시합니다. 이정도 되면 옵션만 잘 활용하면 내 시스템에 있는 파일이나 디렉토리는 무엇이든 찾아낼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이름으로 txt 파일 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Find TXT Files Using Name&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;위의 디렉토리 검색과 같은 맥락입니다. 단순히 이름(파일명)만 가지고 찾는 것이 아니라, type 옵션을 사용해서 파일을 찾는 방법을 설명해드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;find 명령어&lt;/p&gt;
&lt;p&gt;현재 디렉터리 .&lt;/p&gt;
&lt;p&gt;타입으로 검색 -type&lt;/p&gt;
&lt;p&gt;파일 f&lt;/p&gt;
&lt;p&gt;이름으로 검색 -name&lt;/p&gt;
&lt;p&gt;찾으려고 하는 파일명과 확장자 linux.txt&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;find6.JPG&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;54&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S0lb2/btqMr4W2C2C/lQseGqrevmIqUoshLgAXCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S0lb2/btqMr4W2C2C/lQseGqrevmIqUoshLgAXCk/img.jpg&quot; data-alt=&quot;find 6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S0lb2/btqMr4W2C2C/lQseGqrevmIqUoshLgAXCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS0lb2%2FbtqMr4W2C2C%2FlQseGqrevmIqUoshLgAXCk%2Fimg.jpg&quot; data-filename=&quot;find6.JPG&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;54&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find 6&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;현재 디렉터리에 있는 linux.txt 파일을 보여줍니다. 위의 type 명령어를 사용하면 확실히 파일과 디렉터리를 구분 지어 검색할 수 있습니다. 원하는 타입의 결과값만 찾아볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;현재 디렉터리에서 모든 txt 파일 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Find all TXT Files in Directory&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;find 명령어&lt;/p&gt;
&lt;p&gt;현재 디렉터리 .&lt;/p&gt;
&lt;p&gt;타입으로 검색 -type&lt;/p&gt;
&lt;p&gt;파일 f&lt;/p&gt;
&lt;p&gt;이름으로 검색 -name&lt;/p&gt;
&lt;p&gt;조건 *(숫자 8 키 위에 있는 별 또는 곱하기)&amp;lt;---모든 글자 수와 상관없는 확장자가 txt인 파일 &quot;*.txt&quot;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;find7.JPG&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;158&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMAnZg/btqMwnnurLT/Ifp6CkBkmvyLLyH4gRJnQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMAnZg/btqMwnnurLT/Ifp6CkBkmvyLLyH4gRJnQk/img.jpg&quot; data-alt=&quot;find 7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMAnZg/btqMwnnurLT/Ifp6CkBkmvyLLyH4gRJnQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMAnZg%2FbtqMwnnurLT%2FIfp6CkBkmvyLLyH4gRJnQk%2Fimg.jpg&quot; data-filename=&quot;find7.JPG&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;158&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;find 7&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 파일명과 관계없이 확장자가 txt 파일을 현재 디렉터리에서 모두 찾아서 표시합니다.&lt;/p&gt;
&lt;p&gt;find 명령어에서 조건에 사용되는 &quot;&quot;큰따옴표와 ''작은따옴표의 차이점이 궁금해서 둘 다 사용해 보았습니다.&lt;/p&gt;
&lt;p&gt;검색 결과로는 다른 점이 없어 보입니다. 다른 점을 아시는 분은 알려주시기 바랍니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>Find</category>
      <category>iname</category>
      <category>Name</category>
      <category>대소문자</category>
      <category>리눅스 검색</category>
      <category>리눅스 검색 명령어</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/7</guid>
      <comments>https://jayyjji.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 3 Nov 2020 22:24:15 +0900</pubDate>
    </item>
    <item>
      <title>다스, 나스, 샌 스토리지</title>
      <link>https://jayyjji.tistory.com/6</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;다스, 나스, 샌 스토리지&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;DAS, NAS, SAN storage&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번 스토리는 스토리지의 개념을 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다스 스토리지 DAS(Direct Attached Storage)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;서버와 전용 케이블로 직접 연결한 외장형 저장 장치입니다. 서버/클라이언트 환경에서의 부족한 저장 공간을 가장 쉽게 확보하는 방법입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버 자체에 물리적으로 외부 저장 장치를 직접 연결하는 것입니다. 네트워크에 연결된 각 서버에 외부 저장 장치를 직접 추가함으로써 필요한 데이터를 물리적으로 가까운 곳에서 접근할 수 있고 확장이 용이합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 데이터의 증가에 따른 외부 저장 장치의 추가는 서버의 효율성을 저하시키는 문제가 발생할 수 있습니다. 생각하는 것만으로도 복잡하고 덩치 큰일이 벌어지는 것을 상상할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 다른 문제는 네트워크 상의 서버가 다운되는 경우에는 중지된 서버에 장착된 저장 장치도 사용할 수 없게 되어 중앙 집중식 시스템과 같은 취약점이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;쉽게 말하면 PC 가 다운되면 PC의 HDD의 데이터를 사용할 수 없는 것과 동일합니다. 해당 PC에 연결된 외장 HDD를 사용할 수가 없는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장점-저렴한 초기 구축비용&lt;/p&gt;
&lt;p&gt;단점-호스트가 다운되면, 스토리지도 사용이 불가합니다. 다른 서버와의 파일 공유 불가능&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나스 스토리지 NAS(Network Attached Storage)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;File Server는 파일공유와 파일 서비스라는 서버로서의 기능으로부터 시작된 솔루션입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네트워크가 발달하지 못하고 데이터 양이 많지 않던 시절에는 회사의 부서별로 파일공유를 위해서 또는 파일에 대한 관리의 편의를 위해서 시작되었던 솔루션으로 파일공유 및 파일 서비스 기능을 위해서는 범용 OS (Unix 또는 Windows NT 등)에서 제공되는 일부분의 기능(NFS 또는 CIFS)을 이용하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터 저장장치는 주로 서버에 내장된 디스크를 사용하였습니다. 위에서 설명드린 DAS를 말하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 서버/클라이언트 구조로 파일서버가 서버로서의 역할을 각 End-user의 단말(PC 또는 Workstation)이 클라이언트로서의 역할을 하도록 구현되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런데 세월이 흐르면서 사용자 환경이 변하였습니다. 파일공유 및 파일 서비스를 위한 데이터 용량이 폭발적으로 증가하였다는 점과, 파일공유 및 파일 서비스를 위한 I/O가 보다 높은 대역폭과 속도를 요구한다는 점입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파일서버의 한계를 극복한 것이 NAS(Network Attached Storage)입니다. NAS는 저장장치의 기능을 강조한 것으로 저장장치 부분의 하드웨어적 성능/기능뿐만 아니라 소프트웨어적 기능이 예전의 파일서버와는 차별화되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 I/O측면에서도 범용 OS 대신에 파일 서비스에 특화된 전용의 OS를 사용함으로써 보다 높은 I/O 성능을 제공하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 역할에 있어서도 기존의 파일서버가 End-user 단말에 대한 파일 서비스를 제공하는 역할을 강조한 반면에 NAS는 End-user단말에 대한 기존 파일서버의 역할뿐만 아니라 애플리케이션 서버의 데이터를 네트워크(LAN)를 통해 저장하여 네트워크가 연결된 곳에서는 언제 어디서나 스토리지를 접속해 사용할 수 있는 애플리케이션 서버에 대한 저장장치로서의 역할도 하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유비쿼터스 시대가 시작된 것입니다. NAS를 이름 그대로 해석해 보면 네트워크(LAN)에 접속된 스토리지입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스토리지는 SCSI 프로토콜을 기반으로 통신을 하고 네트워크(LAN)는 TCP/IP 프로토콜을 기반으로 통신을 합니다. NAS의 장점은 파일공유입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다수의 애플리케이션 서버들이 네트워크(LAN)를 통해서 NFS 또는 CIFS와 같은 파일 서비스 프로토콜로 전용 파일서버에 접속하여 파일에 대한 서비스를 요청하면, 단일 파일서버가 그 요청에 따라 파일 서비스를 하게 됨으로써 즉, NAS에 저장된 파일이 모두 전용 파일서버 한 곳에서 관리됨으로 파일들에 관한 정보들의 Consistency라든가 locking에 문제가 없이 파일을 여러 서버들이 공유할 수 있게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NAS의 단점은 성능과 DB에서 사용할 때의 문제점이 있습니다. 성능상의 단점은 Latency Time입니다. NAS는 애플리케이션 서버에서 전용 파일서버까지 네트워크(LAN)로 접속되고 전용 파일서버에서 스토리지 사이는 채널 케이블로 접속되어 채널로만 접속되는 DAS 또는 SAN에 비해 접속 단계가 늘어남으로써 Latency Time이 더 걸리게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;물론 NAS가 LAN에서의 Latency time에서 단점을 Cache에서 그리고 저장장치 부문에서의 성능으로 보완하여 JBOD(Just Bunch of Disk: 저급의 디스크 스토리지를 의미)나 성능이 떨어지는 내장형 Disk보다 빠를 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러나 동급의 디스크 스토리지로 비교했을 때는 DAS나 SAN보다 성능이 조금 떨어지는 것이 보통입니다. 특히 I/O가 많은 대용량의 DB인 경우, 그리고 대규모 Batch Job을 수행해야 하는 경우에는 이와 같은 성능 차이가 문제가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 DB의 경우 전용 파일서버에서의 Caching기능 때문에 전용 파일서버에 장애가 일어난 경우 Data의 consistency가 문제가 될 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장점-네트워크에서 파일공유가 가능, 저렴한 비용으로 네트워크와 스토리지 구축 가능&lt;/p&gt;
&lt;p&gt;단점-성능상의 한계(나스 서버는 비교적 저렴한 하드웨어를 사용) 장점이자 단점이 될 수 있는 네트워크 연결&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;샌 스토리지 SAN(Storage Area Network)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;SAN의 경우 보통 특수 목적용 고속 네트워크로서, 대규모 네트워크 사용자들을 위하여 서로 다른 종류의 데이터 저장장치를 관련 데이터 서버와 함께 연결해 별도의 랜(LAN:근거리통신망)이나 네트워크를 구성해 저장 데이터를 관리합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정보기술(IT)이 급속히 발전하면서 기업들의 가장 큰 고민 가운데 하나는 많은 데이터를 어떻게 효율적으로 저장할 수 있는가 하는 것이었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기존 저장 방법은 장비에 스토리지를 붙여서 쓰는 DAS(direct attached storage:직접 연결 스토리지)를 이용하였으나, 저장할 데이터와 늘어나는 데이터가 한 공간에 존재하므로 데이터의 전송 속도가 떨어지는 단점이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SAN은 이러한 단점을 극복하기 위한 목적으로 1990년대 말부터 개발되기 시작해 단기간에 새로운 데이터 저장기법으로 떠올랐습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서로 다른 종류의 저장장치들이 함께 연결되어 있어 모든 사용자들이 공유할 수 있을 뿐 아니라, 백업, 복구, 보관, 검색 등이 가능하고, 한 저장장치에서 다른 저장장치로 데이터를 이동시킬 수 있다는 장점이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SAN 외에 별도로 네트워크(LAN)를 구성해 저장 데이터를 관리하는 방법으로 NAS(network attached storage:네트워크 연결 스토리지) 등이 있지만, 갈수록 대형화하면서 고성장세를 보이고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 SAN을 구축하기 위해서는 NAS 스토리지에 비해서 많은 비용과 장비들의 투자가 필요하고, 기존 시스템들의 업그레이드가 필수적이므로 몇 가지 제약이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SAN을 이기종간의 여러 서버에서 하나의 스토리지를 공유하기 위해서는 SAN 매니지먼트 소프트웨어가 별도로 필요로 하고 , NAS 와는 달리 SAN 네트워크를 별도로 구축을 해야 한다는 단점이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SAN은 서버와 스토리지 사이의 채널 접속에 파이버 채널 스위치를 넣어 네트워크의 개념을 도입한 것입니다. 그렇다면 왜 SCSI Switch가 아닌 파이버 채널 스위치일까요? SCSI의 경우 Open System의 채널 인터페이스이긴 하지만 접속 거리가 최대 25m로 네트워크로 구성하기에는 거리 제약이 있으며 스위칭을 위한 고려가 전혀 되어있지 않는 인터페이스란 점 때문에 파이버 채널을 SAN의 표준으로 정하게 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이버 채널 스위치를 중간에 넣음으로써 서버의 접속 포트 하나에서 여러 대의 스토리지를 접속할 수 있고, 또한 스토리지의 접속 포트 하나에 여러 서버가 접속할 수 있는 유연성이 생기게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러나 여러 서버에서 파일 공유를 하려는 측면에서 생각해 보면 동일 파일 시스템에 대한 관리를 각각의 서버에서 해야 하기 때문에 Locking 문제와 Consistency 문제가 생기게 되고 그런 이유로 일반적으로 파일공유가 되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장점-Fiber Channel을 통한 광통신 가능(매우 빠른 I/O 속도), 다중의 스토리지 관리 가능&lt;/p&gt;
&lt;p&gt;단점-비싼 비용&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Fiber Channel-파이버 채널(Fibre Channel, 줄여서 FC)은 주로 스토리지 네트워킹에 쓰이는 Gbps 기가비트 속도의 네트워크 기술입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;슈퍼컴퓨터 분야에 주로 사용되기 시작하였으나, 지금은 기업용 자료 보관을 위한 SAN의 표준 연결 형태가 되어가고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이버 채널의 파이버는 &quot;섬유&quot;를 뜻하지만 실제로 파이버 채널의 통신은 연선 구리 케이블과 광학 섬유 케이블을 사용하고 있습니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>Das</category>
      <category>Nas</category>
      <category>San</category>
      <category>Storage</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/6</guid>
      <comments>https://jayyjji.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 2 Nov 2020 17:16:40 +0900</pubDate>
    </item>
    <item>
      <title>우분투 18.04 엔비디아 드라이버 설치</title>
      <link>https://jayyjji.tistory.com/5</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;우분투 18.04 엔비디아 드라이버 설치&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;엔비디아 드라이버 설치 및 삭제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Ubuntu 18.04 nvidia driver install 우분투 엔비디아 드라이버 설치&lt;/b&gt; 우분투에서 NVIDIA 드라이버를 설치하는 방법입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 스토리에서는 우분투(Ubuntu)에서 엔비디아(NVIDIA) 그래픽카드, GPU 드라이버를 설치하는 방법 설명하겠습니다. CUDA 라이브러리를 사용하기 전 먼저 드라이버를 설치해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;엔비디아 드라이버 설치 설명 보기 귀찮으신 분들은 아래 명령어 세줄만 사용하시면 됩니다.&lt;/p&gt;
&lt;p&gt;전제조건은 엔비디아 GPU나 그래픽카드가 정상적으로 장착되어 있어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;lspci | grep -i nvidia로 검색하시면 장치를 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;sudo 권한이어야 합니다. 네트워크가 외부와 연결되어있어야 합니다.&lt;/p&gt;
&lt;p&gt;ping 명령어로 8.8.8.8(google DNS)로 테스트해보면 확인이 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605242837169&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
25:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
41:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
61:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
81:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
a1:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
c1:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
e1:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1)
root@localhost:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=111 time=40.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=111 time=39.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=111 time=39.8 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 39.806/39.969/40.219/0.179 ms
root@localhost:~#&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;설치 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;레포지터리를 이용하면, 다운로드 받을 수 있는 드라이버 목록이 현재 내 시스템에 업데이트됩니다. 그러면 그 목록에서 선택한 후 설치를 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;의존성 파일들도 별도로 설치할 필요 없이 한방에 설치됩니다. 참 편한 방법입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605242590735&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# apt-add-repository ppa:graphics-drivers/ppa
root@localhost:~# apt-get update
root@localhost:~# apt-get install nvidia-driver-
nvidia-driver-390         nvidia-driver-435         nvidia-driver-450-server
nvidia-driver-418         nvidia-driver-440         nvidia-driver-455
nvidia-driver-418-server  nvidia-driver-440-server
nvidia-driver-430         nvidia-driver-450&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;삭제 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;sudo 권한으로 진행하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1605243251469&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost:~# apt-get remove --purge nvidia*
root@localhost:~# apt-get autoremove
root@localhost:~# apt-get autoclean&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/etc/modprobe.d/blacklist-nouveau.conf 혹은 /etc/modprobe.d/blacklist.conf 파일에 blacklist nouveau를 추가하셨다면 삭제해주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에는 요약이고, 이제 설명드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GUI가 없는 서버 버전을 기준으로 설명하겠습니다. 먼저 NVIDIA 드라이버가 설치되었는지 확인합니다.&lt;/p&gt;
&lt;p&gt;cat /proc/driver/nvidia/version&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidiadriver.JPG&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;63&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MS2wR/btqMiZN5rDn/LoISyQ7jshlobaUycesxu1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MS2wR/btqMiZN5rDn/LoISyQ7jshlobaUycesxu1/img.jpg&quot; data-alt=&quot;cat /proc/driver/nvidia/version&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MS2wR/btqMiZN5rDn/LoISyQ7jshlobaUycesxu1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMS2wR%2FbtqMiZN5rDn%2FLoISyQ7jshlobaUycesxu1%2Fimg.jpg&quot; data-filename=&quot;nvidiadriver.JPG&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;63&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cat /proc/driver/nvidia/version&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;nvidia-smi&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;위의 두 방법으로 설치된 NVIDIA 드라이버를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 cat /proc/driver/nvidia/version으로 확인할 때, 파일 또는 디렉터리가 없다는 메시지가 표시되면 드라이버가 설치되지 않은 것입니다. nvidia-smi는 드라이버가 설치되어있지 않으면, 실행되지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;lspci 명령어를 이용하여 GPU 모델과 커널 모듈 정보를 확인합니다.&lt;/p&gt;
&lt;p&gt;lspci -k&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 명령어를 실행하면 많은 내용이 나타나는데 아래와 같이 NVIDIA GPU 모델과 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;00:03.0 VGA compatible controller: NVIDIA Corporation GK104 GL [GRID K520] (rev a1) Subsystem: NVIDIA Corporation GK104 GL&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 결과는 사용 중인 모듈 정보가 없습니다. 하지만 사용 중인 커널 모듈 정보가 있을 경우 아래와 같이 Kernel driver in use라고 하면서 모듈 정보가 추가로 표시됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;02:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2) Subsystem: NVIDIA Corporation GM107 Kernel driver in use: nouveau Kernel modules: nvidiafb, nouveau&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NVIDIA 드라이버 설치 방법을 설명하는 포스트에서 nouveau 모듈을 사용하지 않게 blacklist에 추가하는 명령어를 함께 실행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 오늘 스토리에서는 현재 nouveau 모듈이 사용 중이더라도 드라이버 설치 시 자동으로 blacklist에 추가되므로 신경 쓰지 않아도 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가로 언어 설정이 되지 않았을 경우 설치에 필요한 언어 set, locale 등 기본 유틸이 기본 패키지를 설치해 주시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;apt-get update &amp;amp;&amp;amp; apt-get install -y dialog language-pack-en # export LANGUAGE=en_US # export LANG=en_US.UTF-8 # export LC_ALL=en_US.UTF-8 # update-locale&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 아래의 내용을 /etc/default/locale 추가합니다.&lt;/p&gt;
&lt;p&gt;LANG=&quot;en_US.UTF-8&quot; LANGUAGE=&quot;en_US&quot; LC_ALL=&quot;en_US.UTF-8&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 Repository를 추가합니다. 가장 쉽고 빠르게 NVIDIA 드라이버를 설치할 수 있는 방법입니다. 우분투 16.04 버전과 18.04 버전 모두 NVIDIA Repository를 지원합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;공식 NVIDIA Repository를 추가하여 설치하는 방법을 설명하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;sudo add-apt-repository ppa:graphics-drivers/ppa&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;repository.JPG&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;579&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buWjVk/btqMhtu7rXN/ZLO636jJlNDHK0reIM4WIK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buWjVk/btqMhtu7rXN/ZLO636jJlNDHK0reIM4WIK/img.jpg&quot; data-alt=&quot;sudo add-apt-repository ppa:graphics-drivers/ppa&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buWjVk/btqMhtu7rXN/ZLO636jJlNDHK0reIM4WIK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuWjVk%2FbtqMhtu7rXN%2FZLO636jJlNDHK0reIM4WIK%2Fimg.jpg&quot; data-filename=&quot;repository.JPG&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;579&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;sudo add-apt-repository ppa:graphics-drivers/ppa&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;레포지터리 추가 화면이 나오면 엔터를 눌러 진행해 줍니다. 레포지터리가 추가된 다음은 update 명령어를 통해서 패키지 목록을 업데이트해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;sudo apt-get update&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;매우 간단하게 레포지터리를 추가할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;반드시 apt-get update명령어를 실행하여, 최신 NVIDIA 패키지 리스트를 추가합니다. 그리고 아래의 명령어를 사용하여 설치 가능한 드라이버 버전을 확인합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;apt-cache search nvidia&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;search.JPG&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;604&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BQ6Cr/btqMdU8yV93/Eld21VQc9qnD6qKgBXaZ00/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BQ6Cr/btqMdU8yV93/Eld21VQc9qnD6qKgBXaZ00/img.jpg&quot; data-alt=&quot;apt-cache search nvidia&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BQ6Cr/btqMdU8yV93/Eld21VQc9qnD6qKgBXaZ00/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBQ6Cr%2FbtqMdU8yV93%2FEld21VQc9qnD6qKgBXaZ00%2Fimg.jpg&quot; data-filename=&quot;search.JPG&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;604&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;apt-cache search nvidia&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;nvidia-xxx로 나타나는 패키지 중에서 설치 가능한 버전을 확인합니다. NVIDIA 드라이버 버전이 410 이상일 경우 nvidia-driver-410처럼 driver라는 단어가 추가되어 패키지 이름이 변경되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;호환되는 드라이버가 상위 버전일 경우 nvidia-driver-xxx 패키지를 통해서 설치 가능합니다.&lt;/p&gt;
&lt;p&gt;이제 드라이버 설치를 설치합니다. 위에서 확인 한 드라이버 버전을 아래의 명령어로 설치합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;sudo apt-get install nvidia-driver-455&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nvidia-driver.JPG&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;70&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nwkok/btqMdEkCPMq/WRZYifLthjekQ41ei07f31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nwkok/btqMdEkCPMq/WRZYifLthjekQ41ei07f31/img.jpg&quot; data-alt=&quot;apt-get install nvidia-driver-&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nwkok/btqMdEkCPMq/WRZYifLthjekQ41ei07f31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnwkok%2FbtqMdEkCPMq%2FWRZYifLthjekQ41ei07f31%2Fimg.jpg&quot; data-filename=&quot;nvidia-driver.JPG&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;70&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;apt-get install nvidia-driver-&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;드라이버 설치 후,&lt;/p&gt;
&lt;p&gt;cat /proc/driver/nvidia/version&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;nvidia-smi&lt;/p&gt;
&lt;p&gt;nvidia-smi 명령어로 엔비디아 드라이버 버전과 장치를 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8gpu.JPG&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;615&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6KoNg/btqMknWv2ug/sKYW7dcyGxksOiklmpDd9K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6KoNg/btqMknWv2ug/sKYW7dcyGxksOiklmpDd9K/img.jpg&quot; data-alt=&quot;nvidia-smi 8GPU system&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6KoNg/btqMknWv2ug/sKYW7dcyGxksOiklmpDd9K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6KoNg%2FbtqMknWv2ug%2FsKYW7dcyGxksOiklmpDd9K%2Fimg.jpg&quot; data-filename=&quot;8gpu.JPG&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;615&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;nvidia-smi 8GPU system&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위는 tesla v100을 8개 장착한 GPU system입니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>add-apt-repository</category>
      <category>driver</category>
      <category>GPU</category>
      <category>nvidia</category>
      <category>nvidia-smi</category>
      <category>PPA</category>
      <category>Repository</category>
      <category>Tesla</category>
      <category>V100</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/5</guid>
      <comments>https://jayyjji.tistory.com/5#entry5comment</comments>
      <pubDate>Sun, 1 Nov 2020 17:03:26 +0900</pubDate>
    </item>
    <item>
      <title>우분투 18.04 네트워크 설정 - netplan</title>
      <link>https://jayyjji.tistory.com/4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;우분투 18.04 네트워크 설정 - netplan&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Ubuntu 18.04 network 우분투 네트워크 &lt;/b&gt;우선 우분투의 네트워크를 설정하기 위해서는 이더넷 장치가 시스템에 존재하는지 확인해야 합니다. lspci 명령어를 사용하여 현재 시스템의 network device를 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;lspcieht.JPG&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;78&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FAfjI/btqMfjMPxiQ/aDh7FsiuGA3FxWxUgNb8pK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FAfjI/btqMfjMPxiQ/aDh7FsiuGA3FxWxUgNb8pK/img.jpg&quot; data-alt=&quot;lspci명령어를 사용한 network device 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FAfjI/btqMfjMPxiQ/aDh7FsiuGA3FxWxUgNb8pK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFAfjI%2FbtqMfjMPxiQ%2FaDh7FsiuGA3FxWxUgNb8pK%2Fimg.jpg&quot; data-filename=&quot;lspcieht.JPG&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;78&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lspci명령어를 사용한 network device 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 시스템에는 두 개의 네트워크 장치가 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 이 장치가 인터넷에 연결되어 있는지 확인해 보겠습니다.&lt;/p&gt;
&lt;p&gt;ifconfig명령어를 사용하거나 ip a 명령어를 사용하면 확인이 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;441&quot; data-filename=&quot;ifconfiga.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HmSyi/btqMdDrYDtD/INefXwGX0HRYKwxUdO7QK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HmSyi/btqMdDrYDtD/INefXwGX0HRYKwxUdO7QK1/img.jpg&quot; data-alt=&quot;ifconfig명령어를 사용한 network device 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HmSyi/btqMdDrYDtD/INefXwGX0HRYKwxUdO7QK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHmSyi%2FbtqMdDrYDtD%2FINefXwGX0HRYKwxUdO7QK1%2Fimg.jpg&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;441&quot; data-filename=&quot;ifconfiga.JPG&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ifconfig명령어를 사용한 network device 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ipa.JPG&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;266&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CPrNe/btqMdWkv3iO/xzZKTyckOyYbqclRExuO51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CPrNe/btqMdWkv3iO/xzZKTyckOyYbqclRExuO51/img.jpg&quot; data-alt=&quot;ip a 명령어를 사용한 네트워크 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CPrNe/btqMdWkv3iO/xzZKTyckOyYbqclRExuO51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCPrNe%2FbtqMdWkv3iO%2FxzZKTyckOyYbqclRExuO51%2Fimg.jpg&quot; data-filename=&quot;ipa.JPG&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;266&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ip a 명령어를 사용한 네트워크 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;ifconfig 명령어를 사용하면 현재 연결된 네트워크 장치를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;옵션 -a를 사용하면 연결되지 않은 장치도 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 경우 ifconfig만 입력했을 경우 ens33 장치만 표시되고 ens34는 표시되지 않습니다.&lt;/p&gt;
&lt;p&gt;네트워크가 연결되지 않았기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ens33은 ip가 표시된 것을 보면 네트워크가 연결된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;대부분은 서버들은 랜 포트를 두 개 이상 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;bonding을 통해서 대역폭을 넓히는 구성을 할 수도 있고, active, backup(standby), failover를 통해서 랜 포트 한 개의 작동이 안 될 경우, 다른 포트를 작동시켜 서버의 안정성을 확보할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 다른 경우는 랜 포트 한 개는 내부네트워크용, 나머지 한 개는 외부 네트워크용 방식으로 다양하게 활용할 수 있습니다. 보통 서버는 2개에서 많게는 16개, 그 이상의 랜 포트를 사용 경우도 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;/etc/network/interfaces 편집&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이제 위의 사진을 참고로 하여 ens34 포트를 연결해 보겠습니다. 당연하지만 물리적으로 활성화된 라우터나 스위치, 허브와 LAN cable로 연결되어있어야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ethtooldev.JPG&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;459&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcfQ4r/btqMcToGkZD/UJNcU9wKtrAqSyLh4ay4Y0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcfQ4r/btqMcToGkZD/UJNcU9wKtrAqSyLh4ay4Y0/img.jpg&quot; data-alt=&quot;ethtool 명령어를 사용한 link 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcfQ4r/btqMcToGkZD/UJNcU9wKtrAqSyLh4ay4Y0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcfQ4r%2FbtqMcToGkZD%2FUJNcU9wKtrAqSyLh4ay4Y0%2Fimg.jpg&quot; data-filename=&quot;ethtooldev.JPG&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;459&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ethtool 명령어를 사용한 link 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정상적으로 통신이 가능한 경우 맨 아래 Link detected에 yes라고 표시 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우분투 18.04 LTS에서 네트워크는 여러 가지 방법으로 설정할 수 있습니다. 이번 스토리에서는 두 가지 방법을 알아보겠습니다. 네트워크 매니저를 사용하는 방법은 제외하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;/etc/network/interfaces의 파일을 편집하는 방법과 /etc/netplan/01-netcfg.yaml 파일을 편집하는 방법입니다.&lt;/p&gt;
&lt;p&gt;기존의 우분투는 대부분 사용자들이 /etc/network/interfaces의 편집을 통해서 네트워크를 설정했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;interfacesdhcp.JPG&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;177&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xXOPe/btqMdWyagE2/V6VLobxzIa4w1bkJugkbLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xXOPe/btqMdWyagE2/V6VLobxzIa4w1bkJugkbLk/img.jpg&quot; data-alt=&quot;/etc/network/interfaces 편집으로 네트워크 설정 dhcp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xXOPe/btqMdWyagE2/V6VLobxzIa4w1bkJugkbLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxXOPe%2FbtqMdWyagE2%2FV6VLobxzIa4w1bkJugkbLk%2Fimg.jpg&quot; data-filename=&quot;interfacesdhcp.JPG&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;177&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;/etc/network/interfaces 편집으로 네트워크 설정 dhcp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;vi or vim 편집기를 사용해서 위와 같이 작성하거나 수정해주면 됩니다.&lt;/p&gt;
&lt;p&gt;꼭 vi , vim이 아니더라도 nano 같은 편집기를 사용하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ens34에 대한 설정이 없어서 ens33 아래 추가로 작성했습니다.&lt;/p&gt;
&lt;p&gt;위의 사진에서는 ens33, ens34 두 장치 모두 dhcp로 설정했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자동으로 ip를 할당받게 설정된 것입니다.&lt;/p&gt;
&lt;p&gt;수정후 파일을 저장합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1.service networking restart&lt;/p&gt;
&lt;p&gt;2.systemctl restart networking.service&lt;/p&gt;
&lt;p&gt;3./etc/init.d/networking restart&lt;/p&gt;
&lt;p&gt;4.ifup ens34&lt;/p&gt;
&lt;p&gt;5.reboot or init 6&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네 개의 명령어 중 하나를 사용해서 네트워크 디바이스를 재시작하거나 시스템을 재부팅합니다.&lt;/p&gt;
&lt;p&gt;정상적으로 ens34가 연결된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;고정 ip로 설정할 때는 dhcp부분을 static으로 수정하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;interfacesstatic.JPG&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;432&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sxXwv/btqMht2BfYb/8hpmwudOaAnTvzNX9VeJpK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sxXwv/btqMht2BfYb/8hpmwudOaAnTvzNX9VeJpK/img.jpg&quot; data-alt=&quot;/etc/network/interfaces 편집으로 네트워크 설정 static&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sxXwv/btqMht2BfYb/8hpmwudOaAnTvzNX9VeJpK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsxXwv%2FbtqMht2BfYb%2F8hpmwudOaAnTvzNX9VeJpK%2Fimg.jpg&quot; data-filename=&quot;interfacesstatic.JPG&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;432&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;/etc/network/interfaces 편집으로 네트워크 설정 static&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 static(고정 ip)으로 사용하실 때는 추가적인 편집이 필요합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;iface 장치명 inet static --- inet 뒷부분을 static으로 변경합니다.&lt;/p&gt;
&lt;p&gt;address 사용할 ip를 작성합니다.&lt;/p&gt;
&lt;p&gt;할당받은 ip나 사용 가능한 ip 주소를 사용합니다.&lt;/p&gt;
&lt;p&gt;netmask 네트워크의 규모를 설정합니다.&lt;/p&gt;
&lt;p&gt;일반적으로 255.255.255.0 C-class를 사용합니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;network 일반적으로 현재 네트워크의 첫 번째 주소입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;broadcast 일반적으로 현재 네트워크의 마지막 주소입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;network와 broadcast는 입력하지 않아도 네트워크를 사용하는데 문제없습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;gateway 게이트웨이의 ip를 작성합니다.&lt;/p&gt;
&lt;p&gt;일반적으로 ip 대역의 1번 ip를 사용합니다. xxx.xxx.xxx.1 vmware의 경우 xxx.xxx.xxx.2를 사용합니다.&lt;/p&gt;
&lt;p&gt;dns-nameservers dns ip를 작성합니다.&lt;/p&gt;
&lt;p&gt;domain 주소를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;168.126.63.1 KT DNS server&lt;/p&gt;
&lt;p&gt;8.8.8.8 Google DNS server&lt;/p&gt;
&lt;p&gt;설정 후 저장을 하고, 네트워크를 재시작해주셔야 적용됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1.service networking restart&lt;/p&gt;
&lt;p&gt;2.systemctl restart networking.service&lt;/p&gt;
&lt;p&gt;3./etc/init.d/networking restart&lt;/p&gt;
&lt;p&gt;4.ifup ens34&lt;/p&gt;
&lt;p&gt;5.reboot or init 6&lt;/p&gt;
&lt;p&gt;5번을 사용하여 시스템을 재시작하여도 적용됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;/etc/netplan/01-netcfg.yaml 편집&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;최근에는 netplan을 사용하여 네트워크를 편집하고 있습니다. 간혹 파일명이 다를 수도 있습니다. *.yaml 파일을 편집하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;netplandhcp.JPG&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;192&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bklusc/btqMdE5BmsY/WBaahVcankKutNPR1sk47K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bklusc/btqMdE5BmsY/WBaahVcankKutNPR1sk47K/img.jpg&quot; data-alt=&quot;/etc/netplan/01-netcfg.yaml 편집으로 네트워크 설정 dhcp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bklusc/btqMdE5BmsY/WBaahVcankKutNPR1sk47K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbklusc%2FbtqMdE5BmsY%2FWBaahVcankKutNPR1sk47K%2Fimg.jpg&quot; data-filename=&quot;netplandhcp.JPG&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;192&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;/etc/netplan/01-netcfg.yaml 편집으로 네트워크 설정 dhcp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 사진은 ens33, ens34 두 장치(포트)를 dhcp4를 yes(true)로 설정했습니다.&lt;/p&gt;
&lt;p&gt;netplan apply 명령어를 사용하여 적용시켜줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정상적으로 적용되었다면 별다른 메시지가 발생하지 않습니다.&lt;/p&gt;
&lt;p&gt;적용 후, ifconfig or ip a로 꼭 네트워크를 확인하시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;netplanstatic.JPG&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;312&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chasf3/btqMht9nSCd/6FkDzkHYJndu0AhfTtnI6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chasf3/btqMht9nSCd/6FkDzkHYJndu0AhfTtnI6k/img.jpg&quot; data-alt=&quot;/etc/netplan/01-netcfg.yaml 편집으로 네트워크 설정 static&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chasf3/btqMht9nSCd/6FkDzkHYJndu0AhfTtnI6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchasf3%2FbtqMht9nSCd%2F6FkDzkHYJndu0AhfTtnI6k%2Fimg.jpg&quot; data-filename=&quot;netplanstatic.JPG&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;312&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;/etc/netplan/01-netcfg.yaml 편집으로 네트워크 설정 static&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;고정 ip를 사용하시는 경우는 위와 같이 dhcp4 부분을 no(false)로 변경하시고, 추가적으로 편집을 해주면 됩니다.&lt;/p&gt;
&lt;p&gt;addresses [ 로 시작하며 사용 가능한 ip를 입력하고 마지막 ip뒤에 / prefix를 입력합니다.(netmask) 마지막은 ] 로 닫아줍니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 45.8252%; height: 539px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;netmask&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;prefix&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.255&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/32&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.254&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/31&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.252&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/30&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.248&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/29&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.240&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/28&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.224&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/27&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.192&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/26&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.128&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/25&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;128&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.255.0&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/24&amp;nbsp; Class C&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;256&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.254.0&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/23&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;512&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;~&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.255.0.0&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/16 Class B&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;65,536&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;255.0.0.0&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/8 Class A&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;16,777,216&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;0.0.0.0&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;/0 The Internet&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;4,294,967,296&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;gateway4 게이트웨이 ip를 작성합니다.&lt;/p&gt;
&lt;p&gt;nameservers 다음 줄 addresses에 dns server ip를 입력해 줍니다. 콤마를 사용하여 추가로 dns server를 입력할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;addresses는 [ 로 시작하고 ] 로 닫아줍니다.&lt;/p&gt;
&lt;p&gt;설정을 저장하고 netplan apply로 적용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정상적으로 적용이 되었다면, 별다른 메시지가 표시되지 않습니다.&lt;/p&gt;
&lt;p&gt;적용 후, ifconfig or ip a로 네트워크를 확인해 줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ping test를 통하여 ping이 게이트웨이, 외부 dns server ip, domain으로 나가는지 확인합니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>ethtool</category>
      <category>ifconfig</category>
      <category>ifupdown</category>
      <category>netplan</category>
      <category>prefix</category>
      <category>ubuntu network interfaces</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/4</guid>
      <comments>https://jayyjji.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 1 Nov 2020 03:00:34 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 종류와 역사 - Linux OS</title>
      <link>https://jayyjji.tistory.com/3</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;리눅스 종류와 역사 - Linux OS&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Linux OS(리눅스 OS) 종류 &lt;/b&gt;리눅스의 종류에 대해 간단히 알아보겠습니다. 우선 리눅스에 대해서 최대한 간략하게 설명하겠습니다. 리눅스란? 오픈소스 운영체제입니다. 오픈소스란 소스를 오픈했다는 뜻입니다. 누구나 소스에 접근할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;운영체제 즉, OS는 크게 윈도우, 리눅스, 유닉스로 나누어집니다.&lt;/p&gt;
&lt;p&gt;(사실 우리가 잘 알지 못하는 OS도 매우 많지만, 이 스토리에서는 그렇게 세세히 알 필요는 없습니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;윈도우 OS는 이미 PC 시장을 장악했습니다.(Mac OS도 존재하긴 합니다만.,)&lt;/p&gt;
&lt;p&gt;누구나 아는 사실이죠.&lt;/p&gt;
&lt;p&gt;간혹 PC에 리눅스를 설치하여 사용하시는 분들도 있지만, 윈도우가 PC 시장을 장악한 건 사실입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇다면 Linux와 Unix는 어디에 사용되느냐가 궁금하실 겁니다.&lt;/p&gt;
&lt;p&gt;이 둘은 서버 시장을 장악하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;물론 Windows server 그 외의 소소한 Server OS들이 있지만, 점유율은 미미합니다.&lt;/p&gt;
&lt;p&gt;과거에 운용되는 서버 OS를 유닉스(Unix)가 대부분 점유했으며, 현재도 높은 점유율을 유지하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;유닉스 서버의 종류는 Solaris(Oracle), AIX(IBM), HP-UX(HP), OSX(Apple), etc,. 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;하지만, 점점 유닉스를 사용하는 기업들보다 리눅스를 사용하는 기업이나 단체들이 증가하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유닉스의 점유율은 시간이 지날수록 점점 낮아질 것으로 보입니다.&lt;/p&gt;
&lt;p&gt;이미 서버 시장 점유율에서 유닉스 서버는 x86 서버(리눅스 서버)에 한참 뒤져있으며 다시 따라잡기 힘들어 보입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우리가 이름만 들으면 알만한 대기업이나 IT회사들도 대부분 리눅스 계열의 OS를 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;아직 금융권은 유닉스를 많이 사용하고 있으며, 경험상 x86 서버(리눅스 서버)가 금융기관에 납품되는 사례도 많지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;납품되더라도 Main(중요) 서버로 운용되지는 않습니다. 그렇다면 왜 유닉스에서 점점 리눅스로 OS를 이동하며,&lt;/p&gt;
&lt;p&gt;금융권은 왜 아직도 유닉스 서버를 고집할까라는 의문이 생깁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간단하게 말하면 유닉스는 유료, 리눅스는 무료입니다.&lt;/p&gt;
&lt;p&gt;유닉스 서버는 독점적이고 폐쇄적이라 안정성이 높지만, 서버 자체가 비쌉니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리눅스 서버 대비 전력 소모량도 많습니다. 리눅스는 기업 입맛에 맞게 재구성해서 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;유닉스는 독점적인 성격으로 사용자가 적절한 버그 수정을 지원받기까지 기다림의 연속입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(리눅스는 버그가 발생하더라도 사용자가 직접 디버깅하거나, 포럼에서 정보를 얻어 수정해버리면 그만입니다. 무엇보다 버그 수정과 버전 업데이트가 유닉스보다 매우 빠릅니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 금융권에서 유닉스를 단기간에 리눅스로 바꾸지 못하는 이유는 안정성과 지금까지의 전반적인 인프라가 유닉스 서버 기반으로 이루어졌기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;은행이나 증권사들은 대부분 시시각각, 분, 초를 다투며 돈이 움직이는데 리스크를 안으면서 운영체제 자체를 바꾸기가 쉽지 않습니다. 전산망도 매우 복잡하게 구성되어있어 위험요소가 많습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런 이유들로 아직까지는 안정적인 유닉스를 많이 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;금융권을 제외한 현재 서버 시장의 OS는 대부분 리눅스가 차지하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서론이 길었습니다.&lt;br /&gt;이제 본격적으로 리눅스 OS의 종류를 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;리눅스를 시작하거나 사용하려면 먼저 어떤 리눅스 OS를 사용할 것인지를 선택하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;전 세계 리눅스 OS 사용률 순위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;294&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXsTEn/btqMfjeIux6/fYUNGejljD2vMj4dmgmZsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXsTEn/btqMfjeIux6/fYUNGejljD2vMj4dmgmZsK/img.jpg&quot; data-alt=&quot;Historical trends in the usage statistics of Linux subcategories for websites&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXsTEn/btqMfjeIux6/fYUNGejljD2vMj4dmgmZsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXsTEn%2FbtqMfjeIux6%2FfYUNGejljD2vMj4dmgmZsK%2Fimg.jpg&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;294&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Historical trends in the usage statistics of Linux subcategories for websites&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 세 개에서 선택하시는 걸 추천합니다.&lt;/p&gt;
&lt;p&gt;세계적으로 가장 인기 있는 리눅스 OS 순위입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최근 데비안과 센트 OS의 순위가 바뀌었습니다.&lt;/p&gt;
&lt;p&gt;우분투의 점유율은 뭐 말이 필요 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지금까지 얼마나 많은 버전의 리눅스가 만들어지고, 사라지고, 계열이 나뉘었는지 궁금하시면 linux timeline이라고 검색하시면 이미지를 통해서 자세히 볼 수 있습니다. (도저히 이 스토리에 담을 수 없을 정도로 어마어마합니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리눅스 배포판의 종류&lt;/p&gt;
&lt;p&gt;크게 3가지 계열로 나눌 수 있습니다.&lt;/p&gt;
&lt;p&gt;슬렉웨어 계열, 데비안 계열, 레드햇 계열&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 슬랙 웨어(Slackware)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;가장 오래된 배포판입니다. 뭔가 설치할 때 의존성 문제를 일으키는 답답한 OS입니다. 처음 접하신다면 매우 힘드실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어쨌든 마니아층에서는 유니크한 맛에 아직도 사용하고 있습니다. 하나하나 손이 많이 가며, 숙달된 사용자를 위한 리눅스입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 데비안(Debian)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;우분투(Ubuntu)의 어머니?! 데비안입니다. 레드햇에 비해서 조금 더 오픈소스 쪽에 가깝습니다. 데비안도 초보자들이 사용하기에는 적합하지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설치가 어려우며, 기술지원이나 관리가 힘듭니다. 하지만 안정성이 매우 높으며, 다양한 패키지 활용이 가능합니다. 안정성이 높은만큼 소프트웨어는 구시대적입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;슬랙 웨어 대비 관리가 매우 편합니다!!! 데비안 또한 슬랙 웨어처럼 오래되어 Granpa Linux란 별명이 있습니다. 리눅스 할아버지라는 뜻입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 레드햇(Redhat)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;기업용 서버 OS로 인기가 높습니다. 구입비용이 = 기술지원비용이기 때문입니다. 예전에는 무료 버전도 있었지만, 현재는 RHEL(Red Hat Enterprise Linux) 상용 버전만 존재합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RHEL에 사용될 기능 테스트를 위해 배포하는 페도라(Fedora)와 예전 레드햇의 무료 버전 계보를 잇는 CentOS가 레드햇 계열입니다.(물론 CentOS는 기술지원은 불가합니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에서 크게 리눅스의 3가지 계열을 간단하게 설명드렸습니다.&lt;/p&gt;
&lt;p&gt;실제 현업에서 가장 많이 쓰이는 우분투와 센트 OS에 대해서는 아래 설명드리겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;우분투(Ubuntu)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;현재 리눅스 배포판 중에서 가장 인기가 있으며, 널리 알려진 OS입니다.&lt;/p&gt;
&lt;p&gt;우분투는 업데이트 주기가 짧으며, 4월과 10월에 진행됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;초보자분들도 설치와 사용이 쉬우며 수많은 정보가 웹에 공개되어있습니다. 리눅스 입문용이나 공부하는데 적합한 OS입니다. 저 또한 Linux관련 스토리는 우분투를 사용하여 설명드릴 예정입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데비안 계열의 apt 관리 도구, 유지보수, 범용성, 웹서버나 PC로 사용하기도 무난합니다. 일각에서는 최고의 리눅스 배포판이라는 말까지 나옵니다. 사용해보면 실제로도 그런 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현업에서도 GPU server의 OS로 많이 사용됩니다. 대부분의 고객사에서 CentOS or Ubuntu를 사용합니다. 연구 개발 쪽은 우분투가 비중이 높으며, 인프라 서버나 스토리지, 클러스터 쪽은 센트 OS가 비중이 높은 편입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우분투는 일반 버전과 LTS 버전이 있습니다.&lt;/p&gt;
&lt;p&gt;LTS(Long Term Support) 해석만 해봐도 무슨 의미인지 답이 나옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어&lt;/p&gt;
&lt;p&gt;ubuntu 18.04.4 LTS&lt;/p&gt;
&lt;p&gt;ubuntu 19.04&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;두 버전이 있다면 PC나 데스크톱용으로 사용하실 거면, 일반 버전 19.04를 사용하시고 Server용으로 사용하실 거면, 18.04.4 LTS 버전을 사용하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;LTS = Long Term Support&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 이유는 LTS 버전은 각종 버그, 크래시 수정이나 보안성 등의 업데이트가 5년간 지원이 됩니다.&lt;/p&gt;
&lt;p&gt;반면에 일반 버전은 우분투의 새로운 기능들을 접하는 대신 기술지원은 9개월로 매우 짧습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우분투의 버전 이름은 앞에는 배포한 연도 2자리 뒤에는 배포한 월을 두 자리로 정해집니다.&lt;/p&gt;
&lt;p&gt;예로 ubuntu 18.04 LTS의 경우 2018년 4월 출시가 되겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보통 짝수 연도 4월에 LTS 버전이 출시되며 일반 버전은 6개월마다 출시되는 추세입니다.&lt;/p&gt;
&lt;p&gt;어떻게 보면 LTS 버전을 사용하는 것이 압도적으로 유리합니다.&lt;/p&gt;
&lt;p&gt;그래서 현업에서는 LTS 버전 이외 버전은 설치 지원을 지양합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;센트 OS(CentOS)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;레드햇이 상용화(유료)되면서 무료 버전으로 센트 OS가 탄생하게 됩니다.&lt;/p&gt;
&lt;p&gt;센트 OS의 장점은 레드햇의 기술을 그대로 사용할 수 있다는 점입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유료버전을 어떻게 무료 배포하냐고 궁금하실 텐데 GPL 라이선스 룰을 이용한 것입니다.&lt;/p&gt;
&lt;p&gt;GPL은 소스를 받은 자가 그 소스를 재배포하는 것을 막지 않기 때문에, 레드햇 구매자가 레드햇의 소스를 요청하고 배포할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 점을 이용한 상표권이 배제된 리눅스가 현재 센트 OS입니다.&lt;/p&gt;
&lt;p&gt;기업에서 사용하는 리눅스 OS를 사용할 수 있다는 장점이 있지만, 기술지원은 불가합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;레드햇은 구매비용=기술지원비용이기 때문에 센트 OS를 사용하면 사용자가 직접 문제 해결을 해야 합니다.&lt;/p&gt;
&lt;p&gt;하지만 센트 OS도 사용자가 많기 때문에 웹에서 많은 정보를 찾을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 스토리는 여기까지입니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>Cent OS</category>
      <category>linux</category>
      <category>redhat</category>
      <category>RHEL</category>
      <category>ubuntu</category>
      <category>UNIX</category>
      <category>레드햇</category>
      <category>센트 OS</category>
      <category>우분투</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/3</guid>
      <comments>https://jayyjji.tistory.com/3#entry3comment</comments>
      <pubDate>Sat, 31 Oct 2020 14:59:23 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 기본 명령어 - Linux commands</title>
      <link>https://jayyjji.tistory.com/2</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;리눅스 기본 명령어 - Linux commands&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Linux commands 리눅스 기본 명령어 &lt;/b&gt;현재 서버 엔지니어로써 경험을 바탕으로 조금이나마 도움이 될 수 있는 스토리를 작성해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 서버 엔지니어, 시스템 엔지니어는 기본적으로, 필수적으로 리눅스 OS를 이해해고 사용할 줄 알아야 합니다. 일반적으로 리눅스라는 단어는 들어는 보았지만 생소하실 텐데요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컴퓨터에 조금이라도 관심이 있으신 분들은 리눅스, 유닉스, 윈도우, 도스(도스는 좀 나이가 있으셔야 알 수도 있습니다.)등의 운영체제를 들어보시거나 접해보셨을 거라 생각합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 현직 엔지니어로써 최대한 도움이 되는 실무 Linux를 알려 드리겠습니다. 부족하거나 잘못된 부분이 있다면 가감 없이 댓글로 알려주시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 외국계 x86서버 총판에서 근무하고 있습니다.&lt;/p&gt;
&lt;p&gt;서버(server), 스토리지(storage) 구축 및 OS, application 설치 지원이 주 업무입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;H/W assembly 또한 지원하고 있습니다. (Chassis, Power Supply Unit [PSU], Backplane [BPN], Power Distributor Board [PDB], Mother board [MBD], Main board, CPU, Memory [MEM], Intel optain memory, DCPMM, HDD, SSD, SAS, NLSAS, NVMe, M.2, U.2, RAID controller, HBA, Network Interface Card [NIC], Infini Band, Solar Flare, Intel, AMD, GPU, Tesla, Quadro, RTX, GRID, etc,.) 위와 같은 파츠를 통하여 고객이 원하는 서버를 구성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이야기가 다른 곳으로 좀 샜습니다.&lt;/p&gt;
&lt;p&gt;OS 설치 지원업무는 Linux계열로 ubuntu, centOS가 가장 많습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간혹, Red Hat Enterprise Linux(RHEL), SUSE Linux, FreeBSD도 있습니다.&lt;/p&gt;
&lt;p&gt;Windows 계열도 물론 있지만, Server에서는 주로 Linux OS를 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버가 고객의 요청으로 조립되거나, 완제품 서버가 입고되면 OS 설치를 진행하여 고객에게 전달이 됩니다.&lt;/p&gt;
&lt;p&gt;서버에 Linux OS를 설치한 후, 간단하게 시스템을 확인할 수 있는 명령어부터 시작하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Linux를 설치하게 되면 POST이후, 아래와 같은 로그인 창이 나타나게 됩니다.&lt;/p&gt;
&lt;p&gt;root(관리자)나 user(사용자)로 로그인하여 OS를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래는 ubuntu server 18.04.4를 설치한 시스템입니다.&lt;/p&gt;
&lt;p&gt;루트(root)로 접속했을 경우, sudo로 root 권한을 얻었을 경우&lt;/p&gt;
&lt;p&gt;#으로 명령 프롬프트가 표시됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;root.JPG&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;271&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG4QBI/btqMbZWoum6/phluuFl5RZTFOb1IbvLMdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG4QBI/btqMbZWoum6/phluuFl5RZTFOb1IbvLMdK/img.jpg&quot; data-alt=&quot;root login&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG4QBI/btqMbZWoum6/phluuFl5RZTFOb1IbvLMdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG4QBI%2FbtqMbZWoum6%2FphluuFl5RZTFOb1IbvLMdK%2Fimg.jpg&quot; data-filename=&quot;root.JPG&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;271&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;root login&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;유저(user)로 접속했을 경우&lt;/p&gt;
&lt;p&gt;$으로 표시됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;user.JPG&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;263&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA8FbT/btqMaD0mtYN/XLiZVY0ncEipkjJVK53BCK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA8FbT/btqMaD0mtYN/XLiZVY0ncEipkjJVK53BCK/img.jpg&quot; data-alt=&quot;user login&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA8FbT/btqMaD0mtYN/XLiZVY0ncEipkjJVK53BCK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA8FbT%2FbtqMaD0mtYN%2FXLiZVY0ncEipkjJVK53BCK%2Fimg.jpg&quot; data-filename=&quot;user.JPG&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;263&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user login&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;간단하지만 현재 관리자(root) 권한으로 로그인되었는지, 사용자(user) 권한으로 로그인되었는지 확인할 수 있는 좋은 방법입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;시스템(System) 정보 확인&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/proc/cpuinfo | CPU의 정보 or lscpu&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;cpuinfo.JPG&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;553&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M8h3m/btqMdVLJAtG/99t4uKkcn4k93tLUXw9b7K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M8h3m/btqMdVLJAtG/99t4uKkcn4k93tLUXw9b7K/img.jpg&quot; data-alt=&quot;cat 명령어를 사용한 /proc/cpuinfo&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M8h3m/btqMdVLJAtG/99t4uKkcn4k93tLUXw9b7K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM8h3m%2FbtqMdVLJAtG%2F99t4uKkcn4k93tLUXw9b7K%2Fimg.jpg&quot; data-filename=&quot;cpuinfo.JPG&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;553&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cat 명령어를 사용한 /proc/cpuinfo&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/proc/interrupts | interrupt 할당 정보&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/proc/ioports | I/O 포트 할당 정보&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/proc/devices | Character, Block 장치명&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/proc/swaps | 활성화된 스왑 영역 정보&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;/proc/meminfo | 물리적인 메모리 용량, 메모리 사용량, 스왑 사용량 등 or free&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;meminfo.JPG&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byPwpf/btqMdhuZpjG/gOnAF85xDHdKSU3szOrhF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byPwpf/btqMdhuZpjG/gOnAF85xDHdKSU3szOrhF0/img.jpg&quot; data-alt=&quot;cat 명령어를 사용한 /proc/meminfo&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byPwpf/btqMdhuZpjG/gOnAF85xDHdKSU3szOrhF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyPwpf%2FbtqMdhuZpjG%2FgOnAF85xDHdKSU3szOrhF0%2Fimg.jpg&quot; data-filename=&quot;meminfo.JPG&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cat 명령어를 사용한 /proc/meminfo&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;-------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;cat : 텍스트 파일을 만들어 주거나 내용을 출력해주는 명령어&lt;/p&gt;
&lt;p&gt;Ex) cat /proc/cpuinfo CPU의 정보&lt;/p&gt;
&lt;p&gt;cat /proc/cpuinfo &amp;gt;&amp;gt; test.txt CPU의 정보를 test.txt 파일에 저장&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;uname&lt;/b&gt;&lt;/span&gt; : 사용하는 OS 버전 정보 확인 , 옵션 -a : 모든 정보 or cat /etc/*release&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;uname.JPG&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;435&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lqMvP/btqMcSIY6W3/pYymmpUZSzRwi1gF03Kl9K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lqMvP/btqMcSIY6W3/pYymmpUZSzRwi1gF03Kl9K/img.jpg&quot; data-alt=&quot;uname 명령어를 사용한 OS 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lqMvP/btqMcSIY6W3/pYymmpUZSzRwi1gF03Kl9K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlqMvP%2FbtqMcSIY6W3%2FpYymmpUZSzRwi1gF03Kl9K%2Fimg.jpg&quot; data-filename=&quot;uname.JPG&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;435&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;uname 명령어를 사용한 OS 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;기본적으로 현재 시스템에 CPU 사양, Memory의 용량, OS의 버전 확인 정도는 기본적으로 해 주어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;디스크(Disk) 확인 명령어 df&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;df.JPG&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;319&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duilXw/btqMdWxaHY7/f1skzl8XLd5mBKYRyIKxT1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duilXw/btqMdWxaHY7/f1skzl8XLd5mBKYRyIKxT1/img.jpg&quot; data-alt=&quot;df 명령어를 사용한 disk 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duilXw/btqMdWxaHY7/f1skzl8XLd5mBKYRyIKxT1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduilXw%2FbtqMdWxaHY7%2Ff1skzl8XLd5mBKYRyIKxT1%2Fimg.jpg&quot; data-filename=&quot;df.JPG&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;319&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;df 명령어를 사용한 disk 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;옵션 -a : file system size 0 포함한 모든 파일&lt;/p&gt;
&lt;p&gt;-k : 용량 단위 Kb&lt;/p&gt;
&lt;p&gt;-h : 용량 단위 k , m , g&lt;/p&gt;
&lt;p&gt;디스크의 파티션과 마운트 된 디렉터리를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;네트워크(Network) 확인 명령어 ifconfig or ip a&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ifconfig.JPG&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;340&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YGCEH/btqMcjAlKF5/fopZZsfup2g5CGKU1ftpCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YGCEH/btqMcjAlKF5/fopZZsfup2g5CGKU1ftpCk/img.jpg&quot; data-alt=&quot;ifconfig 명령어를 사용한 Network interface 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YGCEH/btqMcjAlKF5/fopZZsfup2g5CGKU1ftpCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYGCEH%2FbtqMcjAlKF5%2FfopZZsfup2g5CGKU1ftpCk%2Fimg.jpg&quot; data-filename=&quot;ifconfig.JPG&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;340&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ifconfig 명령어를 사용한 Network interface 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;-a 옵션을 사용하면 연결되어 있지 않은 네트워크 장치까지 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;네트워크 카드 NIC(Network Interface Card) 설정 확인 명령어 ethtool&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ethtool.JPG&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCREjV/btqMcjf6eKW/j6pNEojCIqtwq5APIl7IwK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCREjV/btqMcjf6eKW/j6pNEojCIqtwq5APIl7IwK/img.jpg&quot; data-alt=&quot;ethtool 명령어를 사용한 NIC 설정 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCREjV/btqMcjf6eKW/j6pNEojCIqtwq5APIl7IwK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCREjV%2FbtqMcjf6eKW%2Fj6pNEojCIqtwq5APIl7IwK%2Fimg.jpg&quot; data-filename=&quot;ethtool.JPG&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ethtool 명령어를 사용한 NIC 설정 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;ethtool --hlep를 보게 되면 다양한 옵션으로 NIC의 정보 값을 확인 및 설정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;네트워크(Network) 통신 테스트 명령어 ping&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ping.JPG&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;537&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z8FOw/btqMdU0tCGp/KTef44MT5AHinNHfkvtvA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z8FOw/btqMdU0tCGp/KTef44MT5AHinNHfkvtvA0/img.jpg&quot; data-alt=&quot;ping 명령어를 사용한 통신 테스트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z8FOw/btqMdU0tCGp/KTef44MT5AHinNHfkvtvA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz8FOw%2FbtqMdU0tCGp%2FKTef44MT5AHinNHfkvtvA0%2Fimg.jpg&quot; data-filename=&quot;ping.JPG&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;537&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ping 명령어를 사용한 통신 테스트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;실제로 ip와 domain으로 외부 통신을 확인할 수 있습니다. 외부만 아니라 내부 네트워크 확인도 활용 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;PCI Device 정보 확인 명령어 lspci&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;lspci.JPG&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;165&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tkwbe/btqMfiUkoQO/xPUvf7f1ai5YcLVygypXok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tkwbe/btqMfiUkoQO/xPUvf7f1ai5YcLVygypXok/img.jpg&quot; data-alt=&quot;lspci 명령어를 사용한 PCI device 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tkwbe/btqMfiUkoQO/xPUvf7f1ai5YcLVygypXok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTkwbe%2FbtqMfiUkoQO%2FxPUvf7f1ai5YcLVygypXok%2Fimg.jpg&quot; data-filename=&quot;lspci.JPG&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;165&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lspci 명령어를 사용한 PCI device 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;lspci 명령어를 사용하면 현재 인식이 확인되는 pci 장치를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;grep을 사용하여 -i 옵션을 붙이면, 대소문자 구분 없이 키워드 검색이 가능합니다.&lt;/p&gt;
&lt;p&gt;추가로 하드웨어(hardware)를 장착하였을 때 유용하게 쓸 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버에 OS(Operating System)가 설치된 후, 가장 기본적으로 확인할 수 있는 명령어들을 나열해 보았습니다.&lt;/p&gt;
&lt;p&gt;입문하는 엔지니어라면 필수적으로 알아 두시길 바랍니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>Linux Engineer</category>
      <category>Cat</category>
      <category>df</category>
      <category>ethtool</category>
      <category>FREE</category>
      <category>ifconfig</category>
      <category>ip a</category>
      <category>Lscpu</category>
      <category>lspci</category>
      <category>ping</category>
      <category>uname</category>
      <author>또이리</author>
      <guid isPermaLink="true">https://jayyjji.tistory.com/2</guid>
      <comments>https://jayyjji.tistory.com/2#entry2comment</comments>
      <pubDate>Fri, 30 Oct 2020 17:23:44 +0900</pubDate>
    </item>
  </channel>
</rss>