2012년 12월 10일 월요일

mac 비밀번호 분실시 세팅법


자신이 사용하는 계정이 sudoer 인 경우에만 해당된다. 
sudo를 할수 있으면 root 의 권한을 위임받는것이고 루트권한이 있으면 root의 비밀번호를 바꿀수 있다.

User_id>> sudo passwd root
>> ******** // 현재 사용중인 id의 패스워드 입력
>> new passwd : ******* 
>> retype passwd : *******

User_id>> su -
>> *******
root>> 

2012년 7월 31일 화요일

리눅스 용량 확인


- 파티션별 용량


$ df -h




- 특정 용량 이상인 파일 찾기


$> find /home -size +100000 -print 


/home디렉토리에 100 메가 넘는 파일들을 찾아 준다.






- 해당 디렉토리에서만 찾기


가장 크기가 큰 파일
ls -lR | sort +4n


가장 용량이 큰 디렉토리
du -S | sort -n



2012년 6월 5일 화요일

nginx + php FastCGI Process Manager (FPM)


NginX-1.2.0 설치
-------------


$ sudo yum install pcre-devel openssl-devel
./configure \
--user=nobody \
--group=nobody \
--prefix=/opt/nginx_1.2.0 \
 --with-http_ssl_module \
 --with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-http_stub_status_module


$ make && make install




php-5.3.3 설치
-------------
PHP 5.3.3 버전 이상 부터 FPM(FastCGI Process Manager)가 PHP 코어에 포함 되어 별도 패치가 필요 없음
$ yum install libevent-devel libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libXpm-devel freetype-devel libc-client-devel libmcrypt-devel mysql-devel net-snmp net-snmp-devel pspell-devel libmhash mhash-devel libtidy libtidy-devel expat-devel libxslt-devel



./configure \
--prefix=/opt/php-fpm_5.3.3 \
--enable-fpm \
--with-fpm-user=nobody \
--with-fpm-group=nobody \
--with-config-file-path=/etc \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-gd-native-ttf \
--enable-libxml \
--enable-magic-quotes \
--enable-mbstring \
--enable-pdo=shared \
--enable-safe-mode \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zend-multibyte \
--enable-zip \
--with-bz2 \
--with-curl=/opt/curlssl/ \
--with-curlwrappers \
--with-freetype-dir=/usr \
--with-gd \
--with-gettext \
--with-imap=/opt/php_with_imap_client/ \
--with-imap-ssl=/usr \
--with-jpeg-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libexpat-dir=/usr \
--with-libxml-dir=/opt/xml2 \
--with-libxml-dir=/opt/xml2/ \
--with-mcrypt=/opt/libmcrypt/ \
--with-mhash=/opt/mhash/ \
--with-mysql=/usr \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-mysqli=/usr/bin/mysql_config \
--with-openssl=/usr \
--with-openssl-dir=/usr \
--with-pdo-mysql=shared \
--with-pdo-sqlite=shared \
--with-pic \
--with-png-dir=/usr \
--with-sqlite=shared \
--with-tidy=/usr \
--with-xmlrpc \
--with-xpm-dir=/usr \
--with-xsl=/opt/xslt/ \
--with-zlib \
--with-zlib-dir=/usr





$ make && make install




PHP-FPM 설정
-------------


php-fpm.conf 파일의 설정을 변경. 
FPM의 경우에는 PHP가 CGI 방식과 같이 한개의 PHP스크립트를 프로세스 1개가 처리하는 방식이 아닌 PHP가 하나의 데몬으로 처리. 
즉 PHP가 내부 프로세스로 PHP스크립트를 대기. 그렇기 때문에 실행 권한 등으로 사용자를 설정하게 됨. 기본적으로 nobody를 사용


$ cp /usr/local/src/php-5.3.3/sapi/fpm/php-fpm.conf /opt/php-fpm_5.3.3/etc


listen = /tmp/php-fpm.sock FastCGI 용 Listen 포트를 설정. ( Unix Domain Socket )
TCP 설정도 가능. host:port


pid = /var/run/php-fpm.pid
user = nobody # 프로세스 사용자
group = nobody # 프로세스 그룹
pm.max_children = 50 # FPM 최대 자식 프로세스 수 
pm.start_servers = 20 # FPM 시작 서버 수 
pm.min_spare_servers = 5 # FPM 최소 대기 서버 
pm.max_spare_servers = 35 # FPM 최대 대기 서버


init.d  구동 스크립트
$ cp sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm


$ vi /etc/init.d/php-fpm
php_fpm_BIN=/opt/php-fpm_5.3.3/sbin/php-fpm
php_fpm_CONF=/opt/php-fpm_5.3.3/etc/php-fpm.conf
php_fpm_PID=/var/run/php-fpm.pid


$ chmod 755 /etc/init.d/php-fpm
$ chkconfig --add php-fpm
$ chkconfig php-fpm on




php 재빌드,php.ini 변경 후 이전에는 웹서를 재시동하면 적용되었으나
php-fpm의 경우는 init.d 구동 스크립트를 재실행 해야만 적용된다.



NginX 설정 
-------------


$ wget 'http://wiki.nginx.org/index.php?title=RedHatNginxInitScript&action=raw&anchor=nginx' -O nginx 
$ mv nginx /etc/init.d/


$ vi /etc/init.d/nginx
nginx="/opt/nginx-1.2.0/sbin/nginx"
NGINX_CONF_FILE="/opt/nginx-1.2.0/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx


$ chmod 755 /etc/init.d/nginx
$ chkconfig --add nginx
$ chkconfig nginx on



2012년 6월 1일 금요일

MAC OS X Lion 파일관련 설정

파인더 전체경로 표시 설정

$ defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES


파인더의 숨김파일을 모두 보도록 설정
$ defaults write com.apple.Finder AppleShowAllFiles YES

파인더 종료

Mac OS X에서 Maven 버전업


 $ cd /usr/share
 $ sudo mv maven maven303
 $ sudo ln -s /Users/foot/dev_local/apache-maven-3.0.4 maven
 $ mvn -version

2012년 5월 31일 목요일

MAC OS X에 wget 설치

curl -O http://ftp.gnu.org/gnu/wget/wget-1.13.4.tar.gz
tar -xzf wget-1.13.4.tar.gz
cd wget-1.13.4
./configure --with-ssl=openssl
make && make install
wget --help
cd .. && rm -rf wget*

MAC OS X에 톰캣 설치하기

# 터미널 실행 후 관리자 로그인
$ sudo su
$ cd /usr/local/src
$ wget http://ftp.daum.net/apache/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.tar.gz
$ tar xvfz apache-tomcat-7.0.27.tar.gz
$ mv apache-tomcat-7.0.27 /usr/local


# 사용자에 관리 권한 부여
$ chown  -R foot:staff /usr/local/apache-tomcat-7.0.27
$ exit


# 실행
$ /usr/local/apache-tomcat-7.0.27/bin/startup.sh
# 브라우저에서 locahost:8080 접속


# 정지
$ /usr/local/apache-tomcat-7.0.27/bin/shutdown.sh

2012년 5월 30일 수요일

aws ec2에 python + django + nginX + uWSGI



# ec2 AMAZON linux
# python 2.7.2 + uWSGI-0.9.6.5 + Django-1.4 + nginx-1.0.2


yum -y upgrade
yum -y groupinstall 'Development Tools' install openssl-devel* zlib*.x86_64
yum -y install zlib-devel

wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar xvzf Python-2.7.2.tgz

cd Python-2.7.2
./configure --prefix=/opt/python2.7.2 --with-threads --enable-shared
make
make install


# 터미널에서 python -V 실행시 설치한 버전이 아닌 이전 버전으로 나타난다면 
# 파일 경로 우선 순위에서 예전 python이 새로 설치한 python 보다 앞서는 경우이다.
# 이 경우 두 가지 방법으로 해결. 


# 첫번째 : 현재 python에 연결된 python 심볼릭 링크 경로를 새로 설치한 python 경로로 변경 
sudo rm /usr/bin/python
ln -s /opt/python2.7.2/bin/python2.7 /usr/bin/python
rm /usr/lib/python
ln -s /opt/python2.7.2/lib/python2.7 /usr/lib/python
rm /usr/include/python2.5
ln -s /opt/python2.7.2/include/python2.7 /usr/include/python


# 두 번째 : ~/.bash_profile의 python 실행 경로의 우선 순위를 바꾸는 것. 
# ~/.bash_profile 파일에 경로 설정(PATH)에서 방금 설치한 python 경로를 앞에 둔다.


vi ~/.bash_profile


# /opt/python2.7.2/bin:/opt/python2.7.2/lib:/opt/python2.7.2/include
# 을 맨 앞에 넣어 다음과 같이 만든다.


export PATH=/opt/python2.7.2/bin:/opt/python2.7.2/lib:/opt/python2.7.2/include:/usr/local/bin:$PATH


