Linux学习日志(3) Linux文件与目录管理

学习资料:鳥哥私房菜 - 第六章、Linux 檔案與目錄管理

1. 目录与路径

1.1 相对路径与绝对路径

  • 绝对路径:从根目录 / 开始写,如 /home/user/file.txt
  • 相对路径:从当前目录开始写,如 ../docs/file.txt

1.2 特殊目录符号

符号 含义
. 当前目录
.. 上一级目录
- 前一个工作目录
~ 当前用户家目录
~account account用户的家目录

1.3 常用目录命令

命令 用途 常用选项
cd 切换目录 cd - 回到上一个目录
pwd 显示当前目录 pwd -P 显示真实路径(不含链接)
mkdir 创建目录 -p 递归创建多级目录
rmdir 删除空目录 只能删除空目录

1.4 执行文件路径变量 PATH

  • echo $PATH 查看命令搜索路径
  • 系统按 PATH 顺序查找命令
  • 添加临时路径:PATH="$PATH":/my/path
  • 安全考虑:不建议将当前目录 . 加入 PATH

2. 文件与目录管理

2.1 查看文件与目录:ls

常用选项:

选项 用途
-l 详细列表(权限、大小、时间)
-a 显示所有文件(含隐藏文件)
-d 仅列出目录本身,不列出内容
-h 人类可读大小(KB、MB)
-t 按时间排序
-r 反向排序
-S 按大小排序
--color 彩色显示

2.2 复制:cp

常用选项:

选项 用途
-i 覆盖前提示
-r 递归复制目录
-p 连同属性一起复制(权限、时间)
-a 相当于 -dr --preserve=all(归档模式)
-d 若源为链接,复制链接属性
-l 创建硬链接而非复制
-s 创建符号链接

2.3 删除:rm

常用选项:

选项 用途
-i 删除前提示
-r 递归删除目录
-f 强制删除(不提示)

对比不同选项的行为:

命令 文件存在 文件不存在
rm file 删除文件 报错:No such file
rm -i file 提示确认 报错:No such file
rm -f file 静默删除 静默忽略

-f 的作用:

  • 不提示确认

  • 忽略不存在的文件(不报错)

  • 常用于脚本中,确保命令不会因为文件不存在而中断

