13 tháng 12, 2010

Set font size Netbeans menu

Netbeans ở trong windows khá đẹp mắt và không có vấn đề gì đáng nói, nhưng netbeans ở linux thì đúng là 1 cực hình. Font ở menu netbeans bé nên gây khó chịu khi làm việc. Dưới đây là cách để thay đổi font size của menu netbeans:

Sửa file netbeans.conf ở trong thư_mục_cài_netbeans/etc/, tìm đến đoạn có netbeans_default_option và thêm vào các đối số sau:

-J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=on --fontsize 14




Powered by ScribeFire.

10 tháng 12, 2010

Clear cached openSUSE

Bình thường khi mới khởi động, dung lượng RAM chiếm khá ít. Tuy nhiên càng dùng lâu RAM càng chiếm nhiều, đó là do RAM được chia ra 1 phần cho cached. Dữ liệu lưu trên cached sẽ giúp cho chương trình chạy nhanh hơn do không phải mất thời gian truy xuất vào ổ cứng.
Ưu điểm là thế nhưng cũng có những phiền toái. Đó là khi cached chiếm quá nhiều và đến khi RAM phải lấy sang cả từ ổ cứng, lúc này hệ thống sẽ chậm chạp và giật giật. Cached cần thiết cho chương trình chạy nhanh nhưng không phải lúc nào tất cả dữ liệu trên cached cũng được sử dụng. Do 1 số lý do mà đôi lúc hệ điều hành 'quên' không dọn dẹp những phần cached lâu không được dùng để lấy chỗ cho dữ liệu mới được nạp vào.
Lệnh sau đây sẽ xóa sạch toàn bộ cached để nạp lại:
sync; echo 3 > /proc/sys/vm/drop_caches

Lưu ý: lệnh này cần quyền root

Powered by ScribeFire.

28 tháng 11, 2010

Cài scim-unikey cho openSUSE

Sau mấy ngày vật vã với thằng này và nhờ sự trợ giúp của các thành viên trên forum, cuối cùng mình cũng đã có thể cài trơn tru ( mấy lần trước lúc cài xong có lúc lỗi lúc không mà không biết sửa thế nào :| ). Đây là những kinh nghiệm bản thân thôi, nếu bạn thực hiện theo những điều này nhưng vẫn chưa làm được thì hãy cố gắng mày mò thêm tiếp vậy. Thêm nữa là những điều mình làm không dựa vào kỹ thuật mà chủ yếu dựa vào kinh nghiệm thử thôi.
  1. Cài scim từ repository của opensuse, nhớ cài các gói liên quan đến scim-bridge và gói scim-devel (gói này cần để build unikey-->nhiều người rất hay quên cài gói này). Như ở máy mình thì 2 gói scim-m17n và scim-32bit cũng được cài luôn.
  2. Cài xong scim là đã có thể gõ tiếng Việt được rồi và lúc này Yast cũng đã tự đặt các biến môi trường như: XMODIFIERS="@im=scim", QT_IM_MODULE="scim-bridge", GTK_IM_MODULE="scim-bridge". Nếu vì một lý do nào đó các biến này chưa được set thì có thể set lại cho các biến này giá trị như vậy bằng cách sửa file .profile, thêm đoạn code này:
  3. Tiến hành build và install gói scim-unikey src down từ trên trang chủ codeproject về ( ./configure --prefix=/usr, make, make install). Sau khi install thành công không có lỗi gì, bạn sửa file .profile, trong file này thêm dòng scim -d. Logout và login lại hệ thống, lúc này bạn đã có thể sử dụng được scim-unikey trong các ứng dụng như: firefox, vi, gedit...
  4. Trong trường hợp không thể gõ được tiếng Việt trong openoffice nhưng vẫn gõ được tiếng Việt trên các ứng dụng khác (kể cả unikey lẫn kiểu gõ lúc đầu khi cài scim) thì làm theo cách sau (cũng không hiểu tại sao, nhưng nó khắc phục được với mình ;)) ):
export XMODIFIERS="@im=scim"
export GTK_IM_MODULE="scim-bridge"
export QT_IM_MODULE="scim-bridge"
  • a. Set lại biến môi trường XMODIFIERS="@im=scim-bridge", sau đó logout và login trở lại, tuy nhiên vẫn chưa gõ được tiếng Việt được trên openoffice.
  • b. Xóa dòng set biến môi trường XMODIFIERS trong file .profile, logout và login trở lại. Mở thử openoffice gõ và TADAAAA!!

