[Linux] CI/CD 개선: Jenkins를 활용한 자동화 배포 시스템 구축(nonub)

Posted by Space_Jin
2025. 1. 29. 13:14 Programming/Linux
728x90
반응형

■ 배경

회사에서 사용하는 기존 CI/CD 시스템에서는 Jenkins를 통해 빌드된 파일이 서버로 옮겨지는 구조가 이미 구현되어 있었습니다. 그러나 배포 과정은 여전히 수작업으로 진행되었고, 개발자가 직접 서버에 원격 접속하여 각 도메인에 맞게 배포하는 번거로운 과정을 거쳐야 했습니다. 이러한 상황은 불편함 뿐만 아니라 개발자들의 생산성을 저하시킨다고 생각하여 개선을 하기로 결심했습니다.

■ 개선 목표
이러한 문제를 해결하기 위해, 저는 CI/CD 프로세스를 자동화하여 배포 과정에서의 인적 오류를 줄이고, 업무 효율성을 높이는 것을 목표로 하였습니다. 이를 위해 Jenkins를 통해 전달되는 압축된 빌드파일을 타겟서버인 linux의 nonub 이용한 자동 배포 스크립트 실행시키는 시스템을 만들기로 했습니다.


 구현 과정

1. 플래그(flag) 파일 만들기

빌드된 소스 파일이 외에 소스 파일의 정보를 담은 텍스트 파일을 하나 생성하여 함께 웹서버로 전달한다.

내 경우에는 빌드가 이뤄지는 work 여러개 존재해서 이를 구분할 수 있는 {JOB_NAME}을 플래그 파일에 작성해서 전달했다.

 

예시

$ echo ${JOB_NAME} > deploy_flag.txt

2. 배포 쉘 만들기

배포 쉘의 내용은 특정 위치에 플래그 파일이 있을 경우, 플래그 파일의 내용을 읽어서 job에 맞는 위치에 소스를 배포해주고 완료되면 플래그 파일을 삭제한다. 플래그 파일은 2초에 한번씩 확인한다.

3. 와쳐(watcher) 만들기

1번에서 작성한 플래그 파일이 생성되었을 때, 2번에서 만든 배포 쉘이 수행될 수 있게 와쳐(watcher)를 리눅스 nohub을 이용해서 만들수 있다. nohub은 웹서버에 접속한 유저의 세션이 종료되어도 프로세스가 수행될 수 있게해주는 유틸리티이다.

 

백그라운드에서 프로세스 수행하기

$ nohup command [arguments] &

위 명령어를 통해서 백그라운드에서 프로세스를 수행할 수 있다. '&'를 제외하면 세션이 종료되었을 때, 프로세스가 종료되게끔할 수 있다.

 

배포 쉘 백그라운드 실행하기

$ nohub sh /deploy.sh &

2에서 작성한 배포 쉘이 root 경로(/)의 deploy.sh이라는 이름의 쉘일 경우, 위와 같이 백그라운드로 실행할 수 있다.

 

nohub을 실행하면 추가 명령어를 입력할 수 있게끔 나오는데 아무키나 누르거나 ctl + c로 종료하면 된다.

종료하여도 백그라운드에서 deploy.sh은 계속 실행된다.

nohub을 실행한 위치에 nohub.out 파일이 생성되었다면, 정상적으로 수행된 것이다. 해당 파일은 nohub으로 실행한 프로세스의 로그파일로 deploy.sh에 echo 등으로 특정 상황에서 출력명령어를 수행한다면, 로그를 쌓아서 확인할 수 있다.

4. nohub 프로세스 종료하기

$ ps -ef | grep deploy

deploy.sh을 수행하고 있는 프로세스의 id를 확인한다.

$ kill -9 [processId]

# 예시: kill -9 5876

확인한 프로세스 id를 강제종료(9 옵션) 시킨다.

 

