<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>romworld</title>
    <link>https://romworld.tistory.com/</link>
    <description>개발세발... &amp;zwj; 
rom a.k.a coding zombie</description>
    <language>ko</language>
    <pubDate>Thu, 14 May 2026 10:20:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>inderrom</managingEditor>
    <image>
      <title>romworld</title>
      <url>https://tistory1.daumcdn.net/tistory/5438381/attach/cab364ead14341138d8b088293009719</url>
      <link>https://romworld.tistory.com</link>
    </image>
    <item>
      <title>pathlib</title>
      <link>https://romworld.tistory.com/234</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;python 3.4 버전부터 새로 도입된 파일 경로 및 디렉토리 경로를 다루는 라이브러리.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;os.path 모듈보다 객체 지향적이고 간편한 방식으로 경로를 조작할 수 있음.&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;pathlib의 클래스인 Path 클래스는 파일이나 디렉토리의 경로를 나타내기 용이함.&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;from&amp;nbsp;pathlib&amp;nbsp;import&amp;nbsp;Path&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;1. 파일 및 디렉토리 정보 추출&lt;/p&gt;
&lt;pre id=&quot;code_1709535659414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;file_path = Path(&quot;/path/to/file.txt&quot;)
print(file_path.name)      # 파일명: file.txt
print(file_path.stem)      # 파일명 (확장자 제외): file
print(file_path.suffix)    # 확장자: .txt
print(file_path.parent)    # 부모 디렉토리: /path/to&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 존재 여부 확인&lt;/p&gt;
&lt;pre id=&quot;code_1709535755116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;existing_file = Path(&quot;/path/to/existing_file.txt&quot;)
non_existing_file = Path(&quot;/path/to/non_existing_file.txt&quot;)

print(existing_file.exists())       # True
print(non_existing_file.exists())   # False&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;3. 생성 및 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1709535793015&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;new_file = Path(&quot;/path/to/new_file.txt&quot;)
new_file.touch()  # 새로운 파일 생성

existing_file.unlink()  # 기존 파일 삭제&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;4. 경로 조합&lt;/p&gt;
&lt;pre id=&quot;code_1709535815182&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;path1 = Path(&quot;/home/user&quot;)
path2 = path1 / &quot;documents&quot; / &quot;file.txt&quot;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/234</guid>
      <comments>https://romworld.tistory.com/234#entry234comment</comments>
      <pubDate>Tue, 5 Mar 2024 13:52:17 +0900</pubDate>
    </item>
    <item>
      <title>[sourcetree]basic password We couldn't connect to GitHub with your credentials</title>
      <link>https://romworld.tistory.com/232</link>
      <description>&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;git 토큰을 재생성 해줘야한다.&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;git 홈페이지 접속 -&amp;gt; settings -&amp;gt; Developer Settings -&amp;gt; Personal access tokens -&amp;gt; Tokens (classic)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰을 다시 발급받고 생성된 토큰을 복사하여 password에 넣어주자 ~&lt;/p&gt;</description>
      <category>etc</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/232</guid>
      <comments>https://romworld.tistory.com/232#entry232comment</comments>
      <pubDate>Thu, 4 Jan 2024 17:41:06 +0900</pubDate>
    </item>
    <item>
      <title>[API] 공공데이터포털 openAPI 데이터 가져오기 ( python)</title>
      <link>https://romworld.tistory.com/229</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 공공데이터포털&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.data.go.kr/index.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.data.go.kr/index.do&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1559&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdXzS4/btsAhcTevOE/H6NHSxM4grE6vJHamDwtl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdXzS4/btsAhcTevOE/H6NHSxM4grE6vJHamDwtl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdXzS4/btsAhcTevOE/H6NHSxM4grE6vJHamDwtl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdXzS4%2FbtsAhcTevOE%2FH6NHSxM4grE6vJHamDwtl0%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;1559&quot; height=&quot;886&quot; data-origin-width=&quot;1559&quot; data-origin-height=&quot;886&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원가입 후 필요한 api 검색후 신청&lt;/li&gt;
&lt;li&gt;신청후 받은 &quot;인증키&quot; 로 url 접속&lt;/li&gt;
&lt;li&gt;필요한 파라미터 상세보기에 나와있으므로 문서보면서 사용하면 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 파이썬 코드 작성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필요한 패키지 import&lt;/li&gt;
&lt;li&gt;하드코딩을 할 경우 페이지가 바뀔 때마다 유지보수 어려움이 있으므로&lt;/li&gt;
&lt;li&gt;페이지의 일부만 가져와서 , json 속성으로 안에있는 data 전체를 csv에 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1699951717807&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from urllib.request import Request, urlopen
from urllib.parse import urlencode
import pandas as pd
import json

base_url = &quot;https://api.odcloud.kr/api/15002831/v1/uddi:48d98d67-24eb-457b-8413-f452f763540a&quot;
api_key = '인증키'

page = 1
per_page = 10
total_data = []

while True:
    params = {
        'page': page,
        'perPage': per_page,
        'serviceKey': api_key,
    }

    # API request&amp;amp;response
    url = f&quot;{base_url}?{urlencode(params)}&quot;
    response = urlopen(url)
    json_api = json.loads(response.read().decode('utf-8'))
    
    if not json_api['data']:
        break

    # data append
    total_data.extend(json_api['data'])

    # next page
    page += 1

# DataFrame
df = pd.DataFrame(total_data)
print(df)

# csv file save
df.to_csv(&quot;save_csv3.csv&quot;, mode='w', index=False)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 리눅스에서 실행해보기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬 -&amp;gt; 원격으로 보낼 때 파일을 scp로 직접 넣어줄 수도 있지만, 방화벽문제로 막혀있는 경우&lt;/li&gt;
&lt;li&gt;나는 파일 하나만 넣어주면 되어서 (애초에 파이썬 설치가 완료되어있는 상황)&lt;/li&gt;
&lt;li&gt;파일을 만들어서 vi로 직접 스크립트 내용 넣어줌&lt;/li&gt;
&lt;li&gt;python3 파일명.py &amp;lt;&amp;lt; 실행권한을 먼저 줘야한다&lt;/li&gt;
&lt;li&gt;chmod +x 파일명.py&lt;/li&gt;
&lt;li&gt;명령어 입력 후 실행하면 완성 ~~&lt;/li&gt;
&lt;li&gt;만약 필요한 라이브러리가 install 안되어있을 시 pip3 install 명칭 입력해주면됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>etc</category>
      <category>API</category>
      <category>python3</category>
      <category>공공데이터포털</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/229</guid>
      <comments>https://romworld.tistory.com/229#entry229comment</comments>
      <pubDate>Tue, 14 Nov 2023 17:55:05 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 나만의 MVC패턴 만들기 - 1 (개발환경세팅)</title>
      <link>https://romworld.tistory.com/228</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1.버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- java 11 (temurin)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- apach-tomcat 9.0&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;2. IDE&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IntelliJ&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;3. Gradle설정을 해주어야 스프링 프로젝트로 생성 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NlhwQ/btsz7StRU4l/x9hy66mQfKW4ESDt0jZ2b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NlhwQ/btsz7StRU4l/x9hy66mQfKW4ESDt0jZ2b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NlhwQ/btsz7StRU4l/x9hy66mQfKW4ESDt0jZ2b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNlhwQ%2Fbtsz7StRU4l%2Fx9hy66mQfKW4ESDt0jZ2b0%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;1598&quot; height=&quot;1228&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&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;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;p data-ke-size=&quot;size16&quot;&gt;4. build.gradle&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 코드로 dependencies 설정을 해준 후 import&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699849240725&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {

    implementation 'org.apache.tomcat.embed:tomcat-embed-core:8.5.86'
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:8.5.86'

    implementation 'javax.servlet:javax.servlet-api:4.0.1'
    implementation 'javax.servlet:jstl:1.2'

    implementation 'ch.qos.logback:logback-classic:1.2.9'


    testImplementation 'org.junit:junit-bom:5.8.1'
    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;5. tomcat 실행 소스 작성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;main 클래스(이름변경:WebApplicationServer)에 소스 작성 후 import&amp;nbsp;&lt;/li&gt;
