Never ask how to use, just wonder how to make...
Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

Aug 7, 2012

Yum - Liệt kê danh sách file trong một gói

Để liệt kê nội dung một gói, có thể đã cài hoặc chưa cài, chúng ta sử dụng công cụ repoquery trong gói yum-utils. Nếu chưa cài gói này, chạy lệnh sau để cài đặt: 
# yum install yum-utils -y

Lệnh repoquery có 2 option hữu ích:
  -l, --list            list files in this package/group
  -q, --query           no-op for rpmquery compatibility

Chạy lệnh repoquery với 2 option trên cùng với tên gói để liệt kê danh sách các file có trong gói:
$ repoquery -ql mlocate
/etc/cron.daily/mlocate.cron
/etc/updatedb.conf
/usr/bin/locate
/usr/bin/updatedb
/usr/share/doc/mlocate-0.22.2
/usr/share/doc/mlocate-0.22.2/AUTHORS
/usr/share/doc/mlocate-0.22.2/COPYING
...

Jun 9, 2012

Install SkypeTab-NG on Fedora


SkypeTab-ng is a program that adds tabs to Skype™ for Linux (ng stands for next generation).
SkypeTab-ng on Github: https://github.com/kekekeks/skypetab-ng

To install it on Fedora 16-17, just run following command as root

rpm -Uvh "http://widehat.opensuse.org/repositories/home:/keks-n:/skypetab-ng/Fedora_16/noarch/skypetab-ng-0.4.10-23.1.noarch.rpm"
For other instructions (other distro, description), see see here.

Mar 18, 2012

5 Linux GUI tool giúp tăng hiệu suất làm việc


Trên máy tính cá nhân của tôi, chạy Fedora Linux, đây là những tiện ích bắt buộc phải có. Thực sự những công cụ này đã giúp tôi nâng cao hiệu suất làm việc. Và hôm nay chợt nghĩ đến việc viết entry này, để chia sẻ cho những người cần biết. Nếu bạn cũng biết những công cụ tương tự, hoặc hay hơn, hãy chia sẻ cùng tôi. Xin chân thành cảm ơn.

1. Cluster-SSH
I hate doing something again and again and again. And CSSH came to save my life.
Thông qua một cửa sổ admin, CSSH cho phép điều khiển cùng một lúc nhiều cửa sổ xterm, tương tác đồng thời với nhiều server, thông qua giao thức kết nối SSH. Chỉ cần gõ bất cứ kí tự nào trên giao diện quản lý, nó đều được chuyển trực tiếp qua các cửa sổ xterm của các server (tất nhiên, bạn vẫn có thể làm việc riêng trên giao diện xterm của từng server). Công cụ này đặc biệt hữu ích khi phải làm một loạt thao tác giống nhau trên nhiều máy chủ (một webserver cluster chẳng hạn).


2. KeePassX
A person may have about 100 accounts. But a sysadmin must hold up to a billion password for user accounts.
Đùa đấy, chỉ tầm vài trăm đến một ngàn thôi, nhưng cũng đủ mệt rồi bạn nhỉ? Để quản lý mớ lằng nhằng này, chúng ta cần một công cụ an toàn, tiện dụng và tốt nhất là đa nền tảng. Và có một tiện ích nguồn mở đáp ứng rất tốt những yêu cầu này: KeePassX. Nó an toàn vì nó được mã hóa và bảo vệ bằng một master key, là mật khẩu duy nhất mà ta phải nhớ. Tất cả các mật khẩu khác đều có thể được lưu trữ trong một cây thư mục, với bao nhiêu cấp tùy ý, và có thể search dễ dàng nhờ công cụ tìm kiếm hoàn hảo. Hệ thống phím tắt local/global rất tiện dụng, giúp ta có thể kích hoạt KeePassX bất cứ lúc nào, và hỗ trợ copy username/password vào clipboard. Ta cũng cần phải nhắc đến hai tính năng hữu ích khác là auto-type password generator. Cuối cùng, bạn có thể mở file database của KeePass trên bất cứ nền tảng nào: Linux, Windows, iOs, Android, RIM, J2ME...