■ 결과
업무 효율성 향상: 배포 과정이 5단계에서 1단계로 줄어들면서, 개발자들은 더 이상 서버에 직접 접속할 필요가 없어졌습니다. 이는 팀의 생산성을 대폭 향상시켰습니다.
인적 오류 감소: 자동화된 배포 과정 덕분에 인적 오류가 크게 줄어들어, 배포의 안정성을 높일 수 있었습니다.
보안 강화: 원격 접속을 최소화함으로써 보안적인 위험 요소를 줄일 수 있었습니다.

 

 

 

폐쇄망이나 보안정책이 강력한 환경에서 부족한 CI/CD 환경을 위와 같은 방식으로 개선할 수 있었습니다.
비슷한 환경에서 비슷한 문제를 겪는다면 도움이 될 수 도 있을것 같습니다.

728x90
반응형

[Shell Script] CI/CD 자동화 배포를 위한 파일 모니터닝 쉘 스크립트 만들기

Posted by Space_Jin
2024. 8. 5. 21:08 Programming/Linux
728x90
반응형

회사 내의 배포 환경이 복잡하다.

 

현재 재직 중인 회사는 특히, 보안적인 부분에 민감해서 업무별로 다양한 배포 환경이 구성 되어있다.

 

그 중에 개선하고 싶었던 반쪽짜리 CI/CD 환경이 있었는데 이번에 시간적 여유가 생겨 해당 문제를 해결하였다.

 

기존의 환경에서 Jenkis를 이용해서 git에 반영된 소스를 실제 개발 서버에 반영하였는데 보안적인 문제로 Jenkis를 통해서 배포까지 진행하지는 못하고 압축된 소스 파일만 linux 환경의 개발 서버로 전송하게 구성되어 있었다.

따라서, 배포를 위해서 개발자 직접 서버로 접속해 압축된 소스 파일을 풀어서 배포를 진행하였다.

 

위 문제를 해결하기 위해서 파일 모니터링 쉘을 만들어서 서버에서 자동배포를 진행할 수 있게 구성했다.

 

🛠 해결방법

1. Jenkis를 통해서 Flag 파일을 전달한다.

현재 jenkis의 구성으로 SSH 연결을 통해서 파일을 put까지는 할 수 있었다. 연결된 git의 파일을 가져오는 command 쪽의 배포에 필요한 정보를 기입한 flag.txt 파일을 만들어서 put을 통해 배포할 개발 서버로 전달한다.

 

2. flag.txt 파일 감지 sh 만들기

이번 글의 주제인 파일 모니터링 쉘 스크립트를 만든다.

#!/bin/bash

# flag 파일 경로 및 이름
FILE_PATH="/home/user/flag/"
FILE_NAME="/deployFlag.txt"
FLAG_FILE=${FILE_PATH}${FILE_NAME}

# 2초마다 flag 파일을 확인
while true; do
	if [-f "$FLAG_FILE"]; then
    		# 첫 줄과 마지막 줄의 정보를 가져오기
	        $FIRST_LINE=$(head -n 1 "$FLAG_FILE")
		$LAST_LINE=$(tail -n 1 "$FLAG_FILE")
	fi
    
	# 2초 대기
	sleep 2    
done

위 스크립트는 2초마다 특정 위치의 deployFlag.txt 파일이 있는지 확인하고 존재한다면, 파일을 첫 줄과 마지막 줄의 정보를 저장하는 스크립트이다.

 

실제 회사에서 사용하는 스크립트는 위 보다 더 복잡하지만, 위와 같이 정보를 가져와서 배포를 담당하는 별도의 쉘 스크립트를 실행시켜 배포를 진행한다.

 

3. 백그라운드에서 파일 감지 sh 실행 시키기

배포가될 개발 서버에서 user의 접속이 해제되더라고 계속해서 쉘이 실행 되어야하기 때문에 백그라운드에서 쉘 스크립트를 실행시켜야 한다.

$ nohup sh /home/user/deployShell.sh &

nohup 명령어는 백그라운드에서 프로세스를 실행하는 명령어로 파일 모니터링 쉘 (deployShell.sh)을 진행한다.

