Ở cùng thư mục làm việc khi thay đổi thành sudo


25

Khi làm việc trên dòng lệnh, tôi thường thay đổi thành sudo bằng cách sử dụng sudo -i. Tuy nhiên, thư mục làm việc của tôi tự động thay đổi thành /root. Tôi không bao giờ muốn đến đó; Tôi muốn ở lại nơi tôi đã ở!

Câu trả lời:


28

Bạn có thể sử dụng sudo -sthay vào đó, nó sẽ không thay đổi thư mục hiện tại của bạn /root, mặc dù một số biến môi trường của bạn sẽ không phải là của root.

Đây trang từ Diễn đàn Ubuntu có một bản tóm tắt tốt đẹp:

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y

Trang này từ tài liệu của Ubuntu có nhiều thông tin cơ bản hơn về sudo .


1
Đẹp! Cảm ơn rất nhiều, đơn giản nhưng tổng quan nhỏ tuyệt vời!
Phục hồi Monica

@ user1162541 Rất vui được giúp đỡ.
Levon

sudo -iulàm việc cho tôi ubuntuforums.org/
rofrol

Trong quá trình thử nghiệm của tôi, các vv của env sudo -ivẫn bị hỏng bởi các vv env của người dùng. Cách duy nhất để tránh điều này là sử dụng su -l.
Simba

5

Nếu bạn muốn sử dụng su, có một cách để ở trong cùng một thư mục.

su - người dùng -c "cd` pwd`; bash "

Những gì đang xảy ra ở đây:

  • su - user = đăng nhập như user
  • -c có nghĩa là "chạy một lệnh trong trình bao mới của người dùng"
  • -c "cd `pwd`"lệnh chúng tôi đưa ra là để chuyển sang thư mục hiện tại ( `pwd`) - nhưng vì chúng tôi sử dụng backticks trong dấu ngoặc kép, nên pwdlệnh được ước tính trước khi chúng tôi chạy sulệnh, để chúng tôi thực sự chuyển sang thư mục chúng tôi đang ở NGAY như cũ người sử dụng.

    • Ngược lại, -c 'cd `pwd`'sẽ thực thi pwdlệnh trong shell mới, do đó, điều này sẽ đánh giá cd /root, tất nhiên, sẽ không hoàn thành bất cứ điều gì.

    Vấn đề duy nhất ở đây là shell mới thoát ngay sau khi chạy lệnh, vì vậy sau đó chúng tôi thêm:

  • -c "cd `pwd`; bash"có nghĩa là "chạy bash(shell mới) sau khi chạy cdlệnh. Shell bash không thoát cho đến khi chúng ta đăng xuất khỏi nó.

Lưu ý rằng bạn có thể thay thế `pwd`bằng $(pwd). Chúng có chức năng giống nhau, nhưng sự phong phú của các ký tự giống như trích dẫn có thể trở nên khó đọc.


0

Tôi đã đối mặt với cùng một vấn đề và tôi không được phép chạy bất cứ thứ gì ngoài sudo su - devusermáy chủ dev, vì vậy đây là những gì tôi nghĩ ra:

  1. Trong .usofof của devuser, quay lại nhà người dùng trước nếu tìm thấy:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Một tập lệnh để xác định người dùng trước đó. Kịch bản được đặt trong thư mục bin của devuser:
#!/bin/bash
#brings you back home after sudo su

function get_owner {
  pid=$1
  echo $(ps ouid -p $pid h | tr -d ' ')
}

pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
    pid=$(ps -o ppid= $pid)
    uid=$(get_owner $pid)
    i=$((i+1))
done

user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
    echo $user_home
fi

Nó đi lên một cây quy trình và kiểm tra xem người dùng sở hữu quy trình có thay đổi hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.