develop/Docker

Docker 명령어

i'm suna 2024. 12. 1. 12:43

Bash문법

> 출력 리다이렉션.
명령 실행의 표준 출력(stdout)을 파일로 저장합니다.
유닉스 계열 운영체제는 장치도 파일로 처리하기 때문에 명령 실행결과를 특정 장치로 보낼 수도 있습니다.
$ echo "hello" > ./hello.txt
$ echo "hello" > /dev/null
< 입력 리다이렉션.
파일의 내용을 읽어 명령의 표준입력(stdin)으로 사용합니다.
$ cat < ./hello.txt
>> 명령 실행의 표준 출력(stdout)을 파일에 추가합니다.
>는 이미 있는 파일에 덮어쓰지만 >> 는 파일 뒷부분에 내용을 추가합니다.
$ echo "world" >> ./hello.txt
2> 명령실행의 표준 에러(stderr)를 파일로 저장합니다.
2>> 명령실행의 표준에러(stderr)를 파일에 추가합니다.
&> 표준 출력과 표준에러를 모두 파일로 저장합니다.
1>&2 표준출력을 표준에러로 보냅니다.
echo명령으로 문자열을 표준출력으로 출력했지만 표준에러로 보냈기 때문에 변수에는 문자열이 들어가지 않습니다.
$ hello=$(echo "hello world" 1>&2)
$ echo $hello
2>&1 표준 에러를 표준 출력으로 보냅니다.
abcd 라는 명령은 없으므로 에러가 발생하지만 에러를 표준출력으로 보낸 뒤 다시 /dev/null로 보냈기 때문에 아무것도 출력되지 않습니다.
$ abcd > /dev/null 2>&1
| 파이프.
명령실행의 표준 출력을 다른 명령의 표준 입력으로 보냅니다.
즉 첫번째 명령의 출력값을 두 번째 명령에서 처리합니다.
$ ls -al | grep .txt
$ Bash의 변수입니다.
값을 저장할때는 $를 붙이지 않고, 변수를 가져다 쓸 때만 $를 붙입니다.
$ hello="Hello world"
$ echo $hello
Hello world  
&() 명령 실행 결과를 변수화합니다.
명령 실행 결과를 변수에 저장하거나 다른 명령의 매개변수로 넘겨줄 때 사용합니다.
또는 문자열 안에 명령의 실행결과를 넣을 때 사용합니다.
`` &()과 마찬가지로 명령실행 결과를 변수화합니다.
$ sudo docker rm `docker ps -aq`
$ echo `date`
2024년 12월 1일 일요일 11시 30분 31초 KST
&& 한 줄에서 명령을 여러 개 실행합니다.
단 앞에있는 명령이 에러없이 실행되어야 뒤에 오는 명령이 실행됩니다.
$ make && make install
; 한 줄에서 명령을 여러 개 실행합니다.
앞에있는 명령이 실패해도 뒤에 오는 명령이 실행됩니다.
$ false; echo "hello"
hello
' ' 문자열입니다.
' ' 안에 들어있는 변수는 처리되지 않고 변수명 그대로 사용됩니다.
또한 "와 $()도 처리되지 않고 그대로 사용됩니다.
$ echo '$USER'
USER
" " 문자열입니다.
명령어 안에 매개 변수를 입력하거나 변수에 저장할 때 주로 사용합니다. 
' '와 달리 " " 안에 변수가 들어있으면 변수의 내용으로 바뀝니다.
또한 " 와 $()도 실행 결과 값이 사용됩니다.
$ echo "Hello World"
Hello World
$ echo "$USER"
root
$ echo "Host name is $(hostname)"
Host name is Sunui-MacBookPro.local
$ echo "Time : `date`"
Time : 2024년 12월  1일 일요일 11시 39분 16초 KST
" ' ' " " " 안에 ' ' 가 들어갈 수 있습니다.
명령 안에서 다시 명령을 실행하고 매개 변수를 지정할 때 사용합니다.
$ bash -c "/bin/echo Hello 'World'"
Hello World
\"
\$hello
' '안에서 "를 사용할 때는 \" 처럼 앞에 \ 를 붙여줍니다.
$ bash -c "/bin/echo '{ \"user\" : \"$USER\" }'"
{ "user" : "root" }
" "안에서 ", $ , ` 등의 특수문자를 그대로 사용하려면 앞에 \ 를 붙여줍니다.
$ echo "\$hello \" \`"
$hello " `
${} 변수 치환(substitution)입니다.
" " 문자열 안에서 변수를 출력할 때 주로 사용합니다.
${} 대신 $만 사용해도 됩니다.
$ str="World"
$ echo "Hello ${str}"
Hello World
스크립트에서 변수의 기본 값을 설정할 때도 사용합니다.
다음은 HELLO변수가 있으면 그대로 사용하고 변수가 없으면 기본 값으로 설정한 abcd를 대입합니다.
$ HELLO=
$ HELLO=${HELLO-"abcd"}
$ echo $HELLO
값이 null인 HELLO 변수가 이미 있기 때문에 기본 값을 대입하지 않습니다.
다음은 변수에 값이 있으면 그대로 사용하고, 값이 null 이면 기본 값으로 설정한 abcd를 대입합니다.
$ world=
$ world=${world:-"abcd"}
$ echo $world
abcd
변수에 값이 null 이므로 기본값을 대입합니다.
\ 한 줄로 된 명령을 여루 줄로 표현할 때 사용합니다.
$ sudo docker run -d --name hello busybox:lastest
$sudo docker run \
> -d \
> --name hello \
> busybox:latest
{1..10} 연속된 숫자를 표현합니다.
{시작숫자..끝숫자}형식입니다.
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
{문자열1,문자열2} {}안에 문자열을 여러 개 지정하여 명령 실행 횟수를 줄입니다.
다음은 hello.txt, world.txt 두 파일을 한번에 hello-dir디렉터리 아래에 복사합니다.
$ cp ./{hello.txt,world.txt} hello-dir/
if if 조겅문입니다.
변수와 변수끼리 또는 문자열과 비교할 때 사용합니다.
 if [ $a -eq $b]; then
