Lệnh su và lệnh su - trong Linux khác nhau như thế nào?

Bài viết hôm nay sẽ giúp bạn biết được sự khác nhau giữa lệnh su và lệnh su - trong Linux, hoặc có thể hiểu là cách sử dụng lệnh “su – user” và “su user”. Cụ thể là:
# su - <username>
# su <username>

Có thể hiểu đơn giản về lệnh "su" như sau:

Chương trình lệnh “su” giúp chúng ta chạy 1 shell mới bằng cách chuyển đổi session shell mới sang user ID và group ID khác. Nói tóm gọi là đăng nhập sang 1 user khác ngay trên terminal đang chạy.

Sự khác biệt giữa lệnh su và lệnh su - trong Linux

1. “su – <user>”

Khi bạn sử dụng lệnh “su” + “” để chuyển đổi session user khác thì đồng nghĩa với việc yêu cầu hệ thống Linux hãy tạo 1 session hoàn toàn mới và thay đổi toàn bộ các biến môi trường của user hiện tại sang user khác, hay còn gọi là load toàn bộ biến môi trường của user mà mình muốn chuyển session qua y hệt như bạn mở 1 session SSH hay local đăng nhập vào user đó. Bạn coi qua ví dụ 1 để hiểu thêm.

Ví dụ ở đây ta xét biến môi trường $PATH là dễ hình dung nhất.

Ví dụ 1:

[blogkdata@kdata.vn ~]$ whoami
blogkdata
[blogkdata@kdata.vn ~]$ pwd
/home/blogkdata/
[blogkdata@kdata.vn ~]$ echo $PATH
/home/blogkdata/perl5/bin:/home/blogkdata/perl5/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin:/usr/local/easy/bin:/usr/local/easy/bin

Thực hiện chuyển đổi sang user root với “su –“. Nếu bạn không để tên username sau lệnh su thì mặc định Linux hiểu là bạn đang muốn chuyển session sang user root.

[blogkdata@kdata.vn ~]$ sudo su -
[root@kdata.vn ~]# whoami
root
[root@kdata.vn ~]# pwd
/root/
[root@kdata.vn ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin

Bạn sẽ thấy là biến môi trường $PATH có sự khác nhau rõ rệt của 2 user.

2. “su <user>”

Nếu bạn sử dụng lệnh “su” mà không có dấu “–” thì session chuyển đổi sang user khác sẽ không được áp hay được thiết lập các biến môi trường được quy định của user đó, trong trường hợp này là vẫn giữ thông tin biến môi trường của user cũ. Bạn coi qua ví dụ 2:

Ta vẫn ở thư mục và session của user “blogkdata” và xét biến môi trường $PATH như cũ.

Ví dụ 2:

[blogkdata@kdata.vn ~]$ whoami
blogkdata
[blogkdata@kdata.vn ~]$ echo $PATH
/usr/bin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/home/blogkdata/bin
[blogkdata@kdata.vn ~]$ pwd
/home/blogkdata

Thực hiện chuyển đổi sang user root với “su “.

[blogkdata@kdata.vn ~]$ sudo su
[root@kdata.vn ~]# whoami
root
[root@kdata.vn ~]# pwd
/root/
[root@kdata.vn ~]# echo $PATH
/home/blogkdata/perl5/bin:/home/blogkdata/perl5/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin:/usr/local/easy/bin

Hy vọng qua 2 ví dụ trên, bạn đã hiểu rõ hơn về sự khác biệt giữa lệnh su và lệnh su - trong Linux.

Nguồn: cuongquach