linux初级_基础命令

TJCcc 发布于 2025-11-08 27 次阅读


一、目录和文件操作

1. 基本导航命令

pwd - 显示当前工作目录

pwd  # 显示当前所在目录的绝对路径

ls - 列出目录内容

ls          # 列出当前目录内容
ls -l       # 详细列表格式
ls -a       # 显示所有文件(包括隐藏文件)
ls -lh      # 人类可读的文件大小
ls -lt      # 按时间排序
ls -R       # 递归列出子目录
ls /path    # 列出指定目录内容

cd - 切换目录

cd          # 切换到用户主目录
cd ~        # 切换到用户主目录
cd /path    # 切换到绝对路径
cd ..       # 切换到上级目录
cd -        # 切换到上一个目录
cd ../dir   # 切换到上级目录的某个子目录

2. 特殊路径符号

.           # 当前目录
..          # 上级目录
~           # 当前用户的主目录
-           # 上一个工作目录
/           # 根目录

二、文件管理

1. 创建目录和文件

mkdir - 创建目录

mkdir dirname          # 创建单个目录
mkdir dir1 dir2        # 创建多个目录
mkdir -p parent/child  # 递归创建多级目录

touch - 创建文件或更新时间戳

touch filename         # 创建空文件或更新文件时间
touch file1 file2      # 创建多个文件

2. 文件查看命令

cat - 连接并显示文件

cat file              # 显示整个文件内容
cat file1 file2       # 连接多个文件并显示
cat > file            # 创建新文件(输入内容后Ctrl+D保存)
cat file1 >> file2    # 将file1追加到file2末尾

more - 分页显示文件

more file            # 逐页显示文件内容
# 操作键:空格(下一页),Enter(下一行),q(退出)

less - 更强大的分页显示

less file            # 分页显示,支持上下滚动
# 操作键:空格(下一页),b(上一页),/搜索,q(退出)

head - 显示文件开头

head file            # 显示文件前10行
head -n 20 file      # 显示文件前20行
head -c 100 file     # 显示文件前100字节

tail - 显示文件末尾

tail file            # 显示文件后10行
tail -n 20 file      # 显示文件后20行
tail -f file         # 实时跟踪文件变化(常用于日志)
tail -F file         # 实时跟踪,文件被删除重建后继续跟踪

3. 文件操作命令

cp - 复制文件或目录

cp file1 file2        # 复制文件
cp file dir/          # 复制文件到目录
cp -r dir1 dir2       # 递归复制目录
cp -i file1 file2     # 交互式复制(覆盖前确认)
cp -v file1 file2     # 显示复制进度

mv - 移动或重命名

mv file1 file2        # 重命名文件
mv file dir/          # 移动文件到目录
mv dir1 dir2          # 移动或重命名目录
mv -i file1 file2     # 交互式移动

rm - 删除文件或目录

rm file              # 删除文件
rm -r dir            # 递归删除目录
rm -f file           # 强制删除,不提示
rm -rf dir           # 强制递归删除目录(谨慎使用!)
rm -i file           # 交互式删除

三、文件查找和定位

1. 命令和文件查找

which - 查找命令位置

which ls             # 显示ls命令的完整路径
which python         # 显示python命令位置

find - 强大的文件查找

find /path -name "filename"      # 按名称查找
find . -name "*.txt"             # 查找当前目录所有txt文件
find /home -user username        # 按用户查找
find /var -type f -mtime -7      # 查找7天内修改的文件
find . -size +10M                # 查找大于10MB的文件
find . -name "*.log" -exec rm {} \;  # 查找并删除

2. 文本处理

echo - 输出文本

echo "Hello World"    # 输出文本
echo $PATH           # 输出环境变量
echo -e "Line1\nLine2"  # 解释转义字符
echo "text" > file   # 输出重定向到文件

wc - 统计文本

wc file              # 统计行数、单词数、字节数
wc -l file           # 只统计行数
wc -w file           # 只统计单词数
wc -c file           # 只统计字节数

