İçimde sembolik bir bağ var. /var/www/
WordPress'e bağlanan dizin. Komutu çalıştırdığımda ls -la
şuradan /var/www/
dizin WordPress'e bağlantı görünmüyor. Bir dizindeki tüm sembolik bağlantıları listelemenin bir yolu var mı?
Ayrıştıran ls
is a kötü fikir®, basit bir tercih find
bu durumda:
find . -type l -ls
Yalnızca geçerli dizini işlemek için:
find . -maxdepth 1 -type l -ls
Kullanabilirsiniz grep
ile ls
geçerli dizinde bulunan tüm sembolik bağlantıları listelemek için komut.
Bu, geçerli dizinde bulunan tüm bağlantıları listeler.
ls -la /var/www/ | grep "\->"
grep
arkadaşın mı:
ls -lhaF | grep ^l # list linksls -lhaF | grep ^d # list directoriesls -lhaF | grep ^- # list files
Bu, yerine perms sütunundaki Bağlantıları temsil eden "l" ile başlayan satırları listeler l
kullanmak d
dizinler ve dizinler için -
dosyalar için
Pozitif:
find ! -name . -prune -type l
Bu, bir dizindeki sembolik olarak bağlantılı tüm öğeleri (hem dir'ler hem de fn'ler) döndürür:
find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"
Bununla birlikte, gerçek sembolik olarak bağlantılı öğe türlerini ayırt etmek için:
ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1
Yalnızca sembolik olarak bağlantılı dosya adı öğelerini döndürür. Ve,
ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1
Yalnızca sembolik olarak bağlantılı dirname öğelerini döndürür.
Bir dizindeki sembolik bağlantıları görüntülemek için:
Bir terminal açın ve bu dizine gidin.
-
Komutu yazın:
ls -la
Bu, gizlenmiş olsalar bile dizindeki tüm dosyaları uzun süre listeler.
İle başlayan dosyalar
l
sembolik bağlantı dosyalarınızdır.
Tip ls -lai
, karşılık gelen inode numaralarına sahip tüm dosyaları ve alt dizinleri listeler.Aynı inode numarasına sahip dosyaların bağlantılar (sert veya yumuşak) olduğunu ve bu çözümün sembolik bağlantılar için de çalıştığını biliyorsunuz.
Python ile de yapılabilir:
$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir
Örnek çalıştırma:
$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc/etc/vtrgb/etc/printcap/etc/resolv.conf/etc/os-release/etc/mtab/etc/localtime
Bu, özyinelemeli olacak şekilde genişletilebilir os.walk
işlev, ancak yukarıda gösterdiğim gibi bağlantıları tek bir dizinde listelemek için basit liste oluşturmayı kullanmak yeterlidir.
Herhangi bir linux tabanlı işletim sisteminde tüm bozuk sembolik bağlantıları yinelemeli olarak bulmak için lütfen bir liner bash script komutunun altında bulun
b=$(find / -type l); for i in $(echo $b); do file $i ; done |grep -i broken 2> /dev/null
zsh kullanma
ls -l *(@)lrwxrwxrwx 1 david david 15 Nov 18 22:35 gvimrc -> /etc/vim/gvimrclrwxrwxrwx 1 david david 13 Nov 18 22:19 mydomains.php -> mydomains.php