리눅스 기본 명령어(03. 하드 용량 및 파일 압축, 인터넷)

디렉토리 및 하드 디스크 용량 확인

du

 du는 "Disk Usage"의 약어로서 파일 및 디렉토리의 사용량을 확인할 때 사용하는 명령어이다. 이 명령어는 df 명령어와 함께 리눅스에서 디스크의 사용량을 점검하고 확인하기 위해 자주 사용된다. 즉, df 명령어가 파티션(파일 시스템) 단위의 디스크사용량을 점검한다면 du 명령어는 특정 디렉토리 또는 파일을 단위로 하여 그 용량을 확인하는 명령어이다.
 아무 옵션 없이 du 명령을 내리면 해당 디렉토리의 서브 디렉토리별 용량 및 총합을 출력한다.
-a : 모든 파일들의 정보를 출력한다. 초기값은 경로(디렉토리)에 대한 정보만 출력한다.
-b : 출력 단위를 KB 대신 Byte로 한다.
-c : 모든 파일의 디스크 사용 정보를 먼저 보여주고 나서 합계를 출력한다. 초기값이다.
-k : 표시되는 숫자들의 단위를 512 바이트 블록 단위 대신 1KB 단위로 표시한다.
-l : 하드 링크되어 있는 파일이 있는 경우 그것을 그대로 계산한다.
-h : 표시되는 용량을 가장 알기 쉬운 용량단위(byte, Kbyte, Mbyte, Gbyte 등)로 표시한다.
-s : 지정된 디렉토리 내에 존재하는 모든 파일과 서브디렉토리들의 용량을 모두 합친 전체 용량을 출력한다.
-n : 모든 라인에 행번호를 붙임
-E : 각 라인 끝에 ‘$’ 표시

df

 df는 "Disk Free"의 약어로서 현재 사용 중인 파일 시스템의 전체 용량, 사용한 용량, 사용가능한 용량, 사용률, 마운트 정보 등을 보여준다. 아무런 옵션 없이 명령을 내리면 시스템의 파일 시스템 사용량 정보가 출력된다.
-a : 모든 파일 시스템을 대상으로 점검한다.
-i : 파티션별로 디스크 사용량 점검 시에 블록 사용 정보 대신에 inode 사용 정보 표시한다.
-k : 표시하는 숫자들의 단위를 512바이트 블록 단위 대신 1KB 단위로 표시한다.
-T : 디스크사용량을 출력할 때 파일 시스템의 종류와 함께 표시한다.
-t : 특정 파일 시스템의 종류만을 대상으로 디스크사용량을 조사한다.
-h : 표시되는 용량을 가장 알기 쉬운 용량단위(byte, Kbyte, Mbyte, Gbyte 등)로 표시한다.
-x : 특정 파일 시스템의 종류를 제외한 디스크사용량을 조사한다.

파일 묶음 및 압축 관련 명령어

tar

 tar는 여러 개의 파일을 하나의 파일로 묶어주는 것이다. 즉, 내부적으로는 여러 개의 파일이 공존하고 있는 것이다. 유닉스 시스템에서는 여러 파일을 하나의 파일로 묶는 작업과 압축하는 작업이 분리되어 있다. 따라서 압축을 위해서는 gzip 등의 다른 압축 프로그램을 사용해야 한다. 기본적인 사용법을 알아보자
새 tar 파일을 만들 때
$ tar -cvf tarfilename 디렉토리명 또는 파일명
tar 파일의 내용을 볼 때
$ tar -tvf tarfilename
tar 파일을 풀 때
$ tar -xvf tarfilename
-c(create) : 아카이브 생성
-x(extract) : 아카이브로부터 파일을 추출
-r(replace) : 아카이브된 파일에 새로 추가
-h : 심볼릭 링크의 모든 것을 아카이브
-t(table) : 목차 테이블 보기
-v(verbose) : 상세한 정보 출력에 추가
-u : 최근에 파일을 아카이브
-z : gunzip으로 압축하여 백업

