리눅스 서버¶
리눅스 소개¶
리눅스의 특징¶
리눅스는 핀란드 헬싱키 대학의 학생이었던 리누스 토발즈의 취미 생활로 탄생
- 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
파일에서 PermitRootLogin
을 no
로 설정하고 저장을 한다.
$ 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¶
파일 허가를 변경한다.
숫자를 이용해 허가 조정¶
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
는 기존 사용자 testuser
를 wheel
그룹에 추가하는 것이다. 사용자를 만들 때 그룹에 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
옵션은 사용자 디렉토리와 그 안에 포함된 모든 파일과 메일 스풀도 지운다.
패키지¶
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
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-minimal
은 sudo
명령어와 연관되어 있어서 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'