3. Guake/Yakuake
I am a system administrator. So I'd love to type commands anywhere and anytime.
Tiếp đến là terminal. Công cụ mặc định trên Gnome là gnome-terminal, và trên KDE là Konsole. Đây là những terminal chỉ ở mức đủ dùng. Nếu muốn nâng cao hơn nữa năng suất làm việc, hãy thử các terminal dạng drop-down như Guake cho Gnome (hoặc Yakuake cho KDE). Sau khi cài, bất cứ khi nào bạn muốn, hãy nhấn phím F12, một terminal sẽ trải xuống từ đỉnh màn hình, cho phép bạn gõ lệnh ngay lập tức. Thử đi, bạn sẽ thấy thực sự hữu ích, và đẹp nữa. Thêm vào đó, kể cả nếu bạn không phải là quản trị viên, chỉ cần bạn sử dụng Linux, bạn cũng sẽ thích Guake.


4. phpMyAdmin/Navicat
I love my commandline, but I also need a GUI tool
Nếu phải làm việc với một hệ quản trị CSDL như MySQL, bạn sẽ cảm thấy cần đến sự giúp sức của một công cụ đồ họa. Tôi xin đề xuất 2 cái tên là Navicat và phpMyAdmin, một công cụ có phí và một tiện ích nguồn mở, và cả hai đều thực sự là những sản phẩm xuất sắc, hỗ trợ đầy đủ các tính năng mà một người quản trị cơ sở dữ liệu cần.

5. Sublime Text 2 (beta)
This is the text editor you'll fall in love with.
Cuối cùng, chúng ta cần một text editor. Tất nhiên Vim/Emacs/Gedit/Kate đều là các tiện ích rất tốt. Nhưng khi mình thử Sublime Text 2, mình nhận ra rằng đây mới xứng đáng là GUI text editor tốt nhất, dù bạn đang dùng Linux, Windows hay Mac OSX. Ngoài việc nhẹ, nhanh, tự động hóa (thông qua snippet và macro) và hỗ trợ rất nhiều ngôn ngữ, Sublime Text 2 còn có thêm những tính năng chết người khác như minimap (một bản đồ nhỏ cho ta biết ta đang ở đâu, nhất là khi đang chỉnh sửa những file dài), multi-select (chọn và sửa đồng thời nhiều chỗ khác nhau), và một số lượng ngày một lớn các plugin có thể cài đặt thông qua một công cụ quản lý gói tuyệt vời. Nhưng có một điểm duy nhất có thể làm bạn không vui:  Sublime Text không phải là một công cụ miễn phí. Tuy nhiên họ cho phép bạn thoải mái sử dụng bản beta, và dù sao, trả tiền cho một sản phẩm mình hoàn toàn hài lòng cũng là một việc hợp đạo lý thôi >:).

Cài thêm gói plugin trong Sublime Text 2

Jul 3, 2011

Sunday clip: The Story of Linux - Câu chuyện của 20 năm

Chủ nhật là ngày thoải mái nhất để xem các video clip. Hôm nay chúng ta sẽ xem một clip của Linux Foundation, thực hiện nhân dịp kỉ niệm 20 năm Linux. Chúng ta sẽ cùng nhớ lại Linus Torvald đã viết ra Linux như thế nào, liên hệ với dự án GNU ra sao, và cùng xem cách mà Linux đã làm thay đổi thế giới 20 năm qua.


P/S: Tất nhiên, mỗi chúng ta đều xuất hiện trong câu chuyện này ;))

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


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ử :">.

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.

Mar 22, 2009

Làm chủ Linux Bash shell: Tùy biến command promt với biến $PS1


Tiếp tục seri bài làm chủ Linux Bash shell nào. Bài viết này được tôi dựa vào một tutorial của tôi trên FOTECH và mở rộng thêm, nếu bạn nào thấy hơi quen xin đừng thắc mắc >:).

Bash shell có khả năng hiển thị trước mỗi dòng lệnh một đoạn thông tin ngắn, gọi là dấu nhắc lệnh, hay command promt. Mặc định có dạng:
[user]@[host]:[đường dẫn]$
VD:
thangphamduy@mr-PC:~$
Bạn có thể tùy biến bằng cách sửa lại giá trị của biến môi trường PS1 như sau:
PS1='[Noi dung muon hien thi]'
VD: nếu dòng trên có nội dung là:
PS1='Welcome to my Linux '
thì trước mỗi dòng lệnh sẽ hiển thị đúng xâu trên.