nohup 명령어는 다른 작접이 들어와서 끊기지 않고 프로세스를 진행하게 만들어주는 명령어인데 우리는 서버에 접속한 터미널이 종료되어도 계속 쉘이 실행될 수 있게해야하기 때문에 가장 마지막에 "&"(백그라운드 실행)를 붙여준다.

 

성공적으로 실행되면 "nuhup.out" 파일이 nuhup 명령얼르 실행한 위치에 생성되고 해당 파일에 nuhup 작업으로 인한 로그가 쌓이게 된다.

 

4. 자원 모니터링 하기

백그라운드에서 파일을 모니터링하는 shell을 지속적으로 실행하는 것이다보니 서버의 자원을 계속해서 사용하게 된다.

이는 cpu와 memory에 성능에 영향을 줄 수 있기에 top 명령어로 인해 작업 전 후로 자원의 상태를 확인해 본다.

$ top

나의 경우는, 배포를 담당하는 쉘은 별도로 구성되어있고 2초 마다 파일의 존재여부를 체크하는 것이 주였기에 전 후 성능의 차이는 거의 확인할 수 없을 만큼 작았다.

물론, 서버의 상태나 쉘 스크립트의 양마다 다를 수 있겠지만, 대체로 큰 영향을 없을 것 같다.

만약, 서버의 영향이 있었다면 스크립트 분리를 해보는 것도 방법이 될 수도 있겠다.

 

 

 

...

 

 

리눅스는 커널에서 파일의 상태를 모니터링할 수 있는 inotify라는 tool을 제공한다. 이 tool을 이용한다면 더 유리했겠지만, 이 역시 회사에서 보안으로 인하여 설치할 수 없었기에 위와 같은 작업을 진행하게 되었다.

 

만약, 비슷한 상황이 있다면 위와 같은 방법으로 문제를 해결할 수 있을 것 같다.

728x90
반응형

[PowerShell] 파워쉘 웹 크롤링 / 파워쉘 변수 한글 저장 문제 해결

Posted by Space_Jin
2022. 5. 10. 12:05 Programming/Linux
728x90
반응형

powershell web crawling / powershell variable uft8 encoding

최근에 windows의 powershell을 이용해서 간단한 스크립트 파일을 작성할 일이 있었다.

자동으로 웹 페이지에 특정 키워드를 검색해서 특정 값을 가져오는 프로그램인데 사용할 컴퓨터의 사양상 python 프로그램 등을 사용하기 부담스럽고 워낙 짧고 간단한 기능만 제공할 것이기에 스크립트로 충분할 것이라고 생각했다.

 

프로그램 소스 코드는 대충 아래와 같다.

# power shell

# variable section
$KEY_WORD1="검색할 키워드"
$KEY_WORD2="검색할 키워드2"

$KEY_WORD1_URL="https://search.naver.com/search.naver?query=$KEY_WORD1"
$KEY_WORD2_URL="https://search.naver.com/search.naver?query=$KEY_WORD2"

$PROGRAM_NAME="iexplore"
$WAITTING_TIME=10  #sec
$LOOP_COUNT=2


For ($i=1; $i -le $LOOP_COUNT; $i++) {  # loop

    $ie=New-Object -COM 'InternetExplorer.Application'; # create ie application object
    $ie.visible=$true;  # show visual
    
    $ie.navigate("https://www.naver.com");
    $sText=$ie.Document.getElementByID("query");
    $sText.Value=$KEY_WORD1;
    
    while ($ie.Busy -eq $true) {Start-Sleep -seconds 1;}
    
    $sform=$ie.Document.getElementByID("sform");
    $sform.submit();
    
    $ie.navigate($KEY_WORD1_URL);   # open first tab
    $ie.navigate($KEY_WORD2_URL, 0x1000);   # create new tab   

    while ($ie.Busy -eq $true) {Start-Sleep -seconds 1;}

    get-Process iexplore | stop-Process;    # kill ie process

    sleep 1; # sleep after ie process
}

