Bash 치트시트 - Ubuntu, Mint 및 Debian용 Linux 명령어

일부 도구의 명령줄 매개변수

Page content

매우 포괄적인 목록은 아니지만, 저에게 유용했던 것들만 모았습니다.

bash and shell anniversary!

개발자 도구 및 워크플로우에 대한 더 많은 정보는 Developer Tools: The Complete Guide to Modern Development Workflows 를 참조하세요.

스크립트에서 대화형 프롬프트 패턴이 필요하면 Pause scripts with Press any key in Bash CMD PowerShell and macOS 를 참조하세요.

Linux Ubuntu 버전 확인 방법

Ubuntu 버전 확인에 대한 자세한 내용은 Check linux ubuntu version 을 참조하세요.

방법 1

lsb_release -a

다음과 같은 결과가 나옵니다.

No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

방법 2

cat /etc/os-release

다음과 같은 결과가 나옵니다.

NAME="Linux Mint"
VERSION="22.1 (Xia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 22.1"
VERSION_ID="22.1"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=xia
UBUNTU_CODENAME=noble

Tar 를 사용한 Bash 압축 및 해제

압축

tar -zcvf archive-name.tgz directory-name

해제

tar -zxvf archive-name.tgz

SSH 와 SCP 를 사용한 Bash 원격 서버 접속

사용자 신원을 원격 서버로 푸시

ssh-copy-id user@10.0.0.225

이제 다음처럼 비밀번호 없이 로그인할 수 있습니다.

ssh user@10.0.0.225

파일 업로드

scp ~/file.ext user@host-ip:/home/user/file.ext

중첩된 폴더를 재귀적으로 다운로드

scp -r user@host-ip:/home/user/dir ~/dir

Bash 폴더 및 파일 관리

존재 여부 확인

# 존재하지 않는 폴더를 생성하며, 중간 폴더들도 모두 생성
[ -d $repdir ] || mkdir -p $repdir

# 또는
if [ -d $fname ]; then
  echo "File doesn't exist: $fname"
  return
fi

특정 사용자를 위한 폴더 생성

sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1

폴더 내 파일 반복 처리

# 이 명령어는 특정 폴더 내의 모든 jpg 파일을 fits 로 변환합니다.
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

모든 파일을 하나로 병합

cat ./* > merged.txt

Crontab 에 명령어 추가

(crontab -l 2>/dev/null | \
  grep -v control-marker-1; \
  echo '*/15 * * * * /bin/bash /home/user/stest/stest.sh /home/user/stest >> /home/user/stest/stest.log 2>&1 #control-marker-1') | \
  crontab -

여기서:

  • */15 - 15 분마다 실행
  • control-marker-1 - cron 설정에서 이 명령어의 식별자로, 다음에 동일한 스크립트로 업데이트할 때 사용
  • /bin/bash - 실행할 명령어
  • /home/user/stest/stest.sh - bash 매개변수 - bash 가 이 스크립트를 실행
  • /home/user/stest - 스크립트 매개변수 - $1 로 접근
  • /home/user/stest/stest.log - stest.sh 의 콘솔 출력이 포함된 로그 파일

확인

grep /home/user/stest/stest.sh /var/log/syslog
crontab -e

Bash 에서 로그 파일 모니터링

로그 파일 실시간 모니터링

sudo tail -f /var/log/megalog.log

Bash 에서 curl 로 HTTP 상태 코드 가져오기

response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
  
# 또는

url='http://localhost:8080/'
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})

[[ $status == 500 ]] || [[ $status == 000 ]] && echo restarting ${url} # 시작/재시작 로직 수행

로그오프 후에도 SSH 명령어 실행 유지

https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh

전경에서 프로그램이 실행 중이라고 가정하고,

  • ctrl-Z 를 누른 다음:

[1]+ Stopped myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

jo 를 사용한 Bash 에서 JSON 생성

jo 설치

sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"

다음과 같은 결과가 나옵니다.

{"model":"a", "prompt":"b", "stream":false}

조금 더 복잡한 예시:

jo -p name=Jane point[]=1 point[]=2 geo[lat]=10 geo[lon]=20
{
   "name": "Jane",
   "point": [
      1,
      2
   ],
   "geo": {
      "lat": 10,
      "lon": 20
   }
}

jq 를 사용한 Bash 에서 JSON 포맷팅

사용 방법

| jq .

위에서 생성한 JSON 을 포맷팅하려면:

a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .

포맷팅된 JSON 은 다음과 같습니다.

{
  "model": 123,
  "prompt": 456,
  "stream": false
}

Bash 에서 JSON 파싱 및 필드 값 추출

먼저 jq 설치

sudo apt-get install jq

사용 방법

  | jq -r '.fieldName'

예를 들어 Ollama 호출 결과를 파싱할 때:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Why is the sky blue?",
  "stream": false
}'  | jq -r '.response'

Bash 에서 파일 단어 수 세기

단어 수:

wc -w filename.txt

다음과 같은 결과가 나옵니다.

261 filename.txt

정수만 원한다면 첫 번째 단어 (숫자) 를 잘라낼 수 있습니다.

words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words words"

아니면 wc 를 다음과 같이 사용하세요:

words=`wc -w < filename.txt`
echo "$words words"

디렉터리 디스크 사용량 확인

du ~/dirname

Bash 에서 스크립트 디렉터리 경로 가져오기

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

Bash 에서 스크립트 실행 시간 측정

한 가지 방법은 time 함수를 사용하는 것입니다.

time your_script.sh

다른 방법은 조금 더 복잡합니다:

start=`date +%s`

# 매우 중요한 코드
# 여기에 들어갑니다

end=`date +%s`

runtime=$((end-start))

VS Code 로 두 파일 비교

code -d <file 1> <file 2>

Ubuntu 저장소에서 사용 가능한 패키지 확인

sudo apt-cache policy <packageName>

유용한 링크

구독하기

시스템, 인프라, AI 엔지니어링에 관한 새 글을 받아보세요.