"Ls" কমান্ডটি কাজ না করে কী ব্যবহার করবেন?


15

আমি lsকমান্ডটি ব্যবহার করার চেষ্টা করেছি এবং একটি ত্রুটি পেয়েছি:

bash: /bin/ls: cannot execute binary file

এই আদেশের পরিবর্তে আমি কী ব্যবহার করতে পারি?


সম্ভবত আপনি আপনার libc*soবা আপনারld-linux*so
বেসাইল স্টারিনকিভিচ

31
ব্যক্তিগতভাবে, আমি আমার সিস্টেমটি ঠিক করার দিকে মনোনিবেশ করব, যদি না এটি কিছু উদ্বেগের চিন্তার পরীক্ষা না করে is
ফাহিম মিঠা

2
এটা কথা শুনিনি @BasileStarynkevitch কিন্তু busybox সাধারণভাবে পাওয়া যায় এবং পা পারবেন না।
muru

8
... একটি সিস্টেম উদ্ধার সিডি?
ফেডেরিকো পোলোনি

1
এই জাতীয় ক্ষেত্রে আসল সমস্যাটির সমাধান করার জন্য একটি প্রশ্ন হ'ল সুপারউজার . com/উকশনস / ৪৪৩৯৯৮ । আর এ পর্যন্ত বিরল হচ্ছে, যেমন উহ্য থেকে sashপাওয়া যায় উবুন্টু লিনাক্স হিসাবে, শাঁস / উত্তরীয় FreeBSD 'র পোর্ট গাছে, যেমন একটি জেন্টু প্যাকেজ , সেইসাথে সহ অন্যান্য স্থানে সংশ্লিষ্ট লেখক থেকে সরাসরি
জেডিবিপি

উত্তর:


32

আপনি এর পরিবর্তে echoবা findআদেশগুলি ব্যবহার করতে পারেন ls:

echo *

বা:

find -printf "%M\t%u\t%g\t%p\n"

7
আমি ব্যবহার করবecho -- *
এডওয়ার্ড টরভাল্ডস

9
@ ইনভোকার: আপনার যদি -nবর্তমান ডিরেক্টরিটিতে কোনও ফাইল ডেকে আনা হয়, তবে এটি পতাকা হিসাবে ব্যাখ্যা করা হবে, প্রতিধ্বনিত হওয়ার মতো কিছু নয়।
এমভিজি


1
@ ইনভোকার বর্ণানুক্রমিক আদেশের বিষয়টি বিবেচনা করে। এমন কোনও মামলার জন্য সেই অনেলিয়ারটি চালান যেখানে rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
এটির তারতম্য ঘটে

3
echoমনে হয় না --, প্রতি সে । তাহলে কীভাবে echo -- *আরও ভাল echo "" *বা এখনও আরও ভাল echo "The file(s) are:" *,?
জি-ম্যান 'মনসাকে পুনরায় ইনস্টল করুন'

24

আপনি printfপ্রতিধ্বনি পরিবর্তে কমান্ডটি ব্যবহার করতে পারেন :

printf '%s\n' *

printfechoএই পরিস্থিতিতে তার চেয়ে উচ্চতর যে এতে "ডাবল ড্যাশ" ( ) সম্মান echoকরে না-- আর্গুমেন্ট তালিকার শেষটি বোঝাতে (কিছু সিস্টেমে উবুন্টু 14.04 সহ যা আমি এটিতে পরীক্ষা করেছি):

llama@llama:~$ mkdir -p Misc/unix210948
llama@llama:~$ cd !$
cd Misc/unix210948
llama@llama:~/Misc/unix210948$ touch -- -n
llama@llama:~/Misc/unix210948$ ls
-n
llama@llama:~/Misc/unix210948$ echo *
llama@llama:~/Misc/unix210948$ echo -- *
-- -n
llama@llama:~/Misc/unix210948$ printf '%s\n' *
-n

