আমি কীভাবে স্বয়ংক্রিয়ভাবে ভাঙা প্রতীকী লিঙ্কগুলিতে সন্ধান করব এবং প্রতিবেদন করব?


9

পরিপাটি সিসাদমিন হিসাবে, আমরা নিশ্চিত করতে চাই যে ছোট জিনিসগুলি ঠিক বড় জিনিসগুলির (যেমন সময় অনুমতি দেয়) হিসাবে আচ্ছাদিত। এর মধ্যে একটির বিষয়টি নিশ্চিত করা হচ্ছে যে আমাদের সিস্টেমগুলি ভাঙা প্রতীকগুলি পূর্ণ নয়।

এই ছোট্ট ব্লাইটারদের সমস্যা কেন? যেহেতু তারা আপনাকে ভাবায় যে ফাইলগুলি যখন না থাকে তখন সেখানে থাকে, এগুলি আরও বিরক্তিকর কিছু হওয়ার ইঙ্গিত হতে পারে এবং কারণ কিছু নির্দিষ্ট কমান্ড (লাইক grep -r) চালানোর সময় আমার (ছোট) ওসিডি অংশটি সেই সমস্ত সতর্কতার সাথে বাজেট পাগল হয়ে যায় ।

সুতরাং, কীভাবে একজন প্রশাসনের জন্য দায়ী এমন কোনও সিস্টেমের অংশগুলি জুড়ে ভাঙ্গা লিঙ্কগুলি সনাক্ত করতে (এবং রিপোর্টিং, ই-মেইল বা মনিটরিং সিস্টেমের মাধ্যমে) চালিয়ে যাবেন (কোনও সমস্যা নেই যা আমাকে বলছে না যে ~jbloggsভাঙা প্রতিলিপিগুলির একটি গুচ্ছ রয়েছে, এটাই তার সমস্যা )?


উত্তর:


7

সমস্যাটি -Lহ'ল অনুসন্ধানটি উপ-ডিরেক্টরিগুলিতে লক্ষ্য প্রস্থান করে symlinks, যা প্রত্যাশিত বা পছন্দসই নয় into

এর 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 দেখুন । আরো দেখুন findutils ডকুমেন্টেশন বিস্তারিত জানার জন্য। Ynform.org লিঙ্কটি শুধুমাত্র চক্রীয় লিঙ্কগুলি সনাক্ত করার জন্য একটি পদ্ধতি উপস্থাপন করে।


5

বিড়ালকে ত্বকের বিভিন্ন উপায় ways

এটি বেশ পোর্টেবল (-L হ'ল পোস্টিক্স প্রয়োজনীয়তা)

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

আপনি ভাঙ্গা সংজ্ঞায়িত করেন নি, উপরেরগুলি আপনাকে ভাঙা লিঙ্কগুলি পাঠাবে যা আপনার যত্ন নেওয়া ফাইল সিস্টেমের অংশে লক্ষ্য নেই। এটি স্টার্ডার ফাইল সিস্টেম লুপগুলি এবং প্রচুর পরিমাণে প্রতীকী লিঙ্ক ইত্যাদি সমস্যার প্রতিবেদন করে। যদি আপনি সেগুলি সম্পর্কেও যত্নশীল হন তবে আপনার মেইলে স্ট্যাডারকে পুনঃনির্দেশ করুন

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
সাম্পাব্লুকপার

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?
womble

0

জিএনইউ অনুসন্ধানের মাধ্যমে এটি করার একটি দুর্দান্ত উপায়:

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

কারণ এই কাজ করে কারণ -lnameসঙ্গে -follow(বা -L) "... এই পরীক্ষাটি আয় মিথ্যা যদি না সিম্বলিক লিঙ্ক নষ্ট হয়ে গেছে", খোঁজ man পৃষ্ঠা অনুযায়ী।

সার্ভারটি ভারী ব্যবহার না করা হলে এই ধরণের ডিস্ক স্ক্যানিং চালানো সম্ভবত বুদ্ধিমানের কাজ হবে। এই টাস্কটি চালনার সময় সার্ভারে লোড কমাতে 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.