四、文本编辑器

1. 常用文本编辑器

vim - 强大的文本编辑器

vim file             # 用vim打开文件
# 基本模式:
#   正常模式:移动光标、删除、复制等
#   插入模式:按 i 进入,输入文本
#   命令模式:按 : 进入,执行命令

# 常用命令:
#   i - 进入插入模式
#   Esc - 返回正常模式
#   :w - 保存
#   :q - 退出
#   :wq - 保存并退出
#   :q! - 强制退出不保存
#   dd - 删除当前行
#   /text - 搜索文本

nano - 简单易用的编辑器

nano file            # 用nano打开文件
# 常用快捷键:
#   Ctrl+O - 保存
#   Ctrl+X - 退出
#   Ctrl+W - 搜索
#   Ctrl+K - 剪切行
#   Ctrl+U - 粘贴

五、系统管理

1. 系统服务管理

systemctl - 系统服务管理

systemctl start service     # 启动服务
systemctl stop service      # 停止服务
systemctl restart service   # 重启服务
systemctl status service    # 查看服务状态
systemctl enable service    # 设置开机启动
systemctl disable service   # 禁用开机启动
systemctl list-units        # 列出所有单元

2. 链接管理

链接命令

# 硬链接
ln source target           # 创建硬链接

# 软链接(符号链接)
ln -s source target        # 创建软链接
ln -s /path/file linkname  # 创建指向绝对路径的软链接

# 区别:
# 硬链接:与原始文件相同的inode,删除原始文件不影响
# 软链接:不同的inode,类似Windows快捷方式,删除原始文件后失效

3. 时间日期

date - 日期时间操作

date                    # 显示当前日期时间
date +%Y-%m-%d          # 显示年月日
date +%H:%M:%S          # 显示时分秒
date -d "yesterday"     # 显示昨天日期
date -d "1 week ago"    # 显示一周前日期
date "+%s"              # 显示时间戳

六、关机重启命令

# 10分钟后关机
shutdown -h +10

# 指定时间关机(17:30)
shutdown -h 17:30

# 立即关机
shutdown -h now

# 立即重启
shutdown -r now

# 取消已计划的关机
shutdown -c

# 立即重启
reboot

# 强制重启
reboot -f

七、打包压缩

一、核心概念区分

操作目的工具效果
打包将多个文件/目录合并为单个文件tar, cpio文件数量↓,体积基本不变
压缩减小单个文件的体积gzip, bzip2, xz, zip文件体积↓,数量不变

最佳实践:先打包后压缩 → .tar + .gz = .tar.gz


二、打包工具详解

1. tar - 最主流的打包工具

基本语法:

tar [选项] 打包后的文件名 要打包的文件或目录...

常用选项:

  • -c:创建新的打包文件
  • -x:解包
  • -t:查看打包文件内容
  • -v:显示详细过程
  • -f:指定打包文件名
  • -z:通过 gzip 过滤(压缩/解压)
  • -j:通过 bzip2 过滤
  • -J:通过 xz 过滤

三、压缩工具详解

压缩效率对比(通常情况)

工具扩展名压缩率速度资源占用
gzip.gz中等
bzip2.bz2
xz.xz最高最慢
zip.zip中等中等

四、实际使用场景大全

场景 1:基本打包与查看

# 打包目录(不压缩)
tar -cvf project.tar /path/to/project/

# 查看打包内容
tar -tf project.tar

# 解包
tar -xvf project.tar

场景 2:打包并压缩(最常用)

# 1. 使用 gzip 压缩 (.tar.gz 或 .tgz)
tar -czvf project.tar.gz /path/to/project/

# 2. 使用 bzip2 压缩 (.tar.bz2)
tar -cjvf project.tar.bz2 /path/to/project/

# 3. 使用 xz 压缩 (.tar.xz) - 压缩率最高
tar -cJvf project.tar.xz /path/to/project/

