文件与目录操作核心命令详解
- cd - 切换目录
基本用法
# 切换到主目录
cd
cd ~
cd $HOME
# 切换到上次所在的目录
cd -
# 切换到上级目录
cd ..
# 切换到上两级目录
cd ../..
# 切换到根目录
cd /
# 使用绝对路径
cd /usr/local/bin
# 使用相对路径
cd ./subdir
cd ../otherdir
# 切换到用户名的主目录
cd ~username # 需要权限
高级技巧
# 1. 使用变量
project="/var/www/project"
cd "$project"
# 2. 快速返回原目录
cd /some/deep/path
# ...执行操作...
cd - # 返回之前的目录
# 3. 使用通配符
cd /usr/share/*info # 如果有唯一匹配
# 4. 使用 pushd/popd 替代 cd
pushd /dir1 # 进入并保存到目录栈
pushd /dir2 # 再进入一个
dirs -v # 查看目录栈
popd # 返回上一个目录
popd # 再返回
实用别名
# 添加到 ~/.bashrc
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
# 快速切换到常用目录
alias web='cd /var/www/html'
alias logs='cd /var/log'
alias docs='cd ~/Documents'
- pwd - 显示当前目录
# 显示当前工作目录
pwd
# 输出:/home/user/projects
# 显示物理路径(解析符号链接)
pwd -P
# 显示逻辑路径(默认)
pwd -L
实际应用
# 1. 在脚本中记录当前位置
CURRENT_DIR=$(pwd)
cd /some/other/dir
# 执行操作
cd "$CURRENT_DIR"
# 2. 创建基于当前路径的变量
BASE_DIR=$(pwd)
LOG_FILE="$BASE_DIR/logs/app.log"
# 3. 配合 find 命令
find "$(pwd)" -name "*.txt"
# 4. 显示目录信息
echo "当前目录: $(pwd)"
echo "用户: $USER"
echo "时间: $(date)"
- ls - 列出目录内容
基本格式
ls [选项] [文件/目录...]
常用选项组合
选项 说明 常用组合
-l 长格式显示 ls -l
-a 显示所有文件(包括隐藏文件) ls -la
-h 人类可读大小(配合 -l) ls -lh
-t 按修改时间排序 ls -lt
-r 反向排序 ls -ltr
-S 按文件大小排序 ls -lS
-R 递归显示子目录 ls -R
-1 每行显示一个文件 ls -1
-F 显示文件类型标识符 ls -F
--color 彩色显示(默认开启) ls --color=auto
详细示例
基本查看
# 简单列出
ls
# 列出详细信息
ls -l
# 输出示例:
# -rw-r--r-- 1 user group 1024 Jan 28 10:00 file.txt
# drwxr-xr-x 2 user group 4096 Jan 28 09:00 directory/
# 列解释:
# 权限 链接数 所有者 组 大小 修改时间 名称
显示所有文件
# 包括隐藏文件(以 . 开头)
ls -a
ls -la # 详细信息 + 所有文件
# 常用隐藏文件:
.bashrc # bash配置
.ssh/ # SSH密钥
.git/ # Git仓库
.vimrc # vim配置
文件排序和筛选
# 按时间排序(最新在前)
ls -lt
# 按时间反向排序(最旧在前)
ls -ltr
# 按文件大小排序(最大在前)
ls -lS
# 按扩展名排序
ls -lX
# 只显示目录
ls -d */
ls -l | grep '^d' # 只显示目录行
# 只显示文件(非目录)
ls -l | grep -v '^d'
特殊格式显示
# 每行一个文件
ls -1
# 显示文件类型标识符
ls -F
# / 表示目录
# * 表示可执行文件
# @ 表示符号链接
# | 表示管道
# = 表示套接字
# 彩色显示控制
ls --color=always # 总是彩色
ls --color=never # 从不彩色
ls --color=auto # 自动判断(默认)
# 逗号分隔
ls -m # file1, file2, file3
# 水平输出
ls -x # 按行排列
递归显示
# 递归显示所有子目录
ls -R
# 递归显示详细信息
ls -lR
# 递归并过滤
ls -R | grep "\.txt$"
find . -name "*.txt" -ls # 更好的替代
时间格式控制
# 完整时间格式
ls -l --full-time
# 自定义时间格式
ls -l --time-style=long-iso # 2023-01-28 10:30:00
ls -l --time-style=full-iso # 2023-01-28T10:30:00.000000000+0800
ls -l --time-style=locale # 本地化格式
ls -l --time-style=+"%Y-%m-%d %H:%M:%S" # 自定义
# 按不同时间排序
ls -lt # 修改时间(默认)
ls -lc # 状态变更时间
ls -lu # 访问时间
高级筛选
# 显示文件大小单位
ls -lh
# -rw-r--r-- 1 user group 1.0K Jan 28 10:00 small.txt
# -rw-r--r-- 1 user group 1.5M Jan 28 10:00 medium.jpg
# -rw-r--r-- 1 user group 2.3G Jan 28 10:00 large.iso
# 显示 inode 号
ls -i
# 忽略某些模式
ls --ignore="*.tmp"
ls --ignore="*.log" --ignore="*.tmp"
# 只显示特定扩展名
ls *.txt
ls *.{txt,md,conf} # 多个扩展名
# 大小范围筛选
ls -lhS | head -10 # 最大的10个文件
实际应用场景
# 1. 快速查看最新文件
ls -lt | head -5
# 2. 查找大文件
ls -lhS | head -10
# 3. 检查权限问题
ls -l /etc/passwd
# 4. 备份前查看文件
ls -la ~/Documents/ > filelist.txt
# 5. 监控目录变化
watch -n 1 'ls -lht | head -20'
- cp - 复制文件和目录
基本语法
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录
常用选项
选项 说明
-r, -R 递归复制目录
-i 交互式(覆盖前询问)
-f 强制覆盖
-u 只复制更新的文件
-v 显示复制过程
-p 保留属性(权限、时间等)
-a 归档模式(相当于 -dR --preserve=all)
-l 创建硬链接而非复制
-s 创建符号链接
-n 不覆盖已存在文件
复制示例
基本复制
# 复制文件
cp file1.txt file2.txt
cp source.txt backup/
# 复制多个文件到目录
cp file1.txt file2.txt file3.txt /backup/
# 使用通配符
cp *.txt /backup/
cp *.{txt,md} /backup/
目录复制
# 复制目录(必须使用 -r 或 -a)
cp -r source_dir/ destination_dir/
# 复制目录并保留所有属性
cp -a source_dir/ destination_dir/ # 最佳实践
# 只复制目录结构(不包括文件)
find source_dir -type d -exec mkdir -p dest_dir/{} \;
高级复制技巧
# 1. 交互式复制(重要文件)
cp -i important.txt /backup/
# 2. 只复制新文件(增量备份)
cp -u source/* /backup/
# 3. 详细模式(显示进度)
cp -v largefile.iso /backup/
# 4. 保留所有属性
cp -p config.conf /backup/
# -p 保持:权限、时间戳、所有者
# 5. 创建链接而非复制
cp -l bigfile.dat backup/ # 硬链接
cp -s config.conf link.conf # 符号链接
安全复制
# 不覆盖已存在文件
cp -n source.txt destination/
# 备份覆盖的文件
cp -b source.txt existing.txt
# 会创建 existing.txt~
# 使用自定义备份后缀
cp --suffix=.bak -b source.txt existing.txt
# 复制前创建备份
cp --backup=numbered source.txt existing.txt
# 创建 existing.txt.~1~
实际应用
# 1. 项目备份
cp -a project/ project_backup_$(date +%Y%m%d)
# 2. 网站部署
cp -r build/* /var/www/html/
# 3. 配置文件备份
cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# 4. 同步两个目录(单向)
cp -ru source/* destination/
# 5. 复制排除某些文件
rsync -av --exclude='*.tmp' source/ destination/ # 更好的选择
- mv - 移动/重命名文件和目录
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到目录
mv file.txt /target/directory/
# 移动多个文件
mv file1.txt file2.txt file3.txt /target/directory/
# 移动目录
mv source_dir/ target_dir/
常用选项
选项 说明
-i 交互式(覆盖前询问)
-f 强制覆盖
-n 不覆盖已存在文件
-v 显示移动过程
-u 只移动更新的文件
-b 覆盖前备份
-t 指定目标目录(批量移动)
实际应用
# 1. 安全重命名(询问覆盖)
mv -i old new
# 2. 批量重命名
for file in *.txt; do
mv "$file" "backup_$file"
done
# 3. 按日期组织文件
mkdir -p $(date +%Y-%m-%d)
mv *.log $(date +%Y-%m-%d)/
# 4. 使用 -t 选项(批量移动)
mv -t /backup/ *.log *.tmp
# 5. 移动并备份
mv -b important.txt /backup/
# 如果 /backup/important.txt 存在,会创建 /backup/important.txt~
# 6. 只移动新文件
mv -u newfile.txt /target/
批量重命名技巧
# 1. 修改扩展名
rename 's/\.txt$/\.bak/' *.txt
# 2. 添加前缀
for f in *; do mv "$f" "archive_$f"; done
# 3. 删除特定字符
rename 's/ //g' * # 删除空格
# 4. 大小写转换
rename 'y/A-Z/a-z/' * # 转小写
rename 'y/a-z/A-Z/' * # 转大写
- mkdir - 创建目录
# 创建单个目录
mkdir newdir
# 创建多个目录
mkdir dir1 dir2 dir3
# 创建嵌套目录
mkdir -p parent/child/grandchild
常用选项
选项 说明
-p 创建父目录(如果需要)
-m 设置权限模式
-v 显示创建过程
创建示例
# 1. 创建带权限的目录
mkdir -m 755 public_html
mkdir -m 700 private_dir
# 2. 创建项目结构
mkdir -p project/{src,bin,doc,test,lib}
# 3. 按日期创建目录
mkdir -p backups/$(date +%Y)/$(date +%m)/$(date +%d)
# 4. 创建复杂结构
mkdir -p /var/www/{html,log,backup}/{public,private}
# 5. 批量创建用户目录
for user in alice bob charlie; do
mkdir -p /home/$user/{Documents,Downloads,Public}
done
权限设置示例
# 常用权限:
mkdir -m 755 dir # rwxr-xr-x (所有者可读写执行,其他只读执行)
mkdir -m 644 dir # rw-r--r-- (所有者可读写,其他只读)
mkdir -m 700 dir # rwx------ (仅所有者可访问)
mkdir -m 777 dir # rwxrwxrwx (所有人完全访问)
# 设置特殊权限
mkdir -m 1777 tmp # 粘滞位(只有所有者能删除)
mkdir -m 2750 groupdir # 设置组ID
综合实战案例
案例 1:项目初始化脚本
#!/bin/bash
# init_project.sh
PROJECT_NAME="$1"
if [ -z "$PROJECT_NAME" ]; then
echo "用法: $0 项目名"
exit 1
fi
mkdir -p "$PROJECT_NAME"/{src,include,lib,test,docs,build,bin}
mkdir -p "$PROJECT_NAME"/src/{main,modules}
mkdir -p "$PROJECT_NAME"/docs/{api,design,user}
# 设置权限
chmod 755 "$PROJECT_NAME"
find "$PROJECT_NAME" -type d -exec chmod 755 {} \;
echo "项目 '$PROJECT_NAME' 结构创建完成"
tree "$PROJECT_NAME" 2>/dev/null || ls -R "$PROJECT_NAME"
案例 2:日志文件归档
#!/bin/bash
# archive_logs.sh
LOG_DIR="/var/log/myapp"
BACKUP_DIR="/backup/logs"
# 创建按日期的备份目录
BACKUP_PATH="$BACKUP_DIR/$(date +%Y-%m-%d)"
mkdir -p "$BACKUP_PATH"
# 复制日志文件(保留属性)
cp -p "$LOG_DIR"/*.log "$BACKUP_PATH"/
# 压缩备份
cd "$BACKUP_PATH" && tar -czf "../logs_$(date +%Y%m%d).tar.gz" .
# 清理旧备份(保留30天)
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete
案例 3:安全复制脚本
#!/bin/bash
# safe_copy.sh
SOURCE="$1"
DEST="$2"
if [ ! -d "$SOURCE" ]; then
echo "错误:源目录不存在"
exit 1
fi
if [ ! -d "$DEST" ]; then
read -p "目标目录不存在,是否创建?(y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
mkdir -p "$DEST"
else
exit 1
fi
fi
# 使用 rsync 进行安全复制(保留所有属性)
rsync -avh --progress --ignore-existing "$SOURCE"/ "$DEST"/
echo "复制完成!差异:"
diff -qr "$SOURCE" "$DEST" 2>/dev/null || echo "无差异"
文件查看命令大全:cat, tac, rev, less, more, head, tail
这些命令是 Linux/Unix 系统中用于查看和处理文件内容的核心工具。
- cat - 连接并显示文件
基本功能:显示文件内容
# 显示单个文件
cat filename.txt
# 显示多个文件(合并显示)
cat file1.txt file2.txt file3.txt
# 显示行号
cat -n filename.txt
# 或(显示行号,包括空行)
cat -b filename.txt
# 显示非打印字符(特殊字符)
cat -A filename.txt
# -A 相当于 -vET
# -v:显示非打印字符
# -E:在行尾显示 $
# -T:将制表符显示为 ^I
# 压缩连续空行
cat -s filename.txt
高级用法
# 1. 创建新文件(EOF结束)
cat > newfile.txt << EOF
这是第一行
这是第二行
EOF
# 2. 追加内容到文件
cat >> existing.txt << EOF
追加的内容
EOF
# 3. 合并多个文件
cat part1.txt part2.txt part3.txt > complete.txt
# 4. 反向显示文件内容
tac filename.txt # cat 的反向
# 5. 显示文件类型
cat -v filename.bin # 查看二进制文件
- tac - 反向显示文件(cat 的反向)
# 基本使用:从最后一行开始显示
tac filename.txt
# 示例:正常顺序 vs 反向
echo -e "第一行\n第二行\n第三行" > test.txt
cat test.txt # 第一行 第二行 第三行
tac test.txt # 第三行 第二行 第一行
# 分隔符控制
echo "a:b:c:d" | tac -s: # 以冒号为分隔符反向
- rev - 反转每行的字符顺序
# 反转每行的字符
echo "hello world" | rev
# 输出:dlrow olleh
# 实际应用
cat text.txt | rev
# 示例文件内容:
# abc
# 123
# 执行 rev 后:
# cba
# 321
- more - 分页显示(较老的命令)
# 分页显示文件
more filename.txt
# 显示前先清屏
more -c filename.txt
# 从第 N 行开始显示
more +10 filename.txt
# 搜索字符串
more +/search_pattern filename.txt
more 内部命令(显示时使用)
快捷键 功能
空格 下一页
回车 下一行
b 上一页
q 退出
/pattern 搜索
= 显示当前行号
f 显示文件名和行号
- less - 更强大的分页器(more 的增强版)
基本使用
# 基本分页
less filename.txt
# 显示行号
less -N filename.txt
# 忽略大小写搜索
less -I filename.txt
# 实时监控文件变化(类似 tail -f)
less +F logfile.log
# 从文件末尾开始查看
less +G filename.txt
less 常用内部命令(比 more 更强大)
快捷键 功能
空格 或 f 向前一页
b 向后一页
j 或 ↓ 下一行
k 或 ↑ 上一行
G 跳到最后一行
g 跳到第一行
10g 跳到第10行
50% 跳到50%位置
搜索命令
快捷键 功能
/pattern 向前搜索
?pattern 向后搜索
n 下一个匹配项
N 上一个匹配项
其他操作
快捷键 功能
v 用默认编辑器打开当前文件
h 显示帮助
q 退出
F 实时跟踪模式(类似 tail -f)
:n 查看下一个文件(多个文件时)
:p 查看上一个文件
- head - 显示文件开头部分
# 显示前10行(默认)
head filename.txt
# 显示前 N 行
head -n 20 filename.txt
# 或
head -20 filename.txt
# 显示前 N 个字节
head -c 100 filename.txt
head -c 1K filename.txt # 1KB
head -c 1M filename.txt # 1MB
# 显示除了最后 N 行的所有行
head -n -20 filename.txt # 显示除了最后20行的所有内容
实际案例
# 1. 查看配置文件前几行
head -n 5 /etc/passwd
# 2. 批量处理多个文件
head -n 3 *.txt
# 3. 与管道结合
ps aux | head -20 # 显示前20个进程
# 4. 处理 tar 文件
tar -tzf archive.tar.gz | head -10 # 查看压缩包前10个文件
- tail - 显示文件末尾部分
# 显示最后10行(默认)
tail filename.txt
# 显示最后 N 行
tail -n 20 filename.txt
# 或
tail -20 filename.txt
# 显示最后 N 个字节
tail -c 100 filename.txt
# 实时跟踪文件变化(重要!)
tail -f logfile.log
tail -F logfile.log # 更好的跟踪,文件被删除重建后继续跟踪
# 显示从第 N 行开始到末尾
tail -n +20 filename.txt # 从第20行显示到末尾
# 1. 静默模式(不显示文件名)
tail -q file1.txt file2.txt
# 2. 显示详细模式(总是显示文件名)
tail -v *.log
# 3. 监控多个文件
tail -f /var/log/syslog /var/log/auth.log
# 4. 限制刷新频率
tail -f -s 5 logfile.log # 每5秒刷新一次
组合使用案例
# 查看第 11-20 行
cat filename.txt | head -20 | tail -10
# 或
sed -n '11,20p' filename.txt
# 更优雅的方式
tail -n +11 filename.txt | head -10
# 监控日志并高亮关键词
tail -f app.log | grep --color=auto -E "ERROR|WARN"
# 监控多个日志文件
tail -F /var/log/*.log | grep -i error
# 带时间戳的监控
tail -f app.log | while read line; do echo "$(date '+%H:%M:%S') $line"; done
# 监控系统进程变化
watch -n 1 'ps aux | tail -20'
# 监控内存使用
while true; do free -h | tail -2; sleep 1; done
# 监控磁盘空间
watch -n 5 'df -h | tail -n +2'
# 方法1:tail -f(最常用)
tail -f /var/log/syslog
# 方法2:less +F
less +F /var/log/syslog # 可以按 Ctrl+C 退出跟踪模式,浏览历史
# 方法3:multitail(需要安装)
multitail /var/log/syslog /var/log/auth.log
# 方法4:tail -f + grep 过滤
tail -f app.log | grep -v "DEBUG" # 过滤掉 DEBUG 日志
# 查看最后1小时新增内容(假设每分钟一行)
tail -n 60 data.log
# 查看今天的内容(配合 date)
tail -n $(wc -l today.log | awk '{print $1}') full.log
命令对比总结
命令 主要用途 优点 缺点
cat 显示整个文件 简单快速 大文件会刷屏
tac 反向显示文件 查看最新内容在前 不常用
rev 反转每行字符 特殊需求 很少使用
more 分页显示 简单分页 功能有限
less 分页显示 功能强大,支持搜索 稍复杂
head 显示开头 查看文件开头 只能看前面
tail 显示结尾 查看日志,实时监控 只能看后面
echo 命令详解:参数、技巧与实际应用
echo 是 Linux/Unix 中最基础、最常用的命令之一,用于输出文本到标准输出。
基本语法
echo [选项] [字符串]
核心选项详解
- 基本输出控制
选项 功能 示例
-n 不换行输出 echo -n "Hello"
-e 启用转义字符解释 echo -e "Line1\nLine2"
-E 禁用转义字符解释(默认) echo -E "Line1\nLine2"
- 颜色和格式输出(配合转义字符)
# 启用转义字符
echo -e "这是\e[31m红色\e[0m文字"
# 常用颜色代码:
# \e[30m 黑色 \e[40m 黑色背景
# \e[31m 红色 \e[41m 红色背景
# \e[32m 绿色 \e[42m 绿色背景
# \e[33m 黄色 \e[43m 黄色背景
# \e[34m 蓝色 \e[44m 蓝色背景
# \e[35m 紫色 \e[45m 紫色背景
# \e[36m 青色 \e[46m 青色背景
# \e[37m 白色 \e[47m 白色背景
# \e[0m 重置所有属性
转义字符详解(需要 -e 选项)
常用转义序列
echo -e "转义字符演示:"
echo -e "换行:第一行\n第二行"
echo -e "制表符:A\tB\tC"
echo -e "回车:回到开头\r覆盖"
echo -e "退格:AB\bC" # 输出:AC(B被删除)
echo -e "垂直制表:A\vB"
echo -e "警报声:\a" # 发出蜂鸣声
echo -e "反斜杠:\\"
echo -e "单引号:\'"
echo -e "双引号:\""
echo -e "八进制:\101" # A 的 ASCII(八进制 101)
echo -e "十六进制:\x41" # A 的 ASCII(十六进制 41)
高级格式控制
# 加粗/下划线等效果
echo -e "\e[1m粗体文本\e[0m"
echo -e "\e[4m下划线文本\e[0m"
echo -e "\e[5m闪烁文本\e[0m"
echo -e "\e[7m反白显示\e[0m"
echo -e "\e[8m隐藏文本\e[0m"
# 组合使用
echo -e "\e[1;31;42m粗体红字绿背景\e[0m"
echo -e "\e[4;33m下划线黄色\e[0m"
实际应用案例
案例 1:基本输出和变量
# 输出普通文本
echo "Hello World"
# 输出变量
name="Alice"
echo "Hello $name" # Hello Alice
echo "当前用户:$USER" # 使用系统变量
# 输出命令结果
echo "当前时间:$(date)"
echo "目录内容:$(ls -l)"
案例 2:文件操作
# 创建文件
echo "文件内容" > file.txt
# 追加内容
echo "新增内容" >> file.txt
# 创建多行文件
echo -e "第一行\n第二行\n第三行" > multi.txt
# 创建配置文件
cat > config.conf << EOF
[Database]
host=localhost
port=3306
user=root
EOF
案例 3:进度条和动画
# 简单进度条
for i in {1..50}; do
echo -n "#"
sleep 0.1
done
echo " 完成!"
# 旋转动画
spin='-\|/'
for i in {1..20}; do
printf "\r处理中... ${spin:i%4:1}"
sleep 0.1
done
echo -e "\n完成!"
案例 4:颜色化输出(脚本美化)
#!/bin/bash
# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${RED}错误信息${NC}"
echo -e "${GREEN}成功信息${NC}"
echo -e "${YELLOW}警告信息${NC}"
echo -e "${BLUE}提示信息${NC}"
# 带背景色
echo -e "\033[41;37m白字红底\033[0m"
案例 5:系统信息显示
#!/bin/bash
# 显示系统信息
echo "====================================="
echo -e "\e[1;36m系统信息报告\e[0m"
echo "====================================="
echo -e "主机名:\t\t\e[32m$(hostname)\e[0m"
echo -e "内核版本:\t\t\e[33m$(uname -r)\e[0m"
echo -e "当前用户:\t\t\e[34m$USER\e[0m"
echo -e "当前目录:\t\t\e[35m$(pwd)\e[0m"
echo -e "当前时间:\t\t\e[36m$(date '+%Y-%m-%d %H:%M:%S')\e[0m"
echo "====================================="
案例 6:数学运算和序列
# 输出数字序列
echo {1..10} # 1 2 3 4 5 6 7 8 9 10
echo {01..10} # 01 02 03 04 05 06 07 08 09 10
echo {a..z} # a b c d e f g h i j k l m n o p q r s t u v w x y z
echo {A..Z} # 大写字母序列
# 组合序列
echo file{1..3}.txt # file1.txt file2.txt file3.txt
echo {A,B,C}-{1,2,3} # A-1 A-2 A-3 B-1 B-2 B-3 C-1 C-2 C-3
# 计算表达式(需要 $(( )))
echo $((10 + 5)) # 15
echo "10 * 5 = $((10 * 5))"
调试脚本
#!/bin/bash
# 调试模式
set -x # 开启调试
echo "开始执行..."
echo "参数1: $1"
echo "参数2: $2"
set +x # 关闭调试
# 输出变量值(调试用)
DEBUG=true
$DEBUG && echo "调试信息:变量值=$variable"
特殊字符处理
# 输出到标准错误
echo "错误信息" >&2
# 同时输出到文件和屏幕
echo "日志信息" | tee -a logfile.txt
# 重定向到不同设备
echo "消息" > /dev/tty # 直接到终端
echo "秘密" > /dev/null # 丢弃输出
生成随机数据
# 随机字符串
echo $RANDOM | md5sum | head -c 10
# 随机密码
echo "$(date +%s)$RANDOM" | sha256sum | base64 | head -c 16
# 随机数序列
for i in {1..5}; do echo $((RANDOM % 100)); done
时间戳和日期
# 不同格式的时间戳
echo $(date +%s) # 秒级时间戳
echo $(date +%s%N | cut -b1-13) # 毫秒时间戳
echo $(date "+%Y-%m-%d %H:%M:%S") # 标准格式
# 日志时间戳
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 日志信息" >> app.log
实用单行命令
# 快速创建测试文件
echo {1..1000} | tr ' ' '\n' > numbers.txt
# 显示彩虹文字
echo -e "\e[31mR\e[33mA\e[32mI\e[36mN\e[34mB\e[35mO\e[0mW"
# 进度百分比
for i in {1..100}; do echo -ne "进度: $i%\r"; sleep 0.1; done
# 生成序列目录
echo dir{001..100} | xargs mkdir -p
# 快速测试命令执行时间
time echo {1..10000} > /dev/null