Ayrıca Bakınız:
“chmod -R 777 /” neden yıkıcıdır?
Dosya izinlerini özyinelemeyi kök dizinde /
yürüterek değiştirdim sudo chmod -R / 777
ve bundan sonra sistemim önyükleme yapmıyor ("izin reddedildi" hataları alıyorum).
Lütfen yardım et.
Ayrıca Bakınız:
“chmod -R 777 /” neden yıkıcıdır?
Dosya izinlerini özyinelemeyi kök dizinde /
yürüterek değiştirdim sudo chmod -R / 777
ve bundan sonra sistemim önyükleme yapmıyor ("izin reddedildi" hataları alıyorum).
Lütfen yardım et.
Yanıtlar:
Kayıp bir nedene bakıyorsunuz. İhtiyacınız olan verileri kaydedin ve işletim sistemini yeniden yükleyin.
/etc
, /var/www
web sunucusu içeriği ve veritabanlarıdır. Başka bir sabit disk alın, birincil sürücünüz olarak etkinleştirin ve yükleyin. Bu, diğer sürücünüzü aktarabilinceye kadar yedek olarak korur.
Ben dpkg veritabanlarında izinleri depolar biliyorum ve yardımcı olabilir aşağıdaki komut dosyası google bulundu .
Düzenleme: Aslında senaryoya hızlı bir göz vardı ve sanki PERMS MODE gider sihirli biraz eksik gibi görünüyor örneğin dpkg -c örneğin "-rw-r - r--" verir ama istediğiniz 0644, şu anda işteyim, bu yüzden bu anda dönüşümü yapmak için zamanım olduğundan emin değilim ama bu parçayı eklemek için başka kimse atlamamışsa daha sonra geri gelebilirim.
Burada ilginç görünen bir senaryo var
#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist.
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20
ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /
function changePerms()
{
CHOWN="/bin/chown"
CHMOD="/bin/chmod"
PERMS=$1
OWN=`echo $2 | /usr/bin/tr '/' ':'`
PATHNAME=$3
echo -e "$CHOWN $OWN $PATHNAME"
#`$CHOWN $OWN $PATHNAME`
#`$CHMOD $MODE $PATHNAME`
}
for PACKAGE in $PACKAGES;
do
echo -e "Getting information for $PACKAGE\n"
FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`
for FILE in "$FILES";
do
FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
changePerms $FILE_DETAILS
done
done
Öyle mümkün Böyle dağınık bir durumdan geri gelmek için sistemin yeniden olmadan. Peki, daha yeni bir sistemi bir USB anahtarından ya da bir Virutal Box'da (ya da benzeri) çift önyükleme sisteminiz varsa çalıştırıyor.
Yine aynı tür bir konuda (yazdığım bir senaryoda bazı hata) koştum ve çözdüm, ancak bazı uzmanların yardımını sormanız gerekiyor. Çok dikkatli olun!
İlk olarak, durumumu çözmek daha kolaydı çünkü çift önyükleme sistemim (ubuntu ve eski fedora kurulumum) vardı, ancak sistemi bir USB anahtarı (veya belki bir CD / DVD) için çalıştırmak da aynı şeyi yapmalı.
MPOINT = / / ubuntu montaj
Önce dosya sistemlerimi şu şekilde monte ettim (bağlama noktalarını oluşturmayı unutmayın): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home
Daha sonra izinleri çalışan sistemden dağınık olana kopyalamak için aşağıdaki komutu çalıştırdım (benim sorunum sadece birkaç kritik dizinde) (aslında, benim durumumda, fedora altında Virtual Box'a bir ubuntu sistemi kurdum ve izinleri orada aldı):
find / etc / usr / bin -exec stat --format "chmod% a $ {MPOINT}% n" {} \; > /tmp/restoreperms.sh
Sonra restoreperms.sh betiğini çalıştırdım.
Yine ubuntu'da önyükleme yapabildim.
Restoreperms.sh içeriği aşağıdaki gibi olacaktır:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
Ben test etmedi ama sahipleri ve sahibi grupları için de çalışması gerekir. Gibi bir şey:
find / etc / usr / bin -exec stat --format 'chown% U:% G $ {MPOINT}% n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
Tabii ki burada, UID ve GID'nin her iki sistemde de aynı olmasına dikkat etmelisiniz, ancak sistemle ilgili kullanıcılar ve gruplar için bu bir sorun olmamalıdır.
Rk:
Bunun için önemli bir şey, bir yükleme diskini kullandığınız sürümle senkronize tutmak veya en azından geçerli ubuntu sürümüyle çalışmaktır. Şimdi, bu bilgileri bir cronjob içinde, her gün (hafta olabilir) çalışan bu bilgileri tutmak için var. Bir dahaki sefere çözümü kolaylaştıracak, ama tabii ki, şimdi sahip olduğum gibi, bir daha asla olmayacak. ;-) Böyle bir şey:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
EDIT: bağlantıları desteklemek için birleştirilmiş komut:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}
Komut dosyasını yukarıdan değiştirdim ve şöyle görünüyor:
#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist.
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20
ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /
function changePerms() {
CHOWN="/bin/chown"
CHMOD="/bin/chmod"
PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g' -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'`
PERMS=`echo ${PERMS:1}`
OWN=`echo $2 | /usr/bin/tr '/' '.'`
PATHNAME=$3
PATHNAME=`echo ${PATHNAME:1}`
# echo -e "CHMOD: $CHMOD $PERMS $PATHNAME"
# result=`$CHOWN $OWN $PATHNAME`
# if [ $? -ne 0 ]; then
# echo -e $result
# exit 123;
# fi
echo -e "CHOWN: $CHMOD $PERMS $PATHNAME"
result=`$CHMOD $PERMS $PATHNAME`
if [ $? -ne 0 ]; then
echo -e $result
fi
}
for PACKAGE in $PACKAGES;
do
if [ -d $PACKAGE ]; then
continue;
fi
echo -e "Getting information for $PACKAGE\n"
FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`
for FILE in "$FILES";
do
#FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line;
do
changePerms $line
done
#changePerms $FILE_DETAILS
done
done
Blueben ile aynı fikirde olmak, sadece yeniden yükleme hangi dosya / dizinin hangi izne ihtiyacı olduğunu analiz etmekten daha hızlı olabilir. Ancak yeniden yükleme bir seçenek değilse, işte bir fikir:
find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
chmod.sh
yanlış izinlerle bilgisayara kopyalayınchmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
ERRATUM kullanıcı kullanıcısı olarak gönderilen gönderime100740: bağlantıları desteklemek için kombine komut:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2
Hala başlatabiliyorsanız /usr/sbin/synaptic
, genellikle düzeltilebilir.
Paketleri duruma göre sıralayın (üstte kurulu paketler), kurulu tüm paketleri seçin, sağ tıklayın ve yeniden yükle'yi seçin. Ardından uygulayın, dpkg
bu paketler için tüm dosyaları yeniden çıkarmanızı isteyecektir . (Yerel değişiklikleri kaybedersiniz (ancak dosya değişikliklerini yapılandırmazsınız).)
Yine de her şeyi düzeltmeyebilir.
Diğer bir şey, içeri /var/cache
girerseniz, dpkg -x <package name> /
yüklü her paketi arayabilir ve sonra arayabilirsiniz dpkg --reconfigure -a
. Ayrıca, Ubuntu kullanıyorsanız, genellikle çok sayıda hatayı düzelten bir dağıtım yükseltme yapabilirsiniz (en son sürümde olmadığınızı varsayarak). Genellikle böyle bir hatayı düzeltmeye çalıştığımda, bu basit düzeltmeleri denerim ve sadece tekrar çalışmalarını sağlamazlarsa, yeniden yükleme zamanı.
canlı CD'den önyükleme. sonra kabuk başlat, sonra sudo -s. Sonra chmod 777 / *, sonra chmod 600 / etc / passwd. init başarısız olduğunda çekirdek / lib / init komut dosyaları çalıştırılamazsa panik yapar. Lilo Linux 1 için tek kullanıcı moduna önyükleme yapın ve yukarıdaki user102453 komut dosyasını çalıştırın. Bu sistem önyükleme istemi alır. Hala X'i çalıştırmanız gerekiyor.
/ İçin 755 iznini ayarlamak benim için çalıştı.
Bu yüzden önce
root@ubuntu:/# cd /
root@ubuntu:/# ls -ld
İzinler "drwxr-xr-x" olmalıdır (755).