gzip

 GNU에서 배포하는 압축 유틸리티로 compress에 비해 높은 압축률을 제공하여 많이 사용되어 왔다. 특히 GNU 그룹에서 배포되는 유틸리티들은 대부분 gzip으로 압축된 형태로 다운로드 받을 수 있다. gzip으로 압축한 파일은 .gz란 확장자가 추가된다.
 gzip으로 압축한 파일은 gunzip으로도 풀 수 있다. gunzip은 gzip으로 압축된 파일 외에도 compress로 압축한 파일로 압축을 풀 수 있다.
 만약 tar와 조합해서 사용하려면 tar에 -z 옵션을 추가하여 사용한다. 다음 예제에서 위는 압축이고 아래는 압축 해제이다.
$ tar -cvzf test.tar.bz2 test1.txt test2.txt ...
$ tar -xvzf test.tar.bz2
-1 : 가장 빠르게 압축
-6 : 기본값(보통 생략된 상태)
-9 : 최고의 압축률로 압축(속도는 느리다)
-d : 압축해제

bzip2

bzip2는 gzip과 명령 방식이 동일하다. gzip보다 압축률이 높기 때문에 요즈음에 잘 쓰인다. 다음은 sbin.txt를 압축했다가 다시 해제를 하는 예제이다. 옵션의 경우에 gzip과 비슷하지만 같지는 않다. gzip에서 사용되는 -c, -d, -f 옵션이 같은 기능으로 사용되고, 압축 파일의 확장자는 bz2이다. 기본 구문은 gzip과 동일하다.
$ bzip2 sbin.txt 
$ ls -al sbin.txt*
-rw-r--r--    1 liwa liwa    770  9월 3 19:01 sbin.txt.bz2
$ bunzip2 sbin.txt.bz2
$ ls -al sbin.txt*
-rw-r--r--    1 liwa liwa    1293  9월 3 19:01 sbin.txt
만약 tar와 조합해서 사용하려면 tar에 -j 옵션을 추가하여 사용한다. 다음 예제에서 위는 압축이고 아래는 압축 해제이다.
$ tar -cvjf test.tar.bz2 test1.txt test2.txt ...
$ tar -xvjf test.tar.bz2

xz

 xz는 gzip과 bzip2에 유사한 데이터 압축 툴이다. 확장자는 .xz 형식을 사용하지만, 구 버전의 .lzma 형식과 로압축스트림(raw compressed streams)도 지원한다. xz 패키지는 xz, unxz, xzcat, lzma, unlzma 및 lzcat 명령을 사용하여 .xz 및 .lzma 형식의 파일들을 압축하거나 압축해제할 수 있다.
xz을 이용한 압축과 압축해제는 gzip이나 bzip2와 동일하게 수행하면 된다.
$ xz sbin.txt
$ xz -d sbin.txt.xz
만약 tar와 조합해서 사용하려면 tar에 -J 옵션(대문자이며 소문자 j는 bzip2에 사용한다)을 추가하여 사용한다.
$ tar -cvJf test.tar.bz2 test1.txt test2.txt ...
$ tar -xvJf test.tar.bz2

인터넷 활용 관련 명령어

telnet

 telnet은 원격 서버로 로그인하는 대표적이고 전통적인 원격 접속 로그인 도구이다. telnet과 함께 rlogin이 사용되지만 현재는 보안 문제로 인하여 암호화 통신이 가능한 ssh라는 프로그램을 많이 사용한다. 따라서 리눅스 서버에서 ssh만 사용하도록 설정하면 telnet 접속이 불가할 수 있다.
 telnet 명령어는 텔냇 모드와 쉘프롬프트에서 특정 사이트로 원격 접속할 수 있다. 그렇지만 대부분의 사용자들은 쉘프롬프트에서 바로 원격 접속한다. 접속할 때 IP 주소나 도메인 이름으로 접속이 가능하고, /etc/hosts 파일에 호스트가 설정되어 있으면 호스트명으로도 접속이 가능하다.
