আপনি যখন এলএস চালান তখন এই ফাইলটি কেন লুকানো থাকে?


10

সম্পাদনা: আমি এই থ্রেডটি সম্পর্কে পুরোপুরি ভুলে গেছি। দেখা যাচ্ছে আমার একটি খারাপ হার্ড ডিস্ক ছিল। আমাদের অন্যান্য সার্ভারগুলির জন্য এই সার্ভারটি পুনরায় চালিত করতে হয়েছিল তাই অবশেষে আমি একটি খারাপ ডিস্ক প্রতিস্থাপন করতে পারি এবং আমরা আবার ব্যবসায়ে ফিরে আসি।

কয়েক সপ্তাহ ধরে আমি বুঝতে পারি না কেন আমি কেন এই একটি নির্দিষ্ট ফাইল মুছতে পারছি না। রুট হিসাবে আমি পারি, তবে আমার শেল স্ক্রিপ্টটি ভিন্ন ব্যবহারকারী হিসাবে চলে। সুতরাং আমি চালাচ্ছি ls -la এবং এটি সেখানে নেই। যাইহোক, আমি যদি এটি প্যারামিটার হিসাবে বলি তবে এটি প্রদর্শিত হবে! নিশ্চিতভাবেই, মালিক মূল, তাই আমি মুছতে সক্ষম নই।

নোটিশ, 6535 অনুপস্থিত ...

[root@server]# ls -la 653*
-rw-rw-r--  1 svn svn  24002 Mar 26 01:00 653
-rw-rw-r--  1 svn svn   7114 Mar 26 01:01 6530
-rw-rw-r--  1 svn svn   8653 Mar 26 01:01 6531
-rw-rw-r--  1 svn svn   6836 Mar 26 01:01 6532
-rw-rw-r--  1 svn svn   3308 Mar 26 01:01 6533
-rw-rw-r--  1 svn svn   3918 Mar 26 01:01 6534
-rw-rw-r--  1 svn svn   3237 Mar 26 01:01 6536
-rw-rw-r--  1 svn svn   3195 Mar 26 01:01 6537
-rw-rw-r--  1 svn svn  27725 Mar 26 01:01 6538
-rw-rw-r--  1 svn svn 263473 Mar 26 01:01 6539

আপনি সরাসরি এটি কল করলে এখন এটি প্রদর্শিত হবে।

[root@server]# ls -la 6535
-rw-rw-r--  1 root root 3486 Mar 26 01:01 6535

এখানে আকর্ষণীয় কিছু। সুতরাং আমি এই সমস্যাটি ধরলাম কারণ আমার শেল স্ক্রিপ্টে এটি মুছতে ব্যর্থ হবে কারণ 6535 মূলের মালিকানাধীন। আমি "rm -rf" চালানোর পরে ফাইলটি আসলে প্রদর্শিত হয় shows আমি এটি আগে চেষ্টা করেছি এবং এটি ডিরেক্টরিটি সরাতে ব্যর্থ হয়েছে কারণ এটি আমাকে বলেছিল যে ডিরেক্টরিটি খালি নেই। আমি ভিতরে গিয়ে দেখলাম এবং যথেষ্ট নিশ্চিত, ফাইলটি "6535" শেষ পর্যন্ত দেখাবে। কেন এটি করছে তা ধারণা নেই।

strace নিম্নলিখিত বলে

#strace ls -la 653* 2>&1 | grep ^open

open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/tls/librt.so.1", O_RDONLY) = 3
open("/lib64/libacl.so.1", O_RDONLY)    = 3
open("/lib64/libselinux.so.1", O_RDONLY) = 3
open("/lib64/tls/libc.so.6", O_RDONLY)  = 3
open("/lib64/tls/libpthread.so.0", O_RDONLY) = 3
open("/lib64/libattr.so.1", O_RDONLY)   = 3
open("/etc/selinux/config", O_RDONLY)   = 3
open("/proc/mounts", O_RDONLY)          = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/proc/filesystems", O_RDONLY)     = 3
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/share/locale/en_US.UTF-8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/nsswitch.conf", O_RDONLY)    = 3
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libnss_files.so.2", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY)           = 3
open("/etc/group", O_RDONLY)            = 3
open("/etc/mtab", O_RDONLY)             = 3
open("/proc/meminfo", O_RDONLY)         = 3
open("/etc/localtime", O_RDONLY)        = 3

