Windows 10의 Bash에서 문자열 검색, 치환, 파일 삭제하기


Linux에는 grep, sed, awk에서 정규 표현식(regex)을 가미하여 파일의 문자열을 검색 및 치환하고, 여러 개의 파일을 동시에 삭제하거나 내용도 한꺼번에 여러개의 파일에서 작업할 수 있다

특히 여러 개의 파일에 동시 작업을 하기 위해서는 pipe와 xargs를 sed와 연결하여 작업하면 좋다.

아래 이미지는 Windows 10의 Bash에서 작업한 내용이다.

1

grep -l “messenger” *은 현재 디렉터리에 있는 모든 파일을 찾아서 messenger라는 문자열이 있는 파일을 찾는 것이다

find . -type f -print0 | xargs -0 sed -i ‘s/messenger/John the Baptist/g’ 는 현재 위치에서 파일을 일단 찾아서 각 파일에 존재하는 messenger 문자열을 John the Baptist로 치환하여 저장하는 것이다

cat myproject.txt | grep John은 실제로 작업이 적용되었는지 확인하기 위해서 myproject.txt 파일을 편집기로 열지 않고 확인해 본 것이다. messenger 문자가 John the Baptist로 제대로 치환이 되었다

2

find . -name “*.txt” | xargs sed -i ‘s/the Baptist//g’ 는 확장자 .txt를 갖는 파일을 모두 찾아서 파일의 내용 중에 the Baptist가 있으면 그것을 공백으로 치환하는 것이다. 즉, the Baptist 문자열을 삭제하는 것이다. 실제로 파일 내용을 보니 the Baptist라는 글자가 삭제된 것을 알 수 있다.

3

grep -l “God” * 은 God이라는 문자열이 포함된 파일을 찾는 것이다. God이라는 문자열이 있는 파일을 몽땅 찾아서 한꺼번에 삭제하는 것이 grep -l “God” * | xargs rm -rf 명령이다. 실제로 삭제되었는지 확인하기 위해서 ls -l을 해보니 God 문자열이 포함된 myproject.txt와 yourpjt.txt 파일이 모두  삭제된 것을 알 수 있다

Windows10에서 Linux를 사용할 수 있어서 참 좋네. Linux의 장점이 문자열 검색 및 치환, 그리고 특정한 문자열이 포함된 파일들을 모두 찾아서 한꺼번에 삭제하는 것이다.

명령어를 사용하여 YouTube 동영상 다운로드하기


<Linux에서 Youtube 동영상은 mp3로 다운로드하기>
1) youtube-dl 다운로드하기
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl

2) youtube-dl 파일을 실행할 수 있는 권한 설정하기
chmod a+rx /usr/local/bin/youtube-dl

3) youtube에 있는 Playlist 및 동영상 URL을 입력하여 mp3로 변환하여 다운로드하기
– 동영상 한 개-
youtube-dl –extract-audio –audio-format mp3 <url>

-PlayList의 여러개의 동영상 다운로드하기-
youtube-dl -x –audio-format mp3 –playlist-start 1  –playlist-end 5 <URL>

4) Windows에서 WinSCP 프로그램을 이용하여 다운로드받은 파일을 리눅스에서 Windows로 복사하기

참고1: http://hodol.kr/xe/note/955

참고2: http://askubuntu.com/questions/178481/how-to-download-an-mp3-track-from-a-youtube-video

참고3: http://rg3.github.io/youtube-dl/download.html

참고4: http://www.tecmint.com/download-mp3-track-from-youtube-video-using-youtube-dl/

참고 동영상: https://www.youtube.com/watch?v=URcb5LJqtMQ

<Windows에서 Youtube 동영상 다운로드하기>
1) https://rg3.github.io/youtube-dl/ 에서 Windows용 youtube-dl 프로그램 다운로드하여 설치하기

2) 명령 프롬프트에서 youtube-dl.exe <url>을 하여 동영상 파일을 다운로드하기
(Playlist 경로를 사용하면 여러 개의 동영상을 한꺼번에 다운로드할 수 있다.)

Linux에서 간단하게 이메일 보내기


Linux에서 메일을 보내는 방법은 여러 개가 있다. 그 중에 가장 간편하게 사용하는 명령어가 바로 mail이다. 이 유틸리티의 package는 mailx이다.

메일을 보내려면 사전에 다음과 같이 메일 클라이언트를 설치해야 한다.
yum install mailx -y  #centos
sudo apt-get install mailutils -y  #ubuntu
메일이 보내지는지 확인하려면 다음과 같이 해본다.
echo “Message Body” | mail -s “Message Subject” jesuswithme@gmail.com
**  -s는 subject, -a는 attachments
아래 구문은 내용(body)이 없는 것이다.
mail -s “Test Subject” jesuswithme@gmail.com < /dev/null
mail -a /tmp/myfile.txt -s “Backup File” jesuswithme@gmail.com < /dev/null
다음은 파일(/tmp/myfile.txt)의 내용을 본문(body)으로 하고 파일도 첨부한 것이다.
mail -a /tmp/my.csv -s “Backup csv files” jesuswithme@gmail.com < /tmp/myfile.txt
이미지 9
Linux에서 예약 작업을 한 후에는 반드시 관리자 이메일 계정으로 예약 작업을 처리했다고 메일을 보내는 것이 필요하다. 그래서 script.sh 파일에 원하는 내용을 넣고 제일 아래에 이와 같이 메일을 보내는 내용을 입력한 후 script.sh 파일을 예약 작업에 넣어 두면 된다.

