Linux 154

[Shell] 변수 기본값 설정

개요 쉘 스크립트에서 변수를 초기화화하면 환경변수 등으로 설정된 값을 사용하거나 그렇지 않은 경우가 존재할 수 있다. 때문에 쉡 스크립트에서 변수를 초기화할 때 기본값을 설정하는 방법을 제공해주고 있다. 이 글에서는 변수 선언 시 기본값을 설정하는 방법에 대해 적어둔다. 변수의 상태 쉘 스크립트에서 변수의 상태는 크게 세 가지로 구분할 수 있다. 선언된 변수 값이 NULL이 아닌 변수 값이 NULL인 변수 선언되지 않은 변수 쉘 스크립트는 변수의 상태와 사용한 확장자에 따라 기본값으로 초기화되는 조건이 달라질 수 있다. - / = 참조하는 변수가 선언되지 않은 경우에는 -, :, = 등의 확장자를 사용하여 변수의 기본값을 초기화한다. 확장자 설명 ${VAR-value} VAR이 선언되지 않은 경우, va..

Linux/Shell Script 2024.03.07

[Linux] sshpass - 원격 서버 crontab 설정하기

개요 Bash 쉘 스크립트에서 sshpass를 이용해 원격 서버의 crontab에 스케쥴링 설정을 추가하려고 한다. 방법을 적어둔다 + 기존 항목에서 추가할 항목을 확인하거나 수정하는 등의 작업은 다루지 않는다. 쉘로 crontab 설정 crontab_set_str='crontab에 설정할 내용' (crontab -l 2>/dev/null; echo "$crontab_set_str") | crontab - 동작 방식 1. crontab -l 2>/dev/null : 현재 crontab 항목 확인 2. echo "$crontab_set_str" : 기존 crontab 항목에 추가할 항목 출력. 1번을 함께 고려하면 기존 항목과 같이 출력하는 것이 된다. 3. crontab - : 전달받은 파일, 표준 입력..

Linux 2023.11.24

[Linux] sshpass - 문자열을 원격 서버 파일로 전달하기

개요 Bash 쉘 스크립트에서 변수에 저장되어 있는 문자열을 sshpass를 이용해 원격 서버에 저장하려고 한다. 방법을 적어둔다. 시도 처음에는 다음과 같은 명령어를 사용했다. #!/bin/sh SCRIPT='전달할 문자열' SSH_PASSWD='SSH 비밀번호' SSH_USERNAME='SSH 계정명' IP='원격지 IP' PATH='파일경로' FILE_NAME='파일명' sshpass -p $SSH_PASSWD ssh -p $SSH_PORT -o StrictHostKeyChecking=no -t $SSH_USERNAME@IP 'echo $SCRIPT > $PATH/$FILE_NAME' 하지만 실행했을 때 의도한 대로 동작하지 않고, 원격지 서버에는 빈 파일만 생성되어 있었다. 해결 문자열을 원격지 ..

Linux 2023.11.22

[Shell Script] 데이터 타입과 Test 명령