uWSGI
-------------
yum install python-devel libxml2 libxml2-devel zlib-devel


cd /opt/
wget http://projects.unbit.it/downloads/uwsgi-0.9.6.5.tar.gz
tar -zxvf uwsgi-0.9.6.5.tar.gz
mv uwsgi-0.9.6.5/ uwsgi/
cd uwsgi/
python setup.py build
make
             
useradd -M -r --shell /bin/sh --home-dir /opt/uwsgi uwsgi


chown -R uwsgi:uwsgi /opt/uwsgi
touch /var/log/uwsgi.log
chown uwsgi /var/log/uwsgi.log


setuptools, pip
-------------
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e
tar zxvf  setuptools-0.6c11.tar.gz
python setup.py build
python setup.py install


# pip는 easy_install이랑 비슷하지만 훨씬 더 다양한 기능들을 갖고 있다. 특정 패키지를 버전별로 설치한다던가, 삭제한다던가, 여러 패키지를 한번에 설치한다던가가 가능

easy_install pip 


django 설치
-------------
wget https://www.djangoproject.com/download/1.4/tarball/

tar xvfz Django-1.4.tar.gz
cd Django-1.4

sudo python setup.py install

cd /home/user
django-admin startproject project
cd project
python manage.py startapp app




# /home/user/project 에 django.ini를 만들어준다.


[uwsgi]
socket = 127.0.0.1:9001
chdir = /home/user/project
pythonpath = /home/user
env = DJANGO_SETTINGS_MODULE=project.settings
module = django.core.handlers.wsgi:WSGIHandler()
master = true
processes = 4
daemonize = /home/user/project/uwsgi.log
pidfile = /home/user/project/uwsgi.pid

uwsgi django.ini


nginx
----------------------
sudo yum install pcre pcre-devel

wget http://nginx.org/download/nginx-1.0.2.tar.gz
tar xvfz nginx-1.0.2.tar.gz
cd nginx-1.0.2
./configure --prefix=/opt/nginx --user=nginx --group=nginx
make
sudo make install


# /etc/init.d/nginx 스크립트 등록


wget -O init-rpm.sh http://library.linode.com/assets/662-init-rpm.sh
sudo mv init-rpm.sh /etc/rc.d/init.d/nginx
sudo chmod +x /etc/rc.d/init.d/nginx
sudo /sbin/chkconfig nginx on

vi /opt/nginx/conf/nginx.conf

server {
       listen   80;

       root /home/user/proj;

       server_name mydomain.com;

       location / {
               include uwsgi_params;
               uwsgi_pass 127.0.0.1:9001;
       }
}

명령어 kill로도 죽지 않는 프로세스 죽이기


ps -C uwsgi --no-heading | awk '{ print $1 }' | xargs -t -i kill -9 {}

2012년 5월 24일 목요일

아마존 EC2를 Coda의 SFTP를 이용하여 접속하기 - Mac

$ cp ap_northeast_1.pem ~/.ssh
$ chmod 700 ~/.ssh/ap_northeast_1.pem
$ vi ~/.ssh/config

# EC2 Tokyo:
Host *.ap-northeast-1.compute.amazonaws.com
    IdentityFile ~/.ssh/ap_northeast_1.pem
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    IdentitiesOnly yes
    ForwardAgent no


Coda에 세팅하기

protocol : sftp 선택
server : ec2의 elastic IP 입력
username : ec2-user
password : 패스워드 입력 인풋 우측의 열쇠 버튼을 클릭하여 .pem파일을 선택

2012년 5월 16일 수요일

AWS EC2 설정하기

Instance Launch  Configuaration : Amazon Linux AMI 2012.03   64bit




$MacBook-Pro:aws foot$ mkdir .aws
$MacBook-Pro:aws foot$ cp privatekey.pem .aws
$MacBook-Pro:aws foot$ chmod 400 .aws/privatekey.pem
$MacBook-Pro:aws foot$ ssh -i .aws/privatekey.pem ec2-user@xxxxxxx.compute-1.amazonaws.com
                           
The authenticity of host 'xxxxxxxx.compute-1.amazonaws.com (xx.xx.xxx.xxx)' can't be established.
RSA key fingerprint is 7f:6b:48:a5:a5:8d:e2:4f:b7:ff:99:d5:ce:33:0f:6a.
Are you sure you want to continue connecting (yes/no)? yes


$ sudo yum update



