명령줄을 익히는 것은 개발자를 꿈꾸는 모든 사람에게 필수입니다.
그리고 명령줄에서 명령을 실행하려면 셸(shell)이 필요합니다.
Bash 셸은 macOS나 Linux 같은 유닉스 계열 운영체제에서 널리 사용되며, 실제로 대부분의 Linux 배포판에서 기본 셸로 채택되고 있습니다.
Windows에서도 WSL(Windows Subsystem for Linux)을 통해 Bash를 사용할 수 있습니다.
기본적인 Bash 명령어를 어느 정도 익혔다면, 이제 작업 속도를 한 단계 끌어올릴 차례입니다.
이 글은 완전 초보자를 위한 튜토리얼은 아니지만, 초보자와 숙련자 모두에게 도움이 될 만한 내용을 담고 있습니다.
터미널에서 더 빠르게 작업할 수 있게 해주는 10가지 Bash 명령어와 팁을 소개합니다.
1. Ctrl + L로 화면 지우기, Ctrl + D로 종료하기
터미널 화면을 지우려면 명령줄에 clear를 입력하고, 종료하려면 exit를 입력합니다.
하지만 더 빠른 방법이 있습니다. Ctrl + L(macOS는 ⌘ + L)을 누르면 화면이 깨끗하게 지워지고, Ctrl + D(⌘ + D)를 누르면 터미널이 즉시 닫힙니다.
2. nohup으로 터미널 세션이 끝나도 유지되는 프로세스 실행하기
프로그램이 메모리에 올라가면 이를 프로세스(process)라고 부릅니다.
가끔 명령줄에서 Firefox를 실행하는 경우가 있습니다: firefox https://freecodecamp.org
그런데 터미널을 닫는 순간 Firefox도 함께 종료되어 버립니다.
이를 방지하려면 nohup(no hang up) 명령어를 사용하세요: nohup firefox https://freecodecamp.org
이제 터미널을 닫아도 Firefox는 그대로 유지됩니다. 다만 탭이 비정상 종료될 수 있는데요.
해결책은 명령어 끝에 & 기호를 붙여 Firefox를 백그라운드 프로세스로 만드는 것입니다.
nohup firefox https://freecodecamp.org &
이렇게 하면 터미널을 종료해도 열어둔 탭이 모두 그대로 유지됩니다.
3. pkill로 이름 일부만 입력해서 프로세스 종료하기
killall 명령어를 사용하면 프로세스 이름으로 종료할 수 있습니다:
killall firefox
더 편리한 방법은 pkill을 사용해 이름의 일부만 입력해서 종료하는 것입니다.
pkill fire*
4. time 명령어를 앞에 붙여 실행 시간 측정하기
셸에서 어떤 작업이 얼마나 걸리는지 알고 싶으신가요?
명령어 앞에 time을 붙이기만 하면 됩니다: time gcc -g *.c
5. Linux에서 cat /etc/*rel*로 배포판 이름 확인하기
uname -a를 입력하면 시스템 정보를 확인할 수 있습니다.
현재 사용 중인 배포판(distro)이 무엇인지 다시 확인하고 싶다면?
셸에 cat /etc/*rel*을 입력하고 엔터를 누르기만 하면 됩니다.
6. sed 명령어로 텍스트 파일 찾아 바꾸기
텍스트 파일에서 특정 단어가 여러 번 등장할 때 이를 한 번에 바꾸고 싶다면 sed 명령어를 사용하세요.
sed s'/apples/oranges/g' myfile.txt
이렇게 하면 파일 내 모든 'apples'가 'oranges'로 변경됩니다.
각 줄에서 첫 번째로 나오는 것만 바꾸고 싶다면 끝의 'g' 접미사를 빼면 됩니다: sed s'/apples/oranges/' myfile.txt
'g'는 global(전역)을 의미합니다.
슬래시 /는 구분자(delimiter) 역할을 하는데, 사실 아무 문자나 구분자로 사용할 수 있습니다.
예를 들어 밑줄 _을 구분자로 사용할 수도 있습니다: sed s'_apples_oranges_g' myfile.txt
단순히 sed만 실행하면 결과가 표준 출력으로만 표시되고 원본 파일은 그대로 유지됩니다.
파일을 직접 수정(in-place)하려면 -i 옵션을 사용하세요: sed -i s'_apples_oranges_g' myfile.txt
7. curl로 컴퓨터의 공인 IP 주소 확인하기
IP 주소에는 사설(private)과 공인(public) 두 가지가 있습니다.
시스템이 할당한 내부 IP 주소는 ifconfig 명령어로 확인할 수 있습니다.
그렇다면 ISP(인터넷 서비스 제공업체)가 인터페이스에 할당한 공인 IP 주소는 어떻게 알 수 있을까요?
온라인 상태라면 명령줄에서 curl ifconfig.me ; echo 또는 curl ifconfig.co ; echo를 입력하기만 하면 됩니다.
8. Ctrl + R로 명령어 역방향 검색하기
'위쪽 화살표' 키를 누르면 마지막에 입력한 명령어가 표시됩니다.
history를 입력하면 bash 히스토리에 저장된 모든 명령어를 볼 수 있습니다.
하지만 더 강력한 방법이 있습니다. 셸에서 Ctrl + R(⌘ + R)을 누르고 명령어를 입력하기 시작하세요.
입력하는 동안 셸이 히스토리에서 자동으로 완성해 줍니다. 일치하는 명령어를 찾으면 엔터를 누르면 됩니다.
이 글에서 딱 하나만 기억한다면, 바로 이 조합키를 기억하세요: Ctrl + R(⌘ + R).
확실하게 많은 시간을 절약해 줄 것입니다!
9. 셸로 계산하기
분수가 포함되지 않는 간단한 계산이라면 다음처럼 처리할 수 있습니다:
:~$ echo $((19*34))
646
분수가 포함된 계산이라면 식을 echo로 출력한 뒤 파이프(|)로 bc 명령어에 전달하면 됩니다.
:~$ echo "scale=2; 9*3/((2*2)+1)" | bc
5.40
여기서 'scale'은 필요한 정밀도를 의미하며, 위 예시에서는 소수점 둘째 자리까지 지정했습니다.
10. 중괄호 확장으로 파일 대량 생성하기
폴더 안에 100개의 파일을 만들려면 어떻게 해야 할까요?
file1.txt, file2.txt, file3.txt ... file100.txt
중괄호 확장(brace expansion)을 사용하면 됩니다: touch file{1..100}.txt
프로젝트에 app.html, app.css, app.js 세 파일이 필요하다고 가정해 봅시다.
하나씩 만드는 대신, 중괄호 확장으로 한 번에 모두 생성할 수 있습니다.
:~$ touch app.{html,css,js}
:~$ ls
app.html app.css app.js
:~$
또는 프로젝트 폴더 안에 images, css, src, templates, scripts 다섯 개의 디렉터리를 만들어야 한다면 다음과 같이 사용할 수 있습니다:
:~$ mkdir {images,css,src,templates,scripts}
:~$ ls
images css src templates scripts
:~$
주의할 점 하나: 중괄호 안의 단어들 사이에는 공백이 없어야 합니다.
마무리
지금까지 터미널에서 작업 속도를 높일 수 있는 10가지 Bash 명령줄 팁을 소개했습니다.
이 Bash 명령어들을 익혀두면 프로그래밍 여정에서 큰 도움이 될 것입니다.
즐거운 코딩 되세요!