Skip to content
第 207 / 250 章运维⏱ 16 分钟阅读

第 207 章:Linux 基础与常用命令

学习目标

  • 掌握 Linux 文件系统
  • 学会常用命令
  • 理解文件权限
  • 熟悉用户与进程管理

一、Linux 简介

Linux 是开源的类 Unix 操作系统,服务器领域主流。

二、文件系统结构

目录作用
/bin基本命令
/sbin系统命令
/etc配置文件
/home普通用户家目录
/root超级用户家目录
/usr应用软件
/var运行时数据(log、cache)
/tmp临时文件
/opt第三方软件
/proc进程信息
/dev设备

三、基础命令

3.1 文件与目录

bash
# 切换目录
cd /home          # 绝对路径
cd ..             # 上级
cd ~              # 家目录
cd -              # 上次目录

# 列目录
ls                # 简单
ls -l             # 详细
ls -la            # 含隐藏
ls -lh            # 人类可读大小
ls -lt            # 按时间排序

# 增删改
mkdir test                # 创建目录
mkdir -p a/b/c            # 递归
touch file.txt            # 创建空文件 / 更新 mtime
cp src.txt dst.txt        # 复制
cp -r dir1 dir2           # 递归
mv old new                # 移动/重命名
rm file.txt               # 删除
rm -rf dir                # 强制递归
rmdir empty               # 删空目录

# 查看
cat file                  # 全输出
less file                 # 分页(空格翻页,q 退出)
head -n 10 file           # 前 10 行
tail -n 10 file           # 后 10 行
tail -f log               # 实时跟踪

# 查找
find / -name "*.log"                    # 按名
find . -type f -size +1M                # 按大小
find . -mtime -7                        # 7 天内修改
which java                              # 查命令位置
whereis java                            # 查二进制、源码、文档

3.2 文本三剑客

grep(过滤)

bash
grep "error" log.txt
grep -i "error" log.txt              # 忽略大小写
grep -n "error" log.txt              # 显示行号
grep -v "error" log.txt              # 反选
grep -r "TODO" src/                  # 递归
grep -E "error|warning" log.txt      # 多模式(扩展正则)

sed(替换)

bash
sed 's/old/new/' file.txt                # 替换(只输出,不写文件)
sed -i 's/old/new/g' file.txt            # 原地替换
sed '/^$/d' file.txt                     # 删空行
sed -n '10,20p' file.txt                 # 打印 10-20 行

awk(列处理)

bash
awk '{print $1}' file.txt                # 打印第 1 列
awk -F: '{print $1, $7}' /etc/passwd     # 指定分隔符
awk '$3 > 100 {print $1}' file.txt       # 条件
awk '{sum += $1} END {print sum}' file   # 求和

3.3 链接

bash
ln -s /opt/java/bin/java /usr/bin/java   # 软链
ln file1 file2                            # 硬链

四、权限管理

4.1 权限位

-rwxr-xr--
↑ ↑↑↑ ↑↑↑ ↑↑↑
│ │││ │││ │└─ 其他用户
│ │││ │││ └── 其他用户执行
│ │││ │└──── 其他用户写
│ │││ └───── 其他用户读
│ │││
│ ││└─────── 组用户执行
│ │└──────── 组用户写
│ └───────── 组用户读

└────────── 文件类型
  - 普通文件
  d 目录
  l 软链

权限数值:

  • r = 4
  • w = 2
  • x = 1

4.2 修改权限

bash
chmod 755 file                # rwxr-xr-x
chmod u+x file                # 用户加执行
chmod g+w file                # 组加写
chmod o-r file                # 其他去读

chown user:group file         # 改属主 + 属组
chown -R user dir             # 递归

五、用户管理

bash
# 添加
useradd -m -s /bin/bash tom
passwd tom

# 删除
userdel -r tom

# 组
groupadd dev
usermod -aG dev tom

# 切换
su - tom
sudo command

# 查看
whoami
who
id tom

六、进程管理

6.1 查看

bash
ps aux                 # 全部进程
ps -ef                 # 完整格式
top                    # 实时
htop                   # 增强版

# 按 CPU / 内存排序
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head

6.2 进程操作

bash
kill PID               # 正常结束
kill -9 PID            # 强制
killall process_name   # 按名字
pkill -f pattern       # 按模式

# 后台
nohup java -jar app.jar &
nohup java -jar app.jar > log.out 2>&1 &
disown

# 查 PID
pgrep -f java
pidof java

6.3 服务

bash
# systemd(主流)
systemctl start nginx
systemctl stop nginx
systemctl status nginx
systemctl enable nginx       # 开机自启
journalctl -u nginx -f       # 日志

七、网络命令

bash
ip addr                       # IP
ip route                      # 路由
ping host
curl http://x.com
wget url

# 端口
netstat -tlnp                 # 监听端口
ss -tlnp                      # 现代替代

# SSH
ssh user@host
ssh -i key.pem user@host
scp file user@host:/path
scp user@host:/file local/

# DNS
nslookup x.com
dig x.com

八、磁盘管理

bash
df -h              # 磁盘使用
du -sh dir         # 目录大小
du -sh * | sort -h

# 分区 / 挂载
fdisk -l
mount /dev/sdb1 /mnt
umount /mnt

# swap
free -h
swapon /dev/sdb2

九、软件包

bash
# Debian/Ubuntu
apt update
apt install nginx
apt remove nginx

# CentOS
yum install nginx
dnf install nginx

# 通用
./configure && make && make install

十、系统信息

bash
uname -a              # 系统
cat /etc/os-release   # 发行版
uptime                # 运行时长
date
cal

# CPU
lscpu
nproc

# 内存
free -h

# 硬件
lshw

十一、SSH 免密登录

bash
# 本地生成密钥
ssh-keygen -t ed25519

# 上传公钥
ssh-copy-id user@host

# 或手动
cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

十二、实用技巧

12.1 快捷键

快捷键作用
Ctrl + C终止
Ctrl + D退出 / EOF
Ctrl + L清屏
Ctrl + A / E行首 / 行尾
Ctrl + U / K删到行首 / 行尾
Ctrl + R搜索历史
Ctrl + Z挂起 + bg 恢复

12.2 别名

bash
# ~/.bashrc
alias ll='ls -la'
alias gs='git status'
alias k='kubectl'
alias ports='netstat -tlnp | grep LISTEN'
alias myip='curl ifconfig.me'

source ~/.bashrc

12.3 历史

bash
history
!100              # 执行第 100 条
!!                # 上一条
!ssh              # 最近以 ssh 开头的
Ctrl + R          # 模糊搜

十三、本章小结

类别命令
文件ls / cd / cp / mv / rm
文本grep / sed / awk
权限chmod / chown
进程ps / top / kill
网络ip / curl / ssh
磁盘df / du
服务systemctl

动手练习

  1. 创建用户 tom,加入 dev 组
  2. 写一个 shell 脚本批量重命名文件
  3. 配置 SSH 免密登录
  4. 用 grep / awk 分析 nginx 访问日志

推荐阅读


下一章:第 208 章:Shell 脚本编程

本站基于 VitePress 构建 · 由 Codebook 团队维护