列出文件

ls 命令的几个选项如下。

选项作用
-a列出隐藏文件
-h以人类友好的信息列出文件大小
-t按照修改时间排序,最新的排在前面
-r逆序排序
-l列出详细信息

文件链接

1
ln -s hello.txt link.txt

创建 hello.txt 的软链接 link.txt。

1
2
$ ls -ltr
lrwxrwxrwx 1 ubuntu ubuntu 9 Mar 25 23:59 link.txt -> hello.txt

不加 -s 则是创建硬链接,硬链接是通过共享 inode 节点来指向同一个内容,所有的硬链接被删除了,文件才被删除,如果源文件路径变化,不会影响其他链接文件,但是软链接会失效。

权限说明

rw-rw-r–
文件所有者权限同组用户的权限其他用户的权限

二进制表示:

rwx
421
  • r 可读
  • w 可写
  • x 可执行

使用 chmod 增加权限。

1
chmod +r/w/x 

向所有用户添加权限。

1
chmod +r/w/x 

向所有用户删除权限。

1
chmod [u/a/g]+r/w/x

向所有者、全部用户、用户组添加权限。

1
chmod 777 hello.txt

创建文件

1
touch xx.txt
1
echo "hello.txt" > hello.txt

通配符

通配符是 shell(如 bash)用于匹配文件名或路径 的简化模式匹配工具,主要用于命令行中对文件 / 目录进行批量操作(如 ls、cp、rm 等命令)。

通配符说明示例
*匹配任意数量的任意字符ls *.txt 匹配所有以 .txt 结尾的文件。
?匹配 单个 任意字符ls file?.log 匹配 file1.log、fileA.log 等(文件名长度固定,仅最后一个字符不同)。
[]匹配括号内的 单个 字符,支持范围表示ls [a-z].sh 匹配 a.sh、b.sh 等;ls [0-9].txt 匹配 1.txt、5.txt 等。
[! ]/ [^ ]匹配 不在 括号内的单个字符ls [!a-z].pdf 匹配文件名首字符不是小写字母的 PDF 文件
{}匹配括号内的 逗号分隔的字符串(用于生成多个模式)cp file{1,2,3}.txt dir/ 等价于 cp file1.txt file2.txt file3.txt dir/。

和正则表达式的区别

  • 通配符是 文件操作的简化工具,专注于快速匹配文件名,语法简单直观。
  • 正则表达式是 文本内容匹配的强大工具,支持复杂模式,适用于文本分析和处理。

常用目录

目录全称作用典型文件
binBinary存放系统最核心最基础的可执行程序,所有用户都可以执行ls / cat
libLibrary系统库文件
etcEditable Text Configuration配置文件Nginx/mysql 的配置文件 /etc/nginx/、/etc/mysql/
sbinSystem Bin存放仅 root 用户可执行的系统管理命令ifconfig 配置网络、fdisk 分区
varVariable存储系统运行过程中会动态变化的数据日志、缓存、临时文件
var/log存储系统和应用程序的日志文件nginx/xx.log
var/lib存储应用程序运行时需要的持久化数据数据库文件、状态信息,例如 mysql/ 代表 MySQL 数据库的实际数据文件
var/tmp需要长期保存的临时文件应用程序的临时缓存
optOptional存放用户或第三方软件开发者可选安装的应用程序,所有相关文件都在独立子目录,不依赖系统默认组件,通常将软件解压到 /opt,再通过软链接链接到 /usr/local/binIntelliJ IDEA
homeHome用户家目录
tmpTemporary系统或应用程序运行时产生的临时文件,只短时间有用,不需要长期保留,系统会自动清理
usrUnix System Resource存储非核心系统资源,包括用户程序、库文件、文档、配置模板,不影响系统的启动
sysSystem是 sysfs 文件系统的挂载点,以文件和目录的形式,向用户空间暴露内核空间的硬件设备、内核模块、系统资源的实时状态和配置信息/proc/1/ 进程信息,/proc/cpuinfo cpu 信息
procProc是 procfs 文件系统的挂载点,以文件和目录的形式,向用户空间暴露内核数据结构、进程信息和系统硬件信息
usr/bin存储普通用户可执行的非核心应用程序,所有用户可执行通过系统发行版自带的、通过包管理器(apt/yum)安装的软件,例如 git/python,是系统提供、管理的官方工具
usr/sbin存放 root 用户可执行的非核心系统管理工具apache、mysql
usr/lib存放应用程序依赖的共享库程序 .so 和内核模块
usr/share存放跨平台共享的静态资源(文档、图标) ,不依赖硬件架构
usr/local存放用户手动安装的软件,从源码编译的程序/手动解压的二进制包,避免与系统默认安装软件冲突