2
যদি আপনি এটি বুঝতে পারেন তবে একটি আপডেট পোস্ট করুন।
আইনস্টিয়ান

মজাদার. এলএস -ab এর সাথে কি রিপোর্ট করা হয়? হয়তো কিছু অদ্ভুত অষ্টাল অক্ষর ফাইলের নাম? আমি ভাবব -এ যাইহোক এটি তালিকাবদ্ধ করবে তবে আমি নিশ্চিত নই।
উদ্বোধন

1
আপনি কি সম্প্রতি একটি fsck চালিয়েছেন? দূরবর্তী অবস্থান থেকে ফাইল সিস্টেমে কিছু ভেঙে ফেলা সম্ভব।
জোরডাচে

আমাকে আবার পরীক্ষা করতে হবে আগামীকাল, দিনের জন্য রেখে।
ভাগ্যটাইক্সি

উত্তর:


7

এটি কিছুটা উদ্বেগজনক। আমি যাচাই করতাম যে lsকোনও ভাল ভাল ফাইলের সাথে তুলনা করে আপনার ফাইলটি সংশোধিত হয়নি। বিচ্ছিন্ন সিস্টেমে ফাইলটি যাচাই করতে আপনি আপনার বিতরণের প্যাকেজ সরঞ্জামগুলি ব্যবহার করতে পারেন।


+1: ls -al সব কিছু দেখাতে হবে। এটি না হলে কোথাও সমস্যা আছে is
স্যাটোনিকপ্পি

2
এটি সম্ভবত সম্ভব lsএকটি নির্দিষ্ট পিআইডি লুকানোর জন্য সংশোধন করা হয়েছে, সম্ভবত 6535.
মাইকিবি

নাহ ... কিছুই নেই ...
ভাগ্যটাইম্সি

6

কখনও কখনও ফাইলের নামগুলি তাদের মধ্যে বিজোড় অক্ষর যেমন কার্সার আন্দোলনের ক্রমগুলি করে। এটি নিশ্চিত করার জন্য এটি চেষ্টা করুন:

ls -lq

এটি নিয়ন্ত্রণের অক্ষরের পরিবর্তে প্রশ্ন চিহ্নগুলি দেখানো উচিত (এটি সম্ভবত ডিফল্ট, তবে এটি নাও হতে পারে)।

এটি আংশিকভাবে উপস্থিত ধরণের সমস্যার ধরণটি প্রদর্শন করে:

touch A C
touch B$(tput cuu1)$'\r'
ls -l
ls -lq
ls -l --show-control-chars    # for systems that have that option and default to -q

আমি চেষ্টা করব:

type -a ls
alias ls
declare -f ls
md5sum /bin/ls    # compare to a known-good identical system

কোনও উপনাম বা ফাংশন সংজ্ঞায়িত হয়েছে কিনা তা দেখতে বা বাইনারি কোনও বিজোড় জায়গায় রয়েছে বা সংশোধন করা হয়েছে তা দেখতে।


1
+1 ভাল অন্তর্দৃষ্টি। এটি লক্ষণীয় গুরুত্বপূর্ণ যে যদি lsসংশোধন করা md5sumহয় তবে সিস্টেমে থাকা সম্ভাব্য দিক থেকেও সংশোধন করা যেতে পারে। একটি নির্দিষ্ট সিদ্ধান্তে পৌঁছানোর জন্য আপনার যাচাই করার জন্য একটি জ্ঞানযুক্ত পরিবেশ দরকার।
ওয়ার্নার

আমি খুঁজে পেয়েছি যে 'এমডি 5 ফাইল' এর মতো কিছু করা সত্ত্বেও এমডি 5 বগাস ফলাফল তৈরি করতে পরিবর্তন করা হলেও আপনি এখনও bzip2 <ফাইলের মতো কিছু করে ভাল ফলাফল (যদি এমডি 5 প্রোগ্রামটি কিছুতেই কাজ করে) পেতে পারেন MD5 এবং তুলনা যে অন্যত্র একই কমান্ড।
ক্রিস


2

আমি বিশ্বাস করি যদি 'ls' সংশোধন করা হয় তবে আমি সাধারণত এরকম কিছু করি ...

python -c "import os; print os.listdir('.')"

অবশ্যই Python- র, সি পাঠাগার, কার্নেল, অথবা ফাইল সিস্টেম পারে এছাড়াও পরিবর্তন করা, কিন্তু সাধারণত এটি শুধু শেল utils আছে।