এই ক্ষেত্রে, আপনি পছন্দসই ফলাফল অর্জন করতে পারবেন না echo(যেহেতু একটি ফাইল -nহিসাবে পরিচিত হিসাবে বিকল্প হিসাবে ব্যাখ্যা করা হয়, এবং ডাবল ড্যাশ কাজ করে না, তাই আপনাকে অবশ্যই ব্যবহার করতে হবে printf)।

মনে রাখবেন যে অজানা তথ্য নিয়ে ডিল করার সময় আপনার উপরের মতো ফর্ম্যাট স্ট্রিংটি সর্বদা ব্যবহার করা উচিত printf, অন্যথায় আপনি অপ্রত্যাশিত ফলাফল পেতে পারেন (মন্তব্যগুলিতে এটি নির্দেশ করার জন্য @ জি-ম্যানকে ধন্যবাদ!):

llama@llama:~/Misc/unix210948$ rm ./-n
llama@llama:~/Misc/unix210948$ touch '\n'
llama@llama:~/Misc/unix210948$ ls
\n
llama@llama:~/Misc/unix210948$ printf -- *

llama@llama:~/Misc/unix210948$ printf '%s\n' *
\n

নামক একটি ফাইল \nদ্বারা একটি নতুন লাইন হিসাবে ব্যাখ্যা করা হয় printf। এটি এড়াতে, আমরা printf( %s) এর জন্য একটি ফর্ম্যাটিং স্ট্রিং ব্যবহার করি এবং এটি ফাইলের নাম (পূর্বের মতো গ্লোব্বিংয়ের মাধ্যমে প্রসারিত) পাস করি।

এই printf+ বিন্যাসের স্ট্রিং সমাধানটি বিভিন্ন ধরণের ফাইলের নামগুলি হ্যান্ডেল করতে পারে (এবং "লুকানো" ফাইলগুলিও বোঝায়, যেগুলি এর সাথে শুরু হয় ., একইভাবে ls):

