Linux命令行实用技巧
Linux命令行是Linux系统的核心,掌握一些实用的命令行技巧可以大大提高工作效率。本文将介绍一些Linux命令行的实用技巧,帮助你更高效地使用Linux系统。
1. 命令历史
Linux会记录你执行过的命令,这些命令保存在历史文件中(通常是`~/.bash_history`)。利用命令历史可以快速重复执行之前的命令。
# 查看命令历史
$ history
# 执行历史中的第n条命令
$ !n
# 执行上一条命令
$ !!
# 执行最近一次以特定字符串开头的命令
$ !string
# 搜索命令历史(按Ctrl+R进入搜索模式,输入关键词,按Enter执行)
# 示例:搜索包含"git"的命令
(reverse-i-search)`git': git commit -m "Add new feature"
# 清除命令历史
$ history -c
2. 命令别名
命令别名允许你为常用的命令创建简短的别名,减少输入量。你可以在`~/.bashrc`或`~/.bash_aliases`文件中定义别名。
# 临时创建别名(仅在当前会话有效)
$ alias ll='ls -la'
# 永久创建别名(编辑~/.bashrc文件)
$ echo "alias ll='ls -la'" >> ~/.bashrc
$ echo "alias gitcm='git commit -m'" >> ~/.bashrc
$ echo "alias gs='git status'" >> ~/.bashrc
# 重新加载~/.bashrc文件使别名生效
$ source ~/.bashrc
# 查看所有别名
$ alias
# 取消别名
$ unalias ll
3. 文件和目录操作
文件和目录操作是Linux命令行中最常用的操作之一,以下是一些实用技巧:
# 递归创建目录
$ mkdir -p dir1/dir2/dir3
# 复制文件并保留权限
$ cp -p source.txt destination.txt
# 递归复制目录
$ cp -r source_dir destination_dir
# 移动文件或目录
$ mv source destination
# 安全删除文件(需要安装trash-cli)
$ trash-put file.txt
# 查找文件
$ find /path/to/search -name "filename"
$ find /path/to/search -type f -name "*.txt" # 查找所有.txt文件
$ find /path/to/search -type d -name "dir*" # 查找所有以dir开头的目录
# 查找包含特定内容的文件
$ grep -r "content" /path/to/search
$ grep -r "content" /path/to/search --include="*.txt" # 仅查找.txt文件
# 查找大文件
$ find /path/to/search -type f -size +100M # 查找大于100MB的文件
# 查看文件大小
$ du -h file.txt # 以人类可读的格式显示
$ du -sh directory # 显示目录的总大小
# 排序文件大小
$ du -h * | sort -hr # 按大小降序排序
# 显示文件的前n行
$ head -n 10 file.txt
# 显示文件的后n行
$ tail -n 10 file.txt
# 实时查看文件内容(常用于查看日志)
$ tail -f file.txt
# 查看文件的前n个字符
$ head -c 100 file.txt
# 查看文件的后n个字符
$ tail -c 100 file.txt
# 统计文件的行数、单词数和字符数
$ wc file.txt
$ wc -l file.txt # 仅统计行数
$ wc -w file.txt # 仅统计单词数
$ wc -c file.txt # 仅统计字符数
# 比较两个文件的差异
$ diff file1.txt file2.txt
$ vimdiff file1.txt file2.txt # 使用vim查看差异
# 合并两个文件的差异
$ patch file1.txt file2.patch
4. 文本处理
Linux提供了强大的文本处理工具,如grep、sed、awk等,它们可以帮助你快速处理和分析文本数据。
# 搜索文本
$ grep "pattern" file.txt
$ grep -i "pattern" file.txt # 忽略大小写
$ grep -v "pattern" file.txt # 反向搜索,显示不包含pattern的行
$ grep -n "pattern" file.txt # 显示行号
$ grep -A 2 -B 2 "pattern" file.txt # 显示匹配行及其前后2行
# 替换文本
$ sed 's/old/new/g' file.txt # 替换所有匹配的文本
$ sed 's/old/new/' file.txt # 只替换每行的第一个匹配
$ sed -i 's/old/new/g' file.txt # 直接修改文件
# 按列处理文本
$ awk '{print $1, $3}' file.txt # 打印第1列和第3列
$ awk -F"," '{print $1}' file.csv # 使用逗号作为分隔符
$ awk '{sum += $1} END {print sum}' file.txt # 计算第1列的和
# 排序文本
$ sort file.txt
$ sort -n file.txt # 按数字排序
$ sort -r file.txt # 反向排序
$ sort -k 2 file.txt # 按第2列排序
# 去重
$ uniq file.txt # 移除连续的重复行
$ sort file.txt | uniq # 移除所有重复行
$ sort file.txt | uniq -c # 显示重复行的次数
# 分割文件
$ split -l 1000 file.txt # 每1000行分割为一个文件
$ split -b 10M file.txt # 每10MB分割为一个文件
# 连接文件
$ cat file1.txt file2.txt > combined.txt
# 压缩文件
$ gzip file.txt
$ bzip2 file.txt
$ xz file.txt
# 解压文件
$ gunzip file.txt.gz
$ bunzip2 file.txt.bz2
$ unxz file.txt.xz
# 创建和提取tar归档
$ tar -cvf archive.tar files/ # 创建归档
$ tar -xvf archive.tar # 提取归档
$ tar -czvf archive.tar.gz files/ # 创建压缩归档
$ tar -xzvf archive.tar.gz # 提取压缩归档
5. 系统管理
以下是一些系统管理相关的实用命令:
# 查看系统信息
$ uname -a
$ lsb_release -a
# 查看CPU信息
$ cat /proc/cpuinfo
$ lscpu
# 查看内存信息
$ free -h
$ cat /proc/meminfo
# 查看磁盘使用情况
$ df -h
# 查看磁盘分区
$ fdisk -l
$ lsblk
# 查看系统负载
$ uptime
$ top
$ htop # 需要安装
# 查看进程
$ ps aux
$ ps aux | grep process_name
# 终止进程
$ kill PID
$ kill -9 PID # 强制终止
$ pkill process_name
# 查看网络连接
$ netstat -tuln
$ ss -tuln # 更现代的命令
# 查看IP地址
$ ifconfig
$ ip addr
# 测试网络连接
$ ping google.com
$ traceroute google.com
$ mtr google.com # 需要安装
# 下载文件
$ wget https://example.com/file.txt
$ curl -O https://example.com/file.txt
# 查看系统日志
$ journalctl # systemd日志
$ tail -f /var/log/syslog # 系统日志
$ tail -f /var/log/auth.log # 认证日志
# 查看用户登录历史
$ last
$ lastlog
# 查看当前登录用户
$ who
$ w
# 切换用户
$ su - username
# 以其他用户身份执行命令
$ sudo command
# 查看sudo历史
$ sudo journalctl _COMM=sudo
# 更改文件权限
$ chmod 755 file.txt
$ chmod +x script.sh
# 更改文件所有者
$ chown user:group file.txt
# 查看文件的访问时间、修改时间和更改时间
$ stat file.txt
# 查找最近修改的文件
$ find /path/to/search -type f -mtime -1 # 最近1天修改的文件
$ find /path/to/search -type f -mmin -30 # 最近30分钟修改的文件
# 清理系统垃圾
$ sudo apt clean # Debian/Ubuntu
$ sudo dnf clean all # Fedora
$ sudo yum clean all # CentOS/RHEL
# 检查系统更新
$ sudo apt update # Debian/Ubuntu
$ sudo dnf check-update # Fedora
$ sudo yum check-update # CentOS/RHEL
# 安装系统更新
$ sudo apt upgrade # Debian/Ubuntu
$ sudo dnf update # Fedora
$ sudo yum update # CentOS/RHEL
6. 命令行快捷键
命令行快捷键可以帮助你更高效地操作命令行:
# 光标移动
Ctrl+A # 移动到行首
Ctrl+E # 移动到行尾
Ctrl+F # 向前移动一个字符
Ctrl+B # 向后移动一个字符
Alt+F # 向前移动一个单词
Alt+B # 向后移动一个单词
# 删除
Ctrl+U # 删除从光标到行首的内容
Ctrl+K # 删除从光标到行尾的内容
Ctrl+W # 删除从光标到前一个单词的内容
Alt+D # 删除从光标到下一个单词的内容
# 编辑
Ctrl+C # 中断当前命令
Ctrl+D # 发送EOF(结束文件),退出shell
Ctrl+Z # 暂停当前命令,放入后台
# 历史导航
Ctrl+R # 反向搜索命令历史
Ctrl+P # 上一条命令
Ctrl+N # 下一条命令
# 其他
Ctrl+L # 清屏
Ctrl+S # 暂停输出
Ctrl+Q # 恢复输出
Tab # 自动补全命令、文件名等
# 重复执行命令
!! # 执行上一条命令
!n # 执行历史中的第n条命令
!string # 执行最近一次以string开头的命令
# 在命令间跳转
Ctrl+O # 执行当前命令并显示下一条命令
# 修正命令
^old^new^ # 替换上一条命令中的old为new并执行
# 查看命令的完整路径
which command
# 查看命令的帮助信息
command --help
man command
info command
7. 高级技巧
以下是一些更高级的Linux命令行技巧:
# 命令组合
$ command1 && command2 # 仅当command1成功执行后才执行command2
$ command1 || command2 # 仅当command1执行失败后才执行command2
$ command1 ; command2 # 无论command1是否成功,都执行command2
# 管道
$ command1 | command2 # 将command1的输出作为command2的输入
$ command1 | command2 | command3 # 多级管道
# 重定向
$ command > file.txt # 将标准输出重定向到file.txt(覆盖)
$ command >> file.txt # 将标准输出重定向到file.txt(追加)
$ command 2> error.txt # 将标准错误重定向到error.txt
$ command > file.txt 2>&1 # 将标准输出和标准错误都重定向到file.txt
$ command < input.txt # 将input.txt作为command的标准输入
# 后台执行
$ command & # 在后台执行命令
$ nohup command & # 在后台执行命令,即使关闭终端也继续运行
$ disown # 从当前shell中分离后台任务
# 作业控制
$ jobs # 查看后台作业
$ fg %n # 将后台作业n带到前台
$ bg %n # 将前台作业n放到后台
# 命令替换
$ echo "Today is $(date)" # 使用$()进行命令替换
$ echo "Today is `date`" # 使用``进行命令替换
# 变量
$ var=value # 定义变量
$ echo $var # 访问变量
$ export var # 导出变量,使其在子shell中可用
# 数组
$ array=(value1 value2 value3)
$ echo ${array[0]} # 访问第一个元素
$ echo ${array[@]} # 访问所有元素
$ echo ${#array[@]} # 数组长度
# 条件判断
$ if [ condition ]; then
commands
elif [ condition ]; then
commands
else
commands
fi
# 循环
$ for i in {1..10}; do
echo $i
done
$ while [ condition ]; do
commands
done
# 函数
$ function name() {
commands
}
$ name() {
commands
}
# 计算
$ echo $((1+1))
$ expr 1 + 1
$ bc <<< "1+1"
# 随机数
$ echo $RANDOM
$ shuf -i 1-100 -n 1
# 字符串操作
$ string="hello world"
$ echo ${#string} # 字符串长度
$ echo ${string:0:5} # 截取前5个字符
$ echo ${string//world/everyone} # 替换字符串
# 网络相关
$ curl ifconfig.me # 查看公网IP
$ curl ipinfo.io # 查看IP信息
$ ssh user@hostname # SSH登录
$ scp file.txt user@hostname:/path/to/destination # 复制文件到远程服务器
$ rsync -avz source/ user@hostname:/path/to/destination # 同步文件到远程服务器
# 磁盘相关
$ dd if=/dev/zero of=/path/to/file bs=1M count=100 # 创建100MB的文件
$ shred -u file.txt # 安全删除文件
# 时间相关
$ date # 显示当前时间
$ date -s "2024-03-01 12:00:00" # 设置系统时间
$ sleep 10 # 睡眠10秒
# 系统监控
$ watch -n 1 'command' # 每1秒执行一次命令并显示结果
$ vmstat 1 # 每1秒显示一次系统状态
$ iostat 1 # 每1秒显示一次I/O统计
# 调试
$ set -x # 开启调试模式
$ set +x # 关闭调试模式
$ bash -x script.sh # 以调试模式执行脚本
# 查看系统调用
$ strace command # 跟踪命令的系统调用
$ ltrace command # 跟踪命令的库调用
# 查看文件的依赖
$ ldd /path/to/executable
# 查看进程的打开文件
$ lsof -p PID
# 查看端口占用
$ lsof -i :8080
$ netstat -tuln | grep 8080
$ ss -tuln | grep 8080
# 生成SSH密钥
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 复制SSH公钥到远程服务器
$ ssh-copy-id user@hostname
# 查看SSL证书信息
$ openssl x509 -in certificate.crt -text -noout
# 测试SSL连接
$ openssl s_client -connect example.com:443
# 生成密码
$ openssl rand -base64 32
$ pwgen 12 1 # 需要安装pwgen
# 加密文件
$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
# 解密文件
$ openssl enc -d -aes-256-cbc -in file.txt.enc -out file.txt
# 查看文件的MD5哈希值
$ md5sum file.txt
# 查看文件的SHA1哈希值
$ sha1sum file.txt
# 查看文件的SHA256哈希值
$ sha256sum file.txt
# 比较两个文件的哈希值
$ md5sum file1.txt file2.txt
# 检查文件的完整性
$ md5sum -c checksums.txt
8. 命令行工具推荐
以下是一些值得推荐的命令行工具:
- htop - 增强版的top命令,提供更友好的界面和更多功能
- iftop - 实时显示网络带宽使用情况
- iotop - 实时显示磁盘I/O使用情况
- ncdu - 交互式磁盘使用分析工具
- tmux - 终端复用器,允许在一个终端中运行多个会话
- screen - 终端复用器,类似于tmux
- fd - 更快速、更友好的find替代品
- rg - 更快速、更友好的grep替代品
- bat - 增强版的cat命令,支持语法高亮
- exa - 增强版的ls命令,提供更友好的界面
- fzf - 命令行模糊查找工具
- ripgrep - 快速的文本搜索工具
- tldr - 简化版的man页,提供实用的命令示例
- httpie - 增强版的curl命令,提供更友好的界面
- jq - JSON处理工具
- yq - YAML处理工具
- docker - 容器化平台
- git - 版本控制系统
- vim - 文本编辑器
- neovim - 增强版的vim
结论
Linux命令行是一个强大的工具,掌握这些实用技巧可以大大提高你的工作效率。当然,Linux命令行的功能远不止于此,还有很多其他的命令和技巧等待你去探索。
记住,最好的学习方法是实践。尝试在日常工作中使用这些命令和技巧,逐渐熟悉它们,你会发现Linux命令行越来越得心应手。
希望本文对你有所帮助,祝你在Linux的世界中愉快地探索!