2
অথবা, ডিরেক্টরিটি পড়ার জন্য আপনি শেলের ফাইলের নামটি ব্যবহার করতে পারেন - ইকো * (এবং যদি আপনি সব কিছু চান, তবে ইকো *। *)
ক্রিস ২

*.*কেবলমাত্র আপনাকে সেই ফাইলগুলি দেখাতে যা অক্ষর (অক্ষর) এর পরে একটি বিন্দু অনুসরণ করে অক্ষর (গুলি) করে। এটি অবশ্যই * নিক্স সিস্টেমে সমস্ত কিছু নয়। আমি নিশ্চিত নই যে প্রতিধ্বনি আপনাকে সমস্ত কমান্ডে প্রদর্শন করবে, আমি এটি করতে echo * && echo .*
পেরেছিলাম

4
আপনি যদি ঘনিষ্ঠভাবে তাকান তবে এটি * (স্পেস)। *, নয় * * * বিরামচিহ্ন এই মন্তব্য পদ্ধতির শক্তিশালী মামলা নয় ... এবং, "$ আইএফএস" দ্বারা বিভক্ত হিসাবে অনেকগুলি এক্সপ্রেশন বিস্তৃত হতে প্রতিধ্বনি পুরোপুরি খুশি e আপনি এটি খাওয়ানোর যত্ন। বুলিয়ান এবং& প্রয়োজনীয় নয়, বা সত্যই এমনকি অনেক বেশি অর্থও বোধ করা যায়, কারণ && একটি বুলিয়ান এবং সর্বদা কাজ করবে কারণ প্রতিধ্বনি কমান্ড সর্বদা সফল।
ক্রিস

@ ক্রিস: আমার খারাপ, এটি দেখতে সত্যিই শক্ত।
আইনস্টিয়ান

2

স্ট্রেস ব্যবহার করে এলএস কী করছে তা আপনি খতিয়ে দেখতে পারেন এবং এটি আপনাকে এই ফাইলটির নাম প্রদর্শন করা কেন এড়িয়ে চলেছে তা বলে দিতে পারে।

strace ls -la 653* 2>&1 | less

এটির মাধ্যমে এটি দেখুন এবং দেখুন কি চলছে।

strace ls -la 653* 2>&1 | grep ^open

আউটপুটটি দেখতে এইরকম হবে:

open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/librt.so.1", O_RDONLY)       = 3
open("/lib/libacl.so.1", O_RDONLY)      = 3
open("/lib/libselinux.so.1", O_RDONLY)  = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/lib/libpthread.so.0", O_RDONLY)  = 3
open("/lib/libattr.so.1", O_RDONLY)     = 3
open("/lib/libdl.so.2", O_RDONLY)       = 3
open("/lib/libsepol.so.1", O_RDONLY)    = 3
open("/etc/selinux/config", O_RDONLY|O_LARGEFILE) = 3
open("/proc/mounts", O_RDONLY|O_LARGEFILE) = 3
open("/selinux/mls", O_RDONLY|O_LARGEFILE) = 3

এবং যদি আপনি কিছু দেখতে পান

open("/var/tmp/.../H@ckl1st", O_RDONLY) = 3

সাবধানতা অবলম্বন করো

এটি চূড়ান্ত পরীক্ষা নয়, তবে এটি একটি ভাল সূচক ...

(আপনি যদি সোলারিস বা অন্যান্য ওএস ব্যবহার করছেন তবে আপনার স্ট্রসের পরিবর্তে ট্রস বা অন্য কিছু অনুরূপ ইউটিলিটি ব্যবহার করতে হবে)

(আপনি যদি সিএসএস / টিসিএস ডেরিভেট শেল ব্যবহার করেন তবে আপনার সম্ভবত বিভিন্ন পুনঃনির্দেশ বিবৃতি প্রয়োজন)


আমি এই পছন্দ। straceউপযোগ সত্যিই একটি সুইস আর্মি নাইফ হয়। আপনি সিস্টেম কল স্তরে ডান পেতে এবং স্বেচ্ছাসেবী জটিলতার পুরো গাদা বাইপাস করুন। এটি কোনও সিস্টেম প্রশাসক প্রথম জিনিসগুলির মধ্যে একটি। একটি ডাইম মূল্য একটি নতুন ইনস্টল মেশিনে ডাম্প করা উচিত।
ম্যাকজেফ

