Bir dizindeki tüm sembolik bağlantılar nasıl listelenir

İç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

Krediler: Kabuğun `ls -A` komutu tarafından döndürülen dosya adlarını tanımasını ve bu adların boşluk içermesini nasıl sağlayabilirim?

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:

  1. Bir terminal açın ve bu dizine gidin.

  2. Komutu yazın:

    ls -la

    Bu, gizlenmiş olsalar bile dizindeki tüm dosyaları uzun süre listeler.

  3. İ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