Linux系统的Shell常见指令和常见知识点小结(以bash为主)

作者:袖梨 2026-08-07

Linux系统的Shell常见指令和常见知识点小结(以bash为主)并不只看表面做法,关键还要理解相关条件、限制和后续影响。

Shell 基础知识

  1. Shell:用户与系统内核之间的命令解释器。
  2. 查看当前 Shellecho $SHELLecho $0
  3. 脚本第一行#!/bin/bash (指定解释器)
  4. 执行脚本
    1. bash script.sh (新子进程)
    2. ./script.sh (需 chmod +x
    3. source script.sh / . script.sh (当前 Shell 执行,可修改环境变量)
  5. 脚本调试
    1. 语法检查:bash -n script.sh
    2. 跟踪执行:bash -x script.sh
    3. 安全选项:set -euo pipefail (遇错即停、未定义变量报错、管道命令失败也报错)

文件与目录操作

命令说明
ls -lh详细信息,人类可读的大小
cd -回到上一次目录
pwd打印当前完整路径
mkdir -p a/b/c递归创建目录
touch file新建空文件,或更新文件时间戳
cp -r src dst递归复制
mv old new移动/重命名
rm -rf dir危险 强制递归删除
find . -name "*.log" -mtime +7 -exec rm {} ;查找并删除7天前的日志
ln -s target linkname创建软链接
stat file查看文件详细属性

查看文件内容

head -n 20 file      # 前20行tail -n 20 file      # 后20行tail -f /var/log/syslog  # 实时跟踪less file            # 分页浏览,/搜索,q退出wc -l file           # 统计行数

权限管理

chmod 755 file       # rwxr-xr-xchmod u+x script.sh  # 属主增加执行权限chown user:group filechgrp group file

数字计算:r=4, w=2, x=1

例:rwxr-x--- = 750

压缩与归档

tar -czvf archive.tar.gz dir/    # 打包为 tar.gztar -xzvf archive.tar.gz         # 解压 tar.gztar -cjvf archive.tar.bz2 dir/   # 打包为 tar.bz2tar -xjvf archive.tar.bz2zip -r file.zip dir/             # 压缩为 zipunzip file.zipgzip file                         # 生成 file.gzgunzip file.gz

网络与传输

curl -O http://example.com/file  # 下载并保存curl -I http://example.com       # 显示响应头wget http://example.com/fileping -c 4 google.comnetstat -tulnp | grep :80       # 查看端口占用ss -tulnp                       # 更现代的 netstat

进程与任务

ps aux | grep nginxtop               # 实时监控,按 q 退出htop              # 需安装,更好看kill -9 PID       # 强制终止pkill -f pattern  # 按名称模式终止&                 # 命令后加 & 后台运行jobs              # 列出当前 Shell 后台任务fg %1             # 将后台任务 1 拉到前台bg %1             # 让暂停的任务在后台继续nohup long_cmd &  # 关闭终端后仍运行,输出默认到 nohup.out

变量与环境变量

name="Linux"                 # 赋值等号两边不加空格echo "Hello, $name"          # 双引号解析变量echo 'Hello, $name'          # 单引号原样输出echo "PATH is ${PATH}"       # 用大括号界定变量边界# 环境变量export MY_VAR="value"        # 使子进程可见echo $HOME $USER $PWD $?     # $? 上条命令退出码(0 成功)# 只读变量readonly PI=3.14# 命令结果赋值now=$(date)                  # 推荐使用 $()files_count=$(ls | wc -l)

特殊变量

Linux系统的Shell常见指令和常见知识点小结(以bash为主)

变量含义
$0脚本名
$1, $2...第1、第2…个参数
$#参数个数
$@所有参数(每个为独立字符串)
$*所有参数(合并成一个字符串)
$?上一条命令的退出码
$$当前 Shell 的 PID
$!最后一个后台命令的 PID

字符串操作

str="Hello World"echo ${#str}                 # 长度:11echo ${str:0:5}              # 截取:Helloecho ${str/World/Buddy}      # 替换第一个匹配:Hello Buddyecho ${str//o/O}             # 全局替换:HellO WOrld# 默认值处理(变量不存在或为空时使用默认值)echo ${UNSET_VAR:-"default"} 

条件判断与测试

常用测试标志

  1. 文件测试-f 存在且为普通文件,-d 目录,-e 存在,-x 可执行,-s 非空
  2. 字符串测试= 相等,!= 不等,-z 空为真,-n 非空为真
  3. 数字测试-eq(等于),-ne-gt-lt-ge-le

推荐使用 [[ ]] (Bash 扩展),支持 &&|| 和正则匹配,且变量无需加引号防空格拆分。

Linux系统的Shell常见指令和常见知识点小结(以bash为主)

if [[ $name == "Alice" ]]; then    echo "Welcome, Alice"elif [[ -f /etc/config ]]; then    echo "Config found"else    echo "Nothing matched"fi# 一行写法[[ -d /tmp ]] && echo "tmp exists"

Linux系统的Shell常见指令和常见知识点小结(以bash为主)

case 多分支

case "$1" in    start)        echo "Starting...";;    stop)        echo "Stopping...";;    restart|reload)        echo "Restarting...";;    *)        echo "Usage: $0 {start|stop|restart}";;esac