Update: Hiện nay có thể lấy bản cài rpm trên trang code google scim-unikey (bản cho fedora) để cài, cài xong vẫn thực hiện như trên, chỉ bỏ đi bước 3



Powered by ScribeFire.

26 tháng 11, 2010

Upload Image to photobucket.com

Thông thường khi muốn đưa ảnh từ máy tính của mình lên blog hoặc chuyển cho người khác xem thì sẽ phải sử dụng công cụ hỗ trợ upload các file ảnh đó lên một server. Phần mềm này của mình là phần mềm desktop, dùng để upload ảnh trực tiếp lên server photobucket.com. Giao diện chính của chương trình:


Chương trình có chức năng:
- Lựa chọn album để upload ảnh
- Show Image: xem ảnh đã được upload bằng browser trong máy
- Copy link url: copy url của ảnh đã upload vào clipboard
- Copy link blog: copy link ảnh đã upload (để dùng khi post vào blog hoặc forum) vào clipboard
- Thêm chức năng hiển thị % đã upload
- Save các link đã upload thành file text
Link download: version 0.4
Update: version 0.4.1

Update: version 0.5

Thay đổi:

  • Thêm lựa chọn ngôn ngữ
  • Thay đổi lại giao diện
=-=-=-=-=
Powered by Blogilo

27 tháng 10, 2010

Syntax highlight for Blogger

Để hiển thị code syntax cho blogspot cần làm theo các bước sau: (đương nhiên là có nhiều cách, đây chỉ là 1 trong số đóthôi)
  1. Đăng nhập blogspot và vào dashboard-->Design-->Edit HTML
  2. Tìm đến đoạn tag ]]></b:skin>
  3. Copy đoạn code dưới đây và paste ngay trước tag ]]></b:skin>
  4. Tiếp đó tìm đến tag </head>
  5. Copy đoạn code dưới đây và paste vào trước tag </head>
  6. <!-- Add-in CSS for syntax highlighting -->
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js' type='text/javascript'></script>
    <script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js' type='text/javascript'></script>
          
  7. Tìm tag </body>
  8. Copy và paste đoạn code sau vào trước tag </body>
  9. <!-- Add-in Script for syntax highlighting -->
    <script language='javascript'>
    dp.SyntaxHighlighter.BloggerMode();
    dp.SyntaxHighlighter.HighlightAll('code');
    </script>
                  
  10. Save template và kết thúc
Bây giờ khi post bài muốn sử dụng highlight ta sử dụng theo mẫu sau:
<pre name="code" class=""></pre>
Các giá trị có thể điền vào class là: cpp, csharp, css, delphi, java, js, ruby, sql, vb, xml, php, python, html

25 tháng 10, 2010

Uninstall using rpm

Bài này giới thiệu về cách uninstall một gói rpm (gói mà cài đặt chỉ việc click chuột vào gói đó).

1. Search tên chính xác của gói cần uninstall

rpm -qa | grep một_phần_tên_gói
2. Uninstall gói

rpm -e tên_chính_xác_của_gói
Lưu ý: các lệnh trên thực thi với quyền root

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

13 tháng 10, 2010

Zypper command

Trong openSUSE có thể dễ dàng quản lý, cài đặt gói thông qua YaST. Thế nhưng trong một số trường hợp, khi chỉ cần cài 1 gói nhỏ, phải chờ để mở YaST thì thật lâu. Khi đó cài thông qua command sẽ tiện lợi hơn nhiều. Bài viết đề cập đến một số lệnh zypper để quản lý cũng như cài đặt các gói:

