第一次接触Linux终端时,那个闪烁的光标就像一扇神秘的大门。作为从Windows转战Linux的老用户,我清楚记得当初连"cd"命令都要查半天的窘境。这篇指南将用最直白的语言,带您跨越新手阶段的常见障碍。不同于教科书式的罗列命令,我会重点分享那些真正影响效率的基础操作——就像当年有位工程师在咖啡厅给我画的那些示意图一样实用。
很多人刚开始会把黑色窗口直接称为"Linux系统",其实严格来说:
可以通过echo $SHELL查看当前使用的Shell类型。建议新手先用默认的Bash,等熟悉后再尝试功能更强大的Zsh。
一个完整的Linux命令通常包含三部分:
bash复制命令 [选项] [参数]
例如:
bash复制ls -l /home
ls是命令本身-l是选项(通常以-或--开头)/home是参数(操作对象)特别提示:Linux是大小写敏感系统,"LS"和"ls"会被视为不同命令
cd命令远不止基础教程里教的那么简单:
cd - 快速返回上一个目录cd ~ 直接回到用户主目录pushd/popd 实现目录栈跳转(适合多级目录往返)实测案例:当需要在/var/log和/etc/nginx之间反复切换时:
bash复制pushd /var/log # 将当前目录压栈并跳转
pushd /etc/nginx # 再次压栈跳转
popd # 返回上一个目录
popd # 返回最初目录
除了基本的ls -l,这些组合更实用:
ls -lh 人性化显示文件大小(自动换算KB/MB)ls -lt 按修改时间排序ls -ltr 按时间倒序(最新文件在最后)ls -d */ 只显示子目录搭配通配符使用效果更佳:
bash复制ls *.log # 所有日志文件
ls 2023-*.txt # 2023开头的文本文件
cp命令使用时最容易踩的坑:
bash复制cp file1 file2 dir/ # 正确:多个文件复制到目录
cp -r dir1/ dir2/ # 复制目录需要-r参数
cp -i src dst # 覆盖前提示(建议alias默认添加)
mv命令的隐藏功能:
mv old.txt new.txtmv *.png ~/Pictures/mv -f file1 file2(慎用)rm命令的危险操作及防护:
bash复制rm -i *.tmp # 删除前逐个确认
mkdir empty && rsync -a --delete empty/ target/ # 安全清空目录
血泪教训:永远不要执行
rm -rf /或rm -rf /*,这是删库跑路的标准操作
除了查看文件:
bash复制cat > newfile.txt # 交互式创建文件(Ctrl+D结束)
cat file1 file2 > combined # 合并文件
cat -n access.log # 显示行号
最常用的日志分析命令:
bash复制grep "ERROR" system.log # 基础搜索
grep -i "timeout" *.conf # 忽略大小写
grep -A3 -B2 "panic" dmesg # 显示匹配前后内容
grep -v "#" config.ini # 反选(过滤注释行)
基础文本替换:
bash复制sed 's/foo/bar/g' file.txt # 替换所有foo为bar
sed -i.bak 's/127.0.0.1/localhost/' config # 直接修改文件并备份
sed '/^$/d' data.txt # 删除空行
权限数字计算原理:
chmod 755 script.sh 分解:
bash复制chmod 4755 /usr/bin/passwd
bash复制chmod 2775 /shared_dir
bash复制chmod 1777 /tmp
bash复制ps aux | grep nginx # 完整进程信息
top -u mysql # 监控特定用户进程
htop # 交互式进程管理器(需安装)
pstree -p # 树状显示进程关系
常用信号编号与作用:
实际应用:
bash复制kill -1 1234 # 让PID为1234的进程重载配置
killall -9 chrome # 强制关闭所有Chrome进程
pkill -f "python3 app.py" # 按完整命令终止
bash复制ping -c 4 example.com # 限制发送4个包
traceroute -T -p 443 github.com # TCP方式跟踪443端口
mtr google.com # 实时路由跟踪(需安装)
bash复制netstat -tulnp # 查看监听端口
ss -o state established '( dport = :ssh or sport = :ssh )' # 查看SSH连接
lsof -i :80 # 查看80端口占用
| 操作 | Debian/Ubuntu (apt) | RHEL/CentOS (yum) |
|---|---|---|
| 更新源 | apt update |
yum check-update |
| 安装软件 | apt install nginx |
yum install nginx |
| 搜索软件 | apt search keyword |
yum search keyword |
| 删除软件 | apt remove package |
yum remove package |
| 清理缓存 | apt autoremove |
yum clean all |
bash复制tar zxvf source.tar.gz
cd source/
./configure --prefix=/usr/local
make -j$(nproc) # 使用所有CPU核心编译
sudo make install
bash复制lscpu # CPU信息
free -h # 内存使用(人类可读格式)
lsblk # 磁盘分区情况
dmidecode -t memory # 详细内存信息
bash复制uptime # 负载情况
df -Th # 磁盘使用率
du -sh * # 当前目录大小统计
iftop # 实时网络流量(需安装)
bash复制!! # 重复上条命令
!$ # 上条命令的最后一个参数
!ssh # 执行最近以ssh开头的命令
Ctrl+R # 反向搜索历史命令
编辑~/.bashrc添加:
bash复制alias ll='ls -alFh'
alias grep='grep --color=auto'
alias rm='rm -i'
alias update='sudo apt update && sudo apt upgrade'
安全登录的最佳实践:
bash复制ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id user@remote_host
编辑~/.ssh/config示例:
bash复制Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/myserver_key
/var/log/syslog:系统主日志/var/log/auth.log:认证日志/var/log/nginx/:Nginx日志目录journalctl -xe:systemd日志查看bash复制tail -f /var/log/nginx/access.log # 实时查看
multitail /var/log/syslog /var/log/auth.log # 多日志监控(需安装)
时间字段顺序:分 时 日 月 周
bash复制* * * * * command # 每分钟执行
0 3 * * * /backup.sh # 每天3点执行
*/5 * * * * ping -c 1 google.com # 每5分钟
crontab -e/etc/crontabgrep CRON /var/log/syslogbash复制fdisk -l # 查看磁盘
sudo mkfs.ext4 /dev/sdb1 # 格式化
sudo mkdir /data # 创建挂载点
sudo mount /dev/sdb1 /data # 临时挂载
编辑/etc/fstab添加:
bash复制UUID=xxxx-xxxx-xxxx /data ext4 defaults 0 2
获取UUID:
bash复制blkid /dev/sdb1
bash复制export PATH=$PATH:/new/path # 临时生效
echo 'export VAR=value' >> ~/.bashrc # 永久生效
PATH:可执行文件搜索路径HOME:用户主目录USER:当前用户名SHELL:当前Shell路径EDITOR:默认文本编辑器bash复制Ctrl+O 保存
Ctrl+X 退出
Ctrl+W 搜索
Ctrl+\ 替换
bash复制i 进入编辑模式
ESC 返回命令模式
:wq 保存退出
:q! 强制退出
/pattern 搜索文本
| 格式 | 压缩命令 | 解压命令 |
|---|---|---|
| .zip | zip -r archive.zip dir |
unzip archive.zip |
| .tar.gz | tar czf archive.tar.gz dir |
tar xzf archive.tar.gz |
| .tar.xz | tar cJf archive.tar.xz dir |
tar xJf archive.tar.xz |
| .7z | 7z a archive.7z dir |
7z x archive.7z |
bash复制sudo adduser newuser # 交互式创建用户
sudo userdel -r olduser # 删除用户及主目录
sudo usermod -aG sudo username # 添加sudo权限
getent passwd # 查看所有用户
bash复制sudo passwd username # 修改密码
sudo chage -l username # 查看密码过期信息
sudo pam-config --add --pwquality # 密码复杂度配置
bash复制systemctl start nginx # 启动服务
systemctl enable nginx # 设置开机启动
systemctl status nginx # 查看服务状态
systemctl daemon-reload # 重载服务配置
bash复制journalctl -u nginx -f # 实时查看Nginx日志
journalctl --since "2023-01-01" --until "2023-01-02" # 时间范围查询
bash复制mpstat -P ALL 1 # 每核CPU使用率
pidstat -u 1 # 进程CPU占用
perf top # 函数级性能分析
bash复制vmstat 1 # 内存/交换区使用
slabtop # 内核slab内存统计
valgrind --leak-check=yes ./program # 内存泄漏检测
bash复制#!/bin/bash
set -euo pipefail # 严格模式:错误退出、未定义变量报错、管道错误检测
bash复制# 条件判断
if [ -f "/path/file" ]; then
echo "文件存在"
fi
# 循环处理
for i in {1..5}; do
echo "第$i次循环"
done
# 函数定义
function greet() {
echo "Hello, $1"
}
greet "World"
编辑/etc/ssh/sshd_config建议修改:
bash复制Port 2222 # 修改默认端口
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 禁用密码认证
AllowUsers yourname # 只允许特定用户
bash复制sudo ufw allow 22/tcp # 开放SSH端口
sudo ufw enable # 启用防火墙
sudo ufw status numbered # 查看规则
bash复制rsync -avz --delete /source/ /backup/daily/
tar -cvzf backup-$(date +%Y%m%d).tar.gz /important_data
bash复制#!/bin/bash
BACKUP_DIR="/backups"
LOG_FILE="/var/log/backup.log"
tar -cvzf "$BACKUP_DIR/$(date +%Y%m%d).tar.gz" \
/etc /home 2>> "$LOG_FILE"
find "$BACKUP_DIR" -type f -mtime +30 -delete
bash复制# 临时解决:
export LANG=zh_CN.UTF-8
# 永久解决:
sudo dpkg-reconfigure locales
# 选择zh_CN.UTF-8为默认
bash复制df -h # 查看分区使用率
du -xh / | sort -h | tail -n 20 # 查找大文件
lsof -nP | grep deleted # 查看已删除但未释放的文件
bash复制sudo netstat -tulnp | grep 80
sudo lsof -i :80
ss -ltnp 'sport = :80'
bash复制tmux new -s session1 # 新建会话
Ctrl+b d # 分离会话
tmux attach -t session1 # 重新接入
tmux ls # 查看会话列表
bash复制Ctrl+b c # 新建窗口
Ctrl+b , # 重命名窗口
Ctrl+b & # 关闭当前窗口
Ctrl+b p/n # 切换上一个/下一个窗口
bash复制git init # 初始化仓库
git add . # 添加所有文件
git commit -m "init" # 提交更改
git remote add origin URL # 添加远程仓库
git push -u origin master # 首次推送
bash复制git status # 查看状态
git log --oneline --graph # 简洁日志
git diff HEAD~1 # 对比上次提交
git checkout -b new_feature # 创建新分支
bash复制# Debian/Ubuntu
sudo apt build-dep package_name
# RHEL/CentOS
sudo yum install gcc make automake autoconf
bash复制./autogen.sh # 生成configure脚本(如果需要)
./configure --help # 查看配置选项
./configure --prefix=/usr/local
make
sudo make install
singlebash复制fsck /dev/sda1 # 交互式修复
fsck -y /dev/sda1 # 自动修复所有问题
bash复制docker ps -a # 查看所有容器
docker images # 查看镜像
docker run -it ubuntu bash # 启动交互式容器
docker exec -it container_id bash # 进入运行中容器
bash复制docker build -t myapp . # 构建镜像
docker save myapp > myapp.tar # 导出镜像
docker load < myapp.tar # 导入镜像
docker-compose up -d # 启动编排服务
bash复制# 查看当前限制
ulimit -a
# 临时提高文件打开数限制
ulimit -n 65535
# 永久修改需编辑/etc/security/limits.conf
编辑/etc/sysctl.conf示例:
bash复制# 提高TCP连接重用
net.ipv4.tcp_tw_reuse = 1
# 增加最大文件描述符
fs.file-max = 2097152
bash复制lspci -vvnn # 详细设备信息
lspci -k # 显示内核驱动
lspci -t # 树状显示设备关系
bash复制lsusb -t # 树状显示USB拓扑
lsusb -v # 详细设备描述符
usb-devices # 设备层级信息
bash复制timedatectl list-timezones | grep Shanghai # 查找时区
sudo timedatectl set-timezone Asia/Shanghai # 设置时区
bash复制sudo apt install chrony # 安装时间服务
sudo systemctl enable chronyd
chronyc sources -v # 查看时间源状态
bash复制python3 -m venv myenv # 创建虚拟环境
source myenv/bin/activate # 激活环境
deactivate # 退出环境
bash复制# Python版本管理(pyenv)
pyenv install 3.9.12
pyenv global 3.9.12
# Node版本管理(nvm)
nvm install 16.14.0
nvm use 16.14.0
bash复制sudo apt install tigervnc-standalone-server
vncserver :1 -geometry 1920x1080 -depth 24
bash复制ssh -X user@host # 启用X11转发
export DISPLAY=:10 # 手动设置显示端口
xeyes # 测试GUI程序
bash复制# 实时系统监控
glances # 综合监控(需安装)
nmon # 专业性能监控
# 历史数据分析
sar -u 1 10 # CPU使用率采样
sar -r 1 10 # 内存使用采样
bash复制# 节点监控导出器
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvf node_exporter*.tar.gz
cd node_exporter*/
./node_exporter
bash复制lsmod # 已加载模块列表
modinfo ext4 # 查看模块信息
sudo modprobe vboxguest # 加载模块
sudo rmmod module_name # 卸载模块
bash复制# 查看当前参数
cat /sys/module/ext4/parameters/*
# 临时修改参数
echo Y | sudo tee /sys/module/ext4/parameters/auto_da_alloc
# 永久配置需创建.conf文件
echo "options ext4 auto_da_alloc=1" | sudo tee /etc/modprobe.d/ext4.conf
bash复制systemd-analyze # 启动耗时统计
systemd-analyze blame # 各服务启动时间
journalctl -b # 本次启动日志
创建/etc/systemd/system/myapp.service:
bash复制[Unit]
Description=My Application
[Service]
ExecStart=/usr/bin/myapp
Restart=always
[Install]
WantedBy=multi-user.target
bash复制# 安装安全审计工具
sudo apt install lynis
# 执行系统审计
sudo lynis audit system
bash复制sudo apt install rkhunter
sudo rkhunter --check --sk
sudo rkhunter --update # 更新特征库
服务端:
bash复制sudo apt install nfs-kernel-server
sudo mkdir /shared
echo "/shared *(rw,sync,no_subtree_check)" | sudo tee /etc/exports
sudo exportfs -a
客户端:
bash复制sudo apt install nfs-common
sudo mount server:/shared /mnt
bash复制sudo apt install samba
sudo smbpasswd -a username # 添加Samba用户
编辑/etc/samba/smb.conf添加:
bash复制[shared]
path = /shared
valid users = username
read only = no
bash复制lvcreate -L 1G -s -n snap_home /dev/vg0/home
mount /dev/vg0/snap_home /mnt/snapshot
bash复制sudo btrfs subvolume snapshot / /snapshots/$(date +%Y%m%d)
sudo btrfs subvolume list / # 查看快照
bash复制dmesg -T # 带时间戳的内核日志
dmesg -l err # 只显示错误信息
journalctl -k # systemd管理的内核日志
bash复制# 临时修改
echo 1 | sudo tee /proc/sys/vm/drop_caches
# 永久修改
echo "vm.swappiness = 10" | sudo tee /etc/sysctl.d/99-tuning.conf
sudo sysctl -p
bash复制# 查看当前调节器
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 设置为性能模式
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
bash复制sudo apt install hibernate
sudo pm-hibernate # 测试休眠
编辑/etc/default/grub添加:
bash复制GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=your_swap_uuid"
bash复制# Debian/Ubuntu
sudo apt install --no-install-recommends package
# RHEL/CentOS
sudo yum --setopt=install_weak_deps=False install package
bash复制# Debian/Ubuntu
sudo apt autoremove --purge
deborphan | xargs sudo apt-get -y remove --purge
# RHEL/CentOS
package-cleanup --leaves | xargs yum remove -y
创建/etc/logrotate.d/myapp:
bash复制/var/log/myapp/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload myapp
endscript
}
bash复制logrotate -vf /etc/logrotate.d/myapp
bash复制export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
创建/etc/apt/apt.conf.d/99proxy:
bash复制Acquire::http::Proxy "http://proxy.example.com:8080";
Acquire::https::Proxy "http://proxy.example.com:8080";
bash复制sudo apt install powerline fonts-powerline
echo 'source /usr/share/powerline/bindings/bash/powerline.sh' >> ~/.bashrc
bash复制curl -sS https://starship.rs/install.sh | sh
echo 'eval "$(starship init bash)"' >> ~/.bashrc
bash复制# 并行压缩所有jpg文件
ls *.jpg | parallel -j 4 'convert {} -quality 80 {.}.webp'
# 并行ping测试
parallel -j0 ping -c 3 ::: example.com google.com github.com
bash复制# 批量重命名
ls *.txt | xargs -I {} mv {} {}.bak
# 批量查找内容
find . -name "*.php" | xargs grep "mysql_connect"
bash复制# Ubuntu LTS升级
sudo do-release-upgrade
# CentOS版本升级
sudo yum install preupgrade-assistant-contents
sudo preupg
sudo yum install redhat-upgrade-tool
bash复制# Ubuntu主线内核
sudo apt install linux-generic-hwe-20.04
# 手动编译安装
make oldconfig
make -j$(nproc)
sudo make modules_install install
mount /dev/sda1 /mntbash复制mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
bash复制# BIOS系统
sudo grub-install /dev/sda
sudo update-grub
# UEFI系统
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi
sudo update-grub
bash复制# 单核性能
sysbench cpu --cpu-max-prime=20000 run
# 多核测试
stress-ng --cpu 0 --cpu-method all -t 60s
bash复制# 顺序读写
fio --name=seqread --rw=read --direct=1 --bs=1M --size=1G --numjobs=1
# 随机IO
fio --name=randrw --rw=randrw --direct=1 --bs=4k --size=1G --numjobs=4
bash复制memtester 1G 3 # 测试1GB内存,3次循环
sudo badblocks -sv /dev/sda1 # 磁盘坏块检测
bash复制stress-ng --vm 2 --vm-bytes 2G -t 60s # 2个进程各占2GB
bash复制sudo apt install lm-sensors
sudo sensors-detect # 探测硬件传感器
sensors # 查看温度信息
bash复制sudo hddtemp /dev/sda
sudo smartctl -A /dev/sda | grep Temperature
bash复制sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress
bash复制sudo partclone.ext4 -b -s /dev/sda1 -o /dev/sdb1
bash复制journalctl -p err..emerg # 严重错误日志
grep -i "error\|fail\|warn" /var/log/syslog
bash复制journalctl --since "2023-01-01" --until "2023-01-02"
journalctl -u nginx --since yesterday
编辑/etc/security/limits.conf:
bash复制username hard nproc 1000 # 最大进程数
username soft nofile 4096 # 文件描述符
bash复制# 查看当前内核限制
cat /proc/sys/fs/file-max
# 临时修改
echo 1000000 > /proc/sys/fs/file-max
bash复制last -a # 登录历史
lastb # 失败登录尝试
grep "Failed password" /var/log/auth.log
bash复制sudo apt install aide
sudo aideinit
sudo aide --check
bash复制sudo tcpdump -i eth0 port 80 -w capture.pcap
sudo tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
bash复制# 常用过滤表达式
http.request.method == "GET"
tcp.port == 443
ip.src == 192.168.1.100
bash复制sudo tuned-adm profile throughput-performance
sudo tuned-adm active
bash复制# 查看当前值
sysctl -a | grep tcp_keepalive
# 临时修改
sudo sysctl -w net.ipv4