Di Linux (dan di sebagian besar sistem lain, meskipun POSIX tidak memberi Anda jaminan itu kecuali perpindahannya melintasi sistem file), itu akan memperbarui waktu mereka, jadi dengan asumsi tidak ada yang lain di /usr/bin
telah disentuh dalam 24 jam terakhir, Anda seharusnya dapat memindahkannya kembali dengan:
find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
echo mv -i "[email protected]" /bin' sh {} +
Hapus echo
jika itu terlihat benar. Perhatikan bahwa Anda tidak akan dapat memulihkan file yang ada dengan nama yang sama di /bin
dan /usr/bin
(yang asli di /usr/bin
akan hilang)
Peringatan potensial:jika beberapa file ditautkan dengan keras di kedua /bin
dan /usr/bin
, semua tautan keras di /usr/bin
akan dipindahkan ke /bin
.
Sekarang, Anda mungkin berpikir bahwa sejak /bin
dan /usr/bin
ada di $PATH
default , dan /bin
tersedia di /boot
setidaknya sebelum /usr
sudah di-mount, tidak masalah apakah executable ada di /bin
bukannya /usr/bin
.
Tapi itu akan mengabaikan banyak perintah yang mengkode keras jalur yang dapat dieksekusi dan mengharapkannya dalam beberapa kasus tertentu. Kasus yang umum adalah she-bang. Semua skrip yang memiliki:
#! /usr/bin/env bash
akan gagal berfungsi setelah Anda melakukan mv /usr/bin/env /bin/env
. Dalam hal itu, memiliki perintah di kedua lokasi lebih aman karena tidak akan merusak skrip tersebut.
Apakah Ubuntu saya dalam keadaan rusak sekarang?
Ya, Ubuntu Anda rusak
Anda mengacaukan sesuatu yang penting untuk manajemen paket.
Jadi dalam prakteknya, buat cadangan data penting Anda (minimal /etc
dan /home
), mungkin juga daftar paket yang diinstal mis. keluaran dpkg -l
, dan instal ulang Ubuntu.
Saya hanya bisa mengakui mengacaukan menginstal ulang seluruh partisi linux.
Itu mungkin yang akan menghabiskan lebih sedikit waktu Anda. Menjaga sistem Anda saat ini dengan bantuan jawaban lain adalah menjaganya dalam keadaan sangat berantakan (yang akan membuat Anda sakit kepala di masa mendatang).
Karena Anda memformat ulang disk, pertimbangkan untuk memasukkan /home
di partisi terpisah (jadi kesalahan seperti itu di masa mendatang tidak akan kehilangan data Anda). Sebelum melakukan itu cetak di atas kertas output dari df -h
dan df -hi
dan fdisk -l
(mereka memberikan informasi tentang ruang disk - baik yang digunakan maupun yang tersedia - ...). Bijaklah untuk memiliki partisi sistem yang cukup besar (sistem file root); jika Anda mampu membelinya, 100 GByte sudah lebih dari cukup.
Saya seharusnya memindahkan konten software bin -folder ke /usr/bin
(terminologi:Unix memiliki direktori, bukan "folder").
Itu (bergerak ke /usr/bin/
) sangat salah. Tingkatkan $PATH Anda (sebaiknya) atau paling banyak tambahkan symlinks di /usr/bin/
dan sebaiknya pindahkan (atau tambahkan symlink) yang dapat dieksekusi ke /usr/local/bin/
.
Pendekatan bijak adalah jangan pernah mengubah /usr/bin/
, /bin
, /sbin
, /usr/sbin/
di luar alat manajemen paket (mis. dpkg
, apt-get
, aptitude
, dll...). Baca FHS.
-
Instalasi Anda sebagian besar harus baik-baik saja; tidak boleh ada file berbeda dengan nama yang sama di
/usr
dan/usr/bin
(yang menjawab 2.1 Anda), jadi memiliki semua file di keduanya/bin
dan/usr/bin
tidak akan merusak apa pun (sampai Anda memutakhirkan paket). Satu-satunya masalah yang mungkin Anda miliki sekarang adalah symlink yang rusak, jika Anda menimpa biner dengan symlink ke dalamnya. Untuk memperbaikinya, cari symlink yang rusak:find -L /bin /usr/bin -type l -ls
dan instal ulang semua paket yang sesuai dengan file yang terdaftar (misalnya, jika
/usr/bin/zsh
muncul sebagai rusak,dpkg -S /bin/zsh /usr/bin/zsh
akan memberi tahu Anda dari paket mana file itu berasal; instal ulang denganapt --reinstall install zsh
). -
Anda dapat menampilkan dan mengurutkan berdasarkan waktu untuk melihat file yang baru saja diubah (termasuk file yang Anda pindahkan):
ls -ltc /bin
-
Pendekatan terbaik untuk membatalkan apa yang Anda lakukan adalah menggunakan
cruft
paket dan hapus file yang ditemukannya di/bin
atau/usr/bin
yang tidak berasal dari paket:sudo apt install cruft sudo cruft -d "/ /usr"
kecuali jika file tersebut merupakan symlink ke file di
/etc/alternatives
(dalam hal ini Anda harus membiarkan mereka sendiri).