1. Quản lý repo:

  • zypper repos: liệt kê toàn bộ repo
  • zypper addrepo URL alias: add repo đưa ra ở URL và đặt dưới tên gọi alias
  • zypper modifyrepo [command option] [alias|#]: thay đổi repo theo command option, --disable: disable, --enable: enable, --refresh: enable auto-refresh, --no-refresh: disable auto-refresh, --all: tác động lên tất cả các repo
  • zypper removerepo [alias|#]: remove repo
  • zypper renamerepo [alias|#] [new-alias]: đổi tên repo
  • zypper refresh [alias|#]: refresh repo, nếu không có tham số cuối thì refresh toàn bộ repo

2. Quản lý update:

  • zypper lp: liệt kê các gói cần thiết (needed)
  • zypper patch: cài các gói needed liệt kê ở trên
  • zypper lu: liệt kê tất cả các update có thể
  • zypper up: cài các gói update ở trên

3. Quản lý gói:

  • zypper search [option] [string]: tìm kiếm gói, * và ? cũng được dùng cho string, option là -C nếu muốn case-sensivity
  • zypper install [option] [name|rpm_file_URI]: cài đặt một gói, gói đó có thể là đường dẫn đến file rpm hoặc tên của gói đó. Option hay được sử dụng nhất là --repo [alias|#] để chỉ ra cài gói thuộc repo nào. Lưu ý: tên gói có thể kèm theo dấu quan hệ với version ví dụ p7zip>=1.2 để chỉ ra cài gói p7zip có version lớn hơn 1.2 Các dấu quan hệ có thể là: >=, >, =, <, <=
  • zypper remove [option] [name]: gỡ bỏ 1 gói, tên gói được để ở name và cũng tương tự như ở cài đặt 1 gói. Option cũng tương tự như cài đặt

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

Change Netbeans 's LookAndFeel

Làm việc với Netbeans trên windows thì không vấn đề gì, nhưng trên Linux thì nó có thể gây ra một vài khó chịu. Trong đó điểm yếu lớn nhất đó là Netbeans trên Linux sử dụng Metal L&F, trông xấu xí cục mịch khủng khiếp :(

Dưới đây là các bước để thay đổi L&F của Netbeans (bài viết từ blog của Mario awad):

  1. Download các file .nbm từ Netbeans Substance L&F plugin
  2. Mở Netbeans, vào Tool --> Plugins --> Downloaded
  3. Click vào Add plugin và add 3 file nbm đó
  4. Click Install và restart Netbeans
  5. Vào Tool --> Option --> Miscellaneous --> Look and Feel
  6. Chọn L&F tùy ý và Restart lại Netbeans

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

2 tháng 10, 2010

Create javadoc by using Ant

Ngoài cách tạo trực tiếp javadoc bằng command line, có thể tạo javadoc thông qua Ant tích hợp trong Netbeans.

Trong Netbeans đã cung cấp sẵn chức năng tạo javadocs trong Ant, tuy nhiên chức năng này đối với tôi có khá nhiều bất tiện. Đó là không nén javadocs thành file zip, để chung docs cùng với các file jar (thư mục dist) dẫn đến mỗi lần clean & build là lại phải tạo docs lại. Đoạn code dưới đây có thể khắc phục các nhược điểm đó
Mở file build.xml bằng Netbeans, tìm đến đoạn javadocs và thay bằng đoạn code sau:

<target depends="init,-javadoc-build" description="Build Javadoc." name="javadoc">

<zip destfile="dist/javadoc.zip" basedir="dist/javadoc"/>

<mkdir dir="javadocs"/>

<move todir="javadocs">

<fileset dir="dist">

<filename name="javadoc.zip"/>

</fileset>

</move>

<delete dir="dist/javadoc"/>

</target>

Sau đó mỗi lần muốn tạo javadocs thì trong project window của Netbeans, click chuột phải vào project muốn tạo và chọn Generate Javadocs là được. File docs có tên là javadoc.zip và lưu trong thư mục javadocs/

21 tháng 9, 2010

Create fat-jar with Netbeans

Thông thường, khi build project trong Netbeans sẽ tạo file jar trong /dist. Tuy nhiên nếu project có các gói library ngoài thì các gói class này sẽ được build trong /dist/lib/.. Như vậy nếu muốn chạy file jar trong /dist thì buộc phải có thư mục /lib đi kèm --> rất bất tiện.
Thủ thuật sau sẽ giúp tạo 1 file jar duy nhất cho project.

Mở file build.xml  của project trong netbeans, copy đoạn code sau vào dưới cùng (trước tag đóng project):

<target name="fat-jar" depends="jar">

<!-- Change the value of this property to be the name of your JAR,

minus the .jar extension. It should not have spaces.

-->

<property name="fat-jar.name" value="jar_name"/>

<!-- don't edit below this line -->

<property name="fat-jar.dir" value="fat-jar"/>

<property name="fat-jar.jar" value="${fat-jar.dir}/${fat-jar.name}.jar"/>

<echo message="Packaging ${application.title} into a single JAR at ${fat-jar.jar}"/>

<delete dir="${fat-jar.dir}"/>

<mkdir dir="${fat-jar.dir}"/>

<jar destfile="${fat-jar.dir}/temp_final.jar" filesetmanifest="skip">

<zipgroupfileset dir="dist" includes="*.jar"/>

<zipgroupfileset dir="dist/lib" includes="*.jar"/>

<manifest>

<attribute name="Main-Class" value="${main.class}"/>

</manifest>

</jar>

<zip destfile="${fat-jar.jar}">

<zipfileset src="${fat-jar.dir}/temp_final.jar"

excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>

</zip>

<delete file="${fat-jar.dir}/temp_final.jar"/>

</target>

Khi nào muốn build thì click chuột phải vào file build.xml chọn Run Target --> Other target --> fat-jar. File jar sẽ được lưu trong thư mục /fat-jar của project.
Một cách khác đó là thay đổi trực tiếp -post-jar trong build.xml như sau:


<target name="-post-jar">

<jar jarfile="dist/Combined-dist.jar">

<zipfileset src="${dist.jar}" excludes="META-INF/*" />

<zipfileset src="lib/commons-io-1.4.jar" excludes="META-INF/*" />

<manifest>

<attribute name="Main-Class" value="com.example.mypackage.Main"/>

</manifest>

</jar>

</target>

Khi đó chỉ việc build project là đoạn -post-jar sẽ được thực hiện. Trong đoạn trên chỗ thêm thư viện ngoài là attribute zipfileset, nếu muốn thêm nhiều thư viện thì có thể dùng attribute zipgroupfileset với dir="path_to_lib" includes="*.jar"

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

9 tháng 3, 2010

Install Netbeans with jdk

Thông thường cài jdk xong rồi cài Netbeans thì nó sẽ tự dò ra jdk. Tuy nhiên trong một số trường hợp nó không dò ra được jdk (có thể là do bạn cài jdk vào 1 thư mục nào đó, nếu cài vào /opt thì nó nhận được luôn) thì phải làm thế nào? Cách giải quyết khá đơn giản, chỉ cần gõ lệnh sau:

sh tên_file_cài_netbeans.sh --javahome đường_dẫn_đến_thư_mục_cài_jdk

Vậy là xong rồi đó :D

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

5 tháng 3, 2010

Install flash 10.1 beta in 64bit

1. Download flash player 10.1 beta từ Adobe Lab (có dạng *.tar.bz)

2. Giải nén file này được libflashplayer*.so

3. Copy libflashplayer*.so vào /usr/lib64/browser-plugins/

4. Install flash:

# nspluginwrapper -v -i /usr/lib64/browser-plugins/libflash*.so

5. Update lại các plugins:

# nspluginwrapper -v -a -u

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

Find command

Trong môi trường Linux, lệnh find được xếp vào hàng 1 trong những lệnh hữu dụng nhất. Lệnh find được dùng để xác định vị trí file cần tìm. Thoạt nhìn có thể thấy lệnh find cũng chẳng hơn gì lệnh locate, nhưng xét một cách chi tiết thì lệnh find ưu điểm hơn ở chỗ user thường cũng sử dụng được và nó cung cấp 1 số tùy chọn điều khiển. Cách sử dụng find được nhắc đến nhiều ở man page, nhưng thú thực thì tôi cũng không khoái đọc ở đó lắm, nó hơi cấu trúc và khó hiểu. Lang thang trên mạng lại gặp được trang http://devdaily.com/unix/edu/examples/find.shtml, ở đó cung cấp những ví dụ trực quan hay sử dụng nhất với lệnh find. Tôi xin mạn phép dịch lại một số phần.

1. Tìm các file với lệnh find

Ví dụ đầu tiên này sẽ tìm các file có tên "Chapter1" nằm trong root /. Nếu tìm thấy in ra màn hình vị trí của file đó.

find / -name Chapter1 -type f

Câu lệnh find dưới đây sẽ tìm file "Chapter1" trong directory /usr /home:

find /usr /home -name Chapter1 -type f

Nếu muốn tìm trong thư mục hiện tại có thể làm như sau:

find . -name Chapter1 -type f

Lưu ý là các lệnh trên sẽ tìm trong thư mục được nêu đến (/, /usr, /home) và tất cả các thư mục con của chúng. Các câu lệnh này sẽ chỉ tìm được file nào có tên đúng là Chapter1, còn nếu muốn tìm các file có cụm từ Chapter1 trong nó thì ta cần sử dụng đến ký tự mở rộng (đặc biệt cần lưu ý dấu nháy):

find . -name "*Chapter1*" -type f

2. Tìm thư mục với lệnh find

Tất cả các tùy chọn dùng với tìm file đều dùng được với tìm thư mục, chỉ việc thay -f bằng -d

3. Kết hợp findgrep

Giả sử bạn muốn tìm trong thư mục hiện tại các file có đuôi .java và trong nội dung file có cụm từ StringBuffer chẳng hạn. Có nhiều cách để giải quyết vấn đề này, bạn có thể sử dụng pipeline qua lệnh findgrep, tuy nhiên find có cung cấp tùy chọn exec cho phép ta thực thi ngay mà không cần qua pipeline.

find . -name "*.java" -type f -exec grep -l StringBuffer {} \;

Trong đó tùy chọn -l sẽ chỉ in kết quả tên file mà không in nội dung phần có chứa từ StringBuffer. Nếu không quan tâm đến chữ hoa hay chữ thường ở từ StringBuffer thì thêm tùy chọn -i trong lệnh grep.

4. Sử dụng exec

Tùy chọn -exec là một tùy chọn rất hữu ích và khó hiểu của find. Trước đây khi muốn xử lý các file tìm được sau lệnh find người ta thường phải sử dụng pipeline. Nhược điểm của pipeline đó là hiện tượng tràn đối số với các lệnh như rm, mv... Để khắc phục điều này người ta đưa thêm xargs trước lệnh thực thi, cơ chế của việc này là chia các đối số thành các block đối số và truyền vào lệnh thực thi, cứ như vậy cho đến khi hết đối số. Khi tùy chọn -exec được đưa ra thì nó đã giải quyết được triệt để vấn đề này, cơ chế của nó là truyền các đối số vào lệnh thực thi từng đối số một.

Lệnh dưới đây sẽ xóa đi các file có đuôi .mp3 chẳng hạn:

find . -name "*.mp3" -type f -exec rm {} \;

Cặp ngoặc nhọn {} chính là đối số truyền vào từ kết quả của find, cuối của tùy chọn -exec cần phải có dấu ; để kết thúc lệnh, và để hiên thị dấu ; thì sử dụng cú pháp \;.

Ví dụ sau sẽ move các file đuôi .java vào thư mục Java:

find . -name "*.java" -type f -exec mv {} Java \;

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

4 tháng 3, 2010

Khác nhau giữa .bashrc và .profile

Trong hệ thống file của user openSUSE có 2 file ẩn là .bashrc.profile, 2 file này nói chung chứa các lệnh và các lệnh này sẽ được gọi đến vào lúc khởi động. Thế nhưng vẫn có những điểm khác biệt giữa nhiệm vụ và chức năng của 2 file này.

  1. .bashrc: Các lệnh trong .bashrc sẽ được gọi khi khởi tạo 1 shell (nên nhớ khi đăng nhập vào hệ thống đó cũng là 1 shell rồi)
  2. .profile: Các lệnh trong .profile chỉ được gọi khi user login vào hệ thống

Như vậy khi bạn tạo 1 shell bằng cách gọi konsole ảo (terminal) thì nó sẽ triệu gọi .bashrc và bỏ qua .profile. Chính sự khác biệt đó dẫn đến 1 trường hợp sau: giả sử bạn muốn thay đổi biến môi trường PATH=new_path:$PATH thì nếu thêm vào .profile thì bạn sẽ phải logout rồi login trở lại mới có hiệu quả; còn nếu thêm vào .bashrc thì sẽ có hiệu quả ngay tức thì khi bạn mở konsole khác.

Đến đây lại có 1 vấn đề khác là khi 1 user đăng nhập vào hệ thống thì .bashrc hay .profile được gọi trước? Sau khi thử nghiệm (sử dụng mkdirrm trong 2 file đó) kết quả cho ra rằng: khi 1 user login vào hệ thống thì nó sẽ triệu gọi .bashrc trước rồi mới đến .profile, sau đó mới triệu gọi đến các đoạn script khai báo trong .kde4/Autostart.

Tóm lại ta có sơ đồ triệu gọi như sau:

.bashrc --> .profile --> .kde4/Autostart

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

3 tháng 3, 2010

Reinstall GRUB

Trường hợp này thường xảy ra khi cài lại windows hoặc có vấn đề gì đó với hệ thống làm hỏng GRUB dẫn đến việc không thể vào được hệ điều hành. Trên mạng có rất nhiều hướng dẫn cài đặt lại GRUB sử dụng liveCD. Nhưng liệu có phải lúc nào cũng có liveCD, như tôi chẳng hạn, tôi chỉ có đĩa cài đặt DVD. Vậy với đĩa cài đặt DVD làm thế nào để có thể vào được chế độ dòng lệnh mà sửa GRUB??
Khi đó chúng ta làm như sau: boot bằng đĩa DVD và trong menu đầu tiên đưa ra, chọn Rescue System. Hệ thống sẽ đưa bạn đăng nhập ở chế độ dòng lệnh. Điền username là root và Enter, bạn đã đăng nhập với quyền root. Đến đây thì công việc cài đặt lại GRUB y hệt như với liveCD. Nó gồm có 2 bước căn bản:
  1. Tìm partition có chứa bootloader của openSUSE
  2. Cài đặt lại GRUB trỏ đến partition đó
Cụ thể như sau:
You enter this ----- grub
Computer returns like this ---- grub>
You enter this ----- find /boot/grub/menu.lst
Computer returns like this ---- (hd0,5)
You enter this ----- root(hd0,5)
Computer returns like this ---- File system type is ... blah
You enter this ----- setup(hd0)
You see several lines like this -- Checking...Done
You enter this ----- quit
You enter this ----- reboot
Trong đó (hd0,5) là vị trí partition chứa bootloader openSUSE, ở mỗi máy mỗi khác. Tùy vào giá trị trả về sau lệnh find mà sửa lại lệnh root và setup tương ứng.
(nguồn: opensuse.org)
=-=-=-=-=
Powered by Blogilo

27 tháng 2, 2010

How to use MKVToolnix

MKV là một định dạng container, tức là trong nó chứa nhiều thành phần con như: video, audio, subtitle... MVKToolnix là một ứng dụng chạy trên mọi hệ điều hành được phát triển riêng cho định dạng MKV. Việc cài đặt MKVToolnix tương đối đơn giản, đối với opensuse chỉ việc add repo packman và search gói mkvtoolnix là có thể cài được.

Gói MKVToolnix gồm có 4 lệnh sau:

  1. mkvextract
  2. mkvinfo
  3. mkvmerge
  4. mkvmerge-gui

Gói MKVToolnix hỗ trợ cho việc trích rút cũng như tổng hợp thành phần cho file MKV. Lệnh mkvextract phục vụ cho việc trích rút, còn 2 lệnh mkvmergemkvmer-gui cho việc tạo file MKV từ nhiều thành phần.

Đối với merge thì sử dụng lệnh mkvmerge-gui rất đơn giản, giao diện trực quan. Ở đây chỉ đề cập đến phần extract do phần này chỉ hoàn toàn thực hiện lệnh, không có giao diện.

Đầu tiên sử dụng mkvmerge để liệt kê tất cả các thành phần có trong file MKV:

mkvmerge -i Movie.mkv

Giả sử lệnh này trả về giá trị sau:

File 'Movie.mkv': container: Mastroka

Track ID 1: subtitles (S_TEXT/ASS)

Track ID 2: audio (A_MPEG/L3)

Track ID 3: video (V_MPEG4/ISO/AVC)

Vậy ta có thể thấy track 1 là file phụ đề, track 2 là file audio và cuối cùng là file video. Giờ muốn lấy riêng file phụ đề thì ta gõ lệnh sau:

mkvextract tracks Movie.mkv 1:Movie_Sub.srt

20 tháng 2, 2010

Crontab

Bài viết được dịch từ blog của Kevin Van Zonneveld.
Bạn cần thực thi một công việc nào đó một cách lặp lại, ví dụ như cứ 1 giờ lại dọn rác một lần, hoặc cứ mỗi khi khởi động máy lại chạy 1 script của mình... Trong hệ thống UNIX cũng như Linux có một công cụ rất hữu hiệu phục vụ cho công việc này, đó chính là crontab. Crontab được xuất phát từ cron - tiếng Hy Lạp là thời gian, còn tab là viết tắt của từ table. Lệnh crontab xuất hiện trên hầu hết các hệ thống UNIX hoặc tương tự UNIX. Để xem crontab thực thi những gì trên hệ thống của mình, bạn có thể gõ lệnh sau ở command:
sudo crontab -l
Để chỉnh sửa thành phần cronjob bạn dùng lệnh:
sudo crontab -e
Hệ thống sẽ mở cronjobs bằng một trình soạn thảo (vi hoặc pico...), cronjobs sẽ được ghi theo định dạng như sau:
* * * * * /bin/execute/script.sh
Bạn có thể thấy 5 ngôi sao ở định dạng trên, các ngôi sao này biểu diễn cho các phần thời gian theo thứ tự dưới đây:
  1. Minute (0-59)
  2. Hour (0-24)
  3. Day of month (1-31)
  4. Month (1-12)
  5. Day of week (0-6, 0: Sunday)
Nếu trong cronjobs bạn để dấu sao * thì hệ thống sẽ hiểu điều đó là every. Có thể nói vậy chưa rõ ràng, chúng ta hãy cùng xem qua ví dụ sau để hiểu rõ hơn:
* * * * * /bin/execute/script.sh
Lúc này hệ thống sẽ thực thi script.sh:
  1. Every minute
  2. Every hour
  3. Every days of month
  4. Every month
  5. Every days of week
Chúng ta thử xem xét dòng trong cronjobs:
0 1 * * 5 /bin/execute/this/script.sh
Dòng trên sẽ được diễn giải như sau:
  1. Minute: 0
  2. Hour: 1
  3. Day of month: * (every)
  4. Month: * (every)
  5. Day of week: 5 (=Friday)
Và hệ thống sẽ thực thi script này vào 1 giờ sáng các ngày thứ 6 trong tuần. Có thể thấy tuy có dấu * ở Day of monthMonth nhưng hệ thống không thực thi script ở tất cả các ngày trong tháng, điều đó có nghĩa rằng khi đã xác định ngày trong tuần thì việc để dấu * ở Day of monthMonth sẽ không còn mang ý nghĩa every. Ở ví dụ này, nếu ta thay dấu * ở vị trí Month bằng một số cụ thể (4 chẳng hạn) thì hệ thống sẽ thực thi script vào các ngày thứ 6 trong tháng 4. Còn nếu thay dấu * ở vị trí Day of month bằng một số bất kỳ (22 chẳng hạn) thì hệ thống sẽ thực thi script chỉ vào 1 giờ ngày thứ 6 nếu ngày đó là ngày 22 của tháng.
Ở các phần trên đã giới thiệu đến các bạn cách tạo lịch để thực thi script vào một giờ, phút, ngày... cụ thể. Nhưng nếu bạn muốn thực thi script cứ 10 phút một lần, hoặc 30 phút một lần thì sao? Crontab có làm được điều đó không? Thật may mắn là những người tạo lập nên lệnh crontab đã tính đến khả năng này, và cấu trúc cronjob như sau:
0,10,20,30,40,50 * * * * /bin/execute/script.sh
Dòng này yêu cầu hệ thống thực thi script vào các phút 0, 10, 20, 30, 40, 50 của các giờ. Nhưng viết như vậy hơi dài, bạn có thể viết ngắn gọn hơn bằng cách:
*/10 * * * * /bin/execute/script.sh
Điều này cũng được làm hoàn toàn tương tự với các vị trí * khác.
Crontab còn cung cấp cho bạn một số tùy chọn thay cho 5 dấu * đã nêu như sau:
  • @reboot --- run at start up
  • @yearly ---run once a year
  • @annually --- same as @yearly
  • @monthly --- run once a month
  • @weekly --- run once a week
  • @daily --- run once a day
  • @midnight --- same as @daily
  • @hourly --- run once a hour
Đến đây bạn đã có thể làm chủ được crontab rồi. Crontab thực sự là công cụ rất hữu ích nếu như bạn thường xuyên phải làm một công việc theo lịch trình :D. Một lần nữa cám ơn Kevin. :)