मैं स्वचालित रूप से टूटे प्रतीकात्मक लिंक पर कैसे खोज और रिपोर्ट कर सकता हूं?


9

सुव्यवस्थित सिसड्मिन के रूप में, हम यह सुनिश्चित करना पसंद करते हैं कि छोटी चीजें केवल बड़ी चीजों के साथ ही कवर की जाती हैं (जब समय की अनुमति होती है)। इन चीजों में से एक यह सुनिश्चित कर रही है कि हमारे सिस्टम टूटी हुई सहानुभूति से भरे नहीं हैं।

क्यों इन छोटे blighters एक समस्या है? क्योंकि वे सोचते हैं कि फ़ाइलें वहाँ हैं जब वे नहीं हैं, तो वे कुछ अधिक कष्टप्रद होने का संकेत हो सकते हैं, और क्योंकि (छोटा) OCD हिस्सा मुझे कुछ आदेशों (जैसे grep -r) को चलाने के दौरान उन सभी चेतावनियों के साथ पागल हो जाता है ।

इसलिए, कोई व्यक्ति ई-मेल या निगरानी प्रणाली के माध्यम से पता लगाने (और रिपोर्टिंग, ई-मेल या निगरानी प्रणाली के माध्यम से) के बारे में कैसे जानेगा कि सिस्टम किसके लिए ज़िम्मेदार है (कोई भी बिंदु मुझे यह नहीं बताता कि ~jbloggsटूटी हुई सहानुभूति का एक गुच्छा है, यही उसकी समस्या है। )?


जवाबों:


7

इसके साथ समस्या -Lयह है कि खोज का उप-निर्देशिकाओं में विस्तार करने का साइड इफेक्ट है जो इसके लक्ष्य हैं symlinks, जो अपेक्षित या वांछित नहीं हो सकते हैं।

के GNU findutilsसंस्करण के साथ find:

<!-- language: bash -->
find /path/to/search -xtype l

सिवाय इसके कि चक्रीय प्रतीकात्मक लिंक नहीं मिलते हैं।

-execdir अन्य उत्तर में पोर्टेबल के रूप में नहीं है, तो यह एक पोर्टेबल समाधान है कि टूटी प्रतीकात्मक लिंक, चक्रीय लिंक सहित खोजने के लिए आसुत:

<!-- language: bash -->
find /path/to/search -type l -exec test ! -e {} \; -print

इस प्रश्न को देखें , या ynform.org आगे की चर्चा के लिए। विवरणों के लिए फ़ुटुटिल्स दस्तावेज़ भी देखें । Ynform.org लिंक भी केवल चक्रीय लिंक का पता लगाने के लिए एक विधि प्रस्तुत करता है।


5

एक बिल्ली त्वचा के लिए कई तरीके

यह काफी पोर्टेबल है (-L पॉज़िक्स आवश्यकता है)

find -L /path/you/care/about -type l 2>/dev/null | mail -s "Broken symlinks detected" womble@example.com

आपने टूटे हुए को परिभाषित नहीं किया है, उपरोक्त आपको टूटे हुए लिंक भेजेगा जिनकी आपके द्वारा परवाह किए गए फाइल सिस्टम के हिस्से में कोई लक्ष्य नहीं है। यह stderr फाइलसिस्टम लूप और प्रतीकात्मक लिंक के कई स्तरों आदि समस्याओं पर भी रिपोर्ट करता है। यदि आप उनकी भी परवाह करते हैं तो अपने मेल पर stderr को पुनर्निर्देशित करें

find -L /path/you/care/about -type l 2>&1 | mail ...

यदि आपका खोज समर्थन करता है तो -readableयह उपयोगी और तेज़ है

find /path/you/care/about -type l ! -readable | mail ...

उपर्युक्त में आउटपुट के बहुत अधिक प्रतीकात्मक लिंक समस्याओं के लिंक शामिल हैं, लेकिन फाइल सिस्टम लूप नहीं।

यदि फाइल सिस्टम के कुछ हिस्सों की आप परवाह करते हैं तो अलग-अलग रास्ते हैं

find /path/you/care/about /another/path ...

find -Lइस उपयोग के मामले के लिए समस्याग्रस्त है। देखें: unix.stackexchange.com/a/38691/6860
sampablokuper

1

मैं आपको एक लिनक्स उत्तर दूंगा और जरूरत पड़ने पर आप इसे अपने यूनिक्स में समायोजित कर सकते हैं:

