CentOS Stream 9入门学习教程,从入门到精通, CentOS Stream 9中的文件和目录管理(3)

CentOS Stream 9中的文件和目录管理

Linux文件和目录概述

Linux文件基础

Linux系统将一切视为文件,包括硬件设备、目录、普通文件等。文件主要分为以下几类:

  1. 普通文件(-):文本文件、二进制文件等
  2. 目录文件(d):包含其他文件和目录的列表
  3. 块设备文件(b):如硬盘、光驱等
  4. 字符设备文件©:如终端、键盘等
  5. 符号链接文件(l):指向另一个文件的指针
  6. 套接字文件(s):用于进程间通信
  7. 管道文件§ :用于进程间通信
    案例代码:查看文件类型
bash 复制代码
# 查看当前目录下所有文件的类型
file *
# 查看特定文件的类型
file /etc/passwd
# 输出示例:/etc/passwd: ASCII text
# 查看设备文件类型
file /dev/sda
# 输出示例:/dev/sda: block special

Linux目录基础

Linux采用树形目录结构,主要目录包括:

  • /:根目录,所有目录的起点
  • /bin:基本命令二进制文件
  • /boot:系统启动相关文件
  • /dev:设备文件
  • /etc:系统配置文件
  • /home:用户主目录
  • /lib:共享库文件
  • /mnt:临时挂载点
  • /opt:可选软件包
  • /proc:进程和内核信息
  • /root:root用户主目录
  • /sbin:系统管理员命令
  • /tmp:临时文件
  • /usr:用户程序和数据
  • /var:变量文件,如日志
    案例代码:查看目录结构
bash 复制代码
# 查看根目录结构
tree -L 1 /
# 查看特定目录结构
tree /etc
# 如果tree命令未安装,可以使用ls递归查看
ls -R /etc

文件操作命令

创建文件命令touch(或Vi/Vim、gedit)

touch命令

touch命令用于创建空文件或更新文件时间戳。
语法:

bash 复制代码
touch [选项] 文件名...

常用选项:

  • -a:只修改访问时间
  • -m:只修改修改时间
  • -t:使用指定时间戳
  • -c:不创建不存在的文件
    案例代码:
bash 复制代码
# 创建单个空文件
touch testfile.txt
# 创建多个空文件
touch file1.txt file2.txt file3.txt
# 使用模式匹配创建多个文件
touch report_{2023,2024}.txt
# 修改文件时间戳为当前时间
touch existingfile.txt
# 使用-t选项指定时间戳
touch -t 202301011200.00 oldfile.txt
# 使用-c选项不创建不存在的文件
touch -c nonexistingfile.txt
Vi/Vim编辑器

Vim是Linux上强大的文本编辑器。
基本操作:

  1. 打开文件:vim filename
  2. 进入插入模式:i
  3. 退出插入模式:Esc
  4. 保存并退出::wq
  5. 不保存退出::q!
    案例代码:
bash 复制代码
# 使用Vim创建并编辑文件
vim newfile.txt
# 进入插入模式(i)后输入内容,然后Esc退出插入模式,输入:wq保存退出
# 在Vim中打开文件并定位到第10行
vim +10 existingfile.txt
# 以只读模式打开文件
vim -R readonlyfile.txt
gedit编辑器

gedit是GNOME桌面环境的图形化文本编辑器。
案例代码:

bash 复制代码
# 在图形界面中打开gedit编辑器
gedit
# 使用gedit打开特定文件
gedit myfile.txt
# 在后台打开gedit编辑文件
gedit myfile.txt &

查看文件内容命令cat、more、less、head、tail

cat命令

cat命令用于连接文件并打印到标准输出。
语法:

bash 复制代码
cat [选项] 文件名...

常用选项:

  • -n:显示行号
  • -b:对非空行编号
  • -A:显示所有控制字符
  • -E:在每行末尾显示$符号
    案例代码:
bash 复制代码
# 查看单个文件内容
cat /etc/passwd
# 查看多个文件内容
cat file1.txt file2.txt
# 显示行号
cat -n /etc/passwd
# 对非空行编号
cat -b /etc/passwd
# 显示所有控制字符
cat -A /etc/passwd
# 将文件内容追加到另一个文件
cat file1.txt >> file2.txt
# 创建文件并输入内容(Ctrl+D结束)
cat > newfile.txt
more命令

