17 tháng 4, 2010

How to edit /etc/fstab?

Đây là bài viết của Nana Langstedt trên website tuxfiles.org. Cám ơn tác giả vì bài viết ý nghĩa :)

1. fstab là gì?

fstab là file cấu hình bao gồm các thông tin về tất cả các partition và các thiết bị lưu trữ trong máy tính. File này nằm trong thư mục /etc, vì vậy đường dẫn của nó là /etc/fstab.

/etc/fstab chứa thông tin về vị trí các partition và cách thức mà nó được mount. Nếu bạn không thể truy cập được vào phân vùng windoze, không thể mount CD hay chỉ có thể đọc mà không thể ghi vào một phân vùng nào đó. Như vậy khá bực mình, nhưng một nguyên nhân chủ yếu là do bạn đã cấu hình file fstab không đúng. Hiểu rõ cấu trúc file fstab sẽ giúp bạn khắc phục được những vấn đề này một cách dễ dàng. /etc/fstab thực chất chỉ là một file text đơn thuần, vì vậy bạn có thể chỉnh sửa với một trình biên tập bất kỳ (tôi sử dụng vi cho đơn giản). Tuy nhiên, cần phải nhớ rằng phải có quyền root mới có thể sửa được file fstab này.

2. Cấu trúc file fstab

Tất nhiên mỗi người đều có file /etc/fstab khác nhau do các thiết bị cũng như phân vùng và phân quyền khác nhau, nhưng tựu lại thì cấu trúc của file fstab đều như nhau. Dưới đây là một ví dụ về file /etc/fstab:

/dev/hda2 / ext2 defaults 1 1

/dev/hdb1 / ext2 defaults 1 2

/dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0

/dev/fd0 /media/floppy auto rw,noauto,user,sync 0 0

/proc /proc proc defaults 0 0

Những điều trên có ý nghĩa gì? Như bạn thấy, mỗi dòng hiển thị thông tin về một thiết bị hoặc một phân vùng. Cột đầu tiên chỉ ra tên của thiết bị hoặc phân vùng, cột thứ 2 là vị trí mount (mount point), cột thứ 3 là loại file hệ thống, cột thứ 4 là các tùy chọn khi mount, cột thứ 5 là tùy chọn dump và cột cuối cùng là tùy chọn kiểm tra file hệ thống. Phần dưới đây sẽ đi sâu phân tích các cột này.

3. Phân tích fstab

3.1. Thiết bị và điểm mount

Cột đầu tiên và cột thứ 2 thông báo chính xác cho lệnh mount biết sẽ phải mount thiết bị, phân vùng nào vào vị trí nào. Nếu bạn không chỉ định mount vào đâu thì hệ thống sẽ tự động mount vào vị trí mặc định (default moutn point). Hầu hết các distro đều có default mount point là /mnt, tuy nhiên một số distro khác (như Suse) thì default mount point là /media.

3.2 Kiểu file hệ thống

Cột thứ 3 trong /etc/fstab chỉ ra kiểu file hệ thống (filesystem) của thiết bị hoặc phân vùng. Có rất nhiều kiểu filesystem khác nhau, nhưng ở đây chỉ điểm qua một số kiểu chung.

* ext2 và ext3 (hiện nay đã có ext4): Rất nhiều phân vùng Linux là ext3. Trước đây ext2 là filesystem chuẩn cho Linux, nhưng hiện nay Ext3 và ReiserFS thường được sử dụng cho các distro Linux hơn. Tôi đang sử dụng OpenSuse 11.2 và phiên bản này đã sử dụng ext4.

* swap: Chính tên của kiểu này đã giải thích cho nó. Kiểu file hệ thống này được sử dụng cho phân vùng swap.

* vfat và ntfs: USB thường được định dạng là Vfat (hay còn được biết đến với tên gọi FAT32). Các phân vùng Windoze được định dạng là Vfat hoặc NTFS. Các dòng 9x (95, 98, ME) đều được định dạng là Vfat còn các dòng NT (NT, 2000, XP, Vista, 7) sử dụng NTFS nhưng nó cũng có thể sử dụng Vfat.

* auto: Nên nhớ đây không phải là một kiểu filesystem. Tùy chọn "auto" có nghĩa là hệ thống sẽ tự động dò filesystem của thiết bị hoặc phân vùng.

3.3 Tùy chọn mount

Cột thứ 4 trong file fstab liệt kê thất cả các tùy chọn cho thiết bị hoặc phân vùng. Đây cũng là cột quan trọng nhất và nó cũng giúp bạn giải quyết được các vấn đề đặt ra ở đầu bài. Dưới đây sẽ giải thích một vài tùy chọn hay sử dụng, để biết thêm chi tiết, bạn có thể dùng lệnh man mount để xem hướng dẫn.

* auto và noauto: Với tùy chọn auto, phân vùng sẽ được mount một cách tự động (tức là khi khởi động là được mount). auto là tùy chọn mặc định. Nếu bạn không muốn tự động mount, hãy sử dụng tùy chọn noauto