Updated:
  aws-amitools-ec2.noarch 0:1.4.0.7-1.2.amzn1     aws-apitools-ec2.noarch 0:1.5.3.0-1.0.amzn1     aws-apitools-rds.noarch 0:1.6.001-1.5.amzn1    
  bind-libs.x86_64 32:9.7.3-8.P3.17.amzn1         bind-utils.x86_64 32:9.7.3-8.P3.17.amzn1        initscripts.x86_64 0:9.03.27-1.18.amzn1        
  iproute.x86_64 0:3.2.0-3.7.amzn1                iptables.i686 0:1.4.12-2.15.amzn1               iptables.x86_64 0:1.4.12-2.15.amzn1            
  libpng.x86_64 2:1.2.49-1.12.amzn1               libudev.i686 0:173-3.20.amzn1                   libudev.x86_64 0:173-3.20.amzn1                
  ntp.x86_64 0:4.2.4p8-2.16.amzn1                 ntpdate.x86_64 0:4.2.4p8-2.16.amzn1             python-boto.noarch 0:2.3.0-1.0.amzn1           
  ruby.x86_64 0:1.8.7.357-1.18.amzn1              ruby-libs.x86_64 0:1.8.7.357-1.18.amzn1         system-release.noarch 0:2012.03-7.0            
  udev.x86_64 0:173-3.20.amzn1                   


Complete!




APM 설치


++ 루트 권한 획득
$ sudo su
$ sudo yum install php-mysql php php-xml php-mcrypt php-mbstring php-cli mysql httpd


$sudo yum list available | grep MySQL


$ sudo yum install mysql-server
$ sudo /etc/init.d/mysqld start
$ mysqladmin -u root password 'password'


$ mkdir  /home/ec2-user/www
$ vi  /etc/httpd/conf/httpd.conf


DirectoryIndex index.html index.php


NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot 웹문서경로
ServerName 서버이름
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>



sudo /etc/init.d/httpd start
sudo chkconfig --levels 235 mysqld on
sudo chkconfig --levels 235 httpd on











2012년 3월 29일 목요일

CentOS 시간 세팅

아마존 EC2 서버를 이용하는데 시간이 UTC로 표기됨.

$ date

Fri Jan 3 08:05:03 UTC 2013


$ echo $TZ
$ export env TZ=KST-09:00:00

KST는 date 명령어의 문자열에 불과하며 실제로 영향을 주는 내용은 -09:00:00.

+, -는 그리니치 천문대를 중심으로 서쪽은
+, 동쪽은 - 이고, 우리나라는 동쪽에 있으며 9시간이 빠르므로 -09:00:00


/etc/rc.d/rc.local 에 아래 내용 추가하게 되면 부팅시 마다 시간을 맞춰준다.


export env TZ=KST-09:00:00 

rdate -s time.bora.net
clock -w

2012년 3월 28일 수요일

crontab 사용


$ crontab -l  => crontab에 등록된 작업 목록
$ crontab -e => crontab에 작업 등록하기
* 작업 등록시 설명
------  -------- ---------------------------------------------------
필 드  의 미  범 위
------  -------- ---------------------------------------------------
첫번째  분    0-59
두번째  시    0-23
세번째  일    0-31
네번째  월    1-12
다섯번째 요일   0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째 명령어  실행할 명령을 한줄로 쓴다.
------  -------- ---------------------------------------------------

Ex)
매시간 30분 마다 동작
30 * * * * 명령어

2012년 3월 26일 월요일

proftpd-1.3.4a 설치



# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.4a.tar.gz

# cd /usr/src
# tar -zxcf proftpd-1.3.4a.tar.gz
# ./configure
# make
# make install
# proftpd -v
# cp sample-configurations/basic.conf /etc/proftpd.conf





서버에서 데몬이 자동으로 시작하도록 하기위해서는
#chkconfig --list
명령으로 확인.

서비스를 등록하기위해서 시작스크립트를 생성.
소스의 contrib/dist/rpm 디렉토리에 proftpd.init.d 파일을 다음과 같이 데몬 파일의 위치를 수정.

PATH="$PATH:/usr/local/proftpd/sbin"
수정이 완료되면 /etc/rc.d/init.d/ 디렉토리로 복사한다.
#cp proftpd.init.d /etc/rc.d/init.d/proftpd
#chmod 755 /etc/rc.d/init.d/proftpd
서비스 등록을 한다.
#chkconfig --add proftpd

런레벨 종류에 따라 서비스가 자동으로 실행하도록
3번 Full multiuser mode, 5번 X11을 on으로 설정한다.

#chkconfig  --level 35 proftpd on

