Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

18 tháng 9, 2012

Công cụ so sánh file và thư mục trên Linux (Ubuntu)

Trong quá trình làm project, tôi thường xuyên có nhu cầu chia nhánh và nhập các nhánh cho project do đó phát sinh nhu cầu làm thế nào để nhanh chóng tìm ra những thay đổi trong một project. Tôi có thể lấy ví dụ ra những câu hỏi sau đây:
  • Có những file mã nguồn nào trong project bị thay đổi? File nào bị xóa? File nào thêm mới.
  • Nội dung của những file bị thay đổi là gì
  • Các file bị thay đổi nằm ở đâu?
  • ....
Để trả lời cho câu hỏi này tôi chọn Meld một merge tool rất mạnh trên Linux. Bạn có thể download nó tại kho phần mềm của Linux hoặc trực tiếp từ địa chỉ http://meldmerge.org/.
Các chức năng chính của meld:
  • So sánh nội dung của 2 file.
  • So sánh nội dung của 2 thư mục
  • Xem nội dung thay đổi giữa 2 file.
  • Merge các thay đổi giữa file, thư mục,
  • ....
Dưới đây là một số hình ảnh của chương trình:


09 tháng 9, 2012

Chèn biểu tượng Yahoo online/offline vào Blog, Website

Để chèn biểu tượng Yahoo online/offline vào Blog hoặc Website, các bạn làm như sau:
Bạn copy đoạn mã sau vào blog/web (paste vào chỗ muốn hiển thị)

<a href="ymsgr:sendIM?Yahoo!ID"><img border="0" src="http://presence.msg.yahoo.com/online?u=Yahoo!ID&m=g&t=ImageNo&l=us" alt="click here to chat" /></a>

Trong đó:

"Yahoo!ID" là tên nick YM của bạn.

"Click here to chat" là dòng chữ hiện ra khi người khác rê chuột vào biểu tượng YM! của bạn, chỉnh sửa tùy thích.

"ImageNo" là kiểu hiện thị thông báo online hay offline, là 1 trong các kiểu 1,2,3, 6-> 16, như sau:

Kiểu 1, 2, 3



Kiểu 6



Kiểu 7



Kiểu 8



Kiểu 9



Kiểu 10



Kiểu 11



Kiểu 12



Kiểu 13



Kiểu 14



Kiểu 15



Kiểu 16





Nguồn http://thuthuatvietnam.com

31 tháng 8, 2012

Xử lý sự cố không nhận card mạng trên Ubuntu 10.04

1. Card mạng dòng Atheros Ethernet(AR8151)

Hãy chắc chắn máy bạn đang sử dụng dòng card mạng này bằng lệnh:
Lshw  -class network
Trong danh sách hiện ra bạn sẽ thấy có cụm từ Atheros/Atlanstic.
Sau đó hãy vào trong các địa chỉ sau để download driver tương ứng:
ubuntu 10.04 :

http://media.cdn.ubuntu-de.org/forum/attachments/48/33/2666793-AR81Family-linux-v1.0.1.14.tar.gz

ubuntu 10.10

http://media.cdn.ubuntu-de.org/forum/attachments/2666793/AR81Family-linux-v1.0.1.14_10.10.tar.gz

These links are from:

http://forum.ubuntuusers.de/topic/lan-geht-nicht-wlan-schon/#post-2666793
 Sau khi download driver, bạn sẽ được một file nén dạng tar.gz. Bạn giải nén file này ra và chuyển vào thư mục đã giải nén chạy các lệnh sau:
tar -xzvf AR81Family-Linux-v1.0.1.9.tar.gz

sudo su

make install

modprobe atl1e

exit
Xem thêm link: http://comments.gmane.org/gmane.linux.network/200232
Và đây: http://unixblogger.wordpress.com/2011/10/18/the-pain-of-an-realtek-rtl8111rtl8168-ethernet-card/
Liên hệ với người viết bài nếu bạn gặp sự cố khi tải driver, tôi sẽ gửi driver cho bạn qua email. 

08 tháng 6, 2012

Xử lý XML trong PHP.

