리눅스 서버

리눅스 소개

리눅스의 특징

리눅스는 핀란드 헬싱키 대학의 학생이었던 리누스 토발즈의 취미 생활로 탄생

  • Free
    • OS 구입에 따른 비용을 지출하지 않아도 됨
  • Unix Like
    • 유닉스처럼 리눅스는 C 언어로 작성됨
    • 유닉스처럼 리눅스는 멀티유저/멀티태스킹을 지원하는 네트워크 OS
    • 유닉스처럼 리눅스는 프로그래밍 개발환경에 매우 적합
    • 유닉스처럼 다양한 하드웨어 플랫폼을 지원
    • Intel x86 processor
    • Macintosh PC
    • Cyrix processor
    • AMD processor
    • Sun Microsystems Sparc processor
    • Alpha Processor(Compaq)
  • Open Source
  • 그 외에 안정성, 강건성, 보안성, 높은 성능 등의 특징도 존재

CentOS 7 설치

윈도우즈에서 가상머신으로 설치

Virtual Box 설치

  • 먼저 Virtual Box를 설치

  • CentOS 7 다운로드: https://www.centos.org/download/ Minimal ISO 선택. 적당한 파일 다운로드.

  • Virtual Box(VBox)에서 새로만들기 클릭.

    • 이름: CentOS 7 1708로 지정
    • 종류: Linux;
    • 버전: RedHat 64bit
    • 메모리크기 : 1024
    • 하드디스트: 새 가상하드디스크 만들기
    • 하드디스크 종류: VDI
    • 물리적 하드 드라이브에 저장: 동적할당
    • 파일 위치 및 크기: 기본값, 8GB
  • 게스트에서 설정 클릭

    • 저장소 > 콘트롤러 IDE > 광학드라이브 추가: 다운받은 CentOS ISO파일 선택

게스트에 CentOS 설치

  • 게스트를 선택하고 시작을 클릭한다.
  • Install CentOS 7을 선택하여 설치를 시작한다.
  • 언어: 한국어
  • 네트워크 & 호스트 이름 클릭: 이더넷 연결 켬
  • 설치 대상 클릭: 완료
  • 설치 시작 클릭
  • Root 암호 설정
  • 사용자 생성: 성명: 아이디 지정, 이 사용자를 관리자로 합니다. 첵크하고 완료 버튼을 누른다.
  • 설치 작업이 끝날 때까지 기다린다.
  • 재부팅을 클릭한다.
  • 가상상자에서 마우스 벗어나기
    • 파일 - 환경설정 - 입력 - 가상머신 - 호스트 키 조합: 원하는 키 누르기

로그인 및 업데이트

앞에서 만든 사용자 아이디와 패스워드를 입력하고 로그인을 한다.

시스템 업데이트를 실시한다.

sudo yum -y update
sudo yum -y groupinstall "Development Tools"
sudo yum -y install kernel-devel
sudo yum -y install epel-release
sudo yum -y install dkms

가상상자 네트워크 설정

먼저 CentOS 게스트를 종료한다.

$ sudo shutdown now

호스트 네트워크 설정

VBox의 파일 > 호스트 네트워크 관리자 부분이 비어 있으면 만들기를 한다.

  • 수동으로 어댑터 설정을 선택하고
    • IPv4 주소: 192.168.99.1 설정
    • 서브넷 마스크: 255.255.255.0 설정
  • DHCP 서버 항목에서 서버 사용을 선택
    • 서버 주소: 192.168.99.6
    • 서버 마스크: 255.255.255.0
    • 최저 주소 한계: 192.168.99.100
    • 최대 주소 한계: 192.168.99.254

게스트 네트워크 설정

CentOS 게스트를 선택한 후, 설정 > 네트워크 > 어댑터2 > 네트워크 어댑터 사용하기를 선택한다.

  • 다음에 연결됨: 호스트 전용 어뎁터
  • 이름: 호스트 네트워크 관리자에서 설정한 어댑터를 선택

CentOS 게스트를 시작해서 로그인 한 후 다음과 같이 네트워크 아이피를 확인한다.

$ ip addr

enp0s8 부분에 inet 192.168.99.xxx라는 부분이 게스트의 아이피이다.

가상상자 공유폴더 설정

