<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hamini_genious.log</title>
        <link>https://velog.io/</link>
        <description>제가 하미니는 아니구요.. 하미니가 똑똑하다고 생각하는 사람입니다.</description>
        <lastBuildDate>Fri, 16 Feb 2024 17:12:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hamini_genious.log</title>
            <url>https://velog.velcdn.com/images/hamini_genious/profile/9534df6a-c2de-45e8-856a-8e9c5939408e/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hamini_genious.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hamini_genious" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[AWS] Amazon Linux 와 Ubuntu의 차이]]></title>
            <link>https://velog.io/@hamini_genious/AWS-Amazon-Linux-%EC%99%80-Ubuntu%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@hamini_genious/AWS-Amazon-Linux-%EC%99%80-Ubuntu%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Fri, 16 Feb 2024 17:12:24 GMT</pubDate>
            <description><![CDATA[<p>Amazon Linux에서 LAMP 웹서버를 구축하다가 apache2의 기본 설정을 찾기 위해 /etc/apache2 경로를 가보니 없었는데 (!!!) 당연히 Amazon Linux도 Ubuntu와 별반 다르지 않을 것이라고 생각했던 것이 오산이었다. </p>
<p><a href="https://webdir.tistory.com/196">apache2 설정 파일 더 알아보기</a> </p>
<blockquote>
<p>Amazon Linux, CentOS, Fedora, RHEL(<strong>Red Hat</strong> Enterprise Linux) : yum, httpd
Debian, Ubuntu : apt, apache2</p>
</blockquote>
<p>대신에 /etc/httpd/conf/httpd.conf 파일을 확인해보니 있었다 !</p>
<p>물론 직접 가져와서 역으로 CentOS에서 apt-get 설치하거나, Ubuntu에서 yum을 설치해서 활용할 수는 있는 것 같다. 생각해보면 나도 억지로 깔아봤던 경험이 있다. 그 때는 정말 아무것도 모르고 패키지가 급해서 그렇게 했던 것 같기도 하다. 알고 가면 좋으니 정리해본다. </p>
<hr>
<p>httpd.conf에서 index 우선순위에 대한 설정을 index.html 말고 따로 적어둔 것이 없는 default 상태를 유지했다. 그리고 나서 index.html 없이 index.php만 넣을 경우 index.html이 없으니 안될 줄 알았는데 index.php가 제대로 떴다. 이 상태에서 추가로 index.html을 넣었더니 다시 index.html가 메인으로 떴다. </p>
<p><a href="https://www.quora.com/Why-is-it-when-you-have-an-index-PHP-and-index-HTML-in-the-primary-folder-used-to-host-my-website-index-PHP-takes-priority-first-and-whenever-I-load-my-site-index-PHP-loads-as-the-homepage-instead-of-index-HTML">https://www.quora.com/Why-is-it-when-you-have-an-index-PHP-and-index-HTML-in-the-primary-folder-used-to-host-my-website-index-PHP-takes-priority-first-and-whenever-I-load-my-site-index-PHP-loads-as-the-homepage-instead-of-index-HTML</a></p>
<p>우선순위를 전혀 설정하지 않았음에도 되는 이유에 대한 링크인 것 같은데 다시 읽어보고 수정해야지..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SSH] Windows에서 PuTTY를 통해 SSH 프로토콜로 AWS EC2 접속 시에 known_hosts 위치는 어디에 있을까?]]></title>
            <link>https://velog.io/@hamini_genious/SSH-Windows%EC%97%90%EC%84%9C-PuTTY%EB%A5%BC-%ED%86%B5%ED%95%B4-SSH-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EB%A1%9C-AWS-EC2-%EC%A0%91%EC%86%8D-%EC%8B%9C%EC%97%90-knownhosts-%EC%9C%84%EC%B9%98%EB%8A%94-%EC%96%B4%EB%94%94%EC%97%90-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@hamini_genious/SSH-Windows%EC%97%90%EC%84%9C-PuTTY%EB%A5%BC-%ED%86%B5%ED%95%B4-SSH-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EB%A1%9C-AWS-EC2-%EC%A0%91%EC%86%8D-%EC%8B%9C%EC%97%90-knownhosts-%EC%9C%84%EC%B9%98%EB%8A%94-%EC%96%B4%EB%94%94%EC%97%90-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Wed, 14 Feb 2024 14:52:55 GMT</pubDate>
            <description><![CDATA[<p>SSH에 대한 기본적인 원리에 대해 설명하는 강의나 글에서는 아래와 같은 환경에서 설명해준다. </p>
<blockquote>
<p>클라이언트(리눅스) - 서버(리눅스)</p>
</blockquote>
<p>SSH 접속을 위해 크게 서버 인증, 사용자 인증의 2가지 단계를 거치게 된다고 한다.</p>
<p>시작에 앞서 서버 환경에 SSH 서버(데몬) 설치 시에 Public Key(공개키), Private Key(개인키, 비밀키, 비공개키) 2개를 Key Pair로 생성하게 된다. </p>
<p>실제 클라이언트가 서버에 접속을 시도할 때, 서버에서 공개키를 클라이언트에 전달하게 된다. 그 때 해당 공개키는 클라이언트의 .ssh/known_hosts에 저장이 된다. 그리고 후에 접속을 시도할 때 마다 known_hosts 파일에 등록되어있는지 확인하여 있으면 믿을 수 있는 서버로 인식한다.  </p>
<p>그리고 그 다음에는 반대로 클라이언트 쪽에서 생성된 공개키를 서버에 전송하여, 서버의 .ssh/authorized_keys에 추가하게 된다. </p>
<p>자세한 프로세스는 잘 설명된 블로그 링크들이 많으니 참고하면 되겠다. </p>
<p><a href="https://medium.com/@labcloud/ssh-%EC%95%94%ED%98%B8%ED%99%94-%EC%9B%90%EB%A6%AC-%EB%B0%8F-aws-ssh-%EC%A0%91%EC%86%8D-%EC%8B%A4%EC%8A%B5-33a08fa76596">내 기준 최고의 구조도 &amp; 설명 블로그 링크</a> ^^</p>
<hr>
<p>설명은 이해를 했는데 직접적으로 ssh 설치를 해서 접속 시도하는 것이 아니라,</p>
<p>Windows에서 PuTTY를 사용해서 AWS EC2 SSH 접속을 시도하려고 할 때 대체 known_hosts가 어디에 있길래 서버 인증이 되어서 접속이 되는 지가 궁금했다. </p>
<p>흔히들 블로그에서 깔끔하게 사용법을 설명해주는 <strong>.pem 파일을 .ppk로 변환해서 SSH 접속 시에 활용하는 부분</strong>은 알겠는데.. 이건 사용자 인증이지 내가 궁금했던 부분이 아닌 것 같았다. </p>
<p>우선 가장 최초에 EC2 인스턴스에 PuTTY로 윈도우에서 접속을 시도하면 다음과 같은 창이 뜬다. </p>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/31546b3f-6bcf-4a83-b6e0-ed5f188fc7dd/image.png" alt=""></p>
<ul>
<li>Connect Once: 이번 한 번만 연결 허용, 다음에 다시 접속하면 위 경고창 또 뜬다.</li>
<li>Accept: 캐싱해서 다음에 다시 접속하면 위 경고창 뜨지 않는다 (믿겠다는 뜻 ^^)</li>
</ul>
<p>여기서 <strong>Connect Once</strong>를 누르고 나서 PuTTY에서 관리하는 known_hosts 를 찾아가보자</p>
<ol>
<li><p>Windows 검색창에서 regedit을 치거나 Registry Editor(레지스트리 편집기)를 검색하여 들어간다. </p>
</li>
<li><p>컴퓨터\HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys 경로로 탐색해서 들어간다. </p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/2c05c866-7caa-408c-abb5-c3806c90134b/image.png" alt=""></p>
<p>들어가면 이렇게 나오는데, 아무것도 없다. 서버쪽에서 클라이언트로 공개키를 보냈는데 Connect Once를 눌렀기 때문에 일회성 접속으로만 처리가 되어서 저장된 게 없다. 다음에 재접속할 때 또 검증을 요구하게 된다. </p>
<ol start="3">
<li><p>다시 EC2 인스턴스에 PuTTY로 접속 시도한다. 이번에는 Connect Once가 아니라 <strong>Accpet</strong>를 해본다.</p>
</li>
<li><p>Registry Editor에서 SshHostKeys 파일 안에 뭐가 생겼는지 재확인해본다.</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/2d4e2b2a-866c-40f3-a7e7-6d8a47c3edca/image.png" alt=""></p>
<p>짜잔~!!!</p>
<ol start="5">
<li>인스턴스 재접속을 시도해본다. 이제 경고창 없이 바로 서버에 대한 인증이 넘어간다. </li>
<li>임의로 Registry Editor에서 <strong>등록되어 있는 SshHostKeys의 값을 지워버리면</strong>, 인스턴스 재접속시 다시 경고창이 뜬다.</li>
</ol>
<hr>
<p>매번 아무 생각 없이 접속하던 내용을 깊게 이해해보려고 했더니 시간을 너무 많이 쏟았다. 
공부해야 할 것이 끝도 없다..</p>
<p>틀린 부분은 설명과 함께 달아주시면 바로 수정하겠습니다만.. 저격/지적 어투는 답댓 안 달아드릴거에유 (댓글 달려본 적 없음..)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Ingress Controller] Internal Ingress Controller와 External Ingress Controller가 공존하는 방법]]></title>
            <link>https://velog.io/@hamini_genious/Ingress-Nginx-Internal-Ingress-Nginx%EC%99%80-External-Ingress-Nginx%EA%B0%80-%EA%B3%B5%EC%A1%B4%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@hamini_genious/Ingress-Nginx-Internal-Ingress-Nginx%EC%99%80-External-Ingress-Nginx%EA%B0%80-%EA%B3%B5%EC%A1%B4%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Mon, 05 Feb 2024 08:11:52 GMT</pubDate>
            <description><![CDATA[<h2 id="구성된-상태는-아래와-같다-">*<em>구성된 상태는 아래와 같다 *</em></h2>
<p>Ingress Nginx Controller를 <a href="https://artifacthub.io/packages/helm/ingress-nginx/ingress-nginx">internal 설정으로 설치</a>를 한 상태였다. </p>
<pre><code>kubectl get svc </code></pre><p>Ingress Nginx Controller를 조회해봤을 때, </p>
<p>ingress-nginx-controller (이건 external이라고 앞으로 부르겠다)
ingress-nginx-controller-internal</p>
<p>이렇게, internal 용으로도 추가로 생성이 제대로 되어 있었다. </p>
<h2 id="실제-궁금했던-케이스는-이렇다">실제 궁금했던 케이스는 이렇다</h2>
<blockquote>
<ul>
<li>A의 도메인으로는 아무 네트워크를 사용해도 쉽게 접속이 된다. </li>
</ul>
</blockquote>
<ul>
<li>B의 도메인으로는 내부망으로만 접속이 된다. </li>
<li>A과 B이 모두 가르키는 곳은 공통적으로 C service이다.</li>
</ul>
<p>A는 External Ingress Nginx Controller를 통해 접속하는 것이고, 
B는 Internal Ingress Nginx Controller를 통해 접속하는 것이다. </p>
<p>Ingress 규칙에서 각각 A, B는 모두 backend로 연결되는 service가 C로 동일하게 설정되어 있었다다. 
고로 .. <strong>A, B는 Ingress 규칙이 완전히 똑같았다.</strong> (Ingress 이름만 제외하고는) </p>
<p>여기서부터 헷갈리기 시작했던 것이, ingress를 각각 describe해서 보니 2개 다 완전히 내용이 똑같았는데, Address 부분이 <strong>external ingress nginx controller의 IP 주소</strong>로 똑같이 고정되어 있었다. </p>
<pre><code>kubectl describe ingress A가-연결된-ingress-이름
kubectl describe ingress B가-연결된-ingress-이름</code></pre><p>A는 External 연결이니까 그렇다치는데, B는 <strong>ingress nginx controller internal의 IP 주소</strong>로 고정되어 보여야하는 것이 아닌가? 라는 생각을 했고, 이것 때문에 모든 것들이 갑자기 다 헷갈려지기 시작했다. </p>
<p>그래서 A, B에 대한 nslookup을 해서 address를 조회해보니 이 부분은 내 예상대로 A의 address는 ingress nginx controller <strong>external</strong>의 IP 주소였고, B의 address는 ingress nginx controller <strong>internal</strong>의 IP 주소였다. </p>
<p>위와 같은 과정을 겪다 보니까 내가 뭘 하고 있는지 나도 모르겠는 지경에 왔다. 근데 답은 너무 단순했다. 그냥 내가 엄청 헷갈렸던 것 같은데..</p>
<blockquote>
<p>internal ingress nginx를 쓸 지 external ingress nginx를 쓸 지는 순전히 작업자가 무슨 ip로 도메인을 등록하느냐에 달린 거다. 그리고 이  경우는 B에 특별히 ingress nginx controller <strong>internal</strong>의 IP를 등록해준 것 뿐인 것이다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/0c595ec7-c21f-4b04-93a8-1e9e7dd39efe/image.png" alt=""></p>
<p>DNS 등록을 내가 하지 않았던 환경이어서 이렇게 단순한 거를 완전 뱅뱅 돌고 돈 것이다.. internal용으로 생성된 ingress nginx controller를 고를 지, 아닌 것을 고를 지.. 대체 어떤 manifest에서 셋업이 되었을까? 하면서 엄청 파일 뒤져보고 구글링했었는데.. </p>
<p>얕은 지식과 섞이는 바람에 나 혼자 대차게 헛구글링만 한거다~</p>
<p>그래도 하나 얻은 건 있다. </p>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/315f52c6-fda7-459d-af6c-073a1b5b5ba5/image.png" alt=""></p>
<p>2개가 나란히 생겼을 때 ingress object는 기본적으로 external을 향하고 있다는 것 정도는 알게 됐다. 그래서 아마 처음에 ingress를 2개 동시에 조회했을 때 모두 external에 대한 ip 주소만 뜨지 않았을까?</p>
<p>그래서 이것의 장점은, 새로운 ingress controller를 설치하지 않고 1개로 여러가지 방향으로 운용할 수 있다.. 인 것 같다. 기초가 항상 중요하다는 걸 또 배운다. <del>자꾸 삽질 블로그가 되는 것 같은데</del></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] rsync에 대한 멍청한 고찰]]></title>
            <link>https://velog.io/@hamini_genious/Linux-rsync%EC%97%90-%EB%8C%80%ED%95%9C-%EB%A9%8D%EC%B2%AD%ED%95%9C-%EA%B3%A0%EC%B0%B0</link>
            <guid>https://velog.io/@hamini_genious/Linux-rsync%EC%97%90-%EB%8C%80%ED%95%9C-%EB%A9%8D%EC%B2%AD%ED%95%9C-%EA%B3%A0%EC%B0%B0</guid>
            <pubDate>Tue, 30 Jan 2024 13:20:35 GMT</pubDate>
            <description><![CDATA[<p>역시 구글링 했을 때 검색글이 적은데에는 다 이유가 있었다. </p>
<pre><code>rsync -av src/ dest</code></pre><p>위 문장은 rsync 명령을 수행할 때에 현재 상태에 대해서 src directory 밑의 모든 파일/디렉토리를 dest 디렉토리 밑에 동일하게 remote sync를 하는 명령어이다. </p>
<p>그래서 나는 너무 당연히 <strong>한 번만 수행</strong>하면 계속 실시간으로 동기화 해주는 것이라고 이해를 해버린 것이다.</p>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/0bbccff9-687d-4f10-86b2-c0761cd870b9/image.png" alt=""></p>
<blockquote>
<p>그럼 어떻게 해야 rsync의 실시간 동기화를 끊지..?</p>
</blockquote>
<p>한글로 검색했을 때는 딱히 나같은 (잘못된) 호기심을 지닌 사람이 없어서 영문으로 구글링하니까 바로 나오더이다. </p>
<p><a href="https://www.reddit.com/r/linux4noobs/comments/l3wkdp/how_to_stop_rsync_from_syncing_files_anymore/?rdt=59109">https://www.reddit.com/r/linux4noobs/comments/l3wkdp/how_to_stop_rsync_from_syncing_files_anymore/?rdt=59109</a></p>
<p>근데 댓글 읽다가 알게 됐다. 내가 rsync를 너무 대충 이해하고 있었구나..
실시간으로 동기화한다는 말에서 <strong>실시간</strong>에만 초점을 두는 바람에 개념을 완전히 잘못 이해해버렸다. 이제는 알았으니 됐다 !!!</p>
<p>다소 멍청했지만.. 나같은 사람도 있어야 밸런스가 맞지 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 리눅스 명령어 정리]]></title>
            <link>https://velog.io/@hamini_genious/Linux-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hamini_genious/Linux-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 24 Jan 2024 04:06:49 GMT</pubDate>
            <description><![CDATA[<h1 id="1-find">1. find</h1>
<pre><code>find . -type f -size +10000k -exec rm -f {} \; ## 현재 위치에서 파일 사이즈 10000k 넘어가는 파일들을 모두 찾아서 삭제하는 커맨드

find /var/www -type d -exec chmod 2775 {} \; ## /var/www 위치에서 디렉토리를 모두 2775 권한으로 변경 (2는 setgid)
-exec 명령어 {} \;

{} : find로 찾은 파일들을 의미
\; : -exec 옵션의 끝을 의미</code></pre><h1 id="2-usermod-사용자-계정-정보를-수정하는-명령어">2. usermod (사용자 계정 정보를 수정하는 명령어)</h1>
<pre><code>usermod -a -G apache ec2-user

-a : -G과 같이 쓰이는 옵션, --append
-G : 그룹 추가

apache 그룹에 ec2-user 계정 추가</code></pre><h1 id="3-chown-change-owner">3. chown (change owner)</h1>
<pre><code>chown -R ec2-user:apache /var/www

-R : recursive

/var/www 디렉토리와 하위 디렉토리 &amp; 파일의 모든 소유권을 ec2-user 유저와 apache 그룹으로 변경</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] vi editor 자주 쓰는 문법 정리]]></title>
            <link>https://velog.io/@hamini_genious/Linux-vi-editor-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hamini_genious/Linux-vi-editor-%EC%9E%90%EC%A3%BC-%EC%93%B0%EB%8A%94-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 23 Jan 2024 05:25:25 GMT</pubDate>
            <description><![CDATA[<ol>
<li>한 줄 복사 yy 후 붙여넣기 p</li>
<li>단어 단위로 지우기 dw</li>
<li>한 줄 삭제 dd</li>
<li>맨 밑으로 내려가기 shift + g</li>
<li>맨 위로 올라가기 1 + shift + g</li>
<li>단어 찾기 /단어 (소문자 n으로 단어 내려가면서 찾기, 반대 방향은 대문자 N)</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] 쉘 스크립트 작성시 사용한 문법 정리]]></title>
            <link>https://velog.io/@hamini_genious/Linux-%EC%89%98-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%91%EC%84%B1%EC%8B%9C-%EC%82%AC%EC%9A%A9%ED%95%9C-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hamini_genious/Linux-%EC%89%98-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%91%EC%84%B1%EC%8B%9C-%EC%82%AC%EC%9A%A9%ED%95%9C-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 23 Jan 2024 04:10:08 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>사용자에게 입력받는 코드</p>