Bạn có thể tùy biến xâu [Noi dung muon hien thi] bằng cách chèn vào một ký tự sau dấu thoát (backslash \) như sau:
\! Hiển thị số thứ tự của lệnh trong history
\# Hiển thị số thứ tự lệnh của lệnh hiện tại
\$ Hiển thị dấu $ nếu là user bình thường và dấu # nếu là user root
\\ Hiển thị dấu backslash (\)
\d Hiển thị ngày hiện tại
\h Hiển thị host name
\n In dấu xuống dòng
\s Hiển thị tên shell
\t Hiển thị giờ hiện tại
\u Hiển thị username
\W Hiển thị tên thư mục hiện hành
\w Hiển thị đường dẫn đầy đủ của thư mục hiện hành
Ví dụ:
PS1='\u\$'
sẽ cho kết quả: "root#"
PS1='\u@\t \w\$'
sẽ cho kết quả: "root@20:49:48 /etc/httpd#
PS1='\t \u@\h \s \$'
sẽ cho kết quả: "20:49:48 root@proLappy -bash #"
[*]Hiển thị màu:
Bạn thử thiết lập biến PS1 như sau và xem kết quả như thế nào ^^
PS1='\[\033[01;32m\]\t \u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Bây giờ dấu nhắc lệnh đã có màu xanh lá cây :D. Quy tắc ở đây là thư thế nào? Nếu bạn muốn đặt một màu cho một phần tử nào đó của promt, bạn hãy đặt mã màu trước phần tử đó, và mã xóa màu sau phần tử đó.

Mã màu có dạng:
\[\033\[01;32m\]\]
Hãy thay thế 32 với các số trong khoảng 30 - 37 để nhận được các màu khác nhau, thay thế 01 với các số trong khoảng 00 - 07 để nhận được các cách tô màu khác nhau (làm nhạt màu, màu gạch chân, màu highlight,...)