게스트에서 호스트 폴더를 사용할 수 있도록 설정한다.

게스트 확장 설치

  • 게스트에서 설정 > 저장소 > 컨트롤러 IDE 부분에 VBoxGuestAdditions.iso가 연결되었는지 확인한다. 안되어있으면 추가한다.

  • 게스트를 시작한다.

  • 게스트 메뉴에서 장치 > 광학 드라이브 > VBoxGuestAdditions.iso를 선택한다.

  • 로그인한다.

  • 게스트 확장 시디를 사용가능하게 한다.

    $ sudo mkdir /mnt/vboxadd
    $ sudo mount /dev/cdrom /mnt/vboxadd
    $ cd /mnt/vboxadd
    
  • 필요한 패키지들을 설치한다.

    $ sudo yum groupinstall “Development Tools”
    $ sudo yum install kernel-devel
    $ sudo yum install epel-release
    $ sudo yum install dkms
    
  • 다음을 실행하여 확장 설치를 한다.

    $ sudo ./VBoxLinuxAdditions.run
    
  • CentOS 게스트를 종료한다.

    $ sudo shutdown now
    

공유 폴더 설정

CentOS 게스트에서 설정 > 공유폴더 > 머신폴더를 선택하고 추가 버튼 클릭후 폴더 경로 선택후 폴더이름 지정을 한다. 자동마우트를 선택한다.

게스트 접속 후 /media/sf_폴더이름이 추가되어 있는 것을 다음과 같이 확인한다.

$ ls /media/

처음에는 폴더로 접근할 수 없다. vboxsf 그룹에 추가해야 한다.

$ sudo gpasswd -a 사용자명 vboxsf

Putty 터미널

서버는 일반적으로 원격으로 조정을 해야 하기 때문에 터미널을 이요해서 접속을 해야 한다. 또한 접속이 보안상 안전하게 이루어져야 하므로 SSH를 이용한다. 윈도우즈에서 서버로 SSH를 통해서 접속할 수 있는 대표적인 프로그램이 putty이다.

퓨티 설치

이곳에서 다운받아 설치한다.

퓨티로 CentOS 게스트 접속

  • 퓨티를 실행하고 왼쪽 Category > Session 선택후 오른쪽 화면에서 아래 항목들을 입력하고 저장을 누른다.
    • Host Name: 192.168.99.xxx(게스트 아이피)
    • Port: 22
    • Connection Type: SSH
    • Saved Session: VBox(적당한 이름)
  • Open 클릭하여 연결을 시도한다.
  • 처음 연결할 때는 보안 메시지가 뜨는데 확인을 누른다.
  • 로그인을 한다.

루트 계정 로그인 막기

서버를 루트 계정으로 로그인하는 것은 보안상 좋지 않다. 따라서 다음과 같이 루트 로그인을 막는다. 루트로 로그인을 하지 않도라도 sudo를 이용하면 루트가 할 수 있는 모든 일을 할 수 있다.

/etc/ssh/sshd_config 파일에서 PermitRootLoginno로 설정하고 저장을 한다.

$ sudo vi /etc/ssh/sshd_config

PermitRootLogin no

sshd 서비스를 다시 시작한다.

$ sudo systemctl restart sshd.service

SSH 키를 이용해 로그인 하기

SSH 키를 이용하면 아이디와 패스워드 입력없이 자동으로 로그인할 수 있어 보안상 더 좋다.

Putty를 이용한 SSH Key 생성

  • 왼도우즈 시작 메뉴 > 모든 프로그램 > PuTTY > PuTTYgen 실행
  • 맨 아래 쪽 Type of key to generate 항목에서 RSA 선택
  • Number of bits in a generated key 에서 2048 입력
  • Generate button을 클릭
  • Key 탭 빈 공간을 마우스로 부지런히 움직여서 랜덤한 키를 생성한다. 프로그래스바가 완전히 찰 때까지 계속 움직인다.
  • Key comment 부분에서 나중에 어디서 누가 생성했는지 구분하기 위해 내용을 적어도 된다. 나는 기본값으로 내버려 두었다.
  • (Optional): Key passphrase 부분에 나중에 접속할 때 암호와 같이 물어 보는 문장을 넣는다. 빈 공간으로 내버려 둔다. 나중에 자동화 접속할 때 불편하다.
  • Save public key를 눌러 원하는 폴더에 원하는 이름으로 저장한다. 나중에 이값을 ssh server에 저장할 것이다.
  • Save private key를 눌러 아까 저장했던 폴더에 원하는 이름으로 저장한다. 이것은 putty를 통해서 서버에 접속할 때 필요한 파일이다. 이것을 잃어버리면 접속이 불가능하다.
  • Public key for pasting into OpenSSH authorized_keys file 부분에 있는 내용을 모두 선택하여 복사해 둔다. 이 내용을 ssh server에 붙여 넣을 것이다.