循环结构

# for 循环for fruit in apple banana cherry; do    echo "I like $fruit"done# C 风格 forfor (( i=0; i<5; i++ )); do    echo "Number: $i"done# 遍历文件for logfile in /var/log/*.log; do    gzip "$logfile"done# while 循环count=1while [[ $count -le 5 ]]; do    echo "Count: $count"    ((count++))          # 自增done# 按行读取文件while IFS= read -r line; do    echo "$line"done < "file.txt"

循环控制break 跳出整个循环,continue 跳过本次循环余下部分。

函数

# 定义say_hello() {    local name=$1       # 局部变量    echo "Hello, $name"    return 0            # 返回值 0-255,仅表示状态}# 调用say_hello "Linux"# 获取函数输出msg=$(say_hello "World")echo "$msg"# 函数内可使用 $1..$n 获取参数

重定向与管道

操作说明
cmd > file标准输出覆盖写入
cmd >> file标准输出追加写入
cmd < file从文件读取输入
cmd 2> err.log标准错误覆盖写入
cmd &> all.log标准输出和错误都写入同一文件
cmd > /dev/null 2>&1丢弃所有输出
`cmd1cmd2`
`cmdtee file`

Here Document(多行文本输入)

cat <<EOF > output.txtLine 1Line 2EOF

文本处理三剑客

grep:搜索文本

grep "pattern" filegrep -i "pattern" file           # 忽略大小写grep -r "pattern" /dir/         # 递归搜索grep -v "pattern" file           # 反向匹配grep -c "pattern" file           # 计数grep -E "regex" file             # 扩展正则

sed:流编辑器,常用于替换

sed 's/old/new/g' file          # 全局替换(仅输出,不改文件)sed -i 's/old/new/g' file       # 直接修改文件sed '/pattern/d' file           # 删除匹配行sed -n '5,10p' file             # 打印第5到10行

awk:强大的文本分析工具

awk '{print $1, $3}' file       # 打印第1和第3列(默认空格分隔)awk -F: '{print $1}' /etc/passwd  # 指定分隔符为冒号awk '$3 > 1000' /etc/passwd     # 按条件过滤

实用操作

  1. 历史命令history!! 执行上一条,!$ 上条最后一个参数,!n 执行第 n 条。
  2. 花括号扩展echo file{1,2,3}.txt 展开为 file1.txt file2.txt file3.txt
  3. 快速备份cp file.txt{,.bak} 变成 cp file.txt file.txt.bak
  4. 子 shell(cd /tmp && ls) 目录切换不影响当前 Shell
  5. 算术运算echo $((5 + 3 * 2)),或 let a=5+3
  6. 读取用户输入read -p "Your name: " username
  7. 别名alias ll='ls -lh',永久写入 ~/.bashrc~/.bash_aliases

常见错误解决方法

  1. 变量始终加双引号:"$v快速掌握Linux Shell核心指令,从基础命令到脚本调试全覆盖,包含文件操作、权限管理、文本处理三剑客与实用技巧,让你轻松提升命令行效率,即刻应对日常运维与开发任务ar",防止包含空格时出现意外。
  2. 脚本头部加保护:set -euo pipefailset -eu
  3. **使用 [[ ]] 而非 **[ ] 进行测试(写 Bash 脚本时)。
  4. 命令替换用 $() 而非反引号,嵌套更清晰。
  5. 函数内变量用 local 声明,避免污染全局变量。
  6. 删除操作前务必确认:先用 echo 测试命令,或 rm 前加 -i
  7. 检查命令退出码:if command; then echo ok; fi
  8. 避免将变量放在 cd 等命令前不加引号,防止路径包含空格出错。

相关文章

精彩推荐