반응형
Shell Commands가 필요할 때
보통 우리가 컴퓨터를 사용한다고 하면 화려한 GUI에 익숙해져 있습니다. 파일과 프로그램은 아이콘으로 나타내고, 파일을 이동하기 위해서는 마우스로 드레그를 하고, 지우고 싶으면 휴지통에 넣고...
이런 GUI 덕분에 컴퓨터는 대중화될 수 있었지만, GUI는 굉장히 자원이 많이 필요한 일입니다. 그래서 서버 같이 프로그래머가 다루는 컴퓨터의 경우는 GUI가 없고 CLI를 통해서만 접근해야 하는 경우가 많습니다.
CLI를 쓰는 것의 또 다른 장점은 프로그래밍 적인 요소를 적용할 수 있다는 겁니다. 특정 조건에서는 이걸 하고, 이걸 반복하고 등... 이런 여러 문법들 중 가장 자주 쓰는 10개를 뽑아 봤습니다.
10위 - []
if의 역할을 합니다
[ "test" = "test" ] # 일치하기 때문에 0이 나옵니다
9위 - {}
Loop의 역할을 합니다
echo {1..5} # 1, 2, 3, 4, 5
touch file{1,2,3}.txt # file1.txt, file2.txt, file3.txt 파일 3개를 만듬
8위 - ;, &&, ||
성공, 실패 결과에 따라서 여러 명령어를 실행합니다
echo "Hello" ; echo "World" # 성공/실패에 상관 없이 명령어를 모두 실행
mkdir test && echo "test created" # 앞의 명령어가 성공한 경우에만 뒤의 명령어 실행
mkdir test || echo "test not created" # 앞의 명령어가 실패한 경우에만 뒤의 명령어 실행
7위 - *
아무 문자나 아무 길이만큼 매칭합니다
ls *.txt # 확장자가 .txt인 모든 파일
ls a*.txt # a로 시작하는 확장자가 .txt인 모든 파일
6위 - !!
그전 실행한 명령을 실행합니다
!! # 바로 그 전 실행한 명령어 실행
!5 # 5번째 전 실행한 명령어 실행
5위 - 변수이름=변숫값
변수에 값을 할당합니다
NAME=ant
4위 - &
Background에서 명령어를 실행합니다
sleep 30 &
3위 >, >>, <
sort < unsorted.txt > sorted.txt # unsorted.txt의 내용을 sort에 전달하고, 이 sort가 만든 결과를 sorted.txt에 전달합니다
echo "Hello" >> file.txt # "Hello"를 file.txt 끝에 추가합니다
echo "Hello" > file.txt # file.txt가 "Hello"로 대체됩니다
2위 - |
앞에 있는 명령의 결과를 뒤에 있는 명령이 받습니다
ls | grep ".txt" # ls로 파일 이름을 모두 가져온 결과를 grep ".txt"해서 .txt가 파일 이름에 포함된 파일만 남깁니다
cat access.log | grep "404" | wc -l # access.log의 내용을 grep이 받아서 404가 있는 줄만 남긴 뒤, 이게 몇 개인지를 셉니다
1위 - $()
명령을 실행하고 그 결과로 대체합니다
echo "Today is $(date)"
예시
[ "$(git rev-parse --abbrev-ref HEAD)" = "main" ] && ./gradlew build && ./deploy.sh
- $()로 내부의 명령을 실행합니다. 여기서는 현재 branch를 확인합니다.
- []로 결과가 일치하는지 확인합니다.
- &&로 앞의 결과가 일치하는 경우에만 ./gradlew build를 실행합니다.
- 즉, 현재 branch가 main branch인 경우에만 배포를 실행합니다.
./gradlew lint | tee lint.log | grep -q "error" && exit 1
- lint를 실행하고 그 결과를 | 를 사용해서 lint.log 파일에 저장합니다.
- 저장한 결과를 |로 grep에 보내서 error를 찾고,
- &&로 에러를 찾은 경우에는 종료합니다.
- 즉, lint를 실행하고 그 결과를 저장한 뒤, 오류가 있으면 종료합니다.
반응형
'👨💻 프로그래밍 > ⚙️ DevOps' 카테고리의 다른 글
git reset 제대로 알고쓰기 (0) | 2023.06.30 |
---|---|
Git 파일의 Life Cycle 이해하기 (0) | 2023.06.29 |
쿠버네티스가 뭘까? 작동원리, 아키텍처 정리! (0) | 2023.04.02 |
로드 밸런서(Load Balancer)에 쓰이는 알고리즘 (0) | 2023.04.01 |
도커(Docker)가 뭐고 어디에 쓰는걸까? (0) | 2022.08.16 |