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.
Powered by ScribeFire.
Powered by ScribeFire.
Powered by ScribeFire.
<!-- 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>
<!-- Add-in Script for syntax highlighting --> <script language='javascript'> dp.SyntaxHighlighter.BloggerMode(); dp.SyntaxHighlighter.HighlightAll('code'); </script>
<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
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:
2. Quản lý update:
3. Quản lý gói:
=-=-=-=-=
Powered by Blogilo
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):
=-=-=-=-=
Powered by Blogilo
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/
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"
Đâ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
Để 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
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. 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
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
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
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
và /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 find
và grep
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 find
và grep
, 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
Trong hệ thống file của user openSUSE có 2 file ẩn là .bashrc
và .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.
.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)profile
chỉ được gọi khi user login vào hệ thốngNhư 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 mkdir
và rm
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
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
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:
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 mkvmerge và mkvmer-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
sudo crontab -l
sudo crontab -e
* * * * * /bin/execute/script.sh
* * * * * /bin/execute/script.sh
0 1 * * 5 /bin/execute/this/script.sh
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.