$ telnet hostname 또는 IP adress port
-포트 번호 생략기본 텔넷 포트는 23번 포트로 접속 시 해당 포트로 접근

ftp

 ftp는 FTP(File Transfer Protocol) 프로토콜을 이용하여 FTP 서버에 연결하는 FTP 클라이언트로서 원격지의 서버에서 파일을 가져오거나(download) 해당 서버에 파일을 가져다 놓을(upload) 수 있는 클라이언트 프로그램이다. 최근에는 보안 문제로 ssh 클라이언트 프로그램의 일부로서 sftp를 많이 사용하지만, 서버 사용자들의 편의를 위해 아직 ftp를 사용하는 경우도 많다.
 ftp도 telnet과 마찬가지로 FTP모드와 쉘프롬프트상에서 모두 접속이 가능하다. 그렇지만 대부분의 경우에 사용자는 쉘프롬프트상에서 접속한다.
$ ftp hostname 또는 IP address
접속 후에 사용할 수 있는 명령어에 대해 간략하게 살펴보자.
ascii/binary : 파일의 전송 모드를 바꾸는 것이다. as나 bi와 같이 간단하게 앞의 한두자리 글자만 적어 주어도 인식한다.
cd : 디렉토리 이동 명령이다.
dir/ls : 디렉토리의 내용물을 출력한다.
delete : 파일을 삭제한다.rmdir : 디렉토리를 삭제한다.get : 서버에 있는 파일을 로컬 시스템으로 복사한다.mget : 여러 개의 파일을 로컬 시스템으로 복사한다.put : 로컬시스템에 있는 파일을 서버로 전송한다.
mput : 여러 개의 파일을 서버로 전송한다.
lcd : 클라이언트의 로컬 시스템의 디렉토리 이동 명령이다.
bye/quit : 접속을 끊는다.
append : 이어 올리기 명령이다.
reget : 이어 받기 명령이다.
user : 아이디와 패스워드를 입력하여 다시 로그인 할 수 있도록 하는 명령이다.
size : 원격의 ftp 서버에 있는 파일의 크기를 출력
mkdir : 새로운 디렉터리 생성
pwd : 서버에서 현재 경로 출력
rename : 파일이나 디렉터리 이름을 변경
open : ftp 호스트로 접속
hash : # 마크를 찍어서 전송상채 확인
prompt : 대화형 모드(interactive mode) on/off

ifconfig

 ifconfig는 현재 시스템에 장착되어 있는 네트워크 인터페이스를 설정하거나 확인하는 명령어이다. 서버가 통신을 하기 위해서는 네트워크 인터페이스(NIC, 흔히 랜카드)가 있어야 하는데, 이러한 네트워크 인터페이스의 네트워크 정보를 설정, 변경 및 확인하는 명령어가 ifconfig이다.
 간단하게 ifconfig 라고만 명령을 내리면 현재 서버에 인식되어 있는 모든 네트워크 인터페이스의 설정 내용이 출력된다.
 그리고 ifconfig 명령어 뒤에 네트워크 인터페이스 이름을 적어 주면 해당 네트워크 인터페이스에 대한 네트워크 설정 내용을 확인할 수 있다.
ipconfig : 네트워크의 인터페이스 설정 또는 확인하는 명령어

ping

 컴퓨터의 네트워크가 정상적으로 동작중인지 확인해 볼 때 사용하는 도구이다. ping은 특정 호스트로 ICMP(Internet Control Message Protocol) 에코 메시지를 사용해서 원격 호스트가 다시 로컬 호스트로 응답하도록 한다. 기본적으로 ping 명령어를 사용한다.