검색창에 특정 키워드를 넣어서 검색하는 방법은 크게 두 가지로 생각해 볼 수 있다.

 

1. DOM(Document Object Model)을 직접 조작해 검색창의 value를 수정해서 form 태그 제출(submit).

2. form이 제출되었을 때, 이동되는 url의 query에 원하는 키워드를 넣은 url을 직접 요청.

 

위 코드는 두 가지 방법을 모두 사용해 본 것이다.

 

1번 방식의 경우, javascript에서 DOM을 조작하는 방법과 유사했기에 웹 페이지 작성 경험이 있다면 쉽게 따라 할 수 있을 것이다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.htmldocument?view=windowsdesktop-6.0 

 

HtmlDocument 클래스 (System.Windows.Forms)

WebBrowser 컨트롤에 호스트된 HTML 문서를 최상위 수준의 프로그래밍 방식으로 액세스할 수 있도록 합니다.

docs.microsoft.com

위 공식문서에 html 속성에 따라서 요소를 가져오는 메서드들을 확인할 수 있었다.

 

2번 방식의 경우 해당 사이트의 html을 잘 해석해서 필요한 query가 무엇인지 판단해야한다.

powershell의 "navigate" 메서드를 이용하면 바로 url을 열 수가 있었다.

    $ie=New-Object -COM 'InternetExplorer.Application'; # create ie application object
    $ie.visible=$true;  # show visual
    
    $ie.navigate($KEY_WORD1_URL);   # open first tab
    $ie.navigate($KEY_WORD2_URL, 0x1000);   # create new tab

변수 $ie에는 웹 브라우저인 internet exlporer를 넣어주었다. 해당 스크립트를 사용할 컴퓨터가 구형이라서 ie 브라우저만 있었기 때문...

 

visible을 내장 변수인 $true로 설정해주면 브라우저가 열릴 때 시각화해준다. 만약 사용하지 않는다면 (flase) url을 요청하긴 하지만 눈에 보이지는 않는다.

 

navigate 명령어를 사용하면 이미 켜져 있는 브라우저의 새 탭을 열어서 url을 요청한다.

만약 기존 탭이 아니라 새로운 프로세스를 켜고 싶다면 아래와 같은 명령어를 사용하면 된다.

Start-Process "원하는 url"		# default browser process 실행
[system.Diagnostics.Process]::Start("chrome","원하는 url")  # 새 chrome에서 url 열기

기본 브라우저가 아닌 다른 브라우저에서 url을 요청하고 싶다면 위와 같이 입력하면 된다.

PowerShell 한글 변수 오류

# variable section
$KEY_WORD1="검색할 키워드"
$KEY_WORD2="검색할 키워드2"

해당 스크립트를 만들면서 한글 변수를 사용할 때, 인코딩이 깨지는 것을 발견했다.

 

예를 들어 네이버 검색창에 $KEY_WORD1이라는 변수에 "안녕하세요" 문자열을 저장하고 네이버 검색창에 해당 변수를 기입하게 했을 때 "?뛝뷁퓈툴?퉬줘?"처럼 되는 것을 말한다.

 

결론부터 말하자면, windows에 저장된 powershell 파일(. ps1 파일)의 인코딩 방식을 "uft8(bom)"으로 저장해야 하는 것.

 

해당 스크립트를 mac 환경에서 작성했고 테스트를 windows에서 했다는 것이 문제였었다.

 

분명 utf8 인코딩 방식으로 잘 저장했는데 왜 안 되는 거지?라고 생각하며 스택 오버 플로우를 숱하게 뒤졌지만 명확한 방법을 찾을 순 없었다. 나와 비슷한 질문이 몇 개 있었지만 정확한 해결책은 없었었다.

 

일단 이 문제를 이해하려면 BOM(Byte Order Mark)에 대해서 알아야 하는데, 간단히 설명하자면 컴퓨터가 해당 파일이 어떠한 인코딩 방식을 사용하지는 알기 위해서 파일 가장 앞부분에 "매직넘버"라는 숫자를 입력하는 것이다.

 

