Saya mencoba menggunakan sudo cd name_of_dir
tetapi menerima pesan kesalahan:
sudo: cd: command not found
Apakah ada cara lain untuk memasukkan direktori yang dimiliki oleh pengguna lain yang memiliki 700 izin?
command-line
permissions
sudo
cd-command
Bakhtiyor
sumber
sumber
ls -l
direktori itu sendiri.sudo chmod 0755 name_of_dir; do you business; cd ../; sudo chmod 0700 name_of_dir
Tampaknya menjadi satu-satunya jawaban yang akan membuat Anda senang.sudo cd
bekerja, tetapi dia memilih solusi menggunakan sudo atau su. Dia mengatakan dia tidak ingin bekerja sebagai root, tetapi dia masih ingin mengakses secara langsung dia tidak punya. Kedengarannya seperti troll bagi saya ...Jawaban:
sudo cd
tidak akan bekerja karenacd
perintah dibangun ke dalam shell. Jadi yang Anda katakan menjadi root dan kemudian jalankan perintah ini. Anda menjadi root dan kemudian perintah setelah sudo dicari tetapi tidak adacd
perintah untuk menemukan.Metode yang digunakan adalah beralih ke pengguna yang memiliki direktori. Izin
700
dimaksudkan sebagai "pemilik dapat membaca, menulis, dan mengeksekusi".Jadi jika root memiliki direktori
sudo -i
, kata sandi dancd {dir}
satu-satunya metode yang benar. Jika orang lain memiliki direktori Anda masih dapat menggunakan metode 1 tetapi juga dapat mengubah ke pengguna itusu {username}
dan kemudian menggunakancd
sebagai pengguna itu.sumber
sudo echo
: Anda perlu sesuatu sepertiecho 'deb {text}' | sudo tee --append {file}
menggunakan gema dengan sudo dan mengubah file.cd
dibangun ke dalam perintah yang tersedia untuksudo
?sudo -i
untuk membuka "root console" lalu
cd /path/to/directory
(
cd
Adalah perintah shell builtin, jadi itu tidak bisa menjadi target sudo)sumber
Untuk membuka direktori root, kita dapat menjalankan shell root, misalnya:
sumber
sudo su
ing (atau metode lain) adalah satu-satunya metode praktis atau bahkan mungkin. "Pakar" hanya memberitahu Anda untuk tidak menggunakan root sebagai kebiasaan - tidak apa-apa saat Anda benar-benar membutuhkannya. Dan @ Vojtech, tidak ada yang mustahil ...Seperti yang orang lain tunjukkan - itu adalah built-in shell:
Jadi, mengapa Anda tidak sudo shell itu sendiri?
sumber
which
. Ini hanya sebuah skrip, dan tidak akan menangani semua kemungkinan (biner, builtin, alias, dll). Gunakantype
sebagai gantinya. Jauh lebih aman, kuat, dan portabel. Dantype -p
untuk jalur yang dapat dieksekusi.type [ -wfpams ] name ... Equivalent to whence -v.
,which [ -wpams ] name ... Equivalent to whence -c.
(man zshbuiltins)whence
iszsh
-only ... tidak berfungsi di bash, bahkan tidak diinstal secara default di ubuntu. Sementaratype
adalah POSIX , yang berarti ia akan bekerja di setiap modern yang shell ... bash, csh, ksh .. dan bahkan zsh.type
karena keduanya alias untuk perintah yang sama.zsh
. Di bash, yang merupakan shell terminal default (dan biasanya hanya) di Ubuntu,which
bukan builtin ... jaditype
(atautype -p
) lebih disukai.Anda juga dapat meningkatkan diri Anda untuk me-root pengguna dengan:
Kemudian Anda dapat melakukan cd ke direktori mana pun yang tidak mengizinkan pengguna normal seperti:
Atau
Kemudian setelah selesai di sana ketik:
Untuk keluar dari hak pengguna root.
Untuk meninggikan diri Anda sebagai root, Anda juga dapat menggabungkan dua perintah oleh
&&
operator seperti di bawah ini, operator ini juga mempertahankan urutan eksekusi mereka, jika perintah saat ini dijalankan dengan sukses dan hanya kemudian perintah berikutnya diizinkan untuk menjalankan:Atau
sumber
Jika Anda benar-benar ingin membuat pekerjaan, Anda dapat menentukan fungsi shell yang disebut yang menjalankan shell root baru ketika menjalankan cara itu, dan hanya menjalankan perintah biasa jika tidak.
sudo cd directory
bash
sudo
sudo
Seperti yang disajikan dalam jawaban lain, sebagian besar pengguna tidak ingin repot melakukan itu, tetapi sebaliknya ingin:
sudo -s
, atausudo -i
jika Anda ingin shell login (ingat bahwa salah satu efeknyasudo -i
adalah untuk memulai Anda di direktori home root), atausudo bash
jika Anda ingin memaksabash
atau dapat meneruskan opsi ke shell.cd directory
exit
untuk meninggalkan shell baru. Penting untuk tidak melupakan ini, karena Anda tidak ingin melakukan lebih banyak tindakan sebagai root daripada yang Anda inginkan!Jadi, jika Anda mau, maka Anda dapat menulis fungsi shell (atau skrip) yang melakukan dua tindakan pertama saat
sudo
diikuti olehcd
, dan hanya berjalan secarasudo
normal jika tidak. Tolong jangan gunakan ini sebagai alternatif untuk belajar mengapasudo cd
tidak berhasil , karena jika Anda tidak mengerti apa yang sedang terjadi, maka Anda mungkin akan sangat bingung dengan berada di shell baru (dan Anda mungkin tidak mengerti pesan kesalahan apa pun) itu terjadi).Inilah salah satu cara untuk menulis fungsi shell seperti itu, yang juga mengingatkan Anda bahwa Anda berada di shell baru dan bahwa Anda harus
exit
keluar darinya ketika Anda selesai. (Pengingat Itu mungkin akan berguna bagi pengguna dari setiap tingkat keterampilan, karena salah satu umumnya tidak terbiasa berada di shell baru ketika salah satu berjalansudo
tanpa-s
,-i
atau nama shell yang sebenarnya sebagai argumen.)Anda bisa memasukkan ini ke dalam Anda
~/.bashrc
, meskipun ini adalah cara yang cukup aneh untuk digunakansudo
sehingga Anda mungkin hanya ingin mengaktifkannya sesekali. Dalam hal ini, lebih baik untuk meletakkannya di file sendiri. Jika Anda membuat file yang disebutsudo.bash
di direktori home Anda dengan konten-konten itu, maka Anda dapat membuatsudo
fungsi tersedia - sehingga itu akan berjalan alih-alihsudo
perintah biasa - dengan menjalankan. ~/sudo.bash
. Itu berlaku di shell saat ini dan shell anaknya, tetapi tidak yang lain. Untuk alasan yang sama bahwa file seperti.bashrc
tidak dapat dieksekusi, jangan tandaisudo.bash
dieksekusi denganchmod
. Ini benar-benar perpustakaan, bukan skrip shell mandiri. Jika Anda melakukannyajalankan sebagai skrip shell, itu akan mendefinisikan fungsi ... tetapi hanya di shell yang menjalankan skrip, bukan untuk Anda sebagai penelepon. (Tentu saja, Anda dapat menulis skrip untuk ini, itu tidak terjadi karena pendekatan yang saya ambil di sini.)Untuk memeriksa dan melihat apakah
sudo
saat ini didefinisikan sebagai fungsi shell, dan untuk melihat definisi saat ini jika itu adalah salah satu, jalankantype sudo
. Untuk menonaktifkan (mis. Undefine) fungsi setelah ditetapkan, jalankanunset -f sudo
. Untuk secara manual menjalankansudo
perintah reguler secara langsung bahkan jika fungsi shell didefinisikan, jalankancommand sudo
. Namun, perhatikan bahwa Anda tidak harus melakukan itu, karenasudo
fungsi ini sebenarnya melakukan itu sendiri setiap kali ada lebih atau kurang dari dua argumen yang diteruskan ke sana atau argumen pertama yang diteruskan ke sana adalah apa pun kecualicd
. Itu sebabnya Anda masih bisa menggunakannya dengan cara yang biasa digunakan orangsudo
.Perhatikan juga bahwa fungsi shell yang ditunjukkan di atas masih memungkinkan Anda meneruskan argumen lain
sudo
, tetapi itu akan mencegahnya memperlakukancd
secara khusus . Menjalankan khususnya tidak didukung, meskipun Anda dapat memperluas fungsi shell untuk mendukung kasing itu. Tidak juga . Shell yang dibuatnya mirip dengan apa yang Anda dapatkan . Kode tidak benar-benar berjalan , tetapi menggunakan , sehingga opsi berfungsi dengan baik. Ini benar-benar berjalan dua kali ketika Anda lulus dan argumen direktori untuk itu (dan nol kali sebaliknya). Saat Anda menjalankan , pertama itu memotong shell bash terpisah dari yang Anda menjalankan fungsi dan mengubah direktori. Jika itu berhasil, itu menggantikansudo -u user cd directory
sudo -i cd directory
sudo -s
sudo -s
sudo bash
-c
bash
cd
sudo cd directory
sudo
bash shell dengan yang baru dan interaktif yang bisa Anda gunakan.Berikut adalah contoh bagaimana shell berfungsi secara otomatis "melakukan hal yang benar." Perhatikan bahwa
sudo ls -A /root
berperilaku normal. Hanya ketika saya kemudian mencoba untukcd
ke direktori dengansudo
shell baru dibuat, dan saya diingatkan secara eksplisit tentang apa yang terjadi.Jika Anda mencoba ke
sudo cd
direktori yang tidak dapat Anda ubah bahkan sebagai root, maka Anda hanya akan mendapatkan pesan kesalahan:Saya telah menggunakan
sudo -k
di antara doa dalam contoh di atas untuk menunjukkan bahwa itu mengotentikasi Anda sebagai root sebelum mencoba mengubah direktori. Tetapi Anda sebenarnya tidak harus larisudo -k
sendiri. Karena fungsi shell hanyalah pembungkus tipis untuksudo
perintah sebenarnya , caching kredensial Anda dansudo
perilaku umum lainnya masih berfungsi secara normal.Meskipun itu bekerja dengan baik dan agak rapi, saya akui bahwa membayangi
sudo
perintah sebenarnya dengan fungsi dengan nama yang sama adalah super aneh. Sebagian besar pengguna mungkin akan hanya ingin melakukan langkah-langkahsudo -s
, sendiri. Tetapi kalau-kalau ada yang menginginkan ini - dan juga untuk menunjukkan bahwa itu mungkin - itu dia.cd directory
sumber
Sejauh ke
su
atau tidak untuksu
berdebat, saya pikir itu konyol.su
bertentangan dengan agama Ubuntu dan itu bukan sesuatu yang dilakukan dengan sembarangan. Sungguh menakjubkan apa yangrm -rf *
bisa dilakukan jika Anda root. Tetapi, jika Anda merasa nyaman dengan antarmuka baris perintah (CLI) dan memiliki tugas-tugas tingkat sistem untuk dilakukan, tidak ada alasan untuk tidak menggunakannyasu
. Saya telah menggunakan beberapa distro di mana tidak ada yang menyebutkan menggunakansudo
. Ini hanya masalah pekerjaan apa yang Anda lakukan dan metode apa yang paling nyaman bagi Anda. Saya menggunakan keduanya.sumber
sudo
saya miliki dengan kubuntu jernih,sudo cd
sekarang berfungsi - tanpa ada solusi." Singkatnya, seperti itu , yang saya sangat yakin belum pernah di Ubuntu secara default, saya tidak mengerti caranya. (Juga, saya telah menggunakan 10,04; itu tidak melakukan itu.) Sudah bertahun-tahun sejak Anda memposting ini, tetapi apakah Anda ingat detailnya? Apakahsudo cd
masih bekerja untukmu? Apa output daritype -a sudo
sebuah shell di mana ia bekerja? Saya mengerti Anda mungkin tidak tahu - dan bagian kedua dari jawaban Anda tetap relevan - tetapi jika Anda melakukannya, Anda dapat mengeditnya .