Mã đóng màu:
\[\033[00m\]
[*] Lưu ý:
- Nếu bạn không sử dụng mã đóng màu thì màu đó sẽ còn hiệu lực cho tới khi bạn dùng một mã màu khác thay thế.
- Việc thiết lập mã màu chỉ có ý nghĩa với những terminal có hỗ trợ màu 16bit trở lên như xterm, rxvt, hay gnome-terminal, konsole,...

Okie. Như thế là bạn đã có thể thêm các thông tin hữu ích và đẹp mắt vào trước mỗi dòng lệnh trong terminal. Nhưng nếu bạn logout, giá trị vừa thiết lập cho biến $PS1 sẽ bị reset về giá trị default! Để không phải thiết lập lại giá trị của biến này, hãy thêm vào cuối file ~/.bashrc dòng lệnh sau để export giá trị mới cho biến môi trường PS1:
export PS1='\n\[\033[02;31m\]. ___ ___ ___\[\033[00m\] |--- \[\033[02;33m\]\t \d\n\[\033[02;31m\] /__// _// ./\[\033[00m\] --- \[\033[01;32m\]\w\n\[\033[02;31m\]/ . / \ /__/\[\033[00m\] \[\033[02;35m\]\u@\h \[\033[02;37m\]\$ \[\033[02;38m\]'
Chúc các bạn ngày chủ nhật vui vẻ.

Update: Để xem danh sách các mã màu và một số ví dụ khác, xin đọc entry Command promt và biến PS1 trên blog của tuyetkiem.

Feb 11, 2009

[Đánh giá] KDE 4.2

KDE 4.2 vẫn kế thừa các ưu điểm của KDE 4.1 như sự tiện dụng, tính tuỳ biến cao. Những bổ sung mới của bản này chủ yếu tâp trụng vào sự tiện dụng của các ứng dụng cũ, đồng thời nâng cao tính ổn định của hệ thống, thể hiện sự tỷ mỷ của nhóm phát triển.

Một số screenshot:

Desktop (Cái widget nhỏ nhỏ trống trống ở phía dưới là Pastebin, một tính năng mới của KDE4.2):

Hình ảnh


Main menu (Lancelot):

Hình ảnh


Hộp thoại Run:

Hình ảnh


Các tính năng mới:
- Pastebin : Upload ảnh/file lên server bằng cách kéo file thả vào Pastebin widget trên destop, đường link được trả về và lưu trong clipboard (cực kỳ tiện lợi - 3 cái ảnh trên đều được upload theo kiểu này, từ khi shot đến khi upload xong chỉ mất 8s).
- Main menu Lancelot, tiện lợi hơn hẳn so với các kiểu Start menu của KDE 4.1 và 3.5 : Sắp xếp hợp lý, search thông minh, có thể kích hoạt các ứng dụng mà chỉ cần di chuột (ko cần click - mình đánh giá cao tính năng này).

Cải thiện:
- System tray: có thể ẩn các biểu tượng không mong muốn
- Task manager đã có thể hiển thị trên nhiều dòng cũng như nhóm các cửa sổ theo group.
- Điều khiển Widgets trên Destop vô cùng dề dàng
- Bộ ứng dụng Kontact, Kmail, KNotifier đã có thể sánh ngang được với MS Office Outlook.
- Widgets đã có thể được phát triển bằng JS và Ruby, đồng nghĩa với số Widget sẽ gia tăng nhanh chóng, và chúng ta có thể quên đi SuperKaramba (trình hỗ trợ Desktop Widget).
- Các hiệu ứng được kế thừa từ Compiz nhưng không chạy theo số lượng mà chú trọng vào chất lượng. Các hiệu ứng đã được chỉnh sửa lại cực kỳ tốt, nhìn rất mượt và không bị răng cưa.

Ngoài ra, còn rất nhiều các chỉnh sửa nhỏ khác như hộp thoại Run (Alt + F2), file preview và icon zoom trong Dolphin,... Tóm lại, cảm nhận của tớ về phiên bản này được túm gọn trong mấy chữ: hiệu ứng mượt mà, giao diện mát mắt và chức năng tiện dụng.

Dec 12, 2008

Làm chủ Linux Bash shell: Xử lý string trong Bash shell

Một trong những shell được sử dụng thường xuyên trong Linux là bash shell. Khi viết các shell script, công việc mà người sử dụng hay gặp phải nhất có lẽ là xử lý string (tìm file, xử lý tên file, xử lý log, xử lý chuỗi nhập vào,...). Sau đây tôi xin trình bày một số điểm mấu chốt thú vị trong xử lý string với bash shell.

Hai lệnh đầu tiên, đơn giản nhưng tương đối hữu ích, đó là dirnamebasename. Cho một biến có chứa 1 string dạng đường dẫn đến 1 thư mục D hoặc 1 file X, lệnh basename sẽ trả về đúng tên thư mục D hoặc tên file X, còn lệnh dirname trả về phàn đường dẫn đến thư mục mẹ của D hoặc X. Ví dụ:
$ basename /home/thangphamduy/workspace/foo.txt
foo.txt
$ dirname /home/thangphamduy/workspace/foo.txt
/home/thangphamduy/workspace
$ basename /home/thangphamduy/workspace
workspace
$ dirname /home/thangphamduy/workspace

/home/thangphamduy

$ ALPHA="/home/thangphamduy/temp/bar.txt"
$ BETA=`dirname $ALPHA`
$ echo $BETA
/home/thangphamduy/temp

Đó chỉ là xử lý xâu đơn giản, tiếp đây, chúng ta thử xử lý xâu một cách "pro" hơn với bash shell. Trong 1 biểu thức, ta thường bắt gặp một biến được đặt trong cặp dấu ngoặc nhọn kiểu như ${MYVAR}. Và bash cũng cho phép chúng ta xử lý biến đó ngay trong cặp ngoặc nhọn. Chúng ta có thể dễ dàng cắt bỏ hay lấy ra một phần của string chứa trong biến một cách rất dễ dàng. Để dễ hình dung, các bạn có thể xem ví dụ sau:

$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg

Trong lệnh thứ nhất, ở phía trong dấu ${}, đầu tiên chúng ta viết tên biến, sau đó là hai dấu #, rồi đến 1 chuỗi ký tự đại diện (*fo). Vậy lệnh này có nghĩa là gì và nó được bash shell thực hiện như thế nào? Lệnh này (echo ${MYVAR##*fo}) sẽ khiến cho bash thực hiện việc cắt bỏ chuối dài nhất, tính từ ký tự đầu tiên, khớp với chuỗi ký tự đại diện (còn gọi là wildcard), sau đó in phần còn lại ra stdout. Khi gặp lệnh này, bash shell sẽ thực hiện việc tìm kiếm tất cả các xâu con khớp với chuỗi ký tự đại diện *fo trong xâu được chứa bởi $MYVAR(tức là tìm tất cả các xâu kết thúc với 2 ký tự fo):
f
fo MATCHES *fo
foo
food
foodf
foodfo MATCHES *fo
foodfor
foodfort
foodforth
foodfortho
foodforthou
foodforthoug
foodforthought
foodforthought.j
foodforthought.jp
foodforthought.jpg

Sau khi kết thúc tìm kiếm (trong VD trên bash tìm được 2 kết quả), bash sẽ lấy xâu kết quả dài nhất (foodfo), rồi loại bỏ nó ra khỏi xâu gốc (phần còn lại: rthought.jpg), rồi in kết quả ra màn hình.

Trong câu lệnh thứ hai (echo ${MYVAR#*fo}), công việc cũng tương tự như trên, nhưng thay vì lấy kết quả dài nhất, bash shell lại lấy kết quả ngắn nhất (fo) rồi loại bỏ khỏi xâu gốc và in kết quả ra màn hình. Thực ra khi chỉ sử dụng 1 dấu # ở phần tùy biến, ngay khi tìm được kết quả đầu tiên, bash shell sẽ lập tức dừng việc tìm kiếm lại.

Để tìm kiếm từ cuối xâu thay vì tìm kiếm từ đầu xâu, chúng ta thay các tùy biến # và ## bằng các tùy biến % và %%, cách sử dụng hoàn toàn tương tự. Ví dụ:
$ MYVAR=thangphamduy/workspace/bar.foo.txt
$ echo ${MYVAR%.*}
thangphamduy/workspace/bar.foo
$ echo ${MYVAR%%.*}
thangphamduy/workspace/bar

Và một cách xử lý string nữa, ít được dùng tới hơn, nhưng nhiều lúc rất có ích, đó là cắt xâu theo vị trí:
$ MYVAR=http://thangphamduy.blogspot.com
$ echo ${MYVAR:0:13}
http://fotech
$ echo ${MYVAR:8:17}
fotech.org

Phần xử lý string xin được dừng lại tại đây, cảm ơn quý vị và các bạn đã quan tâm theo dõi >:).
(Tham khảo từ
Bash by example - IBM)

Nov 4, 2008

Cài đặt Ubuntu/Kubuntu 8.10 từ USB

1. Chuẩn bị

- Hệ điều hành Windows XP/Vista.

- File ISO Ubuntu 8.10 (link download) hoặc Kubuntu 8.10 (link download).

- USB dung lượng lớn hơn hoặc bằng 1 GB.

- Chương trình HP USB Disk Storage (link download).

- Công cụ tạo USB khởi động:
+ link dành cho Ubuntu (file nén exe)
+ link dành cho Kubuntu (file nén rar)

[*] Từ bây giờ tớ sẽ chỉ hướng dẫn cho Ubuntu, bạn nào cài Kubuntu thì cứ thay chữ Ubuntu bằng Kubuntu là okie ^^.

2. Tạo USB khởi động

- Kết nối máy tính với USB.

- Đầu tiên các bạn sử dụng chương trình HP USB DS format USB của bạn về định dạng FAT32.

- Tiếp đó giải nén cái công cụ tại USB khởi động ở trên vào đâu đó trên đĩa cứng, ta được thư mục Ubuntu810.

- Copy file ISO của Ubuntu 8.10 vào thư mục Ubuntu 8.10.

- Chạy file Ubuntu810.bat trong thư mục Ubuntu810.

- Làm theo hướng dẫn trên cửa sổ hiện ra, và chờ đến khi nó báo thành công.
3. Cài đặt Ubuntu 8.10

- Khởi động lại máy tính

- Vào BIOS thiết lập chế độ khởi động từ USB (cái này cách làm tùy BIOS, nhưng hầu hết BIOS không quá cũ đều hỗ trợ ^^).

- Tiếp tục cài đặt như khi cài từ LiveCD.

4. Tổng kết

Việc cài từ USB có nhiều ưu điểm hơn cài từ LiveCD do tận dụng được khả năng đọc/ghi tốc độ cao của USB, tiết kiệm được cả thời gian (thời gian cài đặt ở máy tớ là 8 phút) và tiền bạc (tiền đĩa CD và hao mòn ổ ghi =))).

