跳转到内容

ls

ls(list)用于列出目录内容,是确认文件在不在、权限对不对、什么时候改过的第一手工具。默认只输出文件名,要看详细属性得加 -l。

Terminal window
ls [选项] [文件/目录...]

不指定路径时列出当前目录 参数是目录则列出目录里的内容,是文件则只列出该文件本身 默认不显示以 . 开头的隐藏文件,按文件名字典序排列

选项 说明
-l 长格式(long),一行一个文件,显示权限、链接数、属主、大小、时间
-a 显示全部(all),包括隐藏文件以及 . 和 ..
-A 同 -a,但不显示 . 和 ..(almost all)
-h 大小转成 K/M/G(human-readable),只在配合 -l 时有意义
-t 按修改时间排序(time),最新的在前
-S 按文件大小排序(size),最大的在前
-r 反转排序结果(reverse)
-R 递归列出子目录(recursive)
-i 显示 inode 编号(inode)
-d 只列出目录本身,不进去列内容(directory)
-F 文件名后加类型标识:/ 目录、@ 软链接、* 可执行文件
-1 一行一个文件名,不带其他信息,适合喂给管道
--color=auto 按类型着色,多数发行版已经用别名默认开启

1. 查看详细属性

Terminal window
ls -lh

输出:

total 12K
drwxr-xr-x 2 bdathe bdathe 4.0K Sep 9 21:30 build
-rw-r--r-- 1 bdathe bdathe 220 Sep 8 10:02 note.md
lrwxrwxrwx 1 bdathe bdathe 7 Sep 9 21:31 link -> note.md

每行从左到右:

字段 含义
drwxr-xr-x 首字符是类型(- 普通文件、d 目录、l 软链接),后 9 位是属主/属组/其他人的读写执行权限
2 硬链接数,目录的这个数等于「子目录数 + 2」
bdathe bdathe 属主、属组
4.0K 字节大小,目录显示的是目录项本身占的空间,不是里面内容的总和
Sep 9 21:30 最后修改时间

首行的 total 是这些文件占用的磁盘块总数,不是文件大小之和

2. 找最近改动过的文件

Terminal window
ls -lt # 最新的排在最上面
ls -ltr # 再反转一次,最新的排在最下面

文件多到需要翻屏时用 -ltr,最新的那批直接停在屏幕底部,不用往回滚

3. 只看目录本身

Terminal window
ls -l /etc # 列出 /etc 里面的内容
ls -ld /etc # 只列出 /etc 这一个目录项

-d 常和通配符搭配:ls -d */ 只列出当前目录下的子目录

4. 用 inode 判断是不是硬链接

Terminal window
ls -li file.txt link_hard.txt

输出:

50231 -rw-r--r-- 2 bdathe bdathe 12 Aug 5 13:44 file.txt
50231 -rw-r--r-- 2 bdathe bdathe 12 Aug 5 13:44 link_hard.txt

inode 相同说明是同一份数据的两个名字,详见 ln

5. 输出交给管道

Terminal window
ls -1 *.log | wc -l

ls 直接输出到终端时会分列、着色,接管道时这些会自动关掉,但列序仍不可靠,-1 保证一行一个 文件名可能含空格甚至换行,真要逐个处理还是用 find -print0 配 xargs -0 更稳