Thứ Ba, 8 tháng 7, 2014

Hướng dẫn sử dụng tmux

Tmux là một trình quản lý terminal hiệu quả. Ưu điểm:
  • Cho phép quản lý cùng lúc nhiều terminal
  • Detach/attach terminal, nhờ vậy bạn có thể lấy lại được terminal đã bị mất trong khi kết nối ssh đột ngột bị ngắt.
  • Cho phép tạo nhiều window trong một tmux session. Trong mỗi window, bạn lại có thể tạo ra nhiều pane. Pane sẽ chia nhỏ một window ra nhiều vùng theo chiều dọc hoặc chiều ngang
  • Cho phép đặt tên cho session và từng window trong session

Bài viết này chỉ hướng dẫn cách sử dụng

Để tmux nhận command, nó cần một prefix key. Mặc định prefix key này là Ctrl + b. Tôi có thể cấu hình prefix của tmux trong ~/.tmux.conf

set -g prefix C-a ### dùng ctrl + a làm phím prefix
unbind C-b
bind C-a send-prefix


Để khởi động tmux, tôi chỉ cần gõ tmux. Sau đây, tôi sẽ liệt kê một số command cần thiết: 

Các command bắt đầu bằng C-a (Ctrl + a) chỉ có tác dụng nếu tôi đang ở trong một tmux:
C-a s: Danh sách các tmux session 
C-a d: Detach tmux session hiện tại
C-a $: Đặt tên cho session hiện tại
C-a c: Tạo mới window
C-a w: Danh sách các window
C-a ,: Đặt tên cho window hiện tại
C-a &: Kill window hiện tại

exit: Thoát và kill window hiện tại

C-a %: Chia đôi window hiện tại thành hai pane theo chiều dọc
C-a ": Chia đôi window hiện tại thành hai pane theo chiều ngang
C-a [arrow key]: Di chuyển qua lại giữa các pane trên window
Chia pane rất tiện dụng khi vừa chạy chương trìn, vừa xem log của chương trình. 
C-a x: Kill pane hiện tại.

Copy paste giữa các window hoặc pane

C-a [  để vào copy mode. Dùng C -spacebar để bôi đen vùng. Dùng arrow key để di chuyển lên xuống, trái phải. Dùng Alt + w để copy. Cuối cùng dùng C-a ] để paste vào một window hoặc pane khác.

Các command sau sẽ có tác dụng khi tôi ở ngoài tmux session:
tmux list-sessions: Danh sách các tmux session.
tmux attach -t <sessionname>: Session name có thể lấy từ kết quả chạy lệnh tmux list-sessions. Bạn có thể attach lại tmux terminal qua session name
tmux kill-session -t <sessionname>: Kill một session xác định
tmux kill-server: Kill tất cả tmux session

Chủ Nhật, 6 tháng 7, 2014

Copy dữ liệu lên/từ server qua ssh

Với một system admin đây là hoạt động rất hay gặp. Để thực hiện được bạn có hai cách:
- Dùng scp
- Dùng rsync qua ssh

Cách 1: Tôi dùng scp
Copy lên server
scp <username>@<server ip>:/home/<username> <file>

Copy từ server về thư mục hiện tại
scp <username>@<server ip>:/home/<username>/<file> .

Cách 2: Tôi dùng rsync qua ssh
Copy lên server
rsync -avz <file> -e "ssh -l <username>" <server ip>:/home/<username>

Copy từ server về thư mục hiện tại
rsync -avz -e "ssh -l <username>" <server ip>:/home/<username>/<file> .

Thứ Bảy, 5 tháng 7, 2014

Truy cập nội dung file iso

Trên windows, tôi có thể dùng một số tool như power iso để ảo hóa file iso thành một ổ đĩa gắn ngoài. Ý tưởng tương tự cũng được hiện thực hóa trên linux. Tôi sẽ ảo hóa iso thành một loop device và gắn loop device đó vào một mount point trên hệ thống. Cuối cùng tôi truy cập nội dung file iso qua chính mount point đó.

sudo mount -o loop file.iso /mnt

Điều chỉnh giới hạn PID trên hệ thống

Mặc định, linux dành 15 bits cho PID. Do đó giới hạn của PID sẽ là 0..2^15 -1= 0..32767 PIDs

Để điều chỉnh thông số này, tôi thay đổi giá trị trong file:
/proc/sys/kernel/pid_max

Có hai cách để thay đổi giá trị này:

Cách 1: Bổ sung thêm một dòng vào /etc/sysctl.conf
kernel.pid_max=<Giá trị mới>
Save lại, sau đó để thay đổi được ấn định tôi dùng lệnh
sysctl -p

Cách 2: Sửa trực tiếp giá trị vào trong file /proc/sys/kernel/pid_max
Sau đó ấn định thay đổi bằng lệnh 
sysctl -p

Tôi có thể xác nhận thay đổi cho cả hai cách trên qua:

systcl kernel.pid_max
hoặc
cat /proc/sys/kernel/pid_max

Tính số CPU và số core của mỗi CPU

Để tính số CPU, tôi sẽ tìm trong file /proc/cpuinfo. Mỗi CPU sẽ được gán cho một physical id khác nhau. Tính số lượng physical id phân biệt sẽ ra số CPU

sudo cat /proc/cpuinfo | grep "physical id" | sort | uniq
physical id    : 0 -> Kết quả này cho thấy hệ thống chỉ có một CPU