Redirection, Forwarder, and Proxy의 뜻


Router, Proxy Server, Firewall, Web server, Exchange mail server 등등을 공부하다보면 Redirection, Forwarder, Proxy 라는 용어가 나온다. 이 용어의 뜻을 정확하게 알아두면 쉽게 기능을 이해할 수 있다.

  • Redirection: 방향 재지정
    PC1이 Web Server인 Server1에게 접속할 때 Server1은 자신이 아니고 다른 서버(Server2)라고 알려준다. 그러면 PC1은 다시 또 다른 Web Server인 Server2에 접속하게 된다. 이 때 Server1은 PC1의 요구를 Redirection하게 된다.
    여기서 중요한 것은 Server1이 PC1 대신 Server2에 접속하는 것이 아니고, 처음부터 접속을 해 온 PC1이 다시 Server2에 접속하도록 도와주는 것이 바로 Redirection이다.
    그 결과 PC1이 Server2에 접속을 한 경우에 PC1에서 netstat -ano를 하면 Server2에 접속한 사실을 알 수 있다
  • Forwarder: 전달자
    PC1이 DNS Server인 Server1에 powershell.kr에 대한 IP Address를 알려달라고 할 때 Server1에는 powershell.kr이라는 Zone이 없다면 Server1은 미리 지정해 둔 Forwarder인 8.8.8.8보 그 요청을 전달해버린다.(미리 지정해 놓지 않은 쪽으로 절대로 전달하지 않는다) 그러면 PC1은 8.8.8.8인 Google DNS Server에서 powershell.kr의 IP Address를 알아오게 된다.
    PC1은 Server1에게 IP Address를 요청했지만 사실은 8.8.8.8이 powershell.kr의 IP Address를 알아서 Server1에게 알려주고 그 다음에 Server1이 최종적으로 PC1에 powershell.kr의 IP Address를 알려준다.
    전달자(Forwarder)는 어디로 요청을 보낼지 사전에 정해놓는다. 즉, Forwarder의 위치는 정해져있다. DNS server에 forwarder를 정해놓으면 그 DNS는 Forwarder의 도움으로 PC1의 요청에 대하여 문제를 해결해 주고, PC1은 전달자가 아닌 자신이 요청한 서버에서 문제를 해결하게 된다
  • Proxy: 위임받은 자
    Proxy와 Forwarder와 비슷하지만 자세히 생각해 보면 다름을 알 수 있다. 아빠가 아들에게 콜라를 사달라고 부탁을 하면 아들이 아빠의 부탁을 들어 콜라를 사온다. 아들은 아빠 대신 콜라를 사오게 된다. 아빠는 저녁에 아들에게 또 부탁을 한다. 이 번에는 피자가 먹고 싶다고 말하면 아들이 대신 피자를 주문해준다. Proxy는 처리하는 내용은 모두 다르다. 하지만 Forwarder는 항상 동일한 곳(Server)으로 처리하게 된다.
    더 나아가서 아빠가 콜라 심부름을 시키면 1시간 후에 엄마가 또 콜라를 사오라고 하는 것을 아들이 알고 있기 때문에 처음 아빠의 부탁을 받았을 때 콜라를 한 병 더 사올 수도 있다. 그러면 엄마가 부탁할 때 금방 콜라를 줄 수 있다. 위임받은 자는 이렇게 지능적으로 일을 처리할 수 있다.
    이것은 바로 Web Server에 접속하는 시간을 줄이는 효과를 제공하는 것이다. 그래서 회사에서 Proxy Server를 사용하는 이유는 웹 서버 접속시간을 단축시키는데 있다.

    또한 Proxy은 대신 처리할 뿐 아니라 아예 거부할 수도 있다. 사전에 아빠가 콜라를 시키면 심부름을 하지 말라고 엄마의 부탁을 받았다면 아들은 콜라를 사오지 않는다. 그러므로 Proxy는 특정한 Web Site에 접속하는 것을 차단하기도 한다.

    마지막으로 Reverse Proxy도 있는데, 이것은 외부에서 내부로 접속해 올 때 Proxy Server가 대신 안에 있는 서버에 접속을 한 후 그 결과를 알려주는 것이다. 이것은 회사의 사장 비서와 비슷하다. 고객이 직접 사장을 만날 수 없지만 비서에게 요청하면 비서가 대신 요청을 처리해주는 것과 같다. 기업에서 Reverse Proxy를 많이 사용한다. 그러면 해킹 공격을 받을 때실제로 서비스하는 서버는 중지하지 않고 대신 Proxy Server가 죽게 되므로 내부의 서버는 여전히 안전하며, 대신 Proxy Server만 다시 살리면 된다.

이렇게 Redirection, Forwarder, Proxy(Forward Proxy, Reverse Proxy)의 개념을 정확하게 이해하는 것이 필요하다.