Kali Linux 기초 Part. 3 명령어 구조

2025. 3. 18. 11:47보안/Linux

Kali Linux 기초 가이드는 normaltic 강의를 참고하여 제작하였습니다.

 

1. 명령어 구조

리눅스에서 명령어를 사용할 때 알아야할 규칙이 있습니다.

 

명령어, 전달 인자, 옵션

한개씩 알아 보자면,

 

1. 명령어 (Command)

앞에서 알아본 id, clear, ifconfig 이런 것들은 명령어 이다. 컴퓨터에서 특정 동작을 하고 싶을 때 그에 맞는 명령어를 입력하게 된다. 근데, 이 명령어들은 사실 하나 하나가 프로그램이다. id 라는 것도 하나의 프로그램이고, clear도, ifconfig도 다 프로그램이다.

 

그 프로그램이 어디있는지 알아보자, 아래의 명령어를 입력하게 되면,

 

which id

 

 

which 라는 명령어는 어떤 명령어의 실제 프로그램 위치를 확인해 볼 수 있는데,

 

which id 라고 입력하면 id 명령어가 어디있는 프로그램을 실행 시킨것인지 확인할 수 있다.

결과를 보면 /usr/bin/id 라고 나와있다.

이 말은 즉 /usr 디렉토리 안에 bin 이라는 디렉토리가 있는 데, 바로 그 곳에 id 라는 프로그램이 있다는 것을 확인할 수 있다.

 

그래서 id라고 명령어를 입력해도 되지만, 직접 이 경로를 적어서 실행할 수도 있다.

 

 

2. 전달 인자 (Argument)

앞에서 사용한 명령어는 which라는 명령어 인데, 이 명령어 뒤에 id 라는 데이터를 함께 입력해줘야 한다. 이렇게 명령어가 실행되려면 전달해줘야하는 데이터가 필요한 명령어들이 있는데, 복사하기 명령어를 생각해보자.

 

컴퓨터에게 그냥 복사해! 라고 명령을 하게되면 컴퓨터는 어떤파일을 복사해야 되는지 당연히 모른다. 우리도 다짜고짜 사와! 라고 안하고, 우유 사와! 라고 말하 듯이 컴퓨터 에게도 test 라는 파일을 복사해! 라고 이야기를 해줘야 한다.

 

이렇게 명령어가 실행될 때 필요한 데이터를 전달 인자(argument)라고 합니다. 영어로 줄여서 arg라고 표현한다.

전달 인자를 사용할 때는 명령어 뒤에 공백(띄어쓰기)를 기준으로 데이터를 입력한다. 전달 인자의 경우 쓰는 순서도 중요!

 

[Example]
cp ~/usr /tmp/usr

명령어 : cp, 첫번째 인자: ~/usr , 두번째 인자: /tmp/usr

 

Which id 라는 예시에서 명령어는 Which, 전달 인자는 id 이다.

 

3. 옵션 (Option)

명령어를 실행할 때, 명령어 단독으로 실행되는 명령어(전달 인자가 필요없는 명령어)들도 있고, 전달 인자가 필요한 명령어들도 있다. 그리고 추가적으로 옵션을 지정해서 명령어의 동작을 커스터마이징할 수 있는데, 이 옵션은 각각의 명령어들마다 다 다르다.

 

기본적으로 옵션은 -(하이픈) 기호와 함께 사용하게 되는데, (어떤 옵션은 --을 사용함)

 

우리가 처음에 설치할 때 사용했던 명령어

 

ping -c 3 8.8.8.8

 

이 명령어 에서의 옵션은 바로 -c 3 인것이다.

ping : 명령어 , -c 3 : 옵션, 8.8.8.8 : 전달인자

 

ping 이라는 명령어는 특정 IP 주소에 데이터를 테스트 겸 날려보는 명령어 이다. 8.8.8.8은 구글 DNS 서버 IP 주소인데, 구글 DNS서버에 데이터가 잘 도착하는지 테스트를 하는 것이다.

 

그럼 옵션 없이 실행 해보자

ping 8.8.8.8

 

옵션 없이도 잘 실행되는 것을 확인 할 수 있다.

하지만 멈추지 않고 계속 데이터를 주고 받아서 확인하는 것을 알수 있다. 이것은 옵션을 지정하지 않아서 리눅스가 꺼지지 않는한, 계속해서 테스트를 할 것이다.

멈추기 위해서 Ctrl + C를 누르면 멈추게 된다.

 

이렇게 명령어 수행은 정해진대로 하는데 옵션을 이용해 커스터 마이징 할 수 있다.

위에서 봤던 옵션 -c 는 특정 횟수만 전송하는 옵션이다. 우리는 -c 3 으로 옵션을 지정 했었는데, 이것은 3번만 데이터를 확인하는 옵션인 것이다.

 

 

아까 전달인자는 순서가 중요하다고 했었는데, 옵션은 앞에 붙든, 뒤에 붙든 어디에 오든 상관없다. 예를 들어 ping 8.8.8.8 -c 3이 와도 상관 없다는것이다.

 

하다보면 모를 수도 있다. 이를 사용 하기위해 명령어 뒤에, -h 옵션을 붙여서 실행하면 그 명령어를 사용하는 방법(전달 인자에 뭐가 오고 등등), 옵션이 뭐가 있는지 알 수 있다.

 

이런 식으로 명령어 사용법을 모르게 되면 뒤에 -h를 붙혀보자!

 

2. 리다이렉션 (Redirection) & 파이프 (Pipe)

리다이렉션 : 명령어의 출력 결과를 파일에 저장하거나 입력 데이터를 변경하는 방식

파이프 : 하나의 명령어를 출력을 다른 명령어 입력으로 연결하는 방식

 

1. 리다이렉션 (>, >>, <)

echo "Hello Kali!" > hello.txt			# "Hello Kali!"를 hello.txt에 저장
ls -l >> output.txt				# 파일 목록을 output.txt에 추가 저장
cat < hello.txt					# hello.txt의 내용을 읽어서 출력

보면 Desktop에 echo "Hello kali"를 hello.txt에 저장하고, 파일 목록을 output.txt에 저장하고 cat으로 불러온 것을 확인할 수 있다. 이처럼 리다이렉션을 활용 할 수 있다.

 

2. 파이프 ( | )

ls -l | grep "test"		# 'ls -l' 결과에서 'test' 포함된 줄만 출력
ps aux | grep firefox		# 실행 중인 프로세스 중 firefox 관련 프로세스만 출력

이렇게 ls -l 결과 에서 바탕화면에 있는 hello.txt만 출력하는 것을 볼수 있고, ps aux에서 firefox 관련된 프로세스만 출력한 것을 볼 수있다. 이처럼 | 를 통해서 ls -l라는 출력을 다른 명령어 grep 명령어 입력으로 연결해서 입력 할 수있다.

이처럼 리다이렉션과 파이프를 사용하면 더 효과적으로 명령어를 사용할 수 있다.

다른 포스팅에서 더 정확하게 설명 하도록 하겠다.