$ ping [옵션대상 IP : 원격의 호스트의 연결 상태 확인
-s : 사용할 패킷 사이즈 크기를 설정한다.
-q : 결과를 지속적으로 보여주지 않고 종합 결과만 출력한다.
-i : interval, 즉 지연시간을 설정한다.
-b : 테스트하는 서버와 동일한 네트워크에 있는 모든 호스트로 패킷을 보낸다.
-c : 테스트 시 보낼 패킷 수를 지정한다.
-C 개수 몇 개의 패킷을 보낼 것인지 설정기본적으로 무한
-w 초 패킷을 보내고 몇 초 후에 샐행을 멈출 것인지 설정
-ttl : 라우터를 거칠 때마다 1씩 감소한 ms 기본적으로 255를 갖는다.
 ping은 인터럽트 신호(+c)를 보내기 전까지 계속해서 ping을 보내고, 인터럽트 신호를 보내면 그 때까지 보낸 패킷에 대해 통계 정보를 출력한다.

nslookup

nslookup은 인터넷 도메인 네임 서버에 사용자가 직접 도메인 이름을 질의할 수 있도록 해주는 프로그램이다. 이 프로그램을 통해 누구나 네임서버에 직접 질의하여 도메인 네임 서버가 가지고 있는 정보를 검색할 수 있다. 이를 통해 사용자는 도메인 네임 서버가 올바르게 설정되고 동작하고 있는지를 확인할 수 있다.
① nslookup 모드
nslooup 프로그램은 사용자에게 두 가지 모드를 제공하는데, 하나는 도메인 네임 서버에 특정 도메인 이름에 대한 질의를 하고 이에 대한 결과를 받는 '비대화형(non-interactive)모드'이고 다른 하나는 프로그램과 대화를 지속하면서 다양한 호스트나 도메인 네임들에 대해 질의를 하고 이에 대한 결과를 받는 '대화형(interactive)모드'이다.

* 비대화형(non-interactive) 모드
 sulinux.co.kr의 IP 주소가 궁금하여 nslookup을 사용하는 경우에, 다음과 같이 입력한다면 nslookup을 '비대화형(non-interactive)모드'로 구동한 것이다. nslookup이 시스템의 기본 도메인 네임 서버로 설정되어 있는 162.124.101.2 라는 IP 주소를 출력하고 사용자가 질의한 sulinux.co.kr이라는 호스트의 IP 주소를 출력한 것을 볼 수 있다.

* 대화형(interactive) 모드
 '대화형(interactive)모드'는 위의 '비대화형(non-interactive)모드'보다 더 자주 사용된다. 이유는 '대화형(interactive)모드'가 도메인 네임 서버가 가지는 여러 가지 복잡한 정보들을 쉽게 찾아 볼 수 있는 강력한 기능을 제공하기 때문이다. '대화형(interactive)모드'에 들어가기 위해서는 쉘에서 'nslookup'을 입력하고, 이 모드를 종료하기 위해서는 'exit' 혹은 CTRL+D(^D)를 입력하면 된다.

② Non-authoritative answer와 Authoritative answer
nslookup에 도메인 네임을 질의하면 보통 돌아오는 답에 'Non-authoritative answer' 라고 붙어 있을 것이다. 이것은 현재 사용하고 있는 네임서버에는 해당 도메인에 대한 캐시(Cache)가 저장되어 있고 현재 이 대답은 잘못된 답(Non-authoritative answer)일 수도 있다는 말이다. 도메인 정보를 갱신(refresh) 하기 전에 주 서버(Primary Name Server) 가 정보를 수정할 수도 있는 일이기 때문이다.
이에 대해, 믿을 만한(Authoritative) 대답을 얻고 싶다면 도메인을 직접 관리하는 서버에 질의를 해야 한다. 서버를 변경해서 질의를 하고 싶다면 'server' 라는 명령을 사용한다.

netstat

netstat는 현재 연결된 네트워크 연결과 라우팅 테이블, 인터페이스에 대한 통계, 마스커레이딩 연결, 멀티캐스팅 정보 등을 보여준다. 즉, netstat 명령으로 어떤 호스트(또는 서버)들과 어떤 서비스로 연결되어 있는지와 그 연결상태는 어떠한가에 대한 정보들을 알 수 있다.
-a, --all : listen되는 소켓정보와 listen 되지 않는 소켓 정보 모두 보여준다.
-n, --numeric : 10진수의 수치정보로 결과를 출력한다.
-r, --route : 설정된 라우팅 정보를 출력한다.
-p, --program : 실행되고 있는 각 프로그램과 PID 정보를 출력한다.
-i, --interface=iface : 모든 네트워크 인터페이스 정보를 출력한다. 또는 특정 네트워크 인터페이스를 지정할 수 있다.
-c, --continous : netstat 결과를 연속적으로 출력한다.
-l, --listening : listen 되고 있는 소켓 정보를 출력한다.
-s, --statistics : 각 프로트콜에 대한 통계정보를 출력한다.
-C : 계속되는 리스트를 출력
-i 옵션은 해당 호스트에 설치된 인터페이스에 대한 정보를 출력한다. lo(loop back) 는 자기 자신을 가리키는 기본 주소로서 기본으로 설정되는 인터페이스이다.
-r 옵션은 라우팅 테이블을 출력하라는 것이고, -n 옵션은 도메인 주소를 질의하지 말고 IP 주소 그대로 출력하라는 옵션이다. 그래서 -rn 옵션은 route -n 을 했을 때와 비슷한 결과가 나온다. 이것은 아직 설정이 되지 않아 도메인 네임 서버에 접속이 불가능하거나 접속 시간을 아끼고 싶은 경우 사용하면 유용하다.

traceroute

traceroute는 지정된 대상 호스트(서버)까지 어떤 경로를 거쳐서 통신이 이루어지는가를 알아보는 명령어이다. 즉, 이 명령어는 대상 호스트까지의 통신경로를 추적한다. 참고로 대상호스트까지의 통신이 가능한가를 확인하는 명령어가 ping이라고 한다면 대상 호스트까지의 통신경로를 확인하는 명령어가 traceroute이다.
 제일 앞에 나오는 수는 홉(hop, 거쳐 가는 게이트웨이)을 나타내는데, 하나의 게이트웨이를 지날 때마다 1씩 증가한다. 다음으로 게이트웨이의 이름이 나온다. 특정 이름이 없는 경우는 해당 게이트웨이의 IP주소가 나오며 다음으로 괄호 안에 게이트웨이의 IP주소가 나온다. 다음으로 나오는 3개의 숫자는 1000분의 1초(ms) 단위의 게이트웨이까지의 라운드-트립 시간이다. 만약 패킷이 전달되지 못하면 대신 별표(*)를 출력하게 된다.

host

host는 도메인 네임 서버에서 도메인의 설정 정보를 찾기 위한 간단한 유틸리티이다. 이것은 보통 도메인 이름들을 IP 주소로 바꿔서 정보를 알려 주기 위해 사용된다. host 명령은 nslookup명령과 마찬가지로 /etc/resolv/conf 에 설정된 도메인 네임 서버를 기본 네임서버로 인식한다.

hostname

hostname은 시스템의 호스트명을 출력하거나 변경하는 명령어이다. 현재 시스템의 호스트명을 확인하기 위해 가장 일반적으로 사용된다. 또한 이 명령어에서 사용할 수 있는 특정 옵션을 사용하여 호스트명과 도메인을 구분하여 출력할 수도 있다.
 현재 시스템의 호스트명을 확인하려면 hostname 명령어만 사용하면 된다.
그리고 호스명을 host4로 변경하려면 다음과 같이 한다.
# hostname host4
# hostname
host4
-s : 도메인 부분을 제외한 호스트명만 출력한다.
-d : 호스트명을 제외한 도메인만 출력한다.
-f : 현재 시스템의 호스트명과 도메인명을 모두 출력한다.
-a : 호스트의 alias 이름을 출력한다.
-i : 호스트의 IP 주소를 출력한다.
-v : 진행 상황을 출력한다.

시스템 종료와 재부팅 관련 명령어

shutdown

리눅스 시스템에서 가장 흔하게 사용하는 종료(재시작) 방법이 shutdown이라는 명령어를 이용하는 것이다. 즉, shutdown을 사용하면 시스템 관리자가 원하는 모든 방법으로 시스템을 종료하거나 재시작 할 수 있다.
-k : 실제로 종료하지 않고 모든 사용자에게 경고 메시지를 보낸다.
-r : 시스템 종료 후에 재부팅을 한다.(reboot). 경고 메시지를 알리고 일정시간 후에 시스템을 종료하도록 할 수 있다.
-h : 시스템을 종료하며 재부팅을 하지 않는다(halt). 경고 메시지를 알리고 일정시간 후에 시스템을 종료하도록 할 수 있다.
-c : 이전에 내렸던 shutdown 명령을 취소한다. 즉, shutdown 명령을 통해 시스템 종료를 예정한 경우에 이 옵션을 사용할 수 있다.
그런데 리눅스는 디스크의 빠른 작동을 위해서 읽기/쓰기 버퍼를 사용한다. 따라서 필요한 경우에만 디스크에 쓰기 작업을 수행하며 같은 디스크 상에서의 다중 읽기 작업은 디스크에서 읽는 것이 아니라 메모리에서 직접 읽어 들인다. 디스크는 CPU나 메모리에 비해 속도가 느리기 때문에 이러한 방법을 사용하면 사스템의 성능이 향상된다. 그러나 시스템이 전원이 갑자기 차단되거나 리부팅이 되면 메모리에 있던 데이터가 디스크에 쓰여지지 않고 자료를 잃어버리게 된다. 때에 따라서는 시스템에 치명적인 손상을 주기도 한다. 따라서 시스템을 종료하거나 재부팅을 할 경우에는 메모리에 있는 데이터를 디스크에 기록해 주어야 한다. 이를 위해서 sync 명령을 사용한다.
 그리고 다음과 같이 shutdown 명령을 내리면 시스템이 종료된다. shutdown 뒤에 -h 옵션은 시스템의 종료를 의미하는 옵션이고 now는 지금 즉시 종료하는 것을 의미한다.여기에서 now 대신에 +20과 같이 "+숫자"를 기재하면 해당 분 후에 shutdown을 수행하는 것을 의미한다. 즉, "shutdown -h +20"이라고 명령을 내리면 20분 후에 shutdown 명령에 의해 시스템이 종료된다. 그리고 마지막에 "shutdown -h +20 메시지"로 명령을 내리면 로그인 한 사용자들에게 해당 메시지를 보내고 20분 후에 시스템 종료하게 된다.
 만약 시스템을 재부팅하는 경우라면 shutdown에 -h 옵션 대신 재부트(reboot)의 의미를 가지는 -r 옵션으로 명령을 내리면 된다. 이때에도 shutdown 명령 뒤에 재부트 시간 및 메시지를 지정할 수 있다.
 이에 대해, 단순히 로그인 대기 상태로 만들려면 콘솔 상에서 logout이나 exit 명령을 내리면 된다.

reboot

시스템을 재부팅하는 경우에 "shutdown -r" 명령 대신에 reboot 명령을 내릴 수도 있다.

halt

시스템을 종료하는 경우에 "shutdown -h" 명령 대신에 halt 및 poweroff 명령을 내리면 시스템이 종료된다. halt는 시스템을 종료하는 것을 의미하고 poweroff는 시스템 종료 후에 파워를 내리는 것을 의미하는 것이다. 그렇지만 두 명령어의 용도와 옵션이 거의 동일하므로. 두 명령어는 동일한 것으로 보아도 좋다.

댓글

이 블로그의 인기 게시물

OverTheWire.org Bandit Level 24 -> Level 25

OverTheWire.org Bandit Level 12 -> Level 13

OverTheWire.org Bandit Level 25 -> Level 26