Never ask how to use, just wonder how to make...

Jun 26, 2011

Sunday clip: Linux AD - What does it me

Clip rất hay và sáng tạo, nội dung thể hiện triết lý của Linux ^^. Tác phẩm lọt vào top 5 của cuộc thi "We're Linux".



Dec 23, 2010

Cài đặt server SVN trên nền CentOS

Subversion (SVN) là một phần mềm mã nguồn mở dùng để quản lý và kiểm tra các phiên bản mã nguồn khác nhau trong quá trình phát triển phần mềm.
Trong bài viết này tôi sẽ trình bày các bước thiết lập một máy chủ Subversion trên nền hệ điều hành CentOS. Bài hướng dẫn này bao gồm các nội dung chính:
- Cài đặt subversion và cách tạo một repository mới
- Thiết lập WebDAV để có thể sử dụng SVN qua giao thức HTTP
Bạn cần hiểu về các khái niệm của SVN trước khi cài đặt. Có thể tham khảo ở link sau: http://svnbook.red-bean.com/en/1.5/svn.basic.html

1. Cài đặt Subversion
Trên Centos, cài đặt subversion rất đơn giản, bạn chỉ cần sử dụng lệnh yum:
# yum install subversion

2. Bước tiếp theo sẽ là tạo một repository mới. Giả sử bạn đã có thư mục /services/subversion, và muốn tạo repository mới ở đây, tên là new_project. Các lệnh để thiết lập như sau:
# svnadmin create --fs-type fsfs /services/subversion/repositories/new_project