서버에 공용키 저장

  • putty를 이용해 서버에 접속을 한다.

  • 다음과 같이 ~/.ssh/authorized_keys 파일을 만든다.

    mkdir ~/.ssh
    chmod 700 ~/.ssh
    touch ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  • ~/.ssh/authorized_keys 파일을 연다.

    vi ~/.ssh/authorized_keys
    
  • authorized_keys 파일을 열어 편집 모드로 바꾼 다음 마우스 오른쪽 클릭(또는 shift + insert)을하면 복사가 된다. 파일 안에는 다음과 같은 형식이 저장되어야 한다.

    ssh-rsa 공공키시작... rsa-key-201xxxxx
    

저장을 하고 나온다. 주의해야 할 점은 복사 붙여넣기 할 때 새로운 줄넘김이 있어서는 안된다.

서버에 접속할 Putty Profile 만들기

  • putty를 실행하여
  • 앞에서 저장했던 세션(Session) VBox를 로드한다.
  • Category > Connection > Data 항목
    • Auto-login username: 접속할 서버 아이디 입력
  • Category > Connection > SSH > Auth 항목
    • Private key file for authentication: Browse를 눌러 앞에서 저장했던 Private Key를 선택
  • Category > Session 항목에서 저장을 누르고 접속을 하면 아이디/패스워드를 물어보지 않고 자동 접속하는 것을 알 수 있다.

서버 설정 변경

/etc/ssh/sshd_config 파일에서 다음과 같이 변경하여 아이디/패스워드를 이용한 로그인을 막는다.

PubkeyAuthentication yes #공개키 인증 사용
AuthorizedKeyFile  .ssh/authorized_keys # 공개키 위치
PasswordAuthentication no # 패스워드 인증 불허
ChallengeResponseAuthentication no # 패스워드 입력 불허

sshd를 재시작한다.

sudo systemctl restart sshd.service

putty를 이용해 접속을 해본다. 만일 사용자 이름으로 접속하려고 시도하면 접속을 불허하는 것을 알 수 있다.

앞으로 모든 접속은 퓨티 터미널을 이용한다.

쉘(Shell) 명령어 기본

터미널을 이용해서 서버에 접속하면 지정된 쉘에 정의된 명령어들을 실행할 수 있다. 여러 가지 쉘들이 있지만 여기서는 bash 쉘을 사용한다.

쉘은 MS 윈도우즈의 명령어창과 비슷한 기능을 갖는다고 보면 된다. 쉘 명령어들을 이용하여 시스템 자원들을 관리하고 파일, 사용자들을 관리할 수 있다. 물론 GUI를 이용해서 관리할 수도 있다. 쉘에서 환경 설정값들을 알고 싶으면 env 명령어를 입력한다.

$ env

HOSTNAME=localhost.localdomain
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.99.1 57182 22
SSH_TTY=/dev/pts/1
USER=username
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/username/.local/bin:/home/username/bin

이 외에도 많은 정보들이 출력이 되는 것을 알 수 있다. 특히 경로(PATH)는 실행 프로그램의 위치를 알려주는 것이기 때문에 명령어를 입력했을 때 찾을 수 없는 명령어(command not found)가 나오면 실행할 수 있는 명령어가 경로 상에 없다는 것이다.

도움말(man)

명령어 들에 대한 도움말을 보기 위해서는 man 명령어를 입력한다.

man ls

도움말 상태에서 나오기 위해서는 [q]를 누르면 되고 아래로는 [space] 혹은 vim 명령어 [j]를 사용한다. 위로 올라가고 싶으면 [b] 또는 [k]를 사용한다.

