라벨이 bash인 게시물 표시

Bash files

  1. NestJS  1) Dockerfile, docker-compose.yaml을 bash를 이용하여 자동 실행하기( 링크 )   - development_run.sh을 이용하여 자동 실행합니다.  

Bash Tokenisation(토큰화)

이미지
  1. 쉘은 따옴표로 묶이지 않은 메타 문자를 식별하고, 이를 사용하여 명령 줄을 토큰으로 분할합니다. 2. 그런 다음, 쉘은 토큰을 단어와 연산자로 분류합니다. 3. 단어는 따옴표로 묶이지 않은 메타 문자를 포함하지 않는 토큰입니다. 4. 연산자는 따옴표로 묶이지 않은 메타 문자를 포함하지 않는 토큰입니다. 5. 연산자에는 두 가지 유형이 있습니다. - 제어 연산자(Control operators): 명령의 흐름을 제어하는 데 사용되는 연산자입니다. Newline, |, ||, &, &&, ;, ;;, ;&, ;;&, |&, (, ) - 리다이렉션 연산자(Redirection operators): 입출력을 다른 위치로 리다이렉션하는 데 사용되는 연산자입니다. <, >, <<, >>, <&, >|, <<-, <>, >& 먼저 아래와 같은 명령어를 확인해 보겠습니다. 사진1) bash 명령어 사진1과 같은 명령을 입력하면 bash에서는 test.txt파일을 생성하고 $data에 있는 데이터를 저장합니다. 하지만 이것을 Tokenisation을 어떻게 했는지 확인해 보겠습니다. 사진2) 메타데이터 위치 사진2에서 가장 먼저 찾는것이 메타 캐릭터 이다. 띄어쓰기(space)와 오른쪽 꺽쇄(Right Arrow)가 있는 것을 확인할수 있다. 총 4개의 메타캐릭터가 있는것을 알수 있다. 사진3) 워드의 위치 사진3과 같이 Bash에서는 3개의 워드 캐릭터를 찾습니다. 사진4) 오퍼레이터 찾기 사진4를 마지막으로 오퍼레이터를 찾습니다. 현재 명령문의 오퍼레이터는 리다이렉트 연산자만 존재하는 것을 확인할수 있습니다. 이렇게 진행하여 Bash의 Tokenisation이 마무리 됩니다.

Bash Quoting