<pre><code>echo -n &quot;문자열 입력 받기: &quot; ## 줄바꿈 안하는 옵션 -n
read str_value ## scanf 같은 함수
echo $str_value ## 변수 출력할 때는 항상 $ 표시를 같이 넣어준다 </code></pre></li>
<li><p>조건문</p>
<pre><code>if [ $option == &#39;y&#39; ] ; then ## 띄어쓰기 꼭 해줘야함
 echo &quot;yes&quot; ## tab 키로 줄바꿈
else echo &quot;no&quot;
fi ## if 조건문 마무리할 때 써줘야하는 단어</code></pre></li>
</ol>
<p>== 와 =의 기능이 동일하므로 실수로 ==를 =로 지정해도 조건문 비교하는 데에는 문제가 없었다. </p>
<ol start="3">
<li>sed 활용한 문자열 바꾸기<pre><code>sed -i &#39;/hello/c\hello world&#39; file.txt ## hello가 들어가있는 해당 줄을 아예 hello world로 변경한다</code></pre></li>
</ol>
<p><a href="https://sed.js.org/">sed 테스트해보기 좋은 사이트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] Crontab에 등록한 Cron이 돌지 않을 때]]></title>
            <link>https://velog.io/@hamini_genious/Linux-Crontab%EC%97%90-%EB%93%B1%EB%A1%9D%ED%95%9C-Cron%EC%9D%B4-%EB%8F%8C%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C</link>
            <guid>https://velog.io/@hamini_genious/Linux-Crontab%EC%97%90-%EB%93%B1%EB%A1%9D%ED%95%9C-Cron%EC%9D%B4-%EB%8F%8C%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C</guid>
            <pubDate>Mon, 22 Jan 2024 09:36:06 GMT</pubDate>
            <description><![CDATA[<p>강의 내용 출처: <a href="https://www.opentutorials.org/course/2598/14218">https://www.opentutorials.org/course/2598/14218</a></p>
<p><strong>환경: Ubuntu 20.04 (wsl2)</strong></p>
<p>똑같이 따라했는데 이상하게 나는 크론탭에 등록된 스케줄이 돌지 않았다. 
로그를 보려고 열심히 뒤져봤지만, syslog 디렉토리 자체가 없어서 확인도 어려웠다. 실습 환경과 내 환경이 동일하지 않아서 발생하는 일이겠거니 싶어서 구글링에 들어갔다. (syslog 관련해서는 나중에 차차 보기로..)</p>
<p>cron이 켜져있는 지 확인을 해봐야한다는 말에 <em><strong>아차!</strong></em> 싶었다.</p>
<ol>
<li><p>일단 cron이 설치되어 있는지 확인 (당연히 있겠지.. <em>제발</em>)</p>
<pre><code>/etc/init.d
find /etc -name &quot;cron*&quot;  ## 이렇게 찾아도 되겠다.. </code></pre><p><img src="https://velog.velcdn.com/images/hamini_genious/post/626af312-22fa-4eb4-877d-7b5d3c217b91/image.png" alt=""></p>
</li>
<li><p>명령어 확인</p>
</li>
</ol>
<p>대부분 daemon 명령어는 비슷하지만 혹시 몰라 한 번 더 확인해봤다. </p>
<pre><code>/etc/init.d/cron</code></pre><p><img src="https://velog.velcdn.com/images/hamini_genious/post/892dd852-2cb7-4272-85d7-3358a000bf49/image.png" alt=""></p>
<p>어쩐지 sudo service crond start를 하면 <strong>crond: unrecognized service</strong>가 뜨더라니..</p>
<ol start="3">
<li><p>서비스 기동 전 status 확인</p>
<pre><code>sudo service cron status</code></pre></li>
<li><p>서비스 기동</p>
<pre><code>sudo service cron start</code></pre><p><img src="https://velog.velcdn.com/images/hamini_genious/post/6a96da55-66ad-4e8d-85cd-d74fea59e8ff/image.png" alt=""></p>
</li>
<li><p>크론탭에 등록된 스케줄이 제대로 도는 것 확인 완료 !</p>
</li>
</ol>
<pre><code>ps -ef | grep cron ## 프로세스 확인까지 해줬다</code></pre><p><img src="https://velog.velcdn.com/images/hamini_genious/post/81bbd320-7498-4836-9f41-dddbc97dafbc/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Linux] IO Redirection - Standard Output 순서에 대한 고찰]]></title>
            <link>https://velog.io/@hamini_genious/Linux-IO-Redirection-Standard-Output-%EC%88%9C%EC%84%9C%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0</link>
            <guid>https://velog.io/@hamini_genious/Linux-IO-Redirection-Standard-Output-%EC%88%9C%EC%84%9C%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0</guid>
            <pubDate>Mon, 22 Jan 2024 00:15:49 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>강의 내용 출처: <a href="https://www.youtube.com/watch?v=l39yXacR1_s">https://www.youtube.com/watch?v=l39yXacR1_s</a></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/e142529f-57dd-4e0d-aba1-a281a9c6fb90/image.png" alt=""></p>
<p>위 이미지는 ls의 결과 output이 result.txt 파일에 기록되는 리다이렉션하는 간단한 예제이다. 현재는 &gt;가 1개밖에 없으므로 계속 새롭게 덮어쓰는 형태가 될 것이다. </p>
<h3 id="다만-나는-궁금해져버렸다">다만 나는 궁금해져버렸다.</h3>
<p>캡쳐본처럼 ls -al 하고 난 result.txt의 파일 사이즈와 실제로 열어본 result.txt의 파일 사이즈와 내용이 일치하지 않을까?</p>
<p>아무것도 없는 디렉토리에서 위와 같은 과정을 여러 번 반복해보았으나, 똑같은 수행을 여러번 해도, <strong>ls -al 했을 때는 파일 사이즈가 168</strong>인데 cat result.txt를 하면 계속 <strong>파일 사이즈가 0</strong>이었다. </p>
<p><a href="https://www.inflearn.com/questions/621578/ls-a-gt-result-txt%EB%A5%BC-%EB%91%90%EB%B2%88%ED%95%9C-%EA%B2%B0%EA%B3%BC%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C">나와 언뜻 비슷해보이는 질문을 2년 전에 올렸던 사람이 있었는데, 해결되지 않은 듯 했다.</a></p>
<p>꼭 그렇게 중요하지도 않은 거 하나에 꽂히면 그거 알 때까지 찾고 해결을 보거나, 그렇지 못하면 그대로 그냥 하루를 종료하는 성격인지라 또 호기심이 도져버려서 찾아나서기 시작했다. </p>
<p>이것저것 뒤적거리다가 강의 출처인 이고잉 홈페이지의 영상 댓글에서 <a href="https://www.opentutorials.org/course/2598/14199">힌트</a>를 발견하고 구글링을 제대로 다시 해보기 시작했다. 그래! &#39;&gt;&#39; 의 순서대로 처리되는 게 아닐 수 있겠구나 <del>(이제야 알았냐)</del></p>
<p>왜 redirction한 결과가 empty file로 기록되는 지에 대해 검색했고, <a href="https://stackoverflow.com/questions/1895981/why-reading-and-writing-the-same-file-through-i-o-redirection-results-in-an-empt">stackoverflow 답변</a>은 다음과 같았다. </p>
<p>참조로 많이 달렸던 <a href="https://www.gnu.org/software/bash/manual/bash.html#Redirections">GNU 공식 사이트의 Redirection</a> 설명도 캡쳐본으로 아래와 같이 추가했다.<br><img src="https://velog.velcdn.com/images/hamini_genious/post/7c3a5be2-7904-4d86-ba87-aad861bc68e1/image.png" alt=""></p>
<h3 id="결론적으로-내가-이해한-redirection이-진행되는-과정은-다음과-같다">결론적으로 *<em>내가 이해한 *</em>Redirection이 진행되는 과정은 다음과 같다.</h3>
<p>(틀린 부분은 곱게 지적해주시면 바로 수정 들어가겠습니다)</p>
<ol>
<li>Standard Output으로 지정된 result.txt 파일이 먼저 생성된다</li>
<li>&#39;&gt;&#39;는 매번 새로 덮어쓰기때문에 file size 0으로 truncate된다</li>
<li>ls 프로세스가 수행된다.</li>
<li>ls 수행된 당시에는 result.txt에 무언가 기록되지 않은 시점이니, file size가 여전히 0이고 그 순간을 Redirect시켜서 result.txt에 담는다. </li>
<li>Redirect가 되었으므로, 이제는 result.txt에 내용이 기록된, 파일 사이즈가 0이 아니게 기록이 된다. </li>
</ol>
<p><img src="https://velog.velcdn.com/images/hamini_genious/post/167dfca3-de6e-439d-9fbc-53a884b20e3d/image.png" alt=""></p>
<p>그래서 캡쳐본을 다시 보면, </p>
<p>ls -al 한 순간은 ls의 프로세스가 모두 다 돌고 redirection까지 끝난 상황이니까 result.txt의 파일 사이즈가 0이 아닌 것인데,</p>
<p>막상 result.txt 파일을 열어보면, ls 하는 그 순간에서는 파일이 막 생성되거나 리셋된 지점이었을테니 파일 사이즈가 0이었다. </p>
<p>재밌다 재밌어.. ㅎ</p>
]]></description>
        </item>
    </channel>
</rss>