文件搜索

find

  • 按文件名搜索
1
2
# 在 /home 目录下搜索名为 "file.txt" 的文件
find /home -name "file.txt"
  • 按文件名模糊搜索
1
2
# 在当前目录及子目录下搜索以 ".txt" 结尾的文件(忽略大小写)
find . -iname "*.txt"
  • 按文件大小搜索
1
2
3
4
5
# 搜索大于 100MB 的文件(c=字节, k=KB, M=MB, G=GB)
find / -size +100M

# 搜索小于 10KB 的文件
find ./docs -size -10k
  • 按修改时间搜索
1
2
3
4
5
# 搜索最近 7 天内修改过的文件
find /var/log -mtime -7

# 搜索超过 30 天未修改的文件
find ~ -mtime +30
  • 按文件类型搜索
1
2
3
4
5
# 搜索目录(type d)
find /etc -type d -name "conf.d"

# 搜索符号链接(type l)
find /usr/bin -type l -name "python*"
  • 按路径搜索
1
find /var -path "*/logs/*.log"
  • 组合条件搜索

-a:与(默认,可省略) -o:或 !:非

1
find /var/log -name "*.log" -size +100M -mtime +30
1
find . -type f \( -name "*.txt" -o -name "*.md" \) ! -name ".*"

(注意:() 用于分组,需转义 ( ))

  • 对搜索结果进行操作
1
find [条件] -exec 命令 {} \;
* {} 代表匹配的文件名(占位符)。
* \; 是命令结束标记(必须转义),为了防止 shell 解析这个分号。

删除 30 天前的 .log 文件

1
find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;
  • 限制搜索深度
1
find /etc -maxdepth 2 -name "*.conf"  # 只搜索 /etc 及直接子目录
  • 排除目录
1
2
# 搜索 /home 但排除 /home/alice/tmp 目录
find /home -path "/home/alice/tmp" -prune -o -name "*.pdf" -print

locate

  • 基本搜索
1
2
# 搜索所有包含 "nginx.conf" 的文件路径
locate nginx.conf
  • 精确匹配
1
2
# 只匹配完整名称完全为 "hosts" 的文件
locate -b '^hosts$'
  • 更新数据库
1
sudo updatedb  # 需要 root 权限,更新 /var/lib/mlocate/mlocate.db

which

搜索系统 PATH 目录下的可执行文件

1
which python3  # 输出 /usr/bin/python3

whereis

搜索命令的二进制文件、源文件和手册页

1
whereis gcc  # 输出 gcc 的安装路径和手册位置

文件大小

du

  • 查看单个文件的磁盘占用
1
2
du -h filename.txt
# 输出示例:2.5M  filename.txt
  • 查看目录总大小 (包含子文件)
1
2
du -sh /home/user/documents  # -s 表示只显示总和(不列出子目录详情)
# 输出示例:1.2G  /home/user/documents
  • 查看目录内各子项的大小
1
2
3
4
5
du -h --max-depth=1 /var/log  # 只显示一级子目录/文件的大小
# 输出示例:
# 450M  /var/log/journal
# 12K   /var/log/nginx
# 5.2M  /var/log/syslog
  • 按大小排序
1
du -h --max-depth=1 /tmp | sort -hr  # 结合 sort 从大到小排序
  • 查看特定大小的文件并显式详情
1
find / -type f -size +1G -exec du -sh {} \;  # 查找 1GB 以上的文件