场景 3:解压各种格式

# 解压 .tar.gz
tar -xzvf project.tar.gz

# 解压 .tar.bz2
tar -xjvf project.tar.bz2

# 解压 .tar.xz
tar -xJvf project.tar.xz

# 万能解压(自动识别格式)
tar -xvf project.tar.*

场景 4:排除特定文件

# 排除 node_modules 目录和所有 .log 文件
tar -czvf project.tar.gz --exclude='node_modules' --exclude='*.log' /path/to/project/

# 从文件读取排除列表
tar -czvf project.tar.gz -X exclude_list.txt /path/to/project/

exclude_list.txt 内容:

node_modules
*.log
*.tmp

场景 5:增量备份

# 创建全量备份
tar -czvf full_backup.tar.gz /home/user/

# 创建增量备份(仅备份比指定时间新的文件)
tar -czvf incremental_backup.tar.gz --newer-mtime="2024-01-01" /home/user/

场景 6:分割大文件

# 打包压缩后分割为 100M 的文件
tar -czvf - /path/to/large_dir/ | split -b 100M - large_backup.tar.gz.part

# 合并并解压
cat large_backup.tar.gz.part* | tar -xzvf -

五、其他压缩工具

1. zip / unzip - 跨平台兼容

# 压缩
zip -r project.zip /path/to/project/

# 加密压缩
zip -r -e encrypted_project.zip /path/to/project/

# 解压
unzip project.zip

# 查看内容
unzip -l project.zip

2. 7z - 高压缩率

# 安装
sudo apt install p7zip-full    # Debian/Ubuntu
sudo yum install p7zip-full    # CentOS/RHEL

# 压缩
7z a project.7z /path/to/project/

# 解压
7z x project.7z

六、实用技巧和最佳实践

1. 压缩级别调整

# gzip 压缩级别(1-9,默认6)
tar -czvf -9 project.tar.gz /path/to/project/

# 使用最高压缩级别(速度最慢,体积最小)
tar -cvf project.tar /path/to/project/ && xz -9 project.tar

2. 保留文件权限和属性

# 保留所有权限、所有者等信息(通常需要root权限)
sudo tar -czpvf backup.tar.gz /etc/important_config/

# 解压时保留权限
tar -xzpf backup.tar.gz

3. 仅打包特定文件类型

# 只打包所有的 .txt 和 .pdf 文件
find /path/to/documents/ -name "*.txt" -o -name "*.pdf" | tar -czvf docs.tar.gz -T -

4. 查看压缩文件信息

# 查看压缩比等信息
gzip -l file.txt.gz
xz -l file.txt.xz

# 查看 tar 文件详细内容
tar -tvf project.tar.gz

七、常用命令速查表

操作命令
打包目录tar -cvf name.tar /dir
打包并gzip压缩tar -czvf name.tar.gz /dir
打包并bzip2压缩tar -cjvf name.tar.bz2 /dir
打包并xz压缩tar -cJvf name.tar.xz /dir
解压.tar.gztar -xzvf file.tar.gz
解压.tar.bz2tar -xjvf file.tar.bz2
解压.tar.xztar -xJvf file.tar.xz
查看打包内容tar -tf file.tar.gz
zip压缩zip -r name.zip /dir
zip解压unzip file.zip
创建加密压缩zip -e secure.zip file1 file2

八、选择指南

根据需求选择工具:

  • 日常使用.tar.gz (速度与体积的平衡)
  • 最大压缩率.tar.xz (不关心时间,只要最小体积)
  • Windows兼容.zip (与Windows用户分享)
  • 配置文件备份.tar.gz 并保留权限
  • 大文件分发:分卷压缩 + .tar.gz

八、命令组合与参数传递

一、核心概念

在 Linux 中,我们经常需要将多个命令组合使用,或者将一个命令的输出作为另一个命令的参数。主要有以下几种技术:

技术作用使用场景
| (管道)将一个命令的输出作为另一个命令的输入命令流水线处理
xargs标准输入转换为命令行参数处理大量文件、参数传递
-execfind 命令的内置参数处理对找到的每个文件执行命令
` ` (反引号)命令替换(旧语法)将命令输出嵌入到其他命令中
$( )命令替换(新语法)同上,更现代、更安全

二、| (管道) - 数据流传递

基本概念

  • 前一个命令的标准输出作为后一个命令的标准输入
  • 数据流级别的传递

实用示例

1. 基础文本处理

# 查看日志并搜索特定内容
cat app.log | grep "ERROR"

# 统计当前目录文件数量
ls -la | wc -l

# 查看进程并过滤
ps aux | grep nginx

2. 多级管道处理

# 复杂的文本处理流程
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -nr

3. 实时监控

# 实时监控日志文件
tail -f app.log | grep "Exception"

# 监控网络连接
netstat -tulpn | grep :80

4. 数据转换

# 将命令输出转换为大写
echo "hello world" | tr '[:lower:]' '[:upper:]'

# JSON 格式化处理
curl -s http://api.example.com/data | jq '.results[]'

三、xargs - 参数构造器

基本概念

  • 标准输入转换为命令行参数
  • 解决"参数列表过长"的问题
  • 更灵活的参数控制

实用示例

1. 基础文件操作

# 查找并删除(比 -delete 更灵活)
find . -name "*.tmp" | xargs rm -f

# 查找并复制到目标目录
find . -name "*.jpg" | xargs cp -t /backup/images/

2. 控制参数数量

# 每次只传递 10 个文件给 rm(避免参数过长)
find . -name "*.log" | xargs -n 10 rm

# 一次处理一个文件(更安全)
find . -name "*.txt" | xargs -I {} echo "Processing: {}"

3. 并行处理

# 使用 4 个进程并行处理
find . -name "*.json" | xargs -P 4 -I {} jq '.' {} > /dev/null

4. 复杂参数构造

# 为每个文件构造复杂命令
find . -name "*.bak" | xargs -I {} sh -c 'mv "$1" "${1%.bak}.backup"' _ {}

# 处理带空格的文件名(安全方式)
find . -name "*.txt" -print0 | xargs -0 -I {} echo "File: {}"

5. 批量下载/处理

# 从文件列表批量下载
cat url_list.txt | xargs -n 1 wget

# 批量转换图片格式
find . -name "*.png" | xargs -I {} convert {} {}.jpg

四、-exec - find 命令的集成处理

基本概念

  • find 命令的内置参数处理功能
  • 每个找到的文件立即执行命令
  • 使用 {} 作为文件占位符,\; 表示命令结束

实用示例

1. 基础文件操作

# 查找并删除
find . -name "*.tmp" -exec rm -f {} \;

# 查找并更改权限
find . -name "*.sh" -exec chmod +x {} \;

2. 文件内容处理

# 在多个文件中搜索文本
find . -name "*.java" -exec grep -l "public static" {} \;

# 批量替换文件内容
find . -name "*.config" -exec sed -i 's/old/new/g' {} \;

3. 复杂命令执行

# 对每个文件执行多条命令
find . -name "*.log" -exec sh -c 'echo "Processing: $1"; wc -l "$1"' _ {} \;

# 文件信息统计
find . -name "*.jpg" -exec identify {} \; | wc -l

4. + 语法优化(类似 xargs)

# 使用 + 更高效(一次性传递多个参数)
find . -name "*.txt" -exec cp {} /backup/ +

# 批量打包
find . -name "*.java" -exec tar -czf source_code.tar.gz {} +

五、命令替换:` `$( )

基本概念

  • 命令的输出结果作为其他命令的参数或变量值
  • $( )现代推荐的语法
  • ` ` 是传统语法,存在嵌套和转义问题

实用示例

1. 变量赋值