more命令用于分页显示文件内容,适合查看长文件。
案例代码:

bash 复制代码
# 分页查看文件内容
more /var/log/messages
# 从第10行开始显示
more +10 /var/log/messages
# 每次显示2行
more -2 /var/log/messages
# 在more中搜索字符串(输入/后跟搜索词)
# 在more中可以使用以下命令:
# 空格键:下一页
# b键:上一页
# q键:退出
# /字符串:搜索字符串
less命令

less命令是more的增强版,提供更多功能。
案例代码:

bash 复制代码
# 分页查看文件内容
less /var/log/messages
# 查看多个文件
less file1.txt file2.txt
# 在less中可以使用以下命令:
# 空格键:下一页
# b键:上一页
# q键:退出
# /字符串:向下搜索
# ?字符串:向上搜索
# n键:重复上一次搜索
# N键:反向重复上一次搜索
# g键:跳转到文件开头
# G键:跳转到文件末尾
# h键:显示帮助
head命令

head命令用于显示文件开头部分内容。
语法:

bash 复制代码
head [选项] 文件名...

常用选项:

  • -n 数字:指定显示的行数
  • -c 数字:指定显示的字节数
  • -q:不显示文件名头信息
  • -v:始终显示文件名头信息
    案例代码:
bash 复制代码
# 显示文件前10行(默认)
head /etc/passwd
# 显示文件前5行
head -n 5 /etc/passwd
# 显示文件前20字节
head -c 20 /etc/passwd
# 显示多个文件的前3行
head -n 3 file1.txt file2.txt
# 不显示文件名头信息
head -q -n 3 file1.txt file2.txt
tail命令

tail命令用于显示文件末尾部分内容。
语法:

bash 复制代码
tail [选项] 文件名...

常用选项:

  • -n 数字:指定显示的行数
  • -c 数字:指定显示的字节数
  • -f:实时跟踪文件更新
  • -q:不显示文件名头信息
  • -v:始终显示文件名头信息
    案例代码:
bash 复制代码
# 显示文件末尾10行(默认)
tail /var/log/messages
# 显示文件末尾5行
tail -n 5 /var/log/messages
# 显示文件末尾20字节
tail -c 20 /var/log/messages
# 实时跟踪日志文件更新
tail -f /var/log/messages
# 显示多个文件的末尾3行
tail -n 3 file1.txt file2.txt
# 不显示文件名头信息
tail -q -n 3 file1.txt file2.txt

文件复制命令cp

cp命令用于复制文件或目录。
语法:

bash 复制代码
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录

常用选项:

  • -i:覆盖前提示
  • -r:递归复制目录
  • -p:保留文件属性
  • -a:归档模式,相当于-dpr
  • -v:显示复制过程
  • -f:强制覆盖
    案例代码:
bash 复制代码
# 复制单个文件
cp source.txt destination.txt
# 复制文件到目录
cp source.txt /path/to/directory/
# 复制多个文件到目录
cp file1.txt file2.txt /path/to/directory/
# 递归复制目录
cp -r /source/directory /destination/directory
# 保留文件属性复制
cp -p source.txt destination.txt
# 归档模式复制(保留所有属性)
cp -a /source/directory /destination/directory
# 覆盖前提示
cp -i source.txt destination.txt
# 显示复制过程
cp -v source.txt destination.txt
# 强制覆盖
cp -f source.txt destination.txt
# 复制时创建备份
cp --backup=numbered source.txt destination.txt

文件链接命令ln

ln命令用于创建文件链接,包括硬链接和符号链接。
语法:

bash 复制代码
ln [选项] 源文件 链接名

常用选项:

  • -s:创建符号链接(软链接)
  • -f:强制覆盖已存在的链接
  • -i:覆盖前提示
  • -v:显示创建过程
    案例代码:
