Linux基本指令篇 —— ls指令

发布于:2025-04-14 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、语法

ls [选项] [目录或文件]

二、功能

  • 对于目录,该命令列出该目录下的所有子目录与文件。
  • 对于文件,将列出文件名以及其他信息。

三、常用选项

1、-a

基本用法

ls -a [文件或目录]
  • 显示当前目录下的 所有文件和目录(包括隐藏文件)。

  • 隐藏文件示例:.bashrc.ssh/.profile

  • . 表示当前目录;.. 表示上级目录,其余以 . 开头的为隐藏文件/目录。


组合其他选项

(1)-a + -l(显示详细信息)

作用:显示所有文件(含隐藏文件)的 详细信息(权限、所有者、大小、修改时间等)。

ls -al [文件或目录]
ls -la [文件或目录]

(2)-a + -h(人类可读的文件大小)

ls -alh [文件或目录]

作用:在详细信息中,以 KMG 显示文件大小(例如 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 ~/.* 显示家目录下的所有隐藏目录

关键区别

  • 不加 -dls /etc → 展开显示 /etc 下的所有文件。

  • 加 -dls -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. 第 1 字符:文件类型

    • -:普通文件

    • d:目录

    • l:符号链接

    • b/c:块设备/字符设备

    • p/s:管道或套接字

  2. 第 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 和 GID 1002(对应 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

功能详解:

  1. 显示块大小
    -s 选项会显示每个文件/目录占用的 磁盘块数(默认块大小通常为 1KB,但可能因系统配置而异)。

    • 例如:ls -s 输出中的数字表示文件占用了多少个磁盘块。

  2. 结合其他选项

    • -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

功能详解:

  1. 递归显示
    -R(Recursive)会从当前目录开始,逐层深入所有子目录,并列出每个子目录中的内容。

    • 适用于需要查看整个目录结构的场景。

  2. 输出格式

    • 每进入一个子目录时,会先显示该目录的路径(如 ./subdir:),然后列出其中的内容。

    • 子目录的内容会继续递归展开。


示例输出:

$ ls -R
.:
file1.txt  dir1  dir2

./dir1:
subfile1.txt  subdir

./dir1/subdir:
nested_file.txt

./dir2:
empty_file.txt
  • 第一层:当前目录下的 file1.txtdir1dir2

  • 第二层:dir1 中的 subfile1.txt 和 subdir,以及 dir2 中的 empty_file.txt

  • 第三层:subdir 中的 nested_file.txt


常见用途:

  1. 快速查看复杂目录结构

    • 例如检查项目源码、日志文件或系统配置的嵌套目录。

  2. 结合其他选项

    • -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(数字"1")强制 ls 每行只显示一个文件或目录名,适合需要清晰列表或脚本处理的情况。

    • 默认情况下(无选项),ls 可能多列输出(尤其终端较宽时)。

    • -1 会忽略终端的宽度限制,始终单列显示。

  2. 与其他选项的区别

    • -l:显示详细信息(长格式,多列属性)。

    • -m:逗号分隔的横向列表。

    • -1 仅控制显示格式,不影响排序、过滤等功能。


示例对比:

默认多列输出(依赖终端宽度):
$ ls
file1.txt  file2.txt  dir1  dir2  script.sh
使用 -1 单列输出:
$ ls -1
file1.txt
file2.txt
dir1
dir2
script.sh

常见用途:

  1. 脚本处理
    单列输出更便于用 grepawk 等工具逐行处理文件名:

    ls -1 | grep ".txt"  # 筛选所有.txt文件
  2. 清晰查看大量文件
    避免多列换行混乱(尤其文件名较长时)。

  3. 组合其他选项

    • 按时间排序单列显示:ls -1t

    • 显示隐藏文件:ls -1A(不包括 . 和 ..


注意事项:

  • 非排序选项-1 本身不改变排序规则,需结合 -t(按时间)、-S(按大小)等使用。

  • 与通配符的区别ls -1 仍会按字母顺序排列,而 echo * 的输出顺序由 Shell 决定。


进阶示例:

# 单列显示并按修改时间倒序
ls -1t

# 统计当前目录下文件数量
ls -1 | wc -l

# 单列显示隐藏文件(不含 . 和 ..)
ls -1A