nslookup 명령은 DNS에 질의해 도메인 정보를 조회하는 명령어다. host명령어를 사용해도 비슷한 결과를 조회할 수 있다.

 

nslookup 명령어 사용(도메인, ip)

가장 단순한 사용법이다. 

#nslookup명령어로 google.com도메인의 정보를 조회
~$ nslookup google.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   google.com
Address: 142.250.206.238
Name:   google.com
Address: 2404:6800:400a:80c::200e


#비슷한 결과를 낼 수 있는 명령어인 host명령어 사용
~$ host google.com
google.com has address 172.217.25.174
google.com has IPv6 address 2404:6800:400a:80a::200e
google.com mail is handled by 10 smtp.google.com.

결과에서, 첫 번째 두 줄은 DNS 서버 정보를 보여준다. "Server"는 현재 사용 중인 DNS 서버의 IP 주소를, "Address"는 DNS 서버의 포트 번호를 나타낸다.

세 번째 줄은 "Non-authoritative answer"로 시작한다. 이는 조회한 정보가 공식적인 출처에서 제공된 것이 아니라, DNS 서버의 캐시에서 가져온 것이라는 의미다.

마지막 두 줄에서는 조회한 도메인 이름과 해당하는 IP 주소가 표시된다. 위의 예시에서는 "www.google.com" 도메인 이름의 IP 주소가 "142.250.206.238"임을 알 수 있다.

 

특정 DNS 서버에서 조회

조회할 때 사용할 DNS 서버의 ip주소도 지정해서 명령어를 사용할 수 있다.

#nslookup (도메인/IP) (DNS 서버 IP)
~$ nslookup google.com 168.126.63.1
Server:         168.126.63.1
Address:        168.126.63.1#53

Non-authoritative answer:
Name:   google.com
Address: 142.250.207.110
Name:   google.com
Address: 2404:6800:400a:80b::200e

결과는 거의 같은 것을 볼 수 있지만 질의한 DNS 서버가 달라 

Server와 Address가 따로 DNS 서버를 지정해주지 않았을 때와는 다른 것을 볼 수 있다.

 

질의 타입 지정

어떤 것을 질의할지 타입을 지정해서 정보를 조회할 수도 있다.

 

이때, '-query=[type]' 옵션을 사용한다.

#mx(메일 서버)타입의 결과를 질의
~$ nslookup -query=mx google.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
google.com      mail exchanger = 10 smtp.google.com.

Authoritative answers can be found from:
smtp.google.com internet address = 64.233.187.26
smtp.google.com internet address = 64.233.188.27
smtp.google.com internet address = 74.125.203.26
smtp.google.com internet address = 74.125.203.27
smtp.google.com internet address = 74.125.204.27
smtp.google.com has AAAA address 2404:6800:4008:c03::1a
smtp.google.com has AAAA address 2404:6800:4008:c03::1b
smtp.google.com has AAAA address 2404:6800:4008:c04::1b
smtp.google.com has AAAA address 2404:6800:4008:c05::1b

위에서 사용한 mx타입 외에도 다른 타입들을 조회하는 것도 가능하다.

  • NS (name server)
  • ANY (호스트에 관련된 모든 정보)
  • UINFO (사용자 정보)
  • MINFO (메일 리스트 정보)
  • PTR (IP 주소에 대한 호스트명)
  • A (각 호스트에 대한 IP주소)
  • LOC (해당 도메인의 물리적인 위치)

이 외에도 많은 정보를 조회할 수 있는데, 그에 대한 옵션들은 https://en.wikipedia.org/wiki/List_of_DNS_record_types 에서 확인할 수 있다.

 

Interactive Mode

아무 옵션도 인자도 주지않고 명령어를 실행하면 Interactive(상호작용) 모드가 실행된다.

사용자가 원하는 만큼 질의를 할 수 있다. 조회하는 질의 타입은 set query=[query]로 실행한다.

~$ nslookup
> google.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   google.com
Address: 142.250.206.238
Name:   google.com
Address: 2404:6800:400a:805::200e
> set query=mx
> naver.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
naver.com       mail exchanger = 10 mx3.naver.com.
naver.com       mail exchanger = 10 mx2.naver.com.
naver.com       mail exchanger = 10 mx1.naver.com.

Authoritative answers can be found from:
mx1.naver.com   internet address = 125.209.238.100
mx2.naver.com   internet address = 125.209.238.137
mx3.naver.com   internet address = 125.209.222.14

 

리눅스 운영체제에서는 파일과 디렉토리를 포함한 모든 객체들에 대해 read, write, execute 권한이 적용된다.

