[Shell Script] 한 줄씩 처리하기 쉘에서 파일이나 명령어를 처리할 때, 여러 줄일 경우 한줄 씩 처리를 해야하는 경우가 생긴다.해당 경우에는 `while read line`을 사용하여 한 줄씩 처리가 가능하다. 파이프 사용하기파이프 `|`를 사용할 경우엔 서브쉘에서 실행되기 때문에, 해당 쉘에서 실행된 활동들은 부모쉘엔 영향이 없는 점을 유의를 해야한다.# 명령어ls ./ | while read line do echo $linedone# 파일cat test.txt | while read linedo echo $linedone `# 명령어while read line do echo $linedone
[Shell Script] 쉘에서 정규표현식 사용하기 정규표현식은 문자열 처리 및 패턴 매칭을 통해 데이터를 효율적으로 다루는 데에 매우 유용하다.`bash`, `grep`, `awk`, `sed` 등의 유틸리티를 활용하면, 쉘 스크립트에서 다양한 방식으로 정규표현식을 사용할 수 있다. [[]] 를 이용한 정규표현식 매칭bash 스크립트에서 `[[ ]]`는 정규 표현식을 지원한다. `=~` 연산자를 사용하면 문자열이 특정 패턴과 일치하는지를 확인할 수 있다.아래는 정규표현식을 통해 유효한 이메일 형식인지 검증하는 예제다.#!/bin/bashemail='test@example.com"if [[ $email =~ ^[a-zA-Z0-9._%+-]+\.[a-zA-Z]{2,}$ ]]; then echo "유효한..
[Shell Script] 스크립트에서 환경 변수가 적용되지 않는 경우 이번에 gitlab CI/CD를 수정하는 업무를 하면서 스크립트를 수정하는 과정에서 while 문 내부에서 정의한 환경 변수를 루프 외부에서도 사용하려고 하니 예상과 다르게 환경 변수값이 사라지는 문제가 발생했다. 이번 포스팅에선 해당 문제의 원인과 해결 방법에 대해 알아보고자 한다. 문제 상황다음과 같은 스크립트를 작성했다고 가정해보자.info="1234 **KEY1**5678 **KEY2**"echo "$info" | while read -r line; do if [[ $line =~ ([0-9]+)\ \*\*([A-Z]+)\*\* ]]; then export "${BASH_REMATCH[2]}=${BASH_REMATCH[..
[Linux] awk리눅스에서 텍스트 파일을 처리하고 분석하는 데 AWK는 매우 강력하고 유용한 도구다.특히 로그 파일 분석, 데이터 변환, 텍스트 파일의 특정 패턴 검색 및 조작 등에 자주 사용된다. AWKAWK는 텍스트 파일의 각 행을 순차적으로 처리하며, 특정 패턴을 검색하거나 그에 따라 작업을 수행할 수 있도록 설계되었다. 기본 사용법awk '패턴 { 작업 }' 파일명여기서 패턴은 검색하고자 하는 텍스트의 조건을 의미하며, 작업은 해당 패턴이 일치할 때 수행 할 명령어를 의미한다. 1. 파일의 각 행 출력awk '{ print }' sample.txtsample.txt 파일의 모든 행을 출력한다. 2. 특정 필드 출력텍스트 파일에서 특정 필드만 출력할 수도 있다.예를 들어 콜론(:)으로 구분된 ..
[Linux] 파일 시간 확인하기리눅스 시스템에서는 파일의 여러 시간 정보를 확인할 수 있다.이러한 시간 정보는 파일의 변경 내역을 추적하거나, 시스템을 관리하는 데 유용하다. 파일 시간 정보리눅스 파일 시스템에서 파일에 대해 관리되는 주요 정보는 다음과 같다.Access Time (atime)파일이 마지막으로 읽힌 시간Modification Time (mtime)파일 내용이 마지막으로 수정된 시간Change Time (ctime)파일의 메타데이터(예: 권한, 소유자)가 마지막으로 변경 된 시간 파일 시간 정보 확인하기1. ls가장 일반적으로 사용하는 명령어 중 하나는 'ls'이다. 다양한 옵션을 통해 파일의 시간 정보를 확인할 수 있다.ls -l 파일이름 2. statstat 명령어를 사용하면, 파일의..
[Linux] bash에서 yaml 파일 load하기 bash에서 yaml 파일의 config를 로드해야하는 일이 생겼다.열심히 찾아보니 sed와 awk을 이용하여 파싱을 해야 하는 예시가 많이 나왔는데 코드가 너무 복잡하고, 가독성이 좋지않아 사용하기에 고민이 되어 더 찾아본 결과아주 깔끔하고 멋진 코드를 발견했다 🤩load_yaml() { python3 -c "import yaml;print(yaml.safe_load(open('$1'))$2)"}value=$(load_yaml yaml_file "['key']")echo $value 예를 들어 다음과 같은 yaml 파일이 있을 때 다음과 같이 사용이 가능하다.## global definitionsglobal: debug: yes verbo..
[Linux] 사용자에게 sudo 권한 부여리눅스 시스템에서 시스템 관리 작업을 수행하기 위해 root 권한이 필요하다.일반 사용자에게 sudo 권한을 부여하는 방법을 알아보자 sudoers 파일 수정 /etc/sudoers 파일을 편집하여 세부적인 sudo 권한 설정이 가능하다.파일을 잘못 편집하면 시스템에 문제가 생길 수 있으므로, visudo 명령어를 사용하여 편집하는 것이 좋다.sudo visudo위 명령어를 사용하면 /etc/sudoers 파일이 열리는데, 다음과 같은 형식으로 사용자에게 sudo 권한을 부여할 수 있다.사용자명 ALL=(ALL:ALL) ALL또는 특정 그룹 전체에 대해 권한을 부여할 수도 있다.%그룹명 ALL=(ALL:ALL) ALL 설정 완료후 새로운 터미널 세션을 열어 s..
[Linux] sedsed는 스트림 편집기(Stream Editor)의 약자로, 텍스트 파일을 처리하고 변환하는 데 매우 유용한 도구다.sed는 주로 대량의 텍스트 데이터에서 패턴을 검색하고, 치환하고, 필터링하는 작업에 사용된다. 기본 사용법sed 명령어의 기본 형식은 다음과 같다.sed [옵션] '명령' 파일명 텍스트 치환먼저 example.txt 파일을 다음과 같이 생성한다.cat > example.txtHello, World!This is a sed tutorialLet's learn sed together. 가장 기본적인 sed 명령어는 텍스트 치환이다. 파일의 특정 문자열을 다른 문자열로 바꾸는 예제를 확인해보자.Hello를 Hi로 바꾸기 위해 다음과 같은 명령어를 입력한다.sed 's/Hel..
[Linux] umaskumask 란?umask는 사용자 파일 생성 모드 마스크(user file-creation mode mask)를 의미한다.이는 새로 생성된 파일과 디렉터리에 대한 기본 권한 설정을 결정하는 Linux 명령어다. 새로운 파일이나 디렉터리가 생성될 때, 시스템은 기본 권한을 할당한 후이 권한을 umask에 의해 수정한다. 권한 이해하기linux에서 권한은 세 가지 유형이 있으며, 권한은 세트로 구분된다.읽기(r)파일이나 디렉터리의 내용을 볼 수 있다.쓰기(w)파일이나 디렉터리의 내용을 수정할 수 있다.실행(x)파일을 실행하거나 디렉터리에 접근할 수 있다.사용자(u)파일의 소유자그룹(g) 파일이 속한 그룹기타(o)모든 다른 사용자각 세트는 세 개의 비트(읽기, 쓰기, 실행)를 가지고 있..
[Linux] failed to enable unit: Unit file /lib/systemd/system/nfs-common.service is masked nfs와 mount를 하기 위해 nfs 유틸 패키지인 nfs-common을 설치해야 했는데,해당 패키지를 설치 후 상태 확인 시 다음과 같은 상태인 것을 확인했다. 해당 패키지가 masked 되어 사용할 수 없다는 뜻인데, 이를 unmask 해주면 사용이 가능하다.start 명령어를 사용하면 nfs-common.service가 /dev/null에 심볼릭 링크가 걸려있다는 메시지를 확인 할 수 있다. 해결을 위해 먼저 해당 파일을 제거 후 데몬을 리로드한다.sudo rm /lib/systemd/system/nfs-common.servicesudo ..
[Linux] namespace, cgroup Docker 및 Kubernetes와 같은 컨테이너 도구들이 현대적인 애플리케이션에서 대부분 사용되고 있다. 컨테이너의 기반이 된 리눅스의 기술들에 대해 궁금즘이 생겨 알아보고자 한다. Namespaces 2002년부터 Linux 커널의 일부였으며, 실제 지원은 13년에 추가 되었다. 네임스페이스의 주요 기능은 프로세스를 서로 격리한다는 것이다. 다양한 서비스를 실행하는 서버에서, 각 서비스 및 관련 프로세스를 다른 서비스와 격리하면 변경사항과 호환성을 관리하기 쉬워진다. os, 커널에서 작동하며, 한 덩어리의 데이터에 이름을 붙여 분할함으로써 네임스페이스가 다르면 이름이 같아도 다르게 처리하게된다. 네임스페이스 종류 mnt : 마운트 조작 시 namespa..
[Linux] conda : command not found ubuntu 환경에 conda를 다 설치했는데 명령어를 찾을수 없다는 에러가 발생했다. 알고보니 설치 폴더가 환경 변수에 등록되지 않았기 때문에 발생한 에러였다. 다음과 같이 path를 설정해주면 conda 명령어를 사용할 수 있게된다. export PATH=~/anaconda3/bin:$PATH