1、目录操作函数
ls(列出目录内容)
- 用途:列出指定目录中的文件和子目录。
- 语法 :
ls [选项] [路径]- 常用选项:
-l:以长格式显示文件详细信息(权限、所有者、大小、时间等)。-a:显示隐藏文件(以.开头的文件)。-R:递归列出子目录内容。
# 列出当前目录下的所有文件和子目录
ls
# 列出当前目录的详细信息(包含隐藏文件)
ls -la # 可简写成ll
# 递归列出当前目录及其子目录的内容
ls -R
cd(切换目录)
- 用途:更改当前工作目录。
- 语法 :
cd [路径]- 常用路径:
~:用户主目录(如/home/username)。/:根目录。..:上一级目录。
# 切换到用户主目录
cd ~
# 切换到根目录
cd /
# 切换到上一级目录
cd ..
mkdir(创建目录)
- 用途:创建新目录。
- 语法 :
mkdir [选项] 目录名- 常用选项:
-p:递归创建目录(自动创建父目录)。-p,--parents的缩写,表示自动创建路径中的父目录(如果它们不存在)
# 创建单个目录
mkdir new_folder
# 递归创建多级目录(如 a/b/c)
mkdir -p a/b/c
rmdir(删除空目录)
- 用途:删除空目录。
- 语法 :
rmdir [目录名]- 注意:目录必须为空,否则会报错。
# 删除空目录 example_dir
rmdir example_dir
rm(删除文件或目录)
- 用途:删除文件或目录。
- 语法 :
rm [选项] 文件或目录- 常用选项:
-r:递归删除目录及其内容,recursive。-f:强制删除(不提示确认),force。
# 删除文件 file.txt
rm file.txt
# 递归删除目录及其内容(强制删除)
rm -rf directory_name
cp(复制文件或目录)
- 用途:复制文件或目录。
- 语法 :
cp [选项] 源路径 目标路径- 常用选项:
-r:递归复制目录。-i:交互式复制(覆盖前提示),interactive。
# 复制文件
cp source.txt destination.txt
# 递归复制目录
cp -r source_dir/ destination_dir/
mv(移动或重命名文件/目录)
- 用途:移动文件或目录,或重命名文件/目录。
- 语法:mv [选项] 源文件/目录 目标路径/新名称
- 常用选项:
-v:显示详细操作信息-i:交互式操作(防止覆盖)-n:禁止覆盖已存在的文件-u:当源文件比目标文件新,或者目标文件不存在时,才执行移动操作-b:覆盖前备份原文件
# 1. 创建测试文件和目录
mkdir -p test_dir1 test_dir2
touch test_dir1/file1.txt test_dir1/file2.txt test_dir1/file3.txt
echo "初始文件结构:"
ls -R test_dir1
# 输出:
# test_dir1:
# file1.txt file2.txt file3.txt
# ----------------------------
# 2. 移动单个文件
# 将 file1.txt 移动到 test_dir2
mv test_dir1/file1.txt test_dir2/
echo "移动单个文件后:"
ls -R test_dir2
# 输出:
# test_dir2:
# file1.txt
# ----------------------------
# 3. 重命名文件
# 将 file2.txt 重命名为 new_file.txt
mv test_dir1/file2.txt test_dir1/new_file.txt
echo "重命名文件后:"
ls test_dir1
# 输出:
# file3.txt new_file.txt
# ----------------------------
# 4. 移动多个文件
# 将多个文件移动到目标目录
mv test_dir1/file3.txt test_dir1/new_file.txt test_dir2/
echo "移动多个文件后:"
ls -R test_dir2
# 输出:
# test_dir2:
# file1.txt file3.txt new_file.txt
# ----------------------------
# 5. 使用 -i 防止覆盖(交互式)
# 如果目标文件存在,会提示是否覆盖
# 示例:尝试覆盖 test_dir2 中的 file1.txt
mv -i test_dir1/file1.txt test_dir2/file1.txt
# 输出示例:
# mv: overwrite 'test_dir2/file1.txt'? y
# ----------------------------
# 6. 使用 -v 显示详细操作
# 显示移动过程的详细信息
mv -v test_dir1/file1.txt test_dir2/
# 输出示例:
# 'test_dir1/file1.txt' -> 'test_dir2/file1.txt'
# ----------------------------
# 7. 使用 -n 禁止覆盖
# 如果目标文件存在,跳过操作
mv -n test_dir1/file1.txt test_dir2/
# 输出:无(因为目标文件已存在)
# ----------------------------
# 8. 使用通配符批量移动
# 移动所有 .txt 文件
touch test_dir1/a.txt test_dir1/b.txt
mv test_dir1/*.txt test_dir2/
echo "通配符批量移动后:"
ls -R test_dir2
# 输出示例:
# test_dir2:
# a.txt b.txt file1.txt file3.txt new_file.txt
# ----------------------------
# 9. 使用 -b 覆盖前备份
# 覆盖前备份原文件(备份文件名加 ~)
mv -b test_dir2/file1.txt test_dir2/backup.txt
echo "覆盖前备份示例:"
ls -R test_dir2
# 输出示例:
# test_dir2:
# backup.txt file1.txt~ a.txt b.txt file3.txt new_file.txt
# ----------------------------
# 10. 结合 find 移动特定文件
# 查找并移动所有 .log 文件
touch test_dir1/sample.log
find test_dir1 -name "*.log" -exec mv {} test_dir2/ \;
echo "find + mv 示例:"
ls -R test_dir2
# 输出示例:
# test_dir2:
# sample.log backup.txt file1.txt~ a.txt b.txt file3.txt new_file.txt
# ----------------------------
# 11. 移动目录
# 移动整个目录及其内容
mv test_dir1 test_dir2/
echo "移动目录后:"
ls -R test_dir2
# 输出示例:
# test_dir2:
# sample.log backup.txt file1.txt~ a.txt b.txt file3.txt new_file.txt test_dir1
# test_dir2/test_dir1:
# (空目录,因为所有文件已被移动)
find(查找文件或目录)
- 用途:在目录树中查找文件或目录。
- 语法 :
find [路径] [表达式]- 常用选项:
-name:按名称查找。-type:按类型查找(f表示文件,d表示目录)。-exec:对查找到的文件执行命令。\; 表示-exec命令的结束(;必须用反斜杠转义,避免被 shell 提前解析)。{}:占位符,表示当前找到的文件名。
# 在当前目录下查找所有以 .txt 结尾的文件
find . -name "*.txt"
# 查找当前目录下的所有目录
find . -type d
# 查找当前目录下的所有文件
find . -type f
# 查找并删除path路径下所有 .tmp 文件
find /path -name "*.tmp" -exec rm -f {} \;
2、文本处理函数
cat(查看文件内容)
- 用途 :
cat(concatenate and print),主要用于查看文件内容、创建文件、合并文件以及结合其他工具进行文本处理。- 语法 :
cat [选项] 文件名- 常用选项:
-n:显示行号,--number。-b:显示非空行的行号,--number-nonblank。-v:可显示文件中的特殊字符(如制表符、换行符等)-E:可以在每行的行尾显示$符号
# 查看文件内容
cat file.txt
# 查看文件内容并显示行号
cat -n file.txt
# 查看文件内容并显示特殊字符
cat -v example.txt
# 输出文件内容,并在每行末尾显示 $
cat -E filename.txt
# 通过重定向操作符 >,可以创建一个新文件并写入内容
cat > newfile.txt # 输入内容后,按 Ctrl+D 结束输入并保存
# 举例
cat > greeting.txt
Hello, World!
^D (按 Ctrl+D)
# 使用 >> 重定向操作符,可以将内容追加到已有文件的末尾。
cat >> greeting.txt
Goodbye, World!
^D (按 Ctrl+D)
# cat 可以将多个文件的内容合并,并输出到一个新文件或直接显示在终端。
cat file1.txt file2.txt > merged.txt
more(分页查看文件内容)
用途:快速查看小型文件,功能简单直观。
基本功能
单向分页 :只能向下翻页(
more的全称是 "more pages")。基础搜索 :支持向前搜索(
/),但无法回退。简单操作:适合快速查看小型文件或简单分页。
常用操作
按键 功能 空格键 向下翻一页 Enter 向下翻一行 q退出 /向前搜索(输入关键词) =显示当前行号
- 语法:
more 文件名
# 分页查看文件内容
more large_file.txt
less(分页查看文件内容)
用途:查看大文件(如日志文件)、需要搜索、跳转或实时跟踪的场景
基本功能
- 双向分页 :支持上下翻页(
less的全称是 "less is more",功能比more更强大)。- 高级搜索 :支持双向搜索(
/向下,?向上)。- 跳转功能 :可直接跳转到文件开头(
g)、结尾(G)或指定行号(如50G)。- 实时跟踪 :支持类似
tail -f的实时跟踪(F键)。常用操作
按键 功能 空格键 向下翻一页 b向上翻一页 ↑/↓逐行滚动 /向下搜索(高亮结果) ?向上搜索 n跳转到下一个匹配项 N跳转到上一个匹配项 g跳转到文件开头 G跳转到文件结尾 F实时跟踪文件(类似 tail -f)q退出
less large_log_file.log # 查看大文件
less +/error /var/log/syslog # 直接搜索 "error"
less +F /var/log/syslog # 实时跟踪日志(按 Ctrl+C 退出)
head / tail(查看文件头/尾)
- 用途:查看文件的前几行或后几行。
- 语法:
head [选项] 文件名tail [选项] 文件名- 常用选项:
-n:指定行数。-f(tail):实时跟踪文件尾部内容。
# 查看文件的前10行
head -n 10 file.txt
# 查看文件的最后5行
tail -n 5 file.txt
# 实时跟踪日志文件
tail -f /var/log/syslog
grep(文本搜索)
- 用途 :文本搜索工具,支持 正则表达式,用于在文件中查找匹配特定模式的行
- 语法:grep [选项] "搜索模式" 文件路径
- 常用选项:
-i:忽略大小写。-r:递归搜索目录。-v:反向匹配(显示不包含模式的行)。- -n:显示行号
- -l:仅显示文件名
- -c:统计匹配行数
选项 功能 示例 -i忽略大小写 grep -i "hello" file.txt-r递归搜索目录 grep -r "pattern" /path/to/dir-n显示行号 grep -n "error" file.txt-l仅显示文件名 grep -l "keyword" *.txt-v反向匹配 grep -v "success" file.txt-c统计匹配行数 grep -c "error" file.txt-w完整单词匹配 grep -w "word" file.txt-E使用扩展正则 `grep -E "error -o仅输出匹配部分 grep -o "yes" file.txt-A n显示匹配行后 n 行 grep -A 3 "error" file.txt-B n显示匹配行前 n 行 grep -B 2 "error" file.txt-C n显示匹配行前后 n 行 grep -C 2 "error" file.txt
# 1. 创建测试文件和目录
mkdir -p test_dir
touch test_dir/file1.txt test_dir/file2.txt test_dir/file3.txt
echo "hello world" > test_dir/file1.txt
echo "Hello World" >> test_dir/file1.txt
echo "error occurred" >> test_dir/file2.txt
echo "ERROR: system failure" >> test_dir/file2.txt
echo "TODO: fix this" > test_dir/file3.txt
echo "FIXME: update code" >> test_dir/file3.txt
echo "Initial files created in test_dir/"
# 2. 基础用法
echo -e "\n--- 基础用法 ---"
grep "hello" test_dir/file1.txt
# 输出:hello world
grep -i "hello" test_dir/file1.txt
# 输出:
# hello world
# Hello World
grep -n "error" test_dir/file2.txt
# 输出:
# 1:error occurred
# 2:ERROR: system failure
# 3. 递归搜索
echo -e "\n--- 递归搜索 ---"
grep -r "TODO" test_dir/
# 输出:
# test_dir/file3.txt:TODO: fix this
# 4. 正则表达式
echo -e "\n--- 正则表达式 ---"
grep "^error" test_dir/file2.txt
# 输出:error occurred
grep -E "error|fail" test_dir/file2.txt
# 输出:
# error occurred
# ERROR: system failure
# 5. 上下文显示
echo -e "\n--- 上下文显示 ---"
grep -C 1 "error" test_dir/file2.txt
# 输出:
# error occurred
# ERROR: system failure
# 6. 统计与过滤
echo -e "\n--- 统计与过滤 ---"
grep -c "error" test_dir/file2.txt
# 输出:2
grep -v "error" test_dir/file2.txt
# 输出:
# TODO: fix this
# FIXME: update code
# 7. 高级用法
echo -e "\n--- 高级用法 ---"
grep -o "hello" test_dir/file1.txt
# 输出:
# hello
# Hello
grep -rl "TODO" test_dir/
# 输出:test_dir/file3.txt
# 8. 结合 find 命令
echo -e "\n--- 结合 find ---"
find test_dir/ -name "*.txt" -exec grep -l "TODO" {} \;
# 输出:test_dir/file3.txt
# 9. 处理压缩文件(需安装 zgrep)
# 示例(需预先压缩文件):
# gzip test_dir/file1.txt
# zgrep "hello" test_dir/file1.txt.gz
# 10. 清理测试环境
echo -e "\n--- 清理测试数据 ---"
rm -rf test_dir
echo "All test data removed."
sed(流编辑器)
- 用途:对文本进行流式编辑(替换、删除、插入等)。
- 语法 :
sed [选项] '命令' 文件名- 常用命令:
s/原字符串/新字符串/:替换字符串。d:删除行。
# 替换文件中的 "old" 为 "new"
sed 's/old/new/g' file.txt
# 删除文件中的空行
sed '/^$/d' file.txt
# 将替换结果保存到新文件
sed 's/old/new/g' file.txt > new_file.txt
awk(文本分析和处理)
- 用途:按列处理文本数据(默认以空格或Tab分隔)。
- 语法 :
awk 'BEGIN{动作} {动作} END{动作}' 文件名- 常用操作:
$1:第一列,$2:第二列,依此类推。$0:整行内容。
# 打印文件的第1列和第3列
awk '{print $1, $3}' file.txt
# 计算文件中第3列的总和
awk '{sum += $3} END {print sum}' file.txt
# 按条件筛选行(第2列大于 100)
awk '$2 > 100' file.txt
sort(排序文本)
- 用途:对文本行进行排序。
- 语法 :
sort [选项] 文件名- 常用选项:
-n:按数字排序。-r:逆序排序。-k:指定排序列。
# 对文件内容按字母顺序排序
sort file.txt
# 按第2列数字排序
sort -n -k 2 file.txt
# 逆序排序
sort -r file.txt
uniq(去重)
- 用途:去除重复行。
- 语法 :
uniq [选项] 文件名- 常用选项:
-d:仅显示重复行。-u:仅显示唯一行。
# 去除相邻重复行
uniq file.txt
# 显示所有重复行
uniq -d file.txt
wc(统计行数、单词数、字节数)
- 用途:统计文件的行数、单词数和字节数。
- 语法 :
wc [选项] 文件名- 常用选项:
-l:统计行数。-w:统计单词数。-c:统计字节数。
# 统计文件的行数
wc -l file.txt
# 统计单词数
wc -w file.txt
# 统计字节数
wc -c file.txt
3、其他实用函数
echo(输出内容)
用途:
echo是 Linux/Unix 系统中最基础的命令之一,主要用于:
- 输出文本:将指定的字符串或变量值输出到终端或文件。
- 调试脚本:在 Shell 脚本中打印变量值或调试信息。
- 格式化输出:通过转义字符控制输出格式(如换行、制表符等)。
- 重定向输出:将输出内容写入文件或追加到文件末尾。
语法
echo [选项] [字符串]
- 选项:控制输出行为(如是否换行、是否解析转义字符)。
- 字符串:要输出的内容,可以是普通文本、变量或转义字符组合。
常用选项
选项 功能 示例 -n禁止换行 echo -n "Hello"<br>输出后光标不换行。-e启用转义字符 echo -e "Hello\nWorld"<br>\n表示换行。-E禁用转义字符 echo -E "Hello\nWorld"<br>\n被当作普通字符输出。
场景 命令 功能 简单输出 echo "text"输出文本并换行 禁止换行 echo -n "text"输出文本后不换行 格式化输出 echo -e "text\nwith\nformat"使用转义字符控制格式 输出变量 echo "Value: $VAR"显示变量值 写入文件 echo "text" > file.txt覆盖文件内容 追加文件 echo "text" >> file.txt追加到文件末尾
# 1. 创建测试目录和文件
mkdir -p test_echo
echo "Initial test directory created."
# 输出:Initial test directory created.
# 2. 基础用法
echo -e "\n--- 基础用法 ---"
echo "Hello, Ubuntu!"
# 输出:Hello, Ubuntu!
# 3. 禁止换行(-n 选项)
echo -n "No newline: "
echo "This is on the same line."
# 输出:No newline: This is on the same line.
# 4. 转义字符(-e 选项)
echo -e "\n--- 转义字符 ---"
echo -e "This is a new line.\nAnd this is another line."
# 输出:
# This is a new line.
# And this is another line.
echo -e "Tab\tseparated\ttext"
# 输出:Tab separated text
# 5. 反斜杠转义
echo -e "\n--- 反斜杠处理 ---"
echo "This is a backslash: \\"
# 输出:This is a backslash: \
# 6. 输出到文件(重定向)
echo -e "\n--- 输出到文件 ---"
echo "Sample text" > test_echo/sample.txt
cat test_echo/sample.txt
# 输出:Sample text
echo "Append text" >> test_echo/sample.txt
cat test_echo/sample.txt
# 输出:
# Sample text
# Append text
# 7. 变量输出
echo -e "\n--- 变量输出 ---"
NAME="Ubuntu"
echo "Operating System: $NAME"
# 输出:Operating System: Ubuntu
# 8. 换行控制(-e 与 \c)
echo -e "\n--- 换行控制 ---"
echo -e "This is line 1.\c"
echo "This is line 2."
# 输出:This is line 1.This is line 2.
# 9. 特殊字符处理(-e)
echo -e "\n--- 特殊字符处理 ---"
echo -e "This is a bell: \a"
# 输出:This is a bell: [响铃]
echo -e "This is a backspace: \b\b\b"
# 输出:This is a backspace: (删除最后三个字符)
# 10. 格式化输出(转义字符组合)
echo -e "\n--- 格式化输出 ---"
echo -e "Vertical tab:\vline"
# 输出:
# Vertical tab:
# line
echo -e "Carriage return:\rWorld"
# 输出:World(覆盖前文)
# 11. 结合其他命令
echo -e "\n--- 结合其他命令 ---"
DATE=$(date)
echo "Current date and time: $DATE"
# 输出:Current date and time: [当前时间]
# 12. 清理测试环境
echo -e "\n--- 清理测试数据 ---"
rm -rf test_echo
echo "All test data removed."
# 输出:All test data removed.
touch(创建空文件)
- 用途:创建一个空文件或更新文件的时间戳。
- 语法 :
touch 文件名
# 创建空文件
touch new_file.txt
# 更新文件的时间戳
touch existing_file.txt
chmod(修改文件权限)
- 用途:更改文件或目录的权限。
- 语法 :
chmod [权限模式] 文件或目录- 权限模式:
u(用户)、g(组)、o(其他)、a(所有)。+(添加权限)、-(移除权限)、=(设置权限)。- 权限:
r(读)、w(写)、x(执行)。
# 给文件所有者添加执行权限
chmod u+x script.sh
# 设置文件权限为 755(用户可读写执行,其他用户可读执行)
chmod 755 file.txt
chown(修改文件所有者)
- 用途:更改文件或目录的所有者和所属组。
- 语法 :
chown [用户:组] 文件或目录
# 更改文件所有者为 user1
chown user1 file.txt
# 更改文件所有者为 user1,所属组为 group1
chown user1:group1 file.txt
tar(打包和解包)
- 用途 :创建或提取
.tar或.tar.gz文件。- 语法:
- 打包:
tar -cvf 压缩包名 路径- 解包:
tar -xvf 压缩包名- 常用选项:
z:支持.gz压缩。j:支持.bz2压缩。
# 打包文件夹
tar -cvf archive.tar folder/
# 解包 .tar.gz 文件
tar -xzvf archive.tar.gz
gzip / gunzip(压缩和解压)
- 用途 :压缩或解压
.gz文件。- 语法:
- 压缩:
gzip 文件名- 解压:
gunzip 文件名.gz
# 压缩文件
gzip file.txt
# 解压文件
gunzip file.txt.gz