ls:不是列目录,是看情报
$ ls -lah
-rw-r--r-- 1 app staff 12M 3 8 09:26 app.log
drwxr-xr-x 5 app staff 160B 3 7 20:11 logs
↑↑↑↑↑↑↑↑↑↑ 类型+权限 大小 修改时间
// 第一个字符:- 文件 d 目录 l 链接
// 后九个字符每三个一组:属主 / 属组 / 其他人 × 读r 写w 执行x
// 这串权限位在权限篇会展开讲,先混个脸熟
// 高频组合
$ ls -lah # 大小人类可读(K/M/G),含隐藏文件
$ ls -lht # 按时间排序,最新在前——找最近改过的文件cp / mv / rm:事故高发区
$ cp -a src/ dst/ # -a 保留权限、时间戳,目录递归(备份首选)
$ mv a.txt b.txt # 重命名和移动是同一个命令
$ rm app.log # 删单个文件
# 敬畏 rm 的三条军规:
# 1. rm 前先 ls 一遍同样的通配符 —— 看清要删的是什么
# $ ls *.log 确认无误后,把 ls 换成 rm
# 2. 生产环境删目录,宁可 rm -rf 目录名,不要 rm -rf 目录名/
# (多了个斜杠在部分 shell 下语义不同,且手滑空格会变成 rm -rf / )
# 3. 变量拼接路径时先 echo 出来人工确认,再执行删除血泪规律:rm 事故都发生在脚本和变量拼接里,纯手敲反而少。变量为空时 rm -rf $dir/* 会变成 rm -rf /*——上线脚本务必先 echo 确认。
find:按任何条件找文件
$ find /var/log -name "*.log" # 按名字(通配符要加引号)
$ find / -name "nginx.conf" 2>/dev/null # 全盘找,错误信息丢弃
$ find . -size +100M # 找大于 100M 的(磁盘满排查常用)
$ find . -mtime -1 # 最近 24 小时内改过的
$ find . -mtime +30 -name "*.log" # 30 天前的日志(配合删除做清理)
# 找到之后直接批量处理(-exec 结尾要用 ; 转义)
$ find . -mtime +30 -name "*.log" -exec rm {} ;
$ find . -name "*.sh" -exec chmod +x {} ;find + rm 比 rm -rf 安全得多:先跑 find 看输出列表,确认了再加 -exec——条件过滤后的删除,目标明确。
软链接与硬链接
一个文件可以有多个名字。硬链接(ln file link)是同一份数据的第二个名字,删掉原名数据还在;软链接(ln -s target link)是个指向路径的快捷方式,原文件没了它就悬空。日常用软链接居多,两个经典场景:版本切换——ln -sfn app-v2 current,发布回滚只需把链接一改;日志软链——把 /var/log/app 指到大容量数据盘,不动应用配置。下一篇:服务器上唯一现成的编辑器——vim 的最小必学集。
评论 (0)