> echo $a
> fi
숫자 비교
-eq : 같다
-ne : 같지 않다
-gt : 초과
-lt : 미만
-le : 이하
문자비교
=, == : 같다
!= : 같지 않다
-z : 문자열이 null 일때
-n : 문자열이 Null 이 아닐 때
for for 반목분입니다. 
변수 안에 있는 값을 반복하거나 범위를 지정하여 반복할 수 있습니다.
NUM={1 2 3}
for i in ${NUM[@]}
do
echo $i
done
while while 반복문입니다.
while : 
do
echo "Hello World";
sleep 1;

done
 <<< 문자열을 명령(브로세스)의 표준 입력으로 보냅니다.
$ cat <<< "User name is $USER"
User name is root
<<EOF
EOF
여러 줄의 문자열을 명령(프로세스)의 표준입력으로 보냅니다.
cat > ./hello.txt <<EOF
Hello World
Host name is $(hostname)
User nane is $USER
EOF
cat 은 파일이나 표준 입력의 내용을 출력하는 명령입니다.
cat의 표준 출력을 ./hello.txt로 저장하고, <<EOF로 문자열을 cat의 표준 입력으로 보냅니다.
이렇게 하면 문자열 3줄이 ./hello.txt파일에 저장됩니다.
export 설정한 값을 환경 변수로 만듭니다.
export <변수>=<값> 형식입니다.
$ export HELLO=world
printf 지정한 형식대로 값을 출력합니다.
파이프와 연동하여 명령(프로세스)에 값을 입력하는 효과를 낼 수 있습니다.
$ printf 80\\nexampleuser\\ny | example-config
예를들어 example-config는 post, user, save configration을 사용자에게 입력받습니다.
printf로 미리 값을 설정하여 파이프로 example-config에 넘겨주면 사용자가 입력하지 않아도 자동으로 값이 입력됩니다.
줄바꿈은 \\n으로 표현합니다.
sed 텍스트 파일에서 문자열을 변경합니다.
hello.txt파일의 내용 중에서 hello라는 문자열을 찾아서 world문자열로 바꾸려면 다음과 같이 실행합니다.
$ sed -i "s/hello/world/g" hello.txt
sed -i "s/<찾을 문자열><바꿀 문자열>/g" <파일명> 형식입니다. 
/와 같은 특수문자는 앞에 \를 붙여 \/로 입력합니다.
# 주석입니다.
스크립트에 설명을 추가하거나, 명령이 실행되지 않도록 합니다.
# echo "Hello world"