VIM 사용하다가 저장시 root 계정이 없다고 뜬다면?

리눅스/MAC 에서

vi /etc/hosts 와 같이 시스템 파일을 건들고, 열심히 수정을 하였습니다. 그런데 만약 sudo 명령어를 잊고 실행시켰다는 것을 알았다면?  다시 작성할까…. 고민하시는 분들을 위한 꿀팁입니다.

:는 명령어 내린다는 것을 다들 알것이고, w 는 저장입니다. 이에 뒤붙여서 !sudo tee % 하면 비밀번호 입력하라고 합니다. 비번입력하면 신기하게 저장됩니다.

:w !sudo tee %

이제 파일 다시 수정하지 마세요.

MAC 에서도 적용되는 내용입니다.

오늘은 여기까지.

sysbench 내 서버의 CPU, RAM, SSD 성능을 알아보자!

안녕하세요. 스타트업하는 개발자 DevKwon 권선우입니다.

간단히 CPU, RAM, HDD(SSD)의 벤치마킹 하는 방법을 알아보겠습니다. 바로 sysbench 명령어를 이용하여 벤치마킹을 해보겠습니다.

SYSBENCH

sysbench 를 이용해보겠습니다.

CPU 벤치 방법

sysbench --test=cpu --cpu-max-prime=20000  --num-threads=2 run   
설치는 centos 는
yum install sysbench
ubuntu는
apt-get install sysbench
간단합니다. 스레드 2개로 벤치마킹한다는 겁니다. 코어가 여러개 있는 서버는 –num-threads 를 CPU 개수만큼(하이퍼스레딩 되면 X2 추가) 해주면 더 정확한 벤치가 이루어 집니다.
싱글스레드 값을 알고싶으시면 –num-threads 를 1로 잡으시면 됩니다.
MAC 또한 가능한데 brew 로 sysbench 를 선택하시고
brew install sysbench
해보시면 벤치마킹 해볼 수 있습니다.
홈브루(brew) 의 사용 방법은
여기를 참조해 주시기 바랍니다.
아래는 mac 에서의 CPU sysbench  명령어입니다.  –max-requests 와 –max-time을 추가한 이유는 brew 로 인스톨한 sysbench 의 버전이 상위 버전이므로(현재 최신 버전 1.0.4) 디폴트 값이 안잡혀서 잡아주었습니다.
sysbench --test=cpu --cpu-max-prime=20000  --num-threads=4 --max-requests=10000 --max-time=100 run

 

sean@localhost:~$ sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run
sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 2

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
 total time: 15.3272s
 total number of events: 10000
 total time taken by event execution: 30.6441
 per-request statistics:
 min: 1.40ms
 avg: 3.06ms
 max: 27.11ms
 approx. 95 percentile: 9.13ms

Threads fairness:
 events (avg/stddev): 5000.0000/0.00
 execution time (avg/stddev): 15.3221/0.00

잠시 기다려 보면 아래와 같은 결과 값이 나옵니다. total time 을 보시면 되고 15.32초가 걸렸습니다. 지금 서버는 cpu 2개인 서버인데, 만약 –num-thread 값을 1로 바꾸면 거의 두배인 30.6초 정도 나오게 되겠습니다.

맥북 프로에서는 8.3267s,, 스마일서브 1core (iwinv) 14.3366s,  2core : 7.3577s 정도 나왔습니다. CPU많으면 개수만큼 성능이 좋네요.

이런식으로 벤치 마킹을 하시면 됩니다.

RAM 성능 측정 방법은

sysbench --test=memory run

RAM  성능 측정하는 지표는 역시 실행시간입니다.

제 맥북 프로에서는 49.2817s, 스마일서브(iwinv) 호스팅 계정은 70.5834s, Azure 2Core instance 는 68.1875s 이였습니다.

102400.00 MiB transferred (2077.77 MiB/sec)  와 같이 초당 전송 속도를 보는 것도 측정방법의 한 방법이겠습니다.

이번엔 SSD(HDD포함) 측정을 해보겠습니다.

mkdir test
cd test
sysbench --test=fileio --file-total-size=1G prepare

sysbench --test=fileio --file-total-size=1G --file-test-mode=rndrw --max-time=60 --max-requests=0 run

sysbench --test=fileio --file-total-size=1G cleanup

먼저 test 디렉토리를 만들고, 거기에서 prepare 명령어로 준비 과정을 거칩니다. (벤치마킹 돌릴 파일 생성)

run 명령어로 벤치마킹을 합니다. 이제 잠시 기다리면 결과가 나옵니다. 이번에는 초당 입/출력 대역폭으로 벤치마크 결과를 판단해보겠습니다.