컴퓨터는 해당 파일을 읽을 때, 먼저 매직넘버를 읽어 들여 uft8인지 utf16인지를 확인하는 것이다. 조금 더 자세히 알고 싶다면 위키백과를 참고...

https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D

 

바이트 순서 표식 - 위키백과, 우리 모두의 백과사전

바이트 순서 표시(Byte Order Mark, BOM)는 유니코드 문자 U+FEFF byte order mark로, 매직 넘버로서 문서의 가장 앞에 추가하여 텍스트를 읽는 프로그램에 여러 정보를 전달할 수 있다.[1] 16비트 혹은 32비트

ko.wikipedia.org

최근에는 utf8의 경우 이 매직넘버를 생각한다고 한다. 내가 스크립트 파일을 작성한 환경에 mac이었기에 이 BOM은 생략된 것이다.

하지만, windows의 몇몇 프로그램이 아직 이 BOM을 생략하지 않는다고 한다. 대표적으로 txt 파일인데 powershell script 파일인 ps1파일도 사실상 txt이기 때문에 인코딩 방식을 정확히 알기 위해서 BOM이 필요했던 것이다.

 

따라서 단순히 utf8인코딩 방식으로 저장하는 것이 아니라 utf8 with bom 방식인 uft8(bom)으로 저장해 주어야 했다.

 

혹시 인코딩 방식을 변경하는 법에 대해서 모르는 사람이 있을 수 있기에 저장 방법에 대해서 간략히 소개하자면

파일 왼쪽 상단 "파일 -> 다른 이름으로 저장 -> 맨 아래 인코딩 탭 클릭 -> uft8(bom) 선택 -> 저장" 이러한 방식으로 저장하면 된다.

 

위 문제를 해결하기 위해서 열심히 구글링 하여 알아냈던 방법들은 아래와 같았다.

[System.Text.Encoding]::UTF8;
$env:LC_ALL='C.UTF-8';

내 문제의 경우 애초에 이러한 방법이 해결이 되지는 않았다... 이미 UTF8 방식으로 인코딩했지만, BOM이 없어서 생겼던 문제였기에...

 

하지만 그중에 재미있는 것을 발견했는데 바로 uft8로 인코딩 되어있는 text를 읽어서 변수에 저장하면 문제없이 해결할 수 있었다.

$KEY_WORD1=get-content -encoding utf8 "var1.txt";   
$KEY_WORD2=get-content -encoding utf8 "var2.txt";

스크립트와 동일한 폴더에 "var1.txt"라는 파일에 변수에 저장할 문자열을 기입해 놓으면 인코딩이 깨지지 않고 변수에 잘 저장된다.

물론, var1.txt 파일도 utf8 인코딩 방식으로 저장되어있어야 한다. with BOM 방식이 아님에도 해당 경우는 잘 동작하는 것은 windows 자체가 txt 파일을 uft8로 저장할 때 BOM을 포함시키기 때문인 것 같다.

 

굉장히 간단한 스크립트 문이었지만, 처음으로 powershell도 사용해보고 에러도 겪어보면서 windows와 mac의 차이, utf8 인코딩과 BOM에 대해서 조금 자세히 알아볼 수 있었던 시간이 된 것 같다.

 

스택오버플로우에 위와 동일한 문제를 해결 못한 인도 친구가 있었는데 다시 그 질문을 찾게 된다면 답변해주는 걸로...

728x90
반응형

[Linux / Terminal] 리눅스, 터미널 자주 사용하는 명령어 정리

Posted by Space_Jin
2022. 2. 4. 21:52 Programming/Linux
728x90
반응형

취미나 업무로 인해서 리눅스 환경을 자주 접해야 하는 분들이 많으실 텐데요. 최근에 저도 리눅스 환경을 자주 사용하다 보니 GUI와는 다른 편리한 점도 많다는 생각이 들었습니다.

 

안 쓰면 워낙 자주 잊어버리는 성격 때문에 간단하지만 유용한 명령어들을 정리해볼까 합니다.

 