Để tính số core của mỗi CPU, tôi cũng tìm trong /proc/cpuinfo. Các core của cùng một CPU sẽ có số physical id giống nhau. Thống kê số lượng physical id trên mỗi CPU sẽ cho ra số core của mỗi CPU

sudo cat /proc/cpuinfo | grep  "physical id" | sort | uniq -c
4 physical id    : 0 -> Kết quả này cho thấy CPU có physical id 0 có 4 cores.

Thứ Năm, 3 tháng 7, 2014

Lấy thông tin đĩa cứng

Các thông tin tôi có thể lấy:
- Đĩa cứng hiện tại có tổng dung lượng bao nhiêu ?
- Đĩa được hiện tại phân vùng thế nào ?
Tôi dùng lệnh sau:
sudo fdisk -l

Để biết chi tiết file system type và mức độ sử dụng dung lượng của từng phân vùng trên đĩa cứng hiện tại ? Tôi dùng lệnh sau:
df -Th

Muốn lấy thông tin chi tiết về phân vùng của đĩa cứng khác, tôi phải mount đĩa cứng đó lên một mountpoint của đĩa cứng hiện tại
sudo mount -t ext3 /dev/sdb /mnt

Kiểm tra đĩa cứng đã được mount chưa, tôi dùng lệnh:
mount

Di chuyển vào mountpoint và chạy lần lượt hai lệnh fdisk -l và df -T để lấy thông tin về đĩa cứng được mount

Sau khi hoàn thành công việc trên /dev/sdb, tôi cần unmount nó khỏi hệ thống:
sudo umount /mnt 
hoặc
sudo umount /dev/sdb

Chủ Nhật, 29 tháng 6, 2014

Cấu hình named based virtual host và ip based virtual host

Named based virtual host: Một apache server cho phép host nhiều website có domain name khác nhau trên cùng một IP. Name based virtual host được sử dụng để cung cấp shared hosting.

IP based virtual host: Một apache server cho phép host nhiều website có domain khác nhau trên các IP khác nhau.

Cấu hình named based virtual host:

Chuẩn bị
<ServerRoot>/public_html/namebased/web1/index.html
               <html><body><h1>Name based: Website 1</h1></body></html>
<ServerRoot>/public_html/namebased/web2/index.html
               <html><body><h1>Name based: Website 2</h1></body></html>
<ServerRoot> là thư mục trỏ đến thư mục cài đặt của apache, trực tiếp chứa các thư mục con như conf, bin...
  
Apache server nằm trên một máy tính có IP được gán trên một interface là 192.168.56.1

Cấu hình để apache server host hai website kể trên:
vi <ServerRoot>/conf/httpd.conf

Listen 8080

<VirtualHost 192.168.56.1:8080>
   ServerName web1.namebased.example.com
   ServerAlias web1 web1.example.com  
   ServerAlias *.web1.namebased.example.com
   DocumentRoot <ServerRoot>/public_html/namebased/web1/
</VirtualHost>

<VirtualHost 192.168.56.1:8080>
   ServerName web2.namebased.example.com
   DocumentRoot <ServerRoot>/public_html/namebased/web2/
</VirtualHost>

Nguyên tắc chung của apache (đúng với cả name based và ip based virtualhost) sẽ là:
  • Tìm virtual host nào có ip:port phù hợp nhất. Nếu không có virtual host phù hợp thì apache sẽ đọc global server config để phục vụ. (Kiểm tra điều này bằng cách thay đổi tham số ip:port của từng virtualhost ví dụ chuyển hết về thành 192.168.56.1:80)
  • Tiếp đến, tìm virtual host có ServerName hoặc ServerAlias khớp với host header của request đến apache. Nếu không tìm thấy thì apache sẽ dùng default virtual host (Là virtual host đầu tiên khớp ip:port). Nếu tìm thấy nhiều hơn một virtual host có ServerName hoặc ServerAlias khớp thì apache dùng virtual host khớp đầu tiên  
Cấu hình IP based virtual host:

Chuẩn bị
<ServerRoot>/public_html/ipbased/web1/index.html
               <html><body><h1>IP based: Website 1</h1></body></html>
<ServerRoot>/public_html/ipbased/web2/index.html
               <html><body><h1>IP based: Website 2</h1></body></html>

Mỗi website khi này cần các IP khác nhau. Tôi không muốn mua thêm NIC (Network Interface Card). Tôi sẽ cấu hình IP alias trên một interface để tăng số IP gán trên interface này.
sudo ifconfig vboxnet0:0 192.168.56.2 up

Kiểm tra lại bằng ifconfig, bạn sẽ thấy có một alias IP 192.168.56.2 gán trên sub interface vboxnet0:0

Để hủy IP alias, bạn dùng:
sudo ifconfig vboxnet0:0 192.168.56.2 down

Cấu hình để apache server host hai website kể trên:
vi <ServerRoot>/conf/httpd.conf

Listen 80

<VirtualHost 192.168.56.1:80>
   ServerName web1.ipbased.example.com
   DocumentRoot <ServerRoot>/public_html/ipbased/web1/
</VirtualHost>

<VirtualHost 192.168.56.2:80>
   ServerName web2.ipbased.example.com
   DocumentRoot <ServerRoot>/public_html/ipbased/web2/
</VirtualHost>

Chú ý:
  • Apache có thể lắng nghe dịch vụ trên nhiều interface và nhiều port đồng thời.
  • Bạn có thể cấu hình /etc/hosts để browser của bạn có thể phân giải tên miền mà không cần đến DNS.