Nếu đã có LiveCD, bạn cũng có thể tạo USB cài Ubuntu bằng cách boot vào LiveCD và làm như sau:


Bài viết này tớ có tham khảo từ pendrivelinux. Cái tool dành cho Kubuntu 8.10 là do tớ edit từ cái dành tool cho Ubuntu nên không có định dạng exe như cái của pendrivelinux ^^.

Nov 2, 2008

[Đánh giá] Kubuntu 8.10


Vào ngày cuối tháng 10, khi Halloween đã tới rất gần, một sự kiện được trông đợi bởi những chiếc đồng hồ đếm ngược đã xảy ra: Bản Ubuntu 8.10 đã ra đời. Kèm theo đó là các phiên bản trên các nền đồ họa khác: Kubuntu 8.10, Xubuntu 8.10.

Trước hết xin gửi lời cảm ơn đến bác CườngNV @ JAIST. Bác có lẽ là người đầu tiên làm mirror Ubuntu 8.10 ở Việt Nam cho anh em download và cài đặt Ubuntu ngay khi đang còn nóng. Bác cũng update ngay con Kubuntu khi em yêu cầu ^^.

Theo như phản ánh của anh em Fotech thì bản Ubuntu 8.10 khá là chán. Việc thực hiện upgrade có tỷ lệ thất bại khá cao. Thêm vào đó, khả năng nhận phần cứng (card wireless, card màn hình) chưa tốt (còn tệ hợn bản RC :(). Có lẽ đây là hệ quả của sức ép từ phần sau dấu chấm của con số 8.10 gây ra. Rõ ràng tuyên bố trước là đúng 6 tháng sẽ phát hành một phiên bản khiến cho dù phiên bản chưa thật hoàn chỉnh vẫn phải tung ra.

Tớ chỉ mới cài thử bản Kubuntu 8.10 trên laptop. Tuy nhiên tớ đánh giá khá cao bản này. Kubuntu 8.10 được xây dựng dựa vào nền đồ họa KDE 4.1 khá tốt. KDE 4.1 có khá nhiều tính năng nổi bật thú vị.

KDE 4.1 là bản cải tiến của KDE 4.0. Khái niệm Desktop đã được thay đổi hoàn toàn. Bây giờ Desktop được gọi với tên mới là Plasma, là nơi để đính các Gadget, và chính các Gadget này với độ tùy biến cao sẽ mang lại các tiện ích cho người sử dụng. Thanh Start menu được thiết kế thành các Tab tiện lợi và có bổ sung ô search thông minh (đú theo Vista ^^). Phiên bản 4.1 bổ sung những điểm thiếu sót cho KDE 4.0: Gadget Folder view cho phép đưa một thư mục bất kỳ lên Plasma; main panel có tính tùy biến cao; bổ sung thêm công cụ Grub editor tiện lợi.

Một điều đáng nói ở Kubuntu 8.10 là vấn đề giao diện và font chữ đã được cải thiện đặc biệt. Các bạn có thể thấy rõ nhất điều này khi cài thử FF3. Đã không còn những font + giao diện xấu mù, mà thay vào đó là một bộ mặt hoàn toàn khác.

Bản Kubuntu 8.10 cũng đã fix được khá nhiều lỗi liên quan đến tính tương thích phàn mềm. Tớ dùng thử một ngày mà chưa gặp lỗi crash lần nào. Tớ cài bộ gõ XUnikey, để chế độ Foward, và tớ có thể sử dụng nó với hầu hết các phần mềm (trừ Konqueror không sao gõ được tiếng Việt).
Tuy nhiên tớ vẫn còn vướng một số vấn đề nhỏ khi sử dụng bản này. Tớ không thể mở được các file mp3 bằng Amarok. Tớ cũng không thể kết nối wireless được (cái này không biết do hệ điều hành hay tại AP nữa ^^). Kopete không thể kết nối được máy chủ Yahoo (một số anh em Fotech bảo là do máy chủ lỗi, tạm tin vậy ^^).

Kết lại một câu là Kubuntu 8.10 cũng đáng để dùng đấy chứ nhỉ ^^.

Nov 1, 2008

Truy cập phân vùng Linux từ Windows

Bạn dùng song song 2 hệ điều hành Windows và Linux? Trong Linux có thể truy cập phân vùng NTFS bằng NTFS-3G, thật là dễ dàng. Nhưng từ Windows nếu muốn truy cập vào phân vùng ext2, ext3 thì bạn phải làm thế nào? Thực ra là có khá nhiều cách, và đều không phức tạp hơn NTFS-3G. Bài viết này tớ sẽ giới thiệu 2 phương pháp đơn giản và hiệu quả nhất ^^.

1. Ext2 Installable File System (Ext2IFS)
Bạn có thể download phần mềm này từ địa chỉ: http://www.fs-driver.org/index.html.

Quá trình cài đặt rất đơn giản, bộ cài đặt sẽ tự scan (các) ổ cứng của bạn và hiển thị tất cả các phân vùng như hình dưới. Bạn có thể chọn chữ cái cho các phân vùng bạn muốn sử dụng.


Sau khi chọn Next, bộ cài sẽ hiển thị phần Release note của version. Phần này có rất nhiều thông tin có ích, các bạn nên đọc kỹ:


Và đây là kết quả ^^:


Ưu điểm: Truy cập dễ dàng với Windows Explorer như là một phân vùng Windows ^^. Có thể tùy biến quyền ReadOnly hoặc không :D.
Nhược điểm: Chỉ hỗ trợ số inode tối đa là 128bytes, do đó chỉ hoạt động tốt với phân vùng Ext2 và cả Ext3 nếu Ext3 được format dưới dạng số inode 128bytes (tham số -i của lệnh mkfs.ext3).
* Khuyến cáo: Nếu bạn sử dụng Windows Vista, hãy tắt tính năng User Account Control để đảm bảo không xảy ra lỗi khi truy cập phân vùng Linux .

2. Total Commander + Plugin ext2+reiser
(Nguồn: http://tuyetkiem.wordpress.com/2008/10/28/l%...B-windows/)

Nếu bạn đã khá quen với sự tiện dụng của Total Commader (TC) thì có một plug-in khá hữu ích, bổ sung cho TC tính năng truy cập các định dạng phân vùng Linux như ext2, ext3, reiserfs.

Bạn có thể download plugin trên ở đây: http://www.ghisler.com/plugins.htm.

Ưu điểm: Sử dụng tốt với các phân vùng định dạng ext2, ext3 (ReiserFs thì tớ không có điều kiện kiểm chứng). Tận dụng được sự tiện dụng của TC.
Nhược điểm: Hơi chậm :D.

Sep 24, 2008

Làm chủ Linux Bash shell với ký tự "!"

- Cú pháp: !{Some chars}
Ý nghĩa: gọi và thực thi lệnh gần nhất trong đã thực thi có phần bắt đầu là {some chars}

CODE
$ cat /home/mrpc/workspace/learning-bash/test.txt
dong thu nhat
$ echo "bo sung them dong thu hai" >> ~/test.txt
$!cat
cat /home/mrpc/workspace/learning-bash/test.txt
dong thu nhat
bo sung them dong thu hai
- Cú pháp: {tên lệnh} [danh sách tham số | !$]
Ý nghĩa: Gọi lệnh và thay tham số !$ trong danh sách tham số bằng tham số cuối cùng của lệnh vừa gõ
CODE
$ touch /home/mrpc/workspace/learning-bash/ten.file.rat.la.dai.txt
$ echo "dong dau tien" >> !$
$ cat !$
dong dau tien

Sep 14, 2008

Why Linux?

Linux là một hệ điều hành máy tính kiểu Unix. Linux là một ví dụ nổi bật nhất cho việc phát triển phần mềm miễn phí và nguồn mở; mã nguồn của nó có thể được xem, chỉnh sửa, sử dụng hay phân phối lại một cách miễn phí bởi bất kỳ ai.

Nổi tiếng chủ yếu vì mục đích sử dụng làm máy chủ, Linux đã nhận được sự hỗ trợ của nhiều tập đoàn lớn như IBM, Sun Microsystems, Dell, HP và Novell. Nó được sử dụng làm hệ điều hành cho nhiều hệ phần cứng khác nhau, bao gồm máy tính cá nhân, siêu máy tính, máy chơi game chuyên dụng (PS2 và PS3 là 2 ví dụ điển hình :D) và các thiết bị nhúng như là điện thoại di động hay router.


Bức ảnh trên là một trong những câu trả lời cho câu hỏi "Why Linux?".

Để tìm hiểu về lịch sử hệ điều hành Linux, các bạn có thể xem ở đây: History of Linux OS.

Đây là sơ đồ phát triển của các hệ điểu hành Unix nói chung:



Và sơ đồ phát triển của các Linux distro:


(View full size)