হ্যাঁ - সিস্টেম অ্যাডমিনিস্ট্রেটারের জন্য সবচেয়ে মূল্যবান দুটি সরঞ্জাম হ'ল ট্রাস / স্ট্রেস এবং tcpdump। এগুলির সাহায্যে আপনি সর্বদা প্রচ্ছদের নীচে দেখতে পারেন যে কখন ডাব্লুটিএইচএফ চলছে যখন আপনি যেভাবে প্রত্যাশা করছেন সেভাবে আচরণ করছে না বা করছে না।
ক্রিস

2

দ্রুত আপডেট, অন্যান্য কারণে আমাদের সার্ভারটি প্রতিস্থাপন করতে হয়েছিল। এটি ফাইল সিস্টেম ছিল। এখন সব ঠিক আছে !!! সবাইকে ধন্যবাদ.


আপনি বলতে চাচ্ছেন যে ফাইল সিস্টেমটি খারাপ হয়ে গেছে এবং এটি কেবল একটি উদ্ভট লক্ষণ?
ক্রিস

হ্যাঁ এটা ছিল।
ভাগ্যটাইক্সি

নীচের তালিকার একটি সমাধান আছে বলে আপনি সম্ভবত সম্পাদনায় আটকে থাকতে পারেন, যেহেতু এটি অন্যান্য আপভোটেড (এবং সমস্যা সমাধানের জন্য দরকারী) উত্তরগুলির নীচে সমাহিত হয়েছে।
বার্ট সিলভারস্ট্রিম

0

হ্যাক তত্ত্বটি আকর্ষণীয় তবে আমার কাছে বিকল্প তত্ত্ব রয়েছে। ইউনিক্স ফাইল মোছার শব্দার্থতন্ত্র যতক্ষণ না সমস্ত প্রসেসে খোলা ফাইল হ্যান্ডেলগুলি নির্দেশ করে এটি বন্ধ করে না দেওয়া পর্যন্ত ফাইলটি প্রায় থাকবে। সম্ভবত কেউ একটি এসভিএন চেকআউট / প্রতিশ্রুতি, বা একটি সার্ভার থ্রেড স্থগিত করেছে। যদি এসভিএন প্রক্রিয়াটি পুনরায় চালু করা (বা অ্যাপাচি) আপনার সমস্যার সমাধান করে তবে আমি এখানে দোষ রেখেছি।

সম্ভবত আপনি এখনও এই ফাইলটি ব্যবহার করে প্রক্রিয়াটি সনাক্ত করতে পারবেন lsof | grep 6535?


হ্যাঁ, কিছুই দেখায় নি। মজার বিষয় হ'ল, 6535 উত্সটিতেও "নিখোঁজ"। আমার স্ক্রিপ্ট অন্য ডিরেক্টরিতে মূল রেপোর হটকপি করে। আমি যখন কোনও কারণে এই বিশেষ ফাইলটি মুছতে সক্ষম না হওয়ায় সমস্যাগুলির মধ্যে চলে এসেছি That's
ভাগ্যটাইক্সি

একটি মুছে দেওয়া কিন্তু খোলা ফাইল ধারণকারী ডিরেক্টরির মোছার থেকে দূরে রাখার করবে না কেননা একবার ডিরেক্টরিটি এন্ট্রি মোছা হয় তখন ডিরেক্টরির এন্ট্রি থাকবে না তাই ডিরেক্টরির হবে খালি হতে। প্রক্রিয়াটি খোলার আগে না হওয়া পর্যন্ত আপনি ফাইলটি থেকে আর জায়গাটি পাবেন না, তবে সেই ফাইলটি যে ডিরেক্টরিটি ছিল সেই ফাইলটি এখন মুছে ফেলা যাবে।
ক্রিস

আপনার বিকল্প তত্ত্বটি আকর্ষণীয়। অপসারণ, যদি সফল হয় তবে তাৎক্ষণিকভাবে হার্ড লিঙ্কটি সরিয়ে ফেলবে। ইনোডটিতে সম্ভবত এখনও ডেটা থাকবে এবং কিছু ফাইল হ্যান্ডলগুলি মেমরিতে ক্যাশে থাকতে পারে তবে আমি বিশ্বাস করি না যে এই দৃশ্যটি বর্ণিত আচরণটি ব্যাখ্যা করতে পারে। বা, ক্রিস কী বলেছিল, হি।
ওয়ার্নার ২
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.