find . -type l ! -execdir test -e {} \; -print >> broken_symlinks.txt; mutt -s "Broken symlinks" womble@example.com < broken_symlinks.txt; rm -f broken_symlinks.txt

दूसरा विकल्प ls -LR | grep 'cannot access'उपर्युक्त खोज कमांड से या कुछ संशोधनों का है।

संपादित करें:

हाँ, यह और भी बेहतर है: find . -type l ! -execdir test -e {} \; -print | mail -s "Broken symlinks" womble@example.com


1
क्यों नहीं broken_symlinks.txtपूरी तरह से छुटकारा पाने के लिए और सिर्फ एक पाइप का उपयोग करें? और ई-मेल भेजने के mailबजाय उपयोग करें mutt?
वूमबल

0

यह GNU खोज के साथ करने का एक अच्छा तरीका है:

find <root_dir_of_find> -follow -lname '*' | mail sysadmin -s 'Broken symlink report'

कारण यह काम करता है, क्योंकि -lnameके साथ -follow(या एल) "... इस परीक्षण रिटर्न झूठी जब तक सांकेतिक लिंक टूट गया है", खोजने आदमी पृष्ठ के अनुसार।

जब सर्वर का भारी उपयोग नहीं किया जाता है तो इस तरह की डिस्क स्कैनिंग को चलाना बुद्धिमानी होगी। इस कार्य को चलाने के दौरान सर्वर पर लोड को कम करने के लिए उपयोग niceऔर / या ionice( आयनस के अच्छे विवरण के लिए यह ब्लॉग देखें) उपयोगी हो सकता है ।


0

फेडोरा और उबंटू symlinksउपयोगिता प्रदान करते हैं । उपयोगिता एक देशी योगिनी निष्पादन योग्य है, न कि आवरण आवरण लिपि। उपयोगिता को फेडोरा पर पूर्वस्थापित किया गया था। आपको उबंटू पर उपयोगिता स्थापित करने की आवश्यकता हो सकती है।

symlinksउपयोगिता के साथ आप निम्न कमांड के साथ लिंक झूलने के लिए ऑडिट कर सकते हैं।

sudo symlinks -r /usr | grep dangling

यदि हटाने के लिए लटकते लिंक के लक्ष्य ठीक हैं, तो उन्हें हटाने के लिए निम्नलिखित जारी करें।

sudo symlinks -r -d /usr

यहां फेडोरा 31 सर्वर पर आउटपुट का एक उदाहरण है। debian-logo.pngऔर ubuntu-logo.pngसही हैं।