3번은 텍스트 모드이고 5번은 GUI 런레벨이다.

실행
# /usr/local/proftpd/sbin/proftpd



conf 파일 수정하기 
# vi /usr/local/proftpd/etc/proftpd.conf 

ServerType                      standalone 
#ServerType                    inetd 
DefaultServer                    on 
ServerAdmin                    root@localhost 

//아래의 내용을 주석 해제하면 모든 사용자는 자기 홈디렉토리 이상으로는 이동할 수 없다.
DefaultRoot                    ~ 


/etc/rc.d/init.d/proftpd restart


2012년 3월 25일 일요일

mod_wsgi-3.3 설치 및 테스트

새로 설치한 python경로로 이동하여 공용 라이브러리를 심볼릭 링크
# cd /usr/local/python2.7/lib/python2.7/config
# ln -s ../../libpython2.7.so


# cd /usr/local/src/mod_wsgi-3.3
# ./configure --with-apxs=/usr/local/httpd/bin/apxs --with-python=/usr/local/python2.7/bin/python

# make && make install



apache httpd.conf 추가
# vi /usr/local/httpd/conf/httpd.conf


LoadModule wsgi_module modules/mod_wsgi.so
AddHandler wsgi-script .wsgi



WSGIScriptAlias /myapp /usr/local/httpd/htdocs/wsgi/test.wsgi
<Directory /usr/local/httpd/htdocs/wsgi>
Order allow,deny
Allow from all
</Directory>



apache 2.4.1 데몬 실행 실패


apache설치 후 데몬이 실행되지 않는 문제 발생. 

httpd.conf 구문 오류 체크가 정상인데 데몬이 실행되지 않음

아파치 로그를 확인 결과 proxy_balancer 모듈을 로드하지 못해 발생.

구체적인 원인 확인 필요.

# cat /usr/local/apache/logs/error_log

[Mon Mar 26 18:49:20.789764 2012] [proxy_balancer:emerg] [pid 2410:tid 139782170601216] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Mon Mar 26 18:49:20.789924 2012] [:emerg] [pid 2410:tid 139782170601216] AH00020: Configuration Failed, exiting

2012년 3월 16일 금요일

PHP 64-bit Standard Configuration


./configure \
--enable-bcmath \
--enable-calendar \
--enable-dbase \
--enable-exif \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-ftp \
--enable-gd-native-ttf \
--enable-libxml \
--enable-magic-quotes \
--enable-mbstring \
--enable-pdo=shared \
--enable-safe-mode \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zend-multibyte \
--enable-zip \
--prefix=/usr/local/apache/php \
--with-bz2 \
--with-curl=/opt/curlssl/ \
--with-curlwrappers \
--with-freetype-dir=/usr \
--with-gd \
--with-gettext \
--with-imap=/opt/php_with_imap_client/ \
--with-imap-ssl=/usr \
--with-jpeg-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libexpat-dir=/usr \
--with-libxml-dir=/opt/xml2 \
--with-libxml-dir=/opt/xml2/ \
--with-mcrypt=/opt/libmcrypt/ \
--with-mhash=/opt/mhash/ \
--with-mime-magic \
--with-ming=/opt/ming/ \
--with-mm=/opt/mm/ \
--with-mysql=/usr \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-mysqli=/usr/bin/mysql_config \
--with-openssl=/usr \
--with-openssl-dir=/usr \
--with-pdo-mysql=shared \
--with-pdo-sqlite=shared \
--with-pic \
--with-png-dir=/usr \
--with-pspell \
--with-sqlite=shared \
--with-tidy=/usr \
--with-ttf \
--with-xmlrpc \
--with-xpm-dir=/usr \
--with-xsl=/opt/xslt/ \
--with-zlib \
--with-zlib-dir=/usr

2012년 3월 14일 수요일

apple push 인증서 생성

개발용 인증서
$ openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

$ openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

$ openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

$ cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

배포용 인증서
$ openssl pkcs12 -clcerts -nokeys -out apns-cert.pem -in apns-cert.p12

$ openssl pkcs12 -nocerts -out apns-key.pem -in apns-key.p12

$ openssl rsa -in apns-key.pem -out apns-key-noenc.pem

$ cat apns-cert.pem apns-key-noenc.pem > apns.pem


인증서가 제대로 만들어졌는지 확인
$ openssl s_client -ssl3 -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev.pem

Vim 단축키

출처 : http://blog.outsider.ne.kr/540


h, j, k, l - 좌,하,상,우 커서이동