llama@llama:~/Misc/unix210948$ rm ./*
zsh: sure you want to delete all the files in /home/llama/Misc/unix210948/. [yn]? y
llama@llama:~/Misc/unix210948$ touch -- '-n' '\n' 'name with spaces' '.hidden'
llama@llama:~/Misc/unix210948$ ls
-n  \n  name with spaces
llama@llama:~/Misc/unix210948$ printf '%s\n' *
-n
\n
name with spaces

যদি আপনার printfসমর্থন করে তবে %qআপনি এটি ( printf '%q\n' *) ব্যবহার করতে পারেন । আপনার ফাইলের নামগুলিতে যদি কোনও অদ্ভুত অক্ষর থাকে তবে এটি স্পেসস, নিউলাইনস ইত্যাদির হাত থেকে রক্ষা পাবে। (এটি নির্দেশ করার জন্য আড্ডায় এমুরুকে ধন্যবাদ !)


2
অজানা ডেটা নিয়ে কাজ করার সময়, আপনার সর্বদা ব্যবহার করা উচিত '%s'( \nএবং / অথবা অন্য কোনও ধ্রুবক পাঠ্য সহ আপনি চান)। উদাহরণস্বরূপ, কমান্ড ব্যবহার করে দেখুন touch '%.0s' foo bar; ls; printf -- *। বিপরীতভাবে, আপনার --যখন '%s\n'বিন্যাসের স্ট্রিং থাকে তখন কেন আপনার প্রয়োজন তা আমি দেখতে পাই না ।
জি-ম্যান

@ জি-ম্যান গুড পয়েন্ট! ধন্যবাদ, আমি --বিন্যাসের স্ট্রিংয়ের সাথে অযৌক্তিকতা উপেক্ষা করেছি এবং অন্য জিনিসটির সমাধান করার জন্য আমি আমার পোস্ট সম্পাদনা করেছি।
ডুরকনব

-nফাইলের নাম সত্যই করা উচিত নয় একটি POSIX-2001 + + জন্য এ সব একটি সমস্যা হতে echoSUSv3 সিস্টেমে - echoইউটিলিটি প্রয়োজনীয় সবটা কোনো বিকল্প মেনে নিতে না। bashএর echoবিকল্প এবং অন্যান্য কিছু হ্যান্ডেল করেন তবে এটি সমস্ত সময় সঠিকভাবে আচরণ করার জন্য bashবিল্ড বিকল্পের সাথে সংকলন করা যায় --enable-xpg-echo-default। যদিও এর জন্য সঠিক আচরণ echoমানে সর্বদা ব্যাকল্যাশকে ব্যাখ্যা করার সাথে এর যুক্তিগুলিতে পালিয়ে যায়। সুতরাং সি-স্টাইলের সাথে থাকা কোনও ফাইলের নাম আউটপুট ডাব্লু / বিশ্বস্ততায় লেখা হবে না - echoএটি অনুবাদ করবে।
মাইকজারভেজ

2
অনুগ্রহ করে, দয়া করে প্রত্যেককে '-' পুনর্নির্দেশ বন্ধ করা উচিত যখন 10 বছরেরও বেশি সময় থেকে ইউনিক্স ফ্যাক্স ব্যাখ্যা করে যে "./" ব্যবহার করা ভাল এবং বেশি বহনযোগ্য (সমস্ত প্রোগ্রাম এমনকি এমন অনেকগুলি সাথে কাজ করে যা হ্যান্ডেল দেয় না) - ')
অলিভিয়ার ডুলাক

1
@ অলিভারডুলাক - এমনকি এটি হেল না [ডাব্লু / কনভার্টেন্ট) echo
মাইকজার্ভ

8

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

আমার মেশিনে:

uname -m; file /bin/ls

... কপি করে প্রিন্ট ...

x86_64
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=..., stripped

... কারণ সেখানে বিশ্বের সাথে ঠিক আছে। তবে, sshআমার ডেস্কটপের সংযোগে আমার অ্যান্ড্রয়েড ট্যাবলেট থেকে কিছু কমান্ড চালানো এখানে ...

#first copy android ls to desktop
scp /system/bin/ls "$ssh:arm_ls"

ls               100%  151KB 151.4KB/s   00:00

#next login to desktop and run the following
ssh "$ssh" '
   HOME=./arm_ls
   chmod +x ~
   file ~
   bash -c ~ ||
   rm ~
'

./arm_ls: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, stripped
bash: ./arm_ls: cannot execute binary file: Exec format error

এটি একটি দুর্দান্ত উত্তর যা একটি দৃশ্যের অন্তর্ভুক্ত এবং সম্ভাব্য অন্তর্নিহিত কারণকে সম্বোধন করে।
প্রণব

দু: খিত - দুঃখিত। কেন শুধু ফাইল অনুলিপি এবং ব্যবহার না? পুরো বাড়ির জিনিস কেন? ডেস্কটপে স্ক্যাপ করুন, এতে ফাইল করুন এবং বাশ করুন। /?
অলিভিয়ার ডুলাক

@ অলিভিয়ারডুলাক-হুম .. আমি নিশ্চিত নই যে আপনি ঠিক কী জিজ্ঞাসা করছেন তা আমি প্রকাশ করব। HOME=জিনিস তাই আমি ঠিক কি করতে পারেন ~পরিবর্তে সময়ের একটি গুচ্ছ ./arm_ls সুবিধার জন্য -। অনুশীলনের পুরো বিষয়টিটি হ'ল আমি আমার x86 ডেস্কটপে আর্ম বাইনারিটি ব্যবহার করতে পারি না, এবং আমি fileসিডটেমের নেটিভের চেয়ে খুব আলাদা একটি বাইনারি - এটি শীর্ষে দেখানো হয়েছে তা দেখাতে চেয়েছিলাম wanted এবং তাই পুরো ক্রস-সংকলনটি shpw না করে, আমি সিপিপি বেছে নিয়েছিলাম একটি বেমানান বাইনারি আমি আমার হাতের উপরে আমার এক্স 86 ডিভাইসে পেয়েছিলাম এবং ফলাফলগুলি দেখিয়েছি এবং কীভাবে bashত্রুটিটি উত্থিত করা যায় ।
মাইকজার্ভ

1
ওহ, এটি কয়েক টাইপিং সংরক্ষণ করার জন্য? ঠিক আছে, তবে আমার মনে হয় এটি হওয়া উচিতের চেয়ে বিভ্রান্তিকর করে তোলে (এটি কোডগল্ফ নয় ^^)
অলিভিয়ার ডুলাক

1
@ অলিভারডুলাক - অবশ্যই এটি কোড সোনার নয়, তবে এটি সুবিধাজনক, এটি মোটেও অস্পষ্ট নয় এবং আমি থাম্ব টাইপিংকে ঘৃণা করি।
মাইকেসার্ভ

5

ব্যাশ (বা অন্য অনেকগুলি শেল) ব্যবহার করে, আপনি ফাইলগুলি তালিকা করতে ট্যাব সমাপ্তি ব্যবহার করতে পারেন:

$ thisisnotacommand ./public_html/<TAB>
acc/              papers/           android/          l/
sdr/              blast             formalcss.html    switch/
busy/             formalcss.tar.gz  others/           together.jpg

3

আপনি যদি আরও কিছু ls -l(ফাইলের আকার, অনুমতি, মালিক, টাইমস্ট্যাম্প ইত্যাদি) চান, তবে stat -- *সহায়ক হতে পারে:

$ ls -l
total 8
-rw-rw-r-- 1 ubuntu ubuntu   4 Jun 20 21:50 a.txt
-rw-rw-r-- 1 ubuntu ubuntu 279 Jun 20 21:50 b.txt
$ stat -- *
  File: ‘a.txt’
  Size: 4           Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 787691      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  ubuntu)   Gid: ( 1000/  ubuntu)
Access: 2015-06-20 21:50:23.395223851 -0700
Modify: 2015-06-20 21:50:23.395223851 -0700
Change: 2015-06-20 21:50:23.395223851 -0700
 Birth: -
  File: ‘b.txt’
  Size: 279         Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 844130      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  ubuntu)   Gid: ( 1000/  ubuntu)
Access: 2015-06-20 21:50:31.763084155 -0700
Modify: 2015-06-20 21:50:51.066758216 -0700
Change: 2015-06-20 21:50:51.066758216 -0700
 Birth: -
$ 

বিকল্পভাবে যদি আপনি যা করতে চান তা যদি ভুল বানান হয় lsতবে তার পরিবর্তে চেষ্টা slকরুন । ;-) (এগিয়ে যান - চেষ্টা করুন ... আপনার এটি ইনস্টল করতে হতে পারে)


3

অনেক সিস্টেমে খুব অনুরূপ ইউটিলিটি উপলব্ধ:

dir

তথ্য পৃষ্ঠাগুলি অনুসারে এটি সমান ls -C -b, তবে এটি স্ট্যান্ডেলোন বাইনারি ফাইল।

ব্যবহারের সুবিধা dir(উদাহরণস্বরূপ শেল সমাপ্তি সিস্টেমের পরিবর্তে) স্ট্যান্ডার্ড lsপ্রোগ্রামের মতো বিভিন্ন ধরণের বাছাইকরণ, লুকানো ফাইলগুলি দেখানো, রঙ করা ইত্যাদি উপলভ্যতা ।

বিটিডাব্লু, আমি অনুমান করি এর নামটি উইন্ডোজ (বা বরং ডস) সিস্টেম থেকে এসেছে।


1

ব্যবহার

 echo -- *
    find . -printf "%M\t%u\t%g\t%p\n"
    ls -C -b
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.