이미지
  1. Backslash : \ - 다음 문자에 있는 특별한 기능을 상실하게 한다. (일반 문자열처럼 만든다.) 2. Single Quotes : '' - 작은따옴표 안에 있는 문자는 모두 특별한 기능을 상실한다. 3. Double Quotes : "" - $(달러) 와 `(Grave, 강세표) 을 제외하고 다른 모든 문자는 특별한 기능을 상실한다.

Bash Shell Globbing

이미지
 Globbing은 쉘에서 파일 이름이나 디렉토리 이름과 같은 경로명을 패턴에 맞게 확장하는 프로세스를 의미합니다. 이는 와일드카드 문자(*, ?, [] 등)를 사용하여 여러 파일이나 디렉토리를 선택하거나 매칭하는 방법입니다. Bash에서는 다양한 확장 기능을 제공하며, 이를 통해 파일을 찾거나 명령어에 대한 인수를 생성할 수 있습니다. 사진1) test files 주요 와일드(whild)카드 문자 1. * (Asterisk): 모든 문자열과 일치합니다. 예를 들어, *.txt는 모든 .txt 확장자를 가진 파일과 일치합니다. 사진2) * 사용 2. ? (Question Mark): 어떤 하나의 문자와 일치합니다. 예를 들어, file?.txt는 file1.txt, fileA.txt 등과 일치합니다. 사진3) ? 사용 3. [] (Square Brackets): 괄호 안에 있는 문자 중 하나와 일치합니다. 예를 들어, [aeiou]는 소문자 모음과 일치하고, [0-9]는 숫자에 일치합니다. 사진4) [ ] 사용 4. - (Hyphen, Inside Square Brackets): 범위를 나타내는데 사용됩니다. 예를 들어, [a-z]는 소문자 알파벳에 일치합니다. 5. { } (Curly Braces): 중괄호 안에 있는 문자열 중 하나와 일치합니다. 예를 들어, {apple,orange,banana}는 "apple", "orange", "banana" 중 하나와 일치합니다. 사진5) { } 사용 Globbing은 파일 및 디렉토리 이름에 대한 패턴 매칭에 사용되며, 정규 표현식과는 다릅니다. 따라서, 정규 표현식 메타문자와 와일드카드 문자의 의미가 다를 수 있습니다. Globbing은 효과적으로 여러 파일을 선택하거나 명령어에 대한 인수를 생성하는 데 사용되며, 쉘 스크립트에서 유용하게 활용됩니다.

Bash Install NodeJS

이미지
Bash를 이용하여 NodeJS을 설치하겠습니다. #!/bin/bash # 해당 스크립트를 실행시 $ source node_install.sh # apt update sudo apt update # nodejs install echo 'install node' sudo apt install -y nodejs # download nvm echo 'download nvm' wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash # nvm의 새 인스턴스를 로드하기 위해 .bashrc를 source source ~/.bashrc # install nvm version 20.10.0 (node version이라고 가정) echo 'install nvm 20.10.0' nvm install 20.10 .0 # set default node version to 20.10.0 echo 'set nvm default version to 20.10.0' nvm alias default 20.10 .0 echo 'finish' exit 0 위와 같은 스크립트를 작성합니다. 사진1) 설치를 위해 암호 입력 이후 설치가 진행이 되고 node와 nvm이 로컬에 설치 된 것을 알수 있습니다. gitHub Link : https://github.com/Alex-Choi0/Ubuntu_node_install_bash

Bash Shall Script Word Splitting(단어분할)

이미지
이번 블로그에서는 Shall Script 명령어 해석에 있어서 단어분할(Word Splitting)의 중요성에 대해서 설명해 드리겠습니다. 단어 분할은 명령어 라인이 어떻게 해석되는지에 매우 중요한 영향을 미칠수 있습니다. 단어 분할은 비인용 상태(unquoted)에서만 수행되는데, 3가지의 경우에 적용 됩니다. 1) 파라미터 확장(Parameter expansions) - 변수나 파라미터의 값이 확장될 때, 이 값들 사이의 공백을 기준으로 단어 분할이 발생할 수 있습니다. 2) 명령어 치환(Command substitutions) - 다른 명령어의 출력을 현재 명령어의 일부로 사용할 때, 출력된 텍스트에서 단어분할이 발생 할수 있습니다. 3) 산술 확장(Arithmetic expansions) - 산술 연산 결과를 처리할 때, 결과 값이 포함된 공백을 기준으로 단어 분할이 일어날수 있습니다. * 단어분할(Word Splitting)이란?  단어 분할은 쉘에서 명령어를 처리할때 공백(space), 탭(tab), 새라인("\n") 등의 기준으로 문자열을 여러 단어로 나누는 과정 입니다. 이 과정은 명령어의 인수나 파라미터를 구분하는데 중요한 역할을 합니다. 이때 Ubuntu(Linux)에서 기본 구분자는 IFS가 사용됩니다.  * IFS(Internal Field Separator)란? IFS는 쉘 스크립트 내에서 단어를 구분하는 데 사용되는 문자 집합을 정의하는 환경변수 입니다. 기본값 : 기본적으로 IFS는 공백(Space), 탭(tap) 그리고 개행 문자(newline)을 포함합니다. 사진1) echo로 IFS문자 출력 사진1과 같이 IFS문자를 출력할려고 하면 빈 화면이 나온다. 이는 공백(Space), 탭(tap) 그리고 개행 문자(newline)들이 모두 보이지 않는 문자이기 때문에 그렇다.  사진2) echo로 보이는 IFS문자 출력 사진2와 같이 IFS문자를 보이게 변경하였다. 여전히 공백(Space)는...

Bash 이해해야 할 중요한 개념

이미지
1. Tokenization (토큰화)  의미: Bash는 사용자가 입력한 명령어를 토큰(Token)이라는 개별적인 부분으로 나눕니다. 예를 들어, ls -l /home/user 명령은 ls, -l, /home/user로 나뉩니다. 중요성: 이 과정은 Bash가 명령어를 올바르게 해석하고 실행하기 위한 첫 단계입니다. 토큰화 없이는 명령어의 구조와 의미를 파악할 수 없습니다. Bash Tokenisation(토큰화) 2. Command Identification (명령어 식별) 의미: 토큰화된 각 부분이 어떤 명령어, 옵션, 인자 등을 나타내는지 식별하는 과정입니다. 중요성: 이 단계에서 Bash는 사용자의 입력이 실제로 실행 가능한 명령어인지, 내장 명령어인지, 외부 프로그램인지를 판별합니다. 이는 명령어의 정확한 처리를 위해 필수적입니다. 3. Shell Expansions (셸 확장) 의미: Bash는 특정 패턴이나 표현을 확장하여 여러 값을 생성할 수 있습니다. 예를 들어, *, ?, {}, $ 등의 특수 문자를 사용한 확장이 여기에 해당합니다. 중요성: 이 기능을 통해 사용자는 간단한 표현으로 복잡한 명령어를 구성할 수 있습니다. 예를 들어, 파일 이름 패턴 매칭, 변수 확장, 명령어 치환 등이 가능합니다. -  Bash Shell Globbing 4. Quote Removal (인용 부호 제거) 의미: Bash에서는 큰따옴표("), 작은따옴표('), 백슬래시()를 사용하여 특수 문자의 기능을 변경하거나 무시할 수 있습니다. 이 단계에서는 이러한 인용 부호를 처리합니다. 중요성: 인용 부호는 문자열을 그대로 사용하거나 특수 문자의 기능을 제어하는 데 필요합니다. 예를 들어, 공백이 포함된 문자열을 하나의 인자로 처리하거나, 특수 문자의 일반 문자로서의 기능을 활용할 수 있습니다.  5. Redirections (리다이렉션) 의미: Bash에서는 입력과 출력의 방향을 변경할 수 있습니다. 예를 들어, >, >>,...

Bash Script 작성하고 권한(Permissions) 주고 실행하기

이미지
 Bash의 장점중에 하나는 script를 작성해서 해당 파일을 실행할수 있다는 것이다. 이는 차후에 자동화를 진행시 큰 도움이 된다. 터미널에서 동작한 Bash 명령어(Hello, World!)는 "echo Hello, World!"이다.  먼저 파일을 vim을 통해서 작성한다. 그런데 실제 "./helloWorld"를 통해서 bash script를 실행할려고 해도 허가 거부 상태가 됩니다. 이는 관리자에서 해당 script의 권한을 주어야 합니다. 주는 방법은 작성자, 그룹 그리고 외부인에 대해서 읽기, 쓰기 그리고 실행하기의 권한을 주는 것이다. 이는 숫자로 표시할수 있는데 아래 링크를 참고하시면 됩니다. Unix Permissions Calculator :  https://wintelguy.com/permissions-calc.pl 만약 해당 링크가 없어지면 구글에 "Unix Permissions Calculator"를 입력해서 적합한 사이트로 가면 된다. 저는 작성자한테 모든 권한(읽기, 쓰기, 실행하기)을 주고 그룹에는 읽기와 실행하기 권한만 줬습니다. 그리고 다른 사람들에 대해서는 권한을 일체 주지 않았습니다. 그러면 숫자가 750이 나옵니다. "chmod"를 이용하여 750을 입력하고 bash script 파일명을 입력하면 위의 사진처럼 출력을 할수 있습니다.

Bash "Hello World!" 출력하기

이미지
 이번에는 간단하게 bash를 이용하여 "Hello World!"를 출력하도록 하겠습니다. Linux 터미널에서 아래와 같이 입력한다. $ echo Hello, World! copy Bash에 대한 설명은 아래 링크를 참고해 주시기 바랍니다. 링크 :  Bash(Bourne Again SHell) 란?

Bash(Bourne Again SHell) 란?

이미지
  개요 Bash는 Unix 시스템에서 널리 사용되는 명령어 해석기(command interpreter) 또는 쉘(shell)입니다. 1989년에 GNU 프로젝트의 일환으로 Brian Fox에 의해 만들어졌으며, Bourne Shell(sh)의 확장된 버전입니다. Bash는 Linux, macOS, 및 여러 Unix 계열 운영 체제에서 기본 쉘로 사용됩니다. 주요 특징 1. 명령어 실행: 사용자로부터 명령어를 받아 실행합니다. 2. 스크립트 기능: Bash 스크립트를 통해 복잡한 작업을 자동화할 수 있습니다. 3. 환경 설정: 사용자 환경을 맞춤 설정할 수 있는 기능을 제공합니다. 4. 파이프라인과 리다이렉션: 명령어의 출력을 다른 명령어의 입력으로 연결할 수 있습니다. 5. 변수와 변수 확장: 스크립트나 쉘 세션에서 변수를 사용하여 데이터를 저장하고 처리합니다. 6. 프로그래밍 기능: 조건문, 반복문, 함수 등 프로그래밍 언어의 기능을 지원합니다. 사용하는 이유 1. 표준화와 호환성: Bash는 많은 Unix 계열 시스템에서 표준 쉘로 채택되어 널리 사용됩니다. 2. 강력한 스크립트 기능: 복잡한 작업을 자동화하고 관리하기 쉽게 만들어주는 스크립트 기능을 제공합니다. 3. 사용 편의성: 대화형 사용이 가능하며, 자동 완성, 명령어 히스토리 등 사용자 친화적인 기능을 제공합니다. 4. 광범위한 커뮤니티 및 지원: 많은 사용자와 개발자가 있어 해결책을 찾기 쉽고, 다양한 리소스와 도구가 제공됩니다. 5. 오픈 소스: GNU General Public License 하에 배포되어 누구나 수정하고 사용할 수 있습니다. 단점 1. 복잡한 문법: Bash 스크립트는 때때로 복잡하고 이해하기 어려운 문법을 가지고 있습니다. 특히 오류 처리, 배열 사용, 복잡한 문자열 조작과 같은 고급 기능을 사용할 때 그러합니다. 2. 디버깅의 어려움: Bash 스크립트는 디버깅하기 어렵습니다. 오류 메시지가 명확하지 않거나, 오류의 원인을 찾기 어려울 수 있습니다. 3. 표준화...

Linux Ubuntu set terminal alias

이미지
  1. save alias for temporary $ alias [key] = [commend String] copy 2. save alias in '.bash_aliases' 1). open ~/.bash_aliases If it doesn't exist, create one. $ vim ~/.bash_aliases copy 2) write alias key and value you want and save it 3) save alias for permanently $ source ~/.bash_aliases copy

Go(Golang)를 Ubuntu(20.04)의 터미널로 설치하기

이미지
  Go를 Ubuntu20.04에서 설치하는 방법 1. sudo update $ sudo apt-get update copy $ sudo apt-get -y upgrade copy $ sudo apt install git-all copy 2. wget으로 go 설치 패키지를 받고 설치하기 tmp폴더로 이동 $ cd /tmp copy tmp폴더에 Go 설치 프로그램(1.17.2)을 wget로 받습니다. $ wget https://dl.google.com/go/go1.17.2.linux-amd64.tar.gz copy 사진1) wget로 다운로드 tmp폴더에 Go 설치 프로그램(1.17.2)을 설치합니다. $ sudo tar -xvf go1.17.2.linux-amd64.tar.gz copy 사진2) go 설치 go 폴더를 /usr/local로 이동시킵니다. $ sudo mv go /usr/local copy profile 파일을 수정합니다. $ nano ~/.profile copy 아래 내용을 profile에 추가합니다. export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$GOPATH/bin:$GOROOT/bin:$PATH 사진3) profile문서 수정 $ source ~/.profile copy go 버전을 확인합니다. $ go version copy 사진5) go버전 확인 위의 과정을 bash script으로 자동으로 진행하고 싶다면 아래 github링크를 참고해 주시기 바랍니다. github : https://github.com/Alex-Choi0/Ubuntu_golang_install_bash.git 개발자 디스코드 서버에 초대합니다. 사진) 아래링크 클릭시 커뮤니티로 초대 Comunity Discord Link