파일의 권한

  • 파일의 read 권한: 파일을 읽을 수 있다. 즉, 파일의 내용을 볼 수 있다.
  • 파일의 write 권한: 파일을 쓸 수 있다. 즉, 파일의 내용을 수정할 수 있다.
  • 파일의 execute 권한: 파일을 실행할 수 있다. 즉, 파일이 실행파일인 경우 실행할 수 있다.

위의 권한들은 아래처럼 파일의 권한 정보로 나타낼 수 있다.

 

예시 : 파일 "example.txt"에 대해 read와 write 권한이 있고 execute 권한이 없는 경우

-rw-r--r--

위의 권한 정보에서 첫 번째 문자인 "d"는 디렉토리인 경우 "d"로 표기된다.

파일인 경우 "-"로 표기되고, 두 번째부터 열 번째 문자는 소유자, 소유자 그룹, 그 외 사용자 순으로 read, write, execute 권한을 나타낸다.

여기에서 "r"은 read 권한이 있는 것을 나타내며, "w"는 write 권한이 있는 것을, "x"는 execute 권한이 있는 것을 나타낸다. 권한이 없는 경우 "-"로 표기된다.

 

디렉토리의 권한

  • 디렉토리의 read 권한: 디렉토리 안의 파일 목록을 볼 수 있습니다.
  • 디렉토리의 write 권한: 디렉토리 안에 새 파일을 생성하거나 기존 파일을 삭제할 수 있습니다.
  • 디렉토리의 execute 권한: 디렉토리 안으로 진입할 수 있습니다. 이 권한이 없으면 디렉토리 안으로 진입할 수 없습니다.

디렉토리의 권한은 파일의 권한과 조금 다르다. 디렉토리의 execute 권한이 없으면 해당 디렉토리 안으로 진입할 수 없기 때문이다.

 

예시 : 디렉토리 "example"에 대해 read와 write 권한이 있고 execute 권한이 없는 경우

drw-rw-r--

맨 앞글자로만 디렉토리인지 파일인지 구분해주는 것을 제외하면 권한 표기 자체는 파일의 표기와 다르지 않다. 

 

파일/디렉토리의 권한 변경 명령어 : chmod

chmod 명령어는 파일이나 디렉토리의 권한을 변경하는 데 사용되며, 다음과 같은 형식을 가진다.

chmod [옵션] [모드] [파일/디렉토리]
  • 옵션: 권한을 변경할 때 사용할 옵션을 지정한다.
  • 모드: 권한을 변경하는데 사용된다.
  • 파일/디렉토리: 권한을 변경할 파일이나 디렉토리의 경로를 지정한다.

옵션은 아래와 같다.

  • -r: 하위 디렉토리와 파일에 대해 권한을 변경
  • -v: 변경된 파일과 디렉토리의 이름을 출력

모드에는 아래와 같은 기호, 숫자를 사용할 수 있다.

  • u: 소유자에 대한 권한을 지정
  • g: 소유자 그룹에 대한 권한을 지정
  • o: 그 외 사용자에 대한 권한을 지정
  • a: 모든 사용자에 대한 권한을 지정
  • +: 권한을 추가
  • -: 권한을 제거
  • =: 권한을 지정한 대로 설정
  • 숫자: 권한을 나타내는 숫자

예시1 : '+', '-' 기호를 사용해서 파일 "example.txt" 파일에 읽기 권한을 추가하고 쓰기 권한을 제거하는 경우

chmod +r-w example.txt

예시2 : 숫자표기를 사용해 "example_dir" 디렉토리의 권한을 변경하여 모든 권한을 제거하는 경우

chmod 000 example_dir

위 명령어에서 "000"은 모든 권한을 제거하는 것을 나타낸다. 따라서 이 명령어를 실행하면 "example_dir" 디렉토리의 권한이 모두 제거된다.

 

이 숫자표기는 순서대로 소유자, 그룹, 기타 순으로 표기되며 각 숫자의 의미는 이렇다.

권한 표기
읽기 r 4
쓰기 w 2
실행 x 1

예를 들어서 소유자가 읽기와 쓰기 권한을 가진 파일의 권한을 나타내기 위해서는 6(4+2)이라는 값을 사용하게 된다.

비슷하게 모든 권한을 가진 파일의 권한은 7(4+2+1)이라는 값을 사용한다.

이 권한값들은 위 예시처럼 chmod 명령어에서 사용되며, 파일이나 디렉토리의 권한을 변경할 때 사용한다.

grep 명령어는 파일 내의 문자열 검색에 사용되는 명령어이다.

grep 명령어의 기본 사용법은 이렇다.

grep [OPTIONS] PATTERN [FILE...]

여기서 OPTIONS는 옵션을 의미하며, PATTERN은 검색하려는 문자열 패턴, FILE은 검색 대상 파일을 나타낸다. 파일 이름이 제공되지 않은 경우, grep은 표준 입력에서 데이터를 읽어온다.

 