* user và nouser: Đây là tùy chọn rất hữu ích. Tùy chọn user cho phép người dùng bình thường có thể mount phân vùng này, còn tùy chọn nouser chỉ cho phép root mới có quyền mount. nouser là tùy chọn mặc định

* exec và noexec: exec cho cung cấp cho bạn quyền thực thi (x) trên phân vùng đó và noexec có ý nghĩa ngược lại. exec tùy chọn mặc định.

* ro: Tùy chọn chỉ cho phép đọc

* rw: Tùy chọn cho phép ghi.

* defaults: Tùy chọn defautls có nghĩa là: rw, suid, dev, exec, auto, nouser, async.

3.4 Dump và fsck

Dump là 1 công cụ sao lưu và fsck là công cụ kiểm tra file hệ thống. Thông thường các tùy chọn này để là 0, và không có nhiều ý nghĩa lắm đối với các thao tác thông thường. 2 thông số này chính là cột 5 và cột 6, như bạn thấy, đa phần 2 cột cuối cùng này có giá trị là 0 0.

=-=-=-=-=
Powered by Blogilo

15 tháng 4, 2010

Process String variable

Để xử lý các biến String có nhiều cách khác nhau, ở đây xin đưa ra 2 phương pháp khá đơn giản. Đó là: pattern matching và substituation. Ở đây ta giả sử có 1 biến $foo lưu giá trị "this is a test"

1. Pattern matching

Phương pháp này có thể match theo chiều trái sang hoặc phải sang. Công thức sử dụng như sau:

- Cấu trúc 1: ${foo#t*is}

Chức năng: xóa cụm từ tìm thấy ngắn nhất có thể tính từ trái sang. Ở đây từ cần tìm (pattern) là "t*is", tức là từ bắt đầu là t và kết thúc là is

Kết quả: " is a test"

- Cấu trúc 2: ${foo##t*is}

Chức năng: xóa cụm từ tìm thấy dài nhất có thể tính từ trái sang.

Kết quả: " a test"

- Cấu trúc 3: ${foo%t*st}

Chức năng: xóa cụm từ tìm thấy ngắn nhất có thể tính từ phải sang. Ở đây cụm từ cần tìm là "t*st", tức là từ bắt đầu bằng t và kết thúc bằng st.

Kết quả: "this is a "

- Cấu trúc 4: ${foo%%t*st}

Chức năng: xóa cụm từ tìm thấy dài nhất có thể tính từ phải sang.

Kết quả: ""

Lưu ý: Để dễ nhớ, có thể thấy trên bàn phím, phím # nằm bên trái phím $ còn phím % nằm bên phải, và tương ứng # tính từ trái còn % tính từ phải.

2. Substituation

Có 4 công thức cũng thường được sử dụng trong Bash để xử lý biến String.

- Công thức 1: ${foo:-bar}

Chức năng: Nếu biến $foo tồn tại và khác null thì trả về $foo, ngược lại trả về giá trị "bar", còn biến $foo vẫn giữ nguyên giá trị

- Công thức 2: ${foo:=bar}

Chức năng: Nếu biến $foo tồn tại và khác null trả về $foo, ngược lại trả về giá trị "bar" đồng thời set foo="bar"

- Công thức 3: ${foo:+bar}

Chức năng: Nếu biến $foo tồn tại và khác null thì trả về giá trị "bar", ngược lại trả về null

- Công thức 4: ${foo:?"error message"}

Chức năng: Nếu biến $foo tồn tại và khác null thì trả về $foo, ngược lại thì in ra chuỗi sau ? (ở đây là "error message")

(nguồn: http://www.linuxjournal.com/article/8919)

=-=-=-=-=
Powered by Blogilo

6 tháng 4, 2010

Split String

Có rất nhiều cách để chia 1 String thành nhiều phần trong Linux, ở đây tôi xin được đề cập 1 cách khá đơn giản và hữu dụng đó là sử dụng IFS (Internal Field Separator) và for.

Mặc định IFS sẽ có giá trị là khoảng cách (space), dấu tab (\t) và dấu xuống dòng (\n). Ví dụ như sau:

for i in `echo "This is my home"`;do

echo $i

done

Thì output sẽ là:

This

is

my

home

Ta có thể định nghĩa lại IFS để phục vụ cho việc chia String như sau:

IFS="s";for i in `echo "This is my home";do echo $i;done

hoặc

export IFS="s"

for i in `echo "This is my home";do echo $i;done

Thì sẽ được:

Thi

i

my home

=-=-=-=-=
Powered by Blogilo

1 tháng 4, 2010

Create and mount ISO file

1. Create ISO file from cdrom or DVD

sudo dd if=/dev/cdrom of=/path/to/iso/file

sudo dd if=/dev/dvd of=/path/to/iso/file

2. Create ISO file from directory

mkisoft -o /path/to/iso/file /path/to/directory

3. Mount ISO file

# mkdir /dir/for/mount

# mount -o loop -t iso9660 /path/to/iso/file /dir/for/mount

=-=-=-=-=
Powered by Blogilo