GNU/Linux >> Belajar Linux >  >> Linux

Jalankan perintah cd sebagai superuser di Linux

Seperti yang Anda catat, cd adalah perintah bawaan shell, dan ada alasannya untuk itu:"direktori saat ini" adalah parameter per-proses yang hanya dapat diubah oleh proses itu sendiri .

Direktori kerja shell Anda tidak dapat diubah oleh proses anak mana pun – bahkan jika Anda berhasil menjalankan cd dalam subkulit istimewa, itu hanya akan mengubah direktori kerja dari subkulit sementara itu, dan tidak masalah metode apa pun untuk meningkatkan hak istimewa yang Anda gunakan.

Jadi untuk sudo cd untuk bekerja, sudo itu sendiri harus menjadi shell built-in, dan perlu beberapa cara untuk meningkatkan hak istimewa dari proses yang sudah berjalan. Saat ini tidak ada mekanisme seperti itu di Linux (atau kebanyakan sistem operasi lain).

Salah satu cara untuk mencapai apa yang Anda inginkan adalah dengan menjalankan interaktif shell dengan hak akses root (metode apa pun berfungsi), dan cukup gunakan cd biasa di dalamnya:

[[email protected] /]$ sudo bash
[[email protected] /]# cd /root/secret

Jika Anda ingin melakukan semuanya dalam satu perintah, tampilannya harus seperti ini – pertama-tama ubah direktori kerja, lalu mulai shell interaktif:

sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"

Catatan:Perintah luar tidak harus berupa shell, hanya perlu sesuatu yang mengubah direktori kerjanya dan menjalankan perintah baru. Sistem Linux terbaru memiliki satu atau dua pembantu yang dapat digunakan:

sudo nsenter --wd="/root/secret" bash       # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash        # coreutils v8.28 (debian buster)

Keuntungan dari metode ini adalah tidak memerlukan kutipan bersarang; Anda dapat menjalankan perintah multi-kata tanpa mengalami masalah dengan spasi atau karakter khusus.

Terakhir, beberapa program memiliki opsi bawaan untuk mengubah direktori kerjanya:

sudo make -C /etc
sudo git -C /root/secret log

Jawaban lainnya tidak salah.

Mungkin jawaban yang lebih baik adalah:

Alat sudo dimaksudkan untuk mengambil tindakan sebagai pengguna super, dan Anda mendeskripsikan sesuatu yang lebih merupakan perubahan status yang akan mendahului tindakan seperti 'ls' atau 'vi' atau lainnya untuk membuatnya lebih sederhana.

Saya sarankan, mis. jika Anda ingin mengedit file di /root/private/:

sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>

Ini pasti lebih banyak mengetik, dan sedikit lebih sulit daripada hanya mengubah direktori. Namun, itu jauh lebih dapat diaudit, dan lebih sejalan dengan prinsip di balik sudo daripada menjalankan beberapa varian 'sudo bash.'

Jika Anda bekerja di lingkungan yang aman, tim IA Anda akan berterima kasih. Jika Anda menemukan diri Anda bertanya-tanya:"Perubahan apa yang saya lakukan kemarin?", maka Anda akan berterima kasih, karena Anda tidak perlu bertanya-tanya file atau file apa yang Anda edit.

Semua ini dikatakan, mengaktifkan dan menjalankan beberapa bentuk 'sudo bash' jelas lebih mudah. Jika Anda mencari yang lebih mudah, mengapa Anda menggunakan 'sudo' daripada hanya masuk sebagai root?


Linux
  1. Jalankan container di Linux tanpa Sudo di Podman

  2. Menggunakan Sudo untuk mendelegasikan izin di Linux

  3. linux:cara menjalankan perintah di direktori tertentu

  1. Perintah mv Linux

  2. Linux du perintah

  3. Perintah ip Linux

  1. Cara Menjalankan Perintah / Script Shell Linux di Latar Belakang

  2. Perintah cd Linux

  3. Contoh Perintah sudo di Linux