bash 复制代码
# 创建硬链接
ln original.txt hardlink.txt
# 创建符号链接
ln -s original.txt symlink.txt
# 创建目录的符号链接
ln -s /path/to/directory directory_link
# 强制创建链接(覆盖已存在的链接)
ln -sf original.txt symlink.txt
# 创建链接前提示
ln -i original.txt symlink.txt
# 显示创建过程
ln -v original.txt symlink.txt
# 查看链接信息
ls -l symlink.txt
# 输出示例:lrwxrwxrwx 1 user group 10 Jan 1 12:00 symlink.txt -> original.txt
# 查看硬链接计数
ls -l original.txt
# 输出示例:-rw-r--r-- 2 user group 100 Jan 1 12:00 original.txt
# 其中"2"表示有两个硬链接指向该文件

文件移动命令mv

mv命令用于移动或重命名文件和目录。
语法:

bash 复制代码
mv [选项] 源文件 目标文件
mv [选项] 源文件... 目标目录

常用选项:

  • -i:覆盖前提示
  • -f:强制覆盖
  • -v:显示移动过程
  • -u:只在源文件比目标文件新时才移动
    案例代码:
bash 复制代码
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到目录
mv file.txt /path/to/directory/
# 移动多个文件到目录
mv file1.txt file2.txt /path/to/directory/
# 移动目录
mv /source/directory /destination/directory
# 覆盖前提示
mv -i source.txt destination.txt
# 强制覆盖
mv -f source.txt destination.txt
# 显示移动过程
mv -v source.txt destination.txt
# 只在源文件更新时才移动
mv -u source.txt destination.txt
# 移动并重命名
mv source.txt /path/to/directory/newname.txt

文件删除命令rm

rm命令用于删除文件和目录。
语法:

bash 复制代码
rm [选项] 文件...

常用选项:

  • -i:删除前提示
  • -r:递归删除目录
  • -f:强制删除,不提示
  • -v:显示删除过程
    案例代码:
bash 复制代码
# 删除单个文件
rm file.txt
# 删除多个文件
rm file1.txt file2.txt
# 删除前提示
rm -i file.txt
# 递归删除目录
rm -r directory/
# 强制递归删除目录(危险操作)
rm -rf directory/
# 显示删除过程
rm -v file.txt
# 删除以特定前缀开头的文件
rm temp_*
# 删除特定扩展名的文件
rm *.tmp
# 删除文件名包含空格的文件
rm "file with spaces.txt"
# 删除文件名以-开头的文件
rm -- -filename.txt
# 或者
rm ./-filename.txt

目录操作命令

改变和查看当前工作目录命令cd和pwd

cd命令

cd命令用于改变当前工作目录。
语法:

bash 复制代码
cd [目录]

特殊符号:

  • ~:用户主目录
  • -:前一个工作目录
  • ..:上级目录
  • .:当前目录
    案例代码:
bash 复制代码
# 切换到用户主目录
cd ~
# 或者
cd
# 切换到根目录
cd /
# 切换到上级目录
cd ..
# 切换到前一个工作目录
cd -
# 切换到指定目录
cd /path/to/directory
# 切换到相对路径目录
cd ../other_directory
# 使用TAB键自动补全目录名
cd /etc/sys<TAB>  # 会自动补全为/etc/systemd/
# 切换到包含空格的目录
cd "directory with spaces"
# 或者
cd directory\ with\ spaces
pwd命令

pwd命令用于显示当前工作目录的完整路径。
语法:

bash 复制代码
pwd [选项]

常用选项:

  • -L:显示逻辑路径(默认)
  • -P:显示物理路径,解析符号链接
    案例代码:
bash 复制代码
# 显示当前工作目录
pwd
# 显示逻辑路径(默认)
pwd -L
# 显示物理路径(解析符号链接)
pwd -P
# 将当前目录路径保存到变量
current_dir=$(pwd)
echo "Current directory: $current_dir"
# 使用pwd创建相对路径的绝对路径
absolute_path=$(pwd)/relative_file.txt

创建目录命令mkdir

mkdir命令用于创建目录。
语法:

bash 复制代码
mkdir [选项] 目录名...

常用选项:

  • -p:递归创建父目录
  • -m:设置目录权限
  • -v:显示创建过程
    案例代码:
bash 复制代码
# 创建单个目录
mkdir new_directory
# 创建多个目录
mkdir dir1 dir2 dir3
# 递归创建目录结构
mkdir -p parent/child/grandchild
# 创建目录并设置权限
mkdir -m 755 restricted_directory
# 显示创建过程
mkdir -v new_directory
# 创建目录并立即进入
mkdir new_directory && cd new_directory
# 创建目录名包含空格的目录
mkdir "directory with spaces"
# 创建目录名包含特殊字符的目录
mkdir 'directory-with-special-chars!@#'
# 使用变量创建目录
dir_name="data_$(date +%Y%m%d)"
mkdir $dir_name

列出目录内容命令ls

ls命令用于列出目录内容。
语法:

bash 复制代码
ls [选项] [文件或目录...]

常用选项:

  • -l:长格式显示
  • -a:显示所有文件,包括隐藏文件
  • -h:以人类可读格式显示文件大小
  • -r:逆序显示
  • -t:按修改时间排序
  • -S:按文件大小排序
  • -R:递归显示子目录内容
  • -d:显示目录本身而非内容
    案例代码:
bash 复制代码
# 基本列出目录内容
ls
# 长格式显示
ls -l
# 显示所有文件(包括隐藏文件)
ls -a
# 长格式显示所有文件
ls -la
# 以人类可读格式显示文件大小
ls -lh
# 按修改时间排序显示
ls -lt
# 按文件大小排序显示
ls -lS
# 递归显示子目录内容
ls -R
# 显示目录本身而非内容
ls -d */
# 显示文件inode信息
ls -i
# 显示文件权限的数字形式
ls -l | awk '{print $1 " " $9}'
# 组合多个选项
ls -lah
# 列出特定目录内容
ls /etc
# 列出多个目录内容
ls /etc /var
# 使用通配符列出特定文件
ls *.txt
# 按扩展名排序显示
ls -lX
# 按文件扩展名分组显示
ls --group-directories-first

删除目录命令rmdir和rm

rmdir命令

rmdir命令用于删除空目录。
语法:

bash 复制代码
rmdir [选项] 目录名...

常用选项:

  • -p:递归删除父目录
  • -v:显示删除过程
    案例代码:
bash 复制代码
# 删除空目录
rmdir empty_directory
# 删除多个空目录
rmdir dir1 dir2 dir3
# 递归删除父目录(如果父目录也变为空)
rmdir -p parent/child
# 显示删除过程
rmdir -v empty_directory
# 尝试删除非空目录(会失败)
rmdir non_empty_directory
# 输出:rmdir: failed to remove 'non_empty_directory': Directory not empty
rm命令删除目录

rm命令与-r选项结合可以删除非空目录。
案例代码:

bash 复制代码
# 递归删除目录及其内容
rm -r directory
# 强制递归删除目录(危险操作)
rm -rf directory
# 删除前提示
rm -ri directory
# 显示删除过程
rm -rv directory
# 删除多个目录
rm -r dir1 dir2 dir3
# 删除目录名包含空格的目录
rm -r "directory with spaces"
# 删除以特定前缀开头的目录
rm -r temp_*
# 使用find命令删除特定条件的目录
find . -type d -name "test_*" -exec rm -r {} +

文件归档命令tar

tar命令用于创建、查看和提取归档文件。
语法:

bash 复制代码
tar [选项] 归档文件 [文件或目录...]

常用选项:

  • -c:创建归档
  • -x:提取归档
  • -t:列出归档内容
  • -v:显示详细过程
  • -f:指定归档文件名
  • -z:使用gzip压缩
  • -j:使用bzip2压缩
  • -J:使用xz压缩
  • -p:保留文件权限
  • -C:指定提取目录
    案例代码:
bash 复制代码
# 创建tar归档
tar -cvf archive.tar file1.txt file2.txt directory/
# 创建gzip压缩的tar归档
tar -czvf archive.tar.gz file1.txt file2.txt directory/
# 创建bzip2压缩的tar归档
tar -cjvf archive.tar.bz2 file1.txt file2.txt directory/
# 创建xz压缩的tar归档
tar -cJvf archive.tar.xz file1.txt file2.txt directory/
# 列出tar归档内容
tar -tvf archive.tar
# 列出gzip压缩的tar归档内容
tar -tzvf archive.tar.gz
# 提取tar归档
tar -xvf archive.tar
# 提取gzip压缩的tar归档
tar -xzvf archive.tar.gz
# 提取到指定目录
tar -xvf archive.tar -C /path/to/directory/
# 保留文件权限创建归档
tar -cpvf archive.tar file1.txt file2.txt
# 排除特定文件创建归档
tar -cvf archive.tar --exclude='*.tmp' directory/
# 从文件列表创建归档
tar -cvf archive.tar -T filelist.txt
# 追加文件到现有归档
tar -rvf archive.tar newfile.txt
# 更新归档中的文件(如果文件较新)
tar -uvf archive.tar updatedfile.txt
# 比较归档与文件系统
tar -dvf archive.tar
# 删除归档中的文件
tar --delete -f archive.tar filetodelete.txt
# 使用通配符提取特定文件
tar -xvf archive.tar --wildcards '*.txt'
# 显示归档统计信息
tar -tvf archive.tar | wc -l

综合案例:Linux操作系统漫游指南

案例概述

本案例将综合运用本章学习的文件和目录管理命令,完成一个实际任务:在CentOS Stream 9系统中创建一个"Linux操作系统漫游指南"项目,包括文档结构创建、文件内容管理、归档备份等操作。

案例详解

步骤1:创建项目目录结构
bash 复制代码
# 创建项目根目录
mkdir -p ~/linux_guide/{docs,scripts,examples,archives}
# 验证目录结构
tree ~/linux_guide
# 或者使用ls -R查看
ls -R ~/linux_guide
步骤2:创建项目文档
bash 复制代码
# 进入项目目录
cd ~/linux_guide
# 创建主文档文件
touch docs/{README.md,installation.md,basic_commands.md,file_management.md}
# 创建脚本文件
touch scripts/{setup.sh,cleanup.sh,backup.sh}
# 创建示例文件
touch examples/{sample1.txt,sample2.txt,sample3.txt}
# 验证创建的文件
find . -type f
步骤3:编辑文档内容
bash 复制代码
# 使用Vim编辑README.md
vim docs/README.md
# 输入以下内容:
# # Linux操作系统漫游指南
# 
# 本指南包含以下部分:
# 1. 系统安装
# 2. 基本命令
# 3. 文件管理
# 
# 作者:Linux学习者
# 日期:$(date +%Y-%m-%d)
# 使用cat创建简单文档
cat > docs/installation.md << EOF
# 系统安装指南
## 1. 下载CentOS Stream 9 ISO镜像
从官方网站下载最新镜像文件。
## 2. 创建启动介质
使用dd命令或Rufus工具创建启动U盘。
## 3. 安装步骤
1. 从启动介质启动
2. 选择语言和键盘布局
3. 配置安装目标
4. 设置用户账户
5. 开始安装
## 4. 安装后配置
- 更新系统:sudo dnf update
- 安装常用软件:sudo dnf install vim git tree
EOF
# 使用echo追加内容到文档
echo -e "\n## 5. 常见问题\n\n问题:无法连接网络\n解决:检查网络配置和驱动程序" >> docs/installation.md
步骤4:创建示例文件
bash 复制代码
# 创建示例文本文件
echo "这是第一个示例文件" > examples/sample1.txt
echo "这是第二个示例文件" > examples/sample2.txt
echo "这是第三个示例文件" > examples/sample3.txt
# 创建示例脚本
cat > scripts/setup.sh << 'EOF'
#!/bin/bash
# 系统初始化脚本
echo "开始系统初始化..."
# 更新系统
sudo dnf update -y
# 安装常用工具
sudo dnf install -y vim git tree wget curl
# 创建开发目录
mkdir -p ~/projects/{dev,test,docs}
echo "系统初始化完成!"
EOF
# 设置脚本可执行权限
chmod +x scripts/setup.sh
步骤5:文件操作练习
bash 复制代码
# 复制文件
cp docs/README.md docs/README_backup.md
# 创建符号链接
ln -s docs/README.md current_guide.md
# 移动文件
mv examples/sample3.txt docs/
# 重命名文件
mv examples/sample2.txt examples/sample_renamed.txt
# 查看文件内容
cat docs/README.md
# 查看文件前几行
head -n 5 docs/installation.md
# 查看文件后几行
tail -n 3 docs/installation.md
# 查看文件类型
file scripts/setup.sh
步骤6:创建项目归档
bash 复制代码
# 创建项目归档
tar -czvf archives/linux_guide_$(date +%Y%m%d).tar.gz \
    docs/ scripts/ examples/ README.md