$ sudo symlinks -r /usr | grep dangling
dangling: /usr/lib/.build-id/0a/21c737b7a56e803b12724b2bc4a8d27654ee0e -> ../../../../usr/lib64/perl5/auto/Cwd/Cwd.so
dangling: /usr/lib/.build-id/0c/352d0ca7513dad8eb098d3ad0684379a835aed -> ../../../../usr/lib64/perl5/auto/Unicode/Collate/Collate.so
dangling: /usr/lib/.build-id/1b/99d9d65010cdcc2193b873e7e825e70e23422b -> ../../../../usr/sbin/quota_nld
dangling: /usr/lib/.build-id/1c/c667de4368e4d621257070a451684c373f9952 -> ../../../../usr/sbin/rpc.rquotad
dangling: /usr/lib/.build-id/24/cfecf40f5fca30662589eb016da08a28767697 -> ../../../../usr/lib64/perl5/auto/DB_File/DB_File.so
dangling: /usr/lib/.build-id/25/42192b89d9eaf9c9782b0c22f91ee6440482cd -> ../../../../usr/lib64/dovecot/lib95_imap_filter_sieve_plugin.so
dangling: /usr/lib/.build-id/2a/a949ebff931bc3732fc396a0f2b294bb9e854b -> ../../../../usr/lib64/perl5/auto/Digest/MD5/MD5.so
dangling: /usr/lib/.build-id/34/2a46c23513258e09e87d6808b784a8b6491ff8 -> ../../../../usr/lib64/perl5/auto/Storable/Storable.so
dangling: /usr/lib/.build-id/43/e0a6db8e2b4f4aeb8f5ebb69f3cc716fc5d1cd -> ../../../../usr/lib64/perl5/auto/threads/shared/shared.so
dangling: /usr/lib/.build-id/4a/661475701d2cdcfb7d085c3e6f9bd05485d207 -> ../../../../usr/bin/coreutils.single
dangling: /usr/lib/.build-id/65/46b22b19cdfee2dfab7754d8d7ea316342151b -> ../../../../usr/lib64/perl5/auto/Compress/Raw/Zlib/Zlib.so
dangling: /usr/lib/.build-id/73/60dbe43c8b6c4a666a3bd0dc75e16a679bb784 -> ../../../../usr/lib64/libncurses++.so.6.1
dangling: /usr/lib/.build-id/7a/26a4df12398dbb4130f04a1c367a4dcc7d442b -> ../../../../usr/lib64/perl5/auto/Unicode/Normalize/Normalize.so
dangling: /usr/lib/.build-id/7f/fd3bbd111b6654bfd1b243704efa96ec2d4863 -> ../../../../usr/lib64/perl5/auto/Encode/EBCDIC/EBCDIC.so
dangling: /usr/lib/.build-id/83/2c8a2df088752fdcc9a9551ffce7b3176a4d49 -> ../../../../usr/lib64/perl5/auto/Compress/Raw/Bzip2/Bzip2.so
dangling: /usr/lib/.build-id/8b/65c6430553b93525c53d5cc2ba8fcf4ff3aaee -> ../../../../usr/lib64/perl5/auto/MIME/Base64/Base64.so
dangling: /usr/lib/.build-id/8d/c5a840771ecedd3469ee2f46d069a2eda43bf4 -> ../../../../usr/lib64/perl5/auto/Sys/Syslog/Syslog.so
dangling: /usr/lib/.build-id/91/5242c5632706f91d83e37781b0f9f3fea7095e -> ../../../../usr/lib64/perl5/auto/Encode/JP/JP.so
dangling: /usr/lib/.build-id/ce/88cf936cb7a769cb86fc5a6573e9eb1dd34f11 -> ../../../../usr/sbin/warnquota
dangling: /usr/lib/.build-id/cf/4163f54ccf50ecdf167458d9c191340923e397 -> ../../../../usr/lib64/dovecot/lib90_sieve_plugin.so
dangling: /usr/lib/.build-id/db/462bcd4628914e304d29efdb91c9ef4c8a429c -> ../../../../usr/libexec/dovecot/managesieve
dangling: /usr/lib/.build-id/e4/d5521acb2c6258e041ce769b598b2321b1b759 -> ../../../../usr/lib64/perl5/auto/threads/threads.so
dangling: /usr/lib/.build-id/e8/90366944201ec9b95741c6412384694bdd7512 -> ../../../../usr/lib64/perl5/auto/Data/Dumper/Dumper.so
dangling: /usr/lib/.build-id/e8/249d9630ae331b9202bae7f673e9252fa7253b -> ../../../../usr/sbin/xfs_scrub
dangling: /usr/lib/.build-id/e9/84aa80676f59c7c2509cbff7adc9c75eda481f -> ../../../../usr/lib64/perl5/auto/Encode/TW/TW.so
dangling: /usr/lib/.build-id/eb/adfc3dbd92dd3c040503abd748801b545cc86f -> ../../../../usr/lib64/perl5/auto/Time/Piece/Piece.so
dangling: /usr/lib/.build-id/f1/9dc36368503cdc9fefccc69d5746b63e47908d -> ../../../../usr/libexec/dovecot/managesieve-login
dangling: /usr/lib/.build-id/f4/39e5769bde9d9f8d4544c8f71196ad71ac5f51 -> ../../../../usr/lib64/perl5/auto/Encode/Symbol/Symbol.so
dangling: /usr/lib/.build-id/f5/78cbcea9f6912e60cdddb66910261996ad6141 -> ../../../../usr/lib64/perl5/auto/Encode/Byte/Byte.so
dangling: /usr/lib/.build-id/fc/6f59624f604d702f001f613defb4e076937073 -> ../../../../usr/lib64/perl5/auto/Encode/CN/CN.so
dangling: /usr/lib/.build-id/55/4466f3ba07d8c68e182f4664bea89edc6ca977 -> ../../../../usr/lib64/perl5/auto/Encode/KR/KR.so
dangling: /usr/lib/.build-id/9b/b76a0d6b526ae41ae293e3a380965d6dfbcddb -> ../../../../usr/lib64/perl5/auto/Encode/Encode.so
dangling: /usr/lib/.build-id/e5/9f2cc2a60b3c93cb80f676cb10c33947fff9e1 -> ../../../../usr/lib64/perl5/auto/Filter/Util/Call/Call.so
dangling: /usr/lib/.build-id/1e/0069b4c149b951f05d0a5cc7e422c776fb3e41 -> ../../../../usr/lib64/python3.7/site-packages/gi/_gi_cairo.cpython-37m-x86_64-linux-gnu.so
dangling: /usr/lib/.build-id/36/2656ff4bc2e2d6cd08cd86aa629fecfb37e313 -> ../../../../usr/lib64/perl5/auto/Devel/Peek/Peek.so
dangling: /usr/lib/.build-id/f2/166998840d21e70379abff23a98988717afc3a -> ../../../../usr/lib64/perl5/auto/Digest/SHA/SHA.so
dangling: /usr/lib/.build-id/0d/af1e73e410de195ea920b2384fc69d410ec087 -> ../../../../usr/lib64/perl5/auto/List/Util/Util.so
dangling: /usr/lib/.build-id/d3/46ece08a996170f1e5033ba95d18e2254f54ed -> ../../../../usr/lib64/perl5/auto/Socket/Socket.so
dangling: /usr/lib/.build-id/69/74f3ebcf11fa8d9a19ee54eb50af14be2f42dc -> ../../../../usr/lib64/dovecot/doveadm/lib10_doveadm_sieve_plugin.so
dangling: /usr/lib/.build-id/69/9bacf31170b09a56bb033ede6581984d33c0f7 -> ../../../../usr/lib64/perl5/auto/Time/HiRes/HiRes.so
dangling: /usr/lib/.build-id/96/26d1666cace24a81ee5a77fe9e579258ac342e -> ../../../../usr/lib64/libncurses++w.so.6.1
dangling: /usr/lib/.build-id/5c/c6279fd36f22e35b83b0ac73356dc1a4d76df1 -> ../../../../usr/lib64/perl5/auto/Encode/Unicode/Unicode.so
dangling: /usr/lib/.build-id/9c/ff1249bda228d9278c9c347d0cab4437056810 -> ../../../../usr/lib64/perl5/auto/IPC/SysV/SysV.so
dangling: /usr/lib/.build-id/5e/213a5bf6193f8184edda1f6278c30a9acaf694 -> ../../../../usr/lib64/perl5/auto/Math/BigInt/FastCalc/FastCalc.so
dangling: /usr/lib/.build-id/53/f0c8286103cbd403235e800f53d4b023671916 -> ../../../../usr/lib64/dovecot/lib95_imap_sieve_plugin.so
dangling: /usr/lib/modules/5.3.11-300.fc31.x86_64/build -> /usr/src/kernels/5.3.11-300.fc31.x86_64
dangling: /usr/lib/modules/5.3.11-300.fc31.x86_64/source -> build
dangling: /usr/lib/lsb/install_initd -> ../../../sbin/chkconfig
dangling: /usr/lib/lsb/remove_initd -> ../../../sbin/chkconfig
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libasan.a -> ../../../i686-redhat-linux/9/libasan.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libatomic.a -> ../../../i686-redhat-linux/9/libatomic.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libgomp.so -> ../../../../libgomp.so.1.0.0
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libitm.a -> ../../../i686-redhat-linux/9/libitm.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libquadmath.a -> ../../../i686-redhat-linux/9/libquadmath.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libubsan.a -> ../../../i686-redhat-linux/9/libubsan.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++.a -> ../../../i686-redhat-linux/9/libstdc++.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++.so -> ../../../../libstdc++.so.6.0.27
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++fs.a -> ../../../i686-redhat-linux/9/libstdc++fs.a
dangling: /usr/lib/gcc/x86_64-redhat-linux/9/32/libsupc++.a -> ../../../i686-redhat-linux/9/libsupc++.a
dangling: /usr/share/doc/hunspell/README -> README.md
dangling: /usr/share/man/man7/gnupg2.7.gz -> gnupg.7.gz
dangling: /usr/share/man/man1/ex.1.gz -> vim.1.gz
dangling: /usr/share/man/man1/rview.1.gz -> vim.1.gz
dangling: /usr/share/man/man1/view.1.gz -> vim.1.gz
dangling: /usr/share/cockpit/branding/debian/favicon.ico -> /usr/share/pixmaps/debian-logo.png
dangling: /usr/share/cockpit/branding/debian/logo.png -> /usr/share/pixmaps/debian-logo.png
dangling: /usr/share/cockpit/branding/ubuntu/logo.png -> /usr/share/plymouth/ubuntu-logo.png
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.