명령어에 대한 간단한 사용법을 원하면 보통 명령어 --help를 입력하면된다. 모두가 해당되는 것은 아니다.

yum --help

현재 작업 디렉토리(pwd)

현재 작업 디렉토리를 출력하는 명령어는 pwd 이다.

디렉토리 변경하기(cd)

작업 디렉토리를 변경하려면 cd 디렉토리이름 명령어를 사용한다.

$ cd /tmp

현재 디렉토리는 점 .으로 표시하고 바로 위의 디렉토리를 점 2개 ..로 표시한다. [Tab] 키를 이용해서 자동 완성을 이용할 수도 있다. 즉, ../[Tab] 을 누르면 현재 디렉토리 위의 파일들을 표시할 수 있다. 파일이 여러 개 있으면 탭을 한 번 더 누르면 모든 파일들을 볼 수 있다. 이와 같이 현재 작업디렉토리를 기준으로 파일들을 표시하는 것을 상대 경로라 한다. 리눅스의 맨 위의 디렉토리를 나타내는 기호는 슬래시 /이며 맨 위 디렉토리로부터 파일을 표시하는 것을 절대 경로라 한다. 다음은 상대 경로이다.

../../usr/lib

다음은 절대 경로 이다.

/usr/lib
Command Function
cd 로그인 디렉토리로 이동
cd ~ 로그인 디렉토리로 이동
cd / 루트 디렉토리로 이동
cd /root 루트의 홈 디렉토리로 이동(루트 유저만 가능하다.)
cd /home home 디렉토리로 이동
cd .. 한 단계 위 디렉토리로 이동
cd ~otheruser otheruser 계정 로그인 디렉토리로 이동(권한이 있을 때만 가능)
cd /dir1/subdir 절대 경로로 이동
cd ../../dir3/X11 현재 디렉토리로부터 2단계 윗 디렉토리로 이동 후 dir3으로 가고 X11으로 이동

cd /root 명령어를 입력하면 허가 거부라는 메시지가 출력이 된다. /root 디렉토리를 사용할 수있는 권한이 없기 때문에 나타나는 것이다. 유닉스 파일 시스템은 파일마다 사용할 수 있는 권한이 부여되어 있기 때문에 허가된 사용자만 접근할 수 있도록 되어 있다.

사용자 변경(su)

su [아이디] 명령을 이용하면 사용자를 변경할 수 있다. 아이디가 주어지지 않으면 루트로 변경을 시도한다. su - [아이디]와 같이 빼기 기호를 추가하면 사용자 상호 작용하는 로그인을 이용한다는 것이다. 다음은 루트로 로그인 한 후 exit 명령어를 이용해서 로그 아웃을 한 경우이다.

$ su -
암호:
마지막 로그인: 금  6월 22 14:50:46 KST 2018 일시 pts/1
[root@localhost ~]# pwd
/root
[root@localhost ~]# exit

여기서 주목할 것은 루트로 로그인하면 일반적으로 프롬프트 표시가 #와 같이 변경된다는 것이다. 일반 사용자들의 프롬프트는 $이다.

디렉토리 내용 표시(ls)

디렉토리 안에 어떤 파일들이 있는지를 보기 원하면 ls 명령어를 사용하면 된다. man ls해보면 많은 옵션들이 있는 것을 알 수 있다. 그 중에 -a 옵션을 이용하면 숨겨진 파일인 점파일(dot file)을 볼 수 있다. 긴 형식으로 보기를 원하면 -l 옵션을 사용한다.

$ ls -al

이것은 파일 크기, 권한, 만들어진 시각 등 다양한 정보를 표시한다.

$ ls -al /etc

이것은 /etc 디렉토리 전체를 보여준다.

다음은 많이 사용되는 옵션들이다.

  • -a: 숨겨진 파일들을 포함한 모든 파일들을 보여준다.(all)
  • -l: 긴 형식으로 보여준다. 파일 크기, 생성 날짜, 권한 등.(long)
  • -F: 파일 이름 뒤에 파일 형식에 대한 심볼을 표시한다. /는 디렉토리, ->는 심볼릭 링크, *는 실행파일을 의미한다.(file type)
  • -r: 정렬을 거꾸로 한다.(reverse)
  • -R: 하위 디렉토리에 대해서 반복적으로 표시한다.(Recursive)
  • -S: 크기로 정렬을 한다.

