前言
Linux 作为最流行的开源操作系统,在服务器、嵌入式设备和个人电脑中广泛应用。掌握 Linux 命令是每个开发者和系统管理员的必备技能。本文将全面介绍 Linux 常用命令,帮助读者系统学习并掌握 Linux 操作系统的使用。
一、Linux 文件系统基础
1.1 Linux 目录结构
/ 根目录
├── bin 基本命令二进制文件
├── etc 系统配置文件
├── home 用户主目录
├── root root用户主目录
├── usr 用户程序
├── var 经常变化的文件(如日志)
└── tmp 临时文件
1.2 文件路径
-
绝对路径:从根目录开始的完整路径,如
/home/user/file.txt -
相对路径:相对于当前目录的路径,如
./file.txt或../dir/file.txt
二、基本文件操作命令
2.1 目录操作
ls - 列出目录内容
bash
# 基本用法
ls
ls /home
# 常用选项
ls -l # 详细列表格式
ls -a # 显示所有文件(包括隐藏文件)
ls -h # 人类可读的文件大小
ls -t # 按修改时间排序
ls -r # 反向排序
ls -R # 递归显示子目录
# 组合使用
ls -lah # 详细列表,显示所有文件,人类可读大小
ls -lrt # 按时间反向排序,最新的在最后
cd - 切换目录
cd /home/user # 切换到绝对路径
cd Documents # 切换到相对路径
cd .. # 切换到上级目录
cd ~ # 切换到用户主目录
cd - # 切换到上一个目录
cd # 切换到用户主目录
pwd - 显示当前目录
pwd
# 输出:/home/user/current_directory
mkdir - 创建目录
mkdir new_dir # 创建单个目录
mkdir dir1 dir2 dir3 # 创建多个目录
mkdir -p parent/child/grandchild # 创建多级目录
mkdir -m 755 new_dir # 创建目录并设置权限
rmdir - 删除空目录
rmdir empty_dir # 删除空目录
rmdir -p parent/child/grandchild # 删除多级空目录
2.2 文件操作
touch - 创建文件或更新时间戳
touch file.txt # 创建新文件或更新现有文件时间戳
touch file1.txt file2.txt # 创建多个文件
touch -t 202312251200 file.txt # 设置特定时间戳
cp - 复制文件或目录
# 复制文件
cp file1.txt file2.txt # 复制文件
cp file.txt /target/directory/ # 复制到目录
# 复制目录
cp -r dir1 dir2 # 递归复制目录
cp -r dir1/. dir2 # 复制目录内容
# 常用选项
cp -i file1 file2 # 交互式复制(覆盖前确认)
cp -v file1 file2 # 显示详细信息
cp -u file1 file2 # 仅当源文件更新时复制
cp -p file1 file2 # 保留文件属性
mv - 移动或重命名文件
mv oldname.txt newname.txt # 重命名文件
mv file.txt /target/directory/ # 移动文件
mv -i file1 file2 # 交互式移动
mv -v file1 file2 # 显示详细信息
rm - 删除文件或目录
rm file.txt # 删除文件
rm -i file.txt # 交互式删除
rm -f file.txt # 强制删除,不提示
rm -r directory # 递归删除目录
rm -rf directory # 强制递归删除目录(慎用!)
2.3 文件查看和编辑
cat - 连接并显示文件内容
cat file.txt # 显示整个文件
cat -n file.txt # 显示行号
cat file1.txt file2.txt # 连接多个文件
cat > newfile.txt # 创建新文件(输入内容后Ctrl+D保存)
cat file1.txt file2.txt > combined.txt # 合并文件
less / more - 分页显示文件
less file.txt # 分页浏览(推荐)
more file.txt # 基本分页浏览
# less 常用操作
# 空格键:向下翻页
# b:向上翻页
# /pattern:搜索
# q:退出
head / tail - 显示文件开头/结尾
head file.txt # 显示前10行
head -n 20 file.txt # 显示前20行
head -c 100 file.txt # 显示前100字节
tail file.txt # 显示最后10行
tail -n 20 file.txt # 显示最后20行
tail -f logfile.log # 实时跟踪文件变化
tail -F logfile.log # 实时跟踪,文件被删除后重新打开
nano / vim - 文本编辑器
nano file.txt # 使用nano编辑
vim file.txt # 使用vim编辑
# vim 基本操作
# i:进入插入模式
# ESC:退出插入模式
# :w:保存
# :q:退出
# :wq:保存并退出
# :q!:强制退出不保存
三、文件权限和所有权
3.1 权限基础
Linux 文件权限分为三类:
-
用户 (User):文件所有者
-
组 (Group):文件所属组
-
其他 (Other):其他用户
权限类型:
-
r (4):读权限
-
w (2):写权限
-
x (1):执行权限
3.2 权限管理命令
chmod - 更改文件权限
# 数字模式
chmod 755 file.txt # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 777 file.txt # rwxrwxrwx
# 符号模式
chmod u+x file.txt # 给用户添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户只有读权限
chmod a+x file.txt # 给所有用户添加执行权限
# 递归修改
chmod -R 755 directory/
chown - 更改文件所有者
chown user file.txt # 更改文件所有者
chown user:group file.txt # 同时更改所有者和组
chown -R user:group directory/ # 递归更改
chgrp - 更改文件所属组
chgrp group file.txt # 更改文件所属组
chgrp -R group directory/ # 递归更改
四、文件搜索和查找
4.1 基本搜索命令
find - 查找文件
# 基本查找
find /home -name "*.txt" # 按文件名查找
find . -name "file*" # 当前目录查找
find /var -type f -name "*.log" # 查找普通文件
# 按时间查找
find . -mtime -7 # 7天内修改的文件
find . -mtime +30 # 30天前修改的文件
find . -amin -60 # 60分钟内访问的文件
# 按大小查找
find . -size +10M # 大于10MB的文件
find . -size -1G # 小于1GB的文件
# 组合条件
find /home -name "*.txt" -size +1M -mtime -30
# 执行操作
find . -name "*.tmp" -delete # 查找并删除
find . -name "*.txt" -exec cp {} /backup/ \; # 查找并复制
grep - 文本搜索
# 基本搜索
grep "pattern" file.txt # 在文件中搜索模式
grep -i "pattern" file.txt # 忽略大小写
grep -r "pattern" directory/ # 递归搜索目录
grep -n "pattern" file.txt # 显示行号
# 高级用法
grep -v "pattern" file.txt # 反向搜索(不匹配的行)
grep -c "pattern" file.txt # 统计匹配行数
grep -E "pattern1|pattern2" file.txt # 扩展正则表达式
grep -l "pattern" *.txt # 只显示包含模式的文件名
# 结合管道
ps aux | grep "nginx" # 查找进程
cat file.txt | grep -A 3 -B 3 "pattern" # 显示匹配行的前后3行
locate - 快速文件查找
locate filename # 快速查找文件
locate -i "*.jpg" # 忽略大小写
locate -c "*.txt" # 统计数量
# 更新数据库(需要先执行)
sudo updatedb
五、系统信息和管理
5.1 系统信息命令
uname - 系统信息
uname -a # 所有系统信息
uname -s # 内核名称
uname -r # 内核版本
uname -m # 机器硬件名称
hostname - 主机名
hostname # 显示主机名
hostname -i # 显示IP地址
hostname -f # 显示FQDN
uptime - 系统运行时间
uptime
# 输出:10:30:00 up 15 days, 2:30, 3 users, load average: 0.05, 0.10, 0.15
free - 内存使用情况
free # 显示内存使用
free -h # 人类可读格式
free -m # 以MB为单位
free -g # 以GB为单位
df - 磁盘空间
df # 显示磁盘空间
df -h # 人类可读格式
df -i # 显示inode使用情况
df -T # 显示文件系统类型
du - 目录空间使用
du # 当前目录空间使用
du -h # 人类可读格式
du -sh directory/ # 显示目录总大小
du -ah directory/ # 显示所有文件和目录大小
du -h --max-depth=1 # 只显示一级子目录
5.2 进程管理
ps - 进程状态
ps aux # 显示所有进程详细信息
ps -ef # 显示完整格式的所有进程
ps -u username # 显示指定用户的进程
ps -p PID # 显示指定PID的进程
# 常用组合
ps aux | grep nginx # 查找特定进程
ps aux --sort=-%mem | head -10 # 按内存使用排序前10
top / htop - 实时进程监控
top # 实时系统监控
htop # 增强版top(需要安装)
# top 常用命令
# q:退出
# k:杀死进程
# M:按内存使用排序
# P:按CPU使用排序
# 1:显示每个CPU核心的使用情况
kill - 终止进程
kill PID # 终止进程(发送TERM信号)
kill -9 PID # 强制终止进程
kill -15 PID # 优雅终止进程
killall process_name # 终止所有同名进程
pkill pattern # 按模式终止进程
jobs / fg / bg - 作业控制
command & # 在后台运行命令
jobs # 查看后台作业
fg %1 # 将作业1调到前台
bg %1 # 在后台继续运行作业1
Ctrl+Z # 暂停当前作业
六、网络相关命令
6.1 网络配置和诊断
ifconfig / ip - 网络接口配置
ifconfig # 显示网络接口信息
ifconfig eth0 # 显示特定接口
ifconfig eth0 up # 启用接口
ifconfig eth0 down # 禁用接口
# ip命令(推荐)
ip addr show # 显示IP地址
ip route show # 显示路由表
ip link set eth0 up # 启用接口
ping - 网络连通性测试
ping google.com # 测试连通性
ping -c 4 google.com # 发送4个包后停止
ping -i 5 google.com # 每5秒发送一个包
netstat - 网络统计
netstat -tuln # 显示监听端口
netstat -tup # 显示已建立连接
netstat -r # 显示路由表
netstat -i # 显示网络接口
ss - socket统计
ss -tuln # 显示监听端口
ss -tup # 显示已建立连接
ss -s # 显示socket统计
curl / wget - 网络数据传输
curl https://example.com # 获取网页内容
curl -O https://example.com/file.zip # 下载文件
curl -I https://example.com # 只显示头部信息
wget https://example.com/file.zip # 下载文件
wget -c https://example.com/file.zip # 断点续传
wget -r https://example.com # 递归下载
七、压缩和归档
7.1 常用压缩命令
tar - 归档工具
# 创建归档
tar -cvf archive.tar files/ # 创建tar归档
tar -czvf archive.tar.gz files/ # 创建gzip压缩归档
tar -cjvf archive.tar.bz2 files/ # 创建bzip2压缩归档
# 提取归档
tar -xvf archive.tar # 提取tar归档
tar -xzvf archive.tar.gz # 提取gzip压缩归档
tar -xjvf archive.tar.bz2 # 提取bzip2压缩归档
# 列出内容
tar -tvf archive.tar # 列出归档内容
gzip / gunzip - 压缩/解压缩
gzip file.txt # 压缩文件(生成file.txt.gz)
gzip -9 file.txt # 最大压缩率
gunzip file.txt.gz # 解压缩
gzip -d file.txt.gz # 解压缩(等同于gunzip)
zip / unzip - ZIP压缩
zip archive.zip file1 file2 # 创建ZIP归档
zip -r archive.zip directory/ # 递归压缩目录
unzip archive.zip # 解压缩
unzip -l archive.zip # 列出ZIP文件内容
八、用户和权限管理
8.1 用户管理
whoami - 显示当前用户
whoami
id - 显示用户信息
id
id username
su - 切换用户
su username # 切换用户
su - username # 切换用户并加载环境变量
su - # 切换到root用户
sudo - 以超级用户权限执行命令
sudo command # 以root权限执行命令
sudo -i # 切换到root shell
sudo -u username command # 以指定用户权限执行
useradd / userdel - 用户管理
sudo useradd newuser # 添加新用户
sudo useradd -m -s /bin/bash newuser # 创建用户并创建主目录
sudo userdel username # 删除用户
sudo userdel -r username # 删除用户及其主目录
passwd - 修改密码
passwd # 修改当前用户密码
sudo passwd username # 修改指定用户密码
九、高级命令和技巧
9.1 文本处理
awk - 文本处理工具
# 基本用法
awk '{print $1}' file.txt # 打印第一列
awk -F: '{print $1}' /etc/passwd # 使用冒号分隔符
# 条件处理
awk '$3 > 1000 {print $1}' file.txt # 第三列大于1000时打印第一列
awk '/pattern/ {print $0}' file.txt # 匹配模式的行
# 统计
awk '{sum += $1} END {print sum}' file.txt # 求和
awk '{count++} END {print count}' file.txt # 行数统计
sed - 流编辑器
# 替换文本
sed 's/old/new/g' file.txt # 全局替换
sed 's/old/new/' file.txt # 每行第一次出现替换
sed -i 's/old/new/g' file.txt # 直接修改文件
# 删除行
sed '5d' file.txt # 删除第5行
sed '1,5d' file.txt # 删除1-5行
sed '/pattern/d' file.txt # 删除匹配模式的行
# 其他操作
sed -n '5,10p' file.txt # 打印5-10行
sed '2a\new line' file.txt # 在第2行后添加新行
sort - 排序
sort file.txt # 排序文件
sort -r file.txt # 反向排序
sort -n file.txt # 数值排序
sort -u file.txt # 去重排序
sort -k2 file.txt # 按第二列排序
uniq - 去重
uniq file.txt # 去除连续重复行
uniq -c file.txt # 统计重复次数
uniq -d file.txt # 只显示重复行
uniq -u file.txt # 只显示不重复行
# 通常与sort结合使用
sort file.txt | uniq
9.2 输入输出重定向
command > file.txt # 标准输出重定向到文件(覆盖)
command >> file.txt # 标准输出重定向到文件(追加)
command < file.txt # 从文件读取标准输入
command 2> error.log # 标准错误重定向到文件
command > output.log 2>&1 # 标准输出和错误都重定向到文件
command &> file.txt # 标准输出和错误都重定向到文件
command1 | command2 # 管道:command1的输出作为command2的输入
9.3 命令组合和脚本
命令替换
echo "Today is $(date)" # 命令替换
echo "Today is `date`" # 传统命令替换
后台执行和定时任务
nohup command & # 后台运行,退出终端不终止
(cd /path && ./script.sh) & # 在子shell中执行
# 使用crontab定时任务
crontab -e # 编辑定时任务
# 示例:每天凌晨2点执行
# 0 2 * * * /path/to/script.sh
十、实用技巧和最佳实践
10.1 命令行快捷键
Ctrl+A # 移动到行首
Ctrl+E # 移动到行尾
Ctrl+U # 删除到行首
Ctrl+K # 删除到行尾
Ctrl+W # 删除前一个单词
Ctrl+R # 搜索命令历史
Ctrl+L # 清屏
Ctrl+C # 终止当前命令
Ctrl+D # 退出shell或文件结束
Ctrl+Z # 暂停当前作业
10.2 命令历史
history # 显示命令历史
!number # 执行历史中第number条命令
!! # 执行上一条命令
!string # 执行最近以string开头的命令
Ctrl+R # 反向搜索命令历史
10.3 别名和函数
# 在 ~/.bashrc 中设置别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias rm='rm -i'
# 自定义函数
mkcd() {
mkdir -p "$1" && cd "$1"
}
十一、故障排查和性能监控
11.1 系统监控
dmesg - 内核消息
dmesg | tail -20 # 查看最近内核消息
dmesg | grep error # 查找错误信息
iostat - I/O统计
iostat 1 # 每秒显示I/O统计
iostat -x 1 # 扩展I/O统计
vmstat - 虚拟内存统计
vmstat 1 # 每秒显示系统统计
vmstat -s # 显示内存统计摘要
11.2 日志查看
# 系统日志
tail -f /var/log/syslog # 实时查看系统日志
journalctl -f # 实时查看systemd日志
# 应用日志
tail -f /var/log/nginx/access.log # 实时查看nginx访问日志
grep "ERROR" /var/log/app.log # 查找错误日志
总结
本文涵盖了 Linux 系统中最常用和最重要的命令,从基础的文件操作到高级的系统管理。掌握这些命令将大大提高你在 Linux 环境下的工作效率。建议在实际工作中多加练习,结合 man 手册(man command)深入学习每个命令的详细用法。
记住,Linux 命令的学习是一个持续的过程,随着经验的积累,你会发现自己能够更加熟练地组合使用这些命令来解决复杂的问题。
温馨提示:在生产环境中执行命令时要格外小心,特别是使用 rm -rf、chmod、chown 等可能对系统造成重大影响的命令时,务必确认命令的正确性。
379

被折叠的 条评论
为什么被折叠?