grep 명령어의 자주 사용되는 옵션들은 이렇다.

  • -i: 대소문자를 구분하지 않고 검색합니다.
  • -v: 지정한 패턴을 포함하지 않는 라인을 출력합니다.
  • -r: 하위 디렉토리를 재귀적으로 검색합니다.
  • -n: 검색 결과에서 일치하는 라인의 번호를 출력합니다.
  • -w: 패턴과 정확히 일치하는 단어만 검색합니다.
  • -c: 검색 결과의 갯수를 출력합니다.

몇가지 예시를 들어보자.

 

예시 1 : 파일 내에서 "apple"이라는 문자열을 찾는다면, 다음과 같이 입력한다.

grep apple file.txt

예시 2 : 파일 내에서 "apple"이라는 문자열을 대소문자를 구분하지 않고 찾는다면, 다음과 같이 입력한다.

grep -i apple file.txt

위와 같이 입력하면 대소문자를 구분하지 않고 "apple"이라는 문자열을 검색한다.

 

이와 같이 grep 명령어를 사용하여 파일 내의 문자열을 검색할 수 있다.

필요에 따라 다양한 옵션을 사용하여 검색 결과를 정밀하게 조정할 수도 있기 때문에 매우 유용하게 쓰인다.

데몬? 서비스?

리눅스에서 데몬(Demon)은 백그라운드에서 실행되는 프로그램을 말한다. 리눅스 시스템에는 많은 데몬들이 있고, 이 데몬들은 시스템의 여러 기능을 제공하는 역할을 한다. 예를 들어서, httpd 데몬은 웹 서버 기능을 제공하고, cron 데몬은 작업 스케줄링 기능을 제공한다. 그 외에도 하드웨어 장치 관리, 마운트(USB, HDD, 등 물리적인 장치를 디렉토리에 연결해주는 작업), 프로세스간 통신, 등 많은 일들을 한다.

 

서비스(Service)는데몬의 일종으로 특정한 데몬의 실행을 관리하는 기능을 한다. 서비스를 이용해서 다른 데몬을 손쉽게 시작하거나 중지할 수 있고, 부팅 시 자동으로 실행되도록 설정할 수도 있다.

 

데몬 예시 : httpd

httpd는 Apache HTTP Server의 데몬 이름이다. Apache HTTP Server는 인터넷 상에서 웹 서버를 운영하기 위한 프로그램 중 하나로, 전 세계적으로 많이 사용되는 웹 서버 중 하나다. httpd 데몬은 백그라운드에서 클라이언트로부터 HTTP 요청을 받아들여, 이에 따른 응답을 반환한다.  

 

#시험용 html페이지를 만든다.
$ echo "<html><body><h1>시험용 html 페이지 <h1><body><html>" > index.html

#html페이지가 생성됐는지 확인한다.
$ ls
index.html

#웹 서버를 실행하고, 8888번 포트를 통해서 접속 할 수 있도록 한다.
$ busybox httpd -h . -p 8888

#웹서버에 접속해 웹 서버가 제대로 열렸는지 확인한다.
$ curl http://localhost:8888
<html><body><h1>시험용 html 페이지 <h1><body><html>

#프로세스 확인 명령을 해서 httpd 데몬이 실행중인지 확인한다.
$ ps aux | grep httpd
ubuntu     10876  0.0  0.0   2456    76 ?        Ss   13:25   0:00 busybox httpd -h . -p 8888
ubuntu     10884  0.0  0.2   7004  2240 pts/0    S+   13:26   0:00 grep --color=auto httpd

#kill 명령어를 사용해 확인한 pid(process id)로 프로세스를 종료시킨다.
$ kill -9 10876

#웹 서버에 다시 접속하면, 접속이 불가능 한 것을 확인할 수 있다.
ubuntu@patient-rat:~$ curl http://localhost:8888
curl: (7) Failed to connect to localhost port 8888 after 0 ms: Connection refused

 

데몬 예시 : cron

cron은 시스템에서 주기적으로 실행되는 작업을 관리하는 데몬이다. cron 데몬을 사용하면, 특정 시간에 특정 작업을 실행하거나, 주기적으로 반복되는 작업을 실행할 수 있다.

예를 들어서, 백업파일을 만드는 스크립트를 매일 자정에 실행하도록 하거나, 아래처럼 매 분마다 날짜와 시스템 가동시간을 파일에 기록하는 명령을 실행할 수 있다.

#crontab -e를 사용해 cron으로 실행할 명령을 입력할 수 있다. 여러 에디터 중 하나를 선택해서 작성할 수 있다.
$ crontab -e
no crontab for ubuntu - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 1

