Saya memiliki keadaan darurat, pemula Linux dan Bash di sini dan kacau mencoba untuk menulis skrip untuk mengubah nama beberapa file. Loop secara tidak sengaja naik jalur (menjalankan skrip di folder di Desktop) dan diubah namanya /bin
menjadi /D_bin
( D_
adalah awalan yang saya tambahkan) jadi sekarang sistem tidak dapat menggunakan /bin
konten, jadi tidak bash
, tidak mv
untuk mengganti nama, tidak sudo
... File-file di /D_bin
ok, tidak diganti nama, dan dapat menyalin-menempelnya tetapi tidak dapat membuat folder /bin
lagi tanpa bash. Sistem terlihat stabil tetapi sangat sedikit hal yang berfungsi dan tidak memiliki akses ke file di Desktop.
Folder lain /
seperti /lib
/sbin
/etc
sepertinya juga ok, dan desktop grafis masih ada. Saya takut memulai kembali karena saya tidak tahu apakah itu dapat boot.
Apakah ada shell di root atau cara untuk mengganti nama /D_bin
kembali /bin
? Butuh bantuan, pekerjaan yang sangat penting dikompromikan
Skrip bunuh diri saya: $:
#!/bin/bash
files=~/Desktop/folder_1/*
for j in $files
do
cd $j
for i in 10n* #file names starting by 10n
do
find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
done
cd ..
done
:( Terima kasih !!!!
sumber
/D_bin/mv -T /D_bin /bin
dan jangan jalankan skrip Anda sebagai root di lain waktu.Jawaban:
Ada beberapa cara untuk memperbaiki masalah ini.
Jika Anda memiliki akses ke shell (terminal terbuka), jalankan:
sudo
ada di/usr/bin
jadi tidak perlu menjalankannya dengan jalur absolut.Hal lain yang dapat Anda lakukan adalah menambahkan variabel lingkungan
/D_bin
AndaPATH
seperti ini:Jika Anda tidak memiliki akses ke shell apa pun:
di akhir baris yang dimulai dengan linux, tambahkan:
tekan CTRL+x
Sekarang Anda akan jatuh ke shell bash, Anda harus mengount ulang sistem file sebagai telah dibaca dan ditulis.
Dan pindahkan direktori D_bin ke bin:
Kemudian reboot sistem.
Ini seharusnya bekerja, tetapi jika tidak ada yang berhasil untuk Anda, Anda masih dapat mem-boot sistem dengan disk / usb ubuntu langsung dan memperbaiki masalahnya.
sumber
cd "$j"
(nama harus dalam tanda kutip ganda), dan ganti pembuatan kerusakancd ..
dengan tanda kurung tutup yang cocok. Juga, mengapa Anda menjalankannya sebagai root. Anda seharusnya tidak dapat melakukan banyak kerusakan.cd ..
meletakkanpwd
, hapusfind
perintah Anda dari skrip, kemudian jalankan sebagai pengguna normal. Anda akan melihat skrip masuk/
, karena Anda melakukan cd $ j yang saya kira adalah file bukan direktori. jadi di setiap loop Anda mundur satu langkah dan akhirnya Anda berada di/
./bin
karena sedang bekerja pada folder di dalamnya/bin
. Saya akan memeriksa mereka (meskipun tidak sebagai root!)mv
lagi.Untuk memperbaiki masalah ini jika Anda tidak memiliki terminal yang sedang berjalan terbuka, saya pertama-tama akan mencoba menemukan "pengganti shell" yang dapat Anda gunakan sebagai ganti bash. Python dalam
/usr/bin
, jadi itu masih bekerja.Jika itu tidak berhasil, saya akan langsung mem-boot dari live CD / USB dan memperbaiki semuanya dari lingkungan yang dikenal waras.
Sebagai saran umum, saya akan mendukung Jonathan Leffler dalam komentar: jangan pernah gunakan
cd ..
dalam skrip, itu dapat dengan mudah menyebabkan masalah seperti itu. Lebih baik hanya memasukkan ke$j
direktori dalam subkulit , dengan cara ini Anda tidak perlu khawatir untuk kembali.Juga, tentu saja, jangan menjalankan hal-hal sebagai root kecuali benar-benar diperlukan.
sumber
python
proses Anda hanya perlu aplikasi terminal, dan untuk menjalankanos.system("sudo ...")
Anda hanya perlu * nix kernel. Mungkin saya akan mencobanya di VM nanti ...cd
menggunakan skrip, biasanya lebih baik untukcd -
kembali ke tempat Anda berada, daripada mengasumsikan Anda menyimpan satu direktori. Jika Anda mengubah inisialcd
, makacd ..
tidak akan membuat Anda kembali ke tempat Anda sebelumnya, tetapicd -
akan.cd ..
saya tidak akan menggunakancd -
skrip, hanya pada command-line.cd -
mungkin kurang dari masalah-jaminan daripadacd ..
, tapi saya masih tidak akan menganggapnya aman - jika seseorang menambahkan perubahan direktori lebih lanjut di tengah, itu akan membawa Anda ke suatu tempat yang tidak diinginkan. Sedangkan subkulit memberi Anda ruang lingkup yang jelas dibatasi untuk tempat direktori berubah, dan ke titik mana Anda kembali.os.system
tidak tidak bekerja tanpash
hadir, tapisubprocess.call
karya-karya.