파일 찾기(find)

find 명령어를 이용해서 파일 검색에 관련된 다양한 작업을 할 수 있다.

기본 명령어는 find [검색대상디렉토리] [표현식]이다. 예를 들어 현재 디렉토리 밑에 있는 확장자가 py인 모든 파일을 찾고 싶으면 다음과 같이 한다.

find -name "*.py"

/home 디렉토리 밑에 확장자가 py인 모든 파일을 찾는다.

$ find /home -name "*.py"

/home 디렉토리 밑에서 파일명이 .bash로 시작하는 모든 파일을 찾고 ls 형식으로 출력한다.

$ find /home -name '.bash*' -ls

/home 밑에 이름이 python으로 시작되는 모든 디렉토리를 찾는다.

$ find /home -name 'python*' -type d

로그인 디렉토리 아래에 있는 디렉토리 중 NEWS 파일보다 더 최근에 변경(-cnewer)된 디렉토리(-type d) 모두를 찾는다.

$ find ~ -mindepth 1 -cnewer NEWS -type d

창 내용 지우기(clear)

clear 명령어를 이용해 현재 창에 있는 화면을 모두 지울 수 있다.

파일 보기, 붙이기, 리다이렉션(cat, >)

cat 명령어를 이용하면 파일 내용을 볼 수 있고 다른 파일에 내용을 더할 수 있으며 내용을 다른 곳으로 돌릴 수도 있다. 우선 sample.txt 파일을 보려면 다음과 같이 한다.

$ cat sample.txt

또한 표준 입력(키보드 입력)과 표준 출력(화면 출력)을 적용할 수 있다.

$ cat
안녕하세요
안녕하세요
만나서 반가워요!
만나서 반가워요!

끝내려면 ctrl + d를 누르면 된다.

>와 함께 사용하여 내용을 다른 곳으로 전달할 수 있다.

$ cat > work.txt
9시에 출근해서
 즐~~ 코딩하고
퇴근한다.
$ cat work.txt
9시에 출근해서
즐~~ 코딩하고
퇴근한다.

표준 입력(키보드 입력)을 통해 들어온 내용을 work.txt 파일로 전환시켜 저장하는 것이다. 입력을 끝내려면 ctrl + d를 누르면 된다.

Caution

방향 전환 >을 이용하여 파일에 저장할 때 기존의 파일 내용은 삭제되므로 주의해야 한다.

다른 파일 home.txt 하나를 더 만들자.

$ cat > home.txt
돌아오는 길에 마트에 들러 맥주를 사고
치킨을 시켜
월드컵을 보며 맥주를 마시자.

다음과 같이 두 파일을 합쳐서 새로운 파일에 저장할 수도 있다.

$ cat work.txt home.txt > friday.txt
$ cat friday.txt
9시에 출근해서
즐~~ 코딩하고
퇴근한다.
돌아오는 길에 마트에 들러 맥주를 사고
치킨을 시켜
월드컵을 보며 맥주를 마시자.

기존에 있던 파일 내용에 추가를 하려면 방향 전환의 또 다른 사용법인 >>를 사용할 수 있다. 다음은 home.txt 내용을 work.txt 파일에 추가를 한다.

$ cat home.txt >> work.txt
$ cat work.txt
9시에 출근해서
즐~~ 코딩하고
퇴근한다.
돌아오는 길에 마트에 들러 맥주를 사고
치킨을 시켜
월드컵을 보며 맥주를 마시자.

다음은 파일 내용을 표준 출력으로 전환하는 것이다.

$ cat < work.txt
9시에 출근해서
즐~~ 코딩하고
퇴근한다.
돌아오는 길에 마트에 들러 맥주를 사고
치킨을 시켜
월드컵을 보며 맥주를 마시자.

파이프(pipe)

/etc 디렉토리 내용을 열거하려면 다음과 같이 한다.

$ ls /etc

하지만 내용이 너무 많아 한 화면에 담을 수 없어 앞에 있는 것을 볼 수 없다. 이것을 보기 위해서 파이프 명령어를 사용한다.

$ ls /etc | less

