Linux文件和目录管理 全面的命令操作指南

Linux 文件与目录管理 全面命令操作指南(CentOS7)

核心思想:Linux 一切皆文件,目录是特殊文件。所有操作围绕 路径(绝对 / 相对)、权限、软硬链接 三个概念。 路径速记:/ 根、~ 当前用户家目录、. 当前目录、.. 上级目录、- 上一次所在目录

一、目录结构速览(FHS)

/               根目录
├── bin   /usr/bin      普通命令
├── sbin  /usr/sbin     管理命令(root)
├── etc                 配置文件(my.cnf 在这里)
├── var                 可变数据(日志 /var/log、MySQL数据 /var/lib/mysql)
├── home                普通用户家目录
├── root                root家目录
├── tmp                 临时文件
├── usr                 系统程序与资源
└── mnt / media         挂载点(U盘、新盘)

二、导航与查看

pwd                     # 当前所在目录
cd /etc                 # 绝对路径跳转
cd ..                   # 上级
cd ~                    # 回家目录
cd -                    # 回到上一次目录
cd                      # 同上,回家

ls 查看列表

ls                      # 普通列表
ls -l                   # 长格式:权限、属主、大小、时间(简写 ll)
ls -lh                  # 人类可读大小(K/M/G)
ls -la                  # 含隐藏文件(.开头)
ls -lt                  # 按修改时间排序
ls -lhtr                # 最新的在最后(常用于日志目录)
ls -ld /etc             # 看目录本身信息,不看里面

通配符