Shell 데이터 타입과 test 명령 Shell에는 숫자와 문자를 구분하는 데이터 타입이 없고, 사칙연산을 위한 연산자도 없다. 명령문을 구성하는 모든 것은 문자열이고, 산술 연산은 확장이나 명령을 통해 제공된다. 즉, 32와 "32"는 동일하다. 또한 문자열을 다루는 부분에서는 문자열로, 산술 연산을 다루는 부분에서는 숫자로 사용된다. test 명령은 shell Script 작성 시 빠지지 않고 등장하는 표현식으로 보통 조건문에 많이 사용한다. test와 [는 같은 명령이다. test -d /etc; echo $? [ -d /etc ]; echo $? Shell에서 test 명령을 사용할 때는 다음과 같은 점을 주의해야 한다. test 명령 사용 시 주의점 1. 변수 비교 시 qoute 처리 필요 t..

Linux/Shell Script 2023.10.11

[Linux] newgrp - 재로그인 없이 그룹 적용하기

개요 일반 사용자가 도커를 사용할 수 있도록 그룹을 추가했는데, 해당 설정은 바로 적용되지 않고 재로그인을 해야 적용된다. 스크립트로 환경을 세팅하면서 도커도 사용할 수 있었으면 싶어 재로그인 없이 그룹을 적용하는 방법은 없는지 확인해 봤는데, 방법 자체는 존재했다. 바로 newgrp 명령을 사용하는 방법이다. newgrp 사용자의 GID를 변경하는 명령어로, 사용하면 새로운 쉘을 실행하고 사용자의 그룹을 매개변수 group으로 지정한 그룹으로 변경한다. 기본적으로 newgrp 명령은 /etc/passwd에 지정된 그룹으로 변경한다. newgrp [ - ] [ -l] [ Group ] # 예시 newgrp docker newgrp 명령은 GID가 아니라 그룹의 이름만을 인식하고, 변경된 사항은 해당 세션..

Linux 2023.10.09

[Linux] SSH 접속 시 Server unexpectedly closed network connection 에러

현상 다른 서버실에서 동작하고 있던 서버를 옮겨왔다. 서버 설정을 대충 마무리하고 SSH 접속을 시도했더니 아래와 같은 에러가 발생하면 접속이 되지 않았다. # mobaXterm Server unexpectedly closed network connection # CMD kex_exchange_identification: read: Connection reset 원인과 해결 방법을 적어둔다. 원인 이번에 들여온 서버는 다른 조직에서 관리하고 있던 서버인데, 해당 조직에서는 사용자의 접근을 제한하고 관리하는 수단으로 hosts.allow 파일을 사용하고 있었다. 관련 개념을 아래에 간단히 적어둔다. TCP Wrapper 호스트 기반 네트워킹 ACL 시스템. 리눅스와 같은 운영 처제의 인터넷 프로토콜 서버에..

Linux 2023.10.04

[Linux] root 영역 디렉터리 (proc/sys/dev)

개요 이 글에서는 https://mug896.github.io/bash-shell/etc.html 에서 설명하고 있는 / 영역 아래 일부 디렉터리에 대해 간단히 정리한다. /proc 현재 시스템에서 실행되는 프로세스에 대한 정보를 제공하기 위한 가상의 파일 시스템이다. 사용자가 커널이 가지고 있는 정보를 쉽게 사용할 수 있도록 메모리 상에 가상의 파일 시스템을 만들어 구조적으로 제공하는 것으로, 실제 파일이 존재하는 것이 아니다. 각 파일은 커널 내의 특정 함수와 연결되어 있어 실시간으로 read 하여 정보를 확인할 수 있다. 또한 프로세스 정보뿐만 아니라 커널이 가진 여러 시스템 관련 정보도 제공하고 있으며, write 하여 값을 변경할 수도 있다. 즉, 파일 시스템을 통해 직접 커널 옵션 설정을 변경..

Linux 2023.09.15

[Shell Script] Login Shell VS Non-Login Shell

개요 2023.09.13 - [Shell Script] 대화형 VS 비대화형 쉘에서 쉘의 종류를 대화형과 비대화형으로 구분해 봤는데, 이 글에서는 관점을 달리하여 Login Shell과 Non-Login Shell로 쉘의 실행 환경을 구분해 본다. Login Shell Login Shell은 원격 서버에 SSH나 Telnet으로 접속해 login 과정을 거쳐 사용하는 환경이다. 프롬프트 상에서 아래 명령을 실행했을 때, 첫 문자가 '-'이면 로그인 쉘임을 나타낸다. echo $0 또는 아래 명령을 통해 알아볼 수 있다. shopt -q login_shell; echo $? # -q : 나열된 옵션이 모두 활성화되어 있으면 0을 반환한다. Login Shell을 시작할 때는 아래의 파일을 순서대로 읽어 들..

Linux/Shell Script 2023.09.14

[Shell Script] 대화형 VS 비대화형 쉘

쉘 실행 환경 Shell이 실행되는 환경은 크게 두 가지로 구분할 수 있다. 대화형 (Interactive) : 프롬포트를 통해 사용자로부터 직접 명령을 입력받아 실행한다. 비대화형 (Non-Interactive) : 스크립트 파일 등을 실행한다. history, alias, job control과 같은 기능은 기본적으로 대화형 쉘에서 사용하기 위한 기능이므로 비대화형 쉘에서는 비활성화된다. 쉘 실행 환경 확인 아래 명령을 통해 실행 중인 쉘이 대화형인지, 비대화형인지 확인할 수 있다. case $- in *i*) echo interactive shell ;; *) echo non-interactive shell ;; esac set 명령에 의해 설정된 option flags를 저장하고 있는 $- 변수의..

Linux/Shell Script 2023.09.13

[Shell Script] 스크립트 실행 방법

개요 쉘 스크립트를 실행하는 방법에는 여러 가지가 있는데 이 글에서는 각 방법에 대해 간단히 적어둔다. 실행 권한 부여 후 실행 작성한 스크립트 파일에 실행 권한을 부여하여 실행한다. 참고 : 2021.06.08 - chmod - 파일 권한 설정 # 실행 권한 부여 chmod 775 /path/script.sh ## 또는 chmod +x /path/script.sh # 스크립트 실행 /path/script.sh bash/sh 명령으로 실행 python 명령어에 실행할 코드를 지정하여 python 프로그램을 실행할 수 있는 것처럼 python /path/code/python.py 쉘 스크립트도 bash 또는 sh 명령으로 실행할 수 있다. 이때 스크립트를 호출하는 것과 달리 실행 권한이 없어도 된다. ba..

Linux/Shell Script 2023.08.31