less는 내용을 잠시 멈추어 볼 수 있게 한다. 앞으로 가는 명령어는 f, 뒤로 가는 명령어는 b등 많은 명령어들이 있다. 자세한 명령어들을 알고 싶으면 h 또는 H를 누르면 알 수 있다. 파이프 명령어 |는 앞에 있는 내용(표준 출력)을 그대로 뒤에 있는 명령어 전달(표준 입력)하는 역할을 한다.

다음과 같이 more 명령어를 사용할 수도 있다.

$ ls /etc/ | more

more는 오래된 명령어로서 less가 더 많은 기능들을 제공하므로 되도록이면 less를 사용하도록 한다.

head, tail

head는 파일의 앞 부분을 보여주는 명령어이고 tail은 파일의 끝부분을 보여주는 명령어이다. 파일이 너무 길어서 앞부분과 끝부분만 살펴보고 싶을 때 유용하다.

$ head home.txt

기본적으로 10줄을 보여준다.

grep 명령어

grep 명령어는 파일 안에 문자열을 찾을 때 사용된다.

$ grep 맥주 home.txt

또는 표준 출력 중에서 원하는 문자열일 있는지를 찾을 수도 있다. 이때는 파이프를 이용한다.

$ ls /etc | grep bash

와일드 카드 및 정규 표현식

와일드 카드(wildcard)란 *, ?, [] 등을 의미한다. *는 모든 문자를 의미하고 ?는 한 문자, []는 대괄호 안에 있는 어떤 문자도 된다는 뜻이다.

$ ls *.txt

.txt로 끝나는 모든 파일들을 보여준다. 다음은 파일 확장자가 3문자로 되어 있는 파일들을 보여준다.

$ ls *.???

다음은 s 또는 v로 시작하는 모든 파일들을 보여준다.

$ ls [sv]*

다음은 숫자를 포함하는 모든 파일들을 보여준다.

$ ls *[0-9]*

명령어 기록

history 명령어를 이용해서 이전에 실행했던 명령어들을 볼 수 있다.

$ history

파이프 와 grep 명령어를 이용해서 찾을 수 있다.

$ history | grep ls

파일 및 디렉토리

소유자 및 권한

다음과 같이 하면 허가 거부가 출력되는 것을 알 수 있다.

$ cd /root

모든 파일은 소유자, 그룹, 다른 사용자에 대한 권한이 주어진다.

chmod

파일 허가를 변경한다.

chown

파일 소유자를 변경한다.

chown owner:ownergroup filename

chgrp

파일 소유자 그룹을 변경한다.

$ chgrp groupname filename

숫자를 이용해 허가 조정

r = 4, w = 2, x = 1 이다.

700-rwx------이다. 777-rwxrwxrwx이다.

[Tab] 키를 이용해서 자동완성을 이용할 수 있다. 즉, 다음과 같이 ls를 입력하고 [Tab] 키를 누르면 ls로 시작하는 가능한 모든 명령어들이 표시된다.

$ ls[Tab]
ls        lsblk     lsdiff    lsipc     lslogins  lsmod     lsscsi
lsattr    lscpu     lsinitrd  lslocks   lsmem     lsns

cp

mv

파일 이름을 변경한다.

rm

파일을 삭제한다.

mkdir

디렉토리를 만든다.

rmdir

디렉토리를 삭제한다.

touch

빈 파일을 만든다.

du

파일 크기를 살펴본다.

파일 압축

zip, unzip

zip 형식으로 압축한다.

$ zip file.zip file1 file2

zip 형식을 압축 해제한다.

$ unzip file.zip

gz 형식으로 압축한다.

$ gzip file

gzip은 여러 파일들을 압축하는 용도가 아니다. 여러 파일을 하나로 모아 압축하려면 zip 또는 tar를 사용한다.

gz 형식을 압축해제 한다.

$ gunzip file.gz

tar

tar는 여러 개의 파일들을 하나의 파일로 묶는 역학을 한다.

$ tar cvf file.tar file1 file2 dir1 dir2

tar 파일을 풀려면 다음과 같이 한다.

$ tar xvf file.tar

tar 파일 안에 목록만 보려면 다음과 같이 한다.

$ tar tvf file.tar

tar로 묶어 gzip으로 압축하려면 다음과 같이 한다.

