본문 바로가기

Linux24

[Bash] 문자열 자르는 방법 Bash 스크립트로 문자열 데이터를 다룰 때, 문자열의 일부를 잘라서 사용해야하는 경우도 있다. 문자열을 자르는 방법에 대해서 알아보자. 문자열 자르기 - 인덱스로 자르기 Bash 스크립트에서 문자열의 일부를 잘라서 사용해야 하는 경우 다음과 같은 문법을 사용하면 된다. ${str:offset:length} str 변수에 담겨있는 문자열의 offset 부터 length 만큼 잘라오겠다는 의미다. 예를 들어 #!/bin/bash str="Hello, World" echo "${str:0:5}" echo "${str:7:5}" Hello, World 라는 문자열을 담고 있는 str 변수를 ${str:0:5}로 접근하면 0번 문자부터 5개의 문자를 잘라서 가져온다. 즉 Hello 문자열이 얻어진다. 마찬가지로.. 2022. 12. 3.
[Bash] warning: shell level (1000) too high, resetting to 1 에러 bash 스크립트를 수행하다가 다음 에러를 만나게 되었다. $ ./run /bin/bash: warning: shell level (1000) too high, resetting to 1 쉘의 레벨이 1000으로 너무 높아서 1로 리셋했다는 의미다. 쉘 스크립트를 실행할 때, 또 다른 쉘을 열어서 진행하는 경우 쉘 레벨(SHLVL) 변수를 하나씩 증가시킨다. 현재 쉘의 레벨 값은 SHLVL 변수를 조회해보면 알 수 있다. $ echo $SHLVL 1 $ bash $ echo $SHLVL 2 $ exit $ echo $SHLVL 1 문제는 어디에선가 쉘 스크립트를 재귀적으로 호출하는 곳이 있을 때 발생한다. 다음 코드를 실행하면 동일한 에러를 재현할 수 있다. $ echo "bash run" > run $.. 2022. 10. 21.
[Linux] dos2unix, unix2dos 명령어 사용법 윈도우와 리눅스, 맥 환경을 번갈아가면서 사용하다보면 줄바꿈 문자와 관련된 문제를 자주 접하게 된다. 예를 들어 윈도우에서 작성된 파이썬 스크립트를 github에 커밋해두고 리눅스나 맥에서 실행할 때 다음 에러를 보게 되는 경우가 있다. /usr/bin/env: ‘python3\r’: No such file or directory 셔뱅으로 파이썬3를 지정해둔 첫 번째 라인을 읽다가 에러가 발생한다. python3 뒤에 \r 문자가 붙어 있는 것을 볼 수 있다. 윈도우에서는 줄바꿈을 캐리지 리턴(CR)과 라인피드(LF)를 함께 사용한다. 반면 유닉스 계열에서는 라인피드(LF)만 사용한다. 때문에 윈도우에서 작성된 텍스트 파일을 유닉스 계열의 운영체제에서 열어볼 경우 캐리지 리턴 문자가 이상하게 표시되거나 .. 2022. 10. 2.
[Linux] iostat 명령어 사용법 - 디스크 사용량 모니터링 iostat는 디스크 입출력에 대한 통계정보를 측정할 수 있는 명령어다. 처리량이나 사용률, 대기열 길이와 트랜잭션 비율 그리고 서비스 시간 등의 정보를 확인할 수 있다. 리눅스 시스템을 운영하면서 갑자기 서버에 부하가 높다던가 서버의 응답속도가 저하되는 경우가 발생할 때 디스크 입출력에서 문제가 생긴게 아닌지 모니터링하고 문제를 찾을 수 있다. 목차 iostat 설치 iostat은 sysstat 패키지를 설치하면 사용할 수 있다. $ sudo yum install sysstat or $ sudo apt install sysstat iostat 사용법 iostat 명령어를 이용하면 디스크 디바이스에 대한 입출력 정보를 확인할 수 있다. $ iostat [옵션] [인터벌] [횟수] iostat의 옵션 뒤에.. 2022. 6. 3.
[Linux] rsync 명령어 사용법 rsync는 'Remote Sync'의 줄임말로 파일과 디렉토리를 동기화하기 위한 프로토콜이자 리눅스의 유틸리티 명령어다. rsync 명령어를 이용해 로컬에 있는 파일이나 디렉토리를 원격 호스트로 보내거나 원격에 있는 파일, 디렉토리를 로컬로 복사해 올 수 있다. rsync 명령은 데이터 전송시 네트워크 대역폭을 최소화 하는 'delta encoding algorithm'을 구현해 rcp나 scp보다 빠르고 효율적으로 데이터를 동기화 한다. 즉 파일의 전체 데이터를 복사하는 대신 변경사항만 동기화해서 빠르게 복사할 수 있다는 것이다. rsync 설치 대부분의 리눅스 배포판이나 OSX에는 기본 설치가 되어 있다. 하지만 일부 리눅스를 최소 설치 옵션으로 설치했다면 rsync가 포함되지 않았을 수 있다. 이.. 2022. 5. 16.
[Linux] MAC Address 확인 방법 리눅스에서 MAC 주소를 조회해보자. 1. ifconfig 명령 ifconfig 명령으로 MAC 주소를 조회하려는 인터페이스를 입력하고, ether 문자열로 grep 하면 맥 주소를 알 수 있다. user@myhost:~$ ifconfig etho0 | grep ether ether 00:15:7d:32:e5:63 txqueuelen 1000 (Ethernet) ether 뒤 쪽에 출력되는 '00:15:7d:32:e5:63' 문자열이 MAC 주소다 2. ip address 명령 ip address 명령으로 조회할 수도 있다. user@myhost:~$ ip address show eth0 | grep ether link/ether 00:15:7d:32:e5:63 brd ff:ff:ff:ff:ff:ff 3.. 2022. 2. 23.
[Linux] access 명령어 사용법 access 명령어는 현재 접속한 사용자가 특정 디렉토리나 파일의 존재 유무 및 읽기, 쓰기, 실행 권한을 가지고 있는지 확인하는 명령어다. 쉘 스크립트 안에서 특정 경로에 권한이 있는지 알아보기 위해서 사용한다. $ access [모드] 경로 예를 들어 test.txt 파일에 특정 모드로 사용이 가능한지 테스트해보기 위해서 다음과 같이 실행할 수 있다. $ access rw test.txt $ echo "$?" 명령어 자체가 내용을 출력하지는 않는다. 대신 “$?” 변수를 통해 access 명령이 리턴한 리턴 코드를 확인해서 성공(0)인지 실패(1)인지 확인할 수 있다. 옵션 옵션 설명 --help 사용법 출력 --version 버전 정보 출력 2022. 2. 8.
[Linux] 임시 디렉토리 '/tmp' 삭제 관련 설정, 'tmpwatch' 설정 파일 유닉스 계열의 운영체제에서는 임시 파일을 '/tmp' 디렉토리에 생성한다. 이 경로에 생성한 파일은 시스템이 재부팅될 때 혹은 주기적으로 커널이 지워주기 때문에 별도로 관리를 하지 않아도 된다. '/tmp' 디렉토리에 생성된 임시파일을 정리하는 규칙은 리눅스 구현체마다 조금씩 다르다. Ubuntu 데비안(Debian) 계열의 리눅스의 경우 시스템이 재부팅되는 경우에 '/tmp' 디렉토리가 지워진다. 이는 기본 값이고 /etc/default/rcS 파일에 임시 디렉토리 삭제와 관련된 룰이 저장된다. 대략 다음 내용이 저장되어 있다. # /etc/default/rcS # # Default settings for the scripts in /etc/rcS.d/ # # For information about t.. 2020. 11. 18.
[Linux] Bash case 조건문 문법 리눅스에서 Base 스크립트를 작성할 때 사용할 수 있는 조건문 중 `case`문이 있다. 마치 Java에서 switch - case문처럼 Base에서도 조건문을 간단하게 사용할 수 있다. Bash - case문 Base에서 case문은 다음 문법을 따른다. case 기준문자열 in 문자열1) 명령 명령 ;; 문자열2) 명령 명령 ;; *) 명령 명령 ;; esac 기준문자열에 해당하는 값을 '문자열1', '문자열2'와 비교하여 분기한다. 각 분기의 마지막에는 ;;를 찍어서 분기의 종료를 알려줘야한다. *)는 Java의 switch-case 문에서의 default와 같다. '문자열1', '문자열2'와 같지 않은 모든 경우가 이 곳으로 분기한다. 분기의 조건은 OR 조건으로 여러개를 묶을 수도 있다. ca.. 2020. 11. 17.