Linux 目录结构与文件操作
CentOS 目录结构遵循 FHS(Filesystem Hierarchy Standard) 标准,核心是将系统文件按功能划分为不同目录
核心系统目录(/ 根目录下关键子目录)
这些目录是系统运行的基础,存放操作系统核心文件和配置。
shell
/bin 存放所有用户可执行的基础命令(如 ls、cp、mkdir),命令在单用户模式下也能使用。 ls、cat、rm
/sbin 存放系统管理命令(如 ifconfig、reboot、fdisk),通常需 root 权限执行。 reboot、shutdown、fdisk
/etc 存放系统所有配置文件(全局配置、服务配置、用户配置等),是系统管理的核心目录。 /etc/passwd(用户信息)、/etc/sysconfig/network-scripts(网卡配置)、/etc/yum.repos.d(YUM 源配置)
/root 系统管理员(root 用户)的家目录,普通用户无访问权限。 root 用户的个人文件、配置(如 .bashrc)
/home 所有普通用户的家目录,每个用户对应一个同名子目录(如用户 user1 的家目录是 /home/user1)。 /home/user1、/home/admin
/lib 存放系统和应用程序依赖的 32 位共享库文件(.so 后缀),类似 Windows 的 dll 文件。 各类 libxxx.so.x 库文件
/lib64 存放 64 位系统的共享库文件,仅 64 位 CentOS 系统存在此目录。 各类 libxxx.so.x 64 位库文件数据与存储目录
这类目录用于存放临时文件、用户数据、可挂载的外部存储等,数据可随需求增减或迁移。
shell
/tmp 存放系统和用户的临时文件,系统重启后内容会被清空,所有用户均可读写。
/var 存放 “可变数据”(即内容会随系统运行动态变化的文件)
/var/log:系统和应用程序的日志文件(如 /var/log/messages 系统日志、/var/log/secure 安全日志)。
/var/www:Apache/Nginx 等 Web 服务的默认网站根目录。
/var/spool:存放邮件、打印队列等待处理数据(如 /var/spool/mail 用户邮件)。
/mnt 默认的 “临时挂载点”,用于手动挂载外部存储(如 U 盘、移动硬盘,挂载命令 mount /dev/sdb1 /mnt)。
/media 自动挂载点,系统检测到外部存储(如光盘、U 盘)时,会自动挂载到该目录下的子目录。应用与资源目录
这类目录用于存放第三方软件、源代码、文档等,不影响系统核心运行。
shell
/usr 存放用户安装的应用程序、共享资源,是系统中最大的目录之一
/usr/bin:用户安装的应用命令(如 git、wget),区别于 /bin 的系统基础命令。
/usr/sbin:用户安装的系统管理命令(如 httpd、mysqld)。
/usr/local:手动编译安装软件的默认目录(如源码编译的 Nginx、MySQL 常安装到 /usr/local/nginx)。
/usr/share:存放共享数据(如文档、字体、图标,/usr/share/doc 为软件文档目录)。
/opt 默认的 “临时挂载点”,用于手动挂载外部存储(如 U 盘、移动硬盘,挂载命令 mount /dev/sdb1 /mnt)。
/media 存放大型第三方软件或独立程序包(如 Oracle 数据库、Java JDK),目录结构由软件自身定义(如 /opt/jdk1.8.0_301)。特殊功能目录
这些目录不存储实际文件,而是用于系统功能映射或临时内存挂载。
shell
/proc 虚拟文件系统,映射系统内核、进程状态等实时信息(如 /proc/cpuinfo 查看 CPU 信息、/proc/meminfo 查看内存信息),内容存于内存,不占用磁盘空间。
/sys 虚拟文件系统,用于访问和控制硬件设备(如查看磁盘分区、CPU 频率),是 Linux 硬件管理的核心接口。
/dev 存放所有设备文件(如硬盘 /dev/sda、光驱 /dev/cdrom、终端 /dev/tty1),Linux 中 “一切皆文件”,设备通过此目录被系统识别和操作。注意事项
不随意修改 /etc 目录:该目录配置直接影响系统运行,修改前需备份(如 cp /etc/passwd /etc/passwd.bak)。
避免在 / 根目录存放数据:根目录空间有限,用户数据应存于 /home 或 /var,大文件建议挂载独立分区。
第三方软件优先装在 /usr/local 或 /opt:避免与系统自带软件冲突,便于管理和卸载。
切换、增、删、改、查
切换目录(change directory 缩写)
shell
cd ~ 回到用户得家目录
cd ../ 返回上一级
cd ../../ 返回上两级:
cd - 返回上一次所在目录
cd dir1/ 进入下一级的dir1目录
cd D:dir1/ 进入D盘下的dir1某目录新增目录(make directory 缩写)
shell
mkdir dir1 dir2 dir3 新建文件夹(可建同级多个目录)
mkdir existdir/newdir 在已经存在的子目录下新建目录
mkdir -p dir1/dir2/dir3 新建目录树
mkdir -m 777 dir1 新建目录并赋予权限(这个权限是通过计算得到)删除目录
shell
rmdir dir1 删除空目录
rm -rf dir1 dir2 删除目录和目录内的内容(可同时删除多个同级目录)目录的拷贝、剪切、重命名
shell
# 拷贝
cp -r dir1 dir2 将 dir1 复制到当前目录,新目录名为 dir2
cp -r dir1 /tmp/ 将 dir1 复制到 /tmp 目录下
# 移动/剪切
mv dir1 /home/user/ 将 dir1 移动到 /home/user/ 目录下
# 重命名
mv old_dir new_dir 将 old_dir 重命名为 new_dir查看目录
shell
# 查看子目录信息
ls 查看目录下的非隐藏文件
ls | grep "nginx" 查看目录下的非隐藏文件,并过滤出 nginx 相关的内容
ls -a 查看所有隐藏文件
ls -l 查看文件的详细信息,包括:文件权限和创建时间等
# 目录路径
pwd 查看当前目录的绝对路径
find -name fileordir 在当前工作路径下开始查找目录,成功后返回路径
find /home/user1 -name \*.bin 在目录 '/home/user1' 中搜索带有'.bin' 结尾的目录
whereis www 全局查 www 目录
# 查看目录的占用空间
du -sh /var/ 显示 /var 目录的总占用空间
du -h /home/ 显示 /home 下各子目录的大小本地电脑和远程服务器的目录互传(scp)
参考 [04、linux 文件操作.md]
增、删、改、查
新增文件
shell
# 创建文件
touch file1.js file2.js 新建文件,可批量,如果文件存在,那么什么都不会发生
touch file{0001..2000}.txt 连续创建2000个文件删除文件
shell
rm -f 文件名 # 删除文件
rm -f * # 删除当前目录下所有文件
> 文件名 # 清空文件内容编辑文件内容
shell
# 执行 vi 或者 vim 命令编辑文件内容
vim file1.js 进入文件
i 进入insert模式,开始编辑文件
Esc 退出insert模式
:wq 保存并关闭编辑内容(输入法必须是英文状态)
:q 只是浏览内容,没有修改,可使用此命令退出(输入法必须是英文状态)
# 将命令的结果写入到文件中
ls -la > 文件名 # 清空文件内容,并添加 ls -la 结果
ls -la >> 文件名 # 不清空文件内容,只追加 ls -la 结果
# 将自定义内容写入到文件中
echo "内容" > 文件名 # 清空文件内容,并添加
echo "内容" >> 文件名 # 不清空文件内容,只追加文件拷贝、文件剪切、文件重命名
shell
# 拷贝
cp source_file target_file 复制文件到指定目录
cp -r source_dir target_dir 递归复制目录(-r 表示递归)
# 剪切
mv source_file /path/to/directory/ 移动文件到指定目录
# 重命名
mv old_filename new_filename 重命名文件查看文件
shell
# 查看文件属性
ls -l filename # 显示单个文件的详细信息
ls -lh # 以人类可读的单位(如 K、M)显示文件大小
stat filename # 查看文件的详细元数据(创建时间、修改时间等)
# 查看文件所在目录的位置
find -name fileordir # 在当前工作路径下开始查找文件或者目录,成功后返回路径
find /home/user1 -name \*.bin # 在目录 '/home/user1' 中搜索带有'.bin' 结尾的文件
# 查看文件的内容
cat file1 # 从第一个字节开始正向查看文件的内容(适合短文件)
tac file1 # 从最后一行开始反向查看一个文件的内容(将文件倒过来)
more file1 # 分页查看长文件,按 Enter 下一行,按 空格 翻页,按 b 健向上滚动整页,按 / 关键词 搜索,按 q 退出
less file1 # 分页查看长文件(推荐,功能比 more 更强大),按 ↑↓ 滚动整页,
# 按 G 跳至文件末尾,按 gg 跳至文件开头,按 q 退出 less,按 v 键进入 vi 编辑模式
# 按 / 字符串:向下搜索指定字符串,按 n 键跳至下一个匹配项,N 键跳至上一个。
# 按 ? 字符串:向上搜索指定字符串,按 n 键跳至上一个匹配项,N 键跳至下一个。
# less -N file.txt 显示行号、less -i file.txt 忽略大小写、less -i file.txt 不自动换行
wc -c 文件名 # 统计文件内容的字符数
wc -w 文件名 # 统计文件内容的单词数
wc -l 文件名 # 统计文件内容的行数
# 首尾内容查看
head -2 file1 查看一个文件的前两行
tail -2 file1 查看一个文件的最后两行
tail -f file1 实时监控文件新增内容(常用于日志)
# 3. 检索文件的内容
grep content file1 查找到所有 包含 关键字的行
grep –i content file1 查找到所有 包含 关键字的行(查找时不区分大小写)
grep –v content file1 查找到所有 不包含 关键字的行本地电脑和远程服务器的文件互传(scp)
scp(Secure Copy)是 Linux 系统中用于在本地与远程主机之间、或两个远程主机之间安全传输文件的命令,基于 SSH 协议进行加密传输,确保数据安全
注意
注意:以下命令都是在本地电脑的终端上执行的
基础语法:scp [选项] 源文件/目录 目标路径
- 把本地文件上传到远程服务器
shell
# 基础语法
scp 本地文件路径 用户名@远程IP:远程目录
# 示例
scp file.txt root@192.168.1.100:/tmp/ # 将本地文件 file.txt 传到远程服务器的 /tmp 目录- 把远程服务器上的文件上传到本地
shell
# 基础语法
scp 用户名@远程IP:远程文件路径 本地目录
# 示例
scp root@192.168.1.100:/var/log/syslog ./ # 下载远程 /var/log/syslog 到本地当前目录shell
# 对比
压缩格式 命令 特点
.tar tar 仅打包(不压缩),需配合其他工具压缩
.tar.gz tar + gzip 高压缩率,最常用
.tar.bz2 tar + bzip2 压缩率比 gzip 更高,速度稍慢
.tar.xz tar + xz 压缩率最高,速度较慢
.zip zip/unzip 跨平台(Windows/Linux 通用)
.rar rar/unrar 需单独安装,Windows 常用tar 打包、解包、查看打包内容
shell
# 压缩
-c:创建新归档(打包)
-v:显示过程(verbose)
-f:指定归档文件名(必须放在最后)
-z:用 gzip 压缩(生成 .tar.gz)
-j:用 bzip2 压缩(生成 .tar.bz2)
-J:用 xz 压缩(生成 .tar.xz)
tar -cvf archive.tar dir1 dir2 # 仅打包,将dir1、dir2 打包成 archive.tar
tar -zcvf archive.tar.gz file1 dir1/ # 压缩为 .tar.gz(最常用)
tar -jcvf archive.tar.bz2 file1 dir1/ # 压缩为 .tar.bz2
tar -Jcvf archive.tar.xz file1 dir1/ # 压缩为 .tar.xz
# 解压
-x:解压归档
-v:显示过程
-f:指定归档文件
-z/-j/-J:对应上述压缩格式(自动识别,可省略
tar -xvf archive.tar # 仅解包
tar -zxvf archive.tar.gz # 解压 .tar.gz 到当前目录
tar -jxvf archive.tar.bz2 -C /tmp # 解压 .tar.bz2 到 /tmp 目录,-C 解压到的目标目录
tar -xvf archive.tar.xz # 解压 .tar.xz(省略 -J 也可自动识别)
# 查看打包内容
tar -tf result.tarzip 压缩和解压
shell
# 安装
sudo yum install zip unzip
# 压缩
zip -r archive.zip file1 dir1/ # 压缩文件/目录为 archive.zip,-r:递归压缩目录
# 解压
unzip archive.zip # 解压到当前目录
unzip archive.zip -d /target/dir # 解压到指定目录
# 查看压缩包内容(不解压)
unzip -l archive.zip总结
优先使用 .tar.gz(平衡压缩率和速度)或 .tar.xz(追求高压缩率)。
跨平台传输用 .zip。
解压时不确定格式?直接用 tar -xvf 文件名(tar 通常能自动识别压缩算法)。