$ tar cvfz file.tar.gz file1 file2 dir1 dir2

사용자 관리

사용자 추가

다음과 같이 testuser이라는 사용자 계정을 만든다.

sudo useradd testuser

useradd는 쉘은 bash를 사용하고 홈디렉토리는 /home/testuser으로 만든다.

다음과 같이 새로운 암호를 만든다.

sudo passwd testuser

사용자를 이미 만든 후 sudo를 사용할 수 있는 wheel 그룹에 사용자를 추가하려면 다음과 같이 한다.

sudo usermod -aG wheel testuser

여기서 usermod는 기존 사용자 testuserwheel 그룹에 추가하는 것이다. 사용자를 만들 때 그룹에 wheel 그룹에 속하게 만들수 있다.

sudo useradd -G wheel testuser

useradd 기본 설정 파일은 /etc/default/useradd 파일에 있다. 그리고 그룹에 대한 기본 설정은 /etc/login.defs 파일에 USERGROUPS_ENAB yes로 설정되어 있으면 사용자 계정과 같은 그룹 이름을 새로 만든다. 그리고 사용자 계정을 만들면서 /home 아래에 사용자 계정과 같은 이름의 디렉토리를 만든다. 또한 /etc/skel 디렉토리에 있는 모든 파일들을 사용자 홈 디렉토리로 복사한다.

사용자 삭제

userdel을 이용해서 사용자를 삭제할 수 있다.

sudo userdel -r username

-r 옵션은 사용자 디렉토리와 그 안에 포함된 모든 파일과 메일 스풀도 지운다.

사용자 변경

사용자 변경은 su를 이용할 수 있다.

sudo su - username

패키지

CentOS 패키지를 업데이트하고 삭제하고 설치하고 관리한다. yum(Yellowdog Updater Modified) 명령어를 사용한다.

저장소

CentOS 패키지 다운로드할 저장소 주소들이 설정되있는 디렉토리는 /etc/yum.repos.d/ 이다.

$ ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-Media.repo    epel.repo          ius.repo
CentOS-CR.repo         CentOS-Sources.repo  epel-testing.repo  ius-testing.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo    ius-archive.repo
CentOS-fasttrack.repo  cuda.repo            ius-dev.repo

저장소로는 Extra Packages for Enterprise Linux (EPEL) 저장소와 IUS(Inline with Upstream Stable) 및 Remi 저장소가 있다. EPEL은 공식 CentOS와 Red Hat Enterprise Linux에서 제공되지 않는 확장 패키지들을 제공한다. IUS 저장소는 최신버전의 RHEL(Red Hat Enterprise Linux) 패키지를 제공한다.

각 저장소에서 패키지를 다운받기 위해서는 저장소 위치가 서버에 설정되어 있어야 한다. EPEL 저장소는 다음과 같이 설치한다.

sudo yum install epel-releaase

IUS 저장소는 다음과 같이 설치한다.

sudo yum install https://$(rpm -E '%{?centos:centos}%{!?centos:rhel}%{rhel}').iuscommunity.org/ius-release.rpm

$(rpm -E '%{?centos:centos}%{!?centos:rhel}%{rhel}')은 서버가 centos 인지 rhel인지와 버전이 얼마인지를 알아내기 위한 스크립트이다.

패키지 설치

sudo yum install package_name을 이용해서 설치한다.

수동으로 rpm 파일을 설치하고자 할 때는 localinstall 옵션을 사용한다. rpm 파일을 다운로드 해놔야 한다. 예를 들어 bash를 설치하려면 먼저 적당한 디렉토리에 다운받아 놓고 거기서 다음과 같이 설치한다.

$ sudo yum localinstall bash-4.2.46-29.el7_4.x86_64.rpm

wget 설치

wget은 인터넷을 통해 파일을 다운받는 패키지이다. 다음과 같이 설치를 한다.

$ sudo yum install -y wget

VIM 컴파일 설치

컴파일 전 준비

컴파일에 필요한 패키지들을 설치한다.

yum groupinstall 'Development Tools'
yum install ncurses ncurses-devel -y

소스 다운받아 컴파일

깃헙에서 vim 소스를 다운 받는다.

$ cd
$ git clone https://github.com/vim/vim.git
$ cd vim/src