📝 Linux 자주 사용하는 명령어

🤔 현재 위치(working dirctory) 찾기 - PWD (Print Working Directory)

pwd

터미널에서 pwd 명령어 실행

현재 자신의 위치를 알려주는 명령어입니다(대소문자 구분 없이 사용합니다.).

리눅스나 터미널을 이용할 때, 종종 현재 디렉터리가 어디인지 헷갈릴 때가 있는데 현재 디렉터리를 찾을 때 사용하면 유용한 명령어입니다.

cd로 찾는 일은 이제 그만~

현재 디렉터리(폴더) 및 파일 찾기 / 숨김 파일 찾기 - LS(List directory contentS)

ls 명령어는 현재 디렉터리에 있는 파일 혹은 폴더를 보여주는 명령어입니다.

 

그냥 사용할 수도 있지만 편의를 위해서 옵션 넣어서 사용합니다.

옵션은 -뒤에 특정 알파벳을 넣어서 사용하며 여러 개 중복해서 사용도 가능합니다(ex: ls -al).

 

l: long format으로 보기

l 옵션 사용하지 않은 경우와 사용한 경우

l 옵션은 권한, 크기, 생성자, 생성 및 수정시간 등 더 다양한 정보를 보여줄 뿐 아니라 수직 정렬되어 리스트를 보기 한결 수월해집니다.

 

F: 디렉터리와 파일 구분

F옵션 사용 예시

F옵션은 디렉터리(폴더)와 파일을 구분해줄 수 있는 명령어입니다.

저의 경우 테마를 설치하여 디렉터리의 경우 색이 일반 파일과 다르지만 순수하게 사용하시면 모두 같은 색으로 구분이 어렵습니다.

이때, F옵션(대문자)을 주시면 디렉터리 뒤에는 슬래쉬(/)가 붙어서 명확히 구분할 수 있습니다.

 

a: 모든 파일(숨긴 파일 포함) 및 디렉터리 보기

a 옵션은 숨김 처리되어있는 파일은 물론, 현재 현재, 하위 디렉터리도 확인됩니다.

정확히는 앞에. 이 붙은 모든 파일을 보여준다고 합니다.

ls와 a 옵션

숨긴 파일인 ". hiddenfile"과 현재 디렉터리인 디렉터리인 "." 상위 디렉터리인 ".."까지 모두 보입니다.

👟 디렉터리 이동 CD (Change Directory)

cd

cd 명령어의 경우, 현재 자신이 작업하는 디렉터리(폴더)를 이동하는 명령어입니다. cd 명령어는 다양하게 활용됩니다.

cd 명령어의 기본적인 사용법은 "cd 경로"입니다.(실제 사용에서는 따옴표를 사용하진 않습니다.)

 

1. 루트(root) 경로로 이동, 최상위 경로로 이동

최상위 디렉토리(폴더)로 이동하기

최상위 디렉터리로 이동하는 명령어는 cd ~ 를 입력하시면 됩니다.

 

~ 는 최상위 디렉터리의 경로를 가리킵니다.

 

위 사진에서 pwd 명령어를 활용해 위치를 확인했을 때, ~/Desktop에서 ~로 이동된 것을 확인할 수 있습니다.

 

위 사진과 같은 결과가 나온 이유는 제 루트 디렉터리(~)가 Users/spacejin입니다.

 

2. 절대 경로 이동

 

cd ~/경로

절대 경로는 상대 경로와 반대 개념으로 현재 내가 어떤 위치에 있어도 목적지로 이동하는 것을 말합니다.

예) B -> A, C -> A, D -> A와 같이 항상 A로 작업 디렉터리를 변경 가능

 

간단하게 최상위인 루트 디렉터리에서 순차적으로 올라가는 것을 말합니다.

cd ~/폴더 1/폴더 2/폴더 3

-> 최상위 디렉터리에 있는 폴더 1에 들어있는 폴더 2에 들어있는 폴더 3으로 이동

절대경로 이동 예시

