ls
コマンドを使用しようとしてエラーが発生しました:
bash: /bin/ls: cannot execute binary file
このコマンドの代わりに何を使用できますか?
sash
はありません。
ls
コマンドを使用しようとしてエラーが発生しました:
bash: /bin/ls: cannot execute binary file
このコマンドの代わりに何を使用できますか?
sash
はありません。
回答:
次の代わりにecho
or find
コマンドを使用できますls
。
echo *
または:
find -printf "%M\t%u\t%g\t%p\n"
echo -- *
-n
現在のディレクトリでファイルが呼び出された場合、エコーするものではなく、フラグとして解釈されます。
touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
名誉にいないようだ--
、それ自体が。だから、どのようにecho -- *
いずれかがより良くecho "" *
、より良いまだ、またはecho "The file(s) are:" *
?
printf
echoの代わりにコマンドを使用することもできます:
printf '%s\n' *
printf
echo
この状況よりも優れているのは、引数リストの最後を示す「二重ダッシュ」()を尊重echo
しない--
ことです(一部のシステムでは、Ubuntu 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' *
)。ファイル名に奇妙な文字が含まれている場合、これはスペースや改行などをエスケープします。(チャットで@muruに感謝します!)
'%s'
(と\n
および/または必要なその他の一定のテキスト)。たとえば、コマンドを試してくださいtouch '%.0s' foo bar; ls; printf -- *
。逆に、フォーマット文字列--
があるときに必要な理由はわかりません'%s\n'
。
--
で、フォーマット文字列の不必要な部分を見落とし、他のことに対処するために投稿を編集しました。
-n
ファイル名は正直べきではない POSIX-2001 +のためのすべての問題ではecho
SUSv3のシステム上- echo
ユーティリティがされて必要な一切のオプションを受け入れません。bash
さんecho
といくつか他の人ががオプションを処理するのですが、bash
ビルドオプションを指定してコンパイルすることができ--enable-xpg-echo-default
、それは正確にすべての時間を動作させるために。ただし、の正しい動作はecho
、引数のバックラッシュエスケープを常に解釈することを意味します。そのため、Cスタイルのエスケープを含むファイル名は、忠実度のある出力に書き込まれず、echo
変換されます。
echo
。
たぶん、あなたのマシンで何が起こっているのかをより良く理解するために、おそらくユーティリティ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
、デスクトップへの接続時にAndroidタブレットから実行されるいくつかのコマンドを少し実行します...
#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デスクトップでarmバイナリを使用できないことでありfile
、sydtemのネイティブのバイナリとは非常に異なる種類のバイナリであることを示す出力が必要でした。そのため、クロスコンパイル全体をshpwするのではなく、x86デバイスのarm devで使用できる互換性のないバイナリをcpyして、結果とbash
エラーの表示方法を示しました。
bash(または他の多くのシェル)を使用して、タブ補完を使用してファイルをリストできます。
$ thisisnotacommand ./public_html/<TAB>
acc/ papers/ android/ l/
sdr/ blast formalcss.html switch/
busy/ formalcss.tar.gz others/ together.jpg
もっと似たようなもの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
。;-)(続行-試してみてください...インストールする必要があるかもしれません)
使用する
echo -- *
find . -printf "%M\t%u\t%g\t%p\n"
ls -C -b
libc*so
またはあなたを台無しにしたld-linux*so