1 linux 目录介绍
Linux 文件系统采用层次化的目录结构,所有目录都从根目录 / 开始
1.1 核心目录
/ (根目录)
整个文件系统的起点、包含所有其他目录和文件
/bin (基本命令二进制文件)
存放系统最基本的shell命令:如 ls, cp, mv, rm, cat 等,所有用户都可使用。
/sbin (系统二进制文件)
存放系统管理命令,如 fdisk, ifconfig, reboot 等,通常需要 root 权限才能执行
/boot (引导加载程序文件)
包含 Linux 内核、初始 RAM 磁盘映像和引导加载程序配置文件。如 vmlinuz, initrd.img, grub/
/dev (设备文件)
包含所有设备文件,如 /dev/sda (硬盘), /dev/tty (终端), /dev/null (空设备)
/etc (系统配置文件)
包含系统和应用程序的配置文件,如 /etc/passwd (用户账户), /etc/fstab (文件系统表)
/home (用户主目录)
普通用户的个人目录,每个用户通常有自己的子目录,如 /home/username
/lib (系统库文件)
存放系统最基本的共享库和内核模块,如 /lib/modules/ (内核模块)
1.2 重要系统目录
/media (可移动媒体挂载点)
自动挂载的可移动设备,如 U 盘、光盘
/mnt (临时挂载点)
用于临时手动挂载文件系统
/opt (可选应用程序)
第三方应用程序的安装位置
/proc (虚拟文件系统)
包含系统进程和内核信息的虚拟文件系统,如 /proc/cpuinfo (CPU 信息), /proc/meminfo (内存信息)
/root (root 用户主目录)
超级用户 root 的主目录
/run (运行时数据)
存储系统运行时的临时数据,如 /run/lock (锁文件)
/tmp (临时文件)
存放临时文件,系统重启后通常会被清空
1.3 系统资源目录
/usr (用户程序)
包含用户应用程序和文件
1.3.1 重要子目录:
-
/usr/bin: 用户命令
-
/usr/sbin: 系统管理命令
-
/usr/lib: 库文件
-
/usr/local: 本地安装的软件
-
/usr/share: 共享数据
/var (可变数据)
存放经常变化的文件
重要子目录:
-
/var/log: 系统日志
-
/var/cache: 应用程序缓存
-
/var/spool: 队列数据
-
/var/www: Web 服务器目录 (常见)
1.4 特殊目录
/sys (虚拟文件系统)
提供内核数据结构接口, 用于配置设备和内核参数
/srv (服务数据)
包含特定服务提供的数据, 如网站数据、FTP 数据等
/lost+found (恢复文件)
文件系统修复后找到的丢失文件
2 常见shell 指令
Shell 是 Linux/Unix 系统的命令行界面,是与操作系统交互的主要方式。以下是常用的 Shell 指令分类介绍:
2.1 文件和目录操作
2.1.1 ls - 列出目录内容
ls # 列出当前目录内容
ls -l # 详细列表(长格式)
ls -a # 显示隐藏文件(以.开头)
ls -lh # 人类可读的文件大小显示
2.1.2 cd - 切换目录
cd /path/to/dir # 切换到指定目录
cd ~ # 切换到用户主目录
cd .. # 切换到上级目录
cd - # 切换到上一个工作目录
2.1.3 pwd - 显示当前工作目录
pwd # 打印当前目录的完整路径
2.1.4 mkdir - 创建目录
mkdir dirname # 创建单个目录
mkdir -p dir1/dir2 # 创建多级目录
2.1.5 rm - 删除文件或目录
rm file.txt # 删除文件
rm -r dirname # 递归删除目录
rm -f file.txt # 强制删除,不提示
2.1.6 mv - 移动或重命名文件/目录
mv file1 file2 # 重命名
mv file1 dir/ # 移动文件
2.1.7 touch - 创建空文件或更新文件时间戳
touch file.txt # 创建空文件或更新访问时间
2.2 文件查看和编辑
2.2.1 cat - 查看文件内容
cat file.txt # 显示文件内容
cat -n file.txt # 显示行号
2.2.2 less/more - 分页查看文件
less file.txt # 可前后翻页
more file.txt # 只能向下翻页
2.2.3 head/tail - 查看文件开头/结尾
head -n 5 file.txt # 查看前5行
tail -f logfile # 实时查看日志更新
2.2.4 grep - 文本搜索
grep "pattern" file.txt # 搜索包含pattern的行
grep -i "pattern" file.txt # 忽略大小写
grep -r "pattern" /path # 递归搜索目录
2.3 系统信息
2.3.1 ps - 查看进程
ps aux # 查看所有运行中的进程
ps -ef # 另一种格式显示进程
2.3.2 top/htop - 动态查看系统状态
top # 动态显示进程和资源使用
htop # 更友好的交互式top(需安装)
2.3.3 free - 查看内存使用
free -h # 以人类可读格式显示内存信息
2.3.4 df - 查看磁盘空间
df -h # 显示磁盘使用情况(人类可读)
2.3.5 uname - 显示系统信息
uname -a # 显示所有系统信息
2.4 网络相关
2.4.1 ping - 测试网络连接
ping example.com # 测试到example.com的连接
2.4.2 ifconfig/ip - 网络接口配置
ifconfig # 显示网络接口信息(较旧)
ip addr # 显示网络接口信息(新版)
2.4.3 netstat/ss - 网络统计
netstat -tuln # 显示监听端口(较旧)
ss -tuln # 显示监听端口(新版)
2.4.5 wget/curl - 下载工具
wget http://example.com/file # 下载文件
curl -O http://example.com/file
2.5 权限管理
2.5.1 chmod - 修改文件权限
chmod 755 file.sh # 设置权限(rwxr-xr-x)
chmod +x file.sh # 添加执行权限
2.5.2 chown - 修改文件所有者
chown user:group file.txt # 修改所有者和组
2.5.3 sudo - 以超级用户权限执行
sudo command # 以root权限执行命令
2.6 压缩和解压
2.6.1 tar - 打包和解包
tar -czvf archive.tar.gz dir/ # 创建gzip压缩包
tar -xzvf archive.tar.gz # 解压gzip包
2.6.2 zip/unzip - ZIP压缩/解压
zip archive.zip file1 file2 # 创建zip压缩包
unzip archive.zip # 解压zip包
2.6.3 gzip/gunzip - GZIP压缩/解压
gzip file.txt # 压缩文件(生成file.txt.gz)
gunzip file.txt.gz # 解压文件
2.7 其他实用命令
2.7.1 find - 查找文件
find /path -name "*.txt" # 按名称查找
find . -type f -size +1M # 查找大于1M的文件
2.7.3 which/whereis - 查找命令位置
which ls # 显示ls命令的路径
whereis ls # 显示命令及其手册页位置
2.7.4 alias - 创建命令别名
alias ll='ls -alF' # 创建ll别名
2.7.5 history - 查看命令历史
history # 显示命令历史
!n # 执行历史记录中第n条命令
2.7.6 man - 查看命令手册
man ls # 查看ls命令的手册页
2.7.7 echo - 输出文本
echo "Hello" # 输出文本
echo $PATH # 输出环境变量
2.7.8 date - 显示或设置日期时间
date # 显示当前日期时间
date +"%Y-%m-%d" # 格式化输出
sudo date -s "2024-03-15 14:30:00"
3 Shell 脚本
Shell 脚本是 Linux/Unix 系统中自动化任务和系统管理的重要工具。以下是 Shell 脚本开发的全面指南:
3.1 初步了解
第一行 #!/bin/bash 称为 shebang,指定解释器
#!/bin/bash
# 这是一个注释
echo "Hello, World!"
3.2 运行方式
chmod +x script.sh # 添加执行权限
./script.sh # 直接执行bash script.sh # 指定解释器执行
sh script.sh # 使用 sh 解释器执行
source script.sh # 在当前 shell 环境中执行
3.3 变量定义与使用
name="Alice" # 定义变量
echo $name # 使用变量
echo ${name} # 推荐使用大括号readonly PI=3.14 # 只读变量
unset name # 删除变量
3.4 特殊变量
$0 # 脚本名称
$1-$9 # 脚本参数
$# # 参数个数
$* # 所有参数
$@ # 所有参数(推荐)
$? # 上条命令的退出状态
$$ # 当前进程PID
$! # 最后一个后台进程PID
3.5 字符串操作
str="Hello World"# 字符串长度
echo ${#str} # 11# 子字符串
echo ${str:0:5} # Hello# 替换
echo ${str/World/Bash} # Hello Bash# 大小写转换
echo ${str^^} # 转大写
echo ${str,,} # 转小写
3.6 数组
# 定义数组
fruits=("Apple" "Banana" "Orange")# 访问元素
echo ${fruits[0]} # Apple
echo ${fruits[@]} # 所有元素# 数组长度
echo ${#fruits[@]} # 3# 遍历数组
for fruit in "${fruits[@]}"; doecho $fruit
done
3.7 条件判断
if [ $a -eq $b ]; thenecho "a等于b"
elif [ $a -gt $b ]; thenecho "a大于b"
elseecho "a小于b"
fi
3.8 # 定义函数
greet() {local name=$1 # 局部变量echo "Hello, $name"
}# 调用函数
greet "Alice"# 返回值
add() {return $(($1 + $2))
}
add 3 5
echo $? # 8
4 综合案例
4.1 备份脚本
#!/bin/bash
# 简单备份脚本BACKUP_DIR="/backup"
SOURCE_DIR="/home/user"
DATE=$(date +%Y%m%d)if [ ! -d "$BACKUP_DIR" ]; thenmkdir -p "$BACKUP_DIR"
fitar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR" && \
echo "备份成功完成" || echo "备份失败"
4.2 系统监控脚本
#!/bin/bash
# 系统资源监控echo "=== 系统监控 ==="
echo "当前时间: $(date)"
echo "主机名: $(hostname)"
echo "=== 系统负载 ==="
uptime
echo "=== 内存使用 ==="
free -h
echo "=== 磁盘空间 ==="
df -h