ls *.sql                # 所有.sql结尾
ls /tmp/*.log           # 
ls [0-9]*               # 数字开头
ls {a,b}*               # a开头或b开头

三、创建与删除

新建

touch a.txt             # 新建空文件(已存在则更新时间戳)
mkdir dir1              # 新建目录
mkdir -p a/b/c          # 递归创建多级目录

删除

rm file.txt             # 删文件(会提示确认)
rm -f file.txt          # 强制删,不提示
rm -r dir1              # 递归删目录
rm -rf dir1             # 强制递归删【高危!】
rmdir emptydir          # 只能删空目录

⚠️ rm -rf / 或路径写错后果严重。养成习惯:先 ls 确认再删;重要目录先备份。

复制

cp src.txt dst.txt
cp -r dir1 dir2         # 复制目录必须 -r
cp -a dir1 backup_dir   # 保留权限/时间/软链接(备份推荐)
cp -i                   # 覆盖前提示

移动 / 重命名

mv old.txt new.txt      # 重命名
mv file.txt /tmp/       # 移动
mv -i a.txt b.txt       # 覆盖前提示

四、查看文件内容

cat file.txt            # 全部打印(小文件)
cat -n file.txt         # 带行号
tac file.txt            # 倒序打印

less file.txt           # 分页查看(大文件首选)
  # less内快捷键:空格下一页,b上一页,/关键词搜索,n下一个,q退出

head -20 file.log       # 头20行
tail -20 file.log       # 尾20行
tail -f /var/log/mysqld.log   # 实时滚动【看日志必用】
tail -n 100 -f file.log

wc -l file.txt          # 统计行数
wc -lwc file.txt        # 行 词 字节数
file /bin/ls            # 判断文件类型
stat file.txt           # 详细属性(大小、时间戳)

大文件快速处理

# 只看100到200行
sed -n '100,200p' file.log

# 实时查看并过滤错误
tail -f app.log | grep ERROR

五、查找文件

find(最强大,按条件搜)

# 按名字
find /etc -name "*.conf"
find /var/log -name "*.log" -mtime +7      # 7天前修改的日志

# 按大小
find / -size +100M                          # 大于100M的文件

# 按属主
find /home -user zhangsan

# 找到后执行动作(删除7天前日志)
find /var/log/app -name "*.log" -mtime +7 -delete

# 找大文件并显示大小
find / -xdev -type f -size +500M -exec ls -lh {} \;

其他查找

which ls                # 命令在哪个路径
whereis nginx           # 命令+源码+man位置
lscpu / lsblk           # 硬件信息
locate 文件名            # 数据库快速查找(需 updatedb)

六、软链接与硬链接(重要)

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql   # 软链接(快捷方式)
ln 源文件 硬链接                                    # 硬链接(inode相同)

区别:

  • 软链接:类似快捷方式,源文件删了链接失效;可以跨分区;可链接目录
  • 硬链接:同一文件多个名字,inode 相同;不能跨分区;不能链接目录;删一个名字文件还在

七、权限与属主(重点)

看权限位 ls -l 输出

-rw-r--r--. 1 root root  1234 Sep 18 10:00 file.txt
│┬┬┬┬┬┬┬
│└┼┼┼┼└─── 其他人 r--
│ └┼┼┴──── 组 r--
│  └┼───── 属主 rw-
└────── 文件类型:-普通 d目录 l链接

权限数字:r=4 w=2 x=1

  • rwxr-xr-x = 755
  • rw-r--r-- = 644
  • rwx------ = 700(私密目录)

chmod 修改权限

chmod 755 script.sh
chmod 644 config.ini
chmod +x script.sh          # 加执行权限
chmod -R 755 /app           # 递归
chmod u+x,g-w,o=r file      # 符号方式:user加x,group去w,other只读

chown 修改属主 / 属组

chown mysql:mysql /var/lib/mysql        # 属主:属组
chown -R mysql:mysql /var/lib/mysql     # 递归
chgrp developers shared_dir             # 单独改组

umask 默认权限

umask                       # 查看当前掩码(通常0022)
umask 027                   # 临时改

八、压缩归档

tar(前面讲过,这里汇总)

tar -czvf a.tar.gz dir/      # 打包+gzip压缩
tar -xzvf a.tar.gz           # 解压
tar -tjvf a.tar.bz2          # 查看内容
tar -xJvf a.tar.xz -C /opt   # 解压到指定目录

zip / unzip

yum install zip unzip -y
zip -r a.zip dir/
unzip a.zip
unzip a.zip -d /opt

gzip 单文件压缩

gzip file.log            # 变 file.log.gz
gunzip file.log.gz

九、磁盘与空间

df -h                     # 各分区使用量
du -sh /var/log           # 目录总大小
du -h --max-depth=1 /var  # 一层子目录大小
du -sh * | sort -h        # 当前目录各子项大小排序
lsblk                     # 块设备树

十、文本处理三连(grep/sed/awk 简介)

grep "ERROR" app.log                  # 过滤
grep -rn "password" /etc/             # 递归带行号
grep -v "^#" config.conf              # 排除注释行

sed -n '10,20p' file                  # 打印10-20行
sed -i 's/old/new/g' file             # 替换(直接改文件)

awk '{print $1, $3}' file             # 取第1、3列
awk -F: '{print $1}' /etc/passwd      # 按冒号分隔

十一、常用快捷键与技巧

  • Ctrl + R:历史命令搜索
  • Ctrl + C:中断当前命令
  • Ctrl + L:清屏(等同 clear)
  • Tab:自动补全(连按两次列候选)
  • !!:重复上一条命令
  • !$:上一条命令最后一个参数
  • history:历史;!100 执行第 100 条

十二、典型实操场景

1. 清理大日志文件(不重启服务)

# 不要直接 rm,用 truncate 清空,服务仍占用句柄
: > /var/log/nginx/access.log
# 或
truncate -s 0 /var/log/nginx/access.log

2. 找出磁盘占用大户

du -h --max-depth=1 / | sort -h

3. 批量重命名(批量改后缀)

rename 's/\.txt$/.md/' *.txt
# 无rename用循环
for f in *.txt; do mv "$f" "${f%.txt}.md"; done

4. 安全删除( shred 覆盖)

shred -u secret.txt

十三、常见问题

  1. Permission denied:当前用户没权限,加 sudo 或 chmod。
  2. Read-only file system:分区只读挂载(磁盘故障或 fstab 配错),重新挂载 mount -o remount,rw /。
  3. rm 误删:别再往磁盘写东西,立刻停止服务,用 extundelete 等工具尝试恢复。
  4. No such file or directory:路径写错,注意大小写和隐藏文件。
  5. 文件名有空格:用引号包裹 "my file.txt" 或转义 my\ file.txt。

命令速查表

表格

操作命令
导航cd pwd
列表ls ll
创建touch mkdir -p
删除rm -rf rmdir
复制移动cp -a mv
看内容cat less head tail -f
查找find which whereis
链接ln -s
权限chmod chown
空间df -h du -sh
压缩tar -czvf/-xzvf
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像-次元社
欢迎您留下宝贵的见解!
提交
头像-次元社

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容