Linux-列出文件的命令(ls除外)


27

假设您在系统上工作,并且有人不小心删除了 ls命令(/bin/ls)。您如何获得当前目录中文件的列表?试试吧。

我尝试了许多方法,并且还在Internet上进行了搜索,但一无所获。我想问ls一下命令旁边,我们可以使用什么命令列出所有文件。

Answers:


35
echo *

...将通过Bourne兼容shell上的文件遍历显示当前文件夹中的文件。

这将所有文件向下列出一级:

echo */*

在Bash中,如果设置了globstar(设置为shopt -s globstar,未设置为shopt -u globstar),则将递归列出所有文件:

echo **

10
除了家庭作业之外,echo *在实际操作中,如果您搞砸了系统,使您无法执行任何程序(例如,删除libc.sold.so),但仍具有运行中的shell ,则在实践中会很有用。
吉尔(Gilles)'所以

3
在bash4(我认为)和zsh中,您也可以使用它echo **/*来递归地执行此操作。
Reid

@Reid:要测试一下。好发现。
0xC0000022L

好人,@吉尔斯。从旧的DEC系统了解到,在某些引导条件下,旧的DEC系统无法访问/ usr或/ bin,而引导脚本本身无法使出“ cat”和“ ls”功能。
Arcege 2011年


23
find -maxdepth 1 
find -maxdepth 1 -ls

TAB TAB

发现-ls开关独立于/ bin / ls并具有自己的格式,并显示详细信息:

127432    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/falsch/.hiddenfalsch
127447    0 lrwxrwxrwx   1 stefan   stefan          9 Apr  8 22:51 ./temp/falsch/linkfalsch -> subfalsch
127427    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/.hiddenmusik

另一个显示可能性的细节是 stat

stat *
  File: `halx0o'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 102701      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2009-07-23 03:16:15.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200
  File: `ho ho ho'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 115835      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2010-07-24 14:12:48.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200

10

为了使它看起来像ls,我将使用Bash的for循环:

for i in *; do echo $i; done

如果那行不通,我会尝试使用Python ;)

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"

import glob; print '\n'.join(glob.glob('/home/*'))也会一样好。
Arcege 2011年


6
find .

尽管您可能想要输入所需的任何限制参数。


3

lsattr ./*

getfacl ./* 也会显示权限

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* 与GNU awk一起使用

debugfs /dev/sdX 将sdX替换为要在其上执行ls的任何分区,然后可以在debugfs内部执行ls

debugfs:  cd /
debugfs:  ls -l
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 .
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 ..
     11   40700 (2)      0      0   16384  5-Jul-2010 09:59 lost+found
 2392065   40755 (2)      0      0    4096  5-Jul-2010 09:59 boot
 2228225   40755 (2)      0      0    4096  5-Jul-2010 09:59 sys
 1376257   40755 (2)      0      0    4096  5-Jul-2010 09:59 proc
 4915201   40755 (2)      0      0    4096  5-Jul-2010 09:59 dev
 3473409   40755 (2)      0      0   12288 10-Apr-2011 22:05 etc
  98305  100644 (1)      0      0       0  6-Jul-2010 12:05 .autofsck
 3342337   40755 (2)      0      0    4096  5-Apr-2011 15:05 var
 3932161   41777 (2)      0      0    4096 10-Apr-2011 22:11 tmp
  ..........
debugfs:  

lynx ./

mc 假设您已安装午夜指挥官


3

echo版本类似,但是每行打印一个条目以提高可读性:

printf %s\\n ./*

要么

printf '%s\n' ./*

递归(对于bash 4+;其他shell需要设置其他选项或默认启用globstar):

shopt -s globstar
printf %s\\n ./**/*

不需要'/ *',**如果globstar设置了一个简单的目录,它将循环到所有目录。只需更改为即可printf '%s' **


1

好吧,如果我不能在emacs的shell模式下使用ls,我可能会切换到eshell模式,或者只是改掉了。


1

如果我启动了bash shell(或其他任何完成的shell),则可能只输入'*',然后按tab。

或者像我通常以X开头的那样,我也可以只做'nautilus。',但是那是对人类的。

我也可以尝试/ usr / bin / lsattr

但是在现实世界中,如果发生这种事情,我将真正要做的是:

sudo apt-get install --reinstall coreutils

1

在bash或具有相似制表符完成功能的shell中,您根本不需要使用真正的命令:wibble紧随其后的是两个选项卡将为您提供当前目录中的文件列表,而wibble /bin/紧随其后的是两个选项卡将向您显示什么/ bin的左侧。我曾经发现自己处于这种情况下(实际上,我完全杀死了/ bin以及其他东西),并开始使用echo *建议的@STATUS_ACCESS_DENIED方法,但最终发现使用制表符更方便。


0

使用的另一种方式tree,这里没有在任何地方提及,它是递归的,与find或ls不同,它没有任何错误(例如:Permission deniedNot a directory),如果要将文件提供给xargs或其他命令,您也可以获得绝对路径

tree -fai /pathYouWantToList >listOfFiles.list

选项含义:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.