删除目录的选项对比:

  • rmdir:只能删除空目录

  • rm -r:删除非空目录(递归)

  • rm -rf:强制递归删除(小心使用!

⚠️ 重要警告:

  • rm -rf 是 Linux 中最危险的命令之一

  • 它不会询问,直接删除

  • 一旦执行,很难恢复

安全使用原则:

  1. 永远不要以 root 执行 rm -rf /

  2. 执行前先用 ls 确认路径

  3. 可以用 rm -ri 替代,确保安全

  4. 重要数据定期备份

2.4 移动/重命名:mv

常用选项:

选项 用途
-i 覆盖前提示
-u 源文件较新才移动
-f 强制覆盖

2.5 获取路径:basename, dirname

  • basename /path/file:获取文件名(file)
  • dirname /path/file:获取目录路径(/path)

3. 文件内容查阅

3.1 直接查看

命令 用途 特点
cat 连接并显示 适合短文件
tac 反向显示 最后一行先显示
nl 显示行号 可自定义行号格式

cat 常用选项:

  • -n:显示行号
  • -b:空白行不编号
  • -A:显示特殊字符

nl 的其他选项:

  • -b a:所有行都编号(同 cat -n)

  • -b t:仅非空行编号(默认)

  • -n rz:行号补零(000001)

3.2 翻页查看

命令 用途 操作键
more 一页一页翻动 空格翻页,q退出
less 更强大的翻页 上下箭头,/搜索,q退出

less 常用操作:

  • 上下箭头:逐行滚动

  • 空格键:下一页

  • b键:上一页

  • /关键词:向下搜索

  • ?关键词:向上搜索

  • n:下一个搜索结果

  • N:上一个搜索结果

  • g:第一行

  • G:最后一行

  • q:退出

3.3 数据截取

命令 用途 示例
head 显示头几行 head -n 20 file
tail 显示尾几行 tail -n 15 file
tail -f 动态跟踪 tail -f /var/log/syslog

3.4 非纯文本文件:od

选项 含义
-t oC 八进制(每个字节)
-t xC 十六进制(每个字节)
-t c ASCII 字符
-t d 十进制
-t u 无符号十进制

3.5 修改文件时间:touch

文件时间属性:

  • mtime:修改时间(内容改变)
  • ctime:状态时间(权限、所有者改变)
  • atime:访问时间(被读取)

touch 用途:

  • 创建空文件:touch newfile
  • 修改时间为当前:touch file
  • 修改为指定时间:touch -t 202501011200 file

4. 文件与目录的默认权限与隐藏权限

4.1 默认权限:umask

  • 文件默认最大:666(rw-rw-rw-)
  • 目录默认最大:777(rwxrwxrwx)
  • 最终权限 = 最大权限 - umask
  • umask 查看,umask 002 设置

4.2 隐藏权限:chattr, lsattr

chattr 常用属性:

属性 用途
+i 不可修改、删除、重命名
+a 只能追加内容
+u 删除时保留数据(可恢复)
+s 删除时彻底清除

rm -f 强制选项也无效,因为 +i 属性是内核级别的保护,rm -f 也无法绕过。

lsattr:查看隐藏权限

4.3 特殊权限:SUID, SGID, SBIT

已在第5章详细总结,此处略。


5. 命令与文件的搜寻

5.1 脚本文件名搜索:which

  • which:在 PATH 中搜索可执行文件
  • which -a:显示所有匹配路径

5.2 文件文件名搜索

whereis: 在特定目录中搜索(/bin, /etc, /usr 等)

  • whereis ls:找到 ls 和相关文件
  • whereis -b ls:只找二进制文件
  • whereis -m ls:只找手册文件

locate: 从数据库搜索

  • locate passwd:搜索所有包含 passwd 的文件
  • locate -i passwd:忽略大小写
  • updatedb:更新数据库(需 root)

locate 特点: 速度快(从数据库查询)、可能不是实时(需更新数据库)

find: 实时搜索(功能最强大)

find 常用语法:

1
find [路径] [条件] [动作]

常用条件:

条件 用途 示例
-name 按文件名 find / -name "*.conf"
-iname 忽略大小写 find . -iname "readme"
-user 按所有者 find / -user root
-group 按所属组 find / -group staff
-type 按类型 find . -type f(文件)或 -type d(目录)
-size 按大小 find / -size +10M(大于10M)
-mtime 按修改时间 find . -mtime -7(7天内修改)
-perm 按权限 find . -perm 644
-exec 执行命令 find . -name "*.tmp" -exec rm {} \;

大小单位:

  • c:字节
  • k:KB
  • M:MB
  • G:GB

比较符号:

  • -size +1M:大于 1MB

  • -size -1M:小于 1MB

  • -size 1M:正好 1MB

组合条件:

  • -a(and):同时满足,可省略(默认就是 and)

  • -o(or):满足任一条件

  • 可以用括号 \( \) 分组(需转义)


6. 本章重点命令速查

命令 用途 常用示例
cd 切换目录 cd ~, cd -
pwd 显示当前目录 pwd -P
mkdir 创建目录 mkdir -p a/b/c
rmdir 删除空目录 rmdir dir
ls 列出文件 ls -la, ls -lh, ls -lt
cp 复制 cp -r source dest, cp -a
rm 删除 rm -rf dir, rm -i file
mv 移动/重命名 mv old new, mv file dir/
basename 取文件名 basename /a/b/c.txt
dirname 取目录名 dirname /a/b/c.txt
cat 显示文件 cat -n file
tac 反向显示 tac file
nl 显示行号 nl file
more 翻页查看 more file
less 翻页查看 less file
head 显示头部 head -n 20 file
tail 显示尾部 tail -f log, tail -n 30
od 二进制查看 od -t xC file
touch 修改时间/创建 touch file, touch -t 202501011200 file
which 搜索可执行文件 which ls
whereis 搜索文件 whereis ls
locate 数据库搜索 locate passwd
find 实时搜索 find / -name "*.conf"

7. 实用技巧

7.1 通配符

符号 含义 示例
* 任意多个字符 *.txt
? 任意一个字符 file?.txt
[abc] 中括号内任一字符 file[123].txt
[a-z] 范围 file[a-z].txt
[^abc] 排除 file[^0-9].txt

7.2 输入/输出重定向

符号 用途 示例
> 覆盖输出到文件 ls > list.txt
>> 追加输出到文件 echo "hi" >> file.txt
< 从文件输入 cat < file.txt
2> 错误输出 find / -name file 2> error.log
| 管道 ls -la | grep ".txt"