一、语法
ls [选项] [目录或文件]
二、功能
- 对于目录,该命令列出该目录下的所有子目录与文件。
- 对于文件,将列出文件名以及其他信息。
三、常用选项
1、-a
基本用法
ls -a [文件或目录]
显示当前目录下的 所有文件和目录(包括隐藏文件)。
隐藏文件示例:
.bashrc
、.ssh/
、.profile
.
表示当前目录;..
表示上级目录,其余以.
开头的为隐藏文件/目录。
组合其他选项
(1)-a
+ -l
(显示详细信息)
作用:显示所有文件(含隐藏文件)的 详细信息(权限、所有者、大小、修改时间等)。
ls -al [文件或目录]
ls -la [文件或目录]
(2)-a
+ -h
(人类可读的文件大小)
ls -alh [文件或目录]
作用:在详细信息中,以 K
、M
、G
显示文件大小(例如 4.0K
代替 4096
)。
查看指定目录的隐藏文件
ls -a /path/to/directory
排除 .
和 ..
(仅显示隐藏文件)
ls -a | grep '^\.'
如果只想看隐藏文件(不包括 .
和 ..
),可以结合 grep
:
常用组合速查表
命令 | 作用 |
---|---|
ls -a |
显示所有文件(含隐藏文件) |
ls -al |
显示所有文件的详细信息 |
ls -alh |
显示详细信息 + 人类可读大小 |
ls -a /path |
查看指定目录的所有文件 |
ls -a | grep '^\.' |
仅显示隐藏文件(排除 . 和 .. ) |
2、-d
基本用法
ls -d 目录名
不显示目录下的文件,而是将目录 当作一个普通条目 显示。
组合其他选项
(1)-d
+ -l
+ -h
(显示目录详细信息)
ls -ldh [目录]
-h
将大小转换为易读格式(如4.0K
)。
(2)-d
+ -a
(显示隐藏目录)
ls -da [目录]
常见使用场景
(1)查看目录属性(配合 -l
)
ls -ld [目录]
显示目录的权限、所有者、大小等元数据,而非其内容。
(2)批量检查目录是否存在
ls -d [存在的目录] [不存在的目录] 2>/dev/null
不存在的目录(如 /nonexistent
)会被静默忽略(2>/dev/null
屏蔽错误)。
(3)结合通配符匹配目录
ls -d */ # 只显示当前目录下的子目录
总结
命令 | 作用 |
---|---|
ls -d 目录 |
仅显示目录本身,不展开内容 |
ls -ld 目录 |
显示目录的详细信息(权限、所有者等) |
ls -d */ |
仅列出当前目录下的子目录 |
ls -da ~/.* |
显示家目录下的所有隐藏目录 |
关键区别:
不加
-d
:ls /etc
→ 展开显示/etc
下的所有文件。加
-d
:ls -d /etc
→ 仅显示/etc
这一行。
3、-i
基本用法
ls -i [文件]
- 在文件名前显示对应的 inode 号(唯一标识文件系统的对象)。
每行的第一个数字就是 inode 号。
组合其他选项
(1)ls -ai
ls -ai [文件或目录]
作用:显示所有文件(含隐藏文件)的 inode 号
(2)ls -il
ls -il [目录或文件]
作用:显示 inode 号 + 详细信息
(3)ls -iR
ls -iR [目录]
作用:递归显示目录及其子目录的 inode 号
常见使用场景
(1)查找硬链接文件
硬链接共享相同的 inode 号,通过 -i
可以快速确认:
ls -i /path/to/file1 /path/to/file2
如果输出中两个文件的 inode 号相同,说明它们是硬链接关系。
(2)排查文件系统问题
当文件出现异常(如无法删除)时,检查 inode 号可辅助诊断:
ls -i 异常文件名
(3)结合 -l
显示详细信息
ls -il [文件]
常用组合速查表:
命令 | 作用 |
---|---|
ls -ai |
显示所有文件(含隐藏文件)的 inode 号 |
ls -il |
显示 inode 号 + 详细信息 |
ls -iR |
递归显示目录及其子目录的 inode 号 |
4、-k
基本用法
ls -k [目录或文件]
ls -lk [文件或目录]
文件大小会以 KB(千字节) 为单位显示(1 KB = 1024 字节)。
通常与
-l
(长格式)一起使用,否则文件大小默认不显示。
组合其他选项
命令 | 作用 |
---|---|
ls -lk |
显示文件大小(KB) + 详细信息 |
ls -alk |
显示所有文件(含隐藏文件)的大小(KB) |
ls -lk --block-size=1M |
以 MB 为单位显示(覆盖 -k ) |
常见使用场景
(1)快速查看文件实际占用磁盘大小
ls -lk [文件或目录]
(2)-k
和 -h
区别
选项 | 实际作用 | 示例 | 说明 |
---|---|---|---|
-k |
以 1KB 为块单位显示磁盘占用(非文件真实大小) | 4096 → 4 |
显示的是文件占用的 磁盘块数 × 块大小(默认块大小=1024字节),即使文件内容为空也可能占用 1 个块(显示为 1K )。 |
-h |
智能转换单位(B/KB/MB/GB) | 4.0K |
显示文件的 实际内容大小(更直观)。 |
5、-l
ls -l [目录或文件]
核心作用
显示文件/目录的完整属性:包括权限、所有者、大小、修改时间等。
区分文件和目录:通过首字符标识类型(如
d
表示目录,-
表示文件)。便于系统管理:快速查看权限、归属、文件大小等关键信息。
输出格式解析
执行 ls -l
后,每行输出 7 个字段,格式如下:
权限 硬链接数 所有者 所属组 大小 修改时间 名称
字段详解
字段 | 说明 | 假设示例 |
---|---|---|
权限 | 文件类型和权限(共 10 字符) | -rwxr-xr-- |
硬链接数 | 指向该文件的硬链接数量 | 1 |
所有者 | 文件所属用户 | root |
所属组 | 文件所属用户组 | root |
大小 | 文件大小(默认字节) | 1024 |
修改时间 | 最后修改日期和时间 | Apr 15 10:00 |
名称 | 文件/目录名 | file.txt |
权限字段详解(重要)
权限字段的 10 个字符 分解:
第 1 字符:文件类型
-
:普通文件d
:目录l
:符号链接b
/c
:块设备/字符设备p
/s
:管道或套接字
第 2-10 字符:权限分三组(用户/组/其他)
rwx
:用户权限(读、写、执行)r-x
:组权限r--
:其他用户权限-
表示无对应权限。
示例:
drwxr-xr-x
:目录,用户可读/写/执行,组和其他可读/执行。-rw-r-----
:文件,用户可读/写,组可读,其他无权限。
常用组合选项
命令 | 作用 |
---|---|
ls -lh |
大小以易读单位显示(KB/MB/GB) |
ls -lt |
按修改时间排序(最新优先) |
ls -lR |
递归列出子目录内容 |
ls -la |
显示所有文件(含隐藏文件) |
以ls -lt为例:
实际应用场景
(1)检查文件权限
ls -l /etc/shadow
输出:
-rw-r----- 1 root shadow 1234 Apr 10 09:00 /etc/shadow
只有
root
用户可读写,shadow
组可读。
(2)查看目录占用空间
ls -ld /var/log # 查看目录本身大小
ls -l /var/log # 查看目录内容
(3)排查权限问题
ls -l /usr/local/bin/python3
若权限为 -rwxr-xr-x
,则所有用户均可执行。
6、-n
核心作用
显示 UID/GID:将文件的所有者和所属组替换为数字标识(UID 和 GID)。
避免依赖名称解析:在用户/组名未正确解析时(如网络存储环境),直接显示数字更可靠。
输出对比示例
默认格式(ls -l
)
-rw-r--r-- 1 alice developers 1024 Apr 15 10:00 file.txt
显示用户名
alice
和组名developers
。
数字格式(ls -ln
)
-rw-r--r-- 1 1001 1002 1024 Apr 15 10:00 file.txt
显示 UID
1001
和 GID1002
(对应alice
和developers
的数字 ID)。
使用场景
(1)排查用户/组名解析问题
当 /etc/passwd
或 /etc/group
文件损坏或未加载时,-n
可避免显示空白:
ls -ln /path/to/files
(2)脚本中处理文件权限
在脚本中直接使用 UID/GID,避免依赖名称:
# 检查文件是否属于 UID 1000
if [ $(ls -n file.txt | awk '{print $3}') -eq 1000 ]; then
echo "文件属于 UID 1000"
fi
(3)调试系统权限问题
快速查看文件的真实 UID/GID:
ls -ln /etc/shadow
输出示例:
-rw-r----- 1 0 42 1234 Apr 10 09:00 /etc/shadow
0
表示root
的 UID,42
可能是shadow
组的 GID。
组合其他选项
命令 | 作用 |
---|---|
ls -ln |
显示 UID/GID + 默认长格式 |
ls -lhn |
显示 UID/GID + 易读文件大小 |
ls -n |
仅显示 UID/GID(短格式) |
7、-F
核心作用
自动标记文件类型:在文件名后追加特殊字符,表示文件类型。
无需依赖颜色:即使终端不支持彩色输出,也能快速识别类型。
标识符对照表
追加字符 | 文件类型 | 示例 | ||
---|---|---|---|---|
/ |
目录 | Documents/ |
||
* |
可执行文件 | script.sh* |
||
@ |
符号链接(快捷方式) | linkfile@ |
||
**` | `** | 管道文件(FIFO) | `mypipe | ` |
= |
套接字文件(Socket) | socket= |
||
无符号 | 普通文件 | file.txt |
使用示例
(1)基本用法
ls -F
输出示例:
Documents/ script.sh* linkfile@ file.txt
(2)组合其他选项
ls -lF # 长格式 + 类型标识
输出示例:
drwxr-xr-x 2 user group 4096 Apr 15 10:00 Documents/
-rwxr-xr-x 1 user group 102 Apr 15 09:00 script.sh*
lrwxrwxrwx 1 user group 8 Apr 15 08:00 linkfile@ -> target
实际应用场景
(1)快速识别可执行文件
ls -F /usr/bin | grep '*'
输出:
python3* pip* bash*
(2)区分目录和普通文件
ls -F ~ | grep '/$' # 仅列出目录
(3)排查符号链接失效
ls -F | grep '@' # 列出所有符号链接
ls -lF broken_link@ # 查看链接指向(若显示红色或 `@ -> ?` 表示失效)
组合命令推荐
命令 | 作用 |
---|---|
ls -F | grep '/$' |
仅显示目录 |
ls -F | grep '*$' |
仅显示可执行文件 |
ls -lF | grep '@' |
显示符号链接及其指向 |
8、-r
核心作用
反转默认排序顺序:与当前排序方式相反(字母顺序、时间顺序、大小顺序等)。
不单独使用:通常需配合其他排序选项(如
-t
、-S
、-U
等)。
使用场景与示例
(1)反转字母顺序
默认按字母升序:
ls
输出:
a.txt b.txt c.txt
加 -r
后降序:
ls -r
输出:
c.txt b.txt a.txt
(2)配合时间排序(-t
)
默认按修改时间从新到旧:
ls -lt
输出(最新文件在前):
-rw-r--r-- 1 user group 1024 Apr 15 12:00 newest.txt
-rw-r--r-- 1 user group 512 Apr 14 10:00 older.txt
加 -r
后改为从旧到新:
ls -ltr
输出:
-rw-r--r-- 1 user group 512 Apr 14 10:00 older.txt
-rw-r--r-- 1 user group 1024 Apr 15 12:00 newest.txt
(3)配合大小排序(-S
)
默认按文件大小从大到小:
ls -lS
输出:
-rw-r--r-- 1 user group 2048 Apr 15 10:00 large.txt
-rw-r--r-- 1 user group 1024 Apr 15 09:00 medium.txt
加 -r
后改为从小到大:
ls -lSr
输出:
-rw-r--r-- 1 user group 1024 Apr 15 09:00 medium.txt
-rw-r--r-- 1 user group 2048 Apr 15 10:00 large.txt
常见组合命令
命令 | 作用 |
---|---|
ls -r |
单纯反转字母顺序 |
ls -lr |
长格式 + 反转字母顺序 |
ls -ltr |
按修改时间从旧到新 |
ls -lSr |
按文件大小从小到大 |
实际应用场景
(1)查看最旧的日志文件
ls -ltr /var/log/*.log | head -n 5 # 显示5个最旧的日志
(2)清理最小文件
ls -lSr | head -n 10 # 列出最小的10个文件
(3)与通配符配合
ls -r *.bak # 反向列出所有备份文件
9、-t
核心作用
按时间排序:默认从新到旧(最新修改的文件排在最前面)。
不依赖文件名:仅根据文件的 修改时间(mtime) 排序。
使用示例
(1)基本用法(按时间倒序)
ls -lt
输出示例(最新文件在前):
-rw-r--r-- 1 user group 1024 Apr 15 14:00 newest.txt
-rw-r--r-- 1 user group 512 Apr 15 10:00 older.txt
-rw-r--r-- 1 user group 256 Apr 14 09:00 oldest.txt
(2)组合 -r
反转排序(从旧到新)
ls -ltr
输出:
-rw-r--r-- 1 user group 256 Apr 14 09:00 oldest.txt
-rw-r--r-- 1 user group 512 Apr 15 10:00 older.txt
-rw-r--r-- 1 user group 1024 Apr 15 14:00 newest.txt
关键细节
排序依据:
默认使用 修改时间(mtime)(即文件内容最后更改的时间)。
若需按 访问时间(atime) 或 状态变更时间(ctime) 排序,需结合其他工具(如
stat
或find
)。
与
-c
或-u
的区别:选项 排序依据 -t
修改时间(mtime) -c
状态变更时间(ctime) -u
访问时间(atime)
实际应用场景
(1)快速找到最新文件
ls -lt | head -n 5 # 显示最近修改的5个文件
(2)清理旧日志
ls -ltr /var/log/*.log | head -n 10 # 列出最旧的10个日志文件
(3)监控实时变动
watch -n 1 'ls -lt | head' # 每秒刷新最新文件
组合其他选项
命令 | 作用 |
---|---|
ls -lt |
按时间倒序 + 长格式 |
ls -lt --color=always |
带颜色高亮 |
ls -ltR |
递归子目录并按时间排序 |
ls -ltu |
按访问时间(atime)排序 |
10、-s
功能详解:
显示块大小
-s
选项会显示每个文件/目录占用的 磁盘块数(默认块大小通常为 1KB,但可能因系统配置而异)。例如:
ls -s
输出中的数字表示文件占用了多少个磁盘块。
结合其他选项
-h
(人类可读格式):可与-s
联用(如ls -sh
),将块数转换为易读的单位(KB、MB等)。--block-size=SIZE
:自定义块大小(如ls -s --block-size=1M
以 1MB 为单位显示)。
示例输出:
$ ls -s
total 24
4 file1.txt 8 dir1 12 archive.tar
total 24
表示当前目录下所有内容共占用 24 个磁盘块。4 file1.txt
表示file1.txt
占用了 4 个块(约 4KB,若块大小为 1KB)。
注意事项:
块大小可能不同:实际占用空间取决于文件系统块大小(可通过
stat
或tune2fs -l
查看)。与
-l
的区别:ls -l
显示的是文件实际大小(字节数),而ls -s
显示的是磁盘分配的空间(可能因块分配而大于实际大小)。
常见用途:
快速查看文件/目录的磁盘占用情况。
结合
-S
按占用空间排序:ls -sS
(从大到小排序)。
11、-R
功能详解:
递归显示
-R
(Recursive)会从当前目录开始,逐层深入所有子目录,并列出每个子目录中的内容。适用于需要查看整个目录结构的场景。
输出格式
每进入一个子目录时,会先显示该目录的路径(如
./subdir:
),然后列出其中的内容。子目录的内容会继续递归展开。
示例输出:
$ ls -R
.:
file1.txt dir1 dir2
./dir1:
subfile1.txt subdir
./dir1/subdir:
nested_file.txt
./dir2:
empty_file.txt
第一层:当前目录下的
file1.txt
、dir1
、dir2
。第二层:
dir1
中的subfile1.txt
和subdir
,以及dir2
中的empty_file.txt
。第三层:
subdir
中的nested_file.txt
。
常见用途:
快速查看复杂目录结构
例如检查项目源码、日志文件或系统配置的嵌套目录。
结合其他选项
-l
:递归显示详细信息(ls -lR
)。-h
:人类可读的尺寸(ls -lhR
)。-t
/-S
:按时间/大小排序(ls -lRt
或ls -lRS
)。
注意事项:
输出可能很长:如果目录层级深或文件众多,建议搭配
less
分页查看(如ls -R | less
)。与
tree
命令的区别:tree
会以更直观的树形图显示结构,但可能需要安装(sudo apt install tree
)。
示例进阶用法:
# 递归显示详细信息(包括权限、大小等)
ls -lR
# 递归显示并按文件大小排序
ls -lRS
# 递归显示并过滤特定文件(如所有.txt文件)
ls -R | grep ".txt"
12、-1
功能详解:
单列输出
-1
(数字"1")强制ls
每行只显示一个文件或目录名,适合需要清晰列表或脚本处理的情况。默认情况下(无选项),
ls
可能多列输出(尤其终端较宽时)。-1
会忽略终端的宽度限制,始终单列显示。
与其他选项的区别
-l
:显示详细信息(长格式,多列属性)。-m
:逗号分隔的横向列表。-1
仅控制显示格式,不影响排序、过滤等功能。
示例对比:
默认多列输出(依赖终端宽度):
$ ls
file1.txt file2.txt dir1 dir2 script.sh
使用 -1
单列输出:
$ ls -1
file1.txt
file2.txt
dir1
dir2
script.sh
常见用途:
脚本处理
单列输出更便于用grep
、awk
等工具逐行处理文件名:ls -1 | grep ".txt" # 筛选所有.txt文件
清晰查看大量文件
避免多列换行混乱(尤其文件名较长时)。组合其他选项
按时间排序单列显示:
ls -1t
显示隐藏文件:
ls -1A
(不包括.
和..
)
注意事项:
非排序选项:
-1
本身不改变排序规则,需结合-t
(按时间)、-S
(按大小)等使用。与通配符的区别:
ls -1
仍会按字母顺序排列,而echo *
的输出顺序由 Shell 决定。
进阶示例:
# 单列显示并按修改时间倒序
ls -1t
# 统计当前目录下文件数量
ls -1 | wc -l
# 单列显示隐藏文件(不含 . 和 ..)
ls -1A