본문 바로가기
정보보안/이론

[KITRI] Day4. 리눅스 기본 명령어-2

by 민-Zero 2020. 4. 23.


date 명령어

date : 현재 있는 서버의 시간 확인 

date -s 날짜정보 : 원하는 날짜로 서버 시간을 변경 

 

rdate 명령어

해당 명령어는 remote date라는 뜻으로 현재 리눅스 서버의 시간을 timeserver와 동기화할 때 사용하는 명령어이다. 리눅스는 주로 서버로 운용되는데 서버 시간은 서버에서 동작하는 여러 서비스에 영향을 주게 되기 때문에 항상 정확한 시간 정보를 유지하는 것이 좋다.

만약 현재 서버시간을 확인했는데 잘못된 시간정보가 입력되어 있다면 rdate를 통해 timeserver의 정확한 시간 정보와 동기화시킬 수 있다.

timeserver의 목록은 아래와 같다.

 

  • time.bora.net
  • time.nuri.net
  • time.windows.com
  • ntp.kornet.net
  • time.nist.gov

 

자주 사용하는 옵션을 정리하면 아래와 같다.
rdate -p timeserver : 시간 서버의 시간을 확인  
rdate -s time.bora.net : 시간 서버와 시간을 동기화(sync)


mv 명령어

mv 명령어는 move로 해당 명령을 사용하여 파일/디렉토리를 이동할 수 있다.

mv 명령을 사용하면 원하는 파일은 원하는 위치에 이동시킬 수 있다.

만약 mv 명령을 동일 디렉토리내에서 사용할 경우 이름 변경 용도로 사용할 수 있다.

 

mv source destination : src의 파일을 d로 이동, 이름 변경도 가능하다. 

 

mkdir, rmdir 명령어

make directory, remove dirctory의 뜻으로 touch를 통해 빈 파일을 생성했다면 mkdir을 통해 빈디렉토리를 생성할 수 있고 rm -r 뿐만 아니라 rmdir을 사용해도 디렉토리를 삭제할 수 있다.

mkdir명령어를 사용하면 원하는 경로에 디렉토리를 생성할 수 있다.

한 번에 여러 개의 디렉토리를 각 디렉토리 안에 순서대로 생성하고 싶다면 -p 옵션을 사용해야 한다. 그렇지 않으면 제일 최상위 디렉토리 dir10을 찾을 수 없기 때문에 생성이 되지 않는다. 삭제 또한 동일한 과정으로 진행된다.


mkdir 디렉토리명 : 해당 디렉토리 생성

rmdir 디렉토리명 : 해당 디렉토리 삭제
mkdir -p dir1/dir10/dir100 : parent옵션, dir1, dir10이 없어도 한 번에 다 생성
rmdir -p dir2/dir10/dir100 : 지우는 것 또한 마찬가지로 전부 지울 수 있다.


wc 명령어

파일의 통계를 내주는 명령어로 해당 파일의 라인수, 단어수, 문자수를 출력해준다.

wc file : 해당 파일의 라인수, 단어수, 문자수를 순서대로 보여준다.
wc -l file : line, 라인수만 보여준다.
wc -w file : word 단어수만 보여준다
wc -c file : character 문자수만 보여준다

 

cat, head, tail, more, less 명령어

vi에디터를 사용해도 파일의 내용을 확인할 수 있다. 하지만 파일의 내용만을 확인하기 위함이라면 주로 위 명령어들이 사용된다. 각 명령어들은 파일의 내용을 출력해주는 동일한 기능을 수행한다. 하지만 보여주는 방식의 차이가 존재한다.

cat명령어는 파일의 내용을 한 번에 출력해준다. 만약 파일이 긴 경우 스크롤을 통해 일일이 올려서 확인해야 한다.

head와 tail의 경우 서로 상반되는 기능을 가지고 있다. head는 파일의 내용 중 위에서부터 10줄 만을 보여준다. tail은 아래에서부터 10줄을 보여준다. 기본값이 10줄이고 옵션을 통해 보이는 줄 수를 변경하여 확인할 수 있다.

more과 less의 경우 파일내용이 길 때 주로 사용하는데 둘 다 페이지 단위로 보여주는 것은 같지만 less의 경우 vi편집기에서 사용하는 명령어를 사용하여 단어를 검색하는 등의 기능을 수행할 수 있다는 차이점을 가지고 있다.


