[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
[Linux] nohup nohup 명령어는 터미널과의 세션이 끊기더라도 프로세스가 계속 동작하게 해준다. 사용 방법은 다음과 같다. nohup python test.py & 실시간으로 로그를 확인할 수도 있다. nohup python -u test.py & tail -f nohup.out
[Linux] 사용자에게 sudo 권한이 있는지 확인하기 현재 사용자는 sudo 명령 자체로 sudo 권한이 있는지 확인이 가능하다 sudo whoami 만약 sudo 권한이 없을 경우 패스워드 입력을 요구한다. 다른 리눅스 사용자에게 sudo 권한이 있는지 없는지 확인하는 방법은 다음과 같다. sudo -l -U [user_name] 만약 sudo 권한이 있으면 다음과 같이 출력되고 Matching Defaults entries for on test-server: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User may run the foll..
[Shell Script] While문에서 횟수 제한하기 bash 쉘에서 로그인을 하는 스크립트를 생성했는데, 로그인 실패 시 무한으로 retry가 되는 스크립트가 생성이 됐다 😅 While문에서 횟수 제한을 하는 방법은 매우 간단하다. ((n++)) && ((c==4)) && echo "Login Failed" && exit 9 다음과 같이 로그인 시도 횟수가 3회를 넘어가면 스크립트를 종료시켰다. n은 미리 정의해주지 않아도 된다. 전체 코드는 다음과 같다. command_to_run="" while true; do output=$(eval $command_to_run 2>&1) ((c++)) && ((c==4)) && echo "Login Failed" && exit 9 if [[ $output =..