#에디터를 열면
# * * * * * echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log
#를 입력해준다.
#이 명령은 
#'* * * * *'-> 매 분마다
#'echo $(/bin/date) - $(/usr/bin/uptime)date' -> date 명령의 출력과 uptime 명령의 출력을 합쳐서
# '>> ~/uptime.log' -> ~/uptime파일에 기록한다.
#라는 의미이다.

#에디터 사용이 끝나면 새 스케쥴 명령이 성공적으로 등록된 것을 확인할 수 있다.
crontab: installing new crontab

#시간이 지난 뒤에 uptime.log 파일을 확인해보면 작성한 예약명령이 정상적으로 작동하는 것을 확인할 수 있다.
$ cat uptime.log
Mon Mar 13 14:08:01 KST 2023 - 14:08:01 up 1 day, 23:54, 1 user, load average: 0.00, 0.00, 0.00
$ cat uptime.log
Mon Mar 13 14:08:01 KST 2023 - 14:08:01 up 1 day, 23:54, 1 user, load average: 0.00, 0.00, 0.00
Mon Mar 13 14:09:01 KST 2023 - 14:09:01 up 1 day, 23:55, 1 user, load average: 0.00, 0.00, 0.00
Mon Mar 13 14:10:01 KST 2023 - 14:10:01 up 1 day, 23:56, 1 user, load average: 0.00, 0.00, 0.00
Mon Mar 13 14:11:01 KST 2023 - 14:11:01 up 1 day, 23:57, 1 user, load average: 0.00, 0.00, 0.00

#가만 냅두면 uptime.log파일에 내용이 계속 쌓이게 되므로 crontab을 초기화 시켜줘야만 한다.
ubuntu@patient-rat:~$ crontab -r
ubuntu@patient-rat:~$ crontab -l
no crontab for ubuntu
  • 명령을 반복할 시간을 지정해주고 싶을 때

앞서 입력했던 명령어의 ' * * * * * ' 부분은 순서대로 분, 시각, 날짜(1달 기준), 달, 날짜(일주일 기준)을 말한다.

예를 들어서 ' 0 22 * * 1-5 ' 는 매주 월요일부터 금요일 22시 0분을, ' 5 4 * * sun' 은 매주 일요일 04시 5분을 말한다.

다른 예시는 https://crontab.guru/  에서 확인할 수 있다.

서비스 관리 (systemctl)

모든 데몬의 목록은 systemctl 명령으로 확인할 수 있다,

아래는 systemctl명령어의 간단한 사용 예이다.

#cron 데몬의 상태를 확인한다.
$ systemctl status -l cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-03-09 12:00:23 KST; 4 days ago
       Docs: man:cron(8)
   Main PID: 666 (cron)
      Tasks: 1 (limit: 1096)
     Memory: 2.5M
        CPU: 630ms
     CGroup: /system.slice/cron.service
             └─666 /usr/sbin/cron -f -P

Mar 13 14:08:01 patient-rat CRON[10972]: pam_unix(cron:session): session closed for user ubuntu
Mar 13 14:09:01 patient-rat CRON[10979]: pam_unix(cron:session): session opened for user ubuntu(uid=1000) by (uid=0)
Mar 13 14:09:01 patient-rat CRON[10980]: (ubuntu) CMD (echo $(/bin/date) - $(/usr/bin/uptime) >> ~/uptime.log)
Mar 13 14:09:01 patient-rat CRON[10979]: pam_unix(cron:session): session closed for user ubuntu

systemctl 명령어는 위에 있는 서비스 상태 확인 기능을 포함해서

  • 서비스 관리 (시작, 중지, 다시 시작, 재시작, 등)
  • 서비스 로그 보기
  • 시스템 로그 보기
  • 부팅 시 서비스 자동 실행 여부 확인

같은 기능들도 수행한다.

 

아래는 systemctl의 주요 하위 명령어들이다.

하위 명령어 설명
start 지정된 서비스를 시작한다.
stop 지정된 서비스를 중지한다.
restart 지정된 서비스를 다시 시작한다.
reload 지정된 서비스를 다시 로드한다.
status 지정된 서비스의 상태를 표시한다.
enable 지정된 서비스를 부팅 시 자동으로 시작되도록 설정한다.
disable 지정된 서비스를 부팅 시 자동으로 시작하지 않도록 설정한다.
mark 지정된 서비스를 비활성화 하고 완전히 차단한다.
unmask 지정된 서비스를 다시 활성화 한다.
is-enabled 지정된 서비스가 부팅 시 자동으로 시작되는지 여부를 확인한다.
list-units 현재 활성화된 모든 유닛(서비스, 타이머, 디바이스, 등)을 표시한다.
list-sockets 현재 활성화된 소켓을 표시한다.

 

+ Recent posts