소스 디렉토리로 들어간다.

$ cd vim/src

Makefile을 수정한다. vi Makefile 열어서 아래 부분 주석을 없앤다.

CONF_OPT_GUI = --enable-gui=gtk2
CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
CONF_OPT_CSCOPE = --enable-cscope
CONF_OPT_MULTIBYTE = --enable-multibyte

컴파일 한다.

$ make

기존 VIM 제거

기존에 설치된 빔(Vim) 패키지들을 열거해본다.

$ sudo yum list installed | grep vim
gdb.x86_64                            8.0-17.1.scylladb.1.el7.centos @mcepl-vim8
gdb-headless.x86_64                   8.0-17.1.scylladb.1.el7.centos @mcepl-vim8
vim-common.x86_64                     2:8.0.1813-1.0.97.el7.centos   @mcepl-vim8
vim-enhanced.x86_64                   2:8.0.1813-1.0.97.el7.centos   @mcepl-vim8
vim-filesystem.x86_64                 2:8.0.1813-1.0.97.el7.centos   @mcepl-vim8
vim-minimal.x86_64                    2:8.0.1813-1.0.97.el7.centos   @mcepl-vim8

Warning

yum을 이용해 vim-minimal``을 제거하지 말아야 한다. vim-minimalsudo 명령어와 연관되어 있어서 vim-minimal을 제거하면 sudo 명령어도 함께 지우기 때문에 sudo 명령어를 사용할 수 없다.

의존성없이 패키지를 제거하려면 다음과 같이 rpm -e --nodeps를 이용한다.

$ sudo rpm -e --nodeps vim-minimal

또는 다음과 같이 yum을 이용해 이전 빔(Vim)을 제거한다.

$ sudo yum remove vim-common vim-enhanced vim-filesystem
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package vim-common.x86_64 2:8.0.1813-1.0.97.el7.centos will be erased
---> Package vim-enhanced.x86_64 2:8.0.1813-1.0.97.el7.centos will be erased
---> Package vim-filesystem.x86_64 2:8.0.1813-1.0.97.el7.centos will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch     Version                          Repository     Size
================================================================================
Removing:
 vim-common       x86_64   2:8.0.1813-1.0.97.el7.centos     @mcepl-vim8    29 M
 vim-enhanced     x86_64   2:8.0.1813-1.0.97.el7.centos     @mcepl-vim8   2.6 M
 vim-filesystem   x86_64   2:8.0.1813-1.0.97.el7.centos     @mcepl-vim8    40

Transaction Summary
================================================================================
Remove  3 Packages

Installed size: 31 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : 2:vim-enhanced-8.0.1813-1.0.97.el7.centos.x86_64             1/3
  Erasing    : 2:vim-common-8.0.1813-1.0.97.el7.centos.x86_64               2/3
  Erasing    : 2:vim-filesystem-8.0.1813-1.0.97.el7.centos.x86_64           3/3
  Verifying  : 2:vim-enhanced-8.0.1813-1.0.97.el7.centos.x86_64             1/3
  Verifying  : 2:vim-filesystem-8.0.1813-1.0.97.el7.centos.x86_64           2/3
  Verifying  : 2:vim-common-8.0.1813-1.0.97.el7.centos.x86_64               3/3

Removed:
  vim-common.x86_64 2:8.0.1813-1.0.97.el7.centos
  vim-enhanced.x86_64 2:8.0.1813-1.0.97.el7.centos
  vim-filesystem.x86_64 2:8.0.1813-1.0.97.el7.centos

Complete!

VIM 설치

설치를 한다.

$ sudo make install

기본 설치 디렉토리는 /usr/local/share/vim/vim81 이고 실행 파일은 /usr/local/bin에 위치한다. 이전 버전의 vim이 존재하기 때문에 vi를 실행하면 이전 버전의 것이 실행된다. 따라서 vim으로 실행해야 한다. 이것이 싫으면 ~/.bashrc 파일에 alias vi='vim'을 입력하고 사용하면 된다.

설치가 잘 되었는지 확인해 본다.

$ cd
$ which vim

vi에 대한 별칭을 만든다.

$ vim ~/.bashrc

.bashrc 파일에 다음과 같은 문장을 넣는다.

alias vi='vim'