i - 현재 커서 위치에 Insert 하기
I - 현재 줄 맨앞에 Insert 하기
a - 현재 커서 다음칸에 Insert 하기
A - 현재 줄 맨뒤에 Insert 하기
o - 윗줄에 Insert 하기
O - 아랫줄에 Insert 하기

w - 단어 첫글자로 이동하기
W - 화이트스페이스 단위로 다음 글자로 이동하기
b - 백워드 방향으로 단어의 첫글자로 이동하기
B- 백워드 방향으로 화이트스페이스 단위로 다음 글자로 이동하기
e - 단어의 마지막 글자로 이동하기
ge - 백워드 방향으로 단어의 마지막 글자로 이동하기
gg - 문서 맨 앞으로 이동
G - 문서 맨끝으로 이동
^ - 문장 맨 앞으로 이동
0 - 라인 맨 앞으로 이동
$ - 문장 맨 뒤로 이동
f문자 - 문자의 위치로 이동 ; 를 누르면 계속 이동
F문자 - 백워드로 문자의 위치로 이동
t문자 - 문자의 앞위치로 이동 
T문자 - 백워드방향으로 문자의 앞위치로 이동

/단어 - 문서에서 단어 찾기 n이나 N으로 다음/이전 찾기
* - 현재 단어를 포워드 방향으로 찾기
# - 현재 단어를 백워드 방향으로 찾기

Ctrl + f - 다음 페이지 이동
Ctrl + b - 이전 페이지 이동
Ctrl + u - 페이지절반만큼 다음으로 이동
Ctrl + d - 페이지절반만큼 이전으로 이동
H - 현재 화면의 맨 위라인으로 이동
M - 현재 화면의 중간 라인으로 이동
L - 현재 화면의 마지막 라인으로 이동

]] - 포워드 방향으로 여는 컬리 블레이스( { )로 이동
[[ - 백워드 방향으로 여는 컬리 블레이스( { )로 이동
][ - 포워드 방향으로 닫는 컬리 블레이스( { )로 이동
[] - 백워드 방향으로 닫는 컬리 블레이스( { )로 이동
% - {}나 ()에서 현재 괄호의 짝으로 이동

dd - 현재 줄 잘라내기
dw - 단어 잘라내기
yy - 현재 줄 복사하기
p - 붙혀넣기
r - 현재 글자 교체하기
u - Undo
Ctrl + R : Redo
x - 현재 글자 지우기
X - 앞의 글자 지우기
> - 들여쓰기
< - 내어쓰기
. - 이전 명령어를 다시 실행

v - 비쥬얼모드(비쥬얼 모드에서 커서 이동해서 블럭지정 가능)
y - 복사하기
c - 잘라내기
cw - 단어 잘라내기
J - 다음 라인을 현재 줄의 끝으로 이어 붙힘
~ : 선택 문자 대소문자 변경
Ctrl + A : 숫자를 증가시키기
Ctrl + X : 숫자를 감소시키기

:w - 문서 저장하기
:q - 현재 문서 닫기
:q! - 저장하지 않고 닫기
:wq - 저장하고 닫기
:숫자 - 지정한 라인넘버로 이동

:new - 가로로 분할된 창 열기
:vs - 세로로 분할된 창 열기
Ctrl + w - 분할창 간에 이동하기
:tabnew - 새로운 탭 열기
:gt - 다음 탭으로 이동하기
:gT - 이전 탭으로 이동하기
:e ./ - 현재 탭에 오픈할 파일 탐색하기( ./ 는 현재위치에서 탐색 시작)
:colorscheme 스키마명 - VIM의 칼라스키마를 변경함(blue, desert, evening 등.. 스키마명에서 탭누르면 자동완성됨)

zc - 코드 접기(fold)
zo - 접힌 코드 펼치기
zd - fold 지우기
zR - 접힌 코드 모두 펼치기
zM - 코드 모두 접기
zD - 모든 fold 지우기

:buffers - 현재 Vim에서 여러 파일을 열었을때 버퍼에 있는 목록 확인
:buffer 숫자 - 버퍼 목록에 나온 숫자를 입력하면 해당 파일을 오픈함 ( :buffer 대신 :b 도 가능)
:bnext - 버퍼에 있는 다음 파일로 이동 ( :bn 도 가능)
:bprevious - 버퍼에 있는 이전 파일로 이동 ( :bp 도 가능)
:ball - 버퍼 목록에 있는 파일들이 가로로 분할된 창에 열림

 Vim Documentation