&lt;li&gt;logger -&amp;gt; org.slf4j.java로 import&lt;/li&gt;
&lt;li&gt;이대로 실행시키는 경우 comfile error 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699849378618&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.example;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

public class WebApplicationServer {

    private static final Logger log = LoggerFactory.getLogger(WebApplicationServer.class);


    public static void main(String[] args) throws LifecycleException {
        String webappDirLocation = &quot;webapps/&quot;;
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);

        tomcat.addWebapp(&quot;/&quot;, new File(webappDirLocation).getAbsolutePath());
        log.info(&quot;configuring app with basedir: {}&quot;, new File(&quot;./&quot; + webappDirLocation).getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();
        

    }
}&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;6. &lt;/span&gt;project settings, preferences&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt; webapps/WEB-INF 경로로 실행해야함&lt;/li&gt;
&lt;li&gt;project settings -&amp;gt; Modules -&amp;gt; main - path에서 경로 변경 , test도 똑같이 경로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2054&quot; data-origin-height=&quot;1670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HTcQC/btsAbb63Br2/uH99l3LEwUeD0GEOr9Qls1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HTcQC/btsAbb63Br2/uH99l3LEwUeD0GEOr9Qls1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HTcQC/btsAbb63Br2/uH99l3LEwUeD0GEOr9Qls1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHTcQC%2FbtsAbb63Br2%2FuH99l3LEwUeD0GEOr9Qls1%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;2054&quot; height=&quot;1670&quot; data-origin-width=&quot;2054&quot; data-origin-height=&quot;1670&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;preferences&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; -&amp;gt; Build, Execution, Deploymet-&amp;gt;Gradle -&amp;gt; Gradle Projects&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Build and run using, Run tests using -&amp;gt; IntelliJ IDEA로 변경&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1946&quot; data-origin-height=&quot;1374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0OHAy/btsAbbTvT2W/WyLQdQ8NDHMJ8Yj1nAryg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0OHAy/btsAbbTvT2W/WyLQdQ8NDHMJ8Yj1nAryg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0OHAy/btsAbbTvT2W/WyLQdQ8NDHMJ8Yj1nAryg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0OHAy%2FbtsAbbTvT2W%2FWyLQdQ8NDHMJ8Yj1nAryg1%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;1946&quot; height=&quot;1374&quot; data-origin-width=&quot;1946&quot; data-origin-height=&quot;1374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행시 webapps/WEB-INF 안에 파일 생성됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGdrqO/btsAc3nqGTk/ekk5KATgkeCwnjmkKXFUEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGdrqO/btsAc3nqGTk/ekk5KATgkeCwnjmkKXFUEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGdrqO/btsAc3nqGTk/ekk5KATgkeCwnjmkKXFUEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGdrqO%2FbtsAc3nqGTk%2Fekk5KATgkeCwnjmkKXFUEk%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;702&quot; height=&quot;232&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&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;p data-ke-size=&quot;size16&quot;&gt;7. 도커 설정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도커 설치&amp;nbsp;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0563c1;&quot;&gt;&lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;https://www.docker.com/products/docker-desktop/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1699851021484&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Docker Desktop: The #1 Containerization Tool for Developers | Docker&quot; data-og-description=&quot;Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.&quot; data-og-host=&quot;www.docker.com&quot; data-og-source-url=&quot;https://www.docker.com/products/docker-desktop/&quot; data-og-url=&quot;https://www.docker.com/products/docker-desktop/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cobb1q/hyUu6q4LSu/WOKrEWalg9YTY2LPt4AWpk/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/C31z7/hyUu3uk1SQ/YlmjUXyEkePcqqdKKUjCF0/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580&quot;&gt;&lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cobb1q/hyUu6q4LSu/WOKrEWalg9YTY2LPt4AWpk/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/C31z7/hyUu3uk1SQ/YlmjUXyEkePcqqdKKUjCF0/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Docker Desktop: The #1 Containerization Tool for Developers | Docker&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 도커 이미지 다운로드
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0563c1;&quot;&gt;&lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;https://www.docker.com/products/docker-desktop/&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker -v 로 설치 확인&lt;/li&gt;
&lt;li&gt;MySQL 도커 컨테이너 생성 및 실행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker run --name mysql-sample-container -e MYSQL_ROOT_PASSWORD=&amp;lt;password&amp;gt; -d -p 3306:3306 mysql: {version}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;실행중인 도커 컨테이너 목록 출력
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker ps -a&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MySQL 도커 컨테이너 접속
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #53585f;&quot;&gt;docker exec -it {&lt;/span&gt;&lt;span style=&quot;color: #53585f;&quot;&gt;도커 컨테이너 이름&lt;/span&gt;&lt;span style=&quot;color: #53585f;&quot;&gt;} bash&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 접속
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mysql -u root -p&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2518&quot; data-origin-height=&quot;1430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTsS64/btsAi5Su6Du/itMn4EcGehvJJY0Ka7nUm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTsS64/btsAi5Su6Du/itMn4EcGehvJJY0Ka7nUm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTsS64/btsAi5Su6Du/itMn4EcGehvJJY0Ka7nUm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTsS64%2FbtsAi5Su6Du%2FitMn4EcGehvJJY0Ka7nUm1%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;2518&quot; height=&quot;1430&quot; data-origin-width=&quot;2518&quot; data-origin-height=&quot;1430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&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;/div&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;</description>
      <category>Spring</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/228</guid>
      <comments>https://romworld.tistory.com/228#entry228comment</comments>
      <pubDate>Mon, 13 Nov 2023 13:54:57 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 사용자, 그룹 및 권한</title>
      <link>https://romworld.tistory.com/226</link>
      <description>&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자와 권한 관련 명령어 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;계정종류&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;root &lt;/span&gt;&lt;span&gt;유저와 사용자 계정 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;계정 살펴보기 &lt;/span&gt;&lt;span&gt;/etc/passwd, /etc/shadow, /etc/group &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;내 권한 &lt;/span&gt;&lt;span&gt;(whoami, id) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;그룹 계정 및 권한&lt;/span&gt;&lt;span&gt;(sudoer &amp;amp; sudo)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;sudo visudo - 수펴유저의 권한을 편집&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;사용자 생성과 그룹 생성 &lt;/span&gt;&lt;span&gt;(adduser, useradd, usermod, deluser, userdel, addgroup, delgroup) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;파일 권한 다루기 &lt;/span&gt;&lt;span&gt;(chmod, chown, chgrp, umask) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;파일 다루기 상급 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;setuid, setgid &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;background-color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사용자를 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;sudo &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한에 추가&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;useradd -aG user1 sudo (Ubuntu) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;useradd -aG user1 wheel (Amazon AMI) &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 계정 &lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;권한의 대여 &lt;/span&gt;&lt;span&gt;- su &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;su [username] &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자의 권한을 대여 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;즉&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;사용자로 로그인 한 것과 같은 효과&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;언제 사용하느냐&lt;/span&gt;&lt;span&gt;? &lt;/span&gt;&lt;span&gt;관리자가 사용자 계정을 관리하고 이슈&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;장애를 분석 할 때 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용방법&lt;/span&gt;&lt;span&gt;:&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;su user2&lt;br /&gt;user2&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;로 로그인 한다 &lt;/span&gt;&lt;span&gt;(user2&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;pw &lt;/span&gt;&lt;span&gt;필요&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;su - user2&lt;br /&gt;user2 &lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;로 로그인 한다 &lt;/span&gt;&lt;span&gt;(user2&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;pw &lt;/span&gt;&lt;span&gt;필요&lt;/span&gt;&lt;span&gt;, user2 &lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;home &lt;/span&gt;&lt;span&gt;디렉토리 사용&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;su &lt;/span&gt;&lt;span&gt;혹은 &lt;/span&gt;&lt;span&gt;su root&lt;br /&gt;root &lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;id &lt;/span&gt;&lt;span&gt;로 로그인 한다 &lt;/span&gt;&lt;span&gt;(root&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;pw &lt;/span&gt;&lt;span&gt;필요&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;하지만 우분투는 &lt;/span&gt;&lt;span&gt;root &lt;/span&gt;&lt;span&gt;암호 비활성화&lt;/span&gt;&lt;span&gt;.) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;sudo su&lt;br /&gt;&lt;/span&gt;&lt;span&gt;내 권한을 상승하여 &lt;/span&gt;&lt;span&gt;root &lt;/span&gt;&lt;span&gt;사용자의 권한으로 로그인 한다 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;현재 디렉토리 사용&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;sudo su -&lt;br /&gt;&lt;/span&gt;&lt;span&gt;내 권한을 상승하여 &lt;/span&gt;&lt;span&gt;root &lt;/span&gt;&lt;span&gt;사용자의 권한으로 홈 디렉토리 사용 &lt;/span&gt;&lt;span&gt;(root&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;home) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;sudo su - user2&lt;br /&gt;user2 &lt;/span&gt;&lt;span&gt;사용자의 권한으로 홈 디렉토리 사용 &lt;/span&gt;&lt;span&gt;(sudoer(user1)&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;pw &lt;/span&gt;&lt;span&gt;필요&lt;/span&gt;&lt;span&gt;, user2 &lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;home) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 계정과 그룹 계정 &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;cat /etc/passw &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;사용자 계정 확인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;cat /etc/shadow &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;사용자 암호&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;cat /etc/group &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;사용자 그룹 확인&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 계정과 그룹 계정 &lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;사용자 계정 &lt;/span&gt;&lt;span&gt;(/etc/passwd) &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;cat /etc/passwd &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사용자 계정 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2436&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QdAiF/btszX2CMBnV/QWSGBbt2dRPWTM8sl7RK4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QdAiF/btszX2CMBnV/QWSGBbt2dRPWTM8sl7RK4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QdAiF/btszX2CMBnV/QWSGBbt2dRPWTM8sl7RK4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQdAiF%2FbtszX2CMBnV%2FQWSGBbt2dRPWTM8sl7RK4k%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;2436&quot; height=&quot;410&quot; data-origin-width=&quot;2436&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 계정과 그룹 계정 &lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;사용자 계정 &lt;/span&gt;&lt;span&gt;(/etc/shadow) &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;cat /etc/shadow : &lt;/span&gt;&lt;span&gt;사용자 암호 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;리눅스&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;유닉스&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;의 모든 시간 &lt;/span&gt;&lt;span&gt;&lt;b&gt;epoch&lt;/b&gt; &lt;/span&gt;&lt;span&gt;= 1970&lt;/span&gt;&lt;span&gt;년 &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;월 &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;일 &lt;/span&gt;&lt;span&gt;00:00:00 UTC &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 추가 &lt;/span&gt;&lt;span&gt;(adduser - add user)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 암호 정책 변경 &lt;/span&gt;&lt;span&gt;/ &lt;/span&gt;&lt;span&gt;암호 변경 &lt;/span&gt;&lt;span&gt;(chage - change age / passwd) &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;chage [option] user &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자암호정책변경 &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;chage user2 : &lt;/span&gt;&lt;span&gt;암호 정책 변경 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chage -l user2 : &lt;/span&gt;&lt;span&gt;암호 정책 확인 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chage -E 2020-12-31 -m 1 -M 90 -W 7 user2 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;passwd [options] user : &lt;/span&gt;&lt;span&gt;암호변경 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;passwd -l user : &lt;/span&gt;&lt;span&gt;계정 잠금 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;passwd -u user : &lt;/span&gt;&lt;span&gt;계정 잠금 해제 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;passwd -S user : &lt;/span&gt;&lt;span&gt;계정 상태 확인 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;passwd -n &amp;lt;mindays&amp;gt; user : &lt;/span&gt;&lt;span&gt;암호 최소 기간 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;passwd -x &amp;lt;maxdays&amp;gt; user : &lt;/span&gt;&lt;span&gt;암호 최대 기간 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;man passwd &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 삭제 &lt;/span&gt;&lt;span&gt;(deluser - delete user) &lt;/span&gt;&lt;span&gt;deluser [options] user &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 계정 삭제 &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;deluser user2 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;deluser user2 --remove-home &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;userdel user&lt;br /&gt;none-interactive &lt;/span&gt;&lt;span&gt;모드로 모두 삭제 &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;userdel user2 : &lt;/span&gt;&lt;span&gt;사용자 계정 삭제 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;홈 삭제&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;userdel -f user2 : &lt;/span&gt;&lt;span&gt;로그인 중이더라도 삭제 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;새로운 사용자를 동일&lt;/span&gt;&lt;span&gt;ID &lt;/span&gt;&lt;span&gt;로 만들경우&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이전 디렉토리에 맵핑 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그룹 계정 &lt;/span&gt;&lt;span&gt;/ &lt;/span&gt;&lt;span&gt;사용자 할당 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;또는 사용자 정보 수정&lt;/span&gt;&lt;span&gt;) (usermod - user mod) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;usermod [options] user&lt;br /&gt;&lt;/span&gt;&lt;span&gt;사용자 계정 정보 수정 &lt;/span&gt;&lt;span&gt;(moduser &lt;/span&gt;&lt;span&gt;는 없음 &lt;/span&gt;&lt;span&gt;(interactive &lt;/span&gt;&lt;span&gt;방식인&lt;/span&gt;&lt;span&gt;...)) &lt;/span&gt;&lt;span&gt;사용자를 그룹에 추가 &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;usermod -c &amp;lt;name change&amp;gt; user2 : &lt;/span&gt;&lt;span&gt;사용자 이름 수정 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;usermod -a -G sudo user2 : user2 &lt;/span&gt;&lt;span&gt;를 &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;&lt;span&gt;그룹에 추가 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;adduser user2 sudo : user2 &lt;/span&gt;&lt;span&gt;를 &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;&lt;span&gt;그룹에 추가 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;deluser user2 sudo : user2&lt;/span&gt;&lt;span&gt;를 &lt;/span&gt;&lt;span&gt;sudo &lt;/span&gt;&lt;span&gt;그룹에서 제거ㅇ&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;실행후 결과 번역 오류&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2412&quot; data-origin-height=&quot;1370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2BgCn/btsz1IiWu0L/Yd8lRC4qWTTk7IPNPVIurk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2BgCn/btsz1IiWu0L/Yd8lRC4qWTTk7IPNPVIurk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2BgCn/btsz1IiWu0L/Yd8lRC4qWTTk7IPNPVIurk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2BgCn%2Fbtsz1IiWu0L%2FYd8lRC4qWTTk7IPNPVIurk%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;2412&quot; height=&quot;1370&quot; data-origin-width=&quot;2412&quot; data-origin-height=&quot;1370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일의 생성 권한 &lt;/span&gt;&lt;span&gt;(umask - user mask) &lt;/span&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;디렉토리 생성 권한의 확인 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;소유자&lt;/span&gt;&lt;span&gt;(User) / &lt;/span&gt;&lt;span&gt;그룹&lt;/span&gt;&lt;span&gt;(Group) / &lt;/span&gt;&lt;span&gt;그외 &lt;/span&gt;&lt;span&gt;(Other) &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;리눅스의 기본 파일 권한&lt;/span&gt;&lt;span&gt;: 666 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;리눅스의 기본 디렉토리 권한&lt;/span&gt;&lt;span&gt;: 777&lt;br /&gt;&lt;/span&gt;&lt;span&gt;이 말은&lt;/span&gt;&lt;span&gt;, umask &lt;/span&gt;&lt;span&gt;가 &lt;/span&gt;&lt;span&gt;0 &lt;/span&gt;&lt;span&gt;일 경우 새로 생성되는 파일의 권한은 &lt;/span&gt;&lt;span&gt;666 (rw-rw-rw-) &lt;/span&gt;&lt;span&gt;을 갖게 됨&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;여기서&lt;/span&gt;&lt;span&gt;, umask &lt;/span&gt;&lt;span&gt;가 &lt;/span&gt;&lt;span&gt;2 (&lt;/span&gt;&lt;span&gt;혹은 &lt;/span&gt;&lt;span&gt;0002) &lt;/span&gt;&lt;span&gt;일 경우에는 파일 기본권한 &lt;/span&gt;&lt;span&gt;666 &lt;/span&gt;&lt;span&gt;에서 &lt;/span&gt;&lt;span&gt;002&lt;/span&gt;&lt;span&gt;를 빼면 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;디렉토리 권한은 &lt;/span&gt;&lt;span&gt;777 (rwxrwxrwx) &lt;/span&gt;&lt;span&gt;을 갖게 됨 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;110 110 110 = 666 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;000 000 010 = 002 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;110 110 100 = 664, &lt;/span&gt;&lt;span&gt;즉 &lt;/span&gt;&lt;span&gt;rw-rw-r-- &lt;/span&gt;&lt;span&gt;로 생성 됨 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;디렉토리 기본권한 &lt;/span&gt;&lt;span&gt;777 &lt;/span&gt;&lt;span&gt;에서 &lt;/span&gt;&lt;span&gt;002&lt;/span&gt;&lt;span&gt;를 빼면 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;111 111 111 = 777 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;000 000 010 = 002 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;111 111 101 = 775, &lt;/span&gt;&lt;span&gt;즉 &lt;/span&gt;&lt;span&gt;rwxrwxr-x &lt;/span&gt;&lt;span&gt;로 생성 됨 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&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&gt;파일의 권한 &lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;권한 변경 &lt;/span&gt;&lt;span&gt;(chmod - change mode) &lt;/span&gt;&lt;span&gt;chmod &lt;/span&gt;&lt;span&gt;[OPTION]... [MODE]... file... &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;디렉토리 권한의 변경 소유자&lt;/span&gt;&lt;span&gt;(User) / &lt;/span&gt;&lt;span&gt;그룹&lt;/span&gt;&lt;span&gt;(Group) / &lt;/span&gt;&lt;span&gt;그외 &lt;/span&gt;&lt;span&gt;(Other) &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod 777 hello.txt &lt;/span&gt;&lt;/span&gt;: &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;숫자값을 통한 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;user/group/other &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;rwx &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 부여&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod 700 hello.txt : &lt;/span&gt;&lt;/span&gt;숫자값을 통한 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;user &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;rwx &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 부여 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;(group/other &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에는 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;--- &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 부여&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod u+x hello.txt : &lt;/span&gt;&lt;/span&gt;user &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;x(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 추가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod u-x hello.txt &lt;/span&gt;&lt;/span&gt;: user &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;x(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 삭제&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod g+rw hello.txt &lt;/span&gt;&lt;/span&gt;: group &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;rw(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;읽기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;쓰기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 추가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod g-rx hello.txt :&lt;/span&gt;&lt;/span&gt;&amp;nbsp;group &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;rw(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;읽기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;쓰기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 삭제&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod o+rwx hello.txt &lt;/span&gt;&lt;/span&gt;: other &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;rwx(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;읽기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;쓰기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 추가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod o-rwx hello.txt &lt;/span&gt;&lt;/span&gt;: other &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;rwx(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;읽기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;쓰기&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 삭제&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;chmod +x hello.txt &lt;/span&gt;&lt;/span&gt;: user/group/other &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;에 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;x(&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;권한 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일의 권한 &lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;소유권 변경 &lt;/span&gt;&lt;span&gt;(chown - change owner, chgrp - change group) &lt;/span&gt;&lt;span&gt;chown &lt;/span&gt;&lt;span&gt;[OPTION]... [USER][:GROUP] FILE... &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;디렉토리의 소유자&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;그룹 변경 &lt;/span&gt;&lt;span&gt;chgrp &lt;/span&gt;&lt;span&gt;[OPTION]... [GROUP] FILE... &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;디렉토리의 그룹 변경 소유자&lt;/span&gt;&lt;span&gt;(User) / &lt;/span&gt;&lt;span&gt;그룹&lt;/span&gt;&lt;span&gt;(Group) / &lt;/span&gt;&lt;span&gt;그외 &lt;/span&gt;&lt;span&gt;(Other) &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;chown user2 hello.txt : &lt;/span&gt;&lt;span&gt;해당 파일&lt;/span&gt;&lt;span&gt;(hello.txt) &lt;/span&gt;&lt;span&gt;의 소유자를 &lt;/span&gt;&lt;span&gt;user2 &lt;/span&gt;&lt;span&gt;로 변경 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chown user2:user2 hello.txt : &lt;/span&gt;&lt;span&gt;해당 파일&lt;/span&gt;&lt;span&gt;(hello.txt) &lt;/span&gt;&lt;span&gt;의 소유자와 그룹을 모두 &lt;/span&gt;&lt;span&gt;user2 &lt;/span&gt;&lt;span&gt;로 변경 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chown :user2 hello.txt : &lt;/span&gt;&lt;span&gt;해당 파일&lt;/span&gt;&lt;span&gt;(hello.txt) &lt;/span&gt;&lt;span&gt;의 그룹을 &lt;/span&gt;&lt;span&gt;user2 &lt;/span&gt;&lt;span&gt;로 변경 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chgrp user2 hello.txt : &lt;/span&gt;&lt;span&gt;해당 파일&lt;/span&gt;&lt;span&gt;(hello.txt) &lt;/span&gt;&lt;span&gt;의 그룹을 &lt;/span&gt;&lt;span&gt;user2 &lt;/span&gt;&lt;span&gt;로 변경 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일의 특수 실행 권한 &lt;/span&gt;&lt;span&gt;(setuid, setgid, sticky bit)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;파일의 권한을 일시적으로 소유주&lt;/span&gt;&lt;span&gt;(setuid) &lt;/span&gt;&lt;span&gt;혹은 소유그룹&lt;/span&gt;&lt;span&gt;(setgid)&lt;/span&gt;&lt;span&gt;의 권한으로 빌려서 실행함 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Sticky bit&lt;/span&gt;&lt;span&gt;은 해당 디렉토리에 생성된 파일은 해당 사용자의 소유주로 저장됨 소유자&lt;/span&gt;&lt;span&gt;(User) / &lt;/span&gt;&lt;span&gt;그룹&lt;/span&gt;&lt;span&gt;(Group) / &lt;/span&gt;&lt;span&gt;그외 &lt;/span&gt;&lt;span&gt;(Other) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;SetUID &lt;/span&gt;&lt;span&gt;는 &lt;/span&gt;&lt;span&gt;4xxx, SetGID &lt;/span&gt;&lt;span&gt;는 &lt;/span&gt;&lt;span&gt;2xxx &lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;, StickyBit &lt;/span&gt;&lt;span&gt;은 &lt;/span&gt;&lt;span&gt;1xxx &lt;/span&gt;&lt;span&gt;로 설정한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;각각 설정 위치는 &lt;/span&gt;&lt;span&gt;rw&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;s&lt;/span&gt;&lt;span&gt;------, rwxrw&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;s&lt;/span&gt;&lt;span&gt;---, drwxdrxdw&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;t &lt;/span&gt;&lt;span&gt;로 표시된다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;span&gt;기존권한의위치에덮어쓰기때문에&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;해당기능만존재할경우대문자&lt;/span&gt;&lt;span&gt;S/S/T&lt;/span&gt;&lt;span&gt;로표기된다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;각각 설정 위치는 &lt;/span&gt;&lt;span&gt;rw&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;S&lt;/span&gt;&lt;span&gt;------, rwxrw&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;S&lt;/span&gt;&lt;span&gt;---, drwxdrxdw&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;T &lt;/span&gt;&lt;span&gt;로 표시된다&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span&gt;기존 권한 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;실행권한&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;을 포함하고 있는 경우 소문자 &lt;/span&gt;&lt;span&gt;s/s/t&lt;/span&gt;&lt;span&gt;로 표시된다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;chmod u+s filename &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chmod g+s filename &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;chmod +t directoryname &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파일의 특수 실행 권한 &lt;/span&gt;&lt;span&gt;(setuid, setgid, sticky bit) &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;다소 복잡한&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;실습 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;시나리오 &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;두명의 사용자가 있고&lt;/span&gt;&lt;span&gt;, user1 &lt;/span&gt;&lt;span&gt;이 만든 읽기 전용 파일에 &lt;/span&gt;&lt;span&gt;user2 &lt;/span&gt;&lt;span&gt;가 &lt;/span&gt;&lt;span&gt;setuid &lt;/span&gt;&lt;span&gt;권한을 통해 접근 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;user1, user2 &lt;/span&gt;&lt;span&gt;두명의 사용자 &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;user1&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;readonly &lt;/span&gt;&lt;span&gt;파일 생성 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;/bin/cat &lt;/span&gt;&lt;span&gt;을 복사해서 &lt;/span&gt;&lt;span&gt;mycat &lt;/span&gt;&lt;span&gt;으로 생성 및 &lt;/span&gt;&lt;span&gt;setuid &lt;/span&gt;&lt;span&gt;를 통해 실행 권한을 부여 &lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;user2 &lt;/span&gt;&lt;span&gt;가 &lt;/span&gt;&lt;span&gt;readonly &lt;/span&gt;&lt;span&gt;파일을 직접 읽을 수는 없지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;setuid &lt;/span&gt;&lt;span&gt;가 실행된 파일로는 읽을 수 있음&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>etc</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/226</guid>
      <comments>https://romworld.tistory.com/226#entry226comment</comments>
      <pubDate>Wed, 8 Nov 2023 17:39:17 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 기본 명령어</title>
      <link>https://romworld.tistory.com/225</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&amp;nbsp;-&amp;nbsp;파일다루기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일보기&amp;nbsp;ls,ls-l,ls-al&lt;/li&gt;
&lt;li&gt;파일 내용 보기&amp;nbsp;cat, more, less&lt;/li&gt;
&lt;li&gt;파일 만들기/지우기&amp;nbsp;touch, rm&lt;/li&gt;
&lt;li&gt;파일복사&amp;nbsp;cp&lt;/li&gt;
&lt;li&gt;파일이동&amp;nbsp;mv&lt;/li&gt;
&lt;li&gt;파일 숏컷&amp;nbsp;ln (심볼릭 링크)&lt;/li&gt;
&lt;li&gt;파일 속성 보기&amp;nbsp;file&lt;/li&gt;
&lt;li&gt;디렉토리 만들기&amp;nbsp;mkdir, rmdir&lt;/li&gt;
&lt;li&gt;디렉토리이동&amp;nbsp;cd,cd-&lt;/li&gt;
&lt;li&gt;디렉토리 구조&amp;nbsp;. / .. / ~&lt;/li&gt;
&lt;li&gt;터미널 지우기&amp;nbsp;clear&lt;/li&gt;
&lt;li&gt;시스템 종료&amp;nbsp;reboot, poweroff, shutdown&lt;/li&gt;
&lt;/ul&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;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&amp;nbsp;-&amp;nbsp;파일 목록 보기&amp;nbsp;(ls = list)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls [OPTION]... [FILE]...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 옵션을 이용하여 디렉토리 내 파일 목록 조회하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;ls&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ls -l&lt;/li&gt;
&lt;li&gt;ls -a&lt;/li&gt;
&lt;li&gt;ls -al&lt;/li&gt;
&lt;li&gt;ls-a-l&lt;/li&gt;
&lt;li&gt;ls *.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: list&lt;br /&gt;: long list&lt;br /&gt;: all&lt;br /&gt;: all + long&lt;br /&gt;: all + long&lt;br /&gt;:&amp;nbsp;확장자가&amp;nbsp;*.txt&amp;nbsp;파일인것&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;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&amp;nbsp;-&amp;nbsp;파일 만들기&amp;nbsp;(touch)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch [OPTION]... [FILE]...&lt;br /&gt;파일을 툭~&amp;nbsp;건드리기&amp;nbsp;(정확히는 파일 생성보다는 현재 시간(timestamp)로 바꾸기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(해당 파일이 존재하지 않는 경우&amp;nbsp;0바이트 파일 생성)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;touch test1 test2 test3&lt;/li&gt;
&lt;li&gt;touch&amp;nbsp;.hello.txt&lt;br /&gt;히든파일 만들기&amp;nbsp;(맨 앞의 점) (위&amp;nbsp;hello.txt&amp;nbsp;와 다른 파일임)&lt;/li&gt;
&lt;li&gt;&amp;bull;&amp;nbsp;확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls vs ls -a&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;-&amp;nbsp;파일 내용 보기&amp;nbsp;(cat = concatenate)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat [OPTION]... [FILE]...&lt;br /&gt;파일 내용 보여주기&amp;nbsp;(정확히는&amp;nbsp;input&amp;nbsp;과&amp;nbsp;output&amp;nbsp;을 연결(concatenate)하기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(input =&amp;nbsp;파일, output = standard out)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cat /var/log/syslog&lt;/li&gt;
&lt;li&gt;cat -e /etc/passwd :&amp;nbsp;줄의 맨 뒤에&amp;nbsp;$붙이기&amp;nbsp;(히든 캐릭터 공백 등 확인)&lt;/li&gt;
&lt;li&gt;cat -n /etc/passwd :&amp;nbsp;줄 번호 보여주기&lt;/li&gt;
&lt;/ul&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;-&amp;nbsp;파일 내용 보기&amp;nbsp;(less)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;less [OPTION]... [FILE]...&lt;br /&gt;파일 내용 보여주기&amp;nbsp;(페이지 단위로 이동&amp;nbsp;- space)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(줄단위로 이동&amp;nbsp;- enter)&lt;br /&gt;(방향키&amp;nbsp;-&amp;nbsp;상하좌우,&amp;nbsp;페이지up/down)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;less hello.txt&lt;/li&gt;
&lt;li&gt;less /etc/passwd&lt;/li&gt;
&lt;li&gt;less /var/log/syslog&lt;/li&gt;
&lt;li&gt;more&amp;nbsp;보다 향상된 기능,&amp;nbsp;그리고 모든 파일을 메모리에 올리지 않아&amp;nbsp;more&amp;nbsp;대비 속도가 빠름&lt;/li&gt;
&lt;/ul&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;-&amp;nbsp;디렉토리 생성&amp;nbsp;(mkdir - make directory, rmdir - remove directory)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir&amp;nbsp;[OPTION]... [DIRECTORY]...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rmdir&amp;nbsp;[OPTION]... [DIRECTORY]...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 생성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mkdir dir1&lt;/li&gt;
&lt;li&gt;mkdir dir2 dir3&lt;/li&gt;
&lt;li&gt;mkdir dir1/sub1&lt;/li&gt;
&lt;li&gt;mkdir dir1/sub2&lt;/li&gt;
&lt;li&gt;mkdir -p dir2/sub1&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 삭제&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;rmdir dir1&lt;/li&gt;
&lt;li&gt;rmdir dir2 dir3&lt;/li&gt;
&lt;li&gt;rmdir -p dir2&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(parents)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(parents)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고(주의)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;rm dir1 (실패)&lt;/li&gt;
&lt;li&gt;rm -r dir1 (성공) (recursive)&lt;/li&gt;
&lt;li&gt;사용자 주의&lt;/li&gt;
&lt;/ul&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;-&amp;nbsp;디렉토리 이동&amp;nbsp;(cd - change directory)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cd dir1&lt;/li&gt;
&lt;li&gt;cd .. (부모 디렉토리)&lt;/li&gt;
&lt;li&gt;cd dir1/sub1&lt;/li&gt;
&lt;li&gt;cd.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;디렉토리 구조&amp;nbsp;&amp;bull;&amp;nbsp;.&amp;nbsp;(나자신)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;..&amp;nbsp;(부모디렉토리)&amp;nbsp;&amp;bull;&amp;nbsp;~(홈디렉토리)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cd ../..&lt;/li&gt;
&lt;li&gt;cd ~/&lt;/li&gt;
&lt;li&gt;&lt;span&gt;cd&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;cd -&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(홈 디렉토리) (이전 디렉토리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&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;cp [OPTION]... [SRC] [DST]&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;bull;&amp;nbsp;사전준비&lt;br /&gt;touch hello.txt test1 test2 mkdir dir1&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cp hello.txt hello2.txt&lt;/li&gt;
&lt;li&gt;cp test1 dir1&lt;/li&gt;
&lt;li&gt;cp test2 dir1&lt;/li&gt;
&lt;li&gt;cp -r dir1 dir2&lt;/li&gt;
&lt;li&gt;클린업&lt;br /&gt;rm -r dir1 dir2 rm hello2.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:&amp;nbsp;파일 복사&lt;br /&gt;:&amp;nbsp;파일 디렉토리 안으로 복사&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;bull;&amp;nbsp;사전준비&lt;br /&gt;touch hello.txt test1 test2 mkdir dir1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;mv hello.txt hello2.txt&amp;nbsp;&amp;bull;&amp;nbsp;mv test1 dir1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;mv test2 dir1&amp;nbsp;&amp;bull;&amp;nbsp;mv dir1 dir2&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;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&amp;nbsp;-&amp;nbsp;파일 링크&amp;nbsp;(ln - link)&amp;nbsp;ln [OPTION]... [TARGET] [LINKNAME]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일에 하드링크/소프트링크(심볼릭 링크)&amp;nbsp;만들기&amp;nbsp;&amp;bull;&amp;nbsp;사전준비&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch hello.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;소프트링크&amp;nbsp;(심볼릭 링크) ln -s hello.txt hellosymlink&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;하드링크&lt;br /&gt;ln hello.txt hellolink&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;파일링크확인&amp;nbsp;ls -ali&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;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&amp;nbsp;-&amp;nbsp;파일 속성 보기&amp;nbsp;(file)&amp;nbsp;file [OPTION]... [FILE]...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 속성 보여주기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;file hello&lt;/li&gt;
&lt;li&gt;file /etc/passwd&lt;/li&gt;
&lt;li&gt;file dir1&lt;/li&gt;
&lt;li&gt;file /usr/bin/file&lt;/li&gt;
&lt;li&gt;file hellosymlink&lt;/li&gt;
&lt;/ul&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;-&amp;nbsp;시스템 종료(reboot, poweroff, shutdown)&amp;nbsp;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;reboot, poweroff&amp;nbsp;두 명령어 모두 바로 적용되니 사용시 주의&amp;nbsp;shutdown [OPTIONS] [TIME]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;poweroff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종료&lt;br /&gt;주어진 시간에 종료&amp;nbsp;(기본값&amp;nbsp;+1 - 1분후)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shutdown -P now :&amp;nbsp;바로 종료&amp;nbsp;shutdown -r now :&amp;nbsp;바로 재시작&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;p data-ke-size=&quot;size16&quot;&gt;기본 명령어&amp;nbsp;-&amp;nbsp;도움말/매뉴얼&amp;nbsp;(man - manual)&amp;nbsp;man [OPTION]... [PAGE] [COMMAND]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매뉴얼 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PAGE&amp;nbsp;종류 예시)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;일반 명령어&amp;nbsp;&amp;bull;&lt;/li&gt;
&lt;li&gt;시스템 호출&amp;nbsp;&amp;bull;&lt;/li&gt;
&lt;li&gt;C표준 라이브러리 함수&amp;nbsp;&amp;bull;&lt;/li&gt;
&lt;li&gt;특수파일&amp;nbsp;(/dev&amp;nbsp;등)&amp;nbsp;&amp;bull;&lt;/li&gt;
&lt;li&gt;파일 형식과&amp;nbsp;Conventions&lt;/li&gt;
&lt;li&gt;게임과 화면보호기&amp;nbsp;&amp;bull;&lt;/li&gt;
&lt;li&gt;기타&lt;/li&gt;
&lt;li&gt;시스템관리 명령어와 데몬&amp;nbsp;&amp;bull;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;man man man printf man 3 printf man socket&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;man -a printf (모두 출력) man -k printf (검색)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull;&amp;nbsp;man -k ^printf (검색&amp;nbsp;-정규표현식)&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;-&amp;nbsp;파일편집기&amp;nbsp;(vi / vim / nano)&amp;nbsp;vi hello.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi /etc/passwd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nano hello.txt nano /etc/passwd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt install vim vimtutor&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이미지 출처&amp;nbsp;:&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://namu.wiki/w/Emacs&quot;&gt;https://namu.wiki/w/Emacs&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: vi-improved&amp;nbsp;도구 설치&amp;nbsp;: vi&amp;nbsp;학습기&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;p data-ke-size=&quot;size16&quot;&gt;sudo 권한 주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo su -rom&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo usermod -aG rom&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;-ssh 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt update&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt install openssh-server&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;sudo systemctl status ssh (active(running)일시 정상) - 설치 성공 여부 확인&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;sudo ufw allow ssh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo ufw status (&lt;span&gt;방화벽에&lt;/span&gt; ssh&lt;span&gt;허용하고&lt;/span&gt;, &lt;span&gt;상태확인&lt;/span&gt;)&lt;/p&gt;</description>
      <category>etc</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/225</guid>
      <comments>https://romworld.tistory.com/225#entry225comment</comments>
      <pubDate>Wed, 8 Nov 2023 14:20:43 +0900</pubDate>
    </item>
    <item>
      <title>OSM의 연결상태 모니터링 기능 (리눅스 크론탭)</title>
      <link>https://romworld.tistory.com/224</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;OSM API의 연결상태를 주기적으로 모니터링하기 위한 기능개발&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 쉘 스크립트 작성 : PSQL 연결(데이터베이스) 및&amp;nbsp; LOG를 DB에 저장&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리눅스 접속&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;쉘 스크립트 생성 : vi [파일명]&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1691049261402&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash 

url=&quot;https://tile.openstreetmap.org&quot;

# 2&amp;gt;&amp;amp;1은 에러 로그 뿐만 아닌 정상 로그도 가져오는 것
response=$(curl -I &quot;$url&quot; 2&amp;gt;&amp;amp;1)

# 변수에서 &quot;HTTP/&quot;을 찾아 대소문자 구분 없이(-i) 찾은 뒤, 
# 그 결과에서 두 번째 컬럼(공백으로 구분된 부분) 즉, HTTP 상태 코드를 http_status 변수에 저장
http_status=$(echo &quot;$response&quot; | grep -i &quot;HTTP/&quot; | awk '{print $2}')

# 데이터타입이 timestamp
current_time=$(date +&quot;%Y-%m-%d %H:%M:%S&quot;)

echo &quot;URL : $url&quot;
echo &quot;Response : $response&quot;
echo &quot;HTTP STATUS : $http_status&quot;
echo &quot;Current Time : $current_time&quot;
                  
if [ &quot;$http_status&quot; == &quot;200&quot; ]; then
        
        log_message=&quot;$response&quot;
      
        success=1
else 
        log_message=&quot;$response&quot;
    
        success=0
fi  
    
echo &quot;Log Message : $log_message&quot;
echo &quot;Success : $success&quot;

# 보안을 위해 비밀번호는 환경변수를 사용하여 입력한다.
export PGPASSWORD=&quot;password&quot;

psql -h 호스트주소 -p 포트번호  -d 데이터모델 -U 유저명 &amp;lt;&amp;lt;EOF
INSERT INTO 테이블명 (컬럼1,컬럼2,컬럼3)
VALUES ('$current_time', '$log_message', '$success');
EOF

echo &quot; PSQL 로그 저장 완료&quot;&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 실행 권한을 준다.&lt;/h4&gt;
&lt;pre id=&quot;code_1691049383911&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod -x scripts.sh&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;3. 크론탭 작성&lt;/h4&gt;
&lt;pre id=&quot;code_1691049488438&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 크론탭 작성
crontab -e
# 크론탭 리스트
crontab -l&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 원하는 주기에 맞게 작성하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 매분마다 실행시 &lt;i&gt;( 꼭 *에 띄어쓰기)&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1691049546492&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* * * * * /path/scripts.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 크론탭 로그 위치&lt;/h4&gt;
&lt;pre id=&quot;code_1691049621248&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f /var/log/syslog&lt;/code&gt;&lt;/pre&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;b&gt;No MTA installed, discarding output&lt;/b&gt; 에러가 발생하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메일전송 관리자가 없어서 발생하는 오류. 아래 명령어 입력&lt;/p&gt;
&lt;pre id=&quot;code_1691049791728&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install postfix&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, 실행시 DB에 저장되지 않는 경우 여러가지가 존재하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. ./scripts.sh 명령어를 통하여 스크립트가 실행되는지 확인.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 나의 경우에는 date 형식을 지키지 않아&amp;nbsp; insert가 제대로 안되었다. 형식을 고쳐주니 바로 해결됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 이외에도 방화벽이나 네트워크 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 데이터베이스 사용자 권한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 스크립트 실행권한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 커넥션 오류&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;&amp;nbsp;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>etc</category>
      <category>API</category>
      <category>crontab</category>
      <category>Linux</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/224</guid>
      <comments>https://romworld.tistory.com/224#entry224comment</comments>
      <pubDate>Thu, 3 Aug 2023 11:22:04 +0900</pubDate>
    </item>
    <item>
      <title>MQTT란? / mosquitto 설치 및 테스트</title>
      <link>https://romworld.tistory.com/223</link>
      <description>&lt;h1 id=&quot;MQTT-:-Message-Queuing-Telemetry-Transport&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1&quot;&gt;MQTT : Message Queuing Telemetry Transport&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;경량의 발행-구독 기반 메시징 프로토콜&lt;/li&gt;
&lt;li&gt;MQTT는 일반적으로 네트워크 상에서 제한된 대역폭을 가진 장치들 사이에서 데이터를 효율적으로 전송하기 위해 설계함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;MQTT는 발행-구독 메시징 패턴을 따른다. 이는 메시지를 발행하는 &quot;Publisher&quot;와 해당 메시지를 수신하는 &quot;Subscriber&quot; 사이의 통신을 의미. Publisher는 특정 주제(topic)에 대한 메시지를 발행하고, Subscriber는 관심 있는 주제를 구독하여 해당 주제에 대한 메시지를 수신함.&lt;/li&gt;
&lt;li&gt;MQTT는 경량 프로토콜로서, TCP/IP 위에서 동작하며, 대역폭이 제한된 네트워크 환경에서도 효율적으로 작동. 따라서 인터넷 연결이 불안정하거나 대역폭이 작은 장치들 간에 데이터를 전송하는데 많이 사용. 예를 들어, 센서 장치, 제어 시스템, M2M(Machine-to-Machine) 통신 등의 분야에서 MQTT는 널리 사용된다,&lt;/li&gt;
&lt;li&gt;MQTT의 특징
&lt;ol style=&quot;list-style-type: decimal;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;경량 프로토콜: 메시지 전송을 위한 오버헤드가 적어서 대역폭을 절약&lt;/li&gt;
&lt;li&gt;퍼블리셔-서브스크라이버 모델: 발행-구독 패턴을 따르므로 여러 개의 Subscriber가 동시에 메시지를 수신 가능&lt;/li&gt;
&lt;li&gt;유연성: 다양한 클라이언트 및 플랫폼에서 사용할 수 있음&lt;/li&gt;
&lt;li&gt;내결함성: 네트워크 연결이 불안정한 경우에도 데이터 손실을 최소화하고 메시지 전달을 보장&lt;/li&gt;
&lt;li&gt;토픽 기반 메시지 필터링: Subscriber는 관심 있는 주제를 선택하여 메시지를 구독할 수 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;782&quot; data-ke-size=&quot;size16&quot;&gt;즉 MQTT는 &lt;b&gt;IoT(Internet of Things) 및 M2M 통신 분야에서 널리 사용&lt;/b&gt;되며, 다양한 MQTT 브로커 및 클라이언트 라이브러리가 제공되어 개발 및 구현이 용이.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 id=&quot;프로토콜-구성-요소와-사용-방법&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;885&quot;&gt;프로토콜 구성 요소와 사용 방법&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;MQTT 프로토콜의 구성 요소:
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Broker(브로커): MQTT 메시지를 수신하고 발행하는 서버. 클라이언트 간의 통신을 조정하고 메시지를 라우팅 한다.&lt;/li&gt;
&lt;li&gt;Publisher(퍼블리셔): 특정 주제에 대한 메시지를 발행하는 클라이언트.&lt;/li&gt;
&lt;li&gt;Subscriber(서브스크라이버): 관심 있는 주제를 구독하여 해당 주제의 메시지를 수신하는 클라이언트.&lt;/li&gt;
&lt;li&gt;Topic(주제): 메시지를 구분하는 논리적인 주제.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MQTT 메시지 전달:
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Publisher(퍼블리셔)는 Broker(브로커)에게 메시지를 특정 주제로 발행.&lt;/li&gt;
&lt;li&gt;Broker는 해당 주제를 구독 중인 Subscriber(서브스크라이버)에게 메시지를 전달.&lt;/li&gt;
&lt;li&gt;Subscriber는 메시지를 수신하고 필요에 따라 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MQTT 토픽(Topic):
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;토픽은 MQTT 메시지를 발행하거나 수신하는 데 사용되는 주제를 나타냄.&lt;/li&gt;
&lt;li&gt;토픽은 계층적인 구조를 가지며, 슬래시(&quot;/&quot;)로 구분.&lt;/li&gt;
&lt;li&gt;예를 들어, &quot;home/living-room/temperature&quot;은 &quot;home&quot;이라는 상위 토픽에 속하고 &quot;living-room&quot;이라는 하위 토픽에 속하며, &quot;temperature&quot;이라는 최하위 토픽.&lt;/li&gt;
&lt;li&gt;Subscriber는 원하는 토픽을 구독하여 해당 토픽의 메시지를 수신함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MQTT QoS(Quality of Service, 서비스 품질):
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MQTT는 메시지 전달의 QoS 수준을 설정할 수 있음.&lt;/li&gt;
&lt;li&gt;QoS 수준은 메시지의 전달 보장 정도를 나타냄.
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;QoS 0: 최대 한 번의 메시지 전달을 보장하지 않는다. 메시지 손실 가능성이 있음.&lt;/li&gt;
&lt;li&gt;QoS 1: 적어도 한 번의 메시지 전달을 보장한다. 중복 전송이 발생할 수 있음.&lt;/li&gt;
&lt;li&gt;QoS 2: 정확히 한 번의 메시지 전달을 보장한다. 중복 전송이 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MQTT 클라이언트 라이브러리:
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MQTT 프로토콜을 구현하기 위해 다양한 클라이언트 라이브러리 제공.&lt;/li&gt;
&lt;li&gt;클라이언트 라이브러리는 다양한 프로그래밍 언어에서 MQTT를 쉽게 사용할 수 있도록 도와준다.&lt;/li&gt;
&lt;li&gt;예를 들어, Python에서는 Paho MQTT 라이브러리가 널리 사용됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MQTT의 활용:
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IoT(Internet of Things) 분야에서 센서 데이터 수집 및 제어 시스템과의 통신에 사용.&lt;/li&gt;
&lt;li&gt;M2M(Machine-to-Machine) 통신에서 다양한 장치 간에 데이터를 교환하기 위해 사용.&lt;/li&gt;
&lt;li&gt;모바일 및 웹 애플리케이션과의 실시간 통신에 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;설치 및 테스트&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. mosquitto 설치&lt;/p&gt;
&lt;pre id=&quot;code_1687766660993&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew install mosquitto&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div id=&quot;content&quot; data-inline-comments-target=&quot;true&quot; data-testid=&quot;page-content-only&quot;&gt;
&lt;div id=&quot;main-content&quot; data-testid=&quot;pageContentRendererTestId&quot; data-test-appearance=&quot;full-page&quot;&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;p data-renderer-start-pos=&quot;45&quot; data-ke-size=&quot;size16&quot;&gt;2. 실행&lt;/p&gt;
&lt;pre id=&quot;code_1687766679404&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew services start mosquitto&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;86&quot; data-ke-size=&quot;size16&quot;&gt;3. 중지&lt;/p&gt;
&lt;pre id=&quot;code_1687766694858&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew services stop mosquitto&lt;/code&gt;&lt;/pre&gt;
&lt;p data-renderer-start-pos=&quot;86&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;4. 재실행&lt;/p&gt;
&lt;pre id=&quot;code_1687766706894&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew services restart mosquitto&lt;/code&gt;&lt;/pre&gt;
&lt;p data-renderer-start-pos=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;170&quot; data-ke-size=&quot;size16&quot;&gt;5.&lt;b&gt; 비서비스 시작&lt;/b&gt; (이 명령어를 사용하면 $ brew services start mosquitto 를 사용할 필요 없음. )&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치 경로 주의 (설치된 경로에 맞게 입력해준다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1687766720350&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/usr/local/opt/mosquitto/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-renderer-start-pos=&quot;361&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;363&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;혹시 homebrew에 설치되어있는 app의 경로를 모를 경우 &lt;/b&gt;아래 명령어를 통해 경로를 확인할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1687766761926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew info [appname]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-renderer-start-pos=&quot;448&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;448&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;** 또한 port번호 1883이 중복되어 있는 경우 (mac 명령어) &lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래 명령어를 통해 1883인 포트번호를 찾고&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1687766777305&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ netstat -p tcp -van | grep LISTEN | grep 1883&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;kill한다&amp;hellip;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1687766787826&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ kill -9 [프로세스 ID]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-renderer-start-pos=&quot;605&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;607&quot; data-ke-size=&quot;size16&quot;&gt;6) 브로커에 clients를 설치해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1687766801562&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew install mosquitto-clients&lt;/code&gt;&lt;/pre&gt;
&lt;p data-renderer-start-pos=&quot;607&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;668&quot; data-ke-size=&quot;size16&quot;&gt;7) 터미널 창 2개를 추가로 띄워 subscribe, publish 해준다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687766810810&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mosquitto_sub -h [브로커의 IP] -p [포트번호] -t [TOPIC]

# /usr/local/opt/mosquitto/bin/mosquitto_sub -h localhost -p 1883 -t romworld&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1687766826848&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mosquitto_pub -h [브로커의 IP] -p [포트번호] -t [TOPIC] -m [MESSAGE]

# /usr/local/opt/mosquitto/bin/mosquitto_pub -h localhost -p 1883 -t romworld -m 환영합니다&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-renderer-start-pos=&quot;995&quot; data-ke-size=&quot;size16&quot;&gt;왼쪽은 브로커, 오른쪽 상단은 구독, 하단은 발행이다. sub에서 메세지를 확인할 수 있다.&lt;/p&gt;
&lt;div data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;
&lt;div&gt;
&lt;div data-context-id=&quot;606699634&quot; data-type=&quot;file&quot; data-node-type=&quot;media&quot; data-width=&quot;1336&quot; data-height=&quot;849&quot; data-id=&quot;a715861b-2ee0-446f-94b9-3179c0857e4f&quot; data-collection=&quot;contentId-606699634&quot; data-file-name=&quot;image-20230626-075446.png&quot; data-file-size=&quot;666876&quot; data-file-mime-type=&quot;image/png&quot; data-alt=&quot;&quot;&gt;
&lt;div id=&quot;newFileExperienceWrapper&quot; data-testid=&quot;media-card-view&quot;&gt;
&lt;div data-testid=&quot;media-file-card-view&quot; data-test-status=&quot;complete&quot; data-test-media-name=&quot;image-20230626-075446.png&quot; data-test-progress=&quot;1&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2672&quot; data-origin-height=&quot;1698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UgFht/btsljSIj2kG/3q1kpfvFsU0g1krWWQ3iYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UgFht/btsljSIj2kG/3q1kpfvFsU0g1krWWQ3iYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UgFht/btsljSIj2kG/3q1kpfvFsU0g1krWWQ3iYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUgFht%2FbtsljSIj2kG%2F3q1kpfvFsU0g1krWWQ3iYK%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;2672&quot; height=&quot;1698&quot; data-origin-width=&quot;2672&quot; data-origin-height=&quot;1698&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-renderer-start-pos=&quot;1051&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-testid=&quot;view-page-labels-container&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>etc</category>
      <category>mosquitto</category>
      <category>Mqtt</category>
      <category>프로토콜</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/223</guid>
      <comments>https://romworld.tistory.com/223#entry223comment</comments>
      <pubDate>Mon, 26 Jun 2023 17:08:23 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 다른 서버로 파일 이동</title>
      <link>https://romworld.tistory.com/222</link>
      <description>&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;1. 터미널을 두개 띄운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 아래 명령어 입력&lt;/p&gt;
&lt;pre id=&quot;code_1686897333993&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scp [이름].txt [user명]@192.xxx.xxx.xxx:/[보낼위치]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 보내는 서버 비밀번호 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 끝&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;</description>
      <category>etc</category>
      <category>Linux</category>
      <category>리눅스</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/222</guid>
      <comments>https://romworld.tistory.com/222#entry222comment</comments>
      <pubDate>Fri, 16 Jun 2023 15:38:06 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu] apache tomcat 설치하기!</title>
      <link>https://romworld.tistory.com/221</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 원하는 톰캣 버전 다운 받을 수 있는 주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #04beb8; text-align: start;&quot; href=&quot;http://archive.apache.org/dist/tomcat/&quot;&gt;archive.apache.org/dist/tomcat/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686621789366&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Index of /dist/tomcat&quot; data-og-description=&quot;&quot; data-og-host=&quot;archive.apache.org&quot; data-og-source-url=&quot;http://archive.apache.org/dist/tomcat/&quot; data-og-url=&quot;http://archive.apache.org/dist/tomcat/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://archive.apache.org/dist/tomcat/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://archive.apache.org/dist/tomcat/&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; data-ke-size=&quot;size16&quot;&gt;Index of /dist/tomcat&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;archive.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;p data-ke-size=&quot;size16&quot;&gt;2. 다운 받을 경로에서 아래 명령어를 입력! (나는 8.5.54 버전이 필요하여 이 버전을 선택함)&lt;/p&gt;
&lt;pre id=&quot;code_1686621815684&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget -c http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.54/bin/apache-tomcat-8.5.54.tar.gz&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;3. 압축을 풀어준다&lt;/p&gt;
&lt;pre id=&quot;code_1686621917596&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tar -zxvf apache-tomcat-8.5.54.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 디렉토리 이름 변경 (해도 되고.. 안해도 되고)&lt;/p&gt;
&lt;pre id=&quot;code_1686621946924&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;v apache-tomcat-8.5.54.tar.gz tomcat&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5.&amp;nbsp; 실행 시키기&lt;/p&gt;
&lt;pre id=&quot;code_1686621989190&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tomcat/bin ./startup.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 주소창에 http://[IP주소]:8080 입력시 아래 페이지가 뜬다면 접속 성공!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2658&quot; data-origin-height=&quot;1490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by3Qsg/btsjImwtjBP/YiIAU1cIrHrNnyPZMobxEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by3Qsg/btsjImwtjBP/YiIAU1cIrHrNnyPZMobxEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by3Qsg/btsjImwtjBP/YiIAU1cIrHrNnyPZMobxEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby3Qsg%2FbtsjImwtjBP%2FYiIAU1cIrHrNnyPZMobxEK%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;2658&quot; height=&quot;1490&quot; data-origin-width=&quot;2658&quot; data-origin-height=&quot;1490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 톰캣 구동 정지&lt;/p&gt;
&lt;pre id=&quot;code_1686622101572&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tomcat/bin ./shutdown.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tomcat</category>
      <category>ubuntu</category>
      <author>inderrom</author>
      <guid isPermaLink="true">https://romworld.tistory.com/221</guid>
      <comments>https://romworld.tistory.com/221#entry221comment</comments>
      <pubDate>Tue, 13 Jun 2023 11:09:57 +0900</pubDate>
    </item>
  </channel>
</rss>