Wednesday, 25 February 2015

[cmd] mối quan hệ giữa du, sudo và "SH"

1. du
$ du -csh Github/ Pictures/
2.3G    Github/
6.6G    Pictures/
8.9G    total
có vài option cần chú ý của lệnh này
-s  --summarize
Chỉ hiện các giá trị là tổng dung lượng của mỗi argument

Tức nếu dùng du với 2 argument thì kết quả sẽ chỉ có 2 dòng (nếu argument là 1 directory, nó sẽ tính dung lượng tổng của directory đó thay vì của từng file)

-c --total
Hiển thị tổng dung lượng của các argument đã gán cho du. Như ví dụ trên, dòng cuối cùng là 8.9 G, tổng dung lượng của 2 thư mục đầu vào.

-h --human-readable
In ra dung lượng ở dạng thân thiện với người dùng (thay vì mặc định in ra số byte - thường khá lớn)

2. sudo

dùng sudo -sH sẽ giúp chuyển sang user root với biến môi trường HOME của user root (tức /root) - do một số hệ điều hành như Ubuntu, khi chỉ chạy sudo -s sẽ vẫn dùng HOME của user chạy lệnh sudo, có thể dẫn tới một số vấn đề không đáng có khi các chương trình sử dụng biến HOME.
Ví dụ, pip sẽ sử dụng HOME để tìm file config, thay vì sử dụng /root/.pip thì nó sẽ sử dụng file config pip trong thư mục của user chạy lệnh sudo (mà không có -H)

Kết luận: dù là xe hay là lệnh thì sh luôn có giá trị :3

Hết.
PS: bài viết dựa trên manpage của Ubuntu 12.04

5 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. -H tùy thuộc vào policy set trong sudoers, nếu luôn muốn chuyển qua home của target user thì nên dùng sudo -i.

    du -c và -h là GNU extension.

    ReplyDelete
  3. Theo mình hiểu, khi dùng -i user sẽ bị đổi sang shell của user mới, đôi khi có thể gây khó chịu nếu đang dùng zsh mà bị đổi sang bash hay sh.

    Còn -H không tuỳ thuộc vào policy mà nó luôn "set home". Policy trong sudoers chỉ set nó là default behavior hay không.

    Request that the security policy set the HOME environment
    variable to the home directory specified by the target user's
    password database entry. Depending on the policy, this may
    be the default behavior.

    > du -c và -h là GNU extension.
    Trước giờ mình không chú ý vấn đề này lắm nhưng đúng là hôm nay lúc tìm man để đọc thì có thấy 2 link khác nhau: http://manpages.ubuntu.com/manpages/precise/en/man1/du.1posix.html
    và http://manpages.ubuntu.com/manpages/precise/en/man1/du.1.html

    Với nội dung bài viết chủ yếu nhấn mạnh vào chữ "SH", mình không nghĩ người đọc quan tâm lắm đến vấn đề này.
    Rất cám ơn bạn đã đóng góp và mong bạn tiếp tục là đọc giả của FAMILUG :D

    ReplyDelete
  4. Mình vừa check lại Changelog thì đúng là -H sẽ luôn set home của target user, dù HOME có được list trong env_keep hay không. Thay đổi này có từ 09/09/2010. Bản sudo trên máy ảo của mình hơi cũ :D

    ReplyDelete