cat 파일명 : 해당 파일의 내용을 한 번에 출력해 준다. 표준 입력을 받아 표준 출력하는 명령어
cat -n 파일명 : 라인 앞에 라인수를 추가해서 보여준다.
head 파일명 : 해당 파일을 앞에서부터 10줄만 출력해줌, 머리말을 보고 어떤 파일인지 보기 위해 주로 사용한다.
tail 파일명 : 해당 파일의 맨뒤 10줄만 출력, 주로 파일의 뒤쪽에 새로운 내용이 추가되기 때문에 최근에 추가된 내용을 파악하기 위해서 사용한다.
head -n 숫자 파일명 : 해당 파일의 앞 내용을 출력하는데 입력한 숫자만큼 보여준다. 
tail -n 숫자 파일명 : 해당 파일의 뒤 내용을 출력하는데 입력한 숫자만큼 보여준다.

(tail -숫자 파일명 <- 이렇게도 가능)
more 파일명 : 해당 파일을 페이지 단위로 내용을 출력해준다. enter를 누르면 한 행씩 넘어가고 space를 누르면 페이지 단위로 넘어가고 b를 누르면 이전 페이지로 올린다.
less 파일명 : more과 비슷하게 동작하고 vi편집기에서 사용하던 명령어 /,?를 이용하여 패턴검색을 할 수 있다.
cat -n 파일명 | more : 명령어를 조합하여 각 명령어의 장점들을 가지고 파일 확인할 수 있다. more은 라인수를 붙일 수 없기 때문에 cat -n을 통해 라인수를 붙이고 페이지 단위로 확인하기 위해 more로 확인하는 것이다.

 

이때 cat은 리다이렉션을 통해 새로운 파일을 생성함과 동시에 내용의 작성을 수행할 수 있다.

> : 리다이렉션, 표준 출력의 위치를 바꾸어준다. 따라서 cat을 통해 내용을 프롬프트로 출력하는 것을 원하는 위치로 출력하게 되어 위치를 파일로 설정할 경우 해당 파일에 내용이 출력되어 입력과 같은 기능을 수행하는 것이다. 
cat > file1 : 출력의 결과가 모니터로 끝나는 것이 아닌 file1에 저장이 된다. 
cat >> /etc/hosts : cat을 통해 작성한 입력을 hosts에 출력하기 때문에 내용을 추가할 수 있다. 
>는 새롭게 저장되기 때문에 기존의 내용이 전부 사라지지만 >>는 출력이 기존의 내용에 추가되는 형식이기 때문에 기존의 내용이 사라지지 않고 기존의 내용 밑에 추가된다. 

 


tar, gzip 명령어

각 명령어는 파일의 압축 및 해제를 위해 사용하는 명령어이다. 여러 개의 파일을 하나로 압축하기 위해 우선 tar를 사용해 여러 개의 파일을 하나의 파일로 묶고 묶어낸 파일을 gzip을 사용해 압축한다.

tar 명령어를 통해 현재 위치의 모든 파일 file1, 2, 3을 tie_file이라는 하나의 파일로 묶은 모습이다. 각 파일이 하나로 합쳐진 것은 크기가 합쳐진 것을 통해 확인할 수 있다.

gzip을 통해 파일을 압축하면 .gz이라는 확장자가 붙으며 파일의 용량이 확연히 줄어든 것을 확인할 수 있다.

 

각 명령어를 정리하면 아래와 같다.
tar cf 파일명 대상: 여기서 cf는 create file을 뜻하고, 여러 개의 목표 파일을 1개의 파일로 묶는데 지정한 이름으로 묶는다.
(tar cf file /etc : /etc에 존재하는 모든 파일들을 file이라는 이름으로 묶어서 생성해라.)
gzip 파일명: 1개의 지정된 파일을 압축한다. 결과로 .gz라는 파일이 생성된다.

 

이때 파일의 압축은 파일들을 하나로 묶은 다음 압축을 진행하는 과정을 동일하게 수행한다. 따라서 명령을 하나하나 쓰지 않고 한 번의 작성으로 수행하도록 연속 실행을 수행하게 된다.


명령 연속 실행

명령어1 && 명령어2 : 앞의 명령가 에러가 발생된다면 뒤에 명령이 실행되지 않는다.
명령어1 ; 명령어2 : 앞의 명령어의 실행 여부와 상관없이 다음 명령어 실행된다.
명령어1 | 명령어2 : 명령어1의 출력 값을 명령어2의 입력값으로 전달

