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. :)