# 验证归档内容
tar -tzvf archives/linux_guide_$(date +%Y%m%d).tar.gz
# 创建排除归档文件的完整备份
tar -czvf archives/full_backup_$(date +%Y%m%d).tar.gz \
    --exclude='archives' .
步骤7:清理和整理
bash 复制代码
# 创建清理脚本
cat > scripts/cleanup.sh << 'EOF'
#!/bin/bash
# 项目清理脚本
echo "开始清理项目..."
# 删除临时文件
find . -name "*.tmp" -delete
find . -name "*.log" -delete
# 删除备份文件
rm -f docs/README_backup.md
# 删除符号链接
rm -f current_guide.md
echo "清理完成!"
EOF
# 设置可执行权限
chmod +x scripts/cleanup.sh
# 执行清理脚本
./scripts/cleanup.sh
步骤8:创建自动化备份脚本
bash 复制代码
# 创建备份脚本
cat > scripts/backup.sh << 'EOF'
#!/bin/bash
# 自动备份脚本
# 设置变量
PROJECT_DIR="$HOME/linux_guide"
BACKUP_DIR="$PROJECT_DIR/archives"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="linux_guide_backup_$DATE.tar.gz"
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 创建备份
tar -czf "$BACKUP_DIR/$BACKUP_FILE" -C "$PROJECT_DIR" \
    --exclude='archives' .
# 保留最近5个备份,删除旧备份
cd "$BACKUP_DIR"
ls -t linux_guide_backup_*.tar.gz | tail -n +6 | xargs -r rm
echo "备份完成: $BACKUP_DIR/$BACKUP_FILE"
EOF
# 设置可执行权限
chmod +x scripts/backup.sh
# 执行备份脚本
./scripts/backup.sh
步骤9:项目文档更新
bash 复制代码
# 更新README.md文件
cat >> docs/README.md << EOF
## 项目结构
\`\`\`
linux_guide/
├── docs/           # 文档目录
├── scripts/        # 脚本目录
├── examples/       # 示例文件目录
└── archives/       # 归档目录
\`\`\`
## 使用说明
1. 阅读docs/目录下的文档了解Linux基础知识
2. 运行scripts/setup.sh初始化开发环境
3. 使用scripts/backup.sh定期备份项目
4. 运行scripts/cleanup.sh清理临时文件
## 更新日志
- $(date +%Y-%m-%d): 初始版本创建
EOF
# 查看更新后的文档
less docs/README.md
步骤10:最终验证
bash 复制代码
# 查看完整项目结构
tree -a
# 统计文件数量
find . -type f | wc -l
# 查看项目总大小
du -sh .
# 查看最新备份
ls -lh archives/ | tail -n 1
# 验证脚本权限
ls -l scripts/

通过这个综合案例,我们实践了本章学习的所有文件和目录管理命令,包括:

  • 创建目录和文件
  • 编辑文件内容
  • 复制、移动、链接和删除文件
  • 查看文件内容
  • 创建和管理归档文件
  • 编写和使用脚本自动化任务
    这个案例展示了如何在实际项目中组合使用这些命令来完成复杂的文件管理任务。
相关推荐
KingRumn12 小时前
Linux信号之标准信号与实时信号
linux·算法
QT 小鲜肉14 小时前
【Linux命令大全】001.文件管理之git命令(实操篇)
linux·服务器·笔记·git·elasticsearch
半夏知半秋14 小时前
docker常用指令整理
运维·笔记·后端·学习·docker·容器
sishen419915 小时前
嵌入式Linux没有学习方向怎么办,嵌入式Linux怎么学
linux
逆风水手15 小时前
Ansible自动化运维入门指南
linux·运维·自动化·ansible
蒸蒸yyyyzwd15 小时前
网络编程——threadpool.h学习笔记
笔记·学习
浪子不回头41515 小时前
SGLang学习笔记
人工智能·笔记·学习
deng-c-f16 小时前
Linux C/C++ 学习日记(53):原子操作(二):实现shared_ptr
开发语言·c++·学习
旖旎夜光16 小时前
Linux(3)(下)
linux·学习