tar cf file1 /etc && gzip file1 && mv file1.gz ~ : 주로 이 3개의 명령이 순차적으로 수행하며 앞의 명령에서 에러가 생기면 뒤에는 존재하지 않는 파일을 압축하거나 이동시키게 되기 때문에 &&으로 명령어를 이어서 수행시켜 에러 발생 시 명령을 수행하지 않도록 한다.

|의 경우 명령어 1의 출력 값을 명령어2로 전달하는 것이 이해가 잘 안 될 수 있다. 위의 예제를 통해 이해해 보면 cat /etc/passwd를 통해 한번에 passwd의 내용을 전부 출력하는데 굉장히 많은 내용이 출력된다. 그럼 | 명령어를 통해 해당 출력 값 전부를 뒤의 명령어에게 전달한다. 그럼 뒤의 grep root는 해당 출력물에서 root라는 글자가 들어간 부분만 찾아내 출력해주는 것이다.

 

file 명령어

file명령을 사용하면 대상 파일이 어떤 종류의 파일인지를 확인할 수 있다. 

리눅스는 윈도우처럼 .txt, .exe처럼 파일 확장명을 갖지 않으며 확장명을 가지고 있더라도 편리함을 위함이지 파일의 종류를 판한하는 절대적인 의미가 아니다. 따라서 어떤 파일인지 알고 싶다면 file 명령어를 사용해야한다. 


file 파일명 : 해당 파일이 어떤 종류의 파일인지, txt인지 바이너리 파일인지, 압축파일인지등

 


사용자 관리

사용자 생성 시 일어나는 일 순서
1. /etc/passwd 파일에 사용자 정보를 등록 user:x:uid:gid:comment:home direc:shell
2. /etc/shadow 파일에 사용자 암호 등록 user:Encrypted Password:마지막암호 수정일(1970/01/01 기준 얼마나 지났는지 일로 표현):암호보유min:암호 보유일 max:warning:invalid:expire:unused
3. /home 아래에 사용자 홈디렉토리를 생성 /home/user
4. /etc/skel 디렉토리의 파일들을 복사해서 사용자 홈디렉토리에 넣어준다.

사용자 생성 시 자동 부여되는 기본값들
1. UID는 마지막 생성된 UID에서 +1이 된 값이 부여
2. 사용자 홈디렉토리는 /home 아래에 생성
3. 사용자 기본 shell (/bin/bash)을 지정

 

useradd, usermod 명령어

사용자 아이디를 추가할 수 있는 명령어이다.

useradd 명령을 통해 사용자 계정을 생성할 수 있다.

아이디 생성시 적용되는 디폴트값은 /etc/login.defs 와 /etc/default/useradd에서 변경 가능하다. 바꿀수 있는 디폴트 값은 암호 최소 사용일, 최대 사용일, 암호 최소 길이, 자동 생성 UID GID, 홈디렉토리 생성 여부, UMASK 이다.

 

useradd 아이디 : 사용자 생성
useradd -u UID : 순차적으로 부여되는 UID대신 수정하고자 하는 UID로 변경
useradd -u UID -o: 순차적으로 부여되는 UID대신 수정하고자 하는 UID로 변경 이때 중복되는 UID값도 만들 수 있다.
useradd -d 홈디렉토리 : /home이 아닌 다른 위치에 홈디렉토리를 생성하고자 할 때 사용
useradd -s 쉘 : 기본 쉘이 아닌 다른 쉘을 부여
useradd -g 기본 그룹 : 기본 그룹을 변경할 때 사용
useradd -G 추가 그룹 : 다른 그룹에 추가 등록할 때 사용
useradd -D : 계정 생성 시 이용되는 디폴트 값을 확인할 수 있다.(/etc/default/useradd에 있다)
useradd -D -b 경로 : 계정 생성 시 홈디렉토리의 디폴트 값이 /home 이아닌 임의 경로로 변경
useradd -D -s 쉘 : 계정 생성 시 기본 쉘의 디폴트 값을 원하는 쉘로 변경
useradd -m user : 기본값이 홈 디렉터리 생성 안 할 때 해당 옵션을 사용하면 홈디렉토리 생성함
useradd -M user : 기본값이 홈디렉토리 생성할 때 해당 옵션을 사용하면 홈디렉토리 생성안함 

 

