GNU/Linux >> Belajar Linux >  >> Linux

Memindahkan /bin konten ke /usr/bin, mungkin untuk membatalkan?

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.


  1. 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 dengan apt --reinstall install zsh ).

  2. Anda dapat menampilkan dan mengurutkan berdasarkan waktu untuk melihat file yang baru saja diubah (termasuk file yang Anda pindahkan):

    ls -ltc /bin
    
  3. 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).


Linux
  1. Mengapa /bin/sh Menunjuk Ke /bin/dash Dan Bukan /bin/bash??

  2. Konflik Node.js:/sbin/node Vs /usr/bin/node?

  3. izin ditolak untuk komposer di /usr/local/bin/

  1. Perbedaan antara /bin/false &/sbin/nologin

  2. Perbedaan antara /bin dan /usr/bin

  3. #!/bin/sh vs #!/bin/bash untuk portabilitas maksimum

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  3. ./configure :/bin/sh^M :penerjemah yang buruk