# 将命令结果保存到变量
current_date=$(date +%Y-%m-%d)
file_count=$(ls -la | wc -l)
system_uptime=$(uptime -p)

echo "当前日期: $current_date"
echo "文件数量: $file_count"

2. 命令参数

# 使用命令输出作为其他命令的参数
tar -czf backup-$(date +%Y%m%d).tar.gz /path/to/backup

# 查找最近修改的文件
ls -t | head -n $(expr $(ls | wc -l) / 2)

3. 循环处理

# 对命令输出的每一行进行处理
for file in $(find . -name "*.txt"); do
    echo "处理文件: $file"
    wc -l "$file"
done

4. 复杂嵌套

# $( ) 支持嵌套,反引号不支持
total_size=$(du -sh $(find . -name "*.log" -type f) | awk '{sum+=$1} END{print sum}')

# 计算目录深度
max_depth=$(find . -type d -printf '%d\n' | sort -rn | head -1)

5. 条件判断

# 根据命令结果进行判断
if [ $(who | wc -l) -gt 2 ]; then
    echo "系统中有多个用户登录"
fi

# 检查服务状态
if systemctl is-active --quiet nginx; then
    echo "Nginx 正在运行"
fi

六、命令行特殊符号

1. &&

前一个命令执行成功才执行后一个命令

2. ||

前一个命令执行失败后才执行后一个命令

3. ;

不管前一个命令成功还是失败,都会执行下一个命令。


七、技术对比与选择指南

执行机制对比

场景推荐方案原因
简单的文本流处理| (管道)直接、高效
处理 find 结果-execxargs集成性好
大量文件处理xargs避免参数过长
需要并行处理xargs -P性能最优
命令结果作为参数$( )现代、安全
嵌套命令替换$( )唯一选择

性能考虑

# 慢:为每个文件启动一次 rm
find . -name "*.tmp" -exec rm {} \;

# 快:一次性传递多个文件(类似 xargs)
find . -name "*.tmp" -exec rm {} +

# 最快:使用 xargs 并行处理
find . -name "*.tmp" | xargs -P 4 rm

安全性考虑

# 危险:可能处理带空格的文件名错误
find . -name "*.txt" | xargs rm

# 安全:处理带空格和特殊字符的文件名
find . -name "*.txt" -print0 | xargs -0 rm

# 最安全:使用 -exec
find . -name "*.txt" -exec rm {} \;

七、高级技巧与实战案例

1. 组合使用技巧

# 查找大文件并交互式删除
find . -size +100M -type f | xargs -p rm

# 批量重命名文件
find . -name "*.jpeg" -exec bash -c 'mv "$1" "${1%.jpeg}.jpg"' _ {} \;

2. 错误处理

# 忽略处理中的错误
find . -name "*.txt" -exec some_command {} \; 2>/dev/null

# xargs 错误处理
find . -name "*.log" | xargs -I {} sh -c 'process "$1" || echo "Failed: $1"' _ {}

3. 性能监控

# 带时间统计的处理
time find . -name "*.java" -exec javac {} \;

# 比较不同方法的性能
time find . -name "*.tmp" -delete
time find . -name "*.tmp" | xargs rm

4. 复杂流水线

# 完整的日志分析流水线
find /var/log -name "*.log" -mtime -7 -type f | \
xargs -P 4 -I {} sh -c 'echo "Processing: $1"; grep "ERROR" "$1" | wc -l' _ {} | \
awk '{sum+=$1} END{print "Total errors:", sum}'

八、速查表

需求命令示例
简单文本过滤cat file | grep pattern
查找并删除find . -name "*.tmp" -exec rm {} \;
批量处理文件find . -name "*.txt" | xargs -I {} command {}
命令结果作为变量count=$(ls | wc -l)
并行处理find . -name "*.jpg" | xargs -P 4 convert
安全文件名处理find . -print0 | xargs -0 command
嵌套命令size=$(du -sh $(find . -name "*.log"))