Desktop이라는 위치에서 Library안에 있는 Google 디렉터리 안에 있는 GoogleSoftwareUpdate에 들어가 본 예시입니다.

 

3. 상대 경로 이동 / 이전 디렉터리로 이동

 

cd /상대적 경로

현재 작업 디렉터리에서 바로 연결된 디렉터리(상위 혹은 하위)로 한 단계씩 이동하는 명령입니다.

 

먼저, 이전(상위) 디렉터리로 이동하는 방법

cd..

상위 디렉토리로 이동

 Google 디렉터리 안에 있는 GoogleSoftwareUpdate에서 다시 Google로 돌아왔습니다.

이런 식으로 계속 상위로 이동할 수도 있습니다. (cd../../../.  -> 3번 상위로 이동)

 

하위 디렉터리로 이동

하위 디렉토리로 이동 예시

하위 디렉터리로 이동하는 방법은 현재 디렉터리에 존재하는 디렉터리를 cd 명령어 후에 적어주시기만 하면 됩니다.

🗄 디렉토리(폴더) 생성 MKDIR (MaKe DIRectory)

mkdir "생성할 폴더 이름"

test 디렉토리 생성

🗑 디렉토리(폴더) 및 파일 삭제 RM (ReMove)

rm "삭제할 파일"

rm -rf "삭제할 디렉토리"

 

🤔 rm 명령어를 이용하는 이유?

1. 빠른 속도

2. 규칙에 맞는 파일 및 디렉토리의 간편한 삭제

파일 삭제
디렉토리 삭제

r, f 옵션 기능은?

 

-r: recursive 옵션으로 재귀적으로 삭제한다는 의미이다. 디렉토리에는 하위에 파일 및 다른 디렉토리가 들어있을 수 있는데, 해당 하위 모든 파일 및 디렉토리를 삭제한다는 의미. r 옵션을 주지 않으면 디렉토리의 경우 삭제가 되지 않습니다.

 

-f: 확인 무시. 파일 삭제에 권한이 필요할 때, 정말 삭제할 것인지 확인 문구나 나오는데 일일히 yes를 쳐주는 것이 귀찮기 때문에 확인 문구를 무시하고 바로 삭제하기 위해서 사용.

디렉토리 삭제시 r 옵션을 주지 않았을 때, 삭제 불가능

파일의 경우 -r 옵션의 유무와 상관없이 삭제가 가능하기 때문에 디렉토리와 파일을 한번에 삭제할 때 -rf 옵션을 같이 주시면 편하게 삭제 가능합니다.

 

특정 파일 및 디렉토리 한번에 삭제하기

커맨드를 통해서 삭제를 할 때 규칙에 맞는 파일 및 디렉토리를 한번에 삭제할 수 있어서 편리합니다.

예시 "test"로 시작하는 이름의 파일 및 디렉토리를 한번에 삭제한다.

test로 시작하는 이름의 파일과 디렉토리를 한번에 삭제하기

📖 명령어 매뉴얼 MAN (MANual)

모든 명령어의 사용법과 옵션들에 대한 설명을 볼 수 있는 명령어입니다.

man "확인할 명령어"로 사용하면 됩니다.

이 명령어 어떻게 사용했더라? 혹은 어떻게 사용하지 할 때 자주 사용합니다.

ls 명령어 매뉴얼 확인 예시

매뉴얼에 들어가면 위 그림과 같이 해당 명령어에 대한 설명이 간략히 기록되어있습니다.

방향키를 사용해서 스크롤할 수 있습니다.

 

매뉴얼에서 나가는 방법은 알파벳 q를 누르면 나갈 수 있습니다.

 

man에서 특정 단어 검색

특정 단어를 검색할 때는 슬래쉬(/) + "찾을 단어"를 입력 후 엔터를 누르시면 찾을 수 있습니다.

man에서 file을 검색하기

man을 켜시면 제일 하단에 콜론(:)이 적혀있는데 /를 누르시고 특정 단어를 찾으면 됩니다.

file을 찾은 결과

728x90
반응형