3. Cài đặt và cấu hình mod_dav_svn của Apache
WebDAV (RFC 2518) là một tập hợp các chuẩn mở rộng của giao thức HTTP, để cho phép nhiều người dùng có thể hợp tác sửa đổi và quản lý từ xa các file trên một webserver. Được viết dựa trên tập chuẩn WebDAV, module dav_svn của Apache cho phép chúng ta truy cập repository SVN của mình thông qua máy chủ web Apache.
- Cài đặt mod_dav_svn:
# yum install mod_dav_svn
- File /etc/httpd/conf.d/subversion.conf:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
< Location /repos/ >
DAV svn
SVNParentPath /services/subversion/repositories/
AuthzSVNAccessFile /services/subversion/auth/acl
SVNListParentPath on
SVNPathAuthz off
AuthType Basic
AuthName "SVN Center"
AuthUserFile /services/subversion/auth/account
Require valid-user
</Location >
Các tham số quan trọng của file subversion.conf:
Tham số Location quy định URL SVN của bạn (VD: http://example.com/repos/new_project).
Tham số SVNParentPath khai báo đường dẫn tới thư mục chứa các repository.
Tham số AuthUserFile khai báo đường dẫn tới file chứa các tài khoản người dùng SVN.
Giá trị của tham số AuthzSVNAccessFile là đường dẫn đầy đủ của file cấu hình ACL, có chức năng phân quyền cho người dùng.
- Tạo thư mục auth:
# mkdir /services/subversion/auth
- Tạo file tài khoản:
# touch /services/subversion/auth/account
- Tạo file access control list:
# touch services/subversion/auth/acl
- Restart Apache:
# service httpd restart

4. Để có thể sử dụng repository new_project ta đã tạo ở bước 2, cần thiết lập permission cho phép Apache sử dụng thư mục repository (giả sử Apache đang được chạy bởi user apache):
# chown -R apache:apache /services/subversion/repositories/new_project
# chmod -R g+w /services/subversion/repositories/new_project
# chmod g+s /services/subversion/repositories/new_project/db

5. Tạo một tài khoản SVN mới bằng lệnh (hệ thống sẽ yêu cầu bạn khai báo mật khẩu cho tài khoản này):
# htpasswd -m /services/subversion/auth/account svn_user

6. Cấp quyền truy cập cho tài khoản svn_user bằng cách khai báo repository và tài khoản vào file acl như sau:
[new_project:/]
svn_user = rw

Như vậy, tài khoản svn_user sẽ có quyền đọc và ghi đối với repository new_project. Bạn có thể check out repository của mình thông qua URL http://example.com/repos/new_project với tài khoản trên.
Nếu bạn muốn tạo thêm một repository mới, hãy thực hiện lại các bước 2, 4, 5, 6.

Để tìm hiểu thêm về cách cài đặt và cấu hình Subversion, bạn hãy đọc chương 5 của ebook: http://svnbook.red-bean.com/en/1.5/svn-book.html


Dec 4, 2010

Google sắp mở Chrome Web Store


Đang code thì nhận được email từ team Chrome/Chromium. Như vậy là Google sắp tung ra chiêu mới: Web Store, để chọn đường cho việc kinh doanh apps trên Chrome OS sau này. Các bạn tập tành viết app dần đi, sắp bán được rồi đấy ^^.


Upcoming Launch of the Chrome Web Store

Hello!

Thank you for developing for Google Chrome. These last few months, our team has been hard at work, preparing for the Chrome Web Storelaunch later this year. Extensions and themes for Google Chrome will be part of this new store. With this email we wanted to inform you of some upcoming developments and changes in the extensions gallery and how you can best prepare the items you have listed in the gallery for the upcoming launch.

  1. We have updated our guidelines for extension and theme creative assets: We recommend you to produce all the creative materials described in our docs. These are currently available only to apps developers but the same guidelines will apply to all items listed in the store once we launch. So, if you get these prepared now, you are going to be ready when the store launches. For those of you with complex extensions, we also highly recommend investing some time in preparing videos and slideshows, describing how your extensions work.

  1. Double-check our branding policies: If you are using Google trademarks and brand names to describe your items, please take a moment to re-read our branding policies to help you avoid common mistakes.

  1. Verify your listed items using Google’s Webmaster Tools: This new feature allows you to associate your website with the items you have posted in the store. This will make users more comfortable trying them out. Access this feature at the developer dashboard.

  1. Set up your Google Checkout merchant account and associate it with your developer account: If you are located in the US and want to sell apps and eventually extensions or themes through the store, you’ll need to register for a Google Checkout merchant account. You can find more information on this new help article.

  1. Make your extensions more discoverable: We will be launching a robust system of extensions categories in the gallery. You now have the option to classify your extension in up to three of these categories through the developer dashboard. This will help your extension be discovered by users who will be browsing the pages for each category.

Thank you again for making Google Chrome a better browser.

The Google Chrome Extensions team

Jun 2, 2010

Bảo vệ mắt tốt hơn với Redshift

Bạn là người làm việc với máy tính? Bạn sử dụng máy nhiều hơn 10 giờ mỗi ngày? Và mỗi tối bạn có hơn 5 tiếng dùng máy? Mắt bạn luôn ở trong trạng thái mệt mỏi hoặc buồn ngủ do ánh sáng từ màn hình máy tính. Hãy thử sử dụng phần mềm Redshift. Redshift sẽ tinh chỉnh nhiệt độ màu của màn hình cho phù hợp với ánh sáng xung quanh bạn, dựa vào toạ độ địa lý của bạn.

Vào ban đêm, nhiệt độ màu sẽ được chỉnh cho phù hợp với nhiệt độ màu của đèn trong phòng (khoảng 3700K đối với bóng dây tóc). Ban ngày, nhiệt độ màu sẽ tương ứng với nhiệt độ màu của ánh sáng tự nhiên, khoảng 5500K - 6500K (mặc định là 5500K). Ánh sáng sẽ có nhiệt độ cao hơn vào những ngày nhiều mây. Khi nhiệt độ màu màn hình phù hợp với nhiệt độ màu của ngoại cảnh, mắt bạn sẽ không còn cảm giác mệt mỏi do làm việc lâu bên máy tính nữa.

Để cài đặt Redshift cho Ubuntu Lucid và Karmic, bạn có thể thêm repository và cài như sau:
  • sudo add-apt-repository ppa:jonls/redshift-ppa
  • sudo apt-get update && sudo apt-get install redshift
Sau khi cài đặt thành công, bạn vào website http://www.getlatlon.com/ để lấy vĩ độ và kinh độ chính xác nơi bạn ở. Ví dụ, toạ độ ở Yên Phụ, Hà Nội là khoảng (21.1, 105.9). Sau đó, bạn mở một cửa sổ Terminal và chạy lệnh sau để redshift hoạt động:
  • gtk-redshift -l 21.1:105:9
Để chương trình có thể chạy lúc khởi động, bạn thêm lệnh trên vào danh mục các ứng dụng chạy start-up (System > Preferences > Start-up Application).

Bạn có thể sử dụng tham số -t để thay đổi nhiệt độ màu mặc định của redshift. Ví dụ:
  • gtk-redshift -l 21.1:105:9 -t 6700:4700
Trong đó 6700 là nhiệt độ màu ban ngày, 4700 là nhiệt độ màu ban đêm. Mình thấy để nhiệt độ là 6700:4700 sẽ vừa với mắt hơn ^^ (mặc định là 5500:3700).

Bạn cũng có thể tạm thời tắt redshift để xem ảnh hoặc phim với màu sắc thực bằng cách kích chuột vào biểu tượng của redshift trên khay hệ thống.


Chúc các bạn sức khoẻ để thành công ^^.

May 30, 2010

May 23, 2010

Sunday clip: Linux Sets You Free



Bài hát vui nhộn được sáng tác và thể hiện bởi Scott Dastrup.

May 14, 2010

Những phần mềm nào sẽ được cài mặc định cho Ubuntu Netbook Edition 10.10?



Bản kế hoạch các phần mềm mặc định cho Ubuntu Netbook Edition 10.10 (UNE 10.10) vừa được đưa lên Launchpad ngày hôm nay. Tất nhiên danh sách này vẫn đang trong quá trình thảo luận, và có thể có những thay đổi nếu cần ^^.

Đầu tiên là trình duyệt web. Trình duyệt mặc định cho UNE 10.10 sẽ là Chromium, phần mềm nguồn mở do Google hậu thuẫn. Bản kế hoạch viết rằng Chromium sẽ là trình duyệt mặc định cho đến bản Alpha3, nếu như nó phù hợp với kích thước của đĩa LiveCD. Chromium cũng còn một số vấn đề khác cần xem xét. Các vấn đề này chủ yếu liên quan đến sự tương thích về phần mềm (in ấn, ffmepg, openjdk,...) cũng như giao diện (menu, buttons). Nếu Chromium không được chọn, trình duyệt mặc định sẽ là Midori.


Shotwell nhiều khả năng sẽ được chọn làm trình quản lý ảnh. Shotwell tương đối nhẹ, và tương thích khá tốt với các dịch vụ. Đây là trình quản lý ảnh duy nhất trên Gnome hiện có thể tương tác với cả Picasa, Flick và Facebook.


Bộ công cụ văn phòng OpenOffice sẽ được thay thế bởi ba phần mềm tương ứng là Abiword, GnumericGlide. Cũng như Ubuntu 10.04, Zoho sẽ vẫn được cung cấp kèm theo, tuy nhiên nhược điểm của dịch vụ này là không phục vụ chỉnh sửa ngoại tuyến!



Về chương trình multimedia, khả năng Banshee được chọn vẫn cao nhất. Trình chơi nhạc của Moblin (hornsey) đã bị bỏ rơi. XBMC tuy tốt nhưng lại không sử dung gstreamer. Vấn đề của Banshee chỉ là liệu nó có phù hợp với đĩa LiveCD (lại vấn đề dung lượng ^.-).

Cuối cùng, nhóm phát triển vẫn đang thảo luận về việc trình khách email nào sẽ được cài mặc định. Có vẻ như họ sẽ tuỳ biến lại Evolution cho phù hợp với netbook. Đã có một bản tuỳ biến của Evolution là Evolution Express, nhưng hình như có nhiều người không thích nó.

Về phần mình, mình vẫn khoái nghe nhạc bằng Rthymbox, Symphony cho tác vụ văn phòng và webmail + 1 tool notify cho thư điện tử :">.

May 9, 2010

Cần làm gì sau khi cài Ubuntu: Chạy script này ngay


Script được viết bởi Andrew[at]webupd8.org, Mục đích của script này là đơn giản hoá việc cấu hình mọi thứ của Lucid ngay sau khi cài đặt. Việc cấu hình bao gồm tự động mount các ổ NTFS lúc khởi động, thêm các kho (repository) bổ sung như Medibuntu hay GetDeb, xoá các gói không cần thiết, cài đặt các phần mềm quan trọng (VLC, Chrome, Dropbox,...) cho đến những tinh chỉnh nhỏ như chuyển windows button về bên trái theo kiểu Karmic, tắt âm thanh đăng nhập hoặc đổi ngày đầu tuần thành Thứ 2 thay vì chủ Nhật,...

Nhờ script, chúng ta có thể tiến hành nhanh chóng và đơn giản những công việc mà ta có thể phải tốn hàng chục câu lệnh.

Phiên bản mới nhất 0.4.9.1 đã hỗ trợ tiếng Việt. Các bạn có thể tải về từ địa chỉ:
http://launchpad.net/ubuntustart/0.4.x/0.4.9/+download/ubuntu-10.04-start-0.4.9.1.tar.gz

Một vài screenshot:




Dec 15, 2009

Tìm hiểu những cải tiến của KDE SC 4.4b

Beta 1 là bản thử nghiệm mới nhất của KDE SC 4.4. Tin rằng nó sẽ có nhiều cải tiến, tôi đã cài thử lên OpenSUSE 11.2 và làm việc trên đó liên tục trong vài ngày gần đây. Và giờ đây tôi xin được tổng hợp một số tính năng mới của bản KDE này (Video demo có ở cuối bài viết này).



Bản 4.4 beta là bản đầu tiên sử dụng tên mới KDE SC (KDE Software Compilation) [*], thay cho tên cũ là KDE desktop environment. Ở phiên bản này, nhóm phát triển đã xây dựng những tính năng mới rất thú vị.

Nếu bạn rất thích cách bố trí tab trên title bar của Google Chrome, hãy nghía qua bức ảnh sau của Mozilla FireFox trên KDE SC 4.4, và chú ý vào thanh tiêu đề của cửa sổ:




Bạn nghĩ rằng Mozilla đã cải tiến giao diện cho FF? Không. Đây là tính năng "Tabbed windows" của KWin. Tính năng này cho phép người dùng nhóm các cửa sổ khác nhau vào một group hiển thị dạng tab. Điều này thực sự tiện lợi khi người dùng phải làm việc với rất nhiều cửa sổ đồng thời.




Cũng như KWin, Plasma cũng đã có rất nhiều thay đổi. Folder Viewer đã được cải tiến đến mức tiện lợi nhất, giúp chúng ta có thể view một file ở bất kỳ thư mục nào mà không tốn đến một lần click chuột:




Hộp thoại Add Widgets đã được thay đổi, tích hợp xuống đáy màn hình, gọn gàng và tiện dụng:




Trong khi đó, hộp thoại Run lại được chuyển lên trên, tích hợp tính năng search desktop được cung cấp bởi dự án Nepomuk:




Từ phiên bản KDE 4.0, nhóm phát triển đã muốn thay đổi khái niệm Desktop truyền thống, bản chất là một thư mục bình thường. Để làm điều đó, họ đã đưa ra khái niệm Activity, kèm theo đó là các Widgets. KDE SC 4.4 đã cụ thể hóa khái niệm này. Một desktop có thể được cài đặt trở thành một trong 3 loại Activity:
- Desktop Activity: Là Desktop trong các version trước của KDE4: Một không gian và chúng ta thêm thoải mái các Widgets để có các chức năng mong muốn.
- Search and Launch Activity: Activity này cho phép chúng ta search và khởi động các chương trình trên máy cá nhân một cách nhanh nhất.
- News Activity: Activity này được tối ưu cho việc đọc tin (RSS, microblog,...) bằng việc chia các Widgets tin tức vào hai cột. Tuy nhiên chức năng này chưa được hoàn thiện (còn khá nhiều bug).

Desktop Activity:




Search and Launch Activity:



Ngoài ra, các ứng dụng khác trong KDE SC 4.4 như Dolphin, Konsole, Knotifier, Klipper cũng có nhiều thay đổi tích cực. Để có những trải nghiệm cụ thể, bạn hãy cài thử lên VirtualBox ^^.

Have fun ^^.

[*] Nhãn hiệu KDE đã được xác định lại từ "K Desktop Environment" thành "KDE Software Compilation", thể hiện rằng KDE hiện nay không còn là một phần mềm như trước, mà đã trở thành một tập hợp các phần mềm xây dựng trên một nền tảng chung (KDE Platform).

Update: Video giới thiệu tính năng của KDE SC 4.4

Part I:




Part II:

Jun 23, 2009

Làm chủ Linux Bash shell: Chuyển hướng xuất/nhập trong Linux

Tiếp tục serie bài Làm chủ Linux Bash shell với một bài viết của anh Nguyễn Việt Cường, thành viên nhóm OSG ColTech. Bài viết đã được đăng ở diễn đàn Fotechchủ đề này.

Hôm nay nhân chuyện có người hỏi về làm thế nào để chạy một lệnh một cách "âm thầm" tức là không in cái gì ra màn hình cả, mình viết một cái tut nhỏ về chuyện này. Ví dụ đưa ra ở đây là lệnh curl, chi tiết về cú pháp lệnh thì sử dụng "man curl" trên Linux hoặc trên Google.

Trước hết, ta sẽ đi thẳng vào vấn đề rồi sau đó mới giải thích. Để một lệnh chạy trong chế độ "âm thầm" như vậy thì ta thêm đoạn sau vào đuôi lệnh:
> /dev/null 2>&1
Mà cụ thể nếu ta muốn làm công việc đó với lệnh curl thì như sau:
$ curl http://osg.vnu.edu.vn/ > /dev/null 2>&1
Vì sao lại làm thế? Dấu ">" có ý nghĩa gì? "/dev/null" là cái gì mà ghê gớm thế? "2>&1" là cái gì mà trông kì lạ thế? Đó cũng là những thắc mắc của mình khi bước vào thế giới Linux/Unix.

1. Giới thiệu

Trên hầu hết các hệ điều hành nói chung và Linux/Unix nói riêng thì có 3 dòng xuất nhập chuẩn (I/O) là STDIN, STDOUT và STDERR mà chức năng tương ứng là dòng nhập chuẩn, dòng xuất chuẩn và dòng xuất lỗi chuẩn. Chúng được gọi là các open file và hệ thống gán cho mỗi file này một con số gọi là file descriptor. Ba con số tương ứng với 3 dòng xuất nhập chuẩn ở trên là 0, 1 và 2. Cụ thể:
standard input -> stdin -> 0<> stdout -> 1>
standard error -> stderr -> 2>
Trong C++ thì 3 dòng xuất nhập chuẩn này tương ứng với 3 đối tượng cin, cout và cerr.

Chú ý: Trong bài tut này thì mình sử dụng Bourne shell trong đó dấu $ thể hiện user bình thường và # thể hiện user root. Tuy nhiên hầu hết nội dung trong bài này có thể áp dụng với một số loại shell khác như sh, csh, tcsh... Với C chell (csh, tcsh) thì không sử dụng được các con số (file descriptor).

2. Xuất/Nhập

Trong chế độ command line của hầu hết các hệ điều hành thì "<" dùng cho chuyển hướng nhập và ">" dùng cho chuyển hướng xuất. Vì sao phải chuyển hướng? Vì có nhiều lúc ta muốn kết quả xuất ra màn hình được lưu lại vào một file và dữ liệu nhập vào thay vì từ bàn phím thì lại từ một file.

2.1. STDIN

STDIN chỉ các dòng nhập chuẩn nói chung và nó thường là từ bàn phím. Khi chúng ta gõ bàn phím tức là chúng ta đang nhập vào STDIN. Để dữ liệu đầu vào là một file thì ta dùng dấu "<". Ví dụ, nếu ta dùng lệnh cat mà không có tham số thì khi ta gõ gì nó sẽ hiển thị ra cái đó, hay nói đúng hơn sẽ hiển thị lại những gì ta nhập vào từ input chuẩn. Vậy thì giả dụ ta cần hiển thị file /etc/passwd thì ngoài cách truyền thống là
$ cat /etc/passwd
thì ta có thể sử dụng:
$ cat < /etc/passwd
hoặc
$ cat 0< /etc/passwd
Tại sao lại có thể bỏ số 0 mà chức năng vẫn tương tự? Đó là vì mỗi khi khởi tạo một process thì hệ thống đã gắn một dòng nhập chuẩn cho process đó mà ở đây là STDIN hay 0.

2.2. STDOUT

STDOUT là các dòng xuất chuẩn nói chung và nó thường là xuất ra màn hình, ra cửa sổ console hoặc terminal. Để dữ liệu đầu ra được ghi vào một file thì ta sử dụng dấu ">". Ví dụ ta muốn danh sách các file trong một thư mục được ghi vào file dir.txt thì ta sử dụng lệnh sau:
$ ls -al > dir.txt
hoặc
$ ls -al 1> dir.txt
Lí do vì sao có thể bỏ số 1 đi tương tự như với STDIN, tức là khi khởi tạo một process thì hệ thống đã gắn một dòng xuất chuẩn cho process đó mà ở đây là STDOUT hay 1.

Đến đây ta có thể kết hợp sử dụng song song STDIN và STDOUT để làm thao tác copy file. Ví dụ ta muốn backup file /etc/passwd thì ta có thể làm như sau:
$ cat < /etc/passwd > ~/passwd.bak
Lệnh này tương đương với lệnh:
$ cp /etc/passwd ~/passwd.bak
Có một ứng dụng cực kì có ích của việc kết hợp này là chuyển đổi file text giữa Windows và Unix. Như các bạn đều biết thì trong file text của Windows, việc xuống dòng được thể hiện bằng cặp kí tự \r\n còn trong Linux/Unix thì chỉ là \n. Ai phải trên cả hai môi trường đều thấy sự bất tiện của việc chuyển đổi đó. Giải pháp đưa ra ở đây là sử dụng lệnh tr, cụ thể như sau:
tr -d '\r' <> unix.cpp
Lệnh này sẽ nhận dòng nhập chuẩn sau đó xoá các kí tự \r rồi ghi ra dòng xuất chuẩn. Dòng nhập và dòng xuất ở đây được định hướng lại để đến từ một file và ghi ra một file.

Tuy nhiên nếu dùng ">" thì nội dung của file sẽ bị xoá trước khi ghi nội dung mới. Nếu ta muốn nội dung mới sẽ được ghi nối tiếp vào file thì ta sử dụng 2 dấu lớn hơn, tức là ">>". Ví dụ nếu bạn muốn nối nội dung của thư mục /home vào cuối file passwd.bak ở trên thì bạn làm như sau:
$ ls /home >> ~/passwd.bak
Bây giờ nếu ta muốn lấy mã HTML của trang chủ của OSG và ghi vào file osg.html thì ta sử dụng lệnh sau:
$ curl http://osg.vnu.edu.vn/ > osg.html
Thực hiện lệnh trên các bạn có thấy gì lạ không? Mặc dù mã HTML thay vì xuất ra màn hình mà được đưa vào file osg.html nhưng vẫn có các thông tin thể hiện trạng thái download hiển thị trên màn hình. Làm thế nào mà lại được như thế? Làm thế nào để lệnh curl câm lặng hoàn toàn? Hồi sau sẽ rõ.

2.3. STDERR

STDERR là dòng xuất lỗi chuẩn nói chung và nó cũng thường xuất trực tiếp ra màn hình, console hay terminal. Cú pháp tương tự như STDOUT, tức là sử dụng ">" để xuất ra file và ">>" để nối vào một file đã có (chưa có thì hệ thống sẽ tự tạo ra). Tuy nhiên điểm khác biệt là bạn phải chỉ rõ số 2, tức là "2>" hoặc "2>>". Lí do là vì chỉ có 1 dòng xuất chuẩn và 1 dòng nhập chuẩn cho mỗi process mà thông thường hệ thống chỉ định là STDOUT và STDIN.

Vậy trong trường hợp của lệnh curl trong phần 2.2 ở trên, nếu ta muốn ghi cả 2 loại output đó ra file thì ta làm như sau:
$ curl http://osg.vnu.edu.vn/ > osg.html 2> osg.log
Thế nào? Không có cái gì xuất ra màn hình hết đúng không? Vì nội dung trang web đã được lưu vào file osg.html còn các dòng lưu trạng thái download đã được ghi vào file osg.log.

Nhưng thế thì tốn dung lượng đĩa và có nguy cơ gây hỏng đĩa vì phải ghi file mà. Con người quả thật quá tham lam . Vậy thì phải sáng tạo ra cái gì đó như kiểu cái thùng không đáy hay gọi mĩ miều hơn thì nó là "lỗ đen" hay "black hole", tức là một nơi mà cho cái gì vào cũng mất hút luôn. Linux/Unix có cái đó cho bạn, đó là /dev/null.

2.4. /dev/null
Theo định nghĩa trên Wikipedia của /dev/null:
In Unix-like operating systems, /dev/null or the null device is a special file that discards all data written to it (but reports that the write operation succeeded), and provides no data to any process that reads from it (it returns EOF). In Unix programmer jargon, it may also be called the bit bucket or black hole.
Tạm dịch là:
Trong các hệ điều hành kiểu Unix, /dev/null hay thiết bị null là một tệp tin đặc biệt, nó bỏ qua mọi dữ liệu ghi lên nó (nhưng có báo cáo về việc ghi dữ liệu thành công) và không cung cấp bất kì dữ liệu gì khi đọc từ nó (trả về EOF). Trong biệt ngữ của các lập trình viên Unix, nó đuợc gọi là "bit bucket" hoặc "black hole".
Vậy thì đó chính là cái ta cần rồi. Như vậy câu lệnh curl ở trên có thể cho nó thực hiện câm lặng bằng cách:
$ curl http://osg.vnu.edu.vn/ > /dev/null 2> /dev/null
Không có cái gì xuất ra màn hình cả, cũng không có cái gì được ghi lại cả. Nhưng... lại nhưng, con người vẫn tham lắm, làm thế nào để cái lệnh trên ngắn gọn hơn, trông technical hơn, nói chung là để ai không biết thì sẽ không hiểu gì (đôi khi đó là cái thú của dân kĩ thuật). Ta sẽ dùng "2>&1" ở đây, tức là:
$ curl http://osg.vnu.edu.vn/ > /dev/null 2>&1
Câu lệnh trên tức là dòng xuất chuẩn (1) sẽ bị đưa vào /dev/null và dòng lỗi chuẩn (2) sẽ được đưa vào dòng xuất chuẩn (1) mà ở đây là /dev/null.

Đặc biệt lưu ý là với cú pháp sử dụng dấu & thì dấu & và dấu > phải đi liền nhau, không có khoảng cách.

Ngoài các file descriptor 0, 1, 2 ở trên thì còn có từ 3 -> 9 nữa. Tuy nhiên bài viết này chỉ dành cho mức độ newbie nên không để cập sâu, chi tiết các bạn có thể tự tìm hiểu thêm trên Internet hoặc trong các sách về lập trình shell.

3. Pipe

Như vậy chúng ta đã biết cách để chuyển hướng dòng xuất/nhập của một lệnh hay một process. Bằng cách này ta có thể chuyển dữ liệu xuất của một lệnh thành dữ liệu nhập của một lệnh khác thông qua một file trung gian. Tuy nhiên ta không muốn có file trung gian đó, một phần vì việc ghi lên đĩa cứng, phần khác là do... tham. Đó chính là vấn đề mà pipe giải quyết. Trong Linux, ta sử dụng dấu "|" để làm việc này.

Ví dụ khi ta muốn xem lại nội dung thư mục /etc nhưng kết quả của nó lại dài quá mà ta muốn xem lại thì ta làm như sau
$ ls -al /etc | more
hoặc
$ ls -al /etc | less
(thoát bằng phím q).

hoặc ta muốn đếm số user trong hệ thống có sử dụng mặc định bash shell thì ta làm như sau:
$ cat /etc/passwd | grep "/bin/bash" | wc -l
Lệnh này có nghĩa là đưa nội dung file /etc/passwd ra dòng xuất chuẩn; dòng xuất chuẩn này thành dòng nhập chuẩn của lệnh grep và lệnh này chỉ lọc ra các dòng có chưa xâu "/bin/bash" để đưa ra dòng xuất chuẩn; dòng xuất chuẩn này lại thành dòng nhập chuẩn của lệnh wc -l là lệnh đếm số dòng của dòng nhập chuẩn và đưa ra số dòng ra dòng xuất chuẩn; cuối cùng dòng xuất chuẩn này sẽ được đưa ra trực tiếp màn hình vì nó không thành dòng nhập chuẩn của lệnh nào nữa.

4. Tài liệu tham khảo
[1] Google
[2] Wikipedia

May 13, 2009

Linux.com, luồng gió mới cho cộng đồng

Khi Linux Foundation nhận lại tên miền Linux.com từ SourceForge đầu năm nay, họ đã có dự định xây dựng lại website, sao cho nó không chỉ là nơi đăng những tin tức liên quan đến Linux. Và sáng nay, khi bạn vào địa chỉ http://linux.com, bạn sẽ nhận thấy một Linux.com hoàn toàn mới, và như một vài trang tin Linux nhận xét: "nó đủ khiến cho những người say mê Linux có thể tự hào". Cộng đồng đã lên tiếng cảm ơn chính mình, bởi chính họ là những người đưa ra phần lớn ý kiến đóng góp cho website.

Trên tinh thần nguồn mở thực sự, Linux Foundation đã thiết kế một website mang đậm chất tương tác, có thể tập hợp được tri thức của toàn cộng đồng. Dựa trên ý tưởng từ những người dùng, những nhà phát triển và những người đam mê Linux, website mới có khả năng thu thập thông tin và khiến thức từ nhiều nguồn và theo cách mà có thể tiếp cận được với cả người dùng mới và các bậc lão làng Linux.

Một trong những tính năng thú vị và hấp dẫn của website Linux.com mới là "Linux Guru". Người dùng đã đăng ký có thể kiếm điểm và nâng cấp trạng thái guru của mình bằng cách tham gia các hoạt động trên website. Top 50 người đóng góp nhiều nhất sẽ được ghi tên vào bản báo cáo hàng năm của tổ chức. Top 5 guru sẽ đại diện cho cộng đồng, được mời tới dự lễ họp mặt hàng năm của Linux Foundation (Linux Foundation Collaboration Summit). Mỗi năm sẽ có một thành viên trở thành "Ultimate Linux Guru" và sẽ được đích thân Linus Tovard tặng một máy notebook, để ghi nhận sự đóng góp cho cộng đồng.

Website có năm phần chính: News - tin tức Linux; Community - là nơi những thành viên đã đăng ký có thể kết nối với những người khác; Distribution Central - các distro tương tác với người dùng ở đây; Learn - là nơi các trang Man, HowTos và các tài liệu Linux khác được lưu trữ, đồng thời cũng là diễn đàn để cộng đồng hỏi và trả lời; Directory - lưu trữ các phần mềm, ebook, dịch vụ,...

Linux.com với giao diện và chức năng mới đã mang lại một luồng gió mới cho cộng đồng Linux. Chúng ta cùng chúc cho website sẽ đạt được những gì mà cộng đồng kỳ vọng, dựa trên chính sức mạnh của cộng đồng.

Update: Cùng chúng tôi tham gia nhóm Vietnamese Linux enthusiastsLinux.com.

Apr 21, 2009

Oracle mua Sun, rồi sao?


Oracle đã vượt qua IBM để mua được Sun với giao dịch có giá trị xấp xỉ 7,4 tỷ USD. Bỏ qua những gì liên quan đến kinh tế và mớ cổ phiếu lộn xộn, bỏ qua những bình luận về khả năng của IBM và Oracle, tôi chỉ muốn biết quan điểm của các nhà lãnh đạo của cả Sun và Oracle đối với phần mềm mã nguồn mở như thế nào? Điều gĩ sẽ xảy ra với MySQL? Solaris sẽ như thế nào? Hướng phát triển của Java? Những câu hỏi và đến lúc này vẫn chưa có lời đáp cụ thể.

Theo như lời công bố từ Sun, Java sẽ là nền tảng cho Oracle Fusion Middleware, trong khi hệ điều hành Solaris sẽ là nền tảng chính cho hệ quản trị cơ sở dữ liệu Oracle.

Đồng thời, Oracle cũng đã nhận được một số công nghệ ảo hóa từ việc mua Sun. Nhưng nếu bạn là người có quan tâm tới mã nguồn mở, có lẽ bạn sẽ tự hỏi về số phận của OpenOffice và MySQL. Trong lời công bố trên, họ không nhắc đến hai phần mềm này. Có lẽ chúng ta sẽ phải chờ thêm.

(Bạn nên ghé thăm trang OSS của Suncủa Oracle nếu muốn biết thêm về các phần mềm nguồn mở liên quan đến hai tên tuổi này).

Update:
- Đọc thêm bài "Oracle mua Sun có ý nghĩa gì với Linux" trên Nghialt's blog.
- Đọc thêm chủ đề "Oracle mua Sun, rồi sao" trên FOTECH.ORG.