Để phân tích một nội dung XML ta dùng hàm:
simplexml_load_string($xml_string);
Hàm này sẽ phân tích nội dung XML trong chuỗi thành các Object.
Để truy cập vào các element của XML ta dùng hàm children như sau:
$data->item->children(uri);
Trong đó uri có thể có hoặc không, đó là một namespace trong xml.
Hàm này sẽ phân tích các element trong xml thành các array.
Từ đây ta sẽ dùng foreach để tiếp tục xử lý cho các attribute trong các element.
Có 2 dạng foreach:

  • foreach($d as $v): dùng để lấy các giá trị trong mảng $d
  • foreach($d as $k => $v:): dùng để lấy cả key và giá trị trong mảng $d
Xem ví dụ sau:
Array ( 
 [condition] => Array ( 
  [text] => SimpleXMLElement Object ( [0] => Partly Cloudy )
  [code] => SimpleXMLElement Object ( [0] => 30 )
  [temp] => SimpleXMLElement Object ( [0] => 79 )
  [date] => SimpleXMLElement Object ( [0] => Mon, 07 Jul 2008 9:54 am EDT )
 )

 [forecast] => Array ( 
  [Mon] => Array ( 
   [day] => SimpleXMLElement Object ( [0] => Mon )
   [date] => SimpleXMLElement Object ( [0] => 7 Jul 2008 )
   [low] => SimpleXMLElement Object ( [0] => 69 )
   [high] => SimpleXMLElement Object ( [0] => 87 )
   [text] => SimpleXMLElement Object ( [0] => Isolated Thunderstorms )
   [code] => SimpleXMLElement Object ( [0] => 37 )
  )

  [Tue] => Array ( 
   [day] => SimpleXMLElement Object ( [0] => Tue )
   [date] => SimpleXMLElement Object ( [0] => 8 Jul 2008 )
   [low] => SimpleXMLElement Object ( [0] => 71 )
   [high] => SimpleXMLElement Object ( [0] => 90 )
   [text] => SimpleXMLElement Object ( [0] => Isolated Thunderstorms )
   [code] => SimpleXMLElement Object ( [0] => 37 ) 
  ) 
 ) 
)
Trong ví dụ nếu coi mảng to nhất là $d, ta sẽ có như sau:
foreach($d as $v)
thì $v sẽ là các mảng con bên trong $d.
foreach($d as $k => $v)
thì $k sẽ là 2 string 'condition' hoặc 'forecast'
còn $v sẽ là các mảng có khóa là 'condition' hoặc 'forecast'
như vậy nếu muốn tiếp tục truy cập vào sâu thêm ta sẽ dùng
foreach($v as $v1)
....

24 tháng 5, 2012

Địa chỉ ip 0.0.0.0 nghĩa là gì?

Đôi khi trên linux, nếu bạn chạy lênh route -n bạn sẽ có kết quả này:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.31.18      0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
38.96.196.94    192.168.1.2     255.255.255.255 UGH   0      0        0 wlan0
192.168.84.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
192.168.1.0     0.0.0.0         255.255.255.0   U     2      0        0 wlan0
192.168.110.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlan0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 ppp0
0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 wlan0
Vậy, địa chỉ ip 0.0.0.0 khác gì với các địa chỉ IP khác.
0.0.0.0 là một địa chỉ IP đặc biệt, dùng để chỉ tất các địa chỉ IP mà một máy đang có.
Ví dụ bạn có một server có các địa chỉ IP như sau:
10.2.50.25
10.2.50.26
10.2.50.27
Khi đó nếu bạn khai báo như sau:
0.0.0.0:25
có nghĩa là bạn có thể kết nới tới cổng 25 của server tại bất cứ địa chỉ ip address nào của server (ví dụ 10.2.50.25 và 10.2.50.26 đều được).
Nó khác với nếu bạn chỉ khai báo:
10.2.50.25:25
thì bạn chỉ có thể kết nối tới cổng 25 của server tại địa chỉ ip 10.2.50.25, còn với các địa chỉ còn lại thì bạn không thể kết nối vào cổng 25

15 tháng 5, 2012

Cách sử dụng các tham số recipient_bcc_maps và sender_bcc_maps trong Postfix

