Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

유닉스 계열의 tail 명령어가 제공되는 PowerShell

성태가 요즘 PowerShell에 푸~~~욱 빠졌습니다. ^^

PowerShell로 Visual Studio 빌드 스크립트 작성
; https://www.sysnet.pe.kr/2/0/1687

개발하면서 소소하게 반복하던 작업들을 PowerShell로 쉽게 자동화하면서 은근한 재미를 느끼고 있답니다. ^^

오늘은 아래의 책을 보다가,

개발자를 위한 파워셸
; http://www.yes24.com/24/goods/12759997?scode=032

유닉스 계열의 tail 명령어 구현이 PowerShell에서 어떻게 제공되는지 읽게 되었습니다. 명령어는 다음과 같이 간단합니다.

Get-Content ./test.log -Wait -Tail 1000

위와 같이 실행하면 ./test.log 파일을 읽어 마지막 1,000라인을 출력하고 이후로는 test.log 파일이 변경될 때마다 연속해서 화면에 출력해줍니다.

한가지 응용을 해볼까요? ^^

제 경우에 개발하고 있는 응용 프로그램에서 남기는 로그의 형식이 "[EXE이름]_[날짜YYYYMMDD]_[기타].log" 이렇습니다. 날짜가 하루마다 바뀌기 때문에 "Get-Content ./test.log -Wait -Tail 1000"과 같은 식으로 하면 매번 파일명을 바꿔서 실행해야 하는 불편함이 있는데요. 이를 다음과 같이 확장해 주면 문제가 말끔히 해결됩니다.

$logPath = [IO.Path]::Combine($PSScriptRoot)

$latestFileName = Get-ChildItem $logPath | Sort Name -Descending | Select-Object -First 1

$logFile = [IO.Path]::Combine($logPath, $latestFileName)
Get-Content $logFile -Wait -Tail 50

필요에 따라 Sort를 파일명이 아닌 LastWriteTime 기준으로 해도 될 것입니다.

$latestFileName = Get-ChildItem $logPath | Sort LastWriteTime -Descending | Select-Object -First 1

이렇게 작성한 후 PowerShell ISE에서 해당 파워셸 스크립트 파일을 로딩하고 필요할 때 마다 "F5(Run)"를 눌러주면 가장 최신의 파일을 자동으로 선택해서 tail 기능을 수행해 줍니다.

ps_tail_1.png

오~~~ 멋지죠? ^^

한 가지 더 첨언하면! 위의 "PowerShell ISE"에서 "File" / "New PowerShell Tab" 메뉴를 누르면 "PowerShell 콘솔"을 가진 또 하나의 탭이 추가됩니다. 이곳에 다시 다른 Tail 명령어를 수행하면, 아래의 화면처럼 로그 파일 모니터링을 한 윈도우에서 다중으로 수행할 수 있습니다.

ps_tail_2.png




며칠 사용하다 보니, PowerShell의 매력 요소가 꼽아집니다.

  • 닷넷 라이브러리를 쓸 수 있다.
  • 닷넷 전용 REPL 환경이라고 볼 수 있다. (닷넷에 동적 언어가 하나 추가되었다.)
  • REPL 환경이면서 '명령행 셸'과 통합되어 있다.

가령 python이 REPL 환경을 자랑하지만, Shell은 아니기 때문에 윈도우에서 수행되는 다양한 '반복적인' 일들을 수행하기에는 PowerShell만큼 편하지는 않습니다.

만약 여러분들이 닷넷 개발자라면, 오늘 당장 ^^ 꼬~~~옥 PowerShell을 익혀보시기 바랍니다. 강추입니다. ^^

개발자가 아니더라도, 윈도우 환경에서 일상적인 업무를 수행하시는 분이라면 역시 PowerShell을 추천합니다. 자신이 프로그램을 못하더라도 웹 상에 널려 있는 스크립트 예제가 풍부하기 때문에 원하는 일을 보다 쉽게 자동화할 수 있습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/19/2014]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2024-10-02 11시21분
// 해당 디렉터리에서 가장 최신의 파일을 대상으로 tail 명령어 실행
$ tail -f `ls -t | head -1`

// 로그 파일명의 일부를 지정해 최신 파일을 대상으로!
$ tail -f `ls -t /tmp/myapp*.log | head -1`

// "systemctl status xxx.service"와 같은 서비스 상태를 실시간으로 추적하고 싶을 때
# journalctl --follow -u xxx.service
정성태