sean@localhost:~/test$ sysbench --test=fileio --file-total-size=1G --file-test-mode=rndrw --max-time=60 --max-requests=0 run
sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
128 files, 8Mb each
1Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed: 29400 Read, 19600 Write, 62596 Other = 111596 Total
Read 459.38Mb Written 306.25Mb Total transferred 765.62Mb (12.76Mb/sec)
 816.64 Requests/sec executed

Test execution summary:
 total time: 60.0018s
 total number of events: 49000
 total time taken by event execution: 10.0451
 per-request statistics:
 min: 0.00ms
 avg: 0.21ms
 max: 23.24ms
 approx. 95 percentile: 0.73ms

Threads fairness:
 events (avg/stddev): 49000.0000/0.00
 execution time (avg/stddev): 10.0451/0.00

file-total-size는 RAM 용량이상으로 이상으로 넉넉하게 잡아주시면 더 정확한 결과가 나올 수 있습니다. 저는 대략만 알면 되기에 1G 만 테스트 해보았습니다.

마지막으로 cleanup 명령어로 파일을 제거해 주시면 되겠습니다. rmdir test 로 디렉토리도 제거하시고요.

실행결과는 다음과 같습니다.

맥프로 SSD의 성능이 어마어마했는데요.

HDD :     read, MiB/s:                  270.85    written, MiB/s:               180.57  의 결과가 나왔습니다.
애저의 local SSD 결과도 좋았는데요 무려 151.85Mb/sec (입/출력 평균) 의 결과가 나왔습니다. 애저의 managed ssd는  14.609Mb/sec 에 불과하였습니다.
일반 호스팅(통큰아이)의 SSD 는 23Mb/sec 정도 하였습니다. iwinv도 비슷한 수준입니다.
대략적으로 서버의 벤치마킹은 sysbench 이거 하나면 됩니다.
오늘은 여기까지.

 

 

scp 명령어로 sftp 대신 쓰기

scp 명령어는 리눅스와 맥에서 사용할 수 있으며, 한줄의 명령어로 손쉽게 원격지로 복사할 수 있는 명령어이다.
물론 sftp 명령어로 sftp 로 접속하여 put [파일명] , get [명령어] 와 같이 복사할 수 도 있지만, sftp 로 접속후, 명령어를 입력하여야 하는 불편함이 있다.
백업본 복사와 같이 명령어 하나로 스케쥴링을 해야 하는 경우라면 scp 명령어가 적합하다고 할 수 있겠다.
scp [원본경로] [목적지경로] 와 같이 사용이 가능하다.
특이한 점은 원본경로와 목적지 경로 모두 로컬 혹은 원격저 서버 주소를 사용할 수 있다는 점인데 원격지에서 내 로컬로 복사,  로컬에서 원격지로 복사, 원격지에서 타원격지로의 복사가 가능하다.
scp myfile.tar.gz user@server.com:~
위와 같이 실행한다면 내 로컬에 있는 파일을 원격지의 사용자 계정 home으로 전송하는 의미이다. (~는 home directory)
반대로 원격지의 파일을 로컬로 복사한다면 아래와 같이 사용하면 된다.
scp user@server.com:~/myfile.tar.gz ./
./는 현재 디렉토리라는 의미이므로 여기에서는 현재 위치한 디렉토리로 복사해 오게 된다.
만약 비밀번호를 물어보기 싫다면 공개키 방식을 사용하여 인증하거나, pem authentication 을 사용하는 방법을 사용하면 된다.
pem key 를 사용하려면 -i [key파일] 옵션을 추가하면 된다.
 -i pem.key
공개키 방식으로 비밀번호업이 ssh 와 sftp, scp 를 연결할 수 있는 방법은 다음번에 소개하겠다.

VI(VIM) 에서 대소문자 안가리고 검색하기

vi 를 사용할 때
/검색어 와 같은 방법으로 문자열 검색을 할 수 있다.
이때 vi의 기본설정으로는 아무것도 없다.
vi ~/.vimrc
vi 로 .vimrc 파일을 연 후에
set ignorecase
와 같이 입력한 후 저장한다.
이제 소문자로 검색하여도 대소문자 가리지 않고 문자열을 찾을 수 있다!
vi 명령어를 잘 모르는분들을 위하여 대략적인 vi의 사용 방법을 남긴다.
쓰기 a
쓰기 모드에서 나가기 esc
종료 명령어 :wq
강제 종료 :q!
30행으로 이동 :30
마지막 행으로 이동 :$
현재줄의 마지막으로 이동 $
검색 /검색어
첨언 : vim 은 vi 의 향상된 버전으로, vi는 vim으로 대체 되었다. 최신의 리눅스에서 vi 명령어를 사용하여도 vim 으로 동작하므로, 동일하다. vim대신에 한글자 줄여서 vi명령어로 써도 괜찮다.