1 - Làm thế nào để forward một bản sao của thư gửi tới một địa chỉ sang một địa chỉ khác.
  • Sử dụng tham số: recipient_bcc_maps.
    Tham số này sẽ yêu cầu postfix tự động tạo một bản sao copy bí mật thư gửi tới các địa chỉ hoặc domain chỉ định tới một địa chỉ chỉ định khác.
  • Nội dung: recipient_bcc_maps=hash:/đường/dẫn/tới/file/maps
    Lưu ý, tham số này có thể nhận nhiều giá trị, mỗi giá trị nằm  cách nhau một dấu phẩy và thứ tự ưu tiên truy vấn là từ trái qua phải.
  • Lệnh: postconf -e recipient_bcc_maps="hash:/đường/dẫn/tới/file/maps"
    Lệnh này sẽ edit nội dung của tham số recipient_bcc_maps, lưu ý các nội dung cũ sẽ bị ghi đè.
  • Nội dung file map:
    @domain.com       địa_chỉ_nhận@domain.com
     địa_chỉ_1@domain.com      địa_chỉ_2@domain.com
  • Sau đó cần map nó vào với postfix bằng lệnh:
    postmap /đường/dẫn/tới/file/maps
  • Sau đó khởi động lại postfix bằng lệnh:
    postfix reload.
2 - Làm thế nào để forward một bản sao của thư gửi đi từ một địa chỉ sang một địa chỉ khác
  • Sử dụng tham số: sender_bcc_maps.
    Tham số này sẽ yêu cầu postfix tự động tạo một bản sao copy bí mật thư gửi từ các địa chỉ hoặc domain chỉ định tới một địa chỉ chỉ định khác.
  • Nội dung: sender_bcc_maps=hash:/đường/dẫn/tới/file/maps
    Lưu ý, tham số này có thể nhận nhiều giá trị, mỗi giá trị nằm  cách nhau một dấu phẩy và thứ tự ưu tiên truy vấn là từ trái qua phải.
  • Lệnh: postconf -e sender_bcc_maps="hash:/đường/dẫn/tới/file/maps"
    Lệnh này sẽ edit nội dung của tham số sender_bcc_maps, lưu ý các nội dung cũ sẽ bị ghi đè.
  • Nội dung file map:
    @domain.com       địa_chỉ_nhận@domain.com
    địa_chỉ_1@domain.com      địa_chỉ_2@domain.com
  • Sau đó cần map nó vào với postfix bằng lệnh:
    postmap /đường/dẫn/tới/file/maps
  • Sau đó khởi động lại postfix bằng lệnh:
    postfix reload.

03 tháng 5, 2012

crontab trong Linux

Crontab trong linux tương tự như một tiến trình lập lịch, nó giúp người dùng có thể chỉ định khi nào thì hệ thống sẽ chạy một lệnh, kịch bản,.... đã định sẵn.
Tương ứng với mỗi người dùng sẽ có một crontab riêng.
Crontab sẽ không bị xóa khi hệ thống bị khởi động lại.
Crontab không hoạt động thay thế chức năng startup, và hoàn toàn không giống chức năng startup của hệ điều hành.
Để tạo mới, sửa một crontab, ta dùng lệnh sau:
crontab -e
Cấu trúc nội dung một crontab như sau:
Ví dụ: 0 12 14 2 * ls -l > /var/log/log.log
  • Mỗi lệnh trong crontab được đặt trong một dòng.
  • Comment được bắt đầu bằng ký tự "#"
  • Cấu trúc lệnh trong crontab:
    [min][space][hour][space][dayofmonth][space][monthofyear][space][dayofweek][space][command]
  • Trong đó:
    min: phút, (0-59)
    hour: giờ trong ngày, (0-23)
    dayofmonth: ngày trong tháng, (1-31)
    monthofyear: tháng trong năm, (1-12)
    dayofweek: ngày trong tuần (0-6, tương đương với Sunday-Saturday)
    command: là bất cứ lệnh hệ thống nào, cho phép gọi tới một file có quyền x.
  • Chú ý: crontab cho phép sử dụng các ký tự thay thế.
    Kiểu thay thế: * tương đương với bất cứ giá trị nào.
    Kiểu mỗi: */5 tương đương với cứ mỗi 5 đơn vị thời gian.
    Kiểu liệt kê: 2, 4, 6 cứ vào thời điểm 2, 4, 6 đơn vị thời gian.
    Kiểu khoảng: 9-17 lấy bất cứ giá trị nào nằm trong khoảng  từ 9 đến 17
Lệnh crontab:
crontab [-u user] [option] file
-u user: chỉ ra người dùng mà crontab của họ sẽ được chỉnh sửa.
-l : hiển thị nội dung crontab ra thiết bị hiển thị mặc định, ví dụ màn hình.
-r : xóa crontab.
-e : chỉnh sửa nội dung crontab ở chế độ soạn thảo.
-i : xóa crontab sau khi được người dùng chọn y/Y.
-s : unknow.