... 46  47  48  49  50  51  52  53  54  55  56  [57]  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12513정성태1/28/202116069오류 유형: 698. electronize - User Profile 디렉터리에 공백 문자가 있는 경우 빌드가 실패하는 문제 [1]
12512정성태1/28/202116453오류 유형: 697. The program can't start because VCRUNTIME140.dll is missing from your computer. Try reinstalling the program to fix this problem.
12511정성태1/27/202116177Windows: 187. Windows - 도스 시절의 8.3 경로를 알아내는 방법
12510정성태1/27/202117034.NET Framework: 1020. .NET Core Kestrel 호스팅 - Razor 지원 추가 [1]파일 다운로드1
12509정성태1/27/202116908개발 환경 구성: 524. Jupyter Notebook에서 C#(F#, PowerShell) 언어 사용을 위한 환경 구성 [3]
12508정성태1/27/202116164개발 환경 구성: 523. Jupyter Notebook - Slide 플레이 버튼이 없는 경우
12507정성태1/26/202116712VS.NET IDE: 157. Visual Studio - Syntax Visualizer 메뉴가 없는 경우
12506정성태1/25/202119821.NET Framework: 1019. Microsoft.Tye 기본 사용법 소개 [1]
12505정성태1/23/202116531.NET Framework: 1018. .NET Core Kestrel 호스팅 - Web API 추가 [1]파일 다운로드1
12504정성태1/23/202118494.NET Framework: 1017. .NET 5에서의 네트워크 라이브러리 개선 (2) - HTTP/2, HTTP/3 관련 [1]
12503정성태1/21/202116888오류 유형: 696. C# - HttpClient: Requesting HTTP version 2.0 with version policy RequestVersionExact while HTTP/2 is not enabled.
12502정성태1/21/202117479.NET Framework: 1016. .NET Core HttpClient의 HTTP/2 지원파일 다운로드1
12501정성태1/21/202116441.NET Framework: 1015. .NET 5부터 HTTP/1.1, 2.0 선택을 위한 HttpVersionPolicy 동작 방식파일 다운로드1
12500정성태1/21/202117246.NET Framework: 1014. ASP.NET Core(Kestrel)의 HTTP/2 지원 여부파일 다운로드1
12499정성태1/20/202118588.NET Framework: 1013. .NET Core Kestrel 호스팅 - 포트 변경, non-localhost 접속 지원 및 https 등의 설정 변경 [1]파일 다운로드1
12498정성태1/20/202117025.NET Framework: 1012. .NET Core Kestrel 호스팅 - 비주얼 스튜디오의 Kestrel/IIS Express 프로파일 설정
12497정성태1/20/202119585.NET Framework: 1011. C# - OWIN Web API 예제 프로젝트 [1]파일 다운로드2
12496정성태1/19/202116939.NET Framework: 1010. .NET Core 콘솔 프로젝트에서 Kestrel 호스팅 방법 [1]
12495정성태1/19/202119298웹: 40. IIS의 HTTP/2 지원 여부 - h2, h2c [1]
12494정성태1/19/202118556개발 환경 구성: 522. WSL 2 인스턴스와 호스트 측의 Hyper-V에 운영 중인 VM과 네트워크 연결을 하는 방법 [2]
12493정성태1/18/202116613.NET Framework: 1009. .NET 5에서의 네트워크 라이브러리 개선 (1) - HTTP 관련 [1]파일 다운로드1
12492정성태1/17/202115594오류 유형: 695. ASP.NET 0x80131620 Failed to bind to address
12491정성태1/16/202117617.NET Framework: 1008. 배열을 반환하는 C# COM 개체의 메서드를 C++에서 사용 시 메모리 누수 현상 [1]파일 다운로드1
12490정성태1/15/202116746.NET Framework: 1007. C# - foreach에서 열거 변수의 타입을 var로 쓰면 object로 추론하는 문제 [1]파일 다운로드1
12489정성태1/13/202118830.NET Framework: 1006. C# - DB에 저장한 텍스트의 (이모티콘을 비롯해) 유니코드 문자가 '?'로 보인다면? [1]
12488정성태1/13/202118114.NET Framework: 1005. C# - string 타입은 shallow copy일까요? deep copy일까요? [2]파일 다운로드1
... 46  47  48  49  50  51  52  53  54  55  56  [57]  58  59  60  ...