(tip. vi를 사용해 디폴트값을 변경하다가 잠시 다른 작업을 해야할 경우 ctrl+z 단축키를 통해 현재 작업 중이던 프로세스 백그라운드로 돌려 다른 작업후 제일 마지막 작업을 열는 명령어인 fg를 입력하면 다시 돌아온다) 

usermod 명령어의 경우 옵션을 포함한 사용방법이 useradd의 사용방법과 동일하다. 둘의 차이점은 useradd는 계정을 생성하면서 설정값을 수정하는 것이고 usermod는 이미 생성된 계정의 설정을 변경할 때 사용하는 것의 차이점이 존재하는 것이다. 

 

passwd 명령어

해당 명령어를 통해 생성한 사용자 계정의 비밀번호 생성 및 삭제의 기능을 수행할 수 있고 로그인에 관한 설정을 수행할 수 있다.

passwd : 모든 사용자가 가능한 명령어로 현재 접속중인 계정의 비밀번호를 설정할 수 있다.

여기서 부터는 root계정만 사용가능한 명령어이다.

passwd 계정명 : 지정한 계정의 비밀번호를 변경할 수 있다.

passwd -l 계정명 : 지정한 계정의 비밀번호에 lock을 걸어 해당 계정의 접속을 불가하게 한다.

passwd -d 계정명 : 계정의 비밀번호를 삭제한는 명령어로 비밀번호 입력 없이 로그인 할 수 있게 한다.

 

 

chage 명령어

사용자의 암호에 대한 설정을 변경해 줄 수 있는 명령어이다. 앞서 /etc/login.defs에서 변경한 것처럼 암호 사용 최소일, 최대 사용일 , 만료일, 만료 전 경고일 을 설정할 수 있다. 다만 해당 명령은 각 사용자별로 설정하고 login.defs를 수정하면 디폴트 값을 변경하여 생성 때마다 적용된다.

chage를 통해 각 사용자별로 사용자 암호에 대한 다른 설정값을 가지게 할 수 있다.


chage -l 사용자 : 사용자에 설정된 사항을 확인
chage -m 최소 사용일 사용자 : 해당 사용자의 최소 사용일을 결정한다.
chage -M 최대 사용일 사용자 : 해당 사용자의 최대 사용일을 결정한다.
chage -E 만료 날짜 사용자 : 만료 날짜를 2020/04/25로 하면 해당 날짜에 만료된다. 
chage -W 경고일 사용자 : 설정한 경고일이 10이라면 만료일 10일 전에 경고해준다.

groupadd, groupmod, gpasswd, newgrp 명령어

group관련 명령어들은 user명령어들과 사용방법이 비슷하다. 사용자 계정이 속해있는 그룹에 관련된 기능을 수행한다.

 

groupadd newgroup : 새로운 그룹을 생성한다.

groupadd -g 번호 newgroup : 지정한 GID로 그룹을 생성한다.

groupdel 그룹명 : 해당 그룹을 삭제한다.

 

groupmod는 그룹의 속성을 변경한다.
groupmod -g 번호 그룹명 : 해당 그룹의 GID를 원하는 번호로 변경한다.
groupmod -n [새로운 그룹] [기존 그룹] : 기존 그룹 이름을 새로운 그룹 이름으로 변경

gpasswd는 그룹의 암호를 설정하거나 그룹 관리를 수행한다.
gpasswd 그룹명 : 해당 그룹의 암호 설정
gpasswd -a 사용자 그룹 : 해당 사용자를 그룹에 추가 
gpasswd -d 사용자 그룹 : 해당 사용자를 그룹에서 삭제
usermod -G 로도 그룹에 추가가 가능하지만 삭제가 안된다. 따라서 하나씩 추가하거나 삭제할 때 gpasswd를 사용한다.

groups 명령을 통해 확인했을때 맨 왼쪽에 출력되는 그룹이 해당 계정의 기본 그룹이다. 위의 예시에서 root는 user1그룹에 가입되어 있지 않기 때문에 newgrp를 사용하면 임시로 가입되며 기본그룹으로 설정된다. 이때 exit명령을 수행하면 입시로 가입된 그룹에서 빠져나올 수 있다.

 

groups : 현재 접속해있는 계정이 속한 그룹들을 보여준다.

newgrp 그룹명 : 기본 그룹을 원하는 그룹으로 변경할 수 있다. 원래 가입된 그룹이 아니라면 임시로 가입 